Version 2.15.0-82.1.beta

Merge '2.15.0-82.0.dev' into beta
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index faad814..b6def05 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-07-27T19:27:52.638315",
+  "generated": "2021-09-01T12:41:37.776425",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -151,6 +151,12 @@
       "languageVersion": "2.12"
     },
     {
+      "name": "characters",
+      "rootUri": "../third_party/pkg/characters",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
       "name": "charcode",
       "rootUri": "../third_party/pkg/charcode",
       "packageUri": "lib/",
@@ -200,11 +206,17 @@
     },
     {
       "name": "dart2js_info",
-      "rootUri": "../third_party/pkg/dart2js_info",
+      "rootUri": "../pkg/dart2js_info",
       "packageUri": "lib/",
       "languageVersion": "2.3"
     },
     {
+      "name": "dart2js_runtime_metrics",
+      "rootUri": "../pkg/dart2js_runtime_metrics",
+      "packageUri": "lib/",
+      "languageVersion": "2.14"
+    },
+    {
       "name": "dart2js_tools",
       "rootUri": "../pkg/dart2js_tools",
       "packageUri": "lib/",
@@ -214,7 +226,7 @@
       "name": "dart2native",
       "rootUri": "../pkg/dart2native",
       "packageUri": "lib/",
-      "languageVersion": "2.7"
+      "languageVersion": "2.12"
     },
     {
       "name": "dart_internal",
@@ -244,7 +256,7 @@
       "name": "dds",
       "rootUri": "../pkg/dds",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.13"
     },
     {
       "name": "dev_compiler",
@@ -253,6 +265,12 @@
       "languageVersion": "2.12"
     },
     {
+      "name": "devtools_server",
+      "rootUri": "../third_party/devtools/devtools_server",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
       "name": "devtools_shared",
       "rootUri": "../third_party/devtools/devtools_shared",
       "packageUri": "lib/",
@@ -298,7 +316,7 @@
       "name": "front_end",
       "rootUri": "../pkg/front_end",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.13"
     },
     {
       "name": "front_end_testcases",
@@ -354,12 +372,6 @@
       "languageVersion": "2.12"
     },
     {
-      "name": "http_throttle",
-      "rootUri": "../third_party/pkg/http_throttle",
-      "packageUri": "lib/",
-      "languageVersion": "2.0"
-    },
-    {
       "name": "intl",
       "rootUri": "../third_party/pkg/intl",
       "packageUri": "lib/",
@@ -605,7 +617,7 @@
       "name": "smith",
       "rootUri": "../pkg/smith",
       "packageUri": "lib/",
-      "languageVersion": "2.3"
+      "languageVersion": "2.12"
     },
     {
       "name": "source_map_stack_trace",
@@ -647,7 +659,7 @@
       "name": "status_file",
       "rootUri": "../pkg/status_file",
       "packageUri": "lib/",
-      "languageVersion": "2.3"
+      "languageVersion": "2.12"
     },
     {
       "name": "stream_channel",
diff --git a/.packages b/.packages
index 2bd3c0a..b24526d 100644
--- a/.packages
+++ b/.packages
@@ -29,7 +29,8 @@
 convert:third_party/pkg/convert/lib
 crypto:third_party/pkg/crypto/lib
 csslib:third_party/pkg/csslib/lib
-dart2js_info:third_party/pkg/dart2js_info/lib
+dart2js_info:pkg/dart2js_info/lib
+dart2js_runtime_metrics:pkg/dart2js_runtime_metrics/lib
 dart2js_tools:pkg/dart2js_tools/lib
 dart2native:pkg/dart2native/lib
 dart_internal:pkg/dart_internal/lib
@@ -38,6 +39,7 @@
 dartdoc:third_party/pkg/dartdoc/lib
 dds:pkg/dds/lib
 dev_compiler:pkg/dev_compiler/lib
+devtools_server:third_party/devtools/devtools_server/lib
 devtools_shared:third_party/devtools/devtools_shared/lib
 diagnostic:pkg/diagnostic/lib
 expect:pkg/expect/lib
@@ -51,8 +53,6 @@
 http_io:third_party/pkg_tested/http_io/lib
 http_multi_server:third_party/pkg/http_multi_server/lib
 http_parser:third_party/pkg/http_parser/lib
-http_retry:third_party/pkg/http_retry/lib
-http_throttle:third_party/pkg/http_throttle/lib
 intl:third_party/pkg/intl/lib
 js:pkg/js/lib
 js_ast:pkg/js_ast/lib
diff --git a/BUILD.gn b/BUILD.gn
index 6c26e7e..dc70380 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -29,7 +29,6 @@
     ":dartanalyzer",
     ":dartdevc",
     ":runtime",
-    ":samples",
   ]
 }
 
@@ -42,13 +41,11 @@
   }
   deps = [
     "runtime/bin:dart",
-    "runtime/bin:entrypoints_verification_test_extension",
+    "runtime/bin:entrypoints_verification_test",
     "runtime/bin:ffi_test_dynamic_library",
     "runtime/bin:ffi_test_functions",
     "runtime/bin:process_test",
     "runtime/bin:run_vm_tests",
-    "runtime/bin:sample_extension",
-    "runtime/bin:test_extension",
     "runtime/vm:kernel_platform_files($host_toolchain)",
     "utils/kernel-service:kernel-service",
   ]
@@ -73,14 +70,6 @@
   deps = [ "runtime/bin/ffi_unit_test:run_ffi_unit_tests" ]
 }
 
-group("runtime_kernel") {
-  if (targetting_fuchsia) {
-    # Fuchsia has run_vm_tests marked testonly.
-    testonly = true
-  }
-  deps = [ ":runtime" ]
-}
-
 group("runtime_precompiled") {
   deps = [
     "runtime/bin:dart_precompiled_runtime",
@@ -126,10 +115,6 @@
   deps = [ ":create_sdk" ]
 }
 
-group("samples") {
-  deps = [ "runtime/bin:sample_extension" ]
-}
-
 # This rule and the compressed_observatory_archive rule are for the Fuchsia
 # bots that pre-build the Observatory. They copy the observatory tar files to
 # the root build output directory for convenient access by the Fuchsia buildbot
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b1dcdb8..8d80768 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,91 @@
+## 2.15.0
+
+### Language
+
+- Annotations on type parameters of classes can no longer refer to class members
+  without a prefix.  For example, this used to be permitted:
+
+  ```dart
+  class C<@Annotation(foo) T> {
+    static void foo() {}
+  }
+  ```
+
+  Now, the reference must be qualified with the class name, i.e.:
+
+  ```dart
+  class C<@Annotation(C.foo) T> {
+    static void foo() {}
+  }
+  ```
+
+  This brings the implementation behavior in line with the spec.
+
+- Initializer expressions on implicitly typed condition variables can now
+  contribute to type promotion.  For example, this program no longer produces a
+  compile-time error:
+
+  ```dart
+  f(int? i) {
+    var iIsNull = i == null;
+    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
+  due to a bug ([#1785][]) which prevented the initializer expression (`i ==
+  null`) from being accounted for when the variable in question (`iIsNull`)
+  lacked an explicit type.
+
+  To avoid causing problems for packages that are intended to work with older
+  versions of Dart, the fix only takes effect when the "constructor tearoffs"
+  language feature is enabled.
+
+[#1785]: https://github.com/dart-lang/language/issues/1785
+
+- Restrictions on members of a class with a constant constructor are relaxed
+  such that they only apply when the class has a _generative_ constant
+  constructor.  For example, this used to be an error, but is now permitted:
+
+  ```dart
+  abstract class A {
+    var v1;
+    late final v2 = Random().nextInt(10);
+    late final v3;
+    const factory A() = B;
+  }
+
+  class B implements A {
+    get v1 => null;
+    set v1(_) => throw 'Cannot mutate B.v1';
+    final v2 = 0;
+    final v3;
+    set v3(_) => throw 'Cannot initialize B.v3';
+    const B([this.v3 = 1]);
+  }
+  ```
+
+  This implements a relaxation of the specified rule for a `late final`
+  instance variable, and it brings the implementation behavior in line with
+  the specification in all other cases.
+
+### Tools
+
+#### Dart command line
+
+- **Breaking Change** [#46100][]: The standalone `dart2native` tool has been
+  removed as previously announced. Its replacements are the
+  `dart compile exe` and `dart compile aot-snapshot` commands, which offer the
+  same functionality.
+
+#### Dart VM
+
+- **Breaking Change** [#45451][]: Support for `dart-ext:`-style native
+  extensions has been removed as previously announced. Use `dart:ffi` to bind
+  to native libraries instead.
+
 ## 2.14.0
 
 ### Language
@@ -57,6 +145,11 @@
 - Added `void unawaited(Future)` top-level function to deal with the
   `unawaited_futures` lint.
 
+#### `dart:cli`
+
+- The experimental `waitFor` functionality, and the library containing only that
+  function, are now deprecated.
+
 #### `dart:core`
 
 - Introduce `Enum` interface implemented by all `enum` declarations.
@@ -82,6 +175,7 @@
 - `convertNativeToDart_Dictionary()` now converts objects recursively, this
   fixes APIs like MediaStreamTrack.getCapabilities that convert between Maps and
   browser Dictionaries. [#44319]
+- Added some access-control HTTP header names to `HttpHeaders`.
 
 [#44319]: https://github.com/dart-lang/sdk/issues/44319
 
@@ -90,6 +184,7 @@
 - BREAKING CHANGE (for pre-migrated null safe code): `HttpClient`'s
   `.authenticate` and `.authenticateProxy` setter callbacks must now accept a
   nullable `realm` argument.
+- Added some access-control HTTP header names to `HttpHeaders`.
 
 #### `dart:typed_data`
 
@@ -159,9 +254,32 @@
 
 #### Linter
 
-Updated the Linter to `1.8.0`, which includes changes that
-
-
+Updated the Linter to `1.10.0`, which includes changes that
+- improves regular expression parsing performance for common checks
+  (`camel_case_types`, `file_names`, etc.).
+- (internal) migrates to analyzer 2.1.0 APIs.
+- fixes false positive in `use_build_context_synchronously` in awaits inside
+  anonymous functions.
+- fixes `overridden_fields` false positive w/ static fields.
+- fixes false positive in `avoid_null_checks_in_equality_operators` w/
+  non-nullable params.
+- fixes false positive for deferred imports in `prefer_const_constructors`.
+- marks `avoid_dynamic_calls` stable.
+- (internal) removes unused `MockPubVisitor` and `MockRule` classes.
+- fixes a `prefer_void_to_null` false positive w/ overridden properties.
+- (internal) removes references to `NodeLintRule` in lint rule declarations.
+- fixes `prefer_void_to_null` false positives on overriding returns.
+- fixes `prefer_generic_function_type_aliases` false positives w/ incomplete
+  statements.
+- fixes false positives for `prefer_initializing_formals` with factory constructors.
+- fixes `void_checks` false positives with incomplete source.
+- updates `unnecessary_getters_setters` to only flag the getter.
+- improves messages for `avoid_renaming_method_parameters`.
+- fixes false positives in `prefer_void_to_null`.
+- fixes false positives in `omit_local_variable_types`.
+- fixes false positives in `use_rethrow_when_possible`.
+- improves performance for `annotate_overrides`, `prefer_contains`, and
+  `prefer_void_to_null`.
 - improve performance for `prefer_is_not_empty`.
 - fix false positives in `no_logic_in_create_state`.
 - improve `package_names` to allow dart identifiers as package names.
@@ -171,7 +289,7 @@
 - fix `curly_braces_in_flow_control_structures` to properly flag terminating `else-if`
   blocks.
 - improve `always_specify_types` to support type aliases.
-- fix a false positive in `unnecessary_string_interpolations` w/ nullable interpolated 
+- fix a false positive in `unnecessary_string_interpolations` w/ nullable interpolated
   strings
 - fix a false positive in `avoid_function_literals_in_foreach_calls` for nullable
   iterables.
@@ -259,7 +377,7 @@
     `--legacy-javascript` flag will let you opt out of this update, but this
     flag will be removed in a future release. Modern browsers will not be
     affected, as Dart2JS continues to support [last two major releases][1] of
-    Edge, Safari, Firefox, and Chrome. 
+    Edge, Safari, Firefox, and Chrome.
 
 [#46545]: https://github.com/dart-lang/sdk/issues/46545
 [1]: https://dart.dev/faq#q-what-browsers-do-you-support-as-javascript-compilation-targets
diff --git a/DEPS b/DEPS
index 6cd7c74..503c2f8 100644
--- a/DEPS
+++ b/DEPS
@@ -39,13 +39,13 @@
 
   # Checked-in SDK version. The checked-in SDK is a Dart SDK distribution in a
   # cipd package used to run Dart scripts in the build and test infrastructure.
-  "sdk_tag": "version:2.14.0-293.0.dev",
+  "sdk_tag": "version:2.14.0-377.4.beta",
 
   # 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": "dfab47fd11fb47a8475e77765fdb183a8002fe4e",
-  "co19_2_rev": "d6e96f6d922b17fcf2e021e0f2b28835c861eb17",
+  "co19_rev": "a4f77a02a3676b1c2e7390c860cb0486c8515d3f",
+  "co19_2_rev": "3e1ea1af9ef293d7f6a8f3332b5c71c7072a30e0",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
   "benchmarks_internal_rev": "076df10d9b77af337f2d8029725787155eb1cd52",
@@ -73,7 +73,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "bf4c8796881b62fd5d3f6d86ab43014f9651eb20",
-  "async_rev": "25a7e2ec39c03622b86918cb9ce3e7d00dd283d1",
+  "async_rev": "ecb3835c5b746f7762327d5f57bdc92e0a2e0450",
   "bazel_worker_rev": "0885637b037979afbf5bcd05fd748b309fd669c0",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -81,6 +81,7 @@
   "boringssl_rev" : "1607f54fed72c6589d560254626909a64124f091",
   "browser-compat-data_tag": "v1.0.22",
   "browser_launcher_rev": "c6cc1025d6901926cf022e144ba109677e3548f1",
+  "characters_rev": "6ec389c4dfa8fce14820dc5cbf6e693202e7e052",
   "charcode_rev": "84ea427711e24abf3b832923959caa7dd9a8514b",
   "chrome_rev" : "19997",
   "cli_util_rev" : "8c504de5deb08fe32ecf51f9662bb37d8c708e57",
@@ -89,7 +90,6 @@
   "convert_rev": "e063fdca4bebffecbb5e6aa5525995120982d9ce",
   "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
   "csslib_rev": "e411d862fd8cc50415c1badf2632e017373b3f47",
-  "dart2js_info_rev" : "e0acfeb5affdf94c53067e68bd836adf589628fd",
 
   # 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`
@@ -103,10 +103,10 @@
   #     and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_rev": "06bfd19593ed84dd288f67e02c6a753e6516288a",
+  "dart_style_rev": "14d9b6fd58cc4744676c12be3cc5eee2a779db82",
 
-  "dartdoc_rev" : "c9621b92c738ec21a348cc2de032858276e9c774",
-  "devtools_rev" : "64cffbed6366329ad05e44d48fa2298367643bb6",
+  "dartdoc_rev" : "348cbd7204645f99074bf7873af8b6ba6d34ceb0",
+  "devtools_rev" : "2b47d9ed486479153ca2fd038000950674ed1beb",
   "jsshell_tag": "version:88.0",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
@@ -117,22 +117,21 @@
   "http_multi_server_rev": "de1b312164c24a1690b46c6e97bd47eff40c4649",
   "http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
   "http_rev": "778174bca2c13becd88ef3353309190b1e8b9479",
-  "http_throttle_tag" : "1.0.2",
   "icu_rev" : "81d656878ec611cb0b42d52c82e9dae93920d9ba",
   "idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
   "intl_tag": "0.17.0-nullsafety",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.8.0",
+  "linter_tag": "1.10.0",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
   "logging_rev": "575781ef196e4fed4fb737e38fb4b73d62727187",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "markdown_rev": "9c4beaac96d8f008078e00b027915f81b665d2de",
-  "matcher_rev": "b411b22ec2437ba206c7a3006bbaeb519bd343d1",
+  "matcher_rev": "6ba4a6d68bdfacff3d572c9ea98333dfc66fd6bf",
   "mime_rev": "c931f4bed87221beaece356494b43731445ce7b8",
   "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
   "oauth2_rev": "7cd3284049fe5badbec9f2bea2afc41d14c01057",
-  "package_config_rev": "a84c0d45401f215fbe9384df923a38f4022a3c45",
+  "package_config_rev": "fb736aa12316dd2d882b202a438a6946a4b4bea0",
   "path_rev": "c20d73c3516d3a0061c90f14b761ff532b9bf707",
   "pedantic_rev": "66f2f6c27581c7936482e83be80b27be2719901c",
   "platform_rev": "c20e6fa315e9f8820e51c0ae721f63aff33b8e17",
@@ -140,7 +139,7 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "70b1a4f9229a36bac6340ec7eae2b2068baac96c",
+  "pub_rev": "cd7a43f2109f7e5eb22e73c7f4e15d25fd57598e",
   "pub_semver_rev": "f50d80ef10c4b2fa5f4c8878036a4d9342c0cc82",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
@@ -154,13 +153,13 @@
   "source_maps-0.9.4_rev": "38524",
   "source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
   "source_span_rev": "1be3c44045a06dff840d2ed3a13e6082d7a03a23",
-  "sse_tag": "d505b383768889a1e3e90097684e929a9e6d6b8f",
-  "stack_trace_tag": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
-  "stream_channel_tag": "d7251e61253ec389ee6e045ee1042311bced8f1d",
+  "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
+  "stack_trace_rev": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
+  "stream_channel_rev": "d7251e61253ec389ee6e045ee1042311bced8f1d",
   "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
   "sync_http_rev": "b59c134f2e34d12acac110d4f17f83e5a7db4330",
-  "test_descriptor_tag": "2.0.0",
-  "test_process_tag": "2.0.0",
+  "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
+  "test_process_rev": "7c73ec8a8a6e0e63d0ec27d70c21ca4323fb5e8f",
   "term_glyph_rev": "6a0f9b6fb645ba75e7a00a4e20072678327a0347",
   "test_reflective_loader_rev": "54e930a11c372683792e22bddad79197728c91ce",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
@@ -172,7 +171,7 @@
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
   "web_socket_channel_rev": "6448ce532445a8a458fa191d9346df071ae0acad",
   "WebCore_rev": "fb11e887f77919450e497344da570d780e078bc8",
-  "webdev_rev": "50fe70a3137d9665fbe94cd34af5277b65d95079",
+  "webdev_rev": "832b096c0c24798d3df46faa7b7661fe930573c2",
   "webkit_inspection_protocol_rev": "dd6fb5d8b536e19cedb384d0bbf1f5631923f1e8",
   "yaml_rev": "b4c4411631bda556ce9a45af1ab0eecaf9f3ac53",
   "zlib_rev": "bf44340d1b6be1af8950bbdf664fec0cf5a831cc",
@@ -329,6 +328,8 @@
   Var("dart_root") + "/third_party/pkg/boolean_selector":
       Var("dart_git") + "boolean_selector.git" +
       "@" + Var("boolean_selector_rev"),
+  Var("dart_root") + "/third_party/pkg/characters":
+      Var("dart_git") + "characters.git" + "@" + Var("characters_rev"),
   Var("dart_root") + "/third_party/pkg/charcode":
       Var("dart_git") + "charcode.git" + "@" + Var("charcode_rev"),
   Var("dart_root") + "/third_party/pkg/cli_util":
@@ -345,8 +346,6 @@
       Var("dart_git") + "csslib.git" + "@" + Var("csslib_rev"),
   Var("dart_root") + "/third_party/pkg_tested/dart_style":
       Var("dart_git") + "dart_style.git" + "@" + Var("dart_style_rev"),
-  Var("dart_root") + "/third_party/pkg/dart2js_info":
-      Var("dart_git") + "dart2js_info.git" + "@" + Var("dart2js_info_rev"),
   Var("dart_root") + "/third_party/pkg/dartdoc":
       Var("dart_git") + "dartdoc.git" + "@" + Var("dartdoc_rev"),
   Var("dart_root") + "/third_party/pkg/ffi":
@@ -369,9 +368,6 @@
       "@" + Var("http_multi_server_rev"),
   Var("dart_root") + "/third_party/pkg/http_parser":
       Var("dart_git") + "http_parser.git" + "@" + Var("http_parser_rev"),
-  Var("dart_root") + "/third_party/pkg/http_throttle":
-      Var("dart_git") + "http_throttle.git" +
-      "@" + Var("http_throttle_tag"),
   Var("dart_root") + "/third_party/pkg/intl":
       Var("dart_git") + "intl.git" + "@" + Var("intl_tag"),
   Var("dart_root") + "/third_party/pkg/json_rpc_2":
@@ -433,12 +429,12 @@
       Var("dart_git") + "source_map_stack_trace.git" +
       "@" + Var("source_map_stack_trace_rev"),
   Var("dart_root") + "/third_party/pkg/sse":
-      Var("dart_git") + "sse.git" + "@" + Var("sse_tag"),
+      Var("dart_git") + "sse.git" + "@" + Var("sse_rev"),
   Var("dart_root") + "/third_party/pkg/stack_trace":
-      Var("dart_git") + "stack_trace.git" + "@" + Var("stack_trace_tag"),
+      Var("dart_git") + "stack_trace.git" + "@" + Var("stack_trace_rev"),
   Var("dart_root") + "/third_party/pkg/stream_channel":
       Var("dart_git") + "stream_channel.git" +
-      "@" + Var("stream_channel_tag"),
+      "@" + Var("stream_channel_rev"),
   Var("dart_root") + "/third_party/pkg/string_scanner":
       Var("dart_git") + "string_scanner.git" +
       "@" + Var("string_scanner_rev"),
@@ -449,9 +445,9 @@
   Var("dart_root") + "/third_party/pkg/test":
       Var("dart_git") + "test.git" + "@" + Var("test_rev"),
   Var("dart_root") + "/third_party/pkg/test_descriptor":
-      Var("dart_git") + "test_descriptor.git" + "@" + Var("test_descriptor_tag"),
+      Var("dart_git") + "test_descriptor.git" + "@" + Var("test_descriptor_rev"),
   Var("dart_root") + "/third_party/pkg/test_process":
-      Var("dart_git") + "test_process.git" + "@" + Var("test_process_tag"),
+      Var("dart_git") + "test_process.git" + "@" + Var("test_process_rev"),
   Var("dart_root") + "/third_party/pkg/test_reflective_loader":
       Var("dart_git") + "test_reflective_loader.git" +
       "@" + Var("test_reflective_loader_rev"),
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index ec4e5d2..99ccd1b 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # 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.
@@ -10,11 +11,15 @@
 import imp
 import os
 import os.path
+from typing import Callable
 import scm
 import subprocess
 import tempfile
 import platform
 
+USE_PYTHON3 = True
+
+
 def is_cpp_file(path):
     return path.endswith('.cc') or path.endswith('.h')
 
@@ -68,7 +73,7 @@
                  identification,
                  extension,
                  windows,
-                 hasFormatErrors,
+                 hasFormatErrors: Callable[[str, str], bool],
                  should_skip=lambda path: False):
     local_root = input_api.change.RepositoryRoot()
     upstream = input_api.change._upstream
@@ -105,7 +110,6 @@
 
 def _CheckDartFormat(input_api, output_api):
     local_root = input_api.change.RepositoryRoot()
-    upstream = input_api.change._upstream
     utils = imp.load_source('utils',
                             os.path.join(local_root, 'tools', 'utils.py'))
 
@@ -119,7 +123,7 @@
         print('WARNING: dart not found: %s' % (dart))
         return []
 
-    def HasFormatErrors(filename=None, contents=None):
+    def HasFormatErrors(filename: str = None, contents: str = None):
         # Don't look for formatting errors in multitests. Since those are very
         # sensitive to whitespace, many cannot be formatted with dartfmt without
         # breaking them.
@@ -135,11 +139,28 @@
             '--set-exit-if-changed',
             '--output=none',
             '--summary=none',
-            filename,
         ]
 
-        process = subprocess.Popen(
-            args, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+        # TODO(https://github.com/dart-lang/sdk/issues/46947): Remove this hack.
+        if windows and contents:
+            f = tempfile.NamedTemporaryFile(
+                encoding='utf-8',
+                delete=False,
+                mode='w',
+                suffix='.dart',
+            )
+            try:
+                f.write(contents)
+                f.close()
+                args.append(f.name)
+                process = subprocess.run(args)
+            finally:
+                os.unlink(f.name)
+        elif contents:
+            process = subprocess.run(args, input=contents, text=True)
+        else:
+            args.append(filename)
+            process = subprocess.run(args)
 
         # Check for exit code 1 explicitly to distinguish it from a syntax error
         # in the file (exit code 65). The repo contains many Dart files that are
@@ -158,8 +179,8 @@
             output_api.PresubmitError(
                 'File output does not match dartfmt.\n'
                 'Fix these issues with:\n'
-                '%s -w%s%s' % (prebuilt_dartfmt, lineSep,
-                               lineSep.join(unformatted_files)))
+                '%s format %s%s' %
+                (dart, lineSep, lineSep.join(unformatted_files)))
         ]
 
     return []
@@ -167,7 +188,6 @@
 
 def _CheckStatusFiles(input_api, output_api):
     local_root = input_api.change.RepositoryRoot()
-    upstream = input_api.change._upstream
     utils = imp.load_source('utils',
                             os.path.join(local_root, 'tools', 'utils.py'))
 
@@ -188,9 +208,7 @@
 
     def HasFormatErrors(filename=None, contents=None):
         args = [dart, lint] + (['-t'] if contents else [filename])
-        process = subprocess.Popen(
-            args, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-        process.communicate(input=contents)
+        process = subprocess.run(args, input=contents, text=True)
         return process.returncode != 0
 
     def should_skip(path):
@@ -230,12 +248,8 @@
     dart = utils.CheckedInSdkExecutable()
     generate = os.path.join(local_root, 'tools', 'generate_package_config.dart')
     cmd = [dart, generate, '--check']
-    pipe = subprocess.Popen(cmd,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE,
-                            shell=utils.IsWindows())
-    output = pipe.communicate()
-    if pipe.returncode != 0:
+    result = subprocess.run(cmd, shell=utils.IsWindows())
+    if result.returncode != 0:
         return [
             output_api.PresubmitError(
                 'File .dart_tool/package_config.json is out of date.\n'
@@ -255,7 +269,7 @@
     try:
         input_api.subprocess.check_output(['gclient', 'verify'])
         return []
-    except input_api.subprocess.CalledProcessError, error:
+    except input_api.subprocess.CalledProcessError as error:
         return [
             output_api.PresubmitError(
                 'DEPS file must have only dependencies from allowed hosts.',
diff --git a/benchmarks/EventLoopLatencyRegexp/dart/EventLoopLatencyRegexp.dart b/benchmarks/EventLoopLatencyRegexp/dart/EventLoopLatencyRegexp.dart
new file mode 100644
index 0000000..40f44a5
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart/EventLoopLatencyRegexp.dart
@@ -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 file.
+
+import 'dart:isolate';
+
+import 'regexp_benchmark.dart';
+import 'latency.dart';
+
+main() async {
+  final exitPort = ReceivePort();
+  final exitFuture = exitPort.first;
+  final isolate = await Isolate.spawn(run, null, onExit: exitPort.sendPort);
+
+  // Measure event loop latency.
+  const tickDuration = const Duration(milliseconds: 1);
+  const numberOfTicks = 8 * 1000; // min 8 seconds.
+  final EventLoopLatencyStats stats =
+      await measureEventLoopLatency(tickDuration, numberOfTicks);
+
+  // Kill isolate & wait until it's dead.
+  isolate.kill(priority: Isolate.immediate);
+  await exitFuture;
+
+  // Report event loop latency statistics.
+  stats.report('EventLoopLatencyRegexp');
+}
+
+void run(dynamic msg) {
+  while (true) {
+    RegexpBenchmark().run();
+  }
+}
diff --git a/benchmarks/EventLoopLatencyRegexp/dart/latency.dart b/benchmarks/EventLoopLatencyRegexp/dart/latency.dart
new file mode 100644
index 0000000..5da9f4e
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart/latency.dart
@@ -0,0 +1,135 @@
+// 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.
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:math' as math;
+import 'dart:typed_data';
+
+/// Measures event loop responsiveness.
+///
+/// Schedules new timer events, [tickDuration] in the future, and measures how
+/// long it takes for these events to actually arrive.
+///
+/// Runs [numberOfTicks] times before completing with [EventLoopLatencyStats].
+Future<EventLoopLatencyStats> measureEventLoopLatency(
+    Duration tickDuration, int numberOfTicks) {
+  final completer = Completer<EventLoopLatencyStats>();
+
+  final tickDurationInUs = tickDuration.inMicroseconds;
+  final buffer = _TickLatencies(numberOfTicks);
+  final sw = Stopwatch()..start();
+  int lastTimestamp = 0;
+
+  void trigger() {
+    final int currentTimestamp = sw.elapsedMicroseconds;
+
+    // Every tick we missed to schedule we'll add with difference to when we
+    // would've scheduled it and when we became responsive again.
+    bool done = false;
+    while (!done && lastTimestamp < (currentTimestamp - tickDurationInUs)) {
+      done = !buffer.add(currentTimestamp - lastTimestamp - tickDurationInUs);
+      lastTimestamp += tickDurationInUs;
+    }
+
+    if (!done) {
+      lastTimestamp = currentTimestamp;
+      Timer(tickDuration, trigger);
+    } else {
+      completer.complete(buffer.makeStats());
+    }
+  }
+
+  Timer(tickDuration, trigger);
+
+  return completer.future;
+}
+
+/// Result of the event loop latency measurement.
+class EventLoopLatencyStats {
+  /// Minimum latency between scheduling a tick and it's arrival (in ms).
+  final double minLatency;
+
+  /// Average latency between scheduling a tick and it's arrival (in ms).
+  final double avgLatency;
+
+  /// Maximum latency between scheduling a tick and it's arrival (in ms).
+  final double maxLatency;
+
+  /// The 50th percentile (median) (in ms).
+  final double percentile50th;
+
+  /// The 90th percentile (in ms).
+  final double percentile90th;
+
+  /// The 95th percentile (in ms).
+  final double percentile95th;
+
+  /// The 99th percentile (in ms).
+  final double percentile99th;
+
+  /// The maximum RSS of the process.
+  final int maxRss;
+
+  EventLoopLatencyStats(
+      this.minLatency,
+      this.avgLatency,
+      this.maxLatency,
+      this.percentile50th,
+      this.percentile90th,
+      this.percentile95th,
+      this.percentile99th,
+      this.maxRss);
+
+  void report(String name) {
+    print('$name.Min(RunTimeRaw): $minLatency ms.');
+    print('$name.Avg(RunTimeRaw): $avgLatency ms.');
+    print('$name.Percentile50(RunTimeRaw): $percentile50th ms.');
+    print('$name.Percentile90(RunTimeRaw): $percentile90th ms.');
+    print('$name.Percentile95(RunTimeRaw): $percentile95th ms.');
+    print('$name.Percentile99(RunTimeRaw): $percentile99th ms.');
+    print('$name.Max(RunTimeRaw): $maxLatency ms.');
+    print('$name.MaxRss(MemoryUse): $maxRss');
+  }
+}
+
+/// Accumulates tick latencies and makes statistics for it.
+class _TickLatencies {
+  final Uint64List _timestamps;
+  int _index = 0;
+
+  _TickLatencies(int numberOfTicks) : _timestamps = Uint64List(numberOfTicks);
+
+  /// Returns `true` while the buffer has not been filled yet.
+  bool add(int latencyInUs) {
+    _timestamps[_index++] = latencyInUs;
+    return _index < _timestamps.length;
+  }
+
+  EventLoopLatencyStats makeStats() {
+    if (_index != _timestamps.length) {
+      throw 'Buffer has not been fully filled yet.';
+    }
+
+    _timestamps.sort();
+    final length = _timestamps.length;
+    final double avg = _timestamps.fold(0, (int a, int b) => a + b) / length;
+    final int min = _timestamps.fold(0x7fffffffffffffff, math.min);
+    final int max = _timestamps.fold(0, math.max);
+    final percentile50th = _timestamps[50 * length ~/ 100];
+    final percentile90th = _timestamps[90 * length ~/ 100];
+    final percentile95th = _timestamps[95 * length ~/ 100];
+    final percentile99th = _timestamps[99 * length ~/ 100];
+
+    return EventLoopLatencyStats(
+        min / 1000,
+        avg / 1000,
+        max / 1000,
+        percentile50th / 1000,
+        percentile90th / 1000,
+        percentile95th / 1000,
+        percentile99th / 1000,
+        ProcessInfo.maxRss);
+  }
+}
diff --git a/benchmarks/EventLoopLatencyRegexp/dart/regexp_benchmark.dart b/benchmarks/EventLoopLatencyRegexp/dart/regexp_benchmark.dart
new file mode 100644
index 0000000..e3389a8
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart/regexp_benchmark.dart
@@ -0,0 +1,14 @@
+// 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:math';
+import 'dart:convert';
+
+class RegexpBenchmark {
+  void run() {
+    final re = RegExp(r'(x+)*y');
+    final s = 'x' * 26 + '';
+    re.allMatches(s).iterator.moveNext();
+  }
+}
diff --git a/benchmarks/EventLoopLatencyRegexp/dart2/EventLoopLatencyRegexp.dart b/benchmarks/EventLoopLatencyRegexp/dart2/EventLoopLatencyRegexp.dart
new file mode 100644
index 0000000..11940c4
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart2/EventLoopLatencyRegexp.dart
@@ -0,0 +1,35 @@
+// 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
+
+import 'dart:isolate';
+
+import 'regexp_benchmark.dart';
+import 'latency.dart';
+
+main() async {
+  final exitPort = ReceivePort();
+  final exitFuture = exitPort.first;
+  final isolate = await Isolate.spawn(run, null, onExit: exitPort.sendPort);
+
+  // Measure event loop latency.
+  const tickDuration = const Duration(milliseconds: 1);
+  const numberOfTicks = 8 * 1000; // min 8 seconds.
+  final EventLoopLatencyStats stats =
+      await measureEventLoopLatency(tickDuration, numberOfTicks);
+
+  // Kill isolate & wait until it's dead.
+  isolate.kill(priority: Isolate.immediate);
+  await exitFuture;
+
+  // Report event loop latency statistics.
+  stats.report('EventLoopLatencyRegexp');
+}
+
+void run(dynamic msg) {
+  while (true) {
+    RegexpBenchmark().run();
+  }
+}
diff --git a/benchmarks/EventLoopLatencyRegexp/dart2/latency.dart b/benchmarks/EventLoopLatencyRegexp/dart2/latency.dart
new file mode 100644
index 0000000..44ecae6
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart2/latency.dart
@@ -0,0 +1,137 @@
+// 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
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:math' as math;
+import 'dart:typed_data';
+
+/// Measures event loop responsiveness.
+///
+/// Schedules new timer events, [tickDuration] in the future, and measures how
+/// long it takes for these events to actually arrive.
+///
+/// Runs [numberOfTicks] times before completing with [EventLoopLatencyStats].
+Future<EventLoopLatencyStats> measureEventLoopLatency(
+    Duration tickDuration, int numberOfTicks) {
+  final completer = Completer<EventLoopLatencyStats>();
+
+  final tickDurationInUs = tickDuration.inMicroseconds;
+  final buffer = _TickLatencies(numberOfTicks);
+  final sw = Stopwatch()..start();
+  int lastTimestamp = 0;
+
+  void trigger() {
+    final int currentTimestamp = sw.elapsedMicroseconds;
+
+    // Every tick we missed to schedule we'll add with difference to when we
+    // would've scheduled it and when we became responsive again.
+    bool done = false;
+    while (!done && lastTimestamp < (currentTimestamp - tickDurationInUs)) {
+      done = !buffer.add(currentTimestamp - lastTimestamp - tickDurationInUs);
+      lastTimestamp += tickDurationInUs;
+    }
+
+    if (!done) {
+      lastTimestamp = currentTimestamp;
+      Timer(tickDuration, trigger);
+    } else {
+      completer.complete(buffer.makeStats());
+    }
+  }
+
+  Timer(tickDuration, trigger);
+
+  return completer.future;
+}
+
+/// Result of the event loop latency measurement.
+class EventLoopLatencyStats {
+  /// Minimum latency between scheduling a tick and it's arrival (in ms).
+  final double minLatency;
+
+  /// Average latency between scheduling a tick and it's arrival (in ms).
+  final double avgLatency;
+
+  /// Maximum latency between scheduling a tick and it's arrival (in ms).
+  final double maxLatency;
+
+  /// The 50th percentile (median) (in ms).
+  final double percentile50th;
+
+  /// The 90th percentile (in ms).
+  final double percentile90th;
+
+  /// The 95th percentile (in ms).
+  final double percentile95th;
+
+  /// The 99th percentile (in ms).
+  final double percentile99th;
+
+  /// The maximum RSS of the process.
+  final int maxRss;
+
+  EventLoopLatencyStats(
+      this.minLatency,
+      this.avgLatency,
+      this.maxLatency,
+      this.percentile50th,
+      this.percentile90th,
+      this.percentile95th,
+      this.percentile99th,
+      this.maxRss);
+
+  void report(String name) {
+    print('$name.Min(RunTimeRaw): $minLatency ms.');
+    print('$name.Avg(RunTimeRaw): $avgLatency ms.');
+    print('$name.Percentile50(RunTimeRaw): $percentile50th ms.');
+    print('$name.Percentile90(RunTimeRaw): $percentile90th ms.');
+    print('$name.Percentile95(RunTimeRaw): $percentile95th ms.');
+    print('$name.Percentile99(RunTimeRaw): $percentile99th ms.');
+    print('$name.Max(RunTimeRaw): $maxLatency ms.');
+    print('$name.MaxRss(MemoryUse): $maxRss');
+  }
+}
+
+/// Accumulates tick latencies and makes statistics for it.
+class _TickLatencies {
+  final Uint64List _timestamps;
+  int _index = 0;
+
+  _TickLatencies(int numberOfTicks) : _timestamps = Uint64List(numberOfTicks);
+
+  /// Returns `true` while the buffer has not been filled yet.
+  bool add(int latencyInUs) {
+    _timestamps[_index++] = latencyInUs;
+    return _index < _timestamps.length;
+  }
+
+  EventLoopLatencyStats makeStats() {
+    if (_index != _timestamps.length) {
+      throw 'Buffer has not been fully filled yet.';
+    }
+
+    _timestamps.sort();
+    final length = _timestamps.length;
+    final double avg = _timestamps.fold(0, (int a, int b) => a + b) / length;
+    final int min = _timestamps.fold(0x7fffffffffffffff, math.min);
+    final int max = _timestamps.fold(0, math.max);
+    final percentile50th = _timestamps[50 * length ~/ 100];
+    final percentile90th = _timestamps[90 * length ~/ 100];
+    final percentile95th = _timestamps[95 * length ~/ 100];
+    final percentile99th = _timestamps[99 * length ~/ 100];
+
+    return EventLoopLatencyStats(
+        min / 1000,
+        avg / 1000,
+        max / 1000,
+        percentile50th / 1000,
+        percentile90th / 1000,
+        percentile95th / 1000,
+        percentile99th / 1000,
+        ProcessInfo.maxRss);
+  }
+}
diff --git a/benchmarks/EventLoopLatencyRegexp/dart2/regexp_benchmark.dart b/benchmarks/EventLoopLatencyRegexp/dart2/regexp_benchmark.dart
new file mode 100644
index 0000000..6047117
--- /dev/null
+++ b/benchmarks/EventLoopLatencyRegexp/dart2/regexp_benchmark.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.
+
+// @dart=2.9
+
+import 'dart:math';
+import 'dart:convert';
+
+class RegexpBenchmark {
+  void run() {
+    final re = RegExp(r'(x+)*y');
+    final s = 'x' * 26 + '';
+    re.allMatches(s).iterator.moveNext();
+  }
+}
diff --git a/benchmarks/IsolateFibonacci/dart/IsolateFibonacci.dart b/benchmarks/IsolateFibonacci/dart/IsolateFibonacci.dart
new file mode 100644
index 0000000..84b7572
--- /dev/null
+++ b/benchmarks/IsolateFibonacci/dart/IsolateFibonacci.dart
@@ -0,0 +1,66 @@
+// 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 'dart:isolate';
+import 'dart:math';
+
+import 'package:expect/expect.dart';
+
+// Implements recursive summation via tail calls:
+//   fib(n) => n <= 1 ? 1
+//                    : fib(n-1) + fib(n-2);
+Future fibonacciRecursive(List args) async {
+  final SendPort port = args[0];
+  final n = args[1];
+  if (n <= 1) {
+    port.send(1);
+    return;
+  }
+  final left = ReceivePort();
+  final right = ReceivePort();
+  await Future.wait([
+    Isolate.spawn(fibonacciRecursive, [left.sendPort, n - 1]),
+    Isolate.spawn(fibonacciRecursive, [right.sendPort, n - 2]),
+  ]);
+  final results = await Future.wait([left.first, right.first]);
+  port.send(results[0] + results[1]);
+}
+
+Future<void> main() async {
+  final rpWarmup = ReceivePort();
+  final rpRun = ReceivePort();
+  final int nWarmup = 17; // enough runs to trigger optimized compilation
+  final int nWarmupFactorial = 2584;
+  // With --enable-isolate-groups runs for about 8 seconds.
+  // Should not be run witout --enable-isolate-groups as it would be too slow.
+  final int n = 21;
+  final int nFactorial = 17711;
+  final beforeRss = ProcessInfo.currentRss;
+
+  int maxRss = beforeRss;
+  final rssTimer = Timer.periodic(const Duration(milliseconds: 10), (_) {
+    maxRss = max(ProcessInfo.currentRss, maxRss);
+  });
+
+  final watch = Stopwatch();
+  watch.start();
+
+  // For the benefit of enable-isolate-groups configuration, warm up target
+  // isolate code by running couple iterations in the main isolate.
+  await Isolate.spawn(fibonacciRecursive, [rpWarmup.sendPort, nWarmup]);
+  Expect.equals(nWarmupFactorial, await rpWarmup.first);
+
+  final warmup = watch.elapsedMicroseconds;
+
+  await Isolate.spawn(fibonacciRecursive, [rpRun.sendPort, n]);
+  Expect.equals(nFactorial, await rpRun.first);
+
+  final done = watch.elapsedMicroseconds;
+
+  print('IsolateFibonacci_$n.Calculation(RunTimeRaw): ${done-warmup} us.');
+  print('IsolateFibonacci_$n.DeltaPeak(MemoryUse): ${maxRss-beforeRss}');
+  rssTimer.cancel();
+}
diff --git a/benchmarks/IsolateFibonacci/dart2/IsolateFibonacci.dart b/benchmarks/IsolateFibonacci/dart2/IsolateFibonacci.dart
new file mode 100644
index 0000000..84b7572
--- /dev/null
+++ b/benchmarks/IsolateFibonacci/dart2/IsolateFibonacci.dart
@@ -0,0 +1,66 @@
+// 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 'dart:isolate';
+import 'dart:math';
+
+import 'package:expect/expect.dart';
+
+// Implements recursive summation via tail calls:
+//   fib(n) => n <= 1 ? 1
+//                    : fib(n-1) + fib(n-2);
+Future fibonacciRecursive(List args) async {
+  final SendPort port = args[0];
+  final n = args[1];
+  if (n <= 1) {
+    port.send(1);
+    return;
+  }
+  final left = ReceivePort();
+  final right = ReceivePort();
+  await Future.wait([
+    Isolate.spawn(fibonacciRecursive, [left.sendPort, n - 1]),
+    Isolate.spawn(fibonacciRecursive, [right.sendPort, n - 2]),
+  ]);
+  final results = await Future.wait([left.first, right.first]);
+  port.send(results[0] + results[1]);
+}
+
+Future<void> main() async {
+  final rpWarmup = ReceivePort();
+  final rpRun = ReceivePort();
+  final int nWarmup = 17; // enough runs to trigger optimized compilation
+  final int nWarmupFactorial = 2584;
+  // With --enable-isolate-groups runs for about 8 seconds.
+  // Should not be run witout --enable-isolate-groups as it would be too slow.
+  final int n = 21;
+  final int nFactorial = 17711;
+  final beforeRss = ProcessInfo.currentRss;
+
+  int maxRss = beforeRss;
+  final rssTimer = Timer.periodic(const Duration(milliseconds: 10), (_) {
+    maxRss = max(ProcessInfo.currentRss, maxRss);
+  });
+
+  final watch = Stopwatch();
+  watch.start();
+
+  // For the benefit of enable-isolate-groups configuration, warm up target
+  // isolate code by running couple iterations in the main isolate.
+  await Isolate.spawn(fibonacciRecursive, [rpWarmup.sendPort, nWarmup]);
+  Expect.equals(nWarmupFactorial, await rpWarmup.first);
+
+  final warmup = watch.elapsedMicroseconds;
+
+  await Isolate.spawn(fibonacciRecursive, [rpRun.sendPort, n]);
+  Expect.equals(nFactorial, await rpRun.first);
+
+  final done = watch.elapsedMicroseconds;
+
+  print('IsolateFibonacci_$n.Calculation(RunTimeRaw): ${done-warmup} us.');
+  print('IsolateFibonacci_$n.DeltaPeak(MemoryUse): ${maxRss-beforeRss}');
+  rssTimer.cancel();
+}
diff --git a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
index ece1bcc..7deaa33 100644
--- a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
@@ -33,9 +33,9 @@
   'pub',
 ];
 
-Future<void> reportArtifactSize(String path, String name) async {
+void reportFileSize(String path, String name) {
   try {
-    final size = await File(path).length();
+    final size = File(path).lengthSync();
     print('SDKArtifactSizes.$name(CodeSize): $size');
   } on FileSystemException {
     // Report dummy data for artifacts that don't exist for specific platforms.
@@ -43,24 +43,43 @@
   }
 }
 
-Future<void> main() async {
+void reportDirectorySize(String path, String name) async {
+  final dir = Directory(path);
+
+  try {
+    final size = dir
+        .listSync(recursive: true, followLinks: false)
+        .whereType<File>()
+        .map((file) => file.lengthSync())
+        .fold<int>(0, (a, b) => a + b);
+    print('SDKArtifactSizes.$name(CodeSize): $size');
+  } on FileSystemException {
+    // Report dummy data on errors.
+    print('SDKArtifactSizes.$name(CodeSize): 0');
+  }
+}
+
+void main() {
   final topDirIndex =
       Platform.resolvedExecutable.lastIndexOf(Platform.pathSeparator);
   final rootDir = Platform.resolvedExecutable.substring(0, topDirIndex);
 
   for (final executable in executables) {
     final executablePath = '$rootDir/dart-sdk/bin/$executable';
-    await reportArtifactSize(executablePath, executable);
+    reportFileSize(executablePath, executable);
   }
 
   for (final lib in libs) {
     final libPath = '$rootDir/dart-sdk/lib/_internal/$lib';
-    await reportArtifactSize(libPath, lib);
+    reportFileSize(libPath, lib);
   }
 
   for (final snapshot in snapshots) {
     final snapshotPath =
         '$rootDir/dart-sdk/bin/snapshots/$snapshot.dart.snapshot';
-    await reportArtifactSize(snapshotPath, snapshot);
+    reportFileSize(snapshotPath, snapshot);
   }
+
+  // Measure the sdk size.
+  reportDirectorySize('$rootDir/dart-sdk', 'sdk');
 }
diff --git a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
index ece1bcc..71e5a48 100644
--- a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.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.
 
+// @dart=2.9
+
 // Reports the sizes of binary artifacts shipped with the SDK.
 
 import 'dart:io';
@@ -33,9 +35,9 @@
   'pub',
 ];
 
-Future<void> reportArtifactSize(String path, String name) async {
+void reportFileSize(String path, String name) {
   try {
-    final size = await File(path).length();
+    final size = File(path).lengthSync();
     print('SDKArtifactSizes.$name(CodeSize): $size');
   } on FileSystemException {
     // Report dummy data for artifacts that don't exist for specific platforms.
@@ -43,24 +45,43 @@
   }
 }
 
-Future<void> main() async {
+void reportDirectorySize(String path, String name) async {
+  final dir = Directory(path);
+
+  try {
+    final size = dir
+        .listSync(recursive: true, followLinks: false)
+        .whereType<File>()
+        .map((file) => file.lengthSync())
+        .fold<int>(0, (a, b) => a + b);
+    print('SDKArtifactSizes.$name(CodeSize): $size');
+  } on FileSystemException {
+    // Report dummy data on errors.
+    print('SDKArtifactSizes.$name(CodeSize): 0');
+  }
+}
+
+void main() {
   final topDirIndex =
       Platform.resolvedExecutable.lastIndexOf(Platform.pathSeparator);
   final rootDir = Platform.resolvedExecutable.substring(0, topDirIndex);
 
   for (final executable in executables) {
     final executablePath = '$rootDir/dart-sdk/bin/$executable';
-    await reportArtifactSize(executablePath, executable);
+    reportFileSize(executablePath, executable);
   }
 
   for (final lib in libs) {
     final libPath = '$rootDir/dart-sdk/lib/_internal/$lib';
-    await reportArtifactSize(libPath, lib);
+    reportFileSize(libPath, lib);
   }
 
   for (final snapshot in snapshots) {
     final snapshotPath =
         '$rootDir/dart-sdk/bin/snapshots/$snapshot.dart.snapshot';
-    await reportArtifactSize(snapshotPath, snapshot);
+    reportFileSize(snapshotPath, snapshot);
   }
+
+  // Measure the sdk size.
+  reportDirectorySize('$rootDir/dart-sdk', 'sdk');
 }
diff --git a/build/fuchsia/dart.cmx b/build/fuchsia/dart.cmx
index 0bd0e668..45ba397 100644
--- a/build/fuchsia/dart.cmx
+++ b/build/fuchsia/dart.cmx
@@ -17,7 +17,6 @@
             "fuchsia.feedback.CrashReporter",
             "fuchsia.intl.PropertyProvider",
             "fuchsia.logger.LogSink",
-            "fuchsia.net.NameLookup",
             "fuchsia.net.name.Lookup",
             "fuchsia.posix.socket.Provider",
             "fuchsia.sysmem.Allocator",
diff --git a/codereview.settings b/codereview.settings
index fe2e4e9..e950dfc 100644
--- a/codereview.settings
+++ b/codereview.settings
@@ -3,3 +3,4 @@
 CODE_REVIEW_SERVER: https://dart-review.googlesource.com
 VIEW_VC: https://dart.googlesource.com/sdk/+
 CC_LIST: reviews@dartlang.org
+USE_PYTHON3: True
diff --git a/docs/process/breaking-changes.md b/docs/process/breaking-changes.md
index cee804e..64a0df4 100644
--- a/docs/process/breaking-changes.md
+++ b/docs/process/breaking-changes.md
@@ -43,8 +43,7 @@
   not intended to be used as a mixin).
 
 Compatibility is only considered between stable releases (i.e. releases from the
-[Dart stable
-channel](https://dart.dev/tools/sdk/archive#stable-channel)).
+[Dart stable channel](https://dart.dev/tools/sdk/archive#stable-channel)).
 
 ## Breaking change notification
 
@@ -78,8 +77,8 @@
   * A request that developers may leave comments in the linked issue, if this
     breaking change poses a severe problem.
 
-* Once you have sent the announce email, please let 'frankyow@google.com` know
-as he will help drive the request through approval review process.
+Once you have sent the announce email, please let @devoncarew know in order
+to start the review and approval process.
 
 ### Step 2: Approval
 
@@ -88,6 +87,7 @@
 Adequate time must be allowed after step 1, at a minimum 24 hours during the
 work week for smaller impact changes, and proportionally longer for higher
 impact changes.
+
 ### Step 3: Execution
 
 If approved, the change may be made.
@@ -107,6 +107,7 @@
 
 * Reply to the original announcement email, and make a note that the change is
   has been rejected, with a quick summary of the rationale for that.
+
 ## Unexpected breaking changes & roll-back requests
 
 If a developer notices a breaking change has been made in the dev or stable
diff --git a/pkg/_fe_analyzer_shared/PRESUBMIT.py b/pkg/_fe_analyzer_shared/PRESUBMIT.py
index 1a4331d..7059280 100644
--- a/pkg/_fe_analyzer_shared/PRESUBMIT.py
+++ b/pkg/_fe_analyzer_shared/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # 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.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index b050ba3..55b94a9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -368,8 +368,11 @@
 abstract class FlowAnalysis<Node extends Object, Statement extends Node,
     Expression extends Object, Variable extends Object, Type extends Object> {
   factory FlowAnalysis(TypeOperations<Variable, Type> typeOperations,
-      AssignedVariables<Node, Variable> assignedVariables) {
-    return new _FlowAnalysisImpl(typeOperations, assignedVariables);
+      AssignedVariables<Node, Variable> assignedVariables,
+      {required bool respectImplicitlyTypedVarInitializers}) {
+    return new _FlowAnalysisImpl(typeOperations, assignedVariables,
+        respectImplicitlyTypedVarInitializers:
+            respectImplicitlyTypedVarInitializers);
   }
 
   factory FlowAnalysis.legacy(TypeOperations<Variable, Type> typeOperations,
@@ -634,7 +637,9 @@
   /// Call this method after visiting the initializer of a variable declaration.
   void initialize(
       Variable variable, Type initializerType, Expression initializerExpression,
-      {required bool isFinal, required bool isLate});
+      {required bool isFinal,
+      required bool isLate,
+      required bool isImplicitlyTyped});
 
   /// Return whether the [variable] is definitely assigned in the current state.
   bool isAssigned(Variable variable);
@@ -724,11 +729,6 @@
   void parenthesizedExpression(
       Expression outerExpression, Expression innerExpression);
 
-  /// Attempt to promote [variable] to [type].  The client may use this to
-  /// ensure that a variable declaration of the form `var x = expr;` promotes
-  /// `x` to type `X&T` in the circumstance where the type of `expr` is `X&T`.
-  void promote(Variable variable, Type type);
-
   /// Retrieves the type that the [variable] is promoted to, if the [variable]
   /// is currently promoted.  Otherwise returns `null`.
   Type? promotedType(Variable variable);
@@ -986,10 +986,13 @@
   bool _exceptionOccurred = false;
 
   factory FlowAnalysisDebug(TypeOperations<Variable, Type> typeOperations,
-      AssignedVariables<Node, Variable> assignedVariables) {
+      AssignedVariables<Node, Variable> assignedVariables,
+      {required bool respectImplicitlyTypedVarInitializers}) {
     print('FlowAnalysisDebug()');
-    return new FlowAnalysisDebug._(
-        new _FlowAnalysisImpl(typeOperations, assignedVariables));
+    return new FlowAnalysisDebug._(new _FlowAnalysisImpl(
+        typeOperations, assignedVariables,
+        respectImplicitlyTypedVarInitializers:
+            respectImplicitlyTypedVarInitializers));
   }
 
   factory FlowAnalysisDebug.legacy(
@@ -1225,13 +1228,18 @@
   @override
   void initialize(
       Variable variable, Type initializerType, Expression initializerExpression,
-      {required bool isFinal, required bool isLate}) {
+      {required bool isFinal,
+      required bool isLate,
+      required bool isImplicitlyTyped}) {
     _wrap(
         'initialize($variable, $initializerType, $initializerExpression, '
-        'isFinal: $isFinal, isLate: $isLate)',
+        'isFinal: $isFinal, isLate: $isLate, '
+        'isImplicitlyTyped: $isImplicitlyTyped)',
         () => _wrapped.initialize(
             variable, initializerType, initializerExpression,
-            isFinal: isFinal, isLate: isLate));
+            isFinal: isFinal,
+            isLate: isLate,
+            isImplicitlyTyped: isImplicitlyTyped));
   }
 
   @override
@@ -1341,11 +1349,6 @@
   }
 
   @override
-  void promote(Variable variable, Type type) {
-    _wrap('promote($variable, $type', () => _wrapped.promote(variable, type));
-  }
-
-  @override
   Type? promotedType(Variable variable) {
     return _wrap(
         'promotedType($variable)', () => _wrapped.promotedType(variable),
@@ -2059,12 +2062,14 @@
       Variable variable,
       Type writtenType,
       SsaNode<Variable, Type> newSsaNode,
-      TypeOperations<Variable, Type> typeOperations) {
+      TypeOperations<Variable, Type> typeOperations,
+      {bool promoteToTypeOfInterest = true}) {
     VariableModel<Variable, Type>? infoForVar = variableInfo[variable];
     if (infoForVar == null) return this;
 
     VariableModel<Variable, Type> newInfoForVar = infoForVar.write(
-        nonPromotionReason, variable, writtenType, typeOperations, newSsaNode);
+        nonPromotionReason, variable, writtenType, typeOperations, newSsaNode,
+        promoteToTypeOfInterest: promoteToTypeOfInterest);
     if (identical(newInfoForVar, infoForVar)) return this;
 
     return _updateVariableInfo(new VariableReference(variable), newInfoForVar);
@@ -2663,6 +2668,9 @@
   /// Return `true` if the [leftType] is a subtype of the [rightType].
   bool isSubtypeOf(Type leftType, Type rightType);
 
+  /// Returns `true` if [type] is a reference to a type parameter.
+  bool isTypeParameterType(Type type);
+
   /// Returns the non-null promoted version of [type].
   ///
   /// Note that some types don't have a non-nullable version (e.g.
@@ -2819,7 +2827,8 @@
       Variable variable,
       Type writtenType,
       TypeOperations<Variable, Type> typeOperations,
-      SsaNode<Variable, Type> newSsaNode) {
+      SsaNode<Variable, Type> newSsaNode,
+      {required bool promoteToTypeOfInterest}) {
     if (writeCaptured) {
       return new VariableModel<Variable, Type>(
           promotedTypes: promotedTypes,
@@ -2834,8 +2843,10 @@
     List<Type>? newPromotedTypes = demotionResult.promotedTypes;
 
     Type declaredType = typeOperations.variableType(variable);
-    newPromotedTypes = _tryPromoteToTypeOfInterest(
-        typeOperations, declaredType, newPromotedTypes, writtenType);
+    if (promoteToTypeOfInterest) {
+      newPromotedTypes = _tryPromoteToTypeOfInterest(
+          typeOperations, declaredType, newPromotedTypes, writtenType);
+    }
     // TODO(paulberry): remove demotions from demotionResult.nonPromotionHistory
     // that are no longer in effect due to re-promotion.
     if (identical(promotedTypes, newPromotedTypes) && assigned) {
@@ -3449,7 +3460,15 @@
 
   final AssignedVariables<Node, Variable> _assignedVariables;
 
-  _FlowAnalysisImpl(this.typeOperations, this._assignedVariables);
+  /// Indicates whether initializers of implicitly typed variables should be
+  /// accounted for by SSA analysis.  (In an ideal world, they always would be,
+  /// but due to https://github.com/dart-lang/language/issues/1785, they weren't
+  /// always, and we need to be able to replicate the old behavior when
+  /// analyzing old language versions).
+  final bool respectImplicitlyTypedVarInitializers;
+
+  _FlowAnalysisImpl(this.typeOperations, this._assignedVariables,
+      {required this.respectImplicitlyTypedVarInitializers});
 
   @override
   bool get isReachable => _current.reachable.overallReachable;
@@ -3798,21 +3817,38 @@
   @override
   void initialize(
       Variable variable, Type initializerType, Expression initializerExpression,
-      {required bool isFinal, required bool isLate}) {
-    ExpressionInfo<Variable, Type>? expressionInfo =
-        _getExpressionInfo(initializerExpression);
-    SsaNode<Variable, Type> newSsaNode = new SsaNode<Variable, Type>(isLate
-        ? null
-        : expressionInfo is _TrivialExpressionInfo
-            ? null
-            : expressionInfo);
-    if (isFinal) {
-      // We don't promote final variables on initialization, so pretend the
-      // written type is the variable's declared type.
-      initializerType = typeOperations.variableType(variable);
+      {required bool isFinal,
+      required bool isLate,
+      required bool isImplicitlyTyped}) {
+    ExpressionInfo<Variable, Type>? expressionInfo;
+    if (isLate) {
+      // Don't get expression info for late variables, since we don't know when
+      // they'll be initialized.
+    } else if (isImplicitlyTyped && !respectImplicitlyTypedVarInitializers) {
+      // If the language version is too old, SSA analysis has to ignore
+      // initializer expressions for implicitly typed variables, in order to
+      // preserve the buggy behavior of
+      // https://github.com/dart-lang/language/issues/1785.
+    } else {
+      expressionInfo = _getExpressionInfo(initializerExpression);
     }
+    SsaNode<Variable, Type> newSsaNode = new SsaNode<Variable, Type>(
+        expressionInfo is _TrivialExpressionInfo ? null : expressionInfo);
     _current = _current.write(
-        null, variable, initializerType, newSsaNode, typeOperations);
+        null, variable, initializerType, newSsaNode, typeOperations,
+        promoteToTypeOfInterest: !isImplicitlyTyped && !isFinal);
+    if (isImplicitlyTyped &&
+        typeOperations.isTypeParameterType(initializerType)) {
+      _current = _current
+          .tryPromoteForTypeCheck(
+              typeOperations,
+              new ReferenceWithType<Variable, Type>(
+                  new VariableReference<Variable, Type>(variable),
+                  promotedType(variable) ??
+                      typeOperations.variableType(variable)),
+              initializerType)
+          .ifTrue;
+    }
   }
 
   @override
@@ -3958,19 +3994,6 @@
   }
 
   @override
-  void promote(Variable variable, Type type) {
-    _current = _current
-        .tryPromoteForTypeCheck(
-            typeOperations,
-            new ReferenceWithType<Variable, Type>(
-                new VariableReference<Variable, Type>(variable),
-                promotedType(variable) ??
-                    typeOperations.variableType(variable)),
-            type)
-        .ifTrue;
-  }
-
-  @override
   Type? promotedType(Variable variable) {
     return _current.infoFor(variable).promotedTypes?.last;
   }
@@ -4544,7 +4567,9 @@
   @override
   void initialize(
       Variable variable, Type initializerType, Expression initializerExpression,
-      {required bool isFinal, required bool isLate}) {}
+      {required bool isFinal,
+      required bool isLate,
+      required bool isImplicitlyTyped}) {}
 
   @override
   bool isAssigned(Variable variable) {
@@ -4704,11 +4729,6 @@
   }
 
   @override
-  void promote(Variable variable, Type type) {
-    throw new UnimplementedError('TODO(paulberry)');
-  }
-
-  @override
   Type? promotedType(Variable variable) {
     return _knownTypes[variable];
   }
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 01dd119..4cd2f61f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1318,6 +1318,26 @@
 }
 
 // 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""",
+        withArguments: _withArgumentsConstEvalError);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)> codeConstEvalError =
+    const Code<Message Function(String string)>(
+  "ConstEvalError",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsConstEvalError(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeConstEvalError,
+      message: """Error evaluating constant expression: ${string}""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalExtension = messageConstEvalExtension;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1756,6 +1776,18 @@
         r"""Constructor bodies can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstructorTearOffWithTypeArguments =
+    messageConstructorTearOffWithTypeArguments;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstructorTearOffWithTypeArguments = const MessageCode(
+    "ConstructorTearOffWithTypeArguments",
+    message:
+        r"""A constructor tear-off can't have type arguments after the constructor name.""",
+    tip:
+        r"""Try removing the type arguments or placing them after the class name.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorWithReturnType =
     messageConstructorWithReturnType;
 
@@ -1775,8 +1807,9 @@
     "ConstructorWithTypeArguments",
     analyzerCodes: <String>["WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR"],
     message:
-        r"""A constructor invocation can't have type arguments on the constructor name.""",
-    tip: r"""Try to place the type arguments on the class name.""");
+        r"""A constructor invocation can't have type arguments after the constructor name.""",
+    tip:
+        r"""Try removing the type arguments or placing them after the class name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorWithTypeParameters =
@@ -2190,18 +2223,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeDeprecateDartExt = messageDeprecateDartExt;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageDeprecateDartExt = const MessageCode(
-    "DeprecateDartExt",
-    severity: Severity.info,
-    message:
-        r"""Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.""",
-    tip:
-        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(
             int count, int count2, num _num1, num _num2, num _num3)>
@@ -6694,6 +6715,25 @@
     message: 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'.""",
+        withArguments: _withArgumentsMemberNotFound);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMemberNotFound =
+    const Code<Message Function(String name)>("MemberNotFound",
+        analyzerCodes: <String>["UNDEFINED_GETTER"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMemberNotFound(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMemberNotFound,
+      message: """Member not found: '${name}'.""", arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMemberWithSameNameAsClass =
     messageMemberWithSameNameAsClass;
 
@@ -7097,6 +7137,25 @@
     tip: 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'.""",
+        withArguments: _withArgumentsNameNotFound);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeNameNotFound =
+    const Code<Message Function(String name)>("NameNotFound",
+        analyzerCodes: <String>["UNDEFINED_NAME"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNameNotFound(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNameNotFound,
+      message: """Undefined name '${name}'.""", arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNamedFunctionExpression = messageNamedFunctionExpression;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8960,6 +9019,18 @@
     tip: r"""Try removing the keyword 'static'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeStaticTearOffFromInstantiatedClass =
+    messageStaticTearOffFromInstantiatedClass;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageStaticTearOffFromInstantiatedClass = const MessageCode(
+    "StaticTearOffFromInstantiatedClass",
+    message:
+        r"""Cannot access static member on an instantiated generic class.""",
+    tip:
+        r"""Try removing the type arguments or placing them after the member name.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStrongModeNNBDButOptOut = messageStrongModeNNBDButOptOut;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9126,6 +9197,26 @@
 }
 
 // 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'.""",
+        withArguments: _withArgumentsSuperclassHasNoMember);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeSuperclassHasNoMember =
+    const Code<Message Function(String name)>("SuperclassHasNoMember",
+        analyzerCodes: <String>["UNDEFINED_SUPER_GETTER"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsSuperclassHasNoMember(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeSuperclassHasNoMember,
+      message: """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'.""",
@@ -9834,6 +9925,16 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeUnsupportedDartExt = messageUnsupportedDartExt;
+
+// 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:
+        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.""",
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/class_member_parser.dart b/pkg/_fe_analyzer_shared/lib/src/parser/class_member_parser.dart
index d42c6ed..d83d3a0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/class_member_parser.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/class_member_parser.dart
@@ -17,7 +17,10 @@
 class ClassMemberParser extends Parser {
   Parser? skipParser;
 
-  ClassMemberParser(Listener listener) : super(listener);
+  ClassMemberParser(Listener listener,
+      {bool useImplicitCreationExpression: true})
+      : super(listener,
+            useImplicitCreationExpression: useImplicitCreationExpression);
 
   @override
   Token parseExpression(Token token) {
@@ -35,7 +38,8 @@
     // not triggered during the second parse.
     // When the parser supports not doing token stream rewriting, use that
     // feature together with a no-op listener instead.
-    this.skipParser ??= new Parser(new ErrorDelegationListener(listener));
+    this.skipParser ??= new Parser(new ErrorDelegationListener(listener),
+        useImplicitCreationExpression: useImplicitCreationExpression);
     Parser skipParser = this.skipParser!;
     skipParser.mayParseFunctionExpressions = mayParseFunctionExpressions;
     skipParser.asyncState = asyncState;
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/constructor_reference_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/constructor_reference_context.dart
new file mode 100644
index 0000000..435eefb
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/constructor_reference_context.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.
+
+/// Enum for the context in which a constructor occurs
+enum ConstructorReferenceContext {
+  /// A constructor reference in the context of a constructor invocation with
+  /// an explicit `new`.
+  New,
+
+  /// A constructor reference in the context of a constant constructor
+  /// invocation with an explicit `const`.
+  Const,
+
+  /// A constructor reference in the context of a constructor invocation with an
+  /// implicit `new` or `const`.
+  Implicit,
+
+  /// A constructor reference in the context of a redirecting factory body.
+  RedirectingFactory,
+}
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 da87016..93ebfdc 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -610,9 +610,10 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
-    listener?.endConstructorReference(start, periodBeforeName, endToken);
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
+    listener?.endConstructorReference(
+        start, periodBeforeName, endToken, constructorReferenceContext);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context.dart
index c6de484..4615974 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context.dart
@@ -343,3 +343,12 @@
 
 // TODO(ahe): Remove when analyzer supports generalized function syntax.
 typedef _MessageWithArgument<T> = Message Function(T);
+
+const List<String> okNextValueInFormalParameter = const [
+  '=',
+  ':',
+  ',',
+  ')',
+  ']',
+  '}',
+];
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
index 432176b..68721e0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
@@ -14,7 +14,7 @@
 
 import 'type_info.dart' show isValidTypeReference;
 
-import 'util.dart' show isOneOfOrEof, optional;
+import 'util.dart' show isOneOf, isOneOfOrEof, optional;
 
 /// See [IdentifierContext.catchParameter].
 class CatchParameterIdentifierContext extends IdentifierContext {
@@ -472,10 +472,12 @@
       '[',
       ']',
       '{',
-      '}'
+      '}',
     ];
-    if (looksLikeStartOfNextClassMember(identifier) ||
-        looksLikeStatementStart(identifier) ||
+    if (((looksLikeStartOfNextTopLevelDeclaration(identifier) ||
+                looksLikeStartOfNextClassMember(identifier) ||
+                looksLikeStatementStart(identifier)) &&
+            !isOneOf(identifier.next!, okNextValueInFormalParameter)) ||
         isOneOfOrEof(identifier, followingValues)) {
       identifier = parser.insertSyntheticIdentifier(token, this,
           message: codes.templateExpectedIdentifier.withArguments(identifier));
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 2c8e578..564eaaa 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -15,6 +15,8 @@
 
 import 'block_kind.dart' show BlockKind;
 
+import 'constructor_reference_context.dart' show ConstructorReferenceContext;
+
 import 'formal_parameter_kind.dart' show FormalParameterKind;
 
 import 'identifier_context.dart' show IdentifierContext;
@@ -268,8 +270,8 @@
 
   void beginConstructorReference(Token start) {}
 
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     logEvent("ConstructorReference");
   }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser.dart
index 0bd8882..ade0f51 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser.dart
@@ -21,6 +21,8 @@
 
 export 'class_member_parser.dart' show ClassMemberParser;
 
+export 'constructor_reference_context.dart' show ConstructorReferenceContext;
+
 export 'formal_parameter_kind.dart' show FormalParameterKind;
 
 export 'identifier_context.dart' show IdentifierContext;
@@ -29,6 +31,8 @@
 
 export 'declaration_kind.dart' show DeclarationKind;
 
+export 'directive_context.dart' show DirectiveContext;
+
 export 'member_kind.dart' show MemberKind;
 
 export 'parser_impl.dart' show Parser;
@@ -53,9 +57,11 @@
   }
 }
 
-List<ParserError> parse(Token tokens) {
+List<ParserError> parse(Token tokens,
+    {bool useImplicitCreationExpression: true}) {
   ErrorCollectingListener listener = new ErrorCollectingListener();
-  Parser parser = new Parser(listener);
+  Parser parser = new Parser(listener,
+      useImplicitCreationExpression: useImplicitCreationExpression);
   parser.parseUnit(tokens);
   return listener.recoverableErrors;
 }
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 71472cc..f35035f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -56,6 +56,8 @@
 
 import 'block_kind.dart';
 
+import 'constructor_reference_context.dart' show ConstructorReferenceContext;
+
 import 'declaration_kind.dart' show DeclarationKind;
 
 import 'directive_context.dart';
@@ -69,7 +71,10 @@
 import 'forwarding_listener.dart' show ForwardingListener, NullListener;
 
 import 'identifier_context.dart'
-    show IdentifierContext, looksLikeExpressionStart;
+    show
+        IdentifierContext,
+        looksLikeExpressionStart,
+        okNextValueInFormalParameter;
 
 import 'listener.dart' show Listener;
 
@@ -297,7 +302,22 @@
     return cachedRewriter ??= new TokenStreamRewriterImpl();
   }
 
-  Parser(this.listener)
+  /// If `true`, syntax like `foo<bar>.baz()` is parsed like an implicit
+  /// creation expression. Otherwise it is parsed as a explicit instantiation
+  /// followed by an invocation.
+  ///
+  /// With the constructor-tearoffs experiment, such syntax can lead to a valid
+  /// expression that is _not_ an implicit creation expression, and the parser
+  /// should therefore not special case the syntax but instead let listeners
+  /// resolve the expression by the seen selectors.
+  ///
+  /// Use this flag to test that the implementation doesn't need the special
+  /// casing.
+  // TODO(johnniwinther): Remove this when both analyzer and CFE can parse the
+  // implicit create expression without the special casing.
+  final bool useImplicitCreationExpression;
+
+  Parser(this.listener, {this.useImplicitCreationExpression: true})
       : assert(listener != null); // ignore:unnecessary_null_comparison
 
   bool get inGenerator {
@@ -668,8 +688,9 @@
       listener.handleImportPrefix(/* deferredKeyword = */ null, asKeyword);
     } else {
       listener.handleImportPrefix(
-          /* deferredKeyword = */ null,
-          /* asKeyword = */ null);
+        /* deferredKeyword = */ null,
+        /* asKeyword = */ null,
+      );
     }
     return token;
   }
@@ -1447,9 +1468,10 @@
       }
       // Parse the (potential) new type.
       TypeInfo typeInfoAlternative = computeType(
-          token,
-          /* required = */ false,
-          /* inDeclaration = */ true);
+        token,
+        /* required = */ false,
+        /* inDeclaration = */ true,
+      );
       token = typeInfoAlternative.skipType(token);
       next = token.next!;
 
@@ -1569,7 +1591,12 @@
 
     // Type is required in a generalized function type, but optional otherwise.
     final Token beforeType = token;
-    TypeInfo typeInfo = computeType(token, inFunctionType);
+    TypeInfo typeInfo = computeType(
+      token,
+      inFunctionType,
+      /* inDeclaration = */ false,
+      /* acceptKeywordForSimpleType = */ true,
+    );
     token = typeInfo.skipType(token);
     next = token.next!;
     if (typeInfo == noType &&
@@ -1590,18 +1617,33 @@
         IdentifierContext.formalParameterDeclaration;
 
     if (!inFunctionType && optional('this', next)) {
+      Token originalToken = token;
       thisKeyword = token = next;
       next = token.next!;
       if (!optional('.', next)) {
-        // Recover from a missing period by inserting one.
-        next = rewriteAndRecover(
-            token,
-            codes.templateExpectedButGot.withArguments('.'),
-            new SyntheticToken(TokenType.PERIOD, next.charOffset));
+        if (isOneOf(next, okNextValueInFormalParameter)) {
+          // Recover by not parsing as 'this' --- an error will be given
+          // later that it's not an allowed identifier.
+          token = originalToken;
+          next = token.next!;
+          thisKeyword = null;
+        } else {
+          // Recover from a missing period by inserting one.
+          next = rewriteAndRecover(
+              token,
+              codes.templateExpectedButGot.withArguments('.'),
+              new SyntheticToken(TokenType.PERIOD, next.charOffset));
+          // These 3 lines are duplicated here and below.
+          periodAfterThis = token = next;
+          next = token.next!;
+          nameContext = IdentifierContext.fieldInitializer;
+        }
+      } else {
+        // These 3 lines are duplicated here and above.
+        periodAfterThis = token = next;
+        next = token.next!;
+        nameContext = IdentifierContext.fieldInitializer;
       }
-      periodAfterThis = token = next;
-      next = token.next!;
-      nameContext = IdentifierContext.fieldInitializer;
     }
 
     if (next.isIdentifier) {
@@ -2115,8 +2157,9 @@
     } else {
       listener.handleNoType(token);
       listener.handleClassExtends(
-          /* extendsKeyword = */ null,
-          /* typeCount = */ 1);
+        /* extendsKeyword = */ null,
+        /* typeCount = */ 1,
+      );
     }
     return token;
   }
@@ -2524,9 +2567,10 @@
       }
       // Parse the (potential) new type.
       TypeInfo typeInfoAlternative = computeType(
-          token,
-          /* required = */ false,
-          /* inDeclaration = */ true);
+        token,
+        /* required = */ false,
+        /* inDeclaration = */ true,
+      );
       token = typeInfoAlternative.skipType(token);
       next = token.next!;
 
@@ -2643,9 +2687,10 @@
         indicatesMethodOrField(next.next!.next!)) {
       // Recovery: Use the reserved keyword despite that not being legal.
       typeInfo = computeType(
-          token,
-          /*required = */ true,
-          /* inDeclaration = */ true);
+        token,
+        /* required = */ true,
+        /* inDeclaration = */ true,
+      );
       token = typeInfo.skipType(token);
       next = token.next!;
       nameIsRecovered = true;
@@ -3610,9 +3655,10 @@
 
     Token beforeType = token;
     TypeInfo typeInfo = computeType(
-        token,
-        /*required = */ false,
-        /* inDeclaration = */ true);
+      token,
+      /* required = */ false,
+      /* inDeclaration = */ true,
+    );
     token = typeInfo.skipType(token);
     next = token.next!;
 
@@ -3757,9 +3803,10 @@
           indicatesMethodOrField(next2.next!)) {
         // Recovery: Use the reserved keyword despite that not being legal.
         typeInfo = computeType(
-            token,
-            /*required = */ true,
-            /* inDeclaration = */ true);
+          token,
+          /* required = */ true,
+          /* inDeclaration = */ true,
+        );
         token = typeInfo.skipType(token);
         next = token.next!;
         nameIsRecovered = true;
@@ -3844,6 +3891,18 @@
           identical(operator.kind, BANG_EQ_EQ_TOKEN) ||
           isUnaryMinus(operator)) {
         isOperator = true;
+        if (optional(">>", operator) &&
+            optional(">", operator.next!) &&
+            operator.charEnd == operator.next!.charOffset) {
+          // Special case use of triple-shift in cases where it isn't enabled.
+          reportRecoverableErrorWithEnd(
+              operator,
+              operator.next!,
+              codes.templateExperimentNotEnabled
+                  .withArguments("triple-shift", "2.14"));
+          operator = rewriter.replaceNextTokensWithSyntheticToken(
+              name, 2, TokenType.GT_GT_GT);
+        }
       }
     }
 
@@ -3962,8 +4021,11 @@
       reportRecoverableError(bodyStart, codes.messageRedirectionInNonFactory);
       token = parseRedirectingFactoryBody(token);
     } else {
-      token = parseFunctionBody(token, /* ofFunctionExpression = */ false,
-          (staticToken == null || externalToken != null) && inPlainSync);
+      token = parseFunctionBody(
+        token,
+        /* ofFunctionExpression = */ false,
+        (staticToken == null || externalToken != null) && inPlainSync,
+      );
     }
     asyncState = savedAsyncModifier;
 
@@ -4112,9 +4174,10 @@
         reportRecoverableError(next, codes.messageExternalFactoryWithBody);
       }
       token = parseFunctionBody(
-          token,
-          /* ofFunctionExpression = */ false,
-          /* allowAbstract = */ true);
+        token,
+        /* ofFunctionExpression = */ false,
+        /* allowAbstract = */ true,
+      );
     } else {
       if (varFinalOrConst != null && !optional('native', next)) {
         if (optional('const', varFinalOrConst)) {
@@ -4122,9 +4185,10 @@
         }
       }
       token = parseFunctionBody(
-          token,
-          /* ofFunctionExpression = */ false,
-          /* allowAbstract = */ false);
+        token,
+        /* ofFunctionExpression = */ false,
+        /* allowAbstract = */ false,
+      );
     }
     switch (kind) {
       case DeclarationKind.Class:
@@ -4266,7 +4330,9 @@
     return token;
   }
 
-  Token parseConstructorReference(Token token, [TypeParamOrArgInfo? typeArg]) {
+  Token parseConstructorReference(
+      Token token, ConstructorReferenceContext constructorReferenceContext,
+      [TypeParamOrArgInfo? typeArg]) {
     Token start =
         ensureIdentifier(token, IdentifierContext.constructorReference);
     listener.beginConstructorReference(start);
@@ -4283,7 +4349,8 @@
       listener.handleNoConstructorReferenceContinuationAfterTypeArguments(
           token.next!);
     }
-    listener.endConstructorReference(start, period, token.next!);
+    listener.endConstructorReference(
+        start, period, token.next!, constructorReferenceContext);
     return token;
   }
 
@@ -4292,7 +4359,8 @@
     assert(optional('=', token));
     listener.beginRedirectingFactoryBody(token);
     Token equals = token;
-    token = parseConstructorReference(token);
+    token = parseConstructorReference(
+        token, ConstructorReferenceContext.RedirectingFactory);
     token = ensureSemicolon(token);
     listener.endRedirectingFactoryBody(equals, token);
     return token;
@@ -4418,9 +4486,7 @@
         begin = next = token.next!;
         // Fall through to parse the block.
       } else {
-        token = ensureBlock(
-            token,
-            codes.templateExpectedFunctionBody,
+        token = ensureBlock(token, codes.templateExpectedFunctionBody,
             /* missingBlockName = */ null);
         listener.handleInvalidFunctionBody(token);
         return token.endGroup!;
@@ -4883,6 +4949,19 @@
           // Right associative, so we recurse at the same precedence
           // level.
           Token next = token.next!;
+          if (optional(">=", next.next!)) {
+            // Special case use of triple-shift in cases where it isn't
+            // enabled.
+            reportRecoverableErrorWithEnd(
+                next,
+                next.next!,
+                codes.templateExperimentNotEnabled
+                    .withArguments("triple-shift", "2.14"));
+            assert(next == operator);
+            next = rewriter.replaceNextTokensWithSyntheticToken(
+                token, 2, TokenType.GT_GT_GT_EQ);
+            operator = next;
+          }
           token = optional('throw', next.next!)
               ? parseThrowExpression(next, /* allowCascades = */ false)
               : parsePrecedenceExpression(next, level, allowCascades);
@@ -4964,6 +5043,21 @@
               lastBinaryExpressionLevel = level;
             }
           }
+          if (optional(">>", next) && next.charEnd == next.next!.charOffset) {
+            if (optional(">", next.next!)) {
+              // Special case use of triple-shift in cases where it isn't
+              // enabled.
+              reportRecoverableErrorWithEnd(
+                  next,
+                  next.next!,
+                  codes.templateExperimentNotEnabled
+                      .withArguments("triple-shift", "2.14"));
+              assert(next == operator);
+              next = rewriter.replaceNextTokensWithSyntheticToken(
+                  token, 2, TokenType.GT_GT_GT);
+              operator = next;
+            }
+          }
           listener.beginBinaryExpression(next);
           // Left associative, so we recurse at the next higher
           // precedence level.
@@ -5110,6 +5204,14 @@
         return SELECTOR_PRECEDENCE;
       }
       return POSTFIX_PRECEDENCE;
+    } else if (identical(type, TokenType.GT_GT)) {
+      // ">>" followed by ">=" (without space between tokens) should for
+      // recovery be seen as ">>>=".
+      TokenType nextType = token.next!.type;
+      if (identical(nextType, TokenType.GT_EQ) &&
+          token.charEnd == token.next!.offset) {
+        return TokenType.GT_GT_GT_EQ.precedence;
+      }
     } else if (identical(type, TokenType.QUESTION) &&
         optional('[', token.next!)) {
       // "?[" can be a null-aware bracket or a conditional. If it's a
@@ -5227,7 +5329,7 @@
           token.next!, POSTFIX_PRECEDENCE, allowCascades);
       listener.handleUnaryPrefixAssignmentExpression(operator);
       return token;
-    } else if (token.next!.isIdentifier) {
+    } else if (useImplicitCreationExpression && token.next!.isIdentifier) {
       Token identifier = token.next!;
       if (optional(".", identifier.next!)) {
         identifier = identifier.next!.next!;
@@ -5528,10 +5630,11 @@
     if (optional('[]', token)) {
       token = rewriteSquareBrackets(beforeToken).next!;
       listener.handleLiteralList(
-          /* count = */ 0,
-          token,
-          constKeyword,
-          token.next!);
+        /* count = */ 0,
+        token,
+        constKeyword,
+        token.next!,
+      );
       return token.next!;
     }
     bool old = mayParseFunctionExpressions;
@@ -5887,7 +5990,8 @@
     }
 
     listener.beginNewExpression(newKeyword);
-    token = parseConstructorReference(newKeyword, potentialTypeArg);
+    token = parseConstructorReference(
+        newKeyword, ConstructorReferenceContext.New, potentialTypeArg);
     token = parseConstructorInvocationArguments(token);
     listener.endNewExpression(newKeyword);
     return token;
@@ -5897,7 +6001,8 @@
       Token token, TypeParamOrArgInfo typeArg) {
     Token begin = token;
     listener.beginImplicitCreationExpression(token);
-    token = parseConstructorReference(token, typeArg);
+    token = parseConstructorReference(
+        token, ConstructorReferenceContext.Implicit, typeArg);
     token = parseConstructorInvocationArguments(token);
     listener.endImplicitCreationExpression(begin);
     return token;
@@ -6013,7 +6118,8 @@
       }
     }
     listener.beginConstExpression(constKeyword);
-    token = parseConstructorReference(token, potentialTypeArg);
+    token = parseConstructorReference(
+        token, ConstructorReferenceContext.Const, potentialTypeArg);
     token = parseConstructorInvocationArguments(token);
     listener.endConstExpression(constKeyword);
     return token;
@@ -6584,10 +6690,11 @@
         listener.beginLocalFunctionDeclaration(start.next!);
         token = typeInfo.parseType(beforeType, this);
         return parseNamedFunctionRest(
-            token,
-            start.next!,
-            beforeFormals,
-            /* isFunctionExpression = */ false);
+          token,
+          start.next!,
+          beforeFormals,
+          /* isFunctionExpression = */ false,
+        );
       }
     }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart b/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
index 0d5b048..c9ec28a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
@@ -181,7 +181,7 @@
 String unescapeCodeUnits(List<int> codeUnits, bool isRaw, Object location,
     UnescapeErrorListener listener) {
   // Can't use Uint8List or Uint16List here, the code units may be larger.
-  List<int> result = new List<int>.filled(codeUnits.length, 0);
+  List<int> result = new List<int>.filled(codeUnits.length, /* fill = */ 0);
   int resultOffset = 0;
 
   for (int i = 0; i < codeUnits.length; i++) {
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 455dfdf..96a61a4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -526,7 +526,8 @@
 }
 
 class StackImpl implements Stack {
-  List<Object?> array = new List<Object?>.filled(/* length = */ 8, null);
+  List<Object?> array =
+      new List<Object?>.filled(/* length = */ 8, /* fill = */ null);
   int arrayLength = 0;
 
   bool get isNotEmpty => arrayLength > 0;
@@ -610,14 +611,16 @@
 
   List<Object?> get values {
     final int length = arrayLength;
-    final List<Object?> list = new List<Object?>.filled(length, null);
+    final List<Object?> list =
+        new List<Object?>.filled(length, /* fill = */ null);
     list.setRange(/* start = */ 0, length, array);
     return list;
   }
 
   void _grow() {
     final int length = array.length;
-    final List<Object?> newArray = new List<Object?>.filled(length * 2, null);
+    final List<Object?> newArray =
+        new List<Object?>.filled(length * 2, /* fill = */ null);
     newArray.setRange(/* start = */ 0, length, array, /* skipCount = */ 0);
     array = newArray;
   }
@@ -692,7 +695,8 @@
 
   List<T?>? pop(Stack stack, int count, [NullValue? nullValue]) {
     if (count == 0) return null;
-    return stack.popList(count, new List<T?>.filled(count, null), nullValue);
+    return stack.popList(
+        count, new List<T?>.filled(count, /* fill = */ null), nullValue);
   }
 
   List<T>? popNonNullable(Stack stack, int count, T dummyValue) {
@@ -704,8 +708,8 @@
   List<T?>? popPadded(Stack stack, int count, int padding,
       [NullValue? nullValue]) {
     if (count + padding == 0) return null;
-    return stack.popList(
-        count, new List<T?>.filled(count + padding, null), nullValue);
+    return stack.popList(count,
+        new List<T?>.filled(count + padding, /* fill = */ null), nullValue);
   }
 
   List<T>? popPaddedNonNullable(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/token_stream_rewriter.dart b/pkg/_fe_analyzer_shared/lib/src/parser/token_stream_rewriter.dart
index e033fca..7d9c087 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/token_stream_rewriter.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/token_stream_rewriter.dart
@@ -162,6 +162,34 @@
     return replacement;
   }
 
+  /// Insert a new simple synthetic token of [newTokenType] after
+  /// [previousToken] instead of the [count] tokens actually coming after it and
+  /// return the new token.
+  /// The first old token will be linked from the new one (and the next ones can
+  /// be found via the next pointer chain on it) though, so it's not totally
+  /// gone.
+  ReplacementToken replaceNextTokensWithSyntheticToken(
+      Token previousToken, int count, TokenType newTokenType) {
+    assert(newTokenType is! Keyword,
+        'use an unwritten variation of insertSyntheticKeyword instead');
+
+    // [token] <--> [a_1] <--> ... <--> [a_n] <--> [b]
+    ReplacementToken replacement =
+        new ReplacementToken(newTokenType, previousToken.next!);
+    insertToken(previousToken, replacement);
+    // [token] <--> [replacement] <--> [a_1] <--> ... <--> [a_n] <--> [b]
+
+    Token end = replacement.next!;
+    while (count > 0) {
+      count--;
+      end = end.next!;
+    }
+    _setNext(replacement, end);
+    // [token] <--> [replacement] <--> [b]
+
+    return replacement;
+  }
+
   /// Insert a synthetic identifier after [token] and return the new identifier.
   Token insertSyntheticIdentifier(Token token, [String value = '']) {
     return insertToken(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/top_level_parser.dart b/pkg/_fe_analyzer_shared/lib/src/parser/top_level_parser.dart
index 93be64c..5399b86 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/top_level_parser.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/top_level_parser.dart
@@ -15,7 +15,9 @@
 /// Parser which only parses top-level elements, but ignores their bodies.
 /// Use [Parser] to parse everything.
 class TopLevelParser extends ClassMemberParser {
-  TopLevelParser(Listener listener) : super(listener);
+  TopLevelParser(Listener listener, {bool useImplicitCreationExpression: true})
+      : super(listener,
+            useImplicitCreationExpression: useImplicitCreationExpression);
 
   @override
   Token parseClassOrMixinOrExtensionBody(Token token, DeclarationKind kind,
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
index 03a290d..2546579 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
@@ -8,6 +8,8 @@
 
 import '../scanner/token_constants.dart' show IDENTIFIER_TOKEN, KEYWORD_TOKEN;
 
+import 'identifier_context.dart';
+
 import 'parser_impl.dart' show Parser;
 
 import 'type_info_impl.dart';
@@ -142,7 +144,7 @@
 /// If [inDeclaration] is `true`, then this will more aggressively recover
 /// given unbalanced `<` `>` and invalid parameters or arguments.
 TypeInfo computeType(final Token token, bool required,
-    [bool inDeclaration = false]) {
+    [bool inDeclaration = false, bool acceptKeywordForSimpleType = false]) {
   Token next = token.next!;
   if (!isValidTypeReference(next)) {
     if (next.type.isBuiltIn) {
@@ -295,11 +297,15 @@
       // identifier `?` Function `(`
       return new ComplexTypeInfo(token, noTypeParamOrArg)
           .computeIdentifierQuestionGFT(required);
-    } else if (required || looksLikeNameSimpleType(next)) {
+    } else if (required || looksLikeName(next)) {
       // identifier `?`
       return simpleNullableType;
     }
-  } else if (required || looksLikeNameSimpleType(next)) {
+  } else if (required ||
+      looksLikeName(next) ||
+      (acceptKeywordForSimpleType &&
+          next.isKeywordOrIdentifier &&
+          isOneOf(next.next!, okNextValueInFormalParameter))) {
     // identifier identifier
     return simpleType;
   }
@@ -364,30 +370,11 @@
 /// indicating that the `<` and `>` should be interpreted as operators (so two
 /// arguments are being passed to `f`: `a < b` and `c > -d`).
 bool mayFollowTypeArgs(Token token) {
+  const Set<String> continuationTokens = {'(', '.', '==', '!='};
+  const Set<String> stopTokens = {')', ']', '}', ';', ':', ','};
   const Set<String> tokensThatMayFollowTypeArg = {
-    '(',
-    ')',
-    ']',
-    '}',
-    ':',
-    ';',
-    ',',
-    '.',
-    '?',
-    '==',
-    '!=',
-    '..',
-    '?.',
-    '??',
-    '?..',
-    '&',
-    '|',
-    '^',
-    '+',
-    '*',
-    '%',
-    '/',
-    '~/'
+    ...continuationTokens,
+    ...stopTokens
   };
   if (token.type == TokenType.EOF) {
     // The spec doesn't have anything to say about this case, since an
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
index ca6c45c..899bbd4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
@@ -413,14 +413,6 @@
 }
 
 bool looksLikeName(Token token) {
-  // End-of-file isn't a name, but this is called in a situation where
-  // if there had been a name it would have used the type-info it had
-  // collected --- this being eof probably mean the user is currently
-  // typing and will probably write a name in a moment.
-  return looksLikeNameSimpleType(token) || token.isEof;
-}
-
-bool looksLikeNameSimpleType(Token token) {
   return token.kind == IDENTIFIER_TOKEN ||
       optional('this', token) ||
       (token.isIdentifier &&
@@ -430,6 +422,16 @@
           (!optional('typedef', token) || !token.next!.isIdentifier));
 }
 
+bool looksLikeNameOrEndOfBlock(Token token) {
+  // End-of-file isn't a name, but this is called in a situation where
+  // if there had been a name it would have used the type-info it had
+  // collected --- this being eof probably mean the user is currently
+  // typing and will probably write a name in a moment.
+  // The same logic applies to "}" which ends for instance a class. Again,
+  // the user is likely typing and will soon write a name.
+  return looksLikeName(token) || token.isEof || optional('}', token);
+}
+
 /// When missing a comma, determine if the given token looks like it should
 /// be part of a collection of type parameters or arguments.
 bool looksLikeTypeParamOrArg(bool inDeclaration, Token token) {
@@ -688,7 +690,9 @@
     end = typeArguments.skip(start);
     computeRest(end!, required);
 
-    if (!required && !looksLikeName(end!.next!) && gftHasReturnType == null) {
+    if (!required &&
+        !looksLikeNameOrEndOfBlock(end!.next!) &&
+        gftHasReturnType == null) {
       return noType;
     }
     assert(end != null);
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/keyword_state.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/keyword_state.dart
index 51a9520..29e59dc 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/keyword_state.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/keyword_state.dart
@@ -25,10 +25,11 @@
           .toList(growable: false);
       strings.sort((a, b) => a.compareTo(b));
       _KEYWORD_STATE = computeKeywordStateTable(
-          /* start = */ 0,
-          strings,
-          /* offset = */ 0,
-          strings.length);
+        /* start = */ 0,
+        strings,
+        /* offset = */ 0,
+        strings.length,
+      );
     }
     return _KEYWORD_STATE!;
   }
@@ -38,7 +39,7 @@
     bool isLowercase = true;
 
     List<KeywordState?> table =
-        new List<KeywordState?>.filled($z - $A + 1, null);
+        new List<KeywordState?>.filled($z - $A + 1, /* fill = */ null);
     assert(length != 0);
     int chunk = 0;
     int chunkStart = -1;
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart
index a43887f..966e811 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart
@@ -34,7 +34,7 @@
   int _count = 0;
 
   /// The table itself.
-  List<Node?> _nodes = new List<Node?>.filled(INITIAL_SIZE, null);
+  List<Node?> _nodes = new List<Node?>.filled(INITIAL_SIZE, /* fill = */ null);
 
   static String decode(List<int> data, int start, int end, bool asciiOnly) {
     String s;
@@ -64,7 +64,7 @@
 
   rehash() {
     int newSize = _size * 2;
-    List<Node?> newNodes = new List<Node?>.filled(newSize, null);
+    List<Node?> newNodes = new List<Node?>.filled(newSize, /* fill = */ null);
     for (int i = 0; i < _size; i++) {
       Node? t = _nodes[i];
       while (t != null) {
@@ -117,7 +117,7 @@
 
   clear() {
     _size = INITIAL_SIZE;
-    _nodes = new List<Node?>.filled(_size, null);
+    _nodes = new List<Node?>.filled(_size, /* fill = */ null);
     _count = 0;
   }
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
index 808f5f9..0a6ab6c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
@@ -776,6 +776,9 @@
       : super(type, value, offset);
 
   @override
+  Token? beforeSynthetic;
+
+  @override
   bool get isSynthetic => true;
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/options.dart b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
new file mode 100644
index 0000000..7837865
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
@@ -0,0 +1,310 @@
+// 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 '../messages/codes.dart';
+import 'resolve_input_uri.dart';
+
+class CommandLineProblem {
+  final Message message;
+
+  CommandLineProblem(this.message);
+
+  CommandLineProblem.deprecated(String message)
+      : this(templateUnspecified.withArguments(message));
+
+  String toString() => message.message;
+}
+
+class ParsedOptions {
+  final Map<String, dynamic> options = <String, dynamic>{};
+  final List<String> arguments = <String>[];
+  final Map<String, String> defines = <String, String>{};
+
+  String toString() => "ParsedArguments($options, $arguments)";
+
+  /// Returns arguments stored as line separated text.
+  static List<String> readOptionsFile(String optionsFile) {
+    return optionsFile
+        .split('\n')
+        .map((String line) => line.trim())
+        .where((line) => line.isNotEmpty)
+        .toList();
+  }
+
+  /// Parses a list of command-line [arguments] into options and arguments.
+  ///
+  /// An /option/ is something that, normally, starts with `-` or `--` (one or
+  /// two dashes). However, as a special case `/?` and `/h` are also recognized
+  /// as options for increased compatibility with Windows. An option can have a
+  /// value.
+  ///
+  /// An /argument/ is something that isn't an option, for example, a file name.
+  ///
+  /// The specification is a map of options to one of the following values:
+  /// * the type literal `Uri`, representing an option value of type [Uri],
+  /// * the type literal `int`, representing an option value of type [int],
+  /// * the bool literal `false`, representing a boolean option that is turned
+  ///   off by default,
+  /// * the bool literal `true, representing a boolean option that is turned on
+  ///   by default,
+  /// * or the string literal `","`, representing a comma-separated list of
+  ///   values.
+  ///
+  /// If [arguments] contains `"--"`, anything before is parsed as options, and
+  /// arguments; anything following is treated as arguments (even if starting
+  /// with, for example, a `-`).
+  ///
+  /// If an option isn't found in [specification], an error is thrown.
+  ///
+  /// Boolean options do not require an option value, but an optional value can
+  /// be provided using the forms `--option=value` where `value` can be `true`
+  /// or `yes` to turn on the option, or `false` or `no` to turn it off.  If no
+  /// option value is specified, a boolean option is turned on.
+  ///
+  /// All other options require an option value, either on the form `--option
+  /// value` or `--option=value`.
+  static ParsedOptions parse(List<String> arguments, List<Option>? options) {
+    options ??= [];
+    Map<String, ValueSpecification>? specification = {};
+    void addSpec(String flag, ValueSpecification spec) {
+      if (specification.containsKey(flag)) {
+        throw new CommandLineProblem.deprecated("Duplicate option '${flag}'.");
+      }
+      specification[flag] = spec;
+    }
+
+    for (Option option in options) {
+      addSpec(option.flag, option.spec);
+      for (String alias in option.aliases) {
+        addSpec(alias, new AliasValue(option.flag));
+      }
+    }
+    ParsedOptions result = new ParsedOptions();
+    int index = arguments.indexOf("--");
+    Iterable<String> nonOptions = const <String>[];
+    Iterator<String> iterator = arguments.iterator;
+    if (index != -1) {
+      nonOptions = arguments.skip(index + 1);
+      iterator = arguments.take(index).iterator;
+    }
+    while (iterator.moveNext()) {
+      String argument = iterator.current;
+      if (argument.startsWith("-") || argument == "/?" || argument == "/h") {
+        String? value;
+        if (argument.startsWith("-D")) {
+          value = argument.substring("-D".length);
+          argument = "-D";
+        } else {
+          index = argument.indexOf("=");
+          if (index != -1) {
+            value = argument.substring(index + 1);
+            argument = argument.substring(0, index);
+          }
+        }
+        ValueSpecification? valueSpecification = specification[argument];
+        if (valueSpecification == null) {
+          throw new CommandLineProblem.deprecated(
+              "Unknown option '$argument'.");
+        }
+        String canonicalArgument = argument;
+        if (valueSpecification.alias != null) {
+          canonicalArgument = valueSpecification.alias as String;
+          valueSpecification = specification[valueSpecification.alias];
+        }
+        if (valueSpecification == null) {
+          throw new CommandLineProblem.deprecated(
+              "Unknown option alias '$canonicalArgument'.");
+        }
+        final bool requiresValue = valueSpecification.requiresValue;
+        if (requiresValue && value == null) {
+          if (!iterator.moveNext()) {
+            throw new CommandLineProblem(
+                templateFastaCLIArgumentRequired.withArguments(argument));
+          }
+          value = iterator.current;
+        }
+        valueSpecification.processValue(
+            result, canonicalArgument, argument, value);
+      } else {
+        result.arguments.add(argument);
+      }
+    }
+    specification.forEach((String key, ValueSpecification value) {
+      if (value.defaultValue != null) {
+        result.options[key] ??= value.defaultValue;
+      }
+    });
+    result.arguments.addAll(nonOptions);
+    return result;
+  }
+}
+
+abstract class ValueSpecification<T> {
+  const ValueSpecification();
+
+  String? get alias => null;
+
+  T? get defaultValue => null;
+
+  bool get requiresValue => true;
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value);
+}
+
+class AliasValue<T> extends ValueSpecification<T> {
+  final String alias;
+
+  const AliasValue(this.alias);
+
+  bool get requiresValue =>
+      throw new UnsupportedError("AliasValue.requiresValue");
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    throw new UnsupportedError("AliasValue.processValue");
+  }
+}
+
+class UriValue extends ValueSpecification<Uri?> {
+  const UriValue();
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    if (result.options.containsKey(canonicalArgument)) {
+      throw new CommandLineProblem.deprecated(
+          "Multiple values for '$argument': "
+          "'${result.options[canonicalArgument]}' and '$value'.");
+    }
+    // TODO(ahe): resolve Uris lazily, so that schemes provided by
+    // other flags can be used for parsed command-line arguments too.
+    result.options[canonicalArgument] = resolveInputUri(value!);
+  }
+}
+
+class StringValue extends ValueSpecification<String?> {
+  final String? defaultValue;
+
+  const StringValue({this.defaultValue});
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    if (result.options.containsKey(canonicalArgument)) {
+      throw new CommandLineProblem.deprecated(
+          "Multiple values for '$argument': "
+          "'${result.options[canonicalArgument]}' and '$value'.");
+    }
+    result.options[canonicalArgument] = value!;
+  }
+}
+
+class BoolValue extends ValueSpecification<bool?> {
+  final bool? defaultValue;
+
+  const BoolValue(this.defaultValue);
+
+  bool get requiresValue => false;
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    if (result.options.containsKey(canonicalArgument)) {
+      throw new CommandLineProblem.deprecated(
+          "Multiple values for '$argument': "
+          "'${result.options[canonicalArgument]}' and '$value'.");
+    }
+    bool parsedValue;
+    if (value == null || value == "true" || value == "yes") {
+      parsedValue = true;
+    } else if (value == "false" || value == "no") {
+      parsedValue = false;
+    } else {
+      throw new CommandLineProblem.deprecated(
+          "Value for '$argument' is '$value', "
+          "but expected one of: 'true', 'false', 'yes', or 'no'.");
+    }
+    result.options[canonicalArgument] = parsedValue;
+  }
+}
+
+class IntValue extends ValueSpecification<int?> {
+  final int? defaultValue;
+  final int? noArgValue;
+
+  const IntValue({this.defaultValue, this.noArgValue});
+
+  bool get requiresValue => noArgValue == null;
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    if (result.options.containsKey(canonicalArgument)) {
+      throw new CommandLineProblem.deprecated(
+          "Multiple values for '$argument': "
+          "'${result.options[canonicalArgument]}' and '$value'.");
+    }
+    int? parsedValue = noArgValue;
+    if (value != null) {
+      parsedValue = int.tryParse(value);
+    }
+    if (parsedValue == null) {
+      throw new CommandLineProblem.deprecated(
+          "Value for '$argument', '$value', isn't an int.");
+    }
+    result.options[canonicalArgument] = parsedValue;
+  }
+}
+
+class DefineValue extends ValueSpecification<Map<String, String>> {
+  const DefineValue();
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    int index = value!.indexOf('=');
+    String name;
+    String expression;
+    if (index != -1) {
+      name = value.substring(0, index);
+      expression = value.substring(index + 1);
+    } else {
+      name = value;
+      expression = value;
+    }
+    result.defines[name] = expression;
+  }
+}
+
+class StringListValue extends ValueSpecification<List<String>?> {
+  const StringListValue();
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    List<String> values = result.options[canonicalArgument] ??= <String>[];
+    values.addAll(value!.split(","));
+  }
+}
+
+class UriListValue extends ValueSpecification<List<Uri>?> {
+  const UriListValue();
+
+  void processValue(ParsedOptions result, String canonicalArgument,
+      String argument, String? value) {
+    List<Uri> values = result.options[canonicalArgument] ??= <Uri>[];
+    values.addAll(value!.split(",").map(resolveInputUri));
+  }
+}
+
+class Option<T> {
+  final String flag;
+
+  final ValueSpecification<T?> spec;
+
+  final bool isDefines;
+
+  final List<String> aliases;
+
+  const Option(this.flag, this.spec,
+      {this.isDefines: false, this.aliases: const []});
+
+  T read(ParsedOptions parsedOptions) =>
+      (isDefines ? parsedOptions.defines : parsedOptions.options[flag]) as T;
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart b/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart
new file mode 100644
index 0000000..2600d6d
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 'relativize.dart';
+
+Uri resolveInputUri(String path) {
+  Uri uri;
+  if (path.indexOf(":") == -1) {
+    uri = new Uri.file(path, windows: isWindows);
+  } else if (!isWindows) {
+    uri = parseUri(path);
+  } else {
+    uri = resolveAmbiguousWindowsPath(path);
+  }
+  return Uri.base.resolveUri(uri);
+}
+
+Uri parseUri(String path) {
+  if (path.startsWith("file:")) {
+    if (Uri.base.scheme == "file") {
+      // The Uri class doesn't handle relative file URIs correctly, the
+      // following works around that issue.
+      return new Uri(path: Uri.parse("x-$path").path);
+    }
+  }
+  return Uri.parse(path);
+}
+
+Uri resolveAmbiguousWindowsPath(String path) {
+  try {
+    return new Uri.file(path, windows: isWindows);
+  } on ArgumentError catch (_) {
+    return parseUri(path);
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 8b5f6ac..fe7fc3e 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 23.0.0
+version: 25.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 31f5089..07b7e12 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
@@ -594,7 +594,8 @@
       var e = expr('Null');
       var s = if_(e, []);
       var flow = FlowAnalysis<Node, Statement, Expression, Var, Type>(
-          h, AssignedVariables<Node, Var>());
+          h, AssignedVariables<Node, Var>(),
+          respectImplicitlyTypedVarInitializers: true);
       flow.ifStatement_conditionBegin();
       flow.ifStatement_thenBegin(e, s);
       expect(() => flow.finish(), _asserts);
@@ -1308,6 +1309,75 @@
       ]);
     });
 
+    group('initialize() promotes implicitly typed vars to type parameter types',
+        () {
+      test('when not final', () {
+        var h = Harness()
+          ..addSubtype('T&int', 'T', true)
+          ..addFactor('T', 'T&int', 'T');
+        var x = Var('x', 'T', isImplicitlyTyped: true);
+        h.run([
+          declareInitialized(x, expr('T&int')),
+          checkPromoted(x, 'T&int'),
+        ]);
+      });
+
+      test('when final', () {
+        var h = Harness()
+          ..addSubtype('T&int', 'T', true)
+          ..addFactor('T', 'T&int', 'T');
+        var x = Var('x', 'T', isImplicitlyTyped: true);
+        h.run([
+          declareInitialized(x, expr('T&int'), isFinal: true),
+          checkPromoted(x, 'T&int'),
+        ]);
+      });
+    });
+
+    group(
+        "initialize() doesn't promote explicitly typed vars to type "
+        'parameter types', () {
+      test('when not final', () {
+        var h = Harness();
+        var x = Var('x', 'T');
+        h.run([
+          declareInitialized(x, expr('T&int')),
+          checkNotPromoted(x),
+        ]);
+      });
+
+      test('when final', () {
+        var h = Harness();
+        var x = Var('x', 'T');
+        h.run([
+          declareInitialized(x, expr('T&int'), isFinal: true),
+          checkNotPromoted(x),
+        ]);
+      });
+    });
+
+    group(
+        "initialize() doesn't promote implicitly typed vars to ordinary types",
+        () {
+      test('when not final', () {
+        var h = Harness();
+        var x = Var('x', 'dynamic', isImplicitlyTyped: true);
+        h.run([
+          declareInitialized(x, expr('Null')),
+          checkNotPromoted(x),
+        ]);
+      });
+
+      test('when final', () {
+        var h = Harness();
+        var x = Var('x', 'dynamic', isImplicitlyTyped: true);
+        h.run([
+          declareInitialized(x, expr('Null'), isFinal: true),
+          checkNotPromoted(x),
+        ]);
+      });
+    });
+
     test('initialize() stores expressionInfo when not late', () {
       var h = Harness();
       var x = Var('x', 'Object');
@@ -1338,6 +1408,48 @@
       ]);
     });
 
+    test(
+        'initialize() does not store expressionInfo for implicitly typed '
+        'vars, pre-bug fix', () {
+      var h = Harness(respectImplicitlyTypedVarInitializers: false);
+      var x = Var('x', 'Object', isImplicitlyTyped: true);
+      var y = Var('y', 'int?');
+      h.run([
+        declareInitialized(x, y.expr.eq(nullLiteral)),
+        getSsaNodes((nodes) {
+          expect(nodes[x]!.expressionInfo, isNull);
+        }),
+      ]);
+    });
+
+    test(
+        'initialize() stores expressionInfo for implicitly typed '
+        'vars, post-bug fix', () {
+      var h = Harness(respectImplicitlyTypedVarInitializers: true);
+      var x = Var('x', 'Object', isImplicitlyTyped: true);
+      var y = Var('y', 'int?');
+      h.run([
+        declareInitialized(x, y.expr.eq(nullLiteral)),
+        getSsaNodes((nodes) {
+          expect(nodes[x]!.expressionInfo, isNotNull);
+        }),
+      ]);
+    });
+
+    test(
+        'initialize() stores expressionInfo for explicitly typed '
+        'vars, pre-bug fix', () {
+      var h = Harness(respectImplicitlyTypedVarInitializers: false);
+      var x = Var('x', 'Object');
+      var y = Var('y', 'int?');
+      h.run([
+        declareInitialized(x, y.expr.eq(nullLiteral)),
+        getSsaNodes((nodes) {
+          expect(nodes[x]!.expressionInfo, isNotNull);
+        }),
+      ]);
+    });
+
     test('initialize() does not store expressionInfo for trivial expressions',
         () {
       var h = Harness();
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart
index 4c7b408..32dd3c6 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.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.
 
+// @dart=2.13
+
 finalLocalBool(int? x) {
   final bool b = x == null;
   if (!b) {
@@ -11,6 +13,16 @@
   }
 }
 
+finalLocalBool_untyped(int? x) {
+  final b = x == null;
+  if (!b) {
+    // No promotion due to https://github.com/dart-lang/language/issues/1785
+    x;
+  } else {
+    x;
+  }
+}
+
 localBool(int? x) {
   bool b = x == null;
   if (!b) {
@@ -20,6 +32,16 @@
   }
 }
 
+localBool_untyped(int? x) {
+  var b = x == null;
+  if (!b) {
+    // No promotion due to https://github.com/dart-lang/language/issues/1785
+    x;
+  } else {
+    x;
+  }
+}
+
 localBool_assigned(int? x, bool b1) {
   bool b2 = b1;
   b2 = x == null;
@@ -30,6 +52,16 @@
   }
 }
 
+localBool_assigned_untyped(int? x, bool b1) {
+  var b2 = b1;
+  b2 = x == null;
+  if (!b2) {
+    /*nonNullable*/ x;
+  } else {
+    x;
+  }
+}
+
 localBool_assignedDynamic(int? x, bool b1) {
   dynamic b2 = b1;
   b2 = x == null;
@@ -49,6 +81,15 @@
   }
 }
 
+parameter_assigned_untyped(int? x, b) {
+  b = x == null;
+  if (!b) {
+    /*nonNullable*/ x;
+  } else {
+    x;
+  }
+}
+
 parameter_assignedDynamic(int? x, dynamic b) {
   b = x == null;
   if (!b) {
@@ -69,6 +110,17 @@
   }
 }
 
+lateFinalLocalBool_untyped(int? x) {
+  late final b = x == null;
+  if (!b) {
+    // We don't promote based on the initializers of late locals because we
+    // don't know when they execute.
+    x;
+  } else {
+    x;
+  }
+}
+
 lateLocalBool(int? x) {
   late bool b = x == null;
   if (!b) {
@@ -80,6 +132,17 @@
   }
 }
 
+lateLocalBool_untyped(int? x) {
+  late var b = x == null;
+  if (!b) {
+    // We don't promote based on the initializers of late locals because we
+    // don't know when they execute.
+    x;
+  } else {
+    x;
+  }
+}
+
 lateLocalBool_assignedAndInitialized(int? x, bool b1) {
   late bool b2 = b1;
   b2 = x == null;
@@ -90,6 +153,16 @@
   }
 }
 
+lateLocalBool_assignedAndInitialized_untyped(int? x, bool b1) {
+  late var b2 = b1;
+  b2 = x == null;
+  if (!b2) {
+    /*nonNullable*/ x;
+  } else {
+    x;
+  }
+}
+
 lateLocalBool_assignedButNotInitialized(int? x) {
   late bool b;
   b = x == null;
@@ -100,6 +173,16 @@
   }
 }
 
+lateLocalBool_assignedButNotInitialized_untyped(int? x) {
+  late var b;
+  b = x == null;
+  if (!b) {
+    /*nonNullable*/ x;
+  } else {
+    x;
+  }
+}
+
 rebaseWithDemotion(int? x, int? y, int? z, int? a) {
   x;
   y;
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/null_aware_call.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/null_aware_call.dart
new file mode 100644
index 0000000..0f37b5e
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/null_aware_call.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.
+
+class C {
+  C method(dynamic value) => this;
+  C Function(dynamic) get functionGetter => (_) => this;
+}
+
+void methodCall(C? c) {
+  c?.method(/*nonNullable*/ c);
+}
+
+void functionGetterCall(C? c) {
+  c?.functionGetter(/*nonNullable*/ c);
+}
+
+void methodCall_nullShorting(C? c) {
+  c?.method(/*nonNullable*/ c).method(/*nonNullable*/ c);
+}
+
+void functionGetterCall_nullShorting(C? c) {
+  c?.functionGetter(/*nonNullable*/ c).functionGetter(/*nonNullable*/ c);
+}
+
+void null_aware_cascades_promote_target(C? c) {
+  c?..method(/*nonNullable*/ c);
+  c?..functionGetter(/*nonNullable*/ c);
+}
+
+void null_aware_cascades_do_not_promote_others(C? c, int? i) {
+  // Promotions that happen inside null-aware cascade sections
+  // disappear after the cascade section, because they are not
+  // guaranteed to execute.
+  c?..method(i!);
+  c?..functionGetter(i!);
+  i;
+}
+
+void normal_cascades_do_promote_others(C c, int? i, int? j) {
+  // Promotions that happen inside non-null-aware cascade sections
+  // don't disappear after the cascade section.
+  c..method(i!);
+  c..functionGetter(j!);
+  /*nonNullable*/ i;
+  /*nonNullable*/ j;
+}
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/initialization.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/initialization.dart
index 35f2d63..799b884 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/initialization.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/initialization.dart
@@ -13,6 +13,11 @@
   x;
 }
 
+localVariable_null() {
+  var x = null;
+  x;
+}
+
 localVariable_hasInitializer(num a) {
   var x = a;
   x = 1;
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
index 97c17e9..53dbe5f 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
@@ -111,11 +111,7 @@
 /*cfe|cfe:builder.member: D4._simpleInstanceOfTrue:bool* Function(dynamic)**/
 /*cfe|cfe:builder.member: D4.==:bool* Function(dynamic)**/
 abstract class D4 implements C, B {
-  /// TODO: Solve CFE / analyzer difference.
-  /// In opt-out library we can choose any valid override, so the analyzer
-  /// takes the first one.
-  /*cfe|cfe:builder.member: D4.method:void Function(num*)**/
-  /*analyzer.member: D4.method:void Function(int*)**/
+  /*member: D4.method:void Function(num*)**/
 }
 
 /*class: D5:A,C,D5,Object*/
@@ -192,9 +188,5 @@
 /*cfe|cfe:builder.member: G2._simpleInstanceOfTrue:bool* Function(dynamic)**/
 /*cfe|cfe:builder.member: G2.==:bool* Function(dynamic)**/
 abstract class G2 implements F, E {
-  /// TODO: Solve CFE / analyzer difference.
-  /// In opt-out library we can choose any valid override, so the analyzer
-  /// takes the first one.
-  /*cfe|cfe:builder.member: G2.method:void Function(num*)**/
-  /*analyzer.member: G2.method:void Function(int*)**/
+  /*member: G2.method:void Function(num*)**/
 }
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index b8ce9e9..57ce172 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -388,7 +388,17 @@
 
   late final _typeAnalyzer = _MiniAstTypeAnalyzer(this);
 
-  Harness({this.legacy = false, String? thisType})
+  /// Indicates whether initializers of implicitly typed variables should be
+  /// accounted for by SSA analysis.  (In an ideal world, they always would be,
+  /// but due to https://github.com/dart-lang/language/issues/1785, they weren't
+  /// always, and we need to be able to replicate the old behavior when
+  /// analyzing old language versions).
+  final bool respectImplicitlyTypedVarInitializers;
+
+  Harness(
+      {this.legacy = false,
+      String? thisType,
+      this.respectImplicitlyTypedVarInitializers = true})
       : thisType = thisType == null ? null : Type(thisType);
 
   MiniIrBuilder get _irBuilder => _typeAnalyzer._irBuilder;
@@ -460,6 +470,9 @@
   }
 
   @override
+  bool isTypeParameterType(Type type) => type is PromotedTypeVariableType;
+
+  @override
   Type promoteToNonNull(Type type) {
     if (type.type.endsWith('?')) {
       return Type(type.type.substring(0, type.type.length - 1));
@@ -480,7 +493,9 @@
         ? FlowAnalysis<Node, Statement, Expression, Var, Type>.legacy(
             this, assignedVariables)
         : FlowAnalysis<Node, Statement, Expression, Var, Type>(
-            this, assignedVariables);
+            this, assignedVariables,
+            respectImplicitlyTypedVarInitializers:
+                respectImplicitlyTypedVarInitializers);
     _typeAnalyzer.dispatchStatement(b);
     _typeAnalyzer.finish();
   }
@@ -649,8 +664,10 @@
 class Var {
   final String name;
   final Type type;
+  final bool isImplicitlyTyped;
 
-  Var(this.name, String typeStr) : type = Type(typeStr);
+  Var(this.name, String typeStr, {this.isImplicitlyTyped = false})
+      : type = Type(typeStr);
 
   /// Creates an L-value representing a reference to this variable.
   LValue get expr => new _VariableReference(this, null);
@@ -1608,7 +1625,9 @@
       var initializerType = analyzeExpression(initializer);
       flow.declare(variable, true);
       flow.initialize(variable, initializerType, initializer,
-          isFinal: isFinal, isLate: isLate);
+          isFinal: isFinal,
+          isLate: isLate,
+          isImplicitlyTyped: variable.isImplicitlyTyped);
     }
   }
 
diff --git a/pkg/_fe_analyzer_shared/test/resolve_input_uri_test.dart b/pkg/_fe_analyzer_shared/test/resolve_input_uri_test.dart
new file mode 100644
index 0000000..b1da4e1
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/resolve_input_uri_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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/util/relativize.dart';
+import 'package:_fe_analyzer_shared/src/util/resolve_input_uri.dart';
+
+test() {
+  // data URI scheme is supported by default'.
+  expect('data', resolveInputUri('data:,foo').scheme);
+
+  // Custom Dart schemes are recognized by default.
+  expect('dart', resolveInputUri('dart:foo').scheme);
+  expect('package', resolveInputUri('package:foo').scheme);
+
+  // Unknown schemes are recognized by default.
+  expect(isWindows ? 'file' : 'c', resolveInputUri('c:/foo').scheme);
+  expect('test', resolveInputUri('test:foo').scheme);
+  expect('org-dartlang-foo', resolveInputUri('org-dartlang-foo:bar').scheme);
+  expect('test', resolveInputUri('test:/foo').scheme);
+  expect('org-dartlang-foo', resolveInputUri('org-dartlang-foo:/bar').scheme);
+  expect(
+      "${Uri.base.resolve('file.txt')}", "${resolveInputUri('file:file.txt')}");
+}
+
+main() {
+  // Test platform default.
+  test();
+  // Test non-Windows behavior.
+  isWindows = false;
+  test();
+  // Test Windows behavior.
+  isWindows = true;
+  test();
+}
+
+void expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Expected $expected, actual $actual';
+  }
+}
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 3816e5f..c319053 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -129,8 +129,10 @@
     var o = other as CompoundBenchMarkResult;
 
     var combined = CompoundBenchMarkResult(name);
-    var keys =
-        (<String>{}..addAll(results.keys)..addAll(o.results.keys)).toList();
+    var keys = (<String>{}
+          ..addAll(results.keys)
+          ..addAll(o.results.keys))
+        .toList();
 
     for (var key in keys) {
       combined.add(key, _combine(results[key], o.results[key]));
diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/analysis_server/benchmark/perf/memory_tests.dart
index a7b3682..b67b63c 100644
--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/memory_tests.dart
@@ -254,14 +254,11 @@
 
     var total = 0;
 
-    List isolateRefs = vm['isolates'];
-    for (Map isolateRef in isolateRefs) {
-      var isolate =
-          await service.call('getIsolate', {'isolateId': isolateRef['id']});
-
-      Map _heaps = isolate['_heaps'];
-      total += _heaps['new']['used'] + _heaps['new']['external'] as int;
-      total += _heaps['old']['used'] + _heaps['old']['external'] as int;
+    List isolateGroupsRefs = vm['isolateGroups'];
+    for (Map isolateGroupRef in isolateGroupsRefs) {
+      final heapUsage = await service.call('getIsolateGroupMemoryUsage',
+          {'isolateGroupId': isolateGroupRef['id']});
+      total += heapUsage['heapUsage'] + heapUsage['externalUsage'] as int;
     }
 
     service.dispose();
diff --git a/pkg/analysis_server/doc/tutorial/quick_fix.md b/pkg/analysis_server/doc/tutorial/quick_fix.md
new file mode 100644
index 0000000..3085dd9
--- /dev/null
+++ b/pkg/analysis_server/doc/tutorial/quick_fix.md
@@ -0,0 +1,563 @@
+# Writing a quick fix
+
+This document describes what a quick fix is and outlines the basic steps for
+writing a quick fix.
+
+## Overview
+
+A quick fix is an automated code edit that's associated with a diagnostic. The
+intent is to automate the work required to fix the issue being reported by the
+diagnostic.
+
+There are three ways for users to apply quick fixes: single-site, fix-in-file,
+and bulk. We'll discuss how to implement the support for each of these usages in
+its own section below. The sections build on each other, so we recommend reading
+them in order.
+
+Through most of this document we'll use a simple example. We'll assume you wrote
+a new lint named `could_be_final` that flags fields that could be marked final
+but aren't, and that you're adding a fix for it. The fix will simply add the
+keyword `final` to the field declaration.
+
+## Single-site fixes
+
+A single-site fix is one in which a single fix can be applied to a single
+location at which the associated diagnostic is reported.
+
+When the client asks for quick fixes, the analysis server computes the relevant
+diagnostics based on the cursor location. Then, for each diagnostic, it computes
+one or more fixes. It then returns the list of computed fixes to the client. The
+client typically allows the user to choose a single fix to be applied.
+
+### Design considerations
+
+Because quick fixes are computed on demand, they need to be computed quickly.
+(Some clients request quick fixes every time the user repositions the cursor.)
+That places a performance requirement on quick fixes, one that requires that the
+code to compute a quick fix can't perform any potentially lengthy computations
+such as searching all of the user's code or accessing the network. That, in
+turn, generally means that fixes can only support localized changes. They can
+add or remove text in the file in which the diagnostic was reported, but
+generally can't do more than that. 
+
+### Describing the fix
+
+Each fix has an instance of the class `FixKind` associated with it. The existing
+fixes for Dart diagnostics are defined in the class `DartFixKind`, fixes for the
+analysis options file are defined in the class `AnalysisOptionsFixKind`, and
+fixes for the pubspec file are in the class `PubspecFixKind`. A fix kind has an
+identifier, a priority, and a message.
+
+The identifier is used by some LSP-based clients to provide user-defined
+shortcuts. It's a hierarchical dot-separated identifier and should follow the
+pattern seen in the existing fix kinds.
+
+The priority is used to order the list of fixes when presented to the user. The
+larger the value the closer to the top of the list it will appear. If you're
+implementing a fix for Dart files, you should use one of the constants defined
+in `DartFixKindPriority` (typically `DartFixKindPriority.DEFAULT`), or add a new
+constant if there's a need for it.
+
+The message is what will be displayed to the user by the client. This should be
+a sentence fragment (no terminating period) that would be appropriate as a label
+in a menu or on a button. It should describe the change that will be made to the
+user's code.
+
+Create a static field, in the appropriate class, whose value is a `FixKind`
+describing the fix you're implementing. For our example you might define a new
+constant in `DartFixKind` like this:
+
+```dart
+static const ADD_FINAL = FixKind(
+  'dart.fix.add.final',
+  DartFixKindPriority.DEFAULT,
+  "Add 'final' modifier",
+);
+```
+
+### Implementing the fix, part 1
+
+To implement the fix you'll create a subclass of `CorrectionProducer`. Most of
+the existing correction producers are in the directory
+`analysis_server/lib/src/services/correction/dart`, so we'll start by creating
+a file named `add_final.dart` in that directory that contains the following:
+
+```dart
+// 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_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class AddFinal extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.ADD_FINAL;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static AddFinal newInstance() => AddFinal();
+}
+```
+
+The `compute` method is where the fix will be built. We'll come back to it in
+"Implementing the fix, part 2".
+
+The `fixKind` getter is how you associate the fix kind we created earlier with
+the fix produced by the `compute` method.
+
+The static `newInstance` method will be used later in "Registering the fix".
+
+There's another getter you might need to override. The message associated with
+the fix kind is actually a template that can be filled in at runtime. The
+placeholders in the message are denoted by integers inside curly braces (such as
+`{0}`). The integers are indexes into a list of replacement values, and the
+getter `fixArguments` returns the list of replacement values. The message we
+used above doesn't have any placeholders, but if we'd written the message as
+`"Add '{0}' modifier"`, then we could return the replacement values by
+implementing:
+
+```dart
+@override
+List<Object> get fixArguments => ['final'];
+```
+
+If you don't implement this getter, then the inherited getter will return an
+empty list. The number of elements in the list must match the largest index used
+in the message.
+
+### Testing the fix
+
+Before we look at implementing the `compute` method, we should probably write
+some tests. Even if you don't normally use a test-driven approach to coding, we
+recommend it in this case because writing the tests can help you think of corner
+cases that the implementation will need to handle. The corresponding tests are
+in the directory `analysis_server/test/src/services/correction/fix`, so we'll
+create a file named `add_final_test.dart` that contains the following:
+
+```dart
+// 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_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AddFinalTest);
+  });
+}
+
+@reflectiveTest
+class AddFinalTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_FINAL;
+
+  @override
+  String get lintCode => LintNames.could_be_final;
+}
+```
+
+These two getters tell the test framework to enable the lint being fixed and to
+expect a fix of the expected kind.
+
+The test can then be written in a method that looks something like this:
+
+```dart
+Future<void> test_withType() async {
+  await resolveTestCode('''
+class C {
+  String name;
+
+  C(this.name);
+}
+''');
+  await assertHasFix('''
+class C {
+  final String name;
+
+  C(this.name);
+}
+''');
+}
+```
+
+The test framework will create a file containing the first piece of code, run
+the lint over the code, use our correction producer to build a fix, apply the
+fix to the file, and textually compare the results with the second piece of
+code.
+
+### Registering the fix
+
+Before we can run the test, we need to register the correction producer so that
+it can be run.
+
+The list of fixes is computed by a `FixProcessor`. For each diagnostic passed
+to it, it will look up the diagnostic in a table to get a list of the correction
+producers it can use to produce fixes. There are three tables:
+
+- The `lintProducerMap` is used for fixes related to lint rules. The table is
+  keyed by the name of the lint to which the fix applies.
+
+- The `nonLintProducerMap` is used for all other fixes. The table is keyed by
+  the `ErrorCode` associated with the diagnostic.
+
+- The `nonLintMultiProducerMap` is used for multi-producers, which are
+  described below in "Multi-fix producers".
+
+Actually, the tables contain lists of functions used to create the producers. We
+do that so that producers can't accidentally carry state over from one use to
+the next. These functions are usually a tear-off of the static method you
+defined in "Implementing the fix, part 1".
+
+The last step is to add your correction producer to the appropriate map. If
+you're adding a fix for a lint, then you'd add an entry like
+
+```dart
+LintNames.could_be_final: [
+  AddFinal.newInstance,
+],
+```
+
+At this point you should be able to run the test and see it failing.
+
+### Implementing the fix, part 2
+
+We're now at a point where we can finish the implementation of the fix by
+implementing the `compute` method.
+
+The correction producer has access to most of the information you should need in
+order to write the fix. The change builder passed to `compute` is how you
+construct the fix that will be sent back to the client.
+
+The first step in the implementation of any fix is to find the location in the
+AST where the diagnostic was reported and verify that all the conditions on
+which the fix is predicated are valid. Assuming that the lint has been written
+and tested correctly, there's no need to test that the conditions that caused
+the lint rule to generate a diagnostic are still true. However, sometimes there
+are additional constraints that need to be satisfied before the fix can safely
+be applied. For example, for our fix, where we're only going to add a keyword,
+we'll need to ensure that there's only one field that would be impacted by the
+change, otherwise we might introduce more problems than there were before the
+fix.
+
+Of course, sometimes you'll end up duplicating some of the work done by the lint
+in the course of getting the information you need from the AST. While that's
+less than optimal, there isn't any mechanism for passing information from the
+diagnostic to the fix, so sometimes it just can't be avoided.
+
+For this example we're going to assume that the lint highlights the name of the
+field that could have been final. Finding the AST node is easy because it's done
+for you by the fix processor before `compute` is invoked. All you have to do is
+use the getter `node` to find the node at the offset of the lint's highlight
+region. We're expecting it to be the name of a field, so that's how we'll name
+the variable:
+
+```dart
+@override
+Future<void> compute(ChangeBuilder builder) async {
+  var fieldName = node;
+}
+```
+
+Then we need to verify that this node really is an identifier as expected:
+
+```dart
+@override
+Future<void> compute(ChangeBuilder builder) async {
+  var fieldName = node;
+  if (fieldName is! SimpleIdentifier) {
+    return;
+  }
+}
+```
+
+If it isn't, then we'll return. Because we haven't used the builder to create a
+fix, returning now means that no fix from this producer will be sent to the
+client.
+
+Simple identifiers appear in lots of places, so to be extra sure we have what
+we're looking for we'll also make sure that
+- the identifier is the name being declared by a variable declaration,
+- the variable declaration is in a list of variables in a field declaration, and
+- there's only one field being declared.
+
+```dart
+@override
+Future<void> compute(ChangeBuilder builder) async {
+  var fieldName = node;
+  if (fieldName is! SimpleIdentifier) {
+    return;
+  }
+  var field = fieldName.parent;
+  if (field is! VariableDeclaration || field.name != fieldName) {
+    return;
+  }
+  var fieldList = field.parent;
+  if (fieldList is! VariableDeclarationList ||
+          fieldList.variables.length > 1 ||
+          fieldList.parent is! FieldDeclaration) {
+    return;
+  }
+}
+```
+
+After all those checks we now know that the `fieldName` really is the name of a
+field and that there are no other fields that would be impacted by marking the
+list of fields with `final`.
+
+We're now ready to create the actual fix. To do that we're going to use the
+`ChangeBuilder` passed to the `compute` method. In the example below we'll
+introduce a couple of the methods on `ChangeBuilder`, but for more information
+you can read [Creating `SourceChange`s](https://github.com/dart-lang/sdk/blob/master/pkg/analyzer_plugin/doc/tutorial/creating_edits.md).
+
+Fields can be declared with either `final`, `const`, `var`, or a type
+annotation, and the change that needs to be made depends on how the field was
+declared. To figure that out we'll make use of the fact that the first three
+tokens are all accessible from the AST by using the getter `keyword`. If there
+is no keyword, then we can safely insert `final `, but if `var` was used then it
+has to be replaced. And, of course, if it's already `final` or `const` then we
+shouldn't do anything (and presumably the lint rule wouldn't have produced a
+lint).
+
+```dart
+@override
+Future<void> compute(ChangeBuilder builder) async {
+  var fieldName = node;
+  if (fieldName is! SimpleIdentifier) {
+    return;
+  }
+  var field = fieldName.parent;
+  if (field is! VariableDeclaration || field.name != fieldName) {
+    return;
+  }
+  var fieldList = field.parent;
+  if (fieldList is! VariableDeclarationList ||
+          fieldList.variables.length > 1 ||
+          fieldList.parent is! FieldDeclaration) {
+    return;
+  }
+  var keyword = fieldList.keyword;
+  if (keyword == null) {
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addSimpleInsertion(fieldList.offset, 'final ');
+    });
+  } else if (keyword.type == Keyword.VAR) {
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addSimpleReplacement(range.token(keyword), 'final');
+    });
+  }
+}
+```
+
+In both cases we're using `addDartFileEdit` to create an edit in a `.dart` file.
+If we only need to insert the keyword, then we'll use `addSimpleInsertion` to do
+the insertion, but if we need to replace the existing keyword, then we'll use
+`addSimpleReplacement` to do the replacement.
+
+We don't have a test case for the branch where the keyword `var` is used. We'll
+leave adding such a test as an exercise for the reader.
+
+In this example we're just adding a single keyword, so we're avoiding any need
+to worry about formatting. As a general principle we don't attempt to format the
+code after it's been modified, but we do make an effort to leave the code in a
+reasonably readable state. There's a getter (`eol`) that you can use to get the
+end-of-line marker that should be used in the file, and there's another getter
+(`utils`) that will return an object with several utility methods that help with
+things like getting the right indentation for nested code.
+
+If we were adding a fix for a non-lint diagnostic, then there would be a couple
+of minor differences. First, we'd register the correction producer using the
+diagnostic's error code. Second, the test class would be a subclass of
+`FixProcessorTest` and wouldn't specify the name of the lint.
+
+### Multi-fix producers
+
+We skipped over the map named `nonLintMultiProducerMap` earlier, promising that
+we'd return to it later. You'll probably never have a need for it, but in case
+you do this section will hopefully tell you what you need to know.
+
+There's a subclass of `CorrectionProducer` named `MultiCorrectionProducer` and
+this map is how you register one of them. That class exists for rare cases where
+you need to use a single correction producer to produce multiple fixes. This is
+generally only needed when you can't know in advance the maximum number of
+fixes that might need to be produced. For example, if there is an undefined
+identifier, and it might be possible to add an import to fix the problem,
+there's no way to know in advance how many libraries might define the name, but
+we'd want to proposing adding an import for each such library.
+
+If you are able to enumerate the possible fixes ahead of time, then you're
+better off to create one subclass of `CorrectionProducer` for each of the fixes.
+For example, taking the case of an undefined identifier again, another way to
+fix the problem is to add a declaration of the name. There are a finite number
+of kinds of declarations a user might want: class, mixin, variable, etc. Even
+though some kinds of declarations might not make sense because of how the
+identifier is being used, it's better to have a separate correction producer for
+each kind of declaration and have each one determine whether to generate a fix.
+
+And, we don't currently have support for associating a `MultiCorrectionProducer`
+with a lint, so if you're writing fixes for a lint then this option isn't
+available to you.
+
+## Fix-in-file fixes
+
+A fix-in-file fix is one in which a single fix can be applied that will fix all
+the locations within a single file at which a single kind of diagnostic has been
+reported.
+
+When the client asks for quick fixes, in addition to computing the single-site
+fixes, the analysis server looks to see whether any of the diagnostics at the
+cursor location are also reported at other places in the same file. If any of
+them are, and if the fix supports being used as a fix-in-file fix, then the
+analysis server will attempt to apply the fix in each of those locations and to
+build another fix that will apply edits to all the locations at which the
+diagnostic was reported.
+
+The fix-in-file fix will only be shown when there is more than one diagnostic
+for which your fix is able to produce an edit. For example, if there are three
+fields that could all be made final, but the fix only produces an edit for one
+of those places (maybe because the other two are in lists of fields), then the
+fix-in-file fix won't be shown.
+
+If a fix-in-file fix can be created then it will be returned along with any of
+the single-site fixes computed at the cursor location.
+
+In other words, most of the support for doing this comes for free; the only
+requirement is that you declare that your fix can be used this way.
+
+### Design considerations
+
+So why isn't this the default? Because it isn't always appropriate to support a
+fix-in-file fix. We believe that it's better for users to sometimes not have a
+fix-in-file fix that would have been appropriate than it is for them to have one
+that isn't appropriate. While there isn't a complete list of situations in which
+a fix-in-file fix isn't appropriate, let's look at a couple of the cases to
+consider.
+
+First, some fixes, by nature, should only be applied after due consideration.
+For example, there's a fix that will create a class declaration in response to
+seeing a reference to an undefined name. While it's useful to have a way to
+declare the name, how the name should be defined depends on the user's intent,
+so it probably isn't appropriate to create class declarations for all undefined
+identifiers without considering each case.
+
+Second, some fixes cause changes that impact other diagnostics of the same kind.
+In such a case the automated support for fix-in-file fixes might well cause an
+invalid edit to be produced, and fixes should never corrupt the user's code. For
+example, there's a fix to add `const ` before a constructor invocation. If some
+arguments to the invocation are also constructor invocations then the framework
+could add an unnecessary keyword, which would be undesirable.
+
+### Enabling the fix
+
+If it _is_ appropriate for your fix to be used as a fix-in-file fix, then there
+are two things you'll need to do to enable the fix-in-file support. The first
+step is to define another `FixKind` (in the same file in which you defined the
+first fix kind) that looks something like the following:
+
+```dart
+static const ADD_FINAL_MULTI = FixKind(
+  'dart.fix.add.final.multi',
+  DartFixKindPriority.IN_FILE,
+  "Add 'final' modifier everywhere in file",
+);
+```
+
+This is different than the original fix kind in the following ways:
+- both the name of the field and the identifier have a suffix added,
+- the priority is lower than the single location fixes, and
+- the message is worded in a way that makes it clear that multiple locations
+  will be changed.
+
+The second step is to implement a couple of additional getters in your
+`CorrectionProducer`. First, let the framework know that your fix can be used in
+this way:
+
+```dart
+@override
+bool get canBeAppliedToFile => true;
+```
+
+Then specify the fix kind associated with the fix-in-file fix:
+
+```dart
+@override
+FixKind get multiFixKind => DartFixKind.ADD_FINAL_MULTI;
+```
+
+And, if the message takes arguments (which the example above doesn't), provide
+them using something like the following:
+
+```dart
+@override
+List<Object> get multiFixArguments => ['first', 'second'];
+```
+
+That's it; the fix-in-file fix should now appear.
+
+You should, of course, write tests for the fix. Those tests will be similar in
+structure to those written to test the single application use case, but will be
+in a subclass of `FixInFileProcessorTest`. They should be added to the test file
+you created earlier for the single-site fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
+
+The most important distinction between the two is that for the fix-in-file tests
+you'll need to ensure that there are at least two diagnostics produced for the
+test code. If possible, those two diagnostics ought to be overlapping in terms
+of the region of code impacted by the fix. For example, if the fix reverses the
+order of two arguments in an argument list (such as by converting `m(a, b)` to
+`m(b, a)`), then make one of the arguments be an invocation of `m` whose
+arguments would also need to be swapped (such as `m(a, m(b, c)`).
+
+## Bulk fixes
+
+A bulk fix is one in which all of the fixes for all of the diagnostics that have
+been reported in one or more files, such as an entire package, are applied in a
+single operation. This kind of fix is currently available through the `dart fix`
+command-line tool.
+
+A bulk fix is computed in a manner similar to the way a fix-in-file fix is
+computed except that all of the diagnostics across all of the specified files
+are iterated over. Unlike the fix-in-file fixes, when bulk fixes are requested
+only the one bulk fix that was computed is returned.
+
+### Design considerations
+
+The considerations for why you might not want to enable the fix for bulk
+application using `dart fix` include all of those given above for fix-in-file
+fixes, but there are a couple of other considerations to keep in mind.
+
+First, `dart fix` is a command-line tool, so unlike changes made in an editor
+there is no support for rolling back the changes it makes (other than whatever
+support the user has from their source control system).
+
+Second, the tool applies fixes to more than just a single diagnostic, so there
+are likely to be more edits applied. That means that there's an even higher
+probability of having conflicts between edits. The framework handles some kinds
+of conflicts automatically, but can't handle everything.
+
+### Enabling the fix
+
+If you decide that you do want your fix to be supported by `dart fix`, the only
+change that's required is to implement the following getter:
+
+```dart
+@override
+bool get canBeAppliedInBulk => true;
+```
+
+You should, of course, write tests for bulk application of the fix. Those tests
+will be identical in nature to those written to test the fix-in-file use case,
+but will be in a subclass of `BulkFixProcessorTest`. They should also be added
+to the test file you created earlier for the single-site and fix-in-file fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 3896905..97e8276 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -24,6 +24,7 @@
 import 'package:analysis_server/src/domain_execution.dart';
 import 'package:analysis_server/src/domain_kythe.dart';
 import 'package:analysis_server/src/domain_server.dart';
+import 'package:analysis_server/src/domains/analysis/macro_files.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
@@ -54,6 +55,7 @@
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
 import 'package:http/http.dart' as http;
 import 'package:telemetry/crash_reporting.dart';
@@ -613,6 +615,10 @@
   /// Base path where to cache data.
   String? cacheFolder;
 
+  /// The path to the package config file override.
+  /// If `null`, then the default discovery mechanism is used.
+  String? packagesFile;
+
   /// The analytics instance; note, this object can be `null`, and should be
   /// accessed via a null-aware operator.
   telemetry.Analytics? analytics;
@@ -718,7 +724,10 @@
   server.AnalysisNavigationParams _computeNavigationParams(
       String path, CompilationUnit unit) {
     var collector = NavigationCollectorImpl();
-    computeDartNavigation(resourceProvider, collector, unit, null, null);
+    computeDartNavigation(resourceProvider, collector, unit, null, null,
+        analyzerConverter: AnalyzerConverter(
+            locationProvider:
+                MacroElementLocationProvider(MacroFiles(resourceProvider))));
     collector.createRegions();
     return server.AnalysisNavigationParams(
         path, collector.regions, collector.targets, collector.files);
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 4b28f5c..5bd16c2 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -168,7 +168,9 @@
     if (baseResourceProvider is PhysicalResourceProvider) {
       processRunner ??= ProcessRunner();
     }
-    final pubCommand = processRunner != null
+    final pubCommand = processRunner != null &&
+            Platform.environment[PubCommand.disablePubCommandEnvironmentKey] ==
+                null
         ? PubCommand(instrumentationService, processRunner)
         : null;
 
@@ -219,6 +221,7 @@
     contextManager = ContextManagerImpl(
       resourceProvider,
       sdkManager,
+      options.packagesFile,
       byteStore,
       fileContentCache,
       analysisPerformanceLogger,
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 71e8148..6ff6528 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -61,7 +61,8 @@
     return null;
   }
 
-  CheckNameResponse? checkNewName(String filePath, int line, int column, String name) {
+  CheckNameResponse? checkNewName(
+      String filePath, int line, int column, String name) {
     var resolvedUnit = _fileResolver.resolve(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
@@ -81,7 +82,7 @@
     } else if (element is FunctionElement) {
       status = validateFunctionName(name);
     }
-    if (status == null){
+    if (status == null) {
       return null;
     }
     return CheckNameResponse(lineInfo, status, element.displayName);
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 28509f0..10acd68 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -142,6 +142,10 @@
   /// particular context.
   final DartSdkManager sdkManager;
 
+  /// The path to the package config file override.
+  /// If `null`, then the default discovery mechanism is used.
+  final String? packagesFile;
+
   /// The storage for cached results.
   final ByteStore _byteStore;
 
@@ -213,6 +217,7 @@
   ContextManagerImpl(
       this.resourceProvider,
       this.sdkManager,
+      this.packagesFile,
       this._byteStore,
       this._fileContentCache,
       this._performanceLog,
@@ -428,6 +433,7 @@
       resourceProvider: resourceProvider,
       scheduler: _scheduler,
       sdkPath: sdkManager.defaultSdkDirectory,
+      packagesFile: packagesFile,
       fileContentCache: _fileContentCache,
     );
 
@@ -501,7 +507,7 @@
     }
   }
 
-  List<String> _getPossibelBazelBinPaths(_BazelWatchedFiles watched) => [
+  List<String> _getPossibleBazelBinPaths(_BazelWatchedFiles watched) => [
         pathContext.join(watched.workspace, 'bazel-bin'),
         pathContext.join(watched.workspace, 'blaze-bin'),
       ];
@@ -530,7 +536,7 @@
     // we do, we'll simply recreate all contexts to make sure that we follow the
     // correct paths.
     var bazelSymlinkPaths = bazelWatchedPathsPerFolder.values
-        .expand((watched) => _getPossibelBazelBinPaths(watched))
+        .expand((watched) => _getPossibleBazelBinPaths(watched))
         .toSet();
     if (allEvents.any((event) => bazelSymlinkPaths.contains(event.path))) {
       refresh();
@@ -572,15 +578,16 @@
 
     _instrumentationService.logWatchEvent('<unknown>', path, type.toString());
 
-    final isPubpsec = file_paths.isPubspecYaml(pathContext, path);
+    final isPubspec = file_paths.isPubspecYaml(pathContext, path);
     if (file_paths.isAnalysisOptionsYaml(pathContext, path) ||
+        file_paths.isBazelBuild(pathContext, path) ||
         file_paths.isDotPackages(pathContext, path) ||
         file_paths.isPackageConfigJson(pathContext, path) ||
-        isPubpsec ||
+        isPubspec ||
         false) {
       _createAnalysisContexts();
 
-      if (isPubpsec) {
+      if (isPubspec) {
         if (type == ChangeType.REMOVE) {
           callbacks.pubspecRemoved(path);
         } else {
@@ -684,7 +691,7 @@
   void _startWatchingBazelBinPaths(_BazelWatchedFiles watched) {
     var watcherService = bazelWatcherService;
     if (watcherService == null) return;
-    var paths = _getPossibelBazelBinPaths(watched);
+    var paths = _getPossibleBazelBinPaths(watched);
     watcherService.startWatching(
         watched.workspace, BazelSearchInfo(paths[0], paths));
   }
@@ -693,7 +700,7 @@
   void _stopWatchingBazelBinPaths(_BazelWatchedFiles watched) {
     var watcherService = bazelWatcherService;
     if (watcherService == null) return;
-    var paths = _getPossibelBazelBinPaths(watched);
+    var paths = _getPossibleBazelBinPaths(watched);
     watcherService.stopWatching(watched.workspace, paths[0]);
   }
 
diff --git a/pkg/analysis_server/lib/src/domains/analysis/macro_files.dart b/pkg/analysis_server/lib/src/domains/analysis/macro_files.dart
new file mode 100644
index 0000000..be391be
--- /dev/null
+++ b/pkg/analysis_server/lib/src/domains/analysis/macro_files.dart
@@ -0,0 +1,121 @@
+// 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:analyzer/dart/element/element.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
+
+class MacroElementLocationProvider implements ElementLocationProvider {
+  final MacroFiles _macroFiles;
+
+  MacroElementLocationProvider(this._macroFiles);
+
+  @override
+  protocol.Location? forElement(Element element) {
+    if (element is HasMacroGenerationData) {
+      var macro = (element as HasMacroGenerationData).macro;
+      if (macro != null) {
+        return _forElement(element, macro);
+      }
+    }
+  }
+
+  protocol.Location? _forElement(Element element, MacroGenerationData macro) {
+    var unitElement = element.thisOrAncestorOfType<CompilationUnitElement>();
+    if (unitElement is! CompilationUnitElementImpl) {
+      return null;
+    }
+
+    var generatedFile = _macroFiles.generatedFile(unitElement);
+    if (generatedFile == null) {
+      return null;
+    }
+
+    var nameOffset = element.nameOffset;
+    var nameLength = element.nameLength;
+
+    var lineInfo = generatedFile.lineInfo;
+    var offsetLocation = lineInfo.getLocation(nameOffset);
+    var endLocation = lineInfo.getLocation(nameOffset + nameLength);
+
+    return protocol.Location(generatedFile.path, nameOffset, nameLength,
+        offsetLocation.lineNumber, offsetLocation.columnNumber,
+        endLine: endLocation.lineNumber, endColumn: endLocation.columnNumber);
+  }
+}
+
+/// Note, this class changes the file system.
+class MacroFiles {
+  final ResourceProvider _resourceProvider;
+
+  /// Keys are source paths.
+  final Map<String, _MacroGeneratedFile> _files = {};
+
+  MacroFiles(this._resourceProvider);
+
+  /// If [unitElement] has macro-generated elements, write the combined
+  /// content into a new file in `.dart_tool`, and return the description of
+  /// this file.
+  _MacroGeneratedFile? generatedFile(CompilationUnitElementImpl unitElement) {
+    var sourcePath = unitElement.source.fullName;
+
+    var result = _files[sourcePath];
+    if (result != null) {
+      return result;
+    }
+
+    var sourceFile = _resourceProvider.getFile(sourcePath);
+
+    // TODO(scheglov) Use workspace?
+    Folder? packageRoot;
+    for (var parent in sourceFile.parent2.withAncestors) {
+      if (parent.getChildAssumingFile(file_paths.pubspecYaml).exists) {
+        packageRoot = parent;
+        break;
+      }
+    }
+    if (packageRoot == null) {
+      return null;
+    }
+
+    var pathContext = _resourceProvider.pathContext;
+    var relativePath = pathContext.relative(
+      sourcePath,
+      from: packageRoot.path,
+    );
+    var generatedPath = pathContext.join(
+        packageRoot.path, '.dart_tool', 'analyzer', 'macro', relativePath);
+
+    var generatedContent = unitElement.macroGeneratedContent;
+    if (generatedContent == null) {
+      return null;
+    }
+
+    try {
+      _resourceProvider.getFile(generatedPath)
+        ..parent2.create()
+        ..writeAsStringSync(generatedContent);
+    } on FileSystemException {
+      return null;
+    }
+
+    return _files[sourcePath] = _MacroGeneratedFile(
+      generatedPath,
+      generatedContent,
+    );
+  }
+}
+
+class _MacroGeneratedFile {
+  final String path;
+  final String content;
+  final LineInfo lineInfo;
+
+  _MacroGeneratedFile(this.path, this.content)
+      : lineInfo = LineInfo.fromContent(content);
+}
diff --git a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
index 54ffabf..5eaa592 100644
--- a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
+++ b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
@@ -166,6 +166,8 @@
       return protocol.ElementKind.MIXIN;
     case DeclarationKind.SETTER:
       return protocol.ElementKind.SETTER;
+    case DeclarationKind.TYPE_ALIAS:
+      return protocol.ElementKind.TYPE_ALIAS;
     case DeclarationKind.VARIABLE:
       return protocol.ElementKind.TOP_LEVEL_VARIABLE;
   }
diff --git a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
index 9a0b40a..bac248e 100644
--- a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
@@ -59,6 +59,7 @@
   final bool documentChanges;
   final bool configuration;
   final bool createResourceOperations;
+  final bool renameResourceOperations;
   final bool completionDeprecatedFlag;
   final bool applyEdit;
   final bool workDoneProgress;
@@ -102,6 +103,10 @@
                 .workspace?.workspaceEdit?.resourceOperations
                 ?.contains(ResourceOperationKind.Create) ??
             false,
+        renameResourceOperations = raw
+                .workspace?.workspaceEdit?.resourceOperations
+                ?.contains(ResourceOperationKind.Rename) ??
+            false,
         definitionLocationLink =
             raw.textDocument?.definition?.linkSupport ?? false,
         completionItemTags = _listToSet(
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
index 9093676..83b987b 100644
--- a/pkg/analysis_server/lib/src/lsp/client_configuration.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -124,8 +124,22 @@
   bool get previewCommitCharacters =>
       _settings['previewCommitCharacters'] as bool? ?? false;
 
-  /// Whether diagnostics should be generated for TODO comments.
-  bool get showTodos => _settings['showTodos'] as bool? ?? false;
+  /// Whether diagnostics should be generated for all TODO comments.
+  bool get showAllTodos =>
+      _settings['showTodos'] is bool ? _settings['showTodos'] as bool : false;
+
+  /// A specific set of TODO comments that should generate diagnostics.
+  ///
+  /// Codes are all forced UPPERCASE regardless of what the client supplies.
+  ///
+  /// [showAllTodos] should be checked first, as this will return an empty
+  /// set if `showTodos` is a boolean.
+  Set<String> get showTodoTypes => _settings['showTodos'] is List
+      ? (_settings['showTodos'] as List)
+          .cast<String>()
+          .map((kind) => kind.toUpperCase())
+          .toSet()
+      : const {};
 }
 
 /// Wraps the client (editor) configuration for a specific resource.
@@ -156,4 +170,12 @@
   /// If null, the formatters default will be used.
   int? get lineLength =>
       _settings['lineLength'] as int? ?? _fallback?.lineLength;
+
+  /// Whether to rename files when renaming classes inside them where the file
+  /// and class name match.
+  ///
+  /// Values are "always", "prompt", "never". Any other values should be treated
+  /// like "never".
+  String get renameFilesWithClasses =>
+      _settings['renameFilesWithClasses'] as String? ?? 'never';
 }
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index 9f46f71..ca213ec 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -218,6 +218,8 @@
 
 /// Strings used in user prompts (window/showMessageRequest).
 abstract class UserPromptActions {
+  static const String yes = 'Yes';
+  static const String no = 'No';
   static const String cancel = 'Cancel';
   static const String renameAnyway = 'Rename Anyway';
 }
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..d203ef9 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisGetNavigationParams;
+import 'package:analysis_server/src/domains/analysis/macro_files.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
@@ -15,6 +16,7 @@
 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';
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
 import 'package:collection/collection.dart';
 
@@ -54,8 +56,10 @@
     final result = await server.getResolvedUnit(path);
     final unit = result?.unit;
     if (result?.state == ResultState.VALID && unit != null) {
-      computeDartNavigation(
-          server.resourceProvider, collector, unit, offset, 0);
+      computeDartNavigation(server.resourceProvider, collector, unit, offset, 0,
+          analyzerConverter: AnalyzerConverter(
+              locationProvider: MacroElementLocationProvider(
+                  MacroFiles(server.resourceProvider))));
       collector.createRegions();
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
index 1195c9b..68e112e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
@@ -56,13 +56,17 @@
       if (hover.isDeprecated ?? false) {
         content.write('(deprecated) ');
       }
-      content..writeln(hover.elementDescription)..writeln('```');
+      content
+        ..writeln(hover.elementDescription)
+        ..writeln('```');
     }
 
     // Source library.
     final containingLibraryName = hover.containingLibraryName;
     if (containingLibraryName != null && containingLibraryName.isNotEmpty) {
-      content..writeln('*$containingLibraryName*')..writeln();
+      content
+        ..writeln('*$containingLibraryName*')
+        ..writeln();
     }
 
     // Doc comments.
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
index 6773974..9a92867 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
@@ -4,11 +4,14 @@
 
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/client_configuration.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
+import 'package:analyzer/dart/element/element.dart';
 
 class PrepareRenameHandler
     extends MessageHandler<TextDocumentPositionParams, RangeAndPlaceholder?> {
@@ -75,14 +78,25 @@
 }
 
 class RenameHandler extends MessageHandler<RenameParams, WorkspaceEdit?> {
+  final _upperCasePattern = RegExp('[A-Z]');
+
   RenameHandler(LspAnalysisServer server) : super(server);
 
+  LspGlobalClientConfiguration get config => server.clientConfiguration.global;
+
   @override
   Method get handlesMessage => Method.textDocument_rename;
 
   @override
   LspJsonHandler<RenameParams> get jsonHandler => RenameParams.jsonHandler;
 
+  /// Checks whether a client supports Rename resource operations.
+  bool get _clientSupportsRename {
+    final capabilities = server.clientCapabilities;
+    return (capabilities?.documentChanges ?? false) &&
+        (capabilities?.renameResourceOperations ?? false);
+  }
+
   @override
   Future<ErrorOr<WorkspaceEdit?>> handle(
       RenameParams params, CancellationToken token) async {
@@ -128,12 +142,6 @@
         return success(null);
       }
 
-      // TODO(dantup): Consider using window/showMessageRequest to prompt
-      // the user to see if they'd like to proceed with a rename if there
-      // are non-fatal errors or warnings. For now we will reject all errors
-      // (fatal and not) as this seems like the most logical behaviour when
-      // without a prompt.
-
       // Check the rename is valid here.
       final initStatus = await refactoring.checkInitialConditions();
       if (token.isCancellationRequested) {
@@ -195,8 +203,72 @@
         return fileModifiedError;
       }
 
-      final workspaceEdit = createWorkspaceEdit(server, change);
+      var workspaceEdit = createWorkspaceEdit(server, change);
+
+      // Check whether we should handle renaming the file to match the class.
+      if (_clientSupportsRename && _isClassRename(refactoring)) {
+        final pathContext = server.resourceProvider.pathContext;
+        // The rename must always be performed on the file that defines the
+        // class which is not necessarily the one where the rename was invoked.
+        final declaringFile = (refactoring as RenameUnitMemberRefactoringImpl)
+            .element
+            .declaration
+            ?.source
+            ?.fullName;
+        if (declaringFile != null) {
+          final folder = pathContext.dirname(declaringFile);
+          final actualFilename = pathContext.basename(declaringFile);
+          final oldComputedFilename =
+              _fileNameForClassName(refactoring.oldName);
+          final newFilename = _fileNameForClassName(params.newName);
+
+          // Only if the existing filename matches exactly what we'd expect for
+          // the original class name will we consider renaming.
+          if (actualFilename == oldComputedFilename) {
+            final renameConfig = config.renameFilesWithClasses;
+            final shouldRename = renameConfig == 'always' ||
+                (renameConfig == 'prompt' &&
+                    await _promptToRenameFile(actualFilename, newFilename));
+            if (shouldRename) {
+              final newPath = pathContext.join(folder, newFilename);
+              final renameEdit = createRenameEdit(declaringFile, newPath);
+              workspaceEdit = mergeWorkspaceEdits([workspaceEdit, renameEdit]);
+            }
+          }
+        }
+      }
+
       return success(workspaceEdit);
     });
   }
+
+  /// Computes a filename for a given class name (convert from PascalCase to
+  /// snake_case).
+  String _fileNameForClassName(String className) {
+    final fileName = className
+        .replaceAllMapped(_upperCasePattern,
+            (match) => match.start == 0 ? match[0]! : '_${match[0]}')
+        .toLowerCase();
+    return '$fileName.dart';
+  }
+
+  bool _isClassRename(RenameRefactoring refactoring) =>
+      refactoring is RenameUnitMemberRefactoringImpl &&
+      refactoring.element is ClassElement;
+
+  /// Asks the user whether they would like to rename the file along with the
+  /// class.
+  Future<bool> _promptToRenameFile(
+      String oldFilename, String newFilename) async {
+    final userChoice = await server.showUserPrompt(
+      MessageType.Info,
+      "Rename '$oldFilename' to '$newFilename'?",
+      [
+        MessageActionItem(title: UserPromptActions.yes),
+        MessageActionItem(title: UserPromptActions.no),
+      ],
+    );
+
+    return userChoice.title == UserPromptActions.yes;
+  }
 }
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 2dcd219..7098d09 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -920,7 +920,14 @@
     }
   }
 
-  bool _shouldSendError(protocol.AnalysisError error) =>
-      error.code != ErrorType.TODO.name.toLowerCase() ||
-      analysisServer.clientConfiguration.global.showTodos;
+  bool _shouldSendError(protocol.AnalysisError error) {
+    if (error.type.name != ErrorType.TODO.name) {
+      return true;
+    }
+    if (analysisServer.clientConfiguration.global.showAllTodos) {
+      return true;
+    }
+    return analysisServer.clientConfiguration.global.showTodoTypes
+        .contains(error.code.toUpperCase());
+  }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index da9bb2a..3a3e421 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -132,6 +132,30 @@
           .toList());
 }
 
+/// Create a [WorkspaceEdit] that renames [oldPath] to [newPath].
+WorkspaceEdit createRenameEdit(String oldPath, String newPath) {
+  final changes =
+      <Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>>[];
+
+  final rename = RenameFile(
+    oldUri: Uri.file(oldPath).toString(),
+    newUri: Uri.file(newPath).toString(),
+  );
+
+  final renameUnion =
+      Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>.t3(rename);
+
+  changes.add(renameUnion);
+
+  final edit = WorkspaceEdit(
+      documentChanges: Either2<
+          List<TextDocumentEdit>,
+          List<
+              Either4<TextDocumentEdit, CreateFile, RenameFile,
+                  DeleteFile>>>.t2(changes));
+  return edit;
+}
+
 /// Creates a [lsp.WorkspaceEdit] from a [server.SourceChange] that can include
 /// experimental [server.SnippetTextEdit]s if the client has indicated support
 /// for these in the experimental section of their client capabilities.
@@ -195,8 +219,12 @@
       case dec.DeclarationKind.CONSTRUCTOR:
         return const [lsp.CompletionItemKind.Constructor];
       case dec.DeclarationKind.ENUM:
-      case dec.DeclarationKind.ENUM_CONSTANT:
         return const [lsp.CompletionItemKind.Enum];
+      case dec.DeclarationKind.ENUM_CONSTANT:
+        return const [
+          lsp.CompletionItemKind.EnumMember,
+          lsp.CompletionItemKind.Enum,
+        ];
       case dec.DeclarationKind.FUNCTION:
         return const [lsp.CompletionItemKind.Function];
       case dec.DeclarationKind.FUNCTION_TYPE_ALIAS:
@@ -205,6 +233,8 @@
         return const [lsp.CompletionItemKind.Property];
       case dec.DeclarationKind.SETTER:
         return const [lsp.CompletionItemKind.Property];
+      case dec.DeclarationKind.TYPE_ALIAS:
+        return const [lsp.CompletionItemKind.Class];
       case dec.DeclarationKind.VARIABLE:
         return const [lsp.CompletionItemKind.Variable];
       default:
@@ -248,6 +278,8 @@
         return const [lsp.SymbolKind.Class];
       case server.DeclarationKind.SETTER:
         return const [lsp.SymbolKind.Property];
+      case server.DeclarationKind.TYPE_ALIAS:
+        return const [lsp.SymbolKind.Class];
       case server.DeclarationKind.VARIABLE:
         return const [lsp.SymbolKind.Variable];
       default:
@@ -411,8 +443,12 @@
       case server.ElementKind.CONSTRUCTOR_INVOCATION:
         return const [lsp.CompletionItemKind.Constructor];
       case server.ElementKind.ENUM:
-      case server.ElementKind.ENUM_CONSTANT:
         return const [lsp.CompletionItemKind.Enum];
+      case server.ElementKind.ENUM_CONSTANT:
+        return const [
+          lsp.CompletionItemKind.EnumMember,
+          lsp.CompletionItemKind.Enum,
+        ];
       case server.ElementKind.FIELD:
         return const [lsp.CompletionItemKind.Field];
       case server.ElementKind.FILE:
@@ -643,6 +679,33 @@
 bool isDartDocument(lsp.TextDocumentIdentifier? doc) =>
     doc?.uri.endsWith('.dart') ?? false;
 
+/// Merges two [WorkspaceEdit]s into a single one.
+///
+/// Will throw if given [WorkspaceEdit]s that do not use documentChanges.
+WorkspaceEdit mergeWorkspaceEdits(List<WorkspaceEdit> edits) {
+  // TODO(dantup): This method (and much other code here) should be
+  // significantly tidied up when nonfunction-type-aliases is available here.
+  final changes =
+      <Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>>[];
+
+  for (final edit in edits) {
+    // Flatten the Either into just the Union side to get a flat list.
+    final flatResourceChanges = edit.documentChanges!.map(
+      (edits) => edits.map((e) =>
+          Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>.t1(e)),
+      (resources) => resources,
+    );
+    changes.addAll(flatResourceChanges);
+  }
+
+  return WorkspaceEdit(
+      documentChanges: Either2<
+          List<TextDocumentEdit>,
+          List<
+              Either4<TextDocumentEdit, CreateFile, RenameFile,
+                  DeleteFile>>>.t2(changes));
+}
+
 lsp.Location navigationTargetToLocation(
   String targetFilePath,
   server.NavigationTarget target,
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 ab5399b..4d44191 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
@@ -135,6 +135,7 @@
   HighlightRegionType.TOP_LEVEL_VARIABLE: SemanticTokenTypes.variable,
   HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION:
       SemanticTokenTypes.variable,
+  HighlightRegionType.TYPE_ALIAS: SemanticTokenTypes.type,
   HighlightRegionType.TYPE_NAME_DYNAMIC: SemanticTokenTypes.type,
   HighlightRegionType.TYPE_PARAMETER: SemanticTokenTypes.typeParameter,
   HighlightRegionType.UNRESOLVED_INSTANCE_MEMBER_REFERENCE:
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index ac50553..632f7f8 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -152,6 +152,8 @@
           return protocol.ElementKind.MIXIN;
         case search.DeclarationKind.SETTER:
           return protocol.ElementKind.SETTER;
+        case search.DeclarationKind.TYPE_ALIAS:
+          return protocol.ElementKind.TYPE_ALIAS;
         case search.DeclarationKind.VARIABLE:
           return protocol.ElementKind.TOP_LEVEL_VARIABLE;
         default:
diff --git a/pkg/analysis_server/lib/src/search/workspace_symbols.dart b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
index 71d3b9b..bbcf5ac 100644
--- a/pkg/analysis_server/lib/src/search/workspace_symbols.dart
+++ b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
@@ -50,6 +50,7 @@
   METHOD,
   MIXIN,
   SETTER,
+  TYPE_ALIAS,
   VARIABLE
 }
 
@@ -186,6 +187,8 @@
         return DeclarationKind.GETTER;
       case ad.DeclarationKind.SETTER:
         return DeclarationKind.SETTER;
+      case ad.DeclarationKind.TYPE_ALIAS:
+        return DeclarationKind.TYPE_ALIAS;
       case ad.DeclarationKind.VARIABLE:
         return DeclarationKind.VARIABLE;
       default:
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 2fb7918..025eb5b 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -98,6 +98,9 @@
   /// The path to the data cache.
   static const String CACHE_FOLDER = 'cache';
 
+  /// The path to the package config file override.
+  static const String PACKAGES_FILE = 'packages';
+
   /// The name of the flag specifying the server protocol to use.
   static const String SERVER_PROTOCOL = 'protocol';
   static const String PROTOCOL_ANALYZER = 'analyzer';
@@ -156,6 +159,7 @@
 
     analysisServerOptions.clientVersion = results[CLIENT_VERSION];
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
+    analysisServerOptions.packagesFile = results[PACKAGES_FILE];
 
     // Read in any per-SDK overrides specified in <sdk>/config/settings.json.
     var sdkConfig = SdkConfiguration.readFromSdk();
@@ -602,6 +606,12 @@
     parser.addOption(CACHE_FOLDER,
         valueHelp: 'path',
         help: 'Override the location of the analysis server\'s cache.');
+    parser.addOption(
+      PACKAGES_FILE,
+      valueHelp: 'path',
+      help: 'The path to the package resolution configuration file, which '
+          'supplies a mapping of package names\ninto paths.',
+    );
 
     parser.addOption(
       SERVER_PROTOCOL,
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 b71fa3e..61eea1c 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
@@ -187,6 +187,7 @@
         kinds.add(protocol.ElementKind.ENUM);
         kinds.add(protocol.ElementKind.FUNCTION_TYPE_ALIAS);
         kinds.add(protocol.ElementKind.MIXIN);
+        kinds.add(protocol.ElementKind.TYPE_ALIAS);
       }
       if (opType.includeReturnValueSuggestions) {
         kinds.add(protocol.ElementKind.CONSTRUCTOR);
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 655d3dd..d635651 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
@@ -10,7 +10,6 @@
 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/dart/resolver/scope.dart';
 
 /// A contributor that produces suggestions based on the members of an
 /// extension.
@@ -113,8 +112,7 @@
   void _addExtensionMembers(LibraryElement containingLibrary,
       CompletionSuggestionKind? kind, DartType type) {
     var typeSystem = containingLibrary.typeSystem;
-    var nameScope = containingLibrary.scope;
-    for (var extension in nameScope.extensions) {
+    for (var extension in containingLibrary.accessibleExtensions) {
       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 7da38ea..fe38ee1 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
@@ -218,6 +218,8 @@
       return protocol.ElementKind.PREFIX;
     } else if (kind == ElementKind.TOP_LEVEL_VARIABLE) {
       return protocol.ElementKind.TOP_LEVEL_VARIABLE;
+    } else if (kind == ElementKind.TYPE_ALIAS) {
+      return protocol.ElementKind.TYPE_ALIAS;
     } else if (kind == ElementKind.TYPE_PARAMETER) {
       return protocol.ElementKind.TYPE_PARAMETER;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index b85a733..47624e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -32,202 +32,394 @@
 /// An enumeration of possible assist kinds.
 class DartAssistKind {
   static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = AssistKind(
-      'dart.assist.add.diagnosticPropertyReference',
-      30,
-      'Add a debug reference to this property');
+    'dart.assist.add.diagnosticPropertyReference',
+    30,
+    'Add a debug reference to this property',
+  );
   static const ADD_NOT_NULL_ASSERT = AssistKind(
-      'dart.assist.add.notNullAssert', 30, 'Add a not-null assertion');
-  static const ADD_RETURN_TYPE =
-      AssistKind('dart.assist.add.returnType', 30, 'Add return type');
-  static const ADD_TYPE_ANNOTATION =
-      AssistKind('dart.assist.add.typeAnnotation', 30, 'Add type annotation');
+    'dart.assist.add.notNullAssert',
+    30,
+    'Add a not-null assertion',
+  );
+  static const ADD_RETURN_TYPE = AssistKind(
+    'dart.assist.add.returnType',
+    30,
+    'Add return type',
+  );
+  static const ADD_TYPE_ANNOTATION = AssistKind(
+    'dart.assist.add.typeAnnotation',
+    30,
+    'Add type annotation',
+  );
   static const ASSIGN_TO_LOCAL_VARIABLE = AssistKind(
-      'dart.assist.assignToVariable', 30, 'Assign value to new local variable');
+    'dart.assist.assignToVariable',
+    30,
+    'Assign value to new local variable',
+  );
   static const CONVERT_CLASS_TO_MIXIN = AssistKind(
-      'dart.assist.convert.classToMixin', 30, 'Convert class to a mixin');
+    'dart.assist.convert.classToMixin',
+    30,
+    'Convert class to a mixin',
+  );
   static const CONVERT_DOCUMENTATION_INTO_BLOCK = AssistKind(
-      'dart.assist.convert.blockComment',
-      30,
-      'Convert to block documentation comment');
+    'dart.assist.convert.blockComment',
+    30,
+    'Convert to block documentation comment',
+  );
   static const CONVERT_DOCUMENTATION_INTO_LINE = AssistKind(
-      'dart.assist.convert.lineComment',
-      30,
-      'Convert to line documentation comment');
+    'dart.assist.convert.lineComment',
+    30,
+    'Convert to line documentation comment',
+  );
   static const CONVERT_INTO_ASYNC_BODY = AssistKind(
-      'dart.assist.convert.bodyToAsync', 29, 'Convert to async function body');
+    'dart.assist.convert.bodyToAsync',
+    29,
+    'Convert to async function body',
+  );
   static const CONVERT_INTO_BLOCK_BODY = AssistKind(
-      'dart.assist.convert.bodyToBlock', 30, 'Convert to block body');
+    'dart.assist.convert.bodyToBlock',
+    30,
+    'Convert to block body',
+  );
   static const CONVERT_INTO_EXPRESSION_BODY = AssistKind(
-      'dart.assist.convert.bodyToExpression', 30, 'Convert to expression body');
+    'dart.assist.convert.bodyToExpression',
+    30,
+    'Convert to expression body',
+  );
   static const CONVERT_INTO_FINAL_FIELD = AssistKind(
-      'dart.assist.convert.getterToFinalField', 30, 'Convert to final field');
+    'dart.assist.convert.getterToFinalField',
+    30,
+    'Convert to final field',
+  );
   static const CONVERT_INTO_FOR_INDEX = AssistKind(
-      'dart.assist.convert.forEachToForIndex', 30, 'Convert to for-index loop');
+    'dart.assist.convert.forEachToForIndex',
+    30,
+    'Convert to for-index loop',
+  );
   static const CONVERT_INTO_GENERIC_FUNCTION_SYNTAX = AssistKind(
-      'dart.assist.convert.toGenericFunctionSyntax',
-      30,
-      "Convert into 'Function' syntax");
+    'dart.assist.convert.toGenericFunctionSyntax',
+    30,
+    "Convert into 'Function' syntax",
+  );
   static const CONVERT_INTO_GETTER = AssistKind(
-      'dart.assist.convert.finalFieldToGetter', 30, 'Convert to getter');
-  static const CONVERT_INTO_IS_NOT =
-      AssistKind('dart.assist.convert.isNot', 30, 'Convert to is!');
+    'dart.assist.convert.finalFieldToGetter',
+    30,
+    'Convert to getter',
+  );
+  static const CONVERT_INTO_IS_NOT = AssistKind(
+    'dart.assist.convert.isNot',
+    30,
+    'Convert to is!',
+  );
   static const CONVERT_INTO_IS_NOT_EMPTY = AssistKind(
-      'dart.assist.convert.isNotEmpty', 30, "Convert to 'isNotEmpty'");
+    'dart.assist.convert.isNotEmpty',
+    30,
+    "Convert to 'isNotEmpty'",
+  );
   static const CONVERT_PART_OF_TO_URI = AssistKind(
-      'dart.assist.convert.partOfToPartUri', 30, 'Convert to use a URI');
+    'dart.assist.convert.partOfToPartUri',
+    30,
+    'Convert to use a URI',
+  );
   static const CONVERT_TO_DOUBLE_QUOTED_STRING = AssistKind(
-      'dart.assist.convert.toDoubleQuotedString',
-      30,
-      'Convert to double quoted string');
+    'dart.assist.convert.toDoubleQuotedString',
+    30,
+    'Convert to double quoted string',
+  );
   static const CONVERT_TO_FIELD_PARAMETER = AssistKind(
-      'dart.assist.convert.toConstructorFieldParameter',
-      30,
-      'Convert to field formal parameter');
+    'dart.assist.convert.toConstructorFieldParameter',
+    30,
+    'Convert to field formal parameter',
+  );
   static const CONVERT_TO_FOR_ELEMENT = AssistKind(
-      'dart.assist.convert.toForElement', 30, "Convert to a 'for' element");
+    'dart.assist.convert.toForElement',
+    30,
+    "Convert to a 'for' element",
+  );
   static const CONVERT_TO_IF_ELEMENT = AssistKind(
-      'dart.assist.convert.toIfElement', 30, "Convert to an 'if' element");
+    'dart.assist.convert.toIfElement',
+    30,
+    "Convert to an 'if' element",
+  );
   static const CONVERT_TO_INT_LITERAL = AssistKind(
-      'dart.assist.convert.toIntLiteral', 30, 'Convert to an int literal');
+    'dart.assist.convert.toIntLiteral',
+    30,
+    'Convert to an int literal',
+  );
   static const CONVERT_TO_LIST_LITERAL = AssistKind(
-      'dart.assist.convert.toListLiteral', 30, 'Convert to list literal');
+    'dart.assist.convert.toListLiteral',
+    30,
+    'Convert to list literal',
+  );
   static const CONVERT_TO_MAP_LITERAL = AssistKind(
-      'dart.assist.convert.toMapLiteral', 30, 'Convert to map literal');
+    'dart.assist.convert.toMapLiteral',
+    30,
+    'Convert to map literal',
+  );
   static const CONVERT_TO_MULTILINE_STRING = AssistKind(
-      'dart.assist.convert.toMultilineString',
-      30,
-      'Convert to multiline string');
+    'dart.assist.convert.toMultilineString',
+    30,
+    'Convert to multiline string',
+  );
   static const CONVERT_TO_NORMAL_PARAMETER = AssistKind(
-      'dart.assist.convert.toConstructorNormalParameter',
-      30,
-      'Convert to normal parameter');
-  static const CONVERT_TO_NULL_AWARE =
-      AssistKind('dart.assist.convert.toNullAware', 30, "Convert to use '?.'");
+    'dart.assist.convert.toConstructorNormalParameter',
+    30,
+    'Convert to normal parameter',
+  );
+  static const CONVERT_TO_NULL_AWARE = AssistKind(
+    'dart.assist.convert.toNullAware',
+    30,
+    "Convert to use '?.'",
+  );
   static const CONVERT_TO_PACKAGE_IMPORT = AssistKind(
-      'dart.assist.convert.relativeToPackageImport',
-      30,
-      "Convert to 'package:' import");
+    'dart.assist.convert.relativeToPackageImport',
+    30,
+    "Convert to 'package:' import",
+  );
   static const CONVERT_TO_RELATIVE_IMPORT = AssistKind(
-      'dart.assist.convert.packageToRelativeImport',
-      30,
-      'Convert to a relative import');
+    'dart.assist.convert.packageToRelativeImport',
+    30,
+    'Convert to a relative import',
+  );
   static const CONVERT_TO_SET_LITERAL = AssistKind(
-      'dart.assist.convert.toSetLiteral', 30, 'Convert to set literal');
+    'dart.assist.convert.toSetLiteral',
+    30,
+    'Convert to set literal',
+  );
   static const CONVERT_TO_SINGLE_QUOTED_STRING = AssistKind(
-      'dart.assist.convert.toSingleQuotedString',
-      30,
-      'Convert to single quoted string');
-  static const CONVERT_TO_SPREAD =
-      AssistKind('dart.assist.convert.toSpread', 30, 'Convert to a spread');
-  static const ENCAPSULATE_FIELD =
-      AssistKind('dart.assist.encapsulateField', 30, 'Encapsulate field');
-  static const EXCHANGE_OPERANDS =
-      AssistKind('dart.assist.exchangeOperands', 30, 'Exchange operands');
+    'dart.assist.convert.toSingleQuotedString',
+    30,
+    'Convert to single quoted string',
+  );
+  static const CONVERT_TO_SPREAD = AssistKind(
+    'dart.assist.convert.toSpread',
+    30,
+    'Convert to a spread',
+  );
+  static const ENCAPSULATE_FIELD = AssistKind(
+    'dart.assist.encapsulateField',
+    30,
+    'Encapsulate field',
+  );
+  static const EXCHANGE_OPERANDS = AssistKind(
+    'dart.assist.exchangeOperands',
+    30,
+    'Exchange operands',
+  );
 
   // Flutter assists
   static const FLUTTER_CONVERT_TO_CHILDREN = AssistKind(
-      'dart.assist.flutter.convert.childToChildren',
-      30,
-      'Convert to children:');
+    'dart.assist.flutter.convert.childToChildren',
+    30,
+    'Convert to children:',
+  );
   static const FLUTTER_CONVERT_TO_STATEFUL_WIDGET = AssistKind(
-      'dart.assist.flutter.convert.toStatefulWidget',
-      30,
-      'Convert to StatefulWidget');
+    'dart.assist.flutter.convert.toStatefulWidget',
+    30,
+    'Convert to StatefulWidget',
+  );
 
   // Flutter wrap specific assists
-  static const FLUTTER_WRAP_GENERIC =
-      AssistKind('dart.assist.flutter.wrap.generic', 31, 'Wrap with widget...');
+  static const FLUTTER_WRAP_GENERIC = AssistKind(
+    'dart.assist.flutter.wrap.generic',
+    31,
+    'Wrap with widget...',
+  );
 
   static const FLUTTER_WRAP_BUILDER = AssistKind(
-      'dart.assist.flutter.wrap.builder', 32, 'Wrap with Builder');
-  static const FLUTTER_WRAP_CENTER =
-      AssistKind('dart.assist.flutter.wrap.center', 32, 'Wrap with Center');
-  static const FLUTTER_WRAP_COLUMN =
-      AssistKind('dart.assist.flutter.wrap.column', 32, 'Wrap with Column');
+    'dart.assist.flutter.wrap.builder',
+    32,
+    'Wrap with Builder',
+  );
+  static const FLUTTER_WRAP_CENTER = AssistKind(
+    'dart.assist.flutter.wrap.center',
+    32,
+    'Wrap with Center',
+  );
+  static const FLUTTER_WRAP_COLUMN = AssistKind(
+    'dart.assist.flutter.wrap.column',
+    32,
+    'Wrap with Column',
+  );
   static const FLUTTER_WRAP_CONTAINER = AssistKind(
-      'dart.assist.flutter.wrap.container', 32, 'Wrap with Container');
-  static const FLUTTER_WRAP_PADDING =
-      AssistKind('dart.assist.flutter.wrap.padding', 32, 'Wrap with Padding');
-  static const FLUTTER_WRAP_ROW =
-      AssistKind('dart.assist.flutter.wrap.row', 32, 'Wrap with Row');
-  static const FLUTTER_WRAP_SIZED_BOX =
-      AssistKind('dart.assist.flutter.wrap.sizedBox', 32, 'Wrap with SizedBox');
+    'dart.assist.flutter.wrap.container',
+    32,
+    'Wrap with Container',
+  );
+  static const FLUTTER_WRAP_PADDING = AssistKind(
+    'dart.assist.flutter.wrap.padding',
+    32,
+    'Wrap with Padding',
+  );
+  static const FLUTTER_WRAP_ROW = AssistKind(
+    'dart.assist.flutter.wrap.row',
+    32,
+    'Wrap with Row',
+  );
+  static const FLUTTER_WRAP_SIZED_BOX = AssistKind(
+    'dart.assist.flutter.wrap.sizedBox',
+    32,
+    'Wrap with SizedBox',
+  );
   static const FLUTTER_WRAP_STREAM_BUILDER = AssistKind(
-      'dart.assist.flutter.wrap.streamBuilder', 32, 'Wrap with StreamBuilder');
+    'dart.assist.flutter.wrap.streamBuilder',
+    32,
+    'Wrap with StreamBuilder',
+  );
 
   // Flutter re-order assists
-  static const FLUTTER_SWAP_WITH_CHILD =
-      AssistKind('dart.assist.flutter.swap.withChild', 33, 'Swap with child');
-  static const FLUTTER_SWAP_WITH_PARENT =
-      AssistKind('dart.assist.flutter.swap.withParent', 33, 'Swap with parent');
-  static const FLUTTER_MOVE_DOWN =
-      AssistKind('dart.assist.flutter.move.down', 34, 'Move widget down');
-  static const FLUTTER_MOVE_UP =
-      AssistKind('dart.assist.flutter.move.up', 34, 'Move widget up');
+  static const FLUTTER_SWAP_WITH_CHILD = AssistKind(
+    'dart.assist.flutter.swap.withChild',
+    33,
+    'Swap with child',
+  );
+  static const FLUTTER_SWAP_WITH_PARENT = AssistKind(
+    'dart.assist.flutter.swap.withParent',
+    33,
+    'Swap with parent',
+  );
+  static const FLUTTER_MOVE_DOWN = AssistKind(
+    'dart.assist.flutter.move.down',
+    34,
+    'Move widget down',
+  );
+  static const FLUTTER_MOVE_UP = AssistKind(
+    'dart.assist.flutter.move.up',
+    34,
+    'Move widget up',
+  );
 
   // Flutter remove assist
-  static const FLUTTER_REMOVE_WIDGET =
-      AssistKind('dart.assist.flutter.removeWidget', 35, 'Remove this widget');
+  static const FLUTTER_REMOVE_WIDGET = AssistKind(
+    'dart.assist.flutter.removeWidget',
+    35,
+    'Remove this widget',
+  );
 
   static const IMPORT_ADD_SHOW = AssistKind(
-      'dart.assist.add.showCombinator', 30, "Add explicit 'show' combinator");
-  static const INLINE_INVOCATION =
-      AssistKind('dart.assist.inline', 30, "Inline invocation of '{0}'");
+    'dart.assist.add.showCombinator',
+    30,
+    "Add explicit 'show' combinator",
+  );
+  static const INLINE_INVOCATION = AssistKind(
+    'dart.assist.inline',
+    30,
+    "Inline invocation of '{0}'",
+  );
   static const INTRODUCE_LOCAL_CAST_TYPE = AssistKind(
-      'dart.assist.introduceLocalCast',
-      30,
-      'Introduce new local with tested type');
-  static const INVERT_IF_STATEMENT =
-      AssistKind('dart.assist.invertIf', 30, "Invert 'if' statement");
-  static const JOIN_IF_WITH_INNER = AssistKind('dart.assist.joinWithInnerIf',
-      30, "Join 'if' statement with inner 'if' statement");
-  static const JOIN_IF_WITH_OUTER = AssistKind('dart.assist.joinWithOuterIf',
-      30, "Join 'if' statement with outer 'if' statement");
+    'dart.assist.introduceLocalCast',
+    30,
+    'Introduce new local with tested type',
+  );
+  static const INVERT_IF_STATEMENT = AssistKind(
+    'dart.assist.invertIf',
+    30,
+    "Invert 'if' statement",
+  );
+  static const JOIN_IF_WITH_INNER = AssistKind(
+    'dart.assist.joinWithInnerIf',
+    30,
+    "Join 'if' statement with inner 'if' statement",
+  );
+  static const JOIN_IF_WITH_OUTER = AssistKind(
+    'dart.assist.joinWithOuterIf',
+    30,
+    "Join 'if' statement with outer 'if' statement",
+  );
   static const JOIN_VARIABLE_DECLARATION = AssistKind(
-      'dart.assist.joinVariableDeclaration', 30, 'Join variable declaration');
+    'dart.assist.joinVariableDeclaration',
+    30,
+    'Join variable declaration',
+  );
   static const REMOVE_TYPE_ANNOTATION = AssistKind(
-      // todo (pq): unify w/ fix
-      'dart.assist.remove.typeAnnotation',
-      29,
-      'Remove type annotation');
+    // todo (pq): unify w/ fix
+    'dart.assist.remove.typeAnnotation',
+    29,
+    'Remove type annotation',
+  );
   static const REPLACE_CONDITIONAL_WITH_IF_ELSE = AssistKind(
-      'dart.assist.convert.conditionalToIfElse',
-      30,
-      "Replace conditional with 'if-else'");
+    'dart.assist.convert.conditionalToIfElse',
+    30,
+    "Replace conditional with 'if-else'",
+  );
   static const REPLACE_IF_ELSE_WITH_CONDITIONAL = AssistKind(
-      'dart.assist.convert.ifElseToConditional',
-      30,
-      "Replace 'if-else' with conditional ('c ? x : y')");
+    'dart.assist.convert.ifElseToConditional',
+    30,
+    "Replace 'if-else' with conditional ('c ? x : y')",
+  );
   static const REPLACE_WITH_VAR = AssistKind(
-      'dart.assist.replace.withVar', 30, "Replace type annotation with 'var'");
-  static const SHADOW_FIELD = AssistKind('dart.assist.shadowField', 30,
-      'Create a local variable that shadows the field');
+    'dart.assist.replace.withVar',
+    30,
+    "Replace type annotation with 'var'",
+  );
+  static const SHADOW_FIELD = AssistKind(
+    'dart.assist.shadowField',
+    30,
+    'Create a local variable that shadows the field',
+  );
   static const SORT_CHILD_PROPERTY_LAST = AssistKind(
-      'dart.assist.sort.child.properties.last',
-      30,
-      'Move child property to end of arguments');
-  static const SPLIT_AND_CONDITION =
-      AssistKind('dart.assist.splitIfConjunction', 30, 'Split && condition');
+    'dart.assist.sort.child.properties.last',
+    30,
+    'Move child property to end of arguments',
+  );
+  static const SPLIT_AND_CONDITION = AssistKind(
+    'dart.assist.splitIfConjunction',
+    30,
+    'Split && condition',
+  );
   static const SPLIT_VARIABLE_DECLARATION = AssistKind(
-      'dart.assist.splitVariableDeclaration', 30, 'Split variable declaration');
-  static const SURROUND_WITH_BLOCK =
-      AssistKind('dart.assist.surround.block', 22, 'Surround with block');
+    'dart.assist.splitVariableDeclaration',
+    30,
+    'Split variable declaration',
+  );
+  static const SURROUND_WITH_BLOCK = AssistKind(
+    'dart.assist.surround.block',
+    22,
+    'Surround with block',
+  );
   static const SURROUND_WITH_DO_WHILE = AssistKind(
-      'dart.assist.surround.doWhile', 27, "Surround with 'do-while'");
-  static const SURROUND_WITH_FOR =
-      AssistKind('dart.assist.surround.forEach', 26, "Surround with 'for'");
-  static const SURROUND_WITH_FOR_IN =
-      AssistKind('dart.assist.surround.forIn', 25, "Surround with 'for-in'");
-  static const SURROUND_WITH_IF =
-      AssistKind('dart.assist.surround.if', 23, "Surround with 'if'");
+    'dart.assist.surround.doWhile',
+    27,
+    "Surround with 'do-while'",
+  );
+  static const SURROUND_WITH_FOR = AssistKind(
+    'dart.assist.surround.forEach',
+    26,
+    "Surround with 'for'",
+  );
+  static const SURROUND_WITH_FOR_IN = AssistKind(
+    'dart.assist.surround.forIn',
+    25,
+    "Surround with 'for-in'",
+  );
+  static const SURROUND_WITH_IF = AssistKind(
+    'dart.assist.surround.if',
+    23,
+    "Surround with 'if'",
+  );
   static const SURROUND_WITH_SET_STATE = AssistKind(
-      'dart.assist.surround.setState', 27, "Surround with 'setState'");
+    'dart.assist.surround.setState',
+    27,
+    "Surround with 'setState'",
+  );
   static const SURROUND_WITH_TRY_CATCH = AssistKind(
-      'dart.assist.surround.tryCatch', 28, "Surround with 'try-catch'");
+    'dart.assist.surround.tryCatch',
+    28,
+    "Surround with 'try-catch'",
+  );
   static const SURROUND_WITH_TRY_FINALLY = AssistKind(
-      'dart.assist.surround.tryFinally', 29, "Surround with 'try-finally'");
-  static const SURROUND_WITH_WHILE =
-      AssistKind('dart.assist.surround.while', 24, "Surround with 'while'");
-  static const USE_CURLY_BRACES =
-      AssistKind('dart.assist.surround.curlyBraces', 30, 'Use curly braces');
+    'dart.assist.surround.tryFinally',
+    29,
+    "Surround with 'try-finally'",
+  );
+  static const SURROUND_WITH_WHILE = AssistKind(
+    'dart.assist.surround.while',
+    24,
+    "Surround with 'while'",
+  );
+  static const USE_CURLY_BRACES = AssistKind(
+    'dart.assist.surround.curlyBraces',
+    30,
+    'Use curly braces',
+  );
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 7313659..06c0c17 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -22,12 +22,10 @@
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
-import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
-import 'package:collection/collection.dart';
 
 /// A fix producer that produces changes that will fix multiple diagnostics in
 /// one or more files.
@@ -230,57 +228,6 @@
     return builder;
   }
 
-  /// Returns the potential [FixKind]s that may be available for a given diagnostic.
-  ///
-  /// The presence of a kind does not guarantee a fix will be produced, nor does
-  /// the absence of a kind mean that it definitely will not (some producers
-  /// do not provide FixKinds up-front). These results are intended as a hint
-  /// for populating something like a quick-fix menu with possible apply-all fixes.
-  Iterable<FixKind> producableFixesForError(
-    ResolvedUnitResult result,
-    AnalysisError diagnostic,
-  ) sync* {
-    final errorCode = diagnostic.errorCode;
-    if (errorCode is LintCode) {
-      yield* _producableFixesFromGenerators(
-          FixProcessor.lintProducerMap[errorCode.name]);
-      return;
-    }
-
-    yield* _producableFixesFromGenerators(
-        FixProcessor.nonLintProducerMap[errorCode]);
-
-    final multiGenerators = nonLintMultiProducerMap[errorCode];
-    if (multiGenerators != null) {
-      final fixContext = DartFixContextImpl(
-        instrumentationService,
-        workspace,
-        result,
-        diagnostic,
-        (name) => [],
-      );
-
-      var context = CorrectionProducerContext.create(
-        applyingBulkFixes: true,
-        dartFixContext: fixContext,
-        diagnostic: diagnostic,
-        resolvedResult: result,
-        selectionOffset: diagnostic.offset,
-        selectionLength: diagnostic.length,
-        workspace: workspace,
-      );
-      if (context == null) {
-        return;
-      }
-
-      for (final multiGenerator in multiGenerators) {
-        final multiProducer = multiGenerator();
-        multiProducer.configure(context);
-        yield* multiProducer.producers.map((p) => p.fixKind).whereNotNull();
-      }
-    }
-  }
-
   /// Use the change [builder] to create fixes for the diagnostics in the
   /// library associated with the analysis [result].
   Future<void> _fixErrorsInLibrary(ResolvedLibraryResult result) async {
@@ -338,14 +285,7 @@
       }
     }
 
-    int computeChangeHash() {
-      var hash = 0;
-      var edits = builder.sourceChange.edits;
-      for (var i = 0; i < edits.length; ++i) {
-        hash = JenkinsSmiHash.combine(hash, edits[i].hashCode);
-      }
-      return JenkinsSmiHash.finish(hash);
-    }
+    int computeChangeHash() => (builder as ChangeBuilderImpl).changeHash;
 
     Future<void> generate(CorrectionProducer producer, String code) async {
       var oldHash = computeChangeHash();
@@ -394,22 +334,6 @@
     }
   }
 
-  Iterable<FixKind> _producableFixesFromGenerators(
-      List<ProducerGenerator>? generators) sync* {
-    if (generators == null) {
-      return;
-    }
-    for (var generator in generators) {
-      var producer = generator();
-      if (producer.canBeAppliedInBulk) {
-        var fixKind = producer.fixKind;
-        if (fixKind != null) {
-          yield fixKind;
-        }
-      }
-    }
-  }
-
   /// Return the override set corresponding to the given [result], or `null` if
   /// there is no corresponding configuration file or the file content isn't a
   /// valid override set.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index 14485d2..a586ac4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -276,9 +276,7 @@
     var selectionEnd = selectionOffset + selectionLength;
     var locator = NodeLocator(selectionOffset, selectionEnd);
     var node = locator.searchWithin(resolvedResult.unit);
-    if (node == null) {
-      return null;
-    }
+    node ??= resolvedResult.unit;
 
     return CorrectionProducerContext._(
       resolvedResult: resolvedResult,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_eol_at_end_of_file.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_eol_at_end_of_file.dart
new file mode 100644
index 0000000..3dd8cad
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_eol_at_end_of_file.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/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class AddEolAtEndOfFile extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.ADD_EOL_AT_END_OF_FILE;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var content = resolvedResult.content;
+    if (!content.endsWith(eol)) {
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleInsertion(content.length, eol);
+      });
+    } else {
+      var index = content.length;
+      while (index > 0) {
+        var char = content[index - 1];
+        if (char != '\r' && char != '\n') {
+          break;
+        }
+        index--;
+      }
+
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleReplacement(
+            SourceRange(index, content.length - index), eol);
+      });
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static AddEolAtEndOfFile newInstance() => AddEolAtEndOfFile();
+}
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 7e49c67..b5aed2b 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
@@ -65,14 +65,16 @@
 
     final insertBeforeEntity_final = insertBeforeEntity;
     await builder.addDartFileEdit(file, (builder) {
-      builder.addInsertion(insertBeforeEntity_final.offset, (builder) {
-        if (returnType.isDynamic) {
-          builder.write('dynamic');
-        } else {
-          builder.writeType(returnType);
-        }
-        builder.write(' ');
-      });
+      if (returnType.isDynamic || builder.canWriteType(returnType)) {
+        builder.addInsertion(insertBeforeEntity_final.offset, (builder) {
+          if (returnType.isDynamic) {
+            builder.write('dynamic');
+          } else {
+            builder.writeType(returnType);
+          }
+          builder.write(' ');
+        });
+      }
     });
   }
 
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 95ddbc7..f0e0091 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
@@ -12,7 +12,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_system.dart';
-import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.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';
@@ -63,27 +62,22 @@
 
   Future<void> _applyChange(
       ChangeBuilder builder, Token? keyword, int offset, DartType type) async {
-    Future<bool> tryToApplyChange(ChangeBuilder builder) async {
-      var validChange = true;
-      await builder.addDartFileEdit(file, (builder) {
+    _configureTargetLocation(node);
+
+    await builder.addDartFileEdit(file, (builder) {
+      if (builder.canWriteType(type)) {
         if (keyword != null && keyword.keyword == Keyword.VAR) {
           builder.addReplacement(range.token(keyword), (builder) {
-            validChange = builder.writeType(type);
+            builder.writeType(type);
           });
         } else {
           builder.addInsertion(offset, (builder) {
-            validChange = builder.writeType(type);
+            builder.writeType(type);
             builder.write(' ');
           });
         }
-      });
-      return validChange;
-    }
-
-    _configureTargetLocation(node);
-    if (await tryToApplyChange(_temporaryBuilder(builder))) {
-      await tryToApplyChange(builder);
-    }
+      }
+    });
   }
 
   /// Configure the [utils] using the given [target].
@@ -136,21 +130,23 @@
     if (declarationList.type != null) {
       return;
     }
-    // Ensure that there is a single VariableDeclaration.
-    List<VariableDeclaration> variables = declarationList.variables;
-    if (variables.length != 1) {
-      return;
-    }
-    var variable = variables[0];
+    final variables = declarationList.variables;
+    final variable = variables[0];
     // Ensure that the selection is not after the name of the variable.
     if (selectionOffset > variable.name.end) {
       return;
     }
     // Ensure that there is an initializer to get the type from.
-    var type = _typeForVariable(variable);
+    final type = _typeForVariable(variable);
     if (type == null) {
       return;
     }
+    // Ensure that there is a single type.
+    for (var i = 1; i < variables.length; i++) {
+      if (_typeForVariable(variables[i]) != type) {
+        return;
+      }
+    }
     if ((type is! InterfaceType || type.isDartCoreNull) &&
         type is! FunctionType) {
       return;
@@ -158,9 +154,6 @@
     await _applyChange(builder, declarationList.keyword, variable.offset, type);
   }
 
-  ChangeBuilder _temporaryBuilder(ChangeBuilder builder) =>
-      ChangeBuilder(workspace: (builder as ChangeBuilderImpl).workspace);
-
   DartType? _typeForVariable(VariableDeclaration variable) {
     var initializer = variable.initializer;
     if (initializer != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart b/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
index 5aa14c3..90903cd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/name_suggestion.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -17,6 +18,14 @@
   @override
   AssistKind get assistKind => DartAssistKind.ASSIGN_TO_LOCAL_VARIABLE;
 
+  String get _declarationKeyword {
+    if (_isLintEnabled(LintNames.prefer_final_locals)) {
+      return 'final';
+    } else {
+      return 'var';
+    }
+  }
+
   @override
   Future<void> compute(ChangeBuilder builder) async {
     // prepare enclosing ExpressionStatement
@@ -56,7 +65,7 @@
     if (suggestions.isNotEmpty) {
       await builder.addDartFileEdit(file, (builder) {
         builder.addInsertion(offset, (builder) {
-          builder.write('var ');
+          builder.write('$_declarationKeyword ');
           builder.addSimpleLinkedEdit('NAME', suggestions[0],
               kind: LinkedEditSuggestionKind.VARIABLE,
               suggestions: suggestions);
@@ -66,6 +75,11 @@
     }
   }
 
+  bool _isLintEnabled(String name) {
+    var analysisOptions = unit.declaredElement?.context.analysisOptions;
+    return analysisOptions?.isLintEnabled(name) ?? false;
+  }
+
   /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
   static AssignToLocalVariable newInstance() => AssignToLocalVariable();
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_type_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_type_annotation.dart
index f1e0afd..0d13f8c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_type_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_type_annotation.dart
@@ -44,9 +44,11 @@
           _oldAnnotation = displayStringForType(typeNode.typeOrThrow);
           _newAnnotation = displayStringForType(newType);
           await builder.addDartFileEdit(file, (builder) {
-            builder.addReplacement(range.node(typeNode), (builder) {
-              builder.writeType(newType);
-            });
+            if (builder.canWriteType(newType)) {
+              builder.addReplacement(range.node(typeNode), (builder) {
+                builder.writeType(newType);
+              });
+            }
           });
         }
       }
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 d674907..8ec13f6 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,6 +5,7 @@
 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/src/dart/ast/extensions.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -30,6 +31,22 @@
       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 returnValueType = returnValue.typeOrThrow;
     var returnValueCode = utils.getNodeText(returnValue);
     // prepare prefix
@@ -42,7 +59,9 @@
           builder.write('async ');
         }
         builder.write('{$eol$prefix$indent');
-        if (!returnValueType.isVoid && !returnValueType.isBottom) {
+        if (!returnValueType.isVoid &&
+            !returnValueType.isBottom &&
+            !functionReturnType.isVoid) {
           builder.write('return ');
         }
         builder.write(returnValueCode);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart
index e6e0c70..36a1566 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.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:_fe_analyzer_shared/src/scanner/token.dart';
 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/utilities/strings.dart';
@@ -16,7 +17,7 @@
   int _numElements = 0;
 
   @override
-  List<Object> get fixArguments => [_numElements];
+  List<Object> get fixArguments => [_numElements, _numElements == 1 ? '' : 's'];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_MISSING_OVERRIDES;
@@ -27,8 +28,7 @@
       return;
     }
     var targetClass = node.parent as ClassDeclaration;
-    var targetClassElement = targetClass.declaredElement;
-    utils.targetClassElement = targetClassElement;
+    utils.targetClassElement = targetClass.declaredElement;
     var signatures =
         InheritanceOverrideVerifier.missingOverrides(targetClass).toList();
     // sort by name, getters before setters
@@ -52,12 +52,22 @@
 
     var prefix = utils.getIndent(1);
     await builder.addDartFileEdit(file, (builder) {
+      final syntheticLeftBracket = targetClass.leftBracket.isSynthetic;
+      if (syntheticLeftBracket) {
+        var previousToLeftBracket = targetClass.leftBracket.previous!;
+        builder.addSimpleInsertion(previousToLeftBracket.end, ' {');
+      }
+
       builder.addInsertion(location.offset, (builder) {
         // Separator management.
         var numOfMembersWritten = 0;
         void addSeparatorBetweenDeclarations() {
           if (numOfMembersWritten == 0) {
-            builder.write(location.prefix);
+            var locationPrefix = location.prefix;
+            if (syntheticLeftBracket && locationPrefix.startsWith(eol)) {
+              locationPrefix = locationPrefix.substring(eol.length);
+            }
+            builder.write(locationPrefix);
           } else {
             builder.write(eol); // after the previous member
             builder.write(eol); // empty line separator
@@ -97,6 +107,19 @@
           builder.writeOverride(element);
         }
         builder.write(location.suffix);
+
+        if (targetClass.rightBracket.isSynthetic) {
+          var next = targetClass.rightBracket.next!;
+          if (next.type != TokenType.CLOSE_CURLY_BRACKET) {
+            if (!syntheticLeftBracket) {
+              builder.write(eol);
+            }
+            builder.write('}');
+            if (syntheticLeftBracket) {
+              builder.write(eol);
+            }
+          }
+        }
       });
     });
     builder.setSelection(Position(file, location.offset));
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index 00b0dd7d..a3cd739 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -46,7 +46,8 @@
         if (targetType == null) {
           return;
         }
-        var definingLibraries = extensionCache.membersByName[memberName];
+        var definingLibraries =
+            extensionCache.membersByName[memberName]?.toList();
         if (definingLibraries != null) {
           for (var definingLibrary in definingLibraries) {
             var libraryPath = definingLibrary.libraryPath;
@@ -120,10 +121,13 @@
         var typeName = (targetNode is SimpleIdentifier)
             ? targetNode.name
             : (targetNode as PrefixedIdentifier).prefix.name;
-        yield* _importLibraryForElement(
-            typeName,
-            const [ElementKind.CLASS, ElementKind.FUNCTION_TYPE_ALIAS],
-            const [TopLevelDeclarationKind.type]);
+        yield* _importLibraryForElement(typeName, const [
+          ElementKind.CLASS,
+          ElementKind.FUNCTION_TYPE_ALIAS,
+          ElementKind.TYPE_ALIAS
+        ], const [
+          TopLevelDeclarationKind.type
+        ]);
       } else if (mightBeImplicitConstructor(targetNode)) {
         var typeName = (targetNode as SimpleIdentifier).name;
         yield* _importLibraryForElement(typeName, const [ElementKind.CLASS],
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 77e8d88..d0d1f5f 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
@@ -4,6 +4,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/linter/lint_names.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/error/error.dart';
@@ -15,17 +16,30 @@
 
 class RemoveComparison extends CorrectionProducer {
   @override
+  bool canBeAppliedInBulk;
+
+  @override
+  bool canBeAppliedToFile;
+
+  RemoveComparison(this.canBeAppliedInBulk, this.canBeAppliedToFile);
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_COMPARISON;
 
+  @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_COMPARISON_MULTI;
+
   /// Return `true` if the null comparison will always return `false`.
   bool get _conditionIsFalse =>
       (diagnostic as AnalysisError).errorCode ==
       HintCode.UNNECESSARY_NULL_COMPARISON_FALSE;
 
   /// Return `true` if the null comparison will always return `true`.
-  bool get _conditionIsTrue =>
-      (diagnostic as AnalysisError).errorCode ==
-      HintCode.UNNECESSARY_NULL_COMPARISON_TRUE;
+  bool get _conditionIsTrue {
+    var errorCode = (diagnostic as AnalysisError).errorCode;
+    return errorCode == HintCode.UNNECESSARY_NULL_COMPARISON_TRUE ||
+        errorCode.name == LintNames.avoid_null_checks_in_equality_operators;
+  }
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
@@ -108,5 +122,10 @@
   }
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
-  static RemoveComparison newInstance() => RemoveComparison();
+  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);
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type.dart
new file mode 100644
index 0000000..89adc99
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type.dart
@@ -0,0 +1,111 @@
+// 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/ast/syntactic_entity.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/inheritance_manager3.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 ReplaceReturnType extends CorrectionProducer {
+  String _newType = '';
+
+  @override
+  List<Object> get fixArguments => [_newType];
+
+  @override
+  FixKind get fixKind => DartFixKind.REPLACE_RETURN_TYPE;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final node = this.node;
+    if (node is Expression) {
+      final typeSystem = libraryElement.typeSystem;
+
+      var newType = node.staticType;
+
+      void updateNewType(SyntacticEntity entity) {
+        if (entity is FunctionExpression) {
+          return;
+        } else if (entity is ReturnStatement) {
+          var type = entity.expression?.staticType;
+          if (type != null) {
+            if (newType == null) {
+              newType = type;
+            } else {
+              newType = typeSystem.leastUpperBound(newType!, type);
+            }
+          }
+        } else if (entity is AstNode) {
+          entity.childEntities.forEach(updateNewType);
+        }
+      }
+
+      var functionBody = node.thisOrAncestorOfType<FunctionBody>();
+      var parent = functionBody?.parent;
+      var grandParent = parent?.parent;
+
+      TypeAnnotation? returnType;
+      if (grandParent is FunctionDeclaration) {
+        updateNewType(grandParent.functionExpression.body);
+        returnType = grandParent.returnType;
+      } else if (parent is MethodDeclaration) {
+        updateNewType(parent.body);
+        if (_isCompatibleWithReturnType(parent, newType)) {
+          returnType = parent.returnType;
+        }
+      }
+
+      if (returnType != null && newType != null) {
+        if (functionBody!.isAsynchronous) {
+          newType = typeProvider.futureType(newType!);
+        }
+
+        _newType = newType!.getDisplayString(withNullability: true);
+
+        await builder.addDartFileEdit(file, (builder) {
+          if (builder.canWriteType(newType)) {
+            builder.addReplacement(range.node(returnType!), (builder) {
+              builder.writeType(newType);
+            });
+          }
+        });
+      }
+    }
+  }
+
+  bool _isCompatibleWithReturnType(
+      MethodDeclaration method, DartType? newType) {
+    if (newType != null) {
+      var clazz = method.thisOrAncestorOfType<ClassDeclaration>();
+      if (clazz != null) {
+        var classElement = clazz.declaredElement!;
+        var overriddenList = InheritanceManager3().getOverridden2(
+            classElement,
+            Name(
+              classElement.library.source.uri,
+              method.declaredElement!.name,
+            ));
+
+        if (overriddenList != null) {
+          var notSubtype = overriddenList.any((element) => !libraryElement
+              .typeSystem
+              .isSubtypeOf(newType, element.returnType));
+          if (notSubtype) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ReplaceReturnType newInstance() => ReplaceReturnType();
+}
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 c6b7dd1..822442d 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
@@ -10,11 +10,24 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class ReplaceWithNullAware extends CorrectionProducer {
+  /// The kind of correction to be made.
+  final _CorrectionKind correctionKind;
+
+  ReplaceWithNullAware(this.correctionKind);
+
   @override
   FixKind get fixKind => DartFixKind.REPLACE_WITH_NULL_AWARE;
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
+    if (correctionKind == _CorrectionKind.inChain) {
+      await _computeInChain(builder);
+    } else if (correctionKind == _CorrectionKind.single) {
+      await _computeSingle(builder);
+    }
+  }
+
+  Future<void> _computeInChain(ChangeBuilder builder) async {
     var node = coveredNode;
     if (node is Expression) {
       final node_final = node;
@@ -38,6 +51,37 @@
     }
   }
 
+  Future<void> _computeSingle(ChangeBuilder builder) async {
+    var node = coveredNode?.parent;
+    if (node is MethodInvocation) {
+      var operator = node.operator;
+      if (operator != null) {
+        await builder.addDartFileEdit(file, (builder) {
+          builder.addSimpleReplacement(range.token(operator), '?.');
+        });
+      }
+    } else if (node is PrefixedIdentifier) {
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleReplacement(range.token(node.period), '?.');
+      });
+    } else if (node is PropertyAccess) {
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleReplacement(range.token(node.operator), '?.');
+      });
+    }
+  }
+
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
-  static ReplaceWithNullAware newInstance() => ReplaceWithNullAware();
+  static ReplaceWithNullAware inChain() =>
+      ReplaceWithNullAware(_CorrectionKind.inChain);
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ReplaceWithNullAware single() =>
+      ReplaceWithNullAware(_CorrectionKind.single);
+}
+
+/// The kinds of corrections supported by [ReplaceWithNullAware].
+enum _CorrectionKind {
+  inChain,
+  single,
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
index 83073d8..dee927b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
@@ -54,6 +54,9 @@
       if (variableList.type == null) {
         final type = variable.declaredElement!.type;
         if (!type.isDynamic && keyword != null) {
+          if (!builder.canWriteType(type)) {
+            return;
+          }
           builder.addReplacement(range.token(keyword), (builder) {
             builder.writeType(type);
           });
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 1ab5812..1d19faa 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -29,10 +29,16 @@
 /// An enumeration of quick fix kinds for the errors found in an analysis
 /// options file.
 class AnalysisOptionsFixKind {
-  static const REMOVE_LINT =
-      FixKind('analysisOptions.fix.removeLint', 50, "Remove '{0}'");
-  static const REMOVE_SETTING =
-      FixKind('analysisOptions.fix.removeSetting', 50, "Remove '{0}'");
+  static const REMOVE_LINT = FixKind(
+    'analysisOptions.fix.removeLint',
+    50,
+    "Remove '{0}'",
+  );
+  static const REMOVE_SETTING = FixKind(
+    'analysisOptions.fix.removeSetting',
+    50,
+    "Remove '{0}'",
+  );
 }
 
 /// The implementation of [DartFixContext].
@@ -68,818 +74,1283 @@
 
 /// An enumeration of quick fix kinds found in a Dart file.
 class DartFixKind {
-  static const ADD_ASYNC = FixKind('dart.fix.add.async',
-      DartFixKindPriority.DEFAULT, "Add 'async' modifier");
+  static const ADD_ASYNC = FixKind(
+    'dart.fix.add.async',
+    DartFixKindPriority.DEFAULT,
+    "Add 'async' modifier",
+  );
   static const ADD_AWAIT = FixKind(
-      'dart.fix.add.await', DartFixKindPriority.DEFAULT, "Add 'await' keyword");
-  static const ADD_AWAIT_MULTI = FixKind('dart.fix.add.await.multi',
-      DartFixKindPriority.IN_FILE, "Add 'await's everywhere in file");
+    'dart.fix.add.await',
+    DartFixKindPriority.DEFAULT,
+    "Add 'await' keyword",
+  );
+  static const ADD_AWAIT_MULTI = FixKind(
+    'dart.fix.add.await.multi',
+    DartFixKindPriority.IN_FILE,
+    "Add 'await's everywhere in file",
+  );
   static const ADD_EXPLICIT_CAST = FixKind(
-      'dart.fix.add.explicitCast', DartFixKindPriority.DEFAULT, 'Add cast');
-  static const ADD_CONST = FixKind('dart.fix.add.const',
-      DartFixKindPriority.DEFAULT, "Add 'const' modifier");
-  static const ADD_CONST_MULTI = FixKind('dart.fix.add.const.multi',
-      DartFixKindPriority.IN_FILE, "Add 'const' modifiers everywhere in file");
-  static const ADD_CURLY_BRACES = FixKind('dart.fix.add.curlyBraces',
-      DartFixKindPriority.DEFAULT, 'Add curly braces');
+    'dart.fix.add.explicitCast',
+    DartFixKindPriority.DEFAULT,
+    'Add cast',
+  );
+  static const ADD_CONST = FixKind(
+    'dart.fix.add.const',
+    DartFixKindPriority.DEFAULT,
+    "Add 'const' modifier",
+  );
+  static const ADD_CONST_MULTI = FixKind(
+    'dart.fix.add.const.multi',
+    DartFixKindPriority.IN_FILE,
+    "Add 'const' modifiers everywhere in file",
+  );
+  static const ADD_CURLY_BRACES = FixKind(
+    'dart.fix.add.curlyBraces',
+    DartFixKindPriority.DEFAULT,
+    'Add curly braces',
+  );
   static const ADD_CURLY_BRACES_MULTI = FixKind(
-      'dart.fix.add.curlyBraces.multi',
-      DartFixKindPriority.IN_FILE,
-      'Add curly braces everywhere in file');
+    'dart.fix.add.curlyBraces.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add curly braces everywhere in file',
+  );
   static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = FixKind(
-      'dart.fix.add.diagnosticPropertyReference',
-      DartFixKindPriority.DEFAULT,
-      'Add a debug reference to this property');
+    'dart.fix.add.diagnosticPropertyReference',
+    DartFixKindPriority.DEFAULT,
+    'Add a debug reference to this property',
+  );
   static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE_MULTI = FixKind(
-      'dart.fix.add.diagnosticPropertyReference.multi',
-      DartFixKindPriority.IN_FILE,
-      'Add missing debug property references everywhere in file');
+    'dart.fix.add.diagnosticPropertyReference.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add missing debug property references everywhere in file',
+  );
+  static const ADD_EOL_AT_END_OF_FILE = FixKind(
+    'dart.fix.add.eolAtEndOfFile',
+    DartFixKindPriority.DEFAULT,
+    'Add EOL at end of file',
+  );
   static const ADD_FIELD_FORMAL_PARAMETERS = FixKind(
-      'dart.fix.add.fieldFormalParameters',
-      70,
-      'Add final field formal parameters');
+    'dart.fix.add.fieldFormalParameters',
+    70,
+    'Add final field formal parameters',
+  );
   static const ADD_KEY_TO_CONSTRUCTORS = FixKind(
-      'dart.fix.add.keyToConstructors',
-      DartFixKindPriority.DEFAULT,
-      "Add 'key' to constructors");
+    'dart.fix.add.keyToConstructors',
+    DartFixKindPriority.DEFAULT,
+    "Add 'key' to constructors",
+  );
   static const ADD_LATE = FixKind(
-      'dart.fix.add.late', DartFixKindPriority.DEFAULT, "Add 'late' modifier");
+    'dart.fix.add.late',
+    DartFixKindPriority.DEFAULT,
+    "Add 'late' modifier",
+  );
   static const ADD_MISSING_ENUM_CASE_CLAUSES = FixKind(
-      'dart.fix.add.missingEnumCaseClauses',
-      DartFixKindPriority.DEFAULT,
-      'Add missing case clauses');
+    'dart.fix.add.missingEnumCaseClauses',
+    DartFixKindPriority.DEFAULT,
+    'Add missing case clauses',
+  );
   static const ADD_MISSING_PARAMETER_NAMED = FixKind(
-      'dart.fix.add.missingParameterNamed', 70, "Add named parameter '{0}'");
+    'dart.fix.add.missingParameterNamed',
+    70,
+    "Add named parameter '{0}'",
+  );
   static const ADD_MISSING_PARAMETER_POSITIONAL = FixKind(
-      'dart.fix.add.missingParameterPositional',
-      69,
-      'Add optional positional parameter');
+    'dart.fix.add.missingParameterPositional',
+    69,
+    'Add optional positional parameter',
+  );
   static const ADD_MISSING_PARAMETER_REQUIRED = FixKind(
-      'dart.fix.add.missingParameterRequired',
-      70,
-      'Add required positional parameter');
+    'dart.fix.add.missingParameterRequired',
+    70,
+    'Add required positional parameter',
+  );
   static const ADD_MISSING_REQUIRED_ARGUMENT = FixKind(
-      'dart.fix.add.missingRequiredArgument',
-      70,
-      "Add required argument '{0}'");
+    'dart.fix.add.missingRequiredArgument',
+    70,
+    "Add required argument '{0}'",
+  );
   static const ADD_NE_NULL = FixKind(
-      'dart.fix.add.neNull', DartFixKindPriority.DEFAULT, 'Add != null');
-  static const ADD_NE_NULL_MULTI = FixKind('dart.fix.add.neNull.multi',
-      DartFixKindPriority.IN_FILE, 'Add != null everywhere in file');
-  static const ADD_NULL_CHECK = FixKind('dart.fix.add.nullCheck',
-      DartFixKindPriority.DEFAULT, 'Add a null check (!)');
-  static const ADD_OVERRIDE = FixKind('dart.fix.add.override',
-      DartFixKindPriority.DEFAULT, "Add '@override' annotation");
+    'dart.fix.add.neNull',
+    DartFixKindPriority.DEFAULT,
+    'Add != null',
+  );
+  static const ADD_NE_NULL_MULTI = FixKind(
+    'dart.fix.add.neNull.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add != null everywhere in file',
+  );
+  static const ADD_NULL_CHECK = FixKind(
+    'dart.fix.add.nullCheck',
+    DartFixKindPriority.DEFAULT - 1,
+    'Add a null check (!)',
+  );
+  static const ADD_OVERRIDE = FixKind(
+    'dart.fix.add.override',
+    DartFixKindPriority.DEFAULT,
+    "Add '@override' annotation",
+  );
   static const ADD_OVERRIDE_MULTI = FixKind(
-      'dart.fix.add.override.multi',
-      DartFixKindPriority.IN_FILE,
-      "Add '@override' annotations everywhere in file");
-  static const ADD_REQUIRED = FixKind('dart.fix.add.required',
-      DartFixKindPriority.DEFAULT, "Add '@required' annotation");
+    'dart.fix.add.override.multi',
+    DartFixKindPriority.IN_FILE,
+    "Add '@override' annotations everywhere in file",
+  );
+  static const ADD_REQUIRED = FixKind(
+    'dart.fix.add.required',
+    DartFixKindPriority.DEFAULT,
+    "Add '@required' annotation",
+  );
   static const ADD_REQUIRED_MULTI = FixKind(
-      'dart.fix.add.required.multi',
-      DartFixKindPriority.IN_FILE,
-      "Add '@required' annotations everywhere in file");
-  static const ADD_REQUIRED2 = FixKind('dart.fix.add.required',
-      DartFixKindPriority.DEFAULT, "Add 'required' keyword");
+    'dart.fix.add.required.multi',
+    DartFixKindPriority.IN_FILE,
+    "Add '@required' annotations everywhere in file",
+  );
+  static const ADD_REQUIRED2 = FixKind(
+    'dart.fix.add.required',
+    DartFixKindPriority.DEFAULT,
+    "Add 'required' keyword",
+  );
   static const ADD_REQUIRED2_MULTI = FixKind(
-      'dart.fix.add.required.multi',
-      DartFixKindPriority.IN_FILE,
-      "Add 'required' keywords everywhere in file");
-  static const ADD_RETURN_TYPE = FixKind('dart.fix.add.returnType',
-      DartFixKindPriority.DEFAULT, 'Add return type');
-  static const ADD_RETURN_TYPE_MULTI = FixKind('dart.fix.add.returnType.multi',
-      DartFixKindPriority.IN_FILE, 'Add return types everywhere in file');
-  static const ADD_STATIC = FixKind('dart.fix.add.static',
-      DartFixKindPriority.DEFAULT, "Add 'static' modifier");
+    'dart.fix.add.required.multi',
+    DartFixKindPriority.IN_FILE,
+    "Add 'required' keywords everywhere in file",
+  );
+  static const ADD_RETURN_TYPE = FixKind(
+    'dart.fix.add.returnType',
+    DartFixKindPriority.DEFAULT,
+    'Add return type',
+  );
+  static const ADD_RETURN_TYPE_MULTI = FixKind(
+    'dart.fix.add.returnType.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add return types everywhere in file',
+  );
+  static const ADD_STATIC = FixKind(
+    'dart.fix.add.static',
+    DartFixKindPriority.DEFAULT,
+    "Add 'static' modifier",
+  );
   static const ADD_SUPER_CONSTRUCTOR_INVOCATION = FixKind(
-      'dart.fix.add.superConstructorInvocation',
-      DartFixKindPriority.DEFAULT,
-      'Add super constructor {0} invocation');
-  static const ADD_TYPE_ANNOTATION = FixKind('dart.fix.add.typeAnnotation',
-      DartFixKindPriority.DEFAULT, 'Add type annotation');
+    'dart.fix.add.superConstructorInvocation',
+    DartFixKindPriority.DEFAULT,
+    'Add super constructor {0} invocation',
+  );
+  static const ADD_TYPE_ANNOTATION = FixKind(
+    'dart.fix.add.typeAnnotation',
+    DartFixKindPriority.DEFAULT,
+    'Add type annotation',
+  );
   static const ADD_TYPE_ANNOTATION_MULTI = FixKind(
-      'dart.fix.add.typeAnnotation.multi',
-      DartFixKindPriority.IN_FILE,
-      'Add type annotations everywhere in file');
-  static const CHANGE_ARGUMENT_NAME =
-      FixKind('dart.fix.change.argumentName', 60, "Change to '{0}'");
+    'dart.fix.add.typeAnnotation.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add type annotations everywhere in file',
+  );
+  static const CHANGE_ARGUMENT_NAME = FixKind(
+    'dart.fix.change.argumentName',
+    60,
+    "Change to '{0}'",
+  );
   static const CHANGE_TO = FixKind(
-      'dart.fix.change.to', DartFixKindPriority.DEFAULT + 1, "Change to '{0}'");
+    'dart.fix.change.to',
+    DartFixKindPriority.DEFAULT + 1,
+    "Change to '{0}'",
+  );
   static const CHANGE_TO_NEAREST_PRECISE_VALUE = FixKind(
-      'dart.fix.change.toNearestPreciseValue',
-      DartFixKindPriority.DEFAULT,
-      'Change to nearest precise int-as-double value: {0}');
+    'dart.fix.change.toNearestPreciseValue',
+    DartFixKindPriority.DEFAULT,
+    'Change to nearest precise int-as-double value: {0}',
+  );
   static const CHANGE_TO_STATIC_ACCESS = FixKind(
-      'dart.fix.change.toStaticAccess',
-      DartFixKindPriority.DEFAULT,
-      "Change access to static using '{0}'");
+    'dart.fix.change.toStaticAccess',
+    DartFixKindPriority.DEFAULT,
+    "Change access to static using '{0}'",
+  );
   static const CHANGE_TYPE_ANNOTATION = FixKind(
-      'dart.fix.change.typeAnnotation',
-      DartFixKindPriority.DEFAULT,
-      "Change '{0}' to '{1}' type annotation");
+    'dart.fix.change.typeAnnotation',
+    DartFixKindPriority.DEFAULT,
+    "Change '{0}' to '{1}' type annotation",
+  );
   static const CONVERT_FLUTTER_CHILD = FixKind(
-      'dart.fix.flutter.convert.childToChildren',
-      DartFixKindPriority.DEFAULT,
-      'Convert to children:');
+    'dart.fix.flutter.convert.childToChildren',
+    DartFixKindPriority.DEFAULT,
+    'Convert to children:',
+  );
   static const CONVERT_FLUTTER_CHILDREN = FixKind(
-      'dart.fix.flutter.convert.childrenToChild',
-      DartFixKindPriority.DEFAULT,
-      'Convert to child:');
+    'dart.fix.flutter.convert.childrenToChild',
+    DartFixKindPriority.DEFAULT,
+    'Convert to child:',
+  );
   static const CONVERT_FOR_EACH_TO_FOR_LOOP = FixKind(
-      'dart.fix.convert.toForLoop',
-      DartFixKindPriority.DEFAULT,
-      "Convert 'forEach' to a 'for' loop");
+    'dart.fix.convert.toForLoop',
+    DartFixKindPriority.DEFAULT,
+    "Convert 'forEach' to a 'for' loop",
+  );
   static const CONVERT_FOR_EACH_TO_FOR_LOOP_MULTI = FixKind(
-      'dart.fix.convert.toForLoop.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert 'forEach' to a 'for' loop everywhere in file");
+    'dart.fix.convert.toForLoop.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert 'forEach' to a 'for' loop everywhere in file",
+  );
   static const CONVERT_INTO_EXPRESSION_BODY = FixKind(
-      'dart.fix.convert.toExpressionBody',
-      DartFixKindPriority.DEFAULT,
-      'Convert to expression body');
+    'dart.fix.convert.toExpressionBody',
+    DartFixKindPriority.DEFAULT,
+    'Convert to expression body',
+  );
   static const CONVERT_INTO_EXPRESSION_BODY_MULTI = FixKind(
-      'dart.fix.convert.toExpressionBody.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to expression bodies everywhere in file');
-  static const CONVERT_TO_CONTAINS = FixKind('dart.fix.convert.toContains',
-      DartFixKindPriority.DEFAULT, "Convert to using 'contains'");
+    'dart.fix.convert.toExpressionBody.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to expression bodies everywhere in file',
+  );
+  static const CONVERT_TO_CONTAINS = FixKind(
+    'dart.fix.convert.toContains',
+    DartFixKindPriority.DEFAULT,
+    "Convert to using 'contains'",
+  );
   static const CONVERT_TO_CONTAINS_MULTI = FixKind(
-      'dart.fix.convert.toContains.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to using 'contains' everywhere in file");
-  static const CONVERT_TO_FOR_ELEMENT = FixKind('dart.fix.convert.toForElement',
-      DartFixKindPriority.DEFAULT, "Convert to a 'for' element");
+    'dart.fix.convert.toContains.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to using 'contains' everywhere in file",
+  );
+  static const CONVERT_TO_FOR_ELEMENT = FixKind(
+    'dart.fix.convert.toForElement',
+    DartFixKindPriority.DEFAULT,
+    "Convert to a 'for' element",
+  );
   static const CONVERT_TO_FOR_ELEMENT_MULTI = FixKind(
-      'dart.fix.convert.toForElement.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to 'for' elements everywhere in file");
+    'dart.fix.convert.toForElement.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to 'for' elements everywhere in file",
+  );
   static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX = FixKind(
-      'dart.fix.convert.toGenericFunctionSyntax',
-      DartFixKindPriority.DEFAULT,
-      "Convert into 'Function' syntax");
+    'dart.fix.convert.toGenericFunctionSyntax',
+    DartFixKindPriority.DEFAULT,
+    "Convert into 'Function' syntax",
+  );
   static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX_MULTI = FixKind(
-      'dart.fix.convert.toGenericFunctionSyntax.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to 'Function' syntax everywhere in file");
-  static const CONVERT_TO_IF_ELEMENT = FixKind('dart.fix.convert.toIfElement',
-      DartFixKindPriority.DEFAULT, "Convert to an 'if' element");
+    'dart.fix.convert.toGenericFunctionSyntax.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to 'Function' syntax everywhere in file",
+  );
+  static const CONVERT_TO_IF_ELEMENT = FixKind(
+    'dart.fix.convert.toIfElement',
+    DartFixKindPriority.DEFAULT,
+    "Convert to an 'if' element",
+  );
   static const CONVERT_TO_IF_ELEMENT_MULTI = FixKind(
-      'dart.fix.convert.toIfElement.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to 'if' elements everywhere in file");
-  static const CONVERT_TO_IF_NULL = FixKind('dart.fix.convert.toIfNull',
-      DartFixKindPriority.DEFAULT, "Convert to use '??'");
+    'dart.fix.convert.toIfElement.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to 'if' elements everywhere in file",
+  );
+  static const CONVERT_TO_IF_NULL = FixKind(
+    'dart.fix.convert.toIfNull',
+    DartFixKindPriority.DEFAULT,
+    "Convert to use '??'",
+  );
   static const CONVERT_TO_IF_NULL_MULTI = FixKind(
-      'dart.fix.convert.toIfNull.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to '??'s everywhere in file");
+    'dart.fix.convert.toIfNull.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to '??'s everywhere in file",
+  );
   static const CONVERT_TO_INITIALIZING_FORMAL = FixKind(
-      'dart.fix.convert.toInitializingFormal',
-      DartFixKindPriority.DEFAULT,
-      'Convert to an initializing formal parameter');
-  static const CONVERT_TO_INT_LITERAL = FixKind('dart.fix.convert.toIntLiteral',
-      DartFixKindPriority.DEFAULT, 'Convert to an int literal');
+    'dart.fix.convert.toInitializingFormal',
+    DartFixKindPriority.DEFAULT,
+    'Convert to an initializing formal parameter',
+  );
+  static const CONVERT_TO_INT_LITERAL = FixKind(
+    'dart.fix.convert.toIntLiteral',
+    DartFixKindPriority.DEFAULT,
+    'Convert to an int literal',
+  );
   static const CONVERT_TO_INT_LITERAL_MULTI = FixKind(
-      'dart.fix.convert.toIntLiteral.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to int literals everywhere in file');
+    'dart.fix.convert.toIntLiteral.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to int literals everywhere in file',
+  );
   static const CONVERT_TO_IS_NOT = FixKind(
-      'dart.fix.convert.isNot', DartFixKindPriority.DEFAULT, 'Convert to is!');
-  static const CONVERT_TO_IS_NOT_MULTI = FixKind('dart.fix.convert.isNot.multi',
-      DartFixKindPriority.IN_FILE, 'Convert to is! everywhere in file');
+    'dart.fix.convert.isNot',
+    DartFixKindPriority.DEFAULT,
+    'Convert to is!',
+  );
+  static const CONVERT_TO_IS_NOT_MULTI = FixKind(
+    'dart.fix.convert.isNot.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to is! everywhere in file',
+  );
   static const CONVERT_TO_LINE_COMMENT = FixKind(
-      'dart.fix.convert.toLineComment',
-      DartFixKindPriority.DEFAULT,
-      'Convert to line documentation comment');
+    'dart.fix.convert.toLineComment',
+    DartFixKindPriority.DEFAULT,
+    'Convert to line documentation comment',
+  );
   static const CONVERT_TO_LINE_COMMENT_MULTI = FixKind(
-      'dart.fix.convert.toLineComment.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to line documentation comments everywhere in file');
+    'dart.fix.convert.toLineComment.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to line documentation comments everywhere in file',
+  );
   static const CONVERT_TO_LIST_LITERAL = FixKind(
-      'dart.fix.convert.toListLiteral',
-      DartFixKindPriority.DEFAULT,
-      'Convert to list literal');
+    'dart.fix.convert.toListLiteral',
+    DartFixKindPriority.DEFAULT,
+    'Convert to list literal',
+  );
   static const CONVERT_TO_LIST_LITERAL_MULTI = FixKind(
-      'dart.fix.convert.toListLiteral.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to list literals everywhere in file');
-  static const CONVERT_TO_MAP_LITERAL = FixKind('dart.fix.convert.toMapLiteral',
-      DartFixKindPriority.DEFAULT, 'Convert to map literal');
+    'dart.fix.convert.toListLiteral.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to list literals everywhere in file',
+  );
+  static const CONVERT_TO_MAP_LITERAL = FixKind(
+    'dart.fix.convert.toMapLiteral',
+    DartFixKindPriority.DEFAULT,
+    'Convert to map literal',
+  );
   static const CONVERT_TO_MAP_LITERAL_MULTI = FixKind(
-      'dart.fix.convert.toMapLiteral.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to map literals everywhere in file');
+    'dart.fix.convert.toMapLiteral.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to map literals everywhere in file',
+  );
   static const CONVERT_TO_NAMED_ARGUMENTS = FixKind(
-      'dart.fix.convert.toNamedArguments',
-      DartFixKindPriority.DEFAULT,
-      'Convert to named arguments');
-  static const CONVERT_TO_NULL_AWARE = FixKind('dart.fix.convert.toNullAware',
-      DartFixKindPriority.DEFAULT, "Convert to use '?.'");
+    'dart.fix.convert.toNamedArguments',
+    DartFixKindPriority.DEFAULT,
+    'Convert to named arguments',
+  );
+  static const CONVERT_TO_NULL_AWARE = FixKind(
+    'dart.fix.convert.toNullAware',
+    DartFixKindPriority.DEFAULT,
+    "Convert to use '?.'",
+  );
   static const CONVERT_TO_NULL_AWARE_MULTI = FixKind(
-      'dart.fix.convert.toNullAware.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to use '?.' everywhere in file");
+    'dart.fix.convert.toNullAware.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to use '?.' everywhere in file",
+  );
   static const CONVERT_TO_NULL_AWARE_SPREAD = FixKind(
-      'dart.fix.convert.toNullAwareSpread',
-      DartFixKindPriority.DEFAULT,
-      "Convert to use '...?'");
+    'dart.fix.convert.toNullAwareSpread',
+    DartFixKindPriority.DEFAULT,
+    "Convert to use '...?'",
+  );
   static const CONVERT_TO_NULL_AWARE_SPREAD_MULTI = FixKind(
-      'dart.fix.convert.toNullAwareSpread.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to use '...?' everywhere in file");
-  static const CONVERT_TO_ON_TYPE = FixKind('dart.fix.convert.toOnType',
-      DartFixKindPriority.DEFAULT, "Convert to 'on {0}'");
+    'dart.fix.convert.toNullAwareSpread.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to use '...?' everywhere in file",
+  );
+  static const CONVERT_TO_ON_TYPE = FixKind(
+    'dart.fix.convert.toOnType',
+    DartFixKindPriority.DEFAULT,
+    "Convert to 'on {0}'",
+  );
   static const CONVERT_TO_PACKAGE_IMPORT = FixKind(
-      'dart.fix.convert.toPackageImport',
-      DartFixKindPriority.DEFAULT,
-      "Convert to 'package:' import");
+    'dart.fix.convert.toPackageImport',
+    DartFixKindPriority.DEFAULT,
+    "Convert to 'package:' import",
+  );
   static const CONVERT_TO_PACKAGE_IMPORT_MULTI = FixKind(
-      'dart.fix.convert.toPackageImport.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to 'package:' imports everywhere in file");
+    'dart.fix.convert.toPackageImport.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to 'package:' imports everywhere in file",
+  );
   static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
-      'dart.fix.convert.toRelativeImport',
-      DartFixKindPriority.DEFAULT,
-      'Convert to relative import');
+    'dart.fix.convert.toRelativeImport',
+    DartFixKindPriority.DEFAULT,
+    'Convert to relative import',
+  );
   static const CONVERT_TO_RELATIVE_IMPORT_MULTI = FixKind(
-      'dart.fix.convert.toRelativeImport.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to relative imports everywhere in file');
-  static const CONVERT_TO_SET_LITERAL = FixKind('dart.fix.convert.toSetLiteral',
-      DartFixKindPriority.DEFAULT, 'Convert to set literal');
+    'dart.fix.convert.toRelativeImport.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to relative imports everywhere in file',
+  );
+  static const CONVERT_TO_SET_LITERAL = FixKind(
+    'dart.fix.convert.toSetLiteral',
+    DartFixKindPriority.DEFAULT,
+    'Convert to set literal',
+  );
   static const CONVERT_TO_SET_LITERAL_MULTI = FixKind(
-      'dart.fix.convert.toSetLiteral.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to set literals everywhere in file');
+    'dart.fix.convert.toSetLiteral.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to set literals everywhere in file',
+  );
   static const CONVERT_TO_SINGLE_QUOTED_STRING = FixKind(
-      'dart.fix.convert.toSingleQuotedString',
-      DartFixKindPriority.DEFAULT,
-      'Convert to single quoted string');
+    'dart.fix.convert.toSingleQuotedString',
+    DartFixKindPriority.DEFAULT,
+    'Convert to single quoted string',
+  );
   static const CONVERT_TO_SINGLE_QUOTED_STRING_MULTI = FixKind(
-      'dart.fix.convert.toSingleQuotedString.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to single quoted strings everywhere in file');
-  static const CONVERT_TO_SPREAD = FixKind('dart.fix.convert.toSpread',
-      DartFixKindPriority.DEFAULT, 'Convert to a spread');
+    'dart.fix.convert.toSingleQuotedString.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to single quoted strings everywhere in file',
+  );
+  static const CONVERT_TO_SPREAD = FixKind(
+    'dart.fix.convert.toSpread',
+    DartFixKindPriority.DEFAULT,
+    'Convert to a spread',
+  );
   static const CONVERT_TO_SPREAD_MULTI = FixKind(
-      'dart.fix.convert.toSpread.multi',
-      DartFixKindPriority.IN_FILE,
-      'Convert to spreads everywhere in file');
-  static const CONVERT_TO_WHERE_TYPE = FixKind('dart.fix.convert.toWhereType',
-      DartFixKindPriority.DEFAULT, "Convert to use 'whereType'");
+    'dart.fix.convert.toSpread.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to spreads everywhere in file',
+  );
+  static const CONVERT_TO_WHERE_TYPE = FixKind(
+    'dart.fix.convert.toWhereType',
+    DartFixKindPriority.DEFAULT,
+    "Convert to use 'whereType'",
+  );
   static const CONVERT_TO_WHERE_TYPE_MULTI = FixKind(
-      'dart.fix.convert.toWhereType.multi',
-      DartFixKindPriority.IN_FILE,
-      "Convert to using 'whereType' everywhere in file");
-  static const CREATE_CLASS = FixKind('dart.fix.create.class',
-      DartFixKindPriority.DEFAULT, "Create class '{0}'");
-  static const CREATE_CONSTRUCTOR = FixKind('dart.fix.create.constructor',
-      DartFixKindPriority.DEFAULT, "Create constructor '{0}'");
+    'dart.fix.convert.toWhereType.multi',
+    DartFixKindPriority.IN_FILE,
+    "Convert to using 'whereType' everywhere in file",
+  );
+  static const CREATE_CLASS = FixKind(
+    'dart.fix.create.class',
+    DartFixKindPriority.DEFAULT,
+    "Create class '{0}'",
+  );
+  static const CREATE_CONSTRUCTOR = FixKind(
+    'dart.fix.create.constructor',
+    DartFixKindPriority.DEFAULT,
+    "Create constructor '{0}'",
+  );
   static const CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS = FixKind(
-      'dart.fix.create.constructorForFinalFields',
-      DartFixKindPriority.DEFAULT,
-      'Create constructor for final fields');
+    'dart.fix.create.constructorForFinalFields',
+    DartFixKindPriority.DEFAULT,
+    'Create constructor for final fields',
+  );
   static const CREATE_CONSTRUCTOR_SUPER = FixKind(
-      'dart.fix.create.constructorSuper',
-      DartFixKindPriority.DEFAULT,
-      'Create constructor to call {0}');
-  static const CREATE_FIELD =
-      FixKind('dart.fix.create.field', 49, "Create field '{0}'");
+    'dart.fix.create.constructorSuper',
+    DartFixKindPriority.DEFAULT,
+    'Create constructor to call {0}',
+  );
+  static const CREATE_FIELD = FixKind(
+    'dart.fix.create.field',
+    49,
+    "Create field '{0}'",
+  );
   static const CREATE_FILE = FixKind(
-      'dart.fix.create.file', DartFixKindPriority.DEFAULT, "Create file '{0}'");
-  static const CREATE_FUNCTION =
-      FixKind('dart.fix.create.function', 49, "Create function '{0}'");
-  static const CREATE_GETTER = FixKind('dart.fix.create.getter',
-      DartFixKindPriority.DEFAULT, "Create getter '{0}'");
-  static const CREATE_LOCAL_VARIABLE = FixKind('dart.fix.create.localVariable',
-      DartFixKindPriority.DEFAULT, "Create local variable '{0}'");
-  static const CREATE_METHOD = FixKind('dart.fix.create.method',
-      DartFixKindPriority.DEFAULT, "Create method '{0}'");
+    'dart.fix.create.file',
+    DartFixKindPriority.DEFAULT,
+    "Create file '{0}'",
+  );
+  static const CREATE_FUNCTION = FixKind(
+    'dart.fix.create.function',
+    49,
+    "Create function '{0}'",
+  );
+  static const CREATE_GETTER = FixKind(
+    'dart.fix.create.getter',
+    DartFixKindPriority.DEFAULT,
+    "Create getter '{0}'",
+  );
+  static const CREATE_LOCAL_VARIABLE = FixKind(
+    'dart.fix.create.localVariable',
+    DartFixKindPriority.DEFAULT,
+    "Create local variable '{0}'",
+  );
+  static const CREATE_METHOD = FixKind(
+    'dart.fix.create.method',
+    DartFixKindPriority.DEFAULT,
+    "Create method '{0}'",
+  );
 
   // todo (pq): used by LintNames.hash_and_equals; consider removing.
-  static const CREATE_METHOD_MULTI = FixKind('dart.fix.create.method.multi',
-      DartFixKindPriority.IN_FILE, 'Create methods in file');
+  static const CREATE_METHOD_MULTI = FixKind(
+    'dart.fix.create.method.multi',
+    DartFixKindPriority.IN_FILE,
+    'Create methods in file',
+  );
   static const CREATE_MISSING_OVERRIDES = FixKind(
-      'dart.fix.create.missingOverrides',
-      DartFixKindPriority.DEFAULT + 1,
-      'Create {0} missing override(s)');
-  static const CREATE_MIXIN = FixKind('dart.fix.create.mixin',
-      DartFixKindPriority.DEFAULT, "Create mixin '{0}'");
+    'dart.fix.create.missingOverrides',
+    DartFixKindPriority.DEFAULT + 1,
+    'Create {0} missing override{1}',
+  );
+  static const CREATE_MIXIN = FixKind(
+    'dart.fix.create.mixin',
+    DartFixKindPriority.DEFAULT,
+    "Create mixin '{0}'",
+  );
   static const CREATE_NO_SUCH_METHOD = FixKind(
-      'dart.fix.create.noSuchMethod', 49, "Create 'noSuchMethod' method");
-  static const CREATE_SETTER = FixKind('dart.fix.create.setter',
-      DartFixKindPriority.DEFAULT, "Create setter '{0}'");
-  static const DATA_DRIVEN =
-      FixKind('dart.fix.dataDriven', DartFixKindPriority.DEFAULT, '{0}');
-  static const EXTEND_CLASS_FOR_MIXIN = FixKind('dart.fix.extendClassForMixin',
-      DartFixKindPriority.DEFAULT, "Extend the class '{0}'");
-  static const IGNORE_ERROR_LINE = FixKind('dart.fix.ignore.line',
-      DartFixKindPriority.IGNORE, "Ignore '{0}' for this line");
-  static const IGNORE_ERROR_FILE = FixKind('dart.fix.ignore.file',
-      DartFixKindPriority.IGNORE - 1, "Ignore '{0}' for this file");
-  static const IMPORT_ASYNC =
-      FixKind('dart.fix.import.async', 49, "Import 'dart:async'");
-  static const IMPORT_LIBRARY_PREFIX = FixKind('dart.fix.import.libraryPrefix',
-      49, "Use imported library '{0}' with prefix '{1}'");
+    'dart.fix.create.noSuchMethod',
+    49,
+    "Create 'noSuchMethod' method",
+  );
+  static const CREATE_SETTER = FixKind(
+    'dart.fix.create.setter',
+    DartFixKindPriority.DEFAULT,
+    "Create setter '{0}'",
+  );
+  static const DATA_DRIVEN = FixKind(
+    'dart.fix.dataDriven',
+    DartFixKindPriority.DEFAULT,
+    '{0}',
+  );
+  static const EXTEND_CLASS_FOR_MIXIN = FixKind(
+    'dart.fix.extendClassForMixin',
+    DartFixKindPriority.DEFAULT,
+    "Extend the class '{0}'",
+  );
+  static const IGNORE_ERROR_LINE = FixKind(
+    'dart.fix.ignore.line',
+    DartFixKindPriority.IGNORE,
+    "Ignore '{0}' for this line",
+  );
+  static const IGNORE_ERROR_FILE = FixKind(
+    'dart.fix.ignore.file',
+    DartFixKindPriority.IGNORE - 1,
+    "Ignore '{0}' for this file",
+  );
+  static const IMPORT_ASYNC = FixKind(
+    'dart.fix.import.async',
+    49,
+    "Import 'dart:async'",
+  );
+  static const IMPORT_LIBRARY_PREFIX = FixKind(
+    'dart.fix.import.libraryPrefix',
+    49,
+    "Use imported library '{0}' with prefix '{1}'",
+  );
   static const IMPORT_LIBRARY_PROJECT1 = FixKind(
-      'dart.fix.import.libraryProject1',
-      DartFixKindPriority.DEFAULT + 3,
-      "Import library '{0}'");
+    'dart.fix.import.libraryProject1',
+    DartFixKindPriority.DEFAULT + 3,
+    "Import library '{0}'",
+  );
   static const IMPORT_LIBRARY_PROJECT2 = FixKind(
-      'dart.fix.import.libraryProject2',
-      DartFixKindPriority.DEFAULT + 2,
-      "Import library '{0}'");
+    'dart.fix.import.libraryProject2',
+    DartFixKindPriority.DEFAULT + 2,
+    "Import library '{0}'",
+  );
   static const IMPORT_LIBRARY_PROJECT3 = FixKind(
-      'dart.fix.import.libraryProject3',
-      DartFixKindPriority.DEFAULT + 1,
-      "Import library '{0}'");
-  static const IMPORT_LIBRARY_SDK = FixKind('dart.fix.import.librarySdk',
-      DartFixKindPriority.DEFAULT + 4, "Import library '{0}'");
-  static const IMPORT_LIBRARY_SHOW = FixKind('dart.fix.import.libraryShow',
-      DartFixKindPriority.DEFAULT + 5, "Update library '{0}' import");
-  static const INLINE_INVOCATION = FixKind('dart.fix.inlineInvocation',
-      DartFixKindPriority.DEFAULT - 20, "Inline invocation of '{0}'");
+    'dart.fix.import.libraryProject3',
+    DartFixKindPriority.DEFAULT + 1,
+    "Import library '{0}'",
+  );
+  static const IMPORT_LIBRARY_SDK = FixKind(
+    'dart.fix.import.librarySdk',
+    DartFixKindPriority.DEFAULT + 4,
+    "Import library '{0}'",
+  );
+  static const IMPORT_LIBRARY_SHOW = FixKind(
+    'dart.fix.import.libraryShow',
+    DartFixKindPriority.DEFAULT + 5,
+    "Update library '{0}' import",
+  );
+  static const INLINE_INVOCATION = FixKind(
+    'dart.fix.inlineInvocation',
+    DartFixKindPriority.DEFAULT - 20,
+    "Inline invocation of '{0}'",
+  );
   static const INLINE_INVOCATION_MULTI = FixKind(
-      'dart.fix.inlineInvocation.multi',
-      DartFixKindPriority.IN_FILE - 20,
-      'Inline invocations everywhere in file');
-  static const INLINE_TYPEDEF = FixKind('dart.fix.inlineTypedef',
-      DartFixKindPriority.DEFAULT - 20, "Inline the definition of '{0}'");
+    'dart.fix.inlineInvocation.multi',
+    DartFixKindPriority.IN_FILE - 20,
+    'Inline invocations everywhere in file',
+  );
+  static const INLINE_TYPEDEF = FixKind(
+    'dart.fix.inlineTypedef',
+    DartFixKindPriority.DEFAULT - 20,
+    "Inline the definition of '{0}'",
+  );
   static const INLINE_TYPEDEF_MULTI = FixKind(
-      'dart.fix.inlineTypedef.multi',
-      DartFixKindPriority.IN_FILE - 20,
-      'Inline type definitions everywhere in file');
+    'dart.fix.inlineTypedef.multi',
+    DartFixKindPriority.IN_FILE - 20,
+    'Inline type definitions everywhere in file',
+  );
   static const INSERT_SEMICOLON = FixKind(
-      'dart.fix.insertSemicolon', DartFixKindPriority.DEFAULT, "Insert ';'");
-  static const MAKE_CLASS_ABSTRACT = FixKind('dart.fix.makeClassAbstract',
-      DartFixKindPriority.DEFAULT, "Make class '{0}' abstract");
-  static const MAKE_FIELD_NOT_FINAL = FixKind('dart.fix.makeFieldNotFinal',
-      DartFixKindPriority.DEFAULT, "Make field '{0}' not final");
-  static const MAKE_FINAL =
-      FixKind('dart.fix.makeFinal', DartFixKindPriority.DEFAULT, 'Make final');
+    'dart.fix.insertSemicolon',
+    DartFixKindPriority.DEFAULT,
+    "Insert ';'",
+  );
+  static const MAKE_CLASS_ABSTRACT = FixKind(
+    'dart.fix.makeClassAbstract',
+    DartFixKindPriority.DEFAULT,
+    "Make class '{0}' abstract",
+  );
+  static const MAKE_FIELD_NOT_FINAL = FixKind(
+    'dart.fix.makeFieldNotFinal',
+    DartFixKindPriority.DEFAULT,
+    "Make field '{0}' not final",
+  );
+  static const MAKE_FINAL = FixKind(
+    'dart.fix.makeFinal',
+    DartFixKindPriority.DEFAULT,
+    'Make final',
+  );
 
   // todo (pq): consider parameterizing: 'Make {fields} final...'
-  static const MAKE_FINAL_MULTI = FixKind('dart.fix.makeFinal.multi',
-      DartFixKindPriority.IN_FILE, 'Make final where possible in file');
+  static const MAKE_FINAL_MULTI = FixKind(
+    'dart.fix.makeFinal.multi',
+    DartFixKindPriority.IN_FILE,
+    'Make final where possible in file',
+  );
   static const MAKE_RETURN_TYPE_NULLABLE = FixKind(
-      'dart.fix.makeReturnTypeNullable',
-      DartFixKindPriority.DEFAULT,
-      'Make the return type nullable');
+    'dart.fix.makeReturnTypeNullable',
+    DartFixKindPriority.DEFAULT,
+    'Make the return type nullable',
+  );
   static const MOVE_TYPE_ARGUMENTS_TO_CLASS = FixKind(
-      'dart.fix.moveTypeArgumentsToClass',
-      DartFixKindPriority.DEFAULT,
-      'Move type arguments to after class name');
+    'dart.fix.moveTypeArgumentsToClass',
+    DartFixKindPriority.DEFAULT,
+    'Move type arguments to after class name',
+  );
   static const MAKE_VARIABLE_NOT_FINAL = FixKind(
-      'dart.fix.makeVariableNotFinal',
-      DartFixKindPriority.DEFAULT,
-      "Make variable '{0}' not final");
-  static const MAKE_VARIABLE_NULLABLE = FixKind('dart.fix.makeVariableNullable',
-      DartFixKindPriority.DEFAULT, "Make '{0}' nullable");
-  static const ORGANIZE_IMPORTS = FixKind('dart.fix.organize.imports',
-      DartFixKindPriority.DEFAULT, 'Organize Imports');
+    'dart.fix.makeVariableNotFinal',
+    DartFixKindPriority.DEFAULT,
+    "Make variable '{0}' not final",
+  );
+  static const MAKE_VARIABLE_NULLABLE = FixKind(
+    'dart.fix.makeVariableNullable',
+    DartFixKindPriority.DEFAULT,
+    "Make '{0}' nullable",
+  );
+  static const ORGANIZE_IMPORTS = FixKind(
+    'dart.fix.organize.imports',
+    DartFixKindPriority.DEFAULT,
+    'Organize Imports',
+  );
   static const QUALIFY_REFERENCE = FixKind(
-      'dart.fix.qualifyReference', DartFixKindPriority.DEFAULT, "Use '{0}'");
-  static const REMOVE_ANNOTATION = FixKind('dart.fix.remove.annotation',
-      DartFixKindPriority.DEFAULT, "Remove the '{0}' annotation");
-  static const REMOVE_ARGUMENT = FixKind('dart.fix.remove.argument',
-      DartFixKindPriority.DEFAULT, 'Remove argument');
+    'dart.fix.qualifyReference',
+    DartFixKindPriority.DEFAULT,
+    "Use '{0}'",
+  );
+  static const REMOVE_ANNOTATION = FixKind(
+    'dart.fix.remove.annotation',
+    DartFixKindPriority.DEFAULT,
+    "Remove the '{0}' annotation",
+  );
+  static const REMOVE_ARGUMENT = FixKind(
+    'dart.fix.remove.argument',
+    DartFixKindPriority.DEFAULT,
+    'Remove argument',
+  );
 
   // todo (pq): used by LintNames.avoid_redundant_argument_values; consider a parameterized message
-  static const REMOVE_ARGUMENT_MULTI = FixKind('dart.fix.remove.argument.multi',
-      DartFixKindPriority.IN_FILE, 'Remove arguments in file');
+  static const REMOVE_ARGUMENT_MULTI = FixKind(
+    'dart.fix.remove.argument.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove arguments in file',
+  );
   static const REMOVE_AWAIT = FixKind(
-      'dart.fix.remove.await', DartFixKindPriority.DEFAULT, 'Remove await');
-  static const REMOVE_AWAIT_MULTI = FixKind('dart.fix.remove.await.multi',
-      DartFixKindPriority.IN_FILE, 'Remove awaits in file');
-  static const REMOVE_COMPARISON = FixKind('dart.fix.remove.comparison',
-      DartFixKindPriority.DEFAULT, 'Remove comparison');
+    'dart.fix.remove.await',
+    DartFixKindPriority.DEFAULT,
+    'Remove await',
+  );
+  static const REMOVE_AWAIT_MULTI = FixKind(
+    'dart.fix.remove.await.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove awaits in file',
+  );
+  static const REMOVE_COMPARISON = FixKind(
+    'dart.fix.remove.comparison',
+    DartFixKindPriority.DEFAULT,
+    'Remove comparison',
+  );
+  static const REMOVE_COMPARISON_MULTI = FixKind(
+    'dart.fix.remove.comparison.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove comparisons in file',
+  );
   static const REMOVE_CONST = FixKind(
-      'dart.fix.remove.const', DartFixKindPriority.DEFAULT, 'Remove const');
-  static const REMOVE_DEAD_CODE = FixKind('dart.fix.remove.deadCode',
-      DartFixKindPriority.DEFAULT, 'Remove dead code');
-  static const REMOVE_DUPLICATE_CASE = FixKind('dart.fix.remove.duplicateCase',
-      DartFixKindPriority.DEFAULT, 'Remove duplicate case statement');
+    'dart.fix.remove.const',
+    DartFixKindPriority.DEFAULT,
+    'Remove const',
+  );
+  static const REMOVE_DEAD_CODE = FixKind(
+    'dart.fix.remove.deadCode',
+    DartFixKindPriority.DEFAULT,
+    'Remove dead code',
+  );
+  static const REMOVE_DUPLICATE_CASE = FixKind(
+    'dart.fix.remove.duplicateCase',
+    DartFixKindPriority.DEFAULT,
+    'Remove duplicate case statement',
+  );
 
   // todo (pq): is this dangerous to bulk apply?  Consider removing.
   static const REMOVE_DUPLICATE_CASE_MULTI = FixKind(
-      'dart.fix.remove.duplicateCase.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove duplicate case statement');
-  static const REMOVE_EMPTY_CATCH = FixKind('dart.fix.remove.emptyCatch',
-      DartFixKindPriority.DEFAULT, 'Remove empty catch clause');
+    'dart.fix.remove.duplicateCase.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove duplicate case statement',
+  );
+  static const REMOVE_EMPTY_CATCH = FixKind(
+    'dart.fix.remove.emptyCatch',
+    DartFixKindPriority.DEFAULT,
+    'Remove empty catch clause',
+  );
   static const REMOVE_EMPTY_CATCH_MULTI = FixKind(
-      'dart.fix.remove.emptyCatch.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove empty catch clauses everywhere in file');
+    'dart.fix.remove.emptyCatch.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove empty catch clauses everywhere in file',
+  );
   static const REMOVE_EMPTY_CONSTRUCTOR_BODY = FixKind(
-      'dart.fix.remove.emptyConstructorBody',
-      DartFixKindPriority.DEFAULT,
-      'Remove empty constructor body');
+    'dart.fix.remove.emptyConstructorBody',
+    DartFixKindPriority.DEFAULT,
+    'Remove empty constructor body',
+  );
   static const REMOVE_EMPTY_CONSTRUCTOR_BODY_MULTI = FixKind(
-      'dart.fix.remove.emptyConstructorBody.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove empty constructor bodies in file');
-  static const REMOVE_EMPTY_ELSE = FixKind('dart.fix.remove.emptyElse',
-      DartFixKindPriority.DEFAULT, 'Remove empty else clause');
+    'dart.fix.remove.emptyConstructorBody.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove empty constructor bodies in file',
+  );
+  static const REMOVE_EMPTY_ELSE = FixKind(
+    'dart.fix.remove.emptyElse',
+    DartFixKindPriority.DEFAULT,
+    'Remove empty else clause',
+  );
   static const REMOVE_EMPTY_ELSE_MULTI = FixKind(
-      'dart.fix.remove.emptyElse.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove empty else clauses everywhere in file');
+    'dart.fix.remove.emptyElse.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove empty else clauses everywhere in file',
+  );
   static const REMOVE_EMPTY_STATEMENT = FixKind(
-      'dart.fix.remove.emptyStatement',
-      DartFixKindPriority.DEFAULT,
-      'Remove empty statement');
+    'dart.fix.remove.emptyStatement',
+    DartFixKindPriority.DEFAULT,
+    'Remove empty statement',
+  );
   static const REMOVE_EMPTY_STATEMENT_MULTI = FixKind(
-      'dart.fix.remove.emptyStatement.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove empty statements everywhere in file');
+    'dart.fix.remove.emptyStatement.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove empty statements everywhere in file',
+  );
   static const REMOVE_IF_NULL_OPERATOR = FixKind(
-      'dart.fix.remove.ifNullOperator',
-      DartFixKindPriority.DEFAULT,
-      "Remove the '??' operator");
+    'dart.fix.remove.ifNullOperator',
+    DartFixKindPriority.DEFAULT,
+    "Remove the '??' operator",
+  );
   static const REMOVE_IF_NULL_OPERATOR_MULTI = FixKind(
-      'dart.fix.remove.ifNullOperator.multi',
-      DartFixKindPriority.IN_FILE,
-      "Remove unnecessary '??' operators everywhere in file");
-  static const REMOVE_INITIALIZER = FixKind('dart.fix.remove.initializer',
-      DartFixKindPriority.DEFAULT, 'Remove initializer');
+    'dart.fix.remove.ifNullOperator.multi',
+    DartFixKindPriority.IN_FILE,
+    "Remove unnecessary '??' operators everywhere in file",
+  );
+  static const REMOVE_INITIALIZER = FixKind(
+    'dart.fix.remove.initializer',
+    DartFixKindPriority.DEFAULT,
+    'Remove initializer',
+  );
   static const REMOVE_INITIALIZER_MULTI = FixKind(
-      'dart.fix.remove.initializer.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary initializers everywhere in file');
+    'dart.fix.remove.initializer.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary initializers everywhere in file',
+  );
   static const REMOVE_INTERPOLATION_BRACES = FixKind(
-      'dart.fix.remove.interpolationBraces',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary interpolation braces');
+    'dart.fix.remove.interpolationBraces',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary interpolation braces',
+  );
   static const REMOVE_INTERPOLATION_BRACES_MULTI = FixKind(
-      'dart.fix.remove.interpolationBraces.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary interpolation braces everywhere in file');
+    'dart.fix.remove.interpolationBraces.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary interpolation braces everywhere in file',
+  );
   static const REMOVE_METHOD_DECLARATION = FixKind(
-      'dart.fix.remove.methodDeclaration',
-      DartFixKindPriority.DEFAULT,
-      'Remove method declaration');
+    'dart.fix.remove.methodDeclaration',
+    DartFixKindPriority.DEFAULT,
+    'Remove method declaration',
+  );
 
   // todo (pq): parameterize to make scope explicit
   static const REMOVE_METHOD_DECLARATION_MULTI = FixKind(
-      'dart.fix.remove.methodDeclaration.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary method declarations in file');
+    'dart.fix.remove.methodDeclaration.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary method declarations in file',
+  );
   static const REMOVE_NAME_FROM_COMBINATOR = FixKind(
-      'dart.fix.remove.nameFromCombinator',
-      DartFixKindPriority.DEFAULT,
-      "Remove name from '{0}'");
+    'dart.fix.remove.nameFromCombinator',
+    DartFixKindPriority.DEFAULT,
+    "Remove name from '{0}'",
+  );
   static const REMOVE_NON_NULL_ASSERTION = FixKind(
-      'dart.fix.remove.nonNullAssertion',
-      DartFixKindPriority.DEFAULT,
-      "Remove the '!'");
+    'dart.fix.remove.nonNullAssertion',
+    DartFixKindPriority.DEFAULT,
+    "Remove the '!'",
+  );
   static const REMOVE_NON_NULL_ASSERTION_MULTI = FixKind(
-      'dart.fix.remove.nonNullAssertion.multi',
-      DartFixKindPriority.IN_FILE,
-      "Remove '!'s in file");
-  static const REMOVE_OPERATOR = FixKind('dart.fix.remove.operator',
-      DartFixKindPriority.DEFAULT, 'Remove the operator');
+    'dart.fix.remove.nonNullAssertion.multi',
+    DartFixKindPriority.IN_FILE,
+    "Remove '!'s in file",
+  );
+  static const REMOVE_OPERATOR = FixKind(
+    'dart.fix.remove.operator',
+    DartFixKindPriority.DEFAULT,
+    'Remove the operator',
+  );
   static const REMOVE_OPERATOR_MULTI = FixKind(
-      'dart.fix.remove.operator.multi.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove operators in file');
+    'dart.fix.remove.operator.multi.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove operators in file',
+  );
   static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = FixKind(
-      'dart.fix.remove.parametersInGetterDeclaration',
-      DartFixKindPriority.DEFAULT,
-      'Remove parameters in getter declaration');
+    'dart.fix.remove.parametersInGetterDeclaration',
+    DartFixKindPriority.DEFAULT,
+    'Remove parameters in getter declaration',
+  );
   static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = FixKind(
-      'dart.fix.remove.parenthesisInGetterInvocation',
-      DartFixKindPriority.DEFAULT,
-      'Remove parentheses in getter invocation');
-  static const REMOVE_QUESTION_MARK = FixKind('dart.fix.remove.questionMark',
-      DartFixKindPriority.DEFAULT, "Remove the '?'");
+    'dart.fix.remove.parenthesisInGetterInvocation',
+    DartFixKindPriority.DEFAULT,
+    'Remove parentheses in getter invocation',
+  );
+  static const REMOVE_QUESTION_MARK = FixKind(
+    'dart.fix.remove.questionMark',
+    DartFixKindPriority.DEFAULT,
+    "Remove the '?'",
+  );
   static const REMOVE_QUESTION_MARK_MULTI = FixKind(
-      'dart.fix.remove.questionMark.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary question marks in file');
-  static const REMOVE_RETURNED_VALUE = FixKind('dart.fix.remove.returnedValue',
-      DartFixKindPriority.DEFAULT, 'Remove invalid returned value');
+    'dart.fix.remove.questionMark.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary question marks in file',
+  );
+  static const REMOVE_RETURNED_VALUE = FixKind(
+    'dart.fix.remove.returnedValue',
+    DartFixKindPriority.DEFAULT,
+    'Remove invalid returned value',
+  );
   static const REMOVE_RETURNED_VALUE_MULTI = FixKind(
-      'dart.fix.remove.returnedValue.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove invalid returned values in file');
+    'dart.fix.remove.returnedValue.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove invalid returned values in file',
+  );
   static const REMOVE_THIS_EXPRESSION = FixKind(
-      'dart.fix.remove.thisExpression',
-      DartFixKindPriority.DEFAULT,
-      "Remove 'this' expression");
+    'dart.fix.remove.thisExpression',
+    DartFixKindPriority.DEFAULT,
+    "Remove 'this' expression",
+  );
   static const REMOVE_THIS_EXPRESSION_MULTI = FixKind(
-      'dart.fix.remove.thisExpression.multi',
-      DartFixKindPriority.IN_FILE,
-      "Remove unnecessary 'this' expressions everywhere in file");
+    'dart.fix.remove.thisExpression.multi',
+    DartFixKindPriority.IN_FILE,
+    "Remove unnecessary 'this' expressions everywhere in file",
+  );
   static const REMOVE_TYPE_ANNOTATION = FixKind(
-      'dart.fix.remove.typeAnnotation',
-      DartFixKindPriority.DEFAULT,
-      'Remove type annotation');
+    'dart.fix.remove.typeAnnotation',
+    DartFixKindPriority.DEFAULT,
+    'Remove type annotation',
+  );
   static const REMOVE_TYPE_ANNOTATION_MULTI = FixKind(
-      'dart.fix.remove.typeAnnotation.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary type annotations in file');
-  static const REMOVE_TYPE_ARGUMENTS =
-      FixKind('dart.fix.remove.typeArguments', 49, 'Remove type arguments');
+    'dart.fix.remove.typeAnnotation.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary type annotations in file',
+  );
+  static const REMOVE_TYPE_ARGUMENTS = FixKind(
+    'dart.fix.remove.typeArguments',
+    49,
+    'Remove type arguments',
+  );
   static const REMOVE_UNNECESSARY_CAST = FixKind(
-      'dart.fix.remove.unnecessaryCast',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary cast');
+    'dart.fix.remove.unnecessaryCast',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary cast',
+  );
   static const REMOVE_UNNECESSARY_CAST_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryCast.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove all unnecessary casts in file');
+    'dart.fix.remove.unnecessaryCast.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove all unnecessary casts in file',
+  );
   static const REMOVE_UNNECESSARY_CONST = FixKind(
-      'dart.fix.remove.unnecessaryConst',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary const keyword');
+    'dart.fix.remove.unnecessaryConst',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary const keyword',
+  );
   static const REMOVE_UNNECESSARY_CONST_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryConst.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary const keywords everywhere in file');
+    'dart.fix.remove.unnecessaryConst.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary const keywords everywhere in file',
+  );
   static const REMOVE_UNNECESSARY_NEW = FixKind(
-      'dart.fix.remove.unnecessaryNew',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary new keyword');
+    'dart.fix.remove.unnecessaryNew',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary new keyword',
+  );
   static const REMOVE_UNNECESSARY_NEW_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryNew.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unnecessary new keywords everywhere in file');
+    'dart.fix.remove.unnecessaryNew.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary new keywords everywhere in file',
+  );
   static const REMOVE_UNNECESSARY_CONTAINER = FixKind(
-      'dart.fix.remove.unnecessaryContainer',
-      DartFixKindPriority.DEFAULT,
-      "Remove unnecessary 'Container'");
+    'dart.fix.remove.unnecessaryContainer',
+    DartFixKindPriority.DEFAULT,
+    "Remove unnecessary 'Container'",
+  );
   static const REMOVE_UNNECESSARY_CONTAINER_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryContainer.multi',
-      DartFixKindPriority.IN_FILE,
-      "Remove unnecessary 'Container's in file");
+    'dart.fix.remove.unnecessaryContainer.multi',
+    DartFixKindPriority.IN_FILE,
+    "Remove unnecessary 'Container's in file",
+  );
   static const REMOVE_UNNECESSARY_PARENTHESES = FixKind(
-      'dart.fix.remove.unnecessaryParentheses',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary parentheses');
+    'dart.fix.remove.unnecessaryParentheses',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary parentheses',
+  );
   static const REMOVE_UNNECESSARY_PARENTHESES_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryParentheses.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove all unnecessary parentheses in file');
+    'dart.fix.remove.unnecessaryParentheses.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove all unnecessary parentheses in file',
+  );
   static const REMOVE_UNNECESSARY_STRING_ESCAPE = FixKind(
-      'dart.fix.remove.unnecessaryStringEscape',
-      DartFixKindPriority.DEFAULT,
-      "Remove unnecessary '\\' in string");
+    'dart.fix.remove.unnecessaryStringEscape',
+    DartFixKindPriority.DEFAULT,
+    "Remove unnecessary '\\' in string",
+  );
   static const REMOVE_UNNECESSARY_STRING_ESCAPE_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryStringEscape.multi',
-      DartFixKindPriority.DEFAULT,
-      "Remove unnecessary '\\' in strings in file");
+    'dart.fix.remove.unnecessaryStringEscape.multi',
+    DartFixKindPriority.DEFAULT,
+    "Remove unnecessary '\\' in strings in file",
+  );
   static const REMOVE_UNNECESSARY_STRING_INTERPOLATION = FixKind(
-      'dart.fix.remove.unnecessaryStringInterpolation',
-      DartFixKindPriority.DEFAULT,
-      'Remove unnecessary string interpolation');
+    'dart.fix.remove.unnecessaryStringInterpolation',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary string interpolation',
+  );
   static const REMOVE_UNNECESSARY_STRING_INTERPOLATION_MULTI = FixKind(
-      'dart.fix.remove.unnecessaryStringInterpolation.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove all unnecessary string interpolations in file');
+    'dart.fix.remove.unnecessaryStringInterpolation.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove all unnecessary string interpolations in file',
+  );
   static const REMOVE_UNUSED_CATCH_CLAUSE = FixKind(
-      'dart.fix.remove.unusedCatchClause',
-      DartFixKindPriority.DEFAULT,
-      "Remove unused 'catch' clause");
+    'dart.fix.remove.unusedCatchClause',
+    DartFixKindPriority.DEFAULT,
+    "Remove unused 'catch' clause",
+  );
   static const REMOVE_UNUSED_CATCH_STACK = FixKind(
-      'dart.fix.remove.unusedCatchStack',
-      DartFixKindPriority.DEFAULT,
-      'Remove unused stack trace variable');
-  static const REMOVE_UNUSED_ELEMENT = FixKind('dart.fix.remove.unusedElement',
-      DartFixKindPriority.DEFAULT, 'Remove unused element');
-  static const REMOVE_UNUSED_FIELD = FixKind('dart.fix.remove.unusedField',
-      DartFixKindPriority.DEFAULT, 'Remove unused field');
-  static const REMOVE_UNUSED_IMPORT = FixKind('dart.fix.remove.unusedImport',
-      DartFixKindPriority.DEFAULT, 'Remove unused import');
+    'dart.fix.remove.unusedCatchStack',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused stack trace variable',
+  );
+  static const REMOVE_UNUSED_ELEMENT = FixKind(
+    'dart.fix.remove.unusedElement',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused element',
+  );
+  static const REMOVE_UNUSED_FIELD = FixKind(
+    'dart.fix.remove.unusedField',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused field',
+  );
+  static const REMOVE_UNUSED_IMPORT = FixKind(
+    'dart.fix.remove.unusedImport',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused import',
+  );
   static const REMOVE_UNUSED_IMPORT_MULTI = FixKind(
-      'dart.fix.remove.unusedImport.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove all unused imports in file');
-  static const REMOVE_UNUSED_LABEL = FixKind('dart.fix.remove.unusedLabel',
-      DartFixKindPriority.DEFAULT, 'Remove unused label');
+    'dart.fix.remove.unusedImport.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove all unused imports in file',
+  );
+  static const REMOVE_UNUSED_LABEL = FixKind(
+    'dart.fix.remove.unusedLabel',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused label',
+  );
   static const REMOVE_UNUSED_LOCAL_VARIABLE = FixKind(
-      'dart.fix.remove.unusedLocalVariable',
-      DartFixKindPriority.DEFAULT,
-      'Remove unused local variable');
+    'dart.fix.remove.unusedLocalVariable',
+    DartFixKindPriority.DEFAULT,
+    'Remove unused local variable',
+  );
   static const REMOVE_UNUSED_PARAMETER = FixKind(
-      'dart.fix.remove.unusedParameter',
-      DartFixKindPriority.DEFAULT,
-      'Remove the unused parameter');
+    'dart.fix.remove.unusedParameter',
+    DartFixKindPriority.DEFAULT,
+    'Remove the unused parameter',
+  );
   static const REMOVE_UNUSED_PARAMETER_MULTI = FixKind(
-      'dart.fix.remove.unusedParameter.multi',
-      DartFixKindPriority.IN_FILE,
-      'Remove unused parameters everywhere in file');
-  static const RENAME_TO_CAMEL_CASE = FixKind('dart.fix.rename.toCamelCase',
-      DartFixKindPriority.DEFAULT, "Rename to '{0}'");
+    'dart.fix.remove.unusedParameter.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unused parameters everywhere in file',
+  );
+  static const RENAME_TO_CAMEL_CASE = FixKind(
+    'dart.fix.rename.toCamelCase',
+    DartFixKindPriority.DEFAULT,
+    "Rename to '{0}'",
+  );
   static const RENAME_TO_CAMEL_CASE_MULTI = FixKind(
-      'dart.fix.rename.toCamelCase.multi',
-      DartFixKindPriority.IN_FILE,
-      'Rename to camel case everywhere in file');
+    'dart.fix.rename.toCamelCase.multi',
+    DartFixKindPriority.IN_FILE,
+    'Rename to camel case everywhere in file',
+  );
   static const REPLACE_BOOLEAN_WITH_BOOL = FixKind(
-      'dart.fix.replace.booleanWithBool',
-      DartFixKindPriority.DEFAULT,
-      "Replace 'boolean' with 'bool'");
+    'dart.fix.replace.booleanWithBool',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'boolean' with 'bool'",
+  );
   static const REPLACE_BOOLEAN_WITH_BOOL_MULTI = FixKind(
-      'dart.fix.replace.booleanWithBool.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace all 'boolean's with 'bool' in file");
+    'dart.fix.replace.booleanWithBool.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace all 'boolean's with 'bool' in file",
+  );
   static const REPLACE_CASCADE_WITH_DOT = FixKind(
-      'dart.fix.replace.cascadeWithDot',
-      DartFixKindPriority.DEFAULT,
-      "Replace '..' with '.'");
+    'dart.fix.replace.cascadeWithDot',
+    DartFixKindPriority.DEFAULT,
+    "Replace '..' with '.'",
+  );
   static const REPLACE_CASCADE_WITH_DOT_MULTI = FixKind(
-      'dart.fix.replace.cascadeWithDot.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace unnecessary '..'s with '.'s everywhere in file");
+    'dart.fix.replace.cascadeWithDot.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace unnecessary '..'s with '.'s everywhere in file",
+  );
   static const REPLACE_COLON_WITH_EQUALS = FixKind(
-      'dart.fix.replace.colonWithEquals',
-      DartFixKindPriority.DEFAULT,
-      "Replace ':' with '='");
+    'dart.fix.replace.colonWithEquals',
+    DartFixKindPriority.DEFAULT,
+    "Replace ':' with '='",
+  );
   static const REPLACE_COLON_WITH_EQUALS_MULTI = FixKind(
-      'dart.fix.replace.colonWithEquals.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace ':'s with '='s everywhere in file");
+    'dart.fix.replace.colonWithEquals.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace ':'s with '='s everywhere in file",
+  );
   static const REPLACE_WITH_FILLED = FixKind(
-      'dart.fix.replace.finalWithListFilled',
-      DartFixKindPriority.DEFAULT,
-      "Replace with 'List.filled'");
+    'dart.fix.replace.finalWithListFilled',
+    DartFixKindPriority.DEFAULT,
+    "Replace with 'List.filled'",
+  );
   static const REPLACE_FINAL_WITH_CONST = FixKind(
-      'dart.fix.replace.finalWithConst',
-      DartFixKindPriority.DEFAULT,
-      "Replace 'final' with 'const'");
+    'dart.fix.replace.finalWithConst',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'final' with 'const'",
+  );
   static const REPLACE_FINAL_WITH_CONST_MULTI = FixKind(
-      'dart.fix.replace.finalWithConst.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace 'final' with 'const' where possible in file");
-  static const REPLACE_NEW_WITH_CONST = FixKind('dart.fix.replace.newWithConst',
-      DartFixKindPriority.DEFAULT, "Replace 'new' with 'const'");
+    'dart.fix.replace.finalWithConst.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace 'final' with 'const' where possible in file",
+  );
+  static const REPLACE_NEW_WITH_CONST = FixKind(
+    'dart.fix.replace.newWithConst',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'new' with 'const'",
+  );
   static const REPLACE_NEW_WITH_CONST_MULTI = FixKind(
-      'dart.fix.replace.newWithConst.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace 'new' with 'const' where possible in file");
+    'dart.fix.replace.newWithConst.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace 'new' with 'const' where possible in file",
+  );
   static const REPLACE_NULL_WITH_CLOSURE = FixKind(
-      'dart.fix.replace.nullWithClosure',
-      DartFixKindPriority.DEFAULT,
-      "Replace 'null' with a closure");
+    'dart.fix.replace.nullWithClosure',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'null' with a closure",
+  );
   static const REPLACE_NULL_WITH_CLOSURE_MULTI = FixKind(
-      'dart.fix.replace.nullWithClosure.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace 'null's with closures where possible in file");
-  static const REPLACE_FINAL_WITH_VAR = FixKind('dart.fix.replace.finalWithVar',
-      DartFixKindPriority.DEFAULT, "Replace 'final' with 'var'");
+    'dart.fix.replace.nullWithClosure.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace 'null's with closures where possible in file",
+  );
+  static const REPLACE_FINAL_WITH_VAR = FixKind(
+    'dart.fix.replace.finalWithVar',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'final' with 'var'",
+  );
   static const REPLACE_FINAL_WITH_VAR_MULTI = FixKind(
-      'dart.fix.replace.finalWithVar.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace 'final' with 'var' where possible in file");
-  static const REPLACE_NULL_WITH_VOID = FixKind('dart.fix.replace.nullWithVoid',
-      DartFixKindPriority.DEFAULT, "Replace 'Null' with 'void'");
+    'dart.fix.replace.finalWithVar.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace 'final' with 'var' where possible in file",
+  );
+  static const REPLACE_NULL_WITH_VOID = FixKind(
+    'dart.fix.replace.nullWithVoid',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'Null' with 'void'",
+  );
   static const REPLACE_NULL_WITH_VOID_MULTI = FixKind(
-      'dart.fix.replace.nullWithVoid.multi',
-      DartFixKindPriority.DEFAULT,
-      "Replace 'Null' with 'void' everywhere in file");
+    'dart.fix.replace.nullWithVoid.multi',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'Null' with 'void' everywhere in file",
+  );
+  static const REPLACE_RETURN_TYPE = FixKind(
+    'dart.fix.replace.returnType',
+    DartFixKindPriority.DEFAULT,
+    "Replace the return type with '{0}'",
+  );
   static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
-      'dart.fix.replace.returnTypeFuture',
-      DartFixKindPriority.DEFAULT,
-      "Return 'Future' from 'async' function");
+    'dart.fix.replace.returnTypeFuture',
+    DartFixKindPriority.DEFAULT,
+    "Return 'Future' from 'async' function",
+  );
   static const REPLACE_CONTAINER_WITH_SIZED_BOX = FixKind(
-      'dart.fix.replace.containerWithSizedBox',
-      DartFixKindPriority.DEFAULT,
-      "Replace with 'SizedBox'");
+    'dart.fix.replace.containerWithSizedBox',
+    DartFixKindPriority.DEFAULT,
+    "Replace with 'SizedBox'",
+  );
   static const REPLACE_CONTAINER_WITH_SIZED_BOX_MULTI = FixKind(
-      'dart.fix.replace.containerWithSizedBox.multi',
-      DartFixKindPriority.DEFAULT,
-      "Replace with 'SizedBox' everywhere in file");
+    'dart.fix.replace.containerWithSizedBox.multi',
+    DartFixKindPriority.DEFAULT,
+    "Replace with 'SizedBox' everywhere in file",
+  );
   static const REPLACE_VAR_WITH_DYNAMIC = FixKind(
-      'dart.fix.replace.varWithDynamic',
-      DartFixKindPriority.DEFAULT,
-      "Replace 'var' with 'dynamic'");
+    'dart.fix.replace.varWithDynamic',
+    DartFixKindPriority.DEFAULT,
+    "Replace 'var' with 'dynamic'",
+  );
   static const REPLACE_WITH_EIGHT_DIGIT_HEX = FixKind(
-      'dart.fix.replace.withEightDigitHex',
-      DartFixKindPriority.DEFAULT,
-      "Replace with '{0}'");
+    'dart.fix.replace.withEightDigitHex',
+    DartFixKindPriority.DEFAULT,
+    "Replace with '{0}'",
+  );
   static const REPLACE_WITH_EIGHT_DIGIT_HEX_MULTI = FixKind(
-      'dart.fix.replace.withEightDigitHex.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with hex digits everywhere in file');
-  static const REPLACE_WITH_BRACKETS = FixKind('dart.fix.replace.withBrackets',
-      DartFixKindPriority.DEFAULT, 'Replace with { }');
+    'dart.fix.replace.withEightDigitHex.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with hex digits everywhere in file',
+  );
+  static const REPLACE_WITH_BRACKETS = FixKind(
+    'dart.fix.replace.withBrackets',
+    DartFixKindPriority.DEFAULT,
+    'Replace with { }',
+  );
   static const REPLACE_WITH_BRACKETS_MULTI = FixKind(
-      'dart.fix.replace.withBrackets.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with { } everywhere in file');
+    'dart.fix.replace.withBrackets.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with { } everywhere in file',
+  );
   static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT = FixKind(
-      'dart.fix.replace.withConditionalAssignment',
-      DartFixKindPriority.DEFAULT,
-      'Replace with ??=');
+    'dart.fix.replace.withConditionalAssignment',
+    DartFixKindPriority.DEFAULT,
+    'Replace with ??=',
+  );
   static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT_MULTI = FixKind(
-      'dart.fix.replace.withConditionalAssignment.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with ??= everywhere in file');
+    'dart.fix.replace.withConditionalAssignment.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with ??= everywhere in file',
+  );
   static const REPLACE_WITH_EXTENSION_NAME = FixKind(
-      'dart.fix.replace.withExtensionName',
-      DartFixKindPriority.DEFAULT,
-      "Replace with '{0}'");
+    'dart.fix.replace.withExtensionName',
+    DartFixKindPriority.DEFAULT,
+    "Replace with '{0}'",
+  );
   static const REPLACE_WITH_IDENTIFIER = FixKind(
-      'dart.fix.replace.withIdentifier',
-      DartFixKindPriority.DEFAULT,
-      'Replace with identifier');
+    'dart.fix.replace.withIdentifier',
+    DartFixKindPriority.DEFAULT,
+    'Replace with identifier',
+  );
 
   // todo (pq): parameterize message (used by LintNames.avoid_types_on_closure_parameters)
   static const REPLACE_WITH_IDENTIFIER_MULTI = FixKind(
-      'dart.fix.replace.withIdentifier.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with identifier everywhere in file');
+    'dart.fix.replace.withIdentifier.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with identifier everywhere in file',
+  );
   static const REPLACE_WITH_INTERPOLATION = FixKind(
-      'dart.fix.replace.withInterpolation',
-      DartFixKindPriority.DEFAULT,
-      'Replace with interpolation');
+    'dart.fix.replace.withInterpolation',
+    DartFixKindPriority.DEFAULT,
+    'Replace with interpolation',
+  );
   static const REPLACE_WITH_INTERPOLATION_MULTI = FixKind(
-      'dart.fix.replace.withInterpolation.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with interpolations everywhere in file');
-  static const REPLACE_WITH_IS_EMPTY = FixKind('dart.fix.replace.withIsEmpty',
-      DartFixKindPriority.DEFAULT, "Replace with 'isEmpty'");
+    'dart.fix.replace.withInterpolation.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with interpolations everywhere in file',
+  );
+  static const REPLACE_WITH_IS_EMPTY = FixKind(
+    'dart.fix.replace.withIsEmpty',
+    DartFixKindPriority.DEFAULT,
+    "Replace with 'isEmpty'",
+  );
   static const REPLACE_WITH_IS_EMPTY_MULTI = FixKind(
-      'dart.fix.replace.withIsEmpty.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace with 'isEmpty' everywhere in file");
+    'dart.fix.replace.withIsEmpty.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace with 'isEmpty' everywhere in file",
+  );
   static const REPLACE_WITH_IS_NOT_EMPTY = FixKind(
-      'dart.fix.replace.withIsNotEmpty',
-      DartFixKindPriority.DEFAULT,
-      "Replace with 'isNotEmpty'");
+    'dart.fix.replace.withIsNotEmpty',
+    DartFixKindPriority.DEFAULT,
+    "Replace with 'isNotEmpty'",
+  );
   static const REPLACE_WITH_IS_NOT_EMPTY_MULTI = FixKind(
-      'dart.fix.replace.withIsNotEmpty.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace with 'isNotEmpty' everywhere in file");
+    'dart.fix.replace.withIsNotEmpty.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace with 'isNotEmpty' everywhere in file",
+  );
   static const REPLACE_WITH_NOT_NULL_AWARE = FixKind(
-      'dart.fix.replace.withNotNullAware',
-      DartFixKindPriority.DEFAULT,
-      "Replace with '{0}'");
+    'dart.fix.replace.withNotNullAware',
+    DartFixKindPriority.DEFAULT,
+    "Replace with '{0}'",
+  );
   static const REPLACE_WITH_NOT_NULL_AWARE_MULTI = FixKind(
-      'dart.fix.replace.withNotNullAware.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace with non-null-aware operator everywhere in file.');
+    'dart.fix.replace.withNotNullAware.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace with non-null-aware operator everywhere in file.',
+  );
   static const REPLACE_WITH_NULL_AWARE = FixKind(
-      'dart.fix.replace.withNullAware',
-      DartFixKindPriority.DEFAULT,
-      "Replace the '.' with a '?.' in the invocation");
-  static const REPLACE_WITH_TEAR_OFF = FixKind('dart.fix.replace.withTearOff',
-      DartFixKindPriority.DEFAULT, 'Replace function literal with tear-off');
+    'dart.fix.replace.withNullAware',
+    DartFixKindPriority.DEFAULT,
+    "Replace the '.' with a '?.' in the invocation",
+  );
+  static const REPLACE_WITH_TEAR_OFF = FixKind(
+    'dart.fix.replace.withTearOff',
+    DartFixKindPriority.DEFAULT,
+    'Replace function literal with tear-off',
+  );
   static const REPLACE_WITH_TEAR_OFF_MULTI = FixKind(
-      'dart.fix.replace.withTearOff.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace function literals with tear-offs everywhere in file');
-  static const REPLACE_WITH_VAR = FixKind('dart.fix.replace.withVar',
-      DartFixKindPriority.DEFAULT, "Replace type annotation with 'var'");
+    'dart.fix.replace.withTearOff.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace function literals with tear-offs everywhere in file',
+  );
+  static const REPLACE_WITH_VAR = FixKind(
+    'dart.fix.replace.withVar',
+    DartFixKindPriority.DEFAULT,
+    "Replace type annotation with 'var'",
+  );
   static const REPLACE_WITH_VAR_MULTI = FixKind(
-      'dart.fix.replace.withVar.multi',
-      DartFixKindPriority.IN_FILE,
-      "Replace type annotations with 'var' in file");
+    'dart.fix.replace.withVar.multi',
+    DartFixKindPriority.IN_FILE,
+    "Replace type annotations with 'var' in file",
+  );
   static const SORT_CHILD_PROPERTY_LAST = FixKind(
-      'dart.fix.sort.childPropertyLast',
-      DartFixKindPriority.DEFAULT,
-      'Move child property to end of arguments');
+    'dart.fix.sort.childPropertyLast',
+    DartFixKindPriority.DEFAULT,
+    'Move child property to end of arguments',
+  );
   static const SORT_CHILD_PROPERTY_LAST_MULTI = FixKind(
-      'dart.fix.sort.childPropertyLast.multi',
-      DartFixKindPriority.IN_FILE,
-      'Move child properties to ends of arguments everywhere in file');
-  static const UPDATE_SDK_CONSTRAINTS = FixKind('dart.fix.updateSdkConstraints',
-      DartFixKindPriority.DEFAULT, 'Update the SDK constraints');
+    'dart.fix.sort.childPropertyLast.multi',
+    DartFixKindPriority.IN_FILE,
+    'Move child properties to ends of arguments everywhere in file',
+  );
+  static const UPDATE_SDK_CONSTRAINTS = FixKind(
+    'dart.fix.updateSdkConstraints',
+    DartFixKindPriority.DEFAULT,
+    'Update the SDK constraints',
+  );
   static const USE_CONST = FixKind(
-      'dart.fix.use.const', DartFixKindPriority.DEFAULT, 'Change to constant');
+    'dart.fix.use.const',
+    DartFixKindPriority.DEFAULT,
+    'Change to constant',
+  );
   static const USE_EFFECTIVE_INTEGER_DIVISION = FixKind(
-      'dart.fix.use.effectiveIntegerDivision',
-      DartFixKindPriority.DEFAULT,
-      'Use effective integer division ~/');
-  static const USE_EQ_EQ_NULL = FixKind('dart.fix.use.eqEqNull',
-      DartFixKindPriority.DEFAULT, "Use == null instead of 'is Null'");
+    'dart.fix.use.effectiveIntegerDivision',
+    DartFixKindPriority.DEFAULT,
+    'Use effective integer division ~/',
+  );
+  static const USE_EQ_EQ_NULL = FixKind(
+    'dart.fix.use.eqEqNull',
+    DartFixKindPriority.DEFAULT,
+    "Use == null instead of 'is Null'",
+  );
   static const USE_EQ_EQ_NULL_MULTI = FixKind(
-      'dart.fix.use.eqEqNull.multi',
-      DartFixKindPriority.IN_FILE,
-      "Use == null instead of 'is Null' everywhere in file");
-  static const USE_IS_NOT_EMPTY = FixKind('dart.fix.use.isNotEmpty',
-      DartFixKindPriority.DEFAULT, "Use x.isNotEmpty instead of '!x.isEmpty'");
+    'dart.fix.use.eqEqNull.multi',
+    DartFixKindPriority.IN_FILE,
+    "Use == null instead of 'is Null' everywhere in file",
+  );
+  static const USE_IS_NOT_EMPTY = FixKind(
+    'dart.fix.use.isNotEmpty',
+    DartFixKindPriority.DEFAULT,
+    "Use x.isNotEmpty instead of '!x.isEmpty'",
+  );
   static const USE_IS_NOT_EMPTY_MULTI = FixKind(
-      'dart.fix.use.isNotEmpty.multi',
-      DartFixKindPriority.IN_FILE,
-      "Use x.isNotEmpty instead of '!x.isEmpty' everywhere in file");
-  static const USE_NOT_EQ_NULL = FixKind('dart.fix.use.notEqNull',
-      DartFixKindPriority.DEFAULT, "Use != null instead of 'is! Null'");
+    'dart.fix.use.isNotEmpty.multi',
+    DartFixKindPriority.IN_FILE,
+    "Use x.isNotEmpty instead of '!x.isEmpty' everywhere in file",
+  );
+  static const USE_NOT_EQ_NULL = FixKind(
+    'dart.fix.use.notEqNull',
+    DartFixKindPriority.DEFAULT,
+    "Use != null instead of 'is! Null'",
+  );
   static const USE_NOT_EQ_NULL_MULTI = FixKind(
-      'dart.fix.use.notEqNull.multi',
-      DartFixKindPriority.IN_FILE,
-      "Use != null instead of 'is! Null' everywhere in file");
-  static const USE_RETHROW = FixKind('dart.fix.use.rethrow',
-      DartFixKindPriority.DEFAULT, 'Replace throw with rethrow');
+    'dart.fix.use.notEqNull.multi',
+    DartFixKindPriority.IN_FILE,
+    "Use != null instead of 'is! Null' everywhere in file",
+  );
+  static const USE_RETHROW = FixKind(
+    'dart.fix.use.rethrow',
+    DartFixKindPriority.DEFAULT,
+    'Replace throw with rethrow',
+  );
   static const USE_RETHROW_MULTI = FixKind(
-      'dart.fix.use.rethrow.multi',
-      DartFixKindPriority.IN_FILE,
-      'Replace throw with rethrow where possible in file');
-  static const WRAP_IN_FUTURE = FixKind('dart.fix.wrap.future',
-      DartFixKindPriority.DEFAULT, "Wrap in 'Future.value'");
-  static const WRAP_IN_TEXT = FixKind('dart.fix.flutter.wrap.text',
-      DartFixKindPriority.DEFAULT, "Wrap in a 'Text' widget");
+    'dart.fix.use.rethrow.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace throw with rethrow where possible in file',
+  );
+  static const WRAP_IN_FUTURE = FixKind(
+    'dart.fix.wrap.future',
+    DartFixKindPriority.DEFAULT,
+    "Wrap in 'Future.value'",
+  );
+  static const WRAP_IN_TEXT = FixKind(
+    'dart.fix.flutter.wrap.text',
+    DartFixKindPriority.DEFAULT,
+    "Wrap in a 'Text' widget",
+  );
 }
 
 class DartFixKindPriority {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart b/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
index e53d57d..3bc6161 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
@@ -91,6 +91,7 @@
       case DeclarationKind.CLASS_TYPE_ALIAS:
       case DeclarationKind.ENUM:
       case DeclarationKind.FUNCTION_TYPE_ALIAS:
+      case DeclarationKind.TYPE_ALIAS:
       case DeclarationKind.MIXIN:
         return TopLevelDeclarationKind.type;
       case DeclarationKind.EXTENSION:
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 c04be05..d0e51d0 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -12,6 +12,7 @@
 import 'package:analysis_server/src/services/correction/dart/add_await.dart';
 import 'package:analysis_server/src/services/correction/dart/add_const.dart';
 import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
+import 'package:analysis_server/src/services/correction/dart/add_eol_at_end_of_file.dart';
 import 'package:analysis_server/src/services/correction/dart/add_explicit_cast.dart';
 import 'package:analysis_server/src/services/correction/dart/add_field_formal_parameters.dart';
 import 'package:analysis_server/src/services/correction/dart/add_key_to_constructors.dart';
@@ -140,6 +141,7 @@
 import 'package:analysis_server/src/services/correction/dart/replace_final_with_var.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_new_with_const.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_null_with_closure.dart';
+import 'package:analysis_server/src/services/correction/dart/replace_return_type.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_return_type_future.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_var_with_dynamic.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_with_brackets.dart';
@@ -317,7 +319,7 @@
   /// used to create correction producers. The generators are then used to build
   /// fixes for those diagnostics. The generators used for non-lint diagnostics
   /// are in the [nonLintProducerMap].
-  static const Map<String, List<ProducerGenerator>> lintProducerMap = {
+  static final Map<String, List<ProducerGenerator>> lintProducerMap = {
     LintNames.always_declare_return_types: [
       // TODO(brianwilkerson) Consider applying in bulk.
       AddReturnType.newInstance,
@@ -344,6 +346,9 @@
     LintNames.avoid_init_to_null: [
       RemoveInitializer.newInstance,
     ],
+    LintNames.avoid_null_checks_in_equality_operators: [
+      RemoveComparison.newInstanceBulkFixable,
+    ],
     LintNames.avoid_private_typedef_functions: [
       InlineTypedef.newInstance,
     ],
@@ -405,6 +410,9 @@
       RemoveEmptyStatement.newInstance,
       ReplaceWithBrackets.newInstance,
     ],
+    LintNames.eol_at_end_of_file: [
+      AddEolAtEndOfFile.newInstance,
+    ],
     LintNames.exhaustive_cases: [
       AddMissingEnumLikeCaseClauses.newInstance,
     ],
@@ -916,9 +924,11 @@
     ],
     CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION: [
       MakeReturnTypeNullable.newInstance,
+      ReplaceReturnType.newInstance,
     ],
     CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD: [
       MakeReturnTypeNullable.newInstance,
+      ReplaceReturnType.newInstance,
     ],
     CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
       ChangeTo.classOrMixin,
@@ -930,15 +940,14 @@
     ],
     CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE: [
       AddNullCheck.newInstance,
+      ReplaceWithNullAware.single,
     ],
     CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE: [
       AddNullCheck.newInstance,
     ],
     CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE: [
       AddNullCheck.newInstance,
-    ],
-    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE: [
-      AddNullCheck.newInstance,
+      ReplaceWithNullAware.single,
     ],
     CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION: [
       AddNullCheck.newInstance,
@@ -1045,7 +1054,7 @@
     ],
 
     HintCode.CAN_BE_NULL_AFTER_NULL_AWARE: [
-      ReplaceWithNullAware.newInstance,
+      ReplaceWithNullAware.inChain,
     ],
     HintCode.DEAD_CODE: [
       RemoveDeadCode.newInstance,
@@ -1329,6 +1338,12 @@
       }
     }
   }
+
+  /// Associate the given correction producer [generator] with the lint with the
+  /// given [lintName].
+  static void registerFixForLint(String lintName, ProducerGenerator generator) {
+    lintProducerMap.putIfAbsent(lintName, () => []).add(generator);
+  }
 }
 
 /// [_FixState] that is still empty.
diff --git a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
index 6a56773..aacc03d 100644
--- a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/ignore_comments/ignore_info.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide AnalysisError, Element;
 
@@ -233,7 +234,10 @@
   ///
   /// Leading comments for the first directive in a file are considered library
   /// comments and not returned unless they contain blank lines, in which case
-  /// only the last part of the comment will be returned.
+  /// only the last part of the comment will be returned (unless it is a
+  /// language directive comment, in which case it will also be skipped) or an
+  /// '// ignore:' comment which should always be treated as attached to the
+  /// import.
   static Token? getLeadingComment(
       CompilationUnit unit, UriBasedDirective directive, LineInfo lineInfo) {
     if (directive.beginToken.precedingComments == null) {
@@ -254,22 +258,30 @@
       nextComment = comment.next;
     }
 
-    // Check if the comment is the first comment in the document
-    if (firstComment != unit.beginToken.precedingComments) {
-      var previousDirectiveLine =
-          lineInfo.getLocation(directive.beginToken.previous!.end).lineNumber;
-
-      // Skip over any comments on the same line as the previous directive
-      // as they will be attached to the end of it.
-      var comment = firstComment;
-      while (comment != null &&
-          previousDirectiveLine ==
-              lineInfo.getLocation(comment.offset).lineNumber) {
-        comment = comment.next;
-      }
-      return comment;
+    // Language version tokens should never be attached so skip over.
+    if (firstComment is LanguageVersionToken) {
+      firstComment = firstComment.next;
     }
-    return null;
+
+    // If the comment is the first comment in the document then whether we
+    // consider it the leading comment depends on whether it's an ignore comment
+    // or not.
+    if (firstComment != null &&
+        firstComment == unit.beginToken.precedingComments) {
+      return _isIgnoreComment(firstComment) ? firstComment : null;
+    }
+
+    // Skip over any comments on the same line as the previous directive
+    // as they will be attached to the end of it.
+    var previousDirectiveLine =
+        lineInfo.getLocation(directive.beginToken.previous!.end).lineNumber;
+    comment = firstComment;
+    while (comment != null &&
+        previousDirectiveLine ==
+            lineInfo.getLocation(comment.offset).lineNumber) {
+      comment = comment.next;
+    }
+    return comment;
   }
 
   /// Gets the last comment token considered to be the trailing comment for this
@@ -289,6 +301,11 @@
     }
     return null;
   }
+
+  /// Returns whether this token is a '// ignore:' comment (but not an
+  /// '// ignore_for_file:' comment).
+  static bool _isIgnoreComment(Token token) =>
+      IgnoreInfo.IGNORE_MATCHER.matchAsPrefix(token.lexeme) != null;
 }
 
 class _DirectiveInfo implements Comparable<_DirectiveInfo> {
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 257fa24..ced0ca3 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -1379,7 +1379,9 @@
       buffer.write(e.name);
     }
     if (enclosingElt is ExecutableElement) {
-      buffer..write('@')..write(e.nameOffset - enclosingElt.nameOffset);
+      buffer
+        ..write('@')
+        ..write(e.nameOffset - enclosingElt.nameOffset);
     }
     return buffer;
   }
@@ -1394,6 +1396,8 @@
     // It is legal to have a named constructor with the same name as a type
     // parameter.  So we distinguish them by using '.' between the class (or
     // typedef) name and the type parameter name.
-    return e.enclosingElement!.accept(this)!..write('.')..write(e.name);
+    return e.enclosingElement!.accept(this)!
+      ..write('.')
+      ..write(e.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 2d61eacc..ccafb32 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -16,6 +16,8 @@
   static const String avoid_function_literals_in_foreach_calls =
       'avoid_function_literals_in_foreach_calls';
   static const String avoid_init_to_null = 'avoid_init_to_null';
+  static const String avoid_null_checks_in_equality_operators =
+      'avoid_null_checks_in_equality_operators';
   static const String avoid_private_typedef_functions =
       'avoid_private_typedef_functions';
   static const String avoid_redundant_argument_values =
@@ -46,6 +48,7 @@
   static const String empty_catches = 'empty_catches';
   static const String empty_constructor_bodies = 'empty_constructor_bodies';
   static const String empty_statements = 'empty_statements';
+  static const String eol_at_end_of_file = 'eol_at_end_of_file';
   static const String exhaustive_cases = 'exhaustive_cases';
   static const String hash_and_equals = 'hash_and_equals';
   static const String no_duplicate_case_values = 'no_duplicate_case_values';
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_command.dart b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
index a649d65..f6188e0 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_command.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
@@ -15,11 +15,23 @@
 /// `pub` commands will be queued and not run concurrently.
 class PubCommand {
   static const String _pubEnvironmentKey = 'PUB_ENVIRONMENT';
+
+  /// An environment variable that can be set to prevent a [PubCommand] from
+  /// being created/used by the analysis server.
+  ///
+  /// This is generally intended for integration tests to prevent them spawning
+  /// pub commands while testing other functionality.
+  static const String disablePubCommandEnvironmentKey =
+      'DART_SERVER_DISABLE_PUB_COMMAND';
+
   final InstrumentationService _instrumentationService;
   late final ProcessRunner _processRunner;
   late final String _pubPath;
   late final String _pubEnvironmentValue;
 
+  /// Active processes that should be killed when shutting down.
+  final _activeProcesses = <Process>{};
+
   /// Tracks the last queued command to avoid overlapping because pub does not
   /// do its own locking when accessing the cache.
   ///
@@ -78,6 +90,14 @@
         .toList();
   }
 
+  /// Terminates any in-process commands with [ProcessSignal.sigterm].
+  void shutdown() {
+    _activeProcesses.forEach((process) {
+      _instrumentationService.logInfo('Terminating process ${process.pid}');
+      process.kill();
+    });
+  }
+
   /// Runs a pub command and decodes JSON from `stdout`.
   ///
   /// Returns null if:
@@ -96,19 +116,25 @@
     try {
       final command = [_pubPath, ...args];
 
-      _instrumentationService.logInfo('Running pub command $command');
-      final result = await _processRunner.run(_pubPath, args,
+      _instrumentationService.logInfo('Starting pub command $command');
+      final process = await _processRunner.start(_pubPath, args,
           workingDirectory: workingDirectory,
           environment: {_pubEnvironmentKey: _pubEnvironmentValue});
+      _activeProcesses.add(process);
 
-      if (result.exitCode != 0) {
-        _instrumentationService.logError(
-            'pub command returned ${result.exitCode} exit code: ${result.stderr}.');
+      final exitCode = await process.exitCode;
+      _activeProcesses.remove(process);
+      final stdout = await process.stdout.transform(utf8.decoder).join();
+      final stderr = await process.stderr.transform(utf8.decoder).join();
+
+      if (exitCode != 0) {
+        _instrumentationService
+            .logError('pub command returned $exitCode exit code: $stderr.');
         return null;
       }
 
       try {
-        final results = jsonDecode(result.stdout);
+        final results = jsonDecode(stdout);
         _instrumentationService.logInfo('pub command completed successfully');
         return results;
       } catch (e) {
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
index 4b6ef3a8..1db29fd 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
@@ -329,7 +329,10 @@
     }
   }
 
-  void shutdown() => _nextPackageNameListRequestTimer?.cancel();
+  void shutdown() {
+    _nextPackageNameListRequestTimer?.cancel();
+    _command?.shutdown();
+  }
 
   @visibleForTesting
   void writeDiskCache([PackageDetailsCache? cache]) {
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 ebb50c0..4da1f25 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -213,8 +213,9 @@
     // closure cannot have parameters
     if (_selectionFunctionExpression != null && _parameters.isNotEmpty) {
       var message = format(
-          'Cannot extract closure as method, it references {0} external variable(s).',
-          _parameters.length);
+          'Cannot extract closure as method, it references {0} external variable{1}.',
+          _parameters.length,
+          _parameters.length == 1 ? '' : 's');
       return RefactoringStatus.fatal(message);
     }
     return result;
@@ -658,7 +659,8 @@
     var originalSource = utils.getText(range.offset, range.length);
     var pattern = _SourcePattern();
     var replaceEdits = <SourceEdit>[];
-    resolveResult.unit.accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
+    resolveResult.unit
+        .accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
     replaceEdits = replaceEdits.reversed.toList();
     var source = SourceEdit.applySequence(originalSource, replaceEdits);
     pattern.normalizedSource =
diff --git a/pkg/analysis_server/lib/src/utilities/process.dart b/pkg/analysis_server/lib/src/utilities/process.dart
index 70ea179..334850d 100644
--- a/pkg/analysis_server/lib/src/utilities/process.dart
+++ b/pkg/analysis_server/lib/src/utilities/process.dart
@@ -3,30 +3,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:convert';
 import 'dart:io';
 
 /// An abstraction over [Process] from 'dart:io' to allow mocking in tests.
 class ProcessRunner {
-  Future<ProcessResult> run(
+  Future<Process> start(
     String executable,
     List<String> arguments, {
     String? workingDirectory,
     Map<String, String>? environment,
     bool includeParentEnvironment = true,
     bool runInShell = false,
-    Encoding? stdoutEncoding = systemEncoding,
-    Encoding? stderrEncoding = systemEncoding,
-  }) async {
-    return Process.run(
+    ProcessStartMode mode = ProcessStartMode.normal,
+  }) {
+    return Process.start(
       executable,
       arguments,
       workingDirectory: workingDirectory,
       environment: environment,
       includeParentEnvironment: includeParentEnvironment,
       runInShell: runInShell,
-      stdoutEncoding: stdoutEncoding,
-      stderrEncoding: stderrEncoding,
     );
   }
 }
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index fb9d441..94e46a7 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -300,20 +300,6 @@
   }
 }
 
-mixin WithNonFunctionTypeAliasesMixin on AbstractContextTest {
-  @override
-  String? get testPackageLanguageVersion => null;
-
-  @override
-  void setUp() {
-    super.setUp();
-
-    createAnalysisOptionsFile(
-      experiments: [EnableString.nonfunction_type_aliases],
-    );
-  }
-}
-
 mixin WithNullSafetyMixin on AbstractContextTest {
   @override
   String get testPackageLanguageVersion => '2.12';
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index 4c24110..de8f51e 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -66,6 +66,42 @@
     assertHasRegion('String]');
   }
 
+  Future<void> test_constructorInvocation() async {
+    // Check that a constructor invocation navigates to the constructor and not
+    // the class.
+    // https://github.com/dart-lang/sdk/issues/46725
+    addTestFile('''
+class Foo {
+  // ...
+  // ...
+  Foo() {
+    print('');
+  }
+  // ...
+}
+
+final a = Foo();
+final b = new Foo();
+''');
+    await waitForTasksFinished();
+
+    // Without `new`
+    await _getNavigation(testFile, testCode.indexOf('Foo();'), 0);
+    expect(regions, hasLength(1));
+    expect(regions.first.targets, hasLength(1));
+    var target = targets[regions.first.targets.first];
+    expect(target.kind, ElementKind.CONSTRUCTOR);
+    expect(target.offset, testCode.indexOf('Foo() {'));
+
+    // With `new`
+    await _getNavigation(testFile, testCode.indexOf('new Foo();') + 4, 0);
+    expect(regions, hasLength(1));
+    expect(regions.first.targets, hasLength(1));
+    target = targets[regions.first.targets.first];
+    expect(target.kind, ElementKind.CONSTRUCTOR);
+    expect(target.offset, testCode.indexOf('Foo() {'));
+  }
+
   Future<void> test_fieldType() async {
     // This test mirrors test_navigation() from
     // test/integration/analysis/get_navigation_test.dart
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index 5a156c0..0169e37 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -1170,6 +1170,16 @@
     assertHasRegion(HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE, 'V2 = 3');
   }
 
+  Future<void> test_TYPE_ALIAS() async {
+    addTestFile('''
+typedef A = double;
+void f(A a) {}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.TYPE_ALIAS, 'A');
+    assertHasRegion(HighlightRegionType.TYPE_ALIAS, 'A a');
+  }
+
   Future<void> test_TYPE_ALIAS_dynamicType() async {
     addTestFile('''
 typedef A = dynamic;
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index bdd6ad3..f334a64 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -75,9 +75,10 @@
 
   /// Validates that there is an identifier region at [regionSearch] with target
   /// at [targetSearch].
-  void assertHasRegionTarget(String regionSearch, String targetSearch) {
+  void assertHasRegionTarget(String regionSearch, String targetSearch,
+      {int targetLength = -1}) {
     assertHasRegion(regionSearch);
-    assertHasTarget(targetSearch);
+    assertHasTarget(targetSearch, targetLength);
   }
 
   /// Validates that there is a target in [testTargets]  with [testFile], at the
@@ -391,6 +392,62 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
+  Future<void> test_constructorReference_named() async {
+    addTestFile('''
+class A {}
+class B<T> {
+  B.named();
+}
+void f() {
+  B<A>.named;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('B<A>.named;', 'named();');
+    assertHasRegionTarget('named;', 'named();');
+    assertHasRegionTarget('A>', 'A {}');
+  }
+
+  Future<void> test_constructorReference_unnamed_declared() async {
+    addTestFile('''
+class A {
+  A();
+}
+void f() {
+  A.new;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('A.new;', 'A();', targetLength: 0);
+    assertHasRegionTarget('new;', 'A();', targetLength: 0);
+  }
+
+  Future<void> test_constructorReference_unnamed_declared_new() async {
+    addTestFile('''
+class A {
+  A.new();
+}
+void f() {
+  A.new;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('A.new;', 'new();');
+    assertHasRegionTarget('new;', 'new();');
+  }
+
+  Future<void> test_constructorReference_unnamed_default() async {
+    addTestFile('''
+class A {}
+void f() {
+  A.new;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('A.new;', 'A {}');
+    assertHasRegionTarget('new;', 'A {}');
+  }
+
   Future<void> test_enum_constant() async {
     addTestFile('''
 enum E { a, b }
@@ -585,6 +642,92 @@
     assertNoRegion('fff);', 3);
   }
 
+  Future<void> test_functionReference_className_staticMethod() async {
+    addTestFile('''
+class A {
+  static void foo<T>() {}
+}
+void f() {
+  A.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_function() async {
+    addTestFile('''
+class A {}
+void foo<T>() {}
+void f() {
+  foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_importPrefix_function() async {
+    newFile(join(testFolder, 'a.dart'), content: r'''
+void foo<T>() {}
+''');
+    addTestFile('''
+import 'a.dart' as prefix;
+class A {}
+void f() {
+  prefix.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('prefix.', 'prefix;');
+    assertHasRegion('foo<A>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_instance_method() async {
+    addTestFile('''
+class A {
+  void foo<T>() {}
+}
+void f(A a) {
+  a.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_method() async {
+    addTestFile('''
+class A {
+  void foo<T>() {}
+  void f() {
+    foo<A>;
+  }
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_staticMethod() async {
+    addTestFile('''
+class A {
+  static void foo<T>() {}
+  void f() {
+    foo<A>;
+  }
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
   Future<void> test_identifier_resolved() async {
     addTestFile('''
 class AAA {}
@@ -775,6 +918,63 @@
     assertHasTargetString('my.lib');
   }
 
+  Future<void> test_macro_simpleIdentifier_getter() async {
+    // TODO(scheglov) Use PubPackageResolutionTest?
+    newFile('$projectPath/pubspec.yaml', content: '');
+
+    newFile('$projectPath/bin/macro_annotations.dart', content: r'''
+library analyzer.macro.annotations;
+const observable = 0;
+''');
+
+    addTestFile(r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+}
+
+void f(A a) {
+  a.foo;
+}
+''');
+
+    await prepareNavigation();
+    assertHasRegionString('foo;', 3);
+
+    var generatedFile = getFile(
+      '/project/.dart_tool/analyzer/macro/bin/test.dart',
+    );
+
+    var generatedContent = generatedFile.readAsStringSync();
+    expect(generatedContent, r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+
+  int get foo => _foo;
+
+  set foo(int val) {
+    print('Setting foo to ${val}');
+    _foo = val;
+  }
+}
+
+void f(A a) {
+  a.foo;
+}
+''');
+
+    assertHasFileTarget(
+      generatedFile.path,
+      generatedContent.indexOf('foo =>'),
+      'foo'.length,
+    );
+  }
+
   Future<void> test_multiplyDefinedElement() async {
     newFile('$projectPath/bin/libA.dart', content: 'library A; int TEST = 1;');
     newFile('$projectPath/bin/libB.dart', content: 'library B; int TEST = 2;');
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 13d807c..d122baf 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -366,6 +366,7 @@
 extension Ex on A {}
 mixin M { }
 typedef T = Function(Object);
+typedef T2 = double;
 var v = 0;
 ''');
 
@@ -400,6 +401,10 @@
         element: ElementKind.FUNCTION_TYPE_ALIAS,
         kind: CompletionSuggestionKind.INVOCATION);
     assertSuggestion(
+        completion: 'T2',
+        element: ElementKind.TYPE_ALIAS,
+        kind: CompletionSuggestionKind.INVOCATION);
+    assertSuggestion(
         completion: 'v',
         element: ElementKind.TOP_LEVEL_VARIABLE,
         kind: CompletionSuggestionKind.INVOCATION);
diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart
index ac1a33c..caa0386 100644
--- a/pkg/analysis_server/test/client/impl/abstract_client.dart
+++ b/pkg/analysis_server/test/client/impl/abstract_client.dart
@@ -44,7 +44,7 @@
     required this.testFilePath,
     required String sdkPath,
     required this.serverOptions,
-  })   : serverChannel = MockServerChannel(),
+  })  : serverChannel = MockServerChannel(),
         pluginManager = TestPluginManager() {
     server = createAnalysisServer(sdkPath);
     var notificationStream = serverChannel.notificationController.stream;
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 48a7ef0..60083d6 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -82,7 +82,7 @@
     required MemoryResourceProvider resourceProvider,
     required String projectPath,
     required String testFilePath,
-  })   : _resourceProvider = resourceProvider,
+  })  : _resourceProvider = resourceProvider,
         super(
             serverOptions: serverOptions ?? AnalysisServerOptions(),
             projectPath: resourceProvider.convertPath(projectPath),
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 0e63271..04c6b0f 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -192,14 +192,18 @@
       if (badPoints.isNotEmpty) {
         err.write('No test location for tests:');
         for (var ch in badPoints) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
         err.write(' ');
       }
       if (badResults.isNotEmpty) {
         err.write('No results for tests:');
         for (var ch in badResults) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
       }
       throw StateError(err.toString());
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index af1689b..0eee133 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -26,13 +26,57 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(AnalysisDomainTest);
+    defineReflectiveTests(AnalysisDomainBazelTest);
+    defineReflectiveTests(AnalysisDomainPubTest);
     defineReflectiveTests(AnalysisDomainHandlerTest);
     defineReflectiveTests(SetSubscriptionsTest);
   });
 }
 
 @reflectiveTest
+class AnalysisDomainBazelTest extends _AnalysisDomainTest {
+  String get myPackageLibPath => '$myPackageRootPath/lib';
+
+  String get myPackageRootPath => '$workspaceRootPath/dart/my';
+
+  String get myPackageTestFilePath => '$myPackageLibPath/test.dart';
+
+  String get workspaceRootPath => '/workspace';
+
+  @override
+  void setUp() {
+    super.setUp();
+    newFile('$workspaceRootPath/WORKSPACE');
+  }
+
+  Future<void> test_fileSystem_changeFile_buildFile() async {
+    // This BUILD file does not enable null safety.
+    newBazelBuildFile(myPackageRootPath, '');
+
+    newFile(myPackageTestFilePath, content: '''
+void f(int? a) {}
+''');
+
+    setRoots(included: [myPackageRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    // Cannot use `int?` without enabling null safety.
+    assertHasErrors(myPackageTestFilePath);
+
+    // Enable null safety.
+    newBazelBuildFile(myPackageRootPath, '''
+dart_package(null_safety = True)
+''');
+
+    await pumpEventQueue();
+    await server.onAnalysisComplete;
+
+    // We have null safety enabled, so no errors.
+    assertNoErrors(myPackageTestFilePath);
+  }
+}
+
+@reflectiveTest
 class AnalysisDomainHandlerTest extends AbstractAnalysisTest {
   Future<void> outOfRangeTest(SourceEdit edit) async {
     var helper = AnalysisTestHelper();
@@ -302,12 +346,7 @@
 }
 
 @reflectiveTest
-class AnalysisDomainTest extends AbstractAnalysisTest {
-  final Map<String, List<AnalysisError>> filesErrors = {};
-
-  /// The files for which `analysis.flushResults` was received.
-  final List<String> flushResults = [];
-
+class AnalysisDomainPubTest extends _AnalysisDomainTest {
   String get testFilePath => '$testPackageLibPath/test.dart';
 
   String get testPackageLibPath => '$testPackageRootPath/lib';
@@ -316,38 +355,6 @@
 
   String get workspaceRootPath => '/home';
 
-  void assertHasErrors(String path) {
-    path = convertPath(path);
-    expect(filesErrors[path], isNotEmpty, reason: path);
-  }
-
-  void assertNoErrors(String path) {
-    path = convertPath(path);
-    expect(filesErrors[path], isEmpty, reason: path);
-  }
-
-  void assertNoErrorsNotification(String path) {
-    path = convertPath(path);
-    expect(filesErrors[path], isNull, reason: path);
-  }
-
-  void forgetReceivedErrors() {
-    filesErrors.clear();
-  }
-
-  @override
-  void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
-      var decoded = AnalysisFlushResultsParams.fromNotification(notification);
-      flushResults.addAll(decoded.files);
-      decoded.files.forEach(filesErrors.remove);
-    }
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
-      var decoded = AnalysisErrorsParams.fromNotification(notification);
-      filesErrors[decoded.file] = decoded.errors;
-    }
-  }
-
   Future<void> test_fileSystem_addFile_analysisOptions() async {
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
@@ -1408,44 +1415,6 @@
     // errors are not reported for packages
     assertNoErrorsNotification(a_path);
   }
-
-  void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr: toUriStr));
-  }
-
-  void _assertAnalyzedFiles({
-    required List<String> hasErrors,
-    List<String> noErrors = const [],
-    required List<String> notAnalyzed,
-  }) {
-    for (var path in hasErrors) {
-      assertHasErrors(path);
-    }
-
-    for (var path in noErrors) {
-      assertNoErrors(path);
-    }
-
-    for (var path in notAnalyzed) {
-      assertNoErrorsNotification(path);
-    }
-
-    filesErrors.clear();
-  }
-
-  void _assertFlushedResults(List<String> paths) {
-    var convertedPaths = paths.map(convertPath).toList();
-    expect(flushResults, unorderedEquals(convertedPaths));
-    flushResults.clear();
-  }
-
-  /// Create files with a content that has a compile time error.
-  /// So, when analyzed, these files will satisfy [assertHasErrors].
-  void _createFilesWithErrors(List<String> paths) {
-    for (var path in paths) {
-      newFile(path, content: 'error');
-    }
-  }
 }
 
 /// A helper to test 'analysis.*' requests.
@@ -1776,3 +1745,80 @@
     expect(files, [testFile]);
   }
 }
+
+class _AnalysisDomainTest extends AbstractAnalysisTest {
+  final Map<String, List<AnalysisError>> filesErrors = {};
+
+  /// The files for which `analysis.flushResults` was received.
+  final List<String> flushResults = [];
+
+  void assertHasErrors(String path) {
+    path = convertPath(path);
+    expect(filesErrors[path], isNotEmpty, reason: path);
+  }
+
+  void assertNoErrors(String path) {
+    path = convertPath(path);
+    expect(filesErrors[path], isEmpty, reason: path);
+  }
+
+  void assertNoErrorsNotification(String path) {
+    path = convertPath(path);
+    expect(filesErrors[path], isNull, reason: path);
+  }
+
+  void forgetReceivedErrors() {
+    filesErrors.clear();
+  }
+
+  @override
+  void processNotification(Notification notification) {
+    if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
+      var decoded = AnalysisFlushResultsParams.fromNotification(notification);
+      flushResults.addAll(decoded.files);
+      decoded.files.forEach(filesErrors.remove);
+    }
+    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+      var decoded = AnalysisErrorsParams.fromNotification(notification);
+      filesErrors[decoded.file] = decoded.errors;
+    }
+  }
+
+  void writePackageConfig(String path, PackageConfigFileBuilder config) {
+    newFile(path, content: config.toContent(toUriStr: toUriStr));
+  }
+
+  void _assertAnalyzedFiles({
+    required List<String> hasErrors,
+    List<String> noErrors = const [],
+    required List<String> notAnalyzed,
+  }) {
+    for (var path in hasErrors) {
+      assertHasErrors(path);
+    }
+
+    for (var path in noErrors) {
+      assertNoErrors(path);
+    }
+
+    for (var path in notAnalyzed) {
+      assertNoErrorsNotification(path);
+    }
+
+    filesErrors.clear();
+  }
+
+  void _assertFlushedResults(List<String> paths) {
+    var convertedPaths = paths.map(convertPath).toList();
+    expect(flushResults, unorderedEquals(convertedPaths));
+    flushResults.clear();
+  }
+
+  /// Create files with a content that has a compile time error.
+  /// So, when analyzed, these files will satisfy [assertHasErrors].
+  void _createFilesWithErrors(List<String> paths) {
+    for (var path in paths) {
+      newFile(path, content: 'error');
+    }
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index cb5baf6..358e8c8 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -100,6 +100,7 @@
 }
 
 typedef functionType();
+typedef genericTypeDef = double;
 
 function(dynamicType) {
   print('string');
@@ -117,8 +118,8 @@
     check(HighlightRegionType.ANNOTATION, ['@override']);
     check(HighlightRegionType.BUILT_IN,
         ['as', 'get', 'import', 'set', 'static', 'typedef']);
-    check(
-        HighlightRegionType.CLASS, ['Class', 'Class2', 'Future', 'Map', 'int']);
+    check(HighlightRegionType.CLASS,
+        ['Class', 'Class2', 'double', 'Future', 'Map', 'int']);
     check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']);
     check(HighlightRegionType.COMMENT_DOCUMENTATION,
         ['/**\n * Doc comment\n */']);
@@ -132,6 +133,7 @@
     check(HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE, ['print']);
     check(HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION, ['function']);
     check(HighlightRegionType.FUNCTION_TYPE_ALIAS, ['functionType']);
+    check(HighlightRegionType.TYPE_ALIAS, ['genericTypeDef']);
     check(HighlightRegionType.INSTANCE_GETTER_DECLARATION, ['getter']);
     check(HighlightRegionType.IDENTIFIER_DEFAULT, ['unresolvedIdentifier']);
     check(HighlightRegionType.IMPORT_PREFIX, ['async']);
diff --git a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
index 6b05d1a..3022431 100644
--- a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
@@ -7,6 +7,7 @@
 
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/channel/lsp_byte_stream_channel.dart';
+import 'package:analysis_server/src/services/pub/pub_command.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:meta/meta.dart';
 import 'package:path/path.dart';
@@ -164,7 +165,11 @@
     }
 
     final arguments = [...?vmArgs, serverPath, '--lsp', '--suppress-analytics'];
-    final process = await Process.start(dartBinary, arguments);
+    final process = await Process.start(
+      dartBinary,
+      arguments,
+      environment: {PubCommand.disablePubCommandEnvironmentKey: 'true'},
+    );
     _process = process;
     process.exitCode.then((int code) {
       if (code != 0) {
diff --git a/pkg/analysis_server/test/integration/server/command_line_options_test.dart b/pkg/analysis_server/test/integration/server/command_line_options_test.dart
new file mode 100644
index 0000000..0b085ea
--- /dev/null
+++ b/pkg/analysis_server/test/integration/server/command_line_options_test.dart
@@ -0,0 +1,66 @@
+// 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:path/path.dart' as path;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../support/integration_tests.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(OptionsPackagesIntegrationTest);
+  });
+}
+
+@reflectiveTest
+class OptionsPackagesIntegrationTest
+    extends AbstractAnalysisServerIntegrationTest {
+  @override
+  Future startServer({int? diagnosticPort, int? servicesPort}) {
+    var fooPath = sourcePath('foo');
+    writeFile(
+      path.join(fooPath, 'lib', 'foo.dart'),
+      'var my_foo = 0;',
+    );
+
+    var packagesPath = sourcePath('my_packages.json');
+    writeFile(packagesPath, '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "foo",
+      "rootUri": "${path.toUri(fooPath)}",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    }
+  ]
+}
+''');
+
+    return server.start(
+      diagnosticPort: diagnosticPort,
+      servicesPort: servicesPort,
+      packagesFile: packagesPath,
+    );
+  }
+
+  Future<void> test_it() {
+    var pathname = sourcePath('test.dart');
+    writeFile(pathname, '''
+import 'package:foo/foo.dart';
+void main() {
+  my_foo;
+}
+''');
+    standardAnalysisSetup();
+    return analysisFinished.then((_) {
+      var errors = existingErrorsForFile(pathname);
+      expect(errors, isEmpty);
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/integration/server/test_all.dart b/pkg/analysis_server/test/integration/server/test_all.dart
index 92ae2b1..1239990 100644
--- a/pkg/analysis_server/test/integration/server/test_all.dart
+++ b/pkg/analysis_server/test/integration/server/test_all.dart
@@ -5,6 +5,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'bazel_changes_test.dart' as bazel_changes_test;
+import 'command_line_options_test.dart' as command_line_options_test;
 import 'get_version_test.dart' as get_version_test;
 import 'set_subscriptions_invalid_service_test.dart'
     as set_subscriptions_invalid_service_test;
@@ -15,6 +16,7 @@
 void main() {
   defineReflectiveSuite(() {
     bazel_changes_test.main();
+    command_line_options_test.main();
     get_version_test.main();
     set_subscriptions_test.main();
     set_subscriptions_invalid_service_test.main();
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 4585df2..6ca048e 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -9,6 +9,7 @@
 
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/services/pub/pub_command.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:path/path.dart' as path;
@@ -235,7 +236,9 @@
     int? servicesPort,
   }) {
     return server.start(
-        diagnosticPort: diagnosticPort, servicesPort: servicesPort);
+      diagnosticPort: diagnosticPort,
+      servicesPort: servicesPort,
+    );
   }
 
   /// After every test, the server is stopped and [sourceDirectory] is deleted.
@@ -605,6 +608,7 @@
   Future start({
     int? diagnosticPort,
     String? instrumentationLogFile,
+    String? packagesFile,
     bool profileServer = false,
     String? sdkPath,
     int? servicesPort,
@@ -675,13 +679,20 @@
     if (instrumentationLogFile != null) {
       arguments.add('--instrumentation-log-file=$instrumentationLogFile');
     }
+    if (packagesFile != null) {
+      arguments.add('--packages=$packagesFile');
+    }
     if (sdkPath != null) {
       arguments.add('--sdk=$sdkPath');
     }
     if (useAnalysisHighlight2) {
       arguments.add('--useAnalysisHighlight2');
     }
-    _process = await Process.start(dartBinary, arguments);
+    _process = await Process.start(
+      dartBinary,
+      arguments,
+      environment: {PubCommand.disablePubCommandEnvironmentKey: 'true'},
+    );
     _process.exitCode.then((int code) {
       if (code != 0) {
         _badDataFromServer('server terminated with exit code $code');
diff --git a/pkg/analysis_server/test/lsp/completion_yaml_test.dart b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
index 52bf479..444b101 100644
--- a/pkg/analysis_server/test/lsp/completion_yaml_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
@@ -2,14 +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:io';
-
 import 'package:analysis_server/src/services/pub/pub_api.dart';
 import 'package:http/http.dart';
 import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../mocks.dart';
 import 'completion.dart';
 import 'server_abstract.dart';
 
@@ -432,8 +431,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, json, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, json, '');
 
     final content = '''
 name: foo
@@ -486,8 +485,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, initialJson, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, initialJson, '');
 
     final content = '''
 name: foo
@@ -510,8 +509,8 @@
 
     // Modify the underlying file which should trigger an update of the
     // cached data.
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, updatedJson, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, updatedJson, '');
     modifyFile(pubspecFilePath, '$content# trailing comment');
     await pumpEventQueue(times: 500);
 
@@ -524,7 +523,7 @@
       openCloseFile: false,
     );
 
-    // Also veryify the detail fields were populated as expected.
+    // Also verify the detail fields were populated as expected.
     expect(
       completionResults.singleWhere((c) => c.label == '^2.3.4').detail,
       equals('latest compatible'),
@@ -547,8 +546,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, initialJson, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, initialJson, '');
 
     final content = '''
 name: foo
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index f15c592..083158c 100644
--- a/pkg/analysis_server/test/lsp/definition_test.dart
+++ b/pkg/analysis_server/test/lsp/definition_test.dart
@@ -188,6 +188,71 @@
     );
   }
 
+  Future<void> test_macro_simpleIdentifier_getter() async {
+    final macroAnnotationsContents = '''
+library analyzer.macro.annotations;
+const observable = 0;
+''';
+
+    final mainContents = '''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+}
+
+void f(A a) {
+  a.[[foo^]];
+}
+''';
+
+    final combinedContents = r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+
+  int get [[foo]] => _foo;
+
+  set foo(int val) {
+    print('Setting foo to ${val}');
+    _foo = val;
+  }
+}
+
+void f(A a) {
+  a.[[foo^]];
+}
+''';
+
+    final macroAnnotationsFileUri =
+        Uri.file(join(projectFolderPath, 'lib', 'macro_annotations.dart'));
+    final pubspecFileUri = Uri.file(join(projectFolderPath, 'pubspec.yaml'));
+    final combinedFileUri = Uri.file(join(projectFolderPath, '.dart_tool',
+        'analyzer', 'macro', 'lib', 'main.dart'));
+
+    await initialize(
+        textDocumentCapabilities:
+            withLocationLinkSupport(emptyTextDocumentClientCapabilities));
+    await openFile(pubspecFileUri, '');
+    await openFile(
+        macroAnnotationsFileUri, withoutMarkers(macroAnnotationsContents));
+    await openFile(mainFileUri, withoutMarkers(mainContents));
+    final res = await getDefinitionAsLocationLinks(
+        mainFileUri, positionFromMarker(mainContents));
+
+    expect(res, hasLength(1));
+    final loc = res.single;
+    expect(loc.originSelectionRange, equals(rangeFromMarkers(mainContents)));
+    expect(loc.targetUri, equals(combinedFileUri.toString()));
+
+    final getFooRange = rangesFromMarkers(combinedContents)[0];
+    expect(loc.targetRange, equals(getFooRange));
+    expect(loc.targetSelectionRange, equals(getFooRange));
+  }
+
   Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 96c7f5a..fc6dffe 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -378,10 +378,11 @@
     }
   }
 
-  Future<void> test_todos() async {
+  Future<void> test_todos_boolean() async {
     // TODOs only show up if there's also some code in the file.
     const contents = '''
     // TODO: This
+    // FIXME: This
     String a = "";
     ''';
     newFile(mainFilePath, content: contents);
@@ -394,7 +395,7 @@
       {'showTodos': true},
     );
     final initialDiagnostics = await firstDiagnosticsUpdate;
-    expect(initialDiagnostics, hasLength(1));
+    expect(initialDiagnostics, hasLength(2));
   }
 
   Future<void> test_todos_disabled() async {
@@ -439,4 +440,33 @@
     final updatedDiagnostics = await secondDiagnosticsUpdate;
     expect(updatedDiagnostics, hasLength(1));
   }
+
+  Future<void> test_todos_specific() async {
+    // TODOs only show up if there's also some code in the file.
+    const contents = '''
+    // TODO: This
+    // HACK: This
+    // FIXME: This
+    String a = "";
+    ''';
+    newFile(mainFilePath, content: contents);
+
+    final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await provideConfig(
+      () => initialize(
+          workspaceCapabilities:
+              withConfigurationSupport(emptyWorkspaceClientCapabilities)),
+      {
+        // Include both casings, since this comes from the user we should handle
+        // either.
+        'showTodos': ['TODO', 'fixme']
+      },
+    );
+    final initialDiagnostics = (await firstDiagnosticsUpdate)!;
+    expect(initialDiagnostics, hasLength(2));
+    expect(
+      initialDiagnostics.map((e) => e.code!),
+      containsAll(['todo', 'fixme']),
+    );
+  }
 }
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index 896b994..b55938b 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -18,31 +18,38 @@
 
 @reflectiveTest
 class MappingTest extends AbstractLspAnalysisServerTest {
-  Future<void> test_completionItemKind_firstNotSupported() async {
-    // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
-    // did not support it, it'll map to Variable if the client doesn't support
-    // that.
-    var supportedKinds = {
-      lsp.CompletionItemKind.TypeParameter,
-      lsp.CompletionItemKind.Variable,
-    };
-    var result = lsp.elementKindToCompletionItemKind(
-      supportedKinds,
-      server.ElementKind.TYPE_PARAMETER,
+  void test_completionItemKind_enum() {
+    // Enums should always map to Enums, never EumMember.
+    verifyCompletionItemKind(
+      kind: server.ElementKind.ENUM,
+      supportedKinds: {
+        lsp.CompletionItemKind.Enum,
+        lsp.CompletionItemKind.EnumMember,
+      },
+      expectedKind: lsp.CompletionItemKind.Enum,
     );
-    expect(result, equals(lsp.CompletionItemKind.TypeParameter));
   }
 
-  Future<void> test_completionItemKind_firstSupported() async {
-    // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
-    // did not support it, it'll map to Variable if the client doesn't support
+  void test_completionItemKind_enumValueNotSupported() {
+    // ENUM_CONSTANT maps to EnumMember first, but since originally LSP
+    // did not support it, it'll map to Enum if the client doesn't support
     // that.
-    var supportedKinds = {lsp.CompletionItemKind.Variable};
-    var result = lsp.elementKindToCompletionItemKind(
-      supportedKinds,
-      server.ElementKind.TYPE_PARAMETER,
+    verifyCompletionItemKind(
+      kind: server.ElementKind.ENUM_CONSTANT,
+      supportedKinds: {lsp.CompletionItemKind.Enum},
+      expectedKind: lsp.CompletionItemKind.Enum,
     );
-    expect(result, equals(lsp.CompletionItemKind.Variable));
+  }
+
+  void test_completionItemKind_enumValueSupported() {
+    verifyCompletionItemKind(
+      kind: server.ElementKind.ENUM_CONSTANT,
+      supportedKinds: {
+        lsp.CompletionItemKind.Enum,
+        lsp.CompletionItemKind.EnumMember,
+      },
+      expectedKind: lsp.CompletionItemKind.EnumMember,
+    );
   }
 
   Future<void> test_completionItemKind_knownMapping() async {
@@ -72,6 +79,28 @@
     expect(result, isNull);
   }
 
+  void test_completionItemKind_typeParamNotSupported() {
+    // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
+    // did not support it, it'll map to Variable if the client doesn't support
+    // that.
+    verifyCompletionItemKind(
+      kind: server.ElementKind.TYPE_PARAMETER,
+      supportedKinds: {lsp.CompletionItemKind.Variable},
+      expectedKind: lsp.CompletionItemKind.Variable,
+    );
+  }
+
+  void test_completionItemKind_typeParamSupported() {
+    verifyCompletionItemKind(
+      kind: server.ElementKind.TYPE_PARAMETER,
+      supportedKinds: {
+        lsp.CompletionItemKind.TypeParameter,
+        lsp.CompletionItemKind.Variable,
+      },
+      expectedKind: lsp.CompletionItemKind.TypeParameter,
+    );
+  }
+
   void test_relevanceToSortText() {
     // The expected order is the same as from the highest relevance.
     final expectedOrder =
@@ -119,4 +148,15 @@
     var result = lsp.buildSnippetStringWithTabStops('a, b', [0, 1]);
     expect(result, equals(r'${0:a}, b'));
   }
+
+  /// Verifies that [kind] maps to [expectedKind] when the client supports
+  /// [supportedKinds].
+  void verifyCompletionItemKind({
+    required server.ElementKind kind,
+    required Set<lsp.CompletionItemKind> supportedKinds,
+    required lsp.CompletionItemKind expectedKind,
+  }) {
+    final result = lsp.elementKindToCompletionItemKind(supportedKinds, kind);
+    expect(result, equals(expectedKind));
+  }
 }
diff --git a/pkg/analysis_server/test/lsp/pub_package_service_test.dart b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
index c22a0f5..83f4023 100644
--- a/pkg/analysis_server/test/lsp/pub_package_service_test.dart
+++ b/pkg/analysis_server/test/lsp/pub_package_service_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 'dart:async';
 import 'dart:io';
 
 import 'package:analysis_server/src/services/pub/pub_api.dart';
@@ -99,13 +100,13 @@
 
   Future<void> test_doesNotRunConcurrently() async {
     var isRunning = false;
-    processRunner.runHandler = (executable, args, {dir, env}) async {
+    processRunner.startHandler = (executable, args, {dir, env}) async {
       expect(isRunning, isFalse,
           reason: 'pub commands should not run concurrently');
       isRunning = true;
       await pumpEventQueue(times: 500);
       isRunning = false;
-      return ProcessResult(0, 0, '', '');
+      return MockProcess(0, 0, 'a', 'a');
     };
     await Future.wait([
       pubCommand.outdatedVersions(pubspecPath),
@@ -113,8 +114,26 @@
     ]);
   }
 
+  Future<void> test_killsCommandOnShutdown() async {
+    // Create a process that won't complete (unless it's killed, where
+    // the MockProcess will complete it with a non-zero exit code).
+    final process = MockProcess(0, Completer<int>().future, '', '');
+    processRunner.startHandler = (executable, args, {dir, env}) => process;
+
+    // Start running the (endless) command.
+    final commandFuture = pubCommand.outdatedVersions(pubspecPath);
+    await pumpEventQueue(times: 500);
+
+    // Trigger shutdown, which should kill any in-process commands.
+    pubCommand.shutdown();
+
+    // Expect the process we created above terminates with non-zero exit code.
+    expect(await process.exitCode, equals(MockProcess.killedExitCode));
+    expect(commandFuture, completes);
+  }
+
   Future<void> test_outdated_args() async {
-    processRunner.runHandler = (executable, args, {dir, env}) {
+    processRunner.startHandler = (executable, args, {dir, env}) {
       var expectedPubPath = path.join(
         path.dirname(Platform.resolvedExecutable),
         Platform.isWindows ? 'pub.bat' : 'pub',
@@ -132,15 +151,15 @@
           env!['PUB_ENVIRONMENT'],
           anyOf(equals('analysis_server.pub_api'),
               endsWith(':analysis_server.pub_api')));
-      return ProcessResult(0, 0, '', '');
+      return MockProcess(0, 0, '', '');
     };
     await pubCommand.outdatedVersions(pubspecPath);
   }
 
   Future<void> test_outdated_invalidJson() async {
-    processRunner.runHandler = (String executable, List<String> args,
+    processRunner.startHandler = (String executable, List<String> args,
             {dir, env}) =>
-        ProcessResult(1, 0, 'NOT VALID JSON', '');
+        MockProcess(1, 0, 'NOT VALID JSON', '');
     final result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, isEmpty);
   }
@@ -158,8 +177,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, validJson, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, validJson, '');
     final result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, hasLength(1));
     final package = result.first;
@@ -192,11 +211,11 @@
     }
     ''';
 
-    processRunner.runHandler = (executable, args, {dir, env}) {
+    processRunner.startHandler = (executable, args, {dir, env}) {
       // Return different json based on the directory we were invoked in.
       final json =
           dir == path.dirname(pubspecPath) ? pubspecJson1 : pubspecJson2;
-      return ProcessResult(1, 0, json, '');
+      return MockProcess(1, 0, json, '');
     };
     final result1 = await pubCommand.outdatedVersions(pubspecPath);
     final result2 = await pubCommand.outdatedVersions(pubspec2Path);
@@ -205,8 +224,8 @@
   }
 
   Future<void> test_outdated_nonZeroExitCode() async {
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 123, '{}', '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 123, '{}', '');
     final result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, isEmpty);
   }
@@ -232,8 +251,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, validJson, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, validJson, '');
     final result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, hasLength(2));
     result.forEachIndexed((index, package) {
diff --git a/pkg/analysis_server/test/lsp/rename_test.dart b/pkg/analysis_server/test/lsp/rename_test.dart
index 27be436..f62944d 100644
--- a/pkg/analysis_server/test/lsp/rename_test.dart
+++ b/pkg/analysis_server/test/lsp/rename_test.dart
@@ -118,7 +118,162 @@
         content, 'MyNewClass', expectedContent);
   }
 
-  Future<void> test_rename_classNewKeyword() async {
+  Future<void> test_rename_class_doesNotRenameFileIfDisabled() async {
+    const content = '''
+    class Main {}
+    final a = new [[Ma^in]]();
+    ''';
+    const expectedContent = '''
+    class MyNewMain {}
+    final a = new MyNewMain();
+    ''';
+    final contents = await _test_rename_withDocumentChanges(
+        content, 'MyNewMain', expectedContent);
+    // Ensure the only file is still called main.dart.
+    expect(contents.keys.single, equals(mainFilePath));
+  }
+
+  Future<void> test_rename_class_doesRenameFileAfterPrompt() async {
+    const content = '''
+    class Main {}
+    final a = new [[Ma^in]]();
+    ''';
+    const expectedContent = '''
+    class MyNewMain {}
+    final a = new MyNewMain();
+    ''';
+    final newMainFilePath = join(projectFolderPath, 'lib', 'my_new_main.dart');
+
+    /// Helper that performs the rename and tests the results. Passed below to
+    /// provideConfig() so we can wrap this with handlers to provide the
+    /// required config.
+    Future<void> testRename() async {
+      final contents = await _test_rename_withDocumentChanges(
+        content,
+        'MyNewMain',
+        expectedContent,
+        expectedFilePath: newMainFilePath,
+        workspaceCapabilities: withConfigurationSupport(
+            withResourceOperationKinds(emptyWorkspaceClientCapabilities,
+                [ResourceOperationKind.Rename])),
+      );
+      // Ensure we now only have the newly-renamed file and not the old one
+      // (its contents will have been checked by the function above).
+      expect(contents.keys.single, equals(newMainFilePath));
+    }
+
+    /// Helper that will respond to the window/showMessageRequest request from
+    /// the server when prompted about renaming the file.
+    Future<MessageActionItem> promptHandler(
+        ShowMessageRequestParams params) async {
+      // Ensure the prompt is as expected.
+      expect(params.type, equals(MessageType.Info));
+      expect(
+          params.message, equals("Rename 'main.dart' to 'my_new_main.dart'?"));
+      expect(params.actions, hasLength(2));
+      expect(params.actions![0],
+          equals(MessageActionItem(title: UserPromptActions.yes)));
+      expect(params.actions![1],
+          equals(MessageActionItem(title: UserPromptActions.no)));
+
+      // Respond to the request with the required action.
+      return params.actions!.first;
+    }
+
+    // Run the test and provide the config + prompt handling function.
+    return handleExpectedRequest(
+      Method.window_showMessageRequest,
+      ShowMessageRequestParams.fromJson,
+      () => provideConfig(
+        testRename,
+        {'renameFilesWithClasses': 'prompt'},
+      ),
+      handler: promptHandler,
+    );
+  }
+
+  Future<void> test_rename_class_doesRenameFileIfAlwaysEnabled() async {
+    const content = '''
+    class Main {}
+    final a = new [[Ma^in]]();
+    ''';
+    const expectedContent = '''
+    class MyNewMain {}
+    final a = new MyNewMain();
+    ''';
+    final newMainFilePath = join(projectFolderPath, 'lib', 'my_new_main.dart');
+    await provideConfig(
+      () async {
+        final contents = await _test_rename_withDocumentChanges(
+          content,
+          'MyNewMain',
+          expectedContent,
+          expectedFilePath: newMainFilePath,
+          workspaceCapabilities: withConfigurationSupport(
+              withResourceOperationKinds(emptyWorkspaceClientCapabilities,
+                  [ResourceOperationKind.Rename])),
+        );
+        // Ensure we now only have the newly-renamed file and not the old one
+        // (its contents will have been checked by the function above).
+        expect(contents.keys.single, equals(newMainFilePath));
+      },
+      {'renameFilesWithClasses': 'always'},
+    );
+  }
+
+  Future<void> test_rename_class_doesRenameFileIfRenamedFromAnother() async {
+    const mainContent = '''
+    class Main {}
+    ''';
+    const otherContent = '''
+    import 'main.dart';
+
+    final a = Ma^in();
+    ''';
+    const expectedContent = '''
+    class MyNewMain {}
+    ''';
+    // Since we don't actually perform the file rename (we only include an
+    // instruction for the client to do so), the import will not be updated
+    // by us. Instead, the client will send the rename event back to the server
+    // and it would be handled normally as if the user had done it locally.
+    const expectedOtherContent = '''
+    import 'main.dart';
+
+    final a = MyNewMain();
+    ''';
+    final otherFilePath = join(projectFolderPath, 'lib', 'other.dart');
+    final newMainFilePath = join(projectFolderPath, 'lib', 'my_new_main.dart');
+    newFile(mainFilePath, content: withoutMarkers(mainContent));
+    await pumpEventQueue(times: 5000);
+    await provideConfig(
+      () async {
+        final contents = await _test_rename_withDocumentChanges(
+          otherContent,
+          'MyNewMain',
+          expectedOtherContent,
+          filePath: otherFilePath,
+          contents: {
+            otherFilePath: otherContent,
+            mainFilePath: mainContent,
+          },
+          workspaceCapabilities: withConfigurationSupport(
+              withResourceOperationKinds(emptyWorkspaceClientCapabilities,
+                  [ResourceOperationKind.Rename])),
+        );
+        // Expect that main was renamed to my_new_main and the other file was
+        // updated.
+        expect(contents.containsKey(mainFilePath), isFalse);
+        expect(contents.containsKey(newMainFilePath), isTrue);
+        expect(contents.containsKey(otherFilePath), isTrue);
+        expect(contents[newMainFilePath], expectedContent);
+        expect(contents[otherFilePath], expectedOtherContent);
+      },
+      {'renameFilesWithClasses': 'always'},
+    );
+  }
+
+  Future<void> test_rename_classNewKeyword() {
     const content = '''
     class MyClass {}
     final a = n^ew MyClass();
@@ -308,6 +463,30 @@
     expect(contents[referencedFilePath], equals(expectedReferencedContent));
   }
 
+  Future<void> test_rename_nonClass_doesNotRenameFile() async {
+    const content = '''
+    final Ma^in = 'test';
+    ''';
+    const expectedContent = '''
+    final MyNewMain = 'test';
+    ''';
+    await provideConfig(
+      () async {
+        final contents = await _test_rename_withDocumentChanges(
+          content,
+          'MyNewMain',
+          expectedContent,
+          workspaceCapabilities: withConfigurationSupport(
+              withResourceOperationKinds(emptyWorkspaceClientCapabilities,
+                  [ResourceOperationKind.Rename])),
+        );
+        // Ensure the only file is still called main.dart.
+        expect(contents.keys.single, equals(mainFilePath));
+      },
+      {'renameFilesWithClasses': 'always'},
+    );
+  }
+
   Future<void> test_rename_rejectedForBadName() async {
     const content = '''
     class MyClass {}
@@ -533,44 +712,56 @@
     );
   }
 
-  Future<void> _test_rename_withDocumentChanges(
+  Future<Map<String, String>> _test_rename_withDocumentChanges(
     String content,
     String newName,
     String? expectedContent, {
-    sendRenameVersion = true,
+    String? filePath,
+    String? expectedFilePath,
+    bool sendRenameVersion = true,
+    ClientCapabilitiesWorkspace? workspaceCapabilities,
+    Map<String, String>? contents,
   }) async {
+    contents ??= {};
+    filePath ??= mainFilePath;
+    expectedFilePath ??= filePath;
+    final fileUri = Uri.file(filePath);
+
     // The specific number doesn't matter here, it's just a placeholder to confirm
     // the values match.
     final documentVersion = 222;
+    contents[filePath] = withoutMarkers(content);
+    final documentVersions = {
+      filePath: documentVersion,
+    };
+
+    final initialAnalysis = waitForAnalysisComplete();
     await initialize(
-      workspaceCapabilities:
-          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+      workspaceCapabilities: withDocumentChangesSupport(
+          workspaceCapabilities ?? emptyWorkspaceClientCapabilities),
     );
-    await openFile(mainFileUri, withoutMarkers(content),
-        version: documentVersion);
+    await openFile(fileUri, withoutMarkers(content), version: documentVersion);
+    await initialAnalysis;
 
     final result = await rename(
-      mainFileUri,
+      fileUri,
       sendRenameVersion ? documentVersion : null,
       positionFromMarker(content),
       newName,
     );
+
     if (expectedContent == null) {
       expect(result, isNull);
     } else {
       // Ensure applying the changes will give us the expected content.
-      final contents = {
-        mainFilePath: withoutMarkers(content),
-      };
-      final documentVersions = {
-        mainFilePath: documentVersion,
-      };
       applyDocumentChanges(
         contents,
         result!.documentChanges!,
         expectedVersions: documentVersions,
       );
-      expect(contents[mainFilePath], equals(expectedContent));
+      expect(contents[expectedFilePath], equals(expectedContent));
     }
+
+    return contents;
   }
 }
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 2e49ae5..45b8b3f 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -679,7 +679,7 @@
       change.map(
         (textDocEdit) => applyTextDocumentEdits(oldFileContent, [textDocEdit]),
         (create) => applyResourceCreate(oldFileContent, create),
-        (rename) => throw 'applyResourceChanges:Delete not currently supported',
+        (rename) => applyResourceRename(oldFileContent, rename),
         (delete) => throw 'applyResourceChanges:Delete not currently supported',
       );
     }
@@ -694,6 +694,17 @@
     oldFileContent[path] = '';
   }
 
+  void applyResourceRename(
+      Map<String, String> oldFileContent, RenameFile rename) {
+    final oldPath = Uri.parse(rename.oldUri).toFilePath();
+    final newPath = Uri.parse(rename.newUri).toFilePath();
+    if (!oldFileContent.containsKey(oldPath)) {
+      throw 'Recieved rename instruction for $oldPath which did not exist.';
+    }
+    oldFileContent[newPath] = oldFileContent[oldPath]!;
+    oldFileContent.remove(oldPath);
+  }
+
   String applyTextDocumentEdit(String content, TextDocumentEdit edit) {
     return edit.edits.fold(content, applyTextEdit);
   }
@@ -1474,12 +1485,12 @@
 
   /// Calls the supplied function and responds to any `workspace/configuration`
   /// request with the supplied config.
-  Future<ResponseMessage> provideConfig(
-    Future<ResponseMessage> Function() f,
+  Future<T> provideConfig<T>(
+    Future<T> Function() f,
     FutureOr<Map<String, Object?>> globalConfig, {
     FutureOr<Map<String, Map<String, Object?>>>? folderConfig,
   }) {
-    return handleExpectedRequest<ResponseMessage, ConfigurationParams,
+    return handleExpectedRequest<T, ConfigurationParams,
         List<Map<String, Object?>>>(
       Method.workspace_configuration,
       ConfigurationParams.fromJson,
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
index 3a72bfd..303d1e8 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
@@ -162,6 +162,5 @@
 
 class Builder {
   final WidgetBuilder builder;
-  const Builder(
-      {Key key, @required this.builder});
+  const Builder({Key key, @required this.builder});
 }
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index e1f3ecd..b8e733e 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -50,9 +50,44 @@
   }
 }
 
+class MockProcess implements Process {
+  static int killedExitCode = -1;
+
+  final int _pid;
+  final _exitCodeCompleter = Completer<int>();
+  final String _stdout, _stderr;
+
+  MockProcess(this._pid, FutureOr<int> _exitCode, this._stdout, this._stderr) {
+    Future.value(_exitCode).then(_exitCodeCompleter.complete);
+  }
+
+  @override
+  Future<int> get exitCode => _exitCodeCompleter.future;
+
+  @override
+  int get pid => _pid;
+
+  @override
+  Stream<List<int>> get stderr => Future.value(utf8.encode(_stderr)).asStream();
+
+  @override
+  Stream<List<int>> get stdout => Future.value(utf8.encode(_stdout)).asStream();
+
+  @override
+  bool kill([ProcessSignal signal = ProcessSignal.sigterm]) {
+    _exitCodeCompleter.complete(killedExitCode);
+    return true;
+  }
+
+  @override
+  dynamic noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+}
+
 class MockProcessRunner implements ProcessRunner {
-  FutureOr<ProcessResult> Function(String executable, List<String> arguments,
-          {String? dir, Map<String, String>? env})? runHandler =
+  FutureOr<Process> Function(String executable, List<String> arguments,
+          {String? dir, Map<String, String>? env}) startHandler =
       (executable, arguments, {dir, env}) => throw UnimplementedError();
 
   @override
@@ -61,17 +96,16 @@
   }
 
   @override
-  Future<ProcessResult> run(
+  Future<Process> start(
     String executable,
     List<String> arguments, {
     String? workingDirectory,
     Map<String, String>? environment,
     bool includeParentEnvironment = true,
     bool runInShell = false,
-    Encoding? stdoutEncoding = systemEncoding,
-    Encoding? stderrEncoding = systemEncoding,
+    ProcessStartMode mode = ProcessStartMode.normal,
   }) async {
-    return runHandler!(executable, arguments,
+    return await startHandler(executable, arguments,
         dir: workingDirectory, env: environment);
   }
 }
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 2f7ae488..25f7bdb 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -9,7 +9,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../abstract_context.dart';
 import '../abstract_single_unit.dart';
 
 void main() {
@@ -74,8 +73,7 @@
 }
 
 @reflectiveTest
-class ConvertElementTest extends AbstractSingleUnitTest
-    with WithNonFunctionTypeAliasesMixin {
+class ConvertElementTest extends AbstractSingleUnitTest {
   Future<void> test_CLASS() async {
     await resolveTestCode('''
 @deprecated
@@ -588,6 +586,7 @@
     expect(ElementKind(ElementKind.SETTER.name), ElementKind.SETTER);
     expect(ElementKind(ElementKind.TOP_LEVEL_VARIABLE.name),
         ElementKind.TOP_LEVEL_VARIABLE);
+    expect(ElementKind(ElementKind.TYPE_ALIAS.name), ElementKind.TYPE_ALIAS);
     expect(ElementKind(ElementKind.TYPE_PARAMETER.name),
         ElementKind.TYPE_PARAMETER);
     expect(ElementKind(ElementKind.UNIT_TEST_TEST.name),
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index a1f4900..3d64012 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -200,6 +200,7 @@
 int v;
 typedef void tf1();
 typedef tf2<T> = int Function<S>(T tp, S sp);
+typedef td3 = double;
 ''');
     await _getDeclarations();
 
@@ -209,6 +210,7 @@
     assertHas('v', ElementKind.TOP_LEVEL_VARIABLE);
     assertHas('tf1', ElementKind.FUNCTION_TYPE_ALIAS);
     assertHas('tf2', ElementKind.FUNCTION_TYPE_ALIAS);
+    assertHas('td3', ElementKind.TYPE_ALIAS);
   }
 
   Future<void> _getDeclarations(
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 21a4e6b..2bc7a79 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -58,9 +58,9 @@
   }
 
   Future<void> test_constructor_named_potential() async {
-    // Constructors in other classes shouldn't be considered potential matches,
-    // nor should unresolved method calls, since constructor call sites are
-    // statically bound to their targets).
+    // Constructors in other classes shouldn't be considered potential matches.
+    // Unresolved method calls should also not be considered potential matches,
+    // because constructor call sites are statically bound to their targets.
     addTestFile('''
 class A {
   A.named(p); // A
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 546faf8..55a731a 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
@@ -63,8 +63,7 @@
   }
 }
 
-abstract class _BaseDartCompletionContributorTest extends AbstractContextTest
-    with WithNonFunctionTypeAliasesMixin {
+abstract class _BaseDartCompletionContributorTest extends AbstractContextTest {
   static const String _UNCHECKED = '__UNCHECKED__';
   late String testFile;
   int _completionOffset = -1;
diff --git a/pkg/analysis_server/test/services/correction/organize_directives_test.dart b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
index 7696ad5..f28613f 100644
--- a/pkg/analysis_server/test/services/correction/organize_directives_test.dart
+++ b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
@@ -42,6 +42,46 @@
 ''');
   }
 
+  Future<void> test_ignore_asFirstComment() async {
+    // Usually the first comment is treated as a library comment and not moved
+    // but if it's an 'ignore:' it should be treated as attached to the import.
+    await _computeUnitAndErrors(r'''
+// ignore: unused_import
+import 'dart:io';
+import 'dart:async';
+
+Future a;
+''');
+    // validate change
+    _assertOrganize(r'''
+import 'dart:async';
+// ignore: unused_import
+import 'dart:io';
+
+Future a;
+''');
+  }
+
+  Future<void> test_ignoreForFile_asFirstComment() async {
+    // Unlike 'ignore:', 'ignore_for_file:' still _should_ be kept at the top
+    // of the file and not attached to the import.
+    await _computeUnitAndErrors(r'''
+// ignore_for_file: unused_import
+import 'dart:io';
+import 'dart:async';
+
+Future a;
+''');
+    // validate change
+    _assertOrganize(r'''
+// ignore_for_file: unused_import
+import 'dart:async';
+import 'dart:io';
+
+Future a;
+''');
+  }
+
   Future<void> test_keep_duplicateImports_withDifferentPrefix() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async' as async1;
@@ -78,6 +118,76 @@
     _assertOrganize(code);
   }
 
+  Future<void> test_languageVersion_afterLibraryComment() async {
+    await _computeUnitAndErrors(r'''
+// Copyright
+
+// @dart=2.10
+
+import 'dart:io';
+import 'dart:async';
+
+File f;
+Future a;
+''');
+    // validate change
+    _assertOrganize(r'''
+// Copyright
+
+// @dart=2.10
+
+import 'dart:async';
+import 'dart:io';
+
+File f;
+Future a;
+''');
+  }
+
+  Future<void> test_languageVersion_asFirstComment() async {
+    await _computeUnitAndErrors(r'''
+// @dart=2.10
+import 'dart:io';
+import 'dart:async';
+
+File f;
+Future a;
+''');
+    // validate change
+    _assertOrganize(r'''
+// @dart=2.10
+import 'dart:async';
+import 'dart:io';
+
+File f;
+Future a;
+''');
+  }
+
+  Future<void> test_languageVersion_beforeImportWithoutNewline() async {
+    await _computeUnitAndErrors(r'''
+// Copyright
+
+// @dart=2.10
+import 'dart:io';
+import 'dart:async';
+
+File f;
+Future a;
+''');
+    // validate change
+    _assertOrganize(r'''
+// Copyright
+
+// @dart=2.10
+import 'dart:async';
+import 'dart:io';
+
+File f;
+Future a;
+''');
+  }
+
   Future<void> test_remove_duplicateImports() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async';
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index 1ab4b27..4fa30e3 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -12,7 +12,6 @@
     show RefactoringProblemSeverity, SourceChange, SourceEdit;
 import 'package:test/test.dart';
 
-import '../../abstract_context.dart';
 import '../../abstract_single_unit.dart';
 
 int findIdentifierLength(String search) {
@@ -30,8 +29,7 @@
 }
 
 /// The base class for all [Refactoring] tests.
-abstract class RefactoringTest extends AbstractSingleUnitTest
-    with WithNonFunctionTypeAliasesMixin {
+abstract class RefactoringTest extends AbstractSingleUnitTest {
   late SearchEngine searchEngine;
 
   late SourceChange refactoringChange;
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 66861c0..6e99c97 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -948,7 +948,7 @@
     var status = await refactoring.checkInitialConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
         expectedMessage:
-            'Cannot extract closure as method, it references 1 external variable(s).');
+            'Cannot extract closure as method, it references 1 external variable.');
   }
 
   Future<void> test_closure_bad_referencesParameter() async {
@@ -963,7 +963,7 @@
     var status = await refactoring.checkInitialConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
         expectedMessage:
-            'Cannot extract closure as method, it references 1 external variable(s).');
+            'Cannot extract closure as method, it references 1 external variable.');
   }
 
   Future<void> test_fromTopLevelVariableInitializerClosure() async {
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 512db98..10cb93c 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -441,7 +441,7 @@
 
 @reflectiveTest
 class SearchEngineImplWithNonFunctionTypeAliasesTest
-    extends SearchEngineImplTest with WithNonFunctionTypeAliasesMixin {
+    extends SearchEngineImplTest {
   Future<void> test_searchReferences_typeAlias_interfaceType() async {
     await resolveTestCode('''
 typedef A<T> = Map<T, String>;
diff --git a/pkg/analysis_server/test/src/computer/outline_computer_test.dart b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
index a005ff2..185338f 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -17,8 +17,7 @@
   });
 }
 
-class AbstractOutlineComputerTest extends AbstractContextTest
-    with WithNonFunctionTypeAliasesMixin {
+class AbstractOutlineComputerTest extends AbstractContextTest {
   late String testPath;
   late String testCode;
 
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
index 68ef83c..3b95fd5 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
@@ -469,6 +469,83 @@
 ''');
   }
 
+  Future<void> test_suggestion_typedef() async {
+    var path = convertPath('/home/test/lib/a.dart');
+    var uriStr = 'package:test/a.dart';
+
+    newFile(path, content: r'''
+typedef MyAlias = double;
+''');
+
+    var set = await waitForSetWithUri(uriStr);
+    assertJsonText(_getSuggestion(set, 'MyAlias'), '''
+{
+  "label": "MyAlias",
+  "declaringLibraryUri": "package:test/a.dart",
+  "element": {
+    "kind": "TYPE_ALIAS",
+    "name": "MyAlias",
+    "location": {
+      "file": ${jsonOfPath(path)},
+      "offset": 8,
+      "length": 0,
+      "startLine": 1,
+      "startColumn": 9,
+      "endLine": 1,
+      "endColumn": 9
+    },
+    "flags": 0
+  },
+  "relevanceTags": [
+    "ElementKind.TYPE_ALIAS",
+    "package:test/a.dart::MyAlias",
+    "MyAlias"
+  ]
+}
+''');
+  }
+
+  Future<void> test_suggestion_typedef_function() async {
+    var path = convertPath('/home/test/lib/a.dart');
+    var uriStr = 'package:test/a.dart';
+
+    newFile(path, content: r'''
+typedef MyAlias = void Function();
+''');
+
+    var set = await waitForSetWithUri(uriStr);
+    assertJsonText(_getSuggestion(set, 'MyAlias'), '''
+{
+  "label": "MyAlias",
+  "declaringLibraryUri": "package:test/a.dart",
+  "element": {
+    "kind": "FUNCTION_TYPE_ALIAS",
+    "name": "MyAlias",
+    "location": {
+      "file": ${jsonOfPath(path)},
+      "offset": 8,
+      "length": 0,
+      "startLine": 1,
+      "startColumn": 9,
+      "endLine": 1,
+      "endColumn": 9
+    },
+    "flags": 0,
+    "parameters": "()",
+    "returnType": "void"
+  },
+  "parameterNames": [],
+  "parameterTypes": [],
+  "relevanceTags": [
+    "ElementKind.FUNCTION_TYPE_ALIAS",
+    "package:test/a.dart::MyAlias",
+    "MyAlias"
+  ],
+  "requiredParameterCount": 0
+}
+''');
+  }
+
   static void assertNoSuggestion(AvailableSuggestionSet set, String label,
       {ElementKind? kind}) {
     var suggestion = set.items.singleWhereOrNull(
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
index 195678c..24bd1c3 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
@@ -178,6 +178,7 @@
         ElementKind.ENUM,
         ElementKind.FUNCTION_TYPE_ALIAS,
         ElementKind.MIXIN,
+        ElementKind.TYPE_ALIAS,
       ]),
     );
   }
@@ -210,6 +211,7 @@
         ElementKind.MIXIN,
         ElementKind.SETTER,
         ElementKind.TOP_LEVEL_VARIABLE,
+        ElementKind.TYPE_ALIAS,
       ]),
     );
   }
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
index 4eab94d..051c4eb 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
@@ -2,8 +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 'dart:io';
-
 import 'package:analysis_server/src/services/completion/yaml/pubspec_generator.dart';
 import 'package:analysis_server/src/services/pub/pub_api.dart';
 import 'package:analysis_server/src/services/pub/pub_command.dart';
@@ -358,8 +356,8 @@
       ]
     }
     ''';
-    processRunner.runHandler =
-        (executable, args, {dir, env}) => ProcessResult(1, 0, json, '');
+    processRunner.startHandler =
+        (executable, args, {dir, env}) => MockProcess(1, 0, json, '');
 
     pubPackageService.beginCachePreloads([convertPath('/home/test/$fileName')]);
     await pumpEventQueue(times: 500);
@@ -376,9 +374,9 @@
   /// processes to cache the version numbers.
   void test_packageVersion_withDEPSfile() async {
     var didRun = false;
-    processRunner.runHandler = (executable, args, {dir, env}) {
+    processRunner.startHandler = (executable, args, {dir, env}) {
       didRun = true;
-      return ProcessResult(1, 0, '', '');
+      return MockProcess(1, 0, '', '');
     };
 
     newFile('/home/DEPS');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
index e0639a0..a12a654 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
@@ -376,6 +376,19 @@
     await assertNoAssistAt('var ');
   }
 
+  Future<void> test_local_multiple_same_type() async {
+    await resolveTestCode('''
+void f() {
+  var a = '', b = '';
+}
+''');
+    await assertHasAssistAt('var ', '''
+void f() {
+  String a = '', b = '';
+}
+''');
+  }
+
   Future<void> test_local_noInitializer_noAssignments() async {
     verifyNoTestUnitErrors = false;
     await resolveTestCode('''
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
index 3fa857a..f2c08ed 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/assist.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -79,6 +80,20 @@
     await assertNoAssistAt('345');
   }
 
+  Future<void> test_lint_prefer_final_locals() async {
+    createAnalysisOptionsFile(lints: [LintNames.prefer_final_locals]);
+    await resolveTestCode(r'''
+main() {
+  12345;
+}
+''');
+    await assertHasAssistAt('345', '''
+main() {
+  final i = 12345;
+}
+''');
+  }
+
   Future<void> test_recovery_splitExpression() async {
     verifyNoTestUnitErrors = false;
     await resolveTestCode('''
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
index fc933c1..d524c70 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
@@ -146,7 +146,6 @@
     await assertNoAssistAt('{}');
   }
 
-
   Future<void> test_syncStar() async {
     await resolveTestCode('''
 Iterable<String> f() sync* {}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
index db04588..c135fc2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
@@ -163,4 +163,23 @@
 }
 ''');
   }
+
+  Future<void> test_void() async {
+    await resolveTestCode('''
+class C {
+  String? _s;
+
+  set s(String s) => _s = s;
+}
+''');
+    await assertHasAssistAt('=>', '''
+class C {
+  String? _s;
+
+  set s(String s) {
+    _s = s;
+  }
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
index 255f6e5..4fb3e72 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
@@ -118,4 +118,22 @@
 }
 ''');
   }
+
+  Future<void> test_privateType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  _B b => _B();
+}
+class _B {}
+''');
+
+    await resolveTestCode('''
+import 'package:test/a.dart';
+
+f(A a) {
+  var x = a.b();
+}
+''');
+    await assertNoAssistAt('var ');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_eol_at_end_of_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_eol_at_end_of_file_test.dart
new file mode 100644
index 0000000..07fb1f4
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_eol_at_end_of_file_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.
+
+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_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AddEolAtEndOfFileTest);
+  });
+}
+
+@reflectiveTest
+class AddEolAtEndOfFileTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_EOL_AT_END_OF_FILE;
+
+  @override
+  String get lintCode => LintNames.eol_at_end_of_file;
+
+  Future<void> test_missing_eol() async {
+    await resolveTestCode('''
+void f() {
+}''');
+    await assertHasFix('''
+void f() {
+}
+''');
+  }
+
+  Future<void> test_multiple_eol() async {
+    await resolveTestCode('''
+void f() {
+}
+
+''');
+    await assertHasFix('''
+void f() {
+}
+''');
+  }
+}
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 75a8383..cfcabd6 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
@@ -152,6 +152,22 @@
 ''');
   }
 
+  Future<void> test_privateType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  _B b => _B();
+}
+class _B {}
+''');
+
+    await resolveTestCode('''
+import 'package:test/a.dart';
+
+f(A a) => a.b();
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_topLevelFunction_block() async {
     await resolveTestCode('''
 f() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
index 80d36d6..ca26deb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
@@ -22,13 +22,13 @@
 
   Future<void> test_generic() async {
     await resolveTestCode('''
-main() {
+f() {
   String v = <int>[];
   print(v);
 }
 ''');
     await assertHasFix('''
-main() {
+f() {
   List<int> v = <int>[];
   print(v);
 }
@@ -37,7 +37,7 @@
 
   Future<void> test_multipleVariables() async {
     await resolveTestCode('''
-main() {
+f() {
   String a, b = '';
   print('\$a \$b');
 }
@@ -47,7 +47,7 @@
 
   Future<void> test_notVariableDeclaration() async {
     await resolveTestCode('''
-main() {
+f() {
   String v;
   v = 42;
   print(v);
@@ -56,15 +56,34 @@
     await assertNoFix();
   }
 
+  Future<void> test_privateType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  _B b => _B();
+}
+class _B {}
+''');
+
+    await resolveTestCode('''
+import 'package:test/a.dart';
+
+f(A a) {
+  String v = a.b();
+  print(v);
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_simple() async {
     await resolveTestCode('''
-main() {
+f() {
   String v = 'abc'.length;
   print(v);
 }
 ''');
     await assertHasFix('''
-main() {
+f() {
   int v = 'abc'.length;
   print(v);
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
index fd2fea7..2d663fc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../../abstract_context.dart';
 import 'fix_processor.dart';
 
 void main() {
@@ -17,8 +16,7 @@
 }
 
 @reflectiveTest
-class CreateFunctionTest extends FixProcessorTest
-    with WithNonFunctionTypeAliasesMixin {
+class CreateFunctionTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.CREATE_FUNCTION;
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
index a7f0842..0f08223 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_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/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,6 +23,82 @@
   @override
   FixKind get kind => DartFixKind.CREATE_MISSING_OVERRIDES;
 
+  Future<void> test_brackets_both() async {
+    await resolveTestCode('''
+class A {
+  void m() {};
+}
+
+class B implements A
+''');
+    await assertHasFix('''
+class A {
+  void m() {};
+}
+
+class B implements A {
+  @override
+  void m() {
+    // TODO: implement m
+  }
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE;
+    });
+  }
+
+  Future<void> test_brackets_left() async {
+    await resolveTestCode('''
+class A {
+  void m() {};
+}
+
+class B implements A
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {};
+}
+
+class B implements A {
+  @override
+  void m() {
+    // TODO: implement m
+  }
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE;
+    });
+  }
+
+  Future<void> test_brackets_right() async {
+    await resolveTestCode('''
+class A {
+  void m() {};
+}
+
+class B implements A {
+''');
+    await assertHasFix('''
+class A {
+  void m() {};
+}
+
+class B implements A {
+  @override
+  void m() {
+    // TODO: implement m
+  }
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE;
+    });
+  }
+
   Future<void> test_field_untyped() async {
     await resolveTestCode('''
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
index 4022696..cb280c7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
@@ -574,6 +574,58 @@
 }
 ''');
   }
+
+  Future<void> test_addParameter_withImport() async {
+    newFile('$workspaceRootPath/p/lib/d.dart', content: '''
+class D {}
+''');
+    setPackageContent('''
+import 'd.dart';
+
+class C {
+  void m(D x) {}
+}
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+- title: 'Add parameter'
+  date: 2021-08-03
+  element:
+    uris: ['$importUri']
+    method: 'm'
+    inClass: 'C'
+  changes:
+    - kind: 'addParameter'
+      index: 0
+      name: 'x'
+      style: required_positional
+      argumentValue:
+        expression: '{% d %}()'
+        variables:
+          d:
+            kind: 'import'
+            uris: ['d.dart']
+            name: 'D'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+void f(C c) {
+  c.m();
+  c.m();
+}
+''');
+    await assertHasFix('''
+import 'package:p/d.dart';
+import '$importUri';
+
+void f(C c) {
+  c.m(D());
+  c.m(D());
+}
+''');
+  }
 }
 
 @reflectiveTest
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 cde9037..6e27913 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
@@ -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:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,6 +23,17 @@
     _testMap(FixProcessor.nonLintProducerMap.values);
   }
 
+  void test_registerFixForLint() {
+    CorrectionProducer producer() => MockCorrectionProducer();
+
+    var lintName = 'not_a_lint';
+    expect(FixProcessor.lintProducerMap[lintName], null);
+    FixProcessor.registerFixForLint(lintName, producer);
+    expect(FixProcessor.lintProducerMap[lintName], contains(producer));
+    // Restore the map to it's original state so as to not impact other tests.
+    FixProcessor.lintProducerMap.remove(lintName);
+  }
+
   void _testGenerator(ProducerGenerator generator) {
     var producer = generator();
     var className = producer.runtimeType.toString();
@@ -40,3 +52,10 @@
     }
   }
 }
+
+class MockCorrectionProducer implements CorrectionProducer {
+  @override
+  dynamic noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
index 5494406..3e73604 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
@@ -3,6 +3,8 @@
 // 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/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -12,6 +14,8 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveComparisonTest);
+    defineReflectiveTests(RemoveNullCheckComparisonTest);
+    defineReflectiveTests(RemoveNullCheckComparisonBulkTest);
   });
 }
 
@@ -188,3 +192,215 @@
 ''');
   }
 }
+
+@reflectiveTest
+class RemoveNullCheckComparisonBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.avoid_null_checks_in_equality_operators;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other != null &&
+          other is Person &&
+          name == other.name;
+}
+
+class Person2 {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other != null &&
+          other is Person &&
+          name == other.name;
+}
+''');
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other is Person &&
+          name == other.name;
+}
+
+class Person2 {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other is Person &&
+          name == other.name;
+}
+''');
+  }
+
+  @FailingTest(reason: 'Only the first comparison is removed')
+  Future<void> test_singleFile_overlapping() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(other) =>
+          other != null &&
+          other != null &&
+          other is Person &&
+          name == other.name;
+}
+''');
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(other) =>
+          other is Person &&
+          name == other.name;
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveNullCheckComparisonTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_COMPARISON;
+
+  @override
+  String get lintCode => LintNames.avoid_null_checks_in_equality_operators;
+
+  Future<void> test_expressionBody() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other != null &&
+          other is Person &&
+          name == other.name;
+}
+''');
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) =>
+          other is Person &&
+          name == other.name;
+}
+''');
+  }
+
+  Future<void> test_functionBody() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    return other != null &&
+          other is Person &&
+          name == other.name;
+  }
+}
+''');
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    return other is Person &&
+          name == other.name;
+  }
+}
+''');
+  }
+
+  Future<void> test_ifNullAssignmentStatement() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    if (other is! Person) return false;
+    other ??= Person();
+    return other.name == name;
+  }
+}
+''');
+    await assertNoFix();
+  }
+
+  /// todo(pq): consider implementing
+  @FailingTest(reason: 'Fix unimplemented')
+  Future<void> test_ifNullStatement() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    if (other is! Person) return false;
+    final toCompare = other ?? Person();
+    return toCompare.name == name;
+  }
+}
+''');
+
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    if (other is! Person) return false;
+    final toCompare = other;
+    return toCompare.name == name;
+  }
+}
+''',
+        errorFilter: (error) =>
+            error.errorCode == StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION);
+  }
+
+  /// todo(pq): implement or remove the lint (see: https://github.com/dart-lang/linter/issues/2864)
+  @FailingTest(reason: 'Fix unimplemented')
+  Future<void> test_ifStatement() async {
+    await resolveTestCode('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    if (other == null) return false;
+    return other is Person &&
+          name == other.name;
+  }
+}
+''');
+    await assertHasFix('''
+class Person {
+  final String name = '';
+
+  @override
+  operator ==(Object? other) {
+    return other is Person &&
+          name == other.name;
+  }
+}
+''',
+        errorFilter: (error) =>
+            error.errorCode == HintCode.UNNECESSARY_NULL_COMPARISON_FALSE);
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
new file mode 100644
index 0000000..da085a6
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
@@ -0,0 +1,239 @@
+// 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/src/error/codes.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(ReplaceReturnTypeTest);
+  });
+}
+
+@reflectiveTest
+class ReplaceReturnTypeTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REPLACE_RETURN_TYPE;
+
+  Future<void> test_async_method() async {
+    await resolveTestCode('''
+class A {
+  Future<int> m() async {
+    return '';
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  Future<String> m() async {
+    return '';
+  }
+}
+''');
+  }
+
+  Future<void> test_closure() async {
+    await resolveTestCode('''
+class A {
+  int m() {
+    var list = <String>[];
+    list.map((e) {
+      return 0;
+    });
+    return 2.4;
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  double m() {
+    var list = <String>[];
+    list.map((e) {
+      return 0;
+    });
+    return 2.4;
+  }
+}
+''');
+  }
+
+  Future<void> test_function() async {
+    await resolveTestCode('''
+int f() {
+  return '';
+}
+''');
+    await assertHasFix('''
+String f() {
+  return '';
+}
+''');
+  }
+
+  Future<void> test_function_local() async {
+    await resolveTestCode('''
+void top() {
+  int f() {
+    return '';
+  }
+}
+''');
+    await assertHasFix('''
+void top() {
+  String f() {
+    return '';
+  }
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+    });
+  }
+
+  Future<void> test_method() async {
+    await resolveTestCode('''
+class A {
+  int m() {
+    return '';
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  String m() {
+    return '';
+  }
+}
+''');
+  }
+
+  Future<void> test_methodOverride() async {
+    await resolveTestCode('''
+class A {
+  A m() => this;
+}
+class B extends A {
+  @override
+  int m() => this;
+}
+''');
+    await assertHasFix('''
+class A {
+  A m() => this;
+}
+class B extends A {
+  @override
+  B m() => this;
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+    });
+  }
+
+  Future<void> test_methodOverride_multiple_subtype() async {
+    await resolveTestCode('''
+class A {}
+class B extends A {}
+
+class Parent {
+  A m() => A();
+}
+
+class I {
+  B m() => B();
+}
+
+class D extends Parent implements I {
+  @override
+  B m() => A();
+}
+''');
+
+    await assertNoFix();
+  }
+
+  Future<void> test_methodOverride_subtype() async {
+    await resolveTestCode('''
+class A {
+  B m() => B();
+}
+class B extends A {
+  @override
+  B m() => A();
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_privateType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  _B b => _B();
+}
+class _B {}
+''');
+
+    await resolveTestCode('''
+import 'package:test/a.dart';
+
+int f(A a) {
+  return a.b();
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_upperBound_function() async {
+    await resolveTestCode('''
+int f() {
+  if (true) {
+    return 3;
+  }
+  return 2.4;
+}
+''');
+    await assertHasFix('''
+num f() {
+  if (true) {
+    return 3;
+  }
+  return 2.4;
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+    });
+  }
+
+  Future<void> test_upperBound_method() async {
+    await resolveTestCode('''
+class A {
+  int m() {
+    if (true) {
+      return 3;
+    }
+    return 2.4;
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  num m() {
+    if (true) {
+      return 3;
+    }
+    return 2.4;
+  }
+}
+''', errorFilter: (error) {
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
index 282e085..84b84d5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
@@ -11,6 +11,8 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithNullAwareTest);
+    defineReflectiveTests(UncheckedMethodInvocationOfNullableValueTest);
+    defineReflectiveTests(UncheckedPropertyAccessOfNullableValueTest);
   });
 }
 
@@ -61,3 +63,90 @@
 ''');
   }
 }
+
+@reflectiveTest
+class UncheckedMethodInvocationOfNullableValueTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REPLACE_WITH_NULL_AWARE;
+
+  Future<void> test_method() async {
+    await resolveTestCode('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print(values.toList());
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print(values?.toList());
+    }
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class UncheckedPropertyAccessOfNullableValueTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REPLACE_WITH_NULL_AWARE;
+
+  Future<void> test_prefixedIdentifier() async {
+    await resolveTestCode('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print(values.length);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print(values?.length);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_propertyAccess() async {
+    await resolveTestCode('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print((values).length);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  List<int>? values;
+
+  void m() {
+    if (values != null) {
+      print((values)?.length);
+    }
+  }
+}
+''');
+  }
+}
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 6178199..9d30ea0 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
@@ -10,6 +10,7 @@
 import 'add_curly_braces_test.dart' as add_curly_braces;
 import 'add_diagnostic_property_reference_test.dart'
     as add_diagnostic_property_reference;
+import 'add_eol_at_end_of_file_test.dart' as add_eol_at_end_of_file;
 import 'add_explicit_cast_test.dart' as add_explicit_cast;
 import 'add_field_formal_parameters_test.dart' as add_field_formal_parameters;
 import 'add_key_to_constructors_test.dart' as add_key_to_constructors;
@@ -167,6 +168,7 @@
 import 'replace_new_with_const_test.dart' as replace_new_with_const;
 import 'replace_null_with_closure_test.dart' as replace_null_with_closure;
 import 'replace_return_type_future_test.dart' as replace_return_type_future;
+import 'replace_return_type_test.dart' as replace_return_type;
 import 'replace_var_with_dynamic_test.dart' as replace_var_with_dynamic;
 import 'replace_with_brackets_test.dart' as replace_with_brackets;
 import 'replace_with_conditional_assignment_test.dart'
@@ -202,6 +204,7 @@
     add_const.main();
     add_curly_braces.main();
     add_diagnostic_property_reference.main();
+    add_eol_at_end_of_file.main();
     add_explicit_cast.main();
     add_field_formal_parameters.main();
     add_key_to_constructors.main();
@@ -339,6 +342,7 @@
     replace_new_with_const.main();
     replace_null_with_closure.main();
     replace_null_with_void.main();
+    replace_return_type.main();
     replace_return_type_future.main();
     replace_var_with_dynamic.main();
     replace_with_brackets.main();
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 46638b1..59a0623 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -58,6 +58,32 @@
 import 'relevance_table_generator.dart';
 import 'visitors.dart';
 
+/// Completion metrics are computed by taking a single package and iterating
+/// over the compilation units in the package. For each unit we visit the AST
+/// structure to find all of the places where completion suggestions should be
+/// offered (essentially, everywhere that there's a keyword or identifier). At
+/// each location we compute the completion suggestions using the same code path
+/// used by the analysis server. We then compare the suggestions against the
+/// token that was actually at that location in the file.
+///
+/// This approach has several drawbacks:
+///
+/// - The AST is always complete and correct, and that's rarely the case for
+///   real completion requests. Usually the tree is incomplete and often has a
+///   completely different structure because of the way recovery works. We
+///   currently have no way of measuring completions under realistic conditions.
+///
+/// - We can't measure completions for several keywords because the presence of
+///   the keyword in the AST causes it to not be suggested.
+///
+/// - The time it takes to compute the suggestions doesn't include the time
+///   required to finish analyzing the file if the analysis hasn't been
+///   completed before suggestions are requested. While the times are accurate
+///   (within the accuracy of the `Stopwatch` class) they are the minimum
+///   possible time. This doesn't give us a measure of how completion will
+///   perform in production, but does give us an optimistic approximation.
+///
+/// The first is arguably the worst of the limitations of our current approach.
 Future<void> main(List<String> args) async {
   var parser = createArgParser();
   var result = parser.parse(args);
@@ -1045,8 +1071,9 @@
           .toList();
       locations.sort();
       for (var location in locations) {
-        table.add(toRow(targetMetrics
-            .map((metrics) => metrics.locationMrrComputers[location]!)));
+        table.add(toRow(targetMetrics.map((metrics) =>
+            metrics.locationMrrComputers[location] ??
+            MeanReciprocalRankComputer(location))));
       }
     }
     rightJustifyColumns(table, range(1, table[0].length));
@@ -1318,7 +1345,7 @@
       var filePath = result.path;
       // Use the ExpectedCompletionsVisitor to compute the set of expected
       // completions for this CompilationUnit.
-      final visitor = ExpectedCompletionsVisitor(filePath);
+      final visitor = ExpectedCompletionsVisitor(result);
       _resolvedUnitResult.unit.accept(visitor);
 
       for (var expectedCompletion in visitor.expectedCompletions) {
diff --git a/pkg/analysis_server/tool/code_completion/visitors.dart b/pkg/analysis_server/tool/code_completion/visitors.dart
index 5a17c5e..5783758 100644
--- a/pkg/analysis_server/tool/code_completion/visitors.dart
+++ b/pkg/analysis_server/tool/code_completion/visitors.dart
@@ -5,11 +5,13 @@
 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/dart/keyword_contributor.dart';
+import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart' as element;
+import 'package:analyzer/source/line_info.dart';
 
 class ExpectedCompletion {
   final String _filePath;
@@ -122,11 +124,12 @@
 }
 
 class ExpectedCompletionsVisitor extends RecursiveAstVisitor<void> {
-  final List<ExpectedCompletion> expectedCompletions;
+  /// The result of resolving the file being visited.
+  final ResolvedUnitResult result;
 
-  final String filePath;
-
-  late CompilationUnit _enclosingCompilationUnit;
+  /// The completions that are expected to be produced in the file being
+  /// visited.
+  final List<ExpectedCompletion> expectedCompletions = [];
 
   /// This boolean is set to enable whether or not we should assert that some
   /// found keyword in Dart syntax should be in the completion set returned from
@@ -141,22 +144,22 @@
   /// comment don't yield an error like Dart syntax mistakes would yield.
   final bool _doExpectCommentRefs = false;
 
-  ExpectedCompletionsVisitor(this.filePath)
-      : expectedCompletions = <ExpectedCompletion>[];
+  ExpectedCompletionsVisitor(this.result);
+
+  /// Return the path of the file that is being visited.
+  String get filePath => result.path;
+
+  /// Return the line info for the file that is being visited.
+  LineInfo get lineInfo => result.lineInfo;
 
   void safelyRecordEntity(SyntacticEntity? entity,
       {protocol.CompletionSuggestionKind? kind,
       protocol.ElementKind? elementKind}) {
     // Only record if this entity is not null, has a length, etc.
-    if (entity != null && entity.offset > 0 && entity.length > 0) {
-      // Compute the line number at this offset
-      var lineNumber = _enclosingCompilationUnit.lineInfo!
-          .getLocation(entity.offset)
-          .lineNumber;
-
-      var columnNumber = _enclosingCompilationUnit.lineInfo!
-          .getLocation(entity.offset)
-          .columnNumber;
+    if (entity != null && entity.offset >= 0 && entity.length > 0) {
+      var location = lineInfo.getLocation(entity.offset);
+      var lineNumber = location.lineNumber;
+      var columnNumber = location.columnNumber;
 
       bool isKeyword() => kind == protocol.CompletionSuggestionKind.KEYWORD;
 
@@ -315,12 +318,6 @@
   }
 
   @override
-  void visitCompilationUnit(CompilationUnit node) {
-    _enclosingCompilationUnit = node;
-    super.visitCompilationUnit(node);
-  }
-
-  @override
   void visitConfiguration(Configuration node) {
     safelyRecordKeywordCompletion(node.ifKeyword);
     super.visitConfiguration(node);
diff --git a/pkg/analysis_server/tool/lsp_spec/README.md b/pkg/analysis_server/tool/lsp_spec/README.md
index bac9b69..cc61b66 100644
--- a/pkg/analysis_server/tool/lsp_spec/README.md
+++ b/pkg/analysis_server/tool/lsp_spec/README.md
@@ -38,6 +38,7 @@
 - `dart.lineLength`: The number of characters the formatter should wrap code at. If unspecified, code will be wrapped at `80` characters.
 - `dart.completeFunctionCalls`: Completes functions/methods with their required parameters.
 - `dart.showTodos`: Whether to generate diagnostics for TODO comments. If unspecified, diagnostics will not be generated.
+- `dart.renameFilesWithClasses`: When set to `"always"`, will rename files when classes are renamed if the filename matches the class name (but in snake_form). When set to `"prompt"`, a prompt will be shown on each class rename asking to confirm the file rename. Otherwise, files will not be renamed. Renames are performed using LSP's ResourceOperation edits - that means the rename is simply included in the resulting `WorkspaceEdit` and must be handled by the client.
 
 ## Method Status
 
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 5698c0b..0aecc40 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -861,7 +861,9 @@
   } else if (type is MapType) {
     buffer.write('($valueCode is Map');
     if (fullDartType != 'Object?') {
-      buffer..write(' && (')..write('$valueCode.keys.every((item) => ');
+      buffer
+        ..write(' && (')
+        ..write('$valueCode.keys.every((item) => ');
       _writeTypeCheckCondition(
           buffer, interface, 'item', type.indexType, reporter);
       buffer.write('&& $valueCode.values.every((item) => ');
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 337ad88..d2b2f22 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,4 +1,7 @@
-## 2.1.0-dev
+## 2.2.0
+* Improvements in constructors tear-off implementation.
+
+## 2.1.0
 * Changed `AnalysisResult.path` to be non-nullable.
 * Changed `ParsedLibraryResult.units` to be non-nullable.
 * Changed `ResolvedLibraryResult.element` to be non-nullable.
@@ -14,6 +17,7 @@
 * Added `DartType.alias` with information about instantiated type alias.
   The type alias element and arguments are present or absent together.
 * Deprecated `DartType.aliasElement` and `DartType.aliasArguments`.
+* Updated the current language version to `2.15`.
 
 ## 2.0.0
 * Removed deprecated `Scope.lookup2()`.
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 15022fc..d8469f2 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -323,9 +323,22 @@
   /// Returns a newly created function body consisting of an expression.
   /// The [keyword] can be `null` if the function body is not an async function
   /// body.
+  @Deprecated("Use expressionFunctionBody2, with new 'star' parameter")
   ExpressionFunctionBody expressionFunctionBody(Token? keyword,
       Token functionDefinition, Expression expression, Token? semicolon);
 
+  /// Returns a newly created function body consisting of an expression.
+  /// The [keyword] can be `null` if the function body is not an async function
+  /// body. The [star] can be `null` if there is no star following the keyword
+  /// (and must be `null` if there is no keyword).
+  ExpressionFunctionBody expressionFunctionBody2({
+    Token? keyword,
+    Token? star,
+    required Token functionDefinition,
+    required Expression expression,
+    Token? semicolon,
+  });
+
   /// Returns a newly created expression statement.
   ExpressionStatement expressionStatement(
       Expression expression, Token? semicolon);
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 77c23d9..f34732b 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1300,6 +1300,10 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class LibraryElement implements _ExistingElement {
+  /// Returns a list containing all of the extension elements accessible within
+  /// this library.
+  List<ExtensionElement> get accessibleExtensions;
+
   /// Return the compilation unit that defines this library.
   CompilationUnitElement get definingCompilationUnit;
 
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 0a2b2c8..d11b587 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -93,9 +93,14 @@
   CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
   CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE,
   CompileTimeErrorCode.CAST_TO_NON_TYPE,
+  CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER,
+  CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER,
+  CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER,
   CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
+  CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
+  CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER,
   CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD,
   CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
   CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD,
@@ -197,6 +202,7 @@
   CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE,
   CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND,
   CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
+  CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
   CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES,
   CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
   CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
@@ -264,6 +270,7 @@
   CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR,
   CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED,
   CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
+  CompileTimeErrorCode.MACRO_EXECUTION_ERROR,
   CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE,
   CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS,
   CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS,
@@ -402,6 +409,7 @@
   CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT,
   CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY,
   CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
+  CompileTimeErrorCode.TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
   CompileTimeErrorCode.THROW_OF_INVALID_TYPE,
   CompileTimeErrorCode.TOP_LEVEL_CYCLE,
   CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
@@ -415,7 +423,6 @@
   CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
   CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE,
   CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE,
-  CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE,
   CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION,
   CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR,
   CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD,
@@ -591,6 +598,7 @@
   HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT,
   HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE,
   HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT,
+  HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS,
   HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT,
   HintCode.SDK_VERSION_EXTENSION_METHODS,
   HintCode.SDK_VERSION_GT_GT_GT_OPERATOR,
@@ -604,6 +612,7 @@
   HintCode.TYPE_CHECK_IS_NOT_NULL,
   HintCode.TYPE_CHECK_IS_NULL,
   HintCode.UNDEFINED_HIDDEN_NAME,
+  HintCode.UNDEFINED_REFERENCED_PARAMETER,
   HintCode.UNDEFINED_SHOWN_NAME,
   HintCode.UNIGNORABLE_IGNORE,
   HintCode.UNNECESSARY_CAST,
@@ -881,6 +890,9 @@
   StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
   StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION,
   TodoCode.TODO,
+  TodoCode.FIXME,
+  TodoCode.HACK,
+  TodoCode.UNDONE,
 ];
 
 /// The lazy initialized map from [ErrorCode.uniqueName] to the [ErrorCode]
diff --git a/pkg/analyzer/lib/instrumentation/service.dart b/pkg/analyzer/lib/instrumentation/service.dart
index 617644f..4269a99 100644
--- a/pkg/analyzer/lib/instrumentation/service.dart
+++ b/pkg/analyzer/lib/instrumentation/service.dart
@@ -89,6 +89,6 @@
   InstrumentationServiceAttachment.string({
     required String id,
     required String value,
-  })   : id = id,
+  })  : id = id,
         stringValue = value;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 7927eca..38d0316 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -334,8 +334,12 @@
     }
 
     // Stop infinite recursion via links.
-    var canonicalFolderPath = folder.resolveSymbolicLinksSync().path;
-    if (!visited.add(canonicalFolderPath)) {
+    try {
+      var canonicalFolderPath = folder.resolveSymbolicLinksSync().path;
+      if (!visited.add(canonicalFolderPath)) {
+        return;
+      }
+    } on FileSystemException {
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_root.dart b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
index 068948f..58a4b93 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_root.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
@@ -96,13 +96,25 @@
     Folder folder,
     String includedPath,
   ) sync* {
-    for (Resource resource in folder.getChildren()) {
+    List<Resource> children;
+    try {
+      children = folder.getChildren();
+    } on FileSystemException {
+      return;
+    }
+
+    for (Resource resource in children) {
       String path = resource.path;
       if (!_isExcluded(path, includedPath)) {
         if (resource is File) {
           yield path;
         } else if (resource is Folder) {
-          var canonicalPath = resource.resolveSymbolicLinksSync().path;
+          String canonicalPath;
+          try {
+            canonicalPath = resource.resolveSymbolicLinksSync().path;
+          } on FileSystemException {
+            return;
+          }
           if (visited.add(canonicalPath)) {
             yield* _includedFilesInFolder(visited, resource, includedPath);
             visited.remove(canonicalPath);
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index ed78b2e..1063912 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 = 167;
+  static const int DATA_VERSION = 175;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
@@ -969,7 +969,7 @@
 
     FileState file = _fileTracker.getFile(path);
     RecordingErrorListener listener = RecordingErrorListener();
-    CompilationUnit unit = file.parse(listener);
+    CompilationUnit unit = file.parse(errorListener: listener);
     return ParsedUnitResultImpl(currentSession, file.path, file.uri,
         file.content, file.lineInfo, file.isPart, unit, listener.errors);
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
index af9d727..f03c6aa 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
@@ -44,12 +44,7 @@
   static final Version testingSdkLanguageVersion = Version.parse('2.10.0');
 
   /// The latest known language version.
-  static final Version latestSdkLanguageVersion = Version.parse('2.12.0');
-
-  static final FeatureSet latestWithNullSafety = ExperimentStatus.fromStrings2(
-    sdkLanguageVersion: latestSdkLanguageVersion,
-    flags: [],
-  );
+  static final Version latestSdkLanguageVersion = Version.parse('2.13.0');
 
   /// A map containing information about all known experimental flags.
   static final Map<String, ExperimentalFeature> knownFeatures = _knownFeatures;
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 7321d6b..f6dab0b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -8,7 +8,7 @@
 
 /// The current version of the Dart language (or, for non-stable releases, the
 /// version of the language currently in the process of being developed).
-const _currentVersion = '2.14.0';
+const _currentVersion = '2.15.0';
 
 /// A map containing information about all known experimental flags.
 final _knownFeatures = <String, ExperimentalFeature>{
@@ -110,7 +110,7 @@
     documentation:
         'Allow constructor tear-offs and explicit generic instantiations.',
     experimentalReleaseVersion: null,
-    releaseVersion: null,
+    releaseVersion: Version.parse('2.15.0'),
   );
 
   static final control_flow_collections = ExperimentalFeature(
@@ -246,7 +246,7 @@
   static const bool constant_update_2018 = true;
 
   /// Default state of the experiment "constructor-tearoffs"
-  static const bool constructor_tearoffs = false;
+  static const bool constructor_tearoffs = true;
 
   /// Default state of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
diff --git a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
index 6d38db2..5a9400a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
@@ -12,10 +12,6 @@
 import 'package:pub_semver/pub_semver.dart';
 
 class FeatureSetProvider {
-  /// This flag will be turned to `true` and inlined when we un-fork SDK,
-  /// so that the only SDK is the Null Safe SDK.
-  static const isNullSafetySdk = true;
-
   final Version _sdkLanguageVersion;
   final AllowedExperiments _allowedExperiments;
   final ResourceProvider _resourceProvider;
@@ -32,7 +28,7 @@
     required FeatureSet packageDefaultFeatureSet,
     required Version nonPackageDefaultLanguageVersion,
     required FeatureSet nonPackageDefaultFeatureSet,
-  })   : _sdkLanguageVersion = sdkLanguageVersion,
+  })  : _sdkLanguageVersion = sdkLanguageVersion,
         _allowedExperiments = allowedExperiments,
         _resourceProvider = resourceProvider,
         _packages = packages,
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index b21980f..0032336 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -398,10 +398,21 @@
   }
 
   /// Return a new parsed unresolved [CompilationUnit].
-  CompilationUnitImpl parse([AnalysisErrorListener? errorListener]) {
+  ///
+  /// If [content] is provided, then it is parsed instead, for example because
+  /// it contains macro-generated declarations, and we want to resolve the
+  /// unit with these declarations.
+  CompilationUnitImpl parse({
+    String? content,
+    AnalysisErrorListener? errorListener,
+  }) {
+    content ??= this.content;
     errorListener ??= AnalysisErrorListener.NULL_LISTENER;
     try {
-      return _parse(errorListener);
+      return _parse(
+        content: content,
+        errorListener: errorListener,
+      );
     } catch (exception, stackTrace) {
       throw CaughtExceptionWithFiles(
         exception,
@@ -579,7 +590,10 @@
     }
   }
 
-  CompilationUnitImpl _parse(AnalysisErrorListener errorListener) {
+  CompilationUnitImpl _parse({
+    required String content,
+    required AnalysisErrorListener errorListener,
+  }) {
     CharSequenceReader reader = CharSequenceReader(content);
     Scanner scanner = Scanner(source, reader, errorListener)
       ..configureFeatures(
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 140a1a7..1d20779 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -741,7 +741,7 @@
       recordRelationOffset(
           element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
     }
-    super.visitRedirectingConstructorInvocation(node);
+    node.argumentList.accept(this);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index af4dab4..b5bdf0d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/declared_variables.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/error/error.dart';
@@ -51,7 +50,6 @@
 
 var timerLibraryAnalyzer = Stopwatch();
 var timerLibraryAnalyzerConst = Stopwatch();
-var timerLibraryAnalyzerFreshUnit = Stopwatch();
 var timerLibraryAnalyzerResolve = Stopwatch();
 var timerLibraryAnalyzerSplicer = Stopwatch();
 var timerLibraryAnalyzerVerify = Stopwatch();
@@ -106,24 +104,9 @@
   /// Compute analysis results for all units of the library.
   Map<FileState, UnitAnalysisResult> analyzeSync() {
     timerLibraryAnalyzer.start();
-    Map<FileState, CompilationUnitImpl> units = {};
-
-    // Parse all files.
-    timerLibraryAnalyzerFreshUnit.start();
-    for (FileState file in _library.libraryFiles) {
-      units[file] = _parse(file);
-    }
-    timerLibraryAnalyzerFreshUnit.stop();
-
-    // Resolve URIs in directives to corresponding sources.
-    FeatureSet featureSet = units[_library]!.featureSet;
-    units.forEach((file, unit) {
-      _validateFeatureSet(unit, featureSet);
-      _resolveUriBasedDirectives(file, unit);
-    });
 
     timerLibraryAnalyzerResolve.start();
-    _resolveDirectives(units);
+    var units = _resolveDirectives();
 
     units.forEach((file, unit) {
       _resolveFile(file, unit);
@@ -190,7 +173,9 @@
     units.forEach((file, unit) {
       List<AnalysisError> errors = _getErrorListener(file).errors;
       errors = _filterIgnoredErrors(file, errors);
-      results[file] = UnitAnalysisResult(file, unit, errors);
+      var combinedResult = UnitAnalysisResult(file, unit, errors);
+      var writtenResult = _transformToWrittenCode(combinedResult);
+      results[file] = writtenResult;
     });
     timerLibraryAnalyzer.stop();
     return results;
@@ -352,10 +337,14 @@
     }
 
     // Run lints that handle specific node types.
-    unit.accept(LinterVisitor(
+    unit.accept(
+      LinterVisitor(
         nodeRegistry,
-        LinterExceptionHandler(_analysisOptions.propagateLinterExceptions)
-            .logException));
+        LinterExceptionHandler(
+          propagateExceptions: _analysisOptions.propagateLinterExceptions,
+        ).logException,
+      ),
+    );
   }
 
   void _computeVerifyErrors(FileState file, CompilationUnit unit) {
@@ -426,9 +415,8 @@
           unignorableCodes.contains(code.name.toUpperCase())) {
         return false;
       }
-
       int errorLine = lineInfo.getLocation(error.offset).lineNumber;
-      String name = code.name.toLowerCase();
+      String name = code.name;
       if (ignoreInfo.ignoredAt(name, errorLine)) {
         return true;
       }
@@ -437,8 +425,7 @@
       if (period >= 0) {
         uniqueName = uniqueName.substring(period + 1);
       }
-      return uniqueName != name &&
-          ignoreInfo.ignoredAt(uniqueName.toLowerCase(), errorLine);
+      return uniqueName != name && ignoreInfo.ignoredAt(uniqueName, errorLine);
     }
 
     return errors.where((AnalysisError e) => !isIgnored(e)).toList();
@@ -506,10 +493,16 @@
   }
 
   /// Return a new parsed unresolved [CompilationUnit].
-  CompilationUnitImpl _parse(FileState file) {
+  CompilationUnitImpl _parse(
+    FileState file,
+    CompilationUnitElementImpl element,
+  ) {
     AnalysisErrorListener errorListener = _getErrorListener(file);
-    String content = file.content;
-    var unit = file.parse(errorListener);
+    String content = element.macroGeneratedContent ?? file.content;
+    var unit = file.parse(
+      content: content,
+      errorListener: errorListener,
+    );
 
     LineInfo lineInfo = unit.lineInfo!;
     _fileToLineInfo[file] = lineInfo;
@@ -518,9 +511,17 @@
     return unit;
   }
 
-  void _resolveDirectives(Map<FileState, CompilationUnitImpl> units) {
-    var definingCompilationUnit = units[_library]!;
-    definingCompilationUnit.element = _libraryElement.definingCompilationUnit;
+  Map<FileState, CompilationUnitImpl> _resolveDirectives() {
+    var units = <FileState, CompilationUnitImpl>{};
+
+    var definingElement = _libraryElement.definingCompilationUnit;
+    definingElement as CompilationUnitElementImpl;
+
+    var definingUnit = _parse(_library, definingElement);
+    units[_library] = definingUnit;
+
+    definingUnit.element = definingElement;
+    _resolveUriBasedDirectives(_library, definingUnit);
 
     bool matchNodeElement(Directive node, Element element) {
       return node.keyword.offset == element.nameOffset;
@@ -533,7 +534,7 @@
     var directivesToResolve = <DirectiveImpl>[];
     int partDirectiveIndex = 0;
     int partElementIndex = 0;
-    for (Directive directive in definingCompilationUnit.directives) {
+    for (Directive directive in definingUnit.directives) {
       if (directive is LibraryDirectiveImpl) {
         libraryNameNode = directive.name;
         directivesToResolve.add(directive);
@@ -576,10 +577,15 @@
           continue;
         }
 
-        var partUnit = units[partFile]!;
         var partElement = _libraryElement.parts[partElementIndex++];
+        partElement as CompilationUnitElementImpl;
+
+        var partUnit = _parse(partFile, partElement);
+        units[partFile] = partUnit;
+
         partUnit.element = partElement;
         directive.element = partElement;
+        _resolveUriBasedDirectives(partFile, partUnit);
 
         Source? partSource = directive.uriSource;
         if (partSource == null) {
@@ -645,6 +651,7 @@
     }
 
     // TODO(scheglov) remove DirectiveResolver class
+    return units;
   }
 
   void _resolveFile(FileState file, CompilationUnit unit) {
@@ -678,7 +685,7 @@
       ),
     );
 
-    unit.accept(VariableResolverVisitor(
+    unit.accept(ScopeResolverVisitor(
         _libraryElement, source, _typeProvider, errorListener,
         nameScope: _libraryElement.scope));
 
@@ -686,8 +693,8 @@
     // Nothing for RESOLVED_UNIT9?
     // Nothing for RESOLVED_UNIT10?
 
-    FlowAnalysisHelper flowAnalysisHelper = FlowAnalysisHelper(_typeSystem,
-        _testingData != null, unit.featureSet.isEnabled(Feature.non_nullable));
+    FlowAnalysisHelper flowAnalysisHelper =
+        FlowAnalysisHelper(_typeSystem, _testingData != null, unit.featureSet);
     _testingData?.recordFlowAnalysisDataForTesting(
         file.uri, flowAnalysisHelper.dataForTesting!);
 
@@ -763,13 +770,74 @@
     return directive.uri.stringValue ?? '';
   }
 
-  /// Validate that the feature set associated with the compilation [unit] is
-  /// the same as the [expectedSet] of features supported by the library.
-  void _validateFeatureSet(CompilationUnit unit, FeatureSet expectedSet) {
-    FeatureSet actualSet = unit.featureSet;
-    if (actualSet != expectedSet) {
-      // TODO(brianwilkerson) Generate a diagnostic.
+  /// The [combined] result was resolved, potentially with macro-generated
+  /// declarations. But the result (at least the version that corresponds to
+  /// the original, user-written file) should not include these declarations.
+  /// So, we remove these nodes, and correspondingly patch the token sequence.
+  ///
+  /// Similarly, we transform any reported diagnostics.
+  UnitAnalysisResult _transformToWrittenCode(UnitAnalysisResult combined) {
+    var unit = combined.unit;
+    var unitElement = unit.declaredElement as CompilationUnitElementImpl;
+
+    var macroGenerationDataList = unitElement.macroGenerationDataList;
+    if (macroGenerationDataList == null) {
+      return combined;
     }
+
+    for (var macroData in macroGenerationDataList.reversed) {
+      var classIndex = macroData.classDeclarationIndex;
+      if (classIndex != null) {
+        var classDeclaration = unit.declarations
+            .whereType<ClassDeclaration>()
+            .toList()[classIndex];
+        // A macro-generated declaration is always the last one.
+        var removed = classDeclaration.members.removeAt(
+          classDeclaration.members.length - 1,
+        );
+        // Patch the token sequence.
+        var followToken = removed.endToken.next!;
+        removed.beginToken.previous!.next = followToken;
+        // Shift the following tokens.
+        for (var t = followToken; t != unit.endToken; t = t.next!) {
+          t.offset -= macroData.insertLength;
+        }
+      } else {
+        // TODO(scheglov) implement top-level
+        throw UnimplementedError();
+      }
+    }
+
+    var errors = <AnalysisError>[];
+    for (var combinedError in combined.errors) {
+      var offset = combinedError.offset;
+      var isInWritten = true;
+      for (var macroData in macroGenerationDataList.reversed) {
+        if (offset > macroData.insertOffset) {
+          if (offset < macroData.insertOffset + macroData.insertLength) {
+            isInWritten = false;
+            break;
+          } else {
+            offset -= macroData.insertLength;
+          }
+        }
+      }
+      if (isInWritten) {
+        errors.add(
+          AnalysisError.forValues(
+            combinedError.source,
+            offset,
+            combinedError.length,
+            combinedError.errorCode,
+            combinedError.message,
+            combinedError.correction,
+            contextMessages: combinedError.contextMessages,
+          ),
+        );
+      }
+    }
+
+    return UnitAnalysisResult(combined.file, unit, errors);
   }
 
   /// Check the given [directive] to see if the referenced source exists and
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 26339f7..f80a744 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -20,6 +20,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary2/bundle_reader.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/summary2/link.dart' as link2;
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/reference.dart';
@@ -109,10 +110,13 @@
 
       cycle.directDependencies.forEach(loadBundle);
 
-      var unitsInformativeBytes = <Uri, Uint8List>{};
+      var unitsInformativeData = <Uri, InformativeUnitData>{};
       for (var library in cycle.libraries) {
         for (var file in library.libraryFiles) {
-          unitsInformativeBytes[file.uri] = file.getInformativeBytes();
+          unitsInformativeData[file.uri] = InformativeUnitData(
+            content: file.content,
+            bytes: file.getInformativeBytes(),
+          );
         }
       }
 
@@ -191,7 +195,7 @@
         elementFactory.addBundle(
           BundleReader(
             elementFactory: elementFactory,
-            unitsInformativeBytes: unitsInformativeBytes,
+            unitsInformativeData: unitsInformativeData,
             resolutionBytes: resolutionBytes,
           ),
         );
@@ -240,7 +244,7 @@
           BundleReader(
             elementFactory: elementFactory,
             resolutionBytes: bundle.resolutionBytes,
-            unitsInformativeBytes: {},
+            unitsInformativeData: {},
           ),
         );
       }
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 74e302c..6dc30c4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -63,9 +63,7 @@
       if (member is ConstructorDeclaration) {
         signature.addInt(_kindConstructorDeclaration);
         _addTokens(member.beginToken, member.parameters.endToken);
-        if (member.constKeyword != null) {
-          _addNodeList(member.initializers);
-        }
+        _addNodeList(member.initializers);
         _addNode(member.redirectedConstructor);
       } else if (member is FieldDeclaration) {
         signature.addInt(_kindFieldDeclaration);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 9256fa8..af436f5 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/to_source_visitor.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
@@ -427,8 +428,10 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(asOperator)..add(_type);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(asOperator)
+    ..add(_type);
 
   @override
   Token get endToken => _type.endToken;
@@ -640,8 +643,10 @@
   Token get beginToken => _leftHandSide.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftHandSide)..add(operator)..add(_rightHandSide);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftHandSide)
+    ..add(operator)
+    ..add(_rightHandSide);
 
   @override
   Token get endToken => _rightHandSide.endToken;
@@ -760,24 +765,21 @@
 
   @override
   E? getProperty<E>(String name) {
-    if (_propertyMap == null) {
-      return null;
-    }
-    return _propertyMap![name] as E?;
+    return _propertyMap?[name] as E?;
   }
 
   @override
   void setProperty(String name, Object? value) {
     if (value == null) {
-      if (_propertyMap != null) {
-        _propertyMap!.remove(name);
-        if (_propertyMap!.isEmpty) {
+      final propertyMap = _propertyMap;
+      if (propertyMap != null) {
+        propertyMap.remove(name);
+        if (propertyMap.isEmpty) {
           _propertyMap = null;
         }
       }
     } else {
-      _propertyMap ??= HashMap<String, Object>();
-      _propertyMap![name] = value;
+      (_propertyMap ??= HashMap<String, Object>())[name] = value;
     }
   }
 
@@ -840,8 +842,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(awaitKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(awaitKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -899,8 +902,10 @@
   Token get beginToken => _leftOperand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftOperand)..add(operator)..add(_rightOperand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftOperand)
+    ..add(operator)
+    ..add(_rightOperand);
 
   @override
   Token get endToken => _rightOperand.endToken;
@@ -975,8 +980,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(keyword)..add(star)..add(_block);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(keyword)
+    ..add(star)
+    ..add(_block);
 
   @override
   Token get endToken => _block.endToken;
@@ -1117,8 +1124,10 @@
   Token get beginToken => breakKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(breakKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(breakKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -1866,8 +1875,9 @@
   Token get beginToken => newKeyword ?? _identifier.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(newKeyword)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(newKeyword)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -1987,7 +1997,9 @@
   Iterable<SyntacticEntity> get childEntities {
     ChildEntities result = ChildEntities()..add(_scriptTag);
     if (_directivesAreBeforeDeclarations) {
-      result..addAll(_directives)..addAll(_declarations);
+      result
+        ..addAll(_directives)
+        ..addAll(_declarations);
     } else {
       result.addAll(sortedDirectivesAndDeclarations);
     }
@@ -2606,8 +2618,10 @@
   Token get beginToken => _type.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_type)..add(period)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_type)
+    ..add(period)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -2720,8 +2734,10 @@
   Token get beginToken => continueKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(continueKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(continueKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -2783,8 +2799,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(_identifier);
 
   @override
   LocalVariableElement? get declaredElement {
@@ -2885,8 +2903,10 @@
   Token get beginToken => _parameter.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_parameter)..add(separator)..add(_defaultValue);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_parameter)
+    ..add(separator)
+    ..add(_defaultValue);
 
   @override
   Token? get covariantKeyword => null;
@@ -3380,6 +3400,14 @@
   @override
   Token? keyword;
 
+  /// The star optionally following the 'async' or 'sync' keyword, or `null` if
+  /// there is wither no such keyword or no star.
+  ///
+  /// It is an error for an expression function body to feature the star, but
+  /// the parser will accept it.
+  @override
+  Token? star;
+
   /// The token introducing the expression that represents the body of the
   /// function.
   @override
@@ -3395,8 +3423,8 @@
   /// Initialize a newly created function body consisting of a block of
   /// statements. The [keyword] can be `null` if the function body is not an
   /// async function body.
-  ExpressionFunctionBodyImpl(
-      this.keyword, this.functionDefinition, this._expression, this.semicolon) {
+  ExpressionFunctionBodyImpl(this.keyword, this.star, this.functionDefinition,
+      this._expression, this.semicolon) {
     _becomeParentOf(_expression);
   }
 
@@ -3411,6 +3439,7 @@
   @override
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(keyword)
+    ..add(star)
     ..add(functionDefinition)
     ..add(_expression)
     ..add(semicolon);
@@ -3431,10 +3460,13 @@
   }
 
   @override
-  bool get isAsynchronous => keyword != null;
+  bool get isAsynchronous => keyword?.lexeme == Keyword.ASYNC.lexeme;
 
   @override
-  bool get isSynchronous => keyword == null;
+  bool get isGenerator => star != null;
+
+  @override
+  bool get isSynchronous => keyword?.lexeme != Keyword.ASYNC.lexeme;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) =>
@@ -3556,8 +3588,9 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken {
@@ -3608,8 +3641,9 @@
   Token get beginToken => extendsKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(extendsKeyword)..add(_superclass);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(extendsKeyword)
+    ..add(_superclass);
 
   @override
   Token get endToken => _superclass.endToken;
@@ -3889,8 +3923,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(staticKeyword)..add(_fieldList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(staticKeyword)
+    ..add(_fieldList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -4082,8 +4118,9 @@
   Token get beginToken => inKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(inKeyword)..add(_iterable);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(inKeyword)
+    ..add(_iterable);
 
   @override
   Token get endToken => _iterable.endToken;
@@ -4383,7 +4420,9 @@
       }
       result.add(parameter);
     }
-    return result..add(rightDelimiter)..add(rightParenthesis);
+    return result
+      ..add(rightDelimiter)
+      ..add(rightParenthesis);
   }
 
   @override
@@ -4858,8 +4897,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_typeParameters)..add(_parameters)..add(_body);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_typeParameters)
+    ..add(_parameters)
+    ..add(_body);
 
   @override
   Token get endToken {
@@ -4924,8 +4965,9 @@
   Token get beginToken => _function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_function)..add(_argumentList);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_function)
+    ..add(_argumentList);
 
   @override
   Token get endToken => _argumentList.endToken;
@@ -4979,8 +5021,9 @@
   Token get beginToken => function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(function)..add(typeArguments);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(function)
+    ..add(typeArguments);
 
   @override
   Token get endToken => typeArguments?.endToken ?? function.endToken;
@@ -5157,8 +5200,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_returnType)..add(identifier)..add(parameters);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_returnType)
+    ..add(identifier)
+    ..add(parameters);
 
   @override
   Token get endToken => question ?? _parameters.endToken;
@@ -6198,8 +6243,10 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(leftBracket)..add(_expression)..add(rightBracket);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(leftBracket)
+    ..add(_expression)
+    ..add(rightBracket);
 
   @override
   Token get endToken => rightBracket ?? _expression.endToken;
@@ -6452,8 +6499,9 @@
   Token get beginToken => _label.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_label)..add(colon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_label)
+    ..add(colon);
 
   @override
   Token get endToken => colon;
@@ -6500,8 +6548,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(libraryKeyword)..add(_name)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(libraryKeyword)
+    ..add(_name)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -6715,8 +6765,10 @@
   Token get beginToken => _key.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_key)..add(separator)..add(_value);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_key)
+    ..add(separator)
+    ..add(_value);
 
   @override
   Token get endToken => _value.endToken;
@@ -7203,8 +7255,9 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_expression);
 
   @override
   ParameterElement? get element {
@@ -7327,8 +7380,9 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -7381,8 +7435,10 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_stringLiteral)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_stringLiteral)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7602,7 +7658,9 @@
     } else {
       result.addAll(sortedCommentAndAnnotations);
     }
-    result..add(requiredKeyword)..add(covariantKeyword);
+    result
+      ..add(requiredKeyword)
+      ..add(covariantKeyword);
     return result;
   }
 
@@ -7818,8 +7876,10 @@
       : super(comment, metadata, partUri);
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(partKeyword)..add(_uri)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(partKeyword)
+    ..add(_uri)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7949,8 +8009,9 @@
   Token get beginToken => _operand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_operand)..add(operator);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_operand)
+    ..add(operator);
 
   @override
   Token get endToken => operator;
@@ -8022,8 +8083,10 @@
   Token get beginToken => _prefix.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_prefix)..add(period)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_prefix)
+    ..add(period)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -8106,8 +8169,9 @@
   Token get beginToken => operator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(operator)..add(_operand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(operator)
+    ..add(_operand);
 
   @override
   Token get endToken => _operand.endToken;
@@ -8189,8 +8253,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_target)..add(operator)..add(_propertyName);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_target)
+    ..add(operator)
+    ..add(_propertyName);
 
   @override
   Token get endToken => _propertyName.endToken;
@@ -8404,8 +8470,10 @@
   Token get beginToken => returnKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(returnKeyword)..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(returnKeyword)
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -8645,8 +8713,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(identifier);
 
   @override
   Token get endToken => identifier?.endToken ?? type!.endToken;
@@ -8697,6 +8767,15 @@
   @override
   List<DartType>? tearOffTypeArgumentTypes;
 
+  /// If this identifier is meant to be looked up in the enclosing scope, the
+  /// raw result the scope lookup, prior to figuring out whether a write or a
+  /// read context is intended, and prior to falling back on implicit `this` (if
+  /// appropriate).
+  ///
+  /// `null` if this identifier is not meant to be looked up in the enclosing
+  /// scope.
+  ScopeLookupResult? scopeLookupResult;
+
   /// Initialize a newly created identifier.
   SimpleIdentifierImpl(this.token);
 
@@ -8977,8 +9056,9 @@
   Token get beginToken => spreadOperator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(spreadOperator)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(spreadOperator)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -9640,8 +9720,9 @@
   Token get beginToken => throwKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(throwKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(throwKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken {
@@ -9698,8 +9779,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -9938,8 +10020,9 @@
     _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
   }
 
-  ChildEntities get _childEntities =>
-      ChildEntities()..add(constKeyword)..add(_typeArguments);
+  ChildEntities get _childEntities => ChildEntities()
+    ..add(constKeyword)
+    ..add(_typeArguments);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10010,7 +10093,7 @@
   Token? question;
 
   /// The type being named, or `null` if the AST structure has not been
-  /// resolved.
+  /// resolved, or if this is part of a [ConstructorReference].
   @override
   DartType? type;
 
@@ -10025,8 +10108,10 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_typeArguments)..add(question);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_typeArguments)
+    ..add(question);
 
   @override
   Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
@@ -10109,8 +10194,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(extendsKeyword)..add(_bound);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(extendsKeyword)
+    ..add(_bound);
 
   @override
   TypeParameterElement? get declaredElement =>
@@ -10326,8 +10413,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(equals)..add(_initializer);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(equals)
+    ..add(_initializer);
 
   @override
   VariableElement? get declaredElement =>
@@ -10519,8 +10608,9 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 029702e..bc7287e 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -413,8 +413,19 @@
   @override
   ExpressionFunctionBodyImpl expressionFunctionBody(Token? keyword,
           Token functionDefinition, Expression expression, Token? semicolon) =>
-      ExpressionFunctionBodyImpl(
-          keyword, functionDefinition, expression as ExpressionImpl, semicolon);
+      ExpressionFunctionBodyImpl(keyword, null, functionDefinition,
+          expression as ExpressionImpl, semicolon);
+
+  @override
+  ExpressionFunctionBodyImpl expressionFunctionBody2({
+    Token? keyword,
+    Token? star,
+    required Token functionDefinition,
+    required Expression expression,
+    Token? semicolon,
+  }) =>
+      ExpressionFunctionBodyImpl(keyword, star, functionDefinition,
+          expression as ExpressionImpl, semicolon);
 
   @override
   ExpressionStatementImpl expressionStatement(
@@ -640,7 +651,7 @@
   FunctionReferenceImpl functionReference(
           {required Expression function, TypeArgumentList? typeArguments}) =>
       FunctionReferenceImpl(function as ExpressionImpl,
-          typeArguments: typeArguments as TypeArgumentListImpl);
+          typeArguments: typeArguments as TypeArgumentListImpl?);
 
   @override
   FunctionTypeAliasImpl functionTypeAlias(
diff --git a/pkg/analyzer/lib/src/dart/ast/extensions.dart b/pkg/analyzer/lib/src/dart/ast/extensions.dart
index 3df0bb6..6ca554a 100644
--- a/pkg/analyzer/lib/src/dart/ast/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/ast/extensions.dart
@@ -6,6 +6,7 @@
 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/dart/element/element.dart';
 
 /// TODO(scheglov) https://github.com/dart-lang/sdk/issues/43608
 Element? _readElement(AstNode node) {
@@ -91,6 +92,13 @@
   }
 }
 
+extension FieldDeclarationExtension on FieldDeclaration {
+  /// Return the element of the first field.
+  FieldElementImpl get firstElement {
+    return fields.variables.first.declaredElement as FieldElementImpl;
+  }
+}
+
 extension FormalParameterExtension on FormalParameter {
   bool get isOfLocalFunction {
     return thisOrAncestorOfType<FunctionBody>() != null;
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 bbec62f..b5929ae 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -18,178 +18,69 @@
   /// visited nodes to the given [sink].
   ToSourceVisitor(this.sink);
 
-  /// Visit the given function [body], printing the [prefix] before if the body
-  /// is not empty.
-  @protected
-  void safelyVisitFunctionWithPrefix(String prefix, FunctionBody body) {
-    if (body is! EmptyFunctionBody) {
-      sink.write(prefix);
-    }
-    safelyVisitNode(body);
-  }
-
-  /// Safely visit the given [node].
-  @protected
-  void safelyVisitNode(AstNode? node) {
-    if (node != null) {
-      node.accept(this);
-    }
-  }
-
-  /// Print a list of [nodes] without any separation.
-  @protected
-  void safelyVisitNodeList(NodeList<AstNode> nodes) {
-    safelyVisitNodeListWithSeparator(nodes, "");
-  }
-
-  /// Print a list of [nodes], separated by the given [separator].
-  @protected
-  void safelyVisitNodeListWithSeparator(
-      NodeList<AstNode> nodes, String separator) {
-    int size = nodes.length;
-    for (int i = 0; i < size; i++) {
-      if (i > 0) {
-        sink.write(separator);
-      }
-      nodes[i].accept(this);
-    }
-  }
-
-  /// Print a list of [nodes], prefixed by the given [prefix] if the list is not
-  /// empty, and separated by the given [separator].
-  @protected
-  void safelyVisitNodeListWithSeparatorAndPrefix(
-      String prefix, NodeList<AstNode> nodes, String separator) {
-    int size = nodes.length;
-    if (size > 0) {
-      sink.write(prefix);
-      for (int i = 0; i < size; i++) {
-        if (i > 0) {
-          sink.write(separator);
-        }
-        nodes[i].accept(this);
-      }
-    }
-  }
-
-  /// Print a list of [nodes], separated by the given [separator], followed by
-  /// the given [suffix] if the list is not empty.
-  @protected
-  void safelyVisitNodeListWithSeparatorAndSuffix(
-      NodeList<AstNode> nodes, String separator, String suffix) {
-    int size = nodes.length;
-    if (size > 0) {
-      for (int i = 0; i < size; i++) {
-        if (i > 0) {
-          sink.write(separator);
-        }
-        nodes[i].accept(this);
-      }
-      sink.write(suffix);
-    }
-  }
-
-  /// Safely visit the given [node], printing the [prefix] before the node if it
-  /// is non-`null`.
-  @protected
-  void safelyVisitNodeWithPrefix(String prefix, AstNode? node) {
-    if (node != null) {
-      sink.write(prefix);
-      node.accept(this);
-    }
-  }
-
-  /// Safely visit the given [node], printing the [suffix] after the node if it
-  /// is non-`null`.
-  @protected
-  void safelyVisitNodeWithSuffix(AstNode? node, String suffix) {
-    if (node != null) {
-      node.accept(this);
-      sink.write(suffix);
-    }
-  }
-
-  /// Safely visit the given [token].
-  @protected
-  void safelyVisitToken(Token? token) {
-    if (token != null) {
-      sink.write(token.lexeme);
-    }
-  }
-
-  /// Safely visit the given [token], printing the [suffix] after the token if
-  /// it is non-`null`.
-  @protected
-  void safelyVisitTokenWithSuffix(Token? token, String suffix) {
-    if (token != null) {
-      sink.write(token.lexeme);
-      sink.write(suffix);
-    }
-  }
-
   @override
   void visitAdjacentStrings(AdjacentStrings node) {
-    safelyVisitNodeListWithSeparator(node.strings, " ");
+    _visitNodeList(node.strings, separator: ' ');
   }
 
   @override
   void visitAnnotation(Annotation node) {
     sink.write('@');
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeArguments);
-    safelyVisitNodeWithPrefix(".", node.constructorName);
-    safelyVisitNode(node.arguments);
+    _visitNode(node.name);
+    _visitNode(node.typeArguments);
+    _visitNode(node.constructorName, prefix: '.');
+    _visitNode(node.arguments);
   }
 
   @override
   void visitArgumentList(ArgumentList node) {
     sink.write('(');
-    safelyVisitNodeListWithSeparator(node.arguments, ", ");
+    _visitNodeList(node.arguments, separator: ', ');
     sink.write(')');
   }
 
   @override
   void visitAsExpression(AsExpression node) {
-    safelyVisitNode(node.expression);
-    sink.write(" as ");
-    safelyVisitNode(node.type);
+    _visitNode(node.expression);
+    sink.write(' as ');
+    _visitNode(node.type);
   }
 
   @override
   void visitAssertInitializer(AssertInitializer node) {
-    sink.write("assert (");
-    safelyVisitNode(node.condition);
+    sink.write('assert (');
+    _visitNode(node.condition);
     if (node.message != null) {
       sink.write(', ');
-      safelyVisitNode(node.message);
+      _visitNode(node.message);
     }
-    sink.write(");");
+    sink.write(');');
   }
 
   @override
   void visitAssertStatement(AssertStatement node) {
-    sink.write("assert (");
-    safelyVisitNode(node.condition);
+    sink.write('assert (');
+    _visitNode(node.condition);
     if (node.message != null) {
       sink.write(', ');
-      safelyVisitNode(node.message);
+      _visitNode(node.message);
     }
-    sink.write(");");
+    sink.write(');');
   }
 
   @override
   void visitAssignmentExpression(AssignmentExpression node) {
-    safelyVisitNode(node.leftHandSide);
+    _visitNode(node.leftHandSide);
     sink.write(' ');
     sink.write(node.operator.lexeme);
     sink.write(' ');
-    safelyVisitNode(node.rightHandSide);
+    _visitNode(node.rightHandSide);
   }
 
   @override
   void visitAwaitExpression(AwaitExpression node) {
-    sink.write("await ");
-    safelyVisitNode(node.expression);
+    sink.write('await ');
+    _visitNode(node.expression);
   }
 
   @override
@@ -204,7 +95,7 @@
   @override
   void visitBlock(Block node) {
     sink.write('{');
-    safelyVisitNodeListWithSeparator(node.statements, " ");
+    _visitNodeList(node.statements, separator: ' ');
     sink.write('}');
   }
 
@@ -218,7 +109,7 @@
       }
       sink.write(' ');
     }
-    safelyVisitNode(node.block);
+    _visitNode(node.block);
   }
 
   @override
@@ -228,63 +119,63 @@
 
   @override
   void visitBreakStatement(BreakStatement node) {
-    sink.write("break");
-    safelyVisitNodeWithPrefix(" ", node.label);
-    sink.write(";");
+    sink.write('break');
+    _visitNode(node.label, prefix: ' ');
+    sink.write(';');
   }
 
   @override
   void visitCascadeExpression(CascadeExpression node) {
-    safelyVisitNode(node.target);
-    safelyVisitNodeList(node.cascadeSections);
+    _visitNode(node.target);
+    _visitNodeList(node.cascadeSections);
   }
 
   @override
   void visitCatchClause(CatchClause node) {
-    safelyVisitNodeWithPrefix("on ", node.exceptionType);
+    _visitNode(node.exceptionType, prefix: 'on ');
     if (node.catchKeyword != null) {
       if (node.exceptionType != null) {
         sink.write(' ');
       }
-      sink.write("catch (");
-      safelyVisitNode(node.exceptionParameter);
-      safelyVisitNodeWithPrefix(", ", node.stackTraceParameter);
-      sink.write(") ");
+      sink.write('catch (');
+      _visitNode(node.exceptionParameter);
+      _visitNode(node.stackTraceParameter, prefix: ', ');
+      sink.write(') ');
     } else {
-      sink.write(" ");
+      sink.write(' ');
     }
-    safelyVisitNode(node.body);
+    _visitNode(node.body);
   }
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.abstractKeyword, " ");
-    sink.write("class ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNodeWithPrefix(" ", node.extendsClause);
-    safelyVisitNodeWithPrefix(" ", node.withClause);
-    safelyVisitNodeWithPrefix(" ", node.implementsClause);
-    sink.write(" {");
-    safelyVisitNodeListWithSeparator(node.members, " ");
-    sink.write("}");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.abstractKeyword, suffix: ' ');
+    sink.write('class ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    _visitNode(node.extendsClause, prefix: ' ');
+    _visitNode(node.withClause, prefix: ' ');
+    _visitNode(node.implementsClause, prefix: ' ');
+    sink.write(' {');
+    _visitNodeList(node.members, separator: ' ');
+    sink.write('}');
   }
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     if (node.abstractKeyword != null) {
-      sink.write("abstract ");
+      sink.write('abstract ');
     }
-    sink.write("class ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
-    sink.write(" = ");
-    safelyVisitNode(node.superclass);
-    safelyVisitNodeWithPrefix(" ", node.withClause);
-    safelyVisitNodeWithPrefix(" ", node.implementsClause);
-    sink.write(";");
+    sink.write('class ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    sink.write(' = ');
+    _visitNode(node.superclass);
+    _visitNode(node.withClause, prefix: ' ');
+    _visitNode(node.implementsClause, prefix: ' ');
+    sink.write(';');
   }
 
   @override
@@ -297,103 +188,103 @@
   void visitCompilationUnit(CompilationUnit node) {
     var scriptTag = node.scriptTag;
     NodeList<Directive> directives = node.directives;
-    safelyVisitNode(scriptTag);
-    String prefix = scriptTag == null ? "" : " ";
-    safelyVisitNodeListWithSeparatorAndPrefix(prefix, directives, " ");
-    prefix = scriptTag == null && directives.isEmpty ? "" : " ";
-    safelyVisitNodeListWithSeparatorAndPrefix(prefix, node.declarations, " ");
+    _visitNode(scriptTag);
+    String prefix = scriptTag == null ? '' : ' ';
+    _visitNodeList(directives, prefix: prefix, separator: ' ');
+    prefix = scriptTag == null && directives.isEmpty ? '' : ' ';
+    _visitNodeList(node.declarations, prefix: prefix, separator: ' ');
   }
 
   @override
   void visitConditionalExpression(ConditionalExpression node) {
-    safelyVisitNode(node.condition);
-    sink.write(" ? ");
-    safelyVisitNode(node.thenExpression);
-    sink.write(" : ");
-    safelyVisitNode(node.elseExpression);
+    _visitNode(node.condition);
+    sink.write(' ? ');
+    _visitNode(node.thenExpression);
+    sink.write(' : ');
+    _visitNode(node.elseExpression);
   }
 
   @override
   void visitConfiguration(Configuration node) {
     sink.write('if (');
-    safelyVisitNode(node.name);
-    safelyVisitNodeWithPrefix(" == ", node.value);
+    _visitNode(node.name);
+    _visitNode(node.value, prefix: ' == ');
     sink.write(') ');
-    safelyVisitNode(node.uri);
+    _visitNode(node.uri);
   }
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.externalKeyword, " ");
-    safelyVisitTokenWithSuffix(node.constKeyword, " ");
-    safelyVisitTokenWithSuffix(node.factoryKeyword, " ");
-    safelyVisitNode(node.returnType);
-    safelyVisitNodeWithPrefix(".", node.name);
-    safelyVisitNode(node.parameters);
-    safelyVisitNodeListWithSeparatorAndPrefix(" : ", node.initializers, ", ");
-    safelyVisitNodeWithPrefix(" = ", node.redirectedConstructor);
-    safelyVisitFunctionWithPrefix(" ", node.body);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.externalKeyword, suffix: ' ');
+    _visitToken(node.constKeyword, suffix: ' ');
+    _visitToken(node.factoryKeyword, suffix: ' ');
+    _visitNode(node.returnType);
+    _visitNode(node.name, prefix: '.');
+    _visitNode(node.parameters);
+    _visitNodeList(node.initializers, prefix: ' : ', separator: ', ');
+    _visitNode(node.redirectedConstructor, prefix: ' = ');
+    _visitFunctionBody(node.body);
   }
 
   @override
   void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
-    safelyVisitTokenWithSuffix(node.thisKeyword, ".");
-    safelyVisitNode(node.fieldName);
-    sink.write(" = ");
-    safelyVisitNode(node.expression);
+    _visitToken(node.thisKeyword, suffix: '.');
+    _visitNode(node.fieldName);
+    sink.write(' = ');
+    _visitNode(node.expression);
   }
 
   @override
   void visitConstructorName(ConstructorName node) {
-    safelyVisitNode(node.type);
-    safelyVisitNodeWithPrefix(".", node.name);
+    _visitNode(node.type);
+    _visitNode(node.name, prefix: '.');
   }
 
   @override
   void visitConstructorReference(ConstructorReference node) {
-    safelyVisitNode(node.constructorName);
+    _visitNode(node.constructorName);
   }
 
   @override
   void visitContinueStatement(ContinueStatement node) {
-    sink.write("continue");
-    safelyVisitNodeWithPrefix(" ", node.label);
-    sink.write(";");
+    sink.write('continue');
+    _visitNode(node.label, prefix: ' ');
+    sink.write(';');
   }
 
   @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.keyword, " ");
-    safelyVisitNodeWithSuffix(node.type, " ");
-    safelyVisitNode(node.identifier);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.type, suffix: ' ');
+    _visitNode(node.identifier);
   }
 
   @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
-    safelyVisitNode(node.parameter);
+    _visitNode(node.parameter);
     if (node.separator != null) {
-      if (node.separator!.lexeme != ":") {
-        sink.write(" ");
+      if (node.separator!.lexeme != ':') {
+        sink.write(' ');
       }
       sink.write(node.separator!.lexeme);
-      safelyVisitNodeWithPrefix(" ", node.defaultValue);
+      _visitNode(node.defaultValue, prefix: ' ');
     }
   }
 
   @override
   void visitDoStatement(DoStatement node) {
-    sink.write("do ");
-    safelyVisitNode(node.body);
-    sink.write(" while (");
-    safelyVisitNode(node.condition);
-    sink.write(");");
+    sink.write('do ');
+    _visitNode(node.body);
+    sink.write(' while (');
+    _visitNode(node.condition);
+    sink.write(');');
   }
 
   @override
   void visitDottedName(DottedName node) {
-    safelyVisitNodeListWithSeparator(node.components, ".");
+    _visitNodeList(node.components, separator: '.');
   }
 
   @override
@@ -413,26 +304,27 @@
 
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitNode(node.name);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitNode(node.name);
   }
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("enum ");
-    safelyVisitNode(node.name);
-    sink.write(" {");
-    safelyVisitNodeListWithSeparator(node.constants, ", ");
-    sink.write("}");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('enum ');
+    _visitNode(node.name);
+    sink.write(' {');
+    _visitNodeList(node.constants, separator: ', ');
+    sink.write('}');
   }
 
   @override
   void visitExportDirective(ExportDirective node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("export ");
-    safelyVisitNode(node.uri);
-    safelyVisitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('export ');
+    _visitNode(node.uri);
+    _visitNodeList(node.configurations, prefix: ' ', separator: ' ');
+    _visitNodeList(node.combinators, prefix: ' ', separator: ' ');
     sink.write(';');
   }
 
@@ -441,10 +333,13 @@
     var keyword = node.keyword;
     if (keyword != null) {
       sink.write(keyword.lexeme);
+      if (node.star != null) {
+        sink.write('*');
+      }
       sink.write(' ');
     }
     sink.write('${node.functionDefinition.lexeme} ');
-    safelyVisitNode(node.expression);
+    _visitNode(node.expression);
     if (node.semicolon != null) {
       sink.write(';');
     }
@@ -452,83 +347,83 @@
 
   @override
   void visitExpressionStatement(ExpressionStatement node) {
-    safelyVisitNode(node.expression);
+    _visitNode(node.expression);
     sink.write(';');
   }
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    sink.write("extends ");
-    safelyVisitNode(node.superclass);
+    sink.write('extends ');
+    _visitNode(node.superclass);
   }
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, ' ', ' ');
-    safelyVisitTokenWithSuffix(node.extensionKeyword, ' ');
-    safelyVisitTokenWithSuffix(node.typeKeyword, ' ');
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.extensionKeyword, suffix: ' ');
+    _visitToken(node.typeKeyword, suffix: ' ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
     sink.write(' ');
-    safelyVisitToken(node.onKeyword);
+    _visitToken(node.onKeyword);
     sink.write(' ');
-    safelyVisitNodeWithSuffix(node.extendedType, ' ');
-    safelyVisitToken(node.leftBracket);
-    safelyVisitNodeListWithSeparator(node.members, ' ');
-    safelyVisitToken(node.rightBracket);
+    _visitNode(node.extendedType, suffix: ' ');
+    _visitToken(node.leftBracket);
+    _visitNodeList(node.members, separator: ' ');
+    _visitToken(node.rightBracket);
   }
 
   @override
   void visitExtensionOverride(ExtensionOverride node) {
-    safelyVisitNode(node.extensionName);
-    safelyVisitNode(node.typeArguments);
-    safelyVisitNode(node.argumentList);
+    _visitNode(node.extensionName);
+    _visitNode(node.typeArguments);
+    _visitNode(node.argumentList);
   }
 
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.abstractKeyword, " ");
-    safelyVisitTokenWithSuffix(node.externalKeyword, " ");
-    safelyVisitTokenWithSuffix(node.staticKeyword, " ");
-    safelyVisitNode(node.fields);
-    sink.write(";");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.abstractKeyword, suffix: ' ');
+    _visitToken(node.externalKeyword, suffix: ' ');
+    _visitToken(node.staticKeyword, suffix: ' ');
+    _visitNode(node.fields);
+    sink.write(';');
   }
 
   @override
   void visitFieldFormalParameter(FieldFormalParameter node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, ' ', ' ');
-    safelyVisitTokenWithSuffix(node.requiredKeyword, " ");
-    safelyVisitTokenWithSuffix(node.covariantKeyword, ' ');
-    safelyVisitTokenWithSuffix(node.keyword, " ");
-    safelyVisitNodeWithSuffix(node.type, " ");
-    sink.write("this.");
-    safelyVisitNode(node.identifier);
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNode(node.parameters);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.requiredKeyword, suffix: ' ');
+    _visitToken(node.covariantKeyword, suffix: ' ');
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.type, suffix: ' ');
+    sink.write('this.');
+    _visitNode(node.identifier);
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
   }
 
   @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
-    safelyVisitNode(node.loopVariable);
+    _visitNode(node.loopVariable);
     sink.write(' in ');
-    safelyVisitNode(node.iterable);
+    _visitNode(node.iterable);
   }
 
   @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
-    safelyVisitNode(node.identifier);
+    _visitNode(node.identifier);
     sink.write(' in ');
-    safelyVisitNode(node.iterable);
+    _visitNode(node.iterable);
   }
 
   @override
   void visitForElement(ForElement node) {
-    safelyVisitTokenWithSuffix(node.awaitKeyword, ' ');
+    _visitToken(node.awaitKeyword, suffix: ' ');
     sink.write('for (');
-    safelyVisitNode(node.forLoopParts);
+    _visitNode(node.forLoopParts);
     sink.write(') ');
-    safelyVisitNode(node.body);
+    _visitNode(node.body);
   }
 
   @override
@@ -540,14 +435,14 @@
     for (int i = 0; i < size; i++) {
       FormalParameter parameter = parameters[i];
       if (i > 0) {
-        sink.write(", ");
+        sink.write(', ');
       }
       if (groupEnd == null && parameter is DefaultFormalParameter) {
         if (parameter.isNamed) {
-          groupEnd = "}";
+          groupEnd = '}';
           sink.write('{');
         } else {
-          groupEnd = "]";
+          groupEnd = ']';
           sink.write('[');
         }
       }
@@ -561,20 +456,20 @@
 
   @override
   void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
-    safelyVisitNode(node.variables);
+    _visitNode(node.variables);
     sink.write(';');
-    safelyVisitNodeWithPrefix(' ', node.condition);
+    _visitNode(node.condition, prefix: ' ');
     sink.write(';');
-    safelyVisitNodeListWithSeparatorAndPrefix(' ', node.updaters, ', ');
+    _visitNodeList(node.updaters, prefix: ' ', separator: ', ');
   }
 
   @override
   void visitForPartsWithExpression(ForPartsWithExpression node) {
-    safelyVisitNode(node.initialization);
+    _visitNode(node.initialization);
     sink.write(';');
-    safelyVisitNodeWithPrefix(' ', node.condition);
+    _visitNode(node.condition, prefix: ' ');
     sink.write(';');
-    safelyVisitNodeListWithSeparatorAndPrefix(" ", node.updaters, ', ');
+    _visitNodeList(node.updaters, prefix: ' ', separator: ', ');
   }
 
   @override
@@ -583,69 +478,66 @@
       sink.write('await ');
     }
     sink.write('for (');
-    safelyVisitNode(node.forLoopParts);
+    _visitNode(node.forLoopParts);
     sink.write(') ');
-    safelyVisitNode(node.body);
+    _visitNode(node.body);
   }
 
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.externalKeyword, " ");
-    safelyVisitNodeWithSuffix(node.returnType, " ");
-    safelyVisitTokenWithSuffix(node.propertyKeyword, " ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.functionExpression);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.externalKeyword, suffix: ' ');
+    _visitNode(node.returnType, suffix: ' ');
+    _visitToken(node.propertyKeyword, suffix: ' ');
+    _visitNode(node.name);
+    _visitNode(node.functionExpression);
   }
 
   @override
   void visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
-    safelyVisitNode(node.functionDeclaration);
+    _visitNode(node.functionDeclaration);
   }
 
   @override
   void visitFunctionExpression(FunctionExpression node) {
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNode(node.parameters);
-    if (node.body is! EmptyFunctionBody) {
-      sink.write(' ');
-    }
-    safelyVisitNode(node.body);
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
+    _visitFunctionBody(node.body);
   }
 
   @override
   void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
-    safelyVisitNode(node.function);
-    safelyVisitNode(node.typeArguments);
-    safelyVisitNode(node.argumentList);
+    _visitNode(node.function);
+    _visitNode(node.typeArguments);
+    _visitNode(node.argumentList);
   }
 
   @override
   void visitFunctionReference(FunctionReference node) {
-    safelyVisitNode(node.function);
-    safelyVisitNode(node.typeArguments);
+    _visitNode(node.function);
+    _visitNode(node.typeArguments);
   }
 
   @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("typedef ");
-    safelyVisitNodeWithSuffix(node.returnType, " ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNode(node.parameters);
-    sink.write(";");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('typedef ');
+    _visitNode(node.returnType, suffix: ' ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
+    sink.write(';');
   }
 
   @override
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, ' ', ' ');
-    safelyVisitTokenWithSuffix(node.requiredKeyword, ' ');
-    safelyVisitTokenWithSuffix(node.covariantKeyword, ' ');
-    safelyVisitNodeWithSuffix(node.returnType, " ");
-    safelyVisitNode(node.identifier);
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNode(node.parameters);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.requiredKeyword, suffix: ' ');
+    _visitToken(node.covariantKeyword, suffix: ' ');
+    _visitNode(node.returnType, suffix: ' ');
+    _visitNode(node.identifier);
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
     if (node.question != null) {
       sink.write('?');
     }
@@ -653,10 +545,10 @@
 
   @override
   void visitGenericFunctionType(GenericFunctionType node) {
-    safelyVisitNode(node.returnType);
+    _visitNode(node.returnType);
     sink.write(' Function');
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNode(node.parameters);
+    _visitNode(node.typeParameters);
+    _visitNode(node.parameters);
     if (node.question != null) {
       sink.write('?');
     }
@@ -664,75 +556,76 @@
 
   @override
   void visitGenericTypeAlias(GenericTypeAlias node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("typedef ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
-    sink.write(" = ");
-    safelyVisitNode(node.type);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('typedef ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    sink.write(' = ');
+    _visitNode(node.type);
   }
 
   @override
   void visitHideCombinator(HideCombinator node) {
-    sink.write("hide ");
-    safelyVisitNodeListWithSeparator(node.hiddenNames, ", ");
+    sink.write('hide ');
+    _visitNodeList(node.hiddenNames, separator: ', ');
   }
 
   @override
   void visitIfElement(IfElement node) {
     sink.write('if (');
-    safelyVisitNode(node.condition);
+    _visitNode(node.condition);
     sink.write(') ');
-    safelyVisitNode(node.thenElement);
-    safelyVisitNodeWithPrefix(' else ', node.elseElement);
+    _visitNode(node.thenElement);
+    _visitNode(node.elseElement, prefix: ' else ');
   }
 
   @override
   void visitIfStatement(IfStatement node) {
-    sink.write("if (");
-    safelyVisitNode(node.condition);
-    sink.write(") ");
-    safelyVisitNode(node.thenStatement);
-    safelyVisitNodeWithPrefix(" else ", node.elseStatement);
+    sink.write('if (');
+    _visitNode(node.condition);
+    sink.write(') ');
+    _visitNode(node.thenStatement);
+    _visitNode(node.elseStatement, prefix: ' else ');
   }
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    sink.write("implements ");
-    safelyVisitNodeListWithSeparator(node.interfaces, ", ");
+    sink.write('implements ');
+    _visitNodeList(node.interfaces, separator: ', ');
   }
 
   @override
   void visitImportDirective(ImportDirective node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("import ");
-    safelyVisitNode(node.uri);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('import ');
+    _visitNode(node.uri);
+    _visitNodeList(node.configurations, prefix: ' ', separator: ' ');
     if (node.deferredKeyword != null) {
-      sink.write(" deferred");
+      sink.write(' deferred');
     }
-    safelyVisitNodeWithPrefix(" as ", node.prefix);
-    safelyVisitNodeListWithSeparatorAndPrefix(" ", node.combinators, " ");
+    _visitNode(node.prefix, prefix: ' as ');
+    _visitNodeList(node.combinators, prefix: ' ', separator: ' ');
     sink.write(';');
   }
 
   @override
   void visitIndexExpression(IndexExpression node) {
     if (node.isCascaded) {
-      safelyVisitToken(node.period);
+      _visitToken(node.period);
     } else {
-      safelyVisitNode(node.target);
+      _visitNode(node.target);
     }
-    safelyVisitToken(node.question);
-    safelyVisitToken(node.leftBracket);
-    safelyVisitNode(node.index);
-    safelyVisitToken(node.rightBracket);
+    _visitToken(node.question);
+    _visitToken(node.leftBracket);
+    _visitNode(node.index);
+    _visitToken(node.rightBracket);
   }
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    safelyVisitTokenWithSuffix(node.keyword, " ");
-    safelyVisitNode(node.constructorName);
-    safelyVisitNode(node.argumentList);
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.constructorName);
+    _visitNode(node.argumentList);
   }
 
   @override
@@ -743,12 +636,12 @@
   @override
   void visitInterpolationExpression(InterpolationExpression node) {
     if (node.rightBracket != null) {
-      sink.write("\${");
-      safelyVisitNode(node.expression);
-      sink.write("}");
+      sink.write('\${');
+      _visitNode(node.expression);
+      sink.write('}');
     } else {
-      sink.write("\$");
-      safelyVisitNode(node.expression);
+      sink.write('\$');
+      _visitNode(node.expression);
     }
   }
 
@@ -759,32 +652,32 @@
 
   @override
   void visitIsExpression(IsExpression node) {
-    safelyVisitNode(node.expression);
+    _visitNode(node.expression);
     if (node.notOperator == null) {
-      sink.write(" is ");
+      sink.write(' is ');
     } else {
-      sink.write(" is! ");
+      sink.write(' is! ');
     }
-    safelyVisitNode(node.type);
+    _visitNode(node.type);
   }
 
   @override
   void visitLabel(Label node) {
-    safelyVisitNode(node.label);
-    sink.write(":");
+    _visitNode(node.label);
+    sink.write(':');
   }
 
   @override
   void visitLabeledStatement(LabeledStatement node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
-    safelyVisitNode(node.statement);
+    _visitNodeList(node.labels, separator: ' ', suffix: ' ');
+    _visitNode(node.statement);
   }
 
   @override
   void visitLibraryDirective(LibraryDirective node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("library ");
-    safelyVisitNode(node.name);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('library ');
+    _visitNode(node.name);
     sink.write(';');
   }
 
@@ -795,34 +688,34 @@
 
   @override
   void visitListLiteral(ListLiteral node) {
-    safelyVisitTokenWithSuffix(node.constKeyword, ' ');
-    safelyVisitNode(node.typeArguments);
+    _visitToken(node.constKeyword, suffix: ' ');
+    _visitNode(node.typeArguments);
     sink.write('[');
-    safelyVisitNodeListWithSeparator(node.elements, ', ');
+    _visitNodeList(node.elements, separator: ', ');
     sink.write(']');
   }
 
   @override
   void visitMapLiteralEntry(MapLiteralEntry node) {
-    safelyVisitNode(node.key);
-    sink.write(" : ");
-    safelyVisitNode(node.value);
+    _visitNode(node.key);
+    sink.write(' : ');
+    _visitNode(node.value);
   }
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.externalKeyword, " ");
-    safelyVisitTokenWithSuffix(node.modifierKeyword, " ");
-    safelyVisitNodeWithSuffix(node.returnType, " ");
-    safelyVisitTokenWithSuffix(node.propertyKeyword, " ");
-    safelyVisitTokenWithSuffix(node.operatorKeyword, " ");
-    safelyVisitNode(node.name);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.externalKeyword, suffix: ' ');
+    _visitToken(node.modifierKeyword, suffix: ' ');
+    _visitNode(node.returnType, suffix: ' ');
+    _visitToken(node.propertyKeyword, suffix: ' ');
+    _visitToken(node.operatorKeyword, suffix: ' ');
+    _visitNode(node.name);
     if (!node.isGetter) {
-      safelyVisitNode(node.typeParameters);
-      safelyVisitNode(node.parameters);
+      _visitNode(node.typeParameters);
+      _visitNode(node.parameters);
     }
-    safelyVisitFunctionWithPrefix(" ", node.body);
+    _visitFunctionBody(node.body);
   }
 
   @override
@@ -835,75 +728,75 @@
         sink.write(node.operator!.lexeme);
       }
     }
-    safelyVisitNode(node.methodName);
-    safelyVisitNode(node.typeArguments);
-    safelyVisitNode(node.argumentList);
+    _visitNode(node.methodName);
+    _visitNode(node.typeArguments);
+    _visitNode(node.argumentList);
   }
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("mixin ");
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeParameters);
-    safelyVisitNodeWithPrefix(" ", node.onClause);
-    safelyVisitNodeWithPrefix(" ", node.implementsClause);
-    sink.write(" {");
-    safelyVisitNodeListWithSeparator(node.members, " ");
-    sink.write("}");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('mixin ');
+    _visitNode(node.name);
+    _visitNode(node.typeParameters);
+    _visitNode(node.onClause, prefix: ' ');
+    _visitNode(node.implementsClause, prefix: ' ');
+    sink.write(' {');
+    _visitNodeList(node.members, separator: ' ');
+    sink.write('}');
   }
 
   @override
   void visitNamedExpression(NamedExpression node) {
-    safelyVisitNode(node.name);
-    safelyVisitNodeWithPrefix(" ", node.expression);
+    _visitNode(node.name);
+    _visitNode(node.expression, prefix: ' ');
   }
 
   @override
   void visitNativeClause(NativeClause node) {
-    sink.write("native ");
-    safelyVisitNode(node.name);
+    sink.write('native ');
+    _visitNode(node.name);
   }
 
   @override
   void visitNativeFunctionBody(NativeFunctionBody node) {
-    sink.write("native ");
-    safelyVisitNode(node.stringLiteral);
+    sink.write('native ');
+    _visitNode(node.stringLiteral);
     sink.write(';');
   }
 
   @override
   void visitNullLiteral(NullLiteral node) {
-    sink.write("null");
+    sink.write('null');
   }
 
   @override
   void visitOnClause(OnClause node) {
     sink.write('on ');
-    safelyVisitNodeListWithSeparator(node.superclassConstraints, ", ");
+    _visitNodeList(node.superclassConstraints, separator: ', ');
   }
 
   @override
   void visitParenthesizedExpression(ParenthesizedExpression node) {
     sink.write('(');
-    safelyVisitNode(node.expression);
+    _visitNode(node.expression);
     sink.write(')');
   }
 
   @override
   void visitPartDirective(PartDirective node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("part ");
-    safelyVisitNode(node.uri);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('part ');
+    _visitNode(node.uri);
     sink.write(';');
   }
 
   @override
   void visitPartOfDirective(PartOfDirective node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    sink.write("part of ");
-    safelyVisitNode(node.libraryName);
-    safelyVisitNode(node.uri);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    sink.write('part of ');
+    _visitNode(node.libraryName);
+    _visitNode(node.uri);
     sink.write(';');
   }
 
@@ -915,9 +808,9 @@
 
   @override
   void visitPrefixedIdentifier(PrefixedIdentifier node) {
-    safelyVisitNode(node.prefix);
+    _visitNode(node.prefix);
     sink.write('.');
-    safelyVisitNode(node.identifier);
+    _visitNode(node.identifier);
   }
 
   @override
@@ -931,34 +824,34 @@
     if (node.isCascaded) {
       sink.write(node.operator.lexeme);
     } else {
-      safelyVisitNode(node.target);
+      _visitNode(node.target);
       sink.write(node.operator.lexeme);
     }
-    safelyVisitNode(node.propertyName);
+    _visitNode(node.propertyName);
   }
 
   @override
   void visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
-    sink.write("this");
-    safelyVisitNodeWithPrefix(".", node.constructorName);
-    safelyVisitNode(node.argumentList);
+    sink.write('this');
+    _visitNode(node.constructorName, prefix: '.');
+    _visitNode(node.argumentList);
   }
 
   @override
   void visitRethrowExpression(RethrowExpression node) {
-    sink.write("rethrow");
+    sink.write('rethrow');
   }
 
   @override
   void visitReturnStatement(ReturnStatement node) {
     var expression = node.expression;
     if (expression == null) {
-      sink.write("return;");
+      sink.write('return;');
     } else {
-      sink.write("return ");
+      sink.write('return ');
       expression.accept(this);
-      sink.write(";");
+      sink.write(';');
     }
   }
 
@@ -969,30 +862,30 @@
 
   @override
   void visitSetOrMapLiteral(SetOrMapLiteral node) {
-    safelyVisitTokenWithSuffix(node.constKeyword, ' ');
-    safelyVisitNode(node.typeArguments);
+    _visitToken(node.constKeyword, suffix: ' ');
+    _visitNode(node.typeArguments);
     sink.write('{');
-    safelyVisitNodeListWithSeparator(node.elements, ', ');
+    _visitNodeList(node.elements, separator: ', ');
     sink.write('}');
   }
 
   @override
   void visitShowCombinator(ShowCombinator node) {
-    sink.write("show ");
-    safelyVisitNodeListWithSeparator(node.shownNames, ", ");
+    sink.write('show ');
+    _visitNodeList(node.shownNames, separator: ', ');
   }
 
   @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, ' ', ' ');
-    safelyVisitTokenWithSuffix(node.requiredKeyword, ' ');
-    safelyVisitTokenWithSuffix(node.covariantKeyword, ' ');
-    safelyVisitTokenWithSuffix(node.keyword, " ");
-    safelyVisitNode(node.type);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.requiredKeyword, suffix: ' ');
+    _visitToken(node.covariantKeyword, suffix: ' ');
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.type);
     if (node.type != null && node.identifier != null) {
       sink.write(' ');
     }
-    safelyVisitNode(node.identifier);
+    _visitNode(node.identifier);
   }
 
   @override
@@ -1008,58 +901,58 @@
   @override
   void visitSpreadElement(SpreadElement node) {
     sink.write(node.spreadOperator.lexeme);
-    safelyVisitNode(node.expression);
+    _visitNode(node.expression);
   }
 
   @override
   void visitStringInterpolation(StringInterpolation node) {
-    safelyVisitNodeList(node.elements);
+    _visitNodeList(node.elements);
   }
 
   @override
   void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    sink.write("super");
-    safelyVisitNodeWithPrefix(".", node.constructorName);
-    safelyVisitNode(node.argumentList);
+    sink.write('super');
+    _visitNode(node.constructorName, prefix: '.');
+    _visitNode(node.argumentList);
   }
 
   @override
   void visitSuperExpression(SuperExpression node) {
-    sink.write("super");
+    sink.write('super');
   }
 
   @override
   void visitSwitchCase(SwitchCase node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
-    sink.write("case ");
-    safelyVisitNode(node.expression);
-    sink.write(": ");
-    safelyVisitNodeListWithSeparator(node.statements, " ");
+    _visitNodeList(node.labels, separator: ' ', suffix: ' ');
+    sink.write('case ');
+    _visitNode(node.expression);
+    sink.write(': ');
+    _visitNodeList(node.statements, separator: ' ');
   }
 
   @override
   void visitSwitchDefault(SwitchDefault node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.labels, " ", " ");
-    sink.write("default: ");
-    safelyVisitNodeListWithSeparator(node.statements, " ");
+    _visitNodeList(node.labels, separator: ' ', suffix: ' ');
+    sink.write('default: ');
+    _visitNodeList(node.statements, separator: ' ');
   }
 
   @override
   void visitSwitchStatement(SwitchStatement node) {
-    sink.write("switch (");
-    safelyVisitNode(node.expression);
-    sink.write(") {");
-    safelyVisitNodeListWithSeparator(node.members, " ");
-    sink.write("}");
+    sink.write('switch (');
+    _visitNode(node.expression);
+    sink.write(') {');
+    _visitNodeList(node.members, separator: ' ');
+    sink.write('}');
   }
 
   @override
   void visitSymbolLiteral(SymbolLiteral node) {
-    sink.write("#");
+    sink.write('#');
     List<Token> components = node.components;
     for (int i = 0; i < components.length; i++) {
       if (i > 0) {
-        sink.write(".");
+        sink.write('.');
       }
       sink.write(components[i].lexeme);
     }
@@ -1067,45 +960,45 @@
 
   @override
   void visitThisExpression(ThisExpression node) {
-    sink.write("this");
+    sink.write('this');
   }
 
   @override
   void visitThrowExpression(ThrowExpression node) {
-    sink.write("throw ");
-    safelyVisitNode(node.expression);
+    sink.write('throw ');
+    _visitNode(node.expression);
   }
 
   @override
   void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
-    safelyVisitTokenWithSuffix(node.externalKeyword, " ");
-    safelyVisitNodeWithSuffix(node.variables, ";");
+    _visitToken(node.externalKeyword, suffix: ' ');
+    _visitNode(node.variables, suffix: ';');
   }
 
   @override
   void visitTryStatement(TryStatement node) {
-    sink.write("try ");
-    safelyVisitNode(node.body);
-    safelyVisitNodeListWithSeparatorAndPrefix(" ", node.catchClauses, " ");
-    safelyVisitNodeWithPrefix(" finally ", node.finallyBlock);
+    sink.write('try ');
+    _visitNode(node.body);
+    _visitNodeList(node.catchClauses, prefix: ' ', separator: ' ');
+    _visitNode(node.finallyBlock, prefix: ' finally ');
   }
 
   @override
   void visitTypeArgumentList(TypeArgumentList node) {
     sink.write('<');
-    safelyVisitNodeListWithSeparator(node.arguments, ", ");
+    _visitNodeList(node.arguments, separator: ', ');
     sink.write('>');
   }
 
   @override
   void visitTypeLiteral(TypeLiteral node) {
-    safelyVisitNode(node.typeName);
+    _visitNode(node.typeName);
   }
 
   @override
   void visitTypeName(TypeName node) {
-    safelyVisitNode(node.name);
-    safelyVisitNode(node.typeArguments);
+    _visitNode(node.name);
+    _visitNode(node.typeArguments);
     if (node.question != null) {
       sink.write('?');
     }
@@ -1113,69 +1006,114 @@
 
   @override
   void visitTypeParameter(TypeParameter node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     // TODO (kallentu) : Clean up TypeParameterImpl casting once variance is
     // added to the interface.
     var varianceKeyword = (node as TypeParameterImpl).varianceKeyword;
     if (varianceKeyword != null) {
       sink.write(varianceKeyword.lexeme + ' ');
     }
-    safelyVisitNode(node.name);
-    safelyVisitNodeWithPrefix(" extends ", node.bound);
+    _visitNode(node.name);
+    _visitNode(node.bound, prefix: ' extends ');
   }
 
   @override
   void visitTypeParameterList(TypeParameterList node) {
     sink.write('<');
-    safelyVisitNodeListWithSeparator(node.typeParameters, ", ");
+    _visitNodeList(node.typeParameters, separator: ', ');
     sink.write('>');
   }
 
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitNode(node.name);
-    safelyVisitNodeWithPrefix(" = ", node.initializer);
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitNode(node.name);
+    _visitNode(node.initializer, prefix: ' = ');
   }
 
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
-    safelyVisitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
-    safelyVisitTokenWithSuffix(node.lateKeyword, " ");
-    safelyVisitTokenWithSuffix(node.keyword, " ");
-    safelyVisitNodeWithSuffix(node.type, " ");
-    safelyVisitNodeListWithSeparator(node.variables, ", ");
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.lateKeyword, suffix: ' ');
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.type, suffix: ' ');
+    _visitNodeList(node.variables, separator: ', ');
   }
 
   @override
   void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
-    safelyVisitNode(node.variables);
-    sink.write(";");
+    _visitNode(node.variables);
+    sink.write(';');
   }
 
   @override
   void visitWhileStatement(WhileStatement node) {
-    sink.write("while (");
-    safelyVisitNode(node.condition);
-    sink.write(") ");
-    safelyVisitNode(node.body);
+    sink.write('while (');
+    _visitNode(node.condition);
+    sink.write(') ');
+    _visitNode(node.body);
   }
 
   @override
   void visitWithClause(WithClause node) {
-    sink.write("with ");
-    safelyVisitNodeListWithSeparator(node.mixinTypes, ", ");
+    sink.write('with ');
+    _visitNodeList(node.mixinTypes, separator: ', ');
   }
 
   @override
   void visitYieldStatement(YieldStatement node) {
     if (node.star != null) {
-      sink.write("yield* ");
+      sink.write('yield* ');
     } else {
-      sink.write("yield ");
+      sink.write('yield ');
     }
-    safelyVisitNode(node.expression);
-    sink.write(";");
+    _visitNode(node.expression);
+    sink.write(';');
+  }
+
+  /// Visit the given function [body], printing a prefix before if the body
+  /// is not empty.
+  void _visitFunctionBody(FunctionBody body) {
+    if (body is! EmptyFunctionBody) {
+      sink.write(' ');
+    }
+    _visitNode(body);
+  }
+
+  /// Print the given [node], printing the [prefix] before the node,
+  /// and [suffix] after the node, if it is non-`null`.
+  void _visitNode(AstNode? node, {String prefix = '', String suffix = ''}) {
+    if (node != null) {
+      sink.write(prefix);
+      node.accept(this);
+      sink.write(suffix);
+    }
+  }
+
+  /// Print a list of [nodes], separated by the given [separator]; if the list
+  /// is not empty print [prefix] before the first node, and [suffix] after
+  /// the last node.
+  void _visitNodeList(List<AstNode> nodes,
+      {String prefix = '', String separator = '', String suffix = ''}) {
+    var length = nodes.length;
+    if (length > 0) {
+      sink.write(prefix);
+      for (int i = 0; i < length; i++) {
+        if (i > 0) {
+          sink.write(separator);
+        }
+        nodes[i].accept(this);
+      }
+      sink.write(suffix);
+    }
+  }
+
+  /// Print the given [token].
+  void _visitToken(Token? token, {String suffix = ''}) {
+    if (token != null) {
+      sink.write(token.lexeme);
+      sink.write(suffix);
+    }
   }
 
   void _writeOperand(Expression node, Expression operand) {
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 4387e37..a40e33a 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -1308,9 +1308,11 @@
 class LinterExceptionHandler {
   /// Indicates whether linter exceptions should be propagated to the caller (by
   /// re-throwing them)
-  final bool propagateLinterExceptions;
+  final bool propagateExceptions;
 
-  LinterExceptionHandler(this.propagateLinterExceptions);
+  LinterExceptionHandler({
+    required this.propagateExceptions,
+  });
 
   /// A method that can be passed to the `LinterVisitor` constructor to handle
   /// exceptions that occur during linting.
@@ -1332,7 +1334,7 @@
     // TODO(39284): should this exception be silent?
     AnalysisEngine.instance.instrumentationService.logException(
         SilentException(buffer.toString(), exception, stackTrace));
-    if (propagateLinterExceptions) {
+    if (propagateExceptions) {
       throw exception;
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 2b83639..c2d09bb 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -801,6 +801,11 @@
       return false;
     }
 
+    final setConfig = this.setConfig;
+    if (setConfig == null) {
+      return true;
+    }
+
     if (listValue != null) {
       var type = value.type;
       if (type is InterfaceType) {
@@ -816,16 +821,13 @@
       }
     }
 
-    final setConfig = this.setConfig;
-    if (setConfig != null) {
-      for (var item in iterableValue) {
-        Expression expression = element.expression;
-        var existingValue = setConfig.uniqueValues[item];
-        if (existingValue != null) {
-          setConfig.duplicateElements[expression] = existingValue;
-        } else {
-          setConfig.uniqueValues[item] = expression;
-        }
+    for (var item in iterableValue) {
+      Expression expression = element.expression;
+      var existingValue = setConfig.uniqueValues[item];
+      if (existingValue != null) {
+        setConfig.duplicateElements[expression] = existingValue;
+      } else {
+        setConfig.uniqueValues[item] = expression;
       }
     }
 
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index b29a139..af1fa6f 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -1043,7 +1043,8 @@
     } else if (operatorType == TokenType.TILDE_SLASH) {
       return _dartObjectComputer.integerDivide(node, leftResult, rightResult);
     } else {
-      // TODO(brianwilkerson) Figure out which error to report.
+      // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+      // error code.
       _error(node, null);
       return null;
     }
@@ -1091,6 +1092,11 @@
   }
 
   @override
+  DartObjectImpl? visitConstructorReference(ConstructorReference node) {
+    return _getConstantValue(node, node.constructorName.staticElement);
+  }
+
+  @override
   DartObjectImpl visitDoubleLiteral(DoubleLiteral node) {
     return DartObjectImpl(
       typeSystem,
@@ -1103,7 +1109,8 @@
   DartObjectImpl? visitInstanceCreationExpression(
       InstanceCreationExpression node) {
     if (!node.isConst) {
-      // TODO(brianwilkerson) Figure out which error to report.
+      // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+      // error code.
       _error(node, null);
       return null;
     }
@@ -1204,7 +1211,8 @@
         }
       }
     }
-    // TODO(brianwilkerson) Figure out which error to report.
+    // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+    // error code.
     _error(node, null);
     return null;
   }
@@ -1215,7 +1223,8 @@
 
   @override
   DartObjectImpl? visitNode(AstNode node) {
-    // TODO(brianwilkerson) Figure out which error to report.
+    // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+    // error code.
     _error(node, null);
     return null;
   }
@@ -1269,7 +1278,8 @@
     } else if (node.operator.type == TokenType.MINUS) {
       return _dartObjectComputer.negated(node, operand);
     } else {
-      // TODO(brianwilkerson) Figure out which error to report.
+      // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+      // error code.
       _error(node, null);
       return null;
     }
@@ -1349,10 +1359,11 @@
 
   @override
   DartObjectImpl? visitSimpleIdentifier(SimpleIdentifier node) {
-    if (_lexicalEnvironment != null &&
-        _lexicalEnvironment!.containsKey(node.name)) {
-      return _lexicalEnvironment![node.name];
+    var value = _lexicalEnvironment?[node.name];
+    if (value != null) {
+      return value;
     }
+
     return _getConstantValue(node, node.staticElement);
   }
 
@@ -1594,6 +1605,12 @@
       if (variableElement.isConst && value != null) {
         return value.value;
       }
+    } else if (variableElement is ConstructorElement) {
+      return DartObjectImpl(
+        typeSystem,
+        node.typeOrThrow,
+        FunctionState(variableElement),
+      );
     } else if (variableElement is ExecutableElement) {
       var function = element as ExecutableElement;
       if (function.isStatic) {
@@ -1643,7 +1660,8 @@
       // Constants may not refer to type parameters.
     }
 
-    // TODO(brianwilkerson) Figure out which error to report.
+    // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
+    // error code.
     _error(node, null);
     return null;
   }
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index d1e6db7..62c8072 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -351,7 +351,8 @@
       if (node is TypeName) {
         var element = node.name.staticElement;
         if (element is TypeParameterElement) {
-          return true;
+          var enclosing = element.enclosingElement;
+          return enclosing is ClassElement && !enclosing.isMixin;
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 549e1bc..edcf6c3 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -43,6 +43,7 @@
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
 import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
 import 'package:analyzer/src/summary2/bundle_reader.dart';
 import 'package:analyzer/src/summary2/reference.dart';
@@ -416,7 +417,7 @@
 
 /// An [AbstractClassElementImpl] which is a class.
 class ClassElementImpl extends AbstractClassElementImpl
-    with TypeParameterizedElementMixin {
+    with TypeParameterizedElementMixin, HasMacroExecutionErrors {
   /// The superclass of the class, or `null` for [Object].
   InterfaceType? _supertype;
 
@@ -898,16 +899,22 @@
           ParameterElementImpl implicitParameter;
           if (superParameter is ConstVariableElement) {
             var constVariable = superParameter as ConstVariableElement;
-            implicitParameter =
-                DefaultParameterElementImpl(superParameter.name, -1)
-                  ..constantInitializer = constVariable.constantInitializer;
+            implicitParameter = DefaultParameterElementImpl(
+              name: superParameter.name,
+              nameOffset: -1,
+              // ignore: deprecated_member_use_from_same_package
+              parameterKind: superParameter.parameterKind,
+            )..constantInitializer = constVariable.constantInitializer;
           } else {
-            implicitParameter = ParameterElementImpl(superParameter.name, -1);
+            implicitParameter = ParameterElementImpl(
+              name: superParameter.name,
+              nameOffset: -1,
+              // ignore: deprecated_member_use_from_same_package
+              parameterKind: superParameter.parameterKind,
+            );
           }
           implicitParameter.isConst = superParameter.isConst;
           implicitParameter.isFinal = superParameter.isFinal;
-          // ignore: deprecated_member_use_from_same_package
-          implicitParameter.parameterKind = superParameter.parameterKind;
           implicitParameter.isSynthetic = true;
           implicitParameter.type =
               substitution.substituteType(superParameter.type);
@@ -949,7 +956,7 @@
   static ConstructorElement? getNamedConstructorFromList(
       String name, List<ConstructorElement> constructors) {
     if (name == 'new') {
-      // An unnamed constructor declared with `C.new(` is modeled as unnamed.
+      // A constructor declared as `C.new` is unnamed, and is modeled as such.
       name = '';
     }
     for (ConstructorElement element in constructors) {
@@ -983,6 +990,22 @@
   @override
   late Source librarySource;
 
+  /// If this unit has macro-generated elements, and is created in the
+  /// environment where the file content is available (e.g. interactive
+  /// analysis, and not batch analysis), then this is a combination of the
+  /// user-written code and macro-generated declarations.
+  ///
+  /// For elements created from the user-written code [Element.nameOffset]s
+  /// are offsets in the user-written code.
+  ///
+  /// For macro-generated elements [Element.nameOffset]s are offsets in the
+  /// combined file containing both user-written and generated code.
+  String? macroGeneratedContent;
+
+  /// If this unit has macro-generated elements, information about each one
+  /// is stored here, so that it can be combined to [macroGeneratedContent].
+  List<MacroGenerationData>? macroGenerationDataList;
+
   /// A list containing all of the top-level accessors (getters and setters)
   /// contained in this compilation unit.
   List<PropertyAccessorElement> _accessors = const [];
@@ -1503,6 +1526,16 @@
   ElementKind get kind => ElementKind.CONSTRUCTOR;
 
   @override
+  int get nameLength {
+    final nameEnd = this.nameEnd;
+    if (nameEnd == null || periodOffset == null) {
+      return 0;
+    } else {
+      return nameEnd - nameOffset;
+    }
+  }
+
+  @override
   Element get nonSynthetic {
     return isSynthetic ? enclosingElement : this;
   }
@@ -1655,8 +1688,15 @@
     extends FieldFormalParameterElementImpl with ConstVariableElement {
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
-  DefaultFieldFormalParameterElementImpl(String name, int nameOffset)
-      : super(name, nameOffset);
+  DefaultFieldFormalParameterElementImpl({
+    required String name,
+    required int nameOffset,
+    required ParameterKind parameterKind,
+  }) : super(
+          name: name,
+          nameOffset: nameOffset,
+          parameterKind: parameterKind,
+        );
 
   @override
   String? get defaultValueCode {
@@ -1669,8 +1709,15 @@
     with ConstVariableElement {
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
-  DefaultParameterElementImpl(String? name, int nameOffset)
-      : super(name, nameOffset);
+  DefaultParameterElementImpl({
+    required String? name,
+    required int nameOffset,
+    required ParameterKind parameterKind,
+  }) : super(
+          name: name,
+          nameOffset: nameOffset,
+          parameterKind: parameterKind,
+        );
 
   @override
   String? get defaultValueCode {
@@ -2367,6 +2414,11 @@
   /// children of this element's parent.
   String get identifier => name!;
 
+  /// The informative data, or `null` if the element is synthetic, or if the
+  /// informative data is not available in this environment (e.g. semantics
+  /// only summaries in Bazel).
+  ElementInformativeDataSetImpl? get informative => null;
+
   bool get isNonFunctionTypeAliasesEnabled {
     return library!.featureSet.isEnabled(Feature.nonfunction_type_aliases);
   }
@@ -2583,6 +2635,51 @@
   FunctionType get typeInternal;
 }
 
+/// Informative data about an [ElementImpl].
+class ElementInformativeDataImpl {
+  /// The offset of the beginning of the element's code in the file.
+  final int codeOffset;
+
+  /// The length of the element's code in the file.
+  final int codeLength;
+
+  /// The documentation comment for this element.
+  final String? docComment;
+
+  /// The offset of the name of this element in the file that contains the
+  /// declaration of this element.
+  final int nameOffset;
+
+  ElementInformativeDataImpl({
+    required this.codeOffset,
+    required this.codeLength,
+    required this.docComment,
+    required this.nameOffset,
+  });
+}
+
+/// The set of informative data about an [ElementImpl].
+class ElementInformativeDataSetImpl {
+  /// Informative data in the user-written file.
+  ///
+  /// This property is `null` if the element was macro-generated.
+  final ElementInformativeDataImpl? written;
+
+  /// Informative data in the combined file, which is the user-written file
+  /// augmented with macro-generated declarations.
+  ///
+  /// This property cannot be `null`, because each element is either declared
+  /// by the user directly (so has [written] which is then transformed), or
+  /// is macro-generated, or is synthetic (so we don't have this object
+  /// at all).
+  final ElementInformativeDataImpl combined;
+
+  ElementInformativeDataSetImpl({
+    required this.written,
+    required this.combined,
+  });
+}
+
 /// A concrete implementation of an [ElementLocation].
 class ElementLocationImpl implements ElementLocation {
   /// The character used to separate components in the encoded form.
@@ -3229,6 +3326,7 @@
 
 /// A concrete implementation of a [FieldElement].
 class FieldElementImpl extends PropertyInducingElementImpl
+    with HasMacroExecutionErrors
     implements FieldElement {
   /// True if this field inherits from a covariant parameter. This happens
   /// when it overrides a field in a supertype that is covariant.
@@ -3299,8 +3397,15 @@
 
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
-  FieldFormalParameterElementImpl(String name, int nameOffset)
-      : super(name, nameOffset);
+  FieldFormalParameterElementImpl({
+    required String name,
+    required int nameOffset,
+    required ParameterKind parameterKind,
+  }) : super(
+          name: name,
+          nameOffset: nameOffset,
+          parameterKind: parameterKind,
+        );
 
   /// Initializing formals are visible only in the "formal parameter
   /// initializer scope", which is the current scope of the initializer list
@@ -3477,6 +3582,12 @@
   }
 }
 
+mixin HasMacroExecutionErrors {
+  /// The list of errors recorded during execution of macro builders
+  /// over this element.
+  List<macro.MacroExecutionError> macroExecutionErrors = [];
+}
+
 /// This interface is implemented by [Element]s that can be added by macros.
 abstract class HasMacroGenerationData {
   /// If this element was added by a macro, the code of a declaration that
@@ -3689,6 +3800,9 @@
         super(name, offset);
 
   @override
+  List<ExtensionElement> get accessibleExtensions => scope.extensions;
+
+  @override
   CompilationUnitElement get definingCompilationUnit =>
       _definingCompilationUnit;
 
@@ -3942,7 +4056,7 @@
   }
 
   @override
-  Scope get scope {
+  LibraryScope get scope {
     return _scope ??= LibraryScope(this);
   }
 
@@ -4172,18 +4286,38 @@
 
   /// The code that was produced by the macro. It is used to compose full
   /// code of a unit to display to the user, so that new declarations are
-  /// added to the unit or existing classes.
+  /// added to the end of the unit or existing classes.
   ///
   /// When a class is generated, its code might have some members, or might
   /// be empty, and new elements might be macro-generated into it.
   final String code;
 
-  /// When we build elements from macro-produced code, we remember informative
-  /// data, such as offsets - to store it into bytes. This field is set to
-  /// an empty list when reading from bytes.
+  /// Informative data derived from the [code], such as offsets.
   final Uint8List informative;
 
-  MacroGenerationData(this.id, this.code, this.informative);
+  /// If this element is macro-generated into a class declaration, this is
+  /// the index of this class declaration in the unit.
+  final int? classDeclarationIndex;
+
+  /// The offset in [CompilationUnitElementImpl.macroGeneratedContent],
+  /// where the [code] is located. This offset depends on the informative
+  /// data, as any other offset.
+  late int codeOffset;
+
+  /// Similar to [codeOffset], but the offset of the prefix before [code].
+  late int insertOffset;
+
+  /// The length of the string inserted at [insertOffset]. This string
+  /// consists of the [code] itself, with leading and trailing whitespaces
+  /// and newlines for better formatting.
+  late int insertLength;
+
+  MacroGenerationData({
+    required this.id,
+    required this.code,
+    required this.informative,
+    required this.classDeclarationIndex,
+  });
 }
 
 /// A concrete implementation of a [MethodElement].
@@ -4722,8 +4856,8 @@
   /// typed parameter.
   List<TypeParameterElement> _typeParameters = const [];
 
-  /// The kind of this parameter.
-  ParameterKind? _parameterKind;
+  @override
+  final ParameterKind parameterKind;
 
   /// The Dart code of the default value.
   String? _defaultValueCode;
@@ -4735,15 +4869,22 @@
 
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
-  ParameterElementImpl(String? name, int nameOffset) : super(name, nameOffset);
+  ParameterElementImpl({
+    required String? name,
+    required int nameOffset,
+    required this.parameterKind,
+  }) : super(name, nameOffset);
 
-  /// Creates a synthetic parameter with [name], [type] and [kind].
+  /// Creates a synthetic parameter with [name], [type] and [parameterKind].
   factory ParameterElementImpl.synthetic(
-      String? name, DartType type, ParameterKind kind) {
-    ParameterElementImpl element = ParameterElementImpl(name, -1);
+      String? name, DartType type, ParameterKind parameterKind) {
+    var element = ParameterElementImpl(
+      name: name,
+      nameOffset: -1,
+      parameterKind: parameterKind,
+    );
     element.type = type;
     element.isSynthetic = true;
-    element.parameterKind = kind;
     return element;
   }
 
@@ -4796,18 +4937,6 @@
   ElementKind get kind => ElementKind.PARAMETER;
 
   @override
-  ParameterKind get parameterKind {
-    if (_parameterKind != null) return _parameterKind!;
-
-    // TODO(migration): Make it impossible by construction.
-    throw StateError('The kind must set.');
-  }
-
-  set parameterKind(ParameterKind parameterKind) {
-    _parameterKind = parameterKind;
-  }
-
-  @override
   List<ParameterElement> get parameters {
     return _parameters;
   }
@@ -4858,10 +4987,13 @@
   ParameterElementImpl_ofImplicitSetter(
       PropertyAccessorElementImpl_ImplicitSetter setter)
       : setter = setter,
-        super('_${setter.variable.name}', -1) {
+        super(
+          name: '_${setter.variable.name}',
+          nameOffset: -1,
+          parameterKind: ParameterKind.REQUIRED,
+        ) {
     enclosingElement = setter;
     isSynthetic = true;
-    parameterKind = ParameterKind.REQUIRED;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 4f6246e..4f0e447 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -8,7 +8,6 @@
 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';
-import 'package:analyzer/src/error/correct_override.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
 
 /// Failure because of there is no most specific signature in [candidates].
@@ -76,16 +75,16 @@
       return null;
     }
 
+    var targetLibrary = targetClass.library as LibraryElementImpl;
+    var typeSystem = targetLibrary.typeSystem;
+
     var validOverrides = <ExecutableElement>[];
     for (var i = 0; i < candidates.length; i++) {
       ExecutableElement? validOverride = candidates[i];
-      var overrideHelper = CorrectOverrideHelper(
-        library: targetClass.library as LibraryElementImpl,
-        thisMember: validOverride,
-      );
+      var validOverrideType = validOverride.type;
       for (var j = 0; j < candidates.length; j++) {
         var candidate = candidates[j];
-        if (!overrideHelper.isCorrectOverrideOf(superMember: candidate)) {
+        if (!typeSystem.isSubtypeOf(validOverrideType, candidate.type)) {
           validOverride = null;
           break;
         }
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 4030bff..ba78ccb 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -96,37 +96,6 @@
       correction: "Replace the '.' with a '?.' in the invocation.");
 
   /**
-   * Generate a hint for method, property or function annotated with
-   * `@useResult` whose invocation is unchecked.
-   *
-   * Parameters:
-   * 0: the name of the annotated method, property or function
-   */
-  static const HintCode UNUSED_RESULT = HintCode(
-      'UNUSED_RESULT', "'{0}' should be used.",
-      correction:
-          "Try using the result by invoking a member, passing it to a function, or returning it from this function.",
-      hasPublishedDocs: false);
-
-  /**
-   * Generate a hint for method, property or function annotated with
-   * `@useResult` whose invocation is unchecked.
-   *
-   * Parameters:
-   * 0: the name of the annotated method, property or function
-   * 1: message details
-   */
-  static const HintCode UNUSED_RESULT_WITH_MESSAGE = HintCode(
-    'UNUSED_RESULT',
-    "'{0}' should be used. {1}.",
-    // todo(pq): consider passing in correction details: https://github.com/dart-lang/sdk/issues/46066
-    correction:
-        "Try using the result by invoking a member, passing it to a function, or returning it from this function.",
-    hasPublishedDocs: false,
-    uniqueName: 'HintCode.UNUSED_RESULT_WITH_MESSAGE',
-  );
-
-  /**
    * Dead code is code that is never reached, this can happen for instance if a
    * statement follows a return statement.
    *
@@ -2245,6 +2214,25 @@
       hasPublishedDocs: true);
 
   /**
+   * A constructor cannot be torn off without the 'constructor-tearoffs'
+   * language feature.
+   *
+   * There is also a [ParserError.EXPERIMENT_NOT_ENABLED] code which catches
+   * some cases of constructor tearoff features (like `List<int>.filled;`).
+   * Other constructor tearoff cases are not realized until resolution
+   * (like `List.filled;`).
+   */
+  static const HintCode SDK_VERSION_CONSTRUCTOR_TEAROFFS = HintCode(
+      'SDK_VERSION_CONSTRUCTOR_TEAROFFS',
+      "Tearing off a constructor requires the 'constructor-tearoffs' "
+          "language feature.",
+      // TODO(srawlins): Update this text to something like "Try updating
+      // your pubspec.yaml to set the minimum SDK constraint to 2.14 or
+      // higher, and running 'pub get'."
+      correction: "Try enabling the experiment by including "
+          "'--enable-experiment=constructor-tearoffs' in the 'dart' command.");
+
+  /**
    * No parameters.
    */
   // #### Description
@@ -2878,6 +2866,18 @@
       hasPublishedDocs: true);
 
   /**
+   * This hint is generated when an `@UnusedResult.unless` annotation
+   * references an undefined parameter.
+   *
+   * Parameters:
+   * 0: the name of the undefined parameter
+   * 1: the name of the targeted member
+   */
+  static const HintCode UNDEFINED_REFERENCED_PARAMETER = HintCode(
+      'UNDEFINED_REFERENCED_PARAMETER',
+      "The parameter '{0}' is not defined by '{1}'.");
+
+  /**
    * Parameters:
    * 0: the name of the library being imported
    * 1: the name in the show clause that isn't defined in the library
@@ -3462,6 +3462,43 @@
       hasPublishedDocs: true);
 
   /**
+   * The result of invoking a method, property, or function annotated with
+   * `@useResult` must be used (assigned, passed to a function as an argument,
+   * or returned by a function).
+   *
+   * Parameters:
+   * 0: the name of the annotated method, property or function
+   */
+  static const HintCode UNUSED_RESULT = HintCode(
+    'UNUSED_RESULT',
+    "'{0}' should be used.",
+    correction: "Try using the result by invoking a member, passing it to a "
+        "function, or returning it from this function.",
+    hasPublishedDocs: false,
+  );
+
+  /**
+   * The result of invoking a method, property, or function annotated with
+   * `@useResult` must be used (assigned, passed to a function as an argument,
+   * or returned by a function).
+   *
+   * Parameters:
+   * 0: the name of the annotated method, property or function
+   * 1: message details
+   */
+  static const HintCode UNUSED_RESULT_WITH_MESSAGE = HintCode(
+    'UNUSED_RESULT',
+    "'{0}' should be used. {1}.",
+    // todo(pq): consider passing in correction details:
+    // https://github.com/dart-lang/sdk/issues/46066
+    correction:
+        "Try using the result by invoking a member, passing it to a function, "
+        "or returning it from this function.",
+    hasPublishedDocs: false,
+    uniqueName: 'HintCode.UNUSED_RESULT_WITH_MESSAGE',
+  );
+
+  /**
    * Parameters:
    * 0: the name that is shown but not used
    */
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
index ef128be..6b3d5c9 100644
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
@@ -14,11 +14,33 @@
  */
 class TodoCode extends ErrorCode {
   /**
-   * The single enum of TodoCode.
+   * A standard TODO comment marked as TODO.
    */
   static const TodoCode TODO = TodoCode('TODO');
 
   /**
+   * A TODO comment marked as FIXME.
+   */
+  static const TodoCode FIXME = TodoCode('FIXME');
+
+  /**
+   * A TODO comment marked as HACK.
+   */
+  static const TodoCode HACK = TodoCode('HACK');
+
+  /**
+   * A TODO comment marked as UNDONE.
+   */
+  static const TodoCode UNDONE = TodoCode('UNDONE');
+
+  static const _codes = {
+    'TODO': TODO,
+    'FIXME': FIXME,
+    'HACK': HACK,
+    'UNDONE': UNDONE,
+  };
+
+  /**
    * This matches the two common Dart task styles
    *
    * * TODO:
@@ -37,9 +59,16 @@
    *    * TODO(username): This line is
    *    *  wrapped onto the next line
    *    */
+   *
+   * The matched kind of the TODO (TODO, FIXME, etc.) is returned in named
+   * captures of "kind1", "kind2" (since it is not possible to reuse a name
+   * across different parts of the regex).
    */
   static RegExp TODO_REGEX = RegExp(
-      "([\\s/\\*])((TODO[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)|(TODO:?\$))");
+      '([\\s/\\*])(((?<kind1>$_TODO_KIND_PATTERN)[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)'
+      '|((?<kind2>$_TODO_KIND_PATTERN):?\$))');
+
+  static final _TODO_KIND_PATTERN = _codes.keys.join('|');
 
   /**
    * Initialize a newly created error code to have the given [name].
@@ -56,4 +85,7 @@
 
   @override
   ErrorType get type => ErrorType.TODO;
+
+  /// Returns the TodoCode for [kind], falling back to [TODO].
+  static TodoCode forKind(String kind) => _codes[kind] ?? TODO;
 }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 327af6e..359d754 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -348,10 +348,14 @@
     }
 
     // Run lints that handle specific node types.
-    unit.accept(LinterVisitor(
+    unit.accept(
+      LinterVisitor(
         nodeRegistry,
-        LinterExceptionHandler(_analysisOptions.propagateLinterExceptions)
-            .logException));
+        LinterExceptionHandler(
+          propagateExceptions: _analysisOptions.propagateLinterExceptions,
+        ).logException,
+      ),
+    );
   }
 
   void _computeVerifyErrors(FileState file, CompilationUnit unit) {
@@ -409,8 +413,7 @@
 
     bool isIgnored(AnalysisError error) {
       int errorLine = lineInfo.getLocation(error.offset).lineNumber;
-      String errorCode = error.errorCode.name.toLowerCase();
-      return ignoreInfo.ignoredAt(errorCode, errorLine);
+      return ignoreInfo.ignoredAt(error.errorCode.name, errorLine);
     }
 
     return errors.where((AnalysisError e) => !isIgnored(e)).toList();
@@ -689,7 +692,7 @@
       ),
     );
 
-    unit.accept(VariableResolverVisitor(
+    unit.accept(ScopeResolverVisitor(
         _libraryElement, source, _typeProvider, errorListener,
         nameScope: _libraryElement.scope));
 
@@ -697,8 +700,8 @@
     // Nothing for RESOLVED_UNIT9?
     // Nothing for RESOLVED_UNIT10?
 
-    FlowAnalysisHelper flowAnalysisHelper = FlowAnalysisHelper(
-        _typeSystem, false, unit.featureSet.isEnabled(Feature.non_nullable));
+    FlowAnalysisHelper flowAnalysisHelper =
+        FlowAnalysisHelper(_typeSystem, false, unit.featureSet);
 
     var resolverVisitor = ResolverVisitor(
         _inheritance, _libraryElement, source, _typeProvider, errorListener,
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 0947549..cbee620 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -347,7 +347,9 @@
       ..addAll(importedFiles)
       ..addAll(exportedFiles)
       ..addAll(partedFiles);
-    directReferencedLibraries..addAll(importedFiles)..addAll(exportedFiles);
+    directReferencedLibraries
+      ..addAll(importedFiles)
+      ..addAll(exportedFiles);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index d52742b..26f8a6d 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -31,6 +31,7 @@
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/bundle_reader.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/summary2/link.dart' as link2;
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/reference.dart';
@@ -834,12 +835,15 @@
       var resolutionData = byteStore.get(resolutionKey, cycle.signature);
       var resolutionBytes = resolutionData?.bytes;
 
-      var unitsInformativeBytes = <Uri, Uint8List>{};
+      var unitsInformativeData = <Uri, InformativeUnitData>{};
       for (var library in cycle.libraries) {
         for (var file in library.libraryFiles) {
           var informativeBytes = file.informativeBytes;
           if (informativeBytes != null) {
-            unitsInformativeBytes[file.uri] = informativeBytes;
+            unitsInformativeData[file.uri] = InformativeUnitData(
+              content: file.getContentWithSameDigest(),
+              bytes: informativeBytes,
+            );
           }
         }
       }
@@ -909,7 +913,7 @@
         elementFactory.addBundle(
           BundleReader(
             elementFactory: elementFactory,
-            unitsInformativeBytes: unitsInformativeBytes,
+            unitsInformativeData: unitsInformativeData,
             resolutionBytes: resolutionBytes as Uint8List,
           ),
         );
diff --git a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
index ca6b0c4..aa594c5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -293,7 +293,7 @@
     }
     var argumentList = node.arguments;
 
-    var element1 = _resolver.nameScope.lookup(name1.name).getter;
+    var element1 = name1.scopeLookupResult!.getter;
     name1.staticElement = element1;
 
     if (element1 == null) {
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 840b7b8..7882635 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -78,7 +78,7 @@
       _setRhsContext(node, leftType!, operator, right);
     }
 
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
     if (flow != null && isIfNull) {
       flow.ifNullExpression_rightBegin(left, node.readType!);
     }
@@ -294,7 +294,6 @@
 
   void checkFinalAlreadyAssigned(Expression left) {
     var flowAnalysis = _resolver.flowAnalysis;
-    if (flowAnalysis == null) return;
 
     var flow = flowAnalysis.flow;
     if (flow == null) return;
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index a2428b1..caf21ee 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -12,13 +12,78 @@
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/error/codes.dart';
 
-/// Helper for [MethodInvocation]s into [InstanceCreationExpression] to support
-/// the optional `new` and `const` feature, or [ExtensionOverride].
+/// Handles possible rewrites of AST.
+///
+/// When code is initially parsed, many assumptions are made which may be
+/// incorrect given newer Dart syntax. For example, `new a.b()` is parsed as an
+/// [InstanceCreationExpression], but `a.b()` (without `new`) is parsed as a
+/// [MethodInvocation]. The public methods of this class carry out the minimal
+/// amount of resolution in order to determine whether a node (and its
+/// descendants) should be replaced by another, and perform such replacements.
+///
+/// The public methods of this class form a complete accounting of possible
+/// node replacements.
 class AstRewriter {
   final ErrorReporter _errorReporter;
 
   AstRewriter(this._errorReporter);
 
+  /// Possibly rewrites [node] as a [MethodInvocation] with a
+  /// [FunctionReference] target.
+  ///
+  /// Code such as `a<...>.b(...);` (or with a prefix such as `p.a<...>.b(...)`)
+  /// is parsed as an [ExpressionStatement] with an [InstanceCreationExpression]
+  /// with `a<...>.b` as the [ConstructorName] (which has 'type' of `a<...>`
+  /// and 'name' of `b`). The [InstanceCreationExpression] is rewritten as a
+  /// [MethodInvocation] if `a` resolves to a function.
+  AstNode instanceCreationExpression(
+      Scope nameScope, InstanceCreationExpression node) {
+    if (node.keyword != null) {
+      // Either `new` or `const` has been specified.
+      return node;
+    }
+    var typeName = node.constructorName.type.name;
+    if (typeName is SimpleIdentifier) {
+      var element = nameScope.lookup(typeName.name).getter;
+      if (element is FunctionElement || element is MethodElement) {
+        return _toMethodInvocationOfFunctionReference(
+            node: node, function: typeName);
+      }
+    } else if (typeName is PrefixedIdentifier) {
+      var prefixElement = nameScope.lookup(typeName.prefix.name).getter;
+      if (prefixElement is PrefixElement) {
+        var prefixedName = typeName.identifier.name;
+        var element = prefixElement.scope.lookup(prefixedName).getter;
+        if (element is FunctionElement) {
+          return _toMethodInvocationOfFunctionReference(
+              node: node, function: typeName);
+        }
+
+        // If `element` is a [ClassElement], or a [TypeAliasElement] aliasing
+        // an interface type, then this indeed looks like a constructor call; do
+        // not rewrite `node`.
+
+        // If `element` is a [TypeAliasElement] aliasing a function type, then
+        // this looks like an attempt type instantiate a function type alias
+        // (which is not a feature), and then call a method on the resulting
+        // [Type] object; no not rewrite `node`.
+
+        // If `typeName.identifier` cannot be resolved, do not rewrite `node`.
+        return node;
+      } else {
+        // In the case that `prefixElement` is not a [PrefixElement], then
+        // `typeName`, as a [PrefixedIdentifier], cannot refer to a class or an
+        // aliased type; rewrite `node` as a [MethodInvocation].
+        return _toMethodInvocationOfFunctionReference(
+            node: node, function: typeName);
+      }
+    }
+
+    return node;
+  }
+
+  /// Possibly rewrites [node] as an [ExtensionOverride] or as an
+  /// [InstanceCreationExpression].
   AstNode methodInvocation(Scope nameScope, MethodInvocation node) {
     SimpleIdentifier methodName = node.methodName;
     if (methodName.isSynthetic) {
@@ -140,6 +205,145 @@
     return node;
   }
 
+  /// Possibly rewrites [node] as a [ConstructorReference].
+  ///
+  /// Code such as `List.filled;` is parsed as (an [ExpressionStatement] with) a
+  /// [PrefixedIdentifier] with 'prefix' of `List` and 'identifier' of `filled`.
+  /// The [PrefixedIdentifier] may need to be rewritten as a
+  /// [ConstructorReference].
+  AstNode prefixedIdentifier(Scope nameScope, PrefixedIdentifier node) {
+    if (node.parent is Annotation) {
+      // An annotations which is a const constructor invocation can initially be
+      // represented with a [PrefixedIdentifier]. Do not rewrite such nodes.
+      return node;
+    }
+    if (node.parent is CommentReference) {
+      // TODO(srawlins): This probably should be rewritten to a
+      // [ConstructorReference] at some point.
+      return node;
+    }
+    var identifier = node.identifier;
+    if (identifier.isSynthetic) {
+      // This isn't a constructor reference.
+      return node;
+    }
+    if (node.parent is AssignmentExpression) {
+      return node;
+    }
+    var prefix = node.prefix;
+    var element = nameScope.lookup(prefix.name).getter;
+    if (element is ClassElement) {
+      // Example:
+      //     class C { C.named(); }
+      //     C.named
+      return _toConstructorReference_prefixed(
+          node: node, classElement: element);
+    } else if (element is TypeAliasElement) {
+      var aliasedType = element.aliasedType;
+      if (aliasedType is InterfaceType) {
+        // Example:
+        //     class C { C.named(); }
+        //     typedef X = C;
+        //     X.named
+        return _toConstructorReference_prefixed(
+            node: node, classElement: aliasedType.element);
+      }
+    }
+    return node;
+  }
+
+  /// Possibly rewrites [node] as a [ConstructorReference].
+  ///
+  /// Code such as `async.Future.value;` is parsed as (an [ExpressionStatement]
+  /// with) a [PropertyAccess] with a 'target' of [PrefixedIdentifier] (with
+  /// 'prefix' of `List` and 'identifier' of `filled`) and a 'propertyName' of
+  /// `value`. The [PropertyAccess] may need to be rewritten as a
+  /// [ConstructorReference].
+  AstNode propertyAccess(Scope nameScope, PropertyAccess node) {
+    if (node.isCascaded) {
+      // For example, `List..filled`: this is a property access on an instance
+      // `Type`.
+      return node;
+    }
+    var receiver = node.target!;
+    if (receiver is! FunctionReference) {
+      return node;
+    }
+    var propertyName = node.propertyName;
+    if (propertyName.isSynthetic) {
+      // This isn't a constructor reference.
+      return node;
+    }
+    // A [ConstructorReference] with explicit type arguments is initially parsed
+    // as a [PropertyAccess] with a [FunctionReference] target; for example:
+    // `List<int>.filled` or `core.List<int>.filled`.
+    var receiverIdentifier = receiver.function;
+    if (receiverIdentifier is! Identifier) {
+      // If [receiverIdentifier] is not an Identifier then [node] is not a
+      // ConstructorReference.
+      return node;
+    }
+
+    Element? element;
+    if (receiverIdentifier is SimpleIdentifier) {
+      element = nameScope.lookup(receiverIdentifier.name).getter;
+    } else if (receiverIdentifier is PrefixedIdentifier) {
+      var prefixElement =
+          nameScope.lookup(receiverIdentifier.prefix.name).getter;
+      if (prefixElement is PrefixElement) {
+        element = prefixElement.scope
+            .lookup(receiverIdentifier.identifier.name)
+            .getter;
+      } else {
+        // This expression is something like `foo.List<int>.filled` where `foo`
+        // is not an import prefix.
+        // TODO(srawlins): Tease out a `null` prefixElement from others for
+        // specific errors.
+        return node;
+      }
+    }
+
+    if (element is ClassElement) {
+      // Example:
+      //     class C<T> { C.named(); }
+      //     C<int>.named
+      return _toConstructorReference_propertyAccess(
+        node: node,
+        receiver: receiverIdentifier,
+        typeArguments: receiver.typeArguments!,
+        classElement: element,
+      );
+    } else if (element is TypeAliasElement) {
+      var aliasedType = element.aliasedType;
+      if (aliasedType is InterfaceType) {
+        // Example:
+        //     class C<T> { C.named(); }
+        //     typedef X<T> = C<T>;
+        //     X<int>.named
+        return _toConstructorReference_propertyAccess(
+          node: node,
+          receiver: receiverIdentifier,
+          typeArguments: receiver.typeArguments!,
+          classElement: aliasedType.element,
+        );
+      }
+    }
+
+    // If [receiverIdentifier] is an Identifier, but could not be resolved to
+    // an Element, we cannot assume [node] is a ConstructorReference.
+    //
+    // TODO(srawlins): However, take an example like `Lisst<int>.filled;`
+    // (where 'Lisst' does not resolve to any element). Possibilities include:
+    // the user tried to write a TypeLiteral or a FunctionReference, then access
+    // a property on that (these include: hashCode, runtimeType, tearoff of
+    // toString, and extension methods on Type); or the user tried to write a
+    // ConstructReference. It seems much more likely that the user is trying to
+    // do the latter. Consider doing the work so that the user gets an error in
+    // this case about `Lisst` not being a type, or `Lisst.filled` not being a
+    // known constructor.
+    return node;
+  }
+
   AstNode _instanceCreation_prefix_type_name({
     required MethodInvocation node,
     required PrefixedIdentifier typeNameIdentifier,
@@ -170,6 +374,42 @@
     return instanceCreationExpression;
   }
 
+  AstNode _toConstructorReference_prefixed(
+      {required PrefixedIdentifier node, required ClassElement classElement}) {
+    var name = node.identifier.name;
+    var constructorElement = name == 'new'
+        ? classElement.unnamedConstructor
+        : classElement.getNamedConstructor(name);
+    if (constructorElement == null) {
+      return node;
+    }
+
+    var typeName = astFactory.typeName(node.prefix, null);
+    var constructorName =
+        astFactory.constructorName(typeName, node.period, node.identifier);
+    var constructorReference =
+        astFactory.constructorReference(constructorName: constructorName);
+    NodeReplacer.replace(node, constructorReference);
+    return constructorReference;
+  }
+
+  ConstructorReference _toConstructorReference_propertyAccess({
+    required PropertyAccess node,
+    required Identifier receiver,
+    required TypeArgumentList typeArguments,
+    required ClassElement classElement,
+  }) {
+    var operator = node.operator;
+
+    var typeName = astFactory.typeName(receiver, typeArguments);
+    var constructorName =
+        astFactory.constructorName(typeName, operator, node.propertyName);
+    var constructorReference =
+        astFactory.constructorReference(constructorName: constructorName);
+    NodeReplacer.replace(node, constructorReference);
+    return constructorReference;
+  }
+
   InstanceCreationExpression _toInstanceCreation_prefix_type({
     required MethodInvocation node,
     required SimpleIdentifier prefixIdentifier,
@@ -227,4 +467,23 @@
     NodeReplacer.replace(node, instanceCreationExpression);
     return instanceCreationExpression;
   }
+
+  MethodInvocation _toMethodInvocationOfFunctionReference({
+    required InstanceCreationExpression node,
+    required Identifier function,
+  }) {
+    var functionReference = astFactory.functionReference(
+      function: function,
+      typeArguments: node.constructorName.type.typeArguments,
+    );
+    var methodInvocation = astFactory.methodInvocation(
+      functionReference,
+      node.constructorName.period,
+      node.constructorName.name!,
+      null,
+      node.argumentList,
+    );
+    NodeReplacer.replace(node, methodInvocation);
+    return methodInvocation;
+  }
 }
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 abb22ed..6ec66b7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -69,8 +69,10 @@
 
     // Report an error if not already reported by the parser.
     if (operator != TokenType.BANG_EQ_EQ && operator != TokenType.EQ_EQ_EQ) {
-      _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.NOT_BINARY_OPERATOR, node, [operator.lexeme]);
+      _errorReporter.reportErrorForToken(
+          CompileTimeErrorCode.NOT_BINARY_OPERATOR,
+          node.operator,
+          [operator.lexeme]);
     }
 
     _resolveUnsupportedOperator(node);
@@ -104,7 +106,7 @@
     left.accept(_resolver);
     left = node.leftOperand;
 
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
     var leftExtensionOverride = left is ExtensionOverride;
     if (!leftExtensionOverride) {
       flow?.equalityOp_rightBegin(left, left.typeOrThrow);
@@ -113,7 +115,7 @@
     var right = node.rightOperand;
     right.accept(_resolver);
     right = node.rightOperand;
-    var whyNotPromoted = _resolver.flowAnalysis?.flow?.whyNotPromoted(right);
+    var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
     if (!leftExtensionOverride) {
       flow?.equalityOp_end(node, right, right.typeOrThrow, notEqual: notEqual);
@@ -132,7 +134,7 @@
   void _resolveIfNull(BinaryExpressionImpl node) {
     var left = node.leftOperand;
     var right = node.rightOperand;
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
 
     var leftContextType = InferenceContext.getContext(node);
     if (leftContextType != null && _isNonNullableByDefault) {
@@ -168,7 +170,7 @@
   void _resolveLogicalAnd(BinaryExpressionImpl node) {
     var left = node.leftOperand;
     var right = node.rightOperand;
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
 
     InferenceContext.setType(left, _typeProvider.boolType);
     InferenceContext.setType(right, _typeProvider.boolType);
@@ -176,7 +178,7 @@
     flow?.logicalBinaryOp_begin();
     left.accept(_resolver);
     left = node.leftOperand;
-    var leftWhyNotPromoted = _resolver.flowAnalysis?.flow?.whyNotPromoted(left);
+    var leftWhyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(left);
 
     flow?.logicalBinaryOp_rightBegin(left, node, isAnd: true);
     _resolver.checkUnreachableNode(right);
@@ -184,7 +186,7 @@
     right.accept(_resolver);
     right = node.rightOperand;
     var rightWhyNotPromoted =
-        _resolver.flowAnalysis!.flow?.whyNotPromoted(right);
+        _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
     _resolver.nullSafetyDeadCodeVerifier.flowEnd(right);
     flow?.logicalBinaryOp_end(node, right, isAnd: true);
@@ -198,7 +200,7 @@
   void _resolveLogicalOr(BinaryExpressionImpl node) {
     var left = node.leftOperand;
     var right = node.rightOperand;
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
 
     InferenceContext.setType(left, _typeProvider.boolType);
     InferenceContext.setType(right, _typeProvider.boolType);
@@ -206,7 +208,7 @@
     flow?.logicalBinaryOp_begin();
     left.accept(_resolver);
     left = node.leftOperand;
-    var leftWhyNotPromoted = _resolver.flowAnalysis?.flow?.whyNotPromoted(left);
+    var leftWhyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(left);
 
     flow?.logicalBinaryOp_rightBegin(left, node, isAnd: false);
     _resolver.checkUnreachableNode(right);
@@ -214,7 +216,7 @@
     right.accept(_resolver);
     right = node.rightOperand;
     var rightWhyNotPromoted =
-        _resolver.flowAnalysis?.flow?.whyNotPromoted(right);
+        _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
     _resolver.nullSafetyDeadCodeVerifier.flowEnd(right);
     flow?.logicalBinaryOp_end(node, right, isAnd: false);
@@ -264,7 +266,7 @@
 
     right.accept(_resolver);
     right = node.rightOperand;
-    var whyNotPromoted = _resolver.flowAnalysis?.flow?.whyNotPromoted(right);
+    var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
     _resolveUserDefinableType(node);
     _resolver.checkForArgumentTypeNotAssignableForArgument(right,
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
new file mode 100644
index 0000000..75ac605
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -0,0 +1,138 @@
+// 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:analyzer/dart/ast/ast.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/dart/element/member.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+
+/// A resolver for [ConstructorReference] nodes.
+class ConstructorReferenceResolver {
+  /// The resolver driving this participant.
+  final ResolverVisitor _resolver;
+
+  ConstructorReferenceResolver(this._resolver);
+
+  void resolve(ConstructorReferenceImpl node) {
+    if (!_resolver.isConstructorTearoffsEnabled &&
+        node.constructorName.type.typeArguments == null) {
+      // Only report this if [node] has no explicit type arguments; otherwise
+      // the parser has already reported an error.
+      _resolver.errorReporter.reportErrorForNode(
+          HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS, node, []);
+    }
+    node.constructorName.accept(_resolver);
+    var element = node.constructorName.staticElement;
+    if (element != null &&
+        !element.isFactory &&
+        element.enclosingElement.isAbstract) {
+      _resolver.errorReporter.reportErrorForNode(
+        CompileTimeErrorCode
+            .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
+        node,
+        [],
+      );
+    }
+    var name = node.constructorName.name;
+    if (element == null &&
+        name != null &&
+        _resolver.isConstructorTearoffsEnabled) {
+      // The illegal construction, which looks like a type-instantiated
+      // constructor tearoff, may be an attempt to reference a member on
+      // [enclosingElement]. Try to provide a helpful error, and fall back to
+      // "unknown constructor."
+      //
+      // Only report errors when the constructor tearoff feature is enabled,
+      // to avoid reporting redundant errors.
+      var enclosingElement = node.constructorName.type.name.staticElement;
+      if (enclosingElement is TypeAliasElement) {
+        enclosingElement = enclosingElement.aliasedType.element;
+      }
+      // TODO(srawlins): Handle `enclosingElement` being a function typedef:
+      // typedef F<T> = void Function(); var a = F<int>.extensionOnType;`.
+      // This is illegal.
+      if (enclosingElement is ClassElement) {
+        var method = enclosingElement.getMethod(name.name) ??
+            enclosingElement.getGetter(name.name) ??
+            enclosingElement.getSetter(name.name);
+        if (method != null) {
+          var error = method.isStatic
+              ? CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER
+              : CompileTimeErrorCode
+                  .CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER;
+          _resolver.errorReporter.reportErrorForNode(
+            error,
+            node,
+            [name.name],
+          );
+        } else {
+          _resolver.errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER,
+            node,
+            [enclosingElement.name, name.name],
+          );
+        }
+      }
+    }
+    _inferArgumentTypes(node);
+  }
+
+  void _inferArgumentTypes(ConstructorReferenceImpl node) {
+    var constructorName = node.constructorName;
+    var elementToInfer = _resolver.inferenceHelper.constructorElementToInfer(
+      constructorName: constructorName,
+      definingLibrary: _resolver.definingLibrary,
+    );
+
+    // If the constructor is generic, we'll have a ConstructorMember that
+    // substitutes in type arguments (possibly `dynamic`) from earlier in
+    // resolution.
+    //
+    // Otherwise we'll have a ConstructorElement, and we can skip inference
+    // because there's nothing to infer in a non-generic type.
+    if (elementToInfer != null) {
+      // TODO(leafp): Currently, we may re-infer types here, since we
+      // sometimes resolve multiple times.  We should really check that we
+      // have not already inferred something.  However, the obvious ways to
+      // check this don't work, since we may have been instantiated
+      // to bounds in an earlier phase, and we *do* want to do inference
+      // in that case.
+
+      // Get back to the uninstantiated generic constructor.
+      // TODO(jmesserly): should we store this earlier in resolution?
+      // Or look it up, instead of jumping backwards through the Member?
+      var rawElement = elementToInfer.element;
+      var constructorType = elementToInfer.asType;
+
+      var inferred = _resolver.inferenceHelper.inferTearOff(
+          node, constructorName.name!, constructorType) as FunctionType?;
+
+      if (inferred != null) {
+        var inferredReturnType = inferred.returnType as InterfaceType;
+
+        // Update the static element as well. This is used in some cases, such
+        // as computing constant values. It is stored in two places.
+        var constructorElement =
+            ConstructorMember.from(rawElement, inferredReturnType);
+
+        constructorName.staticElement = constructorElement.declaration;
+        constructorName.name?.staticElement = constructorElement.declaration;
+        node.staticType = inferred;
+        constructorName.type.type = null;
+      }
+    } else {
+      var constructorElement = constructorName.staticElement;
+      if (constructorElement == null) {
+        node.staticType = DynamicTypeImpl.instance;
+      } else {
+        node.staticType = constructorElement.type;
+      }
+      constructorName.type.type = null;
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
index adb9ff5..f1a6fd8 100644
--- a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
@@ -129,6 +129,9 @@
   }
 
   @override
+  bool visitConstructorReference(ConstructorReference node) => false;
+
+  @override
   bool visitContinueStatement(ContinueStatement node) {
     _enclosingBlockContainsContinue = true;
     return false;
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 6ad246d..3f5ac4f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -6,7 +6,6 @@
 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/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/error/listener.dart';
@@ -19,7 +18,6 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/resolution_result.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/util/either.dart';
@@ -37,8 +35,6 @@
   bool get _genericMetadataIsEnabled =>
       _resolver.definingLibrary.featureSet.isEnabled(Feature.generic_metadata);
 
-  Scope get _nameScope => _resolver.nameScope;
-
   TypeProvider get _typeProvider => _resolver.typeProvider;
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
@@ -397,7 +393,7 @@
       }
     }
 
-    for (var extension in _nameScope.extensions) {
+    for (var extension in _resolver.definingLibrary.accessibleExtensions) {
       checkExtension(extension);
     }
     return candidates;
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index 8b431a0..ee6db4b 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
+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';
@@ -68,19 +69,28 @@
 
   final bool isNonNullableByDefault;
 
+  /// Indicates whether initializers of implicitly typed variables should be
+  /// accounted for by SSA analysis.  (In an ideal world, they always would be,
+  /// but due to https://github.com/dart-lang/language/issues/1785, they weren't
+  /// always, and we need to be able to replicate the old behavior when
+  /// analyzing old language versions).
+  final bool respectImplicitlyTypedVarInitializers;
+
   /// The current flow, when resolving a function body, or `null` otherwise.
   FlowAnalysis<AstNode, Statement, Expression, PromotableElement, DartType>?
       flow;
 
   FlowAnalysisHelper(TypeSystemImpl typeSystem, bool retainDataForTesting,
-      bool isNonNullableByDefault)
-      : this._(
-            TypeSystemTypeOperations(typeSystem),
+      FeatureSet featureSet)
+      : this._(TypeSystemTypeOperations(typeSystem),
             retainDataForTesting ? FlowAnalysisDataForTesting() : null,
-            isNonNullableByDefault);
+            isNonNullableByDefault: featureSet.isEnabled(Feature.non_nullable),
+            respectImplicitlyTypedVarInitializers:
+                featureSet.isEnabled(Feature.constructor_tearoffs));
 
-  FlowAnalysisHelper._(
-      this._typeOperations, this.dataForTesting, this.isNonNullableByDefault);
+  FlowAnalysisHelper._(this._typeOperations, this.dataForTesting,
+      {required this.isNonNullableByDefault,
+      required this.respectImplicitlyTypedVarInitializers});
 
   LocalVariableTypeProvider get localVariableTypeProvider {
     return _LocalVariableTypeProvider(this);
@@ -233,7 +243,9 @@
     }
     flow = isNonNullableByDefault
         ? FlowAnalysis<AstNode, Statement, Expression, PromotableElement,
-            DartType>(_typeOperations, assignedVariables!)
+                DartType>(_typeOperations, assignedVariables!,
+            respectImplicitlyTypedVarInitializers:
+                respectImplicitlyTypedVarInitializers)
         : FlowAnalysis<AstNode, Statement, Expression, PromotableElement,
             DartType>.legacy(_typeOperations, assignedVariables!);
   }
@@ -345,8 +357,8 @@
   final MigrationResolutionHooks migrationResolutionHooks;
 
   FlowAnalysisHelperForMigration(TypeSystemImpl typeSystem,
-      this.migrationResolutionHooks, bool isNonNullableByDefault)
-      : super(typeSystem, false, isNonNullableByDefault);
+      this.migrationResolutionHooks, FeatureSet featureSet)
+      : super(typeSystem, false, featureSet);
 
   @override
   void topLevelDeclaration_enter(AstNode node, FormalParameterList? parameters,
@@ -400,6 +412,9 @@
   }
 
   @override
+  bool isTypeParameterType(DartType type) => type is TypeParameterType;
+
+  @override
   DartType promoteToNonNull(DartType type) {
     return typeSystem.promoteToNonNull(type);
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index 1c4f15f..d243983 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -114,9 +114,10 @@
     iterable.accept(_resolver);
     iterable = forEachParts.iterable;
 
-    _resolver.nullableDereferenceVerifier.expression(iterable,
-        errorCode:
-            CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR);
+    _resolver.nullableDereferenceVerifier.expression(
+      CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR,
+      iterable,
+    );
 
     loopVariable?.accept(_resolver);
     var elementType = _computeForEachElementType(iterable, isAsync);
@@ -129,20 +130,19 @@
     }
 
     if (loopVariable != null) {
-      _resolver.flowAnalysis?.flow
-          ?.declare(loopVariable.declaredElement!, true);
+      _resolver.flowAnalysis.flow?.declare(loopVariable.declaredElement!, true);
     }
 
-    _resolver.flowAnalysis?.flow?.forEach_bodyBegin(node);
+    _resolver.flowAnalysis.flow?.forEach_bodyBegin(node);
     if (identifierElement is PromotableElement &&
         forEachParts is ForEachPartsWithIdentifier) {
-      _resolver.flowAnalysis?.flow?.write(forEachParts, identifierElement,
+      _resolver.flowAnalysis.flow?.write(forEachParts, identifierElement,
           elementType ?? DynamicTypeImpl.instance, null);
     }
 
-    _resolveBody(body);
+    body.accept(_resolver);
 
-    _resolver.flowAnalysis?.flow?.forEach_end();
+    _resolver.flowAnalysis.flow?.forEach_end();
   }
 
   void _forParts(AstNode node, ForParts forParts, AstNode body) {
@@ -152,7 +152,7 @@
       forParts.initialization?.accept(_resolver);
     }
 
-    _resolver.flowAnalysis?.for_conditionBegin(node);
+    _resolver.flowAnalysis.for_conditionBegin(node);
 
     var condition = forParts.condition;
     if (condition != null) {
@@ -160,25 +160,17 @@
       condition.accept(_resolver);
       condition = forParts.condition!;
       var whyNotPromoted =
-          _resolver.flowAnalysis?.flow?.whyNotPromoted(condition);
+          _resolver.flowAnalysis.flow?.whyNotPromoted(condition);
       _resolver.boolExpressionVerifier
           .checkForNonBoolCondition(condition, whyNotPromoted: whyNotPromoted);
     }
 
-    _resolver.flowAnalysis?.for_bodyBegin(node, condition);
-    _resolveBody(body);
+    _resolver.flowAnalysis.for_bodyBegin(node, condition);
+    body.accept(_resolver);
 
-    _resolver.flowAnalysis?.flow?.for_updaterBegin();
+    _resolver.flowAnalysis.flow?.for_updaterBegin();
     forParts.updaters.accept(_resolver);
 
-    _resolver.flowAnalysis?.flow?.for_end();
-  }
-
-  void _resolveBody(AstNode body) {
-    if (body is Statement) {
-      _resolver.visitStatementInScope(body);
-    } else {
-      body.accept(_resolver);
-    }
+    _resolver.flowAnalysis.flow?.for_end();
   }
 }
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 8543e5e..48a6c65 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
@@ -24,7 +24,7 @@
 
   FunctionExpressionInvocationResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper;
 
@@ -60,8 +60,10 @@
       return;
     }
 
-    _nullableDereferenceVerifier.expression(function,
-        errorCode: CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE);
+    _nullableDereferenceVerifier.expression(
+      CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE,
+      function,
+    );
 
     if (receiverType is FunctionType) {
       _resolve(node, receiverType, whyNotPromotedList);
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
index ed02e6a..be1eec6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
@@ -23,7 +23,7 @@
   FunctionExpressionResolver({
     required ResolverVisitor resolver,
     required MigrationResolutionHooks? migrationResolutionHooks,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _migrationResolutionHooks = migrationResolutionHooks,
         _inferenceHelper = resolver.inferenceHelper;
 
@@ -32,11 +32,14 @@
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
   void resolve(FunctionExpressionImpl node) {
-    var isFunctionDeclaration = node.parent is FunctionDeclaration;
+    var parent = node.parent;
+    // Note: `isFunctionDeclaration` must have an explicit type to work around
+    // https://github.com/dart-lang/language/issues/1785.
+    bool isFunctionDeclaration = parent is FunctionDeclaration;
     var body = node.body;
 
-    if (_resolver.flowAnalysis!.flow != null && !isFunctionDeclaration) {
-      _resolver.flowAnalysis!
+    if (_resolver.flowAnalysis.flow != null && !isFunctionDeclaration) {
+      _resolver.flowAnalysis
           .executableDeclaration_enter(node, node.parameters, true);
     }
 
@@ -53,16 +56,21 @@
     }
 
     node.visitChildren(_resolver);
+    if (isFunctionDeclaration) {
+      // A side effect of visiting the children is that the parameters are now
+      // in scope, so we can visit the documentation comment now.
+      parent.documentationComment?.accept(_resolver);
+    }
     _resolve2(node);
 
-    if (_resolver.flowAnalysis!.flow != null && !isFunctionDeclaration) {
+    if (_resolver.flowAnalysis.flow != null && !isFunctionDeclaration) {
       var bodyContext = BodyInferenceContext.of(node.body);
       _resolver.checkForBodyMayCompleteNormally(
         returnType: bodyContext?.contextType,
         body: body,
         errorNode: body,
       );
-      _resolver.flowAnalysis!.flow?.functionExpression_end();
+      _resolver.flowAnalysis.flow?.functionExpression_end();
       _resolver.nullSafetyDeadCodeVerifier.flowEnd(node);
     }
   }
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 76697c1..4db5773 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -53,11 +53,27 @@
       _resolvePrefixedIdentifierFunction(node, function);
     } else if (function is PropertyAccessImpl) {
       _resolvePropertyAccessFunction(node, function);
+    } else if (function is ConstructorReferenceImpl) {
+      var typeArguments = node.typeArguments;
+      if (typeArguments != null) {
+        // Something like `List.filled<int>`.
+        function.accept(_resolver);
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
+          typeArguments,
+          [function.constructorName.type.name, function.constructorName.name],
+        );
+        _resolve(node: node, rawType: function.staticType);
+      }
     } else {
       // TODO(srawlins): Handle `function` being a [SuperExpression].
 
       function.accept(_resolver);
-      _resolveDisallowedExpression(node, node.function.staticType);
+      if (function.staticType is FunctionType) {
+        _resolve(node: node, rawType: function.staticType);
+      } else {
+        _resolveDisallowedExpression(node, function.staticType);
+      }
     }
   }
 
@@ -144,16 +160,33 @@
     }
 
     if (rawType is FunctionType) {
-      var typeArguments = _checkTypeArguments(
-        // `node.typeArguments`, coming from the parser, is never null.
-        node.typeArguments!, name, rawType.typeFormals,
-        CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
-      );
+      // A FunctionReference with type arguments and with a
+      // ConstructorReference child is invalid. E.g. `List.filled<int>`.
+      // [CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR] is
+      // reported elsewhere; don't check type arguments here.
+      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 invokeType = rawType.instantiate(typeArguments);
-      node.typeArgumentTypes = typeArguments;
-      node.staticType = invokeType;
+        var invokeType = rawType.instantiate(typeArguments);
+        node.typeArgumentTypes = typeArguments;
+        node.staticType = invokeType;
+      }
     } else {
+      if (_resolver.isConstructorTearoffsEnabled) {
+        // Only report constructor tearoff-related errors if the constructor
+        // tearoff feature is enabled.
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
+          node.function,
+          [],
+        );
+      }
       node.staticType = DynamicTypeImpl.instance;
     }
   }
@@ -186,11 +219,15 @@
   /// with what the user may be intending.
   void _resolveDisallowedExpression(
       FunctionReferenceImpl node, DartType? rawType) {
-    _errorReporter.reportErrorForNode(
-      CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
-      node.function,
-      [],
-    );
+    if (_resolver.isConstructorTearoffsEnabled) {
+      // Only report constructor tearoff-related errors if the constructor
+      // tearoff feature is enabled.
+      _errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
+        node.function,
+        [],
+      );
+    }
     _resolve(node: node, rawType: rawType);
   }
 
@@ -227,7 +264,7 @@
 
     if (member is PropertyAccessorElement) {
       function.accept(_resolver);
-      _resolveDisallowedExpression(node, member.returnType);
+      _resolve(node: node, rawType: member.returnType);
       return;
     }
 
@@ -236,7 +273,7 @@
 
   void _resolvePrefixedIdentifierFunction(
       FunctionReferenceImpl node, PrefixedIdentifierImpl function) {
-    var prefixElement = _resolver.nameScope.lookup(function.prefix.name).getter;
+    var prefixElement = function.prefix.scopeLookupResult!.getter;
 
     if (prefixElement == null) {
       _errorReporter.reportErrorForNode(
@@ -278,8 +315,11 @@
 
     function.prefix.staticType = prefixType;
     if (prefixType != null && prefixType.isDynamic) {
-      // TODO(srawlins): Report error. See spec text: "We do not allow dynamic
-      // explicit instantiation."
+      _errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+        function,
+        [],
+      );
       node.staticType = DynamicTypeImpl.instance;
       return;
     }
@@ -323,7 +363,7 @@
     } else if (target is ThisExpressionImpl) {
       targetType = target.typeOrThrow;
     } else if (target is SimpleIdentifierImpl) {
-      var targetElement = _resolver.nameScope.lookup(target.name).getter;
+      var targetElement = target.scopeLookupResult!.getter;
       if (targetElement is VariableElement) {
         targetType = targetElement.type;
       } else if (targetElement is PropertyAccessorElement) {
@@ -334,7 +374,7 @@
         return;
       }
     } else if (target is PrefixedIdentifierImpl) {
-      var prefixElement = _resolver.nameScope.lookup(target.prefix.name).getter;
+      var prefixElement = target.prefix.scopeLookupResult!.getter;
       if (prefixElement is PrefixElement) {
         var prefixName = target.identifier.name;
         var targetElement = prefixElement.scope.lookup(prefixName).getter;
@@ -364,6 +404,15 @@
       return;
     } else {
       targetType = target.typeOrThrow;
+      if (targetType.isDynamic) {
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+          node,
+          [],
+        );
+        node.staticType = DynamicTypeImpl.instance;
+        return;
+      }
     }
 
     var propertyElement = _resolver.typePropertyResolver
@@ -377,7 +426,7 @@
         .getter;
 
     if (propertyElement is TypeParameterElement) {
-      _resolveDisallowedExpression(node, propertyElement!.type);
+      _resolve(node: node, rawType: propertyElement!.type);
       return;
     }
 
@@ -437,7 +486,7 @@
 
   void _resolveSimpleIdentifierFunction(
       FunctionReferenceImpl node, SimpleIdentifierImpl function) {
-    var element = _resolver.nameScope.lookup(function.name).getter;
+    var element = function.scopeLookupResult!.getter;
 
     if (element == null) {
       DartType receiverType;
@@ -477,7 +526,7 @@
         }
 
         if (method is PropertyAccessorElement) {
-          _resolveDisallowedExpression(node, method.returnType);
+          _resolve(node: node, rawType: method.returnType);
           return;
         }
 
@@ -529,17 +578,17 @@
     } else if (element is PropertyAccessorElement) {
       function.staticElement = element;
       function.staticType = element.returnType;
-      _resolveDisallowedExpression(node, element.returnType);
+      _resolve(node: node, rawType: element.returnType);
       return;
     } else if (element is ExecutableElement) {
       function.staticElement = element;
       function.staticType = element.type;
-      _resolveDisallowedExpression(node, element.type);
+      _resolve(node: node, rawType: element.type);
       return;
     } else if (element is VariableElement) {
       function.staticElement = element;
       function.staticType = element.type;
-      _resolveDisallowedExpression(node, element.type);
+      _resolve(node: node, rawType: element.type);
       return;
     } else {
       _resolveDisallowedExpression(node, DynamicTypeImpl.instance);
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index 1bc11bc..f665fe8f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -50,7 +50,7 @@
       typeFormals: typeParameters,
       parameters: element.parameters,
       returnType: element.returnType,
-      nullabilitySuffix: NullabilitySuffix.star,
+      nullabilitySuffix: NullabilitySuffix.none,
     );
   }
 }
@@ -282,7 +282,7 @@
 
     expression.staticType = type;
     if (_typeSystem.isBottom(type)) {
-      _resolver.flowAnalysis?.flow?.handleExit();
+      _resolver.flowAnalysis.flow?.handleExit();
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
index 542fd5e..f0735d6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
@@ -2,94 +2,55 @@
 // for 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/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
-import 'package:analyzer/src/generated/resolver.dart';
 
+/// Class containing static methods for performing lexical resolution of
+/// identifiers.
 class LexicalLookup {
-  final ResolverVisitor _resolver;
+  /// Do not construct
+  LexicalLookup._() {
+    assert(false, 'Do not construct instances of LexicalLookup');
+  }
 
-  LexicalLookup(this._resolver);
+  /// Interprets the result of a scope lookup, assuming we are trying to look up
+  /// a getter.  If a matching element is found, a [LexicalLookupResult] is
+  /// returned.  Otherwise `null` is returned.
+  static LexicalLookupResult? resolveGetter(ScopeLookupResult scopeResult) {
+    var scopeGetter = scopeResult.getter;
+    var scopeSetter = scopeResult.setter;
+    if (scopeGetter != null || scopeSetter != null) {
+      if (scopeGetter != null) {
+        return LexicalLookupResult(requested: scopeGetter);
+      }
+      if (scopeSetter != null && !scopeSetter.isInstanceMember) {
+        return LexicalLookupResult(recovery: scopeSetter);
+      }
+    }
 
-  LexicalLookupResult perform({
-    required SimpleIdentifier node,
-    required bool setter,
-  }) {
-    var id = node.name;
-    var scopeResult = _resolver.nameScope.lookup(id);
+    return null;
+  }
+
+  /// Interprets the result of a scope lookup, assuming we are trying to look up
+  /// a setter.  If a matching element is found, a [LexicalLookupResult] is
+  /// returned.  Otherwise `null` is returned.
+  static LexicalLookupResult? resolveSetter(ScopeLookupResult scopeResult) {
     var scopeGetter = scopeResult.getter;
     var scopeSetter = scopeResult.setter;
     if (scopeGetter != null || scopeSetter != null) {
       if (scopeGetter is VariableElement) {
         return LexicalLookupResult(requested: scopeGetter);
       }
-      if (setter) {
-        if (scopeSetter != null) {
-          return LexicalLookupResult(
-            requested: _resolver.toLegacyElement(scopeSetter),
-          );
-        }
-        if (scopeGetter != null && !scopeGetter.isInstanceMember) {
-          return LexicalLookupResult(
-            recovery: _resolver.toLegacyElement(scopeGetter),
-          );
-        }
-      } else {
-        if (scopeGetter != null) {
-          return LexicalLookupResult(
-            requested: _resolver.toLegacyElement(scopeGetter),
-          );
-        }
-        if (scopeSetter != null && !scopeSetter.isInstanceMember) {
-          return LexicalLookupResult(
-            recovery: _resolver.toLegacyElement(scopeSetter),
-          );
-        }
+      if (scopeSetter != null) {
+        return LexicalLookupResult(requested: scopeSetter);
+      }
+      if (scopeGetter != null && !scopeGetter.isInstanceMember) {
+        return LexicalLookupResult(recovery: scopeGetter);
       }
     }
 
-    var thisType = _resolver.thisType;
-    if (thisType == null) {
-      var recoveryElement = setter ? scopeGetter : scopeGetter;
-      return LexicalLookupResult(
-        recovery: _resolver.toLegacyElement(recoveryElement),
-      );
-    }
-
-    var propertyResult = _resolver.typePropertyResolver.resolve(
-      receiver: null,
-      receiverType: thisType,
-      name: id,
-      propertyErrorEntity: node,
-      nameErrorEntity: node,
-    );
-
-    if (setter) {
-      var setterElement = propertyResult.setter;
-      if (setterElement != null) {
-        return LexicalLookupResult(
-          requested: _resolver.toLegacyElement(setterElement),
-        );
-      } else {
-        var recoveryElement = scopeGetter ?? propertyResult.getter;
-        return LexicalLookupResult(
-          recovery: _resolver.toLegacyElement(recoveryElement),
-        );
-      }
-    } else {
-      var getterElement = propertyResult.getter;
-      if (getterElement != null) {
-        return LexicalLookupResult(
-          requested: _resolver.toLegacyElement(getterElement),
-        );
-      } else {
-        var recoveryElement = scopeSetter ?? propertyResult.setter;
-        return LexicalLookupResult(
-          recovery: _resolver.toLegacyElement(recoveryElement),
-        );
-      }
-    }
+    return null;
   }
 }
 
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 44388f6..d5d7b50 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
@@ -75,9 +74,6 @@
         _extensionResolver = _resolver.extensionResolver,
         _inferenceHelper = inferenceHelper;
 
-  /// The scope used to resolve identifiers.
-  Scope get nameScope => _resolver.nameScope;
-
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
   void resolve(MethodInvocationImpl node,
@@ -198,7 +194,7 @@
 
     expression.staticType = type;
     if (_resolver.typeSystem.isBottom(type)) {
-      _resolver.flowAnalysis?.flow?.handleExit();
+      _resolver.flowAnalysis.flow?.handleExit();
     }
   }
 
@@ -495,9 +491,11 @@
         );
       } else {
         _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
-        _resolver.nullableDereferenceVerifier.report(methodName, receiverType,
-            errorCode: CompileTimeErrorCode
-                .UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE);
+        _resolver.nullableDereferenceVerifier.report(
+          CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          methodName,
+          receiverType,
+        );
       }
       return;
     }
@@ -531,7 +529,7 @@
       SimpleIdentifierImpl nameNode,
       String name,
       List<WhyNotPromotedGetter> whyNotPromotedList) {
-    var element = nameScope.lookup(name).getter;
+    var element = nameNode.scopeLookupResult!.getter;
     if (element != null) {
       element = _resolver.toLegacyElement(element);
       nameNode.staticElement = element;
@@ -828,7 +826,7 @@
           node.methodName,
         );
       }
-      _resolver.flowAnalysis?.flow?.propertyGet(
+      _resolver.flowAnalysis.flow?.propertyGet(
           functionExpression,
           target,
           node.methodName.name,
@@ -845,7 +843,7 @@
     NodeReplacer.replace(node, invocation);
     node.setProperty(_rewriteResultKey, invocation);
     InferenceContext.setTypeFromNode(invocation, node);
-    _resolver.flowAnalysis?.transferTestData(node, invocation);
+    _resolver.flowAnalysis.transferTestData(node, invocation);
   }
 
   void _setDynamicResolution(MethodInvocationImpl node,
diff --git a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
index c09803d..376a9d7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PostfixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
@@ -173,7 +173,7 @@
       if (operand is SimpleIdentifier) {
         var element = operand.staticElement;
         if (element is PromotableElement) {
-          _resolver.flowAnalysis?.flow
+          _resolver.flowAnalysis.flow
               ?.write(node, element, operatorReturnType, null);
         }
       }
@@ -213,6 +213,6 @@
     _inferenceHelper.recordStaticType(node, type);
 
     _resolver.nullShortingTermination(node);
-    _resolver.flowAnalysis?.flow?.nonNullAssert_end(operand);
+    _resolver.flowAnalysis.flow?.nonNullAssert_end(operand);
   }
 }
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 6e787e6..87aa6c6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PrefixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
@@ -210,8 +210,7 @@
         if (operand is SimpleIdentifier) {
           var element = operand.staticElement;
           if (element is PromotableElement) {
-            _resolver.flowAnalysis?.flow
-                ?.write(node, element, staticType, null);
+            _resolver.flowAnalysis.flow?.write(node, element, staticType, null);
           }
         }
       }
@@ -226,13 +225,13 @@
 
     operand.accept(_resolver);
     operand = node.operand;
-    var whyNotPromoted = _resolver.flowAnalysis?.flow?.whyNotPromoted(operand);
+    var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(operand);
 
     _resolver.boolExpressionVerifier.checkForNonBoolNegationExpression(operand,
         whyNotPromoted: whyNotPromoted);
 
     _recordStaticType(node, _typeProvider.boolType);
 
-    _resolver.flowAnalysis?.flow?.logicalNot_end(node, operand);
+    _resolver.flowAnalysis.flow?.logicalNot_end(node, operand);
   }
 }
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 10c9f96..84c1ec2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -7,11 +7,13 @@
 import 'package:analyzer/dart/element/type.dart';
 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/extensions.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
+import 'package:analyzer/src/dart/resolver/lexical_lookup.dart';
 import 'package:analyzer/src/dart/resolver/resolution_result.dart';
 import 'package:analyzer/src/error/assignment_verifier.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -191,18 +193,19 @@
   }
 
   PropertyElementResolverResult resolveSimpleIdentifier({
-    required SimpleIdentifier node,
+    required SimpleIdentifierImpl node,
     required bool hasRead,
     required bool hasWrite,
   }) {
     Element? readElementRequested;
     Element? readElementRecovery;
     if (hasRead) {
-      var readLookup = _resolver.lexicalLookup(node: node, setter: false);
-      readElementRequested = readLookup.requested;
+      var readLookup = LexicalLookup.resolveGetter(node.scopeLookupResult!) ??
+          _resolver.thisLookupGetter(node);
+      readElementRequested = _resolver.toLegacyElement(readLookup?.requested);
       if (readElementRequested is PropertyAccessorElement &&
           !readElementRequested.isStatic) {
-        _resolver.flowAnalysis?.flow?.thisOrSuperPropertyGet(node, node.name,
+        _resolver.flowAnalysis.flow?.thisOrSuperPropertyGet(node, node.name,
             readElementRequested, readElementRequested.returnType);
       }
       _resolver.checkReadOfNotAssignedLocalVariable(node, readElementRequested);
@@ -211,9 +214,10 @@
     Element? writeElementRequested;
     Element? writeElementRecovery;
     if (hasWrite) {
-      var writeLookup = _resolver.lexicalLookup(node: node, setter: true);
-      writeElementRequested = writeLookup.requested;
-      writeElementRecovery = writeLookup.recovery;
+      var writeLookup = LexicalLookup.resolveSetter(node.scopeLookupResult!) ??
+          _resolver.thisLookupSetter(node);
+      writeElementRequested = _resolver.toLegacyElement(writeLookup?.requested);
+      writeElementRecovery = _resolver.toLegacyElement(writeLookup?.recovery);
 
       AssignmentVerifier(_resolver.definingLibrary, _errorReporter).verify(
         node: node,
@@ -372,7 +376,7 @@
       nameErrorEntity: propertyName,
     );
 
-    _resolver.flowAnalysis?.flow?.propertyGet(
+    _resolver.flowAnalysis.flow?.propertyGet(
         node,
         target,
         propertyName.name,
@@ -652,7 +656,7 @@
             );
           }
         }
-        _resolver.flowAnalysis?.flow?.propertyGet(
+        _resolver.flowAnalysis.flow?.propertyGet(
             node,
             target,
             propertyName.name,
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index f08fb8d..9efde38 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -55,6 +55,7 @@
 /// 2. Create and set new elements for local declarations.
 /// 3. Resolve all [TypeName]s - set elements and types.
 /// 4. Resolve all [GenericFunctionType]s - set their types.
+/// 5. Rewrite AST where resolution provides a more accurate understanding.
 class ResolutionVisitor extends RecursiveAstVisitor<void> {
   LibraryElementImpl _libraryElement;
   final TypeProvider _typeProvider;
@@ -343,9 +344,17 @@
       var nameOffset = nameNode?.offset ?? -1;
       if (node.parameter is FieldFormalParameter) {
         // Only for recovery, this should not happen in valid code.
-        element = DefaultFieldFormalParameterElementImpl(name, nameOffset);
+        element = DefaultFieldFormalParameterElementImpl(
+          name: name,
+          nameOffset: nameOffset,
+          parameterKind: node.kind,
+        );
       } else {
-        element = DefaultParameterElementImpl(name, nameOffset);
+        element = DefaultParameterElementImpl(
+          name: name,
+          nameOffset: nameOffset,
+          parameterKind: node.kind,
+        );
       }
       _elementHolder.addParameter(element);
 
@@ -353,7 +362,6 @@
       element.isConst = node.isConst;
       element.isExplicitlyCovariant = node.parameter.covariantKeyword != null;
       element.isFinal = node.isFinal;
-      element.parameterKind = node.kind;
 
       if (normalParameter is SimpleFormalParameterImpl &&
           normalParameter.type == null) {
@@ -458,14 +466,14 @@
       } else {
         // Only for recovery, this should not happen in valid code.
         element = FieldFormalParameterElementImpl(
-          nameNode.name,
-          nameNode.offset,
+          name: nameNode.name,
+          nameOffset: nameNode.offset,
+          parameterKind: node.kind,
         );
         _elementHolder.enclose(element);
         element.isConst = node.isConst;
         element.isExplicitlyCovariant = node.covariantKeyword != null;
         element.isFinal = node.isFinal;
-        element.parameterKind = node.kind;
         _setCodeRange(element, node);
       }
       nameNode.staticElement = element;
@@ -474,22 +482,25 @@
     _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementHolder(ElementHolder(element), () {
-      _withNameScope(() {
-        _buildTypeParameterElements(node.typeParameters);
-        node.typeParameters?.accept(this);
-        node.type?.accept(this);
-        if (_elementWalker != null) {
-          _withElementWalker(ElementWalker.forParameter(element), () {
-            node.parameters?.accept(this);
+      _withElementWalker(
+        _elementWalker != null ? ElementWalker.forParameter(element) : null,
+        () {
+          _withNameScope(() {
+            _buildTypeParameterElements(node.typeParameters);
+            node.typeParameters?.accept(this);
+            node.type?.accept(this);
+            if (_elementWalker != null) {
+              node.parameters?.accept(this);
+            } else {
+              // Only for recovery, this should not happen in valid code.
+              element.type = node.type?.type ?? _dynamicType;
+              _withElementWalker(null, () {
+                node.parameters?.accept(this);
+              });
+            }
           });
-        } else {
-          // Only for recovery, this should not happen in valid code.
-          element.type = node.type?.type ?? _dynamicType;
-          _withElementWalker(null, () {
-            node.parameters?.accept(this);
-          });
-        }
-      });
+        },
+      );
     });
   }
 
@@ -634,12 +645,15 @@
       if (_elementWalker != null) {
         element = _elementWalker!.getParameter();
       } else {
-        element = ParameterElementImpl(nameNode.name, nameNode.offset);
+        element = ParameterElementImpl(
+          name: nameNode.name,
+          nameOffset: nameNode.offset,
+          parameterKind: node.kind,
+        );
         _elementHolder.addParameter(element);
         element.isConst = node.isConst;
         element.isExplicitlyCovariant = node.covariantKeyword != null;
         element.isFinal = node.isFinal;
-        element.parameterKind = node.kind;
         _setCodeRange(element, node);
       }
       nameNode.staticElement = element;
@@ -744,6 +758,30 @@
   }
 
   @override
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
+    var newNode = _astRewriter.instanceCreationExpression(_nameScope, node);
+    if (newNode != node) {
+      if (node.constructorName.type.typeArguments != null &&
+          newNode is MethodInvocation &&
+          newNode.target is FunctionReference &&
+          !_libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
+        // A function reference with explicit type arguments (an expression of
+        // the form `a<...>.m(...)` or `p.a<...>.m(...)` where `a` does not
+        // refer to a class name, nor a type alias), is illegal without the
+        // constructor tearoff feature.
+        //
+        // This is a case where the parser does not report an error, because the
+        // parser thinks this could be an InstanceCreationExpression.
+        _errorReporter.reportErrorForNode(
+            HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS, node, []);
+      }
+      return newNode.accept(this);
+    }
+
+    super.visitInstanceCreationExpression(node);
+  }
+
+  @override
   void visitLabeledStatement(LabeledStatement node) {
     bool onSwitchStatement = node.statement is SwitchStatement;
     _buildLabelElements(node.labels, onSwitchStatement, false);
@@ -860,6 +898,26 @@
   }
 
   @override
+  void visitPrefixedIdentifier(PrefixedIdentifier node) {
+    var newNode = _astRewriter.prefixedIdentifier(_nameScope, node);
+    if (newNode != node) {
+      return newNode.accept(this);
+    }
+
+    super.visitPrefixedIdentifier(node);
+  }
+
+  @override
+  void visitPropertyAccess(PropertyAccess node) {
+    var newNode = _astRewriter.propertyAccess(_nameScope, node);
+    if (newNode != node) {
+      return newNode.accept(this);
+    }
+
+    super.visitPropertyAccess(node);
+  }
+
+  @override
   void visitSimpleFormalParameter(covariant SimpleFormalParameterImpl node) {
     ParameterElementImpl element;
     if (node.parent is DefaultFormalParameter) {
@@ -870,9 +928,17 @@
         element = _elementWalker!.getParameter();
       } else {
         if (nameNode != null) {
-          element = ParameterElementImpl(nameNode.name, nameNode.offset);
+          element = ParameterElementImpl(
+            name: nameNode.name,
+            nameOffset: nameNode.offset,
+            parameterKind: node.kind,
+          );
         } else {
-          element = ParameterElementImpl('', -1);
+          element = ParameterElementImpl(
+            name: '',
+            nameOffset: -1,
+            parameterKind: node.kind,
+          );
         }
         _elementHolder.addParameter(element);
 
@@ -880,7 +946,6 @@
         element.isConst = node.isConst;
         element.isExplicitlyCovariant = node.covariantKeyword != null;
         element.isFinal = node.isFinal;
-        element.parameterKind = node.kind;
         if (node.type == null) {
           element.hasImplicitType = true;
         }
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 845c8e1..83c03c4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -6,9 +6,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/scope.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/engine.dart';
 
@@ -350,20 +348,3 @@
     return null;
   }
 }
-
-extension ScopeExtension on Scope {
-  List<ExtensionElement> get extensions {
-    return _enclosingLibraryScope.extensions;
-  }
-
-  LibraryScope get _enclosingLibraryScope {
-    Scope? scope = this;
-    while (scope != null) {
-      if (scope is LibraryScope) {
-        return scope;
-      }
-      scope = (scope as EnclosedScope).parent;
-    }
-    throw StateError('Can only be used in a LibraryScope.');
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart b/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart
new file mode 100644
index 0000000..d274eb8
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/resolver/this_lookup.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.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/resolver/lexical_lookup.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+
+/// Class containing static methods for resolving identifiers as implicit
+/// property gets/sets on the type of `this`.
+class ThisLookup {
+  /// Do not construct
+  ThisLookup._() {
+    assert(false, 'Do not construct instances of LexicalLookup');
+  }
+
+  /// Attempts to resolve an identifier with name [id] via implicit `this.`,
+  /// assuming we are trying to look up a getter.  If a matching element is
+  /// found, a [LexicalLookupResult] is returned.  Otherwise `null` is returned.
+  static LexicalLookupResult? lookupGetter(
+      ResolverVisitor resolver, SimpleIdentifier node) {
+    var id = node.name;
+    var thisType = resolver.thisType;
+    if (thisType == null) {
+      return null;
+    }
+
+    var propertyResult = resolver.typePropertyResolver.resolve(
+      receiver: null,
+      receiverType: thisType,
+      name: id,
+      propertyErrorEntity: node,
+      nameErrorEntity: node,
+    );
+
+    var getterElement = propertyResult.getter;
+    if (getterElement != null) {
+      return LexicalLookupResult(requested: getterElement);
+    } else {
+      return LexicalLookupResult(recovery: propertyResult.setter);
+    }
+  }
+
+  /// Attempts to resolve an identifier with name [id] via implicit `this.`,
+  /// assuming we are trying to look up a setter.  If a matching element is
+  /// found, a [LexicalLookupResult] is returned.  Otherwise `null` is returned.
+  static LexicalLookupResult? lookupSetter(
+      ResolverVisitor resolver, SimpleIdentifier node) {
+    var id = node.name;
+    var thisType = resolver.thisType;
+    if (thisType == null) {
+      return null;
+    }
+
+    var propertyResult = resolver.typePropertyResolver.resolve(
+      receiver: null,
+      receiverType: thisType,
+      name: id,
+      propertyErrorEntity: node,
+      nameErrorEntity: node,
+    );
+
+    var setterElement = propertyResult.setter;
+    if (setterElement != null) {
+      return LexicalLookupResult(requested: setterElement);
+    } else {
+      return LexicalLookupResult(recovery: propertyResult.getter);
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
index 6183525..1f2aaf5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
@@ -72,6 +72,12 @@
 
     receiverType = _resolveTypeParameter(receiverType, ifLegacy: true);
 
+    if (name == 'new') {
+      _needsGetterError = true;
+      _needsSetterError = true;
+      return _toResult();
+    }
+
     if (_typeSystem.isDynamicBounded(receiverType)) {
       _lookupInterfaceType(
         _typeProvider.objectType,
@@ -129,7 +135,7 @@
       }
 
       List<DiagnosticMessage> messages = [];
-      var flow = _resolver.flowAnalysis?.flow;
+      var flow = _resolver.flowAnalysis.flow;
       if (flow != null) {
         if (receiver != null) {
           messages = _resolver.computeWhyNotPromotedMessages(
@@ -143,8 +149,8 @@
         }
       }
       _resolver.nullableDereferenceVerifier.report(
-          propertyErrorEntity, receiverType,
-          errorCode: errorCode, arguments: [name], messages: messages);
+          errorCode, propertyErrorEntity, receiverType,
+          arguments: [name], messages: messages);
       _reportedGetterError = true;
       _reportedSetterError = true;
 
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 63d610e..1e41759 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -45,24 +45,24 @@
 
     InferenceContext.setTypeFromNode(initializer, node);
     if (isTopLevel) {
-      _resolver.flowAnalysis?.topLevelDeclaration_enter(node, null);
+      _resolver.flowAnalysis.topLevelDeclaration_enter(node, null);
     } else if (element.isLate) {
-      _resolver.flowAnalysis?.flow?.lateInitializer_begin(node);
+      _resolver.flowAnalysis.flow?.lateInitializer_begin(node);
     }
 
     initializer.accept(_resolver);
     initializer = node.initializer!;
     var whyNotPromoted =
-        _resolver.flowAnalysis?.flow?.whyNotPromoted(initializer);
+        _resolver.flowAnalysis.flow?.whyNotPromoted(initializer);
 
     if (parent.type == null) {
       _setInferredType(element, initializer.typeOrThrow);
     }
 
     if (isTopLevel) {
-      _resolver.flowAnalysis?.topLevelDeclaration_exit();
+      _resolver.flowAnalysis.topLevelDeclaration_exit();
     } else if (element.isLate) {
-      _resolver.flowAnalysis?.flow?.lateInitializer_end();
+      _resolver.flowAnalysis.flow?.lateInitializer_end();
     }
 
     // Initializers of top-level variables and fields are already included
diff --git a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
index 4238870..6e47fa5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
@@ -126,9 +126,10 @@
     node.expression.accept(_resolver);
 
     if (node.star != null) {
-      _resolver.nullableDereferenceVerifier.expression(node.expression,
-          errorCode: CompileTimeErrorCode
-              .UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH);
+      _resolver.nullableDereferenceVerifier.expression(
+        CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH,
+        node.expression,
+      );
     }
 
     bodyContext.addYield(node);
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index bfa745d..edf4483 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
@@ -285,6 +286,30 @@
         // visibleForTemplate or visibleForTesting, so leave it alone for now.
       }
     }
+
+    // Check for a reference to an undefined parameter in a `@UseResult.unless`
+    // annotation.
+    if (element.isUseResult) {
+      var undefinedParam = _findUndefinedUseResultParam(element, node, parent);
+      if (undefinedParam != null) {
+        String? name;
+        if (parent is FunctionDeclaration) {
+          name = parent.name.name;
+        } else if (parent is MethodDeclaration) {
+          name = parent.name.name;
+        }
+        if (name != null) {
+          var paramName = undefinedParam is SimpleStringLiteral
+              ? undefinedParam.value
+              : undefinedParam.staticParameterElement?.name;
+          _errorReporter.reportErrorForNode(
+              HintCode.UNDEFINED_REFERENCED_PARAMETER,
+              undefinedParam,
+              [paramName ?? undefinedParam, name]);
+        }
+      }
+    }
+
     var kinds = _targetKindsFor(element);
     if (kinds.isNotEmpty) {
       if (!_isValidTarget(parent, kinds)) {
@@ -748,7 +773,8 @@
 
   @override
   void visitTypeName(TypeName node) {
-    if (node.question != null) {
+    var question = node.question;
+    if (question != null) {
       var name = node.name.name;
       var type = node.typeOrThrow;
       // Only report non-aliased, non-user-defined `Null?` and `dynamic?`. Do
@@ -756,8 +782,8 @@
       if ((type.element == _nullType.element ||
               (type.isDynamic && name == 'dynamic')) &&
           type.alias == null) {
-        _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_QUESTION_MARK, node, [name]);
+        _errorReporter.reportErrorForToken(
+            HintCode.UNNECESSARY_QUESTION_MARK, question, [name]);
       }
     }
     super.visitTypeName(node);
@@ -1538,6 +1564,60 @@
     }
   }
 
+  Expression? _findUndefinedUseResultParam(
+      ElementAnnotation element, Annotation node, AstNode parent) {
+    var constructorName = node.name;
+    if (constructorName is! PrefixedIdentifier ||
+        constructorName.identifier.name != 'unless') {
+      return null;
+    }
+
+    var unlessParam = element
+        .computeConstantValue()
+        ?.getField('parameterDefined')
+        ?.toStringValue();
+    if (unlessParam == null) {
+      return null;
+    }
+
+    Expression? checkParams(FormalParameterList? parameterList) {
+      if (parameterList == null) {
+        return null;
+      }
+
+      for (var param in parameterList.parameters) {
+        // Param is defined.
+        if (param.identifier?.name == unlessParam) {
+          return null;
+        }
+      }
+
+      // Find and return the parameter value node.
+      var arguments = node.arguments?.arguments;
+      if (arguments == null) {
+        return null;
+      }
+
+      for (var arg in arguments) {
+        if (arg is NamedExpression &&
+            arg.name.label.name == 'parameterDefined') {
+          return arg.expression;
+        }
+      }
+
+      return null;
+    }
+
+    if (parent is FunctionDeclarationImpl) {
+      return checkParams(parent.functionExpression.parameters);
+    }
+    if (parent is MethodDeclarationImpl) {
+      return checkParams(parent.parameters);
+    }
+
+    return null;
+  }
+
   /// Return subexpressions that are marked `@doNotStore`, as a map so that
   /// corresponding elements can be used in the diagnostic message.
   Map<Expression, Element> _getSubExpressionsMarkedDoNotStore(
diff --git a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
index e56e3ad..108cc22 100644
--- a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
+++ b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
@@ -25,7 +25,7 @@
     required ResolverVisitor resolver,
     required ErrorReporter errorReporter,
     required NullableDereferenceVerifier nullableDereferenceVerifier,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _errorReporter = errorReporter,
         _nullableDereferenceVerifier = nullableDereferenceVerifier,
         _boolType = resolver.typeSystem.typeProvider.boolType;
@@ -53,9 +53,10 @@
     if (!_checkForUseOfVoidResult(expression) &&
         !_resolver.typeSystem.isAssignableTo(type, _boolType)) {
       if (type.isDartCoreBool) {
-        _nullableDereferenceVerifier.report(expression, type,
-            errorCode: CompileTimeErrorCode
-                .UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION,
+        _nullableDereferenceVerifier.report(
+            CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION,
+            expression,
+            type,
             messages: _resolver.computeWhyNotPromotedMessages(
                 expression, whyNotPromoted?.call()));
       } else {
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index fb2881f..0ea830f 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1518,6 +1518,43 @@
 
   /**
    * Parameters:
+   * 0: the name of the member
+   */
+  static const CompileTimeErrorCode
+      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.",
+          uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER');
+
+  /**
+   * Parameters:
+   * 0: the name of the member
+   */
+  static const CompileTimeErrorCode
+      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: "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');
+
+  /**
+   * Parameters:
+   * 0: the name of the member
+   */
+  static const CompileTimeErrorCode
+      CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER = CompileTimeErrorCode(
+          'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
+          "The class '{0} doesn't have a constructor named '{1}.",
+          correction: "Try invoking a different constructor, or defining a "
+              "constructor named '{1}'.",
+          uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER');
+
+  /**
+   * Parameters:
    * 0: the name of the abstract method
    * 1: the name of the enclosing class
    */
@@ -1565,7 +1602,7 @@
 
   /**
    * Parameters:
-   * 0: the name of the field
+   * 0: the name of the constructor and field
    */
   // #### Description
   //
@@ -1610,6 +1647,19 @@
 
   /**
    * Parameters:
+   * 0: the name of the constructor and getter
+   */
+  static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER =
+      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.",
+          hasPublishedDocs: true,
+          uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER');
+
+  /**
+   * Parameters:
    * 0: the name of the constructor
    */
   static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD =
@@ -1622,6 +1672,19 @@
           uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD');
 
   /**
+   * Parameters:
+   * 0: the name of the constructor and setter
+   */
+  static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER =
+      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.",
+          hasPublishedDocs: true,
+          uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER');
+
+  /**
    * 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
    * error if `C` declares a getter or a setter with basename `n`, and has a
    * method named `n`.
@@ -2845,7 +2908,7 @@
    */
   static const CompileTimeErrorCode CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
       CompileTimeErrorCode('CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-          "The class '{0}' doesn't have a default constant constructor.",
+          "The class '{0}' doesn't have an unnamed constant constructor.",
           correction: "Try calling a different constructor.");
 
   static const CompileTimeErrorCode CONTINUE_LABEL_ON_SWITCH =
@@ -3201,7 +3264,7 @@
   static const CompileTimeErrorCode DUPLICATE_CONSTRUCTOR_DEFAULT =
       CompileTimeErrorCode(
     'DUPLICATE_CONSTRUCTOR',
-    "The default constructor is already defined.",
+    "The unnamed constructor is already defined.",
     correction: "Try giving one of the constructors a name.",
     hasPublishedDocs: true,
     uniqueName: 'DUPLICATE_CONSTRUCTOR_DEFAULT',
@@ -5165,6 +5228,19 @@
               "type, or using 'dynamic' as the type argument here.");
 
   /**
+   * No parameters.
+   */
+  static const CompileTimeErrorCode
+      GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC = CompileTimeErrorCode(
+    'GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
+    "A method tearoff on a target whose type is 'dynamic' can't have type "
+        "arguments.",
+    correction:
+        "Specify the type of the target, or remove the type arguments from the "
+        "method tearoff.",
+  );
+
+  /**
    * 10.3 Setters: It is a compile-time error if a class has a setter named
    * `v=` with argument type `T` and a getter named `v` with return type `S`,
    * and `S` may not be assigned to `T`.
@@ -7503,8 +7579,10 @@
   // }
   // ```
   static const CompileTimeErrorCode LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR =
-      CompileTimeErrorCode('LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
-          "Can't have a late final field in a class with a const constructor.",
+      CompileTimeErrorCode(
+          'LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
+          "Can't have a late final field in a class with a generative "
+              "const constructor.",
           correction: "Try removing the 'late' modifier, or don't declare "
               "'const' constructors.",
           hasPublishedDocs: true);
@@ -7612,6 +7690,15 @@
           hasPublishedDocs: true);
 
   /**
+   * Parameters:
+   * 0: the name of the macro
+   * 1: the message
+   */
+  static const CompileTimeErrorCode MACRO_EXECUTION_ERROR =
+      CompileTimeErrorCode(
+          'MACRO_EXECUTION_ERROR', "Exception thrown by macro {0}: {1}");
+
+  /**
    * No parameters.
    */
   // #### Description
@@ -8822,7 +8909,7 @@
   // ```
   static const CompileTimeErrorCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
       CompileTimeErrorCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-          "The class '{0}' doesn't have a default constructor.",
+          "The class '{0}' doesn't have an unnamed constructor.",
           correction:
               "Try using one of the named constructors defined in '{0}'.",
           hasPublishedDocs: true);
@@ -9929,8 +10016,8 @@
   static const CompileTimeErrorCode NON_GENERATIVE_IMPLICIT_CONSTRUCTOR =
       CompileTimeErrorCode(
           'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
-          "The default constructor of superclass '{0}' (called by the implicit "
-              "default constructor of '{1}') must be a generative constructor, "
+          "The unnamed constructor of superclass '{0}' (called by the default "
+              "constructor of '{1}') must be a generative constructor, "
               "but factory found.",
           correction: "Try adding an explicit constructor that has a different "
               "superinitializer or changing the superclass constructor '{2}' "
@@ -11972,8 +12059,7 @@
           hasPublishedDocs: true);
 
   /**
-   * Parameters:
-   * 0: the modifier that makes the function a generator
+   * No parameters.
    */
   // #### Description
   //
@@ -12014,10 +12100,13 @@
   // ```
   static const CompileTimeErrorCode RETURN_IN_GENERATOR = CompileTimeErrorCode(
       'RETURN_IN_GENERATOR',
-      "Can't return a value from a generator function (using the '{0}' "
-          "modifier).",
-      correction: "Try removing the value, replacing 'return' with 'yield' or "
-          "changing the method body modifier.",
+      "Can't return a value from a generator function that uses the 'async*' "
+          "or 'sync*' modifier.",
+      // TODO(srawlins): Splitting this code into two cases, one for block-
+      // bodied, and one for expression-bodied, would improve each correction
+      // message. This split would have to be done in the parser.
+      correction: "Try replacing 'return' with 'yield', using a block function "
+          "body, or changing the method body modifier.",
       hasPublishedDocs: true);
 
   /**
@@ -12511,6 +12600,17 @@
           hasPublishedDocs: true);
 
   /**
+   * No parameters.
+   */
+  static const CompileTimeErrorCode
+      TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS =
+      CompileTimeErrorCode(
+          'TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
+          "A generative constructor of an abstract class can't be torn off",
+          correction: "Try tearing off a constructor of a concrete class, or a "
+              "non-generative constructor.");
+
+  /**
    * Parameters:
    * 0: the type that can't be thrown
    */
@@ -12958,9 +13058,6 @@
           hasPublishedDocs: true,
           uniqueName: 'UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE');
 
-  /**
-   * No parameters.
-   */
   // #### Description
   //
   // The analyzer produces this diagnostic when an expression whose type is
@@ -13016,16 +13113,6 @@
   //   }
   // }
   // ```
-  static const CompileTimeErrorCode UNCHECKED_USE_OF_NULLABLE_VALUE =
-      CompileTimeErrorCode(
-          'UNCHECKED_USE_OF_NULLABLE_VALUE',
-          "An expression whose value can be 'null' must be null-checked before "
-              "it can be dereferenced.",
-          correction:
-              "Try checking that the value isn't 'null' before dereferencing "
-              "it.",
-          hasPublishedDocs: true);
-
   static const CompileTimeErrorCode
       UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION = CompileTimeErrorCode(
           'UNCHECKED_USE_OF_NULLABLE_VALUE',
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index b1a079a..2978a39 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -32,7 +32,7 @@
   ConstructorFieldsVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   void enterClass(ClassDeclaration node) {
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 7970e6f..e16cad4 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -26,7 +26,7 @@
   CorrectOverrideHelper({
     required LibraryElementImpl library,
     required ExecutableElement thisMember,
-  })   : _library = library,
+  })  : _library = library,
         _typeSystem = library.typeSystem,
         _thisMember = thisMember {
     _computeThisTypeForSubtype();
@@ -106,7 +106,7 @@
 
   CovariantParametersVerifier({
     required ExecutableElement thisMember,
-  })   : _session = thisMember.library.session as AnalysisSessionImpl,
+  })  : _session = thisMember.library.session as AnalysisSessionImpl,
         _typeSystem = thisMember.library.typeSystem as TypeSystemImpl,
         _thisMember = thisMember;
 
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index a762a29..9415a30 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -253,15 +253,22 @@
 
   /// Check that there are no members with the same name.
   void _checkClassMembers(ClassElement element, List<ClassMember> members) {
-    Set<String> constructorNames = HashSet<String>();
-    Map<String, Element> instanceGetters = HashMap<String, Element>();
-    Map<String, Element> instanceSetters = HashMap<String, Element>();
-    Map<String, Element> staticGetters = HashMap<String, Element>();
-    Map<String, Element> staticSetters = HashMap<String, Element>();
+    var constructorNames = HashSet<String>();
+    var instanceGetters = HashMap<String, Element>();
+    var instanceSetters = HashMap<String, Element>();
+    var staticGetters = HashMap<String, Element>();
+    var staticSetters = HashMap<String, Element>();
 
     for (ClassMember member in members) {
       if (member is ConstructorDeclaration) {
+        if (member.returnType.name != element.name) {
+          // [member] is erroneous; do not count it as a possible duplicate.
+          continue;
+        }
         var name = member.name?.name ?? '';
+        if (name == 'new') {
+          name = '';
+        }
         if (!constructorNames.add(name)) {
           if (name.isEmpty) {
             _errorReporter.reportErrorForName(
@@ -299,11 +306,18 @@
           var staticMember = staticGetters[name] ?? staticSetters[name];
           if (staticMember != null) {
             if (staticMember is PropertyAccessorElement) {
-              _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
-                nameNode,
-                [name],
-              );
+              CompileTimeErrorCode errorCode;
+              if (staticMember.isSynthetic) {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD;
+              } else if (staticMember.isGetter) {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER;
+              } else {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER;
+              }
+              _errorReporter.reportErrorForNode(errorCode, nameNode, [name]);
             } else {
               _errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 933fe37..76860af 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -21,7 +21,7 @@
   GetterSetterTypesVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   ErrorCode get _errorCode {
diff --git a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
index fb96d1b..35834b5 100644
--- a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
+++ b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
@@ -27,28 +27,26 @@
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
     required ResolverVisitor resolver,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter,
         _resolver = resolver;
 
-  bool expression(Expression expression,
-      {DartType? type, ErrorCode? errorCode}) {
+  bool expression(ErrorCode errorCode, Expression expression,
+      {DartType? type}) {
     if (!_typeSystem.isNonNullableByDefault) {
       return false;
     }
 
     type ??= expression.typeOrThrow;
-    return _check(expression, type, errorCode: errorCode);
+    return _check(errorCode, expression, type);
   }
 
-  void report(SyntacticEntity errorEntity, DartType receiverType,
-      {ErrorCode? errorCode,
-      List<String> arguments = const <String>[],
+  void report(
+      ErrorCode errorCode, SyntacticEntity errorEntity, DartType receiverType,
+      {List<String> arguments = const <String>[],
       List<DiagnosticMessage>? messages}) {
     if (receiverType == _typeSystem.typeProvider.nullType) {
       errorCode = CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE;
-    } else {
-      errorCode ??= CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE;
     }
     if (errorEntity is AstNode) {
       _errorReporter.reportErrorForNode(
@@ -67,8 +65,11 @@
   /// receiver is the implicit `this`, the name of the invocation.
   ///
   /// Returns whether [receiverType] was reported.
-  bool _check(AstNode errorNode, DartType receiverType,
-      {ErrorCode? errorCode}) {
+  bool _check(
+    ErrorCode errorCode,
+    AstNode errorNode,
+    DartType receiverType,
+  ) {
     if (identical(receiverType, DynamicTypeImpl.instance) ||
         !_typeSystem.isPotentiallyNullable(receiverType)) {
       return false;
@@ -77,9 +78,9 @@
     List<DiagnosticMessage>? messages;
     if (errorNode is Expression) {
       messages = _resolver.computeWhyNotPromotedMessages(
-          errorNode, _resolver.flowAnalysis?.flow?.whyNotPromoted(errorNode)());
+          errorNode, _resolver.flowAnalysis.flow?.whyNotPromoted(errorNode)());
     }
-    report(errorNode, receiverType, errorCode: errorCode, messages: messages);
+    report(errorCode, errorNode, receiverType, messages: messages);
     return true;
   }
 }
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index f2a619b..a4e5fe9 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -26,7 +26,7 @@
     required TypeProviderImpl typeProvider,
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeProvider = typeProvider,
+  })  : _typeProvider = typeProvider,
         _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
@@ -62,13 +62,6 @@
     }
 
     if (enclosingExecutable.isGenerator) {
-      if (expression != null) {
-        _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.RETURN_IN_GENERATOR,
-          statement,
-          [enclosingExecutable.isAsynchronous ? 'async*' : 'sync*'],
-        );
-      }
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index f3e536c..cbb1d38 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -65,7 +65,7 @@
   /// Returns the next comment token to begin searching from (skipping over
   /// any continuations).
   Token? _scrapeTodoComment(Token commentToken, LineInfo lineInfo) {
-    Iterable<Match> matches =
+    Iterable<RegExpMatch> matches =
         TodoCode.TODO_REGEX.allMatches(commentToken.lexeme);
     // Track the comment that will be returned for looking for the next todo.
     // This will be moved along if additional comments are consumed by multiline
@@ -73,11 +73,12 @@
     var nextComment = commentToken.next;
     final commentLocation = lineInfo.getLocation(commentToken.offset);
 
-    for (Match match in matches) {
+    for (RegExpMatch match in matches) {
       int offset = commentToken.offset + match.start + match.group(1)!.length;
       int column =
           commentLocation.columnNumber + match.start + match.group(1)!.length;
       String todoText = match.group(2)!;
+      String todoKind = match.namedGroup('kind1') ?? match.namedGroup('kind2')!;
       int end = offset + todoText.length;
 
       if (commentToken.type == TokenType.MULTI_LINE_COMMENT) {
@@ -126,7 +127,7 @@
       }
 
       _errorReporter.reportErrorForOffset(
-          TodoCode.TODO, offset, end - offset, [todoText]);
+          TodoCode.forKind(todoKind), offset, end - offset, [todoText]);
     }
 
     return nextComment;
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 55d66ce..71ab7b9 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -32,8 +32,67 @@
   TypeSystemImpl get _typeSystem =>
       _libraryElement.typeSystem as TypeSystemImpl;
 
+  void checkConstructorReference(ConstructorReference node) {
+    var classElement = node.constructorName.type.name.staticElement;
+    List<TypeParameterElement> typeParameters;
+    if (classElement is TypeAliasElement) {
+      typeParameters = classElement.typeParameters;
+    } else if (classElement is ClassElement) {
+      typeParameters = classElement.typeParameters;
+    } else {
+      return;
+    }
+
+    if (typeParameters.isEmpty) {
+      return;
+    }
+    var typeArgumentList = node.constructorName.type.typeArguments;
+    if (typeArgumentList == null) {
+      return;
+    }
+    var constructorType = node.staticType;
+    if (constructorType is DynamicType) {
+      // An erroneous constructor reference.
+      return;
+    }
+    if (constructorType is! FunctionType) {
+      return;
+    }
+    var typeArguments = [
+      for (var type in typeArgumentList.arguments) type.type!,
+    ];
+    if (typeArguments.length != typeParameters.length) {
+      // Wrong number of type arguments to be reported elsewhere.
+      return;
+    }
+    var typeArgumentListLength = typeArgumentList.arguments.length;
+    var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+    for (var i = 0; i < typeArguments.length; i++) {
+      var typeParameter = typeParameters[i];
+      var typeArgument = typeArguments[i];
+
+      var bound = typeParameter.bound;
+      if (bound == null) {
+        continue;
+      }
+
+      bound = _libraryElement.toLegacyTypeIfOptOut(bound);
+      bound = substitution.substituteType(bound);
+
+      if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
+        var errorNode =
+            i < typeArgumentListLength ? typeArgumentList.arguments[i] : node;
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
+          errorNode,
+          [typeArgument, typeParameter.name, bound],
+        );
+      }
+    }
+  }
+
   void checkFunctionExpressionInvocation(FunctionExpressionInvocation node) {
-    _checkTypeArguments(
+    _checkInvocationTypeArguments(
       node.typeArguments?.arguments,
       node.function.staticType,
       node.staticInvokeType,
@@ -42,7 +101,7 @@
   }
 
   void checkFunctionReference(FunctionReference node) {
-    _checkTypeArguments(
+    _checkInvocationTypeArguments(
       node.typeArguments?.arguments,
       node.function.staticType,
       node.staticType,
@@ -80,7 +139,7 @@
   }
 
   void checkMethodInvocation(MethodInvocation node) {
-    _checkTypeArguments(
+    _checkInvocationTypeArguments(
       node.typeArguments?.arguments,
       node.function.staticType,
       node.staticInvokeType,
@@ -206,7 +265,10 @@
   /// Verify that the type arguments in the given [typeName] are all within
   /// their bounds.
   void _checkForTypeArgumentNotMatchingBounds(TypeName typeName) {
-    var type = typeName.typeOrThrow;
+    var type = typeName.type;
+    if (type == null) {
+      return;
+    }
 
     List<TypeParameterElement> typeParameters;
     List<DartType> typeArguments;
@@ -310,40 +372,9 @@
     }
   }
 
-  /// Checks to ensure that the given list of type [arguments] does not have a
-  /// type parameter as a type argument. The [errorCode] is either
-  /// [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST] or
-  /// [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP].
-  void _checkTypeArgumentConst(
-      NodeList<TypeAnnotation> arguments, ErrorCode errorCode) {
-    for (TypeAnnotation type in arguments) {
-      if (type is TypeName && type.type is TypeParameterType) {
-        _errorReporter.reportErrorForNode(errorCode, type, [type.name]);
-      }
-    }
-  }
-
-  /// Verify that the given list of [typeArguments] contains exactly the
-  /// [expectedCount] of elements, reporting an error with the [errorCode]
-  /// if not.
-  void _checkTypeArgumentCount(
-    TypeArgumentList typeArguments,
-    int expectedCount,
-    ErrorCode errorCode,
-  ) {
-    int actualCount = typeArguments.arguments.length;
-    if (actualCount != expectedCount) {
-      _errorReporter.reportErrorForNode(
-        errorCode,
-        typeArguments,
-        [actualCount],
-      );
-    }
-  }
-
   /// Verify that each type argument in [typeArgumentList] is within its bounds,
   /// as defined by [genericType].
-  void _checkTypeArguments(
+  void _checkInvocationTypeArguments(
     List<TypeAnnotation>? typeArgumentList,
     DartType? genericType,
     DartType? instantiatedType,
@@ -404,6 +435,37 @@
     }
   }
 
+  /// Checks to ensure that the given list of type [arguments] does not have a
+  /// type parameter as a type argument. The [errorCode] is either
+  /// [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST] or
+  /// [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP].
+  void _checkTypeArgumentConst(
+      NodeList<TypeAnnotation> arguments, ErrorCode errorCode) {
+    for (TypeAnnotation type in arguments) {
+      if (type is TypeName && type.type is TypeParameterType) {
+        _errorReporter.reportErrorForNode(errorCode, type, [type.name]);
+      }
+    }
+  }
+
+  /// Verify that the given list of [typeArguments] contains exactly the
+  /// [expectedCount] of elements, reporting an error with the [errorCode]
+  /// if not.
+  void _checkTypeArgumentCount(
+    TypeArgumentList typeArguments,
+    int expectedCount,
+    ErrorCode errorCode,
+  ) {
+    int actualCount = typeArguments.arguments.length;
+    if (actualCount != expectedCount) {
+      _errorReporter.reportErrorForNode(
+        errorCode,
+        typeArguments,
+        [actualCount],
+      );
+    }
+  }
+
   /// Given a [node] without type arguments that refers to [element], issues
   /// an error if [type] is a generic type, and the type arguments were not
   /// supplied from inference or a non-dynamic default instantiation.
diff --git a/pkg/analyzer/lib/src/error/use_result_verifier.dart b/pkg/analyzer/lib/src/error/use_result_verifier.dart
index c96ee1d..cc2d3bf 100644
--- a/pkg/analyzer/lib/src/error/use_result_verifier.dart
+++ b/pkg/analyzer/lib/src/error/use_result_verifier.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:collection/collection.dart';
 
@@ -56,6 +57,10 @@
       return;
     }
 
+    if (_passesUsingParam(node, annotation)) {
+      return;
+    }
+
     if (_isUsed(node)) {
       return;
     }
@@ -72,6 +77,32 @@
     }
   }
 
+  bool _passesUsingParam(AstNode node, ElementAnnotation annotation) {
+    if (node is! MethodInvocation) {
+      return false;
+    }
+
+    var unlessParam = _getUseResultUnlessParam(annotation);
+    if (unlessParam == null) {
+      return false;
+    }
+
+    var argumentList = node.argumentList as ArgumentListImpl;
+    var parameters = argumentList.correspondingStaticParameters;
+    if (parameters == null) {
+      return false;
+    }
+
+    for (var param in parameters) {
+      var name = param?.name;
+      if (unlessParam == name) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
   static AstNode _getNodeToAnnotate(AstNode node) {
     if (node is MethodInvocation) {
       return node.methodName;
@@ -98,6 +129,11 @@
     return element.metadata.firstWhereOrNull((e) => e.isUseResult);
   }
 
+  static String? _getUseResultUnlessParam(ElementAnnotation annotation) {
+    var constantValue = annotation.computeConstantValue();
+    return constantValue?.getField('parameterDefined')?.toStringValue();
+  }
+
   static bool _isUsed(AstNode node) {
     var parent = node.parent;
     if (parent == null) {
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 498b57b..9968a05 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -23,7 +23,6 @@
         messageInvalidInitializer,
         messageInvalidSuperInInitializer,
         messageInvalidThisInInitializer,
-        messageMetadataTypeArguments,
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
         messageOperatorWithTypeParameters,
@@ -37,6 +36,7 @@
     show
         Assert,
         BlockKind,
+        ConstructorReferenceContext,
         DeclarationKind,
         FormalParameterKind,
         IdentifierContext,
@@ -148,7 +148,7 @@
 
   final FeatureSet _featureSet;
 
-  AstBuilder(ErrorReporter errorReporter, this.fileUri, this.isFullAst,
+  AstBuilder(ErrorReporter? errorReporter, this.fileUri, this.isFullAst,
       this._featureSet,
       [Uri? uri])
       : errorReporter = FastaErrorReporter(errorReporter),
@@ -1100,8 +1100,8 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     assert(optionalOrNull('.', periodBeforeName));
     debugEvent("ConstructorReference");
 
@@ -1867,8 +1867,15 @@
     var typeArguments = pop() as TypeArgumentList?;
     if (typeArguments != null &&
         !_featureSet.isEnabled(Feature.generic_metadata)) {
-      handleRecoverableError(messageMetadataTypeArguments,
-          typeArguments.beginToken, typeArguments.beginToken);
+      var feature = Feature.generic_metadata;
+      handleRecoverableError(
+        templateExperimentNotEnabled.withArguments(
+          feature.enableString,
+          _versionAsString(feature.releaseVersion!),
+        ),
+        typeArguments.beginToken,
+        typeArguments.beginToken,
+      );
     }
     var name = pop() as Identifier;
     push(ast.annotation(
@@ -2659,11 +2666,16 @@
     debugEvent("ExpressionFunctionBody");
 
     var expression = pop() as Expression;
-    pop(); // star (*)
+    var star = pop() as Token?;
     var asyncKeyword = pop() as Token?;
     if (parseFunctionBodies) {
-      push(ast.expressionFunctionBody(
-          asyncKeyword, arrowToken, expression, semicolon));
+      push(ast.expressionFunctionBody2(
+        keyword: asyncKeyword,
+        star: star,
+        functionDefinition: arrowToken,
+        expression: expression,
+        semicolon: semicolon,
+      ));
     } else {
       push(ast.emptyFunctionBody(semicolon!));
     }
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 145508c..f5e935f 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -267,10 +267,7 @@
         return;
       case "RETURN_IN_GENERATOR":
         errorReporter?.reportErrorForOffset(
-            CompileTimeErrorCode.RETURN_IN_GENERATOR, offset, length,
-            // TODO(danrubel): Update the parser to report the modifier
-            // involved in this error... either async* or sync*
-            ['async*']);
+            CompileTimeErrorCode.RETURN_IN_GENERATOR, offset, length);
         return;
       case "SUPER_IN_REDIRECTING_CONSTRUCTOR":
         errorReporter?.reportErrorForOffset(
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 2a378e11..7785699 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/resolver/method_invocation_resolver.dart';
@@ -115,11 +114,6 @@
   TypeProviderImpl get _typeProvider => _resolver.typeProvider;
 
   @override
-  void visitBreakStatement(covariant BreakStatementImpl node) {
-    node.target = _lookupBreakOrContinueTarget(node, node.label, false);
-  }
-
-  @override
   void visitClassDeclaration(ClassDeclaration node) {
     _resolveAnnotations(node.metadata);
   }
@@ -244,7 +238,10 @@
 
   @override
   void visitConstructorName(covariant ConstructorNameImpl node) {
-    DartType type = node.type.typeOrThrow;
+    var type = node.type.type;
+    if (type == null) {
+      return;
+    }
     if (type.isDynamic) {
       // Nothing to do.
     } else if (type is InterfaceType) {
@@ -260,27 +257,10 @@
         name.staticElement = constructor;
       }
       node.staticElement = constructor;
-    } else {
-// TODO(brianwilkerson) Report these errors.
-//      ASTNode parent = node.getParent();
-//      if (parent instanceof InstanceCreationExpression) {
-//        if (((InstanceCreationExpression) parent).isConst()) {
-//          // CompileTimeErrorCode.CONST_WITH_NON_TYPE
-//        } else {
-//          // CompileTimeErrorCode.NEW_WITH_NON_TYPE
-//        }
-//      } else {
-//        // This is part of a redirecting factory constructor; not sure which error code to use
-//      }
     }
   }
 
   @override
-  void visitContinueStatement(covariant ContinueStatementImpl node) {
-    node.target = _lookupBreakOrContinueTarget(node, node.label, true);
-  }
-
-  @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
     _resolveAnnotations(node.metadata);
   }
@@ -537,46 +517,6 @@
     _resolveAnnotations(node.metadata);
   }
 
-  /// Return the target of a break or continue statement, and update the static
-  /// element of its label (if any). The [parentNode] is the AST node of the
-  /// break or continue statement. The [labelNode] is the label contained in
-  /// that statement (if any). The flag [isContinue] is `true` if the node being
-  /// visited is a continue statement.
-  AstNode? _lookupBreakOrContinueTarget(
-      AstNode parentNode, SimpleIdentifierImpl? labelNode, bool isContinue) {
-    if (labelNode == null) {
-      return _resolver.implicitLabelScope.getTarget(isContinue);
-    } else {
-      var labelScope = _resolver.labelScope;
-      if (labelScope == null) {
-        // There are no labels in scope, so by definition the label is
-        // undefined.
-        _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
-        return null;
-      }
-      var definingScope = labelScope.lookup(labelNode.name);
-      if (definingScope == null) {
-        // No definition of the given label name could be found in any
-        // enclosing scope.
-        _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
-        return null;
-      }
-      // The target has been found.
-      labelNode.staticElement = definingScope.element;
-      ExecutableElement? labelContainer =
-          definingScope.element.thisOrAncestorOfType();
-      if (!identical(labelContainer, _resolver.enclosingFunction)) {
-        _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
-            labelNode,
-            [labelNode.name]);
-      }
-      return definingScope.node;
-    }
-  }
-
   /// Given an [argumentList] and the [executableElement] that will be invoked
   /// using those argument, compute the list of parameters that correspond to
   /// the list of arguments. An error will be reported if any of the arguments
@@ -648,8 +588,8 @@
   /// Resolve the given simple [identifier] if possible. Return the element to
   /// which it could be resolved, or `null` if it could not be resolved. This
   /// does not record the results of the resolution.
-  Element? _resolveSimpleIdentifier(SimpleIdentifier identifier) {
-    var lookupResult = _resolver.nameScope.lookup(identifier.name);
+  Element? _resolveSimpleIdentifier(SimpleIdentifierImpl identifier) {
+    var lookupResult = identifier.scopeLookupResult!;
 
     var element = lookupResult.getter;
     element = _resolver.toLegacyElement(element);
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 3ad6c31..31e2553 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -45,6 +45,7 @@
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:analyzer/src/generated/this_access_tracker.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
 import 'package:collection/collection.dart';
 
 class EnclosingExecutableContext {
@@ -444,7 +445,8 @@
     var outerClass = _enclosingClass;
     try {
       _isInNativeClass = node.nativeClause != null;
-      _enclosingClass = node.declaredElement as ClassElementImpl;
+      var enclosingClass = node.declaredElement as ClassElementImpl;
+      _enclosingClass = enclosingClass;
 
       List<ClassMember> members = node.members;
       _duplicateDefinitionVerifier.checkClass(node);
@@ -468,6 +470,10 @@
       _checkForBadFunctionUse(node);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
       _checkForMainFunction(node.name);
+      _reportMacroExecutionErrors(
+        node.metadata,
+        enclosingClass.macroExecutionErrors,
+      );
       super.visitClassDeclaration(node);
     } finally {
       _isInNativeClass = false;
@@ -552,6 +558,11 @@
   }
 
   @override
+  void visitConstructorReference(ConstructorReference node) {
+    _typeArgumentsVerifier.checkConstructorReference(node);
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     var labelNode = node.label;
     if (labelNode != null) {
@@ -643,6 +654,10 @@
       _checkForNotInitializedNonNullableStaticField(node);
       _checkForWrongTypeParameterVarianceInField(node);
       _checkForLateFinalFieldWithConstConstructor(node);
+      _reportMacroExecutionErrors(
+        node.metadata,
+        node.firstElement.macroExecutionErrors,
+      );
       super.visitFieldDeclaration(node);
     } finally {
       _isInStaticVariableDeclaration = false;
@@ -1949,6 +1964,9 @@
     if (!_enclosingExecutable.isConstConstructor) {
       return;
     }
+    if (!_enclosingExecutable.isGenerativeConstructor) {
+      return;
+    }
     // check if there is non-final field
     ClassElement classElement = constructorElement.enclosingElement;
     if (!classElement.hasNonFinalField) {
@@ -2809,9 +2827,15 @@
     var lateKeyword = variableList.lateKeyword;
     if (lateKeyword == null) return;
 
-    var hasConstConstructor =
-        _enclosingClass!.constructors.any((c) => c.isConst);
-    if (!hasConstConstructor) return;
+    var enclosingClass = _enclosingClass;
+    if (enclosingClass == null) {
+      // The field is in an extension and should be handled elsewhere.
+      return;
+    }
+
+    var hasGenerativeConstConstructor =
+        _enclosingClass!.constructors.any((c) => c.isConst && !c.isFactory);
+    if (!hasGenerativeConstConstructor) return;
 
     errorReporter.reportErrorForToken(
       CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR,
@@ -4977,6 +5001,23 @@
     return null;
   }
 
+  /// Report [macroExecutionErrors] at the corresponding [annotations].
+  void _reportMacroExecutionErrors(
+    List<Annotation> annotations,
+    List<macro.MacroExecutionError> macroExecutionErrors,
+  ) {
+    for (var macroExecutionError in macroExecutionErrors) {
+      errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.MACRO_EXECUTION_ERROR,
+        annotations[macroExecutionError.annotationIndex],
+        [
+          macroExecutionError.macroName,
+          macroExecutionError.message,
+        ],
+      );
+    }
+  }
+
   void _withEnclosingExecutable(
     ExecutableElement element,
     void Function() operation,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 6a09580..3b579a5 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -31,6 +31,7 @@
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.dart';
 import 'package:analyzer/src/dart/resolver/binary_expression_resolver.dart';
 import 'package:analyzer/src/dart/resolver/body_inference_context.dart';
+import 'package:analyzer/src/dart/resolver/constructor_reference_resolver.dart';
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/dart/resolver/for_resolver.dart';
@@ -47,6 +48,7 @@
 import 'package:analyzer/src/dart/resolver/property_element_resolver.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 import 'package:analyzer/src/dart/resolver/simple_identifier_resolver.dart';
+import 'package:analyzer/src/dart/resolver/this_lookup.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
 import 'package:analyzer/src/dart/resolver/typed_literal_resolver.dart';
 import 'package:analyzer/src/dart/resolver/variable_declaration_resolver.dart';
@@ -103,7 +105,7 @@
   void popFunctionBodyContext(FunctionBody node) {
     var context = _bodyContexts.removeLast();
 
-    var flow = _resolver.flowAnalysis?.flow;
+    var flow = _resolver.flowAnalysis.flow;
 
     var resultType = context.computeInferredReturnType(
       endOfBlockIsReachable: flow == null || flow.isReachable,
@@ -156,9 +158,47 @@
   }
 }
 
+/// Base class for visitors that perform resolution.  This class keeps track of
+/// some of the basic information that is needed by resolution stages, such as
+/// the defining library and the error reporter.
+abstract class ResolverBase extends UnifyingAstVisitor<void> {
+  /// The element for the library containing the compilation unit being visited.
+  final LibraryElementImpl definingLibrary;
+
+  /// The source representing the compilation unit being visited.
+  final Source source;
+
+  /// The object used to access the types from the core library.
+  final TypeProviderImpl typeProvider;
+
+  /// The error reporter that will be informed of any errors that are found
+  /// during resolution.
+  final ErrorReporter errorReporter;
+
+  ResolverBase(this.definingLibrary, this.source, this.typeProvider,
+      AnalysisErrorListener errorListener)
+      : errorReporter = ErrorReporter(
+          errorListener,
+          source,
+          isNonNullableByDefault: definingLibrary.isNonNullableByDefault,
+        );
+}
+
 /// Instances of the class `ResolverVisitor` are used to resolve the nodes
 /// within a single compilation unit.
-class ResolverVisitor extends ScopedVisitor with ErrorDetectionHelpers {
+class ResolverVisitor extends ResolverBase with ErrorDetectionHelpers {
+  /// The class containing the AST nodes being visited,
+  /// or `null` if we are not in the scope of a class.
+  ClassElement? enclosingClass;
+
+  /// The element representing the extension containing the AST nodes being
+  /// visited, or `null` if we are not in the scope of an extension.
+  ExtensionElement? enclosingExtension;
+
+  /// The element representing the function containing the current node, or
+  /// `null` if the current node is not contained in a function.
+  ExecutableElement? _enclosingFunction;
+
   /// The manager for the inheritance mappings.
   final InheritanceManager3 inheritance;
 
@@ -186,6 +226,8 @@
 
   late final AssignmentExpressionResolver _assignmentExpressionResolver;
   late final BinaryExpressionResolver _binaryExpressionResolver;
+  late final ConstructorReferenceResolver _constructorReferenceResolver =
+      ConstructorReferenceResolver(this);
   late final FunctionExpressionInvocationResolver
       _functionExpressionInvocationResolver;
   late final FunctionExpressionResolver _functionExpressionResolver;
@@ -219,7 +261,7 @@
   /// Otherwise `null`.
   DartType? _thisType;
 
-  final FlowAnalysisHelper? flowAnalysis;
+  final FlowAnalysisHelper flowAnalysis;
 
   /// A comment before a function should be resolved in the context of the
   /// function. But when we incrementally resolve a comment, we don't want to
@@ -240,17 +282,14 @@
   /// always safe to use `.last` to examine the top of the stack.
   final List<Expression?> _unfinishedNullShorts = [null];
 
-  /// During resolution we clone annotation ASTs into the element model.
-  /// But we should not do this during linking element models, moreover
-  /// currently by doing this we will lose elements for parameters of
-  /// generic function types.
-  /// TODO(scheglov) Stop cloning altogether.
-  bool shouldCloneAnnotations = true;
-
   late final FunctionReferenceResolver _functionReferenceResolver;
 
   late final InstanceCreationExpressionResolver
-      _instanceCreationExpressionResolver;
+      _instanceCreationExpressionResolver =
+      InstanceCreationExpressionResolver(this);
+
+  late final SimpleIdentifierResolver _simpleIdentifierResolver =
+      SimpleIdentifierResolver(this, flowAnalysis);
 
   /// Initialize a newly created visitor to resolve the nodes in an AST node.
   ///
@@ -273,8 +312,7 @@
       TypeProvider typeProvider,
       AnalysisErrorListener errorListener,
       {FeatureSet? featureSet,
-      Scope? nameScope,
-      FlowAnalysisHelper? flowAnalysisHelper})
+      required FlowAnalysisHelper flowAnalysisHelper})
       : this._(
             inheritanceManager,
             definingLibrary,
@@ -284,7 +322,6 @@
             errorListener,
             featureSet ??
                 definingLibrary.context.analysisOptions.contextFeatures,
-            nameScope,
             flowAnalysisHelper,
             const MigratableAstInfoProvider(),
             null);
@@ -297,15 +334,13 @@
       TypeProvider typeProvider,
       AnalysisErrorListener errorListener,
       FeatureSet featureSet,
-      Scope? nameScope,
       this.flowAnalysis,
       this._migratableAstInfoProvider,
       MigrationResolutionHooks? migrationResolutionHooks)
       : _featureSet = featureSet,
         migrationResolutionHooks = migrationResolutionHooks,
         super(definingLibrary, source, typeProvider as TypeProviderImpl,
-            errorListener,
-            nameScope: nameScope) {
+            errorListener) {
     var analysisOptions =
         definingLibrary.context.analysisOptions as AnalysisOptionsImpl;
 
@@ -372,20 +407,20 @@
     typeAnalyzer = StaticTypeAnalyzer(this, migrationResolutionHooks);
     _functionReferenceResolver =
         FunctionReferenceResolver(this, _isNonNullableByDefault);
-    _instanceCreationExpressionResolver =
-        InstanceCreationExpressionResolver(this);
   }
 
+  /// Return the element representing the function containing the current node,
+  /// or `null` if the current node is not contained in a function.
+  ///
+  /// @return the element representing the function containing the current node
+  ExecutableElement? get enclosingFunction => _enclosingFunction;
+
   bool get isConstructorTearoffsEnabled =>
       _featureSet.isEnabled(Feature.constructor_tearoffs);
 
   /// Return the object providing promoted or declared types of variables.
   LocalVariableTypeProvider get localVariableTypeProvider {
-    if (flowAnalysis != null) {
-      return flowAnalysis!.localVariableTypeProvider;
-    } else {
-      return const NonPromotingLocalVariableTypeProvider();
-    }
+    return flowAnalysis.localVariableTypeProvider;
   }
 
   NullabilitySuffix get noneOrStarSuffix {
@@ -421,7 +456,7 @@
     for (int i = 0; i < arguments.length; i++) {
       checkForArgumentTypeNotAssignableForArgument(arguments[i],
           whyNotPromoted:
-              flowAnalysis?.flow == null ? null : whyNotPromotedList[i]);
+              flowAnalysis.flow == null ? null : whyNotPromotedList[i]);
     }
   }
 
@@ -431,7 +466,7 @@
     required AstNode errorNode,
   }) {
     if (!_isNonNullableByDefault) return;
-    if (!flowAnalysis!.flow!.isReachable) {
+    if (!flowAnalysis.flow!.isReachable) {
       return;
     }
 
@@ -469,7 +504,7 @@
     SimpleIdentifier node,
     Element? element,
   ) {
-    if (flowAnalysis?.flow == null) {
+    if (flowAnalysis.flow == null) {
       return;
     }
 
@@ -478,9 +513,9 @@
     }
 
     if (element is VariableElement) {
-      var assigned = flowAnalysis!
-          .isDefinitelyAssigned(node, element as PromotableElement);
-      var unassigned = flowAnalysis!.isDefinitelyUnassigned(node, element);
+      var assigned =
+          flowAnalysis.isDefinitelyAssigned(node, element as PromotableElement);
+      var unassigned = flowAnalysis.isDefinitelyUnassigned(node, element);
 
       if (element.isLate) {
         if (unassigned) {
@@ -528,11 +563,11 @@
     if (whyNotPromoted != null) {
       for (var entry in whyNotPromoted.entries) {
         var whyNotPromotedVisitor = _WhyNotPromotedVisitor(
-            source, errorEntity, flowAnalysis!.dataForTesting);
+            source, errorEntity, flowAnalysis.dataForTesting);
         if (typeSystem.isPotentiallyNullable(entry.key)) continue;
         var message = entry.value.accept(whyNotPromotedVisitor);
         if (message != null) {
-          if (flowAnalysis!.dataForTesting != null) {
+          if (flowAnalysis.dataForTesting != null) {
             var nonPromotionReasonText = entry.value.shortName;
             var args = <String>[];
             if (whyNotPromotedVisitor.propertyReference != null) {
@@ -546,7 +581,7 @@
             if (args.isNotEmpty) {
               nonPromotionReasonText += '(${args.join(', ')})';
             }
-            flowAnalysis!.dataForTesting!.nonPromotionReasons[errorEntity] =
+            flowAnalysis.dataForTesting!.nonPromotionReasons[errorEntity] =
                 nonPromotionReasonText;
           }
           messages = [message];
@@ -578,16 +613,6 @@
     return null;
   }
 
-  /// Return the result of lexical lookup for the [node], not `null`.
-  ///
-  /// Implements `16.35 Lexical Lookup` from the language specification.
-  LexicalLookupResult lexicalLookup({
-    required SimpleIdentifier node,
-    required bool setter,
-  }) {
-    return LexicalLookup(this).perform(node: node, setter: setter);
-  }
-
   /// If we reached a null-shorting termination, and the [node] has null
   /// shorting, make the type of the [node] nullable.
   void nullShortingTermination(ExpressionImpl node,
@@ -597,7 +622,7 @@
     if (identical(_unfinishedNullShorts.last, node)) {
       do {
         _unfinishedNullShorts.removeLast();
-        flowAnalysis!.flow!.nullAwareAccess_end();
+        flowAnalysis.flow!.nullAwareAccess_end();
       } while (identical(_unfinishedNullShorts.last, node));
       if (node is! CascadeExpression && !discardType) {
         node.staticType = typeSystem.makeNullable(node.staticType as TypeImpl);
@@ -646,14 +671,6 @@
 
     void forClassElement(ClassElement parentElement) {
       enclosingClass = parentElement;
-      nameScope = ClassScope(
-        TypeParameterScope(
-          nameScope,
-          parentElement.typeParameters,
-        ),
-        parentElement,
-      );
-      _thisType = parentElement.thisType;
     }
 
     if (parent is ClassDeclaration) {
@@ -688,7 +705,7 @@
 
       InferenceContext.setType(node.index, result.indexContextType);
       node.index.accept(this);
-      var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(node.index);
+      var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.index);
       checkIndexExpressionIndex(
         node.index,
         readElement: result.readElement as ExecutableElement?,
@@ -719,7 +736,7 @@
     } else if (node is SimpleIdentifier) {
       var resolver = PropertyElementResolver(this);
       var result = resolver.resolveSimpleIdentifier(
-        node: node,
+        node: node as SimpleIdentifierImpl,
         hasRead: hasRead,
         hasWrite: true,
       );
@@ -739,13 +756,6 @@
     }
   }
 
-  /// Visit the given [comment] if it is not `null`.
-  void safelyVisitComment(Comment? comment) {
-    if (comment != null) {
-      super.visitComment(comment);
-    }
-  }
-
   void setReadElement(Expression node, Element? element) {
     DartType readType = DynamicTypeImpl.instance;
     if (node is IndexExpression) {
@@ -826,7 +836,7 @@
 
   void startNullAwareIndexExpression(IndexExpression node) {
     if (_migratableAstInfoProvider.isIndexExpressionNullAware(node)) {
-      var flow = flowAnalysis?.flow;
+      var flow = flowAnalysis.flow;
       if (flow != null) {
         flow.nullAwareAccess_rightBegin(node.target,
             node.realTarget.staticType ?? typeProvider.dynamicType);
@@ -837,7 +847,7 @@
 
   void startNullAwarePropertyAccess(PropertyAccess node) {
     if (_migratableAstInfoProvider.isPropertyAccessNullAware(node)) {
-      var flow = flowAnalysis?.flow;
+      var flow = flowAnalysis.flow;
       if (flow != null) {
         var target = node.target;
         if (target is SimpleIdentifier &&
@@ -852,6 +862,18 @@
     }
   }
 
+  /// Returns the result of an implicit `this.` lookup for the identifier string
+  /// [id] in a getter context, or `null` if no match was found.
+  LexicalLookupResult? thisLookupGetter(SimpleIdentifier node) {
+    return ThisLookup.lookupGetter(this, node);
+  }
+
+  /// Returns the result of an implicit `this.` lookup for the identifier string
+  /// [id] in a setter context, or `null` if no match was found.
+  LexicalLookupResult? thisLookupSetter(SimpleIdentifier node) {
+    return ThisLookup.lookupSetter(this, node);
+  }
+
   /// If in a legacy library, return the legacy view on the [element].
   /// Otherwise, return the original element.
   T toLegacyElement<T extends Element?>(T element) {
@@ -940,7 +962,7 @@
     }
     checkUnreachableNode(node);
     int length = arguments.length;
-    var flow = flowAnalysis?.flow;
+    var flow = flowAnalysis.flow;
     for (var i = 0; i < length; i++) {
       if (isIdentical && length > 1 && i == 1) {
         var firstArg = arguments[0];
@@ -963,37 +985,37 @@
   @override
   void visitAsExpression(AsExpression node) {
     super.visitAsExpression(node);
-    flowAnalysis?.asExpression(node);
+    flowAnalysis.asExpression(node);
   }
 
   @override
   void visitAssertInitializer(AssertInitializer node) {
     InferenceContext.setType(node.condition, typeProvider.boolType);
-    flowAnalysis?.flow?.assert_begin();
+    flowAnalysis.flow?.assert_begin();
     node.condition.accept(this);
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
       errorCode: CompileTimeErrorCode.NON_BOOL_EXPRESSION,
-      whyNotPromoted: flowAnalysis?.flow?.whyNotPromoted(node.condition),
+      whyNotPromoted: flowAnalysis.flow?.whyNotPromoted(node.condition),
     );
-    flowAnalysis?.flow?.assert_afterCondition(node.condition);
+    flowAnalysis.flow?.assert_afterCondition(node.condition);
     node.message?.accept(this);
-    flowAnalysis?.flow?.assert_end();
+    flowAnalysis.flow?.assert_end();
   }
 
   @override
   void visitAssertStatement(AssertStatement node) {
     InferenceContext.setType(node.condition, typeProvider.boolType);
-    flowAnalysis?.flow?.assert_begin();
+    flowAnalysis.flow?.assert_begin();
     node.condition.accept(this);
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
       errorCode: CompileTimeErrorCode.NON_BOOL_EXPRESSION,
-      whyNotPromoted: flowAnalysis?.flow?.whyNotPromoted(node.condition),
+      whyNotPromoted: flowAnalysis.flow?.whyNotPromoted(node.condition),
     );
-    flowAnalysis?.flow?.assert_afterCondition(node.condition);
+    flowAnalysis.flow?.assert_afterCondition(node.condition);
     node.message?.accept(this);
-    flowAnalysis?.flow?.assert_end();
+    flowAnalysis.flow?.assert_end();
   }
 
   @override
@@ -1030,7 +1052,7 @@
 
   @override
   void visitBooleanLiteral(BooleanLiteral node) {
-    flowAnalysis?.flow?.booleanLiteral(node, node.value);
+    flowAnalysis.flow?.booleanLiteral(node, node.value);
     super.visitBooleanLiteral(node);
   }
 
@@ -1043,7 +1065,7 @@
     checkUnreachableNode(node);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
-    flowAnalysis?.breakStatement(node);
+    flowAnalysis.breakStatement(node);
   }
 
   @override
@@ -1051,8 +1073,8 @@
     InferenceContext.setTypeFromNode(node.target, node);
     node.target.accept(this);
 
-    if (node.isNullAware && flowAnalysis != null) {
-      flowAnalysis!.flow!.nullAwareAccess_rightBegin(
+    if (node.isNullAware) {
+      flowAnalysis.flow!.nullAwareAccess_rightBegin(
           node.target, node.target.staticType ?? typeProvider.dynamicType);
       _unfinishedNullShorts.add(node.nullShortingTermination);
     }
@@ -1072,23 +1094,16 @@
     //
     var outerType = enclosingClass;
     try {
+      enclosingClass = node.declaredElement;
       super.visitClassDeclaration(node);
       node.accept(elementResolver);
       node.accept(typeAnalyzer);
     } finally {
-      _thisType = outerType?.thisType;
       enclosingClass = outerType;
     }
   }
 
   @override
-  void visitClassDeclarationInScope(ClassDeclaration node) {
-    enclosingClass = node.declaredElement;
-    _thisType = enclosingClass?.thisType;
-    super.visitClassDeclarationInScope(node);
-  }
-
-  @override
   void visitClassTypeAlias(ClassTypeAlias node) {
     super.visitClassTypeAlias(node);
     node.accept(elementResolver);
@@ -1097,52 +1112,6 @@
   }
 
   @override
-  void visitComment(Comment node) {
-    var parent = node.parent;
-    if (parent is FunctionDeclaration ||
-        parent is FunctionTypeAlias ||
-        parent is ConstructorDeclaration) {
-      return;
-    }
-
-    // TODO(scheglov) Change corresponding visiting places to visit comments
-    // with name scopes set for correct comments resolution.
-    if (parent is GenericTypeAlias) {
-      var element = parent.declaredElement as TypeAliasElement;
-      var outerScope = nameScope;
-      try {
-        nameScope = TypeParameterScope(nameScope, element.typeParameters);
-
-        var aliasedElement = element.aliasedElement;
-        if (aliasedElement is GenericFunctionTypeElement) {
-          nameScope = FormalParameterScope(
-            TypeParameterScope(nameScope, aliasedElement.typeParameters),
-            aliasedElement.parameters,
-          );
-        }
-
-        super.visitComment(node);
-        return;
-      } finally {
-        nameScope = outerScope;
-      }
-    } else if (parent is MethodDeclaration) {
-      var outerScope = nameScope;
-      try {
-        var element = parent.declaredElement!;
-        nameScope = FormalParameterScope(nameScope, element.parameters);
-
-        super.visitComment(node);
-        return;
-      } finally {
-        nameScope = outerScope;
-      }
-    }
-
-    super.visitComment(node);
-  }
-
-  @override
   void visitCommentReference(CommentReference node) {
     //
     // We do not visit the identifier because it needs to be visited in the
@@ -1171,13 +1140,13 @@
   @override
   void visitConditionalExpression(ConditionalExpression node) {
     Expression condition = node.condition;
-    var flow = flowAnalysis?.flow;
+    var flow = flowAnalysis.flow;
     flow?.conditional_conditionBegin();
 
     // TODO(scheglov) Do we need these checks for null?
     condition.accept(this);
     condition = node.condition;
-    var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(condition);
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
@@ -1216,13 +1185,22 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    flowAnalysis!.topLevelDeclaration_enter(node, node.parameters);
-    flowAnalysis!.executableDeclaration_enter(node, node.parameters, false);
+    flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
+    flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
 
     var returnType = node.declaredElement!.type.returnType;
     InferenceContext.setType(node.body, returnType);
 
-    super.visitConstructorDeclaration(node);
+    var outerFunction = _enclosingFunction;
+    try {
+      _enclosingFunction = node.declaredElement;
+      assert(_thisType == null);
+      _setupThisType();
+      super.visitConstructorDeclaration(node);
+    } finally {
+      _enclosingFunction = outerFunction;
+      _thisType = null;
+    }
 
     if (node.factoryKeyword != null) {
       var bodyContext = BodyInferenceContext.of(node.body);
@@ -1232,24 +1210,12 @@
         errorNode: node,
       );
     }
-    flowAnalysis!.executableDeclaration_exit(node.body, false);
-    flowAnalysis!.topLevelDeclaration_exit();
+    flowAnalysis.executableDeclaration_exit(node.body, false);
+    flowAnalysis.topLevelDeclaration_exit();
     nullSafetyDeadCodeVerifier.flowEnd(node);
   }
 
   @override
-  void visitConstructorDeclarationInScope(ConstructorDeclaration node) {
-    super.visitConstructorDeclarationInScope(node);
-    // Because of needing a different scope for the initializer list, the
-    // overridden implementation of this method cannot cause the visitNode
-    // method to be invoked. As a result, we have to hard-code using the
-    // element resolver and type analyzer to visit the constructor declaration.
-    node.accept(elementResolver);
-    node.accept(typeAnalyzer);
-    safelyVisitComment(node.documentationComment);
-  }
-
-  @override
   void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
     //
     // We visit the expression, but do not visit the field name because it needs
@@ -1258,7 +1224,7 @@
     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 whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.expression);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
     var enclosingConstructor = enclosingFunction as ConstructorElement;
@@ -1281,6 +1247,11 @@
   }
 
   @override
+  void visitConstructorReference(covariant ConstructorReferenceImpl node) {
+    _constructorReferenceResolver.resolve(node);
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     //
     // We do not visit the label because it needs to be visited in the context
@@ -1289,7 +1260,7 @@
     checkUnreachableNode(node);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
-    flowAnalysis?.continueStatement(node);
+    flowAnalysis.continueStatement(node);
   }
 
   @override
@@ -1304,24 +1275,24 @@
   }
 
   @override
-  void visitDoStatementInScope(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     checkUnreachableNode(node);
 
     var body = node.body;
     var condition = node.condition;
 
-    flowAnalysis?.flow?.doStatement_bodyBegin(node);
-    visitStatementInScope(body);
+    flowAnalysis.flow?.doStatement_bodyBegin(node);
+    body.accept(this);
 
-    flowAnalysis?.flow?.doStatement_conditionBegin();
+    flowAnalysis.flow?.doStatement_conditionBegin();
     InferenceContext.setType(condition, typeProvider.boolType);
     condition.accept(this);
     condition = node.condition;
-    var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(condition);
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
-    flowAnalysis?.flow?.doStatement_end(condition);
+    flowAnalysis.flow?.doStatement_end(condition);
   }
 
   @override
@@ -1346,12 +1317,10 @@
     var outerType = enclosingClass;
     try {
       enclosingClass = node.declaredElement;
-      _thisType = enclosingClass?.thisType;
       super.visitEnumDeclaration(node);
       node.accept(elementResolver);
       node.accept(typeAnalyzer);
     } finally {
-      _thisType = outerType?.thisType;
       enclosingClass = outerType;
     }
   }
@@ -1372,7 +1341,7 @@
 
       super.visitExpressionFunctionBody(node);
 
-      flowAnalysis?.flow?.handleExit();
+      flowAnalysis.flow?.handleExit();
 
       inferenceContext.bodyContext!.addReturnExpression(node.expression);
     } finally {
@@ -1383,22 +1352,18 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
+    var outerExtension = enclosingExtension;
     try {
+      enclosingExtension = node.declaredElement!;
       super.visitExtensionDeclaration(node);
       node.accept(elementResolver);
       node.accept(typeAnalyzer);
     } finally {
-      _thisType = null;
+      enclosingExtension = outerExtension;
     }
   }
 
   @override
-  void visitExtensionDeclarationInScope(ExtensionDeclaration node) {
-    _thisType = node.declaredElement!.extendedType;
-    super.visitExtensionDeclarationInScope(node);
-  }
-
-  @override
   void visitExtensionOverride(ExtensionOverride node) {
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     node.extensionName.accept(this);
@@ -1416,19 +1381,22 @@
   void visitFieldDeclaration(FieldDeclaration node) {
     _thisAccessTracker.enterFieldDeclaration(node);
     try {
+      assert(_thisType == null);
+      _setupThisType();
       super.visitFieldDeclaration(node);
     } finally {
       _thisAccessTracker.exitFieldDeclaration(node);
+      _thisType = null;
     }
   }
 
   @override
-  void visitForElementInScope(ForElement node) {
+  void visitForElement(ForElement node) {
     _forResolver.resolveElement(node as ForElementImpl);
   }
 
   @override
-  void visitForStatementInScope(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     _forResolver.resolveStatement(node as ForStatementImpl);
     nullSafetyDeadCodeVerifier.flowEnd(node.body);
   }
@@ -1438,12 +1406,12 @@
     bool isLocal = node.parent is FunctionDeclarationStatement;
 
     if (isLocal) {
-      flowAnalysis!.flow!.functionExpression_begin(node);
+      flowAnalysis.flow!.functionExpression_begin(node);
     } else {
-      flowAnalysis!
-          .topLevelDeclaration_enter(node, node.functionExpression.parameters);
+      flowAnalysis.topLevelDeclaration_enter(
+          node, node.functionExpression.parameters);
     }
-    flowAnalysis!.executableDeclaration_enter(
+    flowAnalysis.executableDeclaration_enter(
       node,
       node.functionExpression.parameters,
       isLocal,
@@ -1452,7 +1420,13 @@
     var functionType = node.declaredElement!.type;
     InferenceContext.setType(node.functionExpression, functionType);
 
-    super.visitFunctionDeclaration(node);
+    var outerFunction = _enclosingFunction;
+    try {
+      _enclosingFunction = node.declaredElement;
+      super.visitFunctionDeclaration(node);
+    } finally {
+      _enclosingFunction = outerFunction;
+    }
 
     // TODO(scheglov) encapsulate
     var bodyContext = BodyInferenceContext.of(
@@ -1463,14 +1437,14 @@
       body: node.functionExpression.body,
       errorNode: node.name,
     );
-    flowAnalysis!.executableDeclaration_exit(
+    flowAnalysis.executableDeclaration_exit(
       node.functionExpression.body,
       isLocal,
     );
     if (isLocal) {
-      flowAnalysis!.flow!.functionExpression_end();
+      flowAnalysis.flow!.functionExpression_end();
     } else {
-      flowAnalysis!.topLevelDeclaration_exit();
+      flowAnalysis.topLevelDeclaration_exit();
     }
     nullSafetyDeadCodeVerifier.flowEnd(node);
 
@@ -1480,33 +1454,11 @@
   }
 
   @override
-  void visitFunctionDeclarationInScope(FunctionDeclaration node) {
-    super.visitFunctionDeclarationInScope(node);
-    safelyVisitComment(node.documentationComment);
-  }
-
-  @override
   void visitFunctionExpression(covariant FunctionExpressionImpl node) {
-    // Note: we have to update _enclosingFunction because we don't make use of
-    // super.visitFunctionExpression.
     var outerFunction = _enclosingFunction;
     _enclosingFunction = node.declaredElement;
 
-    if (node.parent is FunctionDeclaration) {
-      _functionExpressionResolver.resolve(node);
-    } else {
-      Scope outerScope = nameScope;
-      try {
-        ExecutableElement element = node.declaredElement!;
-        nameScope = FormalParameterScope(
-          TypeParameterScope(nameScope, element.typeParameters),
-          element.parameters,
-        );
-        _functionExpressionResolver.resolve(node);
-      } finally {
-        nameScope = outerScope;
-      }
-    }
+    _functionExpressionResolver.resolve(node);
 
     _enclosingFunction = outerFunction;
   }
@@ -1536,12 +1488,6 @@
   }
 
   @override
-  void visitFunctionTypeAliasInScope(FunctionTypeAlias node) {
-    super.visitFunctionTypeAliasInScope(node);
-    safelyVisitComment(node.documentationComment);
-  }
-
-  @override
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     super.visitFunctionTypedFormalParameter(node);
     node.accept(elementResolver);
@@ -1558,37 +1504,31 @@
   }
 
   @override
-  void visitGenericTypeAliasInFunctionScope(GenericTypeAlias node) {
-    super.visitGenericTypeAliasInFunctionScope(node);
-    safelyVisitComment(node.documentationComment);
-  }
-
-  @override
   void visitHideCombinator(HideCombinator node) {}
 
   @override
   void visitIfElement(IfElement node) {
-    flowAnalysis?.flow?.ifStatement_conditionBegin();
+    flowAnalysis.flow?.ifStatement_conditionBegin();
     Expression condition = node.condition;
     InferenceContext.setType(condition, typeProvider.boolType);
     condition.accept(this);
     condition = node.condition;
-    var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(condition);
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
     CollectionElement thenElement = node.thenElement;
-    flowAnalysis!.flow?.ifStatement_thenBegin(condition, node);
+    flowAnalysis.flow?.ifStatement_thenBegin(condition, node);
     thenElement.accept(this);
 
     var elseElement = node.elseElement;
     if (elseElement != null) {
-      flowAnalysis?.flow?.ifStatement_elseBegin();
+      flowAnalysis.flow?.ifStatement_elseBegin();
       elseElement.accept(this);
     }
 
-    flowAnalysis?.flow?.ifStatement_end(elseElement != null);
+    flowAnalysis.flow?.ifStatement_end(elseElement != null);
 
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
@@ -1597,31 +1537,31 @@
   @override
   void visitIfStatement(IfStatement node) {
     checkUnreachableNode(node);
-    flowAnalysis?.flow?.ifStatement_conditionBegin();
+    flowAnalysis.flow?.ifStatement_conditionBegin();
 
     Expression condition = node.condition;
 
     InferenceContext.setType(condition, typeProvider.boolType);
     condition.accept(this);
     condition = node.condition;
-    var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(condition);
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
     Statement thenStatement = node.thenStatement;
-    flowAnalysis!.flow?.ifStatement_thenBegin(condition, node);
-    visitStatementInScope(thenStatement);
+    flowAnalysis.flow?.ifStatement_thenBegin(condition, node);
+    thenStatement.accept(this);
     nullSafetyDeadCodeVerifier.flowEnd(thenStatement);
 
     var elseStatement = node.elseStatement;
     if (elseStatement != null) {
-      flowAnalysis?.flow?.ifStatement_elseBegin();
-      visitStatementInScope(elseStatement);
+      flowAnalysis.flow?.ifStatement_elseBegin();
+      elseStatement.accept(this);
       nullSafetyDeadCodeVerifier.flowEnd(elseStatement);
     }
 
-    flowAnalysis?.flow?.ifStatement_end(elseStatement != null);
+    flowAnalysis.flow?.ifStatement_end(elseStatement != null);
 
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
@@ -1644,7 +1584,7 @@
 
     InferenceContext.setType(node.index, result.indexContextType);
     node.index.accept(this);
-    var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(node.index);
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.index);
     checkIndexExpressionIndex(
       node.index,
       readElement: result.readElement as ExecutableElement?,
@@ -1674,7 +1614,7 @@
   @override
   void visitIsExpression(IsExpression node) {
     super.visitIsExpression(node);
-    flowAnalysis?.isExpression(node);
+    flowAnalysis.isExpression(node);
   }
 
   @override
@@ -1682,9 +1622,9 @@
 
   @override
   void visitLabeledStatement(LabeledStatement node) {
-    flowAnalysis?.labeledStatement_enter(node);
+    flowAnalysis.labeledStatement_enter(node);
     super.visitLabeledStatement(node);
-    flowAnalysis?.labeledStatement_exit(node);
+    flowAnalysis.labeledStatement_exit(node);
   }
 
   @override
@@ -1698,13 +1638,22 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    flowAnalysis!.topLevelDeclaration_enter(node, node.parameters);
-    flowAnalysis!.executableDeclaration_enter(node, node.parameters, false);
+    flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
+    flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
 
     DartType returnType = node.declaredElement!.returnType;
     InferenceContext.setType(node.body, returnType);
 
-    super.visitMethodDeclaration(node);
+    var outerFunction = _enclosingFunction;
+    try {
+      _enclosingFunction = node.declaredElement;
+      assert(_thisType == null);
+      _setupThisType();
+      super.visitMethodDeclaration(node);
+    } finally {
+      _enclosingFunction = outerFunction;
+      _thisType = null;
+    }
 
     // TODO(scheglov) encapsulate
     var bodyContext = BodyInferenceContext.of(node.body);
@@ -1713,8 +1662,8 @@
       body: node.body,
       errorNode: node.name,
     );
-    flowAnalysis!.executableDeclaration_exit(node.body, false);
-    flowAnalysis!.topLevelDeclaration_exit();
+    flowAnalysis.executableDeclaration_exit(node.body, false);
+    flowAnalysis.topLevelDeclaration_exit();
     nullSafetyDeadCodeVerifier.flowEnd(node);
 
     node.accept(elementResolver);
@@ -1729,7 +1678,7 @@
     target?.accept(this);
 
     if (_migratableAstInfoProvider.isMethodInvocationNullAware(node)) {
-      var flow = flowAnalysis?.flow;
+      var flow = flowAnalysis.flow;
       if (flow != null) {
         if (target is SimpleIdentifierImpl &&
             target.staticElement is ClassElement) {
@@ -1748,9 +1697,9 @@
 
     var functionRewrite = MethodInvocationResolver.getRewriteResult(node);
     if (functionRewrite != null) {
-      nullShortingTermination(node, discardType: true);
       _resolveRewrittenFunctionExpressionInvocation(
           functionRewrite, whyNotPromotedList);
+      nullShortingTermination(node, discardType: true);
     } else {
       nullShortingTermination(node);
     }
@@ -1765,30 +1714,23 @@
     //
     var outerType = enclosingClass;
     try {
+      enclosingClass = node.declaredElement!;
       super.visitMixinDeclaration(node);
       node.accept(elementResolver);
       node.accept(typeAnalyzer);
     } finally {
-      _thisType = outerType?.thisType;
       enclosingClass = outerType;
     }
   }
 
   @override
-  void visitMixinDeclarationInScope(MixinDeclaration node) {
-    enclosingClass = node.declaredElement;
-    _thisType = enclosingClass?.thisType;
-    super.visitMixinDeclarationInScope(node);
-  }
-
-  @override
   void visitNamedExpression(NamedExpression node) {
     InferenceContext.setTypeFromNode(node.expression, node);
     super.visitNamedExpression(node);
     // Any "why not promoted" information that flow analysis had associated with
     // `node.expression` now needs to be forwarded to `node`, so that when
     // `visitArgumentList` iterates through the arguments, it will find it.
-    flowAnalysis?.flow?.forwardExpression(node, node.expression);
+    flowAnalysis.flow?.forwardExpression(node, node.expression);
   }
 
   @override
@@ -1801,7 +1743,7 @@
 
   @override
   void visitNullLiteral(NullLiteral node) {
-    flowAnalysis?.flow?.nullLiteral(node);
+    flowAnalysis.flow?.nullLiteral(node);
     super.visitNullLiteral(node);
   }
 
@@ -1809,7 +1751,7 @@
   void visitParenthesizedExpression(ParenthesizedExpression node) {
     InferenceContext.setTypeFromNode(node.expression, node);
     super.visitParenthesizedExpression(node);
-    flowAnalysis?.flow?.parenthesizedExpression(node, node.expression);
+    flowAnalysis.flow?.parenthesizedExpression(node, node.expression);
   }
 
   @override
@@ -1884,7 +1826,7 @@
   @override
   void visitRethrowExpression(RethrowExpression node) {
     super.visitRethrowExpression(node);
-    flowAnalysis?.flow?.handleExit();
+    flowAnalysis.flow?.handleExit();
   }
 
   @override
@@ -1897,7 +1839,7 @@
     super.visitReturnStatement(node);
 
     inferenceContext.bodyContext?.addReturnExpression(node.expression);
-    flowAnalysis?.flow?.handleExit();
+    flowAnalysis.flow?.handleExit();
   }
 
   @override
@@ -1911,7 +1853,7 @@
 
   @override
   void visitSimpleIdentifier(covariant SimpleIdentifierImpl node) {
-    SimpleIdentifierResolver(this, flowAnalysis).resolve(node);
+    _simpleIdentifierResolver.resolve(node);
   }
 
   @override
@@ -1919,9 +1861,10 @@
     super.visitSpreadElement(node);
 
     if (!node.isNullAware) {
-      nullableDereferenceVerifier.expression(node.expression,
-          errorCode:
-              CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD);
+      nullableDereferenceVerifier.expression(
+        CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD,
+        node.expression,
+      );
     }
   }
 
@@ -1950,7 +1893,7 @@
         node.expression, _enclosingSwitchStatementExpressionType);
     super.visitSwitchCase(node);
 
-    var flow = flowAnalysis?.flow;
+    var flow = flowAnalysis.flow;
     if (flow != null && flow.isReachable && _isNonNullableByDefault) {
       var switchStatement = node.parent as SwitchStatement;
       if (switchStatement.members.last != node && node.statements.isNotEmpty) {
@@ -1971,7 +1914,7 @@
   }
 
   @override
-  void visitSwitchStatementInScope(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     checkUnreachableNode(node);
 
     var previousExpressionType = _enclosingSwitchStatementExpressionType;
@@ -1982,27 +1925,23 @@
 
       _enclosingSwitchStatementExpressionType = expression.typeOrThrow;
 
-      if (flowAnalysis != null) {
-        var flow = flowAnalysis!.flow!;
+      var flow = flowAnalysis.flow!;
 
-        flow.switchStatement_expressionEnd(node);
+      flow.switchStatement_expressionEnd(node);
 
-        var exhaustiveness = _SwitchExhaustiveness(
-          _enclosingSwitchStatementExpressionType!,
-        );
+      var exhaustiveness = _SwitchExhaustiveness(
+        _enclosingSwitchStatementExpressionType!,
+      );
 
-        var members = node.members;
-        for (var member in members) {
-          flow.switchStatement_beginCase(member.labels.isNotEmpty, node);
-          member.accept(this);
+      var members = node.members;
+      for (var member in members) {
+        flow.switchStatement_beginCase(member.labels.isNotEmpty, node);
+        member.accept(this);
 
-          exhaustiveness.visitSwitchMember(member);
-        }
-
-        flow.switchStatement_end(exhaustiveness.isExhaustive);
-      } else {
-        node.members.accept(this);
+        exhaustiveness.visitSwitchMember(member);
       }
+
+      flow.switchStatement_end(exhaustiveness.isExhaustive);
     } finally {
       _enclosingSwitchStatementExpressionType = previousExpressionType;
     }
@@ -2011,17 +1950,13 @@
   @override
   void visitThrowExpression(ThrowExpression node) {
     super.visitThrowExpression(node);
-    flowAnalysis?.flow?.handleExit();
+    flowAnalysis.flow?.handleExit();
   }
 
   @override
   void visitTryStatement(TryStatement node) {
-    if (flowAnalysis == null) {
-      return super.visitTryStatement(node);
-    }
-
     checkUnreachableNode(node);
-    var flow = flowAnalysis!.flow!;
+    var flow = flowAnalysis.flow!;
 
     var body = node.body;
     var catchClauses = node.catchClauses;
@@ -2073,32 +2008,23 @@
     _variableDeclarationResolver.resolve(node as VariableDeclarationImpl);
 
     var declaredElement = node.declaredElement!;
-    if (node.parent!.parent is ForParts) {
-      _define(declaredElement);
-    }
 
     var initializer = node.initializer;
     var parent = node.parent as VariableDeclarationList;
     var declaredType = parent.type;
     if (initializer != null) {
       var initializerStaticType = initializer.typeOrThrow;
-      if (declaredType == null) {
-        if (_isNonNullableByDefault &&
-            initializerStaticType is TypeParameterType) {
-          flowAnalysis?.flow?.promote(
-              declaredElement as PromotableElement, initializerStaticType);
-        }
-      } else {
-        flowAnalysis?.flow?.initialize(declaredElement as PromotableElement,
-            initializerStaticType, initializer,
-            isFinal: parent.isFinal, isLate: parent.isLate);
-      }
+      flowAnalysis.flow?.initialize(declaredElement as PromotableElement,
+          initializerStaticType, initializer,
+          isFinal: parent.isFinal,
+          isLate: parent.isLate,
+          isImplicitlyTyped: declaredType == null);
     }
   }
 
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
-    flowAnalysis?.variableDeclarationList(node);
+    flowAnalysis.variableDeclarationList(node);
     for (VariableDeclaration decl in node.variables) {
       VariableElement variableElement = decl.declaredElement!;
       InferenceContext.setType(decl, variableElement.type);
@@ -2110,31 +2036,22 @@
   void visitWhileStatement(WhileStatement node) {
     checkUnreachableNode(node);
 
-    // Note: since we don't call the base class, we have to maintain
-    // _implicitLabelScope ourselves.
-    ImplicitLabelScope outerImplicitScope = _implicitLabelScope;
-    try {
-      _implicitLabelScope = _implicitLabelScope.nest(node);
+    Expression condition = node.condition;
+    InferenceContext.setType(condition, typeProvider.boolType);
 
-      Expression condition = node.condition;
-      InferenceContext.setType(condition, typeProvider.boolType);
+    flowAnalysis.flow?.whileStatement_conditionBegin(node);
+    condition.accept(this);
+    condition = node.condition;
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
-      flowAnalysis?.flow?.whileStatement_conditionBegin(node);
-      condition.accept(this);
-      condition = node.condition;
-      var whyNotPromoted = flowAnalysis?.flow?.whyNotPromoted(condition);
+    boolExpressionVerifier.checkForNonBoolCondition(node.condition,
+        whyNotPromoted: whyNotPromoted);
 
-      boolExpressionVerifier.checkForNonBoolCondition(node.condition,
-          whyNotPromoted: whyNotPromoted);
-
-      Statement body = node.body;
-      flowAnalysis?.flow?.whileStatement_bodyBegin(node, condition);
-      visitStatementInScope(body);
-      flowAnalysis?.flow?.whileStatement_end();
-      nullSafetyDeadCodeVerifier.flowEnd(node.body);
-    } finally {
-      _implicitLabelScope = outerImplicitScope;
-    }
+    Statement body = node.body;
+    flowAnalysis.flow?.whileStatement_bodyBegin(node, condition);
+    body.accept(this);
+    flowAnalysis.flow?.whileStatement_end();
+    nullSafetyDeadCodeVerifier.flowEnd(node.body);
     // TODO(brianwilkerson) If the loop can only be exited because the condition
     // is false, then propagateFalseState(condition);
     node.accept(elementResolver);
@@ -2175,7 +2092,7 @@
       if (target is SimpleIdentifier && target.staticElement is ClassElement) {
         // `?.` to access static methods is equivalent to `.`, so do nothing.
       } else {
-        flowAnalysis!.flow!.nullAwareAccess_rightBegin(function,
+        flowAnalysis.flow!.nullAwareAccess_rightBegin(function,
             function.realTarget.staticType ?? typeProvider.dynamicType);
         _unfinishedNullShorts.add(node.nullShortingTermination);
       }
@@ -2187,6 +2104,18 @@
     nullShortingTermination(node);
   }
 
+  void _setupThisType() {
+    var enclosingClass = this.enclosingClass;
+    if (enclosingClass != null) {
+      _thisType = enclosingClass.thisType;
+    } else {
+      var enclosingExtension = this.enclosingExtension;
+      if (enclosingExtension != null) {
+        _thisType = enclosingExtension.extendedType;
+      }
+    }
+  }
+
   /// Given an [argumentList] and the [parameters] related to the element that
   /// will be invoked using those arguments, compute the list of parameters that
   /// correspond to the list of arguments.
@@ -2316,9 +2245,8 @@
             typeProvider,
             errorListener,
             featureSet,
-            null,
             FlowAnalysisHelperForMigration(
-                typeSystem, migrationResolutionHooks, true),
+                typeSystem, migrationResolutionHooks, featureSet),
             migrationResolutionHooks,
             migrationResolutionHooks);
 
@@ -2364,24 +2292,14 @@
   }
 }
 
-/// The abstract class `ScopedVisitor` maintains name and label scopes as an AST
-/// structure is being visited.
-abstract class ScopedVisitor extends UnifyingAstVisitor<void> {
+/// Instances of the class `ScopeResolverVisitor` are used to resolve
+/// [SimpleIdentifier]s to declarations using scoping rules.
+///
+/// TODO(paulberry): migrate the responsibility for all scope resolution into
+/// this visitor.
+class ScopeResolverVisitor extends ResolverBase {
   static const _nameScopeProperty = 'nameScope';
 
-  /// The element for the library containing the compilation unit being visited.
-  final LibraryElementImpl definingLibrary;
-
-  /// The source representing the compilation unit being visited.
-  final Source source;
-
-  /// The object used to access the types from the core library.
-  final TypeProviderImpl typeProvider;
-
-  /// The error reporter that will be informed of any errors that are found
-  /// during resolution.
-  final ErrorReporter errorReporter;
-
   /// The scope used to resolve identifiers.
   Scope nameScope;
 
@@ -2392,24 +2310,20 @@
   /// `null` if no labels have been defined in the current context.
   LabelScope? labelScope;
 
-  /// The class containing the AST nodes being visited,
-  /// or `null` if we are not in the scope of a class.
-  ClassElement? enclosingClass;
+  /// The container with information about local variables.
+  final LocalVariableInfo _localVariableInfo = LocalVariableInfo();
 
-  /// The element representing the extension containing the AST nodes being
-  /// visited, or `null` if we are not in the scope of an extension.
-  ExtensionElement? enclosingExtension;
+  /// If the current function is contained within a closure (a local function or
+  /// function expression inside another executable declaration), the element
+  /// representing the closure; otherwise `null`.
+  ExecutableElement? _enclosingClosure;
 
-  /// The element representing the function containing the current node, or
-  /// `null` if the current node is not contained in a function.
-  ExecutableElement? _enclosingFunction;
-
-  /// Initialize a newly created visitor to resolve the nodes in a compilation
-  /// unit.
+  /// Initialize a newly created visitor to resolve the nodes in an AST node.
   ///
-  /// [definingLibrary] is the element for the library containing the
-  /// compilation unit being visited.
-  /// [source] is the source representing the compilation unit being visited.
+  /// [definingLibrary] is the element for the library containing the node being
+  /// visited.
+  /// [source] is the source representing the compilation unit containing the
+  /// node being visited
   /// [typeProvider] is the object used to access the types from the core
   /// library.
   /// [errorListener] is the error listener that will be informed of any errors
@@ -2417,44 +2331,17 @@
   /// [nameScope] is the scope used to resolve identifiers in the node that will
   /// first be visited.  If `null` or unspecified, a new [LibraryScope] will be
   /// created based on [definingLibrary] and [typeProvider].
-  ScopedVisitor(this.definingLibrary, Source source, this.typeProvider,
-      AnalysisErrorListener errorListener,
+  ScopeResolverVisitor(LibraryElementImpl definingLibrary, Source source,
+      TypeProvider typeProvider, AnalysisErrorListener errorListener,
       {Scope? nameScope})
-      : source = source,
-        errorReporter = ErrorReporter(
-          errorListener,
-          source,
-          isNonNullableByDefault: definingLibrary.isNonNullableByDefault,
-        ),
-        nameScope = nameScope ?? LibraryScope(definingLibrary);
-
-  /// Return the element representing the function containing the current node,
-  /// or `null` if the current node is not contained in a function.
-  ///
-  /// @return the element representing the function containing the current node
-  ExecutableElement? get enclosingFunction => _enclosingFunction;
+      : nameScope = nameScope ?? LibraryScope(definingLibrary),
+        super(definingLibrary, source, typeProvider as TypeProviderImpl,
+            errorListener);
 
   /// Return the implicit label scope in which the current node is being
   /// resolved.
   ImplicitLabelScope get implicitLabelScope => _implicitLabelScope;
 
-  /// Replaces the current [Scope] with the enclosing [Scope].
-  ///
-  /// @return the enclosing [Scope].
-  Scope popNameScope() {
-    nameScope = (nameScope as EnclosedScope).parent;
-    return nameScope;
-  }
-
-  /// Pushes a new [Scope] into the visitor.
-  ///
-  /// @return the new [Scope].
-  Scope pushNameScope() {
-    Scope newScope = LocalScope(nameScope);
-    nameScope = newScope;
-    return nameScope;
-  }
-
   @override
   void visitBlock(Block node) {
     _withDeclaredLocals(node, node.statements, () {
@@ -2474,6 +2361,11 @@
   }
 
   @override
+  void visitBreakStatement(covariant BreakStatementImpl node) {
+    node.target = _lookupBreakOrContinueTarget(node, node.label, false);
+  }
+
+  @override
   void visitCatchClause(CatchClause node) {
     var exception = node.exceptionParameter;
     if (exception != null) {
@@ -2497,22 +2389,20 @@
   @override
   void visitClassDeclaration(ClassDeclaration node) {
     Scope outerScope = nameScope;
-    var outerClass = enclosingClass;
     try {
       ClassElement element = node.declaredElement!;
-      enclosingClass = node.declaredElement;
       node.metadata.accept(this);
 
       nameScope = TypeParameterScope(
         nameScope,
         element.typeParameters,
       );
+      _setNodeNameScope(node, nameScope);
       visitClassDeclarationInScope(node);
 
       nameScope = ClassScope(nameScope, element);
       visitClassMembersInScope(node);
     } finally {
-      enclosingClass = outerClass;
       nameScope = outerScope;
     }
   }
@@ -2567,13 +2457,11 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement;
+    (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
     Scope outerScope = nameScope;
     try {
       ConstructorElement element = node.declaredElement!;
 
-      node.documentationComment?.accept(this);
       node.metadata.accept(this);
       node.returnType.accept(this);
       node.name?.accept(this);
@@ -2598,15 +2486,20 @@
       visitConstructorDeclarationInScope(node);
     } finally {
       nameScope = outerScope;
-      _enclosingFunction = outerFunction;
     }
   }
 
   void visitConstructorDeclarationInScope(ConstructorDeclaration node) {
+    node.documentationComment?.accept(this);
     node.body.accept(this);
   }
 
   @override
+  void visitContinueStatement(covariant ContinueStatementImpl node) {
+    node.target = _lookupBreakOrContinueTarget(node, node.label, true);
+  }
+
+  @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
     _define(node.declaredElement!);
     super.visitDeclaredIdentifier(node);
@@ -2631,16 +2524,13 @@
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
     Scope outerScope = nameScope;
-    var outerClass = enclosingClass;
     try {
       ClassElement element = node.declaredElement!;
-      enclosingClass = node.declaredElement;
       node.metadata.accept(this);
 
       nameScope = ClassScope(nameScope, element);
       visitEnumMembersInScope(node);
     } finally {
-      enclosingClass = outerClass;
       nameScope = outerScope;
     }
   }
@@ -2659,22 +2549,20 @@
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     Scope outerScope = nameScope;
-    var outerExtension = enclosingExtension;
     try {
       ExtensionElement element = node.declaredElement!;
-      enclosingExtension = element;
       node.metadata.accept(this);
 
       nameScope = TypeParameterScope(
         nameScope,
         element.typeParameters,
       );
+      _setNodeNameScope(node, nameScope);
       visitExtensionDeclarationInScope(node);
 
       nameScope = ExtensionScope(nameScope, element);
       visitExtensionMembersInScope(node);
     } finally {
-      enclosingExtension = outerExtension;
       nameScope = outerScope;
     }
   }
@@ -2777,28 +2665,31 @@
 
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
-    var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement;
-
-    node.metadata.accept(this);
+    (node.functionExpression.body as FunctionBodyImpl).localVariableInfo =
+        _localVariableInfo;
+    var outerClosure = _enclosingClosure;
     Scope outerScope = nameScope;
     try {
+      _enclosingClosure = node.parent is FunctionDeclarationStatement
+          ? node.declaredElement
+          : null;
+      node.metadata.accept(this);
       var element = node.declaredElement!;
       nameScope = TypeParameterScope(
         nameScope,
         element.typeParameters,
       );
+      _setNodeNameScope(node, nameScope);
       visitFunctionDeclarationInScope(node);
     } finally {
       nameScope = outerScope;
-      _enclosingFunction = outerFunction;
+      _enclosingClosure = outerClosure;
     }
   }
 
   void visitFunctionDeclarationInScope(FunctionDeclaration node) {
     // Note: we don't visit metadata because it's not inside the function's type
     // parameter scope.  It was already visited in [visitFunctionDeclaration].
-    node.documentationComment?.accept(this);
     node.returnType?.accept(this);
     node.name.accept(this);
     node.functionExpression.accept(this);
@@ -2806,16 +2697,21 @@
 
   @override
   void visitFunctionExpression(FunctionExpression node) {
-    if (node.parent is FunctionDeclaration) {
-      // We have already created a function scope and don't need to do so again.
-      super.visitFunctionExpression(node);
-      return;
-    }
-
-    var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement;
+    var outerClosure = _enclosingClosure;
     Scope outerScope = nameScope;
     try {
+      if (node.parent is! FunctionDeclaration) {
+        (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
+        _enclosingClosure = node.declaredElement;
+      }
+      var parent = node.parent;
+      if (parent is FunctionDeclaration) {
+        // We have already created a function scope and don't need to do so again.
+        super.visitFunctionExpression(node);
+        parent.documentationComment?.accept(this);
+        return;
+      }
+
       ExecutableElement element = node.declaredElement!;
       nameScope = FormalParameterScope(
         TypeParameterScope(nameScope, element.typeParameters),
@@ -2824,7 +2720,7 @@
       super.visitFunctionExpression(node);
     } finally {
       nameScope = outerScope;
-      _enclosingFunction = outerFunction;
+      _enclosingClosure = outerClosure;
     }
   }
 
@@ -2845,11 +2741,13 @@
     // Note: we don't visit metadata because it's not inside the function type
     // alias's type parameter scope.  It was already visited in
     // [visitFunctionTypeAlias].
-    node.documentationComment?.accept(this);
     node.returnType?.accept(this);
     node.name.accept(this);
     node.typeParameters?.accept(this);
     node.parameters.accept(this);
+    // Visiting the parameters added them to the scope as a side effect.  So it
+    // is safe to visit the documentation comment now.
+    node.documentationComment?.accept(this);
   }
 
   @override
@@ -2895,6 +2793,7 @@
       GenericFunctionTypeElement element =
           (node as GenericFunctionTypeImpl).declaredElement!;
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
+      _setNodeNameScope(node, nameScope);
       super.visitGenericFunctionType(node);
     } finally {
       nameScope = outerScope;
@@ -2908,25 +2807,25 @@
     try {
       var element = node.declaredElement as TypeAliasElement;
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
+      _setNodeNameScope(node, nameScope);
       visitGenericTypeAliasInScope(node);
 
       var aliasedElement = element.aliasedElement;
       if (aliasedElement is GenericFunctionTypeElement) {
-        nameScope = FormalParameterScope(nameScope, aliasedElement.parameters);
-        visitGenericTypeAliasInFunctionScope(node);
+        nameScope = FormalParameterScope(
+            TypeParameterScope(nameScope, aliasedElement.typeParameters),
+            aliasedElement.parameters);
       }
+      node.documentationComment?.accept(this);
     } finally {
       nameScope = outerScope;
     }
   }
 
-  void visitGenericTypeAliasInFunctionScope(GenericTypeAlias node) {}
-
   void visitGenericTypeAliasInScope(GenericTypeAlias node) {
     // Note: we don't visit metadata because it's not inside the generic type
     // alias's type parameter scope.  It was already visited in
     // [visitGenericTypeAlias].
-    node.documentationComment?.accept(this);
     node.name.accept(this);
     node.typeParameters?.accept(this);
     node.type.accept(this);
@@ -2951,9 +2850,7 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    var outerFunction = _enclosingFunction;
-    _enclosingFunction = node.declaredElement;
-
+    (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
     node.metadata.accept(this);
     Scope outerScope = nameScope;
     try {
@@ -2962,41 +2859,55 @@
         nameScope,
         element.typeParameters,
       );
+      _setNodeNameScope(node, nameScope);
       visitMethodDeclarationInScope(node);
     } finally {
       nameScope = outerScope;
-      _enclosingFunction = outerFunction;
     }
   }
 
   void visitMethodDeclarationInScope(MethodDeclaration node) {
     // Note: we don't visit metadata because it's not inside the method's type
     // parameter scope.  It was already visited in [visitMethodDeclaration].
-    node.documentationComment?.accept(this);
     node.returnType?.accept(this);
     node.name.accept(this);
     node.typeParameters?.accept(this);
     node.parameters?.accept(this);
+    // Visiting the parameters added them to the scope as a side effect.  So it
+    // is safe to visit the documentation comment now.
+    node.documentationComment?.accept(this);
     node.body.accept(this);
   }
 
   @override
+  void visitMethodInvocation(MethodInvocation node) {
+    // Only visit the method name if there's no real target (so this is an
+    // unprefixed function invocation, outside a cascade).  This is the only
+    // circumstance in which the method name is meant to be looked up in the
+    // current scope.
+    node.target?.accept(this);
+    if (node.realTarget == null) {
+      node.methodName.accept(this);
+    }
+    node.typeArguments?.accept(this);
+    node.argumentList.accept(this);
+  }
+
+  @override
   void visitMixinDeclaration(MixinDeclaration node) {
     Scope outerScope = nameScope;
-    var outerClass = enclosingClass;
     try {
       ClassElement element = node.declaredElement!;
-      enclosingClass = element;
       node.metadata.accept(this);
 
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
+      _setNodeNameScope(node, nameScope);
       visitMixinDeclarationInScope(node);
 
       nameScope = ClassScope(nameScope, element);
       visitMixinMembersInScope(node);
     } finally {
       nameScope = outerScope;
-      enclosingClass = outerClass;
     }
   }
 
@@ -3012,6 +2923,64 @@
     node.members.accept(this);
   }
 
+  @override
+  void visitPrefixedIdentifier(PrefixedIdentifier node) {
+    // Do not visit the identifier after the `.`, since it is not meant to be
+    // looked up in the current scope.
+    node.prefix.accept(this);
+  }
+
+  @override
+  void visitPropertyAccess(PropertyAccess node) {
+    // Do not visit the property name, since it is not meant to be looked up in
+    // the current scope.
+    node.target?.accept(this);
+  }
+
+  @override
+  void visitSimpleIdentifier(covariant SimpleIdentifierImpl node) {
+    // Ignore if already resolved - declaration or type.
+    if (node.inDeclarationContext()) {
+      return;
+    }
+    // Ignore if qualified.
+    var parent = node.parent;
+    var scopeLookupResult = nameScope.lookup(node.name);
+    node.scopeLookupResult = scopeLookupResult;
+    // Ignore if it cannot be a reference to a local variable.
+    if (parent is FieldFormalParameter) {
+      return;
+    } else if (parent is ConstructorDeclaration && parent.returnType == node) {
+      return;
+    } else if (parent is ConstructorFieldInitializer &&
+        parent.fieldName == node) {
+      return;
+    }
+    if (parent is ConstructorName) {
+      return;
+    }
+    if (parent is Label) {
+      return;
+    }
+    // Prepare VariableElement.
+    var element = scopeLookupResult.getter;
+    if (element is! VariableElement) {
+      return;
+    }
+    // Must be local or parameter.
+    ElementKind kind = element.kind;
+    if (kind == ElementKind.LOCAL_VARIABLE || kind == ElementKind.PARAMETER) {
+      node.staticElement = element;
+      if (node.inSetterContext()) {
+        _localVariableInfo.potentiallyMutatedInScope.add(element);
+        if (_enclosingClosure != null &&
+            element.enclosingElement != _enclosingClosure) {
+          _localVariableInfo.potentiallyMutatedInClosure.add(element);
+        }
+      }
+    }
+  }
+
   /// Visit the given statement after it's scope has been created. This is used
   /// by ResolverVisitor to correctly visit the 'then' and 'else' statements of
   /// an 'if' statement.
@@ -3075,6 +3044,9 @@
   }
 
   @override
+  void visitTypeName(TypeName node) {}
+
+  @override
   void visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
 
@@ -3114,6 +3086,47 @@
     (nameScope as LocalScope).add(element);
   }
 
+  /// Return the target of a break or continue statement, and update the static
+  /// element of its label (if any). The [parentNode] is the AST node of the
+  /// break or continue statement. The [labelNode] is the label contained in
+  /// that statement (if any). The flag [isContinue] is `true` if the node being
+  /// visited is a continue statement.
+  AstNode? _lookupBreakOrContinueTarget(
+      AstNode parentNode, SimpleIdentifierImpl? labelNode, bool isContinue) {
+    if (labelNode == null) {
+      return implicitLabelScope.getTarget(isContinue);
+    } else {
+      var labelScope = this.labelScope;
+      if (labelScope == null) {
+        // There are no labels in scope, so by definition the label is
+        // undefined.
+        errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
+        return null;
+      }
+      var definingScope = labelScope.lookup(labelNode.name);
+      if (definingScope == null) {
+        // No definition of the given label name could be found in any
+        // enclosing scope.
+        errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
+        return null;
+      }
+      // The target has been found.
+      labelNode.staticElement = definingScope.element;
+      ExecutableElement? labelContainer =
+          definingScope.element.thisOrAncestorOfType();
+      if (_enclosingClosure != null &&
+          !identical(labelContainer, _enclosingClosure)) {
+        errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
+            labelNode,
+            [labelNode.name]);
+      }
+      return definingScope.node;
+    }
+  }
+
   void _withDeclaredLocals(
     AstNode node,
     List<Statement> statements,
@@ -3148,123 +3161,6 @@
   }
 }
 
-/// Instances of the class `VariableResolverVisitor` are used to resolve
-/// [SimpleIdentifier]s to local variables and formal parameters.
-class VariableResolverVisitor extends ScopedVisitor {
-  /// The container with information about local variables.
-  final LocalVariableInfo _localVariableInfo = LocalVariableInfo();
-
-  /// Initialize a newly created visitor to resolve the nodes in an AST node.
-  ///
-  /// [definingLibrary] is the element for the library containing the node being
-  /// visited.
-  /// [source] is the source representing the compilation unit containing the
-  /// node being visited
-  /// [typeProvider] is the object used to access the types from the core
-  /// library.
-  /// [errorListener] is the error listener that will be informed of any errors
-  /// that are found during resolution.
-  /// [nameScope] is the scope used to resolve identifiers in the node that will
-  /// first be visited.  If `null` or unspecified, a new [LibraryScope] will be
-  /// created based on [definingLibrary] and [typeProvider].
-  VariableResolverVisitor(LibraryElementImpl definingLibrary, Source source,
-      TypeProvider typeProvider, AnalysisErrorListener errorListener,
-      {Scope? nameScope})
-      : super(definingLibrary, source, typeProvider as TypeProviderImpl,
-            errorListener,
-            nameScope: nameScope);
-
-  @override
-  void visitConstructorDeclaration(ConstructorDeclaration node) {
-    (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
-    super.visitConstructorDeclaration(node);
-  }
-
-  @override
-  void visitExportDirective(ExportDirective node) {}
-
-  @override
-  void visitFunctionDeclaration(FunctionDeclaration node) {
-    (node.functionExpression.body as FunctionBodyImpl).localVariableInfo =
-        _localVariableInfo;
-    super.visitFunctionDeclaration(node);
-  }
-
-  @override
-  void visitFunctionExpression(FunctionExpression node) {
-    if (node.parent is! FunctionDeclaration) {
-      (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
-      super.visitFunctionExpression(node);
-    } else {
-      super.visitFunctionExpression(node);
-    }
-  }
-
-  @override
-  void visitImportDirective(ImportDirective node) {}
-
-  @override
-  void visitMethodDeclaration(MethodDeclaration node) {
-    (node.body as FunctionBodyImpl).localVariableInfo = _localVariableInfo;
-    super.visitMethodDeclaration(node);
-  }
-
-  @override
-  void visitSimpleIdentifier(covariant SimpleIdentifierImpl node) {
-    // Ignore if already resolved - declaration or type.
-    if (node.inDeclarationContext()) {
-      return;
-    }
-    // Ignore if it cannot be a reference to a local variable.
-    var parent = node.parent;
-    if (parent is FieldFormalParameter) {
-      return;
-    } else if (parent is ConstructorDeclaration && parent.returnType == node) {
-      return;
-    } else if (parent is ConstructorFieldInitializer &&
-        parent.fieldName == node) {
-      return;
-    }
-    // Ignore if qualified.
-    if (parent is PrefixedIdentifier && identical(parent.identifier, node)) {
-      return;
-    }
-    if (parent is PropertyAccess && identical(parent.propertyName, node)) {
-      return;
-    }
-    if (parent is MethodInvocation &&
-        identical(parent.methodName, node) &&
-        parent.realTarget != null) {
-      return;
-    }
-    if (parent is ConstructorName) {
-      return;
-    }
-    if (parent is Label) {
-      return;
-    }
-    // Prepare VariableElement.
-    var element = nameScope.lookup(node.name).getter;
-    if (element is! VariableElement) {
-      return;
-    }
-    // Must be local or parameter.
-    ElementKind kind = element.kind;
-    if (kind == ElementKind.LOCAL_VARIABLE || kind == ElementKind.PARAMETER) {
-      node.staticElement = element;
-      if (node.inSetterContext()) {
-        _localVariableInfo.potentiallyMutatedInScope.add(element);
-        if (element.enclosingElement != _enclosingFunction) {
-          _localVariableInfo.potentiallyMutatedInClosure.add(element);
-        }
-      }
-    }
-  }
-
-  @override
-  void visitTypeName(TypeName node) {}
-}
-
 /// Tracker for whether a `switch` statement has `default` or is on an
 /// enumeration, and all the enum constants are covered.
 class _SwitchExhaustiveness {
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 43750b2..4c44ba5 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -59,7 +59,7 @@
 
     expression.staticType = type;
     if (_typeSystem.isBottom(type)) {
-      _resolver.flowAnalysis?.flow?.handleExit();
+      _resolver.flowAnalysis.flow?.handleExit();
     }
   }
 
@@ -270,7 +270,7 @@
   @override
   void visitSuperExpression(covariant SuperExpressionImpl node) {
     var thisType = _resolver.thisType;
-    _resolver.flowAnalysis?.flow?.thisOrSuper(node, thisType ?? _dynamicType);
+    _resolver.flowAnalysis.flow?.thisOrSuper(node, thisType ?? _dynamicType);
     if (thisType == null ||
         node.thisOrAncestorOfType<ExtensionDeclaration>() != null) {
       // TODO(brianwilkerson) Report this error if it hasn't already been
@@ -291,7 +291,7 @@
   @override
   void visitThisExpression(covariant ThisExpressionImpl node) {
     var thisType = _resolver.thisType;
-    _resolver.flowAnalysis?.flow?.thisOrSuper(node, thisType ?? _dynamicType);
+    _resolver.flowAnalysis.flow?.thisOrSuper(node, thisType ?? _dynamicType);
     if (thisType == null) {
       // TODO(brianwilkerson) Report this error if it hasn't already been
       // reported.
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 70d878c..71aab4d 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -93,11 +93,14 @@
 
   static ExpressionFunctionBodyImpl asyncExpressionFunctionBody(
           Expression expression) =>
-      astFactory.expressionFunctionBody(
-          TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
-          TokenFactory.tokenFromType(TokenType.FUNCTION),
-          expression,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      astFactory.expressionFunctionBody2(
+        keyword:
+            TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
+        star: null,
+        functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
+        expression: expression,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static BlockFunctionBodyImpl asyncGeneratorBlockFunctionBody(
           [List<Statement> statements = const []]) =>
@@ -106,6 +109,17 @@
           TokenFactory.tokenFromType(TokenType.STAR),
           block(statements));
 
+  static ExpressionFunctionBodyImpl asyncGeneratorExpressionFunctionBody(
+          Expression expression) =>
+      astFactory.expressionFunctionBody2(
+        keyword:
+            TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
+        star: TokenFactory.tokenFromType(TokenType.STAR),
+        functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
+        expression: expression,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
+
   static AwaitExpressionImpl awaitExpression(Expression expression) =>
       astFactory.awaitExpression(
           TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "await"),
@@ -485,11 +499,13 @@
 
   static ExpressionFunctionBodyImpl expressionFunctionBody(
           Expression expression) =>
-      astFactory.expressionFunctionBody(
-          null,
-          TokenFactory.tokenFromType(TokenType.FUNCTION),
-          expression,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      astFactory.expressionFunctionBody2(
+        keyword: null,
+        star: null,
+        functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
+        expression: expression,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static ExpressionStatementImpl expressionStatement(Expression expression) =>
       astFactory.expressionStatement(
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index ed9b4f8..b53f44c 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -107,7 +107,7 @@
       ClassElement definingClass, String? name, bool isConst,
       [List<DartType> argumentTypes = const []]) {
     var offset = name == null ? -1 : 0;
-    // An unnamed constructor declared with `C.new(` is modeled as unnamed.
+    // A constructor declared as `C.new` is unnamed, and is modeled as such.
     var constructor = name == null || name == 'new'
         ? ConstructorElementImpl('', offset)
         : ConstructorElementImpl(name, offset);
@@ -163,7 +163,11 @@
 
   static FieldFormalParameterElementImpl fieldFormalParameter(
           Identifier name) =>
-      FieldFormalParameterElementImpl(name.name, name.offset);
+      FieldFormalParameterElementImpl(
+        name: name.name,
+        nameOffset: name.offset,
+        parameterKind: ParameterKind.REQUIRED,
+      );
 
   /// Destroy any static state retained by [ElementFactory].  This should be
   /// called from the `setUp` method of any tests that use [ElementFactory], in
@@ -266,27 +270,37 @@
   }
 
   static ParameterElementImpl namedParameter(String name) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.NAMED;
-    return parameter;
+    return ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.NAMED,
+    );
   }
 
   static ParameterElementImpl namedParameter2(String name, DartType type) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.NAMED;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.NAMED,
+    );
     parameter.type = type;
     return parameter;
   }
 
   static ParameterElementImpl positionalParameter(String name) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.POSITIONAL;
-    return parameter;
+    return ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.POSITIONAL,
+    );
   }
 
   static ParameterElementImpl positionalParameter2(String name, DartType type) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.POSITIONAL;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.POSITIONAL,
+    );
     parameter.type = type;
     return parameter;
   }
@@ -294,14 +308,19 @@
   static PrefixElementImpl prefix(String name) => PrefixElementImpl(name, 0);
 
   static ParameterElementImpl requiredParameter(String name) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.REQUIRED;
-    return parameter;
+    return ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.REQUIRED,
+    );
   }
 
   static ParameterElementImpl requiredParameter2(String name, DartType type) {
-    ParameterElementImpl parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.REQUIRED;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.REQUIRED,
+    );
     parameter.type = type;
     return parameter;
   }
@@ -383,9 +402,12 @@
   static List<ParameterElementImpl> _requiredParameters(
       List<DartType> argumentTypes) {
     var parameters = argumentTypes.mapIndexed((index, type) {
-      var parameter = ParameterElementImpl("a$index", index);
+      var parameter = ParameterElementImpl(
+        name: 'a$index',
+        nameOffset: index,
+        parameterKind: ParameterKind.REQUIRED,
+      );
       parameter.type = type;
-      parameter.parameterKind = ParameterKind.REQUIRED;
       return parameter;
     }).toList();
     return parameters;
diff --git a/pkg/analyzer/lib/src/generated/variable_type_provider.dart b/pkg/analyzer/lib/src/generated/variable_type_provider.dart
index 4258443..35cf432 100644
--- a/pkg/analyzer/lib/src/generated/variable_type_provider.dart
+++ b/pkg/analyzer/lib/src/generated/variable_type_provider.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 
 /// Provider of types for local variables and formal parameters.
@@ -12,15 +11,3 @@
   /// return the type of the variable at the node - declared or promoted.
   DartType getType(SimpleIdentifier node, {required bool isRead});
 }
-
-/// Implementation of [LocalVariableTypeProvider] that does not promote, for use
-/// in situations where no flow analysis is being done.  This happens in some
-/// analyzer internal unit tests.
-class NonPromotingLocalVariableTypeProvider
-    implements LocalVariableTypeProvider {
-  const NonPromotingLocalVariableTypeProvider();
-
-  @override
-  DartType getType(SimpleIdentifier node, {required bool isRead}) =>
-      (node.staticElement as VariableElement).type;
-}
diff --git a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
index 8f7b0b3..b2e5b12 100644
--- a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
+++ b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 
 /// The name and location of a diagnostic name in an ignore comment.
@@ -26,27 +25,16 @@
 /// Information about analysis `//ignore:` and `//ignore_for_file` comments
 /// within a source file.
 class IgnoreInfo {
-  ///  Instance shared by all cases without matches.
-  // ignore: deprecated_member_use_from_same_package
-  static final IgnoreInfo _EMPTY_INFO = IgnoreInfo();
-
-  /// A regular expression for matching 'ignore' comments.  Produces matches
-  /// containing 2 groups.  For example:
-  ///
-  ///     * ['//ignore: error_code', 'error_code']
+  /// A regular expression for matching 'ignore' comments.
   ///
   /// Resulting codes may be in a list ('error_code_1,error_code2').
-  static final RegExp IGNORE_MATCHER =
-      RegExp(r'//+[ ]*ignore:(.*)$', multiLine: true);
+  static final RegExp IGNORE_MATCHER = RegExp(r'//+[ ]*ignore:');
 
-  /// A regular expression for matching 'ignore_for_file' comments.  Produces
-  /// matches containing 2 groups.  For example:
-  ///
-  ///     * ['//ignore_for_file: error_code', 'error_code']
+  /// A regular expression for matching 'ignore_for_file' comments.
   ///
   /// Resulting codes may be in a list ('error_code_1,error_code2').
   static final RegExp IGNORE_FOR_FILE_MATCHER =
-      RegExp(r'//[ ]*ignore_for_file:(.*)$', multiLine: true);
+      RegExp(r'//[ ]*ignore_for_file:');
 
   /// A table mapping line numbers to the diagnostics that are ignored on that
   /// line.
@@ -56,9 +44,6 @@
   /// file.
   final List<DiagnosticName> _ignoredForFile = [];
 
-  @Deprecated('Use the constructor IgnoreInfo.forDart')
-  IgnoreInfo();
-
   /// Initialize a newly created instance of this class to represent the ignore
   /// comments in the given compilation [unit].
   IgnoreInfo.forDart(CompilationUnit unit, String content) {
@@ -68,11 +53,9 @@
       if (lexeme.contains('ignore:')) {
         var location = lineInfo.getLocation(comment.offset);
         var lineNumber = location.lineNumber;
-        String beforeMatch = content.substring(
-            lineInfo.getOffsetOfLine(lineNumber - 1),
-            lineInfo.getOffsetOfLine(lineNumber - 1) +
-                location.columnNumber -
-                1);
+        var offsetOfLine = lineInfo.getOffsetOfLine(lineNumber - 1);
+        var beforeMatch = content.substring(
+            offsetOfLine, offsetOfLine + location.columnNumber - 1);
         if (beforeMatch.trim().isEmpty) {
           // The comment is on its own line, so it refers to the next line.
           lineNumber++;
@@ -104,78 +87,21 @@
     return ignoredOnLine;
   }
 
-  /// Return `true` if the [errorCode] is ignored at the given [line].
+  /// Return `true` if the [errorCode] (case-insensitive) is ignored at the
+  /// given [line].
   bool ignoredAt(String errorCode, int line) {
-    for (var name in _ignoredForFile) {
-      if (name.matches(errorCode)) {
-        return true;
-      }
+    var ignoredDiagnostics = _ignoredOnLine[line];
+    if (ignoredForFile.isEmpty && ignoredDiagnostics == null) {
+      return false;
     }
-    var ignoredOnLine = _ignoredOnLine[line];
-    if (ignoredOnLine != null) {
-      for (var name in ignoredOnLine) {
-        if (name.matches(errorCode)) {
-          return true;
-        }
-      }
+    errorCode = errorCode.toLowerCase();
+    if (ignoredForFile.any((name) => name.matches(errorCode))) {
+      return true;
     }
-    return false;
-  }
-
-  /// Ignore these [errorCodes] at [line].
-  void _addAll(int line, Iterable<DiagnosticName> errorCodes) {
-    _ignoredOnLine.putIfAbsent(line, () => []).addAll(errorCodes);
-  }
-
-  /// Ignore these [errorCodes] in the whole file.
-  void _addAllForFile(Iterable<DiagnosticName> errorCodes) {
-    _ignoredForFile.addAll(errorCodes);
-  }
-
-  /// Calculate ignores for the given [content] with line [info].
-  @Deprecated('Use the constructor IgnoreInfo.forDart')
-  static IgnoreInfo calculateIgnores(String content, LineInfo info) {
-    Iterable<Match> matches = IGNORE_MATCHER.allMatches(content);
-    Iterable<Match> fileMatches = IGNORE_FOR_FILE_MATCHER.allMatches(content);
-    if (matches.isEmpty && fileMatches.isEmpty) {
-      return _EMPTY_INFO;
+    if (ignoredDiagnostics == null) {
+      return false;
     }
-
-    IgnoreInfo ignoreInfo = IgnoreInfo();
-    for (Match match in matches) {
-      // See _IGNORE_MATCHER for format --- note the possibility of error lists.
-      // Note that the offsets are not being computed here. This shouldn't
-      // affect older clients of this class because none of the previous APIs
-      // depended on having offsets.
-      Iterable<DiagnosticName> codes = match
-          .group(1)!
-          .split(',')
-          .map((String code) => DiagnosticName(code.trim().toLowerCase(), -1));
-      var location = info.getLocation(match.start);
-      int lineNumber = location.lineNumber;
-      String beforeMatch = content.substring(
-          info.getOffsetOfLine(lineNumber - 1),
-          info.getOffsetOfLine(lineNumber - 1) + location.columnNumber - 1);
-
-      if (beforeMatch.trim().isEmpty) {
-        // The comment is on its own line, so it refers to the next line.
-        ignoreInfo._addAll(lineNumber + 1, codes);
-      } else {
-        // The comment sits next to code, so it refers to its own line.
-        ignoreInfo._addAll(lineNumber, codes);
-      }
-    }
-    // Note that the offsets are not being computed here. This shouldn't affect
-    // older clients of this class because none of the previous APIs depended on
-    // having offsets.
-    for (Match match in fileMatches) {
-      Iterable<DiagnosticName> codes = match
-          .group(1)!
-          .split(',')
-          .map((String code) => DiagnosticName(code.trim().toLowerCase(), -1));
-      ignoreInfo._addAllForFile(codes);
-    }
-    return ignoreInfo;
+    return ignoredDiagnostics.any((name) => name.matches(errorCode));
   }
 }
 
@@ -186,14 +112,10 @@
       var comment = currentToken.precedingComments;
       while (comment != null) {
         var lexeme = comment.lexeme;
-        var match = IgnoreInfo.IGNORE_MATCHER.matchAsPrefix(lexeme);
-        if (match != null) {
+        if (lexeme.startsWith(IgnoreInfo.IGNORE_MATCHER)) {
           yield comment;
-        } else {
-          match = IgnoreInfo.IGNORE_FOR_FILE_MATCHER.matchAsPrefix(lexeme);
-          if (match != null) {
-            yield comment;
-          }
+        } else if (lexeme.startsWith(IgnoreInfo.IGNORE_FOR_FILE_MATCHER)) {
+          yield comment;
         }
         comment = comment.next as CommentToken?;
       }
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 2eaeac7..8670eee 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -33,7 +33,7 @@
         AnalysisErrorInfoImpl,
         AnalysisOptions,
         AnalysisOptionsImpl;
-import 'package:analyzer/src/generated/resolver.dart' show ScopedVisitor;
+import 'package:analyzer/src/generated/resolver.dart' show ScopeResolverVisitor;
 import 'package:analyzer/src/generated/source.dart' show LineInfo;
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/lint/analysis.dart';
@@ -399,7 +399,7 @@
       String id, bool setter, AstNode node) {
     Scope? scope;
     for (AstNode? context = node; context != null; context = context.parent) {
-      scope = ScopedVisitor.getNodeNameScope(context);
+      scope = ScopeResolverVisitor.getNodeNameScope(context);
       if (scope != null) {
         break;
       }
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index 0794a4c..424d04a 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -18,8 +18,8 @@
   final LintRuleExceptionHandler exceptionHandler;
 
   LinterVisitor(this.registry, [LintRuleExceptionHandler? exceptionHandler])
-      : exceptionHandler =
-            exceptionHandler ?? LinterExceptionHandler(true).logException;
+      : exceptionHandler = exceptionHandler ??
+            LinterExceptionHandler(propagateExceptions: true).logException;
 
   @override
   void visitAdjacentStrings(AdjacentStrings node) {
diff --git a/pkg/analyzer/lib/src/macro/builders/data_class.dart b/pkg/analyzer/lib/src/macro/builders/data_class.dart
index 664f5d8..a4a0393 100644
--- a/pkg/analyzer/lib/src/macro/builders/data_class.dart
+++ b/pkg/analyzer/lib/src/macro/builders/data_class.dart
@@ -39,6 +39,20 @@
   }
 }
 
+class DataClassMacro implements ClassDeclarationMacro {
+  const DataClassMacro();
+
+  @override
+  void visitClassDeclaration(
+    ast.ClassDeclaration declaration,
+    ClassDeclarationBuilder builder,
+  ) {
+    const AutoConstructorMacro().visitClassDeclaration(declaration, builder);
+    const HashCodeMacro().visitClassDeclaration(declaration, builder);
+    const ToStringMacro().visitClassDeclaration(declaration, builder);
+  }
+}
+
 class HashCodeMacro implements ClassDeclarationMacro {
   const HashCodeMacro();
 
@@ -52,8 +66,9 @@
         .join(' ^ ');
     builder.addToClass(
       Declaration('''
-@override
-int get hashCode => $expression;'''),
+  @override
+  int get hashCode => $expression;
+'''),
     );
   }
 }
@@ -73,8 +88,9 @@
     }).join(', ');
     builder.addToClass(
       Declaration('''
-@override
-String toString() => '${classElement.name}($fieldsCode)';'''),
+  @override
+  String toString() => '${classElement.name}($fieldsCode)';
+'''),
     );
   }
 }
diff --git a/pkg/analyzer/lib/src/macro/builders/observable.dart b/pkg/analyzer/lib/src/macro/builders/observable.dart
index 6857d34..dac5565 100644
--- a/pkg/analyzer/lib/src/macro/builders/observable.dart
+++ b/pkg/analyzer/lib/src/macro/builders/observable.dart
@@ -33,15 +33,16 @@
       var publicName = name.substring(1);
 
       var getter = Declaration(
-        '$typeCode get $publicName => $name;',
+        '  $typeCode get $publicName => $name;',
       );
       builder.addToClass(getter);
 
       var setter = Declaration('''
-set $publicName($typeCode val) {
-  print('Setting $publicName to \${val}');
-  $name = val;
-}''');
+  set $publicName($typeCode val) {
+    print('Setting $publicName to \${val}');
+    $name = val;
+  }
+''');
       builder.addToClass(setter);
     }
   }
diff --git a/pkg/analyzer/lib/src/macro/impl/error.dart b/pkg/analyzer/lib/src/macro/impl/error.dart
new file mode 100644
index 0000000..8c2780c
--- /dev/null
+++ b/pkg/analyzer/lib/src/macro/impl/error.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.
+
+/// Error that happened during executing a macro builder.
+class MacroExecutionError {
+  final int annotationIndex;
+  final String macroName;
+  final String message;
+
+  MacroExecutionError({
+    required this.annotationIndex,
+    required this.macroName,
+    required this.message,
+  });
+}
diff --git a/pkg/analyzer/lib/src/macro/impl/macro.dart b/pkg/analyzer/lib/src/macro/impl/macro.dart
index 73e10f7..32c6358 100644
--- a/pkg/analyzer/lib/src/macro/impl/macro.dart
+++ b/pkg/analyzer/lib/src/macro/impl/macro.dart
@@ -2,23 +2,33 @@
 // for 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/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart' as ast;
 import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/dart/ast/ast.dart' as ast;
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/macro/api/code.dart';
 import 'package:analyzer/src/macro/api/macro.dart';
 import 'package:analyzer/src/summary2/informative_data.dart';
+import 'package:analyzer/src/summary2/library_builder.dart';
 
 class ClassDeclarationBuilderImpl extends DeclarationBuilderImpl
     implements ClassDeclarationBuilder {
-  final DeclarationCollector _collector;
+  final LinkingUnit linkingUnit;
+
+  /// The index of [node] among other [ast.ClassDeclarationImpl]s.
+  final int nodeIndex;
+
   final ast.ClassDeclarationImpl node;
 
-  ClassDeclarationBuilderImpl(this._collector, this.node);
+  ClassDeclarationBuilderImpl(
+    this.linkingUnit,
+    this.nodeIndex,
+    this.node,
+  );
 
   @override
   void addToClass(Declaration declaration) {
@@ -35,7 +45,18 @@
     _rebaseOffsets(parsedMember);
 
     node.members.add(parsedMember);
-    _collector._add(parsedMember, declaration);
+
+    var macroGeneratedContent = linkingUnit.macroGeneratedContent;
+    var collected = _Declaration(
+      data: MacroGenerationData(
+        id: macroGeneratedContent.nextId++,
+        code: declarationCode,
+        informative: writeDeclarationInformative(parsedMember),
+        classDeclarationIndex: nodeIndex,
+      ),
+      node: parsedMember,
+    );
+    macroGeneratedContent._declarations.add(collected);
   }
 
   /// We parsed [node] in the context of some synthetic code string, its
@@ -63,46 +84,139 @@
   }
 }
 
-class DeclarationCollector {
-  final Map<ast.AstNode, _CollectedDeclaration> _declarations = {};
-  int _nextId = 0;
+class MacroGeneratedContent {
+  final LinkingUnit linkingUnit;
+  final List<_Declaration> _declarations = [];
+  int nextId = 0;
 
-  /// Elements for nodes in [_declarations] were built.
-  /// Move information from [_CollectedDeclaration] into elements.
-  void updateElements() {
-    for (var entry in _declarations.entries) {
-      var node = entry.key;
+  MacroGeneratedContent(this.linkingUnit);
+
+  /// Finish building of elements: combine the source code of the unit with
+  /// macro-generated pieces of code; update offsets of macro-generated
+  /// elements to use offsets inside this combined code.
+  void finish() {
+    // Don't set empty values, keep it null.
+    if (_declarations.isEmpty) {
+      return;
+    }
+
+    // Sort declarations by:
+    // 1. The top-level declaration location.
+    // 2. The ordering in the top-level declaration.
+    // We need (2) because `sort` is not stable.
+    _declarations.sort((a, b) {
+      const indexForUnit = 1 << 24;
+      var aIndex = a.data.classDeclarationIndex ?? indexForUnit;
+      var bIndex = b.data.classDeclarationIndex ?? indexForUnit;
+      if (aIndex != bIndex) {
+        return aIndex - bIndex;
+      }
+      return a.data.id - b.data.id;
+    });
+
+    const classMemberCodePrefix = '\n  ';
+    const classMemberCodeSuffix = '\n';
+    // TODO(scheglov) make it required?
+    var generatedContent = linkingUnit.input.sourceContent!;
+    var shift = 0;
+    var classDeclarations = linkingUnit.input.unit.declarations
+        .whereType<ast.ClassDeclaration>()
+        .toList();
+    for (var declaration in _declarations) {
+      var classIndex = declaration.data.classDeclarationIndex;
+      if (classIndex != null) {
+        var targetClass = classDeclarations[classIndex];
+        var code = classMemberCodePrefix +
+            declaration.data.code +
+            classMemberCodeSuffix;
+        var insertOffset = shift + targetClass.rightBracket.offset;
+        declaration.data.insertOffset = insertOffset;
+        declaration.data.codeOffset =
+            insertOffset + classMemberCodePrefix.length;
+        generatedContent = generatedContent.substring(0, insertOffset) +
+            code +
+            generatedContent.substring(insertOffset);
+        declaration.data.insertLength = code.length;
+        shift += code.length;
+      } else {
+        throw UnimplementedError();
+      }
+
+      var node = declaration.node;
       if (node is ast.Declaration) {
-        var element = node.declaredElement;
+        var element = node.declaredElement as ElementImpl;
+        element.accept(
+          _ShiftOffsetsElementVisitor(declaration.data.codeOffset),
+        );
         if (element is HasMacroGenerationData) {
-          var collectedDeclaration = entry.value;
-          (element as HasMacroGenerationData).macro = MacroGenerationData(
-            collectedDeclaration.id,
-            collectedDeclaration.declaration.code,
-            collectedDeclaration.informative,
-          );
+          (element as HasMacroGenerationData).macro = declaration.data;
         }
       }
     }
-  }
 
-  void _add(ast.AstNode node, Declaration declaration) {
-    _declarations[node] = _CollectedDeclaration(
-      _nextId++,
-      declaration,
-      writeDeclarationInformative(node),
-    );
+    linkingUnit.element.macroGeneratedContent = generatedContent;
+    linkingUnit.element.macroGenerationDataList =
+        _declarations.map((e) => e.data).toList();
   }
 }
 
-class _CollectedDeclaration {
-  final int id;
-  final Declaration declaration;
-  final Uint8List informative;
+/// [MacroGenerationData] plus its linking [node] (to get the element).
+class _Declaration {
+  final MacroGenerationData data;
+  final ast.AstNode node;
 
-  _CollectedDeclaration(
-    this.id,
-    this.declaration,
-    this.informative,
-  );
+  _Declaration({
+    required this.data,
+    required this.node,
+  });
+}
+
+/// TODO(scheglov) Enhance to support more nodes.
+/// For now only nodes that are currently used in tests are supported.
+/// Which is probably enough for experiments, but should be improved if this
+/// is something we are going to do for real.
+class _ShiftOffsetsAstVisitor extends RecursiveAstVisitor<void> {
+  final int shift;
+
+  _ShiftOffsetsAstVisitor(this.shift);
+
+  @override
+  void visitAnnotation(ast.Annotation node) {
+    _token(node.atSign);
+    super.visitAnnotation(node);
+  }
+
+  @override
+  void visitSimpleIdentifier(ast.SimpleIdentifier node) {
+    _token(node.token);
+  }
+
+  void _token(Token token) {
+    token.offset += shift;
+  }
+}
+
+/// Macro-generated elements are created from pieces of code that are rebased
+/// to start at zero-th offset. When we later know that actual offset in the
+/// combined (source + generated) code of the unit, we shift the offsets.
+class _ShiftOffsetsElementVisitor extends GeneralizingElementVisitor<void> {
+  final int shift;
+
+  _ShiftOffsetsElementVisitor(this.shift);
+
+  @override
+  void visitElement(covariant ElementImpl element) {
+    element.nameOffset += shift;
+    _metadata(element.metadata);
+    super.visitElement(element);
+  }
+
+  void _metadata(List<ElementAnnotation> metadata) {
+    for (var annotation in metadata) {
+      annotation as ElementAnnotationImpl;
+      annotation.annotationAst.accept(
+        _ShiftOffsetsAstVisitor(shift),
+      );
+    }
+  }
 }
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index d4cd689..715eef2 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -122,6 +122,7 @@
   METHOD,
   MIXIN,
   SETTER,
+  TYPE_ALIAS,
   VARIABLE
 }
 
@@ -888,6 +889,7 @@
       case DeclarationKind.ENUM:
       case DeclarationKind.MIXIN:
       case DeclarationKind.FUNCTION_TYPE_ALIAS:
+      case DeclarationKind.TYPE_ALIAS:
         var name = declaration.name;
         return <String>['$uriStr::$name'];
       case DeclarationKind.CONSTRUCTOR:
@@ -1013,6 +1015,8 @@
         return DeclarationKind.MIXIN;
       case idl.AvailableDeclarationKind.SETTER:
         return DeclarationKind.SETTER;
+      case idl.AvailableDeclarationKind.TYPE_ALIAS:
+        return DeclarationKind.TYPE_ALIAS;
       case idl.AvailableDeclarationKind.VARIABLE:
         return DeclarationKind.VARIABLE;
       default:
@@ -1048,6 +1052,8 @@
         return idl.AvailableDeclarationKind.MIXIN;
       case DeclarationKind.SETTER:
         return idl.AvailableDeclarationKind.SETTER;
+      case DeclarationKind.TYPE_ALIAS:
+        return idl.AvailableDeclarationKind.TYPE_ALIAS;
       case DeclarationKind.VARIABLE:
         return idl.AvailableDeclarationKind.VARIABLE;
       default:
@@ -1141,7 +1147,7 @@
 
 class _File {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 16;
+  static const int DATA_VERSION = 17;
 
   /// The next value for [id].
   static int _nextId = 0;
@@ -1672,21 +1678,30 @@
         }
       } else if (node is GenericTypeAlias) {
         var functionType = node.functionType;
-        if (functionType == null) continue;
-
-        var parameters = functionType.parameters;
-        addDeclaration(
-          isDeprecated: isDeprecated,
-          kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
-          name: node.name,
-          parameters: parameters.toSource(),
-          parameterNames: _getFormalParameterNames(parameters),
-          parameterTypes: _getFormalParameterTypes(parameters),
-          relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS'],
-          requiredParameterCount: _getFormalParameterRequiredCount(parameters),
-          returnType: _getTypeAnnotationString(functionType.returnType),
-          typeParameters: functionType.typeParameters?.toSource(),
-        );
+        var type = node.type;
+        if (functionType != null) {
+          var parameters = functionType.parameters;
+          addDeclaration(
+            isDeprecated: isDeprecated,
+            kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
+            name: node.name,
+            parameters: parameters.toSource(),
+            parameterNames: _getFormalParameterNames(parameters),
+            parameterTypes: _getFormalParameterTypes(parameters),
+            relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS'],
+            requiredParameterCount:
+                _getFormalParameterRequiredCount(parameters),
+            returnType: _getTypeAnnotationString(functionType.returnType),
+            typeParameters: functionType.typeParameters?.toSource(),
+          );
+        } else if (type is TypeName && type.name.name.isNotEmpty) {
+          addDeclaration(
+            isDeprecated: isDeprecated,
+            kind: DeclarationKind.TYPE_ALIAS,
+            name: node.name,
+            relevanceTags: ['ElementKind.TYPE_ALIAS'],
+          );
+        }
       } else if (node is FunctionTypeAlias) {
         var parameters = node.parameters;
         addDeclaration(
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 55f086c..4d7e28d 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -36,6 +36,8 @@
 
   SETTER,
 
+  TYPE_ALIAS,
+
   VARIABLE
 }
 
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index cc6271a..ea3274f 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -387,6 +387,7 @@
   METHOD,
   MIXIN,
   SETTER,
+  TYPE_ALIAS,
   VARIABLE
 }
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 9a9dd13..a75433d 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -59,6 +59,8 @@
         return _readConstructorFieldInitializer();
       case Tag.ConstructorName:
         return _readConstructorName();
+      case Tag.ConstructorReference:
+        return _readConstructorReference();
       case Tag.DeclaredIdentifier:
         return _readDeclaredIdentifier();
       case Tag.DefaultFormalParameter:
@@ -85,6 +87,8 @@
         return _readFunctionExpression();
       case Tag.FunctionExpressionInvocation:
         return _readFunctionExpressionInvocation();
+      case Tag.FunctionReference:
+        return _readFunctionReference();
       case Tag.FunctionTypedFormalParameter:
         return _readFunctionTypedFormalParameter();
       case Tag.GenericFunctionType:
@@ -159,6 +163,8 @@
         return _readThrowExpression();
       case Tag.TypeArgumentList:
         return _readTypeArgumentList();
+      case Tag.TypeLiteral:
+        return _readTypeLiteral();
       case Tag.TypeName:
         return _readTypeName();
       case Tag.TypeParameter:
@@ -337,6 +343,15 @@
     return node;
   }
 
+  ConstructorReference _readConstructorReference() {
+    var constructorName = readNode() as ConstructorName;
+    var node = astFactory.constructorReference(
+      constructorName: constructorName,
+    );
+    _readExpressionResolution(node);
+    return node;
+  }
+
   SimpleIdentifierImpl _readDeclarationName() {
     var name = _reader.readStringReference();
     return astFactory.simpleIdentifier(
@@ -390,10 +405,10 @@
 
     var nonDefaultElement = parameter.declaredElement!;
     var element = DefaultParameterElementImpl(
-      nonDefaultElement.name,
-      nonDefaultElement.nameOffset,
+      name: nonDefaultElement.name,
+      nameOffset: nonDefaultElement.nameOffset,
+      parameterKind: kind,
     );
-    element.parameterKind = kind;
     if (parameter is SimpleFormalParameterImpl) {
       parameter.declaredElement = element;
     }
@@ -555,6 +570,19 @@
     return node;
   }
 
+  FunctionReference _readFunctionReference() {
+    var function = readNode() as Expression;
+    var typeArguments = _readOptionalNode() as TypeArgumentList?;
+
+    var node = astFactory.functionReference(
+      function: function,
+      typeArguments: typeArguments,
+    );
+    node.typeArgumentTypes = _reader.readOptionalTypeList();
+    _readExpressionResolution(node);
+    return node;
+  }
+
   FunctionTypedFormalParameter _readFunctionTypedFormalParameter() {
     var typeParameters = _readOptionalNode() as TypeParameterList?;
     var returnType = _readOptionalNode() as TypeAnnotation?;
@@ -1009,8 +1037,11 @@
     var actualType = _reader.readRequiredType();
     _reader.readByte(); // TODO(scheglov) inherits covariant
 
-    var element = ParameterElementImpl(identifier?.name ?? '', -1);
-    element.parameterKind = node.kind;
+    var element = ParameterElementImpl(
+      name: identifier?.name ?? '',
+      nameOffset: -1,
+      parameterKind: node.kind,
+    );
     element.type = actualType;
     node.declaredElement = element;
     identifier?.staticElement = element;
@@ -1110,6 +1141,13 @@
     return astFactory.typeArgumentList(Tokens.lt(), arguments, Tokens.gt());
   }
 
+  TypeLiteral _readTypeLiteral() {
+    var typeName = readNode() as TypeName;
+    var node = astFactory.typeLiteral(typeName: typeName);
+    _readExpressionResolution(node);
+    return node;
+  }
+
   TypeName _readTypeName() {
     var flags = _readByte();
     var name = readNode() as Identifier;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
index deb6b47..91f911c 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
@@ -34,6 +34,7 @@
   static const int ConditionalExpression = 51;
   static const int ConstructorFieldInitializer = 50;
   static const int ConstructorName = 7;
+  static const int ConstructorReference = 101;
   static const int DeclaredIdentifier = 90;
   static const int DefaultFormalParameter = 8;
   static const int DottedName = 47;
@@ -49,6 +50,7 @@
   static const int FunctionDeclaration_setter = 58;
   static const int FunctionExpressionStub = 19;
   static const int FunctionExpressionInvocation = 93;
+  static const int FunctionReference = 103;
   static const int FunctionTypedFormalParameter = 20;
   static const int GenericFunctionType = 21;
   static const int HideCombinator = 48;
@@ -90,6 +92,7 @@
   static const int ThisExpression = 70;
   static const int ThrowExpression = 81;
   static const int TypeArgumentList = 38;
+  static const int TypeLiteral = 102;
   static const int TypeName = 39;
   static const int TypeParameter = 40;
   static const int TypeParameterList = 41;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index e5dca3f..6287bc4 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -173,6 +173,13 @@
   }
 
   @override
+  void visitConstructorReference(ConstructorReference node) {
+    _writeByte(Tag.ConstructorReference);
+    _writeNode(node.constructorName);
+    _storeExpression(node);
+  }
+
+  @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
     _writeByte(Tag.DeclaredIdentifier);
     _writeByte(
@@ -238,17 +245,16 @@
   void visitFieldFormalParameter(FieldFormalParameter node) {
     _writeByte(Tag.FieldFormalParameter);
 
-    _pushScopeTypeParameters(node.typeParameters);
-    _writeOptionalNode(node.typeParameters);
-    _writeOptionalNode(node.type);
-    _writeOptionalNode(node.parameters);
-    _storeNormalFormalParameter(
-      node,
-      node.keyword,
-      hasQuestion: node.question != null,
-    );
-
-    _sink.localElements.popScope();
+    _withTypeParameters(node.typeParameters, () {
+      _writeOptionalNode(node.typeParameters);
+      _writeOptionalNode(node.type);
+      _writeOptionalNode(node.parameters);
+      _storeNormalFormalParameter(
+        node,
+        node.keyword,
+        hasQuestion: node.question != null,
+      );
+    });
   }
 
   @override
@@ -306,16 +312,24 @@
   }
 
   @override
+  void visitFunctionReference(FunctionReference node) {
+    _writeByte(Tag.FunctionReference);
+    _writeNode(node.function);
+    _writeOptionalNode(node.typeArguments);
+    _sink.writeOptionalTypeList(node.typeArgumentTypes);
+    _storeExpression(node);
+  }
+
+  @override
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     _writeByte(Tag.FunctionTypedFormalParameter);
 
-    _pushScopeTypeParameters(node.typeParameters);
-    _writeOptionalNode(node.typeParameters);
-    _writeOptionalNode(node.returnType);
-    _writeNode(node.parameters);
-    _storeNormalFormalParameter(node, null);
-
-    _sink.localElements.popScope();
+    _withTypeParameters(node.typeParameters, () {
+      _writeOptionalNode(node.typeParameters);
+      _writeOptionalNode(node.returnType);
+      _writeNode(node.parameters);
+      _storeNormalFormalParameter(node, null);
+    });
   }
 
   @override
@@ -328,14 +342,12 @@
       ),
     );
 
-    _pushScopeTypeParameters(node.typeParameters);
-
-    _writeOptionalNode(node.typeParameters);
-    _writeOptionalNode(node.returnType);
-    _writeNode(node.parameters);
-
-    _sink.writeType(node.type);
-    _sink.localElements.popScope();
+    _withTypeParameters(node.typeParameters, () {
+      _writeOptionalNode(node.typeParameters);
+      _writeOptionalNode(node.returnType);
+      _writeNode(node.parameters);
+      _sink.writeType(node.type);
+    });
   }
 
   @override
@@ -707,6 +719,13 @@
   }
 
   @override
+  void visitTypeLiteral(TypeLiteral node) {
+    _writeByte(Tag.TypeLiteral);
+    _writeNode(node.typeName);
+    _storeExpression(node);
+  }
+
+  @override
   void visitTypeName(TypeName node) {
     _writeByte(Tag.TypeName);
 
@@ -753,18 +772,6 @@
     _storeAnnotatedNode(node);
   }
 
-  void _pushScopeTypeParameters(TypeParameterList? node) {
-    _sink.localElements.pushScope();
-
-    if (node == null) {
-      return;
-    }
-
-    for (var typeParameter in node.typeParameters) {
-      _sink.localElements.declare(typeParameter.declaredElement!);
-    }
-  }
-
   void _storeAnnotatedNode(AnnotatedNode node) {
     _writeNodeList(node.metadata);
   }
@@ -827,6 +834,19 @@
     _storeFormalParameter(node);
   }
 
+  void _withTypeParameters(TypeParameterList? node, void Function() f) {
+    if (node == null) {
+      f();
+    } else {
+      var elements = node.typeParameters
+          .map((typeParameter) => typeParameter.declaredElement!)
+          .toList();
+      _sink.localElements.withElements(elements, () {
+        f();
+      });
+    }
+  }
+
   void _writeActualType(ResolutionSink resolutionSink, DartType type) {
     resolutionSink.writeType(type);
   }
diff --git a/pkg/analyzer/lib/src/summary2/ast_resolver.dart b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
index da1447b..411f10f 100644
--- a/pkg/analyzer/lib/src/summary2/ast_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
@@ -31,15 +31,15 @@
     nameScope: _nameScope,
     errorListener: _errorListener,
   );
-  late final _variableResolverVisitor = VariableResolverVisitor(
+  late final _scopeResolverVisitor = ScopeResolverVisitor(
     _unitElement.library,
     _unitElement.source,
     _unitElement.library.typeProvider,
     _errorListener,
     nameScope: _nameScope,
   );
-  late final _flowAnalysis = FlowAnalysisHelper(_unitElement.library.typeSystem,
-      false, _unitElement.library.isNonNullableByDefault);
+  late final _flowAnalysis =
+      FlowAnalysisHelper(_unitElement.library.typeSystem, false, _featureSet);
   late final _resolverVisitor = ResolverVisitor(
     _linker.inheritance,
     _unitElement.library,
@@ -47,7 +47,6 @@
     _unitElement.library.typeProvider,
     _errorListener,
     featureSet: _featureSet,
-    nameScope: _nameScope,
     flowAnalysisHelper: _flowAnalysis,
   );
 
@@ -56,9 +55,8 @@
       : _featureSet = node.thisOrAncestorOfType<CompilationUnit>()!.featureSet;
 
   void resolveAnnotation(AnnotationImpl node) {
-    _resolverVisitor.shouldCloneAnnotations = false;
     node.accept(_resolutionVisitor);
-    node.accept(_variableResolverVisitor);
+    node.accept(_scopeResolverVisitor);
     _prepareEnclosingDeclarations();
     _flowAnalysis.topLevelDeclaration_enter(node, null);
     node.accept(_resolverVisitor);
@@ -66,19 +64,16 @@
   }
 
   void resolveConstructorNode(ConstructorDeclarationImpl node) {
-    var isConst = node.constKeyword != null;
     // We don't want to visit the whole node because that will try to create an
     // element for it; we just want to process its children so that we can
     // resolve initializers and/or a redirection.
     void visit(AstVisitor<Object?> visitor) {
-      if (isConst) {
-        node.initializers.accept(visitor);
-      }
+      node.initializers.accept(visitor);
       node.redirectedConstructor?.accept(visitor);
     }
 
     visit(_resolutionVisitor);
-    visit(_variableResolverVisitor);
+    visit(_scopeResolverVisitor);
 
     _prepareEnclosingDeclarations();
     _flowAnalysis.topLevelDeclaration_enter(node, node.parameters,
@@ -97,7 +92,7 @@
       if (contextType != null) {
         InferenceContext.setType(node, contextType);
       }
-      node.accept(_variableResolverVisitor);
+      node.accept(_scopeResolverVisitor);
     }
     _prepareEnclosingDeclarations();
     _flowAnalysis.topLevelDeclaration_enter(node.parent!, null);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 51a33b6..8767463 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/dart/resolver/variance.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
 import 'package:analyzer/src/summary2/ast_binary_reader.dart';
 import 'package:analyzer/src/summary2/ast_binary_tag.dart';
 import 'package:analyzer/src/summary2/data_reader.dart';
@@ -30,16 +31,16 @@
 
 class BundleReader {
   final SummaryDataReader _reader;
-  final Map<Uri, Uint8List> _unitsInformativeBytes;
+  final Map<Uri, InformativeUnitData> _unitsInformativeData;
 
   final Map<String, LibraryReader> libraryMap = {};
 
   BundleReader({
     required LinkedElementFactory elementFactory,
     required Uint8List resolutionBytes,
-    Map<Uri, Uint8List> unitsInformativeBytes = const {},
+    Map<Uri, InformativeUnitData> unitsInformativeData = const {},
   })  : _reader = SummaryDataReader(resolutionBytes),
-        _unitsInformativeBytes = unitsInformativeBytes {
+        _unitsInformativeData = unitsInformativeData {
     _reader.offset = _reader.bytes.length - 4 * 4;
     var baseResolutionOffset = _reader.readUInt32();
     var librariesOffset = _reader.readUInt32();
@@ -69,7 +70,7 @@
       libraryMap[uriStr] = LibraryReader._(
         elementFactory: elementFactory,
         reader: _reader,
-        unitsInformativeBytes: _unitsInformativeBytes,
+        unitsInformativeData: _unitsInformativeData,
         baseResolutionOffset: baseResolutionOffset,
         referenceReader: referenceReader,
         reference: reference,
@@ -162,11 +163,8 @@
     );
     reader._addFormalParameters(element.parameters);
     _readFormalParameters(reader, element.parameters);
-    if (element.isConst || element.isFactory) {
-      element.redirectedConstructor =
-          reader.readElement() as ConstructorElement?;
-      element.constantInitializers = reader._readNodeList();
-    }
+    element.redirectedConstructor = reader.readElement() as ConstructorElement?;
+    element.constantInitializers = reader._readNodeList();
     applyConstantOffsets?.perform();
   }
 }
@@ -415,11 +413,12 @@
 class LibraryReader {
   final LinkedElementFactory _elementFactory;
   final SummaryDataReader _reader;
-  final Map<Uri, Uint8List> _unitsInformativeBytes;
+  final Map<Uri, InformativeUnitData> _unitsInformativeData;
   final int _baseResolutionOffset;
   final _ReferenceReader _referenceReader;
   final Reference _reference;
   final int _offset;
+  final Map<int, MacroGenerationData> _macroDeclarations = {};
 
   final Uint32List _classMembersLengths;
   int _classMembersLengthsIndex = 0;
@@ -429,7 +428,7 @@
   LibraryReader._({
     required LinkedElementFactory elementFactory,
     required SummaryDataReader reader,
-    required Map<Uri, Uint8List> unitsInformativeBytes,
+    required Map<Uri, InformativeUnitData> unitsInformativeData,
     required int baseResolutionOffset,
     required _ReferenceReader referenceReader,
     required Reference reference,
@@ -437,7 +436,7 @@
     required Uint32List classMembersLengths,
   })  : _elementFactory = elementFactory,
         _reader = reader,
-        _unitsInformativeBytes = unitsInformativeBytes,
+        _unitsInformativeData = unitsInformativeData,
         _baseResolutionOffset = baseResolutionOffset,
         _referenceReader = referenceReader,
         _reference = reference,
@@ -496,7 +495,7 @@
     _declareDartCoreDynamicNever();
 
     InformativeDataApplier(_elementFactory).applyTo(
-      _unitsInformativeBytes,
+      _unitsInformativeData,
       libraryElement,
     );
 
@@ -530,6 +529,10 @@
     element.setLinkedData(reference, linkedData);
     ClassElementFlags.read(_reader, element);
 
+    element.macroExecutionErrors = _reader.readTypedList(
+      _readMacroExecutionError,
+    );
+
     element.typeParameters = _readTypeParameters();
 
     if (!element.isMixinApplication) {
@@ -762,6 +765,9 @@
 
     FieldElementFlags.read(_reader, element);
     element.typeInferenceError = _readTopLevelInferenceError();
+    element.macroExecutionErrors = _reader.readTypedList(
+      _readMacroExecutionError,
+    );
     element.createImplicitAccessors(classReference, name);
 
     return element;
@@ -854,19 +860,28 @@
   }
 
   void _readMacro(Element element, HasMacroGenerationData hasMacro) {
-    if (_reader.readBool()) {
-      hasMacro.macro = MacroGenerationData(
-        _reader.readUInt30(),
-        _reader.readStringUtf8(),
-        Uint8List(0),
-      );
-      InformativeDataApplier(_elementFactory).applyToDeclaration(
+    var id = _reader.readOptionalUInt30();
+    if (id != null) {
+      var data = _macroDeclarations[id]!;
+      hasMacro.macro = data;
+      InformativeDataApplier(
+        _elementFactory,
+        baseOffset: data.codeOffset,
+      ).applyToDeclaration(
         element,
-        _reader.readUint8List(),
+        data.informative,
       );
     }
   }
 
+  macro.MacroExecutionError _readMacroExecutionError() {
+    return macro.MacroExecutionError(
+      annotationIndex: _reader.readUInt30(),
+      macroName: _reader.readStringReference(),
+      message: _reader.readStringReference(),
+    );
+  }
+
   List<MethodElementImpl> _readMethods(
     CompilationUnitElementImpl unitElement,
     ElementImpl enclosingElement,
@@ -972,20 +987,35 @@
       ParameterElementImpl element;
       if (kind.isRequiredPositional) {
         if (isInitializingFormal) {
-          element = FieldFormalParameterElementImpl(name, -1);
+          element = FieldFormalParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          );
         } else {
-          element = ParameterElementImpl(name, -1);
+          element = ParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          );
         }
       } else {
         if (isInitializingFormal) {
-          element = DefaultFieldFormalParameterElementImpl(name, -1);
+          element = DefaultFieldFormalParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          );
         } else {
-          element = DefaultParameterElementImpl(name, -1);
+          element = DefaultParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          );
         }
         element.reference = reference;
         reference.element = element;
       }
-      element.parameterKind = kind;
       ParameterElementFlags.read(_reader, element);
       element.typeParameters = _readTypeParameters();
       element.parameters = _readParameters(element, reference);
@@ -1238,6 +1268,7 @@
     unitElement.isSynthetic = _reader.readBool();
     unitElement.sourceContent = _reader.readOptionalStringUtf8();
 
+    _readUnitMacroGenerationDataList(unitElement);
     _readClasses(unitElement, unitReference);
     _readEnums(unitElement, unitReference);
     _readExtensions(unitElement, unitReference);
@@ -1255,6 +1286,28 @@
     return unitElement;
   }
 
+  void _readUnitMacroGenerationDataList(
+    CompilationUnitElementImpl unitElement,
+  ) {
+    var length = _reader.readUInt30();
+    if (length == 0) {
+      return;
+    }
+
+    var dataList = List.generate(length, (index) {
+      return MacroGenerationData(
+        id: _reader.readUInt30(),
+        code: _reader.readStringUtf8(),
+        informative: _reader.readUint8List(),
+        classDeclarationIndex: _reader.readOptionalUInt30(),
+      );
+    });
+    unitElement.macroGenerationDataList = dataList;
+    for (var data in dataList) {
+      _macroDeclarations[data.id] = data;
+    }
+  }
+
   static Variance? _decodeVariance(int index) {
     var tag = TypeParameterVarianceTag.values[index];
     switch (tag) {
@@ -1618,13 +1671,17 @@
       if (kind.isRequiredPositional) {
         ParameterElementImpl element;
         if (isInitializingFormal) {
-          element = FieldFormalParameterElementImpl(name, -1)
-            ..parameterKind = kind
-            ..type = type;
+          element = FieldFormalParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          )..type = type;
         } else {
-          element = ParameterElementImpl(name, -1)
-            ..parameterKind = kind
-            ..type = type;
+          element = ParameterElementImpl(
+            name: name,
+            nameOffset: -1,
+            parameterKind: kind,
+          )..type = type;
         }
         element.hasImplicitType = hasImplicitType;
         element.typeParameters = typeParameters;
@@ -1636,9 +1693,11 @@
         }
         return element;
       } else {
-        var element = DefaultParameterElementImpl(name, -1)
-          ..parameterKind = kind
-          ..type = type;
+        var element = DefaultParameterElementImpl(
+          name: name,
+          nameOffset: -1,
+          parameterKind: kind,
+        )..type = type;
         element.hasImplicitType = hasImplicitType;
         element.typeParameters = typeParameters;
         element.parameters = _readFormalParameters(unitElement);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 5fd0bf8..3103c35 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/resolver/variance.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
 import 'package:analyzer/src/summary2/ast_binary_tag.dart';
 import 'package:analyzer/src/summary2/ast_binary_writer.dart';
 import 'package:analyzer/src/summary2/data_writer.dart';
@@ -129,6 +130,11 @@
     _sink._writeStringReference(element.name);
     ClassElementFlags.write(_sink, element);
 
+    _writeList(
+      element.macroExecutionErrors,
+      _sink._writeMacroExecutionError,
+    );
+
     _resolutionSink._writeAnnotationList(element.metadata);
 
     _writeTypeParameters(element.typeParameters, () {
@@ -160,18 +166,12 @@
     ConstructorElementFlags.write(_sink, element);
     _resolutionSink._writeAnnotationList(element.metadata);
 
-    _resolutionSink.localElements.pushScope();
-    _resolutionSink.localElements.declareAll(element.parameters);
-    try {
+    _resolutionSink.localElements.withElements(element.parameters, () {
       _writeList(element.parameters, _writeParameterElement);
       _writeMacro(element.macro);
-      if (element.isConst || element.isFactory) {
-        _resolutionSink.writeElement(element.redirectedConstructor);
-        _resolutionSink._writeNodeList(element.constantInitializers);
-      }
-    } finally {
-      _resolutionSink.localElements.popScope();
-    }
+      _resolutionSink.writeElement(element.redirectedConstructor);
+      _resolutionSink._writeNodeList(element.constantInitializers);
+    });
   }
 
   void _writeEnumElement(ClassElement element) {
@@ -231,6 +231,10 @@
     _sink.writeBool(element is ConstFieldElementImpl);
     FieldElementFlags.write(_sink, element);
     _sink._writeTopLevelInferenceError(element.typeInferenceError);
+    _writeList(
+      element.macroExecutionErrors,
+      _sink._writeMacroExecutionError,
+    );
     _resolutionSink._writeAnnotationList(element.metadata);
     _resolutionSink.writeType(element.type);
     _resolutionSink._writeOptionalNode(element.constantInitializer);
@@ -282,12 +286,7 @@
   }
 
   void _writeMacro(MacroGenerationData? macro) {
-    _sink.writeBool(macro != null);
-    if (macro != null) {
-      _sink.writeUInt30(macro.id);
-      _sink.writeStringUtf8(macro.code);
-      _sink.writeUint8List(macro.informative);
-    }
+    _sink.writeOptionalUInt30(macro?.id);
   }
 
   void _writeMethodElement(MethodElement element) {
@@ -437,14 +436,10 @@
     List<TypeParameterElement> typeParameters,
     void Function() f,
   ) {
-    _resolutionSink.localElements.pushScope();
-    _resolutionSink.localElements.declareAll(typeParameters);
-    try {
+    _resolutionSink.localElements.withElements(typeParameters, () {
       _sink.writeList(typeParameters, _writeTypeParameterElement);
       f();
-    } finally {
-      _resolutionSink.localElements.popScope();
-    }
+    });
   }
 
   void _writeUnitElement(CompilationUnitElement unitElement) {
@@ -456,6 +451,7 @@
     _sink.writeBool(unitElement.isSynthetic);
     _sink.writeOptionalStringUtf8(unitElement.sourceContent);
     _resolutionSink._writeAnnotationList(unitElement.metadata);
+    _writeUnitElementMacroGenerationDataList(unitElement);
     _writeList(unitElement.classes, _writeClassElement);
     _writeList(unitElement.enums, _writeEnumElement);
     _writeList(unitElement.extensions, _writeExtensionElement);
@@ -475,6 +471,18 @@
     );
   }
 
+  void _writeUnitElementMacroGenerationDataList(
+    CompilationUnitElementImpl unitElement,
+  ) {
+    var dataList = unitElement.macroGenerationDataList ?? [];
+    _writeList<MacroGenerationData>(dataList, (data) {
+      _sink.writeUInt30(data.id);
+      _sink.writeStringUtf8(data.code);
+      _sink.writeUint8List(data.informative);
+      _sink.writeOptionalUInt30(data.classDeclarationIndex);
+    });
+  }
+
   static TypeParameterVarianceTag _encodeVariance(
       TypeParameterElementImpl element) {
     if (element.isLegacyCovariant) {
@@ -739,9 +747,7 @@
     void Function() f, {
     required bool withAnnotations,
   }) {
-    localElements.pushScope();
-    localElements.declareAll(typeParameters);
-    try {
+    localElements.withElements(typeParameters, () {
       writeUInt30(typeParameters.length);
       for (var typeParameter in typeParameters) {
         _writeStringReference(typeParameter.name);
@@ -753,9 +759,7 @@
         }
       }
       f();
-    } finally {
-      localElements.popScope();
-    }
+    });
   }
 
   static List<DartType> _enclosingClassTypeArguments(
@@ -936,7 +940,6 @@
 
 class _LocalElementIndexer {
   final Map<Element, int> _index = Map.identity();
-  final List<int> _scopes = [];
   int _stackHeight = 0;
 
   int operator [](Element element) {
@@ -944,22 +947,17 @@
         (throw ArgumentError('Unexpectedly not indexed: $element'));
   }
 
-  void declare(Element element) {
-    _index[element] = _stackHeight++;
-  }
-
-  void declareAll(List<Element> elements) {
+  void withElements(List<Element> elements, void Function() f) {
     for (var element in elements) {
-      declare(element);
+      _index[element] = _stackHeight++;
     }
-  }
 
-  void popScope() {
-    _stackHeight = _scopes.removeLast();
-  }
+    f();
 
-  void pushScope() {
-    _scopes.add(_stackHeight);
+    _stackHeight -= elements.length;
+    for (var element in elements) {
+      _index.remove(element);
+    }
   }
 }
 
@@ -986,6 +984,12 @@
     }
   }
 
+  void _writeMacroExecutionError(macro.MacroExecutionError error) {
+    writeUInt30(error.annotationIndex);
+    _writeStringReference(error.macroName);
+    _writeStringReference(error.message);
+  }
+
   void _writeOptionalStringReference(String? value) {
     if (value != null) {
       writeBool(true);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index b5b366b..a503d40 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -173,7 +173,7 @@
     var nameNode = node.name ?? node.returnType;
     var name = node.name?.name ?? '';
     if (name == 'new') {
-      // An unnamed constructor declared with `C.new(` is modeled as unnamed.
+      // A constructor declared as `C.new` is unnamed, and is modeled as such.
       name = '';
     }
     var nameOffset = nameNode.offset;
@@ -350,12 +350,19 @@
     ParameterElementImpl element;
     var parent = node.parent;
     if (parent is DefaultFormalParameter) {
-      element = DefaultFieldFormalParameterElementImpl(name, nameOffset)
-        ..constantInitializer = parent.defaultValue;
+      element = DefaultFieldFormalParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      )..constantInitializer = parent.defaultValue;
       _linker.elementNodes[element] = parent;
       _enclosingContext.addParameter(name, element);
     } else {
-      element = FieldFormalParameterElementImpl(name, nameOffset);
+      element = FieldFormalParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      );
       _linker.elementNodes[element] = node;
       _enclosingContext.addParameter(null, element);
     }
@@ -363,7 +370,6 @@
     element.isExplicitlyCovariant = node.covariantKeyword != null;
     element.isFinal = node.isFinal;
     element.metadata = _buildAnnotations(node.metadata);
-    element.parameterKind = node.kind;
     _setCodeRange(element, node);
 
     nameNode.staticElement = element;
@@ -497,17 +503,23 @@
     ParameterElementImpl element;
     var parent = node.parent;
     if (parent is DefaultFormalParameter) {
-      element = DefaultParameterElementImpl(name, nameOffset)
-        ..constantInitializer = parent.defaultValue;
+      element = DefaultParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      )..constantInitializer = parent.defaultValue;
       _linker.elementNodes[element] = parent;
     } else {
-      element = ParameterElementImpl(name, nameOffset);
+      element = ParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      );
       _linker.elementNodes[element] = node;
     }
     element.isExplicitlyCovariant = node.covariantKeyword != null;
     element.isFinal = node.isFinal;
     element.metadata = _buildAnnotations(node.metadata);
-    element.parameterKind = node.kind;
     _setCodeRange(element, node);
 
     nameNode.staticElement = element;
@@ -764,12 +776,19 @@
     ParameterElementImpl element;
     var parent = node.parent;
     if (parent is DefaultFormalParameter) {
-      element = DefaultParameterElementImpl(name, nameOffset)
-        ..constantInitializer = parent.defaultValue;
+      element = DefaultParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      )..constantInitializer = parent.defaultValue;
       _linker.elementNodes[element] = parent;
       _enclosingContext.addParameter(name, element);
     } else {
-      element = ParameterElementImpl(name, nameOffset);
+      element = ParameterElementImpl(
+        name: name,
+        nameOffset: nameOffset,
+        parameterKind: node.kind,
+      );
       _linker.elementNodes[element] = node;
       _enclosingContext.addParameter(null, element);
     }
@@ -778,7 +797,6 @@
     element.isExplicitlyCovariant = node.covariantKeyword != null;
     element.isFinal = node.isFinal;
     element.metadata = _buildAnnotations(node.metadata);
-    element.parameterKind = node.kind;
     _setCodeRange(element, node);
 
     node.declaredElement = element;
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index f14a0f2..23218d0 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -41,10 +41,15 @@
 /// offsets are different from `nameOffset` for example, which are applied
 /// directly after creating corresponding elements during a library loading.
 class ApplyConstantOffsets {
+  final int _baseOffset;
   Uint32List? _offsets;
   void Function(_OffsetsApplier)? _function;
 
-  ApplyConstantOffsets(this._offsets, this._function);
+  ApplyConstantOffsets(
+    this._offsets,
+    this._function, {
+    int baseOffset = 0,
+  }) : _baseOffset = baseOffset;
 
   void perform() {
     var offsets = _offsets;
@@ -52,6 +57,7 @@
     if (offsets != null && function != null) {
       var applier = _OffsetsApplier(
         _SafeListIterator(offsets),
+        baseOffset: _baseOffset,
       );
       function.call(applier);
       // Clear the references to possible closure data.
@@ -64,11 +70,15 @@
 
 class InformativeDataApplier {
   final LinkedElementFactory _elementFactory;
+  final int _baseOffset;
 
-  InformativeDataApplier(this._elementFactory);
+  InformativeDataApplier(
+    this._elementFactory, {
+    int baseOffset = 0,
+  }) : _baseOffset = baseOffset;
 
   void applyTo(
-    Map<Uri, Uint8List> unitsInformativeBytes,
+    Map<Uri, InformativeUnitData> unitsInformativeData,
     LibraryElementImpl libraryElement,
   ) {
     if (_elementFactory.isApplyingInformativeData) {
@@ -80,9 +90,9 @@
     for (var i = 0; i < unitElements.length; i++) {
       var unitElement = unitElements[i] as CompilationUnitElementImpl;
       var unitUri = unitElement.source.uri;
-      var unitInfoBytes = unitsInformativeBytes[unitUri];
-      if (unitInfoBytes != null) {
-        var unitReader = SummaryDataReader(unitInfoBytes);
+      var unitInfoData = unitsInformativeData[unitUri];
+      if (unitInfoData != null) {
+        var unitReader = SummaryDataReader(unitInfoData.bytes);
         var unitInfo = _InfoUnit(unitReader);
 
         if (i == 0) {
@@ -91,6 +101,7 @@
 
         unitElement.setCodeRange(unitInfo.codeOffset, unitInfo.codeLength);
         unitElement.lineInfo = LineInfo(unitInfo.lineStarts);
+        _setUnitMacroGeneratedContent(unitElement, unitInfoData, unitInfo);
 
         _applyToAccessors(unitElement.accessors, unitInfo.accessors);
 
@@ -269,7 +280,7 @@
     element as ConstructorElementImpl;
     element.setCodeRange(info.codeOffset, info.codeLength);
     element.periodOffset = info.periodOffset;
-    element.nameOffset = info.nameOffset;
+    element.nameOffset = _baseOffset + info.nameOffset;
     element.nameEnd = info.nameEnd;
     element.documentationComment = info.documentationComment;
     _applyToFormalParameters(
@@ -390,7 +401,7 @@
       (element, info) {
         element as ParameterElementImpl;
         element.setCodeRange(info.codeOffset, info.codeLength);
-        element.nameOffset = info.nameOffset;
+        element.nameOffset = _baseOffset + info.nameOffset;
         _applyToTypeParameters(element.typeParameters, info.typeParameters);
         _applyToFormalParameters(element.parameters, info.parameters);
       },
@@ -529,7 +540,7 @@
   void _applyToMethod(MethodElement element, _InfoMethodDeclaration info) {
     element as MethodElementImpl;
     element.setCodeRange(info.codeOffset, info.codeLength);
-    element.nameOffset = info.nameOffset;
+    element.nameOffset = _baseOffset + info.nameOffset;
     element.documentationComment = info.documentationComment;
     _applyToTypeParameters(
       element.typeParameters_unresolved,
@@ -548,6 +559,7 @@
         applier.applyToTypeParameters(element.typeParameters);
         applier.applyToFormalParameters(element.parameters);
       },
+      baseOffset: _baseOffset,
     );
   }
 
@@ -595,7 +607,7 @@
   ) {
     element as PropertyAccessorElementImpl;
     element.setCodeRange(info.codeOffset, info.codeLength);
-    element.nameOffset = info.nameOffset;
+    element.nameOffset = _baseOffset + info.nameOffset;
     element.documentationComment = info.documentationComment;
     _applyToFormalParameters(
       element.parameters_unresolved,
@@ -611,6 +623,7 @@
           applier.applyToTypeParameters(element.typeParameters);
           applier.applyToFormalParameters(element.parameters);
         },
+        baseOffset: _baseOffset,
       );
     }
   }
@@ -649,6 +662,38 @@
     );
   }
 
+  void _setUnitMacroGeneratedContent(
+    CompilationUnitElementImpl unitElement,
+    InformativeUnitData unitInfoData,
+    _InfoUnit unitInfo,
+  ) {
+    var macroGenerationDataList = unitElement.macroGenerationDataList;
+    if (macroGenerationDataList != null) {
+      const classMemberCodePrefix = '\n  ';
+      const classMemberCodeSuffix = '\n';
+      var generatedContent = unitInfoData.content;
+      var shift = 0;
+      for (var data in macroGenerationDataList) {
+        var classIndex = data.classDeclarationIndex;
+        if (classIndex != null) {
+          var targetClass = unitInfo.classDeclarations[classIndex];
+          var code = classMemberCodePrefix + data.code + classMemberCodeSuffix;
+          var insertOffset = shift + targetClass.rightBracketOffset;
+          data.insertOffset = insertOffset;
+          data.codeOffset = insertOffset + classMemberCodePrefix.length;
+          generatedContent = generatedContent.substring(0, insertOffset) +
+              code +
+              generatedContent.substring(insertOffset);
+          data.insertLength = code.length;
+          shift += code.length;
+        } else {
+          throw UnimplementedError();
+        }
+      }
+      unitElement.macroGeneratedContent = generatedContent;
+    }
+  }
+
   void _setupApplyConstantOffsetsForTypeAlias(
     TypeAliasElementImpl element,
     Uint32List constantOffsets, {
@@ -684,6 +729,20 @@
   }
 }
 
+/// Informative data about a source file.
+class InformativeUnitData {
+  /// The content of the file.
+  final String content;
+
+  /// Informative data derived from the [content], such as offsets.
+  final Uint8List bytes;
+
+  InformativeUnitData({
+    required this.content,
+    required this.bytes,
+  });
+}
+
 enum _DeclarationKind {
   constructorDeclaration,
   methodDeclaration,
@@ -693,6 +752,7 @@
   final int codeOffset;
   final int codeLength;
   final int nameOffset;
+  final int rightBracketOffset;
   final String? documentationComment;
   final List<_InfoTypeParameter> typeParameters;
   final List<_InfoConstructorDeclaration> constructors;
@@ -707,6 +767,7 @@
       codeOffset: reader.readUInt30(),
       codeLength: reader.readUInt30(),
       nameOffset: reader.readUInt30() - nameOffsetDelta,
+      rightBracketOffset: reader.readUInt30(),
       documentationComment: reader.readStringUtf8().nullIfEmpty,
       typeParameters: reader.readTypedList(
         () => _InfoTypeParameter(reader),
@@ -731,6 +792,7 @@
     required this.codeOffset,
     required this.codeLength,
     required this.nameOffset,
+    required this.rightBracketOffset,
     required this.documentationComment,
     required this.typeParameters,
     required this.constructors,
@@ -1194,6 +1256,7 @@
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
       sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.rightBracket.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1239,6 +1302,7 @@
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
       sink.writeUInt30(1 + (node.name?.offset ?? -1));
+      sink.writeUInt30(node.rightBracket.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1328,6 +1392,7 @@
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
       sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.rightBracket.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1738,8 +1803,12 @@
 
 class _OffsetsApplier extends _OffsetsAstVisitor {
   final _SafeListIterator<int> _iterator;
+  final int _baseOffset;
 
-  _OffsetsApplier(this._iterator);
+  _OffsetsApplier(
+    this._iterator, {
+    int baseOffset = 0,
+  }) : _baseOffset = baseOffset;
 
   void applyToConstantInitializer(Element element) {
     if (element is ConstVariableElement) {
@@ -1793,7 +1862,7 @@
   void handleToken(Token token) {
     var offset = _iterator.take();
     if (offset != null) {
-      token.offset = offset;
+      token.offset = _baseOffset + offset;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index c1eb205..10620eb 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -5,11 +5,14 @@
 import 'package:analyzer/dart/ast/ast.dart' as ast;
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart' as ast;
+import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/macro/api/macro.dart' as macro;
 import 'package:analyzer/src/macro/builders/data_class.dart' as macro;
 import 'package:analyzer/src/macro/builders/observable.dart' as macro;
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
 import 'package:analyzer/src/macro/impl/macro.dart' as macro;
 import 'package:analyzer/src/summary2/combinator.dart';
 import 'package:analyzer/src/summary2/constructor_initializer_resolver.dart';
@@ -200,19 +203,25 @@
 
   /// Run built-in declaration macros.
   void runDeclarationMacros() {
-    bool hasMacroAnnotation(ast.AnnotatedNode node, String name) {
-      for (var annotation in node.metadata) {
+    /// If [node] has a macro annotation with the required [name],
+    /// return the index of this annotation node.
+    int? hasMacroAnnotation(ast.AnnotatedNode node, String name) {
+      var metadata = node.metadata;
+      for (var i = 0; i < metadata.length; i++) {
+        var annotation = metadata[i];
         var nameNode = annotation.name;
         if (nameNode is ast.SimpleIdentifier &&
             annotation.arguments == null &&
             annotation.constructorName == null &&
             nameNode.name == name) {
           var nameElement = element.scope.lookup(name).getter;
-          return nameElement != null &&
-              nameElement.library?.name == 'analyzer.macro.annotations';
+          if (nameElement != null &&
+              nameElement.library?.name == 'analyzer.macro.annotations') {
+            return i;
+          }
         }
       }
-      return false;
+      return null;
     }
 
     /// Build types for type annotations in new [nodes].
@@ -231,44 +240,80 @@
       TypesBuilder(linker).build(nodesToBuildType);
     }
 
-    var collector = macro.DeclarationCollector();
     for (var linkingUnit in units) {
+      var classDeclarationIndex = -1;
       for (var declaration in linkingUnit.node.declarations) {
         if (declaration is ast.ClassDeclarationImpl) {
+          classDeclarationIndex++;
+          var macroExecutionErrors = <macro.MacroExecutionError>[];
+
           var members = declaration.members.toList();
           var classBuilder = macro.ClassDeclarationBuilderImpl(
-            collector,
+            linkingUnit,
+            classDeclarationIndex,
             declaration,
           );
-          if (hasMacroAnnotation(declaration, 'autoConstructor')) {
-            macro.AutoConstructorMacro().visitClassDeclaration(
-              declaration,
-              classBuilder,
-            );
-          }
-          if (hasMacroAnnotation(declaration, 'hashCode')) {
-            macro.HashCodeMacro().visitClassDeclaration(
-              declaration,
-              classBuilder,
-            );
-          }
-          if (hasMacroAnnotation(declaration, 'toString')) {
-            macro.ToStringMacro().visitClassDeclaration(
-              declaration,
-              classBuilder,
-            );
-          }
-          for (var member in members) {
-            if (member is ast.FieldDeclarationImpl) {
-              if (hasMacroAnnotation(member, 'observable')) {
-                macro.ObservableMacro().visitFieldDeclaration(
-                  member,
+
+          void runClassMacro(
+            String name,
+            macro.ClassDeclarationMacro Function() newInstance,
+          ) {
+            var annotationIndex = hasMacroAnnotation(declaration, name);
+            if (annotationIndex != null) {
+              try {
+                newInstance().visitClassDeclaration(
+                  declaration,
                   classBuilder,
                 );
+              } catch (e) {
+                macroExecutionErrors.add(
+                  macro.MacroExecutionError(
+                    annotationIndex: annotationIndex,
+                    macroName: name,
+                    message: e.toString(),
+                  ),
+                );
               }
             }
           }
 
+          runClassMacro('autoConstructor', () => macro.AutoConstructorMacro());
+          runClassMacro('dataClass', () => macro.DataClassMacro());
+          runClassMacro('hashCode', () => macro.HashCodeMacro());
+          runClassMacro('toString', () => macro.ToStringMacro());
+
+          var classElement = declaration.declaredElement as ClassElementImpl;
+          classElement.macroExecutionErrors = macroExecutionErrors;
+
+          for (var member in members) {
+            if (member is ast.FieldDeclarationImpl) {
+              var macroExecutionErrors = <macro.MacroExecutionError>[];
+
+              void runFieldMacro(
+                String name,
+                macro.FieldDeclarationMacro Function() newInstance,
+              ) {
+                var annotationIndex = hasMacroAnnotation(member, name);
+                if (annotationIndex != null) {
+                  try {
+                    newInstance().visitFieldDeclaration(member, classBuilder);
+                  } catch (e) {
+                    macroExecutionErrors.add(
+                      macro.MacroExecutionError(
+                        annotationIndex: annotationIndex,
+                        macroName: name,
+                        message: e.toString(),
+                      ),
+                    );
+                  }
+                }
+              }
+
+              runFieldMacro('observable', () => macro.ObservableMacro());
+              member.firstElement.macroExecutionErrors = macroExecutionErrors;
+            }
+          }
+
           var newMembers = declaration.members.sublist(members.length);
           if (newMembers.isNotEmpty) {
             var elementBuilder = ElementBuilder(
@@ -283,7 +328,10 @@
         }
       }
     }
-    collector.updateElements();
+
+    for (var linkingUnit in units) {
+      linkingUnit.macroGeneratedContent.finish();
+    }
   }
 
   void storeExportScope() {
@@ -413,6 +461,8 @@
   final Reference reference;
   final ast.CompilationUnitImpl node;
   final CompilationUnitElementImpl element;
+  late final macro.MacroGeneratedContent macroGeneratedContent =
+      macro.MacroGeneratedContent(this);
 
   LinkingUnit({
     required this.input,
diff --git a/pkg/analyzer/lib/src/summary2/reference.dart b/pkg/analyzer/lib/src/summary2/reference.dart
index 23c3836..e73b634 100644
--- a/pkg/analyzer/lib/src/summary2/reference.dart
+++ b/pkg/analyzer/lib/src/summary2/reference.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/summary2/scope.dart';
 
 /// Indirection between a name and the corresponding [Element].
 ///
@@ -39,31 +38,25 @@
 
   Map<String, Reference>? _children;
 
-  /// If this reference is an import prefix, the scope of this prefix.
-  Scope? prefixScope;
-
   Reference.root() : this._(null, '');
 
   Reference._(this.parent, this.name);
 
   Iterable<Reference> get children {
-    if (_children != null) {
-      return _children!.values;
-    }
-    return const [];
+    return _children?.values ?? const [];
   }
 
-  bool get isLibrary => parent != null && parent!.isRoot;
+  bool get isLibrary => parent?.isRoot == true;
 
-  bool get isPrefix => parent != null && parent!.name == '@prefix';
+  bool get isPrefix => parent?.name == '@prefix';
 
   bool get isRoot => parent == null;
 
-  bool get isSetter => parent != null && parent!.name == '@setter';
+  bool get isSetter => parent?.name == '@setter';
 
   /// Return the child with the given name, or `null` if does not exist.
   Reference? operator [](String name) {
-    return _children != null ? _children![name] : null;
+    return _children?[name];
   }
 
   /// Return the child with the given name, create if does not exist yet.
@@ -73,7 +66,7 @@
   }
 
   void removeChild(String name) {
-    _children!.remove(name);
+    _children?.remove(name);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index bc471b2..195647b 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -285,6 +285,10 @@
       findInClass(class_);
     }
 
+    for (var extension_ in unitElement.extensions) {
+      findIn(extension_.typeParameters);
+    }
+
     for (var mixin in unitElement.mixins) {
       findInClass(mixin);
     }
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 1a71750..aeea523 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -92,6 +92,10 @@
     return _node(search, (n) => n is ConstructorName);
   }
 
+  ConstructorReference constructorReference(String search) {
+    return _node(search, (n) => n is ConstructorReference);
+  }
+
   ContinueStatement continueStatement(String search) {
     return _node(search, (n) => n is ContinueStatement);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_packages.dart b/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
index 226370a..84ee9ef 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
@@ -86,8 +86,10 @@
   const _Sealed();
 }
 class UseResult {
+  final String? parameterDefined;
   final String reason;
   const UseResult([this.reason = '']);
+  const UseResult.unless({required this.parameterDefined, this.reason = ''});
 }
 class _VisibleForOverriding {
   const _VisibleForOverriding();
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index cb56f4d..f289112 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.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.
 
+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';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -866,7 +866,7 @@
       'dart.async',
       0,
       0,
-      ExperimentStatus.latestWithNullSafety,
+      FeatureSet.latestLanguageVersion(),
     );
 
     var asyncUnit = CompilationUnitElementImpl();
@@ -959,7 +959,7 @@
       'dart.core',
       0,
       0,
-      ExperimentStatus.latestWithNullSafety,
+      FeatureSet.latestLanguageVersion(),
     );
     coreLibrary.definingCompilationUnit = coreUnit;
 
@@ -1073,23 +1073,32 @@
 
   ParameterElement _namedParameter(String name, DartType type,
       {String? initializerCode}) {
-    var parameter = DefaultParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.NAMED;
+    var parameter = DefaultParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.NAMED,
+    );
     parameter.type = type;
     parameter.defaultValueCode = initializerCode;
     return parameter;
   }
 
   ParameterElement _positionalParameter(String name, DartType type) {
-    var parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.POSITIONAL;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.POSITIONAL,
+    );
     parameter.type = type;
     return parameter;
   }
 
   ParameterElement _requiredParameter(String name, DartType type) {
-    var parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.REQUIRED;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.REQUIRED,
+    );
     parameter.type = type;
     return parameter;
   }
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 4afb0cc..5f6cc0f 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 2.1.0-dev
+version: 2.2.0
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^23.0.0
+  _fe_analyzer_shared: ^25.0.0
   cli_util: ^0.3.0
   collection: ^1.15.0
   convert: ^3.0.0
diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
index 6e14b89..b0a7875 100644
--- a/pkg/analyzer/test/error/error_test.dart
+++ b/pkg/analyzer/test/error/error_test.dart
@@ -5,9 +5,9 @@
 import 'dart:core';
 import 'dart:io';
 
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -78,7 +78,7 @@
     return parseString(
       path: filePath,
       content: File(filePath).readAsStringSync(),
-      featureSet: ExperimentStatus.latestWithNullSafety,
+      featureSet: FeatureSet.latestLanguageVersion(),
     ).unit;
   }
 
diff --git a/pkg/analyzer/test/generated/constant_test.dart b/pkg/analyzer/test/generated/constant_test.dart
index f97d66a..4920947 100644
--- a/pkg/analyzer/test/generated/constant_test.dart
+++ b/pkg/analyzer/test/generated/constant_test.dart
@@ -126,6 +126,50 @@
     assertType(value.type, 'C');
   }
 
+  test_constructorReference_generic_named() async {
+    var result = await _getExpressionValue("C<int>.foo", context: '''
+class C<T> {
+  C.foo();
+}
+''');
+    expect(result.isValid, isTrue);
+    DartObject value = result.value!;
+    assertType(value.type, 'C<int> Function()');
+  }
+
+  test_constructorReference_generic_unnamed() async {
+    var result = await _getExpressionValue("C<int>.new", context: '''
+class C<T> {
+  C.new();
+}
+''');
+    expect(result.isValid, isTrue);
+    DartObject value = result.value!;
+    assertType(value.type, 'C<int> Function()');
+  }
+
+  test_constructorReference_nonGeneric_named() async {
+    var result = await _getExpressionValue("C.foo", context: '''
+class C {
+  const C.foo();
+}
+''');
+    expect(result.isValid, isTrue);
+    DartObject value = result.value!;
+    assertType(value.type, 'C Function()');
+  }
+
+  test_constructorReference_nonGeneric_unnamed() async {
+    var result = await _getExpressionValue("C.new", context: '''
+class C {
+  const C();
+}
+''');
+    expect(result.isValid, isTrue);
+    DartObject value = result.value!;
+    assertType(value.type, 'C Function()');
+  }
+
   test_divide_double_double() async {
     await _assertValueDouble(3.2 / 2.3, "3.2 / 2.3");
   }
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index d785728..1d3df59 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -9,11 +9,11 @@
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
-import 'package:analyzer/src/dart/element/scope.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/generated/element_resolver.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -363,9 +363,14 @@
     _listener.assertNoErrors();
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
   test_visitCommentReference_prefixedIdentifier_class_getter() async {
+    LibraryElementImpl library =
+        ElementFactory.library(_definingLibrary.context, "lib");
+    CompilationUnitElementImpl unit =
+        library.definingCompilationUnit as CompilationUnitElementImpl;
     ClassElementImpl classA = ElementFactory.classElement2("A");
+    unit.classes = [classA];
+
     // set accessors
     String propName = "p";
     PropertyAccessorElement getter =
@@ -373,10 +378,9 @@
     PropertyAccessorElement setter =
         ElementFactory.setterElement(propName, false, _typeProvider.intType);
     classA.accessors = <PropertyAccessorElement>[getter, setter];
-    // set name scope
-    _visitor.nameScope = LocalScope(_RootScopeMock.instance)..add(classA);
     // prepare "A.p"
-    PrefixedIdentifier prefixed = AstTestFactory.identifier5('A', 'p');
+    PrefixedIdentifierImpl prefixed = AstTestFactory.identifier5('A', 'p');
+    prefixed.prefix.scopeLookupResult = ScopeLookupResult(classA, null);
     CommentReference commentReference =
         astFactory.commentReference(null, prefixed);
     // resolve
@@ -386,17 +390,20 @@
     _listener.assertNoErrors();
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
   test_visitCommentReference_prefixedIdentifier_class_method() async {
+    LibraryElementImpl library =
+        ElementFactory.library(_definingLibrary.context, "lib");
+    CompilationUnitElementImpl unit =
+        library.definingCompilationUnit as CompilationUnitElementImpl;
     ClassElementImpl classA = ElementFactory.classElement2("A");
+    unit.classes = [classA];
     // set method
     MethodElement method =
         ElementFactory.methodElement("m", _typeProvider.intType);
     classA.methods = <MethodElement>[method];
-    // set name scope
-    _visitor.nameScope = LocalScope(_RootScopeMock.instance)..add(classA);
     // prepare "A.m"
-    PrefixedIdentifier prefixed = AstTestFactory.identifier5('A', 'm');
+    PrefixedIdentifierImpl prefixed = AstTestFactory.identifier5('A', 'm');
+    prefixed.prefix.scopeLookupResult = ScopeLookupResult(classA, null);
     CommentReference commentReference =
         astFactory.commentReference(null, prefixed);
     // resolve
@@ -406,17 +413,20 @@
     _listener.assertNoErrors();
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
   test_visitCommentReference_prefixedIdentifier_class_operator() async {
+    LibraryElementImpl library =
+        ElementFactory.library(_definingLibrary.context, "lib");
+    CompilationUnitElementImpl unit =
+        library.definingCompilationUnit as CompilationUnitElementImpl;
     ClassElementImpl classA = ElementFactory.classElement2("A");
+    unit.classes = [classA];
     // set method
     MethodElement method =
         ElementFactory.methodElement("==", _typeProvider.boolType);
     classA.methods = <MethodElement>[method];
-    // set name scope
-    _visitor.nameScope = LocalScope(_RootScopeMock.instance)..add(classA);
     // prepare "A.=="
-    PrefixedIdentifier prefixed = AstTestFactory.identifier5('A', '==');
+    PrefixedIdentifierImpl prefixed = AstTestFactory.identifier5('A', '==');
+    prefixed.prefix.scopeLookupResult = ScopeLookupResult(classA, null);
     CommentReference commentReference =
         astFactory.commentReference(null, prefixed);
     // resolve
@@ -714,10 +724,12 @@
     _definingLibrary.typeSystem = context.typeSystemLegacy;
     var inheritance = InheritanceManager3();
 
+    var featureSet = FeatureSet.forTesting();
     _visitor = ResolverVisitor(
         inheritance, _definingLibrary, source, _typeProvider, _listener,
-        featureSet: FeatureSet.forTesting(),
-        nameScope: LibraryScope(_definingLibrary));
+        featureSet: featureSet,
+        flowAnalysisHelper:
+            FlowAnalysisHelper(context.typeSystemLegacy, false, featureSet));
     _resolver = _visitor.elementResolver;
   }
 
@@ -760,18 +772,11 @@
   ///          identifier
   /// @return the element to which the expression was resolved
   void _resolveInClass(AstNode node, ClassElement enclosingClass) {
-    Scope outerScope = _visitor.nameScope;
     try {
       _visitor.enclosingClass = enclosingClass;
-      EnclosedScope innerScope = ClassScope(
-        TypeParameterScope(outerScope, enclosingClass.typeParameters),
-        enclosingClass,
-      );
-      _visitor.nameScope = innerScope;
       node.accept(_resolver);
     } finally {
       _visitor.enclosingClass = null;
-      _visitor.nameScope = outerScope;
     }
   }
 
@@ -782,20 +787,8 @@
   /// @param definedElements the elements that are to be defined in the scope in
   ///          which the element is being resolved
   /// @return the element to which the expression was resolved
-  void _resolveNode(AstNode node, [List<Element>? definedElements]) {
-    Scope outerScope = _visitor.nameScope;
-    try {
-      var innerScope = LocalScope(outerScope);
-      if (definedElements != null) {
-        for (Element element in definedElements) {
-          innerScope.add(element);
-        }
-      }
-      _visitor.nameScope = innerScope;
-      node.accept(_resolver);
-    } finally {
-      _visitor.nameScope = outerScope;
-    }
+  void _resolveNode(AstNode node) {
+    node.accept(_resolver);
   }
 
   /// Return the element associated with the label of the given statement after
@@ -807,20 +800,7 @@
   /// @return the element to which the statement's label was resolved
   void _resolveStatement(Statement statement, LabelElementImpl? labelElement,
       AstNode? labelTarget) {
-    LabelScope? outerScope = _visitor.labelScope;
-    try {
-      LabelScope? innerScope;
-      if (labelElement == null) {
-        innerScope = outerScope;
-      } else {
-        innerScope = LabelScope(
-            outerScope, labelElement.name, labelTarget!, labelElement);
-      }
-      _visitor.labelScope = innerScope;
-      statement.accept(_resolver);
-    } finally {
-      _visitor.labelScope = outerScope;
-    }
+    statement.accept(_resolver);
   }
 }
 
@@ -828,10 +808,3 @@
   @override
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
-
-class _RootScopeMock implements Scope {
-  static final Scope instance = _RootScopeMock();
-
-  @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 2933f98..5b8ad2f 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -473,8 +473,11 @@
     required DartType type,
     bool isCovariant = false,
   }) {
-    var parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.NAMED;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.NAMED,
+    );
     parameter.type = type;
     parameter.isExplicitlyCovariant = isCovariant;
     return parameter;
@@ -485,8 +488,11 @@
     required DartType type,
     bool isCovariant = false,
   }) {
-    var parameter = ParameterElementImpl(name, 0);
-    parameter.parameterKind = ParameterKind.NAMED_REQUIRED;
+    var parameter = ParameterElementImpl(
+      name: name,
+      nameOffset: 0,
+      parameterKind: ParameterKind.NAMED_REQUIRED,
+    );
     parameter.type = type;
     parameter.isExplicitlyCovariant = isCovariant;
     return parameter;
@@ -498,8 +504,11 @@
     bool isCovariant = false,
     String? defaultValueCode,
   }) {
-    var parameter = ParameterElementImpl(name ?? '', 0);
-    parameter.parameterKind = ParameterKind.POSITIONAL;
+    var parameter = ParameterElementImpl(
+      name: name ?? '',
+      nameOffset: 0,
+      parameterKind: ParameterKind.POSITIONAL,
+    );
     parameter.type = type;
     parameter.isExplicitlyCovariant = isCovariant;
     parameter.defaultValueCode = defaultValueCode;
@@ -556,8 +565,11 @@
     required DartType type,
     bool isCovariant = false,
   }) {
-    var parameter = ParameterElementImpl(name ?? '', 0);
-    parameter.parameterKind = ParameterKind.REQUIRED;
+    var parameter = ParameterElementImpl(
+      name: name ?? '',
+      nameOffset: 0,
+      parameterKind: ParameterKind.REQUIRED,
+    );
     parameter.type = type;
     parameter.isExplicitlyCovariant = isCovariant;
     return parameter;
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 9115cc0..41a03fc 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -250,8 +250,8 @@
     parseCompilationUnit("const enum E {ONE}", errors: [
       // Fasta interprets the `const` as a malformed top level const
       // and `enum` as the start of an enum declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
     ]);
   }
 
@@ -370,10 +370,9 @@
     createParser('class C { C< }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR, 11, 2),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 1),
+      expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 13, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 13, 1),
-      expectedError(ParserErrorCode.MISSING_METHOD_PARAMETERS, 10, 1),
-      expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 13, 1),
     ]);
   }
 
@@ -381,10 +380,10 @@
     createParser('class C { C<@Foo }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR, 11, 6),
+      expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 12, 4),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 3),
+      expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 17, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 17, 1),
-      expectedError(ParserErrorCode.MISSING_METHOD_PARAMETERS, 10, 1),
-      expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 17, 1)
     ]);
   }
 
@@ -392,10 +391,11 @@
     createParser('class C { C<@Foo @Bar() }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR, 11, 13),
+      expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 12, 4),
+      expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 17, 6),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 22, 1),
+      expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 24, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 24, 1),
-      expectedError(ParserErrorCode.MISSING_METHOD_PARAMETERS, 10, 1),
-      expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 24, 1)
     ]);
   }
 
@@ -420,8 +420,8 @@
     parseCompilationUnit("const typedef F();", errors: [
       // Fasta interprets the `const` as a malformed top level const
       // and `typedef` as the start of an typedef declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 7),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 7),
     ]);
   }
 
@@ -761,9 +761,9 @@
   void test_expectedExecutable_inClass_afterVoid() {
     parseCompilationUnit('class C { void 2 void }', errors: [
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 15, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 15, 1),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 17, 4),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 22, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 22, 1)
     ]);
   }
 
@@ -780,11 +780,11 @@
 
   void test_expectedExecutable_topLevel_afterVoid() {
     CompilationUnit unit = parseCompilationUnit('void 2 void', errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 4),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 1),
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 0),
     ]);
     expect(unit, isNotNull);
   }
@@ -832,7 +832,7 @@
   void test_expectedToken_parseStatement_afterVoid() {
     parseStatement("void}", expectedEndOffset: 4);
     listener.assertErrors([
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 4),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1)
     ]);
   }
@@ -875,8 +875,8 @@
 
   void test_expectedToken_uriAndSemicolonMissingAfterExport() {
     CompilationUnit unit = parseCompilationUnit("export class A {}", errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 6),
       expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 7, 5),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 5),
     ]);
     ExportDirective directive = unit.directives[0] as ExportDirective;
     expect(directive.uri, isNotNull);
@@ -1177,8 +1177,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 0)
     ]);
   }
 
@@ -1194,8 +1194,8 @@
     parseCompilationUnit("final enum E {ONE}", errors: [
       // Fasta interprets the `final` as a malformed top level final
       // and `enum` as the start of a enum declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
     ]);
   }
 
@@ -1211,8 +1211,8 @@
     parseCompilationUnit("final typedef F();", errors: [
       // Fasta interprets the `final` as a malformed top level final
       // and `typedef` as the start of an typedef declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 7),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 7),
     ]);
   }
 
@@ -1434,8 +1434,8 @@
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1)
     ]);
   }
 
@@ -1696,9 +1696,8 @@
     parseCompilationUnit(
         "typedef T = typedef F = Map<String, dynamic> Function();",
         errors: [
+          expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
           expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 12, 7),
-          expectedError(ParserErrorCode.EXPECTED_TOKEN, 12, 7),
-          expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 10, 1),
         ]);
   }
 
@@ -2181,9 +2180,9 @@
   void test_missingStatement() {
     parseStatement("is");
     listener.assertErrors([
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 2),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 2),
       expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 2, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 2, 0)
     ]);
   }
 
@@ -2354,8 +2353,8 @@
 
   void test_nonIdentifierLibraryName_partOf() {
     CompilationUnit unit = parseCompilationUnit("part of 3;", errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 2),
       expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 8, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1),
       expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 1)
     ]);
@@ -2759,8 +2758,8 @@
     // https://github.com/Dart-Code/Dart-Code/issues/1548
     parseCompilationUnit(r"main() { String s = 'a' 'b', 'c$foo'; return s; }",
         errors: [
+          expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 1),
           expectedError(ParserErrorCode.MISSING_IDENTIFIER, 29, 2),
-          expectedError(ParserErrorCode.EXPECTED_TOKEN, 29, 2),
         ]);
   }
 
@@ -2946,8 +2945,8 @@
     parseCompilationUnit("var class C {}", errors: [
       // Fasta interprets the `var` as a malformed top level var
       // and `class` as the start of a class declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 5),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 5),
     ]);
   }
 
@@ -2955,8 +2954,8 @@
     parseCompilationUnit("var enum E {ONE}", errors: [
       // Fasta interprets the `var` as a malformed top level var
       // and `enum` as the start of an enum declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 4),
     ]);
   }
 
@@ -2972,8 +2971,8 @@
     parseCompilationUnit("var typedef F();", errors: [
       // Fasta interprets the `var` as a malformed top level var
       // and `typedef` as the start of an typedef declaration.
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 7),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 7),
     ]);
   }
 
diff --git a/pkg/analyzer/test/generated/function_reference_parser_test.dart b/pkg/analyzer/test/generated/function_reference_parser_test.dart
index c7cc214..89ffcb5 100644
--- a/pkg/analyzer/test/generated/function_reference_parser_test.dart
+++ b/pkg/analyzer/test/generated/function_reference_parser_test.dart
@@ -44,34 +44,6 @@
     ]);
   }
 
-  void test_followingToken_accepted_ampersand() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> & 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
-  void test_followingToken_accepted_asterisk() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> * 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
-  void test_followingToken_accepted_bar() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> | 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
-  void test_followingToken_accepted_caret() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> ^ 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
   void test_followingToken_accepted_closeBrace() {
     expect_f_a_b((parseExpression('{f<a, b>}', featureSet: constructorTearoffs)
             as SetOrMapLiteral)
@@ -134,13 +106,6 @@
     expect(methodInvocation.argumentList.arguments, isEmpty);
   }
 
-  void test_followingToken_accepted_percent() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> % 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
   void test_followingToken_accepted_period_methodInvocation() {
     // This is a special case because `f<a, b>.methodName(...)` is parsed as an
     // InstanceCreationExpression.
@@ -165,13 +130,6 @@
             .target!);
   }
 
-  void test_followingToken_accepted_period_period() {
-    expect_f_a_b(
-        (parseExpression('f<a, b>..toString()', featureSet: constructorTearoffs)
-                as CascadeExpression)
-            .target);
-  }
-
   void test_followingToken_accepted_period_propertyAccess() {
     expect_f_a_b(
         (parseExpression('f<a, b>.hashCode', featureSet: constructorTearoffs)
@@ -179,53 +137,6 @@
             .target!);
   }
 
-  void test_followingToken_accepted_plus() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> + 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
-  void test_followingToken_accepted_question() {
-    expect_f_a_b((parseExpression('f<a, b> ? null : null',
-            featureSet: constructorTearoffs) as ConditionalExpression)
-        .condition);
-  }
-
-  void test_followingToken_accepted_question_period_methodInvocation() {
-    expect_f_a_b(
-        (parseExpression('f<a, b>?.toString()', featureSet: constructorTearoffs)
-                as MethodInvocation)
-            .target!);
-  }
-
-  void test_followingToken_accepted_question_period_methodInvocation_generic() {
-    expect_f_a_b(
-        (parseExpression('f<a, b>?.foo<c>()', featureSet: constructorTearoffs)
-                as MethodInvocation)
-            .target!);
-  }
-
-  void test_followingToken_accepted_question_period_period() {
-    expect_f_a_b((parseExpression('f<a, b>?..toString()',
-            featureSet: constructorTearoffs) as CascadeExpression)
-        .target);
-  }
-
-  void test_followingToken_accepted_question_period_propertyAccess() {
-    expect_f_a_b(
-        (parseExpression('f<a, b>?.hashCode', featureSet: constructorTearoffs)
-                as PropertyAccess)
-            .target!);
-  }
-
-  void test_followingToken_accepted_question_question() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> ?? 0', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
-  }
-
   void test_followingToken_accepted_semicolon() {
     expect_f_a_b((parseStatement('f<a, b>;', featureSet: constructorTearoffs)
             as ExpressionStatement)
@@ -233,18 +144,26 @@
     listener.assertNoErrors();
   }
 
-  void test_followingToken_accepted_slash() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> / 1', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
+  void test_followingToken_rejected_ampersand() {
+    expect_two_args(parseExpression('f(a<b,c>&d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
   }
 
-  void test_followingToken_accepted_tilde_slash() {
-    expect_f_a_b(
-        (parseExpression('f<a, b> ~/ 1', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
+  void test_followingToken_rejected_as() {
+    expect_two_args(
+        parseExpression('f(a<b,c>as)', featureSet: constructorTearoffs)
+            as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_asterisk() {
+    expect_two_args(parseExpression('f(a<b,c>*d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
   }
 
   void test_followingToken_rejected_bang_openBracket() {
@@ -259,6 +178,34 @@
             as MethodInvocation);
   }
 
+  void test_followingToken_rejected_bar() {
+    expect_two_args(parseExpression('f(a<b,c>|d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_caret() {
+    expect_two_args(parseExpression('f(a<b,c>^d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_is() {
+    var methodInvocation = parseExpression('f(a<b,c> is int)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation;
+    var arguments = methodInvocation.argumentList.arguments;
+    expect(arguments, hasLength(2));
+    expect(arguments[0], TypeMatcher<BinaryExpression>());
+    expect(arguments[1], TypeMatcher<IsExpression>());
+  }
+
   void test_followingToken_rejected_lessThan() {
     // Note: in principle we could parse this as a generic instantiation of a
     // generic instantiation, but such an expression would be meaningless so we
@@ -300,6 +247,108 @@
             as MethodInvocation);
   }
 
+  void test_followingToken_rejected_percent() {
+    expect_two_args(parseExpression('f(a<b,c>%d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_period_period() {
+    var methodInvocation = parseExpression('f(a<b,c>..toString())',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation;
+    var arguments = methodInvocation.argumentList.arguments;
+    expect(arguments, hasLength(2));
+    expect(arguments[0], TypeMatcher<BinaryExpression>());
+    expect(arguments[1], TypeMatcher<CascadeExpression>());
+  }
+
+  void test_followingToken_rejected_plus() {
+    expect_two_args(parseExpression('f(a<b,c>+d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_question() {
+    var methodInvocation = parseExpression('f(a<b,c> ? null : null)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation;
+    var arguments = methodInvocation.argumentList.arguments;
+    expect(arguments, hasLength(2));
+    expect(arguments[0], TypeMatcher<BinaryExpression>());
+    expect(arguments[1], TypeMatcher<ConditionalExpression>());
+  }
+
+  void test_followingToken_rejected_question_period_methodInvocation() {
+    expect_two_args(parseExpression('f(a<b,c>?.toString())',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_question_period_methodInvocation_generic() {
+    expect_two_args(parseExpression('f(a<b,c>?.foo<c>())',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_question_period_period() {
+    var methodInvocation = parseExpression('f(a<b,c>?..toString())',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
+          expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 8),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation;
+    var arguments = methodInvocation.argumentList.arguments;
+    expect(arguments, hasLength(3));
+    expect(arguments[0], TypeMatcher<BinaryExpression>());
+    expect(arguments[1], TypeMatcher<BinaryExpression>());
+    expect(arguments[2], TypeMatcher<MethodInvocation>());
+  }
+
+  void test_followingToken_rejected_question_period_propertyAccess() {
+    expect_two_args(parseExpression('f(a<b,c>?.hashCode)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_question_question() {
+    expect_two_args(parseExpression('f(a<b,c> ?? d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_slash() {
+    expect_two_args(parseExpression('f(a<b,c>/d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
+  void test_followingToken_rejected_tilde_slash() {
+    expect_two_args(parseExpression('f(a<b,c>~/d)',
+        errors: [
+          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+        ],
+        featureSet: constructorTearoffs) as MethodInvocation);
+  }
+
   void test_functionReference_after_indexExpression() {
     // Note: this is not legal Dart, but it's important that we do error
     // recovery and don't crash the parser.
diff --git a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
index d3ff54e..05e1c6d 100644
--- a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
+++ b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
@@ -49,8 +49,8 @@
 mixin GenericMetadataParserTest on FastaParserTestCase {
   void test_className_prefixed_constructorName_absent() {
     var compilationUnit = _parseCompilationUnit('@p.A<B>() class C {}',
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -65,8 +65,8 @@
 
   void test_className_prefixed_constructorName_present() {
     var compilationUnit = _parseCompilationUnit('@p.A<B>.ctor() class C {}',
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -81,8 +81,8 @@
 
   void test_className_unprefixed_constructorName_absent() {
     var compilationUnit = _parseCompilationUnit('@A<B>() class C {}',
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -96,8 +96,8 @@
 
   void test_className_unprefixed_constructorName_present() {
     var compilationUnit = _parseCompilationUnit('@A<B>.ctor() class C {}',
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -117,8 +117,8 @@
               6,
               1),
         ],
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -139,8 +139,8 @@
               4,
               1),
         ],
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1));
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
     var annotation = classDeclaration.metadata.single;
@@ -174,8 +174,8 @@
           expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 7, 1),
           expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 15, 5),
         ],
-        disabledError: expectedError(
-            ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1));
+        disabledError:
+            expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1));
   }
 
   CompilationUnit _parseCompilationUnit(String content,
diff --git a/pkg/analyzer/test/generated/nnbd_parser_test.dart b/pkg/analyzer/test/generated/nnbd_parser_test.dart
index f8f5bcd..113fa2b 100644
--- a/pkg/analyzer/test/generated/nnbd_parser_test.dart
+++ b/pkg/analyzer/test/generated/nnbd_parser_test.dart
@@ -236,7 +236,7 @@
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
       expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 1, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
     ]);
   }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index c2509ed..48ea92e 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -702,10 +702,11 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     end('ConstructorReference');
-    super.endConstructorReference(start, periodBeforeName, endToken);
+    super.endConstructorReference(
+        start, periodBeforeName, endToken, constructorReferenceContext);
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/recovery_parser_test.dart b/pkg/analyzer/test/generated/recovery_parser_test.dart
index 1abb18e..523a736 100644
--- a/pkg/analyzer/test/generated/recovery_parser_test.dart
+++ b/pkg/analyzer/test/generated/recovery_parser_test.dart
@@ -336,9 +336,9 @@
     parser.parseCompilationUnit2();
     listener.assertErrors([
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 26, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 0),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
       expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 27, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 0)
     ]);
   }
 
@@ -906,8 +906,8 @@
   void test_incompleteLocalVariable_atTheEndOfBlock_modifierOnly() {
     Statement statement = parseStatement('final }', expectedEndOffset: 6);
     listener.assertErrors([
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 1)
     ]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'final ;');
@@ -1411,8 +1411,8 @@
 
   void test_nonStringLiteralUri_import() {
     parseCompilationUnit("import dart:io; class C {}", errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 6),
       expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 7, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
       expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 7, 4),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 11, 1),
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index e1a4243..02d0f4b 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -224,8 +224,8 @@
 
   void test_parseElseAlone() {
     parseCompilationUnit('main() { else return 0; } ', errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 4),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 4),
       expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 4),
     ]);
   }
@@ -1742,10 +1742,10 @@
   void test_partial_typeArg1_34850() {
     var unit = parseCompilationUnit('<bar<', errors: [
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
       expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 5, 0),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 0),
     ]);
     // Validate that recovery has properly updated the token stream.
     analyzer.Token token = unit.beginToken;
@@ -1759,10 +1759,10 @@
 
   void test_partial_typeArg2_34850() {
     var unit = parseCompilationUnit('foo <bar<', errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 0),
       expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 9, 0),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 0),
     ]);
     // Validate that recovery has properly updated the token stream.
     analyzer.Token token = unit.beginToken;
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index c214e6d..0e2c9d5 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
+import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/generated/resolver.dart' show ResolverVisitor;
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/static_type_analyzer.dart';
@@ -514,7 +515,9 @@
 
     _visitor = ResolverVisitor(
         inheritance, _definingLibrary, source, _typeProvider, _listener,
-        featureSet: featureSet, nameScope: _definingLibrary.scope);
+        featureSet: featureSet,
+        flowAnalysisHelper:
+            FlowAnalysisHelper(context.typeSystemLegacy, false, featureSet));
     _analyzer = _visitor.typeAnalyzer;
   }
 
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index 16aed27..acf54ac 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -79,9 +79,9 @@
     expect(member, isNotNull);
     assertErrors(errors: [
       expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 12, 2),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 1),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 14, 0),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 14, 0),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 14, 0),
     ]);
 
     expect(member, isTopLevelVariableDeclaration);
diff --git a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
index 63b08a5..31462c1 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
@@ -95,6 +95,36 @@
     ]);
   }
 
+  void test_locateRoots_link_folder_notExistingTarget() {
+    var rootFolder = newFolder('/test');
+    newFile('/test/lib/a.dart');
+    newFolder('/test/lib/foo');
+    resourceProvider.newLink(
+      convertPath('/test/lib/foo'),
+      convertPath('/test/lib/bar'),
+    );
+
+    var roots = contextLocator.locateRoots(
+      includedPaths: [rootFolder.path],
+    );
+    expect(roots, hasLength(1));
+
+    var root = findRoot(roots, rootFolder);
+    expect(root.includedPaths, unorderedEquals([rootFolder.path]));
+    expect(root.excludedPaths, isEmpty);
+    expect(root.optionsFile, isNull);
+    expect(root.packagesFile, isNull);
+
+    _assertAnalyzedFiles(root, [
+      '/test/lib/a.dart',
+    ]);
+
+    _assertAnalyzed(root, [
+      '/test/lib/a.dart',
+      '/test/lib/foo/b.dart',
+    ]);
+  }
+
   void test_locateRoots_link_folder_toParentInRoot() {
     Folder rootFolder = newFolder('/test');
     newFile('/test/lib/a.dart');
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 9fe7223..9da6792 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -8,7 +8,6 @@
 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/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
@@ -788,23 +787,6 @@
   }
 
   test_binaryExpression_gtGtGt() async {
-    var latestLanguageVersionStr = '${ExperimentStatus.currentVersion.major}.'
-        '${ExperimentStatus.currentVersion.minor}';
-
-    writeTestPackageConfig(
-      PackageConfigFileBuilder(),
-      languageVersion: latestLanguageVersionStr,
-    );
-
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        experiments: [
-          EnableString.non_nullable,
-          EnableString.triple_shift,
-        ],
-      ),
-    );
-
     await resolveTestCode('''
 class A {
   A operator >>>(int amount) => this;
@@ -2643,7 +2625,7 @@
       invocation.methodName,
       elementMatcher(
         stringElement.getMethod('codeUnitAt'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
     );
 
@@ -8532,7 +8514,7 @@
         prefixed,
         element: elementMatcher(
           objectHashCode,
-          isLegacy: isNullSafetySdkAndLegacyLibrary,
+          isLegacy: isLegacyLibrary,
         ),
         type: 'int',
       );
@@ -8546,7 +8528,7 @@
         identifier,
         element: elementMatcher(
           objectHashCode,
-          isLegacy: isNullSafetySdkAndLegacyLibrary,
+          isLegacy: isLegacyLibrary,
         ),
         type: 'int',
       );
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index c61fa44..b6d1f58 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -659,43 +659,6 @@
     // No exception, even though a.dart is a part of b.dart part.
   }
 
-  test_isReferencedBy_ConstructorElement() async {
-    await _indexTestUnit('''
-/// [new A.foo] 1
-/// [A.foo] 2
-/// [new A] 3
-class A implements B {
-  A() {}
-  A.foo() {}
-}
-class B extends A {
-  B() : super(); // 4
-  B.foo() : super.foo(); // 5
-  factory B.bar() = A.foo; // 6
-}
-main() {
-  new A(); // 7
-  new A.foo(); // 8
-}
-''');
-    var constA = findElement.unnamedConstructor('A');
-    var constA_foo = findElement.constructor('foo', of: 'A');
-    // A()
-    assertThat(constA)
-      ..hasRelationCount(3)
-      ..isReferencedAt('] 3', true, length: 0)
-      ..isReferencedAt('(); // 4', true, length: 0)
-      ..isReferencedAt('(); // 7', true, length: 0);
-    // A.foo()
-    assertThat(constA_foo)
-      ..hasRelationCount(5)
-      ..isReferencedAt('.foo] 1', true, length: 4)
-      ..isReferencedAt('.foo] 2', true, length: 4)
-      ..isReferencedAt('.foo(); // 5', true, length: 4)
-      ..isReferencedAt('.foo; // 6', true, length: 4)
-      ..isReferencedAt('.foo(); // 8', true, length: 4);
-  }
-
   test_isReferencedBy_ConstructorElement_classTypeAlias() async {
     await _indexTestUnit('''
 class M {}
@@ -735,6 +698,33 @@
     // No additional validation, but it should not fail with stack overflow.
   }
 
+  test_isReferencedBy_ConstructorElement_named() async {
+    await _indexTestUnit('''
+/// [new A.foo] 1
+class A {
+  A.foo() {}
+  A.bar() : this.foo(); // 2
+}
+class B extends A {
+  B() : super.foo(); // 3
+  factory B.bar() = A.foo; // 4
+}
+void f() {
+  A.foo(); // 5
+  A.foo; // 6
+}
+''');
+    var element = findElement.constructor('foo');
+    assertThat(element)
+      ..hasRelationCount(6)
+      ..isReferencedAt('.foo] 1', true, length: 4)
+      ..isReferencedAt('.foo(); // 2', true, length: 4)
+      ..isReferencedAt('.foo(); // 3', true, length: 4)
+      ..isReferencedAt('.foo; // 4', true, length: 4)
+      ..isReferencedAt('.foo(); // 5', true, length: 4)
+      ..isReferencedAt('.foo; // 6', true, length: 4);
+  }
+
   test_isReferencedBy_ConstructorElement_namedOnlyWithDot() async {
     await _indexTestUnit('''
 class A {
@@ -766,16 +756,77 @@
     assertThat(constA_bar).isReferencedAt('.bar(); // 1', true, length: 4);
   }
 
-  test_isReferencedBy_ConstructorElement_synthetic() async {
+  test_isReferencedBy_ConstructorElement_unnamed_declared() async {
     await _indexTestUnit('''
-class A {}
-main() {
-  new A(); // 1
+/// [new A] 1
+class A {
+  A() {}
+}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
 }
 ''');
-    var constA = findElement.unnamedConstructor('A');
-    // A()
-    assertThat(constA)..isReferencedAt('(); // 1', true, length: 0);
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_unnamed_declared_new() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {
+  A.new() {}
+}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_unnamed_synthetic() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
   }
 
   test_isReferencedBy_DynamicElement() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index dab758b..774cbf2 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -342,29 +342,80 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_default() async {
+  test_searchReferences_ConstructorElement_named() async {
+    await resolveTestCode('''
+class A {
+  A.named() {}
+}
+
+void main() {
+  A.named();
+  A.named;
+}
+''');
+    var element = findElement.constructor('named');
+    var main = findElement.function('main');
+    var expected = [
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.named();',
+          length: '.named'.length),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.named;',
+          length: '.named'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+    await resolveTestCode('''
+class A<T> {
+  A.named();
+}
+
+typedef B = A<int>;
+
+void f() {
+  B.named(); // ref
+  B.named;
+}
+''');
+
+    var element = findElement.constructor('named');
+    var f = findElement.topFunction('f');
+    await _verifyReferences(element, [
+      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
+          length: '.named'.length),
+      _expectIdQ(f, SearchResultKind.REFERENCE, '.named;',
+          length: '.named'.length),
+    ]);
+  }
+
+  test_searchReferences_ConstructorElement_unnamed() async {
     await resolveTestCode('''
 class A {
   A() {}
 }
-main() {
-  new A();
+
+void main() {
+  A();
+  A.new;
 }
 ''');
     var element = findElement.unnamedConstructor('A');
     var main = findElement.function('main');
     var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0)
+      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.new;',
+          length: '.new'.length),
     ];
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_default_otherFile() async {
+  test_searchReferences_ConstructorElement_unnamed_otherFile() async {
     String other = convertPath('$testPackageLibPath/other.dart');
     String otherCode = '''
 import 'test.dart';
-main() {
-  new A(); // in other
+
+void f() {
+  A(); // in other
 }
 ''';
     newFile(other, content: otherCode);
@@ -388,57 +439,21 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named() async {
+  test_searchReferences_ConstructorElement_unnamed_synthetic() async {
     await resolveTestCode('''
-class A {
-  A.named() {}
-}
-main() {
-  new A.named();
-}
-''');
-    var element = findElement.constructor('named');
-    var main = findElement.function('main');
-    var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '.named();',
-          length: '.named'.length)
-    ];
-    await _verifyReferences(element, expected);
-  }
+class A {}
 
-  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
-    await resolveTestCode('''
-class A<T> {
-  A.named();
-}
-
-typedef B = A<int>;
-
-void f() {
-  B.named(); // ref
-}
-''');
-
-    var element = findElement.constructor('named');
-    var f = findElement.topFunction('f');
-    await _verifyReferences(element, [
-      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
-          length: '.named'.length),
-    ]);
-  }
-
-  test_searchReferences_ConstructorElement_synthetic() async {
-    await resolveTestCode('''
-class A {
-}
-main() {
-  new A();
+void main() {
+  A();
+  A.new;
 }
 ''');
     var element = findElement.unnamedConstructor('A');
     var main = findElement.function('main');
     var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0)
+      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.new;',
+          length: '.new'.length),
     ];
     await _verifyReferences(element, expected);
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
index 1507f47..5d2201c 100644
--- a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
@@ -117,7 +117,7 @@
   }
 
   test_class_constructor_initializer_empty() {
-    assertSameSignature(r'''
+    assertNotSameSignature(r'''
 class C {
   C.foo() : ;
 }
@@ -128,8 +128,9 @@
 ''');
   }
 
+  /// See https://github.com/dart-lang/sdk/issues/46206
   test_class_constructor_initializer_notConst() {
-    assertSameSignature(r'''
+    assertNotSameSignature(r'''
 class C {
   final int f;
   C.foo() : f = 1;
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 9a41bd0..88e81b9 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
@@ -792,6 +792,21 @@
         ]));
   }
 
+  void test_visitExportDirective_configurations() {
+    var unit = parseString(content: r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''').unit;
+    var directive = unit.directives[0] as ExportDirective;
+    _assertSource(
+      "export 'foo.dart'"
+      " if (dart.library.io) 'foo_io.dart'"
+      " if (dart.library.html) 'foo_html.dart';",
+      directive,
+    );
+  }
+
   void test_visitExportDirective_minimal() {
     _assertSource(
         "export 'a.dart';", AstTestFactory.exportDirective2("a.dart"));
@@ -811,6 +826,13 @@
             AstTestFactory.identifier3("a")));
   }
 
+  void test_visitExpressionFunctionBody_async_star() {
+    _assertSource(
+        "async* => a;",
+        AstTestFactory.asyncGeneratorExpressionFunctionBody(
+            AstTestFactory.identifier3("a")));
+  }
+
   void test_visitExpressionFunctionBody_simple() {
     _assertSource("=> a;",
         AstTestFactory.expressionFunctionBody(AstTestFactory.identifier3("a")));
@@ -1788,6 +1810,21 @@
         ]));
   }
 
+  void test_visitImportDirective_configurations() {
+    var unit = parseString(content: r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''').unit;
+    var directive = unit.directives[0] as ImportDirective;
+    _assertSource(
+      "import 'foo.dart'"
+      " if (dart.library.io) 'foo_io.dart'"
+      " if (dart.library.html) 'foo_html.dart';",
+      directive,
+    );
+  }
+
   void test_visitImportDirective_deferred() {
     _assertSource("import 'a.dart' deferred as p;",
         AstTestFactory.importDirective2("a.dart", true, "p"));
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 8328c57..e3aaab4 100644
--- a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsConstantTypeExpressionTest);
-    defineReflectiveTests(IsPotentiallyConstantTypeExpressionTest);
     defineReflectiveTests(PotentiallyConstantTest);
     defineReflectiveTests(PotentiallyConstantWithoutNullSafetyTest);
   });
@@ -104,16 +103,58 @@
 ''');
   }
 
-  test_typeParameter() async {
+  test_typeParameter_ofClass() async {
     await _assertPotentiallyConst(r'''
 class A<T> {
-  m() {
+  T x;
+}
+''');
+  }
+
+  test_typeParameter_ofClass_nested() async {
+    await _assertPotentiallyConst(r'''
+class A<T> {
+  List<T> x;
+}
+''');
+  }
+
+  test_typeParameter_ofExtension() async {
+    await _assertNeverConst(r'''
+extension E<T> on int {
+  void foo() {
     T x;
   }
 }
 ''');
   }
 
+  test_typeParameter_ofFunction() async {
+    await _assertNeverConst(r'''
+void foo<T>() {
+  T x;
+}
+''');
+  }
+
+  test_typeParameter_ofMethod() async {
+    await _assertNeverConst(r'''
+class A {
+  void foo<T>() {
+    T x;
+  }
+}
+''');
+  }
+
+  test_typeParameter_ofMixin() async {
+    await _assertNeverConst(r'''
+mixin M<T> {
+  T x;
+}
+''');
+  }
+
   test_void() async {
     await _assertConst(r'''
 void x;
@@ -123,62 +164,26 @@
   Future<void> _assertConst(String code) async {
     await resolveTestCode(code);
     var type = findNode.variableDeclarationList('x;').type!;
+    expect(isPotentiallyConstantTypeExpression(type), isTrue);
     expect(isConstantTypeExpression(type), isTrue);
   }
 
   Future<void> _assertNeverConst(String code) async {
     await resolveTestCode(code);
     var type = findNode.variableDeclarationList('x;').type!;
+    expect(isPotentiallyConstantTypeExpression(type), isFalse);
     expect(isConstantTypeExpression(type), isFalse);
   }
 
   Future<void> _assertPotentiallyConst(String code) async {
     await resolveTestCode(code);
     var type = findNode.variableDeclarationList('x;').type!;
+    expect(isPotentiallyConstantTypeExpression(type), isTrue);
     expect(isConstantTypeExpression(type), isFalse);
   }
 }
 
 @reflectiveTest
-class IsPotentiallyConstantTypeExpressionTest
-    extends IsConstantTypeExpressionTest {
-  @override
-  test_typeParameter() async {
-    await _assertConst(r'''
-class A<T> {
-  m() {
-    T x;
-  }
-}
-''');
-  }
-
-  test_typeParameter_nested() async {
-    await _assertConst(r'''
-class A<T> {
-  m() {
-    List<T> x;
-  }
-}
-''');
-  }
-
-  @override
-  Future<void> _assertConst(String code) async {
-    await resolveTestCode(code);
-    var type = findNode.variableDeclarationList('x;').type!;
-    expect(isPotentiallyConstantTypeExpression(type), isTrue);
-  }
-
-  @override
-  Future<void> _assertPotentiallyConst(String code) async {
-    await resolveTestCode(code);
-    var type = findNode.variableDeclarationList('x;').type!;
-    expect(isPotentiallyConstantTypeExpression(type), isTrue);
-  }
-}
-
-@reflectiveTest
 class PotentiallyConstantTest extends PubPackageResolutionTest {
   test_adjacentStrings() async {
     await _assertConst(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 1581d51..ce3713b 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -103,7 +103,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -129,7 +129,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -155,7 +155,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -228,7 +228,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -254,7 +254,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -733,7 +733,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -925,7 +925,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -963,7 +963,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1072,7 +1072,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1134,7 +1134,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1176,7 +1176,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1271,7 +1271,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1306,7 +1306,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -1623,7 +1623,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num', // num + int = num
     );
@@ -2144,7 +2144,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -2184,7 +2184,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -2281,7 +2281,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -2349,7 +2349,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
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 b2bceea..1c5c4b3 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -14,9 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AstRewriteMethodInvocationTest);
-    defineReflectiveTests(
-      AstRewriteMethodInvocationWithNonFunctionTypeAliasesTest,
-    );
   });
 }
 
@@ -99,6 +96,46 @@
     _assertArgumentList(invocation.argumentList, ['0']);
   }
 
+  test_targetNull_typeAlias_interfaceType() async {
+    await assertNoErrorsInCode(r'''
+class A<T, U> {
+  A(int _);
+}
+
+typedef X<T, U> = A<T, U>;
+
+void f() {
+  X<int, String>(0);
+}
+''');
+
+    var creation = findNode.instanceCreation('X<int, String>(0);');
+    assertInstanceCreation(
+      creation,
+      findElement.class_('A'),
+      'A<int, String>',
+      expectedConstructorMember: true,
+      expectedSubstitution: {'T': 'int', 'U': 'String'},
+      expectedTypeNameElement: findElement.typeAlias('X'),
+    );
+    _assertArgumentList(creation.argumentList, ['0']);
+  }
+
+  test_targetNull_typeAlias_Never() async {
+    await assertErrorsInCode(r'''
+typedef X = Never;
+
+void f() {
+  X(0);
+}
+''', [
+      error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION, 33, 1),
+    ]);
+
+    // Not rewritten.
+    findNode.methodInvocation('X(0)');
+  }
+
   test_targetPrefixedIdentifier_prefix_class_constructor() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 class A<T> {
@@ -192,6 +229,39 @@
     _assertArgumentList(invocation.argumentList, ['0']);
   }
 
+  test_targetPrefixedIdentifier_typeAlias_interfaceType_constructor() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<T> {
+  A.named(T a);
+}
+
+typedef X<T> = A<T>;
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.X.named(0);
+}
+''');
+
+    var importFind = findElement.importFind('package:test/a.dart');
+
+    var creation = findNode.instanceCreation('X.named(0);');
+    assertInstanceCreation(
+      creation,
+      importFind.class_('A'),
+      'A<int>',
+      constructorName: 'named',
+      expectedConstructorMember: true,
+      expectedSubstitution: {'T': 'int'},
+      expectedPrefix: findElement.prefix('prefix'),
+      expectedTypeNameElement: importFind.typeAlias('X'),
+    );
+    _assertArgumentList(creation.argumentList, ['0']);
+  }
+
   test_targetSimpleIdentifier_class_constructor() async {
     await assertNoErrorsInCode(r'''
 class A<T> {
@@ -346,6 +416,32 @@
     _assertArgumentList(invocation.argumentList, ['0']);
   }
 
+  test_targetSimpleIdentifier_typeAlias_interfaceType_constructor() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  A.named(T a);
+}
+
+typedef X<T> = A<T>;
+
+void f() {
+  X.named(0);
+}
+''');
+
+    var creation = findNode.instanceCreation('X.named(0);');
+    assertInstanceCreation(
+      creation,
+      findElement.class_('A'),
+      'A<int>',
+      constructorName: 'named',
+      expectedConstructorMember: true,
+      expectedSubstitution: {'T': 'int'},
+      expectedTypeNameElement: findElement.typeAlias('X'),
+    );
+    _assertArgumentList(creation.argumentList, ['0']);
+  }
+
   void _assertArgumentList(
     ArgumentList argumentList,
     List<String> expectedArguments,
@@ -388,106 +484,3 @@
     expect(argumentStrings, expectedArguments);
   }
 }
-
-@reflectiveTest
-class AstRewriteMethodInvocationWithNonFunctionTypeAliasesTest
-    extends PubPackageResolutionTest with AstRewriteMethodInvocationTestCases {
-  test_targetNull_typeAlias_interfaceType() async {
-    await assertNoErrorsInCode(r'''
-class A<T, U> {
-  A(int _);
-}
-
-typedef X<T, U> = A<T, U>;
-
-void f() {
-  X<int, String>(0);
-}
-''');
-
-    var creation = findNode.instanceCreation('X<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int, String>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-      expectedTypeNameElement: findElement.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
-  }
-
-  test_targetNull_typeAlias_Never() async {
-    await assertErrorsInCode(r'''
-typedef X = Never;
-
-void f() {
-  X(0);
-}
-''', [
-      error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION, 33, 1),
-    ]);
-
-    // Not rewritten.
-    findNode.methodInvocation('X(0)');
-  }
-
-  test_targetPrefixedIdentifier_typeAlias_interfaceType_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A<T> {
-  A.named(T a);
-}
-
-typedef X<T> = A<T>;
-''');
-
-    await assertNoErrorsInCode(r'''
-import 'a.dart' as prefix;
-
-void f() {
-  prefix.X.named(0);
-}
-''');
-
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('X.named(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-      expectedPrefix: findElement.prefix('prefix'),
-      expectedTypeNameElement: importFind.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
-  }
-
-  test_targetSimpleIdentifier_typeAlias_interfaceType_constructor() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {
-  A.named(T a);
-}
-
-typedef X<T> = A<T>;
-
-void f() {
-  X.named(0);
-}
-''');
-
-    var creation = findNode.instanceCreation('X.named(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-      expectedTypeNameElement: findElement.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
-  }
-}
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index f3f1dea..5be34e4 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -123,7 +123,7 @@
       findNode.binary('a != b'),
       element: elementMatcher(
         numElement.getMethod('=='),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'bool',
     );
@@ -177,7 +177,7 @@
       findNode.binary('a == b'),
       element: elementMatcher(
         numElement.getMethod('=='),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'bool',
     );
@@ -287,7 +287,7 @@
       findNode.binary('a - b'),
       element: elementMatcher(
         numElement.getMethod('-'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -304,7 +304,7 @@
       findNode.binary('a - b'),
       element: elementMatcher(
         numElement.getMethod('-'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -334,7 +334,7 @@
       findNode.binary('a % b'),
       element: elementMatcher(
         numElement.getMethod('%'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -351,7 +351,7 @@
       findNode.binary('a % b'),
       element: elementMatcher(
         numElement.getMethod('%'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -405,7 +405,7 @@
       findNode.binary('a + b'),
       element: elementMatcher(
         doubleElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -489,7 +489,7 @@
       findNode.binary('a + b'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -506,7 +506,7 @@
       findNode.binary('a + b'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -523,7 +523,7 @@
       findNode.binary('a + b'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -540,7 +540,7 @@
       findNode.binary('a() + b'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -577,7 +577,7 @@
       findNode.binary('a + b'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -741,7 +741,7 @@
       findNode.binary('a + 0'),
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -758,7 +758,7 @@
       findNode.binary('a / b'),
       element: elementMatcher(
         numElement.getMethod('/'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -788,7 +788,7 @@
       findNode.binary('a * b'),
       element: elementMatcher(
         numElement.getMethod('*'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -805,7 +805,7 @@
       findNode.binary('a * b'),
       element: elementMatcher(
         numElement.getMethod('*'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 96b3160..0dd6db7 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -180,8 +180,8 @@
   static int get foo => 0;
 }
 ''', [
-      error(
-          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER, 14,
+          3),
     ]);
   }
 
@@ -212,8 +212,8 @@
   static void set foo(_) {}
 }
 ''', [
-      error(
-          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER, 14,
+          3),
     ]);
   }
 
@@ -327,7 +327,30 @@
     ]);
   }
 
-  test_error_duplicateConstructorDefault() async {
+  test_error_duplicateConstructorNamed() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  C.foo();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, 23, 5),
+    ]);
+  }
+
+  test_error_duplicateConstructorNamed_oneIsInvalid() async {
+    await assertErrorsInCode(r'''
+class A {}
+class C {
+  A.foo();
+  C.foo();
+}
+''', [
+      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 23, 1),
+    ]);
+  }
+
+  test_error_duplicateConstructorUnnamed() async {
     await assertErrorsInCode(r'''
 class C {
   C();
@@ -338,14 +361,37 @@
     ]);
   }
 
-  test_error_duplicateConstructorName() async {
+  test_error_duplicateConstructorUnnamed_bothNew() async {
     await assertErrorsInCode(r'''
 class C {
-  C.foo();
-  C.foo();
+  C.new();
+  C.new();
 }
 ''', [
-      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, 23, 5),
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 23, 5),
+    ]);
+  }
+
+  test_error_duplicateConstructorUnnamed_oneIsInvalid() async {
+    await assertErrorsInCode(r'''
+class A {}
+class C {
+  A.new();
+  C();
+}
+''', [
+      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 23, 1),
+    ]);
+  }
+
+  test_error_duplicateConstructorUnnamed_oneNew() async {
+    await assertErrorsInCode(r'''
+class C {
+  C();
+  C.new();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 19, 5),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
new file mode 100644
index 0000000..3262f0b
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -0,0 +1,834 @@
+// 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:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConstructorReferenceResolutionTest);
+    defineReflectiveTests(ConstructorReferenceResolution_TypeArgsTest);
+    defineReflectiveTests(
+        ConstructorReferenceResolutionWithoutConstructorTearoffsTest);
+  });
+}
+
+@reflectiveTest
+class ConstructorReferenceResolution_TypeArgsTest
+    extends PubPackageResolutionTest {
+  test_alias_generic_const() async {
+    await assertNoErrorsInCode('''
+class A<T, U> {
+  const A.foo();
+}
+typedef TA<T, U> = A<U, T>;
+
+const a = TA<int, String>.foo;
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<int, String>.foo;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'String', 'U': 'int'}),
+      classElement,
+      'A<String, int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_alias_generic_const_differingNumberOfTypeParamters() async {
+    await assertNoErrorsInCode('''
+class A<T, U> {
+  A.foo() {}
+}
+typedef TA<T> = A<T, String>;
+
+const x = TA<int>.foo;
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<int>.foo;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'int', 'U': 'String'}),
+      classElement,
+      'A<int, String> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_alias_generic_named() async {
+    await assertNoErrorsInCode('''
+class A<T, U> {
+  A.foo();
+}
+typedef TA<T, U> = A<U, T>;
+
+void bar() {
+  TA<int, String>.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<int, String>.foo;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'String', 'U': 'int'}),
+      classElement,
+      'A<String, int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_alias_generic_unnamed() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A();
+}
+typedef TA<T> = A<T>;
+
+void bar() {
+  TA<int>.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_alias_genericWithBound_unnamed() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A();
+}
+typedef TA<T extends num> = A<T>;
+
+void bar() {
+  TA<int>.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_alias_genericWithBound_unnamed_badBound() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A();
+}
+typedef TA<T extends num> = A<T>;
+
+void bar() {
+  TA<String>.new;
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 75, 6),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('TA<String>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'String'}),
+      classElement,
+      'A<String> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_class_generic_const() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  const A();
+}
+
+const a = A<int>.new;
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_generic_named() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A<int>.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.foo;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_generic_named_cascade() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A<int>..foo;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 43, 1),
+      error(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 47, 1),
+      error(ParserErrorCode.MISSING_IDENTIFIER, 48, 2),
+    ]);
+    // The parser produces nonsense here because the `<` disambiguates as a
+    // relational operator, so no need to assert anything about analysis
+    // results.
+  }
+
+  test_class_generic_named_nullAware() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A<int>?.foo;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 43, 1),
+      error(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 47, 1),
+      error(ParserErrorCode.MISSING_IDENTIFIER, 48, 2),
+    ]);
+    // The parser produces nonsense here because the `<` disambiguates as a
+    // relational operator, so no need to assert anything about analysis
+    // results.
+  }
+
+  test_class_generic_named_typeArgs() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A<int>.foo<int>;
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 52,
+          5),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.foo<int>;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_generic_nonConstructor() async {
+    await assertErrorsInCode('''
+class A<T> {
+  static int i = 1;
+}
+
+void bar() {
+  A<int>.i;
+}
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER,
+          51, 8),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.i;'),
+      null,
+      classElement,
+      'dynamic',
+    );
+  }
+
+  test_class_generic_unnamed() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A();
+}
+
+void bar() {
+  A<int>.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_generic_unnamed_partOfPropertyAccess() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A();
+}
+
+void bar() {
+  A<int>.new.runtimeType;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.new'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_genericWithBound_unnamed() async {
+    await assertNoErrorsInCode('''
+class A<T extends num> {
+  A();
+}
+
+void bar() {
+  A<int>.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_genericWithBound_unnamed_badBound() async {
+    await assertErrorsInCode('''
+class A<T extends num> {
+  A();
+}
+
+void bar() {
+  A<String>.new;
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 52, 6),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<String>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'String'}),
+      classElement,
+      'A<String> Function()',
+    );
+  }
+
+  test_prefixedAlias_generic_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A<T> {
+  A();
+}
+typedef TA<T> = A<T>;
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as a;
+void bar() {
+  a.TA<int>.new;
+}
+''');
+
+    var classElement =
+        findElement.importFind('package:test/a.dart').class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('a.TA<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedPrefix: findElement.import('package:test/a.dart').prefix,
+      expectedTypeNameElement:
+          findElement.importFind('package:test/a.dart').typeAlias('TA'),
+    );
+  }
+
+  test_prefixedClass_generic_named() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A<T> {
+  A.foo();
+}
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as a;
+void bar() {
+  a.A<int>.foo;
+}
+''');
+
+    var classElement =
+        findElement.importFind('package:test/a.dart').class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('a.A<int>.foo;'),
+      elementMatcher(classElement.getNamedConstructor('foo')!,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedPrefix: findElement.import('package:test/a.dart').prefix,
+    );
+  }
+
+  test_prefixedClass_generic_targetOfFunctionCall() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A<T> {
+  A();
+}
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as a;
+extension on Function {
+  void m() {}
+}
+void bar() {
+  a.A<int>.new.m();
+}
+''');
+
+    var classElement =
+        findElement.importFind('package:test/a.dart').class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('a.A<int>.new'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedPrefix: findElement.import('package:test/a.dart').prefix,
+    );
+  }
+
+  test_prefixedClass_generic_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A<T> {
+  A();
+}
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as a;
+void bar() {
+  a.A<int>.new;
+}
+''');
+
+    var classElement =
+        findElement.importFind('package:test/a.dart').class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('a.A<int>.new;'),
+      elementMatcher(classElement.unnamedConstructor,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedPrefix: findElement.import('package:test/a.dart').prefix,
+    );
+  }
+}
+
+@reflectiveTest
+class ConstructorReferenceResolutionTest extends PubPackageResolutionTest {
+  test_abstractClass_factory() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  factory A() => A2();
+}
+
+class A2 implements A {}
+
+foo() {
+  A.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.new;'),
+      classElement.unnamedConstructor,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_abstractClass_generative() async {
+    await assertErrorsInCode('''
+abstract class A {
+  A();
+}
+
+foo() {
+  A.new;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
+          39,
+          5),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.new;'),
+      classElement.unnamedConstructor,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_abstractClass_redirecting() async {
+    await assertErrorsInCode('''
+abstract class A {
+  A(): this.two();
+
+  A.two();
+}
+
+foo() {
+  A.new;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
+          63,
+          5),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.new;'),
+      classElement.unnamedConstructor,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_class_generic_inferFromContext_badTypeArgument() async {
+    await assertErrorsInCode('''
+class A<T extends num> {
+  A.foo();
+}
+
+A<String> Function() bar() {
+  return A.foo;
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 41, 6),
+    ]);
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      constructorElement,
+      classElement,
+      'A<Never> Function()',
+    );
+  }
+
+  test_class_generic_named_inferTypeFromContext() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+A<int> Function() bar() {
+  return A.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      constructorElement,
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
+  test_class_generic_named_uninstantiated() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      constructorElement,
+      classElement,
+      'A<T> Function<T>()',
+    );
+  }
+
+  test_class_generic_named_uninstantiated_bound() async {
+    await assertNoErrorsInCode('''
+class A<T extends num> {
+  A.foo();
+}
+
+void bar() {
+  A.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      constructorElement,
+      classElement,
+      'A<T> Function<T extends num>()',
+    );
+  }
+
+  test_class_nonGeneric_const() async {
+    await assertNoErrorsInCode('''
+class A {
+  const A();
+}
+
+const a1 = A.new;
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.new;'),
+      classElement.unnamedConstructor,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_class_nonGeneric_named() async {
+    await assertNoErrorsInCode('''
+class A {
+  A.foo();
+}
+
+void bar() {
+  A.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      classElement.getNamedConstructor('foo')!,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_class_nonGeneric_unnamed() async {
+    await assertNoErrorsInCode('''
+class A {
+  A();
+}
+
+bar() {
+  A.new;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.new;'),
+      classElement.unnamedConstructor,
+      classElement,
+      'A Function()',
+    );
+  }
+
+  test_typeAlias_generic_const() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  const A();
+}
+typedef TA<T> = A<T>;
+
+const a = TA.new;
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.unnamedConstructor!;
+    assertConstructorReference(
+      findNode.constructorReference('TA.new;'),
+      constructorElement,
+      classElement,
+      'A<T> Function<T>()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_typeAlias_generic_named_uninstantiated() async {
+    await assertNoErrorsInCode('''
+class A<T, U> {
+  A.foo();
+}
+typedef TA<U> = A<String, U>;
+
+bar() {
+  TA.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('TA.foo;'),
+      constructorElement,
+      findElement.class_('A'),
+      'A<String, U> Function<U>()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_typeAlias_instantiated_const() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  const A();
+}
+typedef TA = A<int>;
+
+const a = TA.new;
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.unnamedConstructor!;
+    assertConstructorReference(
+      findNode.constructorReference('TA.new;'),
+      elementMatcher(constructorElement, substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+
+  test_typeAlias_instantiated_named() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+typedef TA = A<int>;
+
+bar() {
+  TA.foo;
+}
+''');
+
+    var classElement = findElement.class_('A');
+    var constructorElement = classElement.getNamedConstructor('foo')!;
+    assertConstructorReference(
+      findNode.constructorReference('TA.foo;'),
+      elementMatcher(constructorElement, substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+      expectedTypeNameElement: findElement.typeAlias('TA'),
+    );
+  }
+}
+
+@reflectiveTest
+class ConstructorReferenceResolutionWithoutConstructorTearoffsTest
+    extends PubPackageResolutionTest with WithoutConstructorTearoffsMixin {
+  test_class_generic_nonConstructor() async {
+    await assertErrorsInCode('''
+class A<T> {
+  static int i = 1;
+}
+
+void bar() {
+  A<int>.i;
+}
+''', [
+      error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 52, 5),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.i;'),
+      null,
+      classElement,
+      'dynamic',
+    );
+  }
+
+  test_constructorTearoff() async {
+    await assertErrorsInCode('''
+class A {
+  A.foo();
+}
+
+void bar() {
+  A.foo;
+}
+''', [
+      error(HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS, 39, 5),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A.foo;'),
+      classElement.getNamedConstructor('foo')!,
+      classElement,
+      'A Function()',
+    );
+  }
+}
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 afc3556..db0e26c 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -251,9 +251,6 @@
   List<String> get collectionIncludedPaths => [workspaceRootPath];
 
   List<String> get experiments => [
-        EnableString.generic_metadata,
-        EnableString.nonfunction_type_aliases,
-        EnableString.triple_shift,
         EnableString.constructor_tearoffs,
       ];
 
@@ -414,16 +411,6 @@
   }
 }
 
-mixin WithNullSafetyMixin on PubPackageResolutionTest {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): This mixin is a no-op
-  // on PubPackageResolutionTest; remove its usage and remove it.
-  @override
-  String? get testPackageLanguageVersion => '2.14';
-
-  @override
-  bool get typeToStringWithNullability => true;
-}
-
 mixin WithoutConstructorTearoffsMixin on PubPackageResolutionTest {
   @override
   String? get testPackageLanguageVersion => '2.13';
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
index 946f223..3a737e2 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -630,7 +630,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -664,7 +664,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -699,7 +699,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -740,7 +740,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart b/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart
new file mode 100644
index 0000000..b0070ea
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.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.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FieldFormalParameterResolutionTest);
+  });
+}
+
+@reflectiveTest
+class FieldFormalParameterResolutionTest extends PubPackageResolutionTest {
+  /// There was a crash.
+  /// https://github.com/dart-lang/sdk/issues/46968
+  test_hasTypeParameters() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  T Function<T>(T) f;
+  A(U this.f<U>(U a));
+}
+''');
+  }
+}
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 3675f92..f695287 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_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';
 
@@ -10,11 +11,78 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FunctionReferenceResolutionTest);
+    defineReflectiveTests(
+        FunctionReferenceResolutionWithoutConstructorTearoffsTest);
   });
 }
 
 @reflectiveTest
 class FunctionReferenceResolutionTest extends PubPackageResolutionTest {
+  test_constructorFunction_named() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A.foo() {}
+}
+
+var x = (A.foo)<int>;
+''');
+
+    assertFunctionReference(findNode.functionReference('(A.foo)<int>;'),
+        findElement.constructor('foo'), 'A<int> Function()');
+  }
+
+  test_constructorFunction_unnamed() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  A();
+}
+
+var x = (A.new)<int>;
+''');
+
+    assertFunctionReference(findNode.functionReference('(A.new)<int>;'),
+        findElement.unnamedConstructor('A'), 'A<int> Function()');
+  }
+
+  test_constructorReference() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo() {}
+}
+
+var x = A.foo<int>;
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 42,
+          5),
+    ]);
+
+    assertFunctionReference(findNode.functionReference('A.foo<int>;'),
+        findElement.constructor('foo'), 'dynamic');
+  }
+
+  test_explicitReceiver_dynamicTyped() async {
+    await assertErrorsInCode('''
+dynamic f(dynamic x) => x;
+
+class C {
+  T instanceMethod<T>(T t) => t;
+}
+
+main() {
+  C c = new C();
+  f(c).instanceMethod<int>;
+}
+''', [
+      error(CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+          102, 24),
+    ]);
+
+    assertFunctionReference(
+        findNode.functionReference('f(c).instanceMethod<int>;'),
+        null,
+        'dynamic');
+  }
+
   test_explicitReceiver_unknown() async {
     await assertErrorsInCode('''
 bar() {
@@ -24,8 +92,8 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 1),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_explicitReceiver_unknown_multipleProperties() async {
@@ -37,8 +105,8 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 1),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_extensionGetter_extensionOverride() async {
@@ -57,8 +125,8 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 67, 8),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(findNode.functionReference('foo<int>;'),
+        findElement.getter('foo'), 'dynamic');
   }
 
   test_extensionMethod() async {
@@ -173,8 +241,8 @@
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER, 51, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_extensionMethod_fromClassDeclaration() async {
@@ -195,25 +263,6 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
-  test_instanceGetter() async {
-    await assertErrorsInCode('''
-abstract class A {
-  late void Function<T>(T) foo;
-
-  bar() {
-    foo<int>;
-  }
-}
-
-''', [
-      error(
-          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 66, 3),
-    ]);
-
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'void Function(int)');
-  }
-
   test_instanceGetter_explicitReceiver() async {
     await assertErrorsInCode('''
 class A {
@@ -228,8 +277,24 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 58, 5),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'void Function(int)');
+    assertFunctionReference(findNode.functionReference('foo<int>;'),
+        findElement.getter('foo'), 'void Function(int)');
+  }
+
+  test_instanceGetter_functionTyped() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  late void Function<T>(T) foo;
+
+  bar() {
+    foo<int>;
+  }
+}
+
+''');
+
+    assertFunctionReference(findNode.functionReference('foo<int>;'),
+        findElement.getter('foo'), 'void Function(int)');
   }
 
   test_instanceMethod() async {
@@ -279,8 +344,8 @@
 }
 ''');
 
-    var reference = findNode.functionReference('(a ?? b).foo<int>;');
-    assertType(reference, 'void Function(int)');
+    assertFunctionReference(findNode.functionReference('(a ?? b).foo<int>;'),
+        findElement.method('foo'), 'void Function(int)');
   }
 
   test_instanceMethod_explicitReceiver_super() async {
@@ -308,11 +373,13 @@
   }
 }
 ''', [
+      error(
+          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 24, 9),
       error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 30, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_instanceMethod_explicitReceiver_super_noSuper() async {
@@ -321,11 +388,32 @@
   super.foo<int>;
 }
 ''', [
+      error(
+          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 10, 9),
       error(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, 10, 5),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
+  }
+
+  test_instanceMethod_explicitReceiver_targetOfFunctionCall() async {
+    await assertNoErrorsInCode('''
+extension on Function {
+  void m() {}
+}
+class A {
+  void foo<T>(T a) {}
+}
+
+bar(A a) {
+  a.foo<int>.m();
+}
+''');
+
+    var reference = findNode.functionReference('foo<int>');
+    assertFunctionReference(
+        reference, findElement.method('foo'), 'void Function(int)');
   }
 
   test_instanceMethod_explicitReceiver_this() async {
@@ -403,8 +491,8 @@
 
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_instanceMethod_explicitReceiver_typeParameter() async {
@@ -416,8 +504,8 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 15, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_instanceMethod_explicitReceiver_variable() async {
@@ -470,6 +558,25 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
+  test_instanceMethod_targetOfFunctionCall() async {
+    await assertNoErrorsInCode('''
+extension on Function {
+  void m() {}
+}
+class A {
+  void foo<T>(T a) {}
+
+  bar() {
+    foo<int>.m();
+  }
+}
+''');
+
+    var reference = findNode.functionReference('foo<int>');
+    assertFunctionReference(
+        reference, findElement.method('foo'), 'void Function(int)');
+  }
+
   test_instanceMethod_unknown() async {
     await assertErrorsInCode('''
 class A {
@@ -481,8 +588,8 @@
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 24, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_localFunction() async {
@@ -500,35 +607,57 @@
   }
 
   test_localVariable() async {
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 void bar(void Function<T>(T a) foo) {
   foo<int>;
 }
+''');
+
+    var reference = findNode.functionReference('foo<int>;');
+    assertFunctionReference(
+        reference, findElement.parameter('foo'), 'void Function(int)');
+  }
+
+  test_localVariable_typeVariable_boundToFunction() async {
+    await assertErrorsInCode('''
+void bar<T extends Function>(T foo) {
+  foo<int>;
+}
 ''', [
       error(
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 40, 3),
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.parameter('foo'), 'void Function(int)');
+    assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
   }
 
-  test_localVariable_typeVariable() async {
-    await assertErrorsInCode('''
+  test_localVariable_typeVariable_functionTyped() async {
+    await assertNoErrorsInCode('''
 void bar<T extends void Function<U>(U)>(T foo) {
   foo<int>;
 }
-''', [
-      error(
-          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 51, 3),
-    ]);
+''');
 
     var reference = findNode.functionReference('foo<int>;');
     assertFunctionReference(
         reference, findElement.parameter('foo'), 'void Function(int)');
   }
 
+  test_localVariable_typeVariable_nonFunction() async {
+    await assertErrorsInCode('''
+void bar<T>(T foo) {
+  foo<int>;
+}
+''', [
+      error(
+          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 23, 3),
+    ]);
+
+    var reference = findNode.functionReference('foo<int>;');
+    assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
+  }
+
   test_nonGenericFunction() async {
     await assertErrorsInCode('''
 class A {
@@ -549,17 +678,15 @@
   }
 
   test_otherExpression() async {
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 void f(void Function<T>(T a) foo, void Function<T>(T a) bar) {
   (1 == 2 ? foo : bar)<int>;
 }
-''', [
-      error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 65,
-          20),
-    ]);
+''');
 
     var reference = findNode.functionReference('(1 == 2 ? foo : bar)<int>;');
     assertType(reference, 'void Function(int)');
+    // A ParenthesizedExpression has no element to assert on.
   }
 
   test_otherExpression_wrongNumberOfTypeArguments() async {
@@ -568,8 +695,6 @@
   (1 == 2 ? foo : bar)<int, String>;
 }
 ''', [
-      error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 65,
-          20),
       error(
           CompileTimeErrorCode
               .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
@@ -580,6 +705,21 @@
     var reference =
         findNode.functionReference('(1 == 2 ? foo : bar)<int, String>;');
     assertType(reference, 'void Function(dynamic)');
+    // A ParenthesizedExpression has no element to assert on.
+  }
+
+  test_receiverIsDynamic() async {
+    await assertErrorsInCode('''
+bar(dynamic a) {
+  a.foo<int>;
+}
+''', [
+      error(CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+          19, 5),
+    ]);
+
+    assertFunctionReference(
+        findNode.functionReference('a.foo<int>;'), null, 'dynamic');
   }
 
   test_staticMethod() async {
@@ -610,9 +750,8 @@
 ''');
 
     assertClassRef(findNode.simple('A.'), findElement.class_('A'));
-    var reference = findNode.functionReference('foo<int>;');
-    assertElement(reference, findElement.method('foo'));
-    assertType(reference, 'void Function(int)');
+    assertFunctionReference(findNode.functionReference('foo<int>;'),
+        findElement.method('foo'), 'void Function(int)');
   }
 
   test_staticMethod_explicitReceiver_importPrefix() async {
@@ -777,6 +916,30 @@
     );
   }
 
+  test_topLevelFunction_importPrefix_asTargetOfFunctionCall() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+void foo<T>(T arg) {}
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as a;
+
+extension on Function {
+  void m() {}
+}
+void bar() {
+  a.foo<int>.m();
+}
+''');
+
+    assertImportPrefix(findNode.simple('a.f'), findElement.prefix('a'));
+    var reference = findNode.functionReference('foo<int>');
+    assertFunctionReference(
+      reference,
+      findElement.importFind('package:test/a.dart').topFunction('foo'),
+      'void Function(int)',
+    );
+  }
+
   test_topLevelFunction_prefix_unknownPrefix() async {
     await assertErrorsInCode('''
 bar() {
@@ -786,8 +949,24 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 6),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
+  }
+
+  test_topLevelFunction_targetOfFunctionCall() async {
+    await assertNoErrorsInCode('''
+void foo<T>(T arg) {}
+
+extension on Function {
+  void m() {}
+}
+void bar() {
+  foo<int>.m();
+}
+''');
+
+    assertFunctionReference(findNode.functionReference('foo<int>'),
+        findElement.topFunction('foo'), 'void Function(int)');
   }
 
   test_topLevelVariable_prefix_unknownIdentifier() async {
@@ -804,8 +983,8 @@
 
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_typeAlias_function_unknownProperty() async {
@@ -817,8 +996,8 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_typeAlias_typeVariable_unknownProperty() async {
@@ -830,8 +1009,8 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 29, 3),
     ]);
 
-    var reference = findNode.functionReference('foo<int>;');
-    assertType(reference, 'dynamic');
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_unknownIdentifier() async {
@@ -842,6 +1021,9 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 15, 3),
     ]);
+
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_unknownIdentifier_explicitReceiver() async {
@@ -856,6 +1038,9 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 41, 3),
     ]);
+
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
   }
 
   test_unknownIdentifier_importPrefix() async {
@@ -869,5 +1054,29 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 40, 3),
     ]);
+
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
+  }
+}
+
+@reflectiveTest
+class FunctionReferenceResolutionWithoutConstructorTearoffsTest
+    extends PubPackageResolutionTest with WithoutConstructorTearoffsMixin {
+  test_localVariable() async {
+    // This code includes a disallowed type instantiation (local variable),
+    // but in the case that the experiment is not enabled, we suppress the
+    // associated error.
+    await assertErrorsInCode('''
+void bar(void Function<T>(T a) foo) {
+  foo<int>;
+}
+''', [
+      error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 43, 5),
+    ]);
+
+    var reference = findNode.functionReference('foo<int>;');
+    assertFunctionReference(
+        reference, findElement.parameter('foo'), 'void Function(int)');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
index e10926e..20e87bf 100644
--- a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
@@ -187,7 +187,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numPlusElement,
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: typeToStringWithNullability ? 'double' : 'num',
     );
@@ -248,7 +248,7 @@
       writeType: 'double',
       operatorElement: elementMatcher(
         doublePlusElement,
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
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 c94064b..d0681f0 100644
--- a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
@@ -18,8 +18,7 @@
 }
 
 @reflectiveTest
-class NullSafetyExperimentGlobalTest extends _FeaturesTest
-    with WithNullSafetyMixin {
+class NullSafetyExperimentGlobalTest extends _FeaturesTest {
   test_jsonConfig_legacyContext_nonNullDependency() async {
     _configureTestWithJsonConfig('''
 {
@@ -102,9 +101,6 @@
 
 @reflectiveTest
 class NullSafetyUsingAllowedExperimentsTest extends _FeaturesTest {
-  @override
-  bool get typeToStringWithNullability => true;
-
   test_jsonConfig_disable_bin() async {
     _configureAllowedExperimentsTestNullSafety();
 
diff --git a/pkg/analyzer/test/src/dart/resolution/macro_test.dart b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
index 4dd8ebc..c4607c4 100644
--- a/pkg/analyzer/test/src/dart/resolution/macro_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
@@ -2,7 +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 'package:analyzer/dart/analysis/utilities.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../generated/elements_types_mixin.dart';
@@ -23,11 +29,35 @@
 
     newFile('$testPackageLibPath/macro_annotations.dart', content: r'''
 library analyzer.macro.annotations;
+const autoConstructor = 0;
 const observable = 0;
 ''');
   }
 
-  test_observable() async {
+  test_autoConstructor() async {
+    var code = r'''
+import 'macro_annotations.dart';
+
+@autoConstructor
+class A {
+  final int a;
+}
+
+void f() {
+  A(a: 0);
+}
+''';
+
+    // No diagnostics, specifically:
+    // 1. The constructor `A()` is declared.
+    // 2. The final field `a` is not marked, because the macro-generated
+    //    constructor does initialize it.
+    await assertNoErrorsInCode(code);
+
+    _assertResolvedUnitWithParsed(code);
+  }
+
+  test_errors_parse_shiftToWritten() async {
     await assertErrorsInCode(r'''
 import 'macro_annotations.dart';
 
@@ -36,12 +66,152 @@
   int _foo = 0;
 }
 
+int a = 0
+''', [
+      error(ParserErrorCode.EXPECTED_TOKEN, 85, 1),
+    ]);
+  }
+
+  test_errors_resolution_removeInGenerated() async {
+    // The generated `set foo(int x) { _foo = x; }` has an error, it attempts
+    // to assign to a final field `_foo`. But this error does not exist in
+    // the written code, so it is not present.
+    await assertNoErrorsInCode(r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  final int _foo = 0;
+}
+''');
+  }
+
+  test_errors_resolution_shiftToWritten() async {
+    await assertErrorsInCode(r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+}
+
+notInt a = 0;
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_CLASS, 77, 6),
+    ]);
+  }
+
+  test_executionError_autoConstructor() async {
+    await assertErrorsInCode(r'''
+import 'macro_annotations.dart';
+
+@autoConstructor
+class A {
+  final int a;
+  A(this.a);
+}
+''', [
+      error(CompileTimeErrorCode.MACRO_EXECUTION_ERROR, 34, 16),
+    ]);
+  }
+
+  test_executionError_observable_implicitlyTyped() async {
+    await assertErrorsInCode(r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  var _a = 0;
+}
+''', [
+      error(CompileTimeErrorCode.MACRO_EXECUTION_ERROR, 46, 11),
+      error(HintCode.UNUSED_FIELD, 64, 2),
+    ]);
+  }
+
+  test_observable() async {
+    var code = r'''
+import 'macro_annotations.dart';
+
+class A {
+  @observable
+  int _foo = 0;
+}
+
 void f(A a) {
   a.foo;
   a.foo = 2;
 }
-''', [
-      error(HintCode.UNUSED_FIELD, 64, 4),
-    ]);
+''';
+
+    // No diagnostics, such as unused `_foo`.
+    // We generate a getter/setter pair, so it is used.
+    await assertNoErrorsInCode(code);
+
+    _assertResolvedUnitWithParsed(code);
+  }
+
+  void _assertResolvedUnitWithParsed(String code) {
+    // The resolved content is the original code.
+    expect(result.content, code);
+
+    var resolvedUnit = result.unit;
+    var parsedUnit = parseString(content: code).unit;
+
+    // The token stream was patched to keep only tokens that existed in the
+    // original code.
+    _assertEqualTokens(resolvedUnit, parsedUnit);
+
+    // The AST was patched to keep only nodes that existed in the
+    // original code.
+    var resolvedTokenString = _nodeTokenString(resolvedUnit);
+    var parsedTokenString = _nodeTokenString(parsedUnit);
+    expect(resolvedTokenString, parsedTokenString);
+  }
+
+  static void _assertEqualTokens(AstNode first, AstNode second) {
+    var firstToken = first.beginToken;
+    var secondToken = second.beginToken;
+    while (true) {
+      if (firstToken == first.endToken && secondToken == second.endToken) {
+        break;
+      }
+      expect(firstToken.lexeme, secondToken.lexeme);
+      expect(firstToken.offset, secondToken.offset);
+      firstToken = firstToken.next!;
+      secondToken = secondToken.next!;
+    }
+  }
+
+  /// Return the string dump of all tokens in [node] and its children.
+  static String _nodeTokenString(AstNode node) {
+    var tokens = <Token>[];
+    node.accept(
+      _RecursiveTokenCollector(tokens),
+    );
+
+    // `AstNode.childEntities` does not return tokens in any specific order.
+    // So, we sort them to make the sequence look reasonable.
+    tokens.sort((a, b) => a.offset - b.offset);
+
+    var buffer = StringBuffer();
+    for (var token in tokens) {
+      buffer.writeln('${token.lexeme} @${token.offset}');
+    }
+    return buffer.toString();
+  }
+}
+
+class _RecursiveTokenCollector extends GeneralizingAstVisitor<void> {
+  final List<Token> _tokens;
+
+  _RecursiveTokenCollector(this._tokens);
+
+  @override
+  void visitNode(AstNode node) {
+    _tokens.addAll(
+      node.childEntities.whereType<Token>(),
+    );
+    super.visitNode(node);
   }
 }
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 f094945..4fe187f 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -77,7 +77,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: typeToStringWithNullability ? 'double' : 'num');
   }
@@ -92,7 +92,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -107,7 +107,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -122,7 +122,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -181,7 +181,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -196,7 +196,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -211,7 +211,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -226,7 +226,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -241,7 +241,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -256,7 +256,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -271,7 +271,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -286,7 +286,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: typeToStringWithNullability ? 'int' : 'num');
   }
@@ -305,7 +305,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: typeToStringWithNullability ? 'int' : 'num');
   }
@@ -337,7 +337,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -356,7 +356,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('clamp'),
         elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num, num)',
         expectedType: 'num');
   }
@@ -2137,7 +2137,7 @@
       findNode.methodInvocation('toString()'),
       element: elementMatcher(
         objectElement.getMethod('toString'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       typeArgumentTypes: [],
       invokeType: 'String Function()',
@@ -2238,7 +2238,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('remainder'),
         elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num)',
         expectedType: typeToStringWithNullability ? 'double' : 'num');
   }
@@ -2253,7 +2253,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('remainder'),
         elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num)',
         expectedType: typeToStringWithNullability ? 'int' : 'num');
   }
@@ -2268,7 +2268,7 @@
     assertMethodInvocation(
         findNode.methodInvocation('remainder'),
         elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isNullSafetySdkAndLegacyLibrary),
+            isLegacy: isLegacyLibrary),
         'num Function(num)',
         expectedType: typeToStringWithNullability ? 'int' : 'num');
   }
@@ -2542,6 +2542,34 @@
     );
   }
 
+  test_hasReceiver_interfaceQ_nullShorting_getter() async {
+    await assertNoErrorsInCode(r'''
+abstract class C {
+  void Function(C) get foo;
+}
+
+void f(C? c) {
+  c?.foo(c); // 1
+}
+''');
+
+    var invocation = findNode.functionExpressionInvocation('foo(c);');
+    assertElementNull(invocation);
+    assertInvokeType(invocation, 'void Function(C)');
+    assertType(invocation, 'void');
+
+    var foo = invocation.function as PropertyAccess;
+    assertType(foo, 'void Function(C)');
+    assertElement(foo.propertyName, findElement.getter('foo'));
+    assertType(foo.propertyName, 'void Function(C)');
+
+    assertSimpleIdentifier(
+      findNode.simple('c); // 1'),
+      element: findElement.parameter('c'),
+      type: 'C',
+    );
+  }
+
   test_hasReceiver_interfaceTypeQ_defined() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index 2c5f443..3cfabd6 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -319,7 +319,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('-'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -345,7 +345,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -373,7 +373,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -399,7 +399,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -489,7 +489,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -518,7 +518,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -546,7 +546,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -577,7 +577,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -603,7 +603,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -624,7 +624,7 @@
       writeType: 'double',
       element: elementMatcher(
         doubleElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -645,7 +645,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -666,7 +666,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -695,7 +695,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -725,7 +725,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -757,7 +757,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
index 1fa6d56..3408237 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -234,7 +234,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -262,7 +262,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -288,7 +288,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -309,7 +309,7 @@
       writeType: null,
       element: elementMatcher(
         intElement.getMethod('unary-'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -382,7 +382,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -411,7 +411,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -439,7 +439,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -470,7 +470,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -496,7 +496,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -517,7 +517,7 @@
       writeType: 'double',
       element: elementMatcher(
         doubleElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'double',
     );
@@ -538,7 +538,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -559,7 +559,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -585,7 +585,7 @@
       writeType: 'T',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'num',
     );
@@ -614,7 +614,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -644,7 +644,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -674,7 +674,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -706,7 +706,7 @@
       writeType: 'num',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -735,7 +735,7 @@
       writeType: 'int',
       element: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -756,7 +756,7 @@
       writeType: null,
       element: elementMatcher(
         intElement.getMethod('~'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index e1fcbcc..f0523f1 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -11,16 +11,132 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PrefixedIdentifierResolutionTest);
-    defineReflectiveTests(PrefixedIdentifierResolutionWithNullSafetyTest);
-    defineReflectiveTests(
-      PrefixedIdentifierResolutionWithNonFunctionTypeAliasesTest,
-    );
+    defineReflectiveTests(PrefixedIdentifierResolutionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class PrefixedIdentifierResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with PrefixedIdentifierResolutionTestCases {
+  test_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {}
+''');
+
+    await assertErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart' deferred as a;
+
+main() {
+  a.loadLibrary;
+}
+''', [
+      error(HintCode.UNUSED_IMPORT, 22, 8),
+    ]);
+
+    var import = findElement.importFind('package:test/a.dart');
+
+    assertPrefixedIdentifier(
+      findNode.prefixed('a.loadLibrary'),
+      element: elementMatcher(
+        import.importedLibrary.loadLibraryFunction,
+        isLegacy: true,
+      ),
+      type: 'Future<dynamic>* Function()*',
+    );
+  }
+
+  test_hasReceiver_typeAlias_staticGetter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static int get foo => 0;
+}
+
+typedef B = A;
+
+void f() {
+  B.foo;
+}
+''');
+
+    assertPrefixedIdentifier(
+      findNode.prefixed('B.foo'),
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertTypeAliasRef(
+      findNode.simple('B.foo'),
+      findElement.typeAlias('B'),
+    );
+
+    assertSimpleIdentifier(
+      findNode.simple('foo;'),
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+  }
+
+  test_implicitCall_tearOff_nullable() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  int call() => 0;
+}
+
+A? a;
+''');
+    await assertErrorsInCode('''
+import 'a.dart';
+
+int Function() foo() {
+  return a;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 50, 1),
+    ]);
+
+    var identifier = findNode.simple('a;');
+    assertElement(
+      identifier,
+      findElement.importFind('package:test/a.dart').topGet('a'),
+    );
+    assertType(identifier, 'A?');
+  }
+
+  test_read_typedef_interfaceType() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef A = List<int>;
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as p;
+
+void f() {
+  p.A;
+}
+''');
+
+    var importFind = findElement.importFind('package:test/a.dart');
+    var A = importFind.typeAlias('A');
+
+    var prefixed = findNode.prefixed('p.A');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: A,
+      type: 'Type',
+    );
+
+    assertImportPrefix(prefixed.prefix, importFind.prefix);
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: A,
+      type: 'Type',
+    );
+  }
+}
+
+mixin PrefixedIdentifierResolutionTestCases on PubPackageResolutionTest {
   test_dynamic_explicitCore_withPrefix() async {
     await assertNoErrorsInCode(r'''
 import 'dart:core' as mycore;
@@ -220,7 +336,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -289,126 +405,6 @@
 }
 
 @reflectiveTest
-class PrefixedIdentifierResolutionWithNonFunctionTypeAliasesTest
-    extends PubPackageResolutionTest {
-  test_hasReceiver_typeAlias_staticGetter() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static int get foo => 0;
-}
-
-typedef B = A;
-
-void f() {
-  B.foo;
-}
-''');
-
-    assertPrefixedIdentifier(
-      findNode.prefixed('B.foo'),
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-
-    assertTypeAliasRef(
-      findNode.simple('B.foo'),
-      findElement.typeAlias('B'),
-    );
-
-    assertSimpleIdentifier(
-      findNode.simple('foo;'),
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-  }
-
-  test_read_typedef_interfaceType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef A = List<int>;
-''');
-
-    await assertNoErrorsInCode('''
-import 'a.dart' as p;
-
-void f() {
-  p.A;
-}
-''');
-
-    var importFind = findElement.importFind('package:test/a.dart');
-    var A = importFind.typeAlias('A');
-
-    var prefixed = findNode.prefixed('p.A');
-    assertPrefixedIdentifier(
-      prefixed,
-      element: A,
-      type: 'Type',
-    );
-
-    assertImportPrefix(prefixed.prefix, importFind.prefix);
-
-    assertSimpleIdentifier(
-      prefixed.identifier,
-      element: A,
-      type: 'Type',
-    );
-  }
-}
-
-@reflectiveTest
-class PrefixedIdentifierResolutionWithNullSafetyTest
-    extends PrefixedIdentifierResolutionTest with WithNullSafetyMixin {
-  test_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {}
-''');
-
-    await assertErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart' deferred as a;
-
-main() {
-  a.loadLibrary;
-}
-''', [
-      error(HintCode.UNUSED_IMPORT, 22, 8),
-    ]);
-
-    var import = findElement.importFind('package:test/a.dart');
-
-    assertPrefixedIdentifier(
-      findNode.prefixed('a.loadLibrary'),
-      element: elementMatcher(
-        import.importedLibrary.loadLibraryFunction,
-        isLegacy: true,
-      ),
-      type: 'Future<dynamic>* Function()*',
-    );
-  }
-
-  test_implicitCall_tearOff_nullable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  int call() => 0;
-}
-
-A? a;
-''');
-    await assertErrorsInCode('''
-import 'a.dart';
-
-int Function() foo() {
-  return a;
-}
-''', [
-      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 50, 1),
-    ]);
-
-    var identifier = findNode.simple('a;');
-    assertElement(
-      identifier,
-      findElement.importFind('package:test/a.dart').topGet('a'),
-    );
-    assertType(identifier, 'A?');
-  }
-}
+class PrefixedIdentifierResolutionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with PrefixedIdentifierResolutionTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index d209f0c..d2faf92 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -223,7 +223,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -335,7 +335,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -571,7 +571,7 @@
       writeType: 'num',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -677,7 +677,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 63a93db..9a340186 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/analysis/feature_set_provider.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -57,11 +56,8 @@
 
   InterfaceType get intType => typeProvider.intType;
 
-  bool get isNullSafetySdkAndLegacyLibrary {
-    if (FeatureSetProvider.isNullSafetySdk) {
-      return !result.libraryElement.isNonNullableByDefault;
-    }
-    return false;
+  bool get isLegacyLibrary {
+    return !result.libraryElement.isNonNullableByDefault;
   }
 
   ClassElement get listElement => typeProvider.listElement;
@@ -165,6 +161,32 @@
     }
   }
 
+  void assertConstructorReference(
+    ConstructorReference node,
+    Object? expectedConstructorElement,
+    ClassElement expectedClassElement,
+    String expectedType, {
+    PrefixElement? expectedPrefix,
+    Element? expectedTypeNameElement,
+  }) {
+    var actualConstructorElement = getNodeElement(node) as ConstructorElement?;
+    var actualConstructorName = node.constructorName.name;
+    if (actualConstructorName != null) {
+      assertConstructorElement(
+        actualConstructorName.staticElement as ConstructorElement?,
+        actualConstructorElement,
+      );
+    }
+
+    assertElement(node, expectedConstructorElement);
+    assertType(node, expectedType);
+
+    var typeName = node.constructorName.type;
+    expectedTypeNameElement ??= expectedClassElement;
+    assertTypeName(typeName, expectedTypeNameElement, null,
+        expectedPrefix: expectedPrefix);
+  }
+
   void assertConstructors(ClassElement class_, List<String> expected) {
     expect(
       class_.constructors.map((c) {
@@ -341,7 +363,7 @@
   }
 
   void assertFunctionReference(
-      FunctionReference node, Element expectedElement, String expectedType) {
+      FunctionReference node, Element? expectedElement, String expectedType) {
     assertElement(node, expectedElement);
     assertType(node, expectedType);
   }
@@ -400,6 +422,9 @@
     }
   }
 
+  /// TODO(srawlins): Refactor to accept an `Object? expectedConstructor` which
+  /// can accept `elementMatcher` for generics, and simplify, similar to
+  /// [assertConstructorReference].
   void assertInstanceCreation(
     InstanceCreationExpression creation,
     ClassElement expectedClassElement,
@@ -410,22 +435,8 @@
     PrefixElement? expectedPrefix,
     Element? expectedTypeNameElement,
   }) {
-    String expectedClassName = expectedClassElement.name;
-
-    ConstructorElement? expectedConstructorElement;
-    if (constructorName != null) {
-      expectedConstructorElement =
-          expectedClassElement.getNamedConstructor(constructorName);
-      if (expectedConstructorElement == null) {
-        fail("No constructor '$constructorName' in class"
-            " '$expectedClassName'.");
-      }
-    } else {
-      expectedConstructorElement = expectedClassElement.unnamedConstructor;
-      if (expectedConstructorElement == null) {
-        fail("No unnamed constructor in class '$expectedClassName'.");
-      }
-    }
+    var expectedConstructorElement =
+        _getConstructorElement(expectedClassElement, constructorName);
 
     var actualConstructorElement =
         getNodeElement(creation) as ConstructorElement?;
@@ -802,7 +813,7 @@
   }
 
   void assertTypeName(
-      TypeName node, Element? expectedElement, String expectedType,
+      TypeName node, Element? expectedElement, String? expectedType,
       {Element? expectedPrefix}) {
     assertType(node, expectedType);
 
@@ -870,6 +881,8 @@
       return node.staticElement;
     } else if (node is BinaryExpression) {
       return node.staticElement;
+    } else if (node is ConstructorReference) {
+      return node.constructorName.staticElement;
     } else if (node is Declaration) {
       return node.declaredElement;
     } else if (node is ExtensionOverride) {
@@ -879,13 +892,15 @@
     } else if (node is FunctionExpressionInvocation) {
       return node.staticElement;
     } else if (node is FunctionReference) {
-      var function = node.function;
+      var function = node.function.unParenthesized;
       if (function is Identifier) {
         return function.staticElement;
       } else if (function is PropertyAccess) {
         return function.propertyName.staticElement;
+      } else if (function is ConstructorReference) {
+        return function.constructorName.staticElement;
       } else {
-        fail('Unsupported node: (${node.runtimeType}) $node');
+        fail('Unsupported node: (${function.runtimeType}) $function');
       }
     } else if (node is Identifier) {
       return node.staticElement;
@@ -982,6 +997,16 @@
     fail('Expected SimpleIdentifier: (${node.runtimeType}) $node');
   }
 
+  ConstructorElement _getConstructorElement(
+      ClassElement classElement, String? constructorName) {
+    var constructorElement = constructorName == null
+        ? classElement.unnamedConstructor
+        : classElement.getNamedConstructor(constructorName);
+    return constructorElement ??
+        fail("No constructor '${constructorName ?? '<unnamed>'}' in class "
+            "'${classElement.name}'.");
+  }
+
   static String _extractReturnType(String invokeType) {
     int functionIndex = invokeType.indexOf(' Function');
     expect(functionIndex, isNonNegative);
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index 08c23ad..70b37ab 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -12,11 +12,13 @@
 import 'class_test.dart' as class_resolution;
 import 'comment_test.dart' as comment;
 import 'constant_test.dart' as constant;
+import 'constructor_reference_test.dart' as constructor_reference;
 import 'constructor_test.dart' as constructor;
 import 'enum_test.dart' as enum_resolution;
 import 'export_test.dart' as export_;
 import 'extension_method_test.dart' as extension_method;
 import 'extension_override_test.dart' as extension_override;
+import 'field_formal_parameter_test.dart' as field_formal_parameter;
 import 'field_test.dart' as field;
 import 'for_element_test.dart' as for_element;
 import 'for_statement_test.dart' as for_in;
@@ -76,10 +78,12 @@
     comment.main();
     constant.main();
     constructor.main();
+    constructor_reference.main();
     enum_resolution.main();
     export_.main();
     extension_method.main();
     extension_override.main();
+    field_formal_parameter.main();
     field.main();
     for_element.main();
     for_in.main();
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
index d56dc4a..bc5d454 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
@@ -9,14 +9,16 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EqualTest);
-    defineReflectiveTests(EqualWithNullSafetyTest);
+    defineReflectiveTests(EqualWithoutNullSafetyTest);
     defineReflectiveTests(NotEqualTest);
-    defineReflectiveTests(NotEqualWithNullSafetyTest);
+    defineReflectiveTests(NotEqualWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class EqualTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+class EqualTest extends PubPackageResolutionTest with EqualTestCases {}
+
+mixin EqualTestCases on PubPackageResolutionTest {
   test_simple() async {
     await resolveTestCode('''
 void f(Object a, Object b) {
@@ -29,11 +31,13 @@
 }
 
 @reflectiveTest
-class EqualWithNullSafetyTest extends EqualTest with WithNullSafetyMixin {}
+class EqualWithoutNullSafetyTest extends PubPackageResolutionTest
+    with EqualTestCases, WithoutNullSafetyMixin {}
 
 @reflectiveTest
-class NotEqualTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+class NotEqualTest extends PubPackageResolutionTest with NotEqualTestCases {}
+
+mixin NotEqualTestCases on PubPackageResolutionTest {
   test_simple() async {
     await resolveTestCode('''
 void f(Object a, Object b) {
@@ -46,5 +50,5 @@
 }
 
 @reflectiveTest
-class NotEqualWithNullSafetyTest extends NotEqualTest with WithNullSafetyMixin {
-}
+class NotEqualWithoutNullSafetyTest extends PubPackageResolutionTest
+    with NotEqualTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
index 5d3126f..556c1d0 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
@@ -9,13 +9,25 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalVariableTest);
-    defineReflectiveTests(LocalVariableWithNullSafetyTest);
+    defineReflectiveTests(LocalVariableWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class LocalVariableTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with LocalVariableTestCases {
+  test_Never() async {
+    await resolveTestCode('''
+void f(Never a) {
+  var v = a;
+  v;
+}
+''');
+    _assertTypeOfV('Never');
+  }
+}
+
+mixin LocalVariableTestCases on PubPackageResolutionTest {
   test_int() async {
     await resolveTestCode('''
 void f() {
@@ -43,15 +55,5 @@
 }
 
 @reflectiveTest
-class LocalVariableWithNullSafetyTest extends LocalVariableTest
-    with WithNullSafetyMixin {
-  test_Never() async {
-    await resolveTestCode('''
-void f(Never a) {
-  var v = a;
-  v;
-}
-''');
-    _assertTypeOfV('Never');
-  }
-}
+class LocalVariableWithoutNullSafetyTest extends PubPackageResolutionTest
+    with LocalVariableTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
index 209ac2b..bb81efe 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
@@ -9,29 +9,14 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LogicalAndTest);
-    defineReflectiveTests(LogicalAndWithNullSafetyTest);
+    defineReflectiveTests(LogicalAndWithoutNullSafetyTest);
     defineReflectiveTests(LogicalOrTest);
-    defineReflectiveTests(LogicalOrWithNullSafetyTest);
+    defineReflectiveTests(LogicalOrWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class LogicalAndTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  test_upward() async {
-    await resolveTestCode('''
-void f(bool a, bool b) {
-  var c = a && b;
-  print(c);
-}
-''');
-    assertType(findNode.simple('c)'), 'bool');
-  }
-}
-
-@reflectiveTest
-class LogicalAndWithNullSafetyTest extends LogicalAndTest
-    with WithNullSafetyMixin {
+class LogicalAndTest extends PubPackageResolutionTest with LogicalAndTestCases {
   @failingTest
   test_downward() async {
     await resolveTestCode('''
@@ -47,13 +32,11 @@
   }
 }
 
-@reflectiveTest
-class LogicalOrTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+mixin LogicalAndTestCases on PubPackageResolutionTest {
   test_upward() async {
     await resolveTestCode('''
 void f(bool a, bool b) {
-  var c = a || b;
+  var c = a && b;
   print(c);
 }
 ''');
@@ -62,8 +45,11 @@
 }
 
 @reflectiveTest
-class LogicalOrWithNullSafetyTest extends LogicalOrTest
-    with WithNullSafetyMixin {
+class LogicalAndWithoutNullSafetyTest extends PubPackageResolutionTest
+    with LogicalAndTestCases, WithoutNullSafetyMixin {}
+
+@reflectiveTest
+class LogicalOrTest extends PubPackageResolutionTest with LogicalOrTestCases {
   @failingTest
   test_downward() async {
     await resolveTestCode('''
@@ -78,3 +64,19 @@
     assertInvokeType(findNode.methodInvocation('b('), 'bool Function()');
   }
 }
+
+mixin LogicalOrTestCases on PubPackageResolutionTest {
+  test_upward() async {
+    await resolveTestCode('''
+void f(bool a, bool b) {
+  var c = a || b;
+  print(c);
+}
+''');
+    assertType(findNode.simple('c)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class LogicalOrWithoutNullSafetyTest extends PubPackageResolutionTest
+    with LogicalOrTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
index 7e9f8fe..3b14b09 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
@@ -9,14 +9,16 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsNotTest);
-    defineReflectiveTests(IsNotWithNullSafetyTest);
+    defineReflectiveTests(IsNotWithoutNullSafetyTest);
     defineReflectiveTests(IsTest);
-    defineReflectiveTests(IsWithNullSafetyTest);
+    defineReflectiveTests(IsWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class IsNotTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+class IsNotTest extends PubPackageResolutionTest with IsNotTestCases {}
+
+mixin IsNotTestCases on PubPackageResolutionTest {
   test_simple() async {
     await resolveTestCode('''
 void f(Object a) {
@@ -29,10 +31,13 @@
 }
 
 @reflectiveTest
-class IsNotWithNullSafetyTest extends IsNotTest with WithNullSafetyMixin {}
+class IsNotWithoutNullSafetyTest extends PubPackageResolutionTest
+    with IsNotTestCases, WithoutNullSafetyMixin {}
 
 @reflectiveTest
-class IsTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+class IsTest extends PubPackageResolutionTest with IsTestCases {}
+
+mixin IsTestCases on PubPackageResolutionTest {
   test_simple() async {
     await resolveTestCode('''
 void f(Object a) {
@@ -45,4 +50,5 @@
 }
 
 @reflectiveTest
-class IsWithNullSafetyTest extends IsTest with WithNullSafetyMixin {}
+class IsWithoutNullSafetyTest extends PubPackageResolutionTest
+    with IsTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index 733a4aa..711acd8 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -12,511 +12,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeNameResolutionTest);
-    defineReflectiveTests(TypeNameResolutionWithNullSafetyTest);
-    defineReflectiveTests(TypeNameResolutionWithNonFunctionTypeAliasesTest);
+    defineReflectiveTests(TypeNameResolutionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class TypeNameResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  @override
-  bool get typeToStringWithNullability => true;
-
-  test_class() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-f(A a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('A a'),
-      findElement.class_('A'),
-      typeStr('A', 'A*'),
-    );
-  }
-
-  test_class_generic_toBounds() async {
-    await assertNoErrorsInCode(r'''
-class A<T extends num> {}
-
-f(A a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('A a'),
-      findElement.class_('A'),
-      typeStr('A<num>', 'A<num*>*'),
-    );
-  }
-
-  test_class_generic_toBounds_dynamic() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-f(A a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('A a'),
-      findElement.class_('A'),
-      typeStr('A<dynamic>', 'A<dynamic>*'),
-    );
-  }
-
-  test_class_generic_typeArguments() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-f(A<int> a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('A<int> a'),
-      findElement.class_('A'),
-      typeStr('A<int>', 'A<int*>*'),
-    );
-  }
-
-  test_dynamic_explicitCore() async {
-    await assertNoErrorsInCode(r'''
-import 'dart:core';
-
-dynamic a;
-''');
-
-    assertTypeName(
-      findNode.typeName('dynamic a;'),
-      dynamicElement,
-      'dynamic',
-    );
-  }
-
-  test_dynamic_explicitCore_withPrefix() async {
-    await assertNoErrorsInCode(r'''
-import 'dart:core' as mycore;
-
-mycore.dynamic a;
-''');
-
-    assertTypeName(
-      findNode.typeName('mycore.dynamic a;'),
-      dynamicElement,
-      'dynamic',
-      expectedPrefix: findElement.import('dart:core').prefix,
-    );
-  }
-
-  test_dynamic_explicitCore_withPrefix_referenceWithout() async {
-    await assertErrorsInCode(r'''
-import 'dart:core' as mycore;
-
-dynamic a;
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_CLASS, 31, 7),
-    ]);
-
-    assertTypeName(
-      findNode.typeName('dynamic a;'),
-      null,
-      'dynamic',
-    );
-  }
-
-  test_dynamic_implicitCore() async {
-    await assertNoErrorsInCode(r'''
-dynamic a;
-''');
-
-    assertTypeName(
-      findNode.typeName('dynamic a;'),
-      dynamicElement,
-      'dynamic',
-    );
-  }
-
-  test_functionTypeAlias() async {
-    await assertNoErrorsInCode(r'''
-typedef F = int Function();
-
-f(F a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('F a'),
-      findElement.typeAlias('F'),
-      typeStr('int Function()', 'int* Function()*'),
-    );
-  }
-
-  test_functionTypeAlias_generic_toBounds() async {
-    await assertNoErrorsInCode(r'''
-typedef F<T extends num> = T Function();
-
-f(F a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('F a'),
-      findElement.typeAlias('F'),
-      typeStr('num Function()', 'num* Function()*'),
-    );
-  }
-
-  test_functionTypeAlias_generic_toBounds_dynamic() async {
-    await assertNoErrorsInCode(r'''
-typedef F<T> = T Function();
-
-f(F a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('F a'),
-      findElement.typeAlias('F'),
-      typeStr('dynamic Function()', 'dynamic Function()*'),
-    );
-  }
-
-  test_functionTypeAlias_generic_typeArguments() async {
-    await assertNoErrorsInCode(r'''
-typedef F<T> = T Function();
-
-f(F<int> a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('F<int> a'),
-      findElement.typeAlias('F'),
-      typeStr('int Function()', 'int* Function()*'),
-    );
-  }
-
-  test_instanceCreation_explicitNew_prefix_unresolvedClass() async {
-    await assertErrorsInCode(r'''
-import 'dart:math' as math;
-
-main() {
-  new math.A();
-}
-''', [
-      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 49, 1),
-    ]);
-
-    assertTypeName(
-      findNode.typeName('A();'),
-      null,
-      'dynamic',
-      expectedPrefix: findElement.prefix('math'),
-    );
-  }
-
-  test_instanceCreation_explicitNew_resolvedClass() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-main() {
-  new A();
-}
-''');
-
-    assertTypeName(
-      findNode.typeName('A();'),
-      findElement.class_('A'),
-      typeStr('A', 'A*'),
-    );
-  }
-
-  test_instanceCreation_explicitNew_unresolvedClass() async {
-    await assertErrorsInCode(r'''
-main() {
-  new A();
-}
-''', [
-      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 15, 1),
-    ]);
-
-    assertTypeName(
-      findNode.typeName('A();'),
-      null,
-      'dynamic',
-    );
-  }
-
-  test_invalid_prefixedIdentifier_instanceCreation() async {
-    await assertErrorsInCode(r'''
-void f() {
-  new int.double.other();
-}
-''', [
-      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 17, 10),
-    ]);
-
-    assertTypeName(
-      findNode.typeName('int.double'),
-      null,
-      'dynamic',
-      expectedPrefix: intElement,
-    );
-  }
-
-  test_invalid_prefixedIdentifier_literal() async {
-    await assertErrorsInCode(r'''
-void f() {
-  0 as int.double;
-}
-''', [
-      error(CompileTimeErrorCode.NOT_A_TYPE, 18, 10),
-    ]);
-
-    assertTypeName(
-      findNode.typeName('int.double'),
-      null,
-      'dynamic',
-      expectedPrefix: intElement,
-    );
-  }
-
-  test_never() async {
-    await assertNoErrorsInCode(r'''
-f(Never a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('Never a'),
-      neverElement,
-      typeStr('Never', 'Null*'),
-    );
-  }
-}
-
-@reflectiveTest
-class TypeNameResolutionWithNonFunctionTypeAliasesTest
-    extends PubPackageResolutionTest {
-  test_typeAlias_asInstanceCreation_explicitNew_typeArguments_interfaceType_none() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-typedef X<T> = A<T>;
-
-void f() {
-  new X<int>();
-}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<int>()'),
-      findElement.typeAlias('X'),
-      'A<int>',
-    );
-  }
-
-  test_typeAlias_asInstanceCreation_implicitNew_toBounds_noTypeParameters_interfaceType_none() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-typedef X = A<int>;
-
-void f() {
-  X();
-}
-''');
-
-    assertTypeName(
-      findNode.typeName('X()'),
-      findElement.typeAlias('X'),
-      'A<int>',
-    );
-  }
-
-  test_typeAlias_asInstanceCreation_implicitNew_typeArguments_interfaceType_none() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-typedef X<T> = A<T>;
-
-void f() {
-  X<int>();
-}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<int>()'),
-      findElement.typeAlias('X'),
-      'A<int>',
-    );
-  }
-
-  test_typeAlias_asParameterType_interfaceType_none() async {
-    await assertNoErrorsInCode(r'''
-typedef X<T> = Map<int, T>;
-void f(X<String> a, X<String?> b) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<String>'),
-      findElement.typeAlias('X'),
-      'Map<int, String>',
-    );
-
-    assertTypeName(
-      findNode.typeName('X<String?>'),
-      findElement.typeAlias('X'),
-      'Map<int, String?>',
-    );
-  }
-
-  test_typeAlias_asParameterType_interfaceType_none_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef X<T> = Map<int, T>;
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.9
-import 'a.dart';
-void f(X<String> a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<String>'),
-      findElement.importFind('package:test/a.dart').typeAlias('X'),
-      'Map<int*, String*>*',
-    );
-  }
-
-  test_typeAlias_asParameterType_interfaceType_question() async {
-    await assertNoErrorsInCode(r'''
-typedef X<T> = List<T?>;
-void f(X<int> a, X<int?> b) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<int>'),
-      findElement.typeAlias('X'),
-      'List<int?>',
-    );
-
-    assertTypeName(
-      findNode.typeName('X<int?>'),
-      findElement.typeAlias('X'),
-      'List<int?>',
-    );
-  }
-
-  test_typeAlias_asParameterType_interfaceType_question_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef X<T> = List<T?>;
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.9
-import 'a.dart';
-void f(X<int> a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<int>'),
-      findElement.importFind('package:test/a.dart').typeAlias('X'),
-      'List<int*>*',
-    );
-  }
-
-  test_typeAlias_asParameterType_Never_none() async {
-    await assertNoErrorsInCode(r'''
-typedef X = Never;
-void f(X a, X? b) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X a'),
-      findElement.typeAlias('X'),
-      'Never',
-    );
-
-    assertTypeName(
-      findNode.typeName('X? b'),
-      findElement.typeAlias('X'),
-      'Never?',
-    );
-  }
-
-  test_typeAlias_asParameterType_Never_none_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef X = Never;
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.9
-import 'a.dart';
-void f(X a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X a'),
-      findElement.importFind('package:test/a.dart').typeAlias('X'),
-      'Null*',
-    );
-  }
-
-  test_typeAlias_asParameterType_Never_question() async {
-    await assertNoErrorsInCode(r'''
-typedef X = Never?;
-void f(X a, X? b) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X a'),
-      findElement.typeAlias('X'),
-      'Never?',
-    );
-
-    assertTypeName(
-      findNode.typeName('X? b'),
-      findElement.typeAlias('X'),
-      'Never?',
-    );
-  }
-
-  test_typeAlias_asParameterType_question() async {
-    await assertNoErrorsInCode(r'''
-typedef X<T> = T?;
-void f(X<int> a) {}
-''');
-
-    assertTypeName(
-      findNode.typeName('X<int>'),
-      findElement.typeAlias('X'),
-      'int?',
-    );
-  }
-
-  test_typeAlias_asReturnType_interfaceType() async {
-    await assertNoErrorsInCode(r'''
-typedef X<T> = Map<int, T>;
-X<String> f() => {};
-''');
-
-    assertTypeName(
-      findNode.typeName('X<String>'),
-      findElement.typeAlias('X'),
-      'Map<int, String>',
-    );
-  }
-
-  test_typeAlias_asReturnType_void() async {
-    await assertNoErrorsInCode(r'''
-typedef Nothing = void;
-Nothing f() {}
-''');
-
-    assertTypeName(
-      findNode.typeName('Nothing f()'),
-      findElement.typeAlias('Nothing'),
-      'void',
-    );
-  }
-}
-
-@reflectiveTest
-class TypeNameResolutionWithNullSafetyTest extends TypeNameResolutionTest
-    with WithNullSafetyMixin {
+    with TypeNameResolutionTestCases {
   ImportFindElement get import_a {
     return findElement.importFind('package:test/a.dart');
   }
@@ -860,4 +362,499 @@
       'int* Function()',
     );
   }
+
+  test_typeAlias_asInstanceCreation_explicitNew_typeArguments_interfaceType_none() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+typedef X<T> = A<T>;
+
+void f() {
+  new X<int>();
+}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<int>()'),
+      findElement.typeAlias('X'),
+      'A<int>',
+    );
+  }
+
+  test_typeAlias_asInstanceCreation_implicitNew_toBounds_noTypeParameters_interfaceType_none() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+typedef X = A<int>;
+
+void f() {
+  X();
+}
+''');
+
+    assertTypeName(
+      findNode.typeName('X()'),
+      findElement.typeAlias('X'),
+      'A<int>',
+    );
+  }
+
+  test_typeAlias_asInstanceCreation_implicitNew_typeArguments_interfaceType_none() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+typedef X<T> = A<T>;
+
+void f() {
+  X<int>();
+}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<int>()'),
+      findElement.typeAlias('X'),
+      'A<int>',
+    );
+  }
+
+  test_typeAlias_asParameterType_interfaceType_none() async {
+    await assertNoErrorsInCode(r'''
+typedef X<T> = Map<int, T>;
+void f(X<String> a, X<String?> b) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<String>'),
+      findElement.typeAlias('X'),
+      'Map<int, String>',
+    );
+
+    assertTypeName(
+      findNode.typeName('X<String?>'),
+      findElement.typeAlias('X'),
+      'Map<int, String?>',
+    );
+  }
+
+  test_typeAlias_asParameterType_interfaceType_none_inLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef X<T> = Map<int, T>;
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.9
+import 'a.dart';
+void f(X<String> a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<String>'),
+      findElement.importFind('package:test/a.dart').typeAlias('X'),
+      'Map<int*, String*>*',
+    );
+  }
+
+  test_typeAlias_asParameterType_interfaceType_question() async {
+    await assertNoErrorsInCode(r'''
+typedef X<T> = List<T?>;
+void f(X<int> a, X<int?> b) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<int>'),
+      findElement.typeAlias('X'),
+      'List<int?>',
+    );
+
+    assertTypeName(
+      findNode.typeName('X<int?>'),
+      findElement.typeAlias('X'),
+      'List<int?>',
+    );
+  }
+
+  test_typeAlias_asParameterType_interfaceType_question_inLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef X<T> = List<T?>;
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.9
+import 'a.dart';
+void f(X<int> a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<int>'),
+      findElement.importFind('package:test/a.dart').typeAlias('X'),
+      'List<int*>*',
+    );
+  }
+
+  test_typeAlias_asParameterType_Never_none() async {
+    await assertNoErrorsInCode(r'''
+typedef X = Never;
+void f(X a, X? b) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X a'),
+      findElement.typeAlias('X'),
+      'Never',
+    );
+
+    assertTypeName(
+      findNode.typeName('X? b'),
+      findElement.typeAlias('X'),
+      'Never?',
+    );
+  }
+
+  test_typeAlias_asParameterType_Never_none_inLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef X = Never;
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.9
+import 'a.dart';
+void f(X a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X a'),
+      findElement.importFind('package:test/a.dart').typeAlias('X'),
+      'Null*',
+    );
+  }
+
+  test_typeAlias_asParameterType_Never_question() async {
+    await assertNoErrorsInCode(r'''
+typedef X = Never?;
+void f(X a, X? b) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X a'),
+      findElement.typeAlias('X'),
+      'Never?',
+    );
+
+    assertTypeName(
+      findNode.typeName('X? b'),
+      findElement.typeAlias('X'),
+      'Never?',
+    );
+  }
+
+  test_typeAlias_asParameterType_question() async {
+    await assertNoErrorsInCode(r'''
+typedef X<T> = T?;
+void f(X<int> a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('X<int>'),
+      findElement.typeAlias('X'),
+      'int?',
+    );
+  }
+
+  test_typeAlias_asReturnType_interfaceType() async {
+    await assertNoErrorsInCode(r'''
+typedef X<T> = Map<int, T>;
+X<String> f() => {};
+''');
+
+    assertTypeName(
+      findNode.typeName('X<String>'),
+      findElement.typeAlias('X'),
+      'Map<int, String>',
+    );
+  }
+
+  test_typeAlias_asReturnType_void() async {
+    await assertNoErrorsInCode(r'''
+typedef Nothing = void;
+Nothing f() {}
+''');
+
+    assertTypeName(
+      findNode.typeName('Nothing f()'),
+      findElement.typeAlias('Nothing'),
+      'void',
+    );
+  }
+}
+
+mixin TypeNameResolutionTestCases on PubPackageResolutionTest {
+  test_class() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+f(A a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('A a'),
+      findElement.class_('A'),
+      typeStr('A', 'A*'),
+    );
+  }
+
+  test_class_generic_toBounds() async {
+    await assertNoErrorsInCode(r'''
+class A<T extends num> {}
+
+f(A a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('A a'),
+      findElement.class_('A'),
+      typeStr('A<num>', 'A<num*>*'),
+    );
+  }
+
+  test_class_generic_toBounds_dynamic() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+f(A a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('A a'),
+      findElement.class_('A'),
+      typeStr('A<dynamic>', 'A<dynamic>*'),
+    );
+  }
+
+  test_class_generic_typeArguments() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+f(A<int> a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('A<int> a'),
+      findElement.class_('A'),
+      typeStr('A<int>', 'A<int*>*'),
+    );
+  }
+
+  test_dynamic_explicitCore() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:core';
+
+dynamic a;
+''');
+
+    assertTypeName(
+      findNode.typeName('dynamic a;'),
+      dynamicElement,
+      'dynamic',
+    );
+  }
+
+  test_dynamic_explicitCore_withPrefix() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:core' as mycore;
+
+mycore.dynamic a;
+''');
+
+    assertTypeName(
+      findNode.typeName('mycore.dynamic a;'),
+      dynamicElement,
+      'dynamic',
+      expectedPrefix: findElement.import('dart:core').prefix,
+    );
+  }
+
+  test_dynamic_explicitCore_withPrefix_referenceWithout() async {
+    await assertErrorsInCode(r'''
+import 'dart:core' as mycore;
+
+dynamic a;
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_CLASS, 31, 7),
+    ]);
+
+    assertTypeName(
+      findNode.typeName('dynamic a;'),
+      null,
+      'dynamic',
+    );
+  }
+
+  test_dynamic_implicitCore() async {
+    await assertNoErrorsInCode(r'''
+dynamic a;
+''');
+
+    assertTypeName(
+      findNode.typeName('dynamic a;'),
+      dynamicElement,
+      'dynamic',
+    );
+  }
+
+  test_functionTypeAlias() async {
+    await assertNoErrorsInCode(r'''
+typedef F = int Function();
+
+f(F a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('F a'),
+      findElement.typeAlias('F'),
+      typeStr('int Function()', 'int* Function()*'),
+    );
+  }
+
+  test_functionTypeAlias_generic_toBounds() async {
+    await assertNoErrorsInCode(r'''
+typedef F<T extends num> = T Function();
+
+f(F a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('F a'),
+      findElement.typeAlias('F'),
+      typeStr('num Function()', 'num* Function()*'),
+    );
+  }
+
+  test_functionTypeAlias_generic_toBounds_dynamic() async {
+    await assertNoErrorsInCode(r'''
+typedef F<T> = T Function();
+
+f(F a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('F a'),
+      findElement.typeAlias('F'),
+      typeStr('dynamic Function()', 'dynamic Function()*'),
+    );
+  }
+
+  test_functionTypeAlias_generic_typeArguments() async {
+    await assertNoErrorsInCode(r'''
+typedef F<T> = T Function();
+
+f(F<int> a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('F<int> a'),
+      findElement.typeAlias('F'),
+      typeStr('int Function()', 'int* Function()*'),
+    );
+  }
+
+  test_instanceCreation_explicitNew_prefix_unresolvedClass() async {
+    await assertErrorsInCode(r'''
+import 'dart:math' as math;
+
+main() {
+  new math.A();
+}
+''', [
+      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 49, 1),
+    ]);
+
+    assertTypeName(
+      findNode.typeName('A();'),
+      null,
+      'dynamic',
+      expectedPrefix: findElement.prefix('math'),
+    );
+  }
+
+  test_instanceCreation_explicitNew_resolvedClass() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+main() {
+  new A();
+}
+''');
+
+    assertTypeName(
+      findNode.typeName('A();'),
+      findElement.class_('A'),
+      typeStr('A', 'A*'),
+    );
+  }
+
+  test_instanceCreation_explicitNew_unresolvedClass() async {
+    await assertErrorsInCode(r'''
+main() {
+  new A();
+}
+''', [
+      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 15, 1),
+    ]);
+
+    assertTypeName(
+      findNode.typeName('A();'),
+      null,
+      'dynamic',
+    );
+  }
+
+  test_invalid_prefixedIdentifier_instanceCreation() async {
+    await assertErrorsInCode(r'''
+void f() {
+  new int.double.other();
+}
+''', [
+      error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 17, 10),
+    ]);
+
+    assertTypeName(
+      findNode.typeName('int.double'),
+      null,
+      'dynamic',
+      expectedPrefix: intElement,
+    );
+  }
+
+  test_invalid_prefixedIdentifier_literal() async {
+    await assertErrorsInCode(r'''
+void f() {
+  0 as int.double;
+}
+''', [
+      error(CompileTimeErrorCode.NOT_A_TYPE, 18, 10),
+    ]);
+
+    assertTypeName(
+      findNode.typeName('int.double'),
+      null,
+      'dynamic',
+      expectedPrefix: intElement,
+    );
+  }
+
+  test_never() async {
+    await assertNoErrorsInCode(r'''
+f(Never a) {}
+''');
+
+    assertTypeName(
+      findNode.typeName('Never a'),
+      neverElement,
+      typeStr('Never', 'Null*'),
+    );
+  }
+}
+
+@reflectiveTest
+class TypeNameResolutionWithoutNullSafetyTest extends PubPackageResolutionTest
+    with TypeNameResolutionTestCases, WithoutNullSafetyMixin {
+  @override
+  bool get typeToStringWithNullability => true;
 }
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
index 30de480..de079aa 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
@@ -10,15 +10,59 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AmbiguousSetOrMapLiteralBothTest);
-    defineReflectiveTests(AmbiguousSetOrMapLiteralBothWithNullSafetyTest);
+    defineReflectiveTests(AmbiguousSetOrMapLiteralBothWithoutNullSafetyTest);
     defineReflectiveTests(AmbiguousSetOrMapLiteralEitherTest);
-    defineReflectiveTests(AmbiguousSetOrMapLiteralEitherWithNullSafetyTest);
+    defineReflectiveTests(AmbiguousSetOrMapLiteralEitherWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class AmbiguousSetOrMapLiteralBothTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with AmbiguousSetOrMapLiteralBothTestCases {
+  test_map_keyNonNullable_valueNullable() async {
+    await assertNoErrorsInCode('''
+f(Map<int, int?> map) {
+  return {...map};
+}
+''');
+  }
+
+  test_map_keyNullable_valueNonNullable() async {
+    await assertNoErrorsInCode('''
+f(Map<int?, int> map) {
+  return {...map};
+}
+''');
+  }
+
+  test_map_keyNullable_valueNullable() async {
+    await assertNoErrorsInCode('''
+f(Map<int?, int?> map) {
+  return {...map};
+}
+''');
+  }
+
+  test_set_elementNullable() async {
+    await assertNoErrorsInCode('''
+f(Set<int?> set) {
+  return {...set};
+}
+''');
+  }
+
+  test_setAndMap_nullable() async {
+    await assertErrorsInCode('''
+f(Map<int?, int> map, Set<int?> set) {
+  return {...set, ...map};
+}
+''', [
+      error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH, 48, 16),
+    ]);
+  }
+}
+
+mixin AmbiguousSetOrMapLiteralBothTestCases on PubPackageResolutionTest {
   test_map() async {
     await assertNoErrorsInCode('''
 f(Map<int, int> map) {
@@ -63,54 +107,15 @@
 }
 
 @reflectiveTest
-class AmbiguousSetOrMapLiteralBothWithNullSafetyTest
-    extends AmbiguousSetOrMapLiteralBothTest with WithNullSafetyMixin {
-  test_map_keyNonNullable_valueNullable() async {
-    await assertNoErrorsInCode('''
-f(Map<int, int?> map) {
-  return {...map};
-}
-''');
-  }
-
-  test_map_keyNullable_valueNonNullable() async {
-    await assertNoErrorsInCode('''
-f(Map<int?, int> map) {
-  return {...map};
-}
-''');
-  }
-
-  test_map_keyNullable_valueNullable() async {
-    await assertNoErrorsInCode('''
-f(Map<int?, int?> map) {
-  return {...map};
-}
-''');
-  }
-
-  test_set_elementNullable() async {
-    await assertNoErrorsInCode('''
-f(Set<int?> set) {
-  return {...set};
-}
-''');
-  }
-
-  test_setAndMap_nullable() async {
-    await assertErrorsInCode('''
-f(Map<int?, int> map, Set<int?> set) {
-  return {...set, ...map};
-}
-''', [
-      error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH, 48, 16),
-    ]);
-  }
-}
+class AmbiguousSetOrMapLiteralBothWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with AmbiguousSetOrMapLiteralBothTestCases, WithoutNullSafetyMixin {}
 
 @reflectiveTest
 class AmbiguousSetOrMapLiteralEitherTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with AmbiguousSetOrMapLiteralEitherTestCases {}
+
+mixin AmbiguousSetOrMapLiteralEitherTestCases on PubPackageResolutionTest {
   test_invalidPrefixOperator() async {
     // Guard against an exception being thrown.
     await assertErrorsInCode('''
@@ -132,5 +137,6 @@
 }
 
 @reflectiveTest
-class AmbiguousSetOrMapLiteralEitherWithNullSafetyTest
-    extends AmbiguousSetOrMapLiteralEitherTest with WithNullSafetyMixin {}
+class AmbiguousSetOrMapLiteralEitherWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with AmbiguousSetOrMapLiteralEitherTestCases, WithoutNullSafetyMixin {}
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
new file mode 100644
index 0000000..a996659
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ClassInstantiationAccessToMemberTest);
+  });
+}
+
+@reflectiveTest
+class ClassInstantiationAccessToMemberTest extends PubPackageResolutionTest {
+  test_alias() async {
+    await assertErrorsInCode('''
+class A<T> {
+  int i = 1;
+}
+
+typedef TA<T> = A<T>;
+
+var x = TA<int>.i;
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER,
+          60, 9),
+    ]);
+  }
+
+  test_extensionMember() async {
+    await assertErrorsInCode('''
+class A<T> {}
+
+extension E on A {
+  int get i => 1;
+}
+
+var x = A<int>.i;
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER,
+          63, 8),
+    ]);
+  }
+
+  test_instanceMember() async {
+    await assertErrorsInCode('''
+class A<T> {
+  int i = 1;
+}
+
+var x = A<int>.i;
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER,
+          37, 8),
+    ]);
+  }
+
+  test_instanceSetter() async {
+    await assertErrorsInCode('''
+class A<T> {
+  set i(int value) {}
+}
+
+void foo() {
+  A<int>.i = 7;
+}
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER,
+          53, 8),
+    ]);
+  }
+
+  test_staticMember() async {
+    await assertErrorsInCode('''
+class A<T> {
+  static int i = 1;
+}
+
+var x = A<int>.i;
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER,
+          44, 8),
+    ]);
+  }
+
+  test_staticSetter() async {
+    await assertErrorsInCode('''
+class A<T> {
+  static set i(int value) {}
+}
+
+void bar() {
+  A<int>.i = 7;
+}
+''', [
+      error(CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER,
+          60, 8),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
index 0b5cf6e..36adecf 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
@@ -15,7 +15,37 @@
 
 @reflectiveTest
 class ConstConstructorWithNonFinalFieldTest extends PubPackageResolutionTest {
-  test_this_named() async {
+  test_constFactoryNamed_hasNonFinal_redirect() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int x = 0;
+  const factory A.a() = B;
+}
+
+class B implements A {
+  const B();
+  int get x => 0;
+  void set x(_) {}
+}
+''');
+  }
+
+  test_constFactoryUnnamed_hasNonFinal_redirect() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int x = 0;
+  const factory A() = B;
+}
+
+class B implements A {
+  const B();
+  int get x => 0;
+  void set x(_) {}
+}
+''');
+  }
+
+  test_constGenerativeNamed_hasNonFinal() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
@@ -26,7 +56,7 @@
     ]);
   }
 
-  test_this_unnamed() async {
+  test_constGenerativeUnnamed_hasNonFinal() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
index 077c88d..6c17ac2 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
@@ -11,65 +11,47 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConstEvalThrowsExceptionTest);
-    defineReflectiveTests(ConstEvalThrowsExceptionWithNullSafetyTest);
+    defineReflectiveTests(ConstEvalThrowsExceptionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ConstEvalThrowsExceptionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ConstEvalThrowsExceptionTestCases {
-  test_binaryMinus_null() async {
+    with ConstEvalThrowsExceptionTestCases {
+  test_asExpression_typeParameter() async {
     await assertErrorsInCode('''
-const dynamic D = null;
-const C = D - 5;
-''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
-    ]);
-
-    await assertErrorsInCode('''
-const dynamic D = null;
-const C = 5 - D;
-''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
-    ]);
-  }
-
-  test_binaryPlus_null() async {
-    await assertErrorsInCode('''
-const dynamic D = null;
-const C = D + 5;
-''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
-    ]);
-
-    await assertErrorsInCode('''
-const dynamic D = null;
-const C = 5 + D;
-''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
-    ]);
-  }
-
-  test_eqEq_nonPrimitiveRightOperand() async {
-    await assertNoErrorsInCode('''
-const c = const T.eq(1, const Object());
-class T {
-  final Object value;
-  const T.eq(Object o1, Object o2) : value = o1 == o2;
+class C<T> {
+  final t;
+  const C(dynamic x) : t = x as T;
 }
-''');
-  }
-
-  test_fromEnvironment_ifElement() async {
-    await assertNoErrorsInCode('''
-const b = bool.fromEnvironment('foo');
 
 main() {
-  const l1 = [1, 2, 3];
-  const l2 = [if (b) ...l1];
-  print(l2);
+  const C<int>(0);
+  const C<int>('foo');
+  const C<int>(null);
 }
-''');
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 92, 19),
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 115, 18),
+    ]);
+  }
+
+  test_asExpression_typeParameter_nested() async {
+    await assertErrorsInCode('''
+class C<T> {
+  final t;
+  const C(dynamic x) : t = x as List<T>;
+}
+
+main() {
+  const C<int>(<int>[]);
+  const C<int>(<num>[]);
+  const C<int>(null);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 104, 21),
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 129, 18),
+    ]);
   }
 }
 
@@ -393,41 +375,60 @@
 }
 
 @reflectiveTest
-class ConstEvalThrowsExceptionWithNullSafetyTest
-    extends ConstEvalThrowsExceptionTest with WithNullSafetyMixin {
-  test_asExpression_typeParameter() async {
+class ConstEvalThrowsExceptionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, ConstEvalThrowsExceptionTestCases {
+  test_binaryMinus_null() async {
     await assertErrorsInCode('''
-class C<T> {
-  final t;
-  const C(dynamic x) : t = x as T;
-}
-
-main() {
-  const C<int>(0);
-  const C<int>('foo');
-  const C<int>(null);
-}
+const dynamic D = null;
+const C = D - 5;
 ''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 92, 19),
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 115, 18),
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
+    ]);
+
+    await assertErrorsInCode('''
+const dynamic D = null;
+const C = 5 - D;
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
     ]);
   }
 
-  test_asExpression_typeParameter_nested() async {
+  test_binaryPlus_null() async {
     await assertErrorsInCode('''
-class C<T> {
-  final t;
-  const C(dynamic x) : t = x as List<T>;
+const dynamic D = null;
+const C = D + 5;
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
+    ]);
+
+    await assertErrorsInCode('''
+const dynamic D = null;
+const C = 5 + D;
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 34, 5),
+    ]);
+  }
+
+  test_eqEq_nonPrimitiveRightOperand() async {
+    await assertNoErrorsInCode('''
+const c = const T.eq(1, const Object());
+class T {
+  final Object value;
+  const T.eq(Object o1, Object o2) : value = o1 == o2;
 }
+''');
+  }
+
+  test_fromEnvironment_ifElement() async {
+    await assertNoErrorsInCode('''
+const b = bool.fromEnvironment('foo');
 
 main() {
-  const C<int>(<int>[]);
-  const C<int>(<num>[]);
-  const C<int>(null);
+  const l1 = [1, 2, 3];
+  const l2 = [if (b) ...l1];
+  print(l2);
 }
-''', [
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 104, 21),
-      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 129, 18),
-    ]);
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
index f96bfde..85b1174 100644
--- a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConstNotInitializedTest);
-    defineReflectiveTests(ConstNotInitializedWithNullSafetyTest);
+    defineReflectiveTests(ConstNotInitializedWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ConstNotInitializedTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ConstNotInitializedTestCases {}
+
+mixin ConstNotInitializedTestCases on PubPackageResolutionTest {
   test_extension_static() async {
     await assertErrorsInCode('''
 extension E on String {
@@ -57,5 +59,5 @@
 }
 
 @reflectiveTest
-class ConstNotInitializedWithNullSafetyTest extends ConstNotInitializedTest
-    with WithNullSafetyMixin {}
+class ConstNotInitializedWithoutNullSafetyTest extends PubPackageResolutionTest
+    with ConstNotInitializedTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
index 817d86c..5ffb6a3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
@@ -111,7 +111,36 @@
     ]);
   }
 
-  test_spread_list() async {
+  test_spread_intoList_list() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  const A();
+  operator ==(other) => false;
+}
+
+main() {
+  const [...[A()]];
+}
+''');
+  }
+
+  test_spread_intoList_set() async {
+    await assertErrorsInCode(r'''
+class A {
+  const A();
+  operator ==(other) => false;
+}
+
+main() {
+  const [...{A()}];
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS, 79, 3),
+    ]);
+  }
+
+  test_spread_intoSet_list() async {
     await assertErrorsInCode(r'''
 class A {
   const A();
@@ -127,7 +156,7 @@
     ]);
   }
 
-  test_spread_set() async {
+  test_spread_intoSet_set() async {
     await assertErrorsInCode(r'''
 class A {
   const A();
diff --git a/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart b/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
index a305fc4..4dbaeab 100644
--- a/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
@@ -3,6 +3,7 @@
 // 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';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,6 +28,7 @@
 }
 ''', [
       error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 86, 5),
+      error(CompileTimeErrorCode.UNDEFINED_METHOD, 96, 3),
     ]);
   }
 
@@ -42,6 +44,7 @@
 }
 ''', [
       error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 83, 5),
+      error(CompileTimeErrorCode.UNDEFINED_METHOD, 93, 3),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
index cf6fd54..18fe9b0 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
@@ -16,8 +16,7 @@
 @reflectiveTest
 class FfiArrayMultiNonPositiveInput extends PubPackageResolutionTest {
   test_multi() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -32,8 +31,7 @@
   }
 
   test_negative() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -48,8 +46,7 @@
   }
 
   test_non_error() async {
-    await assertNoErrorsInCode(
-'''
+    await assertNoErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -62,8 +59,7 @@
   }
 
   test_zero() async {
-    await assertErrorsInCode(
-'''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart
index 1656f94..d22ab61 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart
@@ -15,6 +15,14 @@
 
 @reflectiveTest
 class IllegalSyncGeneratorReturnTypeTest extends PubPackageResolutionTest {
+  test_arrowFunction_iterator() async {
+    await assertErrorsInCode('''
+Iterable<void> f() sync* => [];
+''', [
+      error(CompileTimeErrorCode.RETURN_IN_GENERATOR, 25, 2),
+    ]);
+  }
+
   test_function_iterator() async {
     await assertNoErrorsInCode('''
 Iterable<void> f() sync* {}
diff --git a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
index 7172e98..01890bb 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
@@ -10,13 +10,23 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImplementsNonClassTest);
-    defineReflectiveTests(ImplementsNonClassWithNullSafetyTest);
+    defineReflectiveTests(ImplementsNonClassWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ImplementsNonClassTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ImplementsNonClassTestCases {
+  test_Never() async {
+    await assertErrorsInCode('''
+class A implements Never {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 19, 5),
+    ]);
+  }
+}
+
+mixin ImplementsNonClassTestCases on PubPackageResolutionTest {
   test_class() async {
     await assertErrorsInCode(r'''
 int A = 7;
@@ -56,13 +66,5 @@
 }
 
 @reflectiveTest
-class ImplementsNonClassWithNullSafetyTest extends ImplementsNonClassTest
-    with WithNullSafetyMixin {
-  test_Never() async {
-    await assertErrorsInCode('''
-class A implements Never {}
-''', [
-      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 19, 5),
-    ]);
-  }
-}
+class ImplementsNonClassWithoutNullSafetyTest extends PubPackageResolutionTest
+    with ImplementsNonClassTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
index 52e2b7c..3818269 100644
--- a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
@@ -10,13 +10,61 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImplicitThisReferenceInInitializerTest);
-    defineReflectiveTests(ImplicitThisReferenceInInitializerWithNullSafetyTest);
+    defineReflectiveTests(
+        ImplicitThisReferenceInInitializerWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ImplicitThisReferenceInInitializerTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ImplicitThisReferenceInInitializerTestCases {
+  test_class_field_late_invokeInstanceMethod() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  late int x = foo();
+  int foo() => 0;
+}
+''');
+  }
+
+  test_class_field_late_invokeStaticMethod() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  late int x = foo();
+  static int foo() => 0;
+}
+''');
+  }
+
+  test_class_field_late_readInstanceField() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int a = 0;
+  late int x = a;
+}
+''');
+  }
+
+  test_class_field_late_readStaticField() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static int a = 0;
+  late int x = a;
+}
+''');
+  }
+
+  test_mixin_field_late_readInstanceField() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int a = 0;
+  late int x = a;
+}
+''');
+  }
+}
+
+mixin ImplicitThisReferenceInInitializerTestCases on PubPackageResolutionTest {
   test_class_field_commentReference_prefixedIdentifier() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -272,50 +320,6 @@
 }
 
 @reflectiveTest
-class ImplicitThisReferenceInInitializerWithNullSafetyTest
-    extends ImplicitThisReferenceInInitializerTest with WithNullSafetyMixin {
-  test_class_field_late_invokeInstanceMethod() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  late int x = foo();
-  int foo() => 0;
-}
-''');
-  }
-
-  test_class_field_late_invokeStaticMethod() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  late int x = foo();
-  static int foo() => 0;
-}
-''');
-  }
-
-  test_class_field_late_readInstanceField() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int a = 0;
-  late int x = a;
-}
-''');
-  }
-
-  test_class_field_late_readStaticField() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static int a = 0;
-  late int x = a;
-}
-''');
-  }
-
-  test_mixin_field_late_readInstanceField() async {
-    await assertNoErrorsInCode(r'''
-mixin M {
-  int a = 0;
-  late int x = a;
-}
-''');
-  }
-}
+class ImplicitThisReferenceInInitializerWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ImplicitThisReferenceInInitializerTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
index 5d374e08..346a895 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
@@ -15,6 +15,22 @@
 
 @reflectiveTest
 class InconsistentInheritanceTest extends PubPackageResolutionTest {
+  /// https://github.com/dart-lang/sdk/issues/47026
+  test_class_covariantInSuper_withTwoUnrelated() async {
+    await assertErrorsInCode('''
+class D1 {}
+class D2 {}
+class D implements D1, D2 {}
+
+class A { void m(covariant D d) {} }
+abstract class B1 { void m(D1 d1); }
+abstract class B2 { void m(D2 d2); }
+class C extends A implements B1, B2 {}
+''', [
+      error(CompileTimeErrorCode.INCONSISTENT_INHERITANCE, 171, 1),
+    ]);
+  }
+
   test_class_parameterType() async {
     await assertErrorsInCode(r'''
 abstract class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
index 4e8d01c..518858a 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
@@ -41,8 +41,11 @@
 class C { const C(int i); }
 @C(a.x) main () {}
 ''', [
-      error(CompileTimeErrorCode
-          .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY, 79, 3),
+      error(
+          CompileTimeErrorCode
+              .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY,
+          79,
+          3),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
index 1eaf99d..78185db 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
@@ -10,13 +10,24 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidConstantTest);
-    defineReflectiveTests(InvalidConstantWithNullSafetyTest);
+    defineReflectiveTests(InvalidConstantWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class InvalidConstantTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with InvalidConstantTestCases {
+  test_in_initializer_field_as() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  final l;
+  const C.test(dynamic x) : l = x as List<T>;
+}
+''');
+  }
+}
+
+mixin InvalidConstantTestCases on PubPackageResolutionTest {
   test_in_initializer_assert_condition() async {
     await assertErrorsInCode('''
 class A {
@@ -164,14 +175,5 @@
 }
 
 @reflectiveTest
-class InvalidConstantWithNullSafetyTest extends InvalidConstantTest
-    with WithNullSafetyMixin {
-  test_in_initializer_field_as() async {
-    await assertNoErrorsInCode('''
-class C<T> {
-  final l;
-  const C.test(dynamic x) : l = x as List<T>;
-}
-''');
-  }
-}
+class InvalidConstantWithoutNullSafetyTest extends PubPackageResolutionTest
+    with InvalidConstantTestCases, WithoutNullSafetyMixin {}
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 7e0de60..a9578f5 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidImplementationOverrideTest);
-    defineReflectiveTests(InvalidImplementationOverrideWithNullSafetyTest);
+    defineReflectiveTests(InvalidImplementationOverrideWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class InvalidImplementationOverrideTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with InvalidImplementationOverrideTestCases {}
+
+mixin InvalidImplementationOverrideTestCases on PubPackageResolutionTest {
   test_getter_abstractOverridesConcrete() async {
     await assertErrorsInCode('''
 class A {
@@ -112,5 +114,6 @@
 }
 
 @reflectiveTest
-class InvalidImplementationOverrideWithNullSafetyTest
-    extends PubPackageResolutionTest with WithNullSafetyMixin {}
+class InvalidImplementationOverrideWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with InvalidImplementationOverrideTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
index 7c37ddd..a411785 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class InvalidNullAwareOperatorAfterShortCircuitTest
-    extends PubPackageResolutionTest with WithNullSafetyMixin {
+    extends PubPackageResolutionTest {
   Future<void> test_getter_previousTarget() async {
     await assertErrorsInCode('''
 void f(String? s) {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
index 2c6d4f1..016d36b 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
@@ -307,8 +307,7 @@
 
 @reflectiveTest
 class InvalidOverrideDifferentDefaultValuesNamedWithNullSafetyTest
-    extends InvalidOverrideDifferentDefaultValuesNamedTest
-    with WithNullSafetyMixin {
+    extends InvalidOverrideDifferentDefaultValuesNamedTest {
   test_concrete_equal_optIn_extends_optOut() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 // @dart = 2.7
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
index c25b8e0..fb62381 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
@@ -322,8 +322,7 @@
 
 @reflectiveTest
 class InvalidOverrideDifferentDefaultValuesPositionalWithNullSafetyTest
-    extends InvalidOverrideDifferentDefaultValuesPositionalTest
-    with WithNullSafetyMixin {
+    extends InvalidOverrideDifferentDefaultValuesPositionalTest {
   test_concrete_equal_optIn_extends_optOut() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 // @dart = 2.7
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
index f58cb1a..b643469 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
@@ -10,13 +10,39 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidReferenceToThisTest);
-    defineReflectiveTests(InvalidReferenceToThisWithNullSafetyTest);
+    defineReflectiveTests(InvalidReferenceToThisWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class InvalidReferenceToThisTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with InvalidReferenceToThisTestCases {
+  test_instanceVariableInitializer_inDeclaration_late() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  late var f = this;
+}
+''');
+  }
+
+  test_mixinVariableInitializer_inDeclaration_late() async {
+    await assertNoErrorsInCode(r'''
+mixin A {
+  late var f = this;
+}
+''');
+  }
+
+  test_variableInitializer_late() async {
+    await assertErrorsInCode('''
+late var x = this;
+''', [
+      error(CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS, 13, 4),
+    ]);
+  }
+}
+
+mixin InvalidReferenceToThisTestCases on PubPackageResolutionTest {
   test_class_constructor() async {
     await assertErrorsInCode(r'''
 class A {
@@ -121,29 +147,6 @@
 }
 
 @reflectiveTest
-class InvalidReferenceToThisWithNullSafetyTest
-    extends InvalidReferenceToThisTest with WithNullSafetyMixin {
-  test_instanceVariableInitializer_inDeclaration_late() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  late var f = this;
-}
-''');
-  }
-
-  test_mixinVariableInitializer_inDeclaration_late() async {
-    await assertNoErrorsInCode(r'''
-mixin A {
-  late var f = this;
-}
-''');
-  }
-
-  test_variableInitializer_late() async {
-    await assertErrorsInCode('''
-late var x = this;
-''', [
-      error(CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS, 13, 4),
-    ]);
-  }
-}
+class InvalidReferenceToThisWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with InvalidReferenceToThisTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart b/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
index abe2d6a..3231737 100644
--- a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LabelUndefinedTest);
-    defineReflectiveTests(LabelUndefinedWithNullSafetyTest);
+    defineReflectiveTests(LabelUndefinedWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class LabelUndefinedTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with LabelUndefinedTestCases {}
+
+mixin LabelUndefinedTestCases on PubPackageResolutionTest {
   test_break() async {
     await assertErrorsInCode(r'''
 f() {
@@ -69,5 +71,5 @@
 }
 
 @reflectiveTest
-class LabelUndefinedWithNullSafetyTest extends LabelUndefinedTest
-    with WithNullSafetyMixin {}
+class LabelUndefinedWithoutNullSafetyTest extends PubPackageResolutionTest
+    with LabelUndefinedTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart
index 4b0b9ba..688771e 100644
--- a/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_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';
 
@@ -61,6 +62,22 @@
 ''');
   }
 
+  test_class_hasConstFactoryConstructor() async {
+    await assertNoErrorsInCode('''
+class Base {
+  Base();
+  const factory Base.empty() = _Empty;
+  late final int property;
+}
+
+class _Empty implements Base {
+  const _Empty();
+  int get property => 0;
+  set property(_) {}
+}
+''');
+  }
+
   test_class_noConstConstructor() async {
     await assertNoErrorsInCode('''
 class A {
@@ -69,4 +86,18 @@
 }
 ''');
   }
+
+  test_inExtension() async {
+    // https://github.com/dart-lang/sdk/issues/46952
+    // This test is here because the code that tests for
+    // LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR is where the referenced issue was
+    // caused.
+    await assertErrorsInCode('''
+extension E on int {
+  late final int i;
+}
+''', [
+      error(ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD, 38, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
index e3523e4..7ea8972 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
@@ -10,13 +10,63 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MissingEnumConstantInSwitchTest);
-    defineReflectiveTests(MissingEnumConstantInSwitchWithNullSafetyTest);
+    defineReflectiveTests(MissingEnumConstantInSwitchWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MissingEnumConstantInSwitchTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with MissingEnumConstantInSwitchTestCases {
+  test_nullable() async {
+    await assertErrorsInCode('''
+enum E { one, two }
+
+void f(E? e) {
+  switch (e) {
+    case E.one:
+    case E.two:
+      break;
+  }
+}
+''', [
+      error(StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH, 38, 10),
+    ]);
+  }
+
+  test_nullable_default() async {
+    await assertNoErrorsInCode('''
+enum E { one, two }
+
+void f(E? e) {
+  switch (e) {
+    case E.one:
+      break;
+    default:
+      break;
+  }
+}
+''');
+  }
+
+  test_nullable_null() async {
+    await assertNoErrorsInCode('''
+enum E { one, two }
+
+void f(E? e) {
+  switch (e) {
+    case E.one:
+      break;
+    case E.two:
+      break;
+    case null:
+      break;
+  }
+}
+''');
+  }
+}
+
+mixin MissingEnumConstantInSwitchTestCases on PubPackageResolutionTest {
   test_default() async {
     await assertNoErrorsInCode('''
 enum E { one, two, three }
@@ -99,53 +149,6 @@
 }
 
 @reflectiveTest
-class MissingEnumConstantInSwitchWithNullSafetyTest
-    extends MissingEnumConstantInSwitchTest with WithNullSafetyMixin {
-  test_nullable() async {
-    await assertErrorsInCode('''
-enum E { one, two }
-
-void f(E? e) {
-  switch (e) {
-    case E.one:
-    case E.two:
-      break;
-  }
-}
-''', [
-      error(StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH, 38, 10),
-    ]);
-  }
-
-  test_nullable_default() async {
-    await assertNoErrorsInCode('''
-enum E { one, two }
-
-void f(E? e) {
-  switch (e) {
-    case E.one:
-      break;
-    default:
-      break;
-  }
-}
-''');
-  }
-
-  test_nullable_null() async {
-    await assertNoErrorsInCode('''
-enum E { one, two }
-
-void f(E? e) {
-  switch (e) {
-    case E.one:
-      break;
-    case E.two:
-      break;
-    case null:
-      break;
-  }
-}
-''');
-  }
-}
+class MissingEnumConstantInSwitchWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with MissingEnumConstantInSwitchTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
index 53935fa..47c9fd2 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
@@ -10,13 +10,23 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MixinOfNonClassTest);
-    defineReflectiveTests(MixinOfNonClassWithNullSafetyTest);
+    defineReflectiveTests(MixinOfNonClassWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MixinOfNonClassTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with MixinOfNonClassTestCases {
+  test_Never() async {
+    await assertErrorsInCode('''
+class A with Never {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 13, 5),
+    ]);
+  }
+}
+
+mixin MixinOfNonClassTestCases on PubPackageResolutionTest {
   test_class() async {
     await assertErrorsInCode(r'''
 int A = 7;
@@ -165,13 +175,5 @@
 }
 
 @reflectiveTest
-class MixinOfNonClassWithNullSafetyTest extends MixinOfNonClassTest
-    with WithNullSafetyMixin {
-  test_Never() async {
-    await assertErrorsInCode('''
-class A with Never {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 13, 5),
-    ]);
-  }
-}
+class MixinOfNonClassWithoutNullSafetyTest extends PubPackageResolutionTest
+    with MixinOfNonClassTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
index 204e614..08db55e 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
@@ -10,18 +10,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MixinSuperClassConstraintNonInterfaceTest);
-    defineReflectiveTests(
-        MixinSuperClassConstraintNonInterfaceWithNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class MixinSuperClassConstraintNonInterfaceTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {}
-
-@reflectiveTest
-class MixinSuperClassConstraintNonInterfaceWithNullSafetyTest
-    extends MixinSuperClassConstraintNonInterfaceTest with WithNullSafetyMixin {
+class MixinSuperClassConstraintNonInterfaceTest
+    extends PubPackageResolutionTest {
   test_Never() async {
     await assertErrorsInCode('''
 mixin M on Never {}
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
index d36da75..d77df25 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NonConstantCaseExpressionTest);
-    defineReflectiveTests(NonConstantCaseExpressionWithNullSafetyTest);
+    defineReflectiveTests(NonConstantCaseExpressionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class NonConstantCaseExpressionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with NonConstantCaseExpressionTestCases {}
+
+mixin NonConstantCaseExpressionTestCases on PubPackageResolutionTest {
   test_constField() async {
     await assertNoErrorsInCode(r'''
 void f(C e) {
@@ -66,5 +68,6 @@
 }
 
 @reflectiveTest
-class NonConstantCaseExpressionWithNullSafetyTest
-    extends NonConstantCaseExpressionTest with WithNullSafetyMixin {}
+class NonConstantCaseExpressionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with NonConstantCaseExpressionTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
index f60e50d..35beee6 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
@@ -79,12 +79,14 @@
   }
 
   test_ifElementWithElse_mayBeConst() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 void main() {
   const isTrue = true;
   const {1: null, if (isTrue) null: null else null: null};
 }
-''');
+''', [
+      error(HintCode.DEAD_CODE, 83, 12),
+    ]);
   }
 
   test_spreadElement_mayBeConst() async {
diff --git a/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart b/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart
index 8d80332..1b75e2d 100644
--- a/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart
@@ -17,7 +17,7 @@
 class NonBinaryOperatorTest extends PubPackageResolutionTest {
   test_unaryTilde() async {
     await assertErrorsInCode('var a = 5 ~ 3;', [
-      error(CompileTimeErrorCode.NOT_BINARY_OPERATOR, 8, 5),
+      error(CompileTimeErrorCode.NOT_BINARY_OPERATOR, 10, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
index c025714..3c008f9 100644
--- a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
@@ -10,13 +10,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NotMapSpreadTest);
-    defineReflectiveTests(NotMapSpreadNullSafetyTest);
+    defineReflectiveTests(NotMapSpreadWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class NotMapSpreadNullSafetyTest extends NotMapSpreadTest
-    with WithNullSafetyMixin {
+class NotMapSpreadTest extends PubPackageResolutionTest
+    with NotMapSpreadTestCases {
   test_map_typeParameter_bound_mapQuestion() async {
     await assertNoErrorsInCode('''
 void f<T extends Map<int, String>?>(T a) {
@@ -27,9 +27,7 @@
   }
 }
 
-@reflectiveTest
-class NotMapSpreadTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+mixin NotMapSpreadTestCases on PubPackageResolutionTest {
   test_map() async {
     await assertNoErrorsInCode('''
 var a = {0: 0};
@@ -100,3 +98,7 @@
     ]);
   }
 }
+
+@reflectiveTest
+class NotMapSpreadWithoutNullSafetyTest extends PubPackageResolutionTest
+    with NotMapSpreadTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index c64b592..a120a6f 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -571,7 +571,7 @@
       findNode.binary('=='),
       element: elementMatcher(
         objectElement.getMethod('=='),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'bool',
     );
@@ -621,7 +621,7 @@
       findNode.simple('toString'),
       element: elementMatcher(
         objectElement.getMethod('toString'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'String Function()',
     );
@@ -638,7 +638,7 @@
       findNode.simple('hashCode'),
       element: elementMatcher(
         objectElement.getGetter('hashCode'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart b/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart
index 748f963..06be63d 100644
--- a/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart
@@ -29,7 +29,6 @@
   return 0;
 }
 ''', [
-      error(CompileTimeErrorCode.RETURN_IN_GENERATOR, 15, 9),
       error(CompileTimeErrorCode.RETURN_IN_GENERATOR, 15, 6),
     ]);
   }
@@ -64,7 +63,6 @@
   return 0;
 }
 ''', [
-      error(CompileTimeErrorCode.RETURN_IN_GENERATOR, 14, 9),
       error(CompileTimeErrorCode.RETURN_IN_GENERATOR, 14, 6),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
index 1e976ed..9a5d8e7 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
@@ -10,13 +10,46 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnOfInvalidTypeForCatchErrorTest);
-    defineReflectiveTests(ReturnOfInvalidTypeForCatchErrorWithNullSafetyTest);
+    defineReflectiveTests(
+        ReturnOfInvalidTypeForCatchErrorWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ReturnOfInvalidTypeForCatchErrorTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ReturnOfInvalidTypeForCatchErrorTestCases {
+  test_nullableType_emptyBody() async {
+    await assertNoErrorsInCode('''
+void f(Future<int?> future) {
+  future.catchError((e, st) {});
+}
+''');
+  }
+
+  test_nullableType_emptyReturn() async {
+    await assertErrorsInCode('''
+void f(Future<int?> future) {
+  future.catchError((e, st) {
+    return;
+  });
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 64, 6),
+    ]);
+  }
+
+  test_nullableType_invalidReturnType() async {
+    await assertErrorsInCode('''
+void f(Future<int?> future) {
+  future.catchError((e, st) => '');
+}
+''', [
+      error(HintCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR, 61, 2),
+    ]);
+  }
+}
+
+mixin ReturnOfInvalidTypeForCatchErrorTestCases on PubPackageResolutionTest {
   test_async_okReturnType() async {
     await assertNoErrorsInCode('''
 void f(Future<int> future) {
@@ -167,35 +200,6 @@
 }
 
 @reflectiveTest
-class ReturnOfInvalidTypeForCatchErrorWithNullSafetyTest
-    extends ReturnOfInvalidTypeForCatchErrorTest with WithNullSafetyMixin {
-  test_nullableType_emptyBody() async {
-    await assertNoErrorsInCode('''
-void f(Future<int?> future) {
-  future.catchError((e, st) {});
-}
-''');
-  }
-
-  test_nullableType_emptyReturn() async {
-    await assertErrorsInCode('''
-void f(Future<int?> future) {
-  future.catchError((e, st) {
-    return;
-  });
-}
-''', [
-      error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 64, 6),
-    ]);
-  }
-
-  test_nullableType_invalidReturnType() async {
-    await assertErrorsInCode('''
-void f(Future<int?> future) {
-  future.catchError((e, st) => '');
-}
-''', [
-      error(HintCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR, 61, 2),
-    ]);
-  }
-}
+class ReturnOfInvalidTypeForCatchErrorWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ReturnOfInvalidTypeForCatchErrorTestCases, WithoutNullSafetyMixin {}
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 ab0bbca..5f7f7cb 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
@@ -11,13 +11,85 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnOfInvalidTypeTest);
     defineReflectiveTests(ReturnOfInvalidTypeWithNoImplicitCastsTest);
-    defineReflectiveTests(ReturnOfInvalidTypeWithNullSafetyTest);
+    defineReflectiveTests(ReturnOfInvalidTypeWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ReturnOfInvalidTypeTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ReturnOfInvalidTypeTestCases {
+  test_function_async_block_int__to_Future_void() async {
+    await assertErrorsInCode(r'''
+Future<void> f() async {
+  return 0;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 34, 1),
+    ]);
+  }
+
+  test_function_async_block_void__to_Future_Null() async {
+    await assertErrorsInCode(r'''
+Future<Null> f(void a) async {
+  return a;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 40, 1),
+    ]);
+  }
+
+  test_function_async_block_void__to_FutureOr_ObjectQ() async {
+    await assertErrorsInCode(r'''
+import 'dart:async';
+
+FutureOr<Object?> f(void a) async {
+  return a;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 67, 1),
+    ]);
+  }
+
+  test_function_async_expression_dynamic__to_Future_int() async {
+    await assertNoErrorsInCode(r'''
+Future<int> f(dynamic a) async => a;
+''');
+  }
+
+  test_functionExpression_async_futureOr_void__to_Object() async {
+    await assertNoErrorsInCode(r'''
+void a = null;
+
+Object Function() f = () async {
+  return a;
+};
+''');
+  }
+
+  test_functionExpression_async_futureQ_void__to_Object() async {
+    await assertNoErrorsInCode(r'''
+Future<void>? a = (throw 0);
+
+Object Function() f = () async {
+  return a;
+};
+''');
+  }
+
+  test_functionExpression_async_void__to_FutureOr_ObjectQ() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+void a = (throw 0);
+
+FutureOr<Object?> Function() f = () async {
+  return a;
+};
+''');
+  }
+}
+
+mixin ReturnOfInvalidTypeTestCases on PubPackageResolutionTest {
   test_closure() async {
     await assertErrorsInCode('''
 typedef Td = int Function();
@@ -340,7 +412,7 @@
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/38162')
   test_method_async_block_callable_class() async {
-    if (isNullSafetySdkAndLegacyLibrary) {
+    if (isLegacyLibrary) {
       throw 'Make it fail for Null Safety as well, for now.';
     }
 
@@ -415,75 +487,5 @@
 }
 
 @reflectiveTest
-class ReturnOfInvalidTypeWithNullSafetyTest extends ReturnOfInvalidTypeTest
-    with WithNullSafetyMixin {
-  test_function_async_block_int__to_Future_void() async {
-    await assertErrorsInCode(r'''
-Future<void> f() async {
-  return 0;
-}
-''', [
-      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 34, 1),
-    ]);
-  }
-
-  test_function_async_block_void__to_Future_Null() async {
-    await assertErrorsInCode(r'''
-Future<Null> f(void a) async {
-  return a;
-}
-''', [
-      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 40, 1),
-    ]);
-  }
-
-  test_function_async_block_void__to_FutureOr_ObjectQ() async {
-    await assertErrorsInCode(r'''
-import 'dart:async';
-
-FutureOr<Object?> f(void a) async {
-  return a;
-}
-''', [
-      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 67, 1),
-    ]);
-  }
-
-  test_function_async_expression_dynamic__to_Future_int() async {
-    await assertNoErrorsInCode(r'''
-Future<int> f(dynamic a) async => a;
-''');
-  }
-
-  test_functionExpression_async_futureOr_void__to_Object() async {
-    await assertNoErrorsInCode(r'''
-void a = null;
-
-Object Function() f = () async {
-  return a;
-};
-''');
-  }
-
-  test_functionExpression_async_futureQ_void__to_Object() async {
-    await assertNoErrorsInCode(r'''
-Future<void>? a = (throw 0);
-
-Object Function() f = () async {
-  return a;
-};
-''');
-  }
-
-  test_functionExpression_async_void__to_FutureOr_ObjectQ() async {
-    await assertNoErrorsInCode(r'''
-import 'dart:async';
-
-void a = (throw 0);
-
-FutureOr<Object?> Function() f = () async {
-  return a;
-};
-''');
-  }
-}
+class ReturnOfInvalidTypeWithoutNullSafetyTest extends PubPackageResolutionTest
+    with ReturnOfInvalidTypeTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
index fd534d0..b5a19e8 100644
--- a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
@@ -10,13 +10,25 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnTypeInvalidForCatchErrorTest);
-    defineReflectiveTests(ReturnTypeInvalidForCatchErrorWithNullSafetyTest);
+    defineReflectiveTests(ReturnTypeInvalidForCatchErrorWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ReturnTypeInvalidForCatchErrorTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ReturnTypeInvalidForCatchErrorTestCases {
+  test_nullableReturnType() async {
+    await assertErrorsInCode('''
+void f(Future<int> future, String? Function(dynamic, StackTrace) cb) {
+  future.catchError(cb);
+}
+''', [
+      error(HintCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR, 91, 2),
+    ]);
+  }
+}
+
+mixin ReturnTypeInvalidForCatchErrorTestCases on PubPackageResolutionTest {
   test_dynamic_returnTypeIsUnrelatedFuture() async {
     await assertNoErrorsInCode('''
 void f(
@@ -87,15 +99,6 @@
 }
 
 @reflectiveTest
-class ReturnTypeInvalidForCatchErrorWithNullSafetyTest
-    extends ReturnTypeInvalidForCatchErrorTest with WithNullSafetyMixin {
-  test_nullableReturnType() async {
-    await assertErrorsInCode('''
-void f(Future<int> future, String? Function(dynamic, StackTrace) cb) {
-  future.catchError(cb);
-}
-''', [
-      error(HintCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR, 91, 2),
-    ]);
-  }
-}
+class ReturnTypeInvalidForCatchErrorWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with ReturnTypeInvalidForCatchErrorTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
index f90e7e6..b6149bb 100644
--- a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnWithoutValueTest);
-    defineReflectiveTests(ReturnWithoutValueWithNullSafetyTest);
+    defineReflectiveTests(ReturnWithoutValueWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ReturnWithoutValueTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with ReturnWithoutValueTestCases {}
+
+mixin ReturnWithoutValueTestCases on PubPackageResolutionTest {
   test_async_futureInt() async {
     await assertErrorsInCode('''
 Future<int> f() async {
@@ -163,5 +165,5 @@
 }
 
 @reflectiveTest
-class ReturnWithoutValueWithNullSafetyTest extends ReturnWithoutValueTest
-    with WithNullSafetyMixin {}
+class ReturnWithoutValueWithoutNullSafetyTest extends PubPackageResolutionTest
+    with ReturnWithoutValueTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
index 4773eae..ad2aa2d 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
@@ -11,25 +11,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SdkVersionNeverTest);
-    defineReflectiveTests(SdkVersionNeverWithNullSafetyTest);
+    defineReflectiveTests(SdkVersionNeverWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class SdkVersionNeverTest extends SdkConstraintVerifierTest
-    with WithoutNullSafetyMixin {
-  test_languageVersionBeforeNullSafety() async {
-    await verifyVersion('2.7.0', r'''
-Never foo;
-''', expectedErrors: [
-      error(HintCode.SDK_VERSION_NEVER, 0, 5),
-    ]);
-  }
-}
-
-@reflectiveTest
-class SdkVersionNeverWithNullSafetyTest extends SdkConstraintVerifierTest
-    with WithNullSafetyMixin {
+class SdkVersionNeverTest extends SdkConstraintVerifierTest {
   test_experimentEnabled() async {
     await verifyVersion('2.7.0', r'''
 Never foo = (throw 42);
@@ -45,3 +32,15 @@
     ]);
   }
 }
+
+@reflectiveTest
+class SdkVersionNeverWithoutNullSafetyTest extends SdkConstraintVerifierTest
+    with WithoutNullSafetyMixin {
+  test_languageVersionBeforeNullSafety() async {
+    await verifyVersion('2.7.0', r'''
+Never foo;
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_NEVER, 0, 5),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart b/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart
new file mode 100644
index 0000000..39265e5
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart
@@ -0,0 +1,104 @@
+// 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:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TearoffOfGenerativeConstructorOfAbstractClassTest);
+  });
+}
+
+@reflectiveTest
+class TearoffOfGenerativeConstructorOfAbstractClassTest
+    extends PubPackageResolutionTest {
+  test_abstractClass_factoryConstructor() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  factory A() => B();
+}
+
+class B implements A {}
+
+void foo() {
+  A.new;
+}
+''');
+  }
+
+  test_abstractClass_factoryConstructor_viaEquals() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  factory A() = B;
+}
+
+class B implements A {}
+
+void foo() {
+  A.new;
+}
+''');
+  }
+
+  test_abstractClass_generativeConstructor() async {
+    await assertErrorsInCode('''
+abstract class A {
+  A();
+}
+
+void foo() {
+  A.new;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
+          44,
+          5),
+    ]);
+  }
+
+  test_concreteClass_factoryConstructor() async {
+    await assertNoErrorsInCode('''
+class A {
+  factory A() => A.two();
+
+  A.two();
+}
+
+void foo() {
+  A.new;
+}
+''');
+  }
+
+  test_concreteClass_factoryConstructor_viaEquals() async {
+    await assertNoErrorsInCode('''
+class A {
+  factory A() = A.two;
+
+  A.two();
+}
+
+void foo() {
+  A.new;
+}
+''');
+  }
+
+  test_concreteClass_generativeConstructor() async {
+    await assertNoErrorsInCode('''
+class A {
+  A();
+}
+
+void foo() {
+  A.new;
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 49fbffe..81c9971 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -57,6 +57,8 @@
 import 'case_expression_type_is_not_switch_expression_subtype_test.dart'
     as case_expression_type_is_not_switch_expression_subtype;
 import 'cast_to_non_type_test.dart' as cast_to_non_type;
+import 'class_instantiation_access_to_member_test.dart'
+    as class_instantiation_access_to_member;
 import 'concrete_class_with_abstract_member_test.dart'
     as concrete_class_with_abstract_member;
 import 'conflicting_generic_interfaces_test.dart'
@@ -628,6 +630,8 @@
     as switch_case_completes_normally;
 import 'switch_expression_not_assignable_test.dart'
     as switch_expression_not_assignable;
+import 'tearoff_of_generative_constructor_of_abstract_class_test.dart'
+    as tearoff_of_generative_constructor_of_abstract_class;
 import 'throw_of_invalid_type_test.dart' as throw_of_invalid_type;
 import 'todo_test.dart' as todo_test;
 import 'top_level_cycle_test.dart' as top_level_cycle;
@@ -667,6 +671,8 @@
 import 'undefined_named_parameter_test.dart' as undefined_named_parameter;
 import 'undefined_operator_test.dart' as undefined_operator;
 import 'undefined_prefixed_name_test.dart' as undefined_prefixed_name;
+import 'undefined_referenced_parameter_test.dart'
+    as undefined_referenced_parameter;
 import 'undefined_setter_test.dart' as undefined_setter;
 import 'undefined_shown_name_test.dart' as undefined_shown_name;
 import 'unignorable_ignore_test.dart' as unignorable_ignore;
@@ -754,6 +760,7 @@
     case_expression_type_implements_equals.main();
     case_expression_type_is_not_switch_expression_subtype.main();
     cast_to_non_type.main();
+    class_instantiation_access_to_member.main();
     concrete_class_with_abstract_member.main();
     conflicting_generic_interfaces.main();
     conflicting_static_and_instance.main();
@@ -1127,6 +1134,7 @@
     super_initializer_in_object.main();
     switch_case_completes_normally.main();
     switch_expression_not_assignable.main();
+    tearoff_of_generative_constructor_of_abstract_class.main();
     throw_of_invalid_type.main();
     todo_test.main();
     top_level_cycle.main();
@@ -1158,6 +1166,7 @@
     undefined_named_parameter.main();
     undefined_operator.main();
     undefined_prefixed_name.main();
+    undefined_referenced_parameter.main();
     undefined_setter.main();
     undefined_shown_name.main();
     unignorable_ignore.main();
diff --git a/pkg/analyzer/test/src/diagnostics/todo_test.dart b/pkg/analyzer/test/src/diagnostics/todo_test.dart
index f61b675..a72d8b3 100644
--- a/pkg/analyzer/test/src/diagnostics/todo_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/todo_test.dart
@@ -15,6 +15,26 @@
 
 @reflectiveTest
 class TodoTest extends PubPackageResolutionTest {
+  test_fixme() async {
+    await assertErrorsInCode(r'''
+main() {
+  // FIXME: Implement
+}
+''', [
+      error(TodoCode.FIXME, 14, 16, text: 'FIXME: Implement'),
+    ]);
+  }
+
+  test_hack() async {
+    await assertErrorsInCode(r'''
+main() {
+  // HACK: This is a hack
+}
+''', [
+      error(TodoCode.HACK, 14, 20, text: 'HACK: This is a hack'),
+    ]);
+  }
+
   test_todo_multiLineComment() async {
     await assertErrorsInCode(r'''
 main() {
@@ -162,4 +182,14 @@
           text: 'TODO: Implement something that is too long for one line'),
     ]);
   }
+
+  test_undone() async {
+    await assertErrorsInCode(r'''
+main() {
+  // UNDONE: This was undone
+}
+''', [
+      error(TodoCode.UNDONE, 14, 23, text: 'UNDONE: This was undone'),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
index 001d947..fdfa182 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
@@ -10,13 +10,16 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeParameterSupertypeOfItsBoundTest);
-    defineReflectiveTests(TypeParameterSupertypeOfItsBoundWithNullSafetyTest);
+    defineReflectiveTests(
+        TypeParameterSupertypeOfItsBoundWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class TypeParameterSupertypeOfItsBoundTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with TypeParameterSupertypeOfItsBoundTestCases {}
+
+mixin TypeParameterSupertypeOfItsBoundTestCases on PubPackageResolutionTest {
   test_1of1() async {
     await assertErrorsInCode(r'''
 class A<T extends T> {
@@ -50,5 +53,6 @@
 }
 
 @reflectiveTest
-class TypeParameterSupertypeOfItsBoundWithNullSafetyTest
-    extends TypeParameterSupertypeOfItsBoundTest with WithNullSafetyMixin {}
+class TypeParameterSupertypeOfItsBoundWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with TypeParameterSupertypeOfItsBoundTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 193e74a..cb85d4f 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -441,4 +441,88 @@
 int f() => A.x;
 ''');
   }
+
+  test_new_cascade() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c..new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_dynamic() async {
+    await assertErrorsInCode('''
+f(dynamic d) {
+  d.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 19, 3),
+    ]);
+  }
+
+  test_new_expression() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c1, C c2) {
+  (c1 ?? c2).new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
+    ]);
+  }
+
+  test_new_nullAware() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c?.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_prefixedIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+abstract class D {
+  C get c;
+}
+
+f(D d) {
+  d.c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 3),
+    ]);
+  }
+
+  test_new_simpleIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C c) {
+  c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 25, 3),
+    ]);
+  }
+
+  test_new_typeVariable() async {
+    await assertErrorsInCode('''
+f<T>(T t) {
+  t.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 16, 3),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
index 6fcfad3..cf1eba2 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedHiddenNameTest);
-    defineReflectiveTests(UndefinedHiddenNameWithNullSafetyTest);
+    defineReflectiveTests(UndefinedHiddenNameWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UndefinedHiddenNameTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with UndefinedHiddenNameTestCases {}
+
+mixin UndefinedHiddenNameTestCases on PubPackageResolutionTest {
   test_export() async {
     newFile('$testPackageLibPath/lib1.dart');
     await assertErrorsInCode(r'''
@@ -38,5 +40,5 @@
 }
 
 @reflectiveTest
-class UndefinedHiddenNameWithNullSafetyTest extends UndefinedHiddenNameTest
-    with WithNullSafetyMixin {}
+class UndefinedHiddenNameWithoutNullSafetyTest extends PubPackageResolutionTest
+    with UndefinedHiddenNameTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index d5538cc..c484dd0 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -11,13 +11,38 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedIdentifierTest);
-    defineReflectiveTests(UndefinedIdentifierWithNullSafetyTest);
+    defineReflectiveTests(UndefinedIdentifierWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UndefinedIdentifierTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with UndefinedIdentifierTestCases {
+  test_get_from_external_variable_final_valid() async {
+    await assertNoErrorsInCode('''
+external final int x;
+int f() => x;
+''');
+  }
+
+  test_get_from_external_variable_valid() async {
+    await assertNoErrorsInCode('''
+external int x;
+int f() => x;
+''');
+  }
+
+  test_set_external_variable_valid() async {
+    await assertNoErrorsInCode('''
+external int x;
+void f(int value) {
+  x = value;
+}
+''');
+  }
+}
+
+mixin UndefinedIdentifierTestCases on PubPackageResolutionTest {
   test_annotation_references_static_method_in_class() async {
     await assertErrorsInCode('''
 @Annotation(foo)
@@ -33,6 +58,22 @@
     ]);
   }
 
+  test_annotation_references_static_method_in_class_from_type_parameter() async {
+    // It not is allowed for an annotation of a class type parameter to refer to
+    // a method in a class.
+    await assertErrorsInCode('''
+class C<@Annotation(foo) T> {
+  static void foo() {}
+}
+class Annotation {
+  const Annotation(dynamic d);
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 20, 3),
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 20, 3),
+    ]);
+  }
+
   test_annotation_references_static_method_in_extension() async {
     await assertErrorsInCode('''
 @Annotation(foo)
@@ -48,6 +89,22 @@
     ]);
   }
 
+  test_annotation_references_static_method_in_extension_from_type_parameter() async {
+    // It is not allowed for an annotation of an extension type parameter to
+    // refer to a method in a class.
+    await assertErrorsInCode('''
+extension E<@Annotation(foo) T> on T {
+  static void foo() {}
+}
+class Annotation {
+  const Annotation(dynamic d);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 24, 3),
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 24, 3),
+    ]);
+  }
+
   test_annotation_references_static_method_in_mixin() async {
     await assertErrorsInCode('''
 @Annotation(foo)
@@ -63,6 +120,83 @@
     ]);
   }
 
+  test_annotation_references_static_method_in_mixin_from_type_parameter() async {
+    // It is not allowed for an annotation of a mixin type parameter to refer to
+    // a method in a class.
+    await assertErrorsInCode('''
+mixin M<@Annotation(foo) T> {
+  static void foo() {}
+}
+class Annotation {
+  const Annotation(dynamic d);
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 20, 3),
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 20, 3),
+    ]);
+  }
+
+  test_annotation_uses_scope_resolution_class() async {
+    // If an annotation on a class type parameter cannot be resolved using the
+    // normal scope resolution mechanism, it is not resolved via implicit
+    // `this`.
+    await assertErrorsInCode('''
+class C<@Annotation.function(foo) @Annotation.type(B) T> {
+  static void foo() {}
+  static void B() {}
+}
+class B {}
+class Annotation {
+  const Annotation.function(void Function() f);
+  const Annotation.type(Type t);
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 29, 3),
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 29, 3),
+    ]);
+  }
+
+  test_annotation_uses_scope_resolution_extension() async {
+    // If an annotation on an extension type parameter cannot be resolved using
+    // the normal scope resolution mechanism, it is not resolved via implicit
+    // `this`.
+    await assertErrorsInCode('''
+extension E<@Annotation.function(foo) @Annotation.type(B) T> on C {}
+class C {
+  static void foo() {}
+  static void B() {}
+}
+class B {}
+class Annotation {
+  const Annotation.function(void Function() f);
+  const Annotation.type(Type t);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 33, 3),
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 33, 3),
+    ]);
+  }
+
+  test_annotation_uses_scope_resolution_mixin() async {
+    // If an annotation on a mixin type parameter cannot be resolved using the
+    // normal scope resolution mechanism, it is not resolved via implicit
+    // `this`.
+    await assertErrorsInCode('''
+mixin M<@Annotation.function(foo) @Annotation.type(B) T> {
+  static void foo() {}
+  static void B() {}
+}
+class B {}
+class Annotation {
+  const Annotation.function(void Function() f);
+  const Annotation.type(Type t);
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 29, 3),
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 29, 3),
+    ]);
+  }
+
   @failingTest
   test_commentReference() async {
     await assertErrorsInCode('''
@@ -297,28 +431,5 @@
 }
 
 @reflectiveTest
-class UndefinedIdentifierWithNullSafetyTest extends UndefinedIdentifierTest
-    with WithNullSafetyMixin {
-  test_get_from_external_variable_final_valid() async {
-    await assertNoErrorsInCode('''
-external final int x;
-int f() => x;
-''');
-  }
-
-  test_get_from_external_variable_valid() async {
-    await assertNoErrorsInCode('''
-external int x;
-int f() => x;
-''');
-  }
-
-  test_set_external_variable_valid() async {
-    await assertNoErrorsInCode('''
-external int x;
-void f(int value) {
-  x = value;
-}
-''');
-  }
-}
+class UndefinedIdentifierWithoutNullSafetyTest extends PubPackageResolutionTest
+    with UndefinedIdentifierTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
index 87cafbf..e9c6092 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
@@ -25,6 +25,18 @@
     ]);
   }
 
+  test_new() async {
+    newFile('$testPackageLibPath/lib.dart', content: '');
+    await assertErrorsInCode(r'''
+import 'lib.dart' as p;
+void f() {
+  p.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 39, 3),
+    ]);
+  }
+
   test_setterContext() async {
     newFile('$testPackageLibPath/lib.dart');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart
new file mode 100644
index 0000000..c34634c
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart
@@ -0,0 +1,58 @@
+// 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:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedReferencedParameterTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedReferencedParameterTest extends PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    writeTestPackageConfigWithMeta();
+  }
+
+  test_method() async {
+    await assertErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+class Foo {
+  @UseResult.unless(parameterDefined: 'undef')
+  int foo([int? value]) => value ?? 0;
+}
+''', [
+      error(HintCode.UNDEFINED_REFERENCED_PARAMETER, 84, 7),
+    ]);
+  }
+
+  test_method_parameterDefined() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+class Foo {
+  @UseResult.unless(parameterDefined: 'value')
+  int foo([int? value]) => value ?? 0;
+}
+''');
+  }
+
+  test_topLevelFunction() async {
+    await assertErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@UseResult.unless(parameterDefined: 'undef')
+int foo([int? value]) => value ?? 0;
+''', [
+      error(HintCode.UNDEFINED_REFERENCED_PARAMETER, 70, 7),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index 65ba939..d1674c6 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -143,6 +143,74 @@
 @reflectiveTest
 class UndefinedSetterWithNullSafetyTest extends PubPackageResolutionTest
     with UndefinedSetterTestCases {
+  test_new_cascade() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c..new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 27, 3),
+    ]);
+  }
+
+  test_new_dynamic() async {
+    await assertErrorsInCode('''
+f(dynamic d) {
+  d.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 19, 3),
+    ]);
+  }
+
+  test_new_instance() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C c) {
+  c.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 25, 3),
+    ]);
+  }
+
+  test_new_interfaceType() async {
+    await assertErrorsInCode('''
+class C {}
+
+f() {
+  C.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 22, 3),
+    ]);
+  }
+
+  test_new_nullAware() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c?.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 27, 3),
+    ]);
+  }
+
+  test_new_typeVariable() async {
+    await assertErrorsInCode('''
+f<T>(T t) {
+  t.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 16, 3),
+    ]);
+  }
+
   test_set_abstract_field_valid() async {
     await assertNoErrorsInCode('''
 abstract class A {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
index ea89f9a..f486367 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedShownNameTest);
-    defineReflectiveTests(UndefinedShownNameWithNullSafetyTest);
+    defineReflectiveTests(UndefinedShownNameWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UndefinedShownNameTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with UndefinedShownNameTestCases {}
+
+mixin UndefinedShownNameTestCases on PubPackageResolutionTest {
   test_export() async {
     newFile('$testPackageLibPath/lib1.dart');
     await assertErrorsInCode(r'''
@@ -38,5 +40,5 @@
 }
 
 @reflectiveTest
-class UndefinedShownNameWithNullSafetyTest extends UndefinedShownNameTest
-    with WithNullSafetyMixin {}
+class UndefinedShownNameWithoutNullSafetyTest extends PubPackageResolutionTest
+    with UndefinedShownNameTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
index 337484e..0f8bb36 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
@@ -25,7 +25,7 @@
     await assertErrorsInCode('''
 dynamic? a;
 ''', [
-      error(HintCode.UNNECESSARY_QUESTION_MARK, 0, 8),
+      error(HintCode.UNNECESSARY_QUESTION_MARK, 7, 1),
     ]);
   }
 
@@ -39,7 +39,7 @@
     await assertErrorsInCode('''
 Null? a;
 ''', [
-      error(HintCode.UNNECESSARY_QUESTION_MARK, 0, 5),
+      error(HintCode.UNNECESSARY_QUESTION_MARK, 4, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index 65e5479..fef92e8 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
@@ -10,15 +10,36 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UnnecessaryTypeCheckFalseTest);
-    defineReflectiveTests(UnnecessaryTypeCheckFalseWithNullSafetyTest);
+    defineReflectiveTests(UnnecessaryTypeCheckFalseWithoutNullSafetyTest);
     defineReflectiveTests(UnnecessaryTypeCheckTrueTest);
-    defineReflectiveTests(UnnecessaryTypeCheckTrueWithNullSafetyTest);
+    defineReflectiveTests(UnnecessaryTypeCheckTrueWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UnnecessaryTypeCheckFalseTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with UnnecessaryTypeCheckFalseTestCases {
+  @override
+  test_type_not_object() async {
+    await assertNoErrorsInCode(r'''
+void f<T>(T a) {
+  a is! Object;
+}
+''');
+  }
+
+  test_type_not_objectQuestion() async {
+    await assertErrorsInCode(r'''
+void f<T>(T a) {
+  a is! Object?;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 13),
+    ]);
+  }
+}
+
+mixin UnnecessaryTypeCheckFalseTestCases on PubPackageResolutionTest {
   test_null_not_Null() async {
     await assertErrorsInCode(r'''
 var b = null is! Null;
@@ -49,31 +70,34 @@
 }
 
 @reflectiveTest
-class UnnecessaryTypeCheckFalseWithNullSafetyTest
-    extends UnnecessaryTypeCheckFalseTest with WithNullSafetyMixin {
+class UnnecessaryTypeCheckFalseWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with UnnecessaryTypeCheckFalseTestCases, WithoutNullSafetyMixin {}
+
+@reflectiveTest
+class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest
+    with UnnecessaryTypeCheckTrueTestCases {
   @override
-  test_type_not_object() async {
+  test_type_is_object() async {
     await assertNoErrorsInCode(r'''
 void f<T>(T a) {
-  a is! Object;
+  a is Object;
 }
 ''');
   }
 
-  test_type_not_objectQuestion() async {
+  test_type_is_objectQuestion() async {
     await assertErrorsInCode(r'''
 void f<T>(T a) {
-  a is! Object?;
+  a is Object?;
 }
 ''', [
-      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 13),
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 12),
     ]);
   }
 }
 
-@reflectiveTest
-class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+mixin UnnecessaryTypeCheckTrueTestCases on PubPackageResolutionTest {
   test_null_is_Null() async {
     await assertErrorsInCode(r'''
 var b = null is Null;
@@ -104,24 +128,6 @@
 }
 
 @reflectiveTest
-class UnnecessaryTypeCheckTrueWithNullSafetyTest
-    extends UnnecessaryTypeCheckTrueTest with WithNullSafetyMixin {
-  @override
-  test_type_is_object() async {
-    await assertNoErrorsInCode(r'''
-void f<T>(T a) {
-  a is Object;
-}
-''');
-  }
-
-  test_type_is_objectQuestion() async {
-    await assertErrorsInCode(r'''
-void f<T>(T a) {
-  a is Object?;
-}
-''', [
-      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 12),
-    ]);
-  }
-}
+class UnnecessaryTypeCheckTrueWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with UnnecessaryTypeCheckTrueTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
index 0a0a134..02a7888 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
@@ -553,6 +553,21 @@
     ]);
   }
 
+  test_method_result_unassigned_parameterDefined() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+class A {
+  @UseResult.unless(parameterDefined: 'value')
+  int foo([int? value]) => value ?? 0;
+}
+
+void main() {
+  A().foo(3);
+}
+''');
+  }
+
   test_topLevelFunction_result_assigned() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -581,6 +596,19 @@
 ''');
   }
 
+  test_topLevelFunction_result_optionNamedParam_unassigned_parameterDefined() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@UseResult.unless(parameterDefined: 'value')
+int foo({int? value}) => value ?? 0;
+
+void main() {
+  foo(value: 3);
+}
+''');
+  }
+
   test_topLevelFunction_result_passed() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -654,6 +682,49 @@
     ]);
   }
 
+  test_topLevelFunction_result_unassigned_parameterDefined() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@UseResult.unless(parameterDefined: 'value')
+int foo([int? value]) => value ?? 0;
+
+void main() {
+  foo(3);
+}
+''');
+  }
+
+  test_topLevelFunction_result_unassigned_parameterUnDefined() async {
+    await assertErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@UseResult.unless(parameterDefined: 'value')
+int foo([int? value]) => value ?? 0;
+
+void main() {
+  foo();
+}
+''', [
+      error(HintCode.UNUSED_RESULT, 133, 3),
+    ]);
+  }
+
+  test_topLevelFunction_result_unassigned_parameterUnDefined2() async {
+    await assertErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@UseResult.unless(parameterDefined: 'value')
+int foo([String? msg, int? value]) => value ?? 0;
+
+void main() {
+  foo('none');
+}
+''', [
+      error(HintCode.UNUSED_RESULT, 146, 3),
+    ]);
+  }
+
   test_topLevelVariable_assigned() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
index 64accd6..8eec4b2 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
@@ -505,7 +505,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -518,7 +518,7 @@
       writeType: 'int?',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -561,7 +561,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int?',
     );
@@ -574,7 +574,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -608,7 +608,7 @@
       writeType: 'int',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
@@ -621,7 +621,7 @@
       writeType: 'int?',
       operatorElement: elementMatcher(
         numElement.getMethod('+'),
-        isLegacy: isNullSafetySdkAndLegacyLibrary,
+        isLegacy: isLegacyLibrary,
       ),
       type: 'int',
     );
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
index d743c6e..bb50f9a 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
@@ -123,8 +123,6 @@
   (1 == 2 ? foo : bar)<int>;
 }
 ''', [
-      error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 60,
-          20),
       error(
           CompileTimeErrorCode
               .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
diff --git a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
index 072b733..ddb8c9c 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
@@ -10,13 +10,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(YieldOfInvalidTypeTest);
-    defineReflectiveTests(YieldOfInvalidTypeWithNullSafetyTest);
+    defineReflectiveTests(YieldOfInvalidTypeWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class YieldOfInvalidTypeTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+    with YieldOfInvalidTypeTestCases {}
+
+mixin YieldOfInvalidTypeTestCases on PubPackageResolutionTest {
   test_none_asyncStar_dynamic_to_streamInt() async {
     await assertErrorsInCode(
         '''
@@ -448,5 +450,5 @@
 }
 
 @reflectiveTest
-class YieldOfInvalidTypeWithNullSafetyTest extends YieldOfInvalidTypeTest
-    with WithNullSafetyMixin {}
+class YieldOfInvalidTypeWithoutNullSafetyTest extends PubPackageResolutionTest
+    with YieldOfInvalidTypeTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
index cee7219..b0fcd73 100644
--- a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
@@ -571,10 +571,10 @@
   int f;
   C(this);
 }
-''', [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_IDENTIFIER], '''
+''', [ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD], '''
 class C {
   int f;
-  C(this._s_);
+  C(_k_);
 }
 ''');
   }
@@ -585,10 +585,10 @@
   int f;
   C(this, p);
 }
-''', [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_IDENTIFIER], '''
+''', [ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD], '''
 class C {
   int f;
-  C(this._s_, p);
+  C(_k_, p);
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart
index bd6536c..ce5ac6d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart
@@ -49,13 +49,9 @@
               'typedef T =',
               [
                 ParserErrorCode.EXPECTED_TYPE_NAME,
-                ParserErrorCode.EXPECTED_TOKEN,
-                ParserErrorCode.EXPERIMENT_NOT_ENABLED
+                ParserErrorCode.EXPECTED_TOKEN
               ],
               "typedef T = _s_;",
-              expectedErrorsInValidCode: [
-                ParserErrorCode.EXPERIMENT_NOT_ENABLED
-              ],
               failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin']),
         ],
         PartialCodeTest.declarationSuffixes);
diff --git a/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart b/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
index cad0dfb..5194dc4 100644
--- a/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/recovery_test_support.dart
@@ -133,6 +133,9 @@
       if (first.isSynthetic && second.name == '_s_') {
         return true;
       }
+      if (first.token.isKeyword && second.name == '_k_') {
+        return true;
+      }
     }
     return super.isEqualNodes(first, second);
   }
diff --git a/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart b/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
index 036ee36..0520a63 100644
--- a/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
@@ -68,6 +68,38 @@
     _checkGetterDifferent(import.topSet('foo'));
   }
 
+  test_class_getter_fromExtends_blockBody() async {
+    await resolve('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  void bar(int foo) {
+    this.foo;
+  }
+}
+''');
+    _checkGetterRequested(
+      findElement.parameter('foo'),
+    );
+  }
+
+  test_class_getter_fromExtends_expressionBody() async {
+    await resolve('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  void bar(int foo) => this.foo;
+}
+''');
+    _checkGetterRequested(
+      findElement.parameter('foo'),
+    );
+  }
+
   test_class_getter_none_fromExtends() async {
     await resolve('''
 class A {
@@ -408,6 +440,16 @@
     _checkMethodRequested(findElement.typeParameter('foo'));
   }
 
+  test_class_method_typeParameter() async {
+    await resolve('''
+class A {
+  void foo<T>(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
   test_class_setter_different_formalParameter_constructor() async {
     await resolve('''
 class A {
@@ -538,6 +580,46 @@
     _checkSetterRequested(findElement.setter('foo'));
   }
 
+  test_class_typeParameter_inConstructor() async {
+    await resolve('''
+class A<T> {
+  A(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_class_typeParameter_inField() async {
+    await resolve('''
+class A<T> {
+  T? a;
+}
+''');
+    var node = findNode.simple('T?');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_class_typeParameter_inMethod() async {
+    await resolve('''
+class A<T> {
+  void foo(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_class_typeParameter_inSetter() async {
+    await resolve('''
+class A<T> {
+  set foo(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
   test_extension_method_none_fromExtended() async {
     await resolve('''
 class A {
@@ -608,6 +690,41 @@
     _checkMethodRequested(findElement.method('foo'));
   }
 
+  test_extension_typeParameter_inMethod() async {
+    await resolve('''
+extension E<T> on int {
+  void foo(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_function_typeParameter() async {
+    await resolve('''
+void foo<T>(int T) {}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_genericFunctionType_typeParameter() async {
+    await resolve('''
+void foo(void Function<T>(String T) b) {}
+''');
+    var node = findNode.simple('T)');
+    var T = findNode.typeParameter('T>').declaredElement!;
+    _resultRequested(node, 'T', false, T);
+  }
+
+  test_genericTypeAlias_typeParameter() async {
+    await resolve('''
+typedef A<T> = List<T>;
+''');
+    var node = findNode.simple('T>;');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
   test_mixin_method_requested_formalParameter_method() async {
     await resolve('''
 mixin M {
@@ -634,6 +751,26 @@
     _checkMethodRequested(findElement.method('foo'));
   }
 
+  test_mixin_typeParameter_inField() async {
+    await resolve('''
+mixin A<T> {
+  T? a;
+}
+''');
+    var node = findNode.simple('T?');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
+  test_mixin_typeParameter_inMethod() async {
+    await resolve('''
+mixin A<T> {
+  void foo(int T) {}
+}
+''');
+    var node = findNode.simple('T)');
+    _resultRequested(node, 'T', false, findElement.typeParameter('T'));
+  }
+
   void _checkGetterDifferent(Element expected) {
     var node = findNode.this_('this.foo;');
     _resultDifferent(node, 'foo', false, expected);
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index a939f53..5c4c599 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -2537,6 +2537,61 @@
     );
   }
 
+  test_TYPE_ALIAS() async {
+    newFile('/home/test/lib/test.dart', content: r'''
+typedef A = double;
+
+@deprecated
+typedef B = double;
+
+/// aaa
+///
+/// bbb bbb
+typedef C = double;
+''');
+
+    tracker.addContext(testAnalysisContext);
+    await _doAllTrackerWork();
+
+    var library = _getLibrary('package:test/test.dart');
+    _assertDeclaration(
+      _getDeclaration(library.declarations, 'A'),
+      'A',
+      DeclarationKind.TYPE_ALIAS,
+      parameters: null,
+      parameterNames: null,
+      parameterTypes: null,
+      relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::A'],
+      requiredParameterCount: null,
+      returnType: null,
+    );
+    _assertDeclaration(
+      _getDeclaration(library.declarations, 'B'),
+      'B',
+      DeclarationKind.TYPE_ALIAS,
+      isDeprecated: true,
+      parameters: null,
+      parameterNames: null,
+      parameterTypes: null,
+      relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::B'],
+      requiredParameterCount: null,
+      returnType: null,
+    );
+    _assertDeclaration(
+      _getDeclaration(library.declarations, 'C'),
+      'C',
+      DeclarationKind.TYPE_ALIAS,
+      docSummary: 'aaa',
+      docComplete: 'aaa\n\nbbb bbb',
+      parameters: null,
+      parameterNames: null,
+      parameterTypes: null,
+      relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::C'],
+      requiredParameterCount: null,
+      returnType: null,
+    );
+  }
+
   test_VARIABLE() async {
     newFile('/home/test/lib/test.dart', content: r'''
 int a;
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index f8366c5..a4ad397 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -361,7 +361,6 @@
     });
 
     _withIndent(() {
-      _writeMacro(e);
       _writeDocumentation(e);
       _writeMetadata(e);
       _writeCodeRange(e);
@@ -530,19 +529,6 @@
     buffer.writeln(line);
   }
 
-  void _writeMacro(Element e) {
-    if (e is HasMacroGenerationData) {
-      var macro = (e as HasMacroGenerationData).macro;
-      if (macro != null) {
-        _writelnWithIndent('macro');
-        _withIndent(() {
-          _writelnWithIndent('id: ${macro.id}');
-          _writelnMultiLineWithIndent('code: ${macro.code}');
-        });
-      }
-    }
-  }
-
   void _writeMetadata(Element element) {
     var annotations = element.metadata;
     if (annotations.isNotEmpty) {
@@ -568,7 +554,6 @@
     });
 
     _withIndent(() {
-      _writeMacro(e);
       _writeDocumentation(e);
       _writeMetadata(e);
       _writeCodeRange(e);
@@ -711,7 +696,6 @@
     });
 
     _withIndent(() {
-      _writeMacro(e);
       _writeDocumentation(e);
       _writeMetadata(e);
       _writeCodeRange(e);
@@ -875,6 +859,7 @@
   }
 
   void _writeUnitElement(CompilationUnitElement e) {
+    e as CompilationUnitElementImpl;
     _writeElements('classes', e.classes, _writeClassElement);
     _writeElements('enums', e.enums, _writeClassElement);
     _writeElements('extensions', e.extensions, _writeExtensionElement);
@@ -891,6 +876,12 @@
       _writePropertyAccessorElement,
     );
     _writeElements('functions', e.functions, _writeFunctionElement);
+
+    var macroGeneratedContent = e.macroGeneratedContent;
+    if (macroGeneratedContent != null) {
+      _writelnWithIndent('macroGeneratedContent');
+      buffer.write(macroGeneratedContent);
+    }
   }
 
   void _writeUri(Source? source) {
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index afbe147..9b9051e 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -367,6 +367,17 @@
   }
 
   @override
+  void visitConstructorReference(ConstructorReference node) {
+    _writeln('ConstructorReference');
+    _withIndent(() {
+      var properties = _Properties();
+      properties.addNode('constructorName', node.constructorName);
+      _addExpression(properties, node);
+      _writeProperties(properties);
+    });
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     _writeNextCodeLine(node);
     _writeln('ContinueStatement');
@@ -682,6 +693,19 @@
   }
 
   @override
+  void visitFunctionReference(FunctionReference node) {
+    _writeln('FunctionReference');
+    _withIndent(() {
+      var properties = _Properties();
+      properties.addNode('function', node.function);
+      properties.addNode('typeArguments', node.typeArguments);
+      properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes!);
+      _addExpression(properties, node);
+      _writeProperties(properties);
+    });
+  }
+
+  @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
     _writeNextCodeLine(node);
     _writeln('FunctionTypeAlias');
@@ -1393,6 +1417,17 @@
   }
 
   @override
+  void visitTypeLiteral(TypeLiteral node) {
+    _writeln('TypeLiteral');
+    _withIndent(() {
+      var properties = _Properties();
+      properties.addNode('typeName', node.typeName);
+      _addExpression(properties, node);
+      _writeProperties(properties);
+    });
+  }
+
+  @override
   void visitTypeName(TypeName node) {
     _writeNextCodeLine(node);
     _writeln('TypeName');
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 3a95b46..d85eb96 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -59,11 +59,9 @@
     var inputLibraries = <LinkInputLibrary>[];
     for (var sdkLibrary in sdk.sdkLibraries) {
       var source = sourceFactory.resolveUri(null, sdkLibrary.shortName)!;
-      var text = getFile(source.fullName).readAsStringSync();
-      var unit = parseText(text, featureSet);
 
       var inputUnits = <LinkInputUnit>[];
-      _addLibraryUnits(source, unit, inputUnits, featureSet);
+      _addLibraryUnits(source, inputUnits, featureSet);
       inputLibraries.add(
         LinkInputLibrary(
           source: source,
@@ -99,11 +97,17 @@
     var inputLibraries = <LinkInputLibrary>[];
     _addNonDartLibraries({}, inputLibraries, source);
 
-    var unitsInformativeBytes = <Uri, Uint8List>{};
+    var unitsInformativeData = <Uri, InformativeUnitData>{};
     for (var inputLibrary in inputLibraries) {
       for (var inputUnit in inputLibrary.units) {
-        var informativeBytes = writeUnitInformative(inputUnit.unit);
-        unitsInformativeBytes[inputUnit.uri] = informativeBytes;
+        var content = inputUnit.sourceContent;
+        if (content != null) {
+          var informativeBytes = writeUnitInformative(inputUnit.unit);
+          unitsInformativeData[inputUnit.uri] = InformativeUnitData(
+            content: content,
+            bytes: informativeBytes,
+          );
+        }
       }
     }
 
@@ -123,7 +127,7 @@
     elementFactory.addBundle(
       BundleReader(
         elementFactory: elementFactory,
-        unitsInformativeBytes: {},
+        unitsInformativeData: {},
         resolutionBytes: sdkBundle.resolutionBytes,
       ),
     );
@@ -137,7 +141,7 @@
       elementFactory.addBundle(
         BundleReader(
           elementFactory: elementFactory,
-          unitsInformativeBytes: unitsInformativeBytes,
+          unitsInformativeData: unitsInformativeData,
           resolutionBytes: linkResult.resolutionBytes,
         ),
       );
@@ -147,19 +151,21 @@
   }
 
   void setUp() {
-    featureSet = FeatureSets.nullSafe;
+    featureSet = FeatureSets.latestWithExperiments;
   }
 
   void _addLibraryUnits(
     Source definingSource,
-    CompilationUnit definingUnit,
     List<LinkInputUnit> units,
     FeatureSet featureSet,
   ) {
+    var definingContent = _readSafely(definingSource.fullName);
+    var definingUnit = parseText(definingContent, featureSet);
     units.add(
       LinkInputUnit(
         partDirectiveIndex: null,
         source: definingSource,
+        sourceContent: definingContent,
         isSynthetic: false,
         unit: definingUnit,
       ),
@@ -184,6 +190,7 @@
               partDirectiveIndex: partDirectiveIndex,
               partUriStr: relativeUriStr,
               source: partSource,
+              sourceContent: text,
               isSynthetic: false,
               unit: unit,
             ),
@@ -208,7 +215,7 @@
     var unit = parseText(text, featureSet);
 
     var units = <LinkInputUnit>[];
-    _addLibraryUnits(source, unit, units, featureSet);
+    _addLibraryUnits(source, units, featureSet);
     libraries.add(
       LinkInputLibrary(
         source: source,
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 8473b16..5bd8d77 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -81,24 +81,21 @@
 }
 
 class FeatureSets {
-  static final FeatureSet beforeNullSafe = FeatureSet.fromEnableFlags2(
+  static final FeatureSet language_2_9 = FeatureSet.fromEnableFlags2(
     sdkLanguageVersion: Version.parse('2.9.0'),
     flags: [],
   );
 
-  static final FeatureSet nullSafe = FeatureSet.fromEnableFlags2(
+  static final FeatureSet language_2_12 = FeatureSet.fromEnableFlags2(
     sdkLanguageVersion: Version.parse('2.12.0'),
     flags: [],
   );
 
-  static final FeatureSet nonFunctionTypeAliases = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.12.0'),
-    flags: [EnableString.nonfunction_type_aliases],
-  );
-
-  static final FeatureSet genericMetadata = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.13.0'),
-    flags: [EnableString.generic_metadata],
+  static final FeatureSet latestWithExperiments = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.15.0'),
+    flags: [
+      EnableString.constructor_tearoffs,
+    ],
   );
 }
 
@@ -2618,17 +2615,17 @@
       notSimplyBounded class C @6
         typeParameters
           covariant T @8
-            bound: dynamic Function()
-            defaultType: dynamic Function()
+            bound: dynamic
+            defaultType: dynamic
         constructors
           synthetic @-1
     typeAliases
       functionTypeAliasBased notSimplyBounded F @32
-        aliasedType: dynamic Function(C<dynamic Function()>)
+        aliasedType: dynamic Function(C<dynamic>)
         aliasedElement: GenericFunctionTypeElement
           parameters
             requiredPositional value @36
-              type: C<dynamic Function()>
+              type: C<dynamic>
           returnType: dynamic
 ''');
   }
@@ -2691,7 +2688,7 @@
       notSimplyBounded C @8
         typeParameters
           unrelated T @10
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -2699,7 +2696,7 @@
       notSimplyBounded D @50
         typeParameters
           unrelated T @52
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -2708,7 +2705,6 @@
   }
 
   test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef C<T extends D> = List<T>;
 typedef D<T extends C> = List<T>;
@@ -2830,7 +2826,7 @@
   }
 
   test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class C<T extends void Function(T)> {}
 ''');
@@ -2900,24 +2896,24 @@
       notSimplyBounded class C @6
         typeParameters
           covariant T @8
-            bound: dynamic Function()
-            defaultType: dynamic Function()
+            bound: dynamic
+            defaultType: dynamic
         constructors
           synthetic @-1
     typeAliases
       functionTypeAliasBased notSimplyBounded F @32
-        aliasedType: dynamic Function(dynamic Function())
+        aliasedType: dynamic Function(dynamic)
         aliasedElement: GenericFunctionTypeElement
           parameters
             requiredPositional value @36
-              type: dynamic Function()
+              type: dynamic
           returnType: dynamic
       functionTypeAliasBased notSimplyBounded G @52
-        aliasedType: dynamic Function(dynamic Function())
+        aliasedType: dynamic Function(dynamic)
         aliasedElement: GenericFunctionTypeElement
           parameters
             requiredPositional value @56
-              type: dynamic Function()
+              type: dynamic
           returnType: dynamic
 ''');
   }
@@ -3053,7 +3049,7 @@
   }
 
   test_class_ref_nullability_star() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class C {}
 C c;
@@ -3541,7 +3537,6 @@
   }
 
   test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
-    featureSet = FeatureSets.genericMetadata;
     var library = await checkLibrary(r'''
 class C<T extends void Function<U extends C>()> {}
 ''');
@@ -3560,7 +3555,7 @@
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_contravariant_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary(r'''
 typedef F<X> = void Function(X);
 
@@ -3743,7 +3738,7 @@
   }
 
   test_class_typeParameters_defaultType_genericFunctionType_both_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary(r'''
 class A<X extends X Function(X)> {}
 ''');
@@ -3780,7 +3775,7 @@
   }
 
   test_class_typeParameters_defaultType_genericFunctionType_contravariant_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary(r'''
 class A<X extends void Function(X)> {}
 ''');
@@ -3853,7 +3848,6 @@
   }
 
   test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<X> = List<void Function(X)>;
 
@@ -3886,7 +3880,6 @@
   }
 
   test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<X> = Map<X, int>;
 
@@ -6000,7 +5993,7 @@
   }
 
   test_compilationUnit_nnbd_disabled_via_feature_set() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('');
     expect(library.isNonNullableByDefault, isFalse);
   }
@@ -6306,6 +6299,47 @@
     _assertTypeStr(yType, 'C<int>');
   }
 
+  test_const_constructorReference() async {
+    var library = await checkLibrary(r'''
+class A {
+  A.named();
+}
+const v = A.named;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+    topLevelVariables
+      static const v @31
+        type: A Function()
+        constantInitializer
+          ConstructorReference
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: self::@class::A::@constructor::named
+                staticType: null
+                token: named @37
+              period: . @36
+              staticElement: self::@class::A::@constructor::named
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @35
+                type: null
+            staticType: A Function()
+    accessors
+      synthetic static get v @-1
+        returnType: A Function()
+''');
+  }
+
   test_const_finalField_hasConstConstructor() async {
     var library = await checkLibrary(r'''
 class C {
@@ -6333,6 +6367,50 @@
 ''');
   }
 
+  test_const_functionReference() async {
+    var library = await checkLibrary(r'''
+void f<T>(T a) {}
+const v = f<int>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @24
+        type: void Function(int)
+        constantInitializer
+          FunctionReference
+            function: SimpleIdentifier
+              staticElement: self::@function::f
+              staticType: void Function<T>(T)
+              token: f @28
+            staticType: void Function(int)
+            typeArgumentTypes
+              int
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @30
+                  type: int
+              leftBracket: < @29
+              rightBracket: > @33
+    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_indexExpression() async {
     var library = await checkLibrary(r'''
 const a = [0];
@@ -11093,7 +11171,7 @@
   }
 
   test_const_topLevel_throw_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary(r'''
 const c = throw 42;
 ''');
@@ -11756,6 +11834,41 @@
 ''');
   }
 
+  test_const_typeLiteral() async {
+    var library = await checkLibrary(r'''
+const v = List<int>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Type
+        constantInitializer
+          TypeLiteral
+            staticType: Type
+            typeName: TypeName
+              name: SimpleIdentifier
+                staticElement: dart:core::@class::List
+                staticType: List<int>
+                token: List @10
+              type: List<int>
+              typeArguments: TypeArgumentList
+                arguments
+                  TypeName
+                    name: SimpleIdentifier
+                      staticElement: dart:core::@class::int
+                      staticType: null
+                      token: int @15
+                    type: int
+                leftBracket: < @14
+                rightBracket: > @18
+    accessors
+      synthetic static get v @-1
+        returnType: Type
+''');
+  }
+
   test_constExpr_pushReference_enum_field() async {
     var library = await checkLibrary('''
 enum E {a, b, c}
@@ -12703,7 +12816,6 @@
   }
 
   test_constructor_redirected_factory_named_generic_viaTypeAlias() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef A<T, U> = C<T, U>;
 class B<T, U> {
@@ -13003,7 +13115,6 @@
   }
 
   test_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef A<T, U> = C<T, U>;
 class B<T, U> {
@@ -13120,7 +13231,6 @@
   }
 
   test_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     addLibrarySource('/foo.dart', '''
 import 'test.dart';
 typedef A = B;
@@ -13219,7 +13329,6 @@
   }
 
   test_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     addLibrarySource('/foo.dart', '''
 import 'test.dart';
 typedef A = B;
@@ -13270,7 +13379,6 @@
   }
 
   test_constructor_redirected_factory_unnamed_viaTypeAlias() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef A = C;
 class B {
@@ -13388,6 +13496,7 @@
             periodOffset: 13
             nameEnd: 19
           @25
+            redirectedConstructor: self::@class::C::@constructor::named
 ''');
   }
 
@@ -13467,6 +13576,7 @@
           named @21
             periodOffset: 20
             nameEnd: 26
+            redirectedConstructor: self::@class::C::@constructor::•
 ''');
   }
 
@@ -13616,7 +13726,7 @@
   }
 
   test_defaultValue_eliminateTypeParameters_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class A<T> {
   const X({List<T> a = const []});
@@ -13805,7 +13915,7 @@
   }
 
   test_defaultValue_methodMember_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 void f([Comparator<T> compare = Comparable.compare]) {}
 ''');
@@ -14033,7 +14143,7 @@
   }
 
   test_defaultValue_refersToGenericClass_constructor2_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 abstract class A<T> {}
 class B<T> implements A<T> {
@@ -14093,7 +14203,7 @@
   }
 
   test_defaultValue_refersToGenericClass_constructor_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class B<T> {
   const B();
@@ -17165,7 +17275,7 @@
   }
 
   test_generic_function_type_nullability_star() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 void Function() f;
 ''');
@@ -17355,7 +17465,7 @@
             atSign: @ @29
             element: ConstructorMember
               base: self::@class::A::@constructor::•
-              substitution: {T: dynamic}
+              substitution: {T: int Function(String)}
             name: SimpleIdentifier
               staticElement: self::@class::A
               staticType: null
@@ -17431,7 +17541,7 @@
             atSign: @ @29
             element: ConstructorMember
               base: self::@class::A::@constructor::•
-              substitution: {T: dynamic}
+              substitution: {T: int Function(String)}
             name: SimpleIdentifier
               staticElement: self::@class::A
               staticType: null
@@ -17952,13 +18062,13 @@
       notSimplyBounded F @8
         typeParameters
           unrelated X @10
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
-        aliasedType: dynamic Function(dynamic Function())
+        aliasedType: dynamic Function(dynamic)
         aliasedElement: GenericFunctionTypeElement
           parameters
             requiredPositional @-1
-              type: dynamic Function()
+              type: dynamic
           returnType: dynamic
 ''');
   }
@@ -20124,7 +20234,7 @@
   }
 
   test_instanceInference_operator_equal_legacy_from_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     addLibrarySource('/legacy.dart', r'''
 // @dart = 2.7
 class LegacyDefault {
@@ -20426,7 +20536,7 @@
   }
 
   test_instantiateToBounds_boundRefersToItself_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class C<T extends C<T>> {}
 C c;
@@ -21280,31 +21390,37 @@
           final b @88
             type: int?
         constructors
-          @0
-            macro
-              id: 0
-              code: A({required this.a, this.b});
+          @94
             parameters
-              requiredName final this.a @17
+              requiredName final this.a @111
                 type: int
-              optionalNamed final this.b @25
+              optionalNamed final this.b @119
                 type: int?
         accessors
           synthetic get a @-1
             returnType: int
           synthetic get b @-1
             returnType: int?
+    macroGeneratedContent
+import 'macro_annotations.dart';
+@autoConstructor
+class A {
+  final int a;
+  final int? b;
+
+  A({required this.a, this.b});
+}
 ''');
   }
 
-  test_macro_hashCode() async {
+  test_macro_dataClass() async {
     addLibrarySource('/macro_annotations.dart', r'''
 library analyzer.macro.annotations;
-const hashCode = 0;
+const dataClass = 0;
 ''');
     var library = await checkLibrary(r'''
 import 'macro_annotations.dart';
-@hashCode
+@dataClass
 class A {
   final int a;
   final int b;
@@ -21316,6 +21432,80 @@
     macro_annotations.dart
   definingUnit
     classes
+      class A @50
+        metadata
+          Annotation
+            atSign: @ @33
+            element: macro_annotations.dart::@getter::dataClass
+            name: SimpleIdentifier
+              staticElement: macro_annotations.dart::@getter::dataClass
+              staticType: null
+              token: dataClass @34
+        fields
+          final a @66
+            type: int
+          final b @81
+            type: int
+          synthetic hashCode @-1
+            type: int
+        constructors
+          @87
+            parameters
+              requiredName final this.a @104
+                type: int
+              requiredName final this.b @121
+                type: int
+        accessors
+          synthetic get a @-1
+            returnType: int
+          synthetic get b @-1
+            returnType: int
+          get hashCode @149
+            metadata
+              Annotation
+                atSign: @ @129
+                element: dart:core::@getter::override
+                name: SimpleIdentifier
+                  staticElement: dart:core::@getter::override
+                  staticType: null
+                  token: override @130
+            returnType: int
+        methods
+          toString @208
+            metadata
+              Annotation
+                atSign: @ @189
+                element: dart:core::@getter::override
+                name: SimpleIdentifier
+                  staticElement: dart:core::@getter::override
+                  staticType: null
+                  token: override @190
+            returnType: String
+    macroGeneratedContent
+import 'macro_annotations.dart';
+@dataClass
+class A {
+  final int a;
+  final int b;
+
+  A({required this.a, required this.b});
+
+  @override
+  int get hashCode => a.hashCode ^ b.hashCode;
+
+  @override
+  String toString() => 'A(a: $a, b: $b)';
+}
+''');
+  }
+
+  test_macro_hashCode() async {
+    addLibrarySource('/macro_annotations.dart', r'''
+library
+  imports
+    macro_annotations.dart
+  definingUnit
+    classes
       class A @49
         metadata
           Annotation
@@ -21339,10 +21529,7 @@
             returnType: int
           synthetic get b @-1
             returnType: int
-          get hashCode @18
-            macro
-              id: 0
-              code: @override\nint get hashCode => a.hashCode ^ b.hashCode;
+          get hashCode @106
             metadata
               Annotation
                 atSign: @ @0
@@ -21352,6 +21539,16 @@
                   staticType: null
                   token: override @1
             returnType: int
+    macroGeneratedContent
+import 'macro_annotations.dart';
+@hashCode
+class A {
+  final int a;
+  final int b;
+
+  @override
+  int get hashCode => a.hashCode ^ b.hashCode;
+}
 ''');
   }
 
@@ -21407,19 +21604,30 @@
         accessors
           synthetic get b @-1
             returnType: int
-          get hashCode @18
-            macro
-              id: 0
-              code: @override\nint get hashCode => b.hashCode ^ a.hashCode;
+          get hashCode @130
             metadata
               Annotation
-                atSign: @ @0
+                atSign: @ @110
                 element: dart:core::@getter::override
                 name: SimpleIdentifier
                   staticElement: dart:core::@getter::override
                   staticType: null
-                  token: override @1
+                  token: override @111
             returnType: int
+    macroGeneratedContent
+import 'macro_annotations.dart';
+
+class A {
+  final int a;
+}
+
+@hashCode
+class B extends A {
+  final int b;
+
+  @override
+  int get hashCode => b.hashCode ^ a.hashCode;
+}
 ''');
   }
 
@@ -21465,19 +21673,26 @@
               requiredPositional __f @-1
                 type: int
             returnType: void
-          get f @8
-            macro
-              id: 0
-              code: int get f => _f;
+          get f @82
             returnType: int
-          set f @4
-            macro
-              id: 1
-              code: set f(int val) {\n  print('Setting f to ${val}');\n  _f = val;\n}
+          set f @98
             parameters
-              requiredPositional val @10
+              requiredPositional val @104
                 type: int
             returnType: void
+    macroGeneratedContent
+import 'macro_annotations.dart';
+class A {
+  @observable
+  int _f = 0;
+
+  int get f => _f;
+
+  set f(int val) {
+    print('Setting f to ${val}');
+    _f = val;
+  }
+}
 ''');
   }
 
@@ -21526,19 +21741,26 @@
               requiredPositional __f @-1
                 type: T
             returnType: void
-          get f @6
-            macro
-              id: 0
-              code: T get f => _f;
+          get f @77
             returnType: T
-          set f @4
-            macro
-              id: 1
-              code: set f(T val) {\n  print('Setting f to ${val}');\n  _f = val;\n}
+          set f @93
             parameters
-              requiredPositional val @8
+              requiredPositional val @97
                 type: T
             returnType: void
+    macroGeneratedContent
+import 'macro_annotations.dart';
+class A<T> {
+  @observable
+  T _f;
+
+  T get f => _f;
+
+  set f(T val) {
+    print('Setting f to ${val}');
+    _f = val;
+  }
+}
 ''');
   }
 
@@ -21583,19 +21805,26 @@
           synthetic get b @-1
             returnType: int
         methods
-          toString @17
-            macro
-              id: 0
-              code: @override\nString toString() => 'A(a: $a, b: $b)';
+          toString @105
             metadata
               Annotation
-                atSign: @ @0
+                atSign: @ @86
                 element: dart:core::@getter::override
                 name: SimpleIdentifier
                   staticElement: dart:core::@getter::override
                   staticType: null
-                  token: override @1
+                  token: override @87
             returnType: String
+    macroGeneratedContent
+import 'macro_annotations.dart';
+@toString
+class A {
+  final int a;
+  final int b;
+
+  @override
+  String toString() => 'A(a: $a, b: $b)';
+}
 ''');
   }
 
@@ -22077,7 +22306,6 @@
   }
 
   test_metadata_constructor_call_named_generic_inference() async {
-    featureSet = FeatureSets.genericMetadata;
     var library = await checkLibrary('''
 class A<T> {
   const A.named(T _);
@@ -22137,7 +22365,6 @@
   }
 
   test_metadata_constructor_call_named_generic_typeArguments() async {
-    featureSet = FeatureSets.genericMetadata;
     var library = await checkLibrary('''
 class A<T> {
   const A.named();
@@ -22224,12 +22451,12 @@
             constructorName: SimpleIdentifier
               staticElement: ConstructorMember
                 base: self::@class::A::@constructor::named
-                substitution: {T: dynamic}
+                substitution: {T: int}
               staticType: null
               token: named @43
             element: ConstructorMember
               base: self::@class::A::@constructor::named
-              substitution: {T: dynamic}
+              substitution: {T: int}
             name: SimpleIdentifier
               staticElement: self::@class::A
               staticType: null
@@ -22301,7 +22528,6 @@
   }
 
   test_metadata_constructor_call_named_prefixed_generic_inference() async {
-    featureSet = FeatureSets.genericMetadata;
     addLibrarySource('/home/test/lib/foo.dart', '''
 class A<T> {
   const A.named(T _);
@@ -22357,7 +22583,6 @@
   }
 
   test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
-    featureSet = FeatureSets.genericMetadata;
     addLibrarySource('/home/test/lib/foo.dart', '''
 class A<T> {
   const A.named();
@@ -22539,7 +22764,6 @@
   }
 
   test_metadata_constructor_call_unnamed_generic_inference() async {
-    featureSet = FeatureSets.genericMetadata;
     var library = await checkLibrary('''
 class A<T> {
   const A(T _);
@@ -22585,7 +22809,6 @@
   }
 
   test_metadata_constructor_call_unnamed_generic_typeArguments() async {
-    featureSet = FeatureSets.genericMetadata;
     var library = await checkLibrary('''
 class A<T> {
   const A();
@@ -22674,7 +22897,6 @@
   }
 
   test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
-    featureSet = FeatureSets.genericMetadata;
     addLibrarySource('/home/test/lib/foo.dart', '''
 class A<T> {
   const A(T _);
@@ -22724,7 +22946,6 @@
   }
 
   test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
-    featureSet = FeatureSets.genericMetadata;
     addLibrarySource('/home/test/lib/foo.dart', '''
 class A<T> {
   const A();
@@ -26259,7 +26480,7 @@
   }
 
   test_mixin_inference_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary(r'''
 class A<T> {}
 mixin M<U> on A<U> {}
@@ -27045,13 +27266,13 @@
   definingUnit
     typeAliases
       notSimplyBounded F @8
-        aliasedType: dynamic Function() Function()
+        aliasedType: dynamic Function()
         aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic Function()
+          returnType: dynamic
       notSimplyBounded G @34
-        aliasedType: dynamic Function() Function()
+        aliasedType: dynamic Function()
         aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic Function()
+          returnType: dynamic
 ''');
   }
 
@@ -27064,9 +27285,9 @@
   definingUnit
     typeAliases
       notSimplyBounded F @8
-        aliasedType: List<dynamic Function()> Function()
+        aliasedType: List<dynamic> Function()
         aliasedElement: GenericFunctionTypeElement
-          returnType: List<dynamic Function()>
+          returnType: List<dynamic>
 ''');
   }
 
@@ -27081,7 +27302,7 @@
       notSimplyBounded F @8
         typeParameters
           unrelated T @10
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -27123,7 +27344,6 @@
   }
 
   test_new_typedef_nonFunction_notSimplyBounded_self() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef F<T extends F> = List<int>;
 ''');
@@ -27141,7 +27361,6 @@
   }
 
   test_new_typedef_nonFunction_notSimplyBounded_viaInterfaceType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary('''
 typedef F = List<F>;
 ''');
@@ -27569,7 +27788,7 @@
       functionTypeAliasBased notSimplyBounded F @13
         typeParameters
           unrelated T @15
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -29427,7 +29646,7 @@
   }
 
   test_type_never_disableNnbd() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('Never d;');
     checkElementText(library, r'''
 library
@@ -29526,7 +29745,7 @@
   }
 
   test_type_param_ref_nullability_star() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('''
 class C<T> {
   T t;
@@ -30904,7 +31123,6 @@
   }
 
   test_typeAlias_typeParameters_variance_interface_contravariant() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = List<void Function(T)>;
 ''');
@@ -30921,7 +31139,6 @@
   }
 
   test_typeAlias_typeParameters_variance_interface_contravariant2() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = void Function(T);
 typedef B<T> = List<A<T>>;
@@ -30949,7 +31166,6 @@
   }
 
   test_typeAlias_typeParameters_variance_interface_covariant() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = List<T>;
 ''');
@@ -30966,7 +31182,6 @@
   }
 
   test_typeAlias_typeParameters_variance_interface_covariant2() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = Map<int, T>;
 typedef B<T> = List<A<T>>;
@@ -31093,19 +31308,19 @@
   definingUnit
     typeAliases
       F @8
-        aliasedType: dynamic Function()
+        aliasedType: int
     topLevelVariables
       static f @19
-        type: dynamic Function()
+        type: int
           aliasElement: self::@typeAlias::F
     accessors
       synthetic static get f @-1
-        returnType: dynamic Function()
+        returnType: int
           aliasElement: self::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
-            type: dynamic Function()
+            type: int
               aliasElement: self::@typeAlias::F
         returnType: void
 ''');
@@ -31116,7 +31331,6 @@
     reason: 'Type dynamic is special, no support for its aliases yet',
   )
   test_typedef_nonFunction_aliasElement_dynamic() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = dynamic;
 void f(A a) {}
@@ -31129,7 +31343,6 @@
   }
 
   test_typedef_nonFunction_aliasElement_functionType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A1 = void Function();
 typedef A2<R> = R Function();
@@ -31171,7 +31384,6 @@
   }
 
   test_typedef_nonFunction_aliasElement_interfaceType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A1 = List<int>;
 typedef A2<T, U> = Map<T, U>;
@@ -31216,7 +31428,6 @@
     reason: 'Type Never is special, no support for its aliases yet',
   )
   test_typedef_nonFunction_aliasElement_never() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A1 = Never;
 typedef A2<T> = Never?;
@@ -31233,7 +31444,6 @@
   }
 
   test_typedef_nonFunction_aliasElement_typeParameterType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = T;
 void f<U>(A<U> a) {}
@@ -31267,7 +31477,6 @@
     reason: 'Type void is special, no support for its aliases yet',
   )
   test_typedef_nonFunction_aliasElement_void() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = void;
 void f(A a) {}
@@ -31280,7 +31489,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X<T> = A<int, T>;
 class A<T, U> {}
@@ -31316,7 +31524,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_interfaceType_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X<T> = A<T>?;
 class A<T> {}
@@ -31356,7 +31563,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_interfaceType_question2() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X<T> = A<T?>;
 class A<T> {}
@@ -31400,7 +31606,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_Never_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Never;
 class A implements X {}
@@ -31419,7 +31624,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_Null_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Null;
 class A implements X {}
@@ -31438,7 +31642,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_typeParameterType() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X<T> = T;
 class A {}
@@ -31474,7 +31677,6 @@
   }
 
   test_typedef_nonFunction_asInterfaceType_void() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = void;
 class A {}
@@ -31504,7 +31706,6 @@
   }
 
   test_typedef_nonFunction_asMixinType_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int>;
 class A<T> {}
@@ -31534,7 +31735,6 @@
   }
 
   test_typedef_nonFunction_asMixinType_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int>?;
 class A<T> {}
@@ -31577,7 +31777,6 @@
   }
 
   test_typedef_nonFunction_asMixinType_question2() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int?>;
 class A<T> {}
@@ -31622,7 +31821,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_Never_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Never;
 class A extends X {}
@@ -31641,7 +31839,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int>;
 class A<T> {}
@@ -31669,7 +31866,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_none_viaTypeParameter() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X<T> = T;
 class A<T> {}
@@ -31702,7 +31898,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_Null_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Null;
 class A extends X {}
@@ -31721,7 +31916,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int>?;
 class A<T> {}
@@ -31747,7 +31941,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_interfaceType_question2() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = A<int?>;
 class A<T> {}
@@ -31775,7 +31968,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_Never_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Never;
 class A extends X {}
@@ -31794,7 +31986,6 @@
   }
 
   test_typedef_nonFunction_asSuperType_Null_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef X = Null;
 class A extends X {}
@@ -31813,7 +32004,6 @@
   }
 
   test_typedef_nonFunction_using_dynamic() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = dynamic;
 void f(A a) {}
@@ -31834,6 +32024,7 @@
   }
 
   test_typedef_nonFunction_using_interface_disabled() async {
+    featureSet = FeatureSets.language_2_12;
     var library = await checkLibrary(r'''
 typedef A = int;
 void f(A a) {}
@@ -31859,7 +32050,6 @@
   }
 
   test_typedef_nonFunction_using_interface_noTypeParameters() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = int;
 void f(A a) {}
@@ -31881,7 +32071,6 @@
   }
 
   test_typedef_nonFunction_using_interface_noTypeParameters_legacy() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     newFile('/a.dart', content: r'''
 typedef A = List<int>;
 ''');
@@ -31906,7 +32095,6 @@
   }
 
   test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = int?;
 void f(A a) {}
@@ -31928,7 +32116,6 @@
   }
 
   test_typedef_nonFunction_using_interface_withTypeParameters() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = Map<int, T>;
 void f(A<String> a) {}
@@ -31955,7 +32142,6 @@
   }
 
   test_typedef_nonFunction_using_Never_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = Never;
 void f(A a) {}
@@ -31976,7 +32162,6 @@
   }
 
   test_typedef_nonFunction_using_Never_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = Never?;
 void f(A a) {}
@@ -31997,7 +32182,6 @@
   }
 
   test_typedef_nonFunction_using_typeParameter_none() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = T;
 void f1(A a) {}
@@ -32030,7 +32214,6 @@
   }
 
   test_typedef_nonFunction_using_typeParameter_question() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A<T> = T?;
 void f1(A a) {}
@@ -32063,7 +32246,6 @@
   }
 
   test_typedef_nonFunction_using_void() async {
-    featureSet = FeatureSets.nonFunctionTypeAliases;
     var library = await checkLibrary(r'''
 typedef A = void;
 void f(A a) {}
@@ -32483,7 +32665,7 @@
       functionTypeAliasBased notSimplyBounded F @13
         typeParameters
           unrelated T @15
-            bound: dynamic Function()
+            bound: dynamic
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -32501,7 +32683,7 @@
       functionTypeAliasBased notSimplyBounded F @13
         typeParameters
           unrelated T @15
-            bound: List<dynamic Function()>
+            bound: List<dynamic>
             defaultType: dynamic
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
@@ -32532,7 +32714,7 @@
   }
 
   test_typedef_type_parameters_f_bound_complex_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
     checkElementText(library, r'''
 library
@@ -32577,7 +32759,7 @@
   }
 
   test_typedef_type_parameters_f_bound_simple_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
     checkElementText(library, r'''
 library
@@ -32623,7 +32805,7 @@
   }
 
   test_typedef_type_parameters_f_bound_simple_new_syntax_legacy() async {
-    featureSet = FeatureSets.beforeNullSafe;
+    featureSet = FeatureSets.language_2_9;
     var library =
         await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
     checkElementText(library, r'''
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index f6857fc..a6571b2 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -1845,9 +1845,15 @@
 _'{0}' can't be used to name both a constructor and a static field in this
 class._
 
+_'{0}' can't be used to name both a constructor and a static getter in this
+class._
+
 _'{0}' can't be used to name both a constructor and a static method in this
 class._
 
+_'{0}' can't be used to name both a constructor and a static setter in this
+class._
+
 #### Description
 
 The analyzer produces this diagnostic when a named constructor and either a
@@ -3346,7 +3352,7 @@
 
 _The constructor with name '{0}' is already defined._
 
-_The default constructor is already defined._
+_The unnamed constructor is already defined._
 
 #### Description
 
@@ -7432,7 +7438,7 @@
 
 ### late_final_field_with_const_constructor
 
-_Can't have a late final field in a class with a const constructor._
+_Can't have a late final field in a class with a generative const constructor._
 
 #### Description
 
@@ -8732,7 +8738,7 @@
 
 ### new_with_undefined_constructor_default
 
-_The class '{0}' doesn't have a default constructor._
+_The class '{0}' doesn't have an unnamed constructor._
 
 #### Description
 
@@ -11387,7 +11393,8 @@
 
 ### return_in_generator
 
-_Can't return a value from a generator function (using the '{0}' modifier)._
+_Can't return a value from a generator function that uses the 'async*' or
+'sync*' modifier._
 
 #### Description
 
@@ -12922,9 +12929,6 @@
 
 _A nullable expression can't be used in a yield-each statement._
 
-_An expression whose value can be 'null' must be null-checked before it can be
-dereferenced._
-
 _The function can't be unconditionally invoked because it can be 'null'._
 
 _The method '{0}' can't be unconditionally invoked because the receiver can be
diff --git a/pkg/analyzer/tool/macro/generate.dart b/pkg/analyzer/tool/macro/generate.dart
new file mode 100644
index 0000000..2cc9a41
--- /dev/null
+++ b/pkg/analyzer/tool/macro/generate.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.
+
+import 'dart:io' as io;
+
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+
+void main(List<String> arguments) async {
+  if (arguments.length != 1) {
+    _printUsage();
+    io.exit(1);
+  }
+
+  var resourceProvider = PhysicalResourceProvider.INSTANCE;
+  var pathContext = resourceProvider.pathContext;
+
+  // The directory must exist.
+  var packagePath = arguments[0];
+  var packageFolder = resourceProvider.getFolder(packagePath);
+  if (!packageFolder.exists) {
+    print('Error: $packagePath does not exist.');
+    io.exit(1);
+  }
+
+  // The directory must be a Pub package.
+  var pubspecYamlFile = packageFolder.getChildAssumingFile(
+    file_paths.pubspecYaml,
+  );
+  if (!pubspecYamlFile.exists) {
+    print('Error: ${pubspecYamlFile.path} does not exist.');
+    io.exit(1);
+  }
+
+  var collection = AnalysisContextCollection(
+    includedPaths: [packagePath],
+  );
+  for (var analysisContext in collection.contexts) {
+    var analyzedPaths = analysisContext.contextRoot.analyzedFiles();
+    for (var path in analyzedPaths) {
+      if (file_paths.isDart(pathContext, path)) {
+        var session = analysisContext.currentSession;
+        var unitElementResult = await session.getUnitElement(path);
+        if (unitElementResult is UnitElementResult) {
+          var unitElement =
+              unitElementResult.element as CompilationUnitElementImpl;
+          // If has macro-generated content, write it.
+          var macroGeneratedContent = unitElement.macroGeneratedContent;
+          if (macroGeneratedContent != null) {
+            var relativePath = pathContext.relative(path, from: packagePath);
+            var combinedPath = pathContext.join(
+                packagePath, '.dart_tool', 'analyzer', 'macro', relativePath);
+            resourceProvider.getFile(combinedPath)
+              ..parent2.create()
+              ..writeAsStringSync(macroGeneratedContent);
+          }
+        }
+      }
+    }
+  }
+}
+
+void _printUsage() {
+  print('''
+Usage: dart generate.dart path-to-pub-package
+Write combined code of files that have macro-generated declarations.
+''');
+}
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index b7d456d..a4fc1ce 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -28,6 +28,7 @@
   if (args.length != 1) {
     print('Error: IDL path is required');
     print('usage: dart generate.dart path/to/idl.dart');
+    return;
   }
   String idlPath = args[0];
   await GeneratedContent.generateAll(
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 7ec27d6..fa01214 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -397,7 +397,7 @@
         hide: hide);
     parser.addOption(_packagesOption,
         help: 'The path to the package resolution configuration file, which '
-            'supplies a mapping of package names\nto paths.',
+            'supplies a mapping of package names\ninto paths.',
         hide: ddc);
     parser.addFlag(_enableInitializingFormalAccessFlag,
         help:
diff --git a/pkg/analyzer_plugin/doc/tutorial/introduction.md b/pkg/analyzer_plugin/doc/tutorial/introduction.md
index d2da2ff..033031a 100644
--- a/pkg/analyzer_plugin/doc/tutorial/introduction.md
+++ b/pkg/analyzer_plugin/doc/tutorial/introduction.md
@@ -134,7 +134,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, then 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/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 0e6ea1a..f7e9777 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_yaml.dart';
@@ -60,6 +61,35 @@
       : assert(session == null || workspace == null),
         workspace = workspace ?? _SingleSessionWorkspace(session!);
 
+  /// Return a hash value that will change when new edits have been added to
+  /// this builder.
+  int get changeHash {
+    // The hash value currently ignores edits to import directives because
+    // finalizing the builders needs to happen exactly once and this getter
+    // needs to be invoked repeatedly.
+    //
+    // In addition, we should consider implementing our own hash function for
+    // file edits because the `hashCode` defined for them might not be
+    // sufficient to detect all changes to the list of edits.
+    var hash = 0;
+    for (var builder in _genericFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    for (var builder in _dartFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    for (var builder in _yamlFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    return JenkinsSmiHash.finish(hash);
+  }
+
   @override
   SourceRange? get selectionRange => _selectionRange;
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 7d86a7f..0738926 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -57,6 +57,12 @@
           (builder) => buildLinkedEdit(builder as DartLinkedEditBuilder));
 
   @override
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied}) =>
+      type != null && !type.isDynamic
+          ? _canWriteType(type, methodBeingCopied: methodBeingCopied)
+          : false;
+
+  @override
   LinkedEditBuilderImpl createLinkedEditBuilder() {
     return DartLinkedEditBuilderImpl(this);
   }
@@ -838,6 +844,60 @@
     }
   }
 
+  /// Check if the code to reference [type] in this compilation unit can be
+  /// written.
+  ///
+  /// See also [_writeType]
+  bool _canWriteType(DartType? type,
+      {ExecutableElement? methodBeingCopied, bool required = false}) {
+    type = _getVisibleType(type, methodBeingCopied: methodBeingCopied);
+
+    // If not a useful type, don't write it.
+    if (type == null) {
+      return false;
+    }
+    if (type.isDynamic) {
+      if (required) {
+        return true;
+      }
+      return false;
+    }
+    if (type.isBottom) {
+      var library = dartFileEditBuilder.resolvedUnit.libraryElement;
+      if (library.isNonNullableByDefault) {
+        return true;
+      }
+      return false;
+    }
+
+    var alias = type.alias;
+    if (alias != null) {
+      return true;
+    }
+
+    if (type is FunctionType) {
+      return true;
+    }
+
+    if (type is InterfaceType) {
+      return true;
+    }
+
+    if (type is NeverType) {
+      return true;
+    }
+
+    if (type is TypeParameterType) {
+      return true;
+    }
+
+    if (type is VoidType) {
+      return true;
+    }
+
+    throw UnimplementedError('(${type.runtimeType}) $type');
+  }
+
   /// Generate a name that does not occur in [existingNames] that begins with
   /// the given [prefix].
   String _generateUniqueName(Set<String> existingNames, String prefix) {
@@ -1301,6 +1361,12 @@
           range, (builder) => buildEdit(builder as DartEditBuilder));
 
   @override
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied}) {
+    var builder = createEditBuilder(0, 0);
+    return builder.canWriteType(type, methodBeingCopied: methodBeingCopied);
+  }
+
+  @override
   void convertFunctionFromSyncToAsync(
       FunctionBody? body, TypeProvider typeProvider) {
     if (body == null || body.keyword != null) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 4db68d9..d855849 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -485,7 +485,7 @@
       final entity = this.entity;
       if (entity != null) {
         if (entity.offset <= declarationStart()) {
-          optype.completionLocation = 'CompilationUnit_declaration';
+          optype.completionLocation = 'CompilationUnit_directive';
         } else {
           optype.completionLocation = 'CompilationUnit_declaration';
         }
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 575cd5b..10640fc 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -17,6 +17,13 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 class AnalyzerConverter {
+  /// Optional provider for [analyzer.Element] location, used for example to
+  /// override the location of macro-generated elements.
+  final ElementLocationProvider? _locationProvider;
+
+  AnalyzerConverter({ElementLocationProvider? locationProvider})
+      : _locationProvider = locationProvider;
+
   /// Convert the analysis [error] from the 'analyzer' package to an analysis
   /// error defined by the plugin API. If a [lineInfo] is provided then the
   /// error's location will have a start line and start column. If a [severity]
@@ -199,6 +206,12 @@
     if (element == null || element.source == null) {
       return null;
     }
+
+    var result = _locationProvider?.forElement(element);
+    if (result != null) {
+      return result;
+    }
+
     offset ??= element.nameOffset;
     length ??= element.nameLength;
     if (element is analyzer.CompilationUnitElement ||
@@ -412,3 +425,9 @@
         endLine: endLine, endColumn: endColumn);
   }
 }
+
+abstract class ElementLocationProvider {
+  /// Return the location of [element] that this provider wants to override,
+  /// or `null` if the default location should be used.
+  plugin.Location? forElement(analyzer.Element element);
+}
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index af9b40a..0707033 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -20,6 +20,16 @@
   void addLinkedEdit(String groupName,
       void Function(DartLinkedEditBuilder builder) buildLinkedEdit);
 
+  /// Check if the code for a type annotation for the given [type] can be
+  /// written.
+  ///
+  /// If a [methodBeingCopied] is provided, then type parameters defined by that
+  /// method are assumed to be part of what is being written and hence valid
+  /// types.
+  ///
+  /// The logic is the same as the one used in [writeType]
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
+
   /// Write the code for a declaration of a class with the given [name]. If a
   /// list of [interfaces] is provided, then the class will implement those
   /// interfaces. If [isAbstract] is `true`, then the class will be abstract. If
@@ -299,6 +309,14 @@
   void addReplacement(
       SourceRange range, void Function(DartEditBuilder builder) buildEdit);
 
+  /// Check if the code for a type annotation for the given [type] can be
+  /// written.
+  ///
+  /// If a [methodBeingCopied] is provided, then type parameters defined by that
+  /// method are assumed to be part of what is being written and hence valid
+  /// types.
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
+
   /// Create one or more edits that will convert the given function [body] from
   /// being synchronous to be asynchronous. This includes adding the `async`
   /// modifier to the body as well as potentially replacing the return type of
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 d190e3d..185d382 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -52,8 +52,7 @@
   /// Update the completion [target] and [dotTarget] based on the given [unit].
   Expression? _computeDotTarget(
       DartCompletionRequest request, AstNode? entryPoint) {
-    var target = CompletionTarget.forOffset(
-        request.result.unit, request.offset,
+    var target = CompletionTarget.forOffset(request.result.unit, request.offset,
         entryPoint: entryPoint);
     var node = target.containingNode;
     if (node is MethodInvocation) {
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index c161993..ec74ce8 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -16,17 +16,26 @@
 import 'package:analyzer_plugin/utilities/navigation/navigation.dart';
 
 NavigationCollector computeDartNavigation(
-    ResourceProvider resourceProvider,
-    NavigationCollector collector,
-    CompilationUnit unit,
-    int? offset,
-    int? length) {
-  var dartCollector = _DartNavigationCollector(collector, offset, length);
+  ResourceProvider resourceProvider,
+  NavigationCollector collector,
+  CompilationUnit unit,
+  int? offset,
+  int? length, {
+  AnalyzerConverter? analyzerConverter,
+}) {
+  var dartCollector = _DartNavigationCollector(
+      collector, offset, length, analyzerConverter ?? AnalyzerConverter());
   var visitor = _DartNavigationComputerVisitor(resourceProvider, dartCollector);
   if (offset == null || length == null) {
     unit.accept(visitor);
   } else {
     var node = _getNodeForRange(unit, offset, length);
+    // Take the outer-most node that shares this offset/length so that we get
+    // things like ConstructorName instead of SimpleIdentifier.
+    // https://github.com/dart-lang/sdk/issues/46725
+    if (node != null) {
+      node = _getOutermostNode(node);
+    }
     node?.accept(visitor);
   }
   return collector;
@@ -42,14 +51,32 @@
   return node;
 }
 
+/// Gets the outer-most node with the same offset/length as node.
+AstNode _getOutermostNode(AstNode node) {
+  AstNode? current = node;
+  while (current != null &&
+      current.parent != null &&
+      current != current.parent &&
+      current.offset == current.parent!.offset &&
+      current.length == current.parent!.length) {
+    current = current.parent;
+  }
+  return current ?? node;
+}
+
 /// A Dart specific wrapper around [NavigationCollector].
 class _DartNavigationCollector {
   final NavigationCollector collector;
   final int? requestedOffset;
   final int? requestedLength;
+  final AnalyzerConverter _analyzerConverter;
 
   _DartNavigationCollector(
-      this.collector, this.requestedOffset, this.requestedLength);
+    this.collector,
+    this.requestedOffset,
+    this.requestedLength,
+    this._analyzerConverter,
+  );
 
   void _addRegion(int offset, int length, Element? element) {
     element = element?.nonSynthetic;
@@ -66,15 +93,14 @@
     if (!_isWithinRequestedRange(offset, length)) {
       return;
     }
-    var converter = AnalyzerConverter();
-    var kind = converter.convertElementKind(element.kind);
-    var location = converter.locationFromElement(element);
+    var kind = _analyzerConverter.convertElementKind(element.kind);
+    var location = _analyzerConverter.locationFromElement(element);
     if (location == null) {
       return;
     }
 
     var codeLocation = collector.collectCodeLocations
-        ? _getCodeLocation(element, location, converter)
+        ? _getCodeLocation(element, location)
         : null;
 
     collector.addRegion(offset, length, kind, location,
@@ -103,8 +129,8 @@
   }
 
   /// Get the location of the code (excluding leading doc comments) for this element.
-  protocol.Location? _getCodeLocation(Element element,
-      protocol.Location location, AnalyzerConverter converter) {
+  protocol.Location? _getCodeLocation(
+      Element element, protocol.Location location) {
     var codeElement = element;
     // For synthetic getters created for fields, we need to access the associated
     // variable to get the codeOffset/codeLength.
@@ -143,7 +169,7 @@
       codeOffset = offsetAfterDocs;
     }
 
-    return converter.locationFromElement(element,
+    return _analyzerConverter.locationFromElement(element,
         offset: codeOffset, length: codeLength);
   }
 
@@ -284,13 +310,27 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    var parent = node.parent;
-    if (parent is InstanceCreationExpression &&
-        parent.constructorName == node) {
-      _addConstructorName(parent, node);
-    } else if (parent is ConstructorDeclaration &&
-        parent.redirectedConstructor == node) {
-      _addConstructorName(node, node);
+    Element? element = node.staticElement;
+    if (element == null) {
+      return;
+    }
+    // add regions
+    var typeName = node.type;
+    // [prefix].ClassName
+    {
+      var name = typeName.name;
+      var className = name;
+      if (name is PrefixedIdentifier) {
+        name.prefix.accept(this);
+        className = name.identifier;
+      }
+      computer._addRegionForNode(className, element);
+    }
+    // <TypeA, TypeB>
+    typeName.typeArguments?.accept(this);
+    // optional "name"
+    if (node.name != null) {
+      computer._addRegionForNode(node.name, element);
     }
   }
 
@@ -433,34 +473,6 @@
     super.visitVariableDeclarationList(node);
   }
 
-  void _addConstructorName(AstNode parent, ConstructorName node) {
-    Element? element = node.staticElement;
-    if (element == null) {
-      return;
-    }
-    // add regions
-    var typeName = node.type;
-    // [prefix].ClassName
-    {
-      var name = typeName.name;
-      var className = name;
-      if (name is PrefixedIdentifier) {
-        name.prefix.accept(this);
-        className = name.identifier;
-      }
-      computer._addRegionForNode(className, element);
-    }
-    // <TypeA, TypeB>
-    var typeArguments = typeName.typeArguments;
-    if (typeArguments != null) {
-      typeArguments.accept(this);
-    }
-    // optional "name"
-    if (node.name != null) {
-      computer._addRegionForNode(node.name, element);
-    }
-  }
-
   /// If the source of the given [element] (referenced by the [node]) exists,
   /// then add the navigation region from the [node] to the [element].
   void _addUriDirectiveRegion(UriBasedDirective node, Element? element) {
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 79c9e0c..ba7d92f 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
@@ -1418,21 +1418,21 @@
     // SimpleIdentifier  FunctionDeclaration  CompilationUnit
     addTestSource('const ^Fara();');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_name2() async {
     // SimpleIdentifier  FunctionDeclaration  CompilationUnit
     addTestSource('const F^ara();');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType() async {
     // CompilationUnit
     addTestSource('^ zoo(z) { } String name;');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType_afterLineComment() async {
@@ -1441,7 +1441,7 @@
       // normal comment
       ^ zoo(z) {} String name;''');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType_afterLineComment2() async {
@@ -1451,7 +1451,7 @@
 // normal comment
 ^ zoo(z) {} String name;''');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType_afterLineDocComment() async {
@@ -1479,14 +1479,14 @@
     // CompilationUnit
     addTestSource('/* */ ^ zoo(z) { } String name;');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType_afterStarComment2() async {
     // CompilationUnit
     addTestSource('/* */^ zoo(z) { } String name;');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_functionDeclaration_returnType_afterStarDocComment() async {
@@ -2539,7 +2539,7 @@
     // TopLevelVariableDeclaration
     addTestSource('^ foo;');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_topLevelVariableDeclaration_type_no_semicolon() async {
@@ -2547,7 +2547,7 @@
     // TopLevelVariableDeclaration
     addTestSource('^ foo');
     await assertOpType(
-        completionLocation: 'CompilationUnit_declaration', typeNames: true);
+        completionLocation: 'CompilationUnit_directive', typeNames: true);
   }
 
   Future<void> test_topLevelVariableDeclaration_typed_name() async {
diff --git a/pkg/compiler/lib/src/backend_strategy.dart b/pkg/compiler/lib/src/backend_strategy.dart
index add5771..a8f2d9f 100644
--- a/pkg/compiler/lib/src/backend_strategy.dart
+++ b/pkg/compiler/lib/src/backend_strategy.dart
@@ -7,7 +7,7 @@
 import 'common.dart';
 import 'common/codegen.dart';
 import 'common/tasks.dart';
-import 'deferred_load/deferred_load.dart' show OutputUnitData;
+import 'deferred_load/output_unit.dart' show OutputUnitData;
 import 'enqueue.dart';
 import 'elements/entities.dart';
 import 'inferrer/types.dart';
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 57ecf0f..434091d 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -143,6 +143,9 @@
   /// Flag to stop after splitting the program.
   static const String stopAfterProgramSplit = '--stop-after-program-split';
 
+  static const String writeProgramSplit = '--write-program-split';
+  static const String readProgramSplit = '--read-program-split';
+
   // The syntax-only level of support for generic methods is included in the
   // 1.50 milestone for Dart. It is not experimental, but also not permanent:
   // a full implementation is expected in the future. Hence, the
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index bec3d57..3a7a7f3 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -9,7 +9,7 @@
 import '../common.dart';
 import '../common_elements.dart';
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart' show DartType, InterfaceType;
 import '../inferrer/abstract_value_domain.dart';
@@ -43,7 +43,7 @@
       _CodegenImpact.readFromDataSource;
 
   void writeToDataSink(DataSink sink) {
-    throw new UnsupportedError('CodegenImpact.writeToDataSink');
+    throw UnsupportedError('CodegenImpact.writeToDataSink');
   }
 
   Iterable<Pair<DartType, DartType>> get typeVariableBoundsSubtypeChecks {
@@ -123,7 +123,7 @@
         ?.toSet();
     Set<Pair<DartType, DartType>> typeVariableBoundsSubtypeChecks =
         source.readList(() {
-      return new Pair(source.readDartType(), source.readDartType());
+      return Pair(source.readDartType(), source.readDartType());
     }, emptyAsNull: true)?.toSet();
     Set<String> constSymbols = source.readStrings(emptyAsNull: true)?.toSet();
     List<Set<ClassEntity>> specializedGetInterceptors = source.readList(() {
@@ -131,9 +131,8 @@
     }, emptyAsNull: true);
     bool usesInterceptor = source.readBool();
     int asyncMarkersValue = source.readIntOrNull();
-    EnumSet<AsyncMarker> asyncMarkers = asyncMarkersValue != null
-        ? new EnumSet.fromValue(asyncMarkersValue)
-        : null;
+    EnumSet<AsyncMarker> asyncMarkers =
+        asyncMarkersValue != null ? EnumSet.fromValue(asyncMarkersValue) : null;
     Set<GenericInstantiation> genericInstantiations = source
         .readList(() => GenericInstantiation.readFromDataSource(source),
             emptyAsNull: true)
@@ -147,7 +146,7 @@
         .readList(() => Selector.readFromDataSource(source), emptyAsNull: true)
         ?.toSet();
     source.end(tag);
-    return new _CodegenImpact.internal(
+    return _CodegenImpact.internal(
         member,
         dynamicUses,
         staticUses,
@@ -214,7 +213,7 @@
       DartType subtype, DartType supertype) {
     _typeVariableBoundsSubtypeChecks ??= {};
     _typeVariableBoundsSubtypeChecks
-        .add(new Pair<DartType, DartType>(subtype, supertype));
+        .add(Pair<DartType, DartType>(subtype, supertype));
   }
 
   @override
@@ -254,7 +253,7 @@
   bool get usesInterceptor => _usesInterceptor;
 
   void registerAsyncMarker(AsyncMarker asyncMarker) {
-    _asyncMarkers ??= new EnumSet<AsyncMarker>();
+    _asyncMarkers ??= EnumSet<AsyncMarker>();
     _asyncMarkers.add(asyncMarker);
   }
 
@@ -307,7 +306,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('CodegenImpact:');
     WorldImpact.printOn(sb, this);
 
@@ -344,7 +343,7 @@
   List<ModularExpression> _expressions;
 
   CodegenRegistry(this._elementEnvironment, this._currentElement)
-      : this._worldImpact = new _CodegenImpact(_currentElement);
+      : this._worldImpact = _CodegenImpact(_currentElement);
 
   @override
   String toString() => 'CodegenRegistry for $_currentElement';
@@ -376,7 +375,7 @@
   }
 
   void registerInstantiatedClosure(FunctionEntity element) {
-    _worldImpact.registerStaticUse(new StaticUse.callMethod(element));
+    _worldImpact.registerStaticUse(StaticUse.callMethod(element));
   }
 
   void registerConstSymbol(String name) {
@@ -396,7 +395,7 @@
   }
 
   void registerInstantiation(InterfaceType type) {
-    registerTypeUse(new TypeUse.instantiation(type));
+    registerTypeUse(TypeUse.instantiation(type));
   }
 
   void registerAsyncMarker(AsyncMarker asyncMarker) {
@@ -426,7 +425,7 @@
   }
 
   CodegenResult close(js.Fun code) {
-    return new CodegenResult(
+    return CodegenResult(
         code, _worldImpact, _names ?? const [], _expressions ?? const []);
   }
 }
@@ -598,7 +597,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('CodegenResult(code=');
     sb.write(code != null ? js.DebugPrint(code) : '<null>,');
     sb.write('impact=$impact,');
@@ -678,7 +677,7 @@
         break;
     }
     source.end(tag);
-    return new ModularName(kind, data: data, set: set);
+    return ModularName(kind, data: data, set: set);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -805,7 +804,7 @@
         break;
     }
     source.end(tag);
-    return new ModularExpression(kind, data);
+    return ModularExpression(kind, data);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -857,7 +856,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('ModularExpression(kind=$kind,data=');
     if (data is ConstantValue) {
       sb.write((data as ConstantValue).toStructuredText(null));
@@ -1009,12 +1008,12 @@
 
   static void writeToDataSink(DataSink sink, js.Node node) {
     sink.begin(JsNodeTags.tag);
-    JsNodeSerializer serializer = new JsNodeSerializer._(sink);
+    JsNodeSerializer serializer = JsNodeSerializer._(sink);
     serializer.visit(node);
     sink.end(JsNodeTags.tag);
   }
 
-  void visit(js.Node node, {bool allowNull: false}) {
+  void visit(js.Node node, {bool allowNull = false}) {
     if (allowNull) {
       sink.writeBool(node != null);
       if (node != null) {
@@ -1038,32 +1037,32 @@
 
   @override
   void visitInterpolatedDeclaration(js.InterpolatedDeclaration node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedDeclaration');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedDeclaration');
   }
 
   @override
   void visitInterpolatedStatement(js.InterpolatedStatement node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedStatement');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedStatement');
   }
 
   @override
   void visitInterpolatedSelector(js.InterpolatedSelector node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedDeclaration');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedDeclaration');
   }
 
   @override
   void visitInterpolatedParameter(js.InterpolatedParameter node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedParameter');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedParameter');
   }
 
   @override
   void visitInterpolatedLiteral(js.InterpolatedLiteral node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedLiteral');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedLiteral');
   }
 
   @override
   void visitInterpolatedExpression(js.InterpolatedExpression node) {
-    throw new UnsupportedError('JsNodeSerializer.visitInterpolatedExpression');
+    throw UnsupportedError('JsNodeSerializer.visitInterpolatedExpression');
   }
 
   @override
@@ -1171,7 +1170,7 @@
       sink.end(JsNodeTags.stringBackedName);
       _writeInfo(node);
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           'Unexpected deferred expression: ${node.runtimeType}.');
     }
   }
@@ -1229,17 +1228,17 @@
 
   @override
   void visitDeferredString(js.DeferredString node) {
-    throw new UnsupportedError('JsNodeSerializer.visitDeferredString');
+    throw UnsupportedError('JsNodeSerializer.visitDeferredString');
   }
 
   @override
   void visitDeferredStatement(js.DeferredStatement node) {
-    throw new UnsupportedError('JsNodeSerializer.visitDeferredStatement');
+    throw UnsupportedError('JsNodeSerializer.visitDeferredStatement');
   }
 
   @override
   void visitDeferredNumber(js.DeferredNumber node) {
-    throw new UnsupportedError('JsNodeSerializer.visitDeferredNumber');
+    throw UnsupportedError('JsNodeSerializer.visitDeferredNumber');
   }
 
   @override
@@ -1269,7 +1268,7 @@
       sink.end(JsNodeTags.deferredHolderExpression);
       _writeInfo(node);
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           'Unexpected deferred expression: ${node.runtimeType}.');
     }
   }
@@ -1686,13 +1685,13 @@
       List<ModularExpression> modularExpressions) {
     source.begin(JsNodeTags.tag);
     JsNodeDeserializer deserializer =
-        new JsNodeDeserializer._(source, modularNames, modularExpressions);
+        JsNodeDeserializer._(source, modularNames, modularExpressions);
     js.Node node = deserializer.read();
     source.end(JsNodeTags.tag);
     return node;
   }
 
-  T read<T extends js.Node>({bool allowNull: false}) {
+  T read<T extends js.Node>({bool allowNull = false}) {
     if (allowNull) {
       bool hasValue = source.readBool();
       if (!hasValue) return null;
@@ -1702,54 +1701,54 @@
     switch (kind) {
       case JsNodeKind.comment:
         source.begin(JsNodeTags.comment);
-        node = new js.Comment(source.readString());
+        node = js.Comment(source.readString());
         source.end(JsNodeTags.comment);
         break;
       case JsNodeKind.await:
         source.begin(JsNodeTags.await);
-        node = new js.Await(read());
+        node = js.Await(read());
         source.end(JsNodeTags.await);
         break;
       case JsNodeKind.regExpLiteral:
         source.begin(JsNodeTags.regExpLiteral);
-        node = new js.RegExpLiteral(source.readString());
+        node = js.RegExpLiteral(source.readString());
         source.end(JsNodeTags.regExpLiteral);
         break;
       case JsNodeKind.property:
         source.begin(JsNodeTags.property);
         js.Expression name = read();
         js.Expression value = read();
-        node = new js.Property(name, value);
+        node = js.Property(name, value);
         source.end(JsNodeTags.property);
         break;
       case JsNodeKind.methodDefinition:
         source.begin(JsNodeTags.methodDefinition);
         js.Expression name = read();
         js.Expression function = read();
-        node = new js.MethodDefinition(name, function);
+        node = js.MethodDefinition(name, function);
         source.end(JsNodeTags.methodDefinition);
         break;
       case JsNodeKind.objectInitializer:
         source.begin(JsNodeTags.objectInitializer);
         List<js.Property> properties = readList();
         bool isOneLiner = source.readBool();
-        node = new js.ObjectInitializer(properties, isOneLiner: isOneLiner);
+        node = js.ObjectInitializer(properties, isOneLiner: isOneLiner);
         source.end(JsNodeTags.objectInitializer);
         break;
       case JsNodeKind.arrayHole:
         source.begin(JsNodeTags.arrayHole);
-        node = new js.ArrayHole();
+        node = js.ArrayHole();
         source.end(JsNodeTags.arrayHole);
         break;
       case JsNodeKind.arrayInitializer:
         source.begin(JsNodeTags.arrayInitializer);
         List<js.Expression> elements = readList();
-        node = new js.ArrayInitializer(elements);
+        node = js.ArrayInitializer(elements);
         source.end(JsNodeTags.arrayInitializer);
         break;
       case JsNodeKind.parentheses:
         source.begin(JsNodeTags.parentheses);
-        node = new js.Parentheses(read());
+        node = js.Parentheses(read());
         source.end(JsNodeTags.parentheses);
         break;
       case JsNodeKind.modularName:
@@ -1763,44 +1762,44 @@
         source.begin(JsNodeTags.asyncName);
         js.Name prefix = read();
         js.Name base = read();
-        node = new AsyncName(prefix, base);
+        node = AsyncName(prefix, base);
         source.end(JsNodeTags.asyncName);
         break;
       case JsNodeKind.stringBackedName:
         source.begin(JsNodeTags.stringBackedName);
-        node = new StringBackedName(source.readString());
+        node = StringBackedName(source.readString());
         source.end(JsNodeTags.stringBackedName);
         break;
       case JsNodeKind.stringConcatenation:
         source.begin(JsNodeTags.stringConcatenation);
         List<js.Literal> parts = readList();
-        node = new js.StringConcatenation(parts);
+        node = js.StringConcatenation(parts);
         source.end(JsNodeTags.stringConcatenation);
         break;
       case JsNodeKind.literalNull:
         source.begin(JsNodeTags.literalNull);
-        node = new js.LiteralNull();
+        node = js.LiteralNull();
         source.end(JsNodeTags.literalNull);
         break;
       case JsNodeKind.literalNumber:
         source.begin(JsNodeTags.literalNumber);
-        node = new js.LiteralNumber(source.readString());
+        node = js.LiteralNumber(source.readString());
         source.end(JsNodeTags.literalNumber);
         break;
       case JsNodeKind.literalString:
         source.begin(JsNodeTags.literalString);
-        node = new js.LiteralString(source.readString());
+        node = js.LiteralString(source.readString());
         source.end(JsNodeTags.literalString);
         break;
       case JsNodeKind.literalStringFromName:
         source.begin(JsNodeTags.literalStringFromName);
         js.Name name = read();
-        node = new js.LiteralStringFromName(name);
+        node = js.LiteralStringFromName(name);
         source.end(JsNodeTags.literalStringFromName);
         break;
       case JsNodeKind.literalBool:
         source.begin(JsNodeTags.literalBool);
-        node = new js.LiteralBool(source.readBool());
+        node = js.LiteralBool(source.readBool());
         source.end(JsNodeTags.literalBool);
         break;
       case JsNodeKind.modularExpression:
@@ -1817,7 +1816,7 @@
         js.Block body = read();
         js.AsyncModifier asyncModifier =
             source.readEnum(js.AsyncModifier.values);
-        node = new js.Fun(params, body, asyncModifier: asyncModifier);
+        node = js.Fun(params, body, asyncModifier: asyncModifier);
         source.end(JsNodeTags.function);
         break;
       case JsNodeKind.arrowFunction:
@@ -1826,57 +1825,57 @@
         js.Block body = read();
         js.AsyncModifier asyncModifier =
             source.readEnum(js.AsyncModifier.values);
-        node = new js.ArrowFunction(params, body, asyncModifier: asyncModifier);
+        node = js.ArrowFunction(params, body, asyncModifier: asyncModifier);
         source.end(JsNodeTags.arrowFunction);
         break;
       case JsNodeKind.namedFunction:
         source.begin(JsNodeTags.namedFunction);
         js.Declaration name = read();
         js.Fun function = read();
-        node = new js.NamedFunction(name, function);
+        node = js.NamedFunction(name, function);
         source.end(JsNodeTags.namedFunction);
         break;
       case JsNodeKind.access:
         source.begin(JsNodeTags.access);
         js.Expression receiver = read();
         js.Expression selector = read();
-        node = new js.PropertyAccess(receiver, selector);
+        node = js.PropertyAccess(receiver, selector);
         source.end(JsNodeTags.access);
         break;
       case JsNodeKind.parameter:
         source.begin(JsNodeTags.parameter);
-        node = new js.Parameter(source.readString());
+        node = js.Parameter(source.readString());
         source.end(JsNodeTags.parameter);
         break;
       case JsNodeKind.variableDeclaration:
         source.begin(JsNodeTags.variableDeclaration);
         String name = source.readString();
         bool allowRename = source.readBool();
-        node = new js.VariableDeclaration(name, allowRename: allowRename);
+        node = js.VariableDeclaration(name, allowRename: allowRename);
         source.end(JsNodeTags.variableDeclaration);
         break;
       case JsNodeKind.thisExpression:
         source.begin(JsNodeTags.thisExpression);
-        node = new js.This();
+        node = js.This();
         source.end(JsNodeTags.thisExpression);
         break;
       case JsNodeKind.variableUse:
         source.begin(JsNodeTags.variableUse);
-        node = new js.VariableUse(source.readString());
+        node = js.VariableUse(source.readString());
         source.end(JsNodeTags.variableUse);
         break;
       case JsNodeKind.postfix:
         source.begin(JsNodeTags.postfix);
         String op = source.readString();
         js.Expression argument = read();
-        node = new js.Postfix(op, argument);
+        node = js.Postfix(op, argument);
         source.end(JsNodeTags.postfix);
         break;
       case JsNodeKind.prefix:
         source.begin(JsNodeTags.prefix);
         String op = source.readString();
         js.Expression argument = read();
-        node = new js.Prefix(op, argument);
+        node = js.Prefix(op, argument);
         source.end(JsNodeTags.prefix);
         break;
       case JsNodeKind.binary:
@@ -1884,21 +1883,21 @@
         String op = source.readString();
         js.Expression left = read();
         js.Expression right = read();
-        node = new js.Binary(op, left, right);
+        node = js.Binary(op, left, right);
         source.end(JsNodeTags.binary);
         break;
       case JsNodeKind.callExpression:
         source.begin(JsNodeTags.callExpression);
         js.Expression target = read();
         List<js.Expression> arguments = readList();
-        node = new js.Call(target, arguments);
+        node = js.Call(target, arguments);
         source.end(JsNodeTags.callExpression);
         break;
       case JsNodeKind.newExpression:
         source.begin(JsNodeTags.newExpression);
         js.Expression cls = read();
         List<js.Expression> arguments = readList();
-        node = new js.New(cls, arguments);
+        node = js.New(cls, arguments);
         source.end(JsNodeTags.newExpression);
         break;
       case JsNodeKind.conditional:
@@ -1906,14 +1905,14 @@
         js.Expression condition = read();
         js.Expression then = read();
         js.Expression otherwise = read();
-        node = new js.Conditional(condition, then, otherwise);
+        node = js.Conditional(condition, then, otherwise);
         source.end(JsNodeTags.conditional);
         break;
       case JsNodeKind.variableInitialization:
         source.begin(JsNodeTags.variableInitialization);
         js.Declaration declaration = read();
         js.Expression value = source.readValueOrNull(read);
-        node = new js.VariableInitialization(declaration, value);
+        node = js.VariableInitialization(declaration, value);
         source.end(JsNodeTags.variableInitialization);
         break;
       case JsNodeKind.assignment:
@@ -1921,73 +1920,73 @@
         js.Expression leftHandSide = read();
         String op = source.readStringOrNull();
         js.Expression value = read();
-        node = new js.Assignment.compound(leftHandSide, op, value);
+        node = js.Assignment.compound(leftHandSide, op, value);
         source.end(JsNodeTags.assignment);
         break;
       case JsNodeKind.variableDeclarationList:
         source.begin(JsNodeTags.variableDeclarationList);
         List<js.VariableInitialization> declarations = readList();
         bool indentSplits = source.readBool();
-        node = new js.VariableDeclarationList(declarations,
+        node = js.VariableDeclarationList(declarations,
             indentSplits: indentSplits);
         source.end(JsNodeTags.variableDeclarationList);
         break;
       case JsNodeKind.literalExpression:
         source.begin(JsNodeTags.literalExpression);
-        node = new js.LiteralExpression(source.readString());
+        node = js.LiteralExpression(source.readString());
         source.end(JsNodeTags.literalExpression);
         break;
       case JsNodeKind.dartYield:
         source.begin(JsNodeTags.dartYield);
         js.Expression expression = read();
         bool hasStar = source.readBool();
-        node = new js.DartYield(expression, hasStar);
+        node = js.DartYield(expression, hasStar);
         source.end(JsNodeTags.dartYield);
         break;
       case JsNodeKind.literalStatement:
         source.begin(JsNodeTags.literalStatement);
-        node = new js.LiteralStatement(source.readString());
+        node = js.LiteralStatement(source.readString());
         source.end(JsNodeTags.literalStatement);
         break;
       case JsNodeKind.labeledStatement:
         source.begin(JsNodeTags.labeledStatement);
         String label = source.readString();
         js.Statement body = read();
-        node = new js.LabeledStatement(label, body);
+        node = js.LabeledStatement(label, body);
         source.end(JsNodeTags.labeledStatement);
         break;
       case JsNodeKind.functionDeclaration:
         source.begin(JsNodeTags.functionDeclaration);
         js.Declaration name = read();
         js.Fun function = read();
-        node = new js.FunctionDeclaration(name, function);
+        node = js.FunctionDeclaration(name, function);
         source.end(JsNodeTags.functionDeclaration);
         break;
       case JsNodeKind.switchDefault:
         source.begin(JsNodeTags.switchDefault);
         js.Block body = read();
-        node = new js.Default(body);
+        node = js.Default(body);
         source.end(JsNodeTags.switchDefault);
         break;
       case JsNodeKind.switchCase:
         source.begin(JsNodeTags.switchCase);
         js.Expression expression = read();
         js.Block body = read();
-        node = new js.Case(expression, body);
+        node = js.Case(expression, body);
         source.end(JsNodeTags.switchCase);
         break;
       case JsNodeKind.switchStatement:
         source.begin(JsNodeTags.switchStatement);
         js.Expression key = read();
         List<js.SwitchClause> cases = readList();
-        node = new js.Switch(key, cases);
+        node = js.Switch(key, cases);
         source.end(JsNodeTags.switchStatement);
         break;
       case JsNodeKind.catchClause:
         source.begin(JsNodeTags.catchClause);
         js.Declaration declaration = read();
         js.Block body = read();
-        node = new js.Catch(declaration, body);
+        node = js.Catch(declaration, body);
         source.end(JsNodeTags.catchClause);
         break;
       case JsNodeKind.tryStatement:
@@ -1995,45 +1994,45 @@
         js.Block body = read();
         js.Catch catchPart = source.readValueOrNull(read);
         js.Block finallyPart = source.readValueOrNull(read);
-        node = new js.Try(body, catchPart, finallyPart);
+        node = js.Try(body, catchPart, finallyPart);
         source.end(JsNodeTags.tryStatement);
         break;
       case JsNodeKind.throwStatement:
         source.begin(JsNodeTags.throwStatement);
         js.Expression expression = read();
-        node = new js.Throw(expression);
+        node = js.Throw(expression);
         source.end(JsNodeTags.throwStatement);
         break;
       case JsNodeKind.returnStatement:
         source.begin(JsNodeTags.returnStatement);
         js.Expression value = source.readValueOrNull(read);
-        node = new js.Return(value);
+        node = js.Return(value);
         source.end(JsNodeTags.returnStatement);
         break;
       case JsNodeKind.breakStatement:
         source.begin(JsNodeTags.breakStatement);
         String targetLabel = source.readStringOrNull();
-        node = new js.Break(targetLabel);
+        node = js.Break(targetLabel);
         source.end(JsNodeTags.breakStatement);
         break;
       case JsNodeKind.continueStatement:
         source.begin(JsNodeTags.continueStatement);
         String targetLabel = source.readStringOrNull();
-        node = new js.Continue(targetLabel);
+        node = js.Continue(targetLabel);
         source.end(JsNodeTags.continueStatement);
         break;
       case JsNodeKind.doStatement:
         source.begin(JsNodeTags.doStatement);
         js.Statement body = read();
         js.Expression condition = read();
-        node = new js.Do(body, condition);
+        node = js.Do(body, condition);
         source.end(JsNodeTags.doStatement);
         break;
       case JsNodeKind.whileStatement:
         source.begin(JsNodeTags.whileStatement);
         js.Expression condition = read();
         js.Statement body = read();
-        node = new js.While(condition, body);
+        node = js.While(condition, body);
         source.end(JsNodeTags.whileStatement);
         break;
       case JsNodeKind.forInStatement:
@@ -2041,7 +2040,7 @@
         js.Expression leftHandSide = read();
         js.Expression object = read();
         js.Statement body = read();
-        node = new js.ForIn(leftHandSide, object, body);
+        node = js.ForIn(leftHandSide, object, body);
         source.end(JsNodeTags.forInStatement);
         break;
       case JsNodeKind.forStatement:
@@ -2050,7 +2049,7 @@
         js.Expression condition = read(allowNull: true);
         js.Expression update = read(allowNull: true);
         js.Statement body = read();
-        node = new js.For(init, condition, update, body);
+        node = js.For(init, condition, update, body);
         source.end(JsNodeTags.forStatement);
         break;
       case JsNodeKind.ifStatement:
@@ -2058,29 +2057,29 @@
         js.Expression condition = read();
         js.Statement then = read();
         js.Statement otherwise = read();
-        node = new js.If(condition, then, otherwise);
+        node = js.If(condition, then, otherwise);
         source.end(JsNodeTags.ifStatement);
         break;
       case JsNodeKind.emptyStatement:
         source.begin(JsNodeTags.emptyStatement);
-        node = new js.EmptyStatement();
+        node = js.EmptyStatement();
         source.end(JsNodeTags.emptyStatement);
         break;
       case JsNodeKind.expressionStatement:
         source.begin(JsNodeTags.expressionStatement);
-        node = new js.ExpressionStatement(read());
+        node = js.ExpressionStatement(read());
         source.end(JsNodeTags.expressionStatement);
         break;
       case JsNodeKind.block:
         source.begin(JsNodeTags.block);
         List<js.Statement> statements = readList();
-        node = new js.Block(statements);
+        node = js.Block(statements);
         source.end(JsNodeTags.block);
         break;
       case JsNodeKind.program:
         source.begin(JsNodeTags.program);
         List<js.Statement> body = readList();
-        node = new js.Program(body);
+        node = js.Program(body);
         source.end(JsNodeTags.program);
         break;
       case JsNodeKind.stringReference:
@@ -2109,7 +2108,7 @@
     return node;
   }
 
-  List<T> readList<T extends js.Node>({bool emptyAsNull: false}) {
+  List<T> readList<T extends js.Node>({bool emptyAsNull = false}) {
     return source.readList(read, emptyAsNull: emptyAsNull);
   }
 }
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 5abee00..74804d7 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -69,89 +69,89 @@
 /// [Name]s commonly used.
 class Names {
   /// The name of the call operator.
-  static const Name call = const PublicName(Identifiers.call);
+  static const Name call = PublicName(Identifiers.call);
 
   /// The name of the current element property used on iterators in for-each
   /// loops.
-  static const Name current = const PublicName(Identifiers.current);
+  static const Name current = PublicName(Identifiers.current);
 
   /// The name of the dynamic type.
-  static const Name dynamic_ = const PublicName('dynamic');
+  static const Name dynamic_ = PublicName('dynamic');
 
   /// The name of the iterator property used in for-each loops.
-  static const Name iterator = const PublicName(Identifiers.iterator);
+  static const Name iterator = PublicName(Identifiers.iterator);
 
   /// The name of the move next method used on iterators in for-each loops.
-  static const Name moveNext = const PublicName('moveNext');
+  static const Name moveNext = PublicName('moveNext');
 
   /// The name of the no such method handler on 'Object'.
-  static const Name noSuchMethod_ = const PublicName(Identifiers.noSuchMethod_);
+  static const Name noSuchMethod_ = PublicName(Identifiers.noSuchMethod_);
 
   /// The name of the to-string method on 'Object'.
-  static const Name toString_ = const PublicName('toString');
+  static const Name toString_ = PublicName('toString');
 
-  static const Name INDEX_NAME = const PublicName("[]");
-  static const Name INDEX_SET_NAME = const PublicName("[]=");
+  static const Name INDEX_NAME = PublicName("[]");
+  static const Name INDEX_SET_NAME = PublicName("[]=");
   static const Name CALL_NAME = Names.call;
 
-  static const Name length = const PublicName(Identifiers.length);
+  static const Name length = PublicName(Identifiers.length);
 
-  static const Name runtimeType_ = const PublicName(Identifiers.runtimeType_);
+  static const Name runtimeType_ = PublicName(Identifiers.runtimeType_);
 
-  static const Name genericInstantiation = const PublicName('instantiate');
+  static const Name genericInstantiation = PublicName('instantiate');
 
   /// The name of the signature function in closure classes.
-  static const Name signature = const PublicName(Identifiers.signature);
+  static const Name signature = PublicName(Identifiers.signature);
 }
 
 /// [Selector]s commonly used.
 class Selectors {
   /// The selector for calling the cancel method on 'StreamIterator'.
   static final Selector cancel =
-      new Selector.call(const PublicName('cancel'), CallStructure.NO_ARGS);
+      Selector.call(const PublicName('cancel'), CallStructure.NO_ARGS);
 
   /// The selector for getting the current element property used in for-each
   /// loops.
-  static final Selector current = new Selector.getter(Names.current);
+  static final Selector current = Selector.getter(Names.current);
 
   /// The selector for getting the iterator property used in for-each loops.
-  static final Selector iterator = new Selector.getter(Names.iterator);
+  static final Selector iterator = Selector.getter(Names.iterator);
 
   /// The selector for calling the move next method used in for-each loops.
   static final Selector moveNext =
-      new Selector.call(Names.moveNext, CallStructure.NO_ARGS);
+      Selector.call(Names.moveNext, CallStructure.NO_ARGS);
 
   /// The selector for calling the no such method handler on 'Object'.
   static final Selector noSuchMethod_ =
-      new Selector.call(Names.noSuchMethod_, CallStructure.ONE_ARG);
+      Selector.call(Names.noSuchMethod_, CallStructure.ONE_ARG);
 
   /// The selector for tearing off noSuchMethod.
   static final Selector noSuchMethodGetter =
-      new Selector.getter(Names.noSuchMethod_);
+      Selector.getter(Names.noSuchMethod_);
 
   /// The selector for calling the to-string method on 'Object'.
   static final Selector toString_ =
-      new Selector.call(Names.toString_, CallStructure.NO_ARGS);
+      Selector.call(Names.toString_, CallStructure.NO_ARGS);
 
   /// The selector for tearing off toString.
-  static final Selector toStringGetter = new Selector.getter(Names.toString_);
+  static final Selector toStringGetter = Selector.getter(Names.toString_);
 
   static final Selector hashCode_ =
-      new Selector.getter(const PublicName('hashCode'));
+      Selector.getter(const PublicName('hashCode'));
 
   static final Selector compareTo =
-      new Selector.call(const PublicName("compareTo"), CallStructure.ONE_ARG);
+      Selector.call(const PublicName("compareTo"), CallStructure.ONE_ARG);
 
-  static final Selector equals = new Selector.binaryOperator('==');
+  static final Selector equals = Selector.binaryOperator('==');
 
-  static final Selector length = new Selector.getter(Names.length);
+  static final Selector length = Selector.getter(Names.length);
 
   static final Selector codeUnitAt =
-      new Selector.call(const PublicName('codeUnitAt'), CallStructure.ONE_ARG);
+      Selector.call(const PublicName('codeUnitAt'), CallStructure.ONE_ARG);
 
-  static final Selector index = new Selector.index();
+  static final Selector index = Selector.index();
 
-  static final Selector runtimeType_ = new Selector.getter(Names.runtimeType_);
+  static final Selector runtimeType_ = Selector.getter(Names.runtimeType_);
 
   /// List of all the selectors held in static fields.
   ///
@@ -179,89 +179,84 @@
 /// [Uri]s commonly used.
 class Uris {
   /// The URI for 'dart:async'.
-  static final Uri dart_async = new Uri(scheme: 'dart', path: 'async');
+  static final Uri dart_async = Uri(scheme: 'dart', path: 'async');
 
   /// The URI for 'dart:collection'.
-  static final Uri dart_collection =
-      new Uri(scheme: 'dart', path: 'collection');
+  static final Uri dart_collection = Uri(scheme: 'dart', path: 'collection');
 
   /// The URI for 'dart:core'.
-  static final Uri dart_core = new Uri(scheme: 'dart', path: 'core');
+  static final Uri dart_core = Uri(scheme: 'dart', path: 'core');
 
   /// The URI for 'dart:html'.
-  static final Uri dart_html = new Uri(scheme: 'dart', path: 'html');
+  static final Uri dart_html = Uri(scheme: 'dart', path: 'html');
 
   /// The URI for 'dart:html_common'.
-  static final Uri dart_html_common =
-      new Uri(scheme: 'dart', path: 'html_common');
+  static final Uri dart_html_common = Uri(scheme: 'dart', path: 'html_common');
 
   /// The URI for 'dart:indexed_db'.
-  static final Uri dart_indexed_db =
-      new Uri(scheme: 'dart', path: 'indexed_db');
+  static final Uri dart_indexed_db = Uri(scheme: 'dart', path: 'indexed_db');
 
   /// The URI for 'dart:isolate'.
-  static final Uri dart_isolate = new Uri(scheme: 'dart', path: 'isolate');
+  static final Uri dart_isolate = Uri(scheme: 'dart', path: 'isolate');
 
   /// The URI for 'dart:math'.
-  static final Uri dart_math = new Uri(scheme: 'dart', path: 'math');
+  static final Uri dart_math = Uri(scheme: 'dart', path: 'math');
 
   /// The URI for 'dart:mirrors'.
-  static final Uri dart_mirrors = new Uri(scheme: 'dart', path: 'mirrors');
+  static final Uri dart_mirrors = Uri(scheme: 'dart', path: 'mirrors');
 
   /// The URI for 'dart:_internal'.
-  static final Uri dart__internal = new Uri(scheme: 'dart', path: '_internal');
+  static final Uri dart__internal = Uri(scheme: 'dart', path: '_internal');
 
   /// The URI for 'dart:_native_typed_data'.
   static final Uri dart__native_typed_data =
-      new Uri(scheme: 'dart', path: '_native_typed_data');
+      Uri(scheme: 'dart', path: '_native_typed_data');
 
   /// The URI for 'dart:typed_data'.
-  static final Uri dart_typed_data =
-      new Uri(scheme: 'dart', path: 'typed_data');
+  static final Uri dart_typed_data = Uri(scheme: 'dart', path: 'typed_data');
 
   /// The URI for 'dart:svg'.
-  static final Uri dart_svg = new Uri(scheme: 'dart', path: 'svg');
+  static final Uri dart_svg = Uri(scheme: 'dart', path: 'svg');
 
   /// The URI for 'dart:web_audio'.
-  static final Uri dart_web_audio = new Uri(scheme: 'dart', path: 'web_audio');
+  static final Uri dart_web_audio = Uri(scheme: 'dart', path: 'web_audio');
 
   /// The URI for 'dart:web_gl'.
-  static final Uri dart_web_gl = new Uri(scheme: 'dart', path: '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 = new Uri(scheme: 'dart', path: '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 =
-      new Uri(scheme: 'dart', path: '_js_helper');
+  static final Uri dart__js_helper = Uri(scheme: 'dart', path: '_js_helper');
 
   /// The URI for 'dart:_late_helper'.
   static final Uri dart__late_helper =
       Uri(scheme: 'dart', path: '_late_helper');
 
   /// The URI for 'dart:_rti'.
-  static final Uri dart__rti = new Uri(scheme: 'dart', path: '_rti');
+  static final Uri dart__rti = Uri(scheme: 'dart', path: '_rti');
 
   /// The URI for 'dart:_interceptors'.
   static final Uri dart__interceptors =
-      new Uri(scheme: 'dart', path: '_interceptors');
+      Uri(scheme: 'dart', path: '_interceptors');
 
   /// The URI for 'dart:_foreign_helper'.
   static final Uri dart__foreign_helper =
-      new Uri(scheme: 'dart', path: '_foreign_helper');
+      Uri(scheme: 'dart', path: '_foreign_helper');
 
   /// The URI for 'dart:_js_names'.
-  static final Uri dart__js_names = new Uri(scheme: 'dart', path: '_js_names');
+  static final Uri dart__js_names = Uri(scheme: 'dart', path: '_js_names');
 
   /// The URI for 'dart:_js_embedded_names'.
   static final Uri dart__js_embedded_names =
-      new Uri(scheme: 'dart', path: '_js_embedded_names');
+      Uri(scheme: 'dart', path: '_js_embedded_names');
 
   /// The URI for 'dart:js'.
   static final Uri dart_js = Uri(scheme: 'dart', path: 'js');
 
   /// The URI for 'package:js'.
-  static final Uri package_js = new Uri(scheme: 'package', path: 'js/js.dart');
+  static final Uri package_js = Uri(scheme: 'package', path: 'js/js.dart');
 
   /// The URI for 'dart:_js_annotations'.
   static final Uri dart__js_annotations =
@@ -269,5 +264,5 @@
 
   /// The URI for 'package:meta/dart2js.dart'.
   static final Uri package_meta_dart2js =
-      new Uri(scheme: 'package', path: 'meta/dart2js.dart');
+      Uri(scheme: 'package', path: 'meta/dart2js.dart');
 }
diff --git a/pkg/compiler/lib/src/common/tasks.dart b/pkg/compiler/lib/src/common/tasks.dart
index 6022b50..35aff31 100644
--- a/pkg/compiler/lib/src/common/tasks.dart
+++ b/pkg/compiler/lib/src/common/tasks.dart
@@ -28,7 +28,7 @@
   Map _zoneValues;
 
   CompilerTask(this._measurer)
-      : _watch = _measurer.enableTaskMeasurements ? new Stopwatch() : null;
+      : _watch = _measurer.enableTaskMeasurements ? Stopwatch() : null;
 
   /// Whether measurement is disabled. The functions [measure] and [measureIo]
   /// only measure time if measurements are enabled.
@@ -107,7 +107,7 @@
 
     return runZoned(action,
         zoneValues: _zoneValues ??= {_measurer: this},
-        zoneSpecification: _zoneSpecification ??= new ZoneSpecification(
+        zoneSpecification: _zoneSpecification ??= ZoneSpecification(
             run: _run, runUnary: _runUnary, runBinary: _runBinary));
   }
 
@@ -183,7 +183,7 @@
     // Use a nested CompilerTask for the measurement to ensure nested [measure]
     // calls work correctly. The subtasks will never themselves have nested
     // subtasks because they are not accessible outside.
-    GenericTask subtask = _subtasks[name] ??= new GenericTask(name, _measurer);
+    GenericTask subtask = _subtasks[name] ??= GenericTask(name, _measurer);
     return subtask.measure(action);
   }
 
@@ -200,7 +200,7 @@
     // Use a nested CompilerTask for the measurement to ensure nested [measure]
     // calls work correctly. The subtasks will never themselves have nested
     // subtasks because they are not accessible outside.
-    GenericTask subtask = _subtasks[name] ??= new GenericTask(name, _measurer);
+    GenericTask subtask = _subtasks[name] ??= GenericTask(name, _measurer);
     return subtask.measureIo(action);
   }
 
@@ -225,12 +225,12 @@
   ///
   /// Note: MUST be the first field of this class to ensure [wallclock] is
   /// started before other computations.
-  final Stopwatch _wallClock = new Stopwatch()..start();
+  final Stopwatch _wallClock = Stopwatch()..start();
 
   Duration get elapsedWallClock => _wallClock.elapsed;
 
   /// Measures gaps between zoned closures due to asynchronicity.
-  final Stopwatch _asyncWallClock = new Stopwatch();
+  final Stopwatch _asyncWallClock = Stopwatch();
 
   Duration get elapsedAsyncWallClock => _asyncWallClock.elapsed;
 
@@ -241,7 +241,7 @@
   @override
   final int hashCode = _hashCodeGenerator++;
 
-  Measurer({this.enableTaskMeasurements: false});
+  Measurer({this.enableTaskMeasurements = false});
 
   /// The currently running task, that is, the task whose [Stopwatch] is
   /// currently running.
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 8fdefc4..6f2a3bd 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -388,6 +388,9 @@
   /// Holds the method "requiresPreamble" in _js_helper.
   FunctionEntity get requiresPreambleMarker;
 
+  /// Holds the method "_rawStartupMetrics" in _js_helper.
+  FunctionEntity get rawStartupMetrics;
+
   FunctionEntity get loadLibraryWrapper;
 
   FunctionEntity get loadDeferredLibrary;
@@ -567,10 +570,6 @@
   FieldEntity get pragmaClassOptionsField;
 
   bool isCreateInvocationMirrorHelper(MemberEntity member);
-
-  ClassEntity get metaNoInlineClass;
-
-  ClassEntity get metaTryInlineClass;
 }
 
 abstract class JCommonElements implements CommonElements {
@@ -1665,6 +1664,11 @@
   FunctionEntity get requiresPreambleMarker =>
       _requiresPreambleMarker ??= _findHelperFunction('requiresPreamble');
 
+  FunctionEntity _rawStartupMetrics;
+  @override
+  FunctionEntity get rawStartupMetrics =>
+      _rawStartupMetrics ??= _findHelperFunction('rawStartupMetrics');
+
   @override
   FunctionEntity get loadLibraryWrapper =>
       _findHelperFunction("_loadLibraryWrapper");
@@ -2104,38 +2108,6 @@
       _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
       'JsBuiltin');
 
-  bool _metaAnnotationChecked = false;
-  ClassEntity _metaNoInlineClass;
-  ClassEntity _metaTryInlineClass;
-
-  void _ensureMetaAnnotations() {
-    if (!_metaAnnotationChecked) {
-      _metaAnnotationChecked = true;
-      LibraryEntity library = _env.lookupLibrary(Uris.package_meta_dart2js);
-      if (library != null) {
-        _metaNoInlineClass = _env.lookupClass(library, '_NoInline');
-        _metaTryInlineClass = _env.lookupClass(library, '_TryInline');
-        if (_metaNoInlineClass == null || _metaTryInlineClass == null) {
-          // This is not the package you're looking for.
-          _metaNoInlineClass = null;
-          _metaTryInlineClass = null;
-        }
-      }
-    }
-  }
-
-  @override
-  ClassEntity get metaNoInlineClass {
-    _ensureMetaAnnotations();
-    return _metaNoInlineClass;
-  }
-
-  @override
-  ClassEntity get metaTryInlineClass {
-    _ensureMetaAnnotations();
-    return _metaTryInlineClass;
-  }
-
   @override
   bool isForeign(MemberEntity element) => element.library == foreignLibrary;
 
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index d9303a6..024488f 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -18,7 +18,11 @@
 import 'common/work.dart' show WorkItem;
 import 'common.dart';
 import 'common_elements.dart' show ElementEnvironment;
-import 'deferred_load/deferred_load.dart' show DeferredLoadTask, OutputUnitData;
+import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
+import 'deferred_load/output_unit.dart' show OutputUnitData;
+import 'deferred_load/program_split_constraints/nodes.dart' as psc
+    show ConstraintData;
+import 'deferred_load/program_split_constraints/parser.dart' as psc show Parser;
 import 'diagnostics/code_location.dart';
 import 'diagnostics/messages.dart' show Message, MessageTemplate;
 import 'dump_info.dart' show DumpInfoTask;
@@ -120,6 +124,8 @@
 
   bool compilationFailed = false;
 
+  psc.ConstraintData programSplitConstraintsData;
+
   // Callback function used for testing resolution enqueuing.
   void Function() onResolutionQueueEmptyForTesting;
 
@@ -241,6 +247,12 @@
     assert(uri != null);
     reporter.log('Compiling $uri (${options.buildId})');
 
+    if (options.readProgramSplit != null) {
+      var constraintParser = psc.Parser();
+      programSplitConstraintsData =
+          await constraintParser.read(provider, options.readProgramSplit);
+    }
+
     if (onlyPerformGlobalTypeInference) {
       ir.Component component =
           await serializationTask.deserializeComponentAndUpdateOptions();
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index d2d5b8f..4c3a3e7 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -12,37 +12,37 @@
 import '../elements/types.dart';
 import 'values.dart';
 
-final _BITS32 = new BigInt.from(0xFFFFFFFF);
+final _BITS32 = BigInt.from(0xFFFFFFFF);
 
-const add = const AddOperation();
-const bitAnd = const BitAndOperation();
-const bitNot = const BitNotOperation();
-const bitOr = const BitOrOperation();
-const bitXor = const BitXorOperation();
-const booleanAnd = const BooleanAndOperation();
-const booleanOr = const BooleanOrOperation();
-const divide = const DivideOperation();
-const equal = const EqualsOperation();
-const greaterEqual = const GreaterEqualOperation();
-const greater = const GreaterOperation();
-const identity = const IdentityOperation();
-const ifNull = const IfNullOperation();
-const lessEqual = const LessEqualOperation();
-const less = const LessOperation();
-const modulo = const ModuloOperation();
-const multiply = const MultiplyOperation();
-const negate = const NegateOperation();
-const not = const NotOperation();
-const remainder = const RemainderOperation();
-const shiftLeft = const ShiftLeftOperation();
-const shiftRight = const ShiftRightOperation();
-const shiftRightUnsigned = const ShiftRightUnsignedOperation();
-const subtract = const SubtractOperation();
-const truncatingDivide = const TruncatingDivideOperation();
-const codeUnitAt = const CodeUnitAtOperation();
-const round = const RoundOperation();
-const toInt = const ToIntOperation();
-const abs = const UnfoldedUnaryOperation('abs');
+const add = AddOperation();
+const bitAnd = BitAndOperation();
+const bitNot = BitNotOperation();
+const bitOr = BitOrOperation();
+const bitXor = BitXorOperation();
+const booleanAnd = BooleanAndOperation();
+const booleanOr = BooleanOrOperation();
+const divide = DivideOperation();
+const equal = EqualsOperation();
+const greaterEqual = GreaterEqualOperation();
+const greater = GreaterOperation();
+const identity = IdentityOperation();
+const ifNull = IfNullOperation();
+const lessEqual = LessEqualOperation();
+const less = LessOperation();
+const modulo = ModuloOperation();
+const multiply = MultiplyOperation();
+const negate = NegateOperation();
+const not = NotOperation();
+const remainder = RemainderOperation();
+const shiftLeft = ShiftLeftOperation();
+const shiftRight = ShiftRightOperation();
+const shiftRightUnsigned = ShiftRightUnsignedOperation();
+const subtract = SubtractOperation();
+const truncatingDivide = TruncatingDivideOperation();
+const codeUnitAt = CodeUnitAtOperation();
+const round = RoundOperation();
+const toInt = ToIntOperation();
+const abs = UnfoldedUnaryOperation('abs');
 
 /// Returns true if [value] will turn into NaN or infinity
 /// at runtime.
@@ -56,13 +56,13 @@
     IntConstantValue intConstant = constant;
     BigInt intValue = intConstant.intValue;
     if (_integerBecomesNanOrInfinity(intValue)) {
-      return new DoubleConstantValue(intValue.toDouble());
+      return DoubleConstantValue(intValue.toDouble());
     }
     // If the integer loses precision with JavaScript numbers, use
     // the floored version JavaScript will use.
-    BigInt floorValue = new BigInt.from(intValue.toDouble());
+    BigInt floorValue = BigInt.from(intValue.toDouble());
     if (floorValue != intValue) {
-      return new IntConstantValue(floorValue);
+      return IntConstantValue(floorValue);
     }
   } else if (constant.isDouble) {
     DoubleConstantValue doubleResult = constant;
@@ -72,7 +72,7 @@
         !constant.isMinusZero) {
       double truncated = doubleValue.truncateToDouble();
       if (truncated == doubleValue) {
-        return new IntConstantValue(new BigInt.from(truncated));
+        return IntConstantValue(BigInt.from(truncated));
       }
     }
   }
@@ -80,15 +80,14 @@
 }
 
 NumConstantValue createInt(BigInt i) =>
-    _convertToJavaScriptConstant(new IntConstantValue(i));
-NumConstantValue createIntFromInt(int i) => createInt(new BigInt.from(i));
-NumConstantValue _createInt32(BigInt i) => new IntConstantValue(i & _BITS32);
+    _convertToJavaScriptConstant(IntConstantValue(i));
+NumConstantValue createIntFromInt(int i) => createInt(BigInt.from(i));
+NumConstantValue _createInt32(BigInt i) => IntConstantValue(i & _BITS32);
 NumConstantValue createDouble(double d) =>
-    _convertToJavaScriptConstant(new DoubleConstantValue(d));
-StringConstantValue createString(String string) =>
-    new StringConstantValue(string);
-BoolConstantValue createBool(bool value) => new BoolConstantValue(value);
-NullConstantValue createNull() => new NullConstantValue();
+    _convertToJavaScriptConstant(DoubleConstantValue(d));
+StringConstantValue createString(String string) => StringConstantValue(string);
+BoolConstantValue createBool(bool value) => BoolConstantValue(value);
+NullConstantValue createNull() => NullConstantValue();
 
 ListConstantValue createList(CommonElements commonElements,
     InterfaceType sourceType, List<ConstantValue> values) {
@@ -98,7 +97,7 @@
 
 ConstantValue createType(CommonElements commonElements, DartType type) {
   InterfaceType instanceType = commonElements.typeLiteralType;
-  return new TypeConstantValue(type, instanceType);
+  return TypeConstantValue(type, instanceType);
 }
 
 /// Returns true if the [constant] is an integer at runtime.
@@ -146,10 +145,10 @@
   DartType elementType = type.typeArguments.first;
   InterfaceType mapType =
       commonElements.mapType(elementType, commonElements.nullType);
-  List<NullConstantValue> nulls = new List<NullConstantValue>.filled(
-      values.length, const NullConstantValue());
+  List<NullConstantValue> nulls =
+      List<NullConstantValue>.filled(values.length, const NullConstantValue());
   MapConstantValue entries = createMap(commonElements, mapType, values, nulls);
-  return new JavaScriptSetConstant(type, entries);
+  return JavaScriptSetConstant(type, entries);
 }
 
 MapConstantValue createMap(
@@ -180,7 +179,7 @@
   // TODO(johnniwinther): Use type arguments when all uses no longer expect
   // a [FieldElement].
   var fields = <FieldEntity, ConstantValue>{field: argument};
-  return new ConstructedConstantValue(type, fields);
+  return ConstructedConstantValue(type, fields);
 }
 
 UnaryOperation lookupUnary(UnaryOperator operator) {
@@ -407,7 +406,7 @@
   BigInt foldInts(BigInt left, BigInt right) {
     // TODO(floitsch): find a better way to guard against excessive shifts to
     // the left.
-    if (right > new BigInt.from(100) || right < BigInt.zero) return null;
+    if (right > BigInt.from(100) || right < BigInt.zero) return null;
     return left << right.toInt();
   }
 
@@ -439,7 +438,7 @@
         // Example: 0xFFFFFFFF - 0x100000000 => -1.
         // We simply and with the sign-bit and multiply by two. If the sign-bit
         // was set, then the result is 0. Otherwise it will become 2^32.
-        final BigInt SIGN_BIT = new BigInt.from(0x80000000);
+        final BigInt SIGN_BIT = BigInt.from(0x80000000);
         truncatedValue -= BigInt.two * (truncatedValue & SIGN_BIT);
       }
       if (value != truncatedValue) {
@@ -646,7 +645,7 @@
   BigInt foldNums(num left, num right) {
     num ratio = left / right;
     if (ratio.isNaN || ratio.isInfinite) return null;
-    return new BigInt.from(ratio.truncateToDouble());
+    return BigInt.from(ratio.truncateToDouble());
   }
 
   @override
@@ -855,7 +854,7 @@
       // In order to preserve runtime semantics which says that NaN !== NaN
       // don't constant fold NaN === NaN. Otherwise the output depends on
       // inlined variables and other optimizations.
-      if (left.isNaN && right.isNaN) return new FalseConstantValue();
+      if (left.isNaN && right.isNaN) return FalseConstantValue();
       return createBool(left == right);
     }
 
@@ -866,14 +865,14 @@
     if (left.isInt && right.isInt) {
       IntConstantValue leftInt = left;
       IntConstantValue rightInt = right;
-      return new BoolConstantValue(leftInt.intValue == rightInt.intValue);
+      return BoolConstantValue(leftInt.intValue == rightInt.intValue);
     }
     if (left.isNum && right.isNum) {
       NumConstantValue leftNum = left;
       NumConstantValue rightNum = right;
       double leftDouble = leftNum.doubleValue;
       double rightDouble = rightNum.doubleValue;
-      return new BoolConstantValue(leftDouble == rightDouble);
+      return BoolConstantValue(leftDouble == rightDouble);
     }
     return result;
   }
@@ -943,7 +942,7 @@
       double rounded2 = (value * (1.0 - severalULP)).roundToDouble();
       if (rounded != rounded1 || rounded != rounded2) return null;
       return _convertToJavaScriptConstant(
-          new IntConstantValue(new BigInt.from(value.round())));
+          IntConstantValue(BigInt.from(value.round())));
     }
 
     if (constant.isInt) {
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 4ef3a07..449c2b2 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -8,7 +8,7 @@
 import '../common_elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
-import '../deferred_load/deferred_load.dart' show OutputUnit;
+import '../deferred_load/output_unit.dart' show OutputUnit;
 import '../js/js.dart' as js;
 import '../util/util.dart';
 
@@ -149,7 +149,7 @@
   }
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   FunctionType getType(CommonElements types) => type;
@@ -187,15 +187,15 @@
   @override
   bool operator ==(var other) {
     // Making this method abstract does not give us an error.
-    throw new UnsupportedError('PrimitiveConstant.==');
+    throw UnsupportedError('PrimitiveConstant.==');
   }
 
   @override
-  int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode');
+  int get hashCode => throw UnsupportedError('PrimitiveConstant.hashCode');
 
   // Primitive constants don't have dependencies.
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 }
 
 class NullConstantValue extends PrimitiveConstantValue {
@@ -254,7 +254,7 @@
   factory IntConstantValue(BigInt value) {
     var existing = _cachedValues[value];
     if (existing != null) return existing;
-    var intConstantVal = new IntConstantValue._internal(value);
+    var intConstantVal = IntConstantValue._internal(value);
     var intValue = value.toInt();
     if (intValue <= -2 && intValue >= 10) {
       _cachedValues[value] = intConstantVal;
@@ -323,7 +323,7 @@
     } else if (value == 1.0) {
       return const DoubleConstantValue._internal(1.0);
     } else {
-      return new DoubleConstantValue._internal(value);
+      return DoubleConstantValue._internal(value);
     }
   }
 
@@ -387,7 +387,7 @@
 
 abstract class BoolConstantValue extends PrimitiveConstantValue {
   factory BoolConstantValue(value) {
-    return value ? new TrueConstantValue() : new FalseConstantValue();
+    return value ? TrueConstantValue() : FalseConstantValue();
   }
 
   const BoolConstantValue._internal();
@@ -425,7 +425,7 @@
   bool get boolValue => true;
 
   @override
-  FalseConstantValue negate() => new FalseConstantValue();
+  FalseConstantValue negate() => FalseConstantValue();
 
   @override
   bool operator ==(var other) => identical(this, other);
@@ -451,7 +451,7 @@
   bool get boolValue => false;
 
   @override
-  TrueConstantValue negate() => new TrueConstantValue();
+  TrueConstantValue negate() => TrueConstantValue();
 
   @override
   bool operator ==(var other) => identical(this, other);
@@ -549,7 +549,7 @@
   int get hashCode => representedType.hashCode * 13;
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) => visitor.visitType(this, arg);
@@ -605,7 +605,7 @@
 
   @override
   String toDartText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _unparseTypeArguments(dartTypes, sb);
     sb.write('[');
     for (int i = 0; i < length; i++) {
@@ -618,7 +618,7 @@
 
   @override
   String toStructuredText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('ListConstant(');
     _unparseTypeArguments(dartTypes, sb);
     sb.write('[');
@@ -668,7 +668,7 @@
 
   @override
   String toDartText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
     sb.writeAll(values.map((v) => v.toDartText(dartTypes)), ',');
@@ -678,7 +678,7 @@
 
   @override
   String toStructuredText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('SetConstant(');
     _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
@@ -732,7 +732,7 @@
 
   @override
   List<ConstantValue> getDependencies() {
-    List<ConstantValue> result = <ConstantValue>[];
+    List<ConstantValue> result = [];
     result.addAll(keys);
     result.addAll(values);
     return result;
@@ -753,7 +753,7 @@
 
   @override
   String toDartText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
     for (int i = 0; i < length; i++) {
@@ -768,7 +768,7 @@
 
   @override
   String toStructuredText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('MapConstant(');
     _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
@@ -802,7 +802,7 @@
   int get hashCode => cls.hashCode * 43;
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) {
@@ -843,7 +843,7 @@
   get hashCode => name.hashCode * 17;
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) {
@@ -876,7 +876,7 @@
   bool get isDummy => true;
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) {
@@ -904,7 +904,7 @@
   const LateSentinelConstantValue._();
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) {
@@ -935,7 +935,7 @@
   bool get isDummy => true;
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   accept(ConstantValueVisitor visitor, arg) {
@@ -1006,7 +1006,7 @@
 
   @override
   String toDartText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write(type.element.name);
     _unparseTypeArguments(dartTypes, sb);
     sb.write('(');
@@ -1025,7 +1025,7 @@
 
   @override
   String toStructuredText(DartTypes dartTypes) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('ConstructedConstant(');
     sb.write(type);
     sb.write('(');
@@ -1063,7 +1063,7 @@
   }
 
   @override
-  List<ConstantValue> getDependencies() => <ConstantValue>[function];
+  List<ConstantValue> getDependencies() => [function];
 
   @override
   accept(ConstantValueVisitor visitor, arg) =>
@@ -1120,7 +1120,7 @@
   get hashCode => (referenced.hashCode * 17 + unit.hashCode) & 0x3fffffff;
 
   @override
-  List<ConstantValue> getDependencies() => <ConstantValue>[referenced];
+  List<ConstantValue> getDependencies() => [referenced];
 
   @override
   accept(ConstantValueVisitor visitor, arg) =>
@@ -1155,7 +1155,7 @@
   }
 
   @override
-  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+  List<ConstantValue> getDependencies() => const [];
 
   @override
   DartType getType(CommonElements types) => types.dynamicType;
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f506091..5b95d9e 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -554,6 +554,8 @@
     new OptionHandler(Flags.disableRtiOptimization, passThrough),
     new OptionHandler(Flags.terse, passThrough),
     new OptionHandler('--deferred-map=.+', passThrough),
+    new OptionHandler('${Flags.writeProgramSplit}=.+', passThrough),
+    new OptionHandler('${Flags.readProgramSplit}=.+', passThrough),
     new OptionHandler('${Flags.dumpInfo}|${Flags.dumpInfo}=.+', setDumpInfo),
     new OptionHandler('--disallow-unsafe-eval', ignoreOption),
     new OptionHandler(Option.showPackageWarnings, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
new file mode 100644
index 0000000..ad11986
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -0,0 +1,158 @@
+// 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 'entity_data.dart';
+import 'entity_data_info.dart';
+import 'import_set.dart';
+import 'work_queue.dart';
+
+import '../common.dart';
+import '../compiler.dart' show Compiler;
+import '../elements/entities.dart';
+import '../kernel/element_map.dart';
+import '../world.dart' show KClosedWorld;
+
+/// Manages the state of the [EntityData] model. Every class, member, constant,
+/// etc, is wrapped in the deferred loading algorithm by an [EntityData] which
+/// knows how to collect dependencies for a given [Entity].
+class AlgorithmState {
+  final Compiler compiler;
+  final KernelToElementMap elementMap;
+  final KClosedWorld closedWorld;
+  final EntityDataRegistry registry;
+  final Map<EntityData, ImportSet> entityToSet = {};
+  final Map<EntityData, EntityDataInfo> entityDataToInfo = {};
+  final ImportSetLattice importSets;
+  final WorkQueue queue;
+
+  AlgorithmState._(this.closedWorld, this.elementMap, this.compiler,
+      this.importSets, this.registry)
+      : queue = WorkQueue(importSets, registry);
+
+  /// Factory function to create and initialize a [AlgorithmState].
+  factory AlgorithmState.create(
+      FunctionEntity main,
+      Compiler compiler,
+      KernelToElementMap elementMap,
+      KClosedWorld closedWorld,
+      ImportSetLattice importSets) {
+    var entityDataState = AlgorithmState._(
+        closedWorld, elementMap, compiler, importSets, EntityDataRegistry());
+    entityDataState.initialize(main);
+    return entityDataState;
+  }
+
+  /// Given an [EntityData], an [oldSet] and a [newSet], either ignore the
+  /// update, apply the update immediately if we can avoid unions, or apply the
+  /// update later if we cannot. For more detail on [oldSet] and [newSet],
+  /// please see the comment in deferred_load.dart.
+  void update(EntityData entityData, ImportSet oldSet, ImportSet newSet) {
+    ImportSet currentSet = entityToSet[entityData];
+
+    // If [currentSet] == [newSet], then currentSet must include all of newSet.
+    if (currentSet == newSet) return;
+
+    // Elements in the main output unit always remain there.
+    if (currentSet == importSets.mainSet) return;
+
+    // If [currentSet] == [oldSet], then we can safely update the
+    // [entityToSet] map for [entityData] to [newSet] in a single assignment.
+    // If not, then if we are supposed to update [entityData] recursively, we add
+    // it back to the queue so that we can re-enter [update] later after
+    // performing a union. If we aren't supposed to update recursively, we just
+    // perform the union inline.
+    if (currentSet == oldSet) {
+      // Continue recursively updating from [oldSet] to [newSet].
+      entityToSet[entityData] = newSet;
+      updateDependencies(entityData, oldSet, newSet);
+    } else if (entityData.needsRecursiveUpdate) {
+      assert(
+          // Invariant: we must mark main before we mark any deferred import.
+          newSet != importSets.mainSet || oldSet != null,
+          failedAt(
+              NO_LOCATION_SPANNABLE,
+              "Tried to assign to the main output unit, but it was assigned "
+              "to $currentSet."));
+      queue.addEntityData(entityData, newSet);
+    } else {
+      entityToSet[entityData] = importSets.union(currentSet, newSet);
+    }
+  }
+
+  /// Returns the [EntityDataInfo] associated with a given [EntityData].
+  /// Note: In the event of a cache miss, i.e. the first time we ever see a new
+  /// [EntityData], we will add all reachable deferred roots to the queue for
+  /// processing.
+  EntityDataInfo getInfo(EntityData data) {
+    // Check for cached [EntityDataInfo], otherwise create a new one and
+    // collect dependencies.
+    var info = entityDataToInfo[data];
+    if (info == null) {
+      var infoBuilder =
+          EntityDataInfoBuilder(closedWorld, elementMap, compiler, registry);
+      var visitor = EntityDataInfoVisitor(infoBuilder);
+      data.accept(visitor);
+      info = infoBuilder.info;
+      entityDataToInfo[data] = info;
+
+      // This is the first time we have seen this [EntityData] before so process
+      // all deferred roots.
+      info.deferredRoots.forEach((entity, imports) {
+        for (ImportEntity deferredImport in imports) {
+          queue.addEntityData(entity, importSets.initialSetOf(deferredImport));
+        }
+      });
+    }
+    return info;
+  }
+
+  /// Updates the dependencies of a given [EntityData] from [oldSet] to
+  /// [newSet].
+  void updateDependencies(
+      EntityData entityData, ImportSet oldSet, ImportSet newSet) {
+    var info = getInfo(entityData);
+
+    // Process all direct dependencies.
+    for (var entity in info.directDependencies) {
+      update(entity, oldSet, newSet);
+    }
+  }
+
+  /// Initializes the [AlgorithmState] assuming that [main] is the main entry
+  /// point of a given program.
+  void initialize(FunctionEntity main) {
+    // Add `main` and their recursive dependencies to the main output unit.
+    // We do this upfront to avoid wasting time visiting these elements when
+    // analyzing deferred imports.
+    queue.addMember(main, importSets.mainSet);
+
+    // Also add "global" dependencies to the main output unit.  These are
+    // things that the backend needs but cannot associate with a particular
+    // element. This set also contains elements for which we lack precise
+    // information.
+    for (MemberEntity element
+        in closedWorld.backendUsage.globalFunctionDependencies) {
+      queue.addMember(element, importSets.mainSet);
+    }
+    for (ClassEntity element
+        in closedWorld.backendUsage.globalClassDependencies) {
+      queue.addClass(element, importSets.mainSet);
+    }
+
+    // Empty queue.
+    while (queue.isNotEmpty) {
+      queue.processNextItem(this);
+    }
+  }
+
+  /// Processes each [ImportSet], applying [SetTransition]s if their
+  /// prerequisites are met.
+  void applySetTransitions() {
+    var imports = entityToSet.values.toSet();
+    var finalTransitions = importSets.computeFinalTransitions(imports);
+    for (var key in entityToSet.keys) {
+      entityToSet[key] = finalTransitions[entityToSet[key]];
+    }
+  }
+}
diff --git a/pkg/compiler/lib/src/deferred_load/deferred_load.dart b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
index bf7a202..d741a38 100644
--- a/pkg/compiler/lib/src/deferred_load/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
@@ -2,87 +2,294 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/// *Overview of deferred loading*
+///
+/// Deferred loading allows developers to specify deferred imports. These
+/// imports represent explicit asynchronous splits of the application that
+/// allows code to be delivered in pieces.
+///
+/// The initial download of an application will exclude code used only by
+/// deferred imports. As the application reaches a
+/// `deferred_import.loadLibrary()` instruction, it will download and initialize
+/// any code needed by that deferred import.
+///
+/// Very often separate deferred imports access common code.  When that happens,
+/// the compiler places the shared code in separate files. At runtime, the
+/// application will only download shared code once when the first deferred
+/// import that needs that code gets loaded. To achieve this, the compiler
+/// generates _load lists_: a list of JavaScript files that need to be
+/// downloaded for every deferred import in the program.
+///
+/// Each generated JavaScript file has an initialzation within it. The files can
+/// be concatenated together in a bundle without affecting the initialization
+/// logic. This is used by customers to reduce the download latency when they
+/// know that multiple files will be loaded at once.
+///
+/// *The code splitting algorithm*
+///
+/// The goal of this library and the [DeferredLoadingTask] is to determine how
+/// to best split code in multiple files according to the principles described
+/// above.
+///
+/// We do so by partitioning code into output units ([OutputUnit]s in our
+/// implementation). The partitioning reflects how code is shared between
+/// different deferred imports. Each output unit is associated a set of deferred
+/// imports (an [ImportSet] in our implementation). These are the deferred
+/// imports that need the code that is stored in that output unit. Code that is
+/// needed by a single deferred import, will be associated with a set containing
+/// that deferred import only (a singleton set), but code that is shared by 10
+/// deferred imports will be associated with a set containing all of those
+/// imports instead.  We determine whether code is shared based on how code is
+/// accessed in the program. An element is considered to be accessed by a
+/// deferred import if it is either loaded and invoked from that import or
+/// transitively accessed by an element that was invoked by that import.
+///
+/// In theory, there could be an exponential number of output units: one per
+/// subset of deferred imports in the program. In practice, large apps do have a
+/// large number of output units, but the result is not exponential. This is
+/// both because not all deferred imports have code in common and because many
+/// deferred imports end up having the same code in common.
+///
+/// *Main output unit*:
+///
+/// The main output unit contains any code accessed directly from main. Such
+/// code may be accessed by deferred imports too, but because it is accessed
+/// from the main entrypoint of the program, possibly synchronously, we do not
+/// split out the code or defer it. Our current implementation uses an empty
+/// import-set as a sentinel value to represent this output unit.
+///
+/// *Dependency graph*:
+///
+/// We use the element model to discover dependencies between elements.
+/// We distinguish two kinds of dependencies: deferred or direct (aka.
+/// non-deferred):
+///
+///   * Deferred dependencies are only used to discover root elements. Roots
+///   are elements immediately loaded and used from deferred import prefixes in
+///   a program.
+///
+///   * Direct dependencies are used to recursively update which output unit
+///   should be associated with an element.
+///
+/// *Algorithm Principle*:
+///
+/// Conceptually the algorithm consists of associating an element with an
+/// import-set. When we discover a root, we mark it and everything it can reach
+/// as being used by that import. Marking elements as used by that import
+/// consists of adding the import to the import-set of all those reachable
+/// elements.
+///
+/// An earlier version of this algorithm was implemented with this simple
+/// approach: we kept a map from entities to a [Set] of imports and updated the
+/// sets iteratively. However, as customer applications grew, we needed a more
+/// specialized and efficient implementation.
+///
+/// *ImportSet representation and related optimizations*:
+///
+/// The most important change to scale the algorithm was to use an efficient
+/// representation of entity to import-set associations. For large apps there
+/// are a lot of entities, and the simple representation of having a [Set] per
+/// entity was too expensive. We observed that many of such sets had the same
+/// imports (which makes sense given that many elements ended up together in the
+/// same output units). This led us to design the [ImportSet] abstraction: a
+/// representation of import-sets that guarantees that each import-set has a
+/// canonical representation. Memory-wise this was a big win: we now bounded
+/// the heap utilization to one [ImportSet] instance per unique import-set.
+///
+/// This representation is not perfect. Simple operations, like adding an import
+/// to an import-set, are now worse-case linear. So it was important to add a
+/// few optimizations in the algorithm in order to adapt to the new
+/// representation.
+///
+/// The principle of our optimizations is to make bulk updates. Rather than
+/// adding an import at a time for all reachable elements, we changed the
+/// algorithm to make updates in bulk in two ways:
+///
+///   * Batch unions: when possible add more than one import at once, and
+///
+///   * Update elements in segments: when an element and its reachable
+///   dependencies would change in the same way, update them all together.
+///
+/// To achieve these bulk updates, the algorithm uses a two tier algorithm:
+///
+///   * The top tier uses a worklist to track the start of a bulk update, either
+///   from a root (entities that dominate code used by a single deferred import)
+///   or from a merge point in the dependency graph (entities that dominate
+///   shared code between multiple imports).
+///
+///   * The second tier is where bulk updates are made, these don't use a
+///   worklist, but simply a DFS recursive traversal of the dependency graph.
+///   The DFS traversal stops at merge points and makes note of them by
+///   updating the top tier worklist.
+///
+///
+/// *Example*:
+///
+/// Consider this dependency graph (ignoring elements in the main output unit):
+///
+///   deferred import A: a1 ---> s1 ---> s2  -> s3
+///                              ^       ^
+///                              |       |
+///   deferred import B: b1 -----+       |
+///                                      |
+///   deferred import C: c1 ---> c2 ---> c3
+///
+/// Here a1, b1, and c1 are roots, while s1 and s2 are merge points. The
+/// algorithm will compute a result with 5 deferred output units:
+//
+///   * unit {A}:        contains a1
+///   * unit {B}:        contains b1
+///   * unit {C}:        contains c1, c2, and c3
+///   * unit {A, B}:     contains s1
+///   * unit {A, B, C}:  contains s2, and s3
+///
+/// After marking everything reachable from main as part of the main output
+/// unit, our algorithm will work as follows:
+///
+///   * Initially all deferred elements have no mapping.
+///   * We make note of work to do, initially to mark the root of each
+///     deferred import:
+///        * a1 with A, and recurse from there.
+///        * b1 with B, and recurse from there.
+///        * c1 with C, and recurse from there.
+///   * We update a1, s1, s2, s3 in bulk, from no mapping to {A}.
+///   * We update b1 from no mapping to {B}, and when we find s1 we notice
+///     that s1 is already associated with another import set {A}. This is a
+///     merge point that can't be updated in bulk, so we make
+///     note of additional work for later to mark s1 with {A, B}
+///   * We update in bulk c1, c2, c3 to {C}, and make a note to update s2 with
+///     {A, C} (another merge point).
+///   * We update s1 to {A, B}, and update the existing note to update s2, now
+///     with {A, B, C}
+///   * Finally we update s2 and s3 with {A, B, C} in bulk, without ever
+///     updating them to the intermediate state {A, C}.
+///
+/// *How bulk segment updates work?*
+///
+/// The principle of the bulk segment update is similar to memoizing the result
+/// of a union operation. We replace a union operation with a cached result if
+/// we can tell that the inputs to the operation are the same.
+///
+/// Our implementation doesn't use a cache table to memoize arbitrary unions.
+/// Instead it only memoizes one union at a time: it tries to reuse the result
+/// of a union applied to one entity, when updating the import-sets of its
+/// transitive dependencies.
+///
+/// Consider a modification of the example above where we add s4 and s5 as
+/// additional dependencies of s3. Conceptually, we are applying this sequence
+/// of union operations:
+///
+///    importSet[s2] = importSet[s2] UNION {B, C}
+///    importSet[s3] = importSet[s3] UNION {B, C}
+///    importSet[s4] = importSet[s4] UNION {B, C}
+///    importSet[s5] = importSet[s5] UNION {B, C}
+///
+/// When the algorithm is updating s2, it checks whether any of the entities
+/// reachable from s2 also have the same import-set as s2, and if so, we know
+/// that the union result is the same.
+///
+/// Our implementation uses the term `oldSet` to represent the first input of
+/// the memoized union operation, and `newSet` to represent the result:
+///
+///    oldSet = importSet[s2]        // = A
+///    newSet = oldSet UNION {B, C}  // = {A, B, C}
+///
+/// Then the updates are encoded as:
+///
+///    update(s2, oldSet, newSet);
+///    update(s3, oldSet, newSet);
+///    update(s4, oldSet, newSet);
+///    update(s5, oldSet, newSet);
+///
+/// where:
+///
+///    update(s5, oldSet, newSet) {
+///      var currentSet = importSet[s];
+///      if (currentSet == oldSet) {
+///        // Use the memoized result, whohoo!
+///        importSet[s] = newSet;
+///      } else {
+///        // Don't use the memoized result, instead use the worklist to later
+///        // update `s` with the appropriate union operation.
+///      }
+///    }
+///
+/// As a result of this, the update to the import set for s2, s3, s4 and s5
+/// becomes a single if-check and an assignment, but the union operation was
+/// only executed once.
+///
+/// *Constraints*:
+///
+/// By default our algorithm considers all deferred imports equally and
+/// potentially occurring at any time in the application lifetime. In practice,
+/// apps use deferred imports to layer the load of their application and, often,
+/// developers know how imports will be loaded over time.
+///
+/// Dart2js accepts a configuration file to specify constraints about deferred
+/// imports. There are many kinds of constraints that help developers encode how
+/// their applications work.
+///
+/// To model constraints, the deferred loading algorithm was changed to include
+/// _set transitions_: these are changes made to import-sets to effectively
+/// encode the constraints.
+///
+/// Consider, for example, a program with two deferred imports `A` and `B`. Our
+/// unconstrained algorithm will split the code in 3 files:
+///
+///   * code unique to `A` (represented by the import set `{A}`)
+///
+///   * code unique to `B` (represented by the import set `{B}`)
+///
+///   * code shared between `A and `B (represented by the import set `{A, B}`)
+///
+/// When an end-user loads the user journey corresponding to `A`, the code for
+/// `{A}` and `{A,B}` gets loaded. When they load the user journey corresponding
+/// to `B`, `{B}` and `{A, B}` gets loaded.
+///
+/// An ordering constraint saying that `B` always loads after `A` tells our
+/// algorithm that, even though there exists code that is unique to `A`, we
+/// could merge it together with the shared code between `A` and `B`, since the
+/// user never intends to load `B` first. The result would be to have two files
+/// instead:
+///
+///   * code unique to `B` (represented by the import set `{B}`)
+///
+///   * code unique to A and code shared between A and B (represented by the
+///   import set `{A, B}`)
+///
+///
+/// In this example, the set transition is to convert any set containing `{A}`
+/// into a set containing `{A, B}`.
+///
+// TODO(joshualitt): update doc above when main is represented by a set
+// containing an implict import corresponding to `main`.
+// TODO(sigmund): investigate different heuristics for how to select the next
+// work item (e.g. we might converge faster if we pick first the update that
+// contains a bigger delta.)
 library deferred_load;
 
-import 'dart:collection' show Queue;
+import 'program_split_constraints/builder.dart' as psc show Builder;
 
-import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
-import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/type_environment.dart' as ir;
+import 'algorithm_state.dart';
+import 'entity_data.dart';
+import 'import_set.dart';
+import 'output_unit.dart';
 
 import '../../compiler_new.dart' show OutputType;
-import '../common/metrics.dart' show Metric, Metrics, CountMetric, DurationMetric;
+import '../common/metrics.dart'
+    show Metric, Metrics, CountMetric, DurationMetric;
 import '../common/tasks.dart' show CompilerTask;
 import '../common.dart';
-import '../common_elements.dart' show CommonElements, KElementEnvironment;
+import '../common_elements.dart' show KElementEnvironment;
 import '../compiler.dart' show Compiler;
-import '../constants/values.dart'
-    show
-        ConstantValue,
-        ConstructedConstantValue,
-        DeferredGlobalConstantValue,
-        InstantiationConstantValue;
+import '../constants/values.dart' show ConstantValue;
 import '../elements/types.dart';
 import '../elements/entities.dart';
-import '../ir/util.dart';
-import '../kernel/kelements.dart' show KLocalFunction;
 import '../kernel/element_map.dart';
-import '../serialization/serialization.dart';
-import '../options.dart';
-import '../universe/use.dart';
-import '../universe/world_impact.dart'
-    show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
-import '../util/maplet.dart';
+import '../universe/world_impact.dart' show ImpactUseCase;
 import '../util/util.dart' show makeUnique;
 import '../world.dart' show KClosedWorld;
 
-/// A "hunk" of the program that will be loaded whenever one of its [imports]
-/// are loaded.
-///
-/// Elements that are only used in one deferred import, is in an OutputUnit with
-/// the deferred import as single element in the [imports] set.
-///
-/// Whenever a deferred Element is shared between several deferred imports it is
-/// in an output unit with those imports in the [imports] Set.
-///
-/// We never create two OutputUnits sharing the same set of [imports].
-class OutputUnit implements Comparable<OutputUnit> {
-  /// `true` if this output unit is for the main output file.
-  final bool isMainOutput;
-
-  /// A unique name representing this [OutputUnit].
-  final String name;
-
-  /// The deferred imports that use the elements in this output unit.
-  final Set<ImportEntity> imports;
-
-  OutputUnit(this.isMainOutput, this.name, this.imports);
-
-  @override
-  int compareTo(OutputUnit other) {
-    if (identical(this, other)) return 0;
-    if (isMainOutput && !other.isMainOutput) return -1;
-    if (!isMainOutput && other.isMainOutput) return 1;
-    var size = imports.length;
-    var otherSize = other.imports.length;
-    if (size != otherSize) return size.compareTo(otherSize);
-    var thisImports = imports.toList();
-    var otherImports = other.imports.toList();
-    for (var i = 0; i < size; i++) {
-      var cmp = _compareImportEntities(thisImports[i], otherImports[i]);
-      if (cmp != 0) return cmp;
-    }
-    // TODO(sigmund): make compare stable.  If we hit this point, all imported
-    // libraries are the same, however [this] and [other] use different deferred
-    // imports in the program. We can make this stable if we sort based on the
-    // deferred imports themselves (e.g. their declaration location).
-    return name.compareTo(other.name);
-  }
-
-  @override
-  String toString() => "OutputUnit($name, $imports)";
-}
-
 class _DeferredLoadTaskMetrics implements Metrics {
   @override
   String get namespace => 'deferred_load';
@@ -107,6 +314,10 @@
   /// The OutputUnit that will be loaded when the program starts.
   OutputUnit _mainOutputUnit;
 
+  /// A sentinel used only by the [ImportSet] corresponding to the
+  /// [_mainOutputUnit].
+  final ImportEntity _mainImport = ImportEntity(true, 'main#main', null, null);
+
   /// A set containing (eventually) all output units that will result from the
   /// program.
   final List<OutputUnit> _allOutputUnits = [];
@@ -120,21 +331,6 @@
   /// this map.
   final Map<ImportEntity, String> importDeferName = {};
 
-  /// A mapping from classes to their import set.
-  Map<ClassEntity, ImportSet> _classToSet = {};
-
-  /// A mapping from interface types (keyed by classes) to their import set.
-  Map<ClassEntity, ImportSet> _classTypeToSet = {};
-
-  /// A mapping from members to their import set.
-  Map<MemberEntity, ImportSet> _memberToSet = {};
-
-  /// A mapping from local functions to their import set.
-  Map<Local, ImportSet> _localFunctionToSet = {};
-
-  /// A mapping from constants to their import set.
-  Map<ConstantValue, ImportSet> _constantToSet = {};
-
   Iterable<ImportEntity> get _allDeferredImports =>
       _deferredImportDescriptions.keys;
 
@@ -154,503 +350,32 @@
 
   bool get disableProgramSplit => compiler.options.disableProgramSplit;
 
+  AlgorithmState algorithmState;
+
   DeferredLoadTask(this.compiler, this._elementMap) : super(compiler.measurer) {
     _mainOutputUnit = OutputUnit(true, 'main', {});
-    importSets.mainSet.unit = _mainOutputUnit;
     _allOutputUnits.add(_mainOutputUnit);
   }
 
   KElementEnvironment get elementEnvironment =>
       compiler.frontendStrategy.elementEnvironment;
 
-  CommonElements get commonElements => compiler.frontendStrategy.commonElements;
-  DartTypes get dartTypes => commonElements.dartTypes;
+  DartTypes get dartTypes => compiler.frontendStrategy.commonElements.dartTypes;
 
   DiagnosticReporter get reporter => compiler.reporter;
 
-  /// Collects all direct dependencies of [element].
-  ///
-  /// The collected dependent elements and constants are are added to
-  /// [elements] and [constants] respectively.
-  void _collectDirectMemberDependencies(KClosedWorld closedWorld,
-      MemberEntity element, Dependencies dependencies) {
-    // TODO(sigurdm): We want to be more specific about this - need a better
-    // way to query "liveness".
-    if (!closedWorld.isMemberUsed(element)) {
-      return;
-    }
-    _collectDependenciesFromImpact(closedWorld, element, dependencies);
-    collectConstantsInBody(element, dependencies);
-  }
-
-  /// Finds all elements and constants that [element] depends directly on.
-  /// (not the transitive closure.)
-  ///
-  /// Adds the results to [elements] and [constants].
-  void _collectAllElementsAndConstantsResolvedFromClass(
-      KClosedWorld closedWorld,
-      ClassEntity element,
-      Dependencies dependencies) {
-    // If we see a class, add everything its live instance members refer
-    // to.  Static members are not relevant, unless we are processing
-    // extra dependencies due to mirrors.
-    void addLiveInstanceMember(MemberEntity member) {
-      if (!closedWorld.isMemberUsed(member)) return;
-      if (!member.isInstanceMember) return;
-      dependencies.addMember(member);
-      _collectDirectMemberDependencies(closedWorld, member, dependencies);
-    }
-
-    void addClassAndMaybeAddEffectiveMixinClass(ClassEntity cls) {
-      dependencies.addClass(cls);
-      if (elementEnvironment.isMixinApplication(cls)) {
-        dependencies.addClass(elementEnvironment.getEffectiveMixinClass(cls));
-      }
-    }
-
-    ClassEntity cls = element;
-    elementEnvironment.forEachLocalClassMember(cls, addLiveInstanceMember);
-    elementEnvironment.forEachSupertype(cls, (InterfaceType type) {
-      _collectTypeDependencies(type, dependencies);
-    });
-    elementEnvironment.forEachSuperClass(cls, (superClass) {
-      addClassAndMaybeAddEffectiveMixinClass(superClass);
-      _collectTypeDependencies(
-          elementEnvironment.getThisType(superClass), dependencies);
-    });
-    addClassAndMaybeAddEffectiveMixinClass(cls);
-  }
-
-  /// Finds all elements and constants that [element] depends directly on.
-  /// (not the transitive closure.)
-  ///
-  /// Adds the results to [elements] and [constants].
-  void _collectAllElementsAndConstantsResolvedFromMember(
-      KClosedWorld closedWorld,
-      MemberEntity element,
-      Dependencies dependencies) {
-    if (element is FunctionEntity) {
-      _collectTypeDependencies(
-          elementEnvironment.getFunctionType(element), dependencies);
-    }
-    if (element.isStatic || element.isTopLevel || element.isConstructor) {
-      dependencies.addMember(element);
-      _collectDirectMemberDependencies(closedWorld, element, dependencies);
-    }
-    if (element is ConstructorEntity && element.isGenerativeConstructor) {
-      // When instantiating a class, we record a reference to the
-      // constructor, not the class itself.  We must add all the
-      // instance members of the constructor's class.
-      ClassEntity cls = element.enclosingClass;
-      _collectAllElementsAndConstantsResolvedFromClass(
-          closedWorld, cls, dependencies);
-    }
-
-    // Other elements, in particular instance members, are ignored as
-    // they are processed as part of the class.
-  }
-
-  /// Extract the set of constants that are used in the body of [element].
-  void collectConstantsInBody(MemberEntity element, Dependencies dependencies) {
-    ir.Member node = _elementMap.getMemberNode(element);
-
-    // Fetch the internal node in order to skip annotations on the member.
-    // TODO(sigmund): replace this pattern when the kernel-ast provides a better
-    // way to skip annotations (issue 31565).
-    var visitor = ConstantCollector(
-        _elementMap, _elementMap.getStaticTypeContext(element), dependencies);
-    if (node is ir.Field) {
-      node.initializer?.accept(visitor);
-      return;
-    }
-
-    if (node is ir.Constructor) {
-      node.initializers.forEach((i) => i.accept(visitor));
-    }
-    node.function?.accept(visitor);
-  }
-
-  /// Recursively collects all the dependencies of [type].
-  void _collectTypeDependencies(DartType type, Dependencies dependencies,
-      [ImportEntity import]) {
-    TypeDependencyVisitor(dependencies, import, commonElements).visit(type);
-  }
-
-  void _collectTypeArgumentDependencies(
-      Iterable<DartType> typeArguments, Dependencies dependencies,
-      [ImportEntity import]) {
-    if (typeArguments == null) return;
-    TypeDependencyVisitor(dependencies, import, commonElements)
-        .visitList(typeArguments);
-  }
-
-  /// Extract any dependencies that are known from the impact of [element].
-  void _collectDependenciesFromImpact(KClosedWorld closedWorld,
-      MemberEntity element, Dependencies dependencies) {
-    WorldImpact worldImpact = compiler.impactCache[element];
-    compiler.impactStrategy.visitImpact(
-        element,
-        worldImpact,
-        WorldImpactVisitorImpl(
-            visitStaticUse: (MemberEntity member, StaticUse staticUse) {
-          void processEntity() {
-            Entity usedEntity = staticUse.element;
-            if (usedEntity is MemberEntity) {
-              dependencies.addMember(usedEntity, staticUse.deferredImport);
-            } else {
-              assert(usedEntity is KLocalFunction,
-                  failedAt(usedEntity, "Unexpected static use $staticUse."));
-              KLocalFunction localFunction = usedEntity;
-              // TODO(sra): Consult KClosedWorld to see if signature is needed.
-              _collectTypeDependencies(
-                  localFunction.functionType, dependencies);
-              dependencies.localFunctions.add(localFunction);
-            }
-          }
-
-          switch (staticUse.kind) {
-            case StaticUseKind.CONSTRUCTOR_INVOKE:
-            case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
-              // The receiver type of generative constructors is a dependency of
-              // the constructor (handled by `addMember` above) and not a
-              // dependency at the call site.
-              // Factory methods, on the other hand, are like static methods so
-              // the target type is not relevant.
-              // TODO(johnniwinther): Use rti need data to skip unneeded type
-              // arguments.
-              _collectTypeArgumentDependencies(
-                  staticUse.type.typeArguments, dependencies);
-              processEntity();
-              break;
-            case StaticUseKind.STATIC_INVOKE:
-            case StaticUseKind.CLOSURE_CALL:
-            case StaticUseKind.DIRECT_INVOKE:
-              // TODO(johnniwinther): Use rti need data to skip unneeded type
-              // arguments.
-              _collectTypeArgumentDependencies(
-                  staticUse.typeArguments, dependencies);
-              processEntity();
-              break;
-            case StaticUseKind.STATIC_TEAR_OFF:
-            case StaticUseKind.CLOSURE:
-            case StaticUseKind.STATIC_GET:
-            case StaticUseKind.STATIC_SET:
-              processEntity();
-              break;
-            case StaticUseKind.SUPER_TEAR_OFF:
-            case StaticUseKind.SUPER_FIELD_SET:
-            case StaticUseKind.SUPER_GET:
-            case StaticUseKind.SUPER_SETTER_SET:
-            case StaticUseKind.SUPER_INVOKE:
-            case StaticUseKind.INSTANCE_FIELD_GET:
-            case StaticUseKind.INSTANCE_FIELD_SET:
-            case StaticUseKind.FIELD_INIT:
-            case StaticUseKind.FIELD_CONSTANT_INIT:
-              // These static uses are not relevant for this algorithm.
-              break;
-            case StaticUseKind.CALL_METHOD:
-            case StaticUseKind.INLINING:
-              failedAt(element, "Unexpected static use: $staticUse.");
-              break;
-          }
-        }, visitTypeUse: (MemberEntity member, TypeUse typeUse) {
-          void addClassIfInterfaceType(DartType t, [ImportEntity import]) {
-            var typeWithoutNullability = t.withoutNullability;
-            if (typeWithoutNullability is InterfaceType) {
-              dependencies.addClass(typeWithoutNullability.element, import);
-            }
-          }
-
-          DartType type = typeUse.type;
-          switch (typeUse.kind) {
-            case TypeUseKind.TYPE_LITERAL:
-              _collectTypeDependencies(
-                  type, dependencies, typeUse.deferredImport);
-              break;
-            case TypeUseKind.CONST_INSTANTIATION:
-              addClassIfInterfaceType(type, typeUse.deferredImport);
-              _collectTypeDependencies(
-                  type, dependencies, typeUse.deferredImport);
-              break;
-            case TypeUseKind.INSTANTIATION:
-            case TypeUseKind.NATIVE_INSTANTIATION:
-              addClassIfInterfaceType(type);
-              _collectTypeDependencies(type, dependencies);
-              break;
-            case TypeUseKind.IS_CHECK:
-            case TypeUseKind.CATCH_TYPE:
-              _collectTypeDependencies(type, dependencies);
-              break;
-            case TypeUseKind.AS_CAST:
-              if (closedWorld.annotationsData
-                  .getExplicitCastCheckPolicy(element)
-                  .isEmitted) {
-                _collectTypeDependencies(type, dependencies);
-              }
-              break;
-            case TypeUseKind.IMPLICIT_CAST:
-              if (closedWorld.annotationsData
-                  .getImplicitDowncastCheckPolicy(element)
-                  .isEmitted) {
-                _collectTypeDependencies(type, dependencies);
-              }
-              break;
-            case TypeUseKind.PARAMETER_CHECK:
-            case TypeUseKind.TYPE_VARIABLE_BOUND_CHECK:
-              if (closedWorld.annotationsData
-                  .getParameterCheckPolicy(element)
-                  .isEmitted) {
-                _collectTypeDependencies(type, dependencies);
-              }
-              break;
-            case TypeUseKind.RTI_VALUE:
-            case TypeUseKind.TYPE_ARGUMENT:
-            case TypeUseKind.NAMED_TYPE_VARIABLE_NEW_RTI:
-            case TypeUseKind.CONSTRUCTOR_REFERENCE:
-              failedAt(element, "Unexpected type use: $typeUse.");
-              break;
-          }
-        }, visitDynamicUse: (MemberEntity member, DynamicUse dynamicUse) {
-          // TODO(johnniwinther): Use rti need data to skip unneeded type
-          // arguments.
-          _collectTypeArgumentDependencies(
-              dynamicUse.typeArguments, dependencies);
-        }),
-        DeferredLoadTask.IMPACT_USE);
-  }
-
-  /// Update the import set of all constants reachable from [constant], as long
-  /// as they had the [oldSet]. As soon as we see a constant with a different
-  /// import set, we stop and enqueue a new recursive update in [queue].
-  ///
-  /// Invariants: oldSet is either null or a subset of newSet.
-  void _updateConstantRecursive(
-      KClosedWorld closedWorld,
-      ConstantValue constant,
-      ImportSet oldSet,
-      ImportSet newSet,
-      WorkQueue queue) {
-    if (constant == null) return;
-    var currentSet = _constantToSet[constant];
-
-    // Already visited.
-    if (currentSet == newSet) return;
-
-    // Elements in the main output unit always remain there.
-    if (currentSet == importSets.mainSet) return;
-
-    if (currentSet == oldSet) {
-      _constantToSet[constant] = newSet;
-      if (constant is ConstructedConstantValue) {
-        ClassEntity cls = constant.type.element;
-        _updateClassRecursive(closedWorld, cls, oldSet, newSet, queue);
-      }
-      if (constant is InstantiationConstantValue) {
-        for (DartType type in constant.typeArguments) {
-          type = type.withoutNullability;
-          if (type is InterfaceType) {
-            _updateClassRecursive(
-                closedWorld, type.element, oldSet, newSet, queue);
-          }
-        }
-      }
-      constant.getDependencies().forEach((ConstantValue dependency) {
-        // Constants are not allowed to refer to deferred constants, so
-        // no need to check for a deferred type literal here.
-        _updateConstantRecursive(
-            closedWorld, dependency, oldSet, newSet, queue);
-      });
-    } else {
-      assert(
-          // Invariant: we must mark main before we mark any deferred import.
-          newSet != importSets.mainSet || oldSet != null,
-          failedAt(
-              NO_LOCATION_SPANNABLE,
-              "Tried to assign ${constant.toDartText(closedWorld.dartTypes)} "
-              "to the main output unit, but it was assigned to $currentSet."));
-      queue.addConstant(constant, newSet);
-    }
-  }
-
-  void _updateClassRecursive(KClosedWorld closedWorld, ClassEntity element,
-      ImportSet oldSet, ImportSet newSet, WorkQueue queue) {
-    if (element == null) return;
-
-    ImportSet currentSet = _classToSet[element];
-
-    // Already visited. We may visit some root nodes a second time with
-    // [isMirrorUsage] in order to mark static members used reflectively.
-    if (currentSet == newSet) return;
-
-    // Elements in the main output unit always remain there.
-    if (currentSet == importSets.mainSet) return;
-
-    if (currentSet == oldSet) {
-      // Continue recursively updating from [oldSet] to [newSet].
-      _classToSet[element] = newSet;
-
-      Dependencies dependencies = Dependencies();
-      _collectAllElementsAndConstantsResolvedFromClass(
-          closedWorld, element, dependencies);
-      LibraryEntity library = element.library;
-      _processDependencies(
-          closedWorld, library, dependencies, oldSet, newSet, queue, element);
-    } else {
-      queue.addClass(element, newSet);
-    }
-  }
-
-  void _updateClassTypeRecursive(KClosedWorld closedWorld, ClassEntity element,
-      ImportSet oldSet, ImportSet newSet, WorkQueue queue) {
-    if (element == null) return;
-
-    ImportSet currentSet = _classTypeToSet[element];
-
-    // Already visited. We may visit some root nodes a second time with
-    // [isMirrorUsage] in order to mark static members used reflectively.
-    if (currentSet == newSet) return;
-
-    // Elements in the main output unit always remain there.
-    if (currentSet == importSets.mainSet) return;
-
-    if (currentSet == oldSet) {
-      // Continue recursively updating from [oldSet] to [newSet].
-      _classTypeToSet[element] = newSet;
-
-      Dependencies dependencies = Dependencies();
-      dependencies.addClassType(element);
-      LibraryEntity library = element.library;
-      _processDependencies(
-          closedWorld, library, dependencies, oldSet, newSet, queue, element);
-    } else {
-      queue.addClassType(element, newSet);
-    }
-  }
-
-  void _updateMemberRecursive(KClosedWorld closedWorld, MemberEntity element,
-      ImportSet oldSet, ImportSet newSet, WorkQueue queue) {
-    if (element == null) return;
-
-    ImportSet currentSet = _memberToSet[element];
-
-    // Already visited. We may visit some root nodes a second time with
-    // [isMirrorUsage] in order to mark static members used reflectively.
-    if (currentSet == newSet) return;
-
-    // Elements in the main output unit always remain there.
-    if (currentSet == importSets.mainSet) return;
-
-    if (currentSet == oldSet) {
-      // Continue recursively updating from [oldSet] to [newSet].
-      _memberToSet[element] = newSet;
-
-      Dependencies dependencies = Dependencies();
-      _collectAllElementsAndConstantsResolvedFromMember(
-          closedWorld, element, dependencies);
-
-      LibraryEntity library = element.library;
-      _processDependencies(
-          closedWorld, library, dependencies, oldSet, newSet, queue, element);
-    } else {
-      queue.addMember(element, newSet);
-    }
-  }
-
-  void _updateLocalFunction(
-      Local localFunction, ImportSet oldSet, ImportSet newSet) {
-    ImportSet currentSet = _localFunctionToSet[localFunction];
-    if (currentSet == newSet) return;
-
-    // Elements in the main output unit always remain there.
-    if (currentSet == importSets.mainSet) return;
-
-    if (currentSet == oldSet) {
-      _localFunctionToSet[localFunction] = newSet;
-    } else {
-      _localFunctionToSet[localFunction] = importSets.union(currentSet, newSet);
-    }
-    // Note: local functions are not updated recursively because the
-    // dependencies are already visited as dependencies of the enclosing member.
-  }
-
-  /// Whether to enqueue a deferred dependency.
-  ///
-  /// Due to the nature of the algorithm, some dependencies may be visited more
-  /// than once. However, we know that new deferred-imports are only discovered
-  /// when we are visiting the main output unit (size == 0) or code reachable
-  /// from a deferred import (size == 1). After that, we are rediscovering the
-  /// same nodes we have already seen.
-  _shouldAddDeferredDependency(ImportSet newSet) => newSet.length <= 1;
-
-  void _processDependencies(
-      KClosedWorld closedWorld,
-      LibraryEntity library,
-      Dependencies dependencies,
-      ImportSet oldSet,
-      ImportSet newSet,
-      WorkQueue queue,
-      Spannable context) {
-    dependencies.classes.forEach((ClassEntity cls, DependencyInfo info) {
-      if (info.isDeferred) {
-        if (_shouldAddDeferredDependency(newSet)) {
-          for (ImportEntity deferredImport in info.imports) {
-            queue.addClass(cls, importSets.singleton(deferredImport));
-          }
-        }
-      } else {
-        _updateClassRecursive(closedWorld, cls, oldSet, newSet, queue);
-      }
-    });
-
-    dependencies.classType.forEach((ClassEntity cls, DependencyInfo info) {
-      if (info.isDeferred) {
-        if (_shouldAddDeferredDependency(newSet)) {
-          for (ImportEntity deferredImport in info.imports) {
-            queue.addClassType(cls, importSets.singleton(deferredImport));
-          }
-        }
-      } else {
-        _updateClassTypeRecursive(closedWorld, cls, oldSet, newSet, queue);
-      }
-    });
-
-    dependencies.members.forEach((MemberEntity member, DependencyInfo info) {
-      if (info.isDeferred) {
-        if (_shouldAddDeferredDependency(newSet)) {
-          for (ImportEntity deferredImport in info.imports) {
-            queue.addMember(member, importSets.singleton(deferredImport));
-          }
-        }
-      } else {
-        _updateMemberRecursive(closedWorld, member, oldSet, newSet, queue);
-      }
-    });
-
-    for (Local localFunction in dependencies.localFunctions) {
-      _updateLocalFunction(localFunction, oldSet, newSet);
-    }
-
-    dependencies.constants
-        .forEach((ConstantValue constant, DependencyInfo info) {
-      if (info.isDeferred) {
-        if (_shouldAddDeferredDependency(newSet)) {
-          for (ImportEntity deferredImport in info.imports) {
-            queue.addConstant(constant, importSets.singleton(deferredImport));
-          }
-        }
-      } else {
-        _updateConstantRecursive(closedWorld, constant, oldSet, newSet, queue);
-      }
-    });
-  }
-
   /// Computes a unique string for the name field for each outputUnit.
   void _createOutputUnits() {
+    // Before finalizing [OutputUnit]s, we apply [ImportSetTransition]s.
+    measureSubtask('apply set transitions', () {
+      algorithmState?.applySetTransitions();
+    });
+
+    // Add an [OutputUnit] for each [ImportSet].
     int counter = 1;
     void addUnit(ImportSet importSet) {
       if (importSet.unit != null) return;
-      var unit = OutputUnit(false, '$counter',
-          importSet._collectImports().map((i) => i.declaration).toSet());
+      var unit = OutputUnit(false, '$counter', importSet.toSet());
       counter++;
       importSet.unit = unit;
       _allOutputUnits.add(unit);
@@ -659,11 +384,7 @@
 
     // Generate an output unit for all import sets that are associated with an
     // element or constant.
-    _classToSet.values.forEach(addUnit);
-    _classTypeToSet.values.forEach(addUnit);
-    _memberToSet.values.forEach(addUnit);
-    _localFunctionToSet.values.forEach(addUnit);
-    _constantToSet.values.forEach(addUnit);
+    algorithmState?.entityToSet?.values?.forEach(addUnit);
 
     // Sort output units to make the output of the compiler more stable.
     _allOutputUnits.sort();
@@ -676,7 +397,7 @@
     var allDeferredImports = _allDeferredImports.toList();
     if (useIds) {
       // Sort for a canonical order of [ImportEntity]s.
-      allDeferredImports.sort(_compareImportEntities);
+      allDeferredImports.sort(compareImportEntities);
     }
     int nextDeferId = 0;
     Set<String> usedImportNames = {};
@@ -708,81 +429,7 @@
 
   /// Performs the deferred loading algorithm.
   ///
-  /// The deferred loading algorithm maps elements and constants to an output
-  /// unit. Each output unit is identified by a subset of deferred imports (an
-  /// [ImportSet]), and they will contain the elements that are inherently used
-  /// by all those deferred imports. An element is used by a deferred import if
-  /// it is either loaded by that import or transitively accessed by an element
-  /// that the import loads.  An empty set represents the main output unit,
-  /// which contains any elements that are accessed directly and are not
-  /// deferred.
-  ///
-  /// The algorithm traverses the element model recursively looking for
-  /// dependencies between elements. These dependencies may be deferred or
-  /// non-deferred. Deferred dependencies are mainly used to discover the root
-  /// elements that are loaded from deferred imports, while non-deferred
-  /// dependencies are used to recursively associate more elements to output
-  /// units.
-  ///
-  /// Naively, the algorithm traverses each root of a deferred import and marks
-  /// everything it can reach as being used by that import. To reduce how many
-  /// times we visit an element, we use an algorithm that works in segments: it
-  /// marks elements with a subset of deferred imports at a time, until it
-  /// detects a merge point where more deferred imports could be considered at
-  /// once.
-  ///
-  /// For example, consider this dependency graph (ignoring elements in the main
-  /// output unit):
-  ///
-  ///   deferred import A: a1 ---> s1 ---> s2  -> s3
-  ///                              ^       ^
-  ///                              |       |
-  ///   deferred import B: b1 -----+       |
-  ///                                      |
-  ///   deferred import C: c1 ---> c2 ---> c3
-  ///
-  /// The algorithm will compute a result with 5 deferred output units:
-  //
-  ///   * unit {A}:        contains a1
-  ///   * unit {B}:        contains b1
-  ///   * unit {C}:        contains c1, c2, and c3
-  ///   * unit {A, B}:     contains s1
-  ///   * unit {A, B, C}:  contains s2, and s3
-  ///
-  /// After marking everything reachable from main as part of the main output
-  /// unit, our algorithm will work as follows:
-  ///
-  ///   * Initially all deferred elements have no mapping.
-  ///   * We make note of work to do, initially to mark the root of each
-  ///     deferred import:
-  ///        * a1 with A, and recurse from there.
-  ///        * b1 with B, and recurse from there.
-  ///        * c1 with C, and recurse from there.
-  ///   * we update a1, s1, s2, s3 from no mapping to {A}
-  ///   * we update b1 from no mapping to {B}, and when we find s1 we notice
-  ///     that s1 is already associated with another import set {A}, so we make
-  ///     note of additional work for later to mark s1 with {A, B}
-  ///   * we update c1, c2, c3 to {C}, and make a note to update s2 with {A, C}
-  ///   * we update s1 to {A, B}, and update the existing note to update s2, now
-  ///     with {A, B, C}
-  ///   * finally we update s2 and s3 with {A, B, C} in one go, without ever
-  ///     updating them to the intermediate state {A, C}.
-  ///
-  /// The implementation below does atomic updates from one import-set to
-  /// another.  At first we add one deferred import at a time, but as the
-  /// algorithm progesses it may update a small import-set with a larger
-  /// import-set in one go. The key of this algorithm is to detect when sharing
-  /// begins, so we can update those elements more efficently.
-  ///
-  /// To detect these merge points where sharing begins, the implementation
-  /// below uses `a swap operation`: we first compare what the old import-set
-  /// is, and if it matches our expectation, the swap is done and we recurse,
-  /// otherwise a merge root was detected and we enqueue a new segment of
-  /// updates for later.
-  ///
-  /// TODO(sigmund): investigate different heuristics for how to select the next
-  /// work item (e.g. we might converge faster if we pick first the update that
-  /// contains a bigger delta.)
+  /// See the top-level library comment for details.
   OutputUnitData run(FunctionEntity main, KClosedWorld closedWorld) {
     return metrics.time.measure(() => _run(main, closedWorld));
   }
@@ -793,34 +440,8 @@
     }
 
     work() {
-      var queue = WorkQueue(this.importSets);
-
-      // Add `main` and their recursive dependencies to the main output unit.
-      // We do this upfront to avoid wasting time visiting these elements when
-      // analyzing deferred imports.
-      queue.addMember(main, importSets.mainSet);
-
-      // Also add "global" dependencies to the main output unit.  These are
-      // things that the backend needs but cannot associate with a particular
-      // element. This set also contains elements for which we lack precise
-      // information.
-      for (MemberEntity element
-          in closedWorld.backendUsage.globalFunctionDependencies) {
-        queue.addMember(element, importSets.mainSet);
-      }
-      for (ClassEntity element
-          in closedWorld.backendUsage.globalClassDependencies) {
-        queue.addClass(element, importSets.mainSet);
-      }
-
-      void emptyQueue() {
-        while (queue.isNotEmpty) {
-          WorkItem item = queue.nextItem();
-          item.update(this, closedWorld, queue);
-        }
-      }
-
-      emptyQueue();
+      algorithmState = AlgorithmState.create(
+          main, compiler, _elementMap, closedWorld, importSets);
     }
 
     reporter.withCurrentElement(main.library, () => measure(work));
@@ -838,7 +459,7 @@
     int id = 0;
     Map<ImportEntity, int> importMap = {};
     var entities = _deferredImportDescriptions.keys.toList();
-    entities.sort(_compareImportEntities);
+    entities.sort(compareImportEntities);
     entities = entities.reversed.toList();
     for (var key in entities) {
       importMap[key] = id++;
@@ -870,18 +491,22 @@
     Map<MemberEntity, OutputUnit> memberMap = {};
     Map<Local, OutputUnit> localFunctionMap = {};
     Map<ConstantValue, OutputUnit> constantMap = {};
-    _classToSet.forEach((cls, s) => classMap[cls] = s.unit);
-    _classTypeToSet.forEach((cls, s) => classTypeMap[cls] = s.unit);
-    _memberToSet.forEach((member, s) => memberMap[member] = s.unit);
-    _localFunctionToSet.forEach(
-        (localFunction, s) => localFunctionMap[localFunction] = s.unit);
-    _constantToSet.forEach((constant, s) => constantMap[constant] = s.unit);
-
-    _classToSet = null;
-    _classTypeToSet = null;
-    _memberToSet = null;
-    _localFunctionToSet = null;
-    _constantToSet = null;
+    algorithmState?.entityToSet?.forEach((d, s) {
+      if (d is ClassEntityData) {
+        classMap[d.entity] = s.unit;
+      } else if (d is ClassTypeEntityData) {
+        classTypeMap[d.entity] = s.unit;
+      } else if (d is MemberEntityData) {
+        memberMap[d.entity] = s.unit;
+      } else if (d is LocalFunctionEntityData) {
+        localFunctionMap[d.entity] = s.unit;
+      } else if (d is ConstantEntityData) {
+        constantMap[d.entity] = s.unit;
+      } else {
+        throw 'Unrecognized EntityData $d';
+      }
+    });
+    algorithmState = null;
     importSets = null;
     return OutputUnitData(
         this.isProgramSplit && !disableProgramSplit,
@@ -910,56 +535,68 @@
           }
         });
       }
+
+      // If program split constraints are provided, then parse and interpret
+      // them now.
+      if (compiler.programSplitConstraintsData != null) {
+        var builder = psc.Builder(compiler.programSplitConstraintsData);
+        var transitions = builder.build(_allDeferredImports);
+        importSets.buildInitialSets(transitions.singletonTransitions);
+        importSets.buildSetTransitions(transitions.setTransitions);
+      }
+
+      // Build the [ImportSet] representing the [_mainOutputUnit].
+      importSets.buildMainSet(
+          _mainImport, _mainOutputUnit, _allDeferredImports);
     });
   }
 
-  bool ignoreEntityInDump(Entity element) => false;
-
   /// Creates a textual representation of the output unit content.
   String dump() {
     Map<OutputUnit, List<String>> elementMap = {};
     Map<OutputUnit, List<String>> constantMap = {};
-    _classToSet.forEach((ClassEntity element, ImportSet importSet) {
-      if (ignoreEntityInDump(element)) return;
-      var elements = elementMap.putIfAbsent(importSet.unit, () => <String>[]);
-      var id = element.name ?? '$element';
-      id = '$id cls';
-      elements.add(id);
-    });
-    _classTypeToSet.forEach((ClassEntity element, ImportSet importSet) {
-      if (ignoreEntityInDump(element)) return;
-      var elements = elementMap.putIfAbsent(importSet.unit, () => <String>[]);
-      var id = element.name ?? '$element';
-      id = '$id type';
-      elements.add(id);
-    });
-    _memberToSet.forEach((MemberEntity element, ImportSet importSet) {
-      if (ignoreEntityInDump(element)) return;
-      var elements = elementMap.putIfAbsent(importSet.unit, () => []);
-      var id = element.name ?? '$element';
-      var cls = element.enclosingClass?.name;
-      if (cls != null) id = '$cls.$id';
-      if (element.isSetter) id = '$id=';
-      id = '$id member';
-      elements.add(id);
-    });
-    _localFunctionToSet.forEach((Local element, ImportSet importSet) {
-      if (ignoreEntityInDump(element)) return;
-      var elements = elementMap.putIfAbsent(importSet.unit, () => []);
-      var id = element.name ?? '$element';
-      var context = (element as dynamic).memberContext.name;
-      id = element.name == null || element.name == '' ? '<anonymous>' : id;
-      id = '$context.$id';
-      id = '$id local';
-      elements.add(id);
-    });
-    _constantToSet.forEach((ConstantValue value, ImportSet importSet) {
-      // Skip primitive values: they are not stored in the constant tables and
-      // if they are shared, they end up duplicated anyways across output units.
-      if (value.isPrimitive) return;
-      constantMap
-          .putIfAbsent(importSet.unit, () => [])
-          .add(value.toStructuredText(dartTypes));
+    algorithmState?.entityToSet?.forEach((d, importSet) {
+      if (d is ClassEntityData) {
+        var element = d.entity;
+        var elements = elementMap.putIfAbsent(importSet.unit, () => <String>[]);
+        var id = element.name ?? '$element';
+        id = '$id cls';
+        elements.add(id);
+      } else if (d is ClassTypeEntityData) {
+        var element = d.entity;
+        var elements = elementMap.putIfAbsent(importSet.unit, () => <String>[]);
+        var id = element.name ?? '$element';
+        id = '$id type';
+        elements.add(id);
+      } else if (d is MemberEntityData) {
+        var element = d.entity;
+        var elements = elementMap.putIfAbsent(importSet.unit, () => []);
+        var id = element.name ?? '$element';
+        var cls = element.enclosingClass?.name;
+        if (cls != null) id = '$cls.$id';
+        if (element.isSetter) id = '$id=';
+        id = '$id member';
+        elements.add(id);
+      } else if (d is LocalFunctionEntityData) {
+        var element = d.entity;
+        var elements = elementMap.putIfAbsent(importSet.unit, () => []);
+        var id = element.name ?? '$element';
+        var context = (element as dynamic).memberContext.name;
+        id = element.name == null || element.name == '' ? '<anonymous>' : id;
+        id = '$context.$id';
+        id = '$id local';
+        elements.add(id);
+      } else if (d is ConstantEntityData) {
+        var value = d.entity;
+        // Skip primitive values: they are not stored in the constant tables and
+        // if they are shared, they end up duplicated anyways across output units.
+        if (value.isPrimitive) return;
+        constantMap
+            .putIfAbsent(importSet.unit, () => [])
+            .add(value.toStructuredText(dartTypes));
+      } else {
+        throw 'Unrecognized EntityData $d';
+      }
     });
 
     Map<OutputUnit, String> text = {};
@@ -1003,914 +640,3 @@
     return sb.toString();
   }
 }
-
-class ImportDescription {
-  /// Relative uri to the importing library.
-  final String importingUri;
-
-  /// The prefix this import is imported as.
-  final String prefix;
-
-  final LibraryEntity importingLibrary;
-
-  ImportDescription.internal(
-      this.importingUri, this.prefix, this.importingLibrary);
-
-  ImportDescription(
-      ImportEntity import, LibraryEntity importingLibrary, Uri mainLibraryUri)
-      : this.internal(
-            fe.relativizeUri(
-                mainLibraryUri, importingLibrary.canonicalUri, false),
-            import.name,
-            importingLibrary);
-}
-
-/// Indirectly represents a deferred import in an [ImportSet].
-///
-/// We could directly store the [declaration] in [ImportSet], but adding this
-/// class makes some of the import set operations more efficient.
-class _DeferredImport {
-  final ImportEntity declaration;
-
-  /// Canonical index associated with [declaration]. This is used to efficiently
-  /// implement [ImportSetLattice.union].
-  final int index;
-
-  _DeferredImport(this.declaration, this.index);
-}
-
-/// A compact lattice representation of import sets and subsets.
-///
-/// We use a graph of nodes to represent elements of the lattice, but only
-/// create new nodes on-demand as they are needed by the deferred loading
-/// algorithm.
-///
-/// The constructions of nodes is carefully done by storing imports in a
-/// specific order. This ensures that we have a unique and canonical
-/// representation for each subset.
-class ImportSetLattice {
-  /// Index of deferred imports that defines the canonical order used by the
-  /// operations below.
-  Map<ImportEntity, _DeferredImport> _importIndex = {};
-
-  /// The canonical instance representing the empty import set.
-  ImportSet _emptySet = ImportSet.empty();
-
-  /// The import set representing the main output unit, which happens to be
-  /// implemented as an empty set in our algorithm.
-  ImportSet get mainSet => _emptySet;
-
-  /// Get the singleton import set that only contains [import].
-  ImportSet singleton(ImportEntity import) {
-    // Ensure we have import in the index.
-    return _emptySet._add(_wrap(import));
-  }
-
-  /// Get the import set that includes the union of [a] and [b].
-  ImportSet union(ImportSet a, ImportSet b) {
-    if (a == null || a.isEmpty) return b;
-    if (b == null || b.isEmpty) return a;
-
-    // Create the union by merging the imports in canonical order. The sets are
-    // basically lists linked by the `_previous` field in reverse order. We do a
-    // merge-like scan 'backwards' removing the biggest element until we hit an
-    // empty set or a common prefix, and the add the 'merge-sorted' elements
-    // back onto the prefix.
-    ImportSet result;
-    // 'removed' imports in decreasing canonical order.
-    List<_DeferredImport> imports = [];
-
-    while (true) {
-      if (a.isEmpty) {
-        result = b;
-        break;
-      }
-      if (b.isEmpty || identical(a, b)) {
-        result = a;
-        break;
-      }
-      if (a._import.index > b._import.index) {
-        imports.add(a._import);
-        a = a._previous;
-      } else if (b._import.index > a._import.index) {
-        imports.add(b._import);
-        b = b._previous;
-      } else {
-        assert(identical(a._import, b._import));
-        imports.add(a._import);
-        a = a._previous;
-        b = b._previous;
-      }
-    }
-
-    // Add merged elements back in reverse order. It is tempting to pop them off
-    // with `removeLast()` but that causes measurable shrinking reallocations.
-    for (int i = imports.length - 1; i >= 0; i--) {
-      result = result._add(imports[i]);
-    }
-    return result;
-  }
-
-  /// Get the index for an [import] according to the canonical order.
-  _DeferredImport _wrap(ImportEntity import) {
-    return _importIndex[import] ??=
-        _DeferredImport(import, _importIndex.length);
-  }
-}
-
-/// A canonical set of deferred imports.
-class ImportSet {
-  /// Last element added to set.
-  ///
-  /// This set comprises [_import] appended onto [_previous]. *Note*: [_import]
-  /// is the last element in the set in the canonical order imposed by
-  /// [ImportSetLattice].
-  final _DeferredImport _import; // `null` for empty ImportSet
-  /// The set containing all previous elements.
-  final ImportSet _previous;
-  final int length;
-
-  bool get isEmpty => _import == null;
-  bool get isNotEmpty => _import != null;
-
-  /// Returns an iterable over the imports in this set in canonical order.
-  Iterable<_DeferredImport> _collectImports() {
-    List<_DeferredImport> result = [];
-    ImportSet current = this;
-    while (current.isNotEmpty) {
-      result.add(current._import);
-      current = current._previous;
-    }
-    assert(result.length == this.length);
-    return result.reversed;
-  }
-
-  /// Links to other import sets in the lattice by adding one import.
-  final Map<_DeferredImport, ImportSet> _transitions = Maplet();
-
-  ImportSet.empty()
-      : _import = null,
-        _previous = null,
-        length = 0;
-
-  ImportSet(this._import, this._previous, this.length);
-
-  /// The output unit corresponding to this set of imports, if any.
-  OutputUnit unit;
-
-  /// Create an import set that adds [import] to all the imports on this set.
-  /// This assumes that import's canonical order comes after all imports in
-  /// this current set. This should only be called from [ImportSetLattice],
-  /// since it is where we preserve this invariant.
-  ImportSet _add(_DeferredImport import) {
-    assert(_import == null || import.index > _import.index);
-    return _transitions[import] ??= ImportSet(import, this, length + 1);
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = StringBuffer();
-    sb.write('ImportSet(size: $length, ');
-    for (var import in _collectImports()) {
-      sb.write('${import.declaration.name} ');
-    }
-    sb.write(')');
-    return '$sb';
-  }
-}
-
-/// The algorithm work queue.
-class WorkQueue {
-  /// The actual queue of work that needs to be done.
-  final Queue<WorkItem> queue = Queue();
-
-  /// An index to find work items in the queue corresponding to a class.
-  final Map<ClassEntity, WorkItem> pendingClasses = {};
-
-  /// An index to find work items in the queue corresponding to an
-  /// [InterfaceType] represented here by its [ClassEntitiy].
-  final Map<ClassEntity, WorkItem> pendingClassType = {};
-
-  /// An index to find work items in the queue corresponding to a member.
-  final Map<MemberEntity, WorkItem> pendingMembers = {};
-
-  /// An index to find work items in the queue corresponding to a constant.
-  final Map<ConstantValue, WorkItem> pendingConstants = {};
-
-  /// Lattice used to compute unions of [ImportSet]s.
-  final ImportSetLattice _importSets;
-
-  WorkQueue(this._importSets);
-
-  /// Whether there are no more work items in the queue.
-  bool get isNotEmpty => queue.isNotEmpty;
-
-  /// Pop the next element in the queue.
-  WorkItem nextItem() {
-    assert(isNotEmpty);
-    return queue.removeFirst();
-  }
-
-  /// Add to the queue that [element] should be updated to include all imports
-  /// in [importSet]. If there is already a work item in the queue for
-  /// [element], this makes sure that the work item now includes the union of
-  /// [importSet] and the existing work item's import set.
-  void addClass(ClassEntity element, ImportSet importSet) {
-    var item = pendingClasses[element];
-    if (item == null) {
-      item = ClassWorkItem(element, importSet);
-      pendingClasses[element] = item;
-      queue.add(item);
-    } else {
-      item.importsToAdd = _importSets.union(item.importsToAdd, importSet);
-    }
-  }
-
-  /// Add to the queue that class type (represented by [element]) should be
-  /// updated to include all imports in [importSet]. If there is already a
-  /// work item in the queue for [element], this makes sure that the work
-  /// item now includes the union of [importSet] and the existing work
-  /// item's import set.
-  void addClassType(ClassEntity element, ImportSet importSet) {
-    var item = pendingClassType[element];
-    if (item == null) {
-      item = ClassTypeWorkItem(element, importSet);
-      pendingClassType[element] = item;
-      queue.add(item);
-    } else {
-      item.importsToAdd = _importSets.union(item.importsToAdd, importSet);
-    }
-  }
-
-  /// Add to the queue that [element] should be updated to include all imports
-  /// in [importSet]. If there is already a work item in the queue for
-  /// [element], this makes sure that the work item now includes the union of
-  /// [importSet] and the existing work item's import set.
-  void addMember(MemberEntity element, ImportSet importSet) {
-    var item = pendingMembers[element];
-    if (item == null) {
-      item = MemberWorkItem(element, importSet);
-      pendingMembers[element] = item;
-      queue.add(item);
-    } else {
-      item.importsToAdd = _importSets.union(item.importsToAdd, importSet);
-    }
-  }
-
-  /// Add to the queue that [constant] should be updated to include all imports
-  /// in [importSet]. If there is already a work item in the queue for
-  /// [constant], this makes sure that the work item now includes the union of
-  /// [importSet] and the existing work item's import set.
-  void addConstant(ConstantValue constant, ImportSet importSet) {
-    var item = pendingConstants[constant];
-    if (item == null) {
-      item = ConstantWorkItem(constant, importSet);
-      pendingConstants[constant] = item;
-      queue.add(item);
-    } else {
-      item.importsToAdd = _importSets.union(item.importsToAdd, importSet);
-    }
-  }
-}
-
-/// Summary of the work that needs to be done on a class, member, or constant.
-abstract class WorkItem {
-  /// Additional imports that use [element] or [value] and need to be added by
-  /// the algorithm.
-  ///
-  /// This is non-final in case we add more deferred imports to the set before
-  /// the work item is applied (see [WorkQueue.addElement] and
-  /// [WorkQueue.addConstant]).
-  ImportSet importsToAdd;
-
-  WorkItem(this.importsToAdd);
-
-  void update(DeferredLoadTask task, KClosedWorld closedWorld, WorkQueue queue);
-}
-
-/// Summary of the work that needs to be done on a class.
-class ClassWorkItem extends WorkItem {
-  /// Class to be recursively updated.
-  final ClassEntity cls;
-
-  ClassWorkItem(this.cls, ImportSet newSet) : super(newSet);
-
-  @override
-  void update(
-      DeferredLoadTask task, KClosedWorld closedWorld, WorkQueue queue) {
-    queue.pendingClasses.remove(cls);
-    ImportSet oldSet = task._classToSet[cls];
-    ImportSet newSet = task.importSets.union(oldSet, importsToAdd);
-    task._updateClassRecursive(closedWorld, cls, oldSet, newSet, queue);
-  }
-}
-
-/// Summary of the work that needs to be done on a class.
-class ClassTypeWorkItem extends WorkItem {
-  /// Class to be recursively updated.
-  final ClassEntity cls;
-
-  ClassTypeWorkItem(this.cls, ImportSet newSet) : super(newSet);
-
-  @override
-  void update(
-      DeferredLoadTask task, KClosedWorld closedWorld, WorkQueue queue) {
-    queue.pendingClassType.remove(cls);
-    ImportSet oldSet = task._classTypeToSet[cls];
-    ImportSet newSet = task.importSets.union(oldSet, importsToAdd);
-    task._updateClassTypeRecursive(closedWorld, cls, oldSet, newSet, queue);
-  }
-}
-
-/// Summary of the work that needs to be done on a member.
-class MemberWorkItem extends WorkItem {
-  /// Member to be recursively updated.
-  final MemberEntity member;
-
-  MemberWorkItem(this.member, ImportSet newSet) : super(newSet);
-
-  @override
-  void update(
-      DeferredLoadTask task, KClosedWorld closedWorld, WorkQueue queue) {
-    queue.pendingMembers.remove(member);
-    ImportSet oldSet = task._memberToSet[member];
-    ImportSet newSet = task.importSets.union(oldSet, importsToAdd);
-    task._updateMemberRecursive(closedWorld, member, oldSet, newSet, queue);
-  }
-}
-
-/// Summary of the work that needs to be done on a constant.
-class ConstantWorkItem extends WorkItem {
-  /// Constant to be recursively updated.
-  final ConstantValue constant;
-
-  ConstantWorkItem(this.constant, ImportSet newSet) : super(newSet);
-
-  @override
-  void update(
-      DeferredLoadTask task, KClosedWorld closedWorld, WorkQueue queue) {
-    queue.pendingConstants.remove(constant);
-    ImportSet oldSet = task._constantToSet[constant];
-    ImportSet newSet = task.importSets.union(oldSet, importsToAdd);
-    task._updateConstantRecursive(closedWorld, constant, oldSet, newSet, queue);
-  }
-}
-
-/// Interface for updating an [OutputUnitData] object with data for late
-/// members, that is, members created on demand during code generation.
-class LateOutputUnitDataBuilder {
-  final OutputUnitData _outputUnitData;
-
-  LateOutputUnitDataBuilder(this._outputUnitData);
-
-  /// Registers [newEntity] to be emitted in the same output unit as
-  /// [existingEntity];
-  void registerColocatedMembers(
-      MemberEntity existingEntity, MemberEntity newEntity) {
-    assert(_outputUnitData._memberToUnit[newEntity] == null);
-    _outputUnitData._memberToUnit[newEntity] =
-        _outputUnitData.outputUnitForMember(existingEntity);
-  }
-}
-
-/// Results of the deferred loading algorithm.
-///
-/// Provides information about the output unit associated with entities and
-/// constants, as well as other helper methods.
-// TODO(sigmund): consider moving here every piece of data used as a result of
-// deferred loading (including hunksToLoad, etc).
-class OutputUnitData {
-  /// Tag used for identifying serialized [OutputUnitData] objects in a
-  /// debugging data stream.
-  static const String tag = 'output-unit-data';
-
-  final bool isProgramSplit;
-  final OutputUnit mainOutputUnit;
-  final Map<ClassEntity, OutputUnit> _classToUnit;
-  final Map<ClassEntity, OutputUnit> _classTypeToUnit;
-  final Map<MemberEntity, OutputUnit> _memberToUnit;
-  final Map<Local, OutputUnit> _localFunctionToUnit;
-  final Map<ConstantValue, OutputUnit> _constantToUnit;
-  final List<OutputUnit> outputUnits;
-  final Map<ImportEntity, String> importDeferName;
-
-  /// Because the token-stream is forgotten later in the program, we cache a
-  /// description of each deferred import.
-  final Map<ImportEntity, ImportDescription> deferredImportDescriptions;
-
-  OutputUnitData(
-      this.isProgramSplit,
-      this.mainOutputUnit,
-      this._classToUnit,
-      this._classTypeToUnit,
-      this._memberToUnit,
-      this._localFunctionToUnit,
-      this._constantToUnit,
-      this.outputUnits,
-      this.importDeferName,
-      this.deferredImportDescriptions);
-
-  // Creates J-world data from the K-world data.
-  factory OutputUnitData.from(
-      OutputUnitData other,
-      LibraryEntity convertLibrary(LibraryEntity library),
-      Map<ClassEntity, OutputUnit> Function(
-              Map<ClassEntity, OutputUnit>, Map<Local, OutputUnit>)
-          convertClassMap,
-      Map<MemberEntity, OutputUnit> Function(
-              Map<MemberEntity, OutputUnit>, Map<Local, OutputUnit>)
-          convertMemberMap,
-      Map<ConstantValue, OutputUnit> Function(Map<ConstantValue, OutputUnit>)
-          convertConstantMap) {
-    Map<ClassEntity, OutputUnit> classToUnit =
-        convertClassMap(other._classToUnit, other._localFunctionToUnit);
-    Map<ClassEntity, OutputUnit> classTypeToUnit =
-        convertClassMap(other._classTypeToUnit, other._localFunctionToUnit);
-    Map<MemberEntity, OutputUnit> memberToUnit =
-        convertMemberMap(other._memberToUnit, other._localFunctionToUnit);
-    Map<ConstantValue, OutputUnit> constantToUnit =
-        convertConstantMap(other._constantToUnit);
-    Map<ImportEntity, ImportDescription> deferredImportDescriptions = {};
-    other.deferredImportDescriptions
-        .forEach((ImportEntity import, ImportDescription description) {
-      deferredImportDescriptions[import] = ImportDescription.internal(
-          description.importingUri,
-          description.prefix,
-          convertLibrary(description.importingLibrary));
-    });
-
-    return OutputUnitData(
-        other.isProgramSplit,
-        other.mainOutputUnit,
-        classToUnit,
-        classTypeToUnit,
-        memberToUnit,
-        // Local functions only make sense in the K-world model.
-        const {},
-        constantToUnit,
-        other.outputUnits,
-        other.importDeferName,
-        deferredImportDescriptions);
-  }
-
-  /// Deserializes an [OutputUnitData] object from [source].
-  factory OutputUnitData.readFromDataSource(DataSource source) {
-    source.begin(tag);
-    bool isProgramSplit = source.readBool();
-    List<OutputUnit> outputUnits = source.readList(() {
-      bool isMainOutput = source.readBool();
-      String name = source.readString();
-      Set<ImportEntity> importSet = source.readImports().toSet();
-      return OutputUnit(isMainOutput, name, importSet);
-    });
-    OutputUnit mainOutputUnit = outputUnits[source.readInt()];
-
-    Map<ClassEntity, OutputUnit> classToUnit = source.readClassMap(() {
-      return outputUnits[source.readInt()];
-    });
-    Map<ClassEntity, OutputUnit> classTypeToUnit = source.readClassMap(() {
-      return outputUnits[source.readInt()];
-    });
-    Map<MemberEntity, OutputUnit> memberToUnit =
-        source.readMemberMap((MemberEntity member) {
-      return outputUnits[source.readInt()];
-    });
-    Map<ConstantValue, OutputUnit> constantToUnit = source.readConstantMap(() {
-      return outputUnits[source.readInt()];
-    });
-    Map<ImportEntity, String> importDeferName =
-        source.readImportMap(source.readString);
-    Map<ImportEntity, ImportDescription> deferredImportDescriptions =
-        source.readImportMap(() {
-      String importingUri = source.readString();
-      String prefix = source.readString();
-      LibraryEntity importingLibrary = source.readLibrary();
-      return ImportDescription.internal(importingUri, prefix, importingLibrary);
-    });
-    source.end(tag);
-    return OutputUnitData(
-        isProgramSplit,
-        mainOutputUnit,
-        classToUnit,
-        classTypeToUnit,
-        memberToUnit,
-        // Local functions only make sense in the K-world model.
-        const {},
-        constantToUnit,
-        outputUnits,
-        importDeferName,
-        deferredImportDescriptions);
-  }
-
-  /// Serializes this [OutputUnitData] to [sink].
-  void writeToDataSink(DataSink sink) {
-    sink.begin(tag);
-    sink.writeBool(isProgramSplit);
-    Map<OutputUnit, int> outputUnitIndices = {};
-    sink.writeList(outputUnits, (OutputUnit outputUnit) {
-      outputUnitIndices[outputUnit] = outputUnitIndices.length;
-      sink.writeBool(outputUnit.isMainOutput);
-      sink.writeString(outputUnit.name);
-      sink.writeImports(outputUnit.imports);
-    });
-    sink.writeInt(outputUnitIndices[mainOutputUnit]);
-    sink.writeClassMap(_classToUnit, (OutputUnit outputUnit) {
-      sink.writeInt(outputUnitIndices[outputUnit]);
-    });
-    sink.writeClassMap(_classTypeToUnit, (OutputUnit outputUnit) {
-      sink.writeInt(outputUnitIndices[outputUnit]);
-    });
-    sink.writeMemberMap(_memberToUnit,
-        (MemberEntity member, OutputUnit outputUnit) {
-      sink.writeInt(outputUnitIndices[outputUnit]);
-    });
-    sink.writeConstantMap(_constantToUnit, (OutputUnit outputUnit) {
-      sink.writeInt(outputUnitIndices[outputUnit]);
-    });
-    sink.writeImportMap(importDeferName, sink.writeString);
-    sink.writeImportMap(deferredImportDescriptions,
-        (ImportDescription importDescription) {
-      sink.writeString(importDescription.importingUri);
-      sink.writeString(importDescription.prefix);
-      sink.writeLibrary(importDescription.importingLibrary);
-    });
-    sink.end(tag);
-  }
-
-  /// Returns the [OutputUnit] where [cls] belongs.
-  // TODO(johnniwinther): Remove the need for [allowNull]. Dump-info currently
-  // needs it.
-  OutputUnit outputUnitForClass(ClassEntity cls, {bool allowNull = false}) {
-    if (!isProgramSplit) return mainOutputUnit;
-    OutputUnit unit = _classToUnit[cls];
-    assert(allowNull || unit != null, 'No output unit for class $cls');
-    return unit ?? mainOutputUnit;
-  }
-
-  OutputUnit outputUnitForClassForTesting(ClassEntity cls) => _classToUnit[cls];
-
-  /// Returns the [OutputUnit] where [cls]'s type belongs.
-  // TODO(joshualitt): see above TODO regarding allowNull.
-  OutputUnit outputUnitForClassType(ClassEntity cls, {bool allowNull = false}) {
-    if (!isProgramSplit) return mainOutputUnit;
-    OutputUnit unit = _classTypeToUnit[cls];
-    assert(allowNull || unit != null, 'No output unit for type $cls');
-    return unit ?? mainOutputUnit;
-  }
-
-  OutputUnit outputUnitForClassTypeForTesting(ClassEntity cls) =>
-      _classTypeToUnit[cls];
-
-  /// Returns the [OutputUnit] where [member] belongs.
-  OutputUnit outputUnitForMember(MemberEntity member) {
-    if (!isProgramSplit) return mainOutputUnit;
-    OutputUnit unit = _memberToUnit[member];
-    assert(unit != null, 'No output unit for member $member');
-    return unit ?? mainOutputUnit;
-  }
-
-  OutputUnit outputUnitForMemberForTesting(MemberEntity member) =>
-      _memberToUnit[member];
-
-  /// Direct access to the output-unit to constants map used for testing.
-  Iterable<ConstantValue> get constantsForTesting => _constantToUnit.keys;
-
-  /// Returns the [OutputUnit] where [constant] belongs.
-  OutputUnit outputUnitForConstant(ConstantValue constant) {
-    if (!isProgramSplit) return mainOutputUnit;
-    OutputUnit unit = _constantToUnit[constant];
-    // TODO(sigmund): enforce unit is not null: it is sometimes null on some
-    // corner cases on internal apps.
-    return unit ?? mainOutputUnit;
-  }
-
-  OutputUnit outputUnitForConstantForTesting(ConstantValue constant) =>
-      _constantToUnit[constant];
-
-  /// Indicates whether [element] is deferred.
-  bool isDeferredClass(ClassEntity element) {
-    return outputUnitForClass(element) != mainOutputUnit;
-  }
-
-  /// Returns `true` if element [to] is reachable from element [from] without
-  /// crossing a deferred import.
-  ///
-  /// For example, if we have two deferred libraries `A` and `B` that both
-  /// import a library `C`, then even though elements from `A` and `C` end up in
-  /// different output units, there is a non-deferred path between `A` and `C`.
-  bool hasOnlyNonDeferredImportPaths(MemberEntity from, MemberEntity to) {
-    OutputUnit outputUnitFrom = outputUnitForMember(from);
-    OutputUnit outputUnitTo = outputUnitForMember(to);
-    if (outputUnitTo == mainOutputUnit) return true;
-    if (outputUnitFrom == mainOutputUnit) return false;
-    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
-  }
-
-  /// Returns `true` if constant [to] is reachable from element [from] without
-  /// crossing a deferred import.
-  ///
-  /// For example, if we have two deferred libraries `A` and `B` that both
-  /// import a library `C`, then even though elements from `A` and `C` end up in
-  /// different output units, there is a non-deferred path between `A` and `C`.
-  bool hasOnlyNonDeferredImportPathsToConstant(
-      MemberEntity from, ConstantValue to) {
-    OutputUnit outputUnitFrom = outputUnitForMember(from);
-    OutputUnit outputUnitTo = outputUnitForConstant(to);
-    if (outputUnitTo == mainOutputUnit) return true;
-    if (outputUnitFrom == mainOutputUnit) return false;
-    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
-  }
-
-  /// Returns `true` if class [to] is reachable from element [from] without
-  /// crossing a deferred import.
-  ///
-  /// For example, if we have two deferred libraries `A` and `B` that both
-  /// import a library `C`, then even though elements from `A` and `C` end up in
-  /// different output units, there is a non-deferred path between `A` and `C`.
-  bool hasOnlyNonDeferredImportPathsToClass(MemberEntity from, ClassEntity to) {
-    OutputUnit outputUnitFrom = outputUnitForMember(from);
-    OutputUnit outputUnitTo = outputUnitForClass(to);
-    if (outputUnitTo == mainOutputUnit) return true;
-    if (outputUnitFrom == mainOutputUnit) return false;
-    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
-  }
-
-  /// Registers that a constant is used in the same deferred output unit as
-  /// [field].
-  void registerConstantDeferredUse(DeferredGlobalConstantValue constant) {
-    if (!isProgramSplit) return;
-    OutputUnit unit = constant.unit;
-    assert(
-        _constantToUnit[constant] == null || _constantToUnit[constant] == unit);
-    _constantToUnit[constant] = unit;
-  }
-
-  /// Returns the unique name for the given deferred [import].
-  String getImportDeferName(Spannable node, ImportEntity import) {
-    String name = importDeferName[import];
-    if (name == null) {
-      throw SpannableAssertionFailure(node, "No deferred name for $import.");
-    }
-    return name;
-  }
-
-  /// Returns the names associated with each deferred import in [unit].
-  Iterable<String> getImportNames(OutputUnit unit) {
-    return unit.imports.map((i) => importDeferName[i]);
-  }
-}
-
-/// Returns the filename for the output-unit named [name].
-///
-/// The filename is of the form "<main output file>_<name>.part.js".
-/// If [addExtension] is false, the ".part.js" suffix is left out.
-String deferredPartFileName(CompilerOptions options, String name,
-    {bool addExtension = true}) {
-  assert(name != "");
-  String outPath = options.outputUri != null ? options.outputUri.path : "out";
-  String outName = outPath.substring(outPath.lastIndexOf('/') + 1);
-  String extension = addExtension ? ".part.js" : "";
-  return "${outName}_$name$extension";
-}
-
-class Dependencies {
-  final Map<ClassEntity, DependencyInfo> classes = {};
-  final Map<ClassEntity, DependencyInfo> classType = {};
-  final Map<MemberEntity, DependencyInfo> members = {};
-  final Set<Local> localFunctions = {};
-  final Map<ConstantValue, DependencyInfo> constants = {};
-
-  void addClass(ClassEntity cls, [ImportEntity import]) {
-    (classes[cls] ??= DependencyInfo()).registerImport(import);
-
-    // Add a classType dependency as well just in case we optimize out
-    // the class later.
-    addClassType(cls, import);
-  }
-
-  void addClassType(ClassEntity cls, [ImportEntity import]) {
-    (classType[cls] ??= DependencyInfo()).registerImport(import);
-  }
-
-  void addMember(MemberEntity m, [ImportEntity import]) {
-    (members[m] ??= DependencyInfo()).registerImport(import);
-  }
-
-  void addConstant(ConstantValue c, [ImportEntity import]) {
-    (constants[c] ??= DependencyInfo()).registerImport(import);
-  }
-}
-
-class DependencyInfo {
-  bool isDeferred = true;
-  List<ImportEntity> imports;
-
-  registerImport(ImportEntity import) {
-    if (!isDeferred) return;
-    // A null import represents a direct non-deferred dependency.
-    if (import != null) {
-      (imports ??= []).add(import);
-    } else {
-      imports = null;
-      isDeferred = false;
-    }
-  }
-}
-
-class TypeDependencyVisitor implements DartTypeVisitor<void, Null> {
-  final Dependencies _dependencies;
-  final ImportEntity _import;
-  final CommonElements _commonElements;
-
-  TypeDependencyVisitor(this._dependencies, this._import, this._commonElements);
-
-  @override
-  void visit(DartType type, [_]) {
-    type.accept(this, null);
-  }
-
-  void visitList(List<DartType> types) {
-    types.forEach(visit);
-  }
-
-  @override
-  void visitLegacyType(LegacyType type, Null argument) {
-    visit(type.baseType);
-  }
-
-  @override
-  void visitNullableType(NullableType type, Null argument) {
-    visit(type.baseType);
-  }
-
-  @override
-  void visitFutureOrType(FutureOrType type, Null argument) {
-    _dependencies.addClassType(_commonElements.futureClass);
-    visit(type.typeArgument);
-  }
-
-  @override
-  void visitNeverType(NeverType type, Null argument) {
-    // Nothing to add.
-  }
-
-  @override
-  void visitDynamicType(DynamicType type, Null argument) {
-    // Nothing to add.
-  }
-
-  @override
-  void visitErasedType(ErasedType type, Null argument) {
-    // Nothing to add.
-  }
-
-  @override
-  void visitAnyType(AnyType type, Null argument) {
-    // Nothing to add.
-  }
-
-  @override
-  void visitInterfaceType(InterfaceType type, Null argument) {
-    visitList(type.typeArguments);
-    _dependencies.addClassType(type.element, _import);
-  }
-
-  @override
-  void visitFunctionType(FunctionType type, Null argument) {
-    for (FunctionTypeVariable typeVariable in type.typeVariables) {
-      visit(typeVariable.bound);
-    }
-    visitList(type.parameterTypes);
-    visitList(type.optionalParameterTypes);
-    visitList(type.namedParameterTypes);
-    visit(type.returnType);
-  }
-
-  @override
-  void visitFunctionTypeVariable(FunctionTypeVariable type, Null argument) {
-    // Nothing to add. Handled in [visitFunctionType].
-  }
-
-  @override
-  void visitTypeVariableType(TypeVariableType type, Null argument) {
-    // TODO(johnniwinther): Do we need to collect the bound?
-  }
-
-  @override
-  void visitVoidType(VoidType type, Null argument) {
-    // Nothing to add.
-  }
-}
-
-class ConstantCollector extends ir.RecursiveVisitor {
-  final KernelToElementMap elementMap;
-  final Dependencies dependencies;
-  final ir.StaticTypeContext staticTypeContext;
-
-  ConstantCollector(this.elementMap, this.staticTypeContext, this.dependencies);
-
-  CommonElements get commonElements => elementMap.commonElements;
-
-  void add(ir.Expression node, {bool required = true}) {
-    ConstantValue constant = elementMap
-        .getConstantValue(staticTypeContext, node, requireConstant: required);
-    if (constant != null) {
-      dependencies.addConstant(
-          constant, elementMap.getImport(getDeferredImport(node)));
-    }
-  }
-
-  @override
-  void visitIntLiteral(ir.IntLiteral literal) {}
-
-  @override
-  void visitDoubleLiteral(ir.DoubleLiteral literal) {}
-
-  @override
-  void visitBoolLiteral(ir.BoolLiteral literal) {}
-
-  @override
-  void visitStringLiteral(ir.StringLiteral literal) {}
-
-  @override
-  void visitSymbolLiteral(ir.SymbolLiteral literal) => add(literal);
-
-  @override
-  void visitNullLiteral(ir.NullLiteral literal) {}
-
-  @override
-  void visitListLiteral(ir.ListLiteral literal) {
-    if (literal.isConst) {
-      add(literal);
-    } else {
-      super.visitListLiteral(literal);
-    }
-  }
-
-  @override
-  void visitSetLiteral(ir.SetLiteral literal) {
-    if (literal.isConst) {
-      add(literal);
-    } else {
-      super.visitSetLiteral(literal);
-    }
-  }
-
-  @override
-  void visitMapLiteral(ir.MapLiteral literal) {
-    if (literal.isConst) {
-      add(literal);
-    } else {
-      super.visitMapLiteral(literal);
-    }
-  }
-
-  @override
-  void visitConstructorInvocation(ir.ConstructorInvocation node) {
-    if (node.isConst) {
-      add(node);
-    } else {
-      super.visitConstructorInvocation(node);
-    }
-  }
-
-  @override
-  void visitTypeParameter(ir.TypeParameter node) {
-    // We avoid visiting metadata on the type parameter declaration. The bound
-    // cannot hold constants so we skip that as well.
-  }
-
-  @override
-  void visitVariableDeclaration(ir.VariableDeclaration node) {
-    // We avoid visiting metadata on the parameter declaration by only visiting
-    // the initializer. The type cannot hold constants so can kan skip that
-    // as well.
-    node.initializer?.accept(this);
-  }
-
-  @override
-  void visitTypeLiteral(ir.TypeLiteral node) {
-    if (node.type is! ir.TypeParameterType) add(node);
-  }
-
-  @override
-  void visitInstantiation(ir.Instantiation node) {
-    // TODO(johnniwinther): The CFE should mark constant instantiations as
-    // constant.
-    add(node, required: false);
-    super.visitInstantiation(node);
-  }
-
-  @override
-  void visitConstantExpression(ir.ConstantExpression node) {
-    add(node);
-  }
-}
-
-int _compareImportEntities(ImportEntity a, ImportEntity b) {
-  if (a == b) {
-    return 0;
-  } else {
-    return a.uri.path.compareTo(b.uri.path);
-  }
-}
diff --git a/pkg/compiler/lib/src/deferred_load/entity_data.dart b/pkg/compiler/lib/src/deferred_load/entity_data.dart
new file mode 100644
index 0000000..bfb81f2
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/entity_data.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 '../constants/values.dart' show ConstantValue;
+import '../elements/entities.dart';
+
+/// [EntityData] is the base class of wrapped [Entity] objects. Each
+/// [EntityData] child knows how to use an [EntityDataCollector] to collect
+/// [EntityDataInfo]. [EntityData] objects are canonicalized and must be created
+/// by an [EntityDataRegistry].
+abstract class EntityData<T> {
+  final T entity;
+
+  EntityData(this.entity);
+
+  void accept(EntityDataVisitor visitor);
+
+  /// Whether or not the [EntityData] needs to be updated recursively.
+  bool get needsRecursiveUpdate => true;
+}
+
+class ClassEntityData extends EntityData<ClassEntity> {
+  @override
+  void accept(EntityDataVisitor visitor) {
+    visitor.visitClassEntityData(entity);
+  }
+
+  ClassEntityData(ClassEntity entity) : super(entity);
+}
+
+class ClassTypeEntityData extends EntityData<ClassEntity> {
+  @override
+  void accept(EntityDataVisitor visitor) {
+    visitor.visitClassTypeEntityData(entity);
+  }
+
+  ClassTypeEntityData(ClassEntity entity) : super(entity);
+}
+
+class MemberEntityData extends EntityData<MemberEntity> {
+  @override
+  void accept(EntityDataVisitor visitor) {
+    visitor.visitMemberEntityData(entity);
+  }
+
+  MemberEntityData(MemberEntity entity) : super(entity);
+}
+
+class LocalFunctionEntityData extends EntityData<Local> {
+  @override
+  void accept(EntityDataVisitor) {}
+
+  // Note: local functions are not updated recursively because the
+  // dependencies are already visited as dependencies of the enclosing member.
+  @override
+  bool get needsRecursiveUpdate => false;
+
+  LocalFunctionEntityData(Local entity) : super(entity);
+}
+
+class ConstantEntityData extends EntityData<ConstantValue> {
+  @override
+  void accept(EntityDataVisitor visitor) {
+    visitor.visitConstantEntityData(entity);
+  }
+
+  ConstantEntityData(ConstantValue entity) : super(entity);
+}
+
+/// A registry used to canonicalize [EntityData].
+class EntityDataRegistry {
+  /// Map of [Entity] / [ConstantValue] to [EntityData], used by all non
+  /// [ClassTypeEntityData].
+  final Map<Object, EntityData> _nonClassTypeData = {};
+
+  /// Map of [ClassEntity] to [EntityData], used by [ClassTypeEntityData].
+  final Map<ClassEntity, ClassTypeEntityData> _classTypeData = {};
+
+  EntityData createClassEntityData(ClassEntity cls) {
+    return _nonClassTypeData[cls] ??= ClassEntityData(cls);
+  }
+
+  EntityData createClassTypeEntityData(ClassEntity cls) {
+    return _classTypeData[cls] ??= ClassTypeEntityData(cls);
+  }
+
+  EntityData createConstantEntityData(ConstantValue constant) {
+    return _nonClassTypeData[constant] ??= ConstantEntityData(constant);
+  }
+
+  EntityData createLocalFunctionEntityData(Local localFunction) {
+    return _nonClassTypeData[localFunction] ??=
+        LocalFunctionEntityData(localFunction);
+  }
+
+  EntityData createMemberEntityData(MemberEntity member) {
+    return _nonClassTypeData[member] ??= MemberEntityData(member);
+  }
+}
+
+/// A trivial visitor to facilate interacting with [EntityData].
+abstract class EntityDataVisitor {
+  void visitClassEntityData(ClassEntity element);
+  void visitClassTypeEntityData(ClassEntity element);
+  void visitConstantEntityData(ConstantValue constant);
+  void visitMemberEntityData(MemberEntity member);
+}
diff --git a/pkg/compiler/lib/src/deferred_load/entity_data_info.dart b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
new file mode 100644
index 0000000..f3d9ecc
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
@@ -0,0 +1,568 @@
+// 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' as ir;
+import 'package:kernel/type_environment.dart' as ir;
+
+import 'deferred_load.dart';
+import 'entity_data.dart';
+
+import '../common.dart';
+import '../common_elements.dart' show CommonElements, KElementEnvironment;
+import '../compiler.dart' show Compiler;
+import '../constants/values.dart'
+    show ConstantValue, ConstructedConstantValue, InstantiationConstantValue;
+import '../elements/types.dart';
+import '../elements/entities.dart';
+import '../ir/util.dart';
+import '../kernel/kelements.dart' show KLocalFunction;
+import '../kernel/element_map.dart';
+import '../universe/use.dart';
+import '../universe/world_impact.dart'
+    show ImpactStrategy, WorldImpact, WorldImpactVisitorImpl;
+import '../world.dart' show KClosedWorld;
+
+/// [EntityDataInfo] is meta data about [EntityData] for a given compilation
+/// [Entity].
+class EntityDataInfo {
+  /// The deferred [EntityData] roots collected by the collector.
+  final Map<EntityData, List<ImportEntity>> deferredRoots = {};
+
+  /// The direct [EntityData] collected by the collector.
+  final Set<EntityData> directDependencies = {};
+
+  /// Various [add] methods for various types of direct dependencies.
+  void add(EntityData entityData, {ImportEntity import}) {
+    // If we already have a direct dependency on [entityData] then we have
+    // nothing left to do.
+    if (directDependencies.contains(entityData)) return;
+
+    // If [import] is null, then create a direct dependency on [entityData] and
+    // remove any deferred roots. Otherwise, add [import] to [deferredRoots] for
+    // [entityData].
+    if (import == null) {
+      deferredRoots.remove(entityData);
+      directDependencies.add(entityData);
+    } else {
+      (deferredRoots[entityData] ??= []).add(import);
+    }
+  }
+}
+
+/// Builds [EntityDataInfo] to help update dependencies of [EntityData] in the
+/// deferred_load algorithm.
+class EntityDataInfoBuilder {
+  final EntityDataInfo info = EntityDataInfo();
+  final KClosedWorld closedWorld;
+  final KernelToElementMap elementMap;
+  final Compiler compiler;
+  final EntityDataRegistry registry;
+
+  EntityDataInfoBuilder(
+      this.closedWorld, this.elementMap, this.compiler, this.registry);
+
+  Map<Entity, WorldImpact> get impactCache => compiler.impactCache;
+  ImpactStrategy get impactStrategy => compiler.impactStrategy;
+  KElementEnvironment get elementEnvironment =>
+      compiler.frontendStrategy.elementEnvironment;
+  CommonElements get commonElements => compiler.frontendStrategy.commonElements;
+
+  void add(EntityData data, {ImportEntity import}) {
+    info.add(data, import: import);
+  }
+
+  void addClass(ClassEntity cls, {ImportEntity import}) {
+    add(registry.createClassEntityData(cls), import: import);
+
+    // Add a classType entityData as well just in case we optimize out
+    // the class later.
+    addClassType(cls, import: import);
+  }
+
+  void addClassType(ClassEntity cls, {ImportEntity import}) {
+    add(registry.createClassTypeEntityData(cls), import: import);
+  }
+
+  void addMember(MemberEntity m, {ImportEntity import}) {
+    add(registry.createMemberEntityData(m), import: import);
+  }
+
+  void addConstant(ConstantValue c, {ImportEntity import}) {
+    add(registry.createConstantEntityData(c), import: import);
+  }
+
+  void addLocalFunction(Local localFunction) {
+    add(registry.createLocalFunctionEntityData(localFunction));
+  }
+
+  /// Recursively collects all the dependencies of [type].
+  void addTypeDependencies(DartType type, [ImportEntity import]) {
+    TypeEntityDataVisitor(this, import, commonElements).visit(type);
+  }
+
+  /// Recursively collects all the dependencies of [types].
+  void addTypeListDependencies(Iterable<DartType> types,
+      [ImportEntity import]) {
+    if (types == null) return;
+    TypeEntityDataVisitor(this, import, commonElements).visitList(types);
+  }
+
+  /// Collects all direct dependencies of [element].
+  ///
+  /// The collected dependent elements and constants are are added to
+  /// [elements] and [constants] respectively.
+  void addDirectMemberDependencies(MemberEntity element) {
+    // TODO(sigurdm): We want to be more specific about this - need a better
+    // way to query "liveness".
+    if (!closedWorld.isMemberUsed(element)) {
+      return;
+    }
+    _addDependenciesFromImpact(element);
+    ConstantCollector.collect(elementMap, element, this);
+  }
+
+  void _addFromStaticUse(MemberEntity parent, StaticUse staticUse) {
+    void processEntity() {
+      Entity usedEntity = staticUse.element;
+      if (usedEntity is MemberEntity) {
+        addMember(usedEntity, import: staticUse.deferredImport);
+      } else {
+        assert(usedEntity is KLocalFunction,
+            failedAt(usedEntity, "Unexpected static use $staticUse."));
+        KLocalFunction localFunction = usedEntity;
+        // TODO(sra): Consult KClosedWorld to see if signature is needed.
+        addTypeDependencies(localFunction.functionType);
+        addLocalFunction(localFunction);
+      }
+    }
+
+    switch (staticUse.kind) {
+      case StaticUseKind.CONSTRUCTOR_INVOKE:
+      case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
+        // The receiver type of generative constructors is a entityData of
+        // the constructor (handled by `addMember` above) and not a
+        // entityData at the call site.
+        // Factory methods, on the other hand, are like static methods so
+        // the target type is not relevant.
+        // TODO(johnniwinther): Use rti need data to skip unneeded type
+        // arguments.
+        addTypeListDependencies(staticUse.type.typeArguments);
+        processEntity();
+        break;
+      case StaticUseKind.STATIC_INVOKE:
+      case StaticUseKind.CLOSURE_CALL:
+      case StaticUseKind.DIRECT_INVOKE:
+        // TODO(johnniwinther): Use rti need data to skip unneeded type
+        // arguments.
+        addTypeListDependencies(staticUse.typeArguments);
+        processEntity();
+        break;
+      case StaticUseKind.STATIC_TEAR_OFF:
+      case StaticUseKind.CLOSURE:
+      case StaticUseKind.STATIC_GET:
+      case StaticUseKind.STATIC_SET:
+        processEntity();
+        break;
+      case StaticUseKind.SUPER_TEAR_OFF:
+      case StaticUseKind.SUPER_FIELD_SET:
+      case StaticUseKind.SUPER_GET:
+      case StaticUseKind.SUPER_SETTER_SET:
+      case StaticUseKind.SUPER_INVOKE:
+      case StaticUseKind.INSTANCE_FIELD_GET:
+      case StaticUseKind.INSTANCE_FIELD_SET:
+      case StaticUseKind.FIELD_INIT:
+      case StaticUseKind.FIELD_CONSTANT_INIT:
+        // These static uses are not relevant for this algorithm.
+        break;
+      case StaticUseKind.CALL_METHOD:
+      case StaticUseKind.INLINING:
+        failedAt(parent, "Unexpected static use: $staticUse.");
+        break;
+    }
+  }
+
+  void _addFromTypeUse(MemberEntity parent, TypeUse typeUse) {
+    void addClassIfInterfaceType(DartType t, [ImportEntity import]) {
+      var typeWithoutNullability = t.withoutNullability;
+      if (typeWithoutNullability is InterfaceType) {
+        addClass(typeWithoutNullability.element, import: import);
+      }
+    }
+
+    DartType type = typeUse.type;
+    switch (typeUse.kind) {
+      case TypeUseKind.TYPE_LITERAL:
+        addTypeDependencies(type, typeUse.deferredImport);
+        break;
+      case TypeUseKind.CONST_INSTANTIATION:
+        addClassIfInterfaceType(type, typeUse.deferredImport);
+        addTypeDependencies(type, typeUse.deferredImport);
+        break;
+      case TypeUseKind.INSTANTIATION:
+      case TypeUseKind.NATIVE_INSTANTIATION:
+        addClassIfInterfaceType(type);
+        addTypeDependencies(type);
+        break;
+      case TypeUseKind.IS_CHECK:
+      case TypeUseKind.CATCH_TYPE:
+        addTypeDependencies(type);
+        break;
+      case TypeUseKind.AS_CAST:
+        if (closedWorld.annotationsData
+            .getExplicitCastCheckPolicy(parent)
+            .isEmitted) {
+          addTypeDependencies(type);
+        }
+        break;
+      case TypeUseKind.IMPLICIT_CAST:
+        if (closedWorld.annotationsData
+            .getImplicitDowncastCheckPolicy(parent)
+            .isEmitted) {
+          addTypeDependencies(type);
+        }
+        break;
+      case TypeUseKind.PARAMETER_CHECK:
+      case TypeUseKind.TYPE_VARIABLE_BOUND_CHECK:
+        if (closedWorld.annotationsData
+            .getParameterCheckPolicy(parent)
+            .isEmitted) {
+          addTypeDependencies(type);
+        }
+        break;
+      case TypeUseKind.RTI_VALUE:
+      case TypeUseKind.TYPE_ARGUMENT:
+      case TypeUseKind.NAMED_TYPE_VARIABLE_NEW_RTI:
+      case TypeUseKind.CONSTRUCTOR_REFERENCE:
+        failedAt(parent, "Unexpected type use: $typeUse.");
+        break;
+    }
+  }
+
+  /// Extract any dependencies that are known from the impact of [element].
+  void _addDependenciesFromImpact(MemberEntity element) {
+    WorldImpact worldImpact = impactCache[element];
+    impactStrategy.visitImpact(
+        element,
+        worldImpact,
+        WorldImpactVisitorImpl(
+            visitStaticUse: (MemberEntity member, StaticUse staticUse) {
+          _addFromStaticUse(element, staticUse);
+        }, visitTypeUse: (MemberEntity member, TypeUse typeUse) {
+          _addFromTypeUse(element, typeUse);
+        }, visitDynamicUse: (MemberEntity member, DynamicUse dynamicUse) {
+          // TODO(johnniwinther): Use rti need data to skip unneeded type
+          // arguments.
+          addTypeListDependencies(dynamicUse.typeArguments);
+        }),
+        DeferredLoadTask.IMPACT_USE);
+  }
+}
+
+/// Collects the necessary [EntityDataInfo] for a given [EntityData].
+class EntityDataInfoVisitor extends EntityDataVisitor {
+  final EntityDataInfoBuilder infoBuilder;
+
+  EntityDataInfoVisitor(this.infoBuilder);
+
+  KClosedWorld get closedWorld => infoBuilder.closedWorld;
+  KElementEnvironment get elementEnvironment =>
+      infoBuilder.compiler.frontendStrategy.elementEnvironment;
+
+  /// Finds all elements and constants that [element] depends directly on.
+  /// (not the transitive closure.)
+  ///
+  /// Adds the results to [elements] and [constants].
+  @override
+  void visitClassEntityData(ClassEntity element) {
+    // If we see a class, add everything its live instance members refer
+    // to.  Static members are not relevant, unless we are processing
+    // extra dependencies due to mirrors.
+    void addLiveInstanceMember(MemberEntity member) {
+      if (!closedWorld.isMemberUsed(member)) return;
+      if (!member.isInstanceMember) return;
+      infoBuilder.addMember(member);
+      infoBuilder.addDirectMemberDependencies(member);
+    }
+
+    void addClassAndMaybeAddEffectiveMixinClass(ClassEntity cls) {
+      infoBuilder.addClass(cls);
+      if (elementEnvironment.isMixinApplication(cls)) {
+        infoBuilder.addClass(elementEnvironment.getEffectiveMixinClass(cls));
+      }
+    }
+
+    ClassEntity cls = element;
+    elementEnvironment.forEachLocalClassMember(cls, addLiveInstanceMember);
+    elementEnvironment.forEachSupertype(cls, (InterfaceType type) {
+      infoBuilder.addTypeDependencies(type);
+    });
+    elementEnvironment.forEachSuperClass(cls, (superClass) {
+      addClassAndMaybeAddEffectiveMixinClass(superClass);
+      infoBuilder
+          .addTypeDependencies(elementEnvironment.getThisType(superClass));
+    });
+    addClassAndMaybeAddEffectiveMixinClass(cls);
+  }
+
+  @override
+  void visitClassTypeEntityData(ClassEntity element) {
+    infoBuilder.addClassType(element);
+  }
+
+  /// Finds all elements and constants that [element] depends directly on.
+  /// (not the transitive closure.)
+  ///
+  /// Adds the results to [elements] and [constants].
+  @override
+  void visitMemberEntityData(MemberEntity element) {
+    if (element is FunctionEntity) {
+      infoBuilder
+          .addTypeDependencies(elementEnvironment.getFunctionType(element));
+    }
+    if (element.isStatic || element.isTopLevel || element.isConstructor) {
+      infoBuilder.addMember(element);
+      infoBuilder.addDirectMemberDependencies(element);
+    }
+    if (element is ConstructorEntity && element.isGenerativeConstructor) {
+      // When instantiating a class, we record a reference to the
+      // constructor, not the class itself.  We must add all the
+      // instance members of the constructor's class.
+      ClassEntity cls = element.enclosingClass;
+      visitClassEntityData(cls);
+    }
+
+    // Other elements, in particular instance members, are ignored as
+    // they are processed as part of the class.
+  }
+
+  @override
+  void visitConstantEntityData(ConstantValue constant) {
+    if (constant is ConstructedConstantValue) {
+      infoBuilder.addClass(constant.type.element);
+    }
+    if (constant is InstantiationConstantValue) {
+      for (DartType type in constant.typeArguments) {
+        type = type.withoutNullability;
+        if (type is InterfaceType) {
+          infoBuilder.addClass(type.element);
+        }
+      }
+    }
+
+    // Constants are not allowed to refer to deferred constants, so
+    // no need to check for a deferred type literal here.
+    constant.getDependencies().forEach(infoBuilder.addConstant);
+  }
+}
+
+class TypeEntityDataVisitor implements DartTypeVisitor<void, Null> {
+  final EntityDataInfoBuilder _infoBuilder;
+  final ImportEntity _import;
+  final CommonElements _commonElements;
+
+  TypeEntityDataVisitor(this._infoBuilder, this._import, this._commonElements);
+
+  @override
+  void visit(DartType type, [_]) {
+    type.accept(this, null);
+  }
+
+  void visitList(List<DartType> types) {
+    types.forEach(visit);
+  }
+
+  @override
+  void visitLegacyType(LegacyType type, Null argument) {
+    visit(type.baseType);
+  }
+
+  @override
+  void visitNullableType(NullableType type, Null argument) {
+    visit(type.baseType);
+  }
+
+  @override
+  void visitFutureOrType(FutureOrType type, Null argument) {
+    _infoBuilder.addClassType(_commonElements.futureClass);
+    visit(type.typeArgument);
+  }
+
+  @override
+  void visitNeverType(NeverType type, Null argument) {
+    // Nothing to add.
+  }
+
+  @override
+  void visitDynamicType(DynamicType type, Null argument) {
+    // Nothing to add.
+  }
+
+  @override
+  void visitErasedType(ErasedType type, Null argument) {
+    // Nothing to add.
+  }
+
+  @override
+  void visitAnyType(AnyType type, Null argument) {
+    // Nothing to add.
+  }
+
+  @override
+  void visitInterfaceType(InterfaceType type, Null argument) {
+    visitList(type.typeArguments);
+    _infoBuilder.addClassType(type.element, import: _import);
+  }
+
+  @override
+  void visitFunctionType(FunctionType type, Null argument) {
+    for (FunctionTypeVariable typeVariable in type.typeVariables) {
+      visit(typeVariable.bound);
+    }
+    visitList(type.parameterTypes);
+    visitList(type.optionalParameterTypes);
+    visitList(type.namedParameterTypes);
+    visit(type.returnType);
+  }
+
+  @override
+  void visitFunctionTypeVariable(FunctionTypeVariable type, Null argument) {
+    // Nothing to add. Handled in [visitFunctionType].
+  }
+
+  @override
+  void visitTypeVariableType(TypeVariableType type, Null argument) {
+    // TODO(johnniwinther): Do we need to collect the bound?
+  }
+
+  @override
+  void visitVoidType(VoidType type, Null argument) {
+    // Nothing to add.
+  }
+}
+
+class ConstantCollector extends ir.RecursiveVisitor {
+  final KernelToElementMap elementMap;
+  final EntityDataInfoBuilder infoBuilder;
+  final ir.StaticTypeContext staticTypeContext;
+
+  ConstantCollector(this.elementMap, this.staticTypeContext, this.infoBuilder);
+
+  CommonElements get commonElements => elementMap.commonElements;
+
+  /// Extract the set of constants that are used in the body of [member].
+  static void collect(KernelToElementMap elementMap, MemberEntity member,
+      EntityDataInfoBuilder infoBuilder) {
+    ir.Member node = elementMap.getMemberNode(member);
+
+    // Fetch the internal node in order to skip annotations on the member.
+    // TODO(sigmund): replace this pattern when the kernel-ast provides a better
+    // way to skip annotations (issue 31565).
+    var visitor = ConstantCollector(
+        elementMap, elementMap.getStaticTypeContext(member), infoBuilder);
+    if (node is ir.Field) {
+      node.initializer?.accept(visitor);
+      return;
+    }
+
+    if (node is ir.Constructor) {
+      node.initializers.forEach((i) => i.accept(visitor));
+    }
+    node.function?.accept(visitor);
+  }
+
+  void add(ir.Expression node, {bool required = true}) {
+    ConstantValue constant = elementMap
+        .getConstantValue(staticTypeContext, node, requireConstant: required);
+    if (constant != null) {
+      infoBuilder.addConstant(constant,
+          import: elementMap.getImport(getDeferredImport(node)));
+    }
+  }
+
+  @override
+  void visitIntLiteral(ir.IntLiteral literal) {}
+
+  @override
+  void visitDoubleLiteral(ir.DoubleLiteral literal) {}
+
+  @override
+  void visitBoolLiteral(ir.BoolLiteral literal) {}
+
+  @override
+  void visitStringLiteral(ir.StringLiteral literal) {}
+
+  @override
+  void visitSymbolLiteral(ir.SymbolLiteral literal) => add(literal);
+
+  @override
+  void visitNullLiteral(ir.NullLiteral literal) {}
+
+  @override
+  void visitListLiteral(ir.ListLiteral literal) {
+    if (literal.isConst) {
+      add(literal);
+    } else {
+      super.visitListLiteral(literal);
+    }
+  }
+
+  @override
+  void visitSetLiteral(ir.SetLiteral literal) {
+    if (literal.isConst) {
+      add(literal);
+    } else {
+      super.visitSetLiteral(literal);
+    }
+  }
+
+  @override
+  void visitMapLiteral(ir.MapLiteral literal) {
+    if (literal.isConst) {
+      add(literal);
+    } else {
+      super.visitMapLiteral(literal);
+    }
+  }
+
+  @override
+  void visitConstructorInvocation(ir.ConstructorInvocation node) {
+    if (node.isConst) {
+      add(node);
+    } else {
+      super.visitConstructorInvocation(node);
+    }
+  }
+
+  @override
+  void visitTypeParameter(ir.TypeParameter node) {
+    // We avoid visiting metadata on the type parameter declaration. The bound
+    // cannot hold constants so we skip that as well.
+  }
+
+  @override
+  void visitVariableDeclaration(ir.VariableDeclaration node) {
+    // We avoid visiting metadata on the parameter declaration by only visiting
+    // the initializer. The type cannot hold constants so can kan skip that
+    // as well.
+    node.initializer?.accept(this);
+  }
+
+  @override
+  void visitTypeLiteral(ir.TypeLiteral node) {
+    if (node.type is! ir.TypeParameterType) add(node);
+  }
+
+  @override
+  void visitInstantiation(ir.Instantiation node) {
+    // TODO(johnniwinther): The CFE should mark constant instantiations as
+    // constant.
+    add(node, required: false);
+    super.visitInstantiation(node);
+  }
+
+  @override
+  void visitConstantExpression(ir.ConstantExpression node) {
+    add(node);
+  }
+}
diff --git a/pkg/compiler/lib/src/deferred_load/import_set.dart b/pkg/compiler/lib/src/deferred_load/import_set.dart
new file mode 100644
index 0000000..9bf3816
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/import_set.dart
@@ -0,0 +1,304 @@
+// 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 'output_unit.dart';
+
+import 'program_split_constraints/builder.dart' as psc show SetTransition;
+
+import '../elements/entities.dart';
+import '../util/maplet.dart';
+
+/// An [ImportSetTransition] is similar to a [SetTransition]
+/// except its source and transitions are represented as a single [ImportSet].
+class ImportSetTransition {
+  /// The [ImportSet] which, if contained in another [ImportSet] means
+  /// [transitions] should be applied.
+  final ImportSet source;
+
+  /// The [ImportSet] which should be applied if [source] is present in an
+  /// [ImportSet].
+  final ImportSet transitions;
+
+  ImportSetTransition(this.source, this.transitions);
+}
+
+/// Indirectly represents a deferred import in an [ImportSet].
+///
+/// We could directly store the [declaration] in [ImportSet], but adding this
+/// class makes some of the import set operations more efficient.
+class _DeferredImport {
+  final ImportEntity declaration;
+
+  /// Canonical index associated with [declaration]. This is used to efficiently
+  /// implement [ImportSetLattice.union].
+  final int index;
+
+  _DeferredImport(this.declaration, this.index);
+}
+
+/// A compact lattice representation of import sets and subsets.
+///
+/// We use a graph of nodes to represent elements of the lattice, but only
+/// create new nodes on-demand as they are needed by the deferred loading
+/// algorithm.
+///
+/// The constructions of nodes is carefully done by storing imports in a
+/// specific order. This ensures that we have a unique and canonical
+/// representation for each subset.
+class ImportSetLattice {
+  /// A map of [ImportEntity] to its initial [ImportSet].
+  final Map<ImportEntity, ImportSet> initialSets = {};
+
+  /// A list of [ImportSetTransition]s which should be applied to
+  /// [ImportSet]s either during [union] or just before finalization.
+  final List<ImportSetTransition> importSetTransitions = [];
+
+  /// Index of deferred imports that defines the canonical order used by the
+  /// operations below.
+  Map<ImportEntity, _DeferredImport> _importIndex = {};
+
+  /// The canonical instance representing the empty import set.
+  ImportSet _emptySet = ImportSet.empty();
+
+  /// The [ImportSet] representing the main output unit.
+  ImportSet _mainSet;
+  ImportSet get mainSet {
+    assert(_mainSet != null && _mainSet.unit != null);
+    return _mainSet;
+  }
+
+  /// Get the smallest [ImportSet] that contains [import]. When
+  /// unconstrained, this [ImportSet] is a singleton [ImportSet] containing
+  /// only the supplied [ImportEntity]. However, when constrained the returned
+  /// [ImportSet] may contain multiple [ImportEntity]s.
+  ImportSet initialSetOf(ImportEntity import) =>
+      initialSets[import] ??= _singleton(import);
+
+  /// A private method to generate a true singleton [ImportSet] for a given
+  /// [ImportEntity].
+  ImportSet _singleton(ImportEntity import) {
+    // Ensure we have import in the index.
+    return _emptySet._add(_wrap(import));
+  }
+
+  /// A helper method to convert a [Set<ImportEntity>] to an [ImportSet].
+  ImportSet setOfImportsToImportSet(Set<ImportEntity> setOfImports) {
+    List<_DeferredImport> imports = setOfImports.map(_wrap).toList();
+    imports.sort((a, b) => a.index - b.index);
+    var result = _emptySet;
+    for (var import in imports) {
+      result = result._add(import);
+    }
+    return result;
+  }
+
+  /// Builds the [mainSet] which contains transitions for all other deferred
+  /// imports as well as [mainImport].
+  void buildMainSet(ImportEntity mainImport, OutputUnit mainOutputUnit,
+      Iterable<ImportEntity> allDeferredImports) {
+    _mainSet = setOfImportsToImportSet({mainImport, ...allDeferredImports});
+    _mainSet.unit = mainOutputUnit;
+    initialSets[mainImport] = _mainSet;
+  }
+
+  /// Initializes the [initialSet] map.
+  void buildInitialSets(
+      Map<ImportEntity, Set<ImportEntity>> initialTransitions) {
+    initialTransitions.forEach((import, setOfImports) {
+      initialSets[import] = setOfImportsToImportSet(setOfImports);
+    });
+  }
+
+  /// Builds a list of [ImportSetTransition]s which should be applied
+  /// before finalizing [ImportSet]s.
+  void buildSetTransitions(List<psc.SetTransition> setTransitions) {
+    setTransitions.forEach((setTransition) {
+      importSetTransitions.add(ImportSetTransition(
+          setOfImportsToImportSet(setTransition.source),
+          setOfImportsToImportSet(setTransition.transitions)));
+    });
+  }
+
+  /// Get the import set that includes the union of [a] and [b].
+  ImportSet union(ImportSet a, ImportSet b) {
+    if (a == null || a.isEmpty) return b;
+    if (b == null || b.isEmpty) return a;
+
+    // Create the union by merging the imports in canonical order. The sets are
+    // basically lists linked by the `_previous` field in reverse order. We do a
+    // merge-like scan 'backwards' removing the biggest element until we hit an
+    // empty set or a common prefix, and the add the 'merge-sorted' elements
+    // back onto the prefix.
+    ImportSet result;
+    // 'removed' imports in decreasing canonical order.
+    List<_DeferredImport> imports = [];
+
+    while (true) {
+      if (a.isEmpty) {
+        result = b;
+        break;
+      }
+      if (b.isEmpty || identical(a, b)) {
+        result = a;
+        break;
+      }
+      if (a._import.index > b._import.index) {
+        imports.add(a._import);
+        a = a._previous;
+      } else if (b._import.index > a._import.index) {
+        imports.add(b._import);
+        b = b._previous;
+      } else {
+        assert(identical(a._import, b._import));
+        imports.add(a._import);
+        a = a._previous;
+        b = b._previous;
+      }
+    }
+
+    // Add merged elements back in reverse order. It is tempting to pop them off
+    // with `removeLast()` but that causes measurable shrinking reallocations.
+    for (int i = imports.length - 1; i >= 0; i--) {
+      result = result._add(imports[i]);
+    }
+    return result;
+  }
+
+  /// Computes a map of transitions, such that the key of every entry in the map
+  /// should be replaced with the value.
+  Map<ImportSet, ImportSet> computeFinalTransitions(Set<ImportSet> imports) {
+    var finalTransitions = <ImportSet, ImportSet>{};
+    var allCandidateTransitions = <ImportSet, Set<ImportSetTransition>>{};
+    bool process(ImportSet originalImportSet) {
+      // If we've already got [finalTransitions] for this [originalImportSet],
+      // i.e. if we've processed it before, we use the processed [ImportSet] for
+      // the next iteration.
+      var importSet = finalTransitions[originalImportSet] ?? originalImportSet;
+      var appliedTransitions = <ImportSetTransition>[];
+
+      // Try and apply any [ImportSetTransition]s that have not yet been
+      // applied to this [ImportSet].
+      var candidateTransitions = allCandidateTransitions[originalImportSet];
+      for (var transition in candidateTransitions) {
+        if (originalImportSet.containsAll(transition.source)) {
+          importSet = union(importSet, transition.transitions);
+          appliedTransitions.add(transition);
+        }
+      }
+
+      // Update [finalTransitions] and remove any applied transitions from
+      // [transitionsToApply] so that they will not be applied again.
+      finalTransitions[originalImportSet] = importSet;
+      candidateTransitions.removeAll(appliedTransitions);
+      return appliedTransitions.isNotEmpty;
+    }
+
+    for (var import in imports) {
+      allCandidateTransitions[import] = importSetTransitions.toSet();
+    }
+
+    // Determine any final transitions.
+    // Note: We have to keep running this algorithm until we reach a fixed
+    // point.
+    var hasChanges = true;
+    do {
+      hasChanges = false;
+      for (var import in imports) {
+        hasChanges |= process(import);
+      }
+    } while (hasChanges);
+    return finalTransitions;
+  }
+
+  /// Get the index for an [import] according to the canonical order.
+  _DeferredImport _wrap(ImportEntity import) {
+    return _importIndex[import] ??=
+        _DeferredImport(import, _importIndex.length);
+  }
+}
+
+/// A canonical set of deferred imports.
+class ImportSet {
+  /// Last element added to set.
+  ///
+  /// This set comprises [_import] appended onto [_previous]. *Note*: [_import]
+  /// is the last element in the set in the canonical order imposed by
+  /// [ImportSetLattice].
+  final _DeferredImport _import; // `null` for empty ImportSet
+  /// The set containing all previous elements.
+  final ImportSet _previous;
+  final int length;
+
+  bool get isEmpty => _import == null;
+  bool get isNotEmpty => _import != null;
+
+  /// Returns an iterable over the imports in this set in canonical order.
+  Iterable<_DeferredImport> collectImports() {
+    List<_DeferredImport> result = [];
+    ImportSet current = this;
+    while (current.isNotEmpty) {
+      result.add(current._import);
+      current = current._previous;
+    }
+    assert(result.length == this.length);
+    return result.reversed;
+  }
+
+  /// Links to other import sets in the lattice by adding one import.
+  final Map<_DeferredImport, ImportSet> _transitions = Maplet();
+
+  ImportSet.empty()
+      : _import = null,
+        _previous = null,
+        length = 0;
+
+  ImportSet(this._import, this._previous, this.length);
+
+  /// The output unit corresponding to this set of imports, if any.
+  OutputUnit unit;
+
+  /// Returns true if this [ImportSet] contains all of [other].
+  bool containsAll(ImportSet other) {
+    var current = this;
+    while (true) {
+      if (other.isEmpty) return true;
+      if (current.isEmpty) return false;
+
+      if (current._import.index > other._import.index) {
+        current = current._previous;
+      } else if (other._import.index > current._import.index) {
+        return false;
+      } else {
+        assert(current._import.index == other._import.index);
+        current = current._previous;
+        other = other._previous;
+      }
+    }
+  }
+
+  /// Create an import set that adds [import] to all the imports on this set.
+  /// This assumes that import's canonical order comes after all imports in
+  /// this current set. This should only be called from [ImportSetLattice],
+  /// since it is where we preserve this invariant.
+  ImportSet _add(_DeferredImport import) {
+    assert(_import == null || import.index > _import.index);
+    return _transitions[import] ??= ImportSet(import, this, length + 1);
+  }
+
+  @override
+  String toString() {
+    StringBuffer sb = StringBuffer();
+    sb.write('ImportSet(size: $length, ');
+    for (var import in collectImports()) {
+      sb.write('${import.declaration.name} ');
+    }
+    sb.write(')');
+    return '$sb';
+  }
+
+  /// Converts an [ImportSet] to a [Set<ImportEntity].
+  /// Note: Not for performance sensitive code.
+  Set<ImportEntity> toSet() =>
+      collectImports().map((i) => i.declaration).toSet();
+}
diff --git a/pkg/compiler/lib/src/deferred_load/output_unit.dart b/pkg/compiler/lib/src/deferred_load/output_unit.dart
new file mode 100644
index 0000000..17daef0
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/output_unit.dart
@@ -0,0 +1,405 @@
+// 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/dart2js.dart' as fe;
+
+import '../common.dart';
+import '../constants/values.dart'
+    show ConstantValue, DeferredGlobalConstantValue;
+import '../elements/entities.dart';
+import '../serialization/serialization.dart';
+import '../options.dart';
+
+/// A "hunk" of the program that will be loaded whenever one of its [imports]
+/// are loaded.
+///
+/// Elements that are only used in one deferred import, is in an OutputUnit with
+/// the deferred import as single element in the [imports] set.
+///
+/// Whenever a deferred Element is shared between several deferred imports it is
+/// in an output unit with those imports in the [imports] Set.
+///
+/// We never create two OutputUnits sharing the same set of [imports].
+class OutputUnit implements Comparable<OutputUnit> {
+  /// `true` if this output unit is for the main output file.
+  final bool isMainOutput;
+
+  /// A unique name representing this [OutputUnit].
+  final String name;
+
+  /// The deferred imports that use the elements in this output unit.
+  final Set<ImportEntity> imports;
+
+  OutputUnit(this.isMainOutput, this.name, this.imports);
+
+  @override
+  int compareTo(OutputUnit other) {
+    if (identical(this, other)) return 0;
+    if (isMainOutput && !other.isMainOutput) return -1;
+    if (!isMainOutput && other.isMainOutput) return 1;
+    var size = imports.length;
+    var otherSize = other.imports.length;
+    if (size != otherSize) return size.compareTo(otherSize);
+    var thisImports = imports.toList();
+    var otherImports = other.imports.toList();
+    for (var i = 0; i < size; i++) {
+      var cmp = compareImportEntities(thisImports[i], otherImports[i]);
+      if (cmp != 0) return cmp;
+    }
+    // TODO(sigmund): make compare stable.  If we hit this point, all imported
+    // libraries are the same, however [this] and [other] use different deferred
+    // imports in the program. We can make this stable if we sort based on the
+    // deferred imports themselves (e.g. their declaration location).
+    return name.compareTo(other.name);
+  }
+
+  @override
+  String toString() => "OutputUnit($name, $imports)";
+}
+
+/// Interface for updating an [OutputUnitData] object with data for late
+/// members, that is, members created on demand during code generation.
+class LateOutputUnitDataBuilder {
+  final OutputUnitData _outputUnitData;
+
+  LateOutputUnitDataBuilder(this._outputUnitData);
+
+  /// Registers [newEntity] to be emitted in the same output unit as
+  /// [existingEntity];
+  void registerColocatedMembers(
+      MemberEntity existingEntity, MemberEntity newEntity) {
+    assert(_outputUnitData._memberToUnit[newEntity] == null);
+    _outputUnitData._memberToUnit[newEntity] =
+        _outputUnitData.outputUnitForMember(existingEntity);
+  }
+}
+
+/// Results of the deferred loading algorithm.
+///
+/// Provides information about the output unit associated with entities and
+/// constants, as well as other helper methods.
+// TODO(sigmund): consider moving here every piece of data used as a result of
+// deferred loading (including hunksToLoad, etc).
+class OutputUnitData {
+  /// Tag used for identifying serialized [OutputUnitData] objects in a
+  /// debugging data stream.
+  static const String tag = 'output-unit-data';
+
+  final bool isProgramSplit;
+  final OutputUnit mainOutputUnit;
+  final Map<ClassEntity, OutputUnit> _classToUnit;
+  final Map<ClassEntity, OutputUnit> _classTypeToUnit;
+  final Map<MemberEntity, OutputUnit> _memberToUnit;
+  final Map<Local, OutputUnit> _localFunctionToUnit;
+  final Map<ConstantValue, OutputUnit> _constantToUnit;
+  final List<OutputUnit> outputUnits;
+  final Map<ImportEntity, String> importDeferName;
+
+  /// Because the token-stream is forgotten later in the program, we cache a
+  /// description of each deferred import.
+  final Map<ImportEntity, ImportDescription> deferredImportDescriptions;
+
+  OutputUnitData(
+      this.isProgramSplit,
+      this.mainOutputUnit,
+      this._classToUnit,
+      this._classTypeToUnit,
+      this._memberToUnit,
+      this._localFunctionToUnit,
+      this._constantToUnit,
+      this.outputUnits,
+      this.importDeferName,
+      this.deferredImportDescriptions);
+
+  // Creates J-world data from the K-world data.
+  factory OutputUnitData.from(
+      OutputUnitData other,
+      LibraryEntity convertLibrary(LibraryEntity library),
+      Map<ClassEntity, OutputUnit> Function(
+              Map<ClassEntity, OutputUnit>, Map<Local, OutputUnit>)
+          convertClassMap,
+      Map<MemberEntity, OutputUnit> Function(
+              Map<MemberEntity, OutputUnit>, Map<Local, OutputUnit>)
+          convertMemberMap,
+      Map<ConstantValue, OutputUnit> Function(Map<ConstantValue, OutputUnit>)
+          convertConstantMap) {
+    Map<ClassEntity, OutputUnit> classToUnit =
+        convertClassMap(other._classToUnit, other._localFunctionToUnit);
+    Map<ClassEntity, OutputUnit> classTypeToUnit =
+        convertClassMap(other._classTypeToUnit, other._localFunctionToUnit);
+    Map<MemberEntity, OutputUnit> memberToUnit =
+        convertMemberMap(other._memberToUnit, other._localFunctionToUnit);
+    Map<ConstantValue, OutputUnit> constantToUnit =
+        convertConstantMap(other._constantToUnit);
+    Map<ImportEntity, ImportDescription> deferredImportDescriptions = {};
+    other.deferredImportDescriptions
+        .forEach((ImportEntity import, ImportDescription description) {
+      deferredImportDescriptions[import] = ImportDescription.internal(
+          description.importingUri,
+          description.prefix,
+          convertLibrary(description.importingLibrary));
+    });
+
+    return OutputUnitData(
+        other.isProgramSplit,
+        other.mainOutputUnit,
+        classToUnit,
+        classTypeToUnit,
+        memberToUnit,
+        // Local functions only make sense in the K-world model.
+        const {},
+        constantToUnit,
+        other.outputUnits,
+        other.importDeferName,
+        deferredImportDescriptions);
+  }
+
+  /// Deserializes an [OutputUnitData] object from [source].
+  factory OutputUnitData.readFromDataSource(DataSource source) {
+    source.begin(tag);
+    bool isProgramSplit = source.readBool();
+    List<OutputUnit> outputUnits = source.readList(() {
+      bool isMainOutput = source.readBool();
+      String name = source.readString();
+      Set<ImportEntity> importSet = source.readImports().toSet();
+      return OutputUnit(isMainOutput, name, importSet);
+    });
+    OutputUnit mainOutputUnit = outputUnits[source.readInt()];
+
+    Map<ClassEntity, OutputUnit> classToUnit = source.readClassMap(() {
+      return outputUnits[source.readInt()];
+    });
+    Map<ClassEntity, OutputUnit> classTypeToUnit = source.readClassMap(() {
+      return outputUnits[source.readInt()];
+    });
+    Map<MemberEntity, OutputUnit> memberToUnit =
+        source.readMemberMap((MemberEntity member) {
+      return outputUnits[source.readInt()];
+    });
+    Map<ConstantValue, OutputUnit> constantToUnit = source.readConstantMap(() {
+      return outputUnits[source.readInt()];
+    });
+    Map<ImportEntity, String> importDeferName =
+        source.readImportMap(source.readString);
+    Map<ImportEntity, ImportDescription> deferredImportDescriptions =
+        source.readImportMap(() {
+      String importingUri = source.readString();
+      String prefix = source.readString();
+      LibraryEntity importingLibrary = source.readLibrary();
+      return ImportDescription.internal(importingUri, prefix, importingLibrary);
+    });
+    source.end(tag);
+    return OutputUnitData(
+        isProgramSplit,
+        mainOutputUnit,
+        classToUnit,
+        classTypeToUnit,
+        memberToUnit,
+        // Local functions only make sense in the K-world model.
+        const {},
+        constantToUnit,
+        outputUnits,
+        importDeferName,
+        deferredImportDescriptions);
+  }
+
+  /// Serializes this [OutputUnitData] to [sink].
+  void writeToDataSink(DataSink sink) {
+    sink.begin(tag);
+    sink.writeBool(isProgramSplit);
+    Map<OutputUnit, int> outputUnitIndices = {};
+    sink.writeList(outputUnits, (OutputUnit outputUnit) {
+      outputUnitIndices[outputUnit] = outputUnitIndices.length;
+      sink.writeBool(outputUnit.isMainOutput);
+      sink.writeString(outputUnit.name);
+      sink.writeImports(outputUnit.imports);
+    });
+    sink.writeInt(outputUnitIndices[mainOutputUnit]);
+    sink.writeClassMap(_classToUnit, (OutputUnit outputUnit) {
+      sink.writeInt(outputUnitIndices[outputUnit]);
+    });
+    sink.writeClassMap(_classTypeToUnit, (OutputUnit outputUnit) {
+      sink.writeInt(outputUnitIndices[outputUnit]);
+    });
+    sink.writeMemberMap(_memberToUnit,
+        (MemberEntity member, OutputUnit outputUnit) {
+      sink.writeInt(outputUnitIndices[outputUnit]);
+    });
+    sink.writeConstantMap(_constantToUnit, (OutputUnit outputUnit) {
+      sink.writeInt(outputUnitIndices[outputUnit]);
+    });
+    sink.writeImportMap(importDeferName, sink.writeString);
+    sink.writeImportMap(deferredImportDescriptions,
+        (ImportDescription importDescription) {
+      sink.writeString(importDescription.importingUri);
+      sink.writeString(importDescription.prefix);
+      sink.writeLibrary(importDescription.importingLibrary);
+    });
+    sink.end(tag);
+  }
+
+  /// Returns the [OutputUnit] where [cls] belongs.
+  // TODO(johnniwinther): Remove the need for [allowNull]. Dump-info currently
+  // needs it.
+  OutputUnit outputUnitForClass(ClassEntity cls, {bool allowNull = false}) {
+    if (!isProgramSplit) return mainOutputUnit;
+    OutputUnit unit = _classToUnit[cls];
+    assert(allowNull || unit != null, 'No output unit for class $cls');
+    return unit ?? mainOutputUnit;
+  }
+
+  OutputUnit outputUnitForClassForTesting(ClassEntity cls) => _classToUnit[cls];
+
+  /// Returns the [OutputUnit] where [cls]'s type belongs.
+  // TODO(joshualitt): see above TODO regarding allowNull.
+  OutputUnit outputUnitForClassType(ClassEntity cls, {bool allowNull = false}) {
+    if (!isProgramSplit) return mainOutputUnit;
+    OutputUnit unit = _classTypeToUnit[cls];
+    assert(allowNull || unit != null, 'No output unit for type $cls');
+    return unit ?? mainOutputUnit;
+  }
+
+  OutputUnit outputUnitForClassTypeForTesting(ClassEntity cls) =>
+      _classTypeToUnit[cls];
+
+  /// Returns the [OutputUnit] where [member] belongs.
+  OutputUnit outputUnitForMember(MemberEntity member) {
+    if (!isProgramSplit) return mainOutputUnit;
+    OutputUnit unit = _memberToUnit[member];
+    assert(unit != null, 'No output unit for member $member');
+    return unit ?? mainOutputUnit;
+  }
+
+  OutputUnit outputUnitForMemberForTesting(MemberEntity member) =>
+      _memberToUnit[member];
+
+  /// Direct access to the output-unit to constants map used for testing.
+  Iterable<ConstantValue> get constantsForTesting => _constantToUnit.keys;
+
+  /// Returns the [OutputUnit] where [constant] belongs.
+  OutputUnit outputUnitForConstant(ConstantValue constant) {
+    if (!isProgramSplit) return mainOutputUnit;
+    OutputUnit unit = _constantToUnit[constant];
+    // TODO(sigmund): enforce unit is not null: it is sometimes null on some
+    // corner cases on internal apps.
+    return unit ?? mainOutputUnit;
+  }
+
+  OutputUnit outputUnitForConstantForTesting(ConstantValue constant) =>
+      _constantToUnit[constant];
+
+  /// Indicates whether [element] is deferred.
+  bool isDeferredClass(ClassEntity element) {
+    return outputUnitForClass(element) != mainOutputUnit;
+  }
+
+  /// Returns `true` if element [to] is reachable from element [from] without
+  /// crossing a deferred import.
+  ///
+  /// For example, if we have two deferred libraries `A` and `B` that both
+  /// import a library `C`, then even though elements from `A` and `C` end up in
+  /// different output units, there is a non-deferred path between `A` and `C`.
+  bool hasOnlyNonDeferredImportPaths(MemberEntity from, MemberEntity to) {
+    OutputUnit outputUnitFrom = outputUnitForMember(from);
+    OutputUnit outputUnitTo = outputUnitForMember(to);
+    if (outputUnitTo == mainOutputUnit) return true;
+    if (outputUnitFrom == mainOutputUnit) return false;
+    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
+  }
+
+  /// Returns `true` if constant [to] is reachable from element [from] without
+  /// crossing a deferred import.
+  ///
+  /// For example, if we have two deferred libraries `A` and `B` that both
+  /// import a library `C`, then even though elements from `A` and `C` end up in
+  /// different output units, there is a non-deferred path between `A` and `C`.
+  bool hasOnlyNonDeferredImportPathsToConstant(
+      MemberEntity from, ConstantValue to) {
+    OutputUnit outputUnitFrom = outputUnitForMember(from);
+    OutputUnit outputUnitTo = outputUnitForConstant(to);
+    if (outputUnitTo == mainOutputUnit) return true;
+    if (outputUnitFrom == mainOutputUnit) return false;
+    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
+  }
+
+  /// Returns `true` if class [to] is reachable from element [from] without
+  /// crossing a deferred import.
+  ///
+  /// For example, if we have two deferred libraries `A` and `B` that both
+  /// import a library `C`, then even though elements from `A` and `C` end up in
+  /// different output units, there is a non-deferred path between `A` and `C`.
+  bool hasOnlyNonDeferredImportPathsToClass(MemberEntity from, ClassEntity to) {
+    OutputUnit outputUnitFrom = outputUnitForMember(from);
+    OutputUnit outputUnitTo = outputUnitForClass(to);
+    if (outputUnitTo == mainOutputUnit) return true;
+    if (outputUnitFrom == mainOutputUnit) return false;
+    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
+  }
+
+  /// Registers that a constant is used in the same deferred output unit as
+  /// [field].
+  void registerConstantDeferredUse(DeferredGlobalConstantValue constant) {
+    if (!isProgramSplit) return;
+    OutputUnit unit = constant.unit;
+    assert(
+        _constantToUnit[constant] == null || _constantToUnit[constant] == unit);
+    _constantToUnit[constant] = unit;
+  }
+
+  /// Returns the unique name for the given deferred [import].
+  String getImportDeferName(Spannable node, ImportEntity import) {
+    String name = importDeferName[import];
+    if (name == null) {
+      throw SpannableAssertionFailure(node, "No deferred name for $import.");
+    }
+    return name;
+  }
+
+  /// Returns the names associated with each deferred import in [unit].
+  Iterable<String> getImportNames(OutputUnit unit) {
+    return unit.imports.map((i) => importDeferName[i]);
+  }
+}
+
+class ImportDescription {
+  /// Relative uri to the importing library.
+  final String importingUri;
+
+  /// The prefix this import is imported as.
+  final String prefix;
+
+  final LibraryEntity importingLibrary;
+
+  ImportDescription.internal(
+      this.importingUri, this.prefix, this.importingLibrary);
+
+  ImportDescription(
+      ImportEntity import, LibraryEntity importingLibrary, Uri mainLibraryUri)
+      : this.internal(
+            fe.relativizeUri(
+                mainLibraryUri, importingLibrary.canonicalUri, false),
+            import.name,
+            importingLibrary);
+}
+
+/// Returns the filename for the output-unit named [name].
+///
+/// The filename is of the form "<main output file>_<name>.part.js".
+/// If [addExtension] is false, the ".part.js" suffix is left out.
+String deferredPartFileName(CompilerOptions options, String name,
+    {bool addExtension = true}) {
+  assert(name != "");
+  String outPath = options.outputUri != null ? options.outputUri.path : "out";
+  String outName = outPath.substring(outPath.lastIndexOf('/') + 1);
+  String extension = addExtension ? ".part.js" : "";
+  return "${outName}_$name$extension";
+}
+
+int compareImportEntities(ImportEntity a, ImportEntity b) {
+  if (a == b) {
+    return 0;
+  } else {
+    return a.uri.path.compareTo(b.uri.path);
+  }
+}
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
new file mode 100644
index 0000000..2520547
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
@@ -0,0 +1,214 @@
+// 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:collection';
+
+import 'nodes.dart';
+
+import '../../elements/entities.dart';
+
+/// A [Constraint] is a node in a constraint graph which wraps an
+/// [ImportEntity].
+class Constraint {
+  /// The name of the [NamedNode] this [Constraint] was created to
+  /// represent.
+  final String name;
+
+  /// The [CombinerType] which should be used to combine [imports]. Either
+  /// [imports] will be a singleton, or [combinerType] will be non-null.
+  final CombinerType combinerType;
+
+  /// The [ImportEntity]s underlying this [Constraint].
+  final Set<ImportEntity> imports;
+
+  /// Imports which load after [import].
+  final Set<Constraint> successors = {};
+
+  /// Imports which load before [import].
+  final Set<Constraint> predecessors = {};
+
+  /// Whether or not this [ConstraintNode] should always apply transitions as
+  /// opposed to conditionally applying transitions.
+  bool get alwaysApplyTransitions {
+    return combinerType == null ||
+        combinerType == CombinerType.and ||
+        combinerType == CombinerType.fuse;
+  }
+
+  Constraint(this.name, this.imports, this.combinerType) {
+    assert((this.imports.length == 1 && combinerType == null) ||
+        (this.imports.length > 1 && combinerType != null));
+  }
+
+  @override
+  String toString() {
+    var predecessorNames =
+        predecessors.map((constraint) => constraint.name).join(', ');
+    var successorNames =
+        successors.map((constraint) => constraint.name).join(', ');
+    return 'Constraint(imports=$imports, predecessors={$predecessorNames}, '
+        'successors={$successorNames})';
+  }
+}
+
+/// [_WorkItem] is an private class used to compute the transitive closure of
+/// transitions.
+class _WorkItem {
+  /// The [Constraint] to process.
+  final Constraint child;
+
+  /// The set of [ImportEntity]s guaranteed to be loaded after [child]
+  /// transitively.
+  final Set<ImportEntity> transitiveChildren;
+
+  _WorkItem(this.child, {this.transitiveChildren = const {}});
+}
+
+/// [Builder] is converts parsed [Node] objects into transitions which
+/// can be applied while splitting a program.
+class Builder {
+  /// The [ConstraintData] object which result from parsing json constraints.
+  final ConstraintData nodes;
+
+  Builder(this.nodes);
+
+  /// Builds [ProgramSplitConstraints]  which can be applied by an
+  /// [ImportSetLattice] when generating [ImportSet]s.
+  ProgramSplitConstraints build(Iterable<ImportEntity> imports) {
+    // 1) Create a map of uri#prefix to [ImportEntity].
+    Map<Uri, Map<String, ImportEntity>> importsByUriAndPrefix = {};
+    for (var import in imports) {
+      var libraryUri = import.enclosingLibraryUri;
+      var prefix = import.name;
+      var uriNodes = importsByUriAndPrefix[libraryUri] ??= {};
+      uriNodes[prefix] = import;
+    }
+
+    // A helper function for looking up an [ImportEntity] from a
+    // [ReferenceNode].
+    ImportEntity _lookupReference(ReferenceNode node) {
+      var uri = node.uri;
+      if (!importsByUriAndPrefix.containsKey(uri)) {
+        throw 'Uri for constraint not found $uri';
+      }
+      var prefix = node.prefix;
+      if (!importsByUriAndPrefix[uri].containsKey(prefix)) {
+        throw 'Prefix: $prefix not found for uri: $uri';
+      }
+      return importsByUriAndPrefix[uri][prefix];
+    }
+
+    // 2) Create a [Constraint] for each [NamedNode]. Also,
+    // index each [Constraint] by [NamedNode].
+    Map<NamedNode, Constraint> nodeToConstraintMap = {};
+    for (var constraint in nodes.named) {
+      CombinerType combinerType = null;
+      Set<ImportEntity> imports = {};
+      if (constraint is ReferenceNode) {
+        imports.add(_lookupReference(constraint));
+      } else if (constraint is CombinerNode) {
+        combinerType = constraint.type;
+        for (var child in constraint.nodes) {
+          imports.add(_lookupReference(child));
+        }
+      } else {
+        throw 'Unexpected Node Type $constraint';
+      }
+
+      nodeToConstraintMap[constraint] =
+          Constraint(constraint.name, imports, combinerType);
+    }
+
+    // 3) Build a graph of [Constraint]s by processing user constraints and
+    // intializing each [Constraint]'s predecessor / successor members.
+    for (var constraint in nodes.ordered) {
+      var successor = nodeToConstraintMap[constraint.successor];
+      var predecessor = nodeToConstraintMap[constraint.predecessor];
+      successor.predecessors.add(predecessor);
+      predecessor.successors.add(successor);
+    }
+
+    // 4) Compute the transitive closure of constraints. This gives us a map of
+    // transitiveTransitions, where each key is a parent [ImportEntity] and each
+    // value represents the transitive set of child [ImportEntity]s which are
+    // always loaded after the parent.
+    Map<ImportEntity, Set<ImportEntity>> singletonTransitions = {};
+    Map<Constraint, SetTransition> setTransitions = {};
+    Queue<_WorkItem> queue = Queue.from(nodeToConstraintMap.values
+        .where((node) => node.successors.isEmpty)
+        .map((node) => _WorkItem(node)));
+    while (queue.isNotEmpty) {
+      var item = queue.removeFirst();
+      var constraint = item.child;
+      var imports = constraint.imports;
+
+      // Update [transitiveTransitions] with reachable transitions for this
+      // [_WorkItem]
+      var transitiveChildren = item.transitiveChildren;
+
+      // We only add singletonTransitions for a given [ImportEntity] when it is
+      // guaranteed to dominate another [ImportEntity]. Some nodes such as 'or'
+      // nodes do not have this property.
+      if (constraint.alwaysApplyTransitions) {
+        for (var import in imports) {
+          // We insert an implicit 'self' transition for every import.
+          var transitions = singletonTransitions[import] ??= {import};
+
+          // In the case of [CombinerType.fuse], the nodes in the
+          // [Constraint] form a strongly connected component,
+          // i.e. [ImportEntity]s that are always part of a
+          // single [ImportSet].
+          if (constraint.combinerType == CombinerType.fuse) {
+            transitions.addAll(imports);
+          }
+          transitions.addAll(transitiveChildren);
+        }
+      } else {
+        assert(constraint.combinerType == CombinerType.or);
+        var setTransition =
+            setTransitions[constraint] ??= SetTransition(constraint.imports);
+        setTransition.transitions.addAll(transitiveChildren);
+      }
+
+      // Propagate constraints transitively to the parent.
+      var predecessorTransitiveChildren = {
+        ...imports,
+        ...transitiveChildren,
+      };
+      for (var predecessor in constraint.predecessors) {
+        queue.add(_WorkItem(predecessor,
+            transitiveChildren: predecessorTransitiveChildren));
+      }
+    }
+    return ProgramSplitConstraints(
+        singletonTransitions, setTransitions.values.toList());
+  }
+}
+
+/// A [SetTransition] is a set of [ImportEntity] transitions which can only be
+/// applied when all of the [ImportEntity]s in a given [source] are present in a
+/// given [ImportSet].
+class SetTransition {
+  /// The [Set<ImportEntity>] which, if present in a given [ImportSet] means
+  /// [transitions] should be applied.
+  final Set<ImportEntity> source;
+
+  /// The [Set<ImportEntity>] which is applied if [source] is present in a
+  /// given [ImportSet].
+  final Set<ImportEntity> transitions = {};
+
+  SetTransition(this.source);
+}
+
+/// [ProgramSplitConstraints] is a holder for transitions which should be
+/// applied while splitting a program.
+class ProgramSplitConstraints {
+  /// Transitions which apply when a singleton [ImportEntity] is present.
+  final Map<ImportEntity, Set<ImportEntity>> singletonTransitions;
+
+  /// Transitions which apply only when a set of [ImportEntity]s is present.
+  final List<SetTransition> setTransitions;
+
+  ProgramSplitConstraints(this.singletonTransitions, this.setTransitions);
+}
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
new file mode 100644
index 0000000..33f7b58
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.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.
+
+/// A [Node] is an abstract base class for all [Node]s parsed from json
+/// constraints.
+abstract class Node {}
+
+/// A [NamedNode] is an abstract base class for all [Node]s that have a name.
+abstract class NamedNode extends Node {
+  final String name;
+
+  NamedNode(this.name);
+}
+
+/// A [ReferenceNode] is a [NamedNode] with a uri and prefix.
+class ReferenceNode extends NamedNode {
+  final Uri uri;
+  final String prefix;
+
+  ReferenceNode(name, this.uri, this.prefix) : super(name);
+
+  @override
+  String toString() {
+    return 'ReferenceNode(name=$name, uri=$uri, prefix=$prefix)';
+  }
+}
+
+/// A [CombinerType] defines how to combine multiple [ReferenceNode]s in a
+/// single step.
+enum CombinerType { fuse, and, or }
+
+/// 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);
+
+  @override
+  String toString() {
+    var nodeNames = nodes.map((node) => node.name).join(', ');
+    return 'CombinerNode(name=$name, type=$type, nodes=$nodeNames)';
+  }
+}
+
+/// A [RelativeOrderNode] is an unnamed [Node] which defines a relative
+/// load order between two [NamedNode]s.
+class RelativeOrderNode extends Node {
+  final NamedNode predecessor;
+  final NamedNode successor;
+
+  RelativeOrderNode({this.predecessor, this.successor}) {
+    // TODO(joshualitt) make these both required parameters.
+    assert(this.predecessor != null && this.successor != null);
+  }
+
+  @override
+  String toString() {
+    return 'RelativeOrderNode(predecessor=${predecessor.name}, '
+        'successor=${successor.name})';
+  }
+}
+
+/// [ConstraintData] is a data object which contains the results of parsing json
+/// program split constraints.
+class ConstraintData {
+  final List<NamedNode> named;
+  final List<RelativeOrderNode> ordered;
+
+  ConstraintData(this.named, this.ordered);
+}
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
new file mode 100644
index 0000000..a758569
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.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.
+
+import 'dart:convert';
+
+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';
+    }
+  }
+
+  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;
+  }
+
+  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);
+  }
+
+  /// 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();
+    List<dynamic> doc = json.decode(programSplitJson);
+    List<Map<String, dynamic>> referenceConstraints = [];
+    List<Map<String, dynamic>> combinerConstraints = [];
+    List<Map<String, dynamic>> orderConstraints = [];
+    for (Map<String, dynamic> constraint in doc) {
+      switch (constraint['type']) {
+        case 'reference':
+          referenceConstraints.add(constraint);
+          break;
+        case 'and':
+        case 'fuse':
+        case 'or':
+          combinerConstraints.add(constraint);
+          break;
+        case 'order':
+          orderConstraints.add(constraint);
+          break;
+        default:
+          throw 'Unrecognized constraint type in $constraint';
+      }
+    }
+
+    // Parse references, than combiners, than finally sequences.
+    referenceConstraints.forEach(parseReference);
+    combinerConstraints.forEach(parseCombiner);
+    orderConstraints.forEach(parseOrder);
+    return ConstraintData(nameMap.values.toList(), orderedNodes);
+  }
+}
diff --git a/pkg/compiler/lib/src/deferred_load/work_queue.dart b/pkg/compiler/lib/src/deferred_load/work_queue.dart
new file mode 100644
index 0000000..90bf329
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/work_queue.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.
+
+import 'dart:collection' show Queue;
+
+import 'algorithm_state.dart';
+import 'entity_data.dart';
+import 'import_set.dart';
+
+import '../elements/entities.dart';
+
+/// The entity_data_state work queue.
+class WorkQueue {
+  /// The actual queue of work that needs to be done.
+  final Queue<WorkItem> queue = Queue();
+
+  /// An index to find work items in the queue corresponding to a given
+  /// [EntityData].
+  final Map<EntityData, WorkItem> pendingWorkItems = {};
+
+  /// Lattice used to compute unions of [ImportSet]s.
+  final ImportSetLattice _importSets;
+
+  /// Registry used to create [EntityData].
+  final EntityDataRegistry _registry;
+
+  WorkQueue(this._importSets, this._registry);
+
+  /// Whether there are no more work items in the queue.
+  bool get isNotEmpty => queue.isNotEmpty;
+
+  /// Pop the next element in the queue.
+  WorkItem nextItem() {
+    assert(isNotEmpty);
+    return queue.removeFirst();
+  }
+
+  /// Add to the queue that [element] should be updated to include all imports
+  /// in [importSet]. If there is already a work item in the queue for
+  /// [element], this makes sure that the work item now includes the union of
+  /// [importSet] and the existing work item's import set.
+  void addEntityData(EntityData entityData, ImportSet importSet) {
+    var item = pendingWorkItems[entityData];
+    if (item == null) {
+      item = WorkItem(entityData, importSet);
+      pendingWorkItems[entityData] = item;
+      queue.add(item);
+    } else {
+      item.importsToAdd = _importSets.union(item.importsToAdd, importSet);
+    }
+  }
+
+  void addMember(MemberEntity member, ImportSet importSet) {
+    addEntityData(_registry.createMemberEntityData(member), importSet);
+  }
+
+  void addClass(ClassEntity cls, ImportSet importSet) {
+    addEntityData(_registry.createClassEntityData(cls), importSet);
+  }
+
+  /// Processes the next item in the queue.
+  void processNextItem(AlgorithmState state) {
+    var item = nextItem();
+    var entityData = item.entityData;
+    pendingWorkItems.remove(entityData);
+    ImportSet oldSet = state.entityToSet[entityData];
+    ImportSet newSet = _importSets.union(oldSet, item.importsToAdd);
+    state.update(entityData, oldSet, newSet);
+  }
+}
+
+/// Summary of the work that needs to be done on a class, member, or constant.
+class WorkItem {
+  final EntityData entityData;
+
+  /// Additional imports that use [element] or [value] and need to be added by
+  /// the algorithm.
+  ///
+  /// This is non-final in case we add more deferred imports to the set before
+  /// the work item is applied (see [WorkQueue.addElement] and
+  /// [WorkQueue.addConstant]).
+  ImportSet importsToAdd;
+
+  WorkItem(this.entityData, this.importsToAdd);
+}
diff --git a/pkg/compiler/lib/src/diagnostics/code_location.dart b/pkg/compiler/lib/src/diagnostics/code_location.dart
index 17b48f6..58bc177 100644
--- a/pkg/compiler/lib/src/diagnostics/code_location.dart
+++ b/pkg/compiler/lib/src/diagnostics/code_location.dart
@@ -22,12 +22,12 @@
       int slashPos = uri.path.indexOf('/');
       if (slashPos != -1) {
         String packageName = uri.path.substring(0, slashPos);
-        return new PackageLocation(packageName);
+        return PackageLocation(packageName);
       } else {
-        return new UriLocation(uri);
+        return UriLocation(uri);
       }
     } else {
-      return new SchemeLocation(uri);
+      return SchemeLocation(uri);
     }
   }
 }
diff --git a/pkg/compiler/lib/src/diagnostics/invariant.dart b/pkg/compiler/lib/src/diagnostics/invariant.dart
index 11b446c..04a7947 100644
--- a/pkg/compiler/lib/src/diagnostics/invariant.dart
+++ b/pkg/compiler/lib/src/diagnostics/invariant.dart
@@ -43,8 +43,8 @@
   // TODO(johnniwinther): Use [spannable] and [message] to provide better
   // information on assertion errors.
   if (spannable == null) {
-    throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE,
+    throw SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE,
         'Spannable was null for failedAt. Use CURRENT_ELEMENT_SPANNABLE.');
   }
-  throw new SpannableAssertionFailure(spannable, message);
+  throw SpannableAssertionFailure(spannable, message);
 }
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index ae4793a..ffffde6 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -137,7 +137,7 @@
   final List<String> options;
 
   const MessageTemplate(this.kind, this.template,
-      {this.howToFix, this.examples, this.options: const <String>[]});
+      {this.howToFix, this.examples, this.options = const <String>[]});
 
   /// All templates used by the compiler.
   ///
@@ -150,58 +150,55 @@
     ..addAll(const <MessageKind, MessageTemplate>{
       /// Do not use this. It is here for legacy and debugging. It violates item
       /// 4 of the guide lines for error messages in the beginning of the file.
-      MessageKind.GENERIC:
-          const MessageTemplate(MessageKind.GENERIC, '#{text}'),
+      MessageKind.GENERIC: MessageTemplate(MessageKind.GENERIC, '#{text}'),
 
-      MessageKind.CANNOT_RESOLVE: const MessageTemplate(
+      MessageKind.CANNOT_RESOLVE: MessageTemplate(
           MessageKind.CANNOT_RESOLVE, "Cannot resolve '#{name}'."),
 
-      MessageKind.NOT_A_COMPILE_TIME_CONSTANT: const MessageTemplate(
+      MessageKind.NOT_A_COMPILE_TIME_CONSTANT: MessageTemplate(
           MessageKind.NOT_A_COMPILE_TIME_CONSTANT,
           "Not a compile-time constant."),
 
-      MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS: const MessageTemplate(
+      MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS: MessageTemplate(
           MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS,
           "Cycle in the compile-time constant computation."),
 
-      MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER: const MessageTemplate(
+      MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER: MessageTemplate(
           MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
           "Cannot resolve setter."),
 
-      MessageKind.STRING_EXPECTED: const MessageTemplate(
-          MessageKind.STRING_EXPECTED,
+      MessageKind.STRING_EXPECTED: MessageTemplate(MessageKind.STRING_EXPECTED,
           "Expected a 'String', but got an instance of '#{type}'."),
 
-      MessageKind.JS_INTEROP_NON_EXTERNAL_MEMBER: const MessageTemplate(
+      MessageKind.JS_INTEROP_NON_EXTERNAL_MEMBER: MessageTemplate(
           MessageKind.JS_INTEROP_NON_EXTERNAL_MEMBER,
           "Js-interop members must be 'external'."),
 
-      MessageKind.IMPLICIT_JS_INTEROP_FIELD_NOT_SUPPORTED:
-          const MessageTemplate(
-              MessageKind.IMPLICIT_JS_INTEROP_FIELD_NOT_SUPPORTED,
-              "Fields in js-interop classes are not supported.",
-              howToFix: "Try replacing the field with an "
-                  "external getter and/or setter."),
-      MessageKind.JS_INTEROP_FIELD_NOT_SUPPORTED: const MessageTemplate(
+      MessageKind.IMPLICIT_JS_INTEROP_FIELD_NOT_SUPPORTED: MessageTemplate(
+          MessageKind.IMPLICIT_JS_INTEROP_FIELD_NOT_SUPPORTED,
+          "Fields in js-interop classes are not supported.",
+          howToFix: "Try replacing the field with an "
+              "external getter and/or setter."),
+      MessageKind.JS_INTEROP_FIELD_NOT_SUPPORTED: MessageTemplate(
           MessageKind.JS_INTEROP_FIELD_NOT_SUPPORTED,
           "Field can't be marked as js-interop.",
           howToFix: "Try replacing the field with an "
               "external getter and/or setter."),
 
-      MessageKind.LIBRARY_NOT_FOUND: const MessageTemplate(
+      MessageKind.LIBRARY_NOT_FOUND: MessageTemplate(
           MessageKind.LIBRARY_NOT_FOUND, "Library not found '#{resolvedUri}'."),
 
-      MessageKind.INVALID_PACKAGE_CONFIG: const MessageTemplate(
+      MessageKind.INVALID_PACKAGE_CONFIG: MessageTemplate(
           MessageKind.INVALID_PACKAGE_CONFIG,
           """Package config file '#{uri}' is invalid.
 #{exception}""",
           howToFix: DONT_KNOW_HOW_TO_FIX),
 
-      MessageKind.INVALID_PACKAGE_URI: const MessageTemplate(
+      MessageKind.INVALID_PACKAGE_URI: MessageTemplate(
           MessageKind.INVALID_PACKAGE_URI,
           "'#{uri}' is not a valid package URI (#{exception}).",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const [
+          examples: [
             """
 // can't have a 'top level' package URI
 import 'package:foo.dart';
@@ -222,37 +219,36 @@
 """
           ]),
 
-      MessageKind.JS_PLACEHOLDER_CAPTURE: const MessageTemplate(
+      MessageKind.JS_PLACEHOLDER_CAPTURE: MessageTemplate(
           MessageKind.JS_PLACEHOLDER_CAPTURE,
           "JS code must not use '#' placeholders inside functions.",
           howToFix:
               "Use an immediately called JavaScript function to capture the"
               " the placeholder values as JavaScript function parameters."),
 
-      MessageKind.WRONG_ARGUMENT_FOR_JS: const MessageTemplate(
+      MessageKind.WRONG_ARGUMENT_FOR_JS: MessageTemplate(
           MessageKind.WRONG_ARGUMENT_FOR_JS,
           "JS expression must take two or more arguments."),
 
-      MessageKind.WRONG_ARGUMENT_FOR_JS_FIRST: const MessageTemplate(
+      MessageKind.WRONG_ARGUMENT_FOR_JS_FIRST: MessageTemplate(
           MessageKind.WRONG_ARGUMENT_FOR_JS_FIRST,
           "JS expression must take two or more arguments."),
 
-      MessageKind.WRONG_ARGUMENT_FOR_JS_SECOND: const MessageTemplate(
+      MessageKind.WRONG_ARGUMENT_FOR_JS_SECOND: MessageTemplate(
           MessageKind.WRONG_ARGUMENT_FOR_JS_SECOND,
           "JS second argument must be a string literal."),
 
-      MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT:
-          const MessageTemplate(
-              MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT,
-              "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant."),
+      MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT: MessageTemplate(
+          MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT,
+          "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant."),
 
-      MessageKind.ABSTRACT_GETTER: const MessageTemplate(
+      MessageKind.ABSTRACT_GETTER: MessageTemplate(
           MessageKind.ABSTRACT_GETTER,
           "The getter '#{name}' has no implementation in "
           "class '#{class}'.",
           howToFix: "Try adding a body to '#{name}' or declaring "
               "'#{class}' to be 'abstract'.",
-          examples: const [
+          examples: [
             """
 class Class {
   get getter;
@@ -261,23 +257,23 @@
 """
           ]),
 
-      MessageKind.INVALID_METADATA: const MessageTemplate(
+      MessageKind.INVALID_METADATA: MessageTemplate(
           MessageKind.INVALID_METADATA,
           "A metadata annotation must be either a reference to a compile-time "
           "constant variable or a call to a constant constructor.",
           howToFix:
               "Try using a different constant value or referencing it through a "
               "constant variable.",
-          examples: const ['@Object main() {}', '@print main() {}']),
+          examples: ['@Object main() {}', '@print main() {}']),
 
-      MessageKind.INVALID_METADATA_GENERIC: const MessageTemplate(
+      MessageKind.INVALID_METADATA_GENERIC: MessageTemplate(
           MessageKind.INVALID_METADATA_GENERIC,
           "A metadata annotation using a constant constructor cannot use type "
           "arguments.",
           howToFix:
               "Try removing the type arguments or referencing the constant "
               "through a constant variable.",
-          examples: const [
+          examples: [
             '''
 class C<T> {
   const C();
@@ -286,35 +282,35 @@
 '''
           ]),
 
-      MessageKind.EQUAL_MAP_ENTRY_KEY: const MessageTemplate(
+      MessageKind.EQUAL_MAP_ENTRY_KEY: MessageTemplate(
           MessageKind.EQUAL_MAP_ENTRY_KEY,
           "An entry with the same key already exists in the map.",
           howToFix:
               "Try removing the previous entry or changing the key in one "
               "of the entries.",
-          examples: const [
+          examples: [
             """
 main() {
   var m = const {'foo': 1, 'foo': 2};
 }"""
           ]),
 
-      MessageKind.EQUAL_SET_ENTRY: const MessageTemplate(
+      MessageKind.EQUAL_SET_ENTRY: MessageTemplate(
           MessageKind.EQUAL_SET_ENTRY, "An entry appears twice in the set.",
           howToFix: "Try removing one of the entries.",
-          examples: const [
+          examples: [
             """
 main() {
   var m = const {'foo', 'bar', 'foo'};
 }"""
           ]),
 
-      MessageKind.COMPILER_CRASHED: const MessageTemplate(
+      MessageKind.COMPILER_CRASHED: MessageTemplate(
           MessageKind.COMPILER_CRASHED,
           "The compiler crashed when compiling this element."),
 
       MessageKind.PLEASE_REPORT_THE_CRASH:
-          const MessageTemplate(MessageKind.PLEASE_REPORT_THE_CRASH, '''
+          MessageTemplate(MessageKind.PLEASE_REPORT_THE_CRASH, '''
 The compiler is broken.
 
 When compiling the above element, the compiler crashed. It is not
@@ -334,167 +330,166 @@
   below as well as the source location above).
 '''),
 
-      MessageKind.HIDDEN_WARNINGS_HINTS: const MessageTemplate(
+      MessageKind.HIDDEN_WARNINGS_HINTS: MessageTemplate(
           MessageKind.HIDDEN_WARNINGS_HINTS,
           "#{warnings} warning(s) and #{hints} hint(s) suppressed in #{uri}."),
 
-      MessageKind.HIDDEN_WARNINGS: const MessageTemplate(
-          MessageKind.HIDDEN_WARNINGS,
+      MessageKind.HIDDEN_WARNINGS: MessageTemplate(MessageKind.HIDDEN_WARNINGS,
           "#{warnings} warning(s) suppressed in #{uri}."),
 
-      MessageKind.HIDDEN_HINTS: const MessageTemplate(
+      MessageKind.HIDDEN_HINTS: MessageTemplate(
           MessageKind.HIDDEN_HINTS, "#{hints} hint(s) suppressed in #{uri}."),
 
-      MessageKind.PREAMBLE: const MessageTemplate(
+      MessageKind.PREAMBLE: MessageTemplate(
           MessageKind.PREAMBLE,
           "When run on the command-line, the compiled output might"
           " require a preamble file located in:\n"
           "  <sdk>/lib/_internal/js_runtime/lib/preambles."),
 
-      MessageKind.INVALID_CONSTANT_CONDITIONAL_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_CONDITIONAL_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_CONDITIONAL_TYPE,
           "`#{constant}` of type '#{type}' is not a valid constant condition. "
           "Must be a value of type 'bool'."),
 
-      MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE,
           "`#{constant}` of type '#{type}' is not valid in constant string "
           "interpolation. Must be a value of type 'bool', 'int', 'double', "
           "or 'String'."),
 
-      MessageKind.INVALID_CONSTANT_BINARY_PRIMITIVE_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_BINARY_PRIMITIVE_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_BINARY_PRIMITIVE_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant binary #{operator} expression. Must be a value of type "
           "'bool', 'int', 'double', 'String', or 'Null'."),
 
-      MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant binary + expression on 'String'. Must be a value of type "
           "'String'."),
 
-      MessageKind.INVALID_CONSTANT_STRING_LENGTH_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_STRING_LENGTH_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_STRING_LENGTH_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand for a "
           ".length expression. Must be a value of type 'String'."),
 
-      MessageKind.INVALID_CONSTANT_SHIFT: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_SHIFT: MessageTemplate(
           MessageKind.INVALID_CONSTANT_SHIFT,
           "Shift amount must be non-negative in "
           "`#{left} #{operator} #{right}`."),
 
-      MessageKind.INVALID_CONSTANT_DIV: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_DIV: MessageTemplate(
           MessageKind.INVALID_CONSTANT_DIV,
           "Divisor must be non-zero in `#{left} #{operator} #{right}`."),
 
-      MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant binary + expression on 'num'. Must be a value of type "
           "'int' or 'double'."),
 
-      MessageKind.INVALID_CONSTANT_CAST: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_CAST: MessageTemplate(
           MessageKind.INVALID_CONSTANT_CAST,
           "`#{constant}` of type '#{type}' is not a subtype of #{castType}."),
 
-      MessageKind.INVALID_CONSTANT_ADD_TYPES: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_ADD_TYPES: MessageTemplate(
           MessageKind.INVALID_CONSTANT_ADD_TYPES,
           "`#{leftConstant}` of type '#{leftType}' and "
           "`#{rightConstant}` of type '#{rightType}' are not valid operands "
           "of a constant binary + expression. Must both be either of "
           "type 'String', or of types 'int' or 'double'."),
 
-      MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant binary #{operator} expression. Must be a value of type "
           "'int' or 'double'."),
 
-      MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant binary #{operator} expression. Must be a value of type "
           "'int'."),
 
-      MessageKind.INVALID_CONSTANT_NOT_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_NOT_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_NOT_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant unary #{operator} expression. Must be a value of type "
           "'bool'."),
 
-      MessageKind.INVALID_CONSTANT_NEGATE_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_NEGATE_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_NEGATE_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant unary #{operator} expression. Must be a value of type "
           "'int' or 'double'."),
 
-      MessageKind.INVALID_CONSTANT_COMPLEMENT_TYPE: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_COMPLEMENT_TYPE: MessageTemplate(
           MessageKind.INVALID_CONSTANT_COMPLEMENT_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
           "constant unary #{operator} expression. Must be a value of type "
           "'int'."),
 
-      MessageKind.INVALID_CONSTANT_INDEX: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_INDEX: MessageTemplate(
           MessageKind.INVALID_CONSTANT_INDEX,
           "Index expressions are not allowed in constant expressions."),
 
-      MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE: const MessageTemplate(
+      MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE: MessageTemplate(
           MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE,
           "`#{constant}` of type '#{type}' is not a valid environment name "
           "constant. Must be a value of type 'String'."),
 
       MessageKind.INVALID_BOOL_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE:
-          const MessageTemplate(
+          MessageTemplate(
               MessageKind.INVALID_BOOL_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE,
               "`#{constant}` of type '#{type}' is not a valid "
               "`bool.fromEnvironment` default value constant. "
               "Must be a value of type 'bool' or `null`."),
 
       MessageKind.INVALID_INT_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE:
-          const MessageTemplate(
+          MessageTemplate(
               MessageKind.INVALID_INT_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE,
               "`#{constant}` of type '#{type}' is not a valid "
               "`int.fromEnvironment` default value constant. "
               "Must be a value of type 'int' or `null`."),
 
       MessageKind.INVALID_STRING_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE:
-          const MessageTemplate(
+          MessageTemplate(
               MessageKind.INVALID_STRING_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE,
               "`#{constant}` of type '#{type}' is not a valid "
               "`String.fromEnvironment` default value constant. "
               "Must be a value of type 'String' or `null`."),
 
-      MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE: const MessageTemplate(
+      MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE: MessageTemplate(
           MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE,
           "`#{constant}` of type '#{type}' is not a valid logical and operand. "
           "Must be a value of type 'bool'."),
 
-      MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE: const MessageTemplate(
+      MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE: MessageTemplate(
           MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE,
           "`#{constant}` of type '#{type}' is not a valid logical or operand. "
           "Must be a value of type 'bool'."),
 
-      MessageKind.INVALID_CONSTANT_CONSTRUCTOR: const MessageTemplate(
+      MessageKind.INVALID_CONSTANT_CONSTRUCTOR: MessageTemplate(
           MessageKind.INVALID_CONSTANT_CONSTRUCTOR,
           "Constructor '#{constructorName}' is not a valid constant "
           "constructor."),
 
-      MessageKind.INVALID_ASSERT_VALUE: const MessageTemplate(
+      MessageKind.INVALID_ASSERT_VALUE: MessageTemplate(
           MessageKind.INVALID_ASSERT_VALUE, "Assertion '#{assertion}' failed."),
 
-      MessageKind.INVALID_ASSERT_VALUE_MESSAGE: const MessageTemplate(
+      MessageKind.INVALID_ASSERT_VALUE_MESSAGE: MessageTemplate(
           MessageKind.INVALID_ASSERT_VALUE_MESSAGE,
           "Assertion failed: #{message}"),
 
-      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE: const MessageTemplate(
-          MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE, """
+      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE:
+          MessageTemplate(MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_WITH_CFE, """
 dart2js no longer supports the dart:mirrors library.
 
 APIs from this library will throw a runtime error at this time, but they will
 become a compile-time error in the future."""),
 
-      MessageKind.DIRECTLY_THROWING_NSM: const MessageTemplate(
+      MessageKind.DIRECTLY_THROWING_NSM: MessageTemplate(
           MessageKind.DIRECTLY_THROWING_NSM,
           "This 'noSuchMethod' implementation is guaranteed to throw an "
           "exception. The generated code will be smaller if it is "
@@ -502,7 +497,7 @@
           howToFix: "Rewrite to "
               "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
 
-      MessageKind.COMPLEX_THROWING_NSM: const MessageTemplate(
+      MessageKind.COMPLEX_THROWING_NSM: MessageTemplate(
           MessageKind.COMPLEX_THROWING_NSM,
           "This 'noSuchMethod' implementation is guaranteed to throw an "
           "exception. The generated code will be smaller and the compiler "
@@ -510,13 +505,13 @@
           howToFix: "Rewrite to "
               "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
 
-      MessageKind.COMPLEX_RETURNING_NSM: const MessageTemplate(
+      MessageKind.COMPLEX_RETURNING_NSM: MessageTemplate(
           MessageKind.COMPLEX_RETURNING_NSM,
           "Overriding 'noSuchMethod' causes the compiler to generate "
           "more code and prevents the compiler from doing some optimizations.",
           howToFix: "Consider removing this 'noSuchMethod' implementation."),
 
-      MessageKind.RUNTIME_TYPE_TO_STRING: const MessageTemplate(
+      MessageKind.RUNTIME_TYPE_TO_STRING: MessageTemplate(
           MessageKind.RUNTIME_TYPE_TO_STRING,
           "Using '.runtimeType.toString()' causes the compiler to generate "
           "more code because it needs to preserve type arguments on "
@@ -525,28 +520,28 @@
               "${Flags.laxRuntimeTypeToString} to reduce the code size "
               "impact."),
 
-      MessageKind.NON_NATIVE_EXTERNAL: const MessageTemplate(
+      MessageKind.NON_NATIVE_EXTERNAL: MessageTemplate(
           MessageKind.NON_NATIVE_EXTERNAL,
           "Non-native external members must be js-interop.",
           howToFix:
               "Try removing the 'external' keyword, making it 'native', or "
               "annotating the function as a js-interop function."),
 
-      MessageKind.NATIVE_NON_INSTANCE_IN_NON_NATIVE_CLASS: const MessageTemplate(
+      MessageKind.NATIVE_NON_INSTANCE_IN_NON_NATIVE_CLASS: MessageTemplate(
           MessageKind.NATIVE_NON_INSTANCE_IN_NON_NATIVE_CLASS,
           "Native non-instance members are only allowed in native classes."),
 
       // TODO(32557): Remove these when issue 32557 is fixed.
-      MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS: const MessageTemplate(
+      MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS: MessageTemplate(
           MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
           "'case' expression type '#{type}' overrides 'operator =='."),
-      MessageKind.SWITCH_CASE_FORBIDDEN: const MessageTemplate(
+      MessageKind.SWITCH_CASE_FORBIDDEN: MessageTemplate(
           MessageKind.SWITCH_CASE_FORBIDDEN,
           "'case' expression may not be of type '#{type}'."),
-      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL: const MessageTemplate(
+      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL: MessageTemplate(
           MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL,
           "'case' expressions do not all have type '#{type}'."),
-      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE: const MessageTemplate(
+      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE: MessageTemplate(
           MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
           "'case' expression of type '#{type}'."),
     }); // End of TEMPLATES.
@@ -555,7 +550,7 @@
   String toString() => template;
 
   Message message(Map<String, String> arguments, CompilerOptions options) {
-    return new Message(this, arguments, options);
+    return Message(this, arguments, options);
   }
 
   bool get hasHowToFix => howToFix != null && howToFix != DONT_KNOW_HOW_TO_FIX;
@@ -584,8 +579,7 @@
         message = message.replaceAll('#{$key}', value);
       });
       assert(
-          kind == MessageKind.GENERIC ||
-              !message.contains(new RegExp(r'#\{.+\}')),
+          kind == MessageKind.GENERIC || !message.contains(RegExp(r'#\{.+\}')),
           failedAt(CURRENT_ELEMENT_SPANNABLE,
               'Missing arguments in error message: "$message"'));
       if (!terse && template.hasHowToFix) {
@@ -611,5 +605,5 @@
   }
 
   @override
-  int get hashCode => throw new UnsupportedError('Message.hashCode');
+  int get hashCode => throw UnsupportedError('Message.hashCode');
 }
diff --git a/pkg/compiler/lib/src/diagnostics/spannable.dart b/pkg/compiler/lib/src/diagnostics/spannable.dart
index 356e2e4..3bb9bf0 100644
--- a/pkg/compiler/lib/src/diagnostics/spannable.dart
+++ b/pkg/compiler/lib/src/diagnostics/spannable.dart
@@ -22,12 +22,12 @@
 /// current element. Note that the diagnostic reporting will fail if the current
 /// element is `null`.
 const Spannable CURRENT_ELEMENT_SPANNABLE =
-    const _SpannableSentinel("Current element");
+    _SpannableSentinel("Current element");
 
 /// Sentinel spannable used to mark that there might be no location for the
 /// diagnostic. Use this only when it is not an error not to have a current
 /// element.
-const Spannable NO_LOCATION_SPANNABLE = const _SpannableSentinel("No location");
+const Spannable NO_LOCATION_SPANNABLE = _SpannableSentinel("No location");
 
 class SpannableAssertionFailure {
   final Spannable node;
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index c6448fb..5b78296 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -19,7 +19,7 @@
 import 'common_elements.dart' show JElementEnvironment;
 import 'compiler.dart' show Compiler;
 import 'constants/values.dart' show ConstantValue, InterceptorConstantValue;
-import 'deferred_load/deferred_load.dart' show OutputUnit, deferredPartFileName;
+import 'deferred_load/output_unit.dart' show OutputUnit, deferredPartFileName;
 import 'elements/entities.dart';
 import 'inferrer/abstract_value_domain.dart';
 import 'inferrer/types.dart'
diff --git a/pkg/compiler/lib/src/helpers/debug_collection.dart b/pkg/compiler/lib/src/helpers/debug_collection.dart
index 1636e9e..de9a857e 100644
--- a/pkg/compiler/lib/src/helpers/debug_collection.dart
+++ b/pkg/compiler/lib/src/helpers/debug_collection.dart
@@ -2,7 +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.
 
-typedef void DebugCallback(String methodName, var arg1, var arg2);
+typedef DebugCallback = void Function(
+    String methodName, dynamic arg1, dynamic arg2);
 
 class DebugMap<K, V> implements Map<K, V> {
   final Map<K, V> sourceMap;
@@ -160,7 +161,7 @@
   bool any(bool test(E element)) => iterable.any(test);
 
   @override
-  List<E> toList({bool growable: true}) {
+  List<E> toList({bool growable = true}) {
     return iterable.toList(growable: growable);
   }
 
@@ -431,7 +432,7 @@
 /// at the call site by running test programs and adding to [runtimeTypes] when
 /// new type are found.
 void assertType(String name, List<String> runtimeTypes, var object,
-    {bool showObjects: false}) {
+    {bool showObjects = false}) {
   String runtimeType = '${object.runtimeType}';
   if (runtimeTypes != null && runtimeTypes.contains(runtimeType)) return;
   throw '$name: $runtimeType'
@@ -450,7 +451,7 @@
   final bool showObjects;
 
   const MapTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects: false});
+      {bool this.showObjects = false});
 
   void call(String methodName, var key, var value) {
     check(key, value, '$methodName: ');
@@ -478,7 +479,7 @@
   final bool showObjects;
 
   const CollectionTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects: false});
+      {bool this.showObjects = false});
 
   void call(String methodName, var element, _) {
     check(element, '$methodName: ');
diff --git a/pkg/compiler/lib/src/helpers/expensive_map.dart b/pkg/compiler/lib/src/helpers/expensive_map.dart
index 91098f5..3161d64 100644
--- a/pkg/compiler/lib/src/helpers/expensive_map.dart
+++ b/pkg/compiler/lib/src/helpers/expensive_map.dart
@@ -10,10 +10,10 @@
 class ExpensiveMap<K, V> extends MapBase<K, V> {
   final List _maps;
 
-  ExpensiveMap([int copies = 10]) : _maps = new List.filled(copies, null) {
+  ExpensiveMap([int copies = 10]) : _maps = List.filled(copies, null) {
     assert(copies > 0);
     for (int i = 0; i < _maps.length; i++) {
-      _maps[i] = new Map<K, V>();
+      _maps[i] = Map<K, V>();
     }
   }
 
diff --git a/pkg/compiler/lib/src/helpers/expensive_set.dart b/pkg/compiler/lib/src/helpers/expensive_set.dart
index cc41f8b..80163cd 100644
--- a/pkg/compiler/lib/src/helpers/expensive_set.dart
+++ b/pkg/compiler/lib/src/helpers/expensive_set.dart
@@ -10,10 +10,10 @@
 class ExpensiveSet<E> extends SetBase<E> {
   final List _sets;
 
-  ExpensiveSet([int copies = 10]) : _sets = new List.filled(copies, null) {
+  ExpensiveSet([int copies = 10]) : _sets = List.filled(copies, null) {
     assert(copies > 0);
     for (int i = 0; i < _sets.length; i++) {
-      _sets[i] = new Set<E>();
+      _sets[i] = Set<E>();
     }
   }
 
@@ -94,7 +94,7 @@
     return true;
   }
 
-  Set _newSet() => new ExpensiveSet(_sets.length);
+  Set _newSet() => ExpensiveSet(_sets.length);
 
   @override
   Set<E> intersection(Set<Object> other) {
@@ -113,7 +113,9 @@
 
   @override
   Set<E> union(Set<E> other) {
-    return _newSet()..addAll(this)..addAll(other);
+    return _newSet()
+      ..addAll(this)
+      ..addAll(other);
   }
 
   @override
@@ -138,7 +140,7 @@
 
   @override
   Set<E> toSet() {
-    var result = new ExpensiveSet<E>(_sets.length);
+    var result = ExpensiveSet<E>(_sets.length);
     for (int i = 0; i < _sets.length; i++) {
       result._sets[i] = _sets[i].toSet();
     }
diff --git a/pkg/compiler/lib/src/helpers/helpers.dart b/pkg/compiler/lib/src/helpers/helpers.dart
index 9828b7f..4661c1f 100644
--- a/pkg/compiler/lib/src/helpers/helpers.dart
+++ b/pkg/compiler/lib/src/helpers/helpers.dart
@@ -36,10 +36,10 @@
   final String indentationUnit = " ";
 }
 
-_DebugIndentation _indentation = new _DebugIndentation();
+_DebugIndentation _indentation = _DebugIndentation();
 
 /// Function signature of [debugPrint].
-typedef DebugPrint(s);
+typedef DebugPrint = Function(dynamic s);
 
 /// If [DEBUG_PRINT_ENABLED] is `true` print [s] using the current indentation.
 DebugPrint get debugPrint {
@@ -54,7 +54,7 @@
 }
 
 /// Function signature of [debugWrapPrint].
-typedef DebugWrapPrint(s, f());
+typedef DebugWrapPrint = Function(dynamic s, Function() f);
 
 /// Wraps the call to [f] with a print of 'start:$s' and 'end:$s' incrementing
 /// the current indentation used by [debugPrint] during the execution of [f].
@@ -79,7 +79,7 @@
 }
 
 /// Function signature of [reportHere].
-typedef ReportHere(
+typedef ReportHere = Function(
     DiagnosticReporter reporter, Spannable node, String debugMessage);
 
 /// Print a message with a source location.
@@ -96,7 +96,7 @@
 }
 
 /// Set of tracked objects used by [track] and [ifTracked].
-var _trackedObjects = new Set<Object>();
+var _trackedObjects = Set<Object>();
 
 /// Global default value for the `printTrace` option of [track] and [ifTracked].
 bool trackWithTrace = false;
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
index 7ca7960..3459d74 100644
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ b/pkg/compiler/lib/src/helpers/stats.dart
@@ -38,12 +38,12 @@
 /// extension of 'log'.
 void enableStatsOutput(
     {CompilerOutputProvider outputProvider,
-    bool xml: true,
-    String name: 'stats',
+    bool xml = true,
+    String name = 'stats',
     String extension,
-    int examples: 10}) {
+    int examples = 10}) {
   if (_stats != null) {
-    throw new StateError('Stats have already been initialized.');
+    throw StateError('Stats have already been initialized.');
   }
   enableDebugMode();
 
@@ -52,17 +52,17 @@
     if (extension == null) {
       extension = xml ? 'xml' : 'log';
     }
-    output = new SinkOutput(outputProvider(name, extension));
+    output = SinkOutput(outputProvider(name, extension));
   } else {
     output = const DebugOutput();
   }
   StatsPrinter printer;
   if (xml) {
-    printer = new XMLPrinter(output: output, examples: examples);
+    printer = XMLPrinter(output: output, examples: examples);
   } else {
-    printer = new ConsolePrinter(output: output, examples: examples);
+    printer = ConsolePrinter(output: output, examples: examples);
   }
-  _stats = new ActiveStats(printer);
+  _stats = ActiveStats(printer);
 }
 
 /// Interface for gathering and display of statistical information.
@@ -251,14 +251,12 @@
   void end(String id) {}
 
   /// Start a stat entry for [id] with additional [data].
-  void open(String id,
-      [Map<String, dynamic> data = const <String, dynamic>{}]) {}
+  void open(String id, [Map<String, dynamic> data = const {}]) {}
 
   /// Create a stat entry for [id] with additional [data] and content created by
   /// [createChildContent].
   void child(String id,
-      [Map<String, dynamic> data = const <String, dynamic>{},
-      void createChildContent()]) {
+      [Map<String, dynamic> data = const {}, void createChildContent()]) {
     open(id, data);
     if (createChildContent != null) createChildContent();
     close(id);
@@ -280,7 +278,7 @@
   final int examples;
   final StatsOutput output;
 
-  BasePrinter({this.output: const DebugOutput(), this.examples: 10}) {
+  BasePrinter({this.output = const DebugOutput(), this.examples = 10}) {
     indentationUnit = " ";
   }
 }
@@ -289,15 +287,14 @@
 class ConsolePrinter extends BasePrinter {
   int extraLevel = 0;
 
-  ConsolePrinter({StatsOutput output: const DebugOutput(), int examples: 10})
+  ConsolePrinter({StatsOutput output = const DebugOutput(), int examples = 10})
       : super(output: output, examples: examples);
 
   @override
-  void open(String id,
-      [Map<String, dynamic> data = const <String, dynamic>{}]) {
+  void open(String id, [Map<String, dynamic> data = const {}]) {
     if (extraLevel > 0) return;
 
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write(indentation);
     String space = '';
     if (data['title'] != null) {
@@ -343,10 +340,10 @@
 
 /// [StatsPrinter] that displays stats in XML format.
 class XMLPrinter extends BasePrinter {
-  static const HtmlEscape escape = const HtmlEscape();
+  static const HtmlEscape escape = HtmlEscape();
   bool opened = false;
 
-  XMLPrinter({output: const DebugOutput(), int examples: 10})
+  XMLPrinter({output = const DebugOutput(), int examples = 10})
       : super(output: output, examples: examples);
 
   @override
@@ -364,9 +361,8 @@
   }
 
   @override
-  void open(String id,
-      [Map<String, dynamic> data = const <String, dynamic>{}]) {
-    StringBuffer sb = new StringBuffer();
+  void open(String id, [Map<String, dynamic> data = const {}]) {
+    StringBuffer sb = StringBuffer();
     sb.write(indentation);
     sb.write('<$id');
     data.forEach((key, value) {
@@ -434,15 +430,15 @@
           subtrace.commonPrefix =
               subtrace.commonPrefix.sublist(commonPrefixLength);
           subtraces.remove(subtrace);
-          subtraces.add(new _StackTraceNode.node(
+          subtraces.add(_StackTraceNode.node(
               lines.sublist(0, commonPrefixLength),
               subtrace,
-              new _StackTraceNode.leaf(stackTrace)));
+              _StackTraceNode.leaf(stackTrace)));
         }
         return;
       }
     }
-    subtraces.add(new _StackTraceNode.leaf(stackTrace));
+    subtraces.add(_StackTraceNode.leaf(stackTrace));
   }
 
   void dumpTraces(StatsPrinter printer) {
@@ -497,7 +493,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     printOn(sb, '');
     return sb.toString();
   }
@@ -534,8 +530,7 @@
   Map<dynamic, Map> maps = {};
   Map<dynamic, Map<dynamic, List>> frequencyMaps = {};
   Map<dynamic, Map> setsMap = {};
-  Map<dynamic, Map<dynamic, List>> countersMap =
-      <dynamic, Map<dynamic, List>>{};
+  Map<dynamic, Map<dynamic, List>> countersMap = {};
   Map<dynamic, _StackTraceTree> traceMap = {};
   @override
   int stackTraceSampleFrequency = 1;
@@ -590,7 +585,7 @@
 
   @override
   void recordElement(key, element, {data}) {
-    setsMap.putIfAbsent(key, () => new Map())[element] = data;
+    setsMap.putIfAbsent(key, () => Map())[element] = data;
   }
 
   @override
@@ -599,7 +594,7 @@
       sampleFrequency = stackTraceSampleFrequency;
     }
     traceMap
-        .putIfAbsent(key, () => new _StackTraceTree(key, sampleFrequency))
+        .putIfAbsent(key, () => _StackTraceTree(key, sampleFrequency))
         .sample();
   }
 
@@ -734,7 +729,7 @@
   }
 
   void dumpIterable(String tag, String title, Iterable iterable,
-      {int limit, Map dataMap, bool includeCount: true}) {
+      {int limit, Map dataMap, bool includeCount = true}) {
     if (limit == 0) return;
 
     Map<String, dynamic> childData = {};
@@ -782,11 +777,11 @@
     {bool equals(V key1, V key2),
     int hashCode(V key),
     bool isValidKey(V potentialKey)}) {
-  Map<V, Set<K>> result = new LinkedHashMap<V, Set<K>>(
+  Map<V, Set<K>> result = LinkedHashMap<V, Set<K>>(
       equals: equals, hashCode: hashCode, isValidKey: isValidKey);
   map.forEach((k, v) {
     if (isValidKey == null || isValidKey(v)) {
-      result.putIfAbsent(v, () => new Set()).add(k);
+      result.putIfAbsent(v, () => Set()).add(k);
     }
   });
   return result;
@@ -812,7 +807,7 @@
 Map<K, V> sortMap<K, V>(Map<K, V> map, [int compare(K a, K b)]) {
   List<K> keys = map.keys.toList();
   keys.sort(compare);
-  Map<K, V> sortedMap = new Map<K, V>();
+  Map<K, V> sortedMap = {};
   keys.forEach((K k) => sortedMap[k] = map[k]);
   return sortedMap;
 }
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
index 51022cd..ff168df 100644
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ b/pkg/compiler/lib/src/helpers/trace.dart
@@ -6,8 +6,8 @@
 import '../util/util.dart';
 
 /// Function signature for [trace].
-typedef void Trace(String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint});
+typedef Trace = void Function(String message,
+    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
 
 /// Helper method for printing stack traces for debugging.
 ///
@@ -30,7 +30,7 @@
 }
 
 void _trace(String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint: false}) {
+    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
   try {
     throw '';
   } catch (e, s) {
@@ -57,9 +57,9 @@
 }
 
 /// Function signature of [traceAndReport].
-typedef void TraceAndReport(
+typedef TraceAndReport = void Function(
     DiagnosticReporter reporter, Spannable node, String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint});
+    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
 
 /// Calls [reportHere] and [trace] with the same message.
 TraceAndReport get traceAndReport {
@@ -73,7 +73,7 @@
 /// Implementation of [traceAndReport].
 void _traceAndReport(
     DiagnosticReporter reporter, Spannable node, String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint: false}) {
+    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
   trace(message, limit: limit, throwOnPrint: throwOnPrint,
       condition: (String stackTrace) {
     bool result = condition != null ? condition(stackTrace) : true;
@@ -89,13 +89,13 @@
 /// Use [offset] to discard the first [offset] calls of the call stack. Defaults
 /// to `1`, that is, discard the call to [stackTrace] itself. Use [limit] to
 /// limit the length of the stack trace lines.
-StackTraceLines stackTrace({int offset: 1, int limit: null}) {
+StackTraceLines stackTrace({int offset = 1, int limit = null}) {
   int rangeStart = offset;
   int rangeEnd = limit == null ? null : rangeStart + limit;
   try {
     throw '';
   } catch (_, stackTrace) {
-    return new StackTraceLines.fromTrace(stackTrace,
+    return StackTraceLines.fromTrace(stackTrace,
         rangeStart: offset,
         rangeEnd: rangeEnd,
         filePrefix: stackTraceFilePrefix);
@@ -110,15 +110,15 @@
   final int maxColumnNoLength;
 
   factory StackTraceLines.fromTrace(StackTrace s,
-      {int rangeStart, int rangeEnd, String filePrefix, String lambda: r'?'}) {
-    final RegExp indexPattern = new RegExp(r'#\d+\s*');
+      {int rangeStart, int rangeEnd, String filePrefix, String lambda = r'?'}) {
+    final RegExp indexPattern = RegExp(r'#\d+\s*');
     int index = -1;
     int maxFileLength = 0;
     int maxLineNoLength = 0;
     int maxColumnNoLength = 0;
 
     String stackTrace = '$s';
-    List<StackTraceLine> lines = <StackTraceLine>[];
+    List<StackTraceLine> lines = [];
     // Parse each line in the stack trace. The supported line formats from the
     // Dart VM are:
     //    #n     <method-name> (<uri>:<line-no>:<column-no>)
@@ -136,7 +136,7 @@
         // Strip index.
         line = line.replaceFirst(indexPattern, '');
         if (line == '<asynchronous suspension>') {
-          lines.add(new StackTraceLine(index, '', '', '', line));
+          lines.add(StackTraceLine(index, '', '', '', line));
           continue;
         }
 
@@ -198,12 +198,12 @@
         if (lambda != null) {
           method = method.replaceAll('<anonymous closure>', lambda);
         }
-        lines.add(new StackTraceLine(index, file, lineNo, columnNo, method));
+        lines.add(StackTraceLine(index, file, lineNo, columnNo, method));
       } catch (e) {
         throw 'Error prettifying "$line": $e';
       }
     }
-    return new StackTraceLines.fromLines(
+    return StackTraceLines.fromLines(
         lines, maxFileLength, maxLineNoLength, maxColumnNoLength);
   }
 
@@ -211,12 +211,12 @@
       this.maxLineNoLength, this.maxColumnNoLength);
 
   StackTraceLines subtrace(int offset) {
-    return new StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
+    return StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
         maxLineNoLength, maxColumnNoLength);
   }
 
-  String prettify({bool showColumnNo: false, bool showDots: true}) {
-    StringBuffer sb = new StringBuffer();
+  String prettify({bool showColumnNo = false, bool showDots = true}) {
+    StringBuffer sb = StringBuffer();
     bool dots = true;
     for (StackTraceLine line in lines) {
       sb.write('  ');
@@ -250,11 +250,11 @@
       this.index, this.file, this.lineNo, this.columnNo, this.method);
 
   void printOn(StringBuffer sb,
-      {String padding: ' ',
+      {String padding = ' ',
       int fileLength,
       int lineNoLength,
       int columnNoLength,
-      bool showColumnNo: false}) {
+      bool showColumnNo = false}) {
     String fileText = '${file} ';
     if (fileLength != null) {
       fileText = pad(fileText, fileLength, dots: padding);
@@ -312,11 +312,11 @@
 String prettifyStackTrace(StackTrace stackTrace,
     {int rangeStart,
     int rangeEnd,
-    bool showColumnNo: false,
-    bool showDots: true,
+    bool showColumnNo = false,
+    bool showDots = true,
     String filePrefix,
-    String lambda: r'?'}) {
-  return new StackTraceLines.fromTrace(stackTrace,
+    String lambda = r'?'}) {
+  return StackTraceLines.fromTrace(stackTrace,
           rangeStart: rangeStart,
           rangeEnd: rangeEnd,
           filePrefix: filePrefix,
@@ -329,12 +329,12 @@
 /// If [padLeft] is [:true:] the text is padding inserted to the left of [text].
 /// A repetition of the [dots] text is used for padding.
 String pad(String text, int intendedLength,
-    {bool padLeft: false, String dots: ' '}) {
+    {bool padLeft = false, String dots = ' '}) {
   if (text.length == intendedLength) return text;
   if (text.length > intendedLength) return text.substring(0, intendedLength);
   if (dots == null || dots.isEmpty) dots = ' ';
   int dotsLength = dots.length;
-  StringBuffer sb = new StringBuffer();
+  StringBuffer sb = StringBuffer();
   if (!padLeft) {
     sb.write(text);
   }
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
index 23d3ce4..957d55c 100644
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ b/pkg/compiler/lib/src/helpers/track_map.dart
@@ -12,15 +12,15 @@
 /// After finishing the compilaton, the histogram of track map sizes
 /// is printed but only when running in verbose mode.
 class TrackMap<K, V> implements Map<K, V> {
-  final Map<K, V> _map;
+  final Map<K, V> _map = {};
   final List _counts;
   static final Map<String, List<int>> _countsMap = {};
 
-  TrackMap._internal(this._counts) : _map = new Map<K, V>();
+  TrackMap._internal(this._counts);
 
   factory TrackMap(String description) {
     List counts = _countsMap.putIfAbsent(description, () => [0]);
-    Map result = new TrackMap<K, V>._internal(counts);
+    Map result = TrackMap<K, V>._internal(counts);
     counts[0]++;
     return result;
   }
diff --git a/pkg/compiler/lib/src/io/code_output.dart b/pkg/compiler/lib/src/io/code_output.dart
index 70ad22c..43e9fcc 100644
--- a/pkg/compiler/lib/src/io/code_output.dart
+++ b/pkg/compiler/lib/src/io/code_output.dart
@@ -53,9 +53,9 @@
   @override
   final String name;
   final AbstractCodeOutput codeOutput;
-  Map<int, List<SourceLocation>> markers = <int, List<SourceLocation>>{};
+  Map<int, List<SourceLocation>> markers = {};
   @override
-  Map<int, List<FrameEntry>> frameMarkers = <int, List<FrameEntry>>{};
+  Map<int, List<FrameEntry>> frameMarkers = {};
 
   _SourceLocationsImpl(this.name, this.codeOutput);
 
@@ -63,7 +63,7 @@
   void addSourceLocation(int targetOffset, SourceLocation sourceLocation) {
     assert(targetOffset <= codeOutput.length);
     List<SourceLocation> sourceLocations =
-        markers.putIfAbsent(targetOffset, () => <SourceLocation>[]);
+        markers.putIfAbsent(targetOffset, () => []);
     sourceLocations.add(sourceLocation);
   }
 
@@ -72,14 +72,14 @@
       String inlinedMethodName) {
     assert(targetOffset <= codeOutput.length);
     List<FrameEntry> frames = frameMarkers[targetOffset] ??= [];
-    frames.add(new FrameEntry.push(sourceLocation, inlinedMethodName));
+    frames.add(FrameEntry.push(sourceLocation, inlinedMethodName));
   }
 
   @override
   void addPop(int targetOffset, bool isEmpty) {
     assert(targetOffset <= codeOutput.length);
     List<FrameEntry> frames = frameMarkers[targetOffset] ??= [];
-    frames.add(new FrameEntry.pop(isEmpty));
+    frames.add(FrameEntry.pop(isEmpty));
   }
 
   @override
@@ -98,14 +98,13 @@
     if (other.markers.length > 0) {
       other.markers
           .forEach((int targetOffset, List<SourceLocation> sourceLocations) {
-        (markers[length + targetOffset] ??= <SourceLocation>[])
-            .addAll(sourceLocations);
+        (markers[length + targetOffset] ??= []).addAll(sourceLocations);
       });
     }
 
     if (other.frameMarkers.length > 0) {
       other.frameMarkers.forEach((int targetOffset, List<FrameEntry> frames) {
-        (frameMarkers[length + targetOffset] ??= <FrameEntry>[]).addAll(frames);
+        (frameMarkers[length + targetOffset] ??= []).addAll(frames);
       });
     }
   }
@@ -162,7 +161,7 @@
   @override
   void add(String text) {
     if (isClosed) {
-      throw new StateError("Code output is closed. Trying to write '$text'.");
+      throw StateError("Code output is closed. Trying to write '$text'.");
     }
     _add(text);
   }
@@ -181,7 +180,7 @@
   @override
   void close() {
     if (isClosed) {
-      throw new StateError("Code output is already closed.");
+      throw StateError("Code output is already closed.");
     }
     isClosed = true;
     _listeners?.forEach((listener) => listener.onDone(length));
@@ -192,7 +191,7 @@
 
   @override
   _SourceLocationsImpl createSourceLocations(String name) {
-    return sourceLocationsMap[name] ??= new _SourceLocationsImpl(name, this);
+    return sourceLocationsMap[name] ??= _SourceLocationsImpl(name, this);
   }
 }
 
@@ -202,7 +201,7 @@
 
 /// [CodeOutput] using a [StringBuffer] as backend.
 class CodeBuffer extends AbstractCodeOutput implements BufferedCodeOutput {
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
 
   CodeBuffer([List<CodeOutputListener> listeners]) : super(listeners);
 
diff --git a/pkg/compiler/lib/src/io/kernel_source_information.dart b/pkg/compiler/lib/src/io/kernel_source_information.dart
index 6600d21..2993f94 100644
--- a/pkg/compiler/lib/src/io/kernel_source_information.dart
+++ b/pkg/compiler/lib/src/io/kernel_source_information.dart
@@ -23,7 +23,7 @@
 
   @override
   SourceInformationBuilder createBuilderForContext(MemberEntity member) {
-    return new KernelSourceInformationBuilder(
+    return KernelSourceInformationBuilder(
         _backendStrategy
             // ignore:deprecated_member_use_from_same_package
             .elementMap,
@@ -142,7 +142,7 @@
     }
     assert(
         location != null, "No location found for $node (${node.runtimeType})");
-    return new KernelSourceLocation(location, offset, name);
+    return KernelSourceLocation(location, offset, name);
   }
 
   /// Creates the source information for a function definition defined by the
@@ -152,7 +152,7 @@
   SourceInformation _buildFunction(
       String name, ir.TreeNode node, ir.FunctionNode functionNode) {
     if (functionNode.fileEndOffset != ir.TreeNode.noOffset) {
-      return new PositionSourceInformation(
+      return PositionSourceInformation(
           _getSourceLocation(name, node),
           _getSourceLocation(name, functionNode, functionNode.fileEndOffset),
           this.inliningContext);
@@ -195,7 +195,7 @@
   SourceInformation _buildFunctionExit(
       ir.TreeNode node, ir.FunctionNode functionNode) {
     if (functionNode.fileEndOffset != ir.TreeNode.noOffset) {
-      return new PositionSourceInformation(
+      return PositionSourceInformation(
           _getSourceLocation(_name, functionNode, functionNode.fileEndOffset),
           null,
           this.inliningContext);
@@ -218,7 +218,7 @@
     } else {
       location = _getSourceLocation(_name, node);
     }
-    return new PositionSourceInformation(location, null, inliningContext);
+    return PositionSourceInformation(location, null, inliningContext);
   }
 
   /// Creates source information for the body of the current member.
@@ -283,10 +283,8 @@
   /// Creates source information based on the location of [node].
   SourceInformation _buildTreeNode(ir.TreeNode node,
       {SourceLocation closingPosition, String name}) {
-    return new PositionSourceInformation(
-        _getSourceLocation(name ?? _name, node),
-        closingPosition,
-        inliningContext);
+    return PositionSourceInformation(_getSourceLocation(name ?? _name, node),
+        closingPosition, inliningContext);
   }
 
   @override
@@ -294,7 +292,7 @@
       MemberEntity member, SourceInformation context) {
     List<FrameContext> newContext = inliningContext?.toList() ?? [];
     if (context != null) {
-      newContext.add(new FrameContext(context, member.name));
+      newContext.add(FrameContext(context, member.name));
     } else {
       // TODO(sigmund): investigate whether we have any more cases where context
       // is null.
@@ -302,7 +300,7 @@
     }
 
     String name = computeKernelElementNameForSourceMaps(_elementMap, _member);
-    return new KernelSourceInformationBuilder.withContext(
+    return KernelSourceInformationBuilder.withContext(
         _elementMap, member, newContext, name);
   }
 
@@ -429,7 +427,7 @@
   @override
   SourceInformation buildCall(
       covariant ir.TreeNode receiver, covariant ir.TreeNode call) {
-    return new PositionSourceInformation(_getSourceLocation(_name, receiver),
+    return PositionSourceInformation(_getSourceLocation(_name, receiver),
         _getSourceLocation(_name, call), inliningContext);
   }
 
diff --git a/pkg/compiler/lib/src/io/location_provider.dart b/pkg/compiler/lib/src/io/location_provider.dart
index 4f36c5e..b980ee7 100644
--- a/pkg/compiler/lib/src/io/location_provider.dart
+++ b/pkg/compiler/lib/src/io/location_provider.dart
@@ -18,7 +18,7 @@
 /// [CodeOutputListener] that collects line information.
 class LocationCollector extends CodeOutputListener implements LocationProvider {
   int length = 0;
-  List<int> lineStarts = <int>[0];
+  List<int> lineStarts = [0];
 
   void _collect(String text) {
     int index = 0;
@@ -40,7 +40,7 @@
   @override
   Location getLocation(int offset) {
     RangeError.checkValueInInterval(offset, 0, length, 'offset');
-    return new Source(lineStarts, const <int>[], null, null)
+    return Source(lineStarts, const <int>[], null, null)
         .getLocation(null, offset);
   }
 
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index cb895de..3bcfbef 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -43,7 +43,7 @@
         () => FrameContext.readFromDataSource(source),
         emptyAsNull: true);
     source.end(tag);
-    return new PositionSourceInformation(
+    return PositionSourceInformation(
         startPosition, innerPosition, inliningContext);
   }
 
@@ -65,7 +65,7 @@
 
   @override
   List<SourceLocation> get sourceLocations {
-    List<SourceLocation> list = <SourceLocation>[];
+    List<SourceLocation> list = [];
     if (startPosition != null) {
       list.add(startPosition);
     }
@@ -81,7 +81,7 @@
         startPosition != null ? startPosition : innerPosition;
     Uri uri = location.sourceUri;
     int offset = location.offset;
-    return new SourceSpan(uri, offset, offset);
+    return SourceSpan(uri, offset, offset);
   }
 
   @override
@@ -102,7 +102,7 @@
   /// Create a textual representation of the source information using [uriText]
   /// as the Uri representation.
   String _computeText(String uriText) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('$uriText:');
     // Use 1-based line/column info to match usual dart tool output.
     if (startPosition != null) {
@@ -142,7 +142,7 @@
   @override
   SourceInformationProcessor createProcessor(
       SourceMapperProvider provider, SourceInformationReader reader) {
-    return new PositionSourceInformationProcessor(provider, reader);
+    return PositionSourceInformationProcessor(provider, reader);
   }
 
   @override
@@ -166,10 +166,10 @@
   String get shortText => '';
 
   @override
-  List<SourceLocation> get sourceLocations => const <SourceLocation>[];
+  List<SourceLocation> get sourceLocations => const [];
 
   @override
-  SourceSpan get sourceSpan => new SourceSpan(null, null, null);
+  SourceSpan get sourceSpan => SourceSpan(null, null, null);
 }
 
 /// The start, end and closing offsets for a [js.Node].
@@ -207,12 +207,12 @@
 /// Registry for mapping [js.Node]s to their [CodePosition].
 class CodePositionRecorder implements CodePositionMap {
   Map<js.Node, CodePosition> _codePositionMap =
-      new Map<js.Node, CodePosition>.identity();
+      Map<js.Node, CodePosition>.identity();
 
   void registerPositions(
       js.Node node, int startPosition, int endPosition, int closingPosition) {
     registerCodePosition(
-        node, new CodePosition(startPosition, endPosition, closingPosition));
+        node, CodePosition(startPosition, endPosition, closingPosition));
   }
 
   void registerCodePosition(js.Node node, CodePosition codePosition) {
@@ -316,7 +316,7 @@
   ///   v2: The initial version with an id.
   static const String id = 'v2';
 
-  final CodePositionRecorder codePositionRecorder = new CodePositionRecorder();
+  final CodePositionRecorder codePositionRecorder = CodePositionRecorder();
   final SourceInformationReader reader;
   CodePositionMap codePositionMap;
   List<TraceListener> traceListeners;
@@ -325,21 +325,21 @@
   PositionSourceInformationProcessor(SourceMapperProvider provider, this.reader,
       [Coverage coverage]) {
     codePositionMap = coverage != null
-        ? new CodePositionCoverage(codePositionRecorder, coverage)
+        ? CodePositionCoverage(codePositionRecorder, coverage)
         : codePositionRecorder;
     var sourceMapper = provider.createSourceMapper(id);
     traceListeners = [
-      new PositionTraceListener(sourceMapper, reader),
-      inliningListener = new InliningTraceListener(sourceMapper, reader),
+      PositionTraceListener(sourceMapper, reader),
+      inliningListener = InliningTraceListener(sourceMapper, reader),
     ];
     if (coverage != null) {
-      traceListeners.add(new CoverageListener(coverage, reader));
+      traceListeners.add(CoverageListener(coverage, reader));
     }
   }
 
   @override
   void process(js.Node node, BufferedCodeOutput code) {
-    new JavaScriptTracer(codePositionMap, reader, traceListeners).apply(node);
+    JavaScriptTracer(codePositionMap, reader, traceListeners).apply(node);
     inliningListener?.finish();
   }
 
@@ -414,7 +414,7 @@
   SourceInformationReader get reader;
 
   SourceInformation computeSourceInformation(js.Node node) {
-    return new NodeSourceInformation(reader).visit(node);
+    return NodeSourceInformation(reader).visit(node);
   }
 }
 
@@ -699,18 +699,18 @@
       if (pureAccess) {
         // a.m()   this.m()  a.b.c.d.m()
         // ^       ^         ^
-        return new CallPosition(
+        return CallPosition(
             node, CodePositionKind.START, SourcePositionKind.START);
       } else {
         // *.m()  *.a.b.c.d.m()
         //   ^              ^
-        return new CallPosition(
+        return CallPosition(
             access.selector, CodePositionKind.START, SourcePositionKind.INNER);
       }
     } else if (access is js.VariableUse || access is js.This) {
       // m()   this()
       // ^     ^
-      return new CallPosition(
+      return CallPosition(
           node, CodePositionKind.START, SourcePositionKind.START);
     } else if (access is js.FunctionExpression ||
         access is js.New ||
@@ -725,12 +725,12 @@
       //               ^                         ^                      ^
       // (()=>{})()
       //         ^
-      return new CallPosition(
+      return CallPosition(
           node.target, CodePositionKind.END, SourcePositionKind.INNER);
     } else if (access is js.Binary || access is js.Call) {
       // (0,a)()   m()()
       //      ^       ^
-      return new CallPosition(
+      return CallPosition(
           node.target, CodePositionKind.END, SourcePositionKind.INNER);
     } else {
       // TODO(johnniwinther): Maybe remove this assertion.
@@ -741,7 +741,7 @@
               "Unexpected property access ${nodeToString(node)}:\n"
               "${DebugPrinter.prettyPrint(node)}"));
       // Don't know....
-      return new CallPosition(
+      return CallPosition(
           node, CodePositionKind.START, SourcePositionKind.START);
     }
   }
@@ -885,7 +885,7 @@
   bool active;
 
   JavaScriptTracer(this.codePositions, this.reader, this.listeners,
-      {this.active: false});
+      {this.active = false});
 
   void notifyStart(js.Node node) {
     listeners.forEach((listener) => listener.onStart(node));
@@ -908,7 +908,7 @@
   }
 
   void notifyStep(js.Node node, Offset offset, StepKind kind,
-      {bool force: false}) {
+      {bool force = false}) {
     if (active || force) {
       listeners.forEach((listener) => listener.onStep(node, offset, kind));
     }
@@ -992,7 +992,7 @@
   }
 
   int getSyntaxOffset(js.Node node,
-      {CodePositionKind kind: CodePositionKind.START}) {
+      {CodePositionKind kind = CodePositionKind.START}) {
     CodePosition codePosition = codePositions[node];
     if (codePosition != null) {
       return codePosition.getPosition(kind);
@@ -1334,17 +1334,17 @@
     if (leftToRightOffset == null) {
       leftToRightOffset = statementOffset;
     }
-    return new Offset(statementOffset, leftToRightOffset, codeOffset);
+    return Offset(statementOffset, leftToRightOffset, codeOffset);
   }
 }
 
 class Coverage {
-  Set<js.Node> _nodesWithInfo = new Set<js.Node>();
+  Set<js.Node> _nodesWithInfo = {};
   int _nodesWithInfoCount = 0;
-  Set<js.Node> _nodesWithoutInfo = new Set<js.Node>();
+  Set<js.Node> _nodesWithoutInfo = {};
   int _nodesWithoutInfoCount = 0;
-  Map<Type, int> _nodesWithoutInfoCountByType = <Type, int>{};
-  Set<js.Node> _nodesWithoutOffset = new Set<js.Node>();
+  Map<Type, int> _nodesWithoutInfoCountByType = {};
+  Set<js.Node> _nodesWithoutOffset = {};
   int _nodesWithoutOffsetCount = 0;
 
   void registerNodeWithInfo(js.Node node) {
@@ -1381,7 +1381,7 @@
 
   String getCoverageReport() {
     collapse();
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     int total = _nodesWithInfoCount + _nodesWithoutInfoCount;
     if (total > 0) {
       sb.write(_nodesWithInfoCount);
diff --git a/pkg/compiler/lib/src/io/source_file.dart b/pkg/compiler/lib/src/io/source_file.dart
index f091dee..49b27d8 100644
--- a/pkg/compiler/lib/src/io/source_file.dart
+++ b/pkg/compiler/lib/src/io/source_file.dart
@@ -28,7 +28,7 @@
   kernel.Source get kernelSource {
     // TODO(johnniwinther): Instead of creating a new Source object,
     // we should use the one provided by the front-end.
-    return cachedKernelSource ??= new kernel.Source(
+    return cachedKernelSource ??= kernel.Source(
         lineStarts,
         slowUtf8ZeroTerminatedBytes(),
         uri /* TODO(jensj): What is the import URI? */,
@@ -107,7 +107,7 @@
   /// Use [colorize] to wrap source code text and marker characters in color
   /// escape codes.
   String getLocationMessage(String message, int start, int end,
-      {bool includeSourceLine: true, String colorize(String text)}) {
+      {bool includeSourceLine = true, String colorize(String text)}) {
     if (colorize == null) {
       colorize = (text) => text;
     }
@@ -119,7 +119,7 @@
     int lineEnd = endLocation.line - 1;
     int columnEnd = endLocation.column - 1;
 
-    StringBuffer buf = new StringBuffer('${filename}:');
+    StringBuffer buf = StringBuffer('${filename}:');
     if (start != end || start != 0) {
       // Line/column info is relevant.
       buf.write('${lineStart + 1}:${columnStart + 1}:');
@@ -173,7 +173,7 @@
 
 List<int> _zeroTerminateIfNecessary(List<int> bytes) {
   if (bytes.length > 0 && bytes.last == 0) return bytes;
-  List<int> result = new Uint8List(bytes.length + 1);
+  List<int> result = Uint8List(bytes.length + 1);
   result.setRange(0, bytes.length, bytes);
   result[result.length - 1] = 0;
   return result;
@@ -266,7 +266,7 @@
       : this(uri, uri.toString(), text);
 
   StringSourceFile.fromName(String filename, String text)
-      : this(new Uri(path: filename), filename, text);
+      : this(Uri(path: filename), filename, text);
 
   @override
   List<int> get data => utf8.encode(text);
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index 0034fb5..d31486b 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -88,7 +88,7 @@
         () => SourceInformation.readFromDataSource(source));
     String inlinedMethodName = source.readString();
     source.end(tag);
-    return new FrameContext(callInformation, inlinedMethodName);
+    return FrameContext(callInformation, inlinedMethodName);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -112,7 +112,7 @@
   /// Create a [SourceInformationBuilder] for [member].
   SourceInformationBuilder createBuilderForContext(
       covariant MemberEntity member) {
-    return new SourceInformationBuilder();
+    return SourceInformationBuilder();
   }
 
   /// Generate [SourceInformation] marker for non-preamble code.
@@ -288,8 +288,7 @@
       int column = source.readInt();
       String sourceName = source.readString();
       source.end(tag);
-      return new DirectSourceLocation(
-          sourceUri, offset, line, column, sourceName);
+      return DirectSourceLocation(sourceUri, offset, line, column, sourceName);
     }
   }
 
@@ -361,7 +360,7 @@
     assert(
         offset < _sourceFile.length,
         failedAt(
-            new SourceSpan(sourceUri, 0, 0),
+            SourceSpan(sourceUri, 0, 0),
             "Invalid source location in ${sourceUri}: "
             "offset=$offset, length=${_sourceFile.length}."));
   }
@@ -442,7 +441,7 @@
 /// Compute the suffix used for a parameter stub for [callStructure].
 String computeStubSuffix(CallStructure callStructure) {
   if (callStructure == null) return '';
-  StringBuffer sb = new StringBuffer();
+  StringBuffer sb = StringBuffer();
   sb.write(r'[function-entry$');
   sb.write(callStructure.positionalArgumentCount);
   if (callStructure.namedArguments.isNotEmpty) {
diff --git a/pkg/compiler/lib/src/io/source_map_builder.dart b/pkg/compiler/lib/src/io/source_map_builder.dart
index a630dd5..ff0238a 100644
--- a/pkg/compiler/lib/src/io/source_map_builder.dart
+++ b/pkg/compiler/lib/src/io/source_map_builder.dart
@@ -22,7 +22,7 @@
   final Uri targetFileUri;
 
   final LocationProvider locationProvider;
-  final List<SourceMapEntry> entries = <SourceMapEntry>[];
+  final List<SourceMapEntry> entries = [];
 
   /// Extension used to deobfuscate minified names in error messages.
   final Map<String, String> minifiedGlobalNames;
@@ -41,7 +41,7 @@
       this.frames);
 
   void addMapping(int targetOffset, SourceLocation sourceLocation) {
-    entries.add(new SourceMapEntry(sourceLocation, targetOffset));
+    entries.add(SourceMapEntry(sourceLocation, targetOffset));
   }
 
   void printStringListOn(Iterable<String> strings, StringBuffer buffer) {
@@ -58,10 +58,8 @@
   }
 
   String build() {
-    LineColumnMap<SourceMapEntry> lineColumnMap =
-        new LineColumnMap<SourceMapEntry>();
-    Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap =
-        <Uri, LineColumnMap<SourceMapEntry>>{};
+    LineColumnMap<SourceMapEntry> lineColumnMap = LineColumnMap();
+    Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap = {};
     entries.forEach((SourceMapEntry sourceMapEntry) {
       Location kernelLocation =
           locationProvider.getLocation(sourceMapEntry.targetOffset);
@@ -73,8 +71,8 @@
       if (location != null) {
         if (location.sourceUri != null) {
           LineColumnMap<SourceMapEntry> sourceLineColumnMap =
-              sourceLocationMap.putIfAbsent(location.sourceUri,
-                  () => new LineColumnMap<SourceMapEntry>());
+              sourceLocationMap.putIfAbsent(
+                  location.sourceUri, () => LineColumnMap<SourceMapEntry>());
           sourceLineColumnMap.add(
               location.line - 1, location.column - 1, sourceMapEntry);
         }
@@ -85,8 +83,8 @@
   }
 
   String _build(LineColumnMap<SourceMapEntry> lineColumnMap) {
-    IndexMap<Uri> uriMap = new IndexMap<Uri>();
-    IndexMap<String> nameMap = new IndexMap<String>();
+    IndexMap<Uri> uriMap = IndexMap<Uri>();
+    IndexMap<String> nameMap = IndexMap<String>();
 
     void registerLocation(SourceLocation sourceLocation) {
       if (sourceLocation != null) {
@@ -114,10 +112,10 @@
       }
     }
 
-    StringBuffer mappingsBuffer = new StringBuffer();
+    StringBuffer mappingsBuffer = StringBuffer();
     writeEntries(lineColumnMap, uriMap, nameMap, mappingsBuffer);
 
-    StringBuffer buffer = new StringBuffer();
+    StringBuffer buffer = StringBuffer();
     buffer.write('{\n');
     buffer.write('  "version": 3,\n');
     buffer.write('  "engine": "$version",\n');
@@ -158,12 +156,12 @@
       IndexMap<String> nameMap, StringBuffer output) {
     SourceLocation previousSourceLocation;
     int previousTargetLine = 0;
-    DeltaEncoder targetColumnEncoder = new DeltaEncoder();
+    DeltaEncoder targetColumnEncoder = DeltaEncoder();
     bool firstEntryInLine = true;
-    DeltaEncoder sourceUriIndexEncoder = new DeltaEncoder();
-    DeltaEncoder sourceLineEncoder = new DeltaEncoder();
-    DeltaEncoder sourceColumnEncoder = new DeltaEncoder();
-    DeltaEncoder sourceNameIndexEncoder = new DeltaEncoder();
+    DeltaEncoder sourceUriIndexEncoder = DeltaEncoder();
+    DeltaEncoder sourceLineEncoder = DeltaEncoder();
+    DeltaEncoder sourceColumnEncoder = DeltaEncoder();
+    DeltaEncoder sourceNameIndexEncoder = DeltaEncoder();
 
     entries.forEach((int targetLine, int targetColumn, SourceMapEntry entry) {
       SourceLocation sourceLocation = entry.sourceLocation;
@@ -283,7 +281,7 @@
     int index = 0;
     sourceLocationsProvider.sourceLocations
         .forEach((SourceLocations sourceLocations) {
-      SourceMapBuilder sourceMapBuilder = new SourceMapBuilder(
+      SourceMapBuilder sourceMapBuilder = SourceMapBuilder(
           sourceLocations.name,
           sourceMapUri,
           fileUri,
@@ -364,12 +362,12 @@
 
 /// Map from line/column pairs to lists of [T] elements.
 class LineColumnMap<T> {
-  Map<int, Map<int, List<T>>> _map = <int, Map<int, List<T>>>{};
+  Map<int, Map<int, List<T>>> _map = {};
 
   /// Returns the list of elements associated with ([line],[column]).
   List<T> _getList(int line, int column) {
-    Map<int, List<T>> lineMap = _map[line] ??= <int, List<T>>{};
-    return lineMap[column] ??= <T>[];
+    Map<int, List<T>> lineMap = _map[line] ??= {};
+    return lineMap[column] ??= [];
   }
 
   /// Adds [element] to the end of the list of elements associated with
@@ -438,7 +436,7 @@
 
 /// Map from [T] elements to assigned indices.
 class IndexMap<T> {
-  Map<T, int> map = <T, int>{};
+  Map<T, int> map = {};
 
   /// Register [element] and returns its index.
   int register(T element) {
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index 4a936f6..50cc0a6 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -100,12 +100,7 @@
   ErrorReporter(this._reportError);
 
   @override
-  void reportInvalidExpression(ir.InvalidExpression node) {
-    // Ignore.
-  }
-
-  @override
-  void report(ir.LocatedMessage message, List<ir.LocatedMessage> context) {
+  void report(ir.LocatedMessage message, [List<ir.LocatedMessage> context]) {
     if (requiresConstant) {
       _reportError(message, context);
     }
diff --git a/pkg/compiler/lib/src/js/js.dart b/pkg/compiler/lib/src/js/js.dart
index 9c8328e..1b1ac8e 100644
--- a/pkg/compiler/lib/src/js/js.dart
+++ b/pkg/compiler/lib/src/js/js.dart
@@ -16,18 +16,17 @@
 export 'js_debug.dart';
 
 String prettyPrint(Node node,
-    {bool enableMinification: false,
-    bool allowVariableMinification: true,
-    bool preferSemicolonToNewlineInMinifiedOutput: false}) {
+    {bool enableMinification = false,
+    bool allowVariableMinification = true,
+    bool preferSemicolonToNewlineInMinifiedOutput = false}) {
   // TODO(johnniwinther): Do we need all the options here?
-  JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
+  JavaScriptPrintingOptions options = JavaScriptPrintingOptions(
       shouldCompressOutput: enableMinification,
       minifyLocalVariables: allowVariableMinification,
       preferSemicolonToNewlineInMinifiedOutput:
           preferSemicolonToNewlineInMinifiedOutput);
-  SimpleJavaScriptPrintingContext context =
-      new SimpleJavaScriptPrintingContext();
-  Printer printer = new Printer(options, context);
+  SimpleJavaScriptPrintingContext context = SimpleJavaScriptPrintingContext();
+  Printer printer = Printer(options, context);
   printer.visit(node);
   return context.getText();
 }
@@ -35,20 +34,18 @@
 CodeBuffer createCodeBuffer(Node node, CompilerOptions compilerOptions,
     JavaScriptSourceInformationStrategy sourceInformationStrategy,
     {DumpInfoTask monitor,
-    bool allowVariableMinification: true,
-    List<CodeOutputListener> listeners: const []}) {
-  JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
+    bool allowVariableMinification = true,
+    List<CodeOutputListener> listeners = const []}) {
+  JavaScriptPrintingOptions options = JavaScriptPrintingOptions(
       shouldCompressOutput: compilerOptions.enableMinification,
       minifyLocalVariables: allowVariableMinification);
-  CodeBuffer outBuffer = new CodeBuffer(listeners);
+  CodeBuffer outBuffer = CodeBuffer(listeners);
   SourceInformationProcessor sourceInformationProcessor =
       sourceInformationStrategy.createProcessor(
-          new SourceMapperProviderImpl(outBuffer),
-          const SourceInformationReader());
-  Dart2JSJavaScriptPrintingContext context =
-      new Dart2JSJavaScriptPrintingContext(
-          monitor, outBuffer, sourceInformationProcessor);
-  Printer printer = new Printer(options, context);
+          SourceMapperProviderImpl(outBuffer), const SourceInformationReader());
+  Dart2JSJavaScriptPrintingContext context = Dart2JSJavaScriptPrintingContext(
+      monitor, outBuffer, sourceInformationProcessor);
+  Printer printer = Printer(options, context);
   printer.visit(node);
   sourceInformationProcessor.process(node, outBuffer);
   return outBuffer;
diff --git a/pkg/compiler/lib/src/js/js_debug.dart b/pkg/compiler/lib/src/js/js_debug.dart
index f37ce23..11b3b83 100644
--- a/pkg/compiler/lib/src/js/js_debug.dart
+++ b/pkg/compiler/lib/src/js/js_debug.dart
@@ -12,12 +12,12 @@
 import '../io/code_output.dart' show BufferedCodeOutput;
 
 /// Unparse the JavaScript [node].
-String nodeToString(Node node, {bool pretty: false}) {
-  JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
+String nodeToString(Node node, {bool pretty = false}) {
+  JavaScriptPrintingOptions options = JavaScriptPrintingOptions(
       shouldCompressOutput: !pretty,
       preferSemicolonToNewlineInMinifiedOutput: !pretty);
-  LenientPrintingContext printingContext = new LenientPrintingContext();
-  new Printer(options, printingContext).visit(node);
+  LenientPrintingContext printingContext = LenientPrintingContext();
+  Printer(options, printingContext).visit(node);
   return printingContext.getText();
 }
 
@@ -25,7 +25,7 @@
 /// JavaScript [Node].
 class DebugPrinter extends BaseVisitor with Indentation, Tagging<Node> {
   @override
-  StringBuffer sb = new StringBuffer();
+  StringBuffer sb = StringBuffer();
 
   void visitNodeWithChildren(Node node, String type, [Map params]) {
     openNode(node, type, params);
@@ -55,7 +55,7 @@
 
   /// Pretty-prints given node tree into string.
   static String prettyPrint(Node node) {
-    var p = new DebugPrinter();
+    var p = DebugPrinter();
     node.accept(p);
     return p.sb.toString();
   }
diff --git a/pkg/compiler/lib/src/js/js_source_mapping.dart b/pkg/compiler/lib/src/js/js_source_mapping.dart
index ff8a155..8b53feb 100644
--- a/pkg/compiler/lib/src/js/js_source_mapping.dart
+++ b/pkg/compiler/lib/src/js/js_source_mapping.dart
@@ -65,7 +65,7 @@
 
   @override
   SourceMapper createSourceMapper(String name) {
-    return new SourceLocationsMapper(provider.createSourceLocations(name));
+    return SourceLocationsMapper(provider.createSourceLocations(name));
   }
 }
 
@@ -83,7 +83,7 @@
   ///
   /// If [isEmpty] is true, also associate that the inlining stack is empty at
   /// [codeOffset].
-  void registerPop(int codeOffset, {bool isEmpty: false});
+  void registerPop(int codeOffset, {bool isEmpty = false});
 }
 
 /// An implementation of [SourceMapper] that stores the information directly
@@ -105,7 +105,7 @@
   }
 
   @override
-  void registerPop(int codeOffset, {bool isEmpty: false}) {
+  void registerPop(int codeOffset, {bool isEmpty = false}) {
     sourceLocations.addPop(codeOffset, isEmpty);
   }
 }
diff --git a/pkg/compiler/lib/src/js/placeholder_safety.dart b/pkg/compiler/lib/src/js/placeholder_safety.dart
index a83a708..dc5d7a7 100644
--- a/pkg/compiler/lib/src/js/placeholder_safety.dart
+++ b/pkg/compiler/lib/src/js/placeholder_safety.dart
@@ -6,7 +6,7 @@
 
 import "js.dart" as js;
 
-typedef bool PositionPredicate(int position);
+typedef PositionPredicate = bool Function(int position);
 
 /// PlaceholderSafetyAnalysis determines which placeholders in a JavaScript
 /// template may be replaced with an arbitrary expression. Placeholders may be
@@ -40,7 +40,7 @@
   /// `false` if the value is never null.
   static int analyze(js.Node node, PositionPredicate isNullableInput) {
     PlaceholderSafetyAnalysis analysis =
-        new PlaceholderSafetyAnalysis._(isNullableInput);
+        PlaceholderSafetyAnalysis._(isNullableInput);
     analysis.visit(node);
     return analysis.maxSafePosition + 1;
   }
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index ae05423..69a999f 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -28,13 +28,13 @@
 abstract class AsyncRewriterBase extends js.NodeVisitor {
   // Local variables are hoisted to the top of the function, so they are
   // collected here.
-  List<js.VariableDeclaration> localVariables = <js.VariableDeclaration>[];
+  List<js.VariableDeclaration> localVariables = [];
 
-  Map<js.Node, int> continueLabels = new Map<js.Node, int>();
-  Map<js.Node, int> breakLabels = new Map<js.Node, int>();
+  Map<js.Node, int> continueLabels = {};
+  Map<js.Node, int> breakLabels = {};
 
   /// The label of a finally part.
-  Map<js.Block, int> finallyLabels = new Map<js.Block, int>();
+  Map<js.Block, int> finallyLabels = {};
 
   /// The label of the catch handler of a [js.Try] or a [js.Fun] or [js.Catch].
   ///
@@ -45,7 +45,7 @@
   /// - The handler of a [js.Catch] is a synthetic handler that ensures the
   ///   right finally blocks are run if an error is thrown inside a
   ///   catch-handler.
-  Map<js.Node, int> handlerLabels = new Map<js.Node, int>();
+  Map<js.Node, int> handlerLabels = {};
 
   int exitLabel;
   int rethrowLabel;
@@ -64,13 +64,13 @@
   ///
   /// When jumping to a target it is necessary to visit all finallies that
   /// are on the way to target (i.e. more nested than the jump target).
-  List<js.Node> jumpTargets = <js.Node>[];
+  List<js.Node> jumpTargets = [];
 
-  List<int> continueStack = <int>[];
-  List<int> breakStack = <int>[];
-  List<int> returnStack = <int>[];
+  List<int> continueStack = [];
+  List<int> breakStack = [];
+  List<int> returnStack = [];
 
-  List<Pair<String, String>> variableRenamings = <Pair<String, String>>[];
+  List<Pair<String, String>> variableRenamings = [];
 
   PreTranslationAnalysis analysis;
 
@@ -105,7 +105,7 @@
   ///
   /// It is a parameter to the [body] function, so that [awaitStatement] can
   /// call [body] with the result of an awaited Future.
-  js.VariableUse get result => new js.VariableUse(resultName);
+  js.VariableUse get result => js.VariableUse(resultName);
   String resultName;
 
   /// A parameter to the [bodyName] function. Indicating if we are in success
@@ -120,11 +120,11 @@
   ///
   /// To "goto" a label, the label is assigned to this variable, and break out
   /// of the switch to take another iteration in the while loop. See [addGoto]
-  js.VariableUse get goto => new js.VariableUse(gotoName);
+  js.VariableUse get goto => js.VariableUse(gotoName);
   String gotoName;
 
   /// Variable containing the label of the current error handler.
-  js.VariableUse get handler => new js.VariableUse(handlerName);
+  js.VariableUse get handler => js.VariableUse(handlerName);
   String handlerName;
 
   /// Set to `true` if any of the switch statement labels is a handler. At the
@@ -137,15 +137,15 @@
 
   /// A stack of labels of finally blocks to visit, and the label to go to after
   /// the last.
-  js.VariableUse get next => new js.VariableUse(nextName);
+  js.VariableUse get next => js.VariableUse(nextName);
   String nextName;
 
   /// The current returned value (a finally block may overwrite it).
-  js.VariableUse get returnValue => new js.VariableUse(returnValueName);
+  js.VariableUse get returnValue => js.VariableUse(returnValueName);
   String returnValueName;
 
   /// Stores the current error when we are in the process of handling an error.
-  js.VariableUse get currentError => new js.VariableUse(currentErrorName);
+  js.VariableUse get currentError => js.VariableUse(currentErrorName);
   String currentErrorName;
 
   /// The label of the outer loop.
@@ -156,11 +156,11 @@
 
   /// If javascript `this` is used, it is accessed via this variable, in the
   /// [bodyName] function.
-  js.VariableUse get self => new js.VariableUse(selfName);
+  js.VariableUse get self => js.VariableUse(selfName);
   String selfName;
 
   /// The rewritten code can take type arguments. These are added if needed.
-  List<String> typeArgumentNames = <String>[];
+  List<String> typeArgumentNames = [];
 
   final DiagnosticReporter reporter;
   // For error reporting only.
@@ -176,7 +176,7 @@
   int currentTempVarIndex = 0;
   // The highest temporary variable index ever in use in this function.
   int tempVarHighWaterMark = 0;
-  Map<int, js.Expression> tempVarNames = new Map<int, js.Expression>();
+  Map<int, js.Expression> tempVarNames = {};
 
   bool get isAsync => false;
   bool get isSyncStar => false;
@@ -197,7 +197,7 @@
       [Spannable spannable]) {
     _spannable = spannable;
 
-    analysis = new PreTranslationAnalysis(unsupported);
+    analysis = PreTranslationAnalysis(unsupported);
     analysis.analyze(node);
 
     // To avoid name collisions with existing names, the fresh names are
@@ -231,7 +231,7 @@
 
   js.VariableUse useTempVar(int i) {
     return tempVarNames.putIfAbsent(
-        i, () => new js.VariableUse(freshName("temp$i")));
+        i, () => js.VariableUse(freshName("temp$i")));
   }
 
   /// Generates a variable name with [safeVariableName] based on [originalName]
@@ -252,7 +252,7 @@
     if (types == null) {
       String name = freshName('type');
       typeArgumentNames.add(name);
-      return <js.Expression>[new js.VariableUse(name)];
+      return [js.VariableUse(name)];
     }
     return types;
   }
@@ -262,10 +262,10 @@
   ///
   /// The order is important, therefore the type is explicitly LinkedHashMap.
   LinkedHashMap<int, List<js.Statement>> labelledParts =
-      new LinkedHashMap<int, List<js.Statement>>();
+      LinkedHashMap<int, List<js.Statement>>();
 
   /// Description of each label for readability of the non-minified output.
-  Map<int, String> labelComments = new Map<int, String>();
+  Map<int, String> labelComments = {};
 
   /// True if the function has any try blocks containing await.
   bool hasTryBlocks = false;
@@ -303,16 +303,16 @@
   /// Each buffer ends up as its own case part in the big state-switch.
   void beginLabel(int label) {
     assert(!labelledParts.containsKey(label));
-    currentStatementBuffer = <js.Statement>[];
+    currentStatementBuffer = [];
     labelledParts[label] = currentStatementBuffer;
-    addStatement(new js.Comment(labelComments[label]));
+    addStatement(js.Comment(labelComments[label]));
   }
 
   /// Returns a statement assigning to the variable named [gotoName].
   /// This should be followed by a break for the goto to be executed. Use
   /// [gotoWithBreak] or [addGoto] for this.
   js.Statement setGotoVariable(int label, SourceInformation sourceInformation) {
-    return new js.ExpressionStatement(js.js('# = #',
+    return js.ExpressionStatement(js.js('# = #',
         [goto, js.number(label)]).withSourceInformation(sourceInformation));
   }
 
@@ -320,20 +320,19 @@
   ///
   /// Also inserts a comment describing the label if available.
   js.Block gotoAndBreak(int label, SourceInformation sourceInformation) {
-    List<js.Statement> statements = <js.Statement>[];
+    List<js.Statement> statements = [];
     if (labelComments.containsKey(label)) {
-      statements.add(new js.Comment("goto ${labelComments[label]}"));
+      statements.add(js.Comment("goto ${labelComments[label]}"));
     }
     statements.add(setGotoVariable(label, sourceInformation));
     if (insideUntranslatedBreakable) {
       hasJumpThoughOuterLabel = true;
-      statements.add(new js.Break(outerLabelName)
-          .withSourceInformation(sourceInformation));
+      statements.add(
+          js.Break(outerLabelName).withSourceInformation(sourceInformation));
     } else {
-      statements
-          .add(new js.Break(null).withSourceInformation(sourceInformation));
+      statements.add(js.Break(null).withSourceInformation(sourceInformation));
     }
-    return new js.Block(statements);
+    return js.Block(statements);
   }
 
   /// Adds a goto to [label] including the break.
@@ -341,7 +340,7 @@
   /// Also inserts a comment describing the label if available.
   void addGoto(int label, SourceInformation sourceInformation) {
     if (labelComments.containsKey(label)) {
-      addStatement(new js.Comment("goto ${labelComments[label]}"));
+      addStatement(js.Comment("goto ${labelComments[label]}"));
     }
     addStatement(setGotoVariable(label, sourceInformation));
 
@@ -353,7 +352,7 @@
   }
 
   void addExpressionStatement(js.Expression node) {
-    addStatement(new js.ExpressionStatement(node));
+    addStatement(js.ExpressionStatement(node));
   }
 
   /// True if there is an await or yield in [node] or some subexpression.
@@ -362,7 +361,7 @@
   }
 
   void unsupported(js.Node node) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Node $node cannot be transformed by the await-sync transformer");
   }
 
@@ -470,7 +469,7 @@
     if (selector == null) {
       result = fn(storedIfNeeded);
     } else {
-      result = fn(new js.PropertyAccess(storedIfNeeded, selector));
+      result = fn(js.PropertyAccess(storedIfNeeded, selector));
     }
     currentTempVarIndex = oldTempVarIndex;
     return result;
@@ -714,17 +713,17 @@
     addFunctionExits(exitSourceInformation);
 
     List<js.SwitchClause> clauses = labelledParts.keys.map((label) {
-      return new js.Case(js.number(label), new js.Block(labelledParts[label]));
+      return js.Case(js.number(label), js.Block(labelledParts[label]));
     }).toList();
-    js.Statement rewrittenBody = new js.Switch(goto, clauses)
-        .withSourceInformation(bodySourceInformation);
+    js.Statement rewrittenBody =
+        js.Switch(goto, clauses).withSourceInformation(bodySourceInformation);
     if (hasJumpThoughOuterLabel) {
-      rewrittenBody = new js.LabeledStatement(outerLabelName, rewrittenBody);
+      rewrittenBody = js.LabeledStatement(outerLabelName, rewrittenBody);
     }
     rewrittenBody = js.js
         .statement('while (true) {#}', rewrittenBody)
         .withSourceInformation(bodySourceInformation);
-    List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+    List<js.VariableInitialization> variables = [];
 
     variables.add(
         _makeVariableInitializer(goto, js.number(0), bodySourceInformation));
@@ -736,8 +735,8 @@
           _makeVariableInitializer(currentError, null, bodySourceInformation));
     }
     if (analysis.hasFinally || (isAsyncStar && analysis.hasYield)) {
-      variables.add(_makeVariableInitializer(next,
-          new js.ArrayInitializer(<js.Expression>[]), bodySourceInformation));
+      variables.add(_makeVariableInitializer(
+          next, js.ArrayInitializer([]), bodySourceInformation));
     }
     if (analysis.hasThis && !isSyncStar) {
       // Sync* functions must remember `this` on the level of the outer
@@ -746,18 +745,18 @@
           _makeVariableInitializer(self, js.js('this'), bodySourceInformation));
     }
     variables.addAll(localVariables.map((js.VariableDeclaration declaration) {
-      return new js.VariableInitialization(declaration, null);
+      return js.VariableInitialization(declaration, null);
     }));
-    variables.addAll(new Iterable.generate(
+    variables.addAll(Iterable.generate(
         tempVarHighWaterMark,
         (int i) => _makeVariableInitializer(
             useTempVar(i + 1).name, null, bodySourceInformation)));
     js.VariableDeclarationList variableDeclarations =
-        new js.VariableDeclarationList(variables);
+        js.VariableDeclarationList(variables);
 
     // Names are already safe when added.
     List<js.Parameter> typeParameters =
-        typeArgumentNames.map((name) => new js.Parameter(name)).toList();
+        typeArgumentNames.map((name) => js.Parameter(name)).toList();
     return finishFunction(node.params, typeParameters, rewrittenBody,
         variableDeclarations, node.sourceInformation, bodySourceInformation);
   }
@@ -797,15 +796,15 @@
   @override
   js.Expression visitArrayInitializer(js.ArrayInitializer node) {
     return withExpressions(node.elements, (elements) {
-      return new js.ArrayInitializer(elements);
+      return js.ArrayInitializer(elements);
     });
   }
 
   @override
   js.Expression visitAssignment(js.Assignment node) {
     if (!shouldTransform(node)) {
-      return new js.Assignment.compound(visitExpression(node.leftHandSide),
-          node.op, visitExpression(node.value));
+      return js.Assignment.compound(visitExpression(node.leftHandSide), node.op,
+          visitExpression(node.value));
     }
     js.Expression leftHandSide = node.leftHandSide;
     if (leftHandSide is js.VariableUse) {
@@ -813,15 +812,15 @@
         // A non-compound [js.Assignment] has `op==null`. So it works out to
         // use [js.Assignment.compound] for all cases.
         // Visit the [js.VariableUse] to ensure renaming is done correctly.
-        return new js.Assignment.compound(
+        return js.Assignment.compound(
             visitExpression(leftHandSide), node.op, value);
       }, store: false);
     } else if (leftHandSide is js.PropertyAccess) {
       return withExpressions(
           [leftHandSide.receiver, leftHandSide.selector, node.value],
           (evaluated) {
-        return new js.Assignment.compound(
-            new js.PropertyAccess(evaluated[0], evaluated[1]),
+        return js.Assignment.compound(
+            js.PropertyAccess(evaluated[0], evaluated[1]),
             node.op,
             evaluated[2]);
       });
@@ -867,7 +866,7 @@
       int joinLabel = newLabel("join");
       withExpression(node.left, (js.Expression left) {
         js.Statement assignLeft = isResult(left)
-            ? new js.Block.empty()
+            ? js.Block.empty()
             : js.js.statement('# = #;', [result, left]);
         if (node.op == "&&") {
           addStatement(js.js.statement('if (#) {#} else #', [
@@ -896,7 +895,7 @@
     }
 
     return withExpression2(node.left, node.right,
-        (left, right) => new js.Binary(node.op, left, right));
+        (left, right) => js.Binary(node.op, left, right));
   }
 
   @override
@@ -921,7 +920,7 @@
     bool storeTarget = node.arguments.any(shouldTransform);
     return withCallTargetExpression(node.target, (target) {
       return withExpressions(node.arguments, (List<js.Expression> arguments) {
-        return new js.Call(target, arguments)
+        return js.Call(target, arguments)
             .withSourceInformation(node.sourceInformation);
       });
     }, store: storeTarget);
@@ -990,10 +989,10 @@
   void addBreak(SourceInformation sourceInformation) {
     if (insideUntranslatedBreakable) {
       hasJumpThoughOuterLabel = true;
-      addStatement(new js.Break(outerLabelName)
-          .withSourceInformation(sourceInformation));
+      addStatement(
+          js.Break(outerLabelName).withSourceInformation(sourceInformation));
     } else {
-      addStatement(new js.Break(null).withSourceInformation(sourceInformation));
+      addStatement(js.Break(null).withSourceInformation(sourceInformation));
     }
   }
 
@@ -1008,7 +1007,7 @@
     // Compute a stack of all the 'finally' nodes that must be visited before
     // the jump.
     // The bottom of the stack is the label where the jump goes to.
-    List<int> jumpStack = <int>[];
+    List<int> jumpStack = [];
     for (js.Node node in jumpTargets.reversed) {
       if (finallyLabels[node] != null) {
         jumpStack.add(finallyLabels[node]);
@@ -1023,9 +1022,9 @@
     // now.
     int firstTarget = jumpStack.removeLast();
     if (jumpStack.isNotEmpty) {
-      js.Expression jsJumpStack = new js.ArrayInitializer(
+      js.Expression jsJumpStack = js.ArrayInitializer(
           jumpStack.map((int label) => js.number(label)).toList());
-      addStatement(new js.ExpressionStatement(js.js("# = #",
+      addStatement(js.ExpressionStatement(js.js("# = #",
           [next, jsJumpStack]).withSourceInformation(sourceInformation)));
     }
     addGoto(firstTarget, sourceInformation);
@@ -1085,7 +1084,7 @@
       // withExpressions handles that.
       withExpressions([node.init, node.condition, node.update],
           (List<js.Expression> transformed) {
-        addStatement(new js.For(transformed[0], transformed[1], transformed[2],
+        addStatement(js.For(transformed[0], transformed[1], transformed[2],
             translateToStatement(node.body)));
       });
       insideUntranslatedBreakable = oldInsideUntranslated;
@@ -1107,10 +1106,10 @@
     js.Expression condition = node.condition;
     if (condition == null ||
         (condition is js.LiteralBool && condition.value == true)) {
-      addStatement(new js.Comment("trivial condition"));
+      addStatement(js.Comment("trivial condition"));
     } else {
       withExpression(condition, (js.Expression condition) {
-        addStatement(new js.If.noElse(new js.Prefix("!", condition),
+        addStatement(js.If.noElse(js.Prefix("!", condition),
             gotoAndBreak(afterLabel, node.sourceInformation)));
       }, store: false);
     }
@@ -1139,7 +1138,7 @@
   List<js.Statement> translateToStatementSequence(js.Statement node) {
     assert(!shouldTransform(node));
     List<js.Statement> oldBuffer = currentStatementBuffer;
-    currentStatementBuffer = <js.Statement>[];
+    currentStatementBuffer = [];
     List<js.Statement> resultBuffer = currentStatementBuffer;
     visitStatement(node);
     currentStatementBuffer = oldBuffer;
@@ -1149,11 +1148,11 @@
   js.Statement translateToStatement(js.Statement node) {
     List<js.Statement> statements = translateToStatementSequence(node);
     if (statements.length == 1) return statements.single;
-    return new js.Block(statements);
+    return js.Block(statements);
   }
 
   js.Block translateToBlock(js.Statement node) {
-    return new js.Block(translateToStatementSequence(node));
+    return js.Block(translateToStatementSequence(node));
   }
 
   @override
@@ -1162,7 +1161,7 @@
       withExpression(node.condition, (js.Expression condition) {
         js.Statement translatedThen = translateToStatement(node.then);
         js.Statement translatedElse = translateToStatement(node.otherwise);
-        addStatement(new js.If(condition, translatedThen, translatedElse));
+        addStatement(js.If(condition, translatedThen, translatedElse));
       }, store: false);
       return;
     }
@@ -1172,9 +1171,9 @@
         (node.otherwise is js.EmptyStatement) ? joinLabel : newLabel("else");
 
     withExpression(node.condition, (js.Expression condition) {
-      addExpressionStatement(new js.Assignment(
+      addExpressionStatement(js.Assignment(
           goto,
-          new js.Conditional(
+          js.Conditional(
               condition, js.number(thenLabel), js.number(elseLabel))));
     }, store: false);
     addBreak(node.sourceInformation);
@@ -1220,7 +1219,7 @@
   void visitLabeledStatement(js.LabeledStatement node) {
     if (!shouldTransform(node)) {
       addStatement(
-          new js.LabeledStatement(node.label, translateToStatement(node.body)));
+          js.LabeledStatement(node.label, translateToStatement(node.body)));
       return;
     }
     // `continue label` is really continuing the nested loop.
@@ -1287,7 +1286,7 @@
     bool storeTarget = node.arguments.any(shouldTransform);
     return withCallTargetExpression(node.target, (target) {
       return withExpressions(node.arguments, (List<js.Expression> arguments) {
-        return new js.New(target, arguments);
+        return js.New(target, arguments);
       });
     }, store: storeTarget);
   }
@@ -1298,13 +1297,13 @@
     return withExpressions(
         node.properties.map((js.Property property) => property.value).toList(),
         (List<js.Node> values) {
-      List<js.Property> properties = new List.generate(values.length, (int i) {
+      List<js.Property> properties = List.generate(values.length, (int i) {
         if (node.properties[i] is js.MethodDefinition) {
-          return new js.MethodDefinition(node.properties[i].name, values[i]);
+          return js.MethodDefinition(node.properties[i].name, values[i]);
         }
-        return new js.Property(node.properties[i].name, values[i]);
+        return js.Property(node.properties[i].name, values[i]);
       });
-      return new js.ObjectInitializer(properties);
+      return js.ObjectInitializer(properties);
     });
   }
 
@@ -1316,12 +1315,11 @@
     if (node.op == "++" || node.op == "--") {
       js.Expression argument = node.argument;
       if (argument is js.VariableUse) {
-        return new js.Postfix(node.op, visitExpression(argument));
+        return js.Postfix(node.op, visitExpression(argument));
       } else if (argument is js.PropertyAccess) {
         return withExpression2(argument.receiver, argument.selector,
             (receiver, selector) {
-          return new js.Postfix(
-              node.op, new js.PropertyAccess(receiver, selector));
+          return js.Postfix(node.op, js.PropertyAccess(receiver, selector));
         });
       } else {
         throw "Unexpected postfix ${node.op} "
@@ -1329,7 +1327,7 @@
       }
     }
     return withExpression(node.argument,
-        (js.Expression argument) => new js.Postfix(node.op, argument),
+        (js.Expression argument) => js.Postfix(node.op, argument),
         store: false);
   }
 
@@ -1338,20 +1336,19 @@
     if (node.op == "++" || node.op == "--") {
       js.Expression argument = node.argument;
       if (argument is js.VariableUse) {
-        return new js.Prefix(node.op, visitExpression(argument));
+        return js.Prefix(node.op, visitExpression(argument));
       } else if (argument is js.PropertyAccess) {
         return withExpression2(argument.receiver, argument.selector,
             (receiver, selector) {
-          return new js.Prefix(
-              node.op, new js.PropertyAccess(receiver, selector));
+          return js.Prefix(node.op, js.PropertyAccess(receiver, selector));
         });
       } else {
         throw "Unexpected prefix ${node.op} operator "
             "argument ${node.argument}";
       }
     }
-    return withExpression(node.argument,
-        (js.Expression argument) => new js.Prefix(node.op, argument),
+    return withExpression(
+        node.argument, (js.Expression argument) => js.Prefix(node.op, argument),
         store: false);
   }
 
@@ -1362,14 +1359,14 @@
   js.Property visitProperty(js.Property node) {
     assert(node.runtimeType == js.Property);
     return withExpression(
-        node.value, (js.Expression value) => new js.Property(node.name, value),
+        node.value, (js.Expression value) => js.Property(node.name, value),
         store: false);
   }
 
   @override
   js.MethodDefinition visitMethodDefinition(js.MethodDefinition node) {
     return withExpression(node.function,
-        (js.Expression value) => new js.MethodDefinition(node.name, value),
+        (js.Expression value) => js.MethodDefinition(node.name, value),
         store: false);
   }
 
@@ -1407,14 +1404,12 @@
       withExpression(node.key, (js.Expression key) {
         List<js.SwitchClause> cases = node.cases.map((js.SwitchClause clause) {
           if (clause is js.Case) {
-            return new js.Case(
-                clause.expression, translateToBlock(clause.body));
+            return js.Case(clause.expression, translateToBlock(clause.body));
           } else {
-            return new js.Default(
-                translateToBlock((clause as js.Default).body));
+            return js.Default(translateToBlock((clause as js.Default).body));
           }
         }).toList();
-        addStatement(new js.Switch(key, cases));
+        addStatement(js.Switch(key, cases));
       }, store: false);
       insideUntranslatedBreakable = oldInsideUntranslated;
       return;
@@ -1424,7 +1419,7 @@
     breakLabels[node] = after;
 
     beginLabel(before);
-    List<int> labels = new List<int>.filled(node.cases.length, null);
+    List<int> labels = List<int>.filled(node.cases.length, null);
 
     bool anyCaseExpressionTransformed = node.cases.any(
         (js.SwitchClause x) => x is js.Case && shouldTransform(x.expression));
@@ -1444,8 +1439,7 @@
           } else if (clause is js.Case) {
             labels[i] = newLabel("case");
             withExpression(clause.expression, (expression) {
-              addStatement(new js.If.noElse(
-                  new js.Binary("===", key, expression),
+              addStatement(js.If.noElse(js.Binary("===", key, expression),
                   gotoAndBreak(labels[i], clause.sourceInformation)));
             }, store: false);
           }
@@ -1461,16 +1455,16 @@
     } else {
       bool hasDefault = false;
       int i = 0;
-      List<js.SwitchClause> clauses = <js.SwitchClause>[];
+      List<js.SwitchClause> clauses = [];
       for (js.SwitchClause clause in node.cases) {
         if (clause is js.Case) {
           labels[i] = newLabel("case");
-          clauses.add(new js.Case(visitExpression(clause.expression),
+          clauses.add(js.Case(visitExpression(clause.expression),
               gotoAndBreak(labels[i], clause.sourceInformation)));
         } else if (clause is js.Default) {
           labels[i] = newLabel("default");
-          clauses.add(new js.Default(
-              gotoAndBreak(labels[i], clause.sourceInformation)));
+          clauses.add(
+              js.Default(gotoAndBreak(labels[i], clause.sourceInformation)));
           hasDefault = true;
         } else {
           reporter.internalError(spannable, "Unknown clause type $clause");
@@ -1478,11 +1472,10 @@
         i++;
       }
       if (!hasDefault) {
-        clauses
-            .add(new js.Default(gotoAndBreak(after, node.sourceInformation)));
+        clauses.add(js.Default(gotoAndBreak(after, node.sourceInformation)));
       }
       withExpression(node.key, (js.Expression key) {
-        addStatement(new js.Switch(key, clauses));
+        addStatement(js.Switch(key, clauses));
       }, store: false);
 
       addBreak(node.sourceInformation);
@@ -1505,8 +1498,8 @@
   @override
   void visitThrow(js.Throw node) {
     withExpression(node.expression, (js.Expression expression) {
-      addStatement(new js.Throw(expression)
-          .withSourceInformation(node.sourceInformation));
+      addStatement(
+          js.Throw(expression).withSourceInformation(node.sourceInformation));
     }, store: false);
   }
 
@@ -1518,7 +1511,7 @@
   }
 
   List<int> _finalliesUpToAndEnclosingHandler() {
-    List<int> result = <int>[];
+    List<int> result = [];
     for (int i = jumpTargets.length - 1; i >= 0; i--) {
       js.Node node = jumpTargets[i];
       int handlerLabel = handlerLabels[node];
@@ -1541,12 +1534,12 @@
       js.Block body = translateToBlock(node.body);
       js.Catch catchPart = (node.catchPart == null)
           ? null
-          : new js.Catch(node.catchPart.declaration,
+          : js.Catch(node.catchPart.declaration,
               translateToBlock(node.catchPart.body));
       js.Block finallyPart = (node.finallyPart == null)
           ? null
           : translateToBlock(node.finallyPart);
-      addStatement(new js.Try(body, catchPart, finallyPart));
+      addStatement(js.Try(body, catchPart, finallyPart));
       return;
     }
 
@@ -1595,9 +1588,8 @@
       // is needed to avoid collisions.  See Ecma 262, 3rd edition,
       // section 12.14.
       String errorRename = freshName(node.catchPart.declaration.name);
-      localVariables.add(new js.VariableDeclaration(errorRename));
-      variableRenamings
-          .add(new Pair(node.catchPart.declaration.name, errorRename));
+      localVariables.add(js.VariableDeclaration(errorRename));
+      variableRenamings.add(Pair(node.catchPart.declaration.name, errorRename));
       addStatement(js.js.statement("# = #;", [errorRename, currentError]));
       visitStatement(node.catchPart.body);
       variableRenamings.removeLast();
@@ -1626,7 +1618,7 @@
       // blocks. Then [nextLabel] will be [rethrowLabel].
       addStatement(js.js.statement("# = #;", [
         next,
-        new js.ArrayInitializer(enclosingFinallies.map(js.number).toList())
+        js.ArrayInitializer(enclosingFinallies.map(js.number).toList())
       ]));
     }
     if (node.finallyPart == null) {
@@ -1641,7 +1633,7 @@
       beginLabel(finallyLabel);
       setErrorHandler();
       visitStatement(node.finallyPart);
-      addStatement(new js.Comment("// goto the next finally handler"));
+      addStatement(js.Comment("// goto the next finally handler"));
       addStatement(js.js.statement("# = #.pop();", [goto, next]));
       addBreak(node.sourceInformation);
     }
@@ -1661,7 +1653,7 @@
       if (initialization.value != null) {
         withExpression(initialization.value, (js.Expression value) {
           addExpressionStatement(
-              new js.Assignment(new js.VariableUse(declaration.name), value));
+              js.Assignment(js.VariableUse(declaration.name), value));
         }, store: false);
       }
     }
@@ -1679,7 +1671,7 @@
         (Pair renaming) => renaming.a == node.name,
         orElse: () => null);
     if (renaming == null) return node;
-    return new js.VariableUse(renaming.b);
+    return js.VariableUse(renaming.b);
   }
 
   @override
@@ -1688,7 +1680,7 @@
       bool oldInsideUntranslated = insideUntranslatedBreakable;
       insideUntranslatedBreakable = true;
       withExpression(node.condition, (js.Expression condition) {
-        addStatement(new js.While(condition, translateToStatement(node.body)));
+        addStatement(js.While(condition, translateToStatement(node.body)));
       }, store: false);
       insideUntranslatedBreakable = oldInsideUntranslated;
       return;
@@ -1703,7 +1695,7 @@
     // If the condition is `true`, a test is not needed.
     if (!(condition is js.LiteralBool && condition.value == true)) {
       withExpression(node.condition, (js.Expression condition) {
-        addStatement(new js.If.noElse(new js.Prefix("!", condition),
+        addStatement(js.If.noElse(js.Prefix("!", condition),
             gotoAndBreak(afterLabel, node.sourceInformation)));
       }, store: false);
     }
@@ -1735,14 +1727,14 @@
     js.Expression initValue, SourceInformation sourceInformation) {
   js.VariableDeclaration declaration;
   if (variable is js.VariableUse) {
-    declaration = new js.VariableDeclaration(variable.name);
+    declaration = js.VariableDeclaration(variable.name);
   } else if (variable is String) {
-    declaration = new js.VariableDeclaration(variable);
+    declaration = js.VariableDeclaration(variable);
   } else {
     assert(variable is js.VariableDeclaration);
     declaration = variable;
   }
-  return new js.VariableInitialization(declaration, initValue)
+  return js.VariableInitialization(declaration, initValue)
       .withSourceInformation(sourceInformation);
 }
 
@@ -1754,7 +1746,7 @@
   ///
   /// Not used for sync* or async* functions.
   String completerName;
-  js.VariableUse get completer => new js.VariableUse(completerName);
+  js.VariableUse get completer => js.VariableUse(completerName);
 
   /// The function called by an async function to initiate asynchronous
   /// execution of the body.  This is called with:
@@ -1825,7 +1817,7 @@
       "completer": completer
     }).withSourceInformation(sourceInformation);
     addStatement(
-        new js.Return(thenHelperCall).withSourceInformation(sourceInformation));
+        js.Return(thenHelperCall).withSourceInformation(sourceInformation));
   }
 
   /// Returning from an async method calls [asyncStarHelper] with the result.
@@ -1836,24 +1828,24 @@
     if (analysis.hasExplicitReturns) {
       beginLabel(exitLabel);
     } else {
-      addStatement(new js.Comment("implicit return"));
+      addStatement(js.Comment("implicit return"));
     }
 
     js.Expression runtimeHelperCall =
         js.js("#runtimeHelper(#returnValue, #completer)", {
       "runtimeHelper": asyncReturn,
       "returnValue":
-          analysis.hasExplicitReturns ? returnValue : new js.LiteralNull(),
+          analysis.hasExplicitReturns ? returnValue : js.LiteralNull(),
       "completer": completer
     }).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(runtimeHelperCall)
-        .withSourceInformation(sourceInformation));
+    addStatement(
+        js.Return(runtimeHelperCall).withSourceInformation(sourceInformation));
   }
 
   @override
   Iterable<js.VariableInitialization> variableInitializations(
       SourceInformation sourceInformation) {
-    List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+    List<js.VariableInitialization> variables = [];
     variables.add(_makeVariableInitializer(
         completer,
         js.js('#(#)', [
@@ -1883,8 +1875,7 @@
       "value": value,
       "bodyName": bodyName,
     }).withSourceInformation(sourceInformation);
-    return new js.Return(asyncHelperCall)
-        .withSourceInformation(sourceInformation);
+    return js.Return(asyncHelperCall).withSourceInformation(sourceInformation);
   }
 
   @override
@@ -1901,7 +1892,7 @@
       "asyncRethrow": asyncRethrow,
       "completer": completer,
     }).withSourceInformation(bodySourceInformation);
-    js.Return returnAsyncRethrow = new js.Return(asyncRethrowCall)
+    js.Return returnAsyncRethrow = js.Return(asyncRethrowCall)
         .withSourceInformation(bodySourceInformation);
     js.Statement errorCheck = js.js.statement("""
       if (#errorCode === #ERROR) {
@@ -1935,8 +1926,8 @@
       "bodyName": bodyName,
       "completer": completer,
     }).withSourceInformation(bodySourceInformation);
-    js.Return returnAsyncStart = new js.Return(asyncStartCall)
-        .withSourceInformation(bodySourceInformation);
+    js.Return returnAsyncStart =
+        js.Return(asyncStartCall).withSourceInformation(bodySourceInformation);
     js.Expression wrapBodyCall = js.js("#wrapBody(#innerFunction)", {
       "wrapBody": wrapBody,
       "innerFunction": innerFunction,
@@ -1997,12 +1988,12 @@
   void addYield(js.DartYield node, js.Expression expression,
       SourceInformation sourceInformation) {
     if (node.hasStar) {
-      addStatement(new js.Return(new js.Call(yieldStarExpression, [expression])
+      addStatement(js.Return(js.Call(yieldStarExpression, [expression])
               .withSourceInformation(sourceInformation))
           .withSourceInformation(sourceInformation));
     } else {
       addStatement(
-          new js.Return(expression).withSourceInformation(sourceInformation));
+          js.Return(expression).withSourceInformation(sourceInformation));
     }
   }
 
@@ -2018,18 +2009,17 @@
     // the parameters.
     // TODO(sigurdm): We only need to do this copying for parameters that are
     // mutated.
-    List<js.VariableInitialization> declarations =
-        <js.VariableInitialization>[];
-    List<js.Parameter> renamedParameters = <js.Parameter>[];
+    List<js.VariableInitialization> declarations = [];
+    List<js.Parameter> renamedParameters = [];
     for (js.Parameter parameter in parameters) {
       String name = parameter.name;
       String renamedName = freshName(name);
-      renamedParameters.add(new js.Parameter(renamedName));
-      declarations.add(new js.VariableInitialization(
-          new js.VariableDeclaration(name), new js.VariableUse(renamedName)));
+      renamedParameters.add(js.Parameter(renamedName));
+      declarations.add(js.VariableInitialization(
+          js.VariableDeclaration(name), js.VariableUse(renamedName)));
     }
     js.VariableDeclarationList copyParameters =
-        new js.VariableDeclarationList(declarations);
+        js.VariableDeclarationList(declarations);
 
     js.Expression setCurrentError = js.js("#currentError = #result", {
       "result": resultName,
@@ -2060,7 +2050,7 @@
       "result": resultName,
       "checkErrorCode": checkErrorCode,
     }).withSourceInformation(functionSourceInformation);
-    js.Return returnInnerInnerFunction = new js.Return(innerInnerFunction)
+    js.Return returnInnerInnerFunction = js.Return(innerInnerFunction)
         .withSourceInformation(bodySourceInformation);
     js.Fun innerFunction = js.js("""
           function () {
@@ -2081,7 +2071,7 @@
       "type": iterableFactoryTypeArguments,
       "innerFunction": innerFunction,
     }).withSourceInformation(bodySourceInformation);
-    js.Statement returnCallIterableFactory = new js.Return(callIterableFactory)
+    js.Statement returnCallIterableFactory = js.Return(callIterableFactory)
         .withSourceInformation(bodySourceInformation);
     return js.js("""
           function (#renamedParameters, #typeParameters) {
@@ -2106,7 +2096,7 @@
       uncaughtErrorExpression,
       currentError
     ]).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(uncaughtErrorExpressionCall)
+    addStatement(js.Return(uncaughtErrorExpressionCall)
         .withSourceInformation(sourceInformation));
   }
 
@@ -2116,18 +2106,18 @@
     if (analysis.hasExplicitReturns) {
       beginLabel(exitLabel);
     } else {
-      addStatement(new js.Comment("implicit return"));
+      addStatement(js.Comment("implicit return"));
     }
     js.Expression endOfIterationCall =
         js.js('#()', [endOfIteration]).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(endOfIterationCall)
-        .withSourceInformation(sourceInformation));
+    addStatement(
+        js.Return(endOfIterationCall).withSourceInformation(sourceInformation));
   }
 
   @override
   Iterable<js.VariableInitialization> variableInitializations(
       SourceInformation sourceInformation) {
-    List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+    List<js.VariableInitialization> variables = [];
     return variables;
   }
 
@@ -2152,14 +2142,14 @@
   /// The stack of labels of finally blocks to assign to [next] if the
   /// async* [StreamSubscription] was canceled during a yield.
   js.VariableUse get nextWhenCanceled {
-    return new js.VariableUse(nextWhenCanceledName);
+    return js.VariableUse(nextWhenCanceledName);
   }
 
   String nextWhenCanceledName;
 
   /// The StreamController that controls an async* function.
   String controllerName;
-  js.VariableUse get controller => new js.VariableUse(controllerName);
+  js.VariableUse get controller => js.VariableUse(controllerName);
 
   /// The function called by an async* function to simulate an await, yield or
   /// yield*.
@@ -2226,13 +2216,13 @@
     // Find all the finally blocks that should be performed if the stream is
     // canceled during the yield.
     // At the bottom of the stack is the return label.
-    List<int> enclosingFinallyLabels = <int>[exitLabel];
+    List<int> enclosingFinallyLabels = [exitLabel];
     enclosingFinallyLabels.addAll(jumpTargets
         .where((js.Node node) => finallyLabels[node] != null)
         .map((js.Node node) => finallyLabels[node]));
     addStatement(js.js.statement("# = #;", [
       nextWhenCanceled,
-      new js.ArrayInitializer(enclosingFinallyLabels.map(js.number).toList())
+      js.ArrayInitializer(enclosingFinallyLabels.map(js.number).toList())
     ]).withSourceInformation(sourceInformation));
     js.Expression yieldExpressionCall = js.js("#yieldExpression(#expression)", {
       "yieldExpression": node.hasStar ? yieldStarExpression : yieldExpression,
@@ -2245,7 +2235,7 @@
       "bodyName": bodyName,
       "controller": controllerName,
     }).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(asyncStarHelperCall)
+    addStatement(js.Return(asyncStarHelperCall)
         .withSourceInformation(sourceInformation));
   }
 
@@ -2277,7 +2267,7 @@
       "handler": handler,
     }).withSourceInformation(bodySourceInformation);
     js.Statement breakStatement =
-        new js.Break(null).withSourceInformation(bodySourceInformation);
+        js.Break(null).withSourceInformation(bodySourceInformation);
     js.Statement switchCase = js.js.statement("""
         switch (#errorCode) {
           case #STREAM_WAS_CANCELED:
@@ -2342,9 +2332,8 @@
       "streamOfController": streamOfController,
       "controller": controllerName,
     }).withSourceInformation(bodySourceInformation);
-    js.Return returnStreamOfControllerCall =
-        new js.Return(streamOfControllerCall)
-            .withSourceInformation(bodySourceInformation);
+    js.Return returnStreamOfControllerCall = js.Return(streamOfControllerCall)
+        .withSourceInformation(bodySourceInformation);
     return js.js("""
         function (#parameters, #typeParameters) {
           #declareBodyName;
@@ -2370,8 +2359,8 @@
       "currentError": currentError,
       "controller": controllerName
     }).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(asyncHelperCall)
-        .withSourceInformation(sourceInformation));
+    addStatement(
+        js.Return(asyncHelperCall).withSourceInformation(sourceInformation));
   }
 
   /// Returning from an async* function calls the [streamHelper] with an
@@ -2386,14 +2375,14 @@
       "successCode": js.number(error_codes.SUCCESS),
       "controller": controllerName
     }).withSourceInformation(sourceInformation);
-    addStatement(new js.Return(streamHelperCall)
-        .withSourceInformation(sourceInformation));
+    addStatement(
+        js.Return(streamHelperCall).withSourceInformation(sourceInformation));
   }
 
   @override
   Iterable<js.VariableInitialization> variableInitializations(
       SourceInformation sourceInformation) {
-    List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+    List<js.VariableInitialization> variables = [];
     variables.add(_makeVariableInitializer(
         controller,
         js.js('#(#, #)', [
@@ -2427,8 +2416,7 @@
       "bodyName": bodyName,
       "controller": controllerName
     }).withSourceInformation(sourceInformation);
-    return new js.Return(asyncHelperCall)
-        .withSourceInformation(sourceInformation);
+    return js.Return(asyncHelperCall).withSourceInformation(sourceInformation);
   }
 }
 
@@ -2439,12 +2427,12 @@
 /// - a set of used names.
 /// - if any [This]-expressions are used.
 class PreTranslationAnalysis extends js.BaseVisitor<bool> {
-  Set<js.Node> hasAwaitOrYield = new Set<js.Node>();
+  Set<js.Node> hasAwaitOrYield = {};
 
-  Map<js.Node, js.Node> targets = new Map<js.Node, js.Node>();
-  List<js.Node> loopsAndSwitches = <js.Node>[];
-  List<js.LabeledStatement> labelledStatements = <js.LabeledStatement>[];
-  Set<String> usedNames = new Set<String>();
+  Map<js.Node, js.Node> targets = {};
+  List<js.Node> loopsAndSwitches = [];
+  List<js.LabeledStatement> labelledStatements = [];
+  Set<String> usedNames = {};
 
   bool hasExplicitReturns = false;
 
diff --git a/pkg/compiler/lib/src/js/size_estimator.dart b/pkg/compiler/lib/src/js/size_estimator.dart
index 5af9fc1..022c4c2 100644
--- a/pkg/compiler/lib/src/js/size_estimator.dart
+++ b/pkg/compiler/lib/src/js/size_estimator.dart
@@ -391,7 +391,7 @@
     // See:
     // https://connect.microsoft.com/IE/feedback/details/891889/parser-bugs
     if (body is Break && body.targetLabel == node.label) {
-      visit(new EmptyStatement());
+      visit(EmptyStatement());
       return;
     }
     out('${node.label}:');
@@ -431,7 +431,7 @@
 
   @override
   visitFunctionDeclaration(FunctionDeclaration declaration) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitFunctionDeclaration(declaration);
     functionOut(declaration.function, declaration.name, vars);
   }
@@ -808,21 +808,21 @@
 
   @override
   void visitNamedFunction(NamedFunction namedFunction) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitNamedFunction(namedFunction);
     functionOut(namedFunction.function, namedFunction.name, vars);
   }
 
   @override
   void visitFun(Fun fun) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitFun(fun);
     functionOut(fun, null, vars);
   }
 
   @override
   void visitArrowFunction(ArrowFunction fun) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitArrowFunction(fun);
     arrowFunctionOut(fun, vars);
   }
@@ -1015,7 +1015,7 @@
   @override
   void visitMethodDefinition(MethodDefinition node) {
     propertyNameOut(node);
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitMethodDefinition(node);
     methodOut(node, vars);
   }
diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index f702ca37..98ebf0c 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.dart
@@ -265,15 +265,15 @@
   /// Serializes this [AnnotationsData] to [sink].
   void writeToDataSink(DataSink sink);
 
-  /// Returns `true` if [member] has an `@pragma('dart2js:assumeDynamic')` annotation.
+  /// Returns `true` if [member] has an `@pragma('dart2js:assumeDynamic')`
+  /// annotation.
   bool hasAssumeDynamic(MemberEntity member);
 
-  /// Returns `true` if [member] has a `@pragma('dart2js:noInline')`, or
-  /// `@pragma('dart2js:noInline')` annotation.
+  /// Returns `true` if [member] has a `@pragma('dart2js:noInline')` annotation.
   bool hasNoInline(MemberEntity member);
 
-  /// Returns `true` if [member] has a `@pragma('dart2js:tryInline')`, or
-  /// `@pragma('dart2js:tryInline')` annotation.
+  /// Returns `true` if [member] has a `@pragma('dart2js:tryInline')`
+  /// annotation.
   bool hasTryInline(MemberEntity member);
 
   /// Returns `true` if [member] has a `@pragma('dart2js:disableFinal')`
@@ -284,18 +284,19 @@
   /// annotation.
   bool hasNoElision(MemberEntity member);
 
-  /// Returns `true` if [member] has a `@NoThrows()` annotation.
+  /// Returns `true` if [member] has a `@pragma('dart2js:noThrows')` annotation.
   bool hasNoThrows(MemberEntity member);
 
-  /// Returns `true` if [member] has a `@NoSideEffects()` annotation.
+  /// Returns `true` if [member] has a `@pragma('dart2js:noSideEffects')`
+  /// annotation.
   bool hasNoSideEffects(MemberEntity member);
 
-  /// Calls [f] for all functions with a `@pragma('dart2js:noInline')`, or
-  /// `@pragma('dart2js:noInline')` annotation.
+  /// Calls [f] for all functions with a `@pragma('dart2js:noInline')`
+  /// annotation.
   void forEachNoInline(void f(FunctionEntity function));
 
-  /// Calls [f] for all functions with a `@pragma('dart2js:tryInline')`, or
-  /// `@pragma('dart2js:tryInline')` annotation.
+  /// Calls [f] for all functions with a `@pragma('dart2js:tryInline')`
+  /// annotation.
   void forEachTryInline(void f(FunctionEntity function));
 
   /// Calls [f] for all functions with a `@pragma('dart2js:noThrows')`
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 6b3e73c..425e905 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -51,6 +51,9 @@
   /// `true` if 'dart:mirrors' features are used.
   bool get isMirrorsUsed;
 
+  /// `true` if startup timestamps are used.
+  bool get requiresStartupMetrics;
+
   /// `true` if `noSuchMethod` is used.
   bool get isNoSuchMethodUsed;
 
@@ -120,6 +123,9 @@
   /// `true` if a core-library function requires the preamble file to function.
   bool requiresPreamble = false;
 
+  /// `true` if a core-library function accesses startup timestamps.
+  bool requiresStartupMetrics = false;
+
   @override
   bool isFunctionApplyUsed = false;
 
@@ -242,6 +248,8 @@
       isFunctionApplyUsed = true;
     } else if (member.library == _commonElements.mirrorsLibrary) {
       isMirrorsUsed = true;
+    } else if (member == _commonElements.rawStartupMetrics) {
+      requiresStartupMetrics = true;
     }
   }
 
@@ -275,7 +283,7 @@
 
   @override
   BackendUsage close() {
-    return new BackendUsageImpl(
+    return BackendUsageImpl(
         globalFunctionDependencies: _globalFunctionDependencies,
         globalClassDependencies: _globalClassDependencies,
         helperFunctionsUsed: _helperFunctionsUsed,
@@ -283,6 +291,7 @@
         needToInitializeIsolateAffinityTag: _needToInitializeIsolateAffinityTag,
         needToInitializeDispatchProperty: _needToInitializeDispatchProperty,
         requiresPreamble: requiresPreamble,
+        requiresStartupMetrics: requiresStartupMetrics,
         runtimeTypeUses: _runtimeTypeUses,
         isFunctionApplyUsed: isFunctionApplyUsed,
         isMirrorsUsed: isMirrorsUsed,
@@ -317,6 +326,9 @@
   final bool requiresPreamble;
 
   @override
+  final bool requiresStartupMetrics;
+
+  @override
   final bool isFunctionApplyUsed;
 
   @override
@@ -336,6 +348,7 @@
       this.needToInitializeIsolateAffinityTag,
       this.needToInitializeDispatchProperty,
       this.requiresPreamble,
+      this.requiresStartupMetrics,
       Set<RuntimeTypeUse> runtimeTypeUses,
       this.isFunctionApplyUsed,
       this.isMirrorsUsed,
@@ -364,12 +377,13 @@
     bool needToInitializeIsolateAffinityTag = source.readBool();
     bool needToInitializeDispatchProperty = source.readBool();
     bool requiresPreamble = source.readBool();
+    bool requiresStartupMetrics = source.readBool();
     bool isFunctionApplyUsed = source.readBool();
     bool isMirrorsUsed = source.readBool();
     bool isNoSuchMethodUsed = source.readBool();
     bool isHtmlLoaded = source.readBool();
     source.end(tag);
-    return new BackendUsageImpl(
+    return BackendUsageImpl(
         globalFunctionDependencies: globalFunctionDependencies,
         globalClassDependencies: globalClassDependencies,
         helperFunctionsUsed: helperFunctionsUsed,
@@ -378,6 +392,7 @@
         needToInitializeIsolateAffinityTag: needToInitializeIsolateAffinityTag,
         needToInitializeDispatchProperty: needToInitializeDispatchProperty,
         requiresPreamble: requiresPreamble,
+        requiresStartupMetrics: requiresStartupMetrics,
         isFunctionApplyUsed: isFunctionApplyUsed,
         isMirrorsUsed: isMirrorsUsed,
         isNoSuchMethodUsed: isNoSuchMethodUsed,
@@ -399,6 +414,7 @@
     sink.writeBool(needToInitializeIsolateAffinityTag);
     sink.writeBool(needToInitializeDispatchProperty);
     sink.writeBool(requiresPreamble);
+    sink.writeBool(requiresStartupMetrics);
     sink.writeBool(isFunctionApplyUsed);
     sink.writeBool(isMirrorsUsed);
     sink.writeBool(isNoSuchMethodUsed);
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index c57ab1c..a51c0d0 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -179,8 +179,9 @@
           break;
         case TypeUseKind.TYPE_LITERAL:
           _customElementsResolutionAnalysis.registerTypeLiteral(type);
-          var typeWithoutNullability = type.withoutNullability;
-          if (typeWithoutNullability is TypeVariableType) {
+          type.forEachTypeVariable((TypeVariableType variable) {
+            TypeVariableType typeWithoutNullability =
+                variable.withoutNullability;
             Entity typeDeclaration =
                 typeWithoutNullability.element.typeDeclaration;
             if (typeDeclaration is ClassEntity) {
@@ -194,7 +195,7 @@
                   typeDeclaration);
             }
             registerImpact(_impacts.typeVariableExpression);
-          }
+          });
           hasTypeLiteral = true;
           break;
         case TypeUseKind.RTI_VALUE:
diff --git a/pkg/compiler/lib/src/js_backend/specialized_checks.dart b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
index 41e8ea7..431ebe7 100644
--- a/pkg/compiler/lib/src/js_backend/specialized_checks.dart
+++ b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common_elements.dart' show ElementEnvironment, JCommonElements;
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js_backend/interceptor_data.dart' show InterceptorData;
diff --git a/pkg/compiler/lib/src/js_backend/type_reference.dart b/pkg/compiler/lib/src/js_backend/type_reference.dart
index a845b95..eca01c8 100644
--- a/pkg/compiler/lib/src/js_backend/type_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/type_reference.dart
@@ -663,9 +663,7 @@
 
   @override
   void visitTypeVariableType(covariant TypeVariableType type, DartType parent) {
-    if (parent != type.element.typeDeclaration) {
-      _identifier(type.element.typeDeclaration.name);
-    }
+    _identifier(type.element.typeDeclaration.name);
     _identifier(type.element.name);
   }
 
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 0a0a8f7..2337b35 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -9,7 +9,7 @@
 import '../common/tasks.dart' show CompilerTask;
 import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart' show OutputUnit;
+import '../deferred_load/output_unit.dart' show OutputUnit;
 import '../elements/entities.dart';
 import '../js/js.dart' as jsAst;
 import '../js_backend/backend.dart' show CodegenInputs;
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index c969c26..2913bbe 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -14,8 +14,8 @@
 import 'code_emitter_task.dart' show Emitter;
 
 class MainCallStubGenerator {
-  static jsAst.Statement generateInvokeMain(
-      CommonElements commonElements, Emitter emitter, FunctionEntity main) {
+  static jsAst.Statement generateInvokeMain(CommonElements commonElements,
+      Emitter emitter, FunctionEntity main, bool requiresStartupMetrics) {
     jsAst.Expression mainAccess = emitter.staticFunctionAccess(main);
     jsAst.Expression currentScriptAccess =
         emitter.generateEmbeddedGlobalAccess(embeddedNames.CURRENT_SCRIPT);
@@ -90,6 +90,10 @@
         }
       })(function(currentScript) {
         #currentScript = currentScript;
+
+        if (#startupMetrics) {
+          init.#startupMetricsEmbeddedGlobal.add('callMainMs');
+        }
         var callMain = #mainCallClosure;
         if (typeof dartMainRunner === "function") {
           dartMainRunner(callMain, []);
@@ -98,7 +102,9 @@
         }
       })''', {
       'currentScript': currentScriptAccess,
-      'mainCallClosure': mainCallClosure
+      'mainCallClosure': mainCallClosure,
+      'startupMetrics': requiresStartupMetrics,
+      'startupMetricsEmbeddedGlobal': embeddedNames.STARTUP_METRICS,
     });
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
index 6e1cfaa..fafbbc7 100644
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
@@ -7,7 +7,7 @@
 import 'package:js_ast/src/precedence.dart' as js_precedence;
 
 import '../common.dart';
-import '../deferred_load/deferred_load.dart' show OutputUnit;
+import '../deferred_load/output_unit.dart' show OutputUnit;
 
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 147a80c..19617a0 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -6,7 +6,7 @@
 
 import '../common_elements.dart';
 import '../constants/values.dart' show ConstantValue;
-import '../deferred_load/deferred_load.dart' show OutputUnit;
+import '../deferred_load/output_unit.dart' show OutputUnit;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as js show Expression, Name, Statement, TokenFinalizer;
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index f11fd8b..d993bf2 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -9,7 +9,7 @@
 import '../../constants/values.dart'
     show ConstantValue, InterceptorConstantValue;
 import '../../common_elements.dart' show JCommonElements, JElementEnvironment;
-import '../../deferred_load/deferred_load.dart'
+import '../../deferred_load/output_unit.dart'
     show deferredPartFileName, OutputUnit, OutputUnitData;
 import '../../elements/entities.dart';
 import '../../elements/types.dart';
@@ -294,8 +294,8 @@
   }
 
   js.Statement _buildInvokeMain() {
-    return MainCallStubGenerator.generateInvokeMain(
-        _commonElements, _task.emitter, _mainFunction);
+    return MainCallStubGenerator.generateInvokeMain(_commonElements,
+        _task.emitter, _mainFunction, _backendUsage.requiresStartupMetrics);
   }
 
   DeferredFragment _buildDeferredFragment(LibrariesMap librariesMap) {
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index d77743f..d8a9417 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -5,7 +5,7 @@
 library dart2js.js_emitter.runtime_type_generator;
 
 import '../common_elements.dart' show CommonElements;
-import '../deferred_load/deferred_load.dart' show OutputUnit, OutputUnitData;
+import '../deferred_load/output_unit.dart' show OutputUnit, OutputUnitData;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
index 3ca343dd..841e2a1 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
@@ -8,7 +8,7 @@
 import '../../common.dart';
 import '../../common/codegen.dart';
 import '../../constants/values.dart';
-import '../../deferred_load/deferred_load.dart' show OutputUnit;
+import '../../deferred_load/output_unit.dart' show OutputUnit;
 import '../../dump_info.dart';
 import '../../elements/entities.dart';
 import '../../io/source_information.dart';
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 7d3ea98..66717cc 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
@@ -35,6 +35,15 @@
 // reducing their size.
 const String _mainBoilerplate = '''
 (function dartProgram() {
+
+if (#startupMetrics) {
+  // Stash the metrics on the main unit IIFE.
+  // TODO(sra): When the JavaScript local renamer is more intelligent, we can
+  // simply use a local variable.
+  (dartProgram.$STARTUP_METRICS = ${ModelEmitter.startupMetricsGlobal})
+      .add("dartProgramMs");
+}
+
 // Copies the own properties from [from] to [to].
 function copyProperties(from, to) {
   var keys = Object.keys(from);
@@ -469,7 +478,7 @@
 
 // Invokes main (making sure that it records the 'current-script' value).
 #invokeMain;
-})()
+})();
 ''';
 
 /// An expression that returns `true` if `__proto__` can be assigned to stitch
@@ -720,6 +729,7 @@
       'staticStateDeclaration': DeferredHolderParameter(),
       'staticState': DeferredHolderParameter(),
       'holders': holderDeclaration,
+      'startupMetrics': _closedWorld.backendUsage.requiresStartupMetrics,
 
       // Tearoff parameters:
       'tpContainer': js.string(TearOffParametersPropertyNames.container),
@@ -1847,6 +1857,12 @@
                 r'    : "$ti"')
             : js.js(r'Symbol("$ti")')));
 
+    if (_closedWorld.backendUsage.requiresStartupMetrics) {
+      // Copy the metrics object that was stored on the main unit IIFE.
+      globals.add(js.Property(
+          js.string(STARTUP_METRICS), js.js('dartProgram.$STARTUP_METRICS')));
+    }
+
     js.ObjectInitializer globalsObject =
         js.ObjectInitializer(globals, isOneLiner: false);
 
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
index 58fc707..faac415 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
@@ -4,7 +4,7 @@
 
 import 'dart:collection';
 import '../../common_elements.dart' show ElementEnvironment;
-import '../../deferred_load/deferred_load.dart'
+import '../../deferred_load/output_unit.dart'
     show ImportDescription, OutputUnit, OutputUnitData, deferredPartFileName;
 import '../../elements/entities.dart';
 import '../../js/js.dart' as js;
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index f905d82..9f05395 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -25,6 +25,7 @@
         NATIVE_SUPERCLASS_TAG_NAME,
         RTI_UNIVERSE,
         RtiUniverseFieldNames,
+        STARTUP_METRICS,
         TearOffParametersPropertyNames,
         TYPE_TO_INTERCEPTOR_MAP,
         TYPES;
@@ -37,7 +38,7 @@
 import '../../constants/values.dart'
     show ConstantValue, FunctionConstantValue, LateSentinelConstantValue;
 import '../../common_elements.dart' show CommonElements, JElementEnvironment;
-import '../../deferred_load/deferred_load.dart' show OutputUnit;
+import '../../deferred_load/output_unit.dart' show OutputUnit;
 import '../../dump_info.dart';
 import '../../elements/entities.dart';
 import '../../elements/types.dart';
@@ -136,6 +137,8 @@
   static const String deferredInitializersGlobal =
       r"$__dart_deferred_initializers__";
 
+  static const String startupMetricsGlobal = r'$__dart_startupMetrics';
+
   static const String partExtension = "part";
   static const String deferredExtension = "part.js";
 
@@ -372,6 +375,32 @@
         {'deferredInitializers': deferredInitializersGlobal});
   }
 
+  js.Statement buildStartupMetrics() {
+    // We want the code that initializes the startup metrics to execute as early
+    // as possible, so it is placed ahead of the main program IIFE instead of,
+    // e.g. as a parameter of the IIFE. It is OK to use a top-level variable,
+    // since the IIFE immediately reads the variable.
+    return js.js.statement('''
+var ${startupMetricsGlobal} =
+(function(){
+  // The timestamp metrics use `performance.now()`. We feature-detect and
+  // fall back on `Date.now()` for JavaScript run in a non-browser evironment.
+  var _performance =
+      (typeof performance == "object" &&
+       performance != null &&
+       typeof performance.now == "function")
+          ? performance
+          : Date;
+  var metrics = {
+    a: [],
+    now: function() { return _performance.now() },
+    add: function(name) { this.a.push(name, this.now()); }
+  };
+  metrics.add('firstMs');
+  return metrics;
+})();''');
+  }
+
   // Writes the given [fragment]'s [code] into a file.
   //
   // Updates the shared [outputBuffers] field with the output.
@@ -395,6 +424,8 @@
       buildGeneratedBy(),
       js.Comment(HOOKS_API_USAGE),
       if (isSplit) buildDeferredInitializerGlobal(),
+      if (_closedWorld.backendUsage.requiresStartupMetrics)
+        buildStartupMetrics(),
       code
     ]);
 
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 a2f7118..22d4a61 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -17,7 +17,7 @@
 import '../common/names.dart';
 import '../common_elements.dart';
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart' as utils;
 import '../elements/indexed.dart';
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index c24a46b..0e57dd9 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -13,7 +13,7 @@
 import '../common/work.dart';
 import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../compiler.dart';
-import '../deferred_load/deferred_load.dart' hide WorkItem;
+import '../deferred_load/output_unit.dart';
 import '../dump_info.dart';
 import '../elements/entities.dart';
 import '../enqueue.dart';
diff --git a/pkg/compiler/lib/src/js_model/js_world.dart b/pkg/compiler/lib/src/js_model/js_world.dart
index f2c3c08..e5956fd 100644
--- a/pkg/compiler/lib/src/js_model/js_world.dart
+++ b/pkg/compiler/lib/src/js_model/js_world.dart
@@ -9,7 +9,7 @@
 import '../common.dart';
 import '../common/names.dart';
 import '../common_elements.dart' show JCommonElements, JElementEnvironment;
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart' as utils;
 import '../elements/names.dart';
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index 087d57a..a5ad110 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -9,7 +9,7 @@
 import '../common_elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
 import '../elements/names.dart';
@@ -256,7 +256,7 @@
           map.toBackendType(runtimeTypeUse.argumentType));
     }).toSet();
 
-    return new BackendUsageImpl(
+    return BackendUsageImpl(
         globalFunctionDependencies: globalFunctionDependencies,
         globalClassDependencies: globalClassDependencies,
         helperFunctionsUsed: helperFunctionsUsed,
@@ -266,6 +266,7 @@
         needToInitializeDispatchProperty:
             backendUsage.needToInitializeDispatchProperty,
         requiresPreamble: backendUsage.requiresPreamble,
+        requiresStartupMetrics: backendUsage.requiresStartupMetrics,
         runtimeTypeUses: runtimeTypeUses,
         isFunctionApplyUsed: backendUsage.isFunctionApplyUsed,
         isMirrorsUsed: backendUsage.isMirrorsUsed,
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 74ad9f6..4510755 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -21,9 +21,11 @@
 
 import '../options.dart';
 import 'invocation_mirror_constants.dart';
+import 'transformations/clone_mixin_methods_with_super.dart' as transformMixins
+    show transformLibraries;
 import 'transformations/lowering.dart' as lowering show transformLibraries;
 
-const Iterable<String> _allowedDartSchemePaths = const <String>[
+const Iterable<String> _allowedDartSchemePaths = [
   'async',
   'html',
   'html_common',
@@ -105,7 +107,7 @@
   bool get supportsExplicitGetterCalls => false;
 
   @override
-  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.none;
+  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.all;
 
   @override
   List<String> get extraRequiredLibraries => _requiredLibraries[name]!;
@@ -131,7 +133,9 @@
   @override
   bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) =>
       super.allowPlatformPrivateLibraryAccess(importer, imported) ||
-      maybeEnableNative(importer);
+      maybeEnableNative(importer) ||
+      (importer.scheme == 'package' &&
+          importer.path.startsWith('dart2js_runtime_metrics/'));
 
   @override
   bool enableNative(Uri uri) => maybeEnableNative(uri);
@@ -167,6 +171,8 @@
     }
     lowering.transformLibraries(libraries, coreTypes, hierarchy, options);
     logger?.call("Lowering transformations performed");
+    transformMixins.transformLibraries(libraries);
+    logger?.call("Mixin transformations performed");
   }
 
   @override
@@ -234,7 +240,8 @@
 // TODO(sigmund): this "extraRequiredLibraries" needs to be removed...
 // compile-platform should just specify which libraries to compile instead.
 const _requiredLibraries = const <String, List<String>>{
-  'dart2js': const <String>[
+  'dart2js': [
+    'dart:_dart2js_runtime_metrics',
     'dart:_foreign_helper',
     'dart:_interceptors',
     'dart:_internal',
@@ -257,7 +264,8 @@
     'dart:web_gl',
     'dart:web_sql',
   ],
-  'dart2js_server': const <String>[
+  'dart2js_server': [
+    'dart:_dart2js_runtime_metrics',
     'dart:_foreign_helper',
     'dart:_interceptors',
     'dart:_internal',
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 7474592..8b0b096 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -8,8 +8,6 @@
     show isRedirectingFactory, isRedirectingFactoryField;
 
 import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/clone.dart';
-import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart' as ir;
 import 'package:collection/collection.dart' show mergeSort; // a stable sort.
 
@@ -403,47 +401,9 @@
     int mixinMemberCount = 0;
 
     if (cls.mixedInClass != null) {
-      Map<ir.Name, ir.Procedure> existingNonSetters;
-      Map<ir.Name, ir.Procedure> existingSetters;
-
-      void ensureExistingProcedureMaps() {
-        if (existingNonSetters == null) {
-          existingNonSetters = {};
-          existingSetters = {};
-          for (ir.Procedure procedure in cls.procedures) {
-            if (procedure.kind == ir.ProcedureKind.Setter) {
-              existingSetters[procedure.name] = procedure;
-            } else {
-              existingNonSetters[procedure.name] = procedure;
-            }
-          }
-        }
-      }
-
-      CloneVisitorWithMembers cloneVisitor;
       for (ir.Field field in cls.mixedInClass.mixin.fields) {
         if (field.containsSuperCalls) {
           _isMixinApplicationWithMembers = true;
-          cloneVisitor ??= new MixinApplicationCloner(cls,
-              typeSubstitution: getSubstitutionMap(cls.mixedInType));
-          // TODO(jensj): Provide a "referenceFrom" if we need to support
-          // the incremental compiler.
-          ensureExistingProcedureMaps();
-          ir.Procedure existingGetter = existingNonSetters[field.name];
-          ir.Procedure existingSetter = existingSetters[field.name];
-          cls.addField(cloneVisitor.cloneField(
-              field, existingGetter?.reference, existingSetter?.reference));
-          // TODO(johnniwinther): We need to unbind the canonical names before
-          // serializing these references since the canonical names refer to
-          // @getters and @setters instead of @fields and @fields=. This will
-          // not be needed if stop using @fields/@fields= in favor of
-          // @getters/@setters in general.
-          if (existingGetter != null) {
-            cls.procedures.remove(existingGetter);
-          }
-          if (existingSetter != null) {
-            cls.procedures.remove(existingSetter);
-          }
           continue;
         }
         addField(field, includeStatic: false);
@@ -451,20 +411,6 @@
       for (ir.Procedure procedure in cls.mixedInClass.mixin.procedures) {
         if (procedure.containsSuperCalls) {
           _isMixinApplicationWithMembers = true;
-          cloneVisitor ??= new MixinApplicationCloner(cls,
-              typeSubstitution: getSubstitutionMap(cls.mixedInType));
-          // TODO(jensj): Provide a "referenceFrom" if we need to support
-          // the incremental compiler.
-          ensureExistingProcedureMaps();
-          ir.Procedure existingProcedure =
-              procedure.kind == ir.ProcedureKind.Setter
-                  ? existingSetters[procedure.name]
-                  : existingNonSetters[procedure.name];
-          if (existingProcedure != null) {
-            cls.procedures.remove(existingProcedure);
-          }
-          cls.addProcedure(cloneVisitor.cloneProcedure(
-              procedure, existingProcedure?.reference));
           continue;
         }
         addProcedure(procedure,
diff --git a/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
new file mode 100644
index 0000000..dc7ded8
--- /dev/null
+++ b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
@@ -0,0 +1,93 @@
+// 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.12
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/type_algebra.dart';
+
+/// Transforms the libraries in [libraries] by cloning any mixed in methods that
+/// use super.
+void transformLibraries(List<Library> libraries) {
+  _CloneMixinMethodsWithSuper.transform(libraries);
+}
+
+class _CloneMixinMethodsWithSuper {
+  /// Transform the given new [libraries].  It is expected that all other
+  /// libraries have already been transformed.
+  static void transform(List<Library> libraries) {
+    // Clone any mixed in methods that uses super.
+    var processedClasses = new Set<Class>();
+    for (var library in libraries) {
+      for (var cls in library.classes) {
+        if (processedClasses.add(cls)) {
+          transformClass(cls);
+        }
+      }
+    }
+  }
+
+  /// Transforms a given class by cloning any mixed in methods that use super.
+  static void transformClass(Class cls) {
+    var mixedInClass = cls.mixedInClass;
+    if (mixedInClass == null) return;
+    var mixedInType = cls.mixedInType!;
+    bool hasProcedureMaps = false;
+    Map<Name, Procedure> existingNonSetters = {};
+    Map<Name, Procedure> existingSetters = {};
+
+    void ensureExistingProcedureMaps() {
+      if (hasProcedureMaps) return;
+      for (Procedure procedure in cls.procedures) {
+        if (procedure.kind == ProcedureKind.Setter) {
+          existingSetters[procedure.name] = procedure;
+        } else {
+          existingNonSetters[procedure.name] = procedure;
+        }
+      }
+      hasProcedureMaps = true;
+    }
+
+    CloneVisitorWithMembers? cloneVisitor;
+    for (var field in mixedInClass.mixin.fields) {
+      if (field.containsSuperCalls) {
+        cloneVisitor ??= MixinApplicationCloner(cls,
+            typeSubstitution: getSubstitutionMap(mixedInType));
+        // TODO(jensj): Provide a "referenceFrom" if we need to support
+        // the incremental compiler.
+        ensureExistingProcedureMaps();
+        Procedure? existingGetter = existingNonSetters[field.name];
+        Procedure? existingSetter = existingSetters[field.name];
+        cls.addField(cloneVisitor.cloneField(
+            field, existingGetter?.reference, existingSetter?.reference));
+        if (existingGetter != null) {
+          cls.procedures.remove(existingGetter);
+        }
+        if (existingSetter != null) {
+          cls.procedures.remove(existingSetter);
+        }
+        continue;
+      }
+    }
+    for (var procedure in mixedInClass.mixin.procedures) {
+      if (procedure.containsSuperCalls) {
+        cloneVisitor ??= MixinApplicationCloner(cls,
+            typeSubstitution: getSubstitutionMap(mixedInType));
+        // TODO(jensj): Provide a "referenceFrom" if we need to support
+        // the incremental compiler.
+        ensureExistingProcedureMaps();
+        Procedure? existingProcedure = procedure.kind == ProcedureKind.Setter
+            ? existingSetters[procedure.name]
+            : existingNonSetters[procedure.name];
+        if (existingProcedure != null) {
+          cls.procedures.remove(existingProcedure);
+        }
+        cls.addProcedure(cloneVisitor.cloneProcedure(
+            procedure, existingProcedure?.reference));
+        continue;
+      }
+    }
+  }
+}
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 0457090..788d79e 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -14,8 +14,8 @@
 import '../universe/side_effects.dart' show SideEffects;
 import 'js.dart';
 
-typedef dynamic /*DartType|SpecialType*/ TypeLookup(String typeString,
-    {bool required});
+typedef TypeLookup = dynamic /*DartType|SpecialType*/
+    Function(String typeString, {bool required});
 
 /// This class is a temporary work-around until we get a more powerful DartType.
 class SpecialType {
@@ -23,7 +23,7 @@
   const SpecialType._(this.name);
 
   /// The type Object, but no subtypes:
-  static const JsObject = const SpecialType._('=Object');
+  static const JsObject = SpecialType._('=Object');
 
   @override
   int get hashCode => name.hashCode;
@@ -35,7 +35,7 @@
     if (name == '=Object') {
       return JsObject;
     } else {
-      throw new UnsupportedError("Unknown SpecialType '$name'.");
+      throw UnsupportedError("Unknown SpecialType '$name'.");
     }
   }
 }
@@ -189,7 +189,7 @@
   static NativeBehavior get CHANGES_OTHER => NativeBehavior._makeChangesOther();
   static NativeBehavior get DEPENDS_OTHER => NativeBehavior._makeDependsOther();
 
-  NativeBehavior() : sideEffects = new SideEffects.empty();
+  NativeBehavior() : sideEffects = SideEffects.empty();
 
   NativeBehavior.internal(this.sideEffects);
 
@@ -211,13 +211,13 @@
     List typesReturned = readTypes();
     List typesInstantiated = readTypes();
     String codeTemplateText = source.readStringOrNull();
-    SideEffects sideEffects = new SideEffects.readFromDataSource(source);
+    SideEffects sideEffects = SideEffects.readFromDataSource(source);
     int throwBehavior = source.readInt();
     bool isAllocation = source.readBool();
     bool useGvn = source.readBool();
     source.end(tag);
 
-    NativeBehavior behavior = new NativeBehavior.internal(sideEffects);
+    NativeBehavior behavior = NativeBehavior.internal(sideEffects);
     behavior.typesReturned.addAll(typesReturned);
     behavior.typesInstantiated.addAll(typesInstantiated);
     if (codeTemplateText != null) {
@@ -274,8 +274,8 @@
         ')';
   }
 
-  static NativeBehavior _makePure({bool isAllocation: false}) {
-    NativeBehavior behavior = new NativeBehavior();
+  static NativeBehavior _makePure({bool isAllocation = false}) {
+    NativeBehavior behavior = NativeBehavior();
     behavior.sideEffects.clearAllDependencies();
     behavior.sideEffects.clearAllSideEffects();
     behavior.throwBehavior = NativeThrowBehavior.NEVER;
@@ -384,7 +384,7 @@
           spannable, MessageKind.GENERIC, {'text': message});
     }
 
-    const List<String> knownTags = const [
+    const List<String> knownTags = [
       'creates',
       'returns',
       'depends',
@@ -538,7 +538,7 @@
       return null;
     }
 
-    SideEffects sideEffects = new SideEffects();
+    SideEffects sideEffects = SideEffects();
     if (effects == "none") {
       sideEffects.clearAllSideEffects();
     } else if (effects == "all") {
@@ -609,7 +609,7 @@
     //  'Type1|Type2'.  A union type.
     //  '=Object'.      A JavaScript Object, no subtype.
 
-    NativeBehavior behavior = new NativeBehavior();
+    NativeBehavior behavior = NativeBehavior();
 
     behavior.codeTemplateText = codeString;
     behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText);
@@ -647,12 +647,11 @@
         nullType: commonElements.nullType);
 
     if (!sideEffectsAreEncodedInSpecString) {
-      new SideEffectsVisitor(behavior.sideEffects)
-          .visit(behavior.codeTemplate.ast);
+      SideEffectsVisitor(behavior.sideEffects).visit(behavior.codeTemplate.ast);
     }
     if (!throwBehaviorFromSpecString) {
       behavior.throwBehavior =
-          new ThrowBehaviorVisitor().analyze(behavior.codeTemplate.ast);
+          ThrowBehaviorVisitor().analyze(behavior.codeTemplate.ast);
     }
 
     return behavior;
@@ -686,8 +685,8 @@
       Spannable spannable,
       DiagnosticReporter reporter,
       CommonElements commonElements) {
-    NativeBehavior behavior = new NativeBehavior();
-    behavior.sideEffects.setTo(new SideEffects());
+    NativeBehavior behavior = NativeBehavior();
+    behavior.sideEffects.setTo(SideEffects());
     _fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
         behavior, spannable, specString, lookupType, reporter, commonElements);
     return behavior;
@@ -699,11 +698,11 @@
       Spannable spannable,
       DiagnosticReporter reporter,
       CommonElements commonElements) {
-    NativeBehavior behavior = new NativeBehavior();
+    NativeBehavior behavior = NativeBehavior();
     // TODO(sra): Allow the use site to override these defaults.
     // Embedded globals are usually pre-computed data structures or JavaScript
     // functions that never change.
-    behavior.sideEffects.setTo(new SideEffects.empty());
+    behavior.sideEffects.setTo(SideEffects.empty());
     behavior.throwBehavior = NativeThrowBehavior.NEVER;
     _fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
         behavior, spannable, specString, lookupType, reporter, commonElements,
@@ -857,7 +856,7 @@
       Iterable<String> returnsAnnotations,
       TypeLookup lookupType,
       {bool isJsInterop}) {
-    _behavior = new NativeBehavior();
+    _behavior = NativeBehavior();
     // TODO(sigmund,sra): consider doing something better for numeric types.
     _addReturnType(!isJsInterop ? type : commonElements.dynamicType);
     _capture(type, isJsInterop);
@@ -868,7 +867,7 @@
   }
 
   NativeBehavior buildFieldStoreBehavior(DartType type) {
-    _behavior = new NativeBehavior();
+    _behavior = NativeBehavior();
     _escape(type, false);
     // We don't override the default behaviour - the annotations apply to
     // loading the field.
@@ -882,7 +881,7 @@
       Iterable<String> returnsAnnotations,
       TypeLookup lookupType,
       {bool isJsInterop}) {
-    _behavior = new NativeBehavior();
+    _behavior = NativeBehavior();
     DartType returnType = type.returnType;
     // Note: For dart:html and other internal libraries we maintain, we can
     // trust the return type and use it to limit what we enqueue. We have to
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index e08baad..9f97703 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -37,8 +37,8 @@
 }
 
 abstract class NativeEnqueuerBase implements NativeEnqueuer {
-  final Set<ClassEntity> _registeredClasses = new Set<ClassEntity>();
-  final Set<ClassEntity> _unusedClasses = new Set<ClassEntity>();
+  final Set<ClassEntity> _registeredClasses = Set<ClassEntity>();
+  final Set<ClassEntity> _unusedClasses = Set<ClassEntity>();
 
   @override
   bool get hasInstantiatedNativeClasses => !_registeredClasses.isEmpty;
@@ -75,7 +75,7 @@
         continue;
       }
       impactBuilder.registerTypeUse(
-          new TypeUse.nativeInstantiation(_elementEnvironment.getRawType(cls)));
+          TypeUse.nativeInstantiation(_elementEnvironment.getRawType(cls)));
     }
   }
 
@@ -88,11 +88,11 @@
   void _processNativeBehavior(
       WorldImpactBuilder impactBuilder, NativeBehavior behavior, cause) {
     void registerInstantiation(InterfaceType type) {
-      impactBuilder.registerTypeUse(new TypeUse.nativeInstantiation(type));
+      impactBuilder.registerTypeUse(TypeUse.nativeInstantiation(type));
     }
 
     int unusedBefore = _unusedClasses.length;
-    Set<ClassEntity> matchingClasses = new Set<ClassEntity>();
+    Set<ClassEntity> matchingClasses = Set<ClassEntity>();
     for (var type in behavior.typesInstantiated) {
       if (type is SpecialType) {
         if (type == SpecialType.JsObject) {
@@ -182,7 +182,7 @@
 
   /// The set of all native classes.  Each native class is in [nativeClasses]
   /// and exactly one of [unusedClasses] and [registeredClasses].
-  final Set<ClassEntity> _nativeClasses = new Set<ClassEntity>();
+  final Set<ClassEntity> _nativeClasses = Set<ClassEntity>();
 
   NativeResolutionEnqueuer(
       CompilerOptions options,
@@ -200,7 +200,7 @@
 
   @override
   WorldImpact processNativeClasses(Iterable<Uri> libraries) {
-    WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
+    WorldImpactBuilderImpl impactBuilder = WorldImpactBuilderImpl();
     Iterable<ClassEntity> nativeClasses =
         _nativeClassFinder.computeNativeClasses(libraries);
     _nativeClasses.addAll(nativeClasses);
@@ -224,7 +224,7 @@
   final Iterable<ClassEntity> _nativeClasses;
   final NativeData _nativeData;
 
-  final Set<ClassEntity> _doneAddSubtypes = new Set<ClassEntity>();
+  final Set<ClassEntity> _doneAddSubtypes = Set<ClassEntity>();
 
   NativeCodegenEnqueuer(
       CompilerOptions options,
@@ -238,7 +238,7 @@
 
   @override
   WorldImpact processNativeClasses(Iterable<Uri> libraries) {
-    WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
+    WorldImpactBuilderImpl impactBuilder = WorldImpactBuilderImpl();
     _unusedClasses.addAll(_nativeClasses);
 
     if (!enableLiveTypeAnalysis) {
@@ -246,7 +246,7 @@
     }
 
     // HACK HACK - add all the resolved classes.
-    Set<ClassEntity> matchingClasses = new Set<ClassEntity>();
+    Set<ClassEntity> matchingClasses = Set<ClassEntity>();
     for (ClassEntity classElement in _nativeClasses) {
       if (_unusedClasses.contains(classElement)) {
         matchingClasses.add(classElement);
diff --git a/pkg/compiler/lib/src/native/js.dart b/pkg/compiler/lib/src/native/js.dart
index e984dc6..166fc6a 100644
--- a/pkg/compiler/lib/src/native/js.dart
+++ b/pkg/compiler/lib/src/native/js.dart
@@ -10,7 +10,7 @@
   HasCapturedPlaceholders._();
 
   static bool check(js.Node node) {
-    HasCapturedPlaceholders visitor = new HasCapturedPlaceholders._();
+    HasCapturedPlaceholders visitor = HasCapturedPlaceholders._();
     node.accept(visitor);
     return visitor.found;
   }
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index 10b0f3f..b20f6d8 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -28,13 +28,13 @@
   final KElementEnvironment _elementEnvironment;
   final NativeBasicData _nativeBasicData;
 
-  Map<String, ClassEntity> _tagOwner = new Map<String, ClassEntity>();
+  Map<String, ClassEntity> _tagOwner = Map<String, ClassEntity>();
 
   BaseNativeClassFinder(this._elementEnvironment, this._nativeBasicData);
 
   @override
   Iterable<ClassEntity> computeNativeClasses(Iterable<Uri> libraries) {
-    Set<ClassEntity> nativeClasses = new Set<ClassEntity>();
+    Set<ClassEntity> nativeClasses = Set<ClassEntity>();
     libraries.forEach((uri) => _processNativeClassesInLibrary(
         _elementEnvironment.lookupLibrary(uri), nativeClasses));
     _processSubclassesOfNativeClasses(libraries, nativeClasses);
@@ -84,7 +84,7 @@
   /// [nativeClasses].
   void _processSubclassesOfNativeClasses(
       Iterable<Uri> libraries, Set<ClassEntity> nativeClasses) {
-    Set<ClassEntity> nativeClassesAndSubclasses = new Set<ClassEntity>();
+    Set<ClassEntity> nativeClassesAndSubclasses = Set<ClassEntity>();
     // Collect potential subclasses, e.g.
     //
     //     class B extends foo.A {}
@@ -100,7 +100,7 @@
         String extendsName = _findExtendsNameOfClass(cls);
         if (extendsName != null) {
           Set<ClassEntity> potentialSubclasses = potentialExtends.putIfAbsent(
-              extendsName, () => new Set<ClassEntity>());
+              extendsName, () => Set<ClassEntity>());
           potentialSubclasses.add(cls);
         }
       });
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 3598ad3..8e07e11 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -268,6 +268,10 @@
   // Whether or not to stop compilation after splitting the
   bool stopAfterProgramSplit = false;
 
+  /// Reads a program split json file and applies the parsed constraints to
+  /// deferred loading.
+  Uri? readProgramSplit;
+
   /// Diagnostic option: If `true`, warnings cause the compilation to fail.
   @override
   bool fatalWarnings = false;
@@ -631,6 +635,8 @@
       ..showInternalProgress = _hasOption(options, Flags.progress)
       ..dillDependencies =
           _extractUriListOption(options, '${Flags.dillDependencies}')
+      ..readProgramSplit =
+          _extractUriOption(options, '${Flags.readProgramSplit}=')
       ..readDataUri = _extractUriOption(options, '${Flags.readData}=')
       ..writeDataUri = _extractUriOption(options, '${Flags.writeData}=')
       ..noClosedWorldInData = _hasOption(options, Flags.noClosedWorldInData)
diff --git a/pkg/compiler/lib/src/serialization/serialization.dart b/pkg/compiler/lib/src/serialization/serialization.dart
index 590efec..8e2cf4d 100644
--- a/pkg/compiler/lib/src/serialization/serialization.dart
+++ b/pkg/compiler/lib/src/serialization/serialization.dart
@@ -9,7 +9,7 @@
 import '../closure.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../diagnostics/source_span.dart';
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 9afc681..e74ad8a 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -12,7 +12,7 @@
 import '../common_elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../deferred_load/deferred_load.dart';
+import '../deferred_load/output_unit.dart';
 import '../dump_info.dart';
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
@@ -3307,27 +3307,18 @@
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildGet(node);
     ir.DartType type = node.type;
-    if (type is ir.InterfaceType ||
-        type is ir.DynamicType ||
-        type is ir.NeverType ||
-        type is ir.TypedefType ||
-        type is ir.FunctionType ||
-        type is ir.FutureOrType) {
+    DartType dartType = _elementMap.getDartType(type);
+    if (!dartType.containsTypeVariables) {
       ConstantValue constant =
           _elementMap.getConstantValue(_memberContextNode, node);
       stack.add(graph.addConstant(constant, closedWorld,
           sourceInformation: sourceInformation));
       return;
     }
-    assert(
-        type is ir.TypeParameterType,
-        failedAt(
-            CURRENT_ELEMENT_SPANNABLE, "Unexpected type literal ${node}."));
     // For other types (e.g. TypeParameterType, function types from expanded
     // typedefs), look-up or construct a reified type representation and convert
     // to a RuntimeType.
 
-    DartType dartType = _elementMap.getDartType(type);
     dartType = localsHandler.substInContext(dartType);
     HInstruction value = _typeBuilder.analyzeTypeArgument(
         dartType, sourceElement,
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 0abdba8..8cf8ed8 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -2644,14 +2644,15 @@
 
   @override
   visitThrow(HThrow node) {
+    SourceInformation sourceInformation = node.sourceInformation;
     if (node.isRethrow) {
       use(node.inputs[0]);
-      pushStatement(
-          new js.Throw(pop()).withSourceInformation(node.sourceInformation));
+      pushStatement(js.Throw(pop()).withSourceInformation(sourceInformation));
     } else {
-      generateThrowWithHelper(
-          _commonElements.wrapExceptionHelper, node.inputs[0],
-          sourceInformation: node.sourceInformation);
+      use(node.inputs[0]);
+      _pushCallStatic(
+          _commonElements.wrapExceptionHelper, [pop()], sourceInformation);
+      pushStatement(js.Throw(pop()).withSourceInformation(sourceInformation));
     }
   }
 
@@ -2683,94 +2684,141 @@
     // If the checks always succeeds, we would have removed the bounds check
     // completely.
     assert(node.staticChecks != HBoundsCheck.ALWAYS_TRUE);
-    if (node.staticChecks != HBoundsCheck.ALWAYS_FALSE) {
-      js.Expression under;
-      js.Expression over;
-      if (node.staticChecks != HBoundsCheck.ALWAYS_ABOVE_ZERO) {
-        use(node.index);
-        if (node.index.isInteger(_abstractValueDomain).isDefinitelyTrue) {
-          under = js.js("# < 0", pop());
-        } else {
-          js.Expression jsIndex = pop();
-          under = js.js("# >>> 0 !== #", [jsIndex, jsIndex]);
-        }
-      } else if (node.index
-          .isInteger(_abstractValueDomain)
-          .isPotentiallyFalse) {
-        checkInt(node.index, '!==');
-        under = pop();
-      }
-      if (node.staticChecks != HBoundsCheck.ALWAYS_BELOW_LENGTH) {
-        var index = node.index;
-        use(index);
-        js.Expression jsIndex = pop();
-        use(node.length);
-        over = new js.Binary(">=", jsIndex, pop());
-      }
-      assert(over != null || under != null);
-      js.Expression underOver = under == null
-          ? over
-          : over == null
-              ? under
-              : new js.Binary("||", under, over);
-      js.Statement thenBody = new js.Block.empty();
-      js.Block oldContainer = currentContainer;
-      currentContainer = thenBody;
-      generateThrowWithHelper(_commonElements.throwIndexOutOfRangeException,
+
+    if (node.staticChecks == HBoundsCheck.ALWAYS_FALSE) {
+      _pushThrowWithHelper(_commonElements.throwIndexOutOfRangeException,
           [node.array, node.reportedIndex],
           sourceInformation: node.sourceInformation);
-      currentContainer = oldContainer;
-      thenBody = unwrapStatement(thenBody);
-      pushStatement(new js.If.noElse(underOver, thenBody)
-          .withSourceInformation(node.sourceInformation));
-    } else {
-      generateThrowWithHelper(_commonElements.throwIndexOutOfRangeException,
-          [node.array, node.index]);
+      return;
     }
+
+    HInstruction index = node.index;
+
+    // Generate a test for out-of-bounds, either under or over the range.  NaN
+    // values can creep in, and comparisons on NaN are false, so
+    //
+    //     if (i < 0) throw ...
+    //
+    // will fail to throw if `i` is NaN. The test
+    //
+    //     if (!(i >= 0)) ...
+    //
+    // is 'NaN-safe'.
+
+    // TODO(sra): Better analysis of possible NaN input.
+    bool indexCanBeNaN = !_isDefinitelyNotNaN(index);
+
+    js.Expression under;
+    js.Expression over;
+
+    if (index.isInteger(_abstractValueDomain).isPotentiallyFalse) {
+      // Combined domain check and low bound check. `a >>> 0 !== a` is true for
+      // `null`, `undefined`, `NaN`, and non-integral number and any integral
+      // number outside the 32-bit unsigned range.
+      use(index);
+      js.Expression jsIndex = pop();
+      // This test is 'NaN-safe' since `a!==b` is the same as `!(a===b)`.
+      under = js.js("# >>> 0 !== #", [jsIndex, jsIndex]);
+      indexCanBeNaN = false;
+    } else if (node.staticChecks != HBoundsCheck.ALWAYS_ABOVE_ZERO) {
+      use(index);
+      // The index must be an `int`, otherwise we could have used the combined
+      // check above.
+      if (indexCanBeNaN) {
+        under = js.js('!(# >= 0)', pop());
+      } else {
+        under = js.js('# < 0', pop());
+      }
+    }
+
+    if (node.staticChecks != HBoundsCheck.ALWAYS_BELOW_LENGTH) {
+      use(index);
+      js.Expression jsIndex = pop();
+      use(node.length);
+      js.Expression jsLength = pop();
+      if (indexCanBeNaN) {
+        over = js.js('!(# < #)', [jsIndex, jsLength]);
+      } else {
+        over = js.js('# >= #', [jsIndex, jsLength]);
+      }
+    }
+
+    assert(over != null || under != null);
+    js.Expression underOver;
+    if (under == null) {
+      underOver = over;
+    } else if (over == null) {
+      underOver = under;
+    } else {
+      if (under is js.Prefix &&
+          under.op == '!' &&
+          over is js.Prefix &&
+          over.op == '!') {
+        // De Morgans law:  !(a) || !(b)  <->  !(a && b)
+        underOver = js.js('!(# && #)', [under.argument, over.argument]);
+      } else {
+        underOver = js.Binary('||', under, over);
+      }
+    }
+
+    // Generate the call to the 'throw' helper in a block in case it needs
+    // multiple statements.
+    js.Statement thenBody = js.Block.empty();
+    js.Block oldContainer = currentContainer;
+    currentContainer = thenBody;
+    _pushThrowWithHelper(_commonElements.throwIndexOutOfRangeException,
+        [node.array, node.reportedIndex],
+        sourceInformation: node.sourceInformation);
+    currentContainer = oldContainer;
+    thenBody = unwrapStatement(thenBody);
+    pushStatement(js.If.noElse(underOver, thenBody)
+        .withSourceInformation(node.sourceInformation));
   }
 
-  void generateThrowWithHelper(FunctionEntity helper, argument,
+  bool _isDefinitelyNotNaN(HInstruction node) {
+    if (node is HConstant) {
+      if (node.isInteger(_abstractValueDomain).isDefinitelyTrue) return true;
+      return false;
+    }
+
+    // TODO(sra): Use some form of dataflow. Starting from a small number you
+    // can add or subtract a small number any number of times and still have a
+    // finite number. Many operations, produce small numbers (some constants,
+    // HGetLength, HBitAnd). This could be used to determine that most loop
+    // indexes are finite and thus not NaN.
+
+    return false;
+  }
+
+  void _pushThrowWithHelper(FunctionEntity helper, List<HInstruction> inputs,
       {SourceInformation sourceInformation}) {
-    js.Expression jsHelper = _emitter.staticFunctionAccess(helper);
-    List arguments = <js.Expression>[];
-    if (argument is List) {
-      argument.forEach((instruction) {
-        use(instruction);
-        arguments.add(pop());
-      });
-    } else {
-      use(argument);
+    List<js.Expression> arguments = [];
+    for (final input in inputs) {
+      use(input);
       arguments.add(pop());
     }
-    _registry.registerStaticUse(new StaticUse.staticInvoke(
-        helper, new CallStructure.unnamed(arguments.length)));
-    js.Call value = new js.Call(jsHelper, arguments.toList(growable: false),
-        sourceInformation: sourceInformation);
+    _pushCallStatic(helper, arguments, sourceInformation);
     // BUG(4906): Using throw/return here adds to the size of the generated code
     // but it has the advantage of explicitly telling the JS engine that
     // this code path will terminate abruptly. Needs more work.
-    if (helper == _commonElements.wrapExceptionHelper) {
-      pushStatement(
-          new js.Throw(value).withSourceInformation(sourceInformation));
-    } else {
-      pushStatement(
-          new js.Return(value).withSourceInformation(sourceInformation));
-    }
+    pushStatement(js.Return(pop()).withSourceInformation(sourceInformation));
+  }
+
+  void _pushCallStatic(FunctionEntity target, List<js.Expression> arguments,
+      SourceInformation sourceInformation) {
+    _registry.registerStaticUse(StaticUse.staticInvoke(
+        target, CallStructure.unnamed(arguments.length)));
+    js.Expression jsTarget = _emitter.staticFunctionAccess(target);
+    js.Call call = js.Call(jsTarget, List.of(arguments, growable: false))
+        .withSourceInformation(sourceInformation);
+    push(call);
   }
 
   @override
   visitThrowExpression(HThrowExpression node) {
-    HInstruction argument = node.inputs[0];
-    use(argument);
-
-    FunctionEntity helper = _commonElements.throwExpressionHelper;
-    _registry.registerStaticUse(
-        new StaticUse.staticInvoke(helper, CallStructure.ONE_ARG));
-
-    js.Expression jsHelper = _emitter.staticFunctionAccess(helper);
-    js.Call value = new js.Call(jsHelper, [pop()])
-        .withSourceInformation(node.sourceInformation);
-    push(value);
+    use(node.inputs[0]);
+    _pushCallStatic(
+        _commonElements.throwExpressionHelper, [pop()], node.sourceInformation);
   }
 
   @override
@@ -2891,14 +2939,6 @@
         .withSourceInformation(node.sourceInformation));
   }
 
-  void checkInt(HInstruction input, String cmp) {
-    use(input);
-    js.Expression left = pop();
-    use(input);
-    js.Expression or0 = new js.Binary("|", pop(), new js.LiteralNumber("0"));
-    push(new js.Binary(cmp, left, or0));
-  }
-
   void checkTypeOf(HInstruction input, String cmp, String typeName,
       SourceInformation sourceInformation) {
     use(input);
@@ -2921,12 +2961,14 @@
   void visitPrimitiveCheck(HPrimitiveCheck node) {
     js.Expression test = _generateReceiverOrArgumentTypeTest(node);
     js.Block oldContainer = currentContainer;
-    js.Statement body = new js.Block.empty();
+    js.Statement body = js.Block.empty();
     currentContainer = body;
     if (node.isArgumentTypeCheck) {
-      generateThrowWithHelper(
-          _commonElements.throwIllegalArgumentException, node.checkedInput,
-          sourceInformation: node.sourceInformation);
+      use(node.checkedInput);
+      _pushCallStatic(_commonElements.throwIllegalArgumentException, [pop()],
+          node.sourceInformation);
+      pushStatement(
+          js.Return(pop()).withSourceInformation(node.sourceInformation));
     } else if (node.isReceiverTypeCheck) {
       use(node.checkedInput);
       js.Name methodName =
@@ -2934,12 +2976,12 @@
       js.Expression call = js.propertyCall(
           pop(), methodName, []).withSourceInformation(node.sourceInformation);
       pushStatement(
-          new js.Return(call).withSourceInformation(node.sourceInformation));
+          js.Return(call).withSourceInformation(node.sourceInformation));
     }
     currentContainer = oldContainer;
     body = unwrapStatement(body);
-    pushStatement(new js.If.noElse(test, body)
-        .withSourceInformation(node.sourceInformation));
+    pushStatement(
+        js.If.noElse(test, body).withSourceInformation(node.sourceInformation));
   }
 
   js.Expression _generateReceiverOrArgumentTypeTest(HPrimitiveCheck node) {
@@ -2972,9 +3014,8 @@
     _registry.registerStaticUse(staticUse);
     use(node.checkedInput);
     List<js.Expression> arguments = [pop()];
-    push(
-        new js.Call(_emitter.staticFunctionAccess(staticUse.element), arguments)
-            .withSourceInformation(node.sourceInformation));
+    push(js.Call(_emitter.staticFunctionAccess(staticUse.element), arguments)
+        .withSourceInformation(node.sourceInformation));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index f90ed78..9faff8ee 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -1566,7 +1566,7 @@
         return assignField();
       }
       // TODO(sra): Implement inlining of setters with checks for new rti. The
-      // check and field assignment for the setter should inlined if this is
+      // check and field assignment for the setter should be inlined if this is
       // the only call to the setter, or the current function already computes
       // the type of the field.
       node.needsCheck = true;
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index f0fa679..d25cbd8 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -370,8 +370,15 @@
     String target = "$receiver.$name";
     int offset = HInvoke.ARGUMENTS_OFFSET;
     List arguments = invoke.inputs.sublist(offset);
+    final attributes = {
+      if (invoke.isInvariant) 'Invariant',
+      if (invoke.isBoundsSafe) 'BoundSafe',
+    };
+    String attributesText = attributes.isEmpty ? '' : ' $attributes';
+
     return handleGenericInvoke(kind, target, arguments) +
-        "(${invoke.receiverType})";
+        "(${invoke.receiverType})" +
+        attributesText;
   }
 
   @override
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index 45603b8..7cae519 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -19,11 +19,11 @@
   /// data stream.
   static const String tag = 'call-structure';
 
-  static const CallStructure NO_ARGS = const CallStructure.unnamed(0);
-  static const CallStructure ONE_ARG = const CallStructure.unnamed(1);
-  static const CallStructure TWO_ARGS = const CallStructure.unnamed(2);
-  static const CallStructure THREE_ARGS = const CallStructure.unnamed(3);
-  static const CallStructure FOUR_ARGS = const CallStructure.unnamed(4);
+  static const CallStructure NO_ARGS = CallStructure.unnamed(0);
+  static const CallStructure ONE_ARG = CallStructure.unnamed(1);
+  static const CallStructure TWO_ARGS = CallStructure.unnamed(2);
+  static const CallStructure THREE_ARGS = CallStructure.unnamed(3);
+  static const CallStructure FOUR_ARGS = CallStructure.unnamed(4);
 
   /// The number of type arguments of the call.
   final int typeArgumentCount;
@@ -42,10 +42,9 @@
   factory CallStructure(int argumentCount,
       [List<String> namedArguments, int typeArgumentCount = 0]) {
     if (namedArguments == null || namedArguments.isEmpty) {
-      return new CallStructure.unnamed(argumentCount, typeArgumentCount);
+      return CallStructure.unnamed(argumentCount, typeArgumentCount);
     }
-    return new NamedCallStructure(
-        argumentCount, namedArguments, typeArgumentCount);
+    return NamedCallStructure(argumentCount, namedArguments, typeArgumentCount);
   }
 
   /// Deserializes a [CallStructure] object from [source].
@@ -55,7 +54,7 @@
     List<String> namedArguments = source.readStrings();
     int typeArgumentCount = source.readInt();
     source.end(tag);
-    return new CallStructure(argumentCount, namedArguments, typeArgumentCount);
+    return CallStructure(argumentCount, namedArguments, typeArgumentCount);
   }
 
   /// Serializes this [CallStructure] to [sink].
@@ -77,7 +76,7 @@
   CallStructure toNormalized() => this;
 
   CallStructure withTypeArgumentCount(int typeArgumentCount) =>
-      new CallStructure(argumentCount, namedArguments, typeArgumentCount);
+      CallStructure(argumentCount, namedArguments, typeArgumentCount);
 
   /// `true` if this call has named arguments.
   bool get isNamed => false;
@@ -93,11 +92,11 @@
 
   CallStructure get nonGeneric => typeArgumentCount == 0
       ? this
-      : new CallStructure(argumentCount, namedArguments);
+      : CallStructure(argumentCount, namedArguments);
 
   /// Short textual representation use for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('(');
     sb.write(positionalArgumentCount);
     if (namedArgumentCount > 0) {
@@ -110,7 +109,7 @@
 
   /// A description of the argument structure.
   String structureToString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('arity=$argumentCount');
     if (typeArgumentCount != 0) {
       sb.write(', types=$typeArgumentCount');
@@ -121,7 +120,7 @@
   @override
   String toString() => 'CallStructure(${structureToString()})';
 
-  Selector get callSelector => new Selector.call(Names.call, this);
+  Selector get callSelector => Selector.call(Names.call, this);
 
   bool match(CallStructure other) {
     if (identical(this, other)) return true;
@@ -234,7 +233,7 @@
   bool get isNormalized => namedArguments == _orderedNamedArguments;
 
   @override
-  CallStructure toNormalized() => new NamedCallStructure.internal(
+  CallStructure toNormalized() => NamedCallStructure.internal(
       argumentCount,
       getOrderedNamedArguments(),
       typeArgumentCount,
@@ -253,7 +252,7 @@
 
   @override
   String structureToString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('arity=$argumentCount, named=[${namedArguments.join(', ')}]');
     if (typeArgumentCount != 0) {
       sb.write(', types=$typeArgumentCount');
diff --git a/pkg/compiler/lib/src/universe/class_hierarchy.dart b/pkg/compiler/lib/src/universe/class_hierarchy.dart
index d4a17ee..6ea468a 100644
--- a/pkg/compiler/lib/src/universe/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/universe/class_hierarchy.dart
@@ -172,23 +172,22 @@
       DataSource source, CommonElements commonElements) {
     source.begin(tag);
     Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes =
-        new ClassHierarchyNodesMap();
+        ClassHierarchyNodesMap();
     int classCount = source.readInt();
     for (int i = 0; i < classCount; i++) {
-      ClassHierarchyNode node = new ClassHierarchyNode.readFromDataSource(
-          source, classHierarchyNodes);
+      ClassHierarchyNode node =
+          ClassHierarchyNode.readFromDataSource(source, classHierarchyNodes);
       classHierarchyNodes[node.cls] = node;
     }
     Map<ClassEntity, ClassSet> classSets = {};
     for (int i = 0; i < classCount; i++) {
       ClassSet classSet =
-          new ClassSet.readFromDataSource(source, classHierarchyNodes);
+          ClassSet.readFromDataSource(source, classHierarchyNodes);
       classSets[classSet.cls] = classSet;
     }
 
     source.end(tag);
-    return new ClassHierarchyImpl(
-        commonElements, classHierarchyNodes, classSets);
+    return ClassHierarchyImpl(commonElements, classHierarchyNodes, classSets);
   }
 
   @override
@@ -483,7 +482,7 @@
         }
         return IterationStep.CONTINUE;
       });
-      return new SubclassResult(classes);
+      return SubclassResult(classes);
     } else if (query2 == ClassQuery.SUBCLASS) {
       if (isSubtypeOf(cls2, cls1)) {
         // The subclasses of [cls2] are all subtypes of [cls1].
@@ -505,7 +504,7 @@
         }
         return IterationStep.CONTINUE;
       });
-      return new SubclassResult(classes);
+      return SubclassResult(classes);
     } else {
       if (cls1 == cls2 || isSubtypeOf(cls1, cls2)) {
         // The subtypes of [cls1] are contained within the subtypes of [cls2].
@@ -539,7 +538,7 @@
         }
         return IterationStep.CONTINUE;
       });
-      return new SubclassResult(classes);
+      return SubclassResult(classes);
     }
   }
 
@@ -555,7 +554,7 @@
 
   @override
   String dump([ClassEntity cls]) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     if (cls != null) {
       sb.write("Classes in the closed world related to $cls:\n");
     } else {
@@ -574,7 +573,7 @@
       <ClassEntity, ClassHierarchyNode>{};
   final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{};
   final Map<ClassEntity, Set<ClassEntity>> mixinUses =
-      new Map<ClassEntity, Set<ClassEntity>>();
+      Map<ClassEntity, Set<ClassEntity>>();
 
   final CommonElements _commonElements;
   final ClassQueries _classQueries;
@@ -587,7 +586,7 @@
         "ClassHierarchyNode/ClassSet mismatch: "
         "${_classHierarchyNodes} vs "
         "${_classSets}");
-    return new ClassHierarchyImpl(
+    return ClassHierarchyImpl(
         _commonElements, _classHierarchyNodes, _classSets);
   }
 
@@ -602,7 +601,7 @@
       if (superclass != null) {
         parentNode = _ensureClassHierarchyNode(superclass);
       }
-      return new ClassHierarchyNode(
+      return ClassHierarchyNode(
           parentNode, cls, _classQueries.getHierarchyDepth(cls));
     });
   }
@@ -610,7 +609,7 @@
   ClassSet _ensureClassSet(ClassEntity cls) {
     return _classSets.putIfAbsent(cls, () {
       ClassHierarchyNode node = _ensureClassHierarchyNode(cls);
-      ClassSet classSet = new ClassSet(node);
+      ClassSet classSet = ClassSet(node);
 
       for (InterfaceType type in _classQueries.getSupertypes(cls)) {
         // TODO(johnniwinther): Optimization: Avoid adding [cls] to
@@ -654,7 +653,8 @@
   }
 
   void updateClassHierarchyNodeForClass(ClassEntity cls,
-      {bool directlyInstantiated: false, bool abstractlyInstantiated: false}) {
+      {bool directlyInstantiated = false,
+      bool abstractlyInstantiated = false}) {
     ClassHierarchyNode node = _ensureClassSet(cls).node;
     _updateSuperClassHierarchyNodeForClass(node);
     if (directlyInstantiated) {
@@ -669,7 +669,7 @@
     // TODO(johnniwinther): Add map restricted to live classes.
     // We don't support patch classes as mixin.
     Set<ClassEntity> users =
-        mixinUses.putIfAbsent(mixin, () => new Set<ClassEntity>());
+        mixinUses.putIfAbsent(mixin, () => Set<ClassEntity>());
     users.add(mixinApplication);
   }
 
@@ -719,7 +719,7 @@
       ClassEntity memberHoldingClass, ClassEntity thisClass) {
     _InheritedInThisClassCache cache =
         _inheritedInThisClassCacheMap[memberHoldingClass] ??=
-            new _InheritedInThisClassCache();
+            _InheritedInThisClassCache();
     return cache.isInheritedInThisClassOf(this, memberHoldingClass, thisClass);
   }
 
@@ -727,7 +727,7 @@
 
   bool isInheritedInSubtypeOf(ClassEntity x, ClassEntity y) {
     _InheritedInSubtypeCache cache =
-        _inheritedInSubtypeCacheMap[x] ??= new _InheritedInSubtypeCache();
+        _inheritedInSubtypeCacheMap[x] ??= _InheritedInSubtypeCache();
     return cache.isInheritedInSubtypeOf(this, x, y);
   }
 }
@@ -764,7 +764,7 @@
         builder._classHierarchyNodes[memberHoldingClass];
 
     if (_inheritingClasses == null) {
-      _inheritingClasses = new Set<ClassEntity>();
+      _inheritingClasses = Set<ClassEntity>();
       _inheritingClasses.addAll(memberHoldingClassNode
           .subclassesByMask(ClassHierarchyNode.ALL, strict: false));
       for (ClassHierarchyNode mixinApplication
@@ -774,7 +774,7 @@
       }
     }
 
-    Set<ClassEntity> validatingSet = new Set<ClassEntity>();
+    Set<ClassEntity> validatingSet = Set<ClassEntity>();
 
     void processHierarchy(ClassHierarchyNode mixerNode) {
       for (ClassEntity inheritingClass in _inheritingClasses) {
@@ -804,7 +804,7 @@
       processHierarchy(mixinApplication);
     }
 
-    return new _LiveSet(validatingSet);
+    return _LiveSet(validatingSet);
   }
 }
 
@@ -839,7 +839,7 @@
         failedAt(
             x, "No ClassSet for $x (${x.runtimeType}): ${builder._classSets}"));
 
-    Set<ClassEntity> classes = new Set<ClassEntity>();
+    Set<ClassEntity> classes = Set<ClassEntity>();
 
     if (builder._isSubtypeOf(x, y)) {
       // [x] implements [y] itself, possible through supertypes.
@@ -865,7 +865,7 @@
       subclassImplements(mixinApplication, strict: false);
     }
 
-    return new _LiveSet(classes);
+    return _LiveSet(classes);
   }
 }
 
@@ -990,19 +990,19 @@
   const SubclassResult.internal(this.kind) : classes = null;
 
   static const SubclassResult EMPTY =
-      const SubclassResult.internal(SubclassResultKind.EMPTY);
+      SubclassResult.internal(SubclassResultKind.EMPTY);
   static const SubclassResult EXACT1 =
-      const SubclassResult.internal(SubclassResultKind.EXACT1);
+      SubclassResult.internal(SubclassResultKind.EXACT1);
   static const SubclassResult EXACT2 =
-      const SubclassResult.internal(SubclassResultKind.EXACT2);
+      SubclassResult.internal(SubclassResultKind.EXACT2);
   static const SubclassResult SUBCLASS1 =
-      const SubclassResult.internal(SubclassResultKind.SUBCLASS1);
+      SubclassResult.internal(SubclassResultKind.SUBCLASS1);
   static const SubclassResult SUBCLASS2 =
-      const SubclassResult.internal(SubclassResultKind.SUBCLASS2);
+      SubclassResult.internal(SubclassResultKind.SUBCLASS2);
   static const SubclassResult SUBTYPE1 =
-      const SubclassResult.internal(SubclassResultKind.SUBTYPE1);
+      SubclassResult.internal(SubclassResultKind.SUBTYPE1);
   static const SubclassResult SUBTYPE2 =
-      const SubclassResult.internal(SubclassResultKind.SUBTYPE2);
+      SubclassResult.internal(SubclassResultKind.SUBTYPE2);
 
   @override
   String toString() => 'SubclassResult($kind,classes=$classes)';
diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
index a2eaee0..3a3c138 100644
--- a/pkg/compiler/lib/src/universe/class_set.dart
+++ b/pkg/compiler/lib/src/universe/class_set.dart
@@ -53,7 +53,7 @@
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static final EnumSet<Instantiation> INSTANTIATED =
-      new EnumSet<Instantiation>.fromValues(const <Instantiation>[
+      EnumSet<Instantiation>.fromValues(const <Instantiation>[
     Instantiation.DIRECTLY_INSTANTIATED,
     Instantiation.INDIRECTLY_INSTANTIATED,
     Instantiation.ABSTRACTLY_INSTANTIATED,
@@ -63,7 +63,7 @@
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static final EnumSet<Instantiation> EXPLICITLY_INSTANTIATED =
-      new EnumSet<Instantiation>.fromValues(const <Instantiation>[
+      EnumSet<Instantiation>.fromValues(const <Instantiation>[
     Instantiation.DIRECTLY_INSTANTIATED,
     Instantiation.ABSTRACTLY_INSTANTIATED
   ], fixed: true);
@@ -72,17 +72,17 @@
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static final EnumSet<Instantiation> ALL =
-      new EnumSet<Instantiation>.fromValues(Instantiation.values, fixed: true);
+      EnumSet<Instantiation>.fromValues(Instantiation.values, fixed: true);
 
   /// Creates an enum set for selecting the returned classes in
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static EnumSet<Instantiation> createMask(
-      {bool includeDirectlyInstantiated: true,
-      bool includeIndirectlyInstantiated: true,
-      bool includeUninstantiated: true,
-      bool includeAbstractlyInstantiated: true}) {
-    EnumSet<Instantiation> mask = new EnumSet<Instantiation>();
+      {bool includeDirectlyInstantiated = true,
+      bool includeIndirectlyInstantiated = true,
+      bool includeUninstantiated = true,
+      bool includeAbstractlyInstantiated = true}) {
+    EnumSet<Instantiation> mask = EnumSet<Instantiation>();
     if (includeDirectlyInstantiated) {
       mask.add(Instantiation.DIRECTLY_INSTANTIATED);
     }
@@ -99,7 +99,7 @@
   }
 
   final ClassHierarchyNode parentNode;
-  final EnumSet<Instantiation> _mask = new EnumSet<Instantiation>.fromValues(
+  final EnumSet<Instantiation> _mask = EnumSet<Instantiation>.fromValues(
       const <Instantiation>[Instantiation.UNINSTANTIATED]);
   final IndexedClass cls;
 
@@ -228,7 +228,7 @@
     int hierarchyDepth = source.readInt();
     int instantiatedSubclassCount = source.readInt();
     source.end(tag);
-    return new ClassHierarchyNode(parentNode, cls, hierarchyDepth)
+    return ClassHierarchyNode(parentNode, cls, hierarchyDepth)
       .._instantiatedSubclassCount = instantiatedSubclassCount
       .._mask.value = maskValue;
   }
@@ -279,8 +279,8 @@
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
   Iterable<ClassEntity> subclassesByMask(EnumSet<Instantiation> mask,
-      {bool strict: false}) {
-    return new ClassHierarchyNodeIterable(this, mask, includeRoot: !strict);
+      {bool strict = false}) {
+    return ClassHierarchyNodeIterable(this, mask, includeRoot: !strict);
   }
 
   /// Applies [predicate] to each subclass of [cls] matching the criteria
@@ -291,7 +291,7 @@
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
   bool anySubclass(bool predicate(ClassEntity cls), EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     IterationStep wrapper(ClassEntity cls) {
       return predicate(cls) ? IterationStep.STOP : IterationStep.CONTINUE;
     }
@@ -314,7 +314,7 @@
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
   IterationStep forEachSubclass(ForEachFunction f, EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     IterationStep nextStep;
     if (!strict && mask.intersects(_mask)) {
       nextStep = f(cls);
@@ -374,8 +374,8 @@
   }
 
   void printOn(StringBuffer sb, String indentation,
-      {bool instantiatedOnly: false,
-      bool sorted: true,
+      {bool instantiatedOnly = false,
+      bool sorted = true,
       ClassEntity withRespectTo}) {
     bool isRelatedTo(ClassEntity _subclass) {
       return true;
@@ -439,10 +439,10 @@
   }
 
   String dump(
-      {String indentation: '',
-      bool instantiatedOnly: false,
+      {String indentation = '',
+      bool instantiatedOnly = false,
       ClassEntity withRespectTo}) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     printOn(sb, indentation,
         instantiatedOnly: instantiatedOnly, withRespectTo: withRespectTo);
     return sb.toString();
@@ -552,7 +552,7 @@
       return nodeMap[source.readClass()];
     }, emptyAsNull: true);
     source.end(tag);
-    return new ClassSet(node)
+    return ClassSet(node)
       .._subtypes = subtypes
       .._mixinApplications = mixinApplications;
   }
@@ -633,7 +633,7 @@
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
   Iterable<ClassEntity> subclassesByMask(EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     return node.subclassesByMask(mask, strict: strict);
   }
 
@@ -644,10 +644,10 @@
   /// [includeIndirectlyInstantiated], and [includeUninstantiated] are `true`,
   /// respectively. If [strict] is `true`, [cls] itself is _not_ returned.
   Iterable<ClassEntity> subtypes(
-      {bool includeDirectlyInstantiated: true,
-      bool includeIndirectlyInstantiated: true,
-      bool includeUninstantiated: true,
-      bool strict: false}) {
+      {bool includeDirectlyInstantiated = true,
+      bool includeIndirectlyInstantiated = true,
+      bool includeUninstantiated = true,
+      bool strict = false}) {
     EnumSet<Instantiation> mask = ClassHierarchyNode.createMask(
         includeDirectlyInstantiated: includeDirectlyInstantiated,
         includeIndirectlyInstantiated: includeIndirectlyInstantiated,
@@ -661,13 +661,12 @@
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
   Iterable<ClassEntity> subtypesByMask(EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     if (_subtypes == null) {
       return node.subclassesByMask(mask, strict: strict);
     }
 
-    return new SubtypesIterable.SubtypesIterator(this, mask,
-        includeRoot: !strict);
+    return SubtypesIterable.SubtypesIterator(this, mask, includeRoot: !strict);
   }
 
   /// Applies [predicate] to each subclass of [cls] matching the criteria
@@ -678,7 +677,7 @@
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
   bool anySubclass(bool predicate(ClassEntity cls), EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     return node.anySubclass(predicate, mask, strict: strict);
   }
 
@@ -697,7 +696,7 @@
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
   IterationStep forEachSubclass(ForEachFunction f, EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     return node.forEachSubclass(f, mask, strict: strict);
   }
 
@@ -709,7 +708,7 @@
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
   bool anySubtype(bool predicate(ClassEntity cls), EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     IterationStep wrapper(ClassEntity cls) {
       return predicate(cls) ? IterationStep.STOP : IterationStep.CONTINUE;
     }
@@ -732,7 +731,7 @@
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
   IterationStep forEachSubtype(ForEachFunction f, EnumSet<Instantiation> mask,
-      {bool strict: false}) {
+      {bool strict = false}) {
     IterationStep nextStep =
         node.forEachSubclass(f, mask, strict: strict) ?? IterationStep.CONTINUE;
     if (nextStep == IterationStep.CONTINUE && _subtypes != null) {
@@ -844,7 +843,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('[\n');
     node.printOn(sb, '  ');
     sb.write('\n');
@@ -873,13 +872,13 @@
   final EnumSet<Instantiation> mask;
   final bool includeRoot;
 
-  ClassHierarchyNodeIterable(this.root, this.mask, {this.includeRoot: true}) {
-    if (root == null) throw new StateError("No root for iterable.");
+  ClassHierarchyNodeIterable(this.root, this.mask, {this.includeRoot = true}) {
+    if (root == null) throw StateError("No root for iterable.");
   }
 
   @override
   Iterator<ClassEntity> get iterator {
-    return new ClassHierarchyNodeIterator(this);
+    return ClassHierarchyNodeIterator(this);
   }
 }
 
@@ -970,10 +969,10 @@
   final bool includeRoot;
 
   SubtypesIterable.SubtypesIterator(this.subtypeSet, this.mask,
-      {this.includeRoot: true});
+      {this.includeRoot = true});
 
   @override
-  Iterator<ClassEntity> get iterator => new SubtypesIterator(this);
+  Iterator<ClassEntity> get iterator => SubtypesIterator(this);
 }
 
 /// Iterator for the subtypes in a [ClassSet].
@@ -1038,7 +1037,7 @@
 /// Visiting function used for the `forEachX` functions of [ClassHierarchyNode]
 /// and [ClassSet]. The return value controls the continued iteration. If `null`
 /// is returned, iteration continues to the end.
-typedef IterationStep ForEachFunction(ClassEntity cls);
+typedef ForEachFunction = IterationStep Function(ClassEntity cls);
 
 /// Singleton map implemented as a field on the key.
 class ClassHierarchyNodesMap extends MapBase<ClassEntity, ClassHierarchyNode> {
@@ -1048,7 +1047,7 @@
     if (cls is ClassHierarchyNodesMapKey) {
       return cls._classHierarchyNode;
     }
-    throw new UnimplementedError('ClassHierarchyNodesMap for $cls');
+    throw UnimplementedError('ClassHierarchyNodesMap for $cls');
   }
 
   @override
@@ -1058,7 +1057,7 @@
       cls._classHierarchyNode = node;
       return;
     }
-    throw new UnimplementedError('ClassHierarchyNodesMap for $cls');
+    throw UnimplementedError('ClassHierarchyNodesMap for $cls');
   }
 
   @override
@@ -1069,17 +1068,17 @@
 
   @override
   Iterable<ClassEntity> get keys {
-    throw new UnimplementedError('ClassHierarchyNodesMap.keys');
+    throw UnimplementedError('ClassHierarchyNodesMap.keys');
   }
 
   @override
   ClassHierarchyNode remove(Object key) {
-    throw new UnimplementedError('ClassHierarchyNodesMap.remove');
+    throw UnimplementedError('ClassHierarchyNodesMap.remove');
   }
 
   @override
   void clear() {
-    throw new UnimplementedError('ClassHierarchyNodesMap.clear');
+    throw UnimplementedError('ClassHierarchyNodesMap.clear');
   }
 }
 
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index b63141d..d960d16 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -409,7 +409,7 @@
   }
 
   void processClassMembers(ClassEntity cls, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     _elementEnvironment.forEachClassMember(cls,
         (ClassEntity cls, MemberEntity member) {
       _processInstantiatedClassMember(cls, member, memberUsed,
@@ -419,7 +419,7 @@
 
   void _processInstantiatedClassMember(
       ClassEntity cls, MemberEntity member, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     if (!member.isInstanceMember) return;
     EnumSet<MemberUse> useSet = EnumSet<MemberUse>();
     MemberUsage usage = _getMemberUsage(member, useSet);
@@ -434,7 +434,7 @@
   }
 
   MemberUsage _getMemberUsage(MemberEntity member, EnumSet<MemberUse> useSet,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     // TODO(johnniwinther): Change [TypeMask] to not apply to a superclass
     // member unless the class has been instantiated. Similar to
     // [StrongModeConstraint].
diff --git a/pkg/compiler/lib/src/universe/feature.dart b/pkg/compiler/lib/src/universe/feature.dart
index 8d8d9ba..1e1dd45 100644
--- a/pkg/compiler/lib/src/universe/feature.dart
+++ b/pkg/compiler/lib/src/universe/feature.dart
@@ -93,7 +93,7 @@
   final bool isConstant;
   final bool isEmpty;
 
-  MapLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
+  MapLiteralUse(this.type, {this.isConstant = false, this.isEmpty = false});
 
   @override
   int get hashCode {
@@ -123,7 +123,7 @@
   final bool isConstant;
   final bool isEmpty;
 
-  SetLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
+  SetLiteralUse(this.type, {this.isConstant = false, this.isEmpty = false});
 
   @override
   int get hashCode =>
@@ -149,7 +149,7 @@
   final bool isConstant;
   final bool isEmpty;
 
-  ListLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
+  ListLiteralUse(this.type, {this.isConstant = false, this.isEmpty = false});
 
   @override
   int get hashCode {
@@ -203,7 +203,7 @@
 
   /// Short textual representation use for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     switch (kind) {
       case RuntimeTypeUseKind.string:
         sb.write('string:');
@@ -246,7 +246,7 @@
     DartType functionType = source.readDartType();
     List<DartType> typeArguments = source.readDartTypes();
     source.end(tag);
-    return new GenericInstantiation(functionType, typeArguments);
+    return GenericInstantiation(functionType, typeArguments);
   }
 
   void writeToDataSink(DataSink sink) {
diff --git a/pkg/compiler/lib/src/universe/function_set.dart b/pkg/compiler/lib/src/universe/function_set.dart
index e19991a..7c934bf 100644
--- a/pkg/compiler/lib/src/universe/function_set.dart
+++ b/pkg/compiler/lib/src/universe/function_set.dart
@@ -17,12 +17,12 @@
   final Map<String, FunctionSetNode> _nodes;
 
   factory FunctionSet(Iterable<MemberEntity> liveInstanceMembers) {
-    Map<String, FunctionSetNode> nodes = new Map<String, FunctionSetNode>();
+    Map<String, FunctionSetNode> nodes = Map<String, FunctionSetNode>();
     for (MemberEntity member in liveInstanceMembers) {
       String name = member.name;
-      (nodes[name] ??= new FunctionSetNode(name)).add(member);
+      (nodes[name] ??= FunctionSetNode(name)).add(member);
     }
-    return new FunctionSet.internal(nodes);
+    return FunctionSet.internal(nodes);
   }
 
   FunctionSet.internal(this._nodes);
@@ -58,8 +58,8 @@
   SelectorMask _createSelectorMask(
       Selector selector, AbstractValue receiver, AbstractValueDomain domain) {
     return receiver != null
-        ? new SelectorMask(selector, receiver)
-        : new SelectorMask(selector, domain.dynamicType);
+        ? SelectorMask(selector, receiver)
+        : SelectorMask(selector, domain.dynamicType);
   }
 
   /// Returns the set of functions that can be the target of a call to
@@ -70,7 +70,7 @@
     String name = selector.name;
     SelectorMask selectorMask = _createSelectorMask(selector, receiver, domain);
     SelectorMask noSuchMethodMask =
-        new SelectorMask(Selectors.noSuchMethod_, selectorMask.receiver);
+        SelectorMask(Selectors.noSuchMethod_, selectorMask.receiver);
     FunctionSetNode node = _nodes[name];
     FunctionSetNode noSuchMethods = _nodes[Identifiers.noSuchMethod_];
     if (node != null) {
@@ -215,7 +215,7 @@
           // Defer the allocation of the functions set until we are
           // sure we need it. This allows us to return immutable empty
           // lists when the filtering produced no results.
-          functions = new Setlet<MemberEntity>();
+          functions = Setlet<MemberEntity>();
         }
         functions.add(element);
       }
@@ -230,22 +230,21 @@
           noSuchMethods.query(noSuchMethodMask, domain);
       if (!noSuchMethodQuery.functions.isEmpty) {
         if (functions == null) {
-          functions =
-              new Setlet<MemberEntity>.from(noSuchMethodQuery.functions);
+          functions = Setlet<MemberEntity>.from(noSuchMethodQuery.functions);
         } else {
           functions.addAll(noSuchMethodQuery.functions);
         }
       }
     }
     cache[selectorMask] = result = (functions != null)
-        ? new FullFunctionSetQuery(functions)
+        ? FullFunctionSetQuery(functions)
         : const EmptyFunctionSetQuery();
     return result;
   }
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('FunctionSetNode(');
     String comma = '';
     cache.forEach((mask, query) {
diff --git a/pkg/compiler/lib/src/universe/member_usage.dart b/pkg/compiler/lib/src/universe/member_usage.dart
index de26a23..591b05a 100644
--- a/pkg/compiler/lib/src/universe/member_usage.dart
+++ b/pkg/compiler/lib/src/universe/member_usage.dart
@@ -17,7 +17,7 @@
 
   AbstractUsage.cloned(this._pendingUse);
 
-  AbstractUsage() : this._pendingUse = new EnumSet<T>() {
+  AbstractUsage() : this._pendingUse = EnumSet<T>() {
     _pendingUse.addAll(_originalUse);
   }
 
@@ -41,7 +41,7 @@
 abstract class MemberUsage extends AbstractUsage<MemberUse> {
   /// Constant empty access set used as the potential access set for impossible
   /// accesses, for instance writing to a final field or invoking a setter.
-  static const EnumSet<Access> emptySet = const EnumSet.fixed(0);
+  static const EnumSet<Access> emptySet = EnumSet.fixed(0);
 
   final MemberEntity entity;
 
@@ -60,12 +60,12 @@
       }
       if (member.isTopLevel || member.isStatic || member.isConstructor) {
         // TODO(johnniwinther): Track super constructor invocations?
-        return new EnumSet.fromValues([Access.staticAccess]);
+        return EnumSet.fromValues([Access.staticAccess]);
       } else if (member.isInstanceMember) {
-        return new EnumSet.fromValues(Access.values);
+        return EnumSet.fromValues(Access.values);
       } else {
         assert(member is JRecordField, "Unexpected member: $member");
-        return new EnumSet();
+        return EnumSet();
       }
     }
 
@@ -89,33 +89,33 @@
 
     if (member.isField) {
       if (member.isAssignable) {
-        return new FieldUsage(member,
+        return FieldUsage(member,
             potentialReads: createPotentialReads(),
             potentialWrites: createPotentialWrites(),
             potentialInvokes: createPotentialInvokes());
       } else {
-        return new FieldUsage(member,
+        return FieldUsage(member,
             potentialReads: createPotentialReads(),
             potentialWrites: emptySet,
             potentialInvokes: createPotentialInvokes());
       }
     } else if (member.isGetter) {
-      return new PropertyUsage(member,
+      return PropertyUsage(member,
           potentialReads: createPotentialReads(),
           potentialWrites: emptySet,
           potentialInvokes: createPotentialInvokes());
     } else if (member.isSetter) {
-      return new PropertyUsage(member,
+      return PropertyUsage(member,
           potentialReads: emptySet,
           potentialWrites: createPotentialWrites(),
           potentialInvokes: emptySet);
     } else if (member.isConstructor) {
-      return new MethodUsage(member,
+      return MethodUsage(member,
           potentialReads: emptySet, potentialInvokes: createPotentialInvokes());
     } else {
       assert(member is FunctionEntity,
           failedAt(member, "Unexpected member: $member"));
-      return new MethodUsage(member,
+      return MethodUsage(member,
           potentialReads: createPotentialReads(),
           potentialInvokes: createPotentialInvokes());
     }
@@ -293,9 +293,9 @@
 
   PropertyUsage(MemberEntity member,
       {this.potentialReads, this.potentialWrites, this.potentialInvokes})
-      : reads = new EnumSet(),
-        writes = new EnumSet(),
-        invokes = new EnumSet(),
+      : reads = EnumSet(),
+        writes = EnumSet(),
+        invokes = EnumSet(),
         assert(potentialReads != null),
         assert(potentialWrites != null),
         assert(potentialInvokes != null),
@@ -338,7 +338,7 @@
 
   @override
   MemberUsage clone() {
-    return new PropertyUsage.cloned(entity, _pendingUse.clone(),
+    return PropertyUsage.cloned(entity, _pendingUse.clone(),
         potentialReads: potentialReads.clone(),
         potentialWrites: potentialWrites.clone(),
         potentialInvokes: potentialInvokes.clone(),
@@ -403,9 +403,9 @@
   FieldUsage(FieldEntity field,
       {this.potentialReads, this.potentialWrites, this.potentialInvokes})
       : hasInit = false,
-        reads = new EnumSet(),
-        writes = new EnumSet(),
-        invokes = new EnumSet(),
+        reads = EnumSet(),
+        writes = EnumSet(),
+        invokes = EnumSet(),
         assert(potentialReads != null),
         assert(potentialWrites != null),
         assert(potentialInvokes != null),
@@ -473,7 +473,7 @@
 
   @override
   MemberUsage clone() {
-    return new FieldUsage.cloned(entity, _pendingUse.clone(),
+    return FieldUsage.cloned(entity, _pendingUse.clone(),
         potentialReads: potentialReads.clone(),
         potentialWrites: potentialWrites.clone(),
         potentialInvokes: potentialInvokes.clone(),
@@ -522,9 +522,9 @@
 
   MethodUsage(FunctionEntity function,
       {this.potentialReads, this.potentialInvokes})
-      : reads = new EnumSet(),
-        invokes = new EnumSet(),
-        parameterUsage = new ParameterUsage(function.parameterStructure),
+      : reads = EnumSet(),
+        invokes = EnumSet(),
+        parameterUsage = ParameterUsage(function.parameterStructure),
         assert(potentialReads != null),
         assert(potentialInvokes != null),
         super.internal(function);
@@ -583,7 +583,7 @@
 
   @override
   MemberUsage clone() {
-    return new MethodUsage.cloned(
+    return MethodUsage.cloned(
         entity, parameterUsage.clone(), _pendingUse.clone(),
         reads: reads.clone(),
         potentialReads: potentialReads.clone(),
@@ -615,20 +615,18 @@
 
 /// Common [EnumSet]s used for [MemberUse].
 class MemberUses {
-  static const EnumSet<MemberUse> NONE = const EnumSet<MemberUse>.fixed(0);
-  static const EnumSet<MemberUse> NORMAL_ONLY =
-      const EnumSet<MemberUse>.fixed(1);
+  static const EnumSet<MemberUse> NONE = EnumSet<MemberUse>.fixed(0);
+  static const EnumSet<MemberUse> NORMAL_ONLY = EnumSet<MemberUse>.fixed(1);
   static const EnumSet<MemberUse> CLOSURIZE_INSTANCE_ONLY =
-      const EnumSet<MemberUse>.fixed(2);
+      EnumSet<MemberUse>.fixed(2);
   static const EnumSet<MemberUse> CLOSURIZE_STATIC_ONLY =
-      const EnumSet<MemberUse>.fixed(4);
-  static const EnumSet<MemberUse> ALL_INSTANCE =
-      const EnumSet<MemberUse>.fixed(3);
-  static const EnumSet<MemberUse> ALL_STATIC =
-      const EnumSet<MemberUse>.fixed(5);
+      EnumSet<MemberUse>.fixed(4);
+  static const EnumSet<MemberUse> ALL_INSTANCE = EnumSet<MemberUse>.fixed(3);
+  static const EnumSet<MemberUse> ALL_STATIC = EnumSet<MemberUse>.fixed(5);
 }
 
-typedef void MemberUsedCallback(MemberEntity member, EnumSet<MemberUse> useSet);
+typedef MemberUsedCallback = void Function(
+    MemberEntity member, EnumSet<MemberUse> useSet);
 
 /// Registry for the observed use of a class [entity] in the open world.
 // TODO(johnniwinther): Merge this with [InstantiationInfo].
@@ -668,15 +666,14 @@
 
 /// Common [EnumSet]s used for [ClassUse].
 class ClassUses {
-  static const EnumSet<ClassUse> NONE = const EnumSet<ClassUse>.fixed(0);
-  static const EnumSet<ClassUse> INSTANTIATED_ONLY =
-      const EnumSet<ClassUse>.fixed(1);
-  static const EnumSet<ClassUse> IMPLEMENTED_ONLY =
-      const EnumSet<ClassUse>.fixed(2);
-  static const EnumSet<ClassUse> ALL = const EnumSet<ClassUse>.fixed(3);
+  static const EnumSet<ClassUse> NONE = EnumSet<ClassUse>.fixed(0);
+  static const EnumSet<ClassUse> INSTANTIATED_ONLY = EnumSet<ClassUse>.fixed(1);
+  static const EnumSet<ClassUse> IMPLEMENTED_ONLY = EnumSet<ClassUse>.fixed(2);
+  static const EnumSet<ClassUse> ALL = EnumSet<ClassUse>.fixed(3);
 }
 
-typedef void ClassUsedCallback(ClassEntity cls, EnumSet<ClassUse> useSet);
+typedef ClassUsedCallback = void Function(
+    ClassEntity cls, EnumSet<ClassUse> useSet);
 
 /// Object used for tracking parameter use in constructor and method
 /// invocations.
@@ -712,7 +709,7 @@
         : 0;
     if (!_parameterStructure.namedParameters.isEmpty) {
       _unprovidedNamedParameters =
-          new Set<String>.from(_parameterStructure.namedParameters);
+          Set<String>.from(_parameterStructure.namedParameters);
     }
   }
 
@@ -776,7 +773,7 @@
   ParameterStructure get invokedParameters {
     if (!_hasInvoke) return null;
     if (isFullyUsed) return _parameterStructure;
-    return new ParameterStructure(
+    return ParameterStructure(
         _parameterStructure.requiredPositionalParameters,
         _providedPositionalParameters ??
             _parameterStructure.positionalParameters,
@@ -790,7 +787,7 @@
   }
 
   ParameterUsage clone() {
-    return new ParameterUsage.cloned(_parameterStructure,
+    return ParameterUsage.cloned(_parameterStructure,
         hasInvoke: _hasInvoke,
         providedPositionalParameters: _providedPositionalParameters,
         areAllTypeParametersProvided: _areAllTypeParametersProvided,
@@ -823,15 +820,15 @@
 /// Access sets used for registration of member usage.
 class Accesses {
   /// Statically bound access of a member.
-  static const EnumSet<Access> staticAccess = const EnumSet<Access>.fixed(1);
+  static const EnumSet<Access> staticAccess = EnumSet<Access>.fixed(1);
 
   /// Dynamically bound access of a member. This implies the statically bound
   /// access of the member.
-  static const EnumSet<Access> dynamicAccess = const EnumSet<Access>.fixed(3);
+  static const EnumSet<Access> dynamicAccess = EnumSet<Access>.fixed(3);
 
   /// Direct access of a super class member. This implies the statically bound
   /// access of the member.
-  static const EnumSet<Access> superAccess = const EnumSet<Access>.fixed(5);
+  static const EnumSet<Access> superAccess = EnumSet<Access>.fixed(5);
 }
 
 /// The accesses of a member collected during closed world computation.
@@ -846,11 +843,11 @@
 
   factory MemberAccess.readFromDataSource(DataSource source) {
     source.begin(tag);
-    EnumSet<Access> reads = new EnumSet.fixed(source.readInt());
-    EnumSet<Access> writes = new EnumSet.fixed(source.readInt());
-    EnumSet<Access> invokes = new EnumSet.fixed(source.readInt());
+    EnumSet<Access> reads = EnumSet.fixed(source.readInt());
+    EnumSet<Access> writes = EnumSet.fixed(source.readInt());
+    EnumSet<Access> invokes = EnumSet.fixed(source.readInt());
     source.end(tag);
-    return new MemberAccess(reads, writes, invokes);
+    return MemberAccess(reads, writes, invokes);
   }
 
   void writeToDataSink(DataSink sink) {
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 6e23c07..bd6cdc2 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -71,7 +71,7 @@
   /// usage can be found. This check is performed without changing the already
   /// collected member usage.
   void processClassMembers(ClassEntity cls, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency: false});
+      {bool checkEnqueuerConsistency = false});
 
   /// Applies the [dynamicUse] to applicable instance members. Calls
   /// [membersUsed] with the usage changes for each member.
@@ -119,7 +119,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write(type);
     if (kind == Instantiation.DIRECTLY_INSTANTIATED) {
       sb.write(' directly');
@@ -201,8 +201,8 @@
       ConstructorEntity constructor, InterfaceType type, Instantiation kind) {
     instantiationMap ??= <ConstructorEntity, Set<Instance>>{};
     instantiationMap
-        .putIfAbsent(constructor, () => new Set<Instance>())
-        .add(new Instance(type, kind));
+        .putIfAbsent(constructor, () => Set<Instance>())
+        .add(Instance(type, kind));
     switch (kind) {
       case Instantiation.DIRECTLY_INSTANTIATED:
         isDirectlyInstantiated = true;
@@ -213,7 +213,7 @@
       case Instantiation.UNINSTANTIATED:
         break;
       default:
-        throw new StateError("Instantiation $kind is not allowed.");
+        throw StateError("Instantiation $kind is not allowed.");
     }
   }
 
@@ -229,7 +229,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('InstantiationInfo[');
     if (instantiationMap != null) {
       bool needsComma = false;
@@ -263,18 +263,17 @@
       <ClassEntity, InstantiationInfo>{};
 
   /// Classes implemented by directly instantiated classes.
-  final Set<ClassEntity> _implementedClasses = new Set<ClassEntity>();
+  final Set<ClassEntity> _implementedClasses = Set<ClassEntity>();
 
   /// The set of all referenced static fields.
   ///
   /// Invariant: Elements are declaration elements.
-  final Set<FieldEntity> _allReferencedStaticFields = new Set<FieldEntity>();
+  final Set<FieldEntity> _allReferencedStaticFields = Set<FieldEntity>();
 
   /// Documentation wanted -- johnniwinther
   ///
   /// Invariant: Elements are declaration elements.
-  final Set<FunctionEntity> _methodsNeedingSuperGetter =
-      new Set<FunctionEntity>();
+  final Set<FunctionEntity> _methodsNeedingSuperGetter = Set<FunctionEntity>();
   final Map<String, Map<Selector, SelectorConstraints>> _invokedNames =
       <String, Map<Selector, SelectorConstraints>>{};
   final Map<String, Map<Selector, SelectorConstraints>> _invokedGetters =
@@ -311,17 +310,17 @@
   final Map<String, Set<MemberUsage>> _writableInstanceMembersByName =
       <String, Set<MemberUsage>>{};
 
-  final Set<FieldEntity> _fieldSetters = new Set<FieldEntity>();
+  final Set<FieldEntity> _fieldSetters = Set<FieldEntity>();
 
-  final Set<DartType> _isChecks = new Set<DartType>();
+  final Set<DartType> _isChecks = Set<DartType>();
   final Set<TypeVariableType> _namedTypeVariablesNewRti = {};
 
   /// Set of all closures in the program. Used by the mirror tracking system
   /// to find all live closure instances.
-  final Set<Local> _localFunctions = new Set<Local>();
+  final Set<Local> _localFunctions = Set<Local>();
 
   final Set<FunctionEntity> _closurizedMembersWithFreeTypeVariables =
-      new Set<FunctionEntity>();
+      Set<FunctionEntity>();
 
   final CompilerOptions _options;
   final ElementEnvironment _elementEnvironment;
@@ -344,13 +343,13 @@
 
   bool _closed = false;
   KClosedWorld _closedWorldCache;
-  final Set<MemberEntity> _liveInstanceMembers = new Set<MemberEntity>();
+  final Set<MemberEntity> _liveInstanceMembers = Set<MemberEntity>();
 
-  final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
+  final Set<ConstantValue> _constantValues = Set<ConstantValue>();
 
-  final Set<Local> _genericLocalFunctions = new Set<Local>();
+  final Set<Local> _genericLocalFunctions = Set<Local>();
 
-  Set<MemberEntity> _processedMembers = new Set<MemberEntity>();
+  Set<MemberEntity> _processedMembers = Set<MemberEntity>();
 
   bool get isClosed => _closed;
 
@@ -403,7 +402,7 @@
   // TODO(johnniwinther): Improve semantic precision.
   @override
   Iterable<ClassEntity> get directlyInstantiatedClasses {
-    Set<ClassEntity> classes = new Set<ClassEntity>();
+    Set<ClassEntity> classes = Set<ClassEntity>();
     getInstantiationMap().forEach((ClassEntity cls, InstantiationInfo info) {
       if (info.hasInstantiation) {
         classes.add(cls);
@@ -429,7 +428,7 @@
       {ConstructorEntity constructor}) {
     ClassEntity cls = type.element;
     InstantiationInfo info =
-        _instantiationInfo.putIfAbsent(cls, () => new InstantiationInfo());
+        _instantiationInfo.putIfAbsent(cls, () => InstantiationInfo());
     Instantiation kind = Instantiation.UNINSTANTIATED;
     bool isNative = _nativeBasicData.isNativeClass(cls);
     // We can't use the closed-world assumption with native abstract
@@ -472,7 +471,7 @@
       if (selector.appliesUnnamed(member)) {
         SelectorConstraints masks = selectors[selector];
         if (masks.canHit(member, selector.memberName, this)) {
-          callStructures ??= new Set<CallStructure>();
+          callStructures ??= Set<CallStructure>();
           callStructures.add(selector.callStructure);
         }
       }
@@ -579,7 +578,7 @@
     String name = selector.name;
     Object constraint = dynamicUse.receiverConstraint;
     Map<Selector, SelectorConstraints> selectors = selectorMap.putIfAbsent(
-        name, () => new Maplet<Selector, SelectorConstraints>());
+        name, () => Maplet<Selector, SelectorConstraints>());
     UniverseSelectorConstraints constraints = selectors[selector];
     if (constraints == null) {
       selectors[selector] = _selectorConstraintsStrategy
@@ -618,14 +617,14 @@
     } else if (staticUse.kind == StaticUseKind.CLOSURE_CALL) {
       if (staticUse.typeArguments?.isNotEmpty ?? false) {
         registerDynamicInvocation(
-            new Selector.call(Names.call, staticUse.callStructure),
+            Selector.call(Names.call, staticUse.callStructure),
             staticUse.typeArguments);
       }
       return;
     }
 
     MemberEntity element = staticUse.element;
-    EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
+    EnumSet<MemberUse> useSet = EnumSet<MemberUse>();
     MemberUsage usage = _getMemberUsage(element, useSet);
 
     if ((element.isStatic || element.isTopLevel) && element.isField) {
@@ -706,8 +705,7 @@
   /// Called to create a [ClassUsage] for [cls].
   ///
   /// Subclasses override this to ensure needed invariants on [cls].
-  ClassUsage _createClassUsage(covariant ClassEntity cls) =>
-      new ClassUsage(cls);
+  ClassUsage _createClassUsage(covariant ClassEntity cls) => ClassUsage(cls);
 
   /// Return the canonical [ClassUsage] for [cls].
   ClassUsage _getClassUsage(ClassEntity cls) {
@@ -737,7 +735,7 @@
 
   @override
   void processClassMembers(ClassEntity cls, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     _elementEnvironment.forEachClassMember(cls,
         (ClassEntity cls, MemberEntity member) {
       _processInstantiatedClassMember(cls, member, memberUsed,
@@ -755,8 +753,8 @@
     // [f] might add elements to [: map[memberName] :] during the loop below
     // so we create a new list for [: map[memberName] :] and prepend the
     // [remaining] members after the loop.
-    map[memberName] = new Set<MemberUsage>();
-    Set<MemberUsage> remaining = new Set<MemberUsage>();
+    map[memberName] = Set<MemberUsage>();
+    Set<MemberUsage> remaining = Set<MemberUsage>();
     for (MemberUsage usage in members) {
       if (!updateUsage(usage)) {
         remaining.add(usage);
@@ -766,7 +764,7 @@
   }
 
   MemberUsage _getMemberUsage(MemberEntity member, EnumSet<MemberUse> useSet,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     MemberUsage usage = _memberUsage[member];
     if (usage == null) {
       if (member.isInstanceMember) {
@@ -782,7 +780,7 @@
         // Note: this assumes that there are no non-native fields on native
         // classes, which may not be the case when a native class is subclassed.
         bool isNative = _nativeBasicData.isNativeClass(cls);
-        usage = new MemberUsage(member);
+        usage = MemberUsage(member);
         if (member.isField && !isNative) {
           useSet.addAll(usage.init());
         }
@@ -832,7 +830,7 @@
           }
         }
       } else {
-        usage = new MemberUsage(member);
+        usage = MemberUsage(member);
         if (member.isField) {
           useSet.addAll(usage.init());
         }
@@ -846,18 +844,18 @@
 
   void _processInstantiatedClassMember(
       ClassEntity cls, MemberEntity member, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency: false}) {
+      {bool checkEnqueuerConsistency = false}) {
     if (!member.isInstanceMember) return;
     String memberName = member.name;
 
     MemberUsage usage = _memberUsage[member];
     if (usage == null) {
-      EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
+      EnumSet<MemberUse> useSet = EnumSet<MemberUse>();
       usage = _getMemberUsage(member, useSet,
           checkEnqueuerConsistency: checkEnqueuerConsistency);
       if (useSet.isNotEmpty) {
         if (checkEnqueuerConsistency) {
-          throw new SpannableAssertionFailure(member,
+          throw SpannableAssertionFailure(member,
               'Unenqueued usage of $member: \nbefore: <none>\nafter : $usage');
         } else {
           memberUsed(usage.entity, useSet);
@@ -869,7 +867,7 @@
         usage = usage.clone();
       }
       if (usage.hasPendingDynamicUse) {
-        EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
+        EnumSet<MemberUse> useSet = EnumSet<MemberUse>();
         if (usage.hasPendingDynamicRead && _hasInvokedGetter(member)) {
           useSet.addAll(usage.read(Accesses.dynamicAccess));
         }
@@ -922,7 +920,7 @@
 
   Map<ClassEntity, Set<ClassEntity>> populateHierarchyNodes() {
     Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses =
-        new Map<ClassEntity, Set<ClassEntity>>();
+        Map<ClassEntity, Set<ClassEntity>>();
 
     // Updates the `isDirectlyInstantiated` and `isIndirectlyInstantiated`
     // properties of the [ClassHierarchyNode] for [cls].
@@ -941,7 +939,7 @@
       while (superclass != null) {
         Set<ClassEntity> typesImplementedBySubclassesOfCls =
             typesImplementedBySubclasses.putIfAbsent(
-                superclass, () => new Set<ClassEntity>());
+                superclass, () => Set<ClassEntity>());
         for (InterfaceType current in _classQueries.getSupertypes(cls)) {
           typesImplementedBySubclassesOfCls.add(current.element);
         }
@@ -959,7 +957,7 @@
   }
 
   Iterable<MemberEntity> computeAssignedInstanceMembers() {
-    Set<MemberEntity> assignedInstanceMembers = new Set<MemberEntity>();
+    Set<MemberEntity> assignedInstanceMembers = Set<MemberEntity>();
     for (MemberEntity instanceMember in _liveInstanceMembers) {
       if (_hasInvokedSetter(instanceMember)) {
         assignedInstanceMembers.add(instanceMember);
@@ -1000,7 +998,7 @@
         return _classHierarchyBuilder.isInheritedInSubtypeOf(
             memberHoldingClass, type);
     }
-    throw new UnsupportedError("Unexpected ClassRelation $relation.");
+    throw UnsupportedError("Unexpected ClassRelation $relation.");
   }
 
   @override
@@ -1027,7 +1025,7 @@
           "Member $member is processed but has not usage.");
     }
 
-    Set<InterfaceType> instantiatedTypes = new Set<InterfaceType>();
+    Set<InterfaceType> instantiatedTypes = Set<InterfaceType>();
     getInstantiationMap().forEach((_, InstantiationInfo info) {
       if (info.instantiationMap != null) {
         for (Set<Instance> instances in info.instantiationMap.values) {
@@ -1038,7 +1036,7 @@
       }
     });
 
-    KClosedWorld closedWorld = new KClosedWorldImpl(_elementMap,
+    KClosedWorld closedWorld = KClosedWorldImpl(_elementMap,
         options: _options,
         elementEnvironment: _elementEnvironment,
         dartTypes: _dartTypes,
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index 20f8391..b66d87c 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -21,12 +21,12 @@
   final int hashCode;
   const SelectorKind(this.name, this.hashCode);
 
-  static const SelectorKind GETTER = const SelectorKind('getter', 0);
-  static const SelectorKind SETTER = const SelectorKind('setter', 1);
-  static const SelectorKind CALL = const SelectorKind('call', 2);
-  static const SelectorKind OPERATOR = const SelectorKind('operator', 3);
-  static const SelectorKind INDEX = const SelectorKind('index', 4);
-  static const SelectorKind SPECIAL = const SelectorKind('special', 5);
+  static const SelectorKind GETTER = SelectorKind('getter', 0);
+  static const SelectorKind SETTER = SelectorKind('setter', 1);
+  static const SelectorKind CALL = SelectorKind('call', 2);
+  static const SelectorKind OPERATOR = SelectorKind('operator', 3);
+  static const SelectorKind INDEX = SelectorKind('index', 4);
+  static const SelectorKind SPECIAL = SelectorKind('special', 5);
 
   int get index => hashCode;
 
@@ -104,7 +104,7 @@
 
   // TODO(johnniwinther): Extract caching.
   static Map<int, List<Selector>> canonicalizedValues =
-      new Map<int, List<Selector>>();
+      Map<int, List<Selector>>();
 
   factory Selector(SelectorKind kind, Name name, CallStructure callStructure) {
     // TODO(johnniwinther): Maybe use equality instead of implicit hashing.
@@ -118,8 +118,7 @@
         return existing;
       }
     }
-    Selector result =
-        new Selector.internal(kind, name, callStructure, hashCode);
+    Selector result = Selector.internal(kind, name, callStructure, hashCode);
     list.add(result);
     return result;
   }
@@ -129,77 +128,76 @@
     if (element.isFunction) {
       FunctionEntity function = element;
       if (name == Names.INDEX_NAME) {
-        return new Selector.index();
+        return Selector.index();
       } else if (name == Names.INDEX_SET_NAME) {
-        return new Selector.indexSet();
+        return Selector.indexSet();
       }
       CallStructure callStructure = function.parameterStructure.callStructure;
       if (isOperatorName(element.name)) {
         // Operators cannot have named arguments, however, that doesn't prevent
         // a user from declaring such an operator.
-        return new Selector(SelectorKind.OPERATOR, name, callStructure);
+        return Selector(SelectorKind.OPERATOR, name, callStructure);
       } else {
-        return new Selector.call(name, callStructure);
+        return Selector.call(name, callStructure);
       }
     } else if (element.isSetter) {
-      return new Selector.setter(name);
+      return Selector.setter(name);
     } else if (element.isGetter) {
-      return new Selector.getter(name);
+      return Selector.getter(name);
     } else if (element.isField) {
-      return new Selector.getter(name);
+      return Selector.getter(name);
     } else if (element.isConstructor) {
-      return new Selector.callConstructor(name);
+      return Selector.callConstructor(name);
     } else {
       throw failedAt(element, "Can't get selector from $element");
     }
   }
 
   factory Selector.getter(Name name) =>
-      new Selector(SelectorKind.GETTER, name.getter, CallStructure.NO_ARGS);
+      Selector(SelectorKind.GETTER, name.getter, CallStructure.NO_ARGS);
 
   factory Selector.setter(Name name) =>
-      new Selector(SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG);
+      Selector(SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG);
 
-  factory Selector.unaryOperator(String name) => new Selector(
+  factory Selector.unaryOperator(String name) => Selector(
       SelectorKind.OPERATOR,
-      new PublicName(utils.constructOperatorName(name, true)),
+      PublicName(utils.constructOperatorName(name, true)),
       CallStructure.NO_ARGS);
 
-  factory Selector.binaryOperator(String name) => new Selector(
+  factory Selector.binaryOperator(String name) => Selector(
       SelectorKind.OPERATOR,
-      new PublicName(utils.constructOperatorName(name, false)),
+      PublicName(utils.constructOperatorName(name, false)),
       CallStructure.ONE_ARG);
 
   factory Selector.index() =>
-      new Selector(SelectorKind.INDEX, Names.INDEX_NAME, CallStructure.ONE_ARG);
+      Selector(SelectorKind.INDEX, Names.INDEX_NAME, CallStructure.ONE_ARG);
 
-  factory Selector.indexSet() => new Selector(
+  factory Selector.indexSet() => Selector(
       SelectorKind.INDEX, Names.INDEX_SET_NAME, CallStructure.TWO_ARGS);
 
   factory Selector.call(Name name, CallStructure callStructure) =>
-      new Selector(SelectorKind.CALL, name, callStructure);
+      Selector(SelectorKind.CALL, name, callStructure);
 
   factory Selector.callClosure(int arity,
           [List<String> namedArguments, int typeArgumentCount = 0]) =>
-      new Selector(SelectorKind.CALL, Names.call,
-          new CallStructure(arity, namedArguments, typeArgumentCount));
+      Selector(SelectorKind.CALL, Names.call,
+          CallStructure(arity, namedArguments, typeArgumentCount));
 
   factory Selector.callClosureFrom(Selector selector) =>
-      new Selector(SelectorKind.CALL, Names.call, selector.callStructure);
+      Selector(SelectorKind.CALL, Names.call, selector.callStructure);
 
   factory Selector.callConstructor(Name name,
           [int arity = 0, List<String> namedArguments]) =>
-      new Selector(
-          SelectorKind.CALL, name, new CallStructure(arity, namedArguments));
+      Selector(SelectorKind.CALL, name, CallStructure(arity, namedArguments));
 
-  factory Selector.callDefaultConstructor() => new Selector(
-      SelectorKind.CALL, const PublicName(''), CallStructure.NO_ARGS);
+  factory Selector.callDefaultConstructor() =>
+      Selector(SelectorKind.CALL, const PublicName(''), CallStructure.NO_ARGS);
 
   // TODO(31953): Remove this if we can implement via static calls.
-  factory Selector.genericInstantiation(int typeArguments) => new Selector(
+  factory Selector.genericInstantiation(int typeArguments) => Selector(
       SelectorKind.SPECIAL,
       Names.genericInstantiation,
-      new CallStructure(0, null, typeArguments));
+      CallStructure(0, null, typeArguments));
 
   /// Deserializes a [Selector] object from [source].
   factory Selector.readFromDataSource(DataSource source) {
@@ -208,10 +206,10 @@
     bool isSetter = source.readBool();
     LibraryEntity library = source.readLibraryOrNull();
     String text = source.readString();
-    CallStructure callStructure = new CallStructure.readFromDataSource(source);
+    CallStructure callStructure = CallStructure.readFromDataSource(source);
     source.end(tag);
-    return new Selector(
-        kind, new Name(text, library, isSetter: isSetter), callStructure);
+    return Selector(
+        kind, Name(text, library, isSetter: isSetter), callStructure);
   }
 
   /// Serializes this [Selector] to [sink].
@@ -322,14 +320,14 @@
   // especially where selectors are used in sets or as keys in maps.
   Selector toNormalized() => callStructure.isNormalized
       ? this
-      : new Selector(kind, memberName, callStructure.toNormalized());
+      : Selector(kind, memberName, callStructure.toNormalized());
 
-  Selector toCallSelector() => new Selector.callClosureFrom(this);
+  Selector toCallSelector() => Selector.callClosureFrom(this);
 
   /// Returns the non-generic [Selector] corresponding to this selector.
   Selector toNonGeneric() {
     return callStructure.typeArgumentCount > 0
-        ? new Selector(kind, memberName, callStructure.nonGeneric)
+        ? Selector(kind, memberName, callStructure.nonGeneric)
         : this;
   }
 }
diff --git a/pkg/compiler/lib/src/universe/side_effects.dart b/pkg/compiler/lib/src/universe/side_effects.dart
index 2a63070..963b52c 100644
--- a/pkg/compiler/lib/src/universe/side_effects.dart
+++ b/pkg/compiler/lib/src/universe/side_effects.dart
@@ -47,7 +47,7 @@
     source.begin(tag);
     int flags = source.readInt();
     source.end(tag);
-    return new SideEffects.fromFlags(flags);
+    return SideEffects.fromFlags(flags);
   }
 
   /// Serializes this [SideEffects] to [sink].
@@ -61,7 +61,7 @@
   bool operator ==(other) => _flags == other._flags;
 
   @override
-  int get hashCode => throw new UnsupportedError('SideEffects.hashCode');
+  int get hashCode => throw UnsupportedError('SideEffects.hashCode');
 
   bool _getFlag(int position) {
     return (_flags & (1 << position)) != 0;
@@ -204,7 +204,7 @@
 
   @override
   String toString() {
-    StringBuffer buffer = new StringBuffer();
+    StringBuffer buffer = StringBuffer();
     buffer.write('SideEffects(reads');
     if (!dependsOnSomething()) {
       buffer.write(' nothing');
@@ -254,7 +254,7 @@
 
 class SideEffectsBuilder {
   final MemberEntity _member;
-  final SideEffects _sideEffects = new SideEffects.empty();
+  final SideEffects _sideEffects = SideEffects.empty();
   final bool _free;
   Set<SideEffectsBuilder> _depending;
 
@@ -295,7 +295,7 @@
 
   void addInput(SideEffectsBuilder input) {
     if (_free) return;
-    (input._depending ??= new Set<SideEffectsBuilder>()).add(this);
+    (input._depending ??= Set<SideEffectsBuilder>()).add(this);
   }
 
   bool add(SideEffects input) {
@@ -312,7 +312,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('SideEffectsBuilder(member=$member,');
     sb.write('free=$_free,');
     sb.write('sideEffects=$sideEffects,');
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index 3480869..f213d7a 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -69,7 +69,7 @@
     }
     List<DartType> typeArguments = source.readDartTypes(emptyAsNull: true);
     source.end(tag);
-    return new DynamicUse(selector, receiverConstraint, typeArguments);
+    return DynamicUse(selector, receiverConstraint, typeArguments);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -80,7 +80,7 @@
       if (receiverConstraint is AbstractValue) {
         sink.writeAbstractValue(receiverConstraint);
       } else {
-        throw new UnsupportedError(
+        throw UnsupportedError(
             "Unsupported receiver constraint: ${receiverConstraint}");
       }
     }
@@ -90,7 +90,7 @@
 
   /// Short textual representation use for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     if (receiverConstraint != null) {
       var constraint = receiverConstraint;
       if (constraint is StrongModeConstraint) {
@@ -226,7 +226,7 @@
     ConstantValue constant = source.readConstantOrNull();
     List<DartType> typeArguments = source.readDartTypes(emptyAsNull: true);
     source.end(tag);
-    return new StaticUse.internal(element, kind,
+    return StaticUse.internal(element, kind,
         type: type,
         callStructure: callStructure,
         deferredImport: deferredImport,
@@ -250,7 +250,7 @@
 
   /// Short textual representation use for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     switch (kind) {
       case StaticUseKind.INSTANCE_FIELD_SET:
       case StaticUseKind.SUPER_FIELD_SET:
@@ -322,7 +322,7 @@
         failedAt(element,
             "Not CallStructure for static invocation of element $element."));
 
-    StaticUse staticUse = new StaticUse.internal(
+    StaticUse staticUse = StaticUse.internal(
         element, StaticUseKind.STATIC_INVOKE,
         callStructure: callStructure,
         typeArguments: typeArguments,
@@ -342,7 +342,7 @@
             "or static method."));
     assert(element.isFunction,
         failedAt(element, "Static get element $element must be a function."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_TEAR_OFF,
+    return StaticUse.internal(element, StaticUseKind.STATIC_TEAR_OFF,
         deferredImport: deferredImport);
   }
 
@@ -359,7 +359,7 @@
         element.isField || element.isGetter,
         failedAt(element,
             "Static get element $element must be a field or a getter."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_GET,
+    return StaticUse.internal(element, StaticUseKind.STATIC_GET,
         deferredImport: deferredImport);
   }
 
@@ -376,7 +376,7 @@
         (element.isField && element.isAssignable) || element.isSetter,
         failedAt(element,
             "Static set element $element must be a field or a setter."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_SET,
+    return StaticUse.internal(element, StaticUseKind.STATIC_SET,
         deferredImport: deferredImport);
   }
 
@@ -391,7 +391,7 @@
             "or static method."));
     assert(element.isField,
         failedAt(element, "Static init element $element must be a field."));
-    return new StaticUse.internal(element, StaticUseKind.FIELD_INIT);
+    return StaticUse.internal(element, StaticUseKind.FIELD_INIT);
   }
 
   /// Invocation of a super method [element] with the given [callStructure].
@@ -406,7 +406,7 @@
         callStructure != null,
         failedAt(element,
             "Not CallStructure for super invocation of element $element."));
-    StaticUse staticUse = new StaticUse.internal(
+    StaticUse staticUse = StaticUse.internal(
         element, StaticUseKind.SUPER_INVOKE,
         callStructure: callStructure, typeArguments: typeArguments);
     assert(staticUse._checkGenericInvariants());
@@ -423,7 +423,7 @@
         element.isField || element.isGetter,
         failedAt(element,
             "Super get element $element must be a field or a getter."));
-    return new StaticUse.internal(element, StaticUseKind.SUPER_GET);
+    return StaticUse.internal(element, StaticUseKind.SUPER_GET);
   }
 
   /// Write access of a super field [element].
@@ -434,7 +434,7 @@
             element, "Super set element $element must be an instance method."));
     assert(element.isField,
         failedAt(element, "Super set element $element must be a field."));
-    return new StaticUse.internal(element, StaticUseKind.SUPER_FIELD_SET);
+    return StaticUse.internal(element, StaticUseKind.SUPER_FIELD_SET);
   }
 
   /// Write access of a super setter [element].
@@ -445,7 +445,7 @@
             element, "Super set element $element must be an instance method."));
     assert(element.isSetter,
         failedAt(element, "Super set element $element must be a setter."));
-    return new StaticUse.internal(element, StaticUseKind.SUPER_SETTER_SET);
+    return StaticUse.internal(element, StaticUseKind.SUPER_SETTER_SET);
   }
 
   /// Closurization of a super method [element].
@@ -454,7 +454,7 @@
         element.isInstanceMember && element.isFunction,
         failedAt(element,
             "Super invoke element $element must be an instance method."));
-    return new StaticUse.internal(element, StaticUseKind.SUPER_TEAR_OFF);
+    return StaticUse.internal(element, StaticUseKind.SUPER_TEAR_OFF);
   }
 
   /// Invocation of a constructor [element] through a this or super
@@ -473,7 +473,7 @@
             element,
             "Not CallStructure for super constructor invocation of element "
             "$element."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
         callStructure: callStructure);
   }
 
@@ -487,14 +487,14 @@
             element,
             "Not CallStructure for constructor body invocation of element "
             "$element."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
         callStructure: callStructure);
   }
 
   /// Direct invocation of a generator (body) [element], as a static call or
   /// through a this or super constructor call.
   factory StaticUse.generatorBodyInvoke(FunctionEntity element) {
-    return new StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
         callStructure: CallStructure.NO_ARGS);
   }
 
@@ -507,7 +507,7 @@
             "Direct invoke element $element must be an instance member."));
     assert(element.isFunction,
         failedAt(element, "Direct invoke element $element must be a method."));
-    StaticUse staticUse = new StaticUse.internal(
+    StaticUse staticUse = StaticUse.internal(
         element, StaticUseKind.DIRECT_INVOKE,
         callStructure: callStructure, typeArguments: typeArguments);
     assert(staticUse._checkGenericInvariants());
@@ -524,7 +524,7 @@
         element.isField || element.isGetter,
         failedAt(element,
             "Direct get element $element must be a field or a getter."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_GET);
+    return StaticUse.internal(element, StaticUseKind.STATIC_GET);
   }
 
   /// Direct write access of a field [element].
@@ -535,7 +535,7 @@
             "Direct set element $element must be an instance member."));
     assert(element.isField,
         failedAt(element, "Direct set element $element must be a field."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_SET);
+    return StaticUse.internal(element, StaticUseKind.STATIC_SET);
   }
 
   /// Constructor invocation of [element] with the given [callStructure].
@@ -551,7 +551,7 @@
             element,
             "Not CallStructure for constructor invocation of element "
             "$element."));
-    return new StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
         callStructure: callStructure);
   }
 
@@ -570,7 +570,7 @@
             element,
             "Typed constructor invocation element $element "
             "must be a constructor."));
-    return new StaticUse.internal(element, StaticUseKind.CONSTRUCTOR_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.CONSTRUCTOR_INVOKE,
         type: type,
         callStructure: callStructure,
         deferredImport: deferredImport);
@@ -591,8 +591,7 @@
             element,
             "Const constructor invocation element $element "
             "must be a constructor."));
-    return new StaticUse.internal(
-        element, StaticUseKind.CONST_CONSTRUCTOR_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.CONST_CONSTRUCTOR_INVOKE,
         type: type,
         callStructure: callStructure,
         deferredImport: deferredImport);
@@ -604,7 +603,7 @@
         element.isInstanceMember,
         failedAt(
             element, "Field init element $element must be an instance field."));
-    return new StaticUse.internal(element, StaticUseKind.FIELD_INIT);
+    return StaticUse.internal(element, StaticUseKind.FIELD_INIT);
   }
 
   /// Constant initialization of an instance field [element].
@@ -614,7 +613,7 @@
         element.isInstanceMember,
         failedAt(
             element, "Field init element $element must be an instance field."));
-    return new StaticUse.internal(element, StaticUseKind.FIELD_CONSTANT_INIT,
+    return StaticUse.internal(element, StaticUseKind.FIELD_CONSTANT_INIT,
         constant: constant);
   }
 
@@ -624,7 +623,7 @@
         element.isInstanceMember || element is JRecordField,
         failedAt(element,
             "Field init element $element must be an instance or boxed field."));
-    return new StaticUse.internal(element, StaticUseKind.INSTANCE_FIELD_GET);
+    return StaticUse.internal(element, StaticUseKind.INSTANCE_FIELD_GET);
   }
 
   /// Write access of an instance field or boxed field [element].
@@ -633,19 +632,19 @@
         element.isInstanceMember || element is JRecordField,
         failedAt(element,
             "Field init element $element must be an instance or boxed field."));
-    return new StaticUse.internal(element, StaticUseKind.INSTANCE_FIELD_SET);
+    return StaticUse.internal(element, StaticUseKind.INSTANCE_FIELD_SET);
   }
 
   /// Read of a local function [element].
   factory StaticUse.closure(Local element) {
-    return new StaticUse.internal(element, StaticUseKind.CLOSURE);
+    return StaticUse.internal(element, StaticUseKind.CLOSURE);
   }
 
   /// An invocation of a local function [element] with the provided
   /// [callStructure] and [typeArguments].
   factory StaticUse.closureCall(Local element, CallStructure callStructure,
       List<DartType> typeArguments) {
-    StaticUse staticUse = new StaticUse.internal(
+    StaticUse staticUse = StaticUse.internal(
         element, StaticUseKind.CLOSURE_CALL,
         callStructure: callStructure, typeArguments: typeArguments);
     assert(staticUse._checkGenericInvariants());
@@ -654,27 +653,27 @@
 
   /// Read of a call [method] on a closureClass.
   factory StaticUse.callMethod(FunctionEntity method) {
-    return new StaticUse.internal(method, StaticUseKind.CALL_METHOD);
+    return StaticUse.internal(method, StaticUseKind.CALL_METHOD);
   }
 
   /// Implicit method/constructor invocation of [element] created by the
   /// backend.
   factory StaticUse.implicitInvoke(FunctionEntity element) {
-    return new StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
+    return StaticUse.internal(element, StaticUseKind.STATIC_INVOKE,
         callStructure: element.parameterStructure.callStructure);
   }
 
   /// Inlining of [element].
   factory StaticUse.constructorInlining(
       ConstructorEntity element, InterfaceType instanceType) {
-    return new StaticUse.internal(element, StaticUseKind.INLINING,
+    return StaticUse.internal(element, StaticUseKind.INLINING,
         type: instanceType);
   }
 
   /// Inlining of [element].
   factory StaticUse.methodInlining(
       FunctionEntity element, List<DartType> typeArguments) {
-    return new StaticUse.internal(element, StaticUseKind.INLINING,
+    return StaticUse.internal(element, StaticUseKind.INLINING,
         typeArguments: typeArguments);
   }
 
@@ -734,7 +733,7 @@
     TypeUseKind kind = source.readEnum(TypeUseKind.values);
     ImportEntity deferredImport = source.readImportOrNull();
     source.end(tag);
-    return new TypeUse.internal(type, kind, deferredImport);
+    return TypeUse.internal(type, kind, deferredImport);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -747,7 +746,7 @@
 
   /// Short textual representation use for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     switch (kind) {
       case TypeUseKind.IS_CHECK:
         sb.write('is:');
@@ -803,12 +802,12 @@
 
   /// [type] used in an is check, like `e is T` or `e is! T`.
   factory TypeUse.isCheck(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.IS_CHECK);
+    return TypeUse.internal(type, TypeUseKind.IS_CHECK);
   }
 
   /// [type] used in an as cast, like `e as T`.
   factory TypeUse.asCast(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.AS_CAST);
+    return TypeUse.internal(type, TypeUseKind.AS_CAST);
   }
 
   /// [type] used as a parameter type or field type in Dart 2, like `T` in:
@@ -817,7 +816,7 @@
   ///    T field;
   ///
   factory TypeUse.parameterCheck(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.PARAMETER_CHECK);
+    return TypeUse.internal(type, TypeUseKind.PARAMETER_CHECK);
   }
 
   /// [type] used in an implicit cast in Dart 2, like `T` in
@@ -826,44 +825,44 @@
   ///    T bar = foo; // Implicitly `T bar = foo as T`.
   ///
   factory TypeUse.implicitCast(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.IMPLICIT_CAST);
+    return TypeUse.internal(type, TypeUseKind.IMPLICIT_CAST);
   }
 
   /// [type] used in a on type catch clause, like `try {} on T catch (e) {}`.
   factory TypeUse.catchType(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.CATCH_TYPE);
+    return TypeUse.internal(type, TypeUseKind.CATCH_TYPE);
   }
 
   /// [type] used as a type literal, like `foo() => T;`.
   factory TypeUse.typeLiteral(DartType type, ImportEntity deferredImport) {
-    return new TypeUse.internal(type, TypeUseKind.TYPE_LITERAL, deferredImport);
+    return TypeUse.internal(type, TypeUseKind.TYPE_LITERAL, deferredImport);
   }
 
   /// [type] used in an instantiation, like `new T();`.
   factory TypeUse.instantiation(InterfaceType type) {
-    return new TypeUse.internal(type, TypeUseKind.INSTANTIATION);
+    return TypeUse.internal(type, TypeUseKind.INSTANTIATION);
   }
 
   /// [type] used in a constant instantiation, like `const T();`.
   factory TypeUse.constInstantiation(
       InterfaceType type, ImportEntity deferredImport) {
-    return new TypeUse.internal(
+    return TypeUse.internal(
         type, TypeUseKind.CONST_INSTANTIATION, deferredImport);
   }
 
   /// [type] used in a native instantiation.
   factory TypeUse.nativeInstantiation(InterfaceType type) {
-    return new TypeUse.internal(type, TypeUseKind.NATIVE_INSTANTIATION);
+    return TypeUse.internal(type, TypeUseKind.NATIVE_INSTANTIATION);
   }
 
   /// [type] used as a direct RTI value.
   factory TypeUse.constTypeLiteral(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.RTI_VALUE);
+    return TypeUse.internal(type, TypeUseKind.RTI_VALUE);
   }
 
   /// [type] constructor used, for example in a `instanceof` check.
   factory TypeUse.constructorReference(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.CONSTRUCTOR_REFERENCE);
+    return TypeUse.internal(type, TypeUseKind.CONSTRUCTOR_REFERENCE);
   }
 
   /// [type] used directly as a type argument.
@@ -871,7 +870,7 @@
   /// The happens during optimization where a type variable can be replaced by
   /// an invariable type argument derived from a constant receiver.
   factory TypeUse.typeArgument(DartType type) {
-    return new TypeUse.internal(type, TypeUseKind.TYPE_ARGUMENT);
+    return TypeUse.internal(type, TypeUseKind.TYPE_ARGUMENT);
   }
 
   /// [type] used as a named type variable in a recipe.
@@ -905,7 +904,7 @@
     source.begin(tag);
     ConstantValue value = source.readConstant();
     source.end(tag);
-    return new ConstantUse._(value);
+    return ConstantUse._(value);
   }
 
   void writeToDataSink(DataSink sink) {
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 3a91904..7ddd42e 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -94,7 +94,7 @@
   @override
   StrongModeWorldConstraints createSelectorConstraints(
       Selector selector, Object initialConstraint) {
-    return new StrongModeWorldConstraints()
+    return StrongModeWorldConstraints()
       ..addReceiverConstraint(initialConstraint);
   }
 
@@ -148,7 +148,7 @@
       _constraints = null;
       return true;
     }
-    _constraints ??= new Set<StrongModeConstraint>();
+    _constraints ??= Set<StrongModeConstraint>();
     return _constraints.add(constraint);
   }
 
@@ -177,7 +177,7 @@
       cls = commonElements.jsJavaScriptObjectClass;
       relation = ClassRelation.subtype;
     }
-    return new StrongModeConstraint.internal(cls, relation);
+    return StrongModeConstraint.internal(cls, relation);
   }
 
   const StrongModeConstraint.internal(this.cls, this.relation);
@@ -227,20 +227,20 @@
       <Selector, Set<DartType>>{};
 
   final Set<TypeVariableType> typeVariableTypeLiterals =
-      new Set<TypeVariableType>();
+      Set<TypeVariableType>();
 
   void _registerStaticTypeArgumentDependency(
       Entity element, List<DartType> typeArguments) {
-    staticTypeArgumentDependencies.putIfAbsent(
-        element, () => new Set<DartType>())
-      ..addAll(typeArguments);
+    staticTypeArgumentDependencies
+        .putIfAbsent(element, () => Set<DartType>())
+        .addAll(typeArguments);
   }
 
   void _registerDynamicTypeArgumentDependency(
       Selector selector, List<DartType> typeArguments) {
-    dynamicTypeArgumentDependencies.putIfAbsent(
-        selector, () => new Set<DartType>())
-      ..addAll(typeArguments);
+    dynamicTypeArgumentDependencies
+        .putIfAbsent(selector, () => Set<DartType>())
+        .addAll(typeArguments);
   }
 
   void registerStaticInvocation(StaticUse staticUse) {
diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart
index b7cdac8..85b9bb0 100644
--- a/pkg/compiler/lib/src/universe/world_impact.dart
+++ b/pkg/compiler/lib/src/universe/world_impact.dart
@@ -52,7 +52,7 @@
   String toString() => dump(this);
 
   static String dump(WorldImpact worldImpact) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     printOn(sb, worldImpact);
     return sb.toString();
   }
@@ -113,7 +113,7 @@
   @override
   void registerDynamicUse(DynamicUse dynamicUse) {
     assert(dynamicUse != null);
-    _dynamicUses ??= new Setlet<DynamicUse>();
+    _dynamicUses ??= Setlet<DynamicUse>();
     _dynamicUses.add(dynamicUse);
   }
 
@@ -125,7 +125,7 @@
   @override
   void registerTypeUse(TypeUse typeUse) {
     assert(typeUse != null);
-    _typeUses ??= new Setlet<TypeUse>();
+    _typeUses ??= Setlet<TypeUse>();
     _typeUses.add(typeUse);
   }
 
@@ -137,7 +137,7 @@
   @override
   void registerStaticUse(StaticUse staticUse) {
     assert(staticUse != null);
-    _staticUses ??= new Setlet<StaticUse>();
+    _staticUses ??= Setlet<StaticUse>();
     _staticUses.add(staticUse);
   }
 
@@ -149,7 +149,7 @@
   @override
   void registerConstantUse(ConstantUse constantUse) {
     assert(constantUse != null);
-    _constantUses ??= new Setlet<ConstantUse>();
+    _constantUses ??= Setlet<ConstantUse>();
     _constantUses.add(constantUse);
   }
 
@@ -166,11 +166,11 @@
   WorldImpactBuilderImpl _currentBuilder;
   List<WorldImpactBuilderImpl> _builders = <WorldImpactBuilderImpl>[];
 
-  StagedWorldImpactBuilder({this.collectImpacts: false});
+  StagedWorldImpactBuilder({this.collectImpacts = false});
 
   void _ensureBuilder() {
     if (_currentBuilder == null) {
-      _currentBuilder = new WorldImpactBuilderImpl();
+      _currentBuilder = WorldImpactBuilderImpl();
       if (collectImpacts) {
         _builders.add(_currentBuilder);
       }
@@ -248,7 +248,7 @@
   @override
   void registerDynamicUse(DynamicUse dynamicUse) {
     if (_dynamicUses == null) {
-      _dynamicUses = new Setlet<DynamicUse>();
+      _dynamicUses = Setlet<DynamicUse>();
       _dynamicUses.addAll(worldImpact.dynamicUses);
     }
     _dynamicUses.add(dynamicUse);
@@ -257,7 +257,7 @@
   @override
   void registerTypeUse(TypeUse typeUse) {
     if (_typeUses == null) {
-      _typeUses = new Setlet<TypeUse>();
+      _typeUses = Setlet<TypeUse>();
       _typeUses.addAll(worldImpact.typeUses);
     }
     _typeUses.add(typeUse);
@@ -271,7 +271,7 @@
   @override
   void registerStaticUse(StaticUse staticUse) {
     if (_staticUses == null) {
-      _staticUses = new Setlet<StaticUse>();
+      _staticUses = Setlet<StaticUse>();
       _staticUses.addAll(worldImpact.staticUses);
     }
     _staticUses.add(staticUse);
@@ -290,7 +290,7 @@
   @override
   void registerConstantUse(ConstantUse constantUse) {
     if (_constantUses == null) {
-      _constantUses = new Setlet<ConstantUse>();
+      _constantUses = Setlet<ConstantUse>();
       _constantUses.addAll(worldImpact.constantUses);
     }
     _constantUses.add(constantUse);
@@ -308,7 +308,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('TransformedWorldImpact($worldImpact)');
     WorldImpact.printOn(sb, this);
     return sb.toString();
@@ -352,7 +352,7 @@
 }
 
 // TODO(johnniwinther): Remove these when we get anonymous local classes.
-typedef void VisitUse<U>(MemberEntity member, U use);
+typedef VisitUse<U> = void Function(MemberEntity member, U use);
 
 class WorldImpactVisitorImpl implements WorldImpactVisitor {
   final VisitUse<StaticUse> _visitStaticUse;
diff --git a/pkg/compiler/lib/src/util/command_line.dart b/pkg/compiler/lib/src/util/command_line.dart
index 6930227..e1da5b8 100644
--- a/pkg/compiler/lib/src/util/command_line.dart
+++ b/pkg/compiler/lib/src/util/command_line.dart
@@ -29,10 +29,10 @@
 ///     // abc
 ///     // with " 'spaces
 List<String> splitLine(String line, {bool windows = false}) {
-  List<String> result = <String>[];
+  List<String> result = [];
   bool inQuotes = false;
   String? openingQuote;
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
   for (int i = 0; i < line.length; i++) {
     String c = line[i];
     if (inQuotes && c == openingQuote) {
@@ -46,7 +46,7 @@
     }
     if (c == '\\') {
       if (i == line.length - 1) {
-        throw new FormatException('Unfinished escape: $line');
+        throw FormatException('Unfinished escape: $line');
       }
       if (windows) {
         String next = line[i + 1];
@@ -73,7 +73,7 @@
     }
     buffer.write(c);
   }
-  if (inQuotes) throw new FormatException('Unclosed quotes: $line');
+  if (inQuotes) throw FormatException('Unclosed quotes: $line');
   if (buffer.isNotEmpty) result.add(buffer.toString());
   return result;
 }
diff --git a/pkg/compiler/lib/src/util/maplet.dart b/pkg/compiler/lib/src/util/maplet.dart
index bfe74b5..05d7c4c 100644
--- a/pkg/compiler/lib/src/util/maplet.dart
+++ b/pkg/compiler/lib/src/util/maplet.dart
@@ -9,7 +9,7 @@
 import 'dart:collection' show MapBase, IterableBase;
 
 class Maplet<K, V> extends MapBase<K, V> {
-  static const _MapletMarker _MARKER = const _MapletMarker();
+  static const _MapletMarker _MARKER = _MapletMarker();
   static const int CAPACITY = 8;
 
 // The maplet can be in one of four states:
@@ -101,7 +101,7 @@
       } else if (_key == key) {
         _value = value;
       } else {
-        List list = new List.filled(CAPACITY * 2, null);
+        List list = List.filled(CAPACITY * 2, null);
         list[0] = _key;
         list[1] = key;
         list[CAPACITY] = _value;
@@ -165,7 +165,7 @@
           copyTo++;
         }
       } else {
-        var map = new Map<K, V>();
+        var map = Map<K, V>();
         forEach((eachKey, eachValue) => map[eachKey] = eachValue);
         map[key] = value;
         _key = map;
@@ -225,7 +225,7 @@
   }
 
   @override
-  Iterable<K> get keys => new _MapletKeyIterable<K>(this);
+  Iterable<K> get keys => _MapletKeyIterable<K>(this);
 }
 
 class _MapletMarker {
@@ -240,11 +240,11 @@
   @override
   Iterator<K> get iterator {
     if (maplet._extra == null) {
-      return new _MapletSingleIterator<K>(maplet._key);
+      return _MapletSingleIterator<K>(maplet._key);
     } else if (Maplet._MARKER == maplet._extra) {
       return maplet._key.keys.iterator;
     } else {
-      return new _MapletListIterator<K>(maplet._key, maplet._extra);
+      return _MapletListIterator<K>(maplet._key, maplet._extra);
     }
   }
 }
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index a17fc60..72b3ec0 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -12,7 +12,7 @@
         JElementEnvironment,
         KCommonElements,
         KElementEnvironment;
-import 'deferred_load/deferred_load.dart';
+import 'deferred_load/output_unit.dart';
 import 'diagnostics/diagnostic_listener.dart';
 import 'elements/entities.dart';
 import 'elements/names.dart';
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index 1073c93..6e63cb6 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -12,7 +12,8 @@
   # Published packages - repo version ensured via dependency_overrides
   collection: any
   crypto: any
-  dart2js_info: any
+  dart2js_info:
+    path: ../dart2js_info
   front_end:
     path: ../front_end
   kernel:
@@ -39,6 +40,7 @@
   path: any
   source_maps: any
   test: any
+  cli_util: any
   # Unpublished packages that can be used via path dependency
   async_helper:
     path: ../async_helper
@@ -55,12 +57,20 @@
 
 dependency_overrides:
   # Packages with source in the SDK
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  analyzer:
+    path: ../analyzer
   front_end:
     path: ../front_end
+  js:
+    path: ../js
   kernel:
     path: ../kernel
   meta:
     path: ../meta
+  dart2js_info:
+    path: ../dart2js_info
 
   # Packages brought in via DEPS
   args:
@@ -75,8 +85,6 @@
     path: ../../third_party/pkg/convert
   crypto:
     path: ../../third_party/pkg/crypto
-  dart2js_info:
-    path: ../../third_party/pkg/dart2js_info
   fixnum:
     path: ../../third_party/pkg/fixnum
   http_parser:
@@ -90,9 +98,7 @@
   path:
     path: ../../third_party/pkg/path
   protobuf:
-    path: ../../third_party/pkg/protobuf
-  quiver:
-    path: ../../third_party/pkg/quiver
+    path: ../../third_party/pkg/protobuf/protobuf
   shelf:
     path: ../../third_party/pkg/shelf
   shelf_static:
@@ -105,6 +111,10 @@
     path: ../../third_party/pkg/stream_channel
   string_scanner:
     path: ../../third_party/pkg/string_scanner
+  test:
+    path: ../../third_party/pkg/test/pkgs/test
+  test_api:
+    path: ../../third_party/pkg/test/pkgs/test_api
   typed_data:
     path: ../../third_party/pkg/typed_data
   yaml:
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 9048e82..242faa0 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -170,13 +170,13 @@
     "Dynamic invocation of '>='.": 1,
     "Dynamic invocation of 'codeUnitAt'.": 1
   },
-  "third_party/pkg/dart2js_info/lib/json_info_codec.dart": {
+  "pkg/dart2js_info/lib/json_info_codec.dart": {
     "Dynamic invocation of '[]'.": 11,
     "Dynamic invocation of 'forEach'.": 2,
     "Dynamic invocation of 'map'.": 2,
     "Dynamic invocation of 'compareTo'.": 1
   },
-  "third_party/pkg/dart2js_info/lib/binary_serialization.dart": {
+  "pkg/dart2js_info/lib/binary_serialization.dart": {
     "Dynamic invocation of 'cast'.": 1
   },
   "pkg/compiler/lib/src/universe/side_effects.dart": {
@@ -209,11 +209,11 @@
     "Dynamic invocation of '[]'.": 9,
     "Dynamic invocation of 'toStatement'.": 3
   },
-  "third_party/pkg/dart2js_info/lib/src/util.dart": {
+  "pkg/dart2js_info/lib/src/util.dart": {
     "Dynamic access of 'name'.": 1,
     "Dynamic invocation of '-'.": 1
   },
-  "third_party/pkg/dart2js_info/lib/src/binary/sink.dart": {
+  "pkg/dart2js_info/lib/src/binary/sink.dart": {
     "Dynamic access of 'index'.": 1
   },
   "pkg/compiler/lib/src/inferrer/type_graph_nodes.dart": {
diff --git a/pkg/compiler/test/analysis_options.yaml b/pkg/compiler/test/analysis_options.yaml
index efa1621..ca57e09 100644
--- a/pkg/compiler/test/analysis_options.yaml
+++ b/pkg/compiler/test/analysis_options.yaml
@@ -9,6 +9,7 @@
 
   exclude:
     - '**/data/*'
+    - 'rti/emission/*'
     - '**/model_data/*'
     - 'deferred_loading/libs/*'
 
diff --git a/pkg/compiler/test/codegen/value_range_test.dart b/pkg/compiler/test/codegen/value_range_test.dart
index 0676cd7..c4b1a43 100644
--- a/pkg/compiler/test/codegen/value_range_test.dart
+++ b/pkg/compiler/test/codegen/value_range_test.dart
@@ -248,22 +248,23 @@
   return compile(code, check: (String generated) {
     switch (kind) {
       case REMOVED:
-        Expect.isTrue(!generated.contains('ioore'));
+        Expect.isFalse(generated.contains('ioore'));
         break;
 
       case ABOVE_ZERO:
-        Expect.isTrue(!generated.contains('< 0'));
+        Expect.isFalse(generated.contains('< 0') || generated.contains('>= 0'));
         Expect.isTrue(generated.contains('ioore'));
         break;
 
       case BELOW_ZERO_CHECK:
-        Expect.isTrue(generated.contains('< 0'));
-        Expect.isTrue(!generated.contains('||'));
+        // May generate `!(ix < 0)` or `ix >= 0` depending if `ix` can be NaN
+        Expect.isTrue(generated.contains('< 0') || generated.contains('>= 0'));
+        Expect.isFalse(generated.contains('||') || generated.contains('&&'));
         Expect.isTrue(generated.contains('ioore'));
         break;
 
       case BELOW_LENGTH:
-        Expect.isTrue(!generated.contains('||'));
+        Expect.isFalse(generated.contains('||') || generated.contains('&&'));
         Expect.isTrue(generated.contains('ioore'));
         break;
 
@@ -272,13 +273,13 @@
         break;
 
       case ONE_CHECK:
-        RegExp regexp = new RegExp('ioore');
+        RegExp regexp = RegExp('ioore');
         Iterator matches = regexp.allMatches(generated).iterator;
         checkNumberOfMatches(matches, 1);
         break;
 
       case ONE_ZERO_CHECK:
-        RegExp regexp = new RegExp('< 0|>>> 0 !==');
+        RegExp regexp = RegExp('< 0|>>> 0 !==');
         Iterator matches = regexp.allMatches(generated).iterator;
         checkNumberOfMatches(matches, 1);
         break;
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
new file mode 100644
index 0000000..5203eb3
--- /dev/null
+++ b/pkg/compiler/test/custom_split/custom_split_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.
+
+// @dart = 2.7
+
+import 'dart:io' hide Link;
+import 'package:async_helper/async_helper.dart';
+import '../equivalence/id_equivalence_helper.dart';
+import '../deferred_loading/deferred_loading_test_helper.dart';
+
+///  Add in options to pass to the compiler like
+/// `Flags.disableTypeInference` or `Flags.disableInlining`
+const List<String> compilerOptions = const [];
+
+const List<String> tests = [
+  'diamond',
+  'diamond_and',
+  'diamond_fuse',
+  'diamond_or',
+  'two_step',
+  'two_branch',
+];
+
+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'];
+  }
+  return perTestOptions;
+}
+
+/// 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
+/// or all supporting libraries to be in the `libs` folder, starting with the
+/// same name as the original file in `data`.
+main(List<String> args) {
+  asyncTest(() async {
+    Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
+    await checkTests(dataDir, const OutputUnitDataComputer(),
+        options: compilerOptions,
+        perTestOptions: createPerTestOptions(),
+        args: args, setUpFunction: () {
+      importPrefixes.clear();
+    }, testedConfigs: allSpecConfigs);
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.json b/pkg/compiler/test/custom_split/data/diamond/constraints.json
new file mode 100644
index 0000000..19bc46e
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.json
@@ -0,0 +1,42 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2a"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2b"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2a",
+    "successor": "s3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2b",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond/main.dart b/pkg/compiler/test/custom_split/data/diamond/main.dart
new file mode 100644
index 0000000..910949d
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/main.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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [5{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step3}], usedBy: [], needs: []},
+  p3: {units: [4{step2b, step3}], usedBy: [], needs: []},
+  p4: {units: [3{step2a, step2b, step3}], usedBy: [], needs: []},
+  p5: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [5{step3}],
+  f2: [2{step2a, step3}],
+  f3: [4{step2b, step3}],
+  f4: [3{step2a, step2b, step3}],
+  f5: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f5),
+  step2a=(f5, f4, f2),
+  step2b=(f5, f4, f3),
+  step3=(f5, f4, f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond/shared.dart b/pkg/compiler/test/custom_split/data/diamond/shared.dart
new file mode 100644
index 0000000..716a9ac
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/shared.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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=4{step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=3{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond/step1.dart b/pkg/compiler/test/custom_split/data/diamond/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step1.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step2a.dart b/pkg/compiler/test/custom_split/data/diamond/step2a.dart
new file mode 100644
index 0000000..e5f2dce
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step2a.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step2b.dart b/pkg/compiler/test/custom_split/data/diamond/step2b.dart
new file mode 100644
index 0000000..e733005
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step2b.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=4{step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step3.dart b/pkg/compiler/test/custom_split/data/diamond/step3.dart
new file mode 100644
index 0000000..05cc4af
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step3.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=5{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
new file mode 100644
index 0000000..72d7e25
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
@@ -0,0 +1,40 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "and",
+    "name": "s2",
+    "nodes": [
+      "s2a",
+      "s2b"
+    ]
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/main.dart b/pkg/compiler/test/custom_split/data/diamond_and/main.dart
new file mode 100644
index 0000000..910949d
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/main.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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [5{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step3}], usedBy: [], needs: []},
+  p3: {units: [4{step2b, step3}], usedBy: [], needs: []},
+  p4: {units: [3{step2a, step2b, step3}], usedBy: [], needs: []},
+  p5: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [5{step3}],
+  f2: [2{step2a, step3}],
+  f3: [4{step2b, step3}],
+  f4: [3{step2a, step2b, step3}],
+  f5: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f5),
+  step2a=(f5, f4, f2),
+  step2b=(f5, f4, f3),
+  step3=(f5, f4, f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/shared.dart b/pkg/compiler/test/custom_split/data/diamond_and/shared.dart
new file mode 100644
index 0000000..716a9ac
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/shared.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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=4{step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=3{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step1.dart b/pkg/compiler/test/custom_split/data/diamond_and/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step1.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step2a.dart b/pkg/compiler/test/custom_split/data/diamond_and/step2a.dart
new file mode 100644
index 0000000..e5f2dce
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step2a.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step2b.dart b/pkg/compiler/test/custom_split/data/diamond_and/step2b.dart
new file mode 100644
index 0000000..e733005
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step2b.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=4{step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step3.dart b/pkg/compiler/test/custom_split/data/diamond_and/step3.dart
new file mode 100644
index 0000000..05cc4af
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step3.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=5{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
new file mode 100644
index 0000000..9fbb3cd
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
@@ -0,0 +1,40 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "fuse",
+    "name": "s2",
+    "nodes": [
+      "s2a",
+      "s2b"
+    ]
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/main.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/main.dart
new file mode 100644
index 0000000..1067c37
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/main.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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [3{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step2b, step3}], usedBy: [], needs: []},
+  p3: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [3{step3}],
+  f2: [2{step2a, step2b, step3}],
+  f3: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f3),
+  step2a=(f3, f2),
+  step2b=(f3, f2),
+  step3=(f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/shared.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/shared.dart
new file mode 100644
index 0000000..102c8ae1
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/shared.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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step2b, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=2{step2a, step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=2{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=2{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step1.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step1.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.dart
new file mode 100644
index 0000000..c669534
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.dart
new file mode 100644
index 0000000..d543265
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step3.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step3.dart
new file mode 100644
index 0000000..f924158
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step3.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=3{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
new file mode 100644
index 0000000..310309a
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
@@ -0,0 +1,40 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "or",
+    "name": "s2",
+    "nodes": [
+      "s2a",
+      "s2b"
+    ]
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/main.dart b/pkg/compiler/test/custom_split/data/diamond_or/main.dart
new file mode 100644
index 0000000..eeac09b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/main.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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [2{step2a}], usedBy: [], needs: []},
+  p2: {units: [5{step2b}], usedBy: [], needs: []},
+  p3: {units: [7{step3}], usedBy: [], needs: []},
+  p4: {units: [3{step2a, step3}], usedBy: [], needs: []},
+  p5: {units: [6{step2b, step3}], usedBy: [], needs: []},
+  p6: {units: [4{step2a, step2b, step3}], usedBy: [], needs: []},
+  p7: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [2{step2a}],
+  f2: [5{step2b}],
+  f3: [7{step3}],
+  f4: [3{step2a, step3}],
+  f5: [6{step2b, step3}],
+  f6: [4{step2a, step2b, step3}],
+  f7: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f7),
+  step2a=(f7, f6, f4, f1),
+  step2b=(f7, f6, f5, f2),
+  step3=(f7, f6, f5, f4, f3)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/shared.dart b/pkg/compiler/test/custom_split/data/diamond_or/shared.dart
new file mode 100644
index 0000000..60cec94
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/shared.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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=3{step2a, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=6{step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=4{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=4{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/step1.dart b/pkg/compiler/test/custom_split/data/diamond_or/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/step1.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/step2a.dart b/pkg/compiler/test/custom_split/data/diamond_or/step2a.dart
new file mode 100644
index 0000000..6c52220
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/step2a.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/step2b.dart b/pkg/compiler/test/custom_split/data/diamond_or/step2b.dart
new file mode 100644
index 0000000..46e7aca
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/step2b.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=5{step2b}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/step3.dart b/pkg/compiler/test/custom_split/data/diamond_or/step3.dart
new file mode 100644
index 0000000..c4d45a9
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/step3.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.
+
+import 'shared.dart';
+
+/*member: step:member_unit=7{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/marker.options b/pkg/compiler/test/custom_split/data/marker.options
new file mode 100644
index 0000000..957a9d86
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/marker.options
@@ -0,0 +1 @@
+spec=pkg/compiler/test/custom_split/custom_split_test.dart
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.json b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
new file mode 100644
index 0000000..542cf85
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
@@ -0,0 +1,27 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2a"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2b"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/two_branch/main.dart b/pkg/compiler/test/custom_split/data/two_branch/main.dart
new file mode 100644
index 0000000..84b2505
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/main.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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [2{step2a}], usedBy: [], needs: []},
+  p2: {units: [4{step2b}], usedBy: [], needs: []},
+  p3: {units: [3{step2a, step2b}], usedBy: [], needs: []},
+  p4: {units: [1{step1, step2a, step2b}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [2{step2a}],
+  f2: [4{step2b}],
+  f3: [3{step2a, step2b}],
+  f4: [1{step1, step2a, step2b}]],
+ c_steps=[
+  step1=(f4),
+  step2a=(f4, f3, f1),
+  step2b=(f4, f3, f2)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/two_branch/shared.dart b/pkg/compiler/test/custom_split/data/two_branch/shared.dart
new file mode 100644
index 0000000..04d26c4
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/shared.dart
@@ -0,0 +1,19 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b}*/
+step2ab() => '2ab';
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step1.dart b/pkg/compiler/test/custom_split/data/two_branch/step1.dart
new file mode 100644
index 0000000..e178701
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step1.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b}*/
+step() => [step12a(), step12b(), step12ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step2a.dart b/pkg/compiler/test/custom_split/data/two_branch/step2a.dart
new file mode 100644
index 0000000..7b29726
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step2a.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=2{step2a}*/
+step() => [step12a(), step12ab(), step2ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step2b.dart b/pkg/compiler/test/custom_split/data/two_branch/step2b.dart
new file mode 100644
index 0000000..e9847b6
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step2b.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=4{step2b}*/
+step() => [step12b(), step12ab(), step2ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.json b/pkg/compiler/test/custom_split/data/two_step/constraints.json
new file mode 100644
index 0000000..31c29a1
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.json
@@ -0,0 +1,27 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2",
+    "import": "memory:sdk/tests/web/native/main.dart#step2"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/two_step/main.dart b/pkg/compiler/test/custom_split/data/two_step/main.dart
new file mode 100644
index 0000000..4692179
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/main.dart
@@ -0,0 +1,34 @@
+// 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.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [3{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2, step3}], usedBy: [], needs: []},
+  p3: {units: [1{step1, step2, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [3{step3}],
+  f2: [2{step2, step3}],
+  f3: [1{step1, step2, step3}]],
+ c_steps=[
+  step1=(f3),
+  step2=(f3, f2),
+  step3=(f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2.dart' deferred as step2;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/two_step/shared.dart b/pkg/compiler/test/custom_split/data/two_step/shared.dart
new file mode 100644
index 0000000..2d487df
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/shared.dart
@@ -0,0 +1,19 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12:member_unit=1{step1, step2, step3}*/
+step12() => '12';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step23:member_unit=2{step2, step3}*/
+step23() => '23';
+
+@pragma('dart2js:noInline')
+/*member: step123:member_unit=1{step1, step2, step3}*/
+step123() => '123';
diff --git a/pkg/compiler/test/custom_split/data/two_step/step1.dart b/pkg/compiler/test/custom_split/data/two_step/step1.dart
new file mode 100644
index 0000000..e6377fe
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step1.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2, step3}*/
+step() => [step12(), step13(), step123()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/step2.dart b/pkg/compiler/test/custom_split/data/two_step/step2.dart
new file mode 100644
index 0000000..85baeb5
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step2.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=2{step2, step3}*/
+step() => [step12(), step23(), step123()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/step3.dart b/pkg/compiler/test/custom_split/data/two_step/step3.dart
new file mode 100644
index 0000000..5f84ee6
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step3.dart
@@ -0,0 +1,8 @@
+// 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 'shared.dart';
+
+/*member: step:member_unit=3{step3}*/
+step() => [step13(), step23(), step123()];
diff --git a/pkg/compiler/test/deferred/constant_emission_test_helper.dart b/pkg/compiler/test/deferred/constant_emission_test_helper.dart
index 0f05dc3..e7bb164 100644
--- a/pkg/compiler/test/deferred/constant_emission_test_helper.dart
+++ b/pkg/compiler/test/deferred/constant_emission_test_helper.dart
@@ -9,7 +9,7 @@
 
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/constants/values.dart';
-import 'package:compiler/src/deferred_load/deferred_load.dart';
+import 'package:compiler/src/deferred_load/output_unit.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_emitter/model.dart';
diff --git a/pkg/compiler/test/deferred/load_graph_segmentation_test.dart b/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
index 64ec62d..67954ca 100644
--- a/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
+++ b/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
@@ -10,7 +10,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/deferred_load/deferred_load.dart';
+import 'package:compiler/src/deferred_load/output_unit.dart';
 import 'package:compiler/src/js_emitter/startup_emitter/fragment_merger.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
diff --git a/pkg/compiler/test/deferred/not_in_main_test.dart b/pkg/compiler/test/deferred/not_in_main_test.dart
index 11e92a3..d3e13bd 100644
--- a/pkg/compiler/test/deferred/not_in_main_test.dart
+++ b/pkg/compiler/test/deferred/not_in_main_test.dart
@@ -110,7 +110,7 @@
   dynamic shared = lookupLibrary("memory:shared.dart");
   var a = env.lookupClass(shared, "A");
   Expect.equals(
-      "OutputUnit(1, {import(def2: deferred), import(def3: deferred)})",
+      "OutputUnit(4, {import(def2: deferred), import(def3: deferred)})",
       outputUnitForClass(a).toString());
   Expect.equals(
       "OutputUnit(2, {import(def1: deferred), "
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
index 55ced68..34b9387 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
@@ -5,8 +5,8 @@
 // @dart = 2.7
 
 /*class: C3:
- class_unit=1{lib1, lib2},
- type_unit=1{lib1, lib2}
+ class_unit=2{lib1, lib2},
+ type_unit=2{lib1, lib2}
 */
-/*member: C3.:member_unit=1{lib1, lib2}*/
+/*member: C3.:member_unit=2{lib1, lib2}*/
 class C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
index ca698b0..39babb0 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
@@ -7,8 +7,8 @@
 import "deferred_overlapping_lib3.dart";
 
 /*class: C1:
- class_unit=2{lib1},
- type_unit=2{lib1}
+ class_unit=1{lib1},
+ type_unit=1{lib1}
 */
-/*member: C1.:member_unit=2{lib1}*/
+/*member: C1.:member_unit=1{lib1}*/
 class C1 extends C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
index 11062ba..acd021d 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
@@ -4,13 +4,13 @@
 
 /*spec.library: 
  a_pre_fragments=[
-  p1: {units: [2{lib1}], usedBy: [], needs: []},
+  p1: {units: [1{lib1}], usedBy: [], needs: []},
   p2: {units: [3{lib2}], usedBy: [], needs: []},
-  p3: {units: [1{lib1, lib2}], usedBy: [], needs: []}],
+  p3: {units: [2{lib1, lib2}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [2{lib1}],
+  f1: [1{lib1}],
   f2: [3{lib2}],
-  f3: [1{lib1, lib2}]],
+  f3: [2{lib1, lib2}]],
  c_steps=[
   lib1=(f3, f1),
   lib2=(f3, f2)]
@@ -18,13 +18,13 @@
 
 /*two-frag|three-frag.library: 
  a_pre_fragments=[
-  p1: {units: [2{lib1}], usedBy: [p3], needs: []},
+  p1: {units: [1{lib1}], usedBy: [p3], needs: []},
   p2: {units: [3{lib2}], usedBy: [p3], needs: []},
-  p3: {units: [1{lib1, lib2}], usedBy: [], needs: [p1, p2]}],
+  p3: {units: [2{lib1, lib2}], usedBy: [], needs: [p1, p2]}],
  b_finalized_fragments=[
-  f1: [2{lib1}],
+  f1: [1{lib1}],
   f2: [3{lib2}],
-  f3: [1{lib1, lib2}]],
+  f3: [2{lib1, lib2}]],
  c_steps=[
   lib1=(f3, f1),
   lib2=(f3, f2)]
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
index 50dde94..59fba08 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
@@ -4,14 +4,14 @@
 
 // @dart = 2.7
 
-/*member: getFoo:member_unit=2{b}*/
+/*member: getFoo:member_unit=1{b}*/
 T getFoo<T>(T v) => v;
 
 typedef dynamic G<T>(T v);
 
 /*member: m:
- constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=2{b}],
- member_unit=2{b}
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
 */
 m(int x, {G<int> f: getFoo}) {
   print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
index 66b862e..509c0ef 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
@@ -4,27 +4,39 @@
 
 /*spec.library: 
  a_pre_fragments=[
-  p1: {units: [2{b}], usedBy: [], needs: []},
+  p1: {units: [1{b}], usedBy: [], needs: []},
   p2: {units: [3{c}], usedBy: [], needs: []},
-  p3: {units: [1{b, c}], usedBy: [], needs: []}],
+  p3: {units: [2{b, c}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [2{b}],
+  f1: [1{b}],
   f2: [3{c}],
-  f3: [1{b, c}]],
+  f3: [2{b, c}]],
  c_steps=[
   b=(f3, f1),
   c=(f3, f2)]
 */
 
-/*two-frag|three-frag.library: 
+/*two-frag.library: 
  a_pre_fragments=[
-  p1: {units: [2{b}], usedBy: [p3], needs: []},
-  p2: {units: [3{c}], usedBy: [p3], needs: []},
-  p3: {units: [1{b, c}], usedBy: [], needs: [p1, p2]}],
+  p1: {units: [3{c}, 1{b}], usedBy: [p2], needs: []},
+  p2: {units: [2{b, c}], usedBy: [], needs: [p1]}],
  b_finalized_fragments=[
-  f1: [2{b}],
+  f1: [3{c}, 1{b}],
+  f2: [2{b, c}]],
+ c_steps=[
+  b=(f2, f1),
+  c=(f2, f1)]
+*/
+
+/*three-frag.library: 
+ a_pre_fragments=[
+  p1: {units: [1{b}], usedBy: [p3], needs: []},
+  p2: {units: [3{c}], usedBy: [p3], needs: []},
+  p3: {units: [2{b, c}], usedBy: [], needs: [p1, p2]}],
+ b_finalized_fragments=[
+  f1: [1{b}],
   f2: [3{c}],
-  f3: [1{b, c}]],
+  f3: [2{b, c}]],
  c_steps=[
   b=(f3, f1),
   c=(f3, f2)]
@@ -35,8 +47,14 @@
 // Test instantiations with the same type argument count used only in two
 // deferred libraries.
 
-/*class: global#Instantiation:class_unit=1{b, c},type_unit=1{b, c}*/
-/*class: global#Instantiation1:class_unit=1{b, c},type_unit=1{b, c}*/
+/*class: global#Instantiation:
+ class_unit=2{b, c},
+ type_unit=2{b, c}
+*/
+/*class: global#Instantiation1:
+ class_unit=2{b, c},
+ type_unit=2{b, c}
+*/
 
 import 'lib1.dart' deferred as b;
 import 'lib2.dart' deferred as c;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
index 506a6b3..a211ccb 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
@@ -4,14 +4,14 @@
 
 // @dart = 2.7
 
-/*member: getFoo:member_unit=2{b}*/
+/*member: getFoo:member_unit=1{b}*/
 T getFoo<T>(T v) => v;
 
 typedef dynamic G<T>(T v);
 
 /*member: m:
- constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=2{b}],
- member_unit=2{b}
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
 */
 m(int x, {G<int> f}) {
   f ??= getFoo;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
index 2150985..2d808b3 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
@@ -4,27 +4,39 @@
 
 /*spec.library: 
  a_pre_fragments=[
-  p1: {units: [2{b}], usedBy: [], needs: []},
+  p1: {units: [1{b}], usedBy: [], needs: []},
   p2: {units: [3{c}], usedBy: [], needs: []},
-  p3: {units: [1{b, c}], usedBy: [], needs: []}],
+  p3: {units: [2{b, c}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [2{b}],
+  f1: [1{b}],
   f2: [3{c}],
-  f3: [1{b, c}]],
+  f3: [2{b, c}]],
  c_steps=[
   b=(f3, f1),
   c=(f3, f2)]
 */
 
-/*two-frag|three-frag.library: 
+/*two-frag.library: 
  a_pre_fragments=[
-  p1: {units: [2{b}], usedBy: [p3], needs: []},
-  p2: {units: [3{c}], usedBy: [p3], needs: []},
-  p3: {units: [1{b, c}], usedBy: [], needs: [p1, p2]}],
+  p1: {units: [3{c}, 1{b}], usedBy: [p2], needs: []},
+  p2: {units: [2{b, c}], usedBy: [], needs: [p1]}],
  b_finalized_fragments=[
-  f1: [2{b}],
+  f1: [3{c}, 1{b}],
+  f2: [2{b, c}]],
+ c_steps=[
+  b=(f2, f1),
+  c=(f2, f1)]
+*/
+
+/*three-frag.library: 
+ a_pre_fragments=[
+  p1: {units: [1{b}], usedBy: [p3], needs: []},
+  p2: {units: [3{c}], usedBy: [p3], needs: []},
+  p3: {units: [2{b, c}], usedBy: [], needs: [p1, p2]}],
+ b_finalized_fragments=[
+  f1: [1{b}],
   f2: [3{c}],
-  f3: [1{b, c}]],
+  f3: [2{b, c}]],
  c_steps=[
   b=(f3, f1),
   c=(f3, f2)]
@@ -35,10 +47,16 @@
 // Test instantiations with the same type argument count used only in two
 // deferred libraries.
 
-/*class: global#Instantiation:class_unit=1{b, c},type_unit=1{b, c}*/
-/*class: global#Instantiation1:class_unit=1{b, c},type_unit=1{b, c}*/
+/*class: global#Instantiation:
+ class_unit=2{b, c},
+ type_unit=2{b, c}
+*/
+/*class: global#Instantiation1:
+ class_unit=2{b, c},
+ type_unit=2{b, c}
+*/
 
-/*member: global#instantiate1:member_unit=1{b, c}*/
+/*member: global#instantiate1:member_unit=2{b, c}*/
 
 import 'lib1.dart' deferred as b;
 import 'lib2.dart' deferred as c;
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
index 22064c8..d797b5b 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
@@ -5,28 +5,28 @@
 // @dart = 2.7
 
 /*class: Foo:
- class_unit=1{libB},
- type_unit=3{libA, libB, libC}
+ class_unit=4{libB},
+ type_unit=2{libA, libB, libC}
 */
 class Foo {
-  /*member: Foo.x:member_unit=1{libB}*/
+  /*member: Foo.x:member_unit=4{libB}*/
   int x;
-  /*member: Foo.:member_unit=1{libB}*/
+  /*member: Foo.:member_unit=4{libB}*/
   Foo() {
     x = DateTime.now().millisecond;
   }
-  /*member: Foo.method:member_unit=1{libB}*/
+  /*member: Foo.method:member_unit=4{libB}*/
   @pragma('dart2js:noInline')
   int method() => x;
 }
 
-/*member: isFoo:member_unit=3{libA, libB, libC}*/
+/*member: isFoo:member_unit=2{libA, libB, libC}*/
 @pragma('dart2js:noInline')
 bool isFoo(o) {
   return o is Foo;
 }
 
-/*member: callFooMethod:member_unit=1{libB}*/
+/*member: callFooMethod:member_unit=4{libB}*/
 @pragma('dart2js:noInline')
 int callFooMethod() {
   return Foo().method();
@@ -35,7 +35,7 @@
 typedef int FunFoo(Foo a);
 typedef int FunFunFoo(FunFoo b, int c);
 
-/*member: isFunFunFoo:member_unit=3{libA, libB, libC}*/
+/*member: isFunFunFoo:member_unit=2{libA, libB, libC}*/
 @pragma('dart2js:noInline')
 bool isFunFunFoo(o) {
   return o is FunFunFoo;
@@ -43,88 +43,88 @@
 
 /*class: Aoo:
  class_unit=none,
- type_unit=2{libC}
+ type_unit=6{libC}
 */
 class Aoo<T> {}
 
 /*class: Boo:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
 class Boo<T> implements Aoo<T> {}
 
 /*class: Coo:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
-/*member: Coo.:member_unit=2{libC}*/
+/*member: Coo.:member_unit=6{libC}*/
 class Coo<T> {}
 
 /*class: Doo:
- class_unit=2{libC},
+ class_unit=6{libC},
  type_unit=5{libB, libC}
 */
-/*member: Doo.:member_unit=2{libC}*/
+/*member: Doo.:member_unit=6{libC}*/
 class Doo<T> extends Coo<T> with Boo<T> {}
 
-/*member: createDooFunFunFoo:member_unit=2{libC}*/
+/*member: createDooFunFunFoo:member_unit=6{libC}*/
 @pragma('dart2js:noInline')
 createDooFunFunFoo() => Doo<FunFunFoo>();
 
 /*class: B:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
-/*member: B.:member_unit=2{libC}*/
+/*member: B.:member_unit=6{libC}*/
 class B {}
 
 /*class: B2:
- class_unit=2{libC},
- type_unit=4{libA, libC}
+ class_unit=6{libC},
+ type_unit=3{libA, libC}
 */
-/*member: B2.:member_unit=2{libC}*/
+/*member: B2.:member_unit=6{libC}*/
 class B2 extends B {}
 
 /*class: C1:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
 class C1 {}
 
 /*class: C2:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
-/*member: C2.:member_unit=2{libC}*/
+/*member: C2.:member_unit=6{libC}*/
 class C2 {}
 
 /*class: C3:
- class_unit=2{libC},
- type_unit=4{libA, libC}
+ class_unit=6{libC},
+ type_unit=3{libA, libC}
 */
-/*member: C3.:member_unit=2{libC}*/
+/*member: C3.:member_unit=6{libC}*/
 class C3 extends C2 with C1 {}
 
 /*class: D1:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
 class D1 {}
 
 /*class: D2:
- class_unit=2{libC},
- type_unit=2{libC}
+ class_unit=6{libC},
+ type_unit=6{libC}
 */
-/*member: D2.:member_unit=2{libC}*/
+/*member: D2.:member_unit=6{libC}*/
 class D2 {}
 
 /*class: D3:
- class_unit=2{libC},
- type_unit=4{libA, libC}
+ class_unit=6{libC},
+ type_unit=3{libA, libC}
 */
 class D3 = D2 with D1;
 
-/*member: isMega:member_unit=6{libA}*/
+/*member: isMega:member_unit=1{libA}*/
 @pragma('dart2js:noInline')
 bool isMega(o) {
   return o is B2 || o is C3 || o is D3;
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
index 447ec58..072f8fc 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
@@ -6,11 +6,11 @@
 
 import 'lib.dart' as lib;
 
-/*member: isFoo:member_unit=6{libA}*/
+/*member: isFoo:member_unit=1{libA}*/
 bool isFoo(o) => lib.isFoo(o);
 
-/*member: isFunFunFoo:member_unit=6{libA}*/
+/*member: isFunFunFoo:member_unit=1{libA}*/
 bool isFunFunFoo(o) => lib.isFunFunFoo(o);
 
-/*member: isMega:member_unit=6{libA}*/
+/*member: isMega:member_unit=1{libA}*/
 bool isMega(o) => lib.isMega(o);
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
index 20c2423..fffb803 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
@@ -6,14 +6,14 @@
 
 import 'lib.dart' as lib;
 
-/*member: callFooMethod:member_unit=1{libB}*/
+/*member: callFooMethod:member_unit=4{libB}*/
 int callFooMethod() => lib.callFooMethod();
 
-/*member: isFoo:member_unit=1{libB}*/
+/*member: isFoo:member_unit=4{libB}*/
 bool isFoo(o) => lib.isFoo(o);
 
-/*member: isFunFunFoo:member_unit=1{libB}*/
+/*member: isFunFunFoo:member_unit=4{libB}*/
 bool isFunFunFoo(o) => lib.isFunFunFoo(o);
 
-/*member: isDooFunFunFoo:member_unit=1{libB}*/
+/*member: isDooFunFunFoo:member_unit=4{libB}*/
 bool isDooFunFunFoo(o) => o is lib.Doo<lib.FunFunFoo>;
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
index ddc592e..a9a20f2 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
@@ -6,20 +6,20 @@
 
 import 'lib.dart' as lib;
 
-/*member: isFoo:member_unit=2{libC}*/
+/*member: isFoo:member_unit=6{libC}*/
 bool isFoo(o) => lib.isFoo(o);
 
-/*member: isFunFunFoo:member_unit=2{libC}*/
+/*member: isFunFunFoo:member_unit=6{libC}*/
 bool isFunFunFoo(o) => lib.isFunFunFoo(o);
 
-/*member: createB2:member_unit=2{libC}*/
+/*member: createB2:member_unit=6{libC}*/
 createB2() => new lib.B2();
 
-/*member: createC3:member_unit=2{libC}*/
+/*member: createC3:member_unit=6{libC}*/
 createC3() => new lib.C3();
 
-/*member: createD3:member_unit=2{libC}*/
+/*member: createD3:member_unit=6{libC}*/
 createD3() => new lib.D3();
 
-/*member: createDooFunFunFoo:member_unit=2{libC}*/
+/*member: createDooFunFunFoo:member_unit=6{libC}*/
 createDooFunFunFoo() => lib.createDooFunFunFoo();
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
index 0c00e5e..8ed7162 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
@@ -4,17 +4,17 @@
 
 /*spec.library: 
  a_pre_fragments=[
-  p1: {units: [6{libA}], usedBy: [], needs: []},
-  p2: {units: [1{libB}], usedBy: [], needs: []},
-  p3: {units: [2{libC}], usedBy: [], needs: []},
-  p4: {units: [4{libA, libC}], usedBy: [], needs: []},
+  p1: {units: [1{libA}], usedBy: [], needs: []},
+  p2: {units: [4{libB}], usedBy: [], needs: []},
+  p3: {units: [6{libC}], usedBy: [], needs: []},
+  p4: {units: [3{libA, libC}], usedBy: [], needs: []},
   p5: {units: [5{libB, libC}], usedBy: [], needs: []},
-  p6: {units: [3{libA, libB, libC}], usedBy: [], needs: []}],
+  p6: {units: [2{libA, libB, libC}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [6{libA}],
-  f2: [1{libB}],
-  f3: [2{libC}],
-  f6: [3{libA, libB, libC}]],
+  f1: [1{libA}],
+  f2: [4{libB}],
+  f3: [6{libC}],
+  f6: [2{libA, libB, libC}]],
  c_steps=[
   libA=(f6, f1),
   libB=(f6, f2),
@@ -23,13 +23,13 @@
 
 /*two-frag.library: 
  a_pre_fragments=[
-  p1: {units: [1{libB}, 6{libA}], usedBy: [p2, p3], needs: []},
-  p2: {units: [4{libA, libC}, 2{libC}], usedBy: [p3], needs: [p1]},
-  p3: {units: [3{libA, libB, libC}, 5{libB, libC}], usedBy: [], needs: [p2, p1]}],
+  p1: {units: [4{libB}, 1{libA}], usedBy: [p2, p3], needs: []},
+  p2: {units: [3{libA, libC}, 6{libC}], usedBy: [p3], needs: [p1]},
+  p3: {units: [2{libA, libB, libC}, 5{libB, libC}], usedBy: [], needs: [p2, p1]}],
  b_finalized_fragments=[
-  f1: [1{libB}, 6{libA}],
-  f2: [2{libC}],
-  f3: [3{libA, libB, libC}]],
+  f1: [4{libB}, 1{libA}],
+  f2: [6{libC}],
+  f3: [2{libA, libB, libC}]],
  c_steps=[
   libA=(f3, f1),
   libB=(f3, f1),
@@ -38,15 +38,15 @@
 
 /*three-frag.library: 
  a_pre_fragments=[
-  p1: {units: [6{libA}], usedBy: [p4], needs: []},
-  p2: {units: [1{libB}], usedBy: [p4], needs: []},
-  p3: {units: [2{libC}], usedBy: [p4], needs: []},
-  p4: {units: [3{libA, libB, libC}, 5{libB, libC}, 4{libA, libC}], usedBy: [], needs: [p3, p2, p1]}],
+  p1: {units: [1{libA}], usedBy: [p4], needs: []},
+  p2: {units: [4{libB}], usedBy: [p4], needs: []},
+  p3: {units: [6{libC}], usedBy: [p4], needs: []},
+  p4: {units: [2{libA, libB, libC}, 5{libB, libC}, 3{libA, libC}], usedBy: [], needs: [p3, p2, p1]}],
  b_finalized_fragments=[
-  f1: [6{libA}],
-  f2: [1{libB}],
-  f3: [2{libC}],
-  f4: [3{libA, libB, libC}]],
+  f1: [1{libA}],
+  f2: [4{libB}],
+  f3: [6{libC}],
+  f4: [2{libA, libB, libC}]],
  c_steps=[
   libA=(f4, f1),
   libB=(f4, f2),
@@ -61,19 +61,19 @@
 
 /*member: foo:
  constants=[
-  FunctionConstant(callFooMethod)=1{libB},
-  FunctionConstant(createB2)=2{libC},
-  FunctionConstant(createC3)=2{libC},
-  FunctionConstant(createD3)=2{libC},
-  FunctionConstant(createDooFunFunFoo)=2{libC},
-  FunctionConstant(isDooFunFunFoo)=1{libB},
-  FunctionConstant(isFoo)=1{libB},
-  FunctionConstant(isFoo)=2{libC},
-  FunctionConstant(isFoo)=6{libA},
-  FunctionConstant(isFunFunFoo)=1{libB},
-  FunctionConstant(isFunFunFoo)=2{libC},
-  FunctionConstant(isFunFunFoo)=6{libA},
-  FunctionConstant(isMega)=6{libA}],
+  FunctionConstant(callFooMethod)=4{libB},
+  FunctionConstant(createB2)=6{libC},
+  FunctionConstant(createC3)=6{libC},
+  FunctionConstant(createD3)=6{libC},
+  FunctionConstant(createDooFunFunFoo)=6{libC},
+  FunctionConstant(isDooFunFunFoo)=4{libB},
+  FunctionConstant(isFoo)=1{libA},
+  FunctionConstant(isFoo)=4{libB},
+  FunctionConstant(isFoo)=6{libC},
+  FunctionConstant(isFunFunFoo)=1{libA},
+  FunctionConstant(isFunFunFoo)=4{libB},
+  FunctionConstant(isFunFunFoo)=6{libC},
+  FunctionConstant(isMega)=1{libA}],
  member_unit=main{}
 */
 void foo() async {
diff --git a/pkg/compiler/test/deferred_loading/data/many_parts/libB.dart b/pkg/compiler/test/deferred_loading/data/many_parts/libB.dart
index 7f86fc1..8fa7f8e 100644
--- a/pkg/compiler/test/deferred_loading/data/many_parts/libB.dart
+++ b/pkg/compiler/test/deferred_loading/data/many_parts/libB.dart
@@ -4,14 +4,14 @@
 
 import "package:expect/expect.dart";
 
-/*member: v:member_unit=1{b1, b2, b3, b4, b5}*/
+/*member: v:member_unit=2{b1, b2, b3, b4, b5}*/
 void v(Set<String> u, String name, int bit) {
   Expect.isTrue(u.add(name));
   Expect.equals(name[bit], '1');
 }
 
 @pragma('dart2js:noInline')
-/*member: f_000_01:member_unit=2{b1}*/
+/*member: f_000_01:member_unit=1{b1}*/
 f_000_01(Set<String> u, int b) => v(u, '00001', b);
 
 @pragma('dart2js:noInline')
@@ -71,7 +71,7 @@
 f_111_01(Set<String> u, int b) => v(u, '11101', b);
 
 @pragma('dart2js:noInline')
-/*member: f_111_11:member_unit=1{b1, b2, b3, b4, b5}*/
+/*member: f_111_11:member_unit=2{b1, b2, b3, b4, b5}*/
 f_111_11(Set<String> u, int b) => v(u, '11111', b);
 
 @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/deferred_loading/data/many_parts/lib_000_01.dart b/pkg/compiler/test/deferred_loading/data/many_parts/lib_000_01.dart
index 94e3cf7..bb1e6d9 100644
--- a/pkg/compiler/test/deferred_loading/data/many_parts/lib_000_01.dart
+++ b/pkg/compiler/test/deferred_loading/data/many_parts/lib_000_01.dart
@@ -7,7 +7,7 @@
 import 'libB.dart';
 
 @pragma('dart2js:noInline')
-/*member: g_000_01:member_unit=2{b1}*/
+/*member: g_000_01:member_unit=1{b1}*/
 g_000_01() {
   Set<String> uniques = {};
 
diff --git a/pkg/compiler/test/deferred_loading/data/many_parts/main.dart b/pkg/compiler/test/deferred_loading/data/many_parts/main.dart
index cbb56aa..ab6a217 100644
--- a/pkg/compiler/test/deferred_loading/data/many_parts/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/many_parts/main.dart
@@ -14,7 +14,7 @@
   p17: {units: [7{b1, b2, b4}], usedBy: [], needs: []},
   p18: {units: [11{b1, b2, b5}], usedBy: [], needs: []},
   p19: {units: [8{b1, b3, b4}], usedBy: [], needs: []},
-  p1: {units: [2{b1}], usedBy: [], needs: []},
+  p1: {units: [1{b1}], usedBy: [], needs: []},
   p20: {units: [12{b1, b3, b5}], usedBy: [], needs: []},
   p21: {units: [14{b1, b4, b5}], usedBy: [], needs: []},
   p22: {units: [20{b2, b3, b4}], usedBy: [], needs: []},
@@ -27,7 +27,7 @@
   p29: {units: [16{b1, b3, b4, b5}], usedBy: [], needs: []},
   p2: {units: [17{b2}], usedBy: [], needs: []},
   p30: {units: [24{b2, b3, b4, b5}], usedBy: [], needs: []},
-  p31: {units: [1{b1, b2, b3, b4, b5}], usedBy: [], needs: []},
+  p31: {units: [2{b1, b2, b3, b4, b5}], usedBy: [], needs: []},
   p3: {units: [25{b3}], usedBy: [], needs: []},
   p4: {units: [29{b4}], usedBy: [], needs: []},
   p5: {units: [31{b5}], usedBy: [], needs: []},
@@ -46,7 +46,7 @@
   f17: [7{b1, b2, b4}],
   f18: [11{b1, b2, b5}],
   f19: [8{b1, b3, b4}],
-  f1: [2{b1}],
+  f1: [1{b1}],
   f20: [12{b1, b3, b5}],
   f21: [14{b1, b4, b5}],
   f22: [20{b2, b3, b4}],
@@ -59,7 +59,7 @@
   f29: [16{b1, b3, b4, b5}],
   f2: [17{b2}],
   f30: [24{b2, b3, b4, b5}],
-  f31: [1{b1, b2, b3, b4, b5}],
+  f31: [2{b1, b2, b3, b4, b5}],
   f3: [25{b3}],
   f4: [29{b4}],
   f5: [31{b5}],
@@ -77,15 +77,15 @@
 
 /*three-frag.library: 
  a_pre_fragments=[
-  p1: {units: [26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 2{b1}], usedBy: [p2], needs: []},
+  p1: {units: [26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 1{b1}], usedBy: [p2], needs: []},
   p2: {units: [9{b1, b2, b3, b4}, 28{b3, b4, b5}, 23{b2, b4, b5}, 22{b2, b3, b5}, 20{b2, b3, b4}, 14{b1, b4, b5}, 12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}], usedBy: [p4, p3], needs: [p1]},
   p3: {units: [24{b2, b3, b4, b5}, 16{b1, b3, b4, b5}, 15{b1, b2, b4, b5}, 13{b1, b2, b3, b5}], usedBy: [p4], needs: [p2]},
-  p4: {units: [1{b1, b2, b3, b4, b5}], usedBy: [], needs: [p2, p3]}],
+  p4: {units: [2{b1, b2, b3, b4, b5}], usedBy: [], needs: [p2, p3]}],
  b_finalized_fragments=[
-  f1: [26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 2{b1}],
+  f1: [26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 1{b1}],
   f2: [9{b1, b2, b3, b4}, 28{b3, b4, b5}, 23{b2, b4, b5}, 22{b2, b3, b5}, 20{b2, b3, b4}, 14{b1, b4, b5}, 12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}],
   f3: [24{b2, b3, b4, b5}, 16{b1, b3, b4, b5}, 15{b1, b2, b4, b5}, 13{b1, b2, b3, b5}],
-  f4: [1{b1, b2, b3, b4, b5}]],
+  f4: [2{b1, b2, b3, b4, b5}]],
  c_steps=[
   b1=(f4, f3, f2, f1),
   b2=(f4, f3, f2, f1),
@@ -96,13 +96,13 @@
 
 /*two-frag.library: 
  a_pre_fragments=[
-  p1: {units: [12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}, 26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 2{b1}], usedBy: [p2], needs: []},
+  p1: {units: [12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}, 26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 1{b1}], usedBy: [p2], needs: []},
   p2: {units: [24{b2, b3, b4, b5}, 16{b1, b3, b4, b5}, 15{b1, b2, b4, b5}, 13{b1, b2, b3, b5}, 9{b1, b2, b3, b4}, 28{b3, b4, b5}, 23{b2, b4, b5}, 22{b2, b3, b5}, 20{b2, b3, b4}, 14{b1, b4, b5}], usedBy: [p3], needs: [p1]},
-  p3: {units: [1{b1, b2, b3, b4, b5}], usedBy: [], needs: [p2]}],
+  p3: {units: [2{b1, b2, b3, b4, b5}], usedBy: [], needs: [p2]}],
  b_finalized_fragments=[
-  f1: [12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}, 26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 2{b1}],
+  f1: [12{b1, b3, b5}, 8{b1, b3, b4}, 11{b1, b2, b5}, 7{b1, b2, b4}, 5{b1, b2, b3}, 30{b4, b5}, 27{b3, b5}, 26{b3, b4}, 21{b2, b5}, 19{b2, b4}, 18{b2, b3}, 10{b1, b5}, 6{b1, b4}, 4{b1, b3}, 3{b1, b2}, 31{b5}, 29{b4}, 25{b3}, 17{b2}, 1{b1}],
   f2: [24{b2, b3, b4, b5}, 16{b1, b3, b4, b5}, 15{b1, b2, b4, b5}, 13{b1, b2, b3, b5}, 9{b1, b2, b3, b4}, 28{b3, b4, b5}, 23{b2, b4, b5}, 22{b2, b3, b5}, 20{b2, b3, b4}, 14{b1, b4, b5}],
-  f3: [1{b1, b2, b3, b4, b5}]],
+  f3: [2{b1, b2, b3, b4, b5}]],
  c_steps=[
   b1=(f3, f2, f1),
   b2=(f3, f2, f1),
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
index 9b56057..3147280 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
@@ -5,8 +5,8 @@
 // @dart = 2.7
 
 /*class: E:
- class_unit=2{lib3},
- type_unit=2{lib3}
+ class_unit=3{lib3},
+ type_unit=3{lib3}
 */
 class E<T> {
   const E();
@@ -14,7 +14,7 @@
 
 /*class: F:
  class_unit=none,
- type_unit=3{lib1, lib3}
+ type_unit=2{lib1, lib3}
 */
 class F {}
 
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
index 6703cb1..86f5ed6 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
@@ -5,11 +5,11 @@
 /*spec.library: 
  a_pre_fragments=[
   p1: {units: [1{lib1}], usedBy: [], needs: []},
-  p2: {units: [2{lib3}], usedBy: [], needs: []},
-  p3: {units: [3{lib1, lib3}], usedBy: [], needs: []}],
+  p2: {units: [3{lib3}], usedBy: [], needs: []},
+  p3: {units: [2{lib1, lib3}], usedBy: [], needs: []}],
  b_finalized_fragments=[
   f1: [1{lib1}],
-  f2: [2{lib3}]],
+  f2: [3{lib3}]],
  c_steps=[
   lib1=(f1),
   lib3=(f2)]
@@ -18,11 +18,11 @@
 /*two-frag|three-frag.library: 
  a_pre_fragments=[
   p1: {units: [1{lib1}], usedBy: [p3], needs: []},
-  p2: {units: [2{lib3}], usedBy: [p3], needs: []},
-  p3: {units: [3{lib1, lib3}], usedBy: [], needs: [p1, p2]}],
+  p2: {units: [3{lib3}], usedBy: [p3], needs: []},
+  p3: {units: [2{lib1, lib3}], usedBy: [], needs: [p1, p2]}],
  b_finalized_fragments=[
   f1: [1{lib1}],
-  f2: [2{lib3}]],
+  f2: [3{lib3}]],
  c_steps=[
   lib1=(f1),
   lib3=(f2)]
@@ -39,7 +39,7 @@
   ConstructedConstant(A<B*>())=1{lib1},
   ConstructedConstant(A<F*>())=1{lib1},
   ConstructedConstant(C<D*>())=main{},
-  ConstructedConstant(E<F*>())=2{lib3}],
+  ConstructedConstant(E<F*>())=3{lib3}],
  member_unit=main{}
 */
 main() async {
diff --git a/pkg/compiler/test/deferred_loading/deferred_loading_test.dart b/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
index aecbf54..57d6c44 100644
--- a/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
+++ b/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
@@ -6,7 +6,6 @@
 
 import 'dart:io' hide Link;
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/deferred_load/deferred_load.dart';
 import '../equivalence/id_equivalence_helper.dart';
 import 'deferred_loading_test_helper.dart';
 
diff --git a/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart b/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
index 73271f9..435002d 100644
--- a/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
+++ b/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
@@ -8,7 +8,7 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/deferred_load/deferred_load.dart';
+import 'package:compiler/src/deferred_load/output_unit.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/ir/util.dart';
 import 'package:compiler/src/js_model/element_map.dart';
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index a6423eb..20993eb 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -402,7 +402,8 @@
     int shards: 1,
     int shardIndex: 0,
     void onTest(Uri uri),
-    List<TestConfig> testedConfigs = const []}) async {
+    List<TestConfig> testedConfigs = const [],
+    Map<String, List<String>> perTestOptions = const {}}) async {
   if (testedConfigs.isEmpty) testedConfigs = defaultInternalConfigs;
   Set<String> testedMarkers =
       testedConfigs.map((config) => config.marker).toSet();
@@ -432,6 +433,9 @@
     if (name.endsWith('_ea.dart')) {
       testOptions.add(Flags.enableAsserts);
     }
+    if (perTestOptions.containsKey(name)) {
+      testOptions.addAll(perTestOptions[name]);
+    }
 
     if (setUpFunction != null) setUpFunction();
 
diff --git a/pkg/compiler/test/helpers/program_lookup.dart b/pkg/compiler/test/helpers/program_lookup.dart
index c6f3393..d1b5599 100644
--- a/pkg/compiler/test/helpers/program_lookup.dart
+++ b/pkg/compiler/test/helpers/program_lookup.dart
@@ -6,7 +6,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:compiler/src/common_elements.dart';
-import 'package:compiler/src/deferred_load/deferred_load.dart';
+import 'package:compiler/src/deferred_load/output_unit.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/namer.dart';
 import 'package:compiler/src/js_emitter/model.dart';
diff --git a/pkg/compiler/test/kernel/data/list_generate_2.dart.expect b/pkg/compiler/test/kernel/data/list_generate_2.dart.expect
index b58c1b6..c87b037 100644
--- a/pkg/compiler/test/kernel/data/list_generate_2.dart.expect
+++ b/pkg/compiler/test/kernel/data/list_generate_2.dart.expect
@@ -13,7 +13,7 @@
         final _in::JSArray<core::int*> _list = _in::JSArray::allocateGrowable<core::int*>(_length);
         for (core::int i = 0; i.{core::num::<}(_length){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::int) →* core::int}) {
           core::int* i = i;
-          _list.{_in::JSArray::[]=}(i, i.{core::num::+}(1){(core::num*) →* core::int*}){(core::int, core::int*) → void};
+          _list.{_in::JSArray::[]=}{Invariant,BoundsSafe}(i, i.{core::num::+}(1){(core::num*) →* core::int*}){(core::int, core::int*) → void};
         }
       } =>_list){(core::int, core::List<core::int*>*) → void};
     }
diff --git a/pkg/compiler/test/rti/data/instantiated_type_literal.dart b/pkg/compiler/test/rti/data/instantiated_type_literal.dart
new file mode 100644
index 0000000..23443cc
--- /dev/null
+++ b/pkg/compiler/test/rti/data/instantiated_type_literal.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.
+
+/*class: A:exp,needsArgs*/
+class A<T> {
+  instanceMethod() => A<T>;
+}
+
+/*class: B:exp,needsArgs*/
+class B<S, T> {
+  /*member: B.instanceMethod:
+   exp,
+   needsArgs,
+   selectors=[Selector(call, instanceMethod, arity=0, types=1)]
+  */
+  instanceMethod<U>() => B<T, U>;
+}
+
+main() {
+  var a = new A<int>();
+  a.instanceMethod();
+  var b = new B<int, String>();
+  b.instanceMethod<bool>();
+}
diff --git a/pkg/compiler/test/rti/data/instantiation8.dart b/pkg/compiler/test/rti/data/instantiation8.dart
new file mode 100644
index 0000000..f3750a1
--- /dev/null
+++ b/pkg/compiler/test/rti/data/instantiation8.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.
+
+// TODO(47054): Take closure signature into account to handle equality of
+// instantiated closures.
+/*class: Class:deps=[create]*/
+class Class<T> {}
+
+/*member: create:deps=[test]*/
+Class<T> create<T>() => new Class<T>();
+
+equals(a, b) {
+  if (a != b) throw '$a != $b';
+}
+
+test<T>(f) {
+  Class<T> Function() g = create;
+  equals(f, g);
+}
+
+main() {
+  Class<int> Function() f = create;
+  test<int>(f);
+}
diff --git a/pkg/compiler/test/rti/emission/instantiated_type_literal.dart b/pkg/compiler/test/rti/emission/instantiated_type_literal.dart
new file mode 100644
index 0000000..de04f0c
--- /dev/null
+++ b/pkg/compiler/test/rti/emission/instantiated_type_literal.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.
+
+import 'package:expect/expect.dart';
+
+/*class: A:checks=[],instance*/
+class A<T> {
+  instanceMethod() => A<T>;
+}
+
+/*class: B:checks=[],instance*/
+class B<S, T> {
+  instanceMethod<U>() => B<T, U>;
+}
+
+main() {
+  var a = new A<int>();
+  String name1 = '${a.instanceMethod()}';
+  var b = new B<int, String>();
+  String name2 = '${b.instanceMethod<bool>()}';
+
+  Expect.equals('A<int>', name1);
+  Expect.equals('B<String, bool>', name2);
+}
diff --git a/pkg/compiler/test/rti/rti_emission_test_helper.dart b/pkg/compiler/test/rti/rti_emission_test_helper.dart
index 3cca1c5..fbded89 100644
--- a/pkg/compiler/test/rti/rti_emission_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_emission_test_helper.dart
@@ -22,12 +22,17 @@
 import '../equivalence/id_equivalence_helper.dart';
 import '../helpers/program_lookup.dart';
 
+main(List<String> args) {
+  runTests(args);
+}
+
 runTests(List<String> args, [int shardIndex]) {
   asyncTest(() async {
     Directory dataDir =
         new Directory.fromUri(Platform.script.resolve('emission'));
     await checkTests(dataDir, const RtiEmissionDataComputer(),
         args: args,
+        options: ['--enable-experiment=constructor-tearoffs'],
         shardIndex: shardIndex ?? 0,
         shards: shardIndex != null ? 4 : 1);
   });
diff --git a/pkg/compiler/test/rti/rti_need_test_helper.dart b/pkg/compiler/test/rti/rti_need_test_helper.dart
index 5b15bb6..c59c219 100644
--- a/pkg/compiler/test/rti/rti_need_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_need_test_helper.dart
@@ -35,7 +35,7 @@
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const RtiNeedDataComputer(),
-        options: [],
+        options: ['--enable-experiment=constructor-tearoffs'],
         args: args,
         shardIndex: shardIndex ?? 0,
         shards: shardIndex != null ? 4 : 1);
diff --git a/pkg/compiler/testing.json b/pkg/compiler/testing.json
index df10340..7885980 100644
--- a/pkg/compiler/testing.json
+++ b/pkg/compiler/testing.json
@@ -15,6 +15,7 @@
     "exclude": [
       "^pkg/compiler/test/.*/data/.*",
       "^pkg/compiler/test/.*/data_2/.*",
+      "^pkg/compiler/test/.*/emission/.*",
       "^pkg/compiler/test/.*/model_data/.*",
       "^pkg/compiler/test/deferred_loading/libs/.*",
       "^pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart"
diff --git a/pkg/compiler/tool/kernel_visitor/dart_html_metrics_visitor.dart b/pkg/compiler/tool/kernel_visitor/dart_html_metrics_visitor.dart
new file mode 100644
index 0000000..13cc373
--- /dev/null
+++ b/pkg/compiler/tool/kernel_visitor/dart_html_metrics_visitor.dart
@@ -0,0 +1,247 @@
+// 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";
+import "dart:io";
+import "package:kernel/kernel.dart";
+import "package:kernel/ast.dart";
+
+main(List<String> args) async {
+  // Ensure right args are passed.
+  if (args.length < 1) {
+    print("usage: ${Platform.script} a.dill");
+  }
+
+  // Parse .dill and extract component.
+  var dill = args[0];
+  var component = loadComponentFromBinary(dill);
+  var visitor = MetricsVisitor(["dart:html"]);
+
+  // Visit component.
+  component.accept(visitor);
+
+  // Save data to file.
+  visitor.saveDataToFile("dart2html_metrics.json");
+}
+
+/// Visits classes in libraries specified by `libraryFilter`
+/// and aggregates metrics by class.
+class MetricsVisitor extends RecursiveVisitor {
+  String currentClass;
+  List<String> libraryFilter;
+  Map<String, ClassMetrics> classInfo = {};
+
+  MetricsVisitor([filter]) {
+    libraryFilter = filter ?? [];
+  }
+
+  @override
+  void visitComponent(Component node) {
+    super.visitComponent(node);
+    _processData();
+  }
+
+  @override
+  void visitLibrary(Library node) {
+    // Check if this is a library we want to visit.
+    var visit = libraryFilter.isNotEmpty
+        ? libraryFilter
+            .contains("${node.importUri.scheme}:${node.importUri.path}")
+        : true;
+
+    if (visit) {
+      super.visitLibrary(node);
+    }
+  }
+
+  @override
+  void visitProcedure(Procedure node) {
+    classInfo[currentClass].methods.add(ClassMetricsMethod(
+        node.name.text,
+        node.containsSuperCalls,
+        node.isInstanceMember,
+        node.isExternal,
+        node.isAbstract,
+        node.kind.toString()));
+  }
+
+  @override
+  void visitClass(Class node) {
+    // Dont want to add duplicate info.
+    // When mixed, anonymous mixin class generated so we want to ignore.
+    if (!node.isAnonymousMixin) {
+      currentClass = node.name;
+      var metrics = ClassMetrics();
+
+      // Check if class contains native members.
+      if (node.annotations.any(_isNativeMarkerAnnotation)) {
+        metrics.containsNativeMember = true;
+      }
+
+      // Check if Mixed.
+      if (node.superclass?.isAnonymousMixin ?? false) {
+        metrics.mixed = true;
+        metrics.mixins = _filterMixins(node.superclass.demangledName);
+      }
+
+      // Add parents.
+      if (node.superclass != null) {
+        var unmangledParent = _getParent(node.superclass);
+        metrics.parent = unmangledParent;
+      }
+
+      // Check for implemented classes.
+      if (node.implementedTypes.length > 0) {
+        var implementedTypes =
+            node.implementedTypes.map((type) => type.className.asClass.name);
+        metrics.implementedTypes = implementedTypes.toList();
+      }
+
+      classInfo[currentClass] = metrics;
+
+      super.visitClass(node);
+    }
+  }
+
+  // Returns List of parsed mixins from superclass name.
+  List<String> _filterMixins(String superWithMixins) {
+    var start = superWithMixins.indexOf("with") + 4;
+    var mixins = superWithMixins.substring(start);
+    mixins = mixins.replaceAll(" ", "");
+
+    return mixins.split(",");
+  }
+
+  // Recursively searches superclasses, filtering anonymous mixins,
+  // and returns parent class name.
+  String _getParent(Class node) {
+    if (node.isAnonymousMixin) {
+      return _getParent(node.superclass);
+    }
+
+    return node.name;
+  }
+
+  // Returns true if a class Annotation is Native.
+  bool _isNativeMarkerAnnotation(Expression annotation) {
+    if (annotation is ConstructorInvocation) {
+      var type = annotation.constructedType;
+      if (type.classNode.name == "Native") {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Passes through the aggregated data and processes,
+  // adding child classes and overridden methods from parent.
+  void _processData() {
+    classInfo.keys.forEach((className) {
+      var parentName = classInfo[className].parent;
+      if (classInfo[parentName] != null) {
+        classInfo[parentName].inheritedBy.add(className);
+
+        var notOverridden = <String>[];
+        var parentMethods = classInfo[parentName].methods.map((m) => m.name);
+        var classMethods = classInfo[className].methods.map((m) => m.name);
+
+        parentMethods.forEach((method) =>
+            {if (!classMethods.contains(method)) notOverridden.add(method)});
+
+        // Update Method Info.
+        classInfo[className].notOverriddenMethods = notOverridden;
+      }
+    });
+  }
+
+  // Saves the data to file.
+  void saveDataToFile(String filename) {
+    var formatted = jsonFormat(classInfo);
+
+    File(filename).writeAsStringSync(formatted);
+  }
+
+  // Converts the passed Map to a pretty print JSON string.
+  String jsonFormat(Map<String, ClassMetrics> info) {
+    JsonEncoder encoder = new JsonEncoder.withIndent("  ");
+    return encoder.convert(info);
+  }
+}
+
+/// Tracks info compiled for a class.
+class ClassMetrics {
+  List<ClassMetricsMethod> methods;
+  List<String> mixins;
+  List<String> implementedTypes;
+  List<String> notOverriddenMethods;
+  List<String> inheritedBy;
+  String parent;
+  bool mixed;
+  bool containsNativeMember;
+
+  ClassMetrics(
+      {this.mixed = false,
+      this.containsNativeMember = false,
+      this.parent,
+      methods,
+      mixins,
+      notOverridden,
+      implementedTypes,
+      inheritedBy}) {
+    this.methods = methods ?? [];
+    this.mixins = mixins ?? [];
+    this.notOverriddenMethods = notOverridden ?? [];
+    this.implementedTypes = implementedTypes ?? [];
+    this.inheritedBy = inheritedBy ?? [];
+  }
+
+  bool get invokesSuper {
+    if (methods.isNotEmpty) {
+      return methods.any((e) => e.invokesSuper);
+    }
+
+    return false;
+  }
+
+  Map<String, dynamic> toJson() {
+    return {
+      "invokesSuper": invokesSuper,
+      "methods": methods,
+      "mixed": mixed,
+      "mixins": mixins,
+      "parent": parent,
+      "inheritedBy": inheritedBy,
+      "containsNativeMember": containsNativeMember,
+      "notOverriddenMethods": notOverriddenMethods,
+      "implementedTypes": implementedTypes
+    };
+  }
+}
+
+/// Tracks info related to a specific method.
+class ClassMetricsMethod {
+  String name;
+  String methodKind;
+  bool invokesSuper;
+  bool isInstanceMember;
+  bool isExternal;
+  bool isAbstract;
+
+  ClassMetricsMethod(this.name,
+      [this.invokesSuper = false,
+      this.isInstanceMember = false,
+      this.isExternal = false,
+      this.isAbstract = false,
+      this.methodKind = ""]);
+
+  Map<String, dynamic> toJson() {
+    return {
+      "name": name,
+      "invokesSuper": invokesSuper,
+      "isInstanceMember": isInstanceMember,
+      "isExternal": isExternal,
+      "isAbstract": isAbstract,
+      "methodKind": methodKind
+    };
+  }
+}
diff --git a/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart b/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart
new file mode 100644
index 0000000..1e24648
--- /dev/null
+++ b/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart
@@ -0,0 +1,96 @@
+// 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/kernel.dart";
+import "package:expect/expect.dart";
+import "package:expect/minitest.dart";
+import "../dart_html_metrics_visitor.dart";
+import "package:cli_util/cli_util.dart";
+import "package:path/path.dart" as path;
+import "dart:io";
+
+main() async {
+  // Compile Dill
+  var sdkPath = getSdkPath();
+  if (!sdkPath.contains("ReleaseX64")) sdkPath = path.join(sdkPath, "ReleaseX64", "dart-sdk");
+  var scriptPath = Platform.script.path;
+  var pkgPath = path.dirname(
+      path.dirname(path.dirname(path.dirname(path.dirname(scriptPath)))));
+  var compilePath = path.canonicalize(
+      path.join(pkgPath, "front_end", "tool", "_fasta", "compile.dart"));
+  var testClassesPath = path
+      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dart"));
+  var ddcOutlinePath =
+      path.canonicalize(path.join(sdkPath, "lib", "_internal", "ddc_sdk.dill"));
+  var dillPath = path
+      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dill"));
+
+  await Process.run(path.join(sdkPath, "bin", "dart"), [
+    compilePath,
+    "--target=dartdevc",
+    "--platform=${ddcOutlinePath}",
+    "-o=${dillPath}",
+    testClassesPath
+  ]);
+
+  // Dill compiled from test_classes.dart using ddc.
+  var component = loadComponentFromBinary(dillPath);
+  var visitor = MetricsVisitor(["file:${testClassesPath}"]);
+
+  component.accept(visitor);
+
+  test("Class A does not call super", () {
+    Expect.equals(visitor.classInfo["A"].invokesSuper, false);
+  });
+
+  test("Class B does call super", () {
+    Expect.equals(visitor.classInfo["B"].invokesSuper, true);
+
+    var callingMethod = visitor.classInfo["B"].methods
+        .where((m) => m.name == "testSuper")
+        .toList()[0];
+    Expect.equals(callingMethod.invokesSuper, true);
+  });
+
+  test("Class C does not call super", () {
+    Expect.equals(visitor.classInfo["C"].invokesSuper, false);
+  });
+
+  test("Class A inherited by B", () {
+    Expect.equals(visitor.classInfo["A"].inheritedBy.contains("B"), true);
+    Expect.equals(visitor.classInfo["B"].parent, "A");
+  });
+
+  test("Class B inherited by C", () {
+    Expect.equals(visitor.classInfo["B"].inheritedBy.contains("C"), true);
+    Expect.equals(visitor.classInfo["C"].parent, "B");
+  });
+
+  test("Class B inherited by F", () {
+    Expect.equals(visitor.classInfo["B"].inheritedBy.contains("F"), true);
+    Expect.equals(visitor.classInfo["F"].parent, "B");
+  });
+
+  test("Class C inherited by nothing", () {
+    Expect.equals(visitor.classInfo["C"].inheritedBy.length, 0);
+  });
+
+  test("Class D mixed with Mix1 and Mix2", () {
+    Expect.equals(visitor.classInfo["D"].mixed, true);
+    Expect.deepEquals(visitor.classInfo["D"].mixins, ["Mix1", "Mix2"]);
+  });
+
+  test("Class F mixed with Mix1 and Mix2", () {
+    Expect.equals(visitor.classInfo["F"].mixed, true);
+    Expect.deepEquals(visitor.classInfo["F"].mixins, ["Mix1", "Mix2"]);
+  });
+
+  test("Class E implements A", () {
+    Expect.equals(visitor.classInfo["E"].implementedTypes.contains("A"), true);
+  });
+
+  test("Class G extends A but fails to override getValue()", () {
+    Expect.equals(
+        visitor.classInfo["G"].notOverriddenMethods.contains("getValue"), true);
+  });
+}
diff --git a/pkg/compiler/tool/kernel_visitor/test/test_classes.dart b/pkg/compiler/tool/kernel_visitor/test/test_classes.dart
new file mode 100644
index 0000000..2b02ef8
--- /dev/null
+++ b/pkg/compiler/tool/kernel_visitor/test/test_classes.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.
+library info_visitor_test_classes;
+
+// Test superclass value.
+class A {
+  A();
+
+  getValue() {
+    return "Value";
+  }
+}
+
+// Test subclass calling "super".
+class B extends A {
+  B();
+
+  testSuper() {
+    return super.getValue();
+  }
+}
+
+// Test subclass not calling "super".
+class C extends B {
+  C();
+
+  @override
+  getValue() {
+    return "Value";
+  }
+}
+
+// Test class with mixins.
+class Mix1 {}
+
+class Mix2 {}
+
+class D with Mix1, Mix2 {
+  D();
+}
+
+class F extends B with Mix1, Mix2 {
+  F();
+}
+
+// Test class with interface
+class E implements A {
+  E();
+
+  @override
+  getValue() {
+    return "E Value";
+  }
+}
+
+// Test class with unoverriden superclass method
+class G extends A {
+  G();
+}
diff --git a/pkg/dart2js_info/.github/move.yml b/pkg/dart2js_info/.github/move.yml
new file mode 100644
index 0000000..67155b2
--- /dev/null
+++ b/pkg/dart2js_info/.github/move.yml
@@ -0,0 +1,16 @@
+# Configuration for move-issues - https://github.com/dessant/move-issues
+
+# Delete the command comment when it contains no other content.
+deleteCommand: true
+
+# Close the source issue after moving.
+closeSourceIssue: true
+
+# Lock the source issue after moving.
+lockSourceIssue: false
+
+# Mention issue and comment authors.
+mentionAuthors: true
+
+# Preserve mentions in the issue content.
+keepContentMentions: true
diff --git a/pkg/dart2js_info/.github/workflows/test-package.yml b/pkg/dart2js_info/.github/workflows/test-package.yml
new file mode 100644
index 0000000..065727f
--- /dev/null
+++ b/pkg/dart2js_info/.github/workflows/test-package.yml
@@ -0,0 +1,61 @@
+name: Dart CI
+
+on:
+  # Run on PRs and pushes to the default branch.
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+  schedule:
+    - cron: "0 0 * * 0"
+
+env:
+  PUB_ENVIRONMENT: bot.github
+
+jobs:
+  # Check code formatting and static analysis on a single OS (linux)
+  # against Dart dev.
+  analyze:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        sdk: [dev]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: ${{ matrix.sdk }}
+      - id: install
+        name: Install dependencies
+        run: dart pub get
+      - name: Check formatting
+        run: dart format --output=none --set-exit-if-changed .
+        if: always() && steps.install.outcome == 'success'
+      - name: Analyze code
+        run: dart analyze
+        if: always() && steps.install.outcome == 'success'
+
+  # Run tests on a matrix consisting of two dimensions:
+  # 1. OS: ubuntu-latest, (macos-latest, windows-latest)
+  # 2. release channel: dev
+  test:
+    needs: analyze
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        # Add macos-latest and/or windows-latest if relevant for this package.
+        os: [ubuntu-latest]
+        sdk: [2.12.0, dev]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: ${{ matrix.sdk }}
+      - id: install
+        name: Install dependencies
+        run: dart pub get
+      - name: Run VM tests
+        run: dart test --platform vm
+        if: always() && steps.install.outcome == 'success'
diff --git a/pkg/dart2js_info/.gitignore b/pkg/dart2js_info/.gitignore
new file mode 100644
index 0000000..2bc83b8
--- /dev/null
+++ b/pkg/dart2js_info/.gitignore
@@ -0,0 +1,14 @@
+.buildlog
+.DS_Store
+*.swp
+*.swo
+.idea
+*.iml
+.pub/
+.settings/
+build/
+packages
+.packages
+pubspec.lock
+bin/inference/client.dart.js*
+.dart_tool/
diff --git a/pkg/dart2js_info/.status b/pkg/dart2js_info/.status
new file mode 100644
index 0000000..364ca4b
--- /dev/null
+++ b/pkg/dart2js_info/.status
@@ -0,0 +1,4 @@
+# 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.
+
diff --git a/pkg/dart2js_info/AUTHORS b/pkg/dart2js_info/AUTHORS
new file mode 100644
index 0000000..e8063a8
--- /dev/null
+++ b/pkg/dart2js_info/AUTHORS
@@ -0,0 +1,6 @@
+# Below is a list of people and organizations that have contributed
+# to the project. Names should be added to the list like so:
+#
+#   Name/Organization <email address>
+
+Google Inc.
diff --git a/pkg/dart2js_info/CHANGELOG.md b/pkg/dart2js_info/CHANGELOG.md
new file mode 100644
index 0000000..ea4fe67b
--- /dev/null
+++ b/pkg/dart2js_info/CHANGELOG.md
@@ -0,0 +1,180 @@
+## 0.6.5
+
+* Drop unused dependencies.
+
+## 0.6.4
+
+* Make compatible with the null-safe version of `args`. 
+
+## 0.6.3
+
+* Broaden version ranges for `fixnum` and `protobuf` dependencies to make
+  `dart2js_info` compatible with null-safe `protobuf` version.
+
+## 0.6.2
+
+* Update `protobuf` dependency.
+* Set min SDK to `2.3.0`, as generated code contains this version.
+
+## 0.6.1
+
+* Move binary subcommands under src folder. Otherwise, `pub global activate`
+  fails.
+
+## 0.6.0
+
+This release contains several **breaking changes**:
+
+* The fields `Info.id` and `Info.serializedId` have been removed. These
+  properties were only used for serialization and deserialization. Those values
+  are now computed during the serialization process instead.
+
+* Added `CodeSpan` - a representation of code regions referring to output files.
+  This will be used to transition to a lighterweight dump-info that doesn't
+  embed code snippets (since they are duplicated with the output program).
+
+  Encoder produces a new format for code-spans, but for a transitional period
+  a flag is provided to produce the old format. The decoder is still backwards
+  compatible (filling in just the `text` in `CodeSpan` where the json contained
+  a String).
+
+* Deleted unused `Measurements`.
+
+* Split the json codec from info.dart.
+
+* Introduced `lib/binary_serialization.dart` a lighterweight
+  serialization/deserialization implementation. This will eventually be used by
+  default by dart2js.
+
+* Added backwards compatibility flag to the JSON codec, to make transition to
+  new tools more gradual.
+
+* Added a tool to dump info files in a readable text form.
+
+* Consolidated all binary tools under a single command. Now you can access all
+  tools as follows:
+  ```
+  pub global activate dart2js_info
+  dart2js_info <command> [arguments] ...
+  ```
+
+  See updated documentation in README.md
+
+## 0.5.17
+
+* Make `live_code_size_analysis` print library URIs and not library names.
+
+## 0.5.16
+
+* Split out IO dependency from `util.dart`, so all other utilities can be used
+  on any platform.
+
+## 0.5.15
+
+* Add `BasicInfo.resetIds` to free internal cache used for id uniqueness.
+
+## 0.5.14
+* Updates `coverage_log_server.dart` and `live_code_size_analysis.dart` to make
+  them strong clean and match the latest changes in dart2js.
+
+## 0.5.13
+
+* Use a more efficient `Map` implementation for decoding existing info files.
+
+* Use a relative path when generating unique IDs for elements in non-package
+  sources.
+
+## 0.5.12
+
+* Improved output of `dart2js_info_diff` by sorting the diffs by
+  size and outputting the summary in full output mode.
+
+## 0.5.11
+
+* Added `--summary` option to `dart2js_info_diff` tool.
+
+## 0.5.10
+
+* Set max SDK version to `<3.0.0`, and adjust other dependencies.
+
+## 0.5.6+4
+
+- Changes to make the library strong mode (runtime) clean.
+
+## 0.5.6
+
+- Added `isRuntimeTypeUsed`, `isIsolateInUse`, `isFunctionApplyUsed` and `isMirrorsUsed` to
+  `ProgramInfo`.
+
+## 0.5.5+1
+
+- Support the latest versions of `shelf` and `args` packages.
+
+## 0.5.5
+
+- Added `diff` tool.
+
+## 0.5.4+2
+
+- Updated minimum SDK dependency to align with package dependencies.
+- Allowed the latest version of `pkg/quiver`.
+- Updated the homepage.
+- Improved the stability and eliminated duplicates in "holding" dump info
+  output.
+
+## 0.5.4+1
+
+- Remove files published accidentally.
+
+## 0.5.4
+
+- Added script to show inferred types of functions and fields on the command
+  line.
+
+## 0.5.3+1
+
+- Improved the stability of `ConstantInfo.id`.
+
+## 0.5.3
+
+- Made IDs in the JSON format stable. Improves plain text diffing.
+
+## 0.2.7
+- Make dart2js_info strong-mode clean.
+
+## 0.2.6
+- Add tool to get breakdown of deferred libraries by size.
+
+## 0.2.5
+- Changed the `deferred_library_check` tool to allow parts to exclude packages
+  and to not assume that unspecified packages are in the main part.
+
+## 0.2.4
+- Added `imports` field for `OutputUnitInfo`
+
+## 0.2.3
+- Moved `deferred_library_check` functionality to a library
+
+## 0.2.2
+- Added `deferred_libary_check` tool
+
+## 0.2.1
+- Merged `verify_deps` tool into `debug_info` tool
+
+## 0.2.0
+- Added `AllInfoJsonCodec`
+- Added `verify_deps` tool
+
+## 0.1.0
+- Added `ProgramInfo.entrypoint`.
+- Added experimental information about calls in function bodies. This will
+  likely change again in the near future.
+
+## 0.0.3
+- Added executable names
+
+## 0.0.2
+- Add support for `ConstantInfo`
+
+## 0.0.1
+- Initial version
diff --git a/pkg/dart2js_info/CONTRIBUTING.md b/pkg/dart2js_info/CONTRIBUTING.md
new file mode 100644
index 0000000..6f5e0ea
--- /dev/null
+++ b/pkg/dart2js_info/CONTRIBUTING.md
@@ -0,0 +1,33 @@
+Want to contribute? Great! First, read this page (including the small print at
+the end).
+
+### Before you contribute
+Before we can use your code, you must sign the
+[Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual)
+(CLA), which you can do online. The CLA is necessary mainly because you own the
+copyright to your changes, even after your contribution becomes part of our
+codebase, so we need your permission to use and distribute your code. We also
+need to be sure of various other things—for instance that you'll tell us if you
+know that your code infringes on other people's patents. You don't have to sign
+the CLA until after you've submitted your code for review and a member has
+approved it, but you must do it before we can put your code into our codebase.
+
+Before you start working on a larger contribution, you should get in touch with
+us first through the issue tracker with your idea so that we can help out and
+possibly guide you. Coordinating up front makes it much easier to avoid
+frustration later on.
+
+### Code reviews
+All submissions, including submissions by project members, require review.
+
+### File headers
+All files in the project must start with the following header.
+
+    // 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.
+
+### The small print
+Contributions made by corporations are covered by a different agreement than the
+one above, the
+[Software Grant and Corporate Contributor License Agreement](https://developers.google.com/open-source/cla/corporate).
diff --git a/pkg/dart2js_info/DEVELOPER.md b/pkg/dart2js_info/DEVELOPER.md
new file mode 100644
index 0000000..6f517b8
--- /dev/null
+++ b/pkg/dart2js_info/DEVELOPER.md
@@ -0,0 +1,54 @@
+# Notes for developers
+
+## Developing locally together with dart2js:
+
+* Use a path dependency on this repo to prepare changes.
+
+## Submitting changes.
+
+* Submit changes in this repo first.
+* Update the sdk/DEPS and sdk/tools/deps/dartium.deps/DEPS to use the latest
+  hash of this repo.
+* Submit dart2js changes together with the roll in DEPS.
+
+## Updating the dart2js\_info dart docs
+
+We use `dartdoc` and host the generated documentation as a [github page][1] in
+this repo. Here is how to update it:
+
+* Make sure you have the dartdoc tool installed:
+
+```
+pub global activate dartdoc
+```
+
+* Run the dartdoc tool on the root of the repo in master, specify an out
+  directory different than `doc`:
+
+```sh
+dartdoc --output _docs
+```
+
+* Switch to the `gh-pages` branch:
+
+```
+git checkout gh-pages
+git pull
+```
+
+* Override the existing docs by hand:
+
+```
+rm -r doc/api
+mv _docs doc/api
+git diff # validate changes look right
+git commit -a -m "Update documentation ... "
+```
+
+* Update the gh-pages branch in the server
+```
+git push origin gh-pages
+```
+
+
+[1]: http://dart-lang.github.io/dart2js_info/doc/api/dart2js_info.info/AllInfo-class.html
diff --git a/pkg/dart2js_info/LICENSE b/pkg/dart2js_info/LICENSE
new file mode 100644
index 0000000..dbd2843
--- /dev/null
+++ b/pkg/dart2js_info/LICENSE
@@ -0,0 +1,27 @@
+Copyright 2015, the Dart project authors. 
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google LLC nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/dart2js_info/README.md b/pkg/dart2js_info/README.md
new file mode 100644
index 0000000..28ec26f
--- /dev/null
+++ b/pkg/dart2js_info/README.md
@@ -0,0 +1,518 @@
+# Dart2js Info
+
+This package contains libraries and tools you can use to process info
+files produced when running dart2js with `--dump-info`.
+
+The info files contain data about each element included in the output of your
+program. The data includes information such as:
+
+  * the size that each function adds to the `.dart.js` output,
+  * dependencies between functions,
+  * how the code is clustered when using deferred libraries, and
+  * the declared and inferred type of each function argument.
+
+All of this information can help you understand why some piece of code is
+included in your compiled application, and how far was dart2js able to
+understand your code. This data can help you make changes to improve the quality
+and size of your framework or app.
+
+This package focuses on gathering libraries and tools that summarize all of that
+information. Bear in mind that even with all these tools, it is not trivial to
+isolate code-size issues. We just hope that these tools make things a bit
+easier.
+
+## Status
+
+Currently, most tools available here can be used to analyze code-size and
+attribution of code-size to different parts of your app. With time, we hope to
+add more data to the info files, and include better tools to help
+understand the results of type inference.
+
+This package is still in flux and we might make breaking changes at any time.
+Our current goal is not to provide a stable API, we mainly want to expose the
+functionality and iterate on it.  We recommend that you pin a specific version
+of this package and update when needed.
+
+## Tools
+
+All tools are provided as commands of a single command-line interface. To
+install:
+```console
+pub global activate dart2js_info
+```
+
+To run a tool, then run:
+```console
+dart2js_info <command> [arguments]
+```
+
+There is a short help available on the tool, and more details are provided
+below.
+
+## Format
+
+There are several formats of info files. Dart2js today produces a JSON format,
+but very soon will switch to produce a binary format by default.
+
+## Info API
+
+This package also exposes libraries to parse and represent the information from
+the info files. If there is data that is stored in the info files but not
+exposed by one of our tools, you may be able to use the info APIs to quickly put
+together your own tool.
+
+[AllInfo][AllInfo] exposes a Dart representation of all of the collected
+information. There are deserialization libraries in this package to decode any
+info file produced by the `dart2js` `--dump-info` option. See
+`lib/binary_serialization.dart` and `lib/json_info_codec.dart` to find the
+binary and JSON decoders respectively. For convenience,
+`package:dart2js_info/src/io.dart` also exposes a helper method that can choose,
+depending on the extension of the info file, whether to deserialize it using the
+binary or JSON decoder.  For example:
+
+```dart
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+main(args) async {
+  var infoPath = args[0];
+  var info = await infoFromFile(infoPath);
+  ...
+}
+```
+
+## Available tools
+
+The following tools are a available today:
+
+  * [`code_deps`][code_deps]: simple tool that can answer queries about the
+    dependency between functions and fields in your program. Currently it only
+    supports the `some_path` query, which shows a dependency path from one
+    function to another.
+    
+  * [`diff`][diff]: a tool that diffs two info files and reports which
+    program elements have been added, removed, or changed size. This also
+    tells which elements are no longer deferred or have become deferred.
+
+  * [`library_size`][library_size]: a tool that shows how much code was
+    attributed to each library. This tool is configurable so it can group data
+    in many ways (e.g. to tally together all libraries that belong to a package,
+    or all libraries that match certain name pattern).
+
+  * [`deferred_check`][deferred_check]: a tool that verifies that code
+    was split into deferred parts as expected. This tool takes a specification
+    of the expected layout of code into deferred parts, and checks that the
+    output from `dart2js` meets the specification.
+
+  * [`deferred_size`][deferred_size]: a tool that gives a breakdown of
+    the sizes of the deferred parts of the program. This can show how much of
+    your total code size can be loaded deferred.
+
+  * [`deferred_layout`][deferred_layout]: a tool that reports which
+    code is included on each output unit.
+
+  * [`function_size`][function_size]: a tool that shows how much
+    code was attributed to each function. This tool also uses dependency
+    information to compute dominance and reachability data. This information can
+    sometimes help determine how much savings could come if the function was not
+    included in the program.
+
+  * [`coverage_server`][coverage_server] and [`coverage_analysis`][coverage_analysis]:
+    dart2js has an experimental feature to gather coverage data of your
+    application. The `coverage_log_server` can record this data, and
+    `live_code_size_analysis` can correlate that with the info file, so you
+    determine why code that is not used is being included in your app.
+
+  * [`convert`][convert]: a tool that converts info files from one format to
+    another. Accepted inputs are JSON or the internal binary form, outputs can
+    be JSON, backward-compatible JSON, binary, or protobuf schema (as defined in
+    `info.proto`).
+
+  * [`show`][show]: a tool that dumps info files in a readable text format.
+
+Next we describe in detail how to use each of these tools.
+
+### Code deps tool
+
+This command-line tool can be used to query for code dependencies. Currently
+this tool only supports the `some_path` query, which gives you the shortest path
+for how one function depends on another.
+
+Run this tool as follows:
+```console
+# activate is only needed once to install the dart2js_info tool
+$ pub global activate dart2js_info
+$ dart2js_info code_deps some_path out.js.info.data main foo
+```
+
+The arguments to the query are regular expressions that can be used to
+select a single element in your program. If your regular expression is too
+general and has more than one match, this tool will pick
+the first match and ignore the rest. Regular expressions are matched against
+a fully qualified element name, which includes the library and class name
+(if any) that contains it. A typical qualified name is of this form:
+
+    libraryName::ClassName.elementName
+
+If the name of a function your are looking for is unique enough, it might be
+sufficient to just write that name as your regular expression.
+
+### Diff tool
+
+This command-line tool shows a diff between two info files. It can be run
+as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info diff old.js.info.data new.js.info.data [--summary]
+```
+
+The tool gives a breakdown of the difference between the two info files.
+Here's an example output:
+
+```
+total_size_difference -2688
+total_added 0
+total_removed 2321
+total_size_changed -203
+total_became_deferred 0
+total_no_longer_deferred 0
+
+ADDED (0 bytes)
+========================================================================
+
+REMOVED (2321 bytes)
+========================================================================
+dart:_js_helper::getRuntimeTypeString: 488 bytes
+dart:_js_helper::substitute: 479 bytes
+dart:_js_helper::TypeImpl.toString: 421 bytes
+dart:_js_helper::computeSignature: 204 bytes
+dart:_js_helper::getRuntimeTypeArguments: 181 bytes
+dart:_js_helper::extractFunctionTypeObjectFrom: 171 bytes
+dart:_js_helper::getTypeArgumentByIndex: 147 bytes
+dart:_js_helper::runtimeTypeToString: 136 bytes
+dart:_js_helper::setRuntimeTypeInfo: 94 bytes
+dart:core::Object.runtimeType: 0 bytes
+dart:_js_helper::getRawRuntimeType: 0 bytes
+dart:_js_helper::invoke: 0 bytes
+dart:_js_helper::invokeOn: 0 bytes
+dart:_js_helper::getField: 0 bytes
+dart:_js_helper::getClassName: 0 bytes
+dart:_js_helper::getRuntimeType: 0 bytes
+dart:_js_helper::TypeImpl.TypeImpl: 0 bytes
+
+CHANGED SIZE (-203 bytes)
+========================================================================
+dart:_interceptors::JSUnmodifiableArray: -3 bytes
+dart:core::List: -3 bytes
+dart:_interceptors::ArrayIterator: -4 bytes
+dart:_js_helper::TypeImpl._typeName: -10 bytes
+dart:_js_helper::TypeImpl._unmangledName: -15 bytes
+dart:_js_names::: -30 bytes
+dart:_js_names::extractKeys: -30 bytes
+dart:core::StringBuffer: -40 bytes
+dart:core::StringBuffer._writeAll: -40 bytes
+dart:core::: -43 bytes
+dart:_interceptors::JSArray.+: -63 bytes
+dart:_interceptors::JSArray: -66 bytes
+dart:_interceptors::: -73 bytes
+dart:_js_helper::TypeImpl: -481 bytes
+dart:_js_helper::: -2445 bytes
+
+BECAME DEFERRED (0 bytes)
+========================================================================
+
+NO LONGER DEFERRED (0 bytes)
+========================================================================
+
+```
+
+You can also pass `--summary` to only show the summary section.
+
+### Library size split tool
+
+This command-line tool shows the size distribution of generated code among
+libraries. It can be run as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info library_size out.js.info.data
+```
+
+
+Libraries can be grouped using regular expressions. You can
+specify what regular expressions to use by providing a `grouping.yaml` file
+with the `--grouping` flag:
+
+```console
+$ dart2js_info library_size out.js.info.data --grouping grouping.yaml
+```
+
+The format of the `grouping.yaml` file is as follows:
+
+```yaml
+groups:
+- { regexp: "package:(foo)/*.dart", name: "group name 1", cluster: 2}
+- { regexp: "dart:.*",              name: "group name 2", cluster: 3}
+```
+
+The file should include a single key `groups` containing a list of group
+specifications.  Each group is specified by a map of 3 entries:
+
+  * `regexp` (required): a regexp used to match entries that belong to the
+  group.
+
+  * `name` (optional): the name given to this group in the output table. If
+  omitted, the name is derived from the regexp as the match's group(1) or
+  group(0) if no group was defined. When names are omitted the group
+  specification implicitly defines several groups, one per observed name.
+
+  * `cluster` (optional): a clustering index for how data is shown in a table.
+  Groups with higher cluster indices are shown later in the table after a
+  dividing line. If missing, the cluster index defaults to 0.
+
+Here is an example configuration, with comments about what each entry does:
+
+```yaml
+groups:
+# This group shows the total size for all libraries that were loaded from
+# file:// urls, it is shown in cluster #2, which happens to be the last
+# cluster in this example before the totals are shown:
+- name: "Loose files"
+  regexp: "file://.*"
+  cluster: 2
+
+# This group shows the total size of all code loaded from packages:
+- { name: "All packages", regexp: "package:.*", cluster: 2}
+
+# This group shows the total size of all code loaded from core libraries:
+- { name: "Core libs", regexp: "dart:.*", cluster: 2}
+
+# This group shows the total size of all libraries in a single package. Here
+# we omitted the `name` entry, instead we extract it from the regexp
+# directly.  In this case, the name will be the package-name portion of the
+# package-url (determined by group(1) of the regexp).
+- { regexp: "package:([^/]*)", cluster: 1}
+
+# The next two groups match the entire library url as the name of the group.
+- regexp: "package:.*"
+- regexp: "dart:.*"
+
+# If your code lives under /my/project/dir, this will match any file loaded
+from a file:// url, and we use as a name the relative path to it.
+- regexp: "file:///my/project/dir/(.*)"
+```
+
+Regardless of the grouping configuration, the tool will display the total code
+size attributed of all libraries, constants, and the program size.
+
+**Note**: eventually you should expect all numbers to add up to the program
+size. Currently dart2js's `--dump-info` is not complete, so numbers for
+bootstrapping code and lazy static initializers are missing.
+
+### Deferred library verification
+
+This tool checks that the output from dart2js meets a given specification,
+given in a YAML file. It can be run as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info deferred_check out.js.info.data manifest.yaml
+```
+
+The format of the YAML file is:
+
+```yaml
+main:
+  include:
+    - some_package
+    - other_package
+  exclude:
+    - some_other_package
+
+foo:
+  include:
+    - foo
+    - bar
+
+baz:
+  include:
+    - baz
+    - quux
+  exclude:
+    - zardoz
+```
+
+The YAML file consists of a list of declarations, one for each deferred
+part expected in the output. At least one of these parts must be named
+"main"; this is the main part that contains the program entrypoint. Each
+top-level part contains a list of package names that are expected to be
+contained in that part, a list of package names that are expected to be in
+another part, or both. For instance, in the example YAML above the part named
+"baz" is expected to contain the packages "baz" and "quux" and exclude the
+package "zardoz".
+
+The names for parts given in the specification YAML file (besides "main")
+are the same as the name given to the deferred import in the dart file. For
+instance, if you have `import 'package:foo/bar.dart' deferred as baz;` in your
+dart file, then the corresponding name in the specification file is 'baz'.
+
+### Deferred library size tool
+
+This tool gives a breakdown of all of the deferred code in the program by size.
+It can show how much of the total code size is deferred. It can be run as
+follows:
+
+```console
+pub global activate dart2js_info # only needed once
+dart2js_info deferred_size out.js.info.data
+```
+
+The tool will output a table listing all of the deferred imports in the program
+as well as the "main" chunk, which is not deferred. The output looks like:
+
+```
+Size by library
+------------------------------------------------
+main                                    12345678
+foo                                      7654321
+bar                                      1234567
+------------------------------------------------
+Main chunk size                         12345678
+Deferred code size                       8888888
+Percent of code deferred                  41.86%
+```
+
+### Deferred library layout tool
+
+This tool reports which code is included in each output unit.  It can be run as
+follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info deferred_layout out.js.info.data
+```
+
+The tool will output a table listing all of the deferred output units or chunks,
+for each unit it will list the set of libraries that contribute code to this
+unit. If a library contributes to more than one output unit, the tool lists
+which elements are in one or another output unit. For example, the output might
+look like this:
+
+```
+Output unit main:
+  loaded by default
+  contains:
+     - hello_world.dart
+     - dart:core
+     ...
+
+Output unit 2:
+  loaded by importing: [b]
+  contains:
+     - c.dart:
+       - function d
+     - b.dart
+
+Output unit 1:
+  loaded by importing: [a]
+  contains:
+     - c.dart:
+       - function c
+     - a.dart
+```
+
+In this example, all the code of `b.dart` after tree-shaking was included in the
+output unit 2, but `c.dart` was split between output unit 1 and output unit 2.
+
+### Function size analysis tool
+
+This command-line tool presents how much each function contributes to the total
+code of your application.  We use dependency information to compute dominance
+and reachability data as well.
+
+When you run:
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info function_size out.js.info.data
+```
+
+the tool produces a table output with lots of entries. Here is an example entry
+with the corresponding table header:
+```
+ --- Results per element (field or function) ---
+    element size     dominated size     reachable size Element identifier
+    ...
+     275   0.01%     283426  13.97%    1506543  74.28% some.library.name::ClassName.myMethodName
+```
+
+Such entry means that the function `myMethodName` uses 275 bytes, which is 0.01%
+of the application. That function however calls other functions, which
+transitively can include up to 74.28% of the application size. Of all those
+reachable functions, some of them are reachable from other parts of the program,
+but a subset are dominated by `myMethodName`, that is, other parts of the
+program starting from `main` would first go through `myMethodName` before
+reaching those functions. In this example, that subset is 13.97% of the
+application size. This means that if you somehow can remove your dependency on
+`myMethodName`, you will save at least that 13.97%, and possibly some more from
+the reachable size, but how much of that we are not certain.
+
+### Coverage tools
+
+Coverage information requires a bit more setup and work to get them running. The
+steps are as follows:
+
+  * Compile an app with dart2js using `--dump-info` and
+    `--experiment-call-instrumentation`
+
+```console
+$ dart2js --dump-info --experiment-call-instrumentation main.dart
+```
+
+  The flag only works dart2js version 2.2.0 or newer.
+
+  * Launch the coverage server tool to serve up the JS code of your app:
+
+```console
+$ dart2js_info coverage_server main.dart.js
+```
+
+  * (optional) If you have a complex application setup, you may need to serve an
+    html file or integrate your application server to proxy to the log server
+    any GET request for the .dart.js file and /coverage POST requests that send
+    coverage data.
+
+  * Load your app and use it to exercise the entire code.
+
+  * Shut down the coverage server (Ctrl-C). This will emit a file named
+    `mail.dart.js.coverage.json`
+
+  * Finally, run the live code analysis tool given it both the info and
+    coverage json files:
+
+```console
+$ dart2js_info coverage_analysis main.dart.info.data main.dart.coverage.json
+```
+
+## Code location, features and bugs
+
+This package is developed in [github][repo].  Please file feature requests and
+bugs at the [issue tracker][tracker].
+
+[repo]: https://github.com/dart-lang/dart2js_info/
+[tracker]: https://github.com/dart-lang/dart2js_info/issues
+[code_deps]: https://github.com/dart-lang/dart2js_info/blob/master/bin/code_deps.dart
+[diff]: https://github.com/dart-lang/dart2js_info/blob/master/bin/diff.dart
+[library_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/library_size_split.dart
+[deferred_check]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_check.dart
+[deferred_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_size.dart
+[deferred_layout]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_layout.dart
+[coverage_server]: https://github.com/dart-lang/dart2js_info/blob/master/bin/coverage_log_server.dart
+[coverage_analysis]: https://github.com/dart-lang/dart2js_info/blob/master/bin/live_code_size_analysis.dart
+[function_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/function_size_analysis.dart
+[AllInfo]: http://dart-lang.github.io/dart2js_info/doc/api/dart2js_info.info/AllInfo-class.html
+[convert]: https://github.com/dart-lang/dart2js_info/blob/master/bin/convert.dart
+[show]: https://github.com/dart-lang/dart2js_info/blob/master/bin/text_print.dart
diff --git a/pkg/dart2js_info/bin/src/code_deps.dart b/pkg/dart2js_info/bin/src/code_deps.dart
new file mode 100644
index 0000000..91b9222
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/code_deps.dart
@@ -0,0 +1,131 @@
+// 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.
+
+/// Command to query for code dependencies. Currently this tool only
+/// supports the `some_path` query, which gives you the shortest path for how
+/// one function depends on another.
+///
+/// You can run this tool as follows:
+/// ```bash
+/// pub global activate dart2js_info
+/// dart2js_info code_deps some_path out.js.info.json main foo
+/// ```
+///
+/// The arguments to the query are regular expressions that can be used to
+/// select a single element in your program. If your regular expression is too
+/// general and has more than one match, this tool will pick
+/// the first match and ignore the rest. Regular expressions are matched against
+/// a fully qualified element name, which includes the library and class name
+/// (if any) that contains it. A typical qualified name is of this form:
+///
+///     libraryName::ClassName.elementName
+///
+/// If the name of a function your are looking for is unique enough, it might be
+/// sufficient to just write that name as your regular expression.
+library dart2js_info.bin.code_deps;
+
+import 'dart:collection';
+
+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';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+class CodeDepsCommand extends Command<void> with PrintUsageException {
+  final String name = "code_deps";
+  final String description = "";
+
+  CodeDepsCommand() {
+    addSubcommand(new _SomePathQuery());
+  }
+}
+
+class _SomePathQuery extends Command<void> with PrintUsageException {
+  final String name = "some_path";
+  final String description = "find a call-graph path between two elements.";
+
+  @override
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 3) {
+      usageException("Missing arguments for some_path, expected: "
+          "info.data <element-regexp-1> <element-regexp-2>");
+      return;
+    }
+
+    var info = await infoFromFile(args.first);
+    var graph = graphFromInfo(info);
+
+    var source = info.functions
+        .firstWhere(_longNameMatcher(new RegExp(args[1])), orElse: () => null);
+    var target = info.functions
+        .firstWhere(_longNameMatcher(new RegExp(args[2])), orElse: () => null);
+    print('query: some_path');
+    if (source == null) {
+      usageException("source '${args[1]}' not found in '${args[0]}'");
+    }
+    print('source: ${longName(source)}');
+    if (target == null) {
+      usageException("target '${args[2]}' not found in '${args[0]}'");
+    }
+    print('target: ${longName(target)}');
+    var path = new SomePathQuery(source, target).run(graph);
+    if (path.isEmpty) {
+      print('result: no path found');
+    } else {
+      print('result:');
+      for (int i = 0; i < path.length; i++) {
+        print('  $i. ${longName(path[i])}');
+      }
+    }
+  }
+}
+
+/// A query supported by this tool.
+abstract class Query {
+  run(Graph<Info> graph);
+}
+
+/// Query that searches for a single path between two elements.
+class SomePathQuery {
+  /// The info associated with the source element.
+  Info source;
+
+  /// The info associated with the target element.
+  Info target;
+
+  SomePathQuery(this.source, this.target);
+
+  List<Info> run(Graph<Info> graph) {
+    var seen = <Info, Info>{source: null};
+    var queue = new Queue<Info>();
+    queue.addLast(source);
+    while (queue.isNotEmpty) {
+      var node = queue.removeFirst();
+      if (identical(node, target)) {
+        var result = new Queue<Info>();
+        while (node != null) {
+          result.addFirst(node);
+          node = seen[node];
+        }
+        return result.toList();
+      }
+      for (var neighbor in graph.targetsOf(node)) {
+        if (seen.containsKey(neighbor)) continue;
+        seen[neighbor] = node;
+        queue.addLast(neighbor);
+      }
+    }
+    return [];
+  }
+}
+
+typedef bool LongNameMatcher(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
new file mode 100644
index 0000000..f79233d
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/convert.dart
@@ -0,0 +1,38 @@
+// 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:args/command_runner.dart';
+
+import 'to_json.dart' show ToJsonCommand;
+import 'to_binary.dart' show ToBinaryCommand;
+import 'to_proto.dart' show ToProtoCommand;
+import 'usage_exception.dart';
+
+/// This tool reports how code is divided among deferred chunks.
+class ConvertCommand extends Command<void> with PrintUsageException {
+  final String name = "convert";
+  final String description = "Convert between info formats.";
+
+  ConvertCommand() {
+    _addSubcommand(new ToJsonCommand());
+    _addSubcommand(new ToBinaryCommand());
+    _addSubcommand(new ToProtoCommand());
+  }
+
+  _addSubcommand(Command<void> command) {
+    addSubcommand(command);
+    command.argParser
+      ..addOption('out',
+          abbr: 'o',
+          help: 'Output file '
+              '(to_json defauts to <input>.json, to_binary defaults to\n'
+              '<input>.data, and to_proto defaults to <input>.pb)')
+      ..addFlag('inject-text',
+          negatable: false,
+          help: 'Whether to inject output code snippets.\n\n'
+              'By default dart2js produces code spans, but excludes the text. This\n'
+              'option can be used to embed the text directly in the output.\n'
+              'Note: this requires access to dart2js output files.\n');
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/coverage_log_server.dart b/pkg/dart2js_info/bin/src/coverage_log_server.dart
new file mode 100644
index 0000000..d43d410
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/coverage_log_server.dart
@@ -0,0 +1,220 @@
+// 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.
+
+/// A tool to gather coverage data from an app generated with dart2js. This
+/// depends on code that has been landed in the bleeding_edge version of dart2js
+/// and that we expect to become publicly visible in version 0.13.0 of the Dart
+/// SDK).
+///
+/// This tool starts a server that answers to mainly 2 requests:
+///    * a GET request to retrieve the application
+///    * POST requests to record coverage data.
+///
+/// It is intended to be used as follows:
+///    * generate an app by running dart2js with the environment value
+///      -DtraceCalls=post provided to the vm, and the --dump-info
+///      flag provided to dart2js.
+///    * start this server, and proxy requests from your normal frontend
+///      server to this one.
+library dart2js_info.bin.coverage_log_server;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+import 'package:path/path.dart' as path;
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf/shelf_io.dart' as shelf;
+
+import 'usage_exception.dart';
+
+class CoverageLogServerCommand extends Command<void> with PrintUsageException {
+  final String name = 'coverage_server';
+  final String description = 'Server to gather code coverage data';
+
+  CoverageLogServerCommand() {
+    argParser
+      ..addOption('port', abbr: 'p', help: 'port number', defaultsTo: "8080")
+      ..addOption('host',
+          help: 'host name (use 0.0.0.0 for all interfaces)',
+          defaultsTo: 'localhost')
+      ..addOption('uri-prefix',
+          help:
+              'uri path prefix that will hit this server. This will be injected'
+              ' into the .js file',
+          defaultsTo: '')
+      ..addOption('out',
+          abbr: 'o',
+          help: 'output log file',
+          defaultsTo: _DEFAULT_OUT_TEMPLATE);
+  }
+
+  void run() async {
+    if (argResults.rest.isEmpty) {
+      usageException('Missing arguments: <dart2js-out-file> [<html-file>]');
+    }
+
+    var jsPath = argResults.rest[0];
+    var htmlPath = null;
+    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']),
+        jsPath, htmlPath, outPath, argResults['uri-prefix']);
+    await server.run();
+  }
+}
+
+const _DEFAULT_OUT_TEMPLATE = '<dart2js-out-file>.coverage.json';
+
+class _Server {
+  /// Server hostname, typically `localhost`,  but can be `0.0.0.0`.
+  final String hostname;
+
+  /// Port the server will listen to.
+  final int port;
+
+  /// JS file (previously generated by dart2js) to serve.
+  final String jsPath;
+
+  /// HTML file to serve, if any.
+  final String htmlPath;
+
+  /// Contents of jsPath, adjusted to use the appropriate server url.
+  String jsCode;
+
+  /// Location where we'll dump the coverage data.
+  final String outPath;
+
+  /// Uri prefix used on all requests to this server. This will be injected into
+  /// the .js file.
+  final String prefix;
+
+  // TODO(sigmund): add support to load also simple HTML files to test small
+  // simple apps.
+
+  /// Data received so far. The data is just an array of pairs, showing the
+  /// hashCode and name of the element used. This can be later cross-checked
+  /// against dump-info data.
+  Map data = {};
+
+  String get _serializedData => new JsonEncoder.withIndent(' ').convert(data);
+
+  _Server(this.hostname, this.port, String jsPath, this.htmlPath, this.outPath,
+      String prefix)
+      : jsPath = jsPath,
+        jsCode = _adjustRequestUrl(new File(jsPath).readAsStringSync(), prefix),
+        prefix = _normalize(prefix);
+
+  run() async {
+    await shelf.serve(_handler, hostname, port);
+    var urlBase = "http://$hostname:$port${prefix == '' ? '/' : '/$prefix/'}";
+    var htmlFilename = htmlPath == null ? '' : path.basename(htmlPath);
+    print("Server is listening\n"
+        "  - html page: $urlBase$htmlFilename\n"
+        "  - js code: $urlBase${path.basename(jsPath)}\n"
+        "  - coverage reporting: ${urlBase}coverage\n");
+  }
+
+  _expectedPath(String tail) => prefix == '' ? tail : '$prefix/$tail';
+
+  FutureOr<shelf.Response> _handler(shelf.Request request) async {
+    var urlPath = request.url.path;
+    print('received request: $urlPath');
+    var baseJsName = path.basename(jsPath);
+    var baseHtmlName = htmlPath == null ? '' : path.basename(htmlPath);
+
+    // Serve an HTML file at the default prefix, or a path matching the HTML
+    // file name
+    if (urlPath == prefix ||
+        urlPath == '$prefix/' ||
+        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);
+    }
+
+    if (urlPath == _expectedPath(baseJsName)) {
+      return new shelf.Response.ok(jsCode, headers: JS_HEADERS);
+    }
+
+    // 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);
+      }
+
+      if (request.method == 'POST') {
+        _record(jsonDecode(await request.readAsString()));
+        return new shelf.Response.ok("Thanks!");
+      }
+    }
+
+    // Any other request is not supported.
+    return new shelf.Response.notFound('Not found: "$urlPath"');
+  }
+
+  _record(List entries) {
+    for (var entry in entries) {
+      var id = entry[0];
+      data.putIfAbsent('$id', () => {'name': entry[1], 'count': 0});
+      data['$id']['count']++;
+    }
+    _enqueueSave();
+  }
+
+  bool _savePending = false;
+  int _total = 0;
+  _enqueueSave() async {
+    if (!_savePending) {
+      _savePending = true;
+      await new Future.delayed(new Duration(seconds: 3));
+      await new File(outPath).writeAsString(_serializedData);
+      var diff = data.length - _total;
+      print(diff == 0
+          ? ' - no new element covered'
+          : ' - $diff new elements covered');
+      _savePending = false;
+      _total = data.length;
+    }
+  }
+}
+
+/// Removes leading and trailing slashes of [uriPath].
+_normalize(String uriPath) {
+  if (uriPath.startsWith('/')) uriPath = uriPath.substring(1);
+  if (uriPath.endsWith('/')) uriPath = uriPath.substring(0, uriPath.length - 1);
+  return uriPath;
+}
+
+_adjustRequestUrl(String code, String prefix) {
+  var url = prefix == '' ? 'coverage' : '$prefix/coverage';
+  var hook = '''
+      self.dartCallInstrumentation = function(id, name) {
+        if (!this.traceBuffer) {
+          this.traceBuffer = [];
+        }
+        var buffer = this.traceBuffer;
+        if (buffer.length == 0) {
+          window.setTimeout(function() {
+            var xhr = new XMLHttpRequest();
+            xhr.open("POST", "/$url");
+              xhr.send(JSON.stringify(buffer));
+              buffer.length = 0;
+            }, 1000);
+        }
+        buffer.push([id, name]);
+     };
+     ''';
+  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'};
diff --git a/pkg/dart2js_info/bin/src/debug_info.dart b/pkg/dart2js_info/bin/src/debug_info.dart
new file mode 100644
index 0000000..5aa7607
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/debug_info.dart
@@ -0,0 +1,321 @@
+// 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.
+
+/// Tool used mainly by dart2js developers to debug the generated info and check
+/// that it is consistent and that it covers all the data we expect it to cover.
+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';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+class DebugCommand extends Command<void> with PrintUsageException {
+  final String name = "debug";
+  final String description = "Dart2js-team diagnostics on a dump-info file.";
+
+  DebugCommand() {
+    argParser.addOption('show-library',
+        help: "Show detailed data for a library with the given name");
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+
+    var info = await infoFromFile(args.first);
+    var debugLibName = argResults['show-library'];
+
+    validateSize(info, debugLibName);
+    validateParents(info);
+    compareGraphs(info);
+    verifyDeps(info);
+  }
+}
+
+/// 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);
+  info.accept(tracker);
+
+  // Validate that listed elements include elements of each library.
+  Set<Info> listed = new Set()
+    ..addAll(info.functions)
+    ..addAll(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) {
+    _pass('all fields and functions are covered');
+  } else {
+    if (diff1.length > 0) {
+      _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) {
+      _fail("some elements found in libraries weren't part of the global list"
+          " (non-zero ${diff2.where((f) => f.size > 0).length})");
+    }
+  }
+
+  // Validate that code-size adds up.
+  int realTotal = info.program.size;
+  int totalLib = info.libraries.fold(0, (n, lib) => n + lib.size);
+  int constantsSize = info.constants.fold(0, (n, c) => n + c.size);
+  int accounted = totalLib + constantsSize;
+
+  if (accounted != realTotal) {
+    var percent =
+        ((realTotal - accounted) * 100 / realTotal).toStringAsFixed(2);
+    _fail('$percent% size missing: $accounted (all libs + consts) '
+        '< $realTotal (total)');
+  }
+  int missingTotal = tracker.missing.values.fold(0, (a, b) => a + b);
+  if (missingTotal > 0) {
+    var percent = (missingTotal * 100 / realTotal).toStringAsFixed(2);
+    _fail('$percent% size missing in libraries (sum of elements > lib.size)');
+  }
+}
+
+/// Validates that every element in the model has a parent (except libraries).
+validateParents(AllInfo info) {
+  final parentlessInfos = new Set<Info>();
+
+  failIfNoParents(List<Info> infos) {
+    for (var info in infos) {
+      if (info.parent == null) {
+        parentlessInfos.add(info);
+      }
+    }
+  }
+
+  failIfNoParents(info.functions);
+  failIfNoParents(info.typedefs);
+  failIfNoParents(info.classes);
+  failIfNoParents(info.fields);
+  failIfNoParents(info.closures);
+  if (parentlessInfos.isEmpty) {
+    _pass('all elements have a parent');
+  } else {
+    _fail('${parentlessInfos.length} elements have no parent');
+  }
+}
+
+class _SizeTracker extends RecursiveInfoVisitor {
+  /// A library name for which to print debugging information (if not null).
+  final String _debugLibName;
+
+  _SizeTracker(this._debugLibName);
+
+  /// [FunctionInfo]s and [FieldInfo]s transitively reachable from [LibraryInfo]
+  /// elements.
+  final Set<Info> discovered = new Set<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
+  /// sum of its methods). Used for validation and debugging of the dump-info
+  /// invariants.
+  final Map<Info, int> missing = {};
+
+  /// Set of [FunctionInfo]s that appear to be unused by the app (they are not
+  /// registed [coverage]).
+  final List unused = [];
+
+  /// Tracks the current state of this visitor.
+  List<_State> stack = [new _State()];
+
+  /// Code discovered for a [LibraryInfo], only used for debugging.
+  final StringBuffer _debugCode = new StringBuffer();
+  int _indent = 2;
+
+  void _push() => stack.add(new _State());
+
+  void _pop(info) {
+    var last = stack.removeLast();
+    var size = last._totalSize;
+    if (size > info.size) {
+      // record dump-info inconsistencies.
+      missing[info] = size - info.size;
+    } else {
+      // if size < info.size, that is OK, the enclosing element might have code
+      // of it's own (e.g. a class declaration includes the name of the class,
+      // but the discovered size only counts the size of the members.)
+      size = info.size;
+    }
+    stack.last
+      .._totalSize += size
+      .._count += last._count
+      .._bodySize += last._bodySize;
+  }
+
+  bool _debug = false;
+  visitLibrary(LibraryInfo info) {
+    if (_debugLibName != null) _debug = info.name.contains(_debugLibName);
+    _push();
+    if (_debug) {
+      _debugCode.write('{\n');
+      _indent = 4;
+    }
+    super.visitLibrary(info);
+    _pop(info);
+    if (_debug) {
+      _debug = false;
+      _indent = 4;
+      _debugCode.write('}\n');
+    }
+  }
+
+  _handleCodeInfo(info) {
+    discovered.add(info);
+    var code = info.code;
+    if (_debug && code != null) {
+      bool isClosureClass = info.name.endsWith('.call');
+      if (isClosureClass) {
+        var cname = info.name.substring(0, info.name.indexOf('.'));
+        _debugCode.write(' ' * _indent);
+        _debugCode.write(cname);
+        _debugCode.write(': {\n');
+        _indent += 2;
+        _debugCode.write(' ' * _indent);
+        _debugCode.write('...\n');
+      }
+
+      print('$info ${isClosureClass} \n${info.code}');
+      _debugCode.write(' ' * _indent);
+      var endsInNewLine = code.endsWith('\n');
+      if (endsInNewLine) code = code.substring(0, code.length - 1);
+      _debugCode.write(code.replaceAll('\n', '\n' + (' ' * _indent)));
+      if (endsInNewLine) _debugCode.write(',\n');
+      if (isClosureClass) {
+        _indent -= 2;
+        _debugCode.write(' ' * _indent);
+        _debugCode.write('},\n');
+      }
+    }
+    stack.last._totalSize += info.size;
+    stack.last._bodySize += info.size;
+    stack.last._count++;
+  }
+
+  visitField(FieldInfo info) {
+    _handleCodeInfo(info);
+    super.visitField(info);
+  }
+
+  visitFunction(FunctionInfo info) {
+    _handleCodeInfo(info);
+    super.visitFunction(info);
+  }
+
+  visitTypedef(TypedefInfo info) {
+    if (_debug) print('$info');
+    stack.last._totalSize += info.size;
+    super.visitTypedef(info);
+  }
+
+  visitClass(ClassInfo info) {
+    if (_debug) {
+      print('$info');
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('${info.name}: {\n');
+      _indent += 2;
+    }
+    _push();
+    super.visitClass(info);
+    _pop(info);
+    if (_debug) {
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('},\n');
+      _indent -= 2;
+    }
+  }
+}
+
+class _State {
+  int _count = 0;
+  int _totalSize = 0;
+  int _bodySize = 0;
+}
+
+/// Validates that both forms of dependency information match.
+void compareGraphs(AllInfo info) {
+  var g1 = new EdgeListGraph<Info>();
+  var g2 = new EdgeListGraph<Info>();
+  for (var f in info.functions) {
+    g1.addNode(f);
+    for (var g in f.uses) {
+      g1.addEdge(f, g.target);
+    }
+    g2.addNode(f);
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        g2.addEdge(f, g);
+      }
+    }
+  }
+
+  for (var f in info.fields) {
+    g1.addNode(f);
+    for (var g in f.uses) {
+      g1.addEdge(f, g.target);
+    }
+    g2.addNode(f);
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        g2.addEdge(f, g);
+      }
+    }
+  }
+
+  // Note: these checks right now show that 'uses' links are computed
+  // differently than 'deps' links
+  int inUsesNotInDependencies = 0;
+  int inDependenciesNotInUses = 0;
+  _sameEdges(f) {
+    var targets1 = g1.targetsOf(f).toSet();
+    var targets2 = g2.targetsOf(f).toSet();
+    inUsesNotInDependencies += targets1.difference(targets2).length;
+    inDependenciesNotInUses += targets2.difference(targets1).length;
+  }
+
+  info.functions.forEach(_sameEdges);
+  info.fields.forEach(_sameEdges);
+  if (inUsesNotInDependencies == 0 && inDependenciesNotInUses == 0) {
+    _pass('dependency data is consistent');
+  } else {
+    _fail('inconsistencies in dependency data:\n'
+        '   $inUsesNotInDependencies edges missing from "dependencies" graph\n'
+        '   $inDependenciesNotInUses edges missing from "uses" graph');
+  }
+}
+
+// Validates that all elements are reachable from `main` in the dependency
+// graph.
+verifyDeps(AllInfo info) {
+  var graph = graphFromInfo(info);
+  var entrypoint = info.program.entrypoint;
+  var reachables = new Set.from(graph.preOrder(entrypoint));
+
+  var functionsAndFields = []
+    ..addAll(info.functions)
+    ..addAll(info.fields);
+  var unreachables =
+      functionsAndFields.where((func) => !reachables.contains(func));
+  if (unreachables.isNotEmpty) {
+    _fail('${unreachables.length} elements are unreachable from the '
+        'entrypoint');
+  } else {
+    _pass('all elements are reachable from the entrypoint');
+  }
+}
+
+_pass(String msg) => print('\x1b[32mPASS\x1b[0m: $msg');
+_fail(String msg) => print('\x1b[31mFAIL\x1b[0m: $msg');
diff --git a/pkg/dart2js_info/bin/src/deferred_library_check.dart b/pkg/dart2js_info/bin/src/deferred_library_check.dart
new file mode 100644
index 0000000..5493c66
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_check.dart
@@ -0,0 +1,71 @@
+// 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.
+
+/// A command that verifies that deferred libraries split the code as expected.
+///
+/// This tool checks that the output from dart2js meets a given specification,
+/// given in a YAML file. The format of the YAML file is:
+///
+///     main:
+///       packages:
+///         - some_package
+///         - other_package
+///
+///     foo:
+///       packages:
+///         - foo
+///         - bar
+///
+///     baz:
+///       packages:
+///         - baz
+///         - quux
+///
+/// The YAML file consists of a list of declarations, one for each deferred
+/// part expected in the output. At least one of these parts must be named
+/// "main"; this is the main part that contains the program entrypoint. Each
+/// top-level part contains a list of package names that are expected to be
+/// contained in that part. Any package that is not explicitly listed is
+/// expected to be in the main part. For instance, in the example YAML above
+/// the part named "baz" is expected to contain the packages "baz" and "quux".
+///
+/// The names for parts given in the specification YAML file (besides "main")
+/// are arbitrary and just used for reporting when the output does not meet the
+/// specification.
+library dart2js_info.bin.deferred_library_check;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/deferred_library_check.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:yaml/yaml.dart';
+
+import 'usage_exception.dart';
+
+/// A command that computes the diff between two info files.
+class DeferredLibraryCheck extends Command<void> with PrintUsageException {
+  final String name = "deferred_check";
+  final String description =
+      "Verify that deferred libraries are split as expected";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException('Missing arguments, expected: info.data manifest.yaml');
+    }
+    var info = await infoFromFile(args[0]);
+    var manifest = await manifestFromFile(args[1]);
+
+    var failures = checkDeferredLibraryManifest(info, manifest);
+    failures.forEach(print);
+    if (failures.isNotEmpty) exitCode = 1;
+  }
+}
+
+Future manifestFromFile(String fileName) async {
+  var file = await new 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
new file mode 100644
index 0000000..c647344
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
@@ -0,0 +1,83 @@
+// 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.
+
+/// This tool reports how code is divided among deferred chunks.
+library dart2js_info.bin.deferred_library_layout;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+/// This tool reports how code is divided among deferred chunks.
+class DeferredLibraryLayout extends Command<void> with PrintUsageException {
+  final String name = "deferred_layout";
+  final String description = "Show how code is divided among deferred parts.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    await _showLayout(args.first);
+  }
+}
+
+_showLayout(String file) async {
+  AllInfo info = await infoFromFile(file);
+
+  Map<OutputUnitInfo, Map<LibraryInfo, List<BasicInfo>>> hunkMembers = {};
+  Map<LibraryInfo, Set<OutputUnitInfo>> libToHunks = {};
+  void register(BasicInfo info) {
+    var unit = info.outputUnit;
+    var lib = _libOf(info);
+    if (lib == null) return;
+    libToHunks.putIfAbsent(lib, () => new Set()).add(unit);
+    hunkMembers
+        .putIfAbsent(unit, () => {})
+        .putIfAbsent(lib, () => [])
+        .add(info);
+  }
+
+  info.functions.forEach(register);
+  info.classes.forEach(register);
+  info.fields.forEach(register);
+  info.closures.forEach(register);
+
+  var dir = Directory.current.path;
+  hunkMembers.forEach((unit, map) {
+    print('Output unit ${unit.name ?? "main"}:');
+    if (unit.name == null || unit.name == 'main') {
+      print('  loaded by default');
+    } else {
+      print('  loaded by importing: ${unit.imports}');
+    }
+
+    print('  contains:');
+    map.forEach((lib, elements) {
+      var uri = lib.uri;
+      var shortUri = (uri.scheme == 'file' && uri.path.startsWith(dir))
+          ? uri.path.substring(dir.length + 1)
+          : '$uri';
+
+      // If the entire library is in one chunk, just report the library name
+      // otherwise report which functions are on this chunk.
+      if (libToHunks[lib].length == 1) {
+        print('     - $shortUri');
+      } else {
+        print('     - $shortUri:');
+        for (var e in elements) {
+          print('       - ${kindToString(e.kind)} ${e.name}');
+        }
+      }
+    });
+    print('');
+  });
+}
+
+_libOf(e) => e is LibraryInfo || e == null ? e : _libOf(e.parent);
diff --git a/pkg/dart2js_info/bin/src/deferred_library_size.dart b/pkg/dart2js_info/bin/src/deferred_library_size.dart
new file mode 100644
index 0000000..2ea7089
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_size.dart
@@ -0,0 +1,90 @@
+// 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.
+
+/// This tool gives a breakdown of code size by deferred part in the program.
+library dart2js_info.bin.deferred_library_size;
+
+import 'dart:math';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+/// This tool gives a breakdown of code size by deferred part in the program.
+class DeferredLibrarySize extends Command<void> with PrintUsageException {
+  final String name = "deferred_size";
+  final String description = "Show breakdown of codesize by deferred part.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    // TODO(het): Would be faster to only parse the 'outputUnits' part
+    var info = await infoFromFile(args.first);
+    var sizeByImport = getSizeByImport(info);
+    printSizes(sizeByImport, info.program.size);
+  }
+}
+
+class ImportSize {
+  final String import;
+  final int size;
+
+  const ImportSize(this.import, this.size);
+
+  String toString() {
+    return '$import: $size';
+  }
+}
+
+void printSizes(Map<String, int> sizeByImport, int programSize) {
+  var importSizes = <ImportSize>[];
+  sizeByImport.forEach((import, size) {
+    importSizes.add(new 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}) {
+    print('${label.toString().padRight(longest + 1)}'
+        '${data.toString().padLeft(width)}');
+  }
+
+  print('');
+  print('Size by library');
+  print('-' * (longest + 16));
+  for (var importSize in importSizes) {
+    // TODO(het): split into specific and shared size
+    _printRow(importSize.import, importSize.size);
+  }
+  print('-' * (longest + 16));
+
+  var mainChunkSize = sizeByImport['main'];
+  var deferredSize = programSize - mainChunkSize;
+  var percentDeferred = (deferredSize * 100 / programSize).toStringAsFixed(2);
+  _printRow('Main chunk size', mainChunkSize);
+  _printRow('Deferred code size', deferredSize);
+  _printRow('Percent of code deferred', '$percentDeferred%');
+}
+
+Map<String, int> getSizeByImport(AllInfo info) {
+  var sizeByImport = <String, int>{};
+  for (var outputUnit in info.outputUnits) {
+    if (outputUnit.name == 'main' || outputUnit.name == null) {
+      sizeByImport['main'] = outputUnit.size;
+    } else {
+      for (var import in outputUnit.imports) {
+        sizeByImport.putIfAbsent(import, () => 0);
+        sizeByImport[import] += outputUnit.size;
+      }
+    }
+  }
+  return sizeByImport;
+}
diff --git a/pkg/dart2js_info/bin/src/diff.dart b/pkg/dart2js_info/bin/src/diff.dart
new file mode 100644
index 0000000..d013349
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/diff.dart
@@ -0,0 +1,183 @@
+// 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.
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/diff.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+/// A command that computes the diff between two info files.
+class DiffCommand extends Command<void> with PrintUsageException {
+  final String name = "diff";
+  final String description =
+      "See code size differences between two dump-info files.";
+
+  DiffCommand() {
+    argParser.addFlag('summary-only',
+        defaultsTo: false,
+        help: "Show only a summary and hide details of each library");
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException(
+          'Missing arguments, expected two dump-info files to compare');
+      return;
+    }
+
+    var oldInfo = await infoFromFile(args[0]);
+    var newInfo = await infoFromFile(args[1]);
+    var summaryOnly = argResults['summary-only'];
+
+    var diffs = diff(oldInfo, newInfo);
+
+    // Categorize the diffs
+    var adds = <AddDiff>[];
+    var removals = <RemoveDiff>[];
+    var sizeChanges = <SizeDiff>[];
+    var becameDeferred = <DeferredStatusDiff>[];
+    var becameUndeferred = <DeferredStatusDiff>[];
+
+    for (var diff in diffs) {
+      switch (diff.kind) {
+        case DiffKind.add:
+          adds.add(diff as AddDiff);
+          break;
+        case DiffKind.remove:
+          removals.add(diff as RemoveDiff);
+          break;
+        case DiffKind.size:
+          sizeChanges.add(diff as SizeDiff);
+          break;
+        case DiffKind.deferred:
+          var deferredDiff = diff as DeferredStatusDiff;
+          if (deferredDiff.wasDeferredBefore) {
+            becameUndeferred.add(deferredDiff);
+          } else {
+            becameDeferred.add(deferredDiff);
+          }
+          break;
+      }
+    }
+
+    // Sort the changes by the size of the element that changed.
+    for (var diffs in [adds, removals, becameDeferred, becameUndeferred]) {
+      diffs.sort((a, b) => b.info.size - a.info.size);
+    }
+
+    // Sort changes in size by size difference.
+    sizeChanges.sort((a, b) => b.sizeDifference - a.sizeDifference);
+
+    var totalSizes = <List<Diff>, int>{};
+    for (var diffs in [adds, removals, becameDeferred, becameUndeferred]) {
+      var totalSize = 0;
+      for (var diff in diffs) {
+        // Only count diffs from leaf elements so we don't double count
+        // them when we account for class size diff or library size diff.
+        if (diff.info.kind == InfoKind.field ||
+            diff.info.kind == InfoKind.function ||
+            diff.info.kind == InfoKind.closure ||
+            diff.info.kind == InfoKind.typedef) {
+          totalSize += diff.info.size;
+        }
+      }
+      totalSizes[diffs] = totalSize;
+    }
+    var totalSizeChange = 0;
+    for (var sizeChange in sizeChanges) {
+      // Only count diffs from leaf elements so we don't double count
+      // them when we account for class size diff or library size diff.
+      if (sizeChange.info.kind == InfoKind.field ||
+          sizeChange.info.kind == InfoKind.function ||
+          sizeChange.info.kind == InfoKind.closure ||
+          sizeChange.info.kind == InfoKind.typedef) {
+        totalSizeChange += sizeChange.sizeDifference;
+      }
+    }
+    totalSizes[sizeChanges] = totalSizeChange;
+
+    reportSummary(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+        becameUndeferred, totalSizes);
+    if (!summaryOnly) {
+      print('');
+      reportFull(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+          becameUndeferred, totalSizes);
+    }
+  }
+}
+
+void reportSummary(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred,
+    Map<List<Diff>, int> totalSizes) {
+  var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
+  print('total_size_difference $overallSizeDiff');
+
+  print('total_added ${totalSizes[adds]}');
+  print('total_removed ${totalSizes[removals]}');
+  print('total_size_changed ${totalSizes[sizeChanges]}');
+  print('total_became_deferred ${totalSizes[becameDeferred]}');
+  print('total_no_longer_deferred ${totalSizes[becameUndeferred]}');
+}
+
+void reportFull(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred,
+    Map<List<Diff>, int> totalSizes) {
+  // TODO(het): Improve this output. Siggi has good suggestions in
+  // https://github.com/dart-lang/dart2js_info/pull/19
+
+  _section('ADDED', size: totalSizes[adds]);
+  for (var add in adds) {
+    print('${longName(add.info, useLibraryUri: true)}: ${add.info.size} bytes');
+  }
+  print('');
+
+  _section('REMOVED', size: totalSizes[removals]);
+  for (var removal in removals) {
+    print('${longName(removal.info, useLibraryUri: true)}: '
+        '${removal.info.size} bytes');
+  }
+  print('');
+
+  _section('CHANGED SIZE', size: totalSizes[sizeChanges]);
+  for (var sizeChange in sizeChanges) {
+    print('${longName(sizeChange.info, useLibraryUri: true)}: '
+        '${sizeChange.sizeDifference} bytes');
+  }
+  print('');
+
+  _section('BECAME DEFERRED', size: totalSizes[becameDeferred]);
+  for (var diff in becameDeferred) {
+    print('${longName(diff.info, useLibraryUri: true)}: '
+        '${diff.info.size} bytes');
+  }
+  print('');
+
+  _section('NO LONGER DEFERRED', size: totalSizes[becameUndeferred]);
+  for (var diff in becameUndeferred) {
+    print('${longName(diff.info, useLibraryUri: true)}: '
+        '${diff.info.size} bytes');
+  }
+}
+
+void _section(String title, {int size}) {
+  print('$title ($size bytes)');
+  print('=' * 72);
+}
diff --git a/pkg/dart2js_info/bin/src/function_size_analysis.dart b/pkg/dart2js_info/bin/src/function_size_analysis.dart
new file mode 100644
index 0000000..cb2c591
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/function_size_analysis.dart
@@ -0,0 +1,181 @@
+// 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.
+
+/// Tool presenting how much each function contributes to the total code.
+library compiler.tool.function_size_analysis;
+
+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';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+/// Command presenting how much each function contributes to the total code.
+class FunctionSizeCommand extends Command<void> with PrintUsageException {
+  final String name = "function_size";
+  final String description = "See breakdown of code size by function.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    var info = await infoFromFile(args.first);
+    showCodeDistribution(info);
+  }
+}
+
+showCodeDistribution(AllInfo info,
+    {bool filter(Info info), 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));
+
+  // Compute a graph from the dependencies in [info].
+  Graph<Info> graph = graphFromInfo(info);
+
+  // Compute the strongly connected components and calculate their size.
+  var components = graph.computeTopologicalSort();
+  print('total elements: ${graph.nodes.length}');
+  print('total strongly connected components: ${components.length}');
+  var maxS = 0;
+  var totalCount = graph.nodeCount;
+  var minS = totalCount;
+  var nodeData = {};
+  for (var scc in components) {
+    var sccData = new _SccData();
+    maxS = math.max(maxS, scc.length);
+    minS = math.min(minS, scc.length);
+    for (var f in scc) {
+      sccData.size += f.size;
+      for (var g in graph.targetsOf(f)) {
+        var gData = nodeData[g];
+        if (gData != null) sccData.deps.add(gData);
+      }
+    }
+    for (var f in scc) {
+      nodeData[f] = sccData;
+    }
+  }
+  print('scc sizes: min: $minS, max: $maxS, '
+      'avg ${totalCount / components.length}');
+
+  // Compute a dominator tree and calculate the size dominated by each element.
+  // TODO(sigmund): we need a more reliable way to fetch main.
+  var mainMethod = info.functions.firstWhere((f) => f.name == 'main');
+  var dominatorTree = graph.dominatorTree(mainMethod);
+  var dominatedSize = {};
+  helper(n) {
+    int size = n.size;
+    assert(!dominatedSize.containsKey(n));
+    dominatedSize[n] = 0;
+    dominatorTree.targetsOf(n).forEach((m) {
+      size += helper(m);
+    });
+    dominatedSize[n] = size;
+    return size;
+  }
+
+  helper(mainMethod);
+  reported.forEach((n) => dominatedSize.putIfAbsent(n, () => n.size));
+  reported.sort((a, b) =>
+      (dominatedSize[b] + nodeData[b].maxSize) -
+      (dominatedSize[a] + nodeData[a].maxSize));
+
+  if (showLibrarySizes) {
+    print(' --- Results per library ---');
+    var totals = <LibraryInfo, int>{};
+    var longest = 0;
+    reported.forEach((info) {
+      var size = info.size;
+      while (info != null && info is! LibraryInfo) {
+        info = info.parent;
+      }
+      if (info == null) return;
+      LibraryInfo lib = info;
+      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) {
+      _showLib('${info.uri}', totals[info], realTotal, longest + 1);
+    });
+  }
+
+  print('\n --- Results per element (field or function) ---');
+  _showElementHeader();
+  reported.forEach((info) {
+    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();
+  _SccData();
+
+  int _maxSize;
+  int get maxSize {
+    compute();
+    return _maxSize;
+  }
+
+  void compute() {
+    if (_maxSize != null) return;
+    var max = 0;
+    var seen = new Set();
+    helper(n) {
+      if (!seen.add(n)) return;
+      max += n.size;
+      n.deps.forEach(helper);
+    }
+
+    helper(this);
+    _maxSize = max;
+  }
+}
+
+_showLibHeader(int namePadding) {
+  print(' ${pad("Library", namePadding, right: true)}'
+      ' ${pad("bytes", 8)} ${pad("%", 6)}');
+}
+
+_showLib(String msg, int size, int total, int namePadding) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  print(' ${pad(msg, namePadding, right: true)}'
+      ' ${pad(size, 8)} ${pad(percent, 6)}%');
+}
+
+_showElementHeader() {
+  print('${pad("element size", 16)} '
+      '${pad("dominated size", 18)} '
+      '${pad("reachable size", 18)} '
+      'Element identifier');
+}
+
+_showElement(String name, int size, int dominatedSize, int maxSize, int total) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  var minPercent = (dominatedSize * 100 / total).toStringAsFixed(2);
+  var maxPercent = (maxSize * 100 / total).toStringAsFixed(2);
+  print('${pad(size, 8)} ${pad(percent, 6)}% '
+      '${pad(dominatedSize, 10)} ${pad(minPercent, 6)}% '
+      '${pad(maxSize, 10)} ${pad(maxPercent, 6)}% '
+      '$name');
+}
diff --git a/pkg/dart2js_info/bin/src/inject_text.dart b/pkg/dart2js_info/bin/src/inject_text.dart
new file mode 100644
index 0000000..8dfe157
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/inject_text.dart
@@ -0,0 +1,40 @@
+// 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 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+
+/// Modify [info] to fill in the text of code spans.
+///
+/// By default, code spans contains the offsets but omit the text
+/// (`CodeSpan.text` is null). This function reads the output files emitted by
+/// dart2js to extract the code denoted by each span.
+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));
+  });
+}
+
+Map<String, String> _cache = {};
+
+_getContents(OutputUnitInfo unit) => _cache.putIfAbsent(unit.filename, () {
+      var uri = Uri.base.resolve(unit.filename);
+      return new File.fromUri(uri).readAsStringSync();
+    });
+
+_fillSpan(CodeSpan span, OutputUnitInfo unit) {
+  if (span.text == null && span.start != null && span.end != 0) {
+    var contents = _getContents(unit);
+    span.text = contents.substring(span.start, span.end);
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/library_size_split.dart b/pkg/dart2js_info/bin/src/library_size_split.dart
new file mode 100644
index 0000000..1d252c4
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/library_size_split.dart
@@ -0,0 +1,230 @@
+// 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.
+
+/// Command-line tool to show the size distribution of generated code among
+/// libraries. Libraries can be grouped using regular expressions. You can
+/// specify what regular expressions to use by providing a `grouping.yaml` file.
+/// The format of the `grouping.yaml` file is as follows:
+/// ```yaml
+/// groups:
+/// - { regexp: "package:(foo)/*.dart", name: "group name 1", cluster: 2}
+/// - { regexp: "dart:.*",              name: "group name 2", cluster: 3}
+/// ```
+/// The file should include a single key `groups` containing a list of group
+/// specifications.  Each group is specified by a map of 3 entries:
+///
+///   * regexp (required): a regexp used to match entries that belong to the
+///   group.
+///
+///   * name (optional): the name given to this group in the output table. If
+///   omitted, the name is derived from the regexp as the match's group(1) or
+///   group(0) if no group was defined. When names are omitted the group
+///   specification implicitly defines several groups, one per observed name.
+///
+///   * cluster (optional): a clustering index for how data is shown in a table.
+///   Groups with higher cluster indices are shown later in the table after a
+///   dividing line. If missing, the cluster index defaults to 0.
+///
+/// Here is an example configuration, with comments about what each entry does:
+///
+/// ```yaml
+/// groups:
+/// # This group shows the total size for all libraries that were loaded from
+/// # file:// urls, it is shown in cluster #2, which happens to be the last
+/// # cluster in this example before the totals are shown:
+/// - { name: "Loose files", regexp: "file://.*", cluster: 2}
+///
+/// # This group shows the total size of all code loaded from packages:
+/// - { name: "All packages", regexp: "package:.*", cluster: 2}
+///
+/// # This group shows the total size of all code loaded from core libraries:
+/// - { name: "Core libs", regexp: "dart:.*", cluster: 2}
+///
+/// # This group shows the total size of all libraries in a single package. Here
+/// # we omitted the `name` entry, instead we extract it from the regexp
+/// # directly.  In this case, the name will be the package-name portion of the
+/// # package-url (determined by group(1) of the regexp).
+/// - { regexp: "package:([^/]*)", cluster: 1}
+///
+/// # The next two groups match the entire library url as the name of the group.
+/// - regexp: "package:.*"
+/// - regexp: "dart:.*"
+///
+/// # If your code lives under /my/project/dir, this will match any file loaded
+/// from a file:// url, and we use as a name the relative path to it.
+/// - regexp: "file:///my/project/dir/(.*)"
+///```
+///
+/// This example is very similar to [defaultGrouping].
+library dart2js_info.bin.library_size_split;
+
+import 'dart:io';
+import 'dart:math' show max;
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:yaml/yaml.dart';
+
+import 'usage_exception.dart';
+
+/// Command presenting how much each library contributes to the total code.
+class LibrarySizeCommand extends Command<void> with PrintUsageException {
+  final String name = "library_size";
+  final String description = "See breakdown of code size by library.";
+
+  LibrarySizeCommand() {
+    argParser.addOption('grouping',
+        help: 'YAML file specifying how libraries should be grouped.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+      print('usage: dart tool/library_size_split.dart '
+          'path-to-info.json [grouping.yaml]');
+      exit(1);
+    }
+
+    var info = await infoFromFile(args.first);
+
+    var groupingFile = argResults['grouping'];
+    var groupingText = groupingFile != null
+        ? new 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));
+    }
+
+    var sizes = {};
+    var allLibs = 0;
+    for (LibraryInfo lib in info.libraries) {
+      allLibs += lib.size;
+      groups.forEach((group) {
+        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));
+          sizes[name].size += lib.size;
+        }
+      });
+    }
+
+    var allConstants = 0;
+    for (var constant in info.constants) {
+      allConstants += constant.size;
+    }
+
+    var all = sizes.keys.toList();
+    all.sort((a, b) => sizes[a].compareTo(sizes[b]));
+    var realTotal = info.program.size;
+    var longest = 0;
+    var rows = <_Row>[];
+    _addRow(String label, int value) {
+      rows.add(new _Row(label, value));
+      longest = max(longest, label.length);
+    }
+
+    _printRow(_Row row) {
+      if (row is _Divider) {
+        print(' ' + ('-' * (longest + 18)));
+        return;
+      }
+
+      var percent = row.value == realTotal
+          ? '100'
+          : (row.value * 100 / realTotal).toStringAsFixed(2);
+      print(' ${_pad(row.label, longest + 1, right: true)}'
+          ' ${_pad(row.value, 8)} ${_pad(percent, 6)}%');
+    }
+
+    var lastCluster = 0;
+    for (var name in all) {
+      var entry = sizes[name];
+      if (lastCluster < entry.cluster) {
+        rows.add(const _Divider());
+        lastCluster = entry.cluster;
+      }
+      var size = entry.size;
+      _addRow(name, size);
+    }
+    rows.add(const _Divider());
+    _addRow("All libraries (excludes preambles, statics & consts)", allLibs);
+    _addRow("Shared consts", allConstants);
+    _addRow("Total accounted", allLibs + allConstants);
+    _addRow("Program Size", realTotal);
+    rows.forEach(_printRow);
+  }
+}
+
+/// A group defined in the configuration.
+class _Group {
+  /// Name of the group. May be null if the name is derived from the matcher. In
+  /// that case, the name would be group(1) of the matched expression if it
+  /// exist, or group(0) otherwise.
+  final String name;
+
+  /// Regular expression matching members of the group.
+  final RegExp matcher;
+
+  /// Index used to cluster groups together. Useful when the grouping
+  /// configuration describes some coarser groups than orders (e.g. summary of
+  /// packages would be in a different cluster than a summary of libraries).
+  final int cluster;
+
+  _Group(this.name, this.matcher, this.cluster);
+}
+
+class _SizeEntry {
+  final String name;
+  final int cluster;
+  int size = 0;
+
+  _SizeEntry(this.name, this.cluster);
+
+  int compareTo(_SizeEntry other) =>
+      cluster == other.cluster ? size - other.size : cluster - other.cluster;
+}
+
+class _Row {
+  final String label;
+  final int value;
+  const _Row(this.label, this.value);
+}
+
+class _Divider extends _Row {
+  const _Divider() : super('', 0);
+}
+
+_pad(value, n, {bool right: false}) {
+  var s = '$value';
+  if (s.length >= n) return s;
+  var pad = ' ' * (n - s.length);
+  return right ? '$s$pad' : '$pad$s';
+}
+
+/// Default grouping specification that includes an entry per library, and
+/// grouping entries for each package, all packages, all core libs, and loose
+/// files.
+final defaultGrouping = """
+groups:
+- { name: "Loose files", regexp: "file://.*", cluster: 2}
+- { name: "All packages", regexp: "package:.*", cluster: 2}
+- { name: "Core libs", regexp: "dart:.*", cluster: 2}
+# We omitted `name` to extract the group name from the regexp directly.
+# Here the name is the name of the package:
+- { regexp: "package:([^/]*)", cluster: 1}
+# Here the name is the url of the package and dart core libraries:
+- { regexp: "package:.*"}
+- { regexp: "dart:.*"}
+# Here the name is the relative path of loose files:
+- { regexp: "file://${Directory.current.path}/(.*)" }
+""";
diff --git a/pkg/dart2js_info/bin/src/live_code_size_analysis.dart b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
new file mode 100644
index 0000000..77c02fd
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
@@ -0,0 +1,138 @@
+// 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.
+
+/// Command-line tool presenting combined information from dump-info and
+/// coverage data.
+///
+/// This tool requires two input files an `.info.json` and a
+/// `.coverage.json` file. To produce these files you need to follow these
+/// steps:
+///
+///   * Compile an app with dart2js using --dump-info and defining the
+///     Dart environment `traceCalls=post`:
+///
+///      DART_VM_OPTIONS="-DtraceCalls=post" dart2js --dump-info main.dart
+///
+///     Because coverage/tracing data is currently experimental, the feature is
+///     not exposed as a flag in dart2js, but you can enable it using the Dart
+///     environment flag. The flag only works dart2js version 1.13.0 or newer.
+///
+///   * Launch the coverage server tool (in this package) to serve up the
+///     Javascript code in your app:
+///
+///      dart tool/coverage_log_server.dart main.dart.js
+///
+///   * (optional) If you have a complex application setup, integrate your
+///     application server to proxy to the log server any GET request for the
+///     .dart.js file and /coverage POST requests that send coverage data.
+///
+///   * Load your app and use it to exercise the entire code.
+///
+///   * Shut down the coverage server (Ctrl-C)
+///
+///   * Finally, run this tool.
+library compiler.tool.live_code_size_analysis;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'function_size_analysis.dart';
+import 'usage_exception.dart';
+
+class LiveCodeAnalysisCommand extends Command<void> with PrintUsageException {
+  final String name = "coverage_analysis";
+  final String description = "Analyze coverage data collected via the"
+      " 'coverage_server' command";
+
+  LiveCodeAnalysisCommand() {
+    argParser.addFlag('verbose',
+        abbr: 'v', negatable: false, help: 'Show verbose details.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException('Missing arguments, expected: info.data coverage.json');
+    }
+    await _liveCodeAnalysis(args[0], args[1], argResults['verbose']);
+  }
+}
+
+_liveCodeAnalysis(infoFile, coverageFile, bool verbose) async {
+  var info = await infoFromFile(infoFile);
+  var coverage = jsonDecode(new File(coverageFile).readAsStringSync());
+
+  int realTotal = info.program.size;
+  int totalLib = info.libraries.fold(0, (n, lib) => n + lib.size);
+
+  int totalCode = 0;
+  int reachableCode = 0;
+  List<Info> unused = [];
+
+  void tallyCode(Info f) {
+    totalCode += f.size;
+
+    var data = coverage[f.coverageId];
+    if (data != null) {
+      // Validate that the name match, it might not match if using a different
+      // version of the app.
+      // TODO(sigmund): use the same name.
+      // TODO(sigmund): inject a time-stamp in the code and dumpinfo and
+      // validate just once.
+      var name = f.name;
+      if (name.contains('.')) name = name.substring(name.lastIndexOf('.') + 1);
+      var otherName = data['name'];
+      if (otherName.contains('.')) {
+        otherName = otherName.substring(otherName.lastIndexOf('.') + 1);
+      }
+      if (otherName != name && otherName != '') {
+        print('invalid coverage: $data for $f, ($name vs $otherName)');
+      }
+      reachableCode += f.size;
+    } else {
+      // we should track more precisely data about inlined functions
+      unused.add(f);
+    }
+  }
+
+  info.functions.forEach(tallyCode);
+  info.fields.forEach(tallyCode);
+
+  _showHeader('', 'bytes', '%');
+  _show('Program size', realTotal, realTotal);
+  _show('Libraries (excluding statics)', totalLib, realTotal);
+  _show('Code (functions + fields)', totalCode, realTotal);
+  _show('Reachable code', reachableCode, realTotal);
+
+  print('');
+  _showHeader('', 'count', '%');
+  var total = info.functions.length + info.fields.length;
+  _show('Functions + fields', total, total);
+  _show('Reachable', total - unused.length, total);
+
+  // TODO(sigmund): support grouping results by package.
+  if (verbose) {
+    print('\nDistribution of code that was not used when running the app:');
+    showCodeDistribution(info,
+        filter: (f) => !coverage.containsKey(f.coverageId) && f.size > 0,
+        showLibrarySizes: true);
+  } else {
+    print('\nUse `-v` to see details about the size of unreachable code');
+  }
+}
+
+_showHeader(String msg, String header1, String header2) {
+  print(' ${pad(msg, 30, right: true)} ${pad(header1, 8)} ${pad(header2, 6)}');
+}
+
+_show(String msg, int size, int total) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  print(' ${pad(msg, 30, right: true)} ${pad(size, 8)} ${pad(percent, 6)}%');
+}
diff --git a/pkg/dart2js_info/bin/src/show_inferred_types.dart b/pkg/dart2js_info/bin/src/show_inferred_types.dart
new file mode 100644
index 0000000..521af34
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/show_inferred_types.dart
@@ -0,0 +1,69 @@
+// 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.
+
+/// Simple script that shows the inferred types of a function.
+library compiler.tool.show_inferred_types;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/src/util.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+class ShowInferredTypesCommand extends Command<void> with PrintUsageException {
+  final String name = "show_inferred";
+  final String description = "Show data inferred by dart2js global inference";
+
+  ShowInferredTypesCommand() {
+    argParser.addFlag('long-names',
+        abbr: 'l', negatable: false, help: 'Show long qualified names.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException(
+          'Missing arguments, expected: info.data <function-name-regex>');
+    }
+    _showInferredTypes(args[0], args[1], argResults['long-names']);
+  }
+}
+
+_showInferredTypes(String infoFile, String pattern, bool showLongName) async {
+  var info = await infoFromFile(infoFile);
+  var nameRegExp = new RegExp(pattern);
+  matches(e) => nameRegExp.hasMatch(longName(e));
+
+  bool noResults = true;
+  void showMethods() {
+    var sources = info.functions.where(matches).toList();
+    if (sources.isEmpty) return;
+    noResults = false;
+    for (var s in sources) {
+      var params = s.parameters.map((p) => '${p.name}: ${p.type}').join(', ');
+      var name = showLongName ? longName(s) : s.name;
+      print('$name($params): ${s.returnType}');
+    }
+  }
+
+  void showFields() {
+    var sources = info.fields.where(matches).toList();
+    if (sources.isEmpty) return;
+    noResults = false;
+    for (var s in sources) {
+      var name = showLongName ? longName(s) : s.name;
+      print('$name: ${s.inferredType}');
+    }
+  }
+
+  showMethods();
+  showFields();
+  if (noResults) {
+    print('error: no function or field that matches $pattern was found.');
+    exit(1);
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/text_print.dart b/pkg/dart2js_info/bin/src/text_print.dart
new file mode 100644
index 0000000..a38cd55
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/text_print.dart
@@ -0,0 +1,210 @@
+// 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 'dart:io';
+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 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Shows the contents of an info file as text.
+class ShowCommand extends Command<void> with PrintUsageException {
+  final String name = "show";
+  final String description = "Show a text representation of the info file.";
+
+  ShowCommand() {
+    argParser.addOption('out',
+        abbr: 'o', help: 'Output file (defauts to stdout)');
+
+    argParser.addFlag('inject-text',
+        negatable: false,
+        help: 'Whether to inject output code snippets.\n\n'
+            'By default dart2js produces code spans, but excludes the text. This\n'
+            'option can be used to embed the text directly in the output.');
+  }
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+    }
+
+    String filename = argResults.rest[0];
+    AllInfo info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+
+    var buffer = new StringBuffer();
+    info.accept(new TextPrinter(buffer, argResults['inject-text']));
+    var outputPath = argResults['out'];
+    if (outputPath == null) {
+      print(buffer);
+    } else {
+      new File(outputPath).writeAsStringSync('$buffer');
+    }
+  }
+}
+
+class TextPrinter implements InfoVisitor<void> {
+  final StringBuffer buffer;
+  final bool injectText;
+
+  TextPrinter(this.buffer, this.injectText);
+
+  int _indent = 0;
+  String get _textIndent => "  " * _indent;
+  void _writeIndentation() {
+    buffer.write(_textIndent);
+  }
+
+  void _writeIndented(String s) {
+    _writeIndentation();
+    buffer.writeln(s.replaceAll('\n', '\n$_textIndent'));
+  }
+
+  void _writeBlock(String s, void f()) {
+    _writeIndented("$s");
+    _indent++;
+    f();
+    _indent--;
+  }
+
+  void visitAll(AllInfo info) {
+    _writeBlock("Summary data", () => visitProgram(info.program));
+    buffer.writeln();
+    _writeBlock("Libraries", () => info.libraries.forEach(visitLibrary));
+    // Note: classes, functions, typedefs, and fields are group;ed by library.
+
+    if (injectText) {
+      _writeBlock("Constants", () => info.constants.forEach(visitConstant));
+    } else {
+      int size = info.constants.fold(0, (n, c) => n + c.size);
+      _writeIndented("All constants: ${_size(size)}");
+    }
+    _writeBlock("Output units", () => info.outputUnits.forEach(visitOutput));
+  }
+
+  void visitProgram(ProgramInfo info) {
+    _writeIndented('main: ${longName(info.entrypoint, useLibraryUri: true)}');
+    _writeIndented('size: ${info.size}');
+    _writeIndented('dart2js-version: ${info.dart2jsVersion}');
+    var features = [];
+    if (info.noSuchMethodEnabled) features.add('no-such-method');
+    if (info.isRuntimeTypeUsed) features.add('runtime-type');
+    if (info.isFunctionApplyUsed) features.add('function-apply');
+    if (info.minified) features.add('minified');
+    if (features.isNotEmpty) {
+      _writeIndented('features: ${features.join(' ')}');
+    }
+  }
+
+  String _size(int size) {
+    if (size < 1024) return "$size b";
+    if (size < (1024 * 1024)) {
+      return "${(size / 1024).toStringAsFixed(2)} Kb ($size b)";
+    }
+    return "${(size / (1024 * 1024)).toStringAsFixed(2)} Mb ($size b)";
+  }
+
+  void visitLibrary(LibraryInfo info) {
+    _writeBlock('${info.uri}: ${_size(info.size)}', () {
+      if (info.topLevelFunctions.isNotEmpty) {
+        _writeBlock('Top-level functions',
+            () => info.topLevelFunctions.forEach(visitFunction));
+        buffer.writeln();
+      }
+      if (info.topLevelVariables.isNotEmpty) {
+        _writeBlock('Top-level variables',
+            () => info.topLevelVariables.forEach(visitField));
+        buffer.writeln();
+      }
+      if (info.classes.isNotEmpty) {
+        _writeBlock('Classes', () => info.classes.forEach(visitClass));
+      }
+      if (info.typedefs.isNotEmpty) {
+        _writeBlock("Typedefs", () => info.typedefs.forEach(visitTypedef));
+        buffer.writeln();
+      }
+      buffer.writeln();
+    });
+  }
+
+  void visitClass(ClassInfo info) {
+    _writeBlock(
+        '${info.name}: ${_size(info.size)} [${info.outputUnit.filename}]', () {
+      if (info.functions.isNotEmpty) {
+        _writeBlock('Methods:', () => info.functions.forEach(visitFunction));
+      }
+      if (info.fields.isNotEmpty) {
+        _writeBlock('Fields:', () => info.fields.forEach(visitField));
+      }
+      if (info.functions.isNotEmpty || info.fields.isNotEmpty) buffer.writeln();
+    });
+  }
+
+  void visitField(FieldInfo info) {
+    _writeBlock('${info.type} ${info.name}: ${_size(info.size)}', () {
+      _writeIndented('inferred type: ${info.inferredType}');
+      if (injectText) _writeBlock("code:", () => _writeCode(info.code));
+      if (info.closures.isNotEmpty) {
+        _writeBlock('Closures:', () => info.closures.forEach(visitClosure));
+      }
+      if (info.uses.isNotEmpty) {
+        _writeBlock('Dependencies:', () => info.uses.forEach(showDependency));
+      }
+    });
+  }
+
+  void visitFunction(FunctionInfo info) {
+    var outputUnitFile = '';
+    if (info.functionKind == FunctionInfo.TOP_LEVEL_FUNCTION_KIND) {
+      outputUnitFile = ' [${info.outputUnit.filename}]';
+    }
+    String params =
+        info.parameters.map((p) => "${p.declaredType} ${p.name}").join(', ');
+    _writeBlock(
+        '${info.returnType} ${info.name}($params): ${_size(info.size)}$outputUnitFile',
+        () {
+      String params = info.parameters.map((p) => "${p.type}").join(', ');
+      _writeIndented('declared type: ${info.type}');
+      _writeIndented(
+          'inferred type: ${info.inferredReturnType} Function($params)');
+      _writeIndented('side effects: ${info.sideEffects}');
+      if (injectText) _writeBlock("code:", () => _writeCode(info.code));
+      if (info.closures.isNotEmpty) {
+        _writeBlock('Closures:', () => info.closures.forEach(visitClosure));
+      }
+      if (info.uses.isNotEmpty) {
+        _writeBlock('Dependencies:', () => info.uses.forEach(showDependency));
+      }
+    });
+  }
+
+  void showDependency(DependencyInfo info) {
+    var mask = info.mask ?? '';
+    _writeIndented('- ${longName(info.target, useLibraryUri: true)} $mask');
+  }
+
+  void visitTypedef(TypedefInfo info) {
+    _writeIndented('${info.name}: ${info.type}');
+  }
+
+  void visitClosure(ClosureInfo info) {
+    _writeBlock('${info.name}', () => visitFunction(info.function));
+  }
+
+  void visitConstant(ConstantInfo info) {
+    _writeBlock('${_size(info.size)}:', () => _writeCode(info.code));
+  }
+
+  void _writeCode(List<CodeSpan> code) {
+    _writeIndented(code.map((c) => c.text).join('\n'));
+  }
+
+  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
new file mode 100644
index 0000000..1d90ed2
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_binary.dart
@@ -0,0 +1,35 @@
+// 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 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js in JSON to binary format.
+class ToBinaryCommand extends Command<void> with PrintUsageException {
+  final String name = "to_binary";
+  final String description = "Convert any info file to binary format.";
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+      exit(1);
+    }
+
+    String filename = argResults.rest[0];
+    AllInfo info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+    String outputFilename = argResults['out'] ?? '$filename.data';
+    var outstream = new 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
new file mode 100644
index 0000000..fff4d34
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_json.dart
@@ -0,0 +1,54 @@
+// 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 'dart:io';
+import 'dart:convert';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js in binary format to JSON.
+class ToJsonCommand extends Command<void> with PrintUsageException {
+  final String name = "to_json";
+  final String description = "Convert any info file to JSON format.";
+
+  ToJsonCommand() {
+    argParser.addFlag('compat-mode',
+        negatable: false,
+        help: 'Whether to generate an older version of the JSON format.\n\n'
+            'By default files are converted to the latest JSON format, but\n'
+            'passing `--compat-mode` will produce a JSON file that may still\n'
+            'work in the visualizer tool at:\n'
+            'https://dart-lang.github.io/dump-info-visualizer/.\n\n'
+            'This option enables `--inject-text` as well, but note that\n'
+            'files produced in this mode do not contain all the data\n'
+            'available in the input file.');
+  }
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+    }
+
+    String filename = argResults.rest[0];
+    bool isBackwardCompatible = argResults['compat-mode'];
+    AllInfo info = await infoFromFile(filename);
+
+    if (isBackwardCompatible || argResults['inject-text']) {
+      injectText(info);
+    }
+
+    var json = new AllInfoJsonCodec(isBackwardCompatible: isBackwardCompatible)
+        .encode(info);
+    String outputFilename = argResults['out'] ?? '$filename.json';
+    new 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
new file mode 100644
index 0000000..fcbfaa8
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_proto.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command-line tool to convert an info.json file ouputted by dart2js to the
+/// alternative protobuf format.
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js to the proto format
+class ToProtoCommand extends Command<void> with PrintUsageException {
+  final String name = "to_proto";
+  final String description = "Convert any info file to proto format.";
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+      exit(1);
+    }
+
+    String filename = argResults.rest[0];
+    final info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+    final proto = new AllInfoProtoCodec().encode(info);
+    String outputFilename = argResults['out'] ?? '$filename.pb';
+    final outputFile = new 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
new file mode 100644
index 0000000..4499da3
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/usage_exception.dart
@@ -0,0 +1,16 @@
+// 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 'dart:io';
+import 'package:args/command_runner.dart';
+
+abstract class PrintUsageException implements Command<void> {
+  // TODO(rnystrom): Use "Never" for the return type when this package is
+  // migrated to null safety.
+  usageException(String message) {
+    print(message);
+    printUsage();
+    exit(1);
+  }
+}
diff --git a/pkg/dart2js_info/bin/tools.dart b/pkg/dart2js_info/bin/tools.dart
new file mode 100644
index 0000000..40495a8
--- /dev/null
+++ b/pkg/dart2js_info/bin/tools.dart
@@ -0,0 +1,39 @@
+// 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:args/command_runner.dart';
+
+import 'src/code_deps.dart';
+import 'src/coverage_log_server.dart';
+import 'src/debug_info.dart';
+import 'src/diff.dart';
+import 'src/deferred_library_check.dart';
+import 'src/deferred_library_size.dart';
+import 'src/deferred_library_layout.dart';
+import 'src/convert.dart';
+import 'src/function_size_analysis.dart';
+import 'src/library_size_split.dart';
+import 'src/live_code_size_analysis.dart';
+import 'src/show_inferred_types.dart';
+import 'src/text_print.dart';
+
+/// Entrypoint to run all dart2js_info tools.
+void main(args) {
+  var commandRunner = new 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());
+  commandRunner.run(args);
+}
diff --git a/pkg/dart2js_info/info.proto b/pkg/dart2js_info/info.proto
new file mode 100644
index 0000000..b8e8f09
--- /dev/null
+++ b/pkg/dart2js_info/info.proto
@@ -0,0 +1,267 @@
+syntax = "proto3";
+
+option go_package = "dart2js_info";
+
+package dart2js_info.proto;
+
+message DependencyInfoPB {
+  /** The dependency element's serialized_id, references as FunctionInfo or FieldInfo. */
+  string target_id = 1;
+
+  /** Either a selector mask indicating how this is used, or 'inlined'. */
+  string mask = 2;
+}
+
+/** The entire information produced when compiling a program. */
+message AllInfoPB {
+  /** Summary information about the program. */
+  ProgramInfoPB program = 1;
+
+  /** All the recorded information about elements processed by the compiler. */
+  map<string, InfoPB> all_infos = 2;
+
+  /** Details about all deferred imports and what files would be loaded when the import is resolved. */
+  repeated LibraryDeferredImportsPB deferred_imports = 3;
+}
+
+/*
+ * Common interface to many pieces of information generated by the dart2js
+ * compiler that are directly associated with an element (compilation unit,
+ * library, class, function, or field).
+ */
+message InfoPB {
+  /** Name of the element associated with this info. */
+  string name = 1;
+
+  /** An id to uniquely identify this info among infos of the same kind. */
+  int32 id = 2;
+
+  /** A globally unique id which combines kind and id together. */
+  string serialized_id = 3;
+
+  /** Id used by the compiler when instrumenting code for code coverage. */
+  string coverage_id = 4;
+
+  /** Bytes used in the generated code for the corresponding element. */
+  int32 size = 5;
+
+  /** The serialized_id of the enclosing element. */
+  string parent_id = 6;
+
+  /** How does this function or field depend on others. */
+  repeated DependencyInfoPB uses = 7;
+
+  /** The serialized_id of the output unit the element is generated into. */
+  string output_unit_id = 8;
+
+  /** Reserved tags for future common fields. */
+  reserved 9 to 99;
+
+  /** The concrete info type. */
+  oneof concrete {
+    /** Information about a library element. */
+    LibraryInfoPB library_info = 100;
+
+    /** Information about a class element. */
+    ClassInfoPB class_info = 101;
+
+    /** Information about a function element. */
+    FunctionInfoPB function_info = 102;
+
+    /** Information about a field element. */
+    FieldInfoPB field_info = 103;
+
+    /** Information about a constant element. */
+    ConstantInfoPB constant_info = 104;
+
+    /** Information about an output unit element. */
+    OutputUnitInfoPB output_unit_info = 105;
+
+    /** Information about a typedef element. */
+    TypedefInfoPB typedef_info = 106;
+
+    /** Information about a closure element. */
+    ClosureInfoPB closure_info = 107;
+  }
+}
+
+/** General metadata about the dart2js invocation. */
+message ProgramInfoPB {
+  /** serialized_id for the entrypoint FunctionInfo. */
+  string entrypoint_id = 1;
+
+  /** The overall size of the dart2js binary. */
+  int32 size = 2;
+
+  /** The version of dart2js used to compile the program. */
+  string dart2js_version = 3;
+
+  /** The time at which the compilation was performed in microseconds since epoch. */
+  int64 compilation_moment = 4;
+
+  /** The amount of time spent compiling the program in microseconds. */
+  int64 compilation_duration = 5;
+
+  /** The amount of time spent converting the info to protobuf in microseconds. */
+  int64 to_proto_duration = 6;
+
+  /** The amount of time spent writing out the serialized info in microseconds. */
+  int64 dump_info_duration = 7;
+
+  /** true if noSuchMethod is used. */
+  bool no_such_method_enabled = 8;
+
+  /** True if Object.runtimeType is used. */
+  bool is_runtime_type_used = 9;
+
+  /** True if dart:isolate library is used. */
+  bool is_isolate_used = 10;
+
+  /** True if Function.apply is used. */
+  bool is_function_apply_used = 11;
+
+  /** True if dart:mirrors features are used. */
+  bool is_mirrors_used = 12;
+
+  /** Whether the resulting dart2js binary is minified. */
+  bool minified = 13;
+}
+
+/** Info associated with a library element. */
+message LibraryInfoPB {
+  /** The canonical uri that identifies the library. */
+  string uri = 1;
+
+  /** The serialized_ids of all FunctionInfo, FieldInfo, ClassInfo and TypedefInfo elements that are defined in the library. */
+  repeated string children_ids = 2;
+}
+
+/**
+ * Information about an output unit. Normally there is just one for the entire
+ * program unless the application uses deferred imports, in which case there
+ * would be an additional output unit per deferred chunk.
+ */
+message OutputUnitInfoPB {
+  /** The deferred imports that will load this output unit. */
+  repeated string imports = 1;
+}
+
+/** Information about a class element. */
+message ClassInfoPB {
+  /** Whether the class is abstract. */
+  bool is_abstract = 1;
+
+  /** The serialized_ids of all FunctionInfo and FieldInfo elements defined in the class. */
+  repeated string children_ids = 2;
+}
+
+/** Information about a constant value. */
+message ConstantInfoPB {
+  /** The actual generated code for the constant. */
+  string code = 1;
+}
+
+/** Information about a field element. */
+message FieldInfoPB {
+  /** The type of the field. */
+  string type = 1;
+
+  /** The type inferred by dart2js's whole program analysis. */
+  string inferred_type = 2;
+
+  /** The serialized_ids of all ClosureInfo elements nested in the field initializer. */
+  repeated string children_ids = 3;
+
+  /** The actual generated code for the field. */
+  string code = 4;
+
+  /** Whether the field is a const declaration. */
+  bool is_const = 5;
+
+  /** When isConst is true, the serialized_id of the ConstantInfo initializer expression. */
+  string initializer_id = 6;
+}
+
+/** Information about a typedef declaration. */
+message TypedefInfoPB {
+  /** The declared type. */
+  string type = 1;
+}
+
+/** Available function modifiers. */
+message FunctionModifiersPB {
+  /** Whether the function is declared as static. */
+  bool is_static = 1;
+
+  /** Whether the function is declared as const. */
+  bool is_const = 2;
+
+  /** Whether the function is a factory constructor. */
+  bool is_factory = 3;
+
+  /** Whether the function is declared as extern. */
+  bool is_external = 4;
+}
+
+/** Information about a function parameter. */
+message ParameterInfoPB {
+  string name = 1;
+  string type = 2;
+  string declared_type = 3;
+}
+
+/** Information about a function or method. */
+message FunctionInfoPB {
+  /** Modifiers applied to the function. */
+  FunctionModifiersPB function_modifiers = 1;
+
+  /** serialized_ids of any ClosureInfo elements declared in the function. */
+  repeated string children_ids = 2;
+
+  /** The declared return type. */
+  string return_type = 3;
+
+  /** The inferred return type. */
+  string inferred_return_type = 4;
+
+  /** Name and type information for each parameter. */
+  repeated ParameterInfoPB parameters = 5;
+
+  /** Side-effects of the function. */
+  string side_effects = 6;
+
+  /** How many function calls were inlined into the function. */
+  int32 inlined_count = 7;
+
+  /** The actual generated code. */
+  string code = 8;
+
+  /** Measurements collected for this function. */
+  reserved 9;
+}
+
+/** Information about a closure, also known as a local function. */
+message ClosureInfoPB {
+  /** serialized_id of the FunctionInfo wrapped by this closure. */
+  string function_id = 1;
+}
+
+message DeferredImportPB {
+  /** The prefix assigned to the deferred import. */
+  string prefix = 1;
+
+  /** The list of filenames loaded by the import. */
+  repeated string files = 2;
+}
+
+/** Information about deferred imports within a dart library. */
+message LibraryDeferredImportsPB {
+  /** The uri of the library which makes the deferred import. */
+  string library_uri = 1;
+
+  /** The name of the library, or "<unnamed>" if it is unnamed. */
+  string library_name = 2;
+
+  /** The individual deferred imports within the library. */
+  repeated DeferredImportPB imports = 3;
+}
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
new file mode 100644
index 0000000..382c37e
--- /dev/null
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -0,0 +1,459 @@
+// 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.
+
+/// Info serialization to a binary form.
+///
+/// Unlike the JSON codec, this serialization is designed to be streamed.
+
+import 'dart:convert';
+
+import 'src/binary/sink.dart';
+import 'src/binary/source.dart';
+import 'info.dart';
+
+void encode(AllInfo info, Sink<List<int>> sink) {
+  new BinaryPrinter(new BinarySink(sink)).visitAll(info);
+}
+
+AllInfo decode(List<int> data) {
+  return new BinaryReader(new BinarySource(data)).readAll();
+}
+
+class BinaryPrinter implements InfoVisitor<void> {
+  final BinarySink sink;
+
+  BinaryPrinter(this.sink);
+
+  void writeDate(DateTime date) {
+    sink.writeString(date.toIso8601String());
+  }
+
+  void writeDuration(Duration duration) {
+    sink.writeInt(duration.inMicroseconds);
+  }
+
+  void writeInfoWithKind(Info info) {
+    sink.writeEnum(info.kind);
+    info.accept(this);
+  }
+
+  void visitAll(AllInfo info) {
+    sink.writeInt(info.version);
+    sink.writeInt(info.minorVersion);
+    sink.writeList(info.libraries, visitLibrary);
+    // TODO(sigmund): synthesize the following lists instead of serializing the
+    // values again.
+    sink.writeList(info.classes, visitClass);
+    sink.writeList(info.functions, visitFunction);
+    sink.writeList(info.typedefs, visitTypedef);
+    sink.writeList(info.fields, visitField);
+    sink.writeList(info.constants, visitConstant);
+    sink.writeList(info.closures, visitClosure);
+
+    void writeDependencies(CodeInfo info) {
+      sink.writeList(info.uses, _writeDependencyInfo);
+    }
+
+    info.fields.forEach(writeDependencies);
+    info.functions.forEach(writeDependencies);
+
+    sink.writeInt(info.dependencies.length);
+    info.dependencies.forEach((Info key, List<Info> values) {
+      writeInfoWithKind(key);
+      sink.writeList(values, writeInfoWithKind);
+    });
+    sink.writeList(info.outputUnits, visitOutput);
+    sink.writeString(jsonEncode(info.deferredFiles));
+    visitProgram(info.program);
+    sink.close();
+  }
+
+  void visitProgram(ProgramInfo info) {
+    visitFunction(info.entrypoint);
+    sink.writeInt(info.size);
+    sink.writeStringOrNull(info.dart2jsVersion);
+    writeDate(info.compilationMoment);
+    writeDuration(info.compilationDuration);
+    // Note: we don't record the 'toJsonDuration' field. Consider deleting it?
+    writeDuration(info.dumpInfoDuration);
+    sink.writeBool(info.noSuchMethodEnabled);
+    sink.writeBool(info.isRuntimeTypeUsed);
+    sink.writeBool(info.isIsolateInUse);
+    sink.writeBool(info.isFunctionApplyUsed);
+    sink.writeBool(info.isMirrorsUsed);
+    sink.writeBool(info.minified);
+  }
+
+  void _visitBasicInfo(BasicInfo info) {
+    sink.writeStringOrNull(info.name);
+    sink.writeInt(info.size);
+    sink.writeStringOrNull(info.coverageId);
+    _writeOutputOrNull(info.outputUnit);
+    // Note: parent-pointers are not serialized, they get deduced during deserialization.
+  }
+
+  void visitLibrary(LibraryInfo library) {
+    sink.writeCached(library, (LibraryInfo info) {
+      sink.writeUri(info.uri);
+      _visitBasicInfo(info);
+      sink.writeList(info.topLevelFunctions, visitFunction);
+      sink.writeList(info.topLevelVariables, visitField);
+      sink.writeList(info.classes, visitClass);
+      sink.writeList(info.typedefs, visitTypedef);
+    });
+  }
+
+  void visitClass(ClassInfo cls) {
+    sink.writeCached(cls, (ClassInfo info) {
+      _visitBasicInfo(info);
+      sink.writeBool(info.isAbstract);
+      sink.writeList(info.fields, visitField);
+      sink.writeList(info.functions, visitFunction);
+    });
+  }
+
+  void visitField(FieldInfo field) {
+    sink.writeCached(field, (FieldInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.closures, visitClosure);
+      sink.writeString(info.inferredType);
+      sink.writeList(info.code, _visitCodeSpan);
+      sink.writeString(info.type);
+      sink.writeBool(info.isConst);
+      if (info.isConst) {
+        _writeConstantOrNull(info.initializer);
+      }
+    });
+  }
+
+  _visitCodeSpan(CodeSpan code) {
+    sink.writeIntOrNull(code.start);
+    sink.writeIntOrNull(code.end);
+    sink.writeStringOrNull(code.text);
+  }
+
+  void _writeConstantOrNull(ConstantInfo info) {
+    sink.writeBool(info != null);
+    if (info != null) {
+      visitConstant(info);
+    }
+  }
+
+  void visitConstant(ConstantInfo constant) {
+    sink.writeCached(constant, (ConstantInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.code, _visitCodeSpan);
+    });
+  }
+
+  void _visitFunctionModifiers(FunctionModifiers mods) {
+    int value = 0;
+    if (mods.isStatic) value |= _staticMask;
+    if (mods.isConst) value |= _constMask;
+    if (mods.isFactory) value |= _factoryMask;
+    if (mods.isExternal) value |= _externalMask;
+    sink.writeInt(value);
+  }
+
+  void _visitParameterInfo(ParameterInfo info) {
+    sink.writeString(info.name);
+    sink.writeString(info.type);
+    sink.writeString(info.declaredType);
+  }
+
+  void visitFunction(FunctionInfo function) {
+    sink.writeCached(function, (FunctionInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.closures, visitClosure);
+      _visitFunctionModifiers(info.modifiers);
+      sink.writeString(info.returnType);
+      sink.writeString(info.inferredReturnType);
+      sink.writeList(info.parameters, _visitParameterInfo);
+      sink.writeString(info.sideEffects);
+      sink.writeIntOrNull(info.inlinedCount);
+      sink.writeList(info.code, _visitCodeSpan);
+      sink.writeString(info.type);
+    });
+  }
+
+  void _writeDependencyInfo(DependencyInfo info) {
+    writeInfoWithKind(info.target);
+    sink.writeStringOrNull(info.mask);
+  }
+
+  void visitClosure(ClosureInfo closure) {
+    sink.writeCached(closure, (ClosureInfo info) {
+      _visitBasicInfo(info);
+      visitFunction(info.function);
+    });
+  }
+
+  void visitTypedef(TypedefInfo typedef) {
+    sink.writeCached(typedef, (TypedefInfo info) {
+      _visitBasicInfo(info);
+      sink.writeString(info.type);
+    });
+  }
+
+  void _writeOutputOrNull(OutputUnitInfo info) {
+    sink.writeBool(info != null);
+    if (info != null) {
+      visitOutput(info);
+    }
+  }
+
+  void visitOutput(OutputUnitInfo output) {
+    sink.writeCached(output, (OutputUnitInfo info) {
+      _visitBasicInfo(info);
+      sink.writeStringOrNull(info.filename);
+      sink.writeList(info.imports, sink.writeString);
+    });
+  }
+}
+
+class BinaryReader {
+  final BinarySource source;
+  BinaryReader(this.source);
+
+  DateTime readDate() {
+    return DateTime.parse(source.readString());
+  }
+
+  Duration readDuration() {
+    return new Duration(microseconds: source.readInt());
+  }
+
+  Info readInfoWithKind() {
+    InfoKind kind = source.readEnum(InfoKind.values);
+    switch (kind) {
+      case InfoKind.library:
+        return readLibrary();
+      case InfoKind.clazz:
+        return readClass();
+      case InfoKind.function:
+        return readFunction();
+      case InfoKind.field:
+        return readField();
+      case InfoKind.constant:
+        return readConstant();
+      case InfoKind.outputUnit:
+        return readOutput();
+      case InfoKind.typedef:
+        return readTypedef();
+      case InfoKind.closure:
+        return readClosure();
+    }
+    return null;
+  }
+
+  AllInfo readAll() {
+    var info = new AllInfo();
+    int version = source.readInt();
+    int minorVersion = source.readInt();
+    if (info.version != version || info.minorVersion != minorVersion) {
+      print("warning: data was encoded with format version "
+          "$version.$minorVersion, but decoded with "
+          "${info.version}.${info.minorVersion}");
+    }
+    info.libraries = source.readList(readLibrary);
+    info.classes = source.readList(readClass);
+    info.functions = source.readList(readFunction);
+    info.typedefs = source.readList(readTypedef);
+    info.fields = source.readList(readField);
+    info.constants = source.readList(readConstant);
+    info.closures = source.readList(readClosure);
+
+    void readDependencies(CodeInfo info) {
+      info.uses = source.readList(_readDependencyInfo);
+    }
+
+    info.fields.forEach(readDependencies);
+    info.functions.forEach(readDependencies);
+
+    int dependenciesTotal = source.readInt();
+    while (dependenciesTotal > 0) {
+      Info key = readInfoWithKind();
+      List<Info> values = source.readList(readInfoWithKind);
+      info.dependencies[key] = values;
+      dependenciesTotal--;
+    }
+
+    info.outputUnits = source.readList(readOutput);
+
+    Map<String, Map<String, dynamic>> map =
+        jsonDecode(source.readString()).cast<String, Map<String, dynamic>>();
+    for (final library in map.values) {
+      if (library['imports'] != null) {
+        // The importMap needs to be typed as <String, List<String>>, but the
+        // json parser produces <String, dynamic>.
+        final importMap = library['imports'] as Map<String, dynamic>;
+        importMap.forEach((prefix, files) {
+          importMap[prefix] = (files as List<dynamic>).cast<String>();
+        });
+        library['imports'] = importMap.cast<String, List<String>>();
+      }
+    }
+    info.deferredFiles = map;
+    info.program = readProgram();
+    return info;
+  }
+
+  ProgramInfo readProgram() {
+    var info = new 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.dumpInfoDuration = readDuration();
+    info.noSuchMethodEnabled = source.readBool();
+    info.isRuntimeTypeUsed = source.readBool();
+    info.isIsolateInUse = source.readBool();
+    info.isFunctionApplyUsed = source.readBool();
+    info.isMirrorsUsed = source.readBool();
+    info.minified = source.readBool();
+    return info;
+  }
+
+  void _readBasicInfo(BasicInfo info) {
+    info.name = source.readStringOrNull();
+    info.size = source.readInt();
+    info.coverageId = source.readStringOrNull();
+    info.outputUnit = _readOutputOrNull();
+    // Note: parent pointers are added when deserializing parent nodes.
+  }
+
+  LibraryInfo readLibrary() => source.readCached<LibraryInfo>(() {
+        LibraryInfo info = new LibraryInfo.internal();
+        info.uri = source.readUri();
+        _readBasicInfo(info);
+        info.topLevelFunctions = source.readList(readFunction);
+        info.topLevelVariables = source.readList(readField);
+        info.classes = source.readList(readClass);
+        info.typedefs = source.readList(readTypedef);
+
+        setParent(BasicInfo child) => child.parent = info;
+        info.topLevelFunctions.forEach(setParent);
+        info.topLevelVariables.forEach(setParent);
+        info.classes.forEach(setParent);
+        info.typedefs.forEach(setParent);
+        return info;
+      });
+
+  ClassInfo readClass() => source.readCached<ClassInfo>(() {
+        ClassInfo info = new ClassInfo.internal();
+        _readBasicInfo(info);
+        info.isAbstract = source.readBool();
+        info.fields = source.readList(readField);
+        info.functions = source.readList(readFunction);
+
+        setParent(BasicInfo child) => child.parent = info;
+        info.fields.forEach(setParent);
+        info.functions.forEach(setParent);
+        return info;
+      });
+
+  FieldInfo readField() => source.readCached<FieldInfo>(() {
+        FieldInfo info = new FieldInfo.internal();
+        _readBasicInfo(info);
+        info.closures = source.readList(readClosure);
+        info.inferredType = source.readString();
+        info.code = source.readList(_readCodeSpan);
+        info.type = source.readString();
+        info.isConst = source.readBool();
+        if (info.isConst) {
+          info.initializer = _readConstantOrNull();
+        }
+        info.closures.forEach((c) => c.parent = info);
+        return info;
+      });
+
+  CodeSpan _readCodeSpan() {
+    return new CodeSpan()
+      ..start = source.readIntOrNull()
+      ..end = source.readIntOrNull()
+      ..text = source.readStringOrNull();
+  }
+
+  ConstantInfo _readConstantOrNull() {
+    bool hasOutput = source.readBool();
+    if (hasOutput) return readConstant();
+    return null;
+  }
+
+  ConstantInfo readConstant() => source.readCached<ConstantInfo>(() {
+        ConstantInfo info = new ConstantInfo.internal();
+        _readBasicInfo(info);
+        info.code = source.readList(_readCodeSpan);
+        return info;
+      });
+
+  FunctionModifiers _readFunctionModifiers() {
+    int value = source.readInt();
+    return new FunctionModifiers(
+        isStatic: value & _staticMask != 0,
+        isConst: value & _constMask != 0,
+        isFactory: value & _factoryMask != 0,
+        isExternal: value & _externalMask != 0);
+  }
+
+  ParameterInfo _readParameterInfo() {
+    return new ParameterInfo(
+        source.readString(), source.readString(), source.readString());
+  }
+
+  FunctionInfo readFunction() => source.readCached<FunctionInfo>(() {
+        FunctionInfo info = new FunctionInfo.internal();
+        _readBasicInfo(info);
+        info.closures = source.readList(readClosure);
+        info.modifiers = _readFunctionModifiers();
+        info.returnType = source.readString();
+        info.inferredReturnType = source.readString();
+        info.parameters = source.readList(_readParameterInfo);
+        info.sideEffects = source.readString();
+        info.inlinedCount = source.readIntOrNull();
+        info.code = source.readList(_readCodeSpan);
+        info.type = source.readString();
+        info.closures.forEach((c) => c.parent = info);
+        return info;
+      });
+
+  DependencyInfo _readDependencyInfo() =>
+      new DependencyInfo(readInfoWithKind(), source.readStringOrNull());
+
+  ClosureInfo readClosure() => source.readCached<ClosureInfo>(() {
+        ClosureInfo info = new ClosureInfo.internal();
+        _readBasicInfo(info);
+        info.function = readFunction();
+        info.function.parent = info;
+        return info;
+      });
+
+  TypedefInfo readTypedef() => source.readCached<TypedefInfo>(() {
+        TypedefInfo info = new TypedefInfo.internal();
+        _readBasicInfo(info);
+        info.type = source.readString();
+        return info;
+      });
+
+  OutputUnitInfo _readOutputOrNull() {
+    bool hasOutput = source.readBool();
+    if (hasOutput) return readOutput();
+    return null;
+  }
+
+  OutputUnitInfo readOutput() => source.readCached<OutputUnitInfo>(() {
+        OutputUnitInfo info = new OutputUnitInfo.internal();
+        _readBasicInfo(info);
+        info.filename = source.readStringOrNull();
+        info.imports = source.readList(source.readString);
+        return info;
+      });
+}
+
+const int _staticMask = 1 << 3;
+const int _constMask = 1 << 2;
+const int _factoryMask = 1 << 1;
+const int _externalMask = 1 << 0;
diff --git a/pkg/dart2js_info/lib/deferred_library_check.dart b/pkg/dart2js_info/lib/deferred_library_check.dart
new file mode 100644
index 0000000..8a7e98b
--- /dev/null
+++ b/pkg/dart2js_info/lib/deferred_library_check.dart
@@ -0,0 +1,177 @@
+// 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.
+
+/// This tool checks that the output from dart2js meets a given specification,
+/// given in a YAML file. The format of the YAML file is:
+///
+///     main:
+///       include:
+///         - some_package
+///         - other_package
+///
+///     foo:
+///       include:
+///         - foo
+///         - bar
+///
+///     baz:
+///       include:
+///         - baz
+///         - quux
+///       exclude:
+///         - zardoz
+///
+/// The YAML file consists of a list of declarations, one for each deferred
+/// part expected in the output. At least one of these parts must be named
+/// "main"; this is the main part that contains the program entrypoint. Each
+/// top-level part contains a list of package names that are expected to be
+/// contained in that part, a list of package names that are expected to be in
+/// another part, or both. For instance, in the example YAML above the part
+/// named "baz" is expected to contain the packages "baz" and "quux" and not to
+/// contain the package "zardoz".
+///
+/// The names for parts given in the specification YAML file (besides "main")
+/// are the same as the name given to the deferred import in the dart file. For
+/// instance, if you have `import 'package:foo/bar.dart' deferred as baz;` in
+/// your dart file, then the corresponding name in the specification file is
+/// 'baz'.
+library dart2js_info.deferred_library_check;
+
+import 'info.dart';
+
+List<ManifestComplianceFailure> checkDeferredLibraryManifest(
+    AllInfo info, Map manifest) {
+  var includedPackages = new Map<String, Set<String>>();
+  var excludedPackages = new Map<String, Set<String>>();
+  for (var part in manifest.keys) {
+    for (var package in manifest[part]['include'] ?? []) {
+      (includedPackages[part] ??= {}).add(package);
+    }
+    for (var package in manifest[part]['exclude'] ?? []) {
+      (excludedPackages[part] ??= {}).add(package);
+    }
+  }
+
+  // There are 2 types of parts that are valid to mention in the specification
+  // file. These are the main part and directly imported deferred parts. The
+  // main part is always named 'main'; the directly imported deferred parts are
+  // 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);
+  var partNameFailures = <_InvalidPartName>[];
+  for (var part in mentionedParts) {
+    if (!validParts.contains(part)) {
+      partNameFailures.add(new _InvalidPartName(part, validParts));
+    }
+  }
+  if (partNameFailures.isNotEmpty) {
+    return partNameFailures;
+  }
+
+  var mentionedPackages = {
+    for (var values in includedPackages.values) ...values,
+    for (var values in excludedPackages.values) ...values
+  };
+  var actualIncludedPackages = new Map<String, Set<String>>();
+
+  var failures = <ManifestComplianceFailure>[];
+
+  checkInfo(BasicInfo info) {
+    if (info.size == 0) return;
+    var lib = _getLibraryOf(info);
+    if (lib != null && _isPackageUri(lib.uri)) {
+      var packageName = _getPackageName(lib.uri);
+      if (!mentionedPackages.contains(packageName)) return;
+      var containingParts = <String>[];
+      if (info.outputUnit.name == 'main') {
+        containingParts.add('main');
+      } else {
+        containingParts.addAll(info.outputUnit.imports);
+      }
+      for (var part in containingParts) {
+        (actualIncludedPackages[part] ??= {}).add(packageName);
+        if (excludedPackages[part].contains(packageName)) {
+          failures
+              .add(new _PartContainedExcludedPackage(part, packageName, info));
+        }
+      }
+    }
+  }
+
+  info.functions.forEach(checkInfo);
+  info.fields.forEach(checkInfo);
+
+  includedPackages.forEach((part, packages) {
+    for (var package in packages) {
+      if (!actualIncludedPackages.containsKey(part) ||
+          !actualIncludedPackages[part].contains(package)) {
+        failures.add(new _PartDidNotContainPackage(part, package));
+      }
+    }
+  });
+  return failures;
+}
+
+LibraryInfo _getLibraryOf(Info info) {
+  var current = info;
+  while (current is! LibraryInfo) {
+    if (current == null) {
+      return null;
+    }
+    current = current.parent;
+  }
+  return current;
+}
+
+bool _isPackageUri(Uri uri) => uri.scheme == 'package';
+
+String _getPackageName(Uri uri) {
+  assert(_isPackageUri(uri));
+  return uri.pathSegments.first;
+}
+
+class ManifestComplianceFailure {
+  const ManifestComplianceFailure();
+}
+
+class _InvalidPartName extends ManifestComplianceFailure {
+  final String part;
+  final List<String> validPartNames;
+  const _InvalidPartName(this.part, this.validPartNames);
+
+  String toString() {
+    return 'Manifest file declares invalid part "$part". '
+        'Valid part names are: $validPartNames';
+  }
+}
+
+class _PartContainedExcludedPackage extends ManifestComplianceFailure {
+  final String part;
+  final String package;
+  final BasicInfo info;
+  const _PartContainedExcludedPackage(this.part, this.package, this.info);
+
+  String toString() {
+    return 'Part "$part" was specified to exclude package "$package" but it '
+        'actually contains ${kindToString(info.kind)} "${info.name}" which '
+        'is from package "$package"';
+  }
+}
+
+class _PartDidNotContainPackage extends ManifestComplianceFailure {
+  final String part;
+  final String package;
+  const _PartDidNotContainPackage(this.part, this.package);
+
+  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
new file mode 100644
index 0000000..d2019ca
--- /dev/null
+++ b/pkg/dart2js_info/lib/info.dart
@@ -0,0 +1,549 @@
+// 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.
+
+/// Data produced by dart2js when run with the `--dump-info` flag.
+library dart2js_info.info;
+
+/// Common interface to many pieces of information generated by the dart2js
+/// compiler that are directly associated with an element (compilation unit,
+/// library, class, function, or field).
+abstract class Info {
+  /// An identifier for the kind of information.
+  InfoKind get kind;
+
+  /// Name of the element associated with this info.
+  String name;
+
+  /// Id used by the compiler when instrumenting code for code coverage.
+  // TODO(sigmund): It would be nice if we could use the same id for
+  // serialization and for coverage. Could we unify them?
+  String coverageId;
+
+  /// Bytes used in the generated code for the corresponding element.
+  int size;
+
+  /// Info of the enclosing element.
+  Info parent;
+
+  T accept<T>(InfoVisitor<T> visitor);
+}
+
+/// Common information used for most kind of elements.
+// TODO(sigmund): add more:
+//  - inputSize: bytes used in the Dart source program
+abstract class BasicInfo implements Info {
+  final InfoKind kind;
+
+  String coverageId;
+  int size;
+  Info parent;
+
+  String name;
+
+  /// If using deferred libraries, where the element associated with this info
+  /// is generated.
+  OutputUnitInfo outputUnit;
+
+  BasicInfo(this.kind, this.name, this.outputUnit, this.size, this.coverageId);
+
+  BasicInfo.internal(this.kind);
+
+  String toString() => '$kind $name [$size]';
+}
+
+/// Info associated with elements containing executable code (like fields and
+/// methods)
+abstract class CodeInfo implements Info {
+  /// How does this function or field depend on others.
+  List<DependencyInfo> uses = [];
+}
+
+/// The entire information produced while compiling a program.
+class AllInfo {
+  /// Summary information about the program.
+  ProgramInfo program;
+
+  /// Information about each library processed by the compiler.
+  List<LibraryInfo> libraries = <LibraryInfo>[];
+
+  /// Information about each function (includes methods and getters in any
+  /// library)
+  List<FunctionInfo> functions = <FunctionInfo>[];
+
+  /// Information about type defs in the program.
+  List<TypedefInfo> typedefs = <TypedefInfo>[];
+
+  /// Information about each class (in any library).
+  List<ClassInfo> classes = <ClassInfo>[];
+
+  /// Information about fields (in any class).
+  List<FieldInfo> fields = <FieldInfo>[];
+
+  /// Information about constants anywhere in the program.
+  // TODO(sigmund): expand docs about canonicalization. We don't put these
+  // inside library because a single constant can be used in more than one lib,
+  // and we'll include it only once in the output.
+  List<ConstantInfo> constants = <ConstantInfo>[];
+
+  /// Information about closures anywhere in the program.
+  List<ClosureInfo> closures = <ClosureInfo>[];
+
+  /// Information about output units (should be just one entry if not using
+  /// deferred loading).
+  List<OutputUnitInfo> outputUnits = <OutputUnitInfo>[];
+
+  /// Details about all deferred imports and what files would be loaded when the
+  /// import is resolved.
+  // TODO(sigmund): use a different format for dump-info. This currently emits
+  // the same map that is created for the `--deferred-map` flag.
+  Map<String, Map<String, dynamic>> deferredFiles;
+
+  /// A new representation of dependencies from one info to another. An entry in
+  /// this map indicates that an [Info] depends on another (e.g. a function
+  /// invokes another). Please note that the data in this field might not be
+  /// accurate yet (this is work in progress).
+  Map<Info, List<Info>> dependencies = {};
+
+  /// Major version indicating breaking changes in the format. A new version
+  /// means that an old deserialization algorithm will not work with the new
+  /// format.
+  final int version = 6;
+
+  /// Minor version indicating non-breaking changes in the format. A change in
+  /// this version number means that the json parsing in this library from a
+  /// previous will continue to work after the change. This is typically
+  /// increased when adding new entries to the file format.
+  // Note: the dump-info.viewer app was written using a json parser version 3.2.
+  final int minorVersion = 0;
+
+  AllInfo();
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitAll(this);
+}
+
+class ProgramInfo {
+  FunctionInfo entrypoint;
+  int size;
+  String dart2jsVersion;
+  DateTime compilationMoment;
+  Duration compilationDuration;
+  Duration toJsonDuration;
+  Duration dumpInfoDuration;
+
+  /// `true` if `noSuchMethod` is used.
+  bool noSuchMethodEnabled;
+
+  /// `true` if `Object.runtimeType` is used.
+  bool isRuntimeTypeUsed;
+
+  /// `true` if the `dart:isolate` library is in use.
+  bool isIsolateInUse;
+
+  /// `true` if `Function.apply` is used.
+  bool isFunctionApplyUsed;
+
+  /// `true` if `dart:mirrors` features are used.
+  bool isMirrorsUsed;
+
+  bool minified;
+
+  ProgramInfo(
+      {this.entrypoint,
+      this.size,
+      this.dart2jsVersion,
+      this.compilationMoment,
+      this.compilationDuration,
+      this.toJsonDuration,
+      this.dumpInfoDuration,
+      this.noSuchMethodEnabled,
+      this.isRuntimeTypeUsed,
+      this.isIsolateInUse,
+      this.isFunctionApplyUsed,
+      this.isMirrorsUsed,
+      this.minified});
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitProgram(this);
+}
+
+/// Info associated with a library element.
+class LibraryInfo extends BasicInfo {
+  /// Canonical uri that identifies the library.
+  Uri uri;
+
+  /// Top level functions defined within the library.
+  List<FunctionInfo> topLevelFunctions = <FunctionInfo>[];
+
+  /// Top level fields defined within the library.
+  List<FieldInfo> topLevelVariables = <FieldInfo>[];
+
+  /// Classes defined within the library.
+  List<ClassInfo> classes = <ClassInfo>[];
+
+  /// Typedefs defined within the library.
+  List<TypedefInfo> typedefs = <TypedefInfo>[];
+
+  // TODO(sigmund): add here a list of parts. That can help us improve how we
+  // encode source-span information in metrics (rather than include the uri on
+  // each function, include an index into this list).
+
+  /// Whether there is any information recorded for this library.
+  bool get isEmpty =>
+      topLevelFunctions.isEmpty && topLevelVariables.isEmpty && classes.isEmpty;
+
+  LibraryInfo(String name, this.uri, OutputUnitInfo outputUnit, int size)
+      : super(InfoKind.library, name, outputUnit, size, null);
+
+  LibraryInfo.internal() : super.internal(InfoKind.library);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitLibrary(this);
+}
+
+/// Information about an output unit. Normally there is just one for the entire
+/// program unless the application uses deferred imports, in which case there
+/// would be an additional output unit per deferred chunk.
+class OutputUnitInfo extends BasicInfo {
+  String filename;
+
+  /// The deferred imports that will load this output unit.
+  List<String> imports = <String>[];
+
+  OutputUnitInfo(this.filename, String name, int size)
+      : super(InfoKind.outputUnit, name, null, size, null);
+
+  OutputUnitInfo.internal() : super.internal(InfoKind.outputUnit);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitOutput(this);
+}
+
+/// Information about a class element.
+class ClassInfo extends BasicInfo {
+  /// Whether the class is abstract.
+  bool isAbstract;
+
+  // TODO(sigmund): split static vs instance vs closures
+  /// Functions (static or instance) defined in the class.
+  List<FunctionInfo> functions = <FunctionInfo>[];
+
+  /// Fields defined in the class.
+  // TODO(sigmund): currently appears to only be populated with instance fields,
+  // but this should be fixed.
+  List<FieldInfo> fields = <FieldInfo>[];
+
+  ClassInfo(
+      {String name, this.isAbstract, OutputUnitInfo outputUnit, int size: 0})
+      : super(InfoKind.clazz, name, outputUnit, size, null);
+
+  ClassInfo.internal() : super.internal(InfoKind.clazz);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitClass(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].
+class CodeSpan {
+  /// Start offset in the generated file.
+  int start;
+
+  /// end offset in the generated file.
+  int end;
+
+  /// The actual code (optional, blank when using a compact representation of
+  /// the encoding).
+  String text;
+
+  CodeSpan({this.start, this.end, this.text});
+}
+
+/// Information about a constant value.
+// TODO(sigmund): add dependency data for ConstantInfo
+class ConstantInfo extends BasicInfo {
+  /// The actual generated code for the constant.
+  List<CodeSpan> code;
+
+  // TODO(sigmund): Add coverage support to constants?
+  ConstantInfo({int size: 0, this.code, OutputUnitInfo outputUnit})
+      : super(InfoKind.constant, null, outputUnit, size, null);
+
+  ConstantInfo.internal() : super.internal(InfoKind.constant);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitConstant(this);
+}
+
+/// Information about a field element.
+class FieldInfo extends BasicInfo with CodeInfo {
+  /// The type of the field.
+  String type;
+
+  /// The type inferred by dart2js's whole program analysis
+  String inferredType;
+
+  /// Nested closures seen in the field initializer.
+  List<ClosureInfo> closures;
+
+  /// The actual generated code for the field.
+  List<CodeSpan> code;
+
+  /// Whether this corresponds to a const field declaration.
+  bool isConst;
+
+  /// When [isConst] is true, the constant initializer expression.
+  ConstantInfo initializer;
+
+  FieldInfo(
+      {String name,
+      String coverageId,
+      int size: 0,
+      this.type,
+      this.inferredType,
+      this.closures,
+      this.code,
+      OutputUnitInfo outputUnit,
+      this.isConst})
+      : super(InfoKind.field, name, outputUnit, size, coverageId);
+
+  FieldInfo.internal() : super.internal(InfoKind.field);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitField(this);
+}
+
+/// Information about a typedef declaration.
+class TypedefInfo extends BasicInfo {
+  /// The declared type.
+  String type;
+
+  TypedefInfo(String name, this.type, OutputUnitInfo outputUnit)
+      : super(InfoKind.typedef, name, outputUnit, 0, null);
+
+  TypedefInfo.internal() : super.internal(InfoKind.typedef);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitTypedef(this);
+}
+
+/// Information about a function or method.
+class FunctionInfo extends BasicInfo with CodeInfo {
+  static const int TOP_LEVEL_FUNCTION_KIND = 0;
+  static const int CLOSURE_FUNCTION_KIND = 1;
+  static const int METHOD_FUNCTION_KIND = 2;
+  static const int CONSTRUCTOR_FUNCTION_KIND = 3;
+
+  /// Kind of function (top-level function, closure, method, or constructor).
+  int functionKind;
+
+  /// Modifiers applied to this function.
+  FunctionModifiers modifiers;
+
+  /// Nested closures that appear within the body of this function.
+  List<ClosureInfo> closures;
+
+  /// The type of this function.
+  String type;
+
+  /// The declared return type.
+  String returnType;
+
+  /// The inferred return type.
+  String inferredReturnType;
+
+  /// Name and type information for each parameter.
+  List<ParameterInfo> parameters;
+
+  /// Side-effects.
+  // TODO(sigmund): serialize more precisely, not just a string representation.
+  String sideEffects;
+
+  /// How many function calls were inlined into this function.
+  int inlinedCount;
+
+  /// The actual generated code.
+  List<CodeSpan> code;
+
+  FunctionInfo(
+      {String name,
+      String coverageId,
+      OutputUnitInfo outputUnit,
+      int size: 0,
+      this.functionKind,
+      this.modifiers,
+      this.closures,
+      this.type,
+      this.returnType,
+      this.inferredReturnType,
+      this.parameters,
+      this.sideEffects,
+      this.inlinedCount,
+      this.code})
+      : super(InfoKind.function, name, outputUnit, size, coverageId);
+
+  FunctionInfo.internal() : super.internal(InfoKind.function);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitFunction(this);
+}
+
+/// Information about a closure, also known as a local function.
+class ClosureInfo extends BasicInfo {
+  /// The function that is wrapped by this closure.
+  FunctionInfo function;
+
+  ClosureInfo(
+      {String name, OutputUnitInfo outputUnit, int size: 0, this.function})
+      : super(InfoKind.closure, name, outputUnit, size, null);
+
+  ClosureInfo.internal() : super.internal(InfoKind.closure);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitClosure(this);
+}
+
+/// Information about how a dependency is used.
+class DependencyInfo {
+  /// The dependency, either a FunctionInfo or FieldInfo.
+  final Info target;
+
+  /// Either a selector mask indicating how this is used, or 'inlined'.
+  // TODO(sigmund): split mask into an enum or something more precise to really
+  // describe the dependencies in detail.
+  final String mask;
+
+  DependencyInfo(this.target, this.mask);
+}
+
+/// Name and type information about a function parameter.
+class ParameterInfo {
+  final String name;
+  final String type;
+  final String declaredType;
+
+  ParameterInfo(this.name, this.type, this.declaredType);
+}
+
+/// Modifiers that may apply to methods.
+class FunctionModifiers {
+  final bool isStatic;
+  final bool isConst;
+  final bool isFactory;
+  final bool isExternal;
+
+  FunctionModifiers(
+      {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,
+  function,
+  field,
+  constant,
+  outputUnit,
+  typedef,
+  closure,
+}
+
+String kindToString(InfoKind kind) {
+  switch (kind) {
+    case InfoKind.library:
+      return 'library';
+    case InfoKind.clazz:
+      return 'class';
+    case InfoKind.function:
+      return 'function';
+    case InfoKind.field:
+      return 'field';
+    case InfoKind.constant:
+      return 'constant';
+    case InfoKind.outputUnit:
+      return 'outputUnit';
+    case InfoKind.typedef:
+      return 'typedef';
+    case InfoKind.closure:
+      return 'closure';
+    default:
+      return null;
+  }
+}
+
+InfoKind kindFromString(String kind) {
+  switch (kind) {
+    case 'library':
+      return InfoKind.library;
+    case 'class':
+      return InfoKind.clazz;
+    case 'function':
+      return InfoKind.function;
+    case 'field':
+      return InfoKind.field;
+    case 'constant':
+      return InfoKind.constant;
+    case 'outputUnit':
+      return InfoKind.outputUnit;
+    case 'typedef':
+      return InfoKind.typedef;
+    case 'closure':
+      return InfoKind.closure;
+    default:
+      return null;
+  }
+}
+
+/// A simple visitor for information produced by the dart2js compiler.
+abstract class InfoVisitor<T> {
+  T visitAll(AllInfo info);
+  T visitProgram(ProgramInfo info);
+  T visitLibrary(LibraryInfo info);
+  T visitClass(ClassInfo info);
+  T visitField(FieldInfo info);
+  T visitConstant(ConstantInfo info);
+  T visitFunction(FunctionInfo info);
+  T visitTypedef(TypedefInfo info);
+  T visitClosure(ClosureInfo info);
+  T visitOutput(OutputUnitInfo info);
+}
+
+/// A visitor that recursively walks each portion of the program. Because the
+/// info representation is redundant, this visitor only walks the structure of
+/// the program and skips some redundant links. For example, even though
+/// 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> {
+  visitAll(AllInfo info) {
+    // Note: we don't visit functions, fields, classes, and typedefs because
+    // they are reachable from the library info.
+    info.libraries.forEach(visitLibrary);
+    info.constants.forEach(visitConstant);
+  }
+
+  visitProgram(ProgramInfo info) {}
+
+  visitLibrary(LibraryInfo info) {
+    info.topLevelFunctions.forEach(visitFunction);
+    info.topLevelVariables.forEach(visitField);
+    info.classes.forEach(visitClass);
+    info.typedefs.forEach(visitTypedef);
+  }
+
+  visitClass(ClassInfo info) {
+    info.functions.forEach(visitFunction);
+    info.fields.forEach(visitField);
+  }
+
+  visitField(FieldInfo info) {
+    info.closures.forEach(visitClosure);
+  }
+
+  visitConstant(ConstantInfo info) {}
+
+  visitFunction(FunctionInfo info) {
+    info.closures.forEach(visitClosure);
+  }
+
+  visitTypedef(TypedefInfo info) {}
+  visitOutput(OutputUnitInfo info) {}
+  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
new file mode 100644
index 0000000..f32c80f
--- /dev/null
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -0,0 +1,600 @@
+// 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.
+
+/// 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';
+
+List<String> _toSortedSerializedIds(
+        Iterable<Info> infos, Id Function(Info) getId) =>
+    infos.map((i) => getId(i).serializedId).toList()..sort(compareNatural);
+
+// 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>();
+
+  AllInfo convert(Map<String, dynamic> json) {
+    registry.clear();
+
+    var result = new AllInfo();
+    var elements = json['elements'];
+    // TODO(srawlins): Since only the Map values are being extracted below,
+    // replace `as` with `cast` when `cast` becomes available in Dart 2.0:
+    //
+    //     .addAll(elements['library'].values.cast<Map>().map(parseLibrary));
+    result.libraries.addAll(
+        (elements['library'] as Map).values.map((l) => parseLibrary(l)));
+    result.classes
+        .addAll((elements['class'] as Map).values.map((c) => parseClass(c)));
+    result.functions.addAll(
+        (elements['function'] as Map).values.map((f) => parseFunction(f)));
+
+    // TODO(het): Revert this when the dart2js with the new codec is in stable
+    if (elements['closure'] != null) {
+      result.closures.addAll(
+          (elements['closure'] as Map).values.map((c) => parseClosure(c)));
+    }
+    result.fields
+        .addAll((elements['field'] as Map).values.map((f) => parseField(f)));
+    result.typedefs.addAll(
+        (elements['typedef'] as Map).values.map((t) => parseTypedef(t)));
+    result.constants.addAll(
+        (elements['constant'] as Map).values.map((c) => parseConstant(c)));
+
+    json['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']));
+      }
+    });
+
+    json['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)));
+
+    result.program = parseProgram(json['program']);
+
+    if (json['deferredFiles'] != null) {
+      final deferredFilesMap =
+          (json['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
+          // json parser produces <String, dynamic>.
+          final importMap = library['imports'] as Map<String, dynamic>;
+          importMap.forEach((prefix, files) {
+            importMap[prefix] = (files as List<dynamic>).cast<String>();
+          });
+          library['imports'] = importMap.cast<String, List<String>>();
+        }
+      }
+      result.deferredFiles = deferredFilesMap;
+    }
+
+    // todo: version, etc
+    return result;
+  }
+
+  OutputUnitInfo parseOutputUnit(Map json) {
+    OutputUnitInfo result = parseId(json['id']);
+    result
+      ..filename = json['filename']
+      ..name = json['name']
+      ..size = json['size'];
+    result.imports
+        .addAll((json['imports'] as List).map((s) => s as String) ?? const []);
+    return result;
+  }
+
+  LibraryInfo parseLibrary(Map json) {
+    LibraryInfo result = parseId(json['id']);
+    result
+      ..name = json['name']
+      ..uri = Uri.parse(json['canonicalUri'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size'];
+    for (var child in json['children'].map(parseId)) {
+      if (child is FunctionInfo) {
+        result.topLevelFunctions.add(child);
+      } else if (child is FieldInfo) {
+        result.topLevelVariables.add(child);
+      } else if (child is ClassInfo) {
+        result.classes.add(child);
+      } else {
+        assert(child is TypedefInfo);
+        result.typedefs.add(child);
+      }
+    }
+    return result;
+  }
+
+  ClassInfo parseClass(Map json) {
+    ClassInfo result = parseId(json['id']);
+    result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..isAbstract = json['modifiers']['abstract'] == true;
+    assert(result is ClassInfo);
+    for (var child in json['children'].map(parseId)) {
+      if (child is FunctionInfo) {
+        result.functions.add(child);
+      } else {
+        assert(child is FieldInfo);
+        result.fields.add(child);
+      }
+    }
+    return result;
+  }
+
+  FieldInfo parseField(Map json) {
+    FieldInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..coverageId = json['coverageId']
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..type = json['type']
+      ..inferredType = json['inferredType']
+      ..code = parseCode(json['code'])
+      ..isConst = json['const'] ?? false
+      ..initializer = parseId(json['initializer'])
+      ..closures = (json['children'] as List)
+          .map<ClosureInfo>((c) => parseId(c))
+          .toList();
+  }
+
+  ConstantInfo parseConstant(Map json) {
+    ConstantInfo result = parseId(json['id']);
+    return result
+      ..code = parseCode(json['code'])
+      ..size = json['size']
+      ..outputUnit = parseId(json['outputUnit']);
+  }
+
+  TypedefInfo parseTypedef(Map json) {
+    TypedefInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..type = json['type']
+      ..size = 0;
+  }
+
+  ProgramInfo parseProgram(Map json) {
+    var programInfo = new ProgramInfo()
+      ..entrypoint = parseId(json['entrypoint'])
+      ..size = json['size']
+      ..compilationMoment = DateTime.parse(json['compilationMoment'])
+      ..dart2jsVersion = json['dart2jsVersion']
+      ..noSuchMethodEnabled = json['noSuchMethodEnabled']
+      ..isRuntimeTypeUsed = json['isRuntimeTypeUsed']
+      ..isIsolateInUse = json['isIsolateInUse']
+      ..isFunctionApplyUsed = json['isFunctionApplyUsed']
+      ..isMirrorsUsed = json['isMirrorsUsed']
+      ..minified = json['minified'];
+
+    // TODO(het): Revert this when the dart2js with the new codec is in stable
+    var compilationDuration = json['compilationDuration'];
+    if (compilationDuration is String) {
+      programInfo.compilationDuration = _parseDuration(compilationDuration);
+    } else {
+      assert(compilationDuration is int);
+      programInfo.compilationDuration =
+          new Duration(microseconds: compilationDuration);
+    }
+
+    var toJsonDuration = json['toJsonDuration'];
+    if (toJsonDuration is String) {
+      programInfo.toJsonDuration = _parseDuration(toJsonDuration);
+    } else {
+      assert(toJsonDuration is int);
+      programInfo.toJsonDuration = new Duration(microseconds: toJsonDuration);
+    }
+
+    var dumpInfoDuration = json['dumpInfoDuration'];
+    if (dumpInfoDuration is String) {
+      programInfo.dumpInfoDuration = _parseDuration(dumpInfoDuration);
+    } else {
+      assert(dumpInfoDuration is int);
+      programInfo.dumpInfoDuration =
+          new Duration(microseconds: dumpInfoDuration);
+    }
+
+    return programInfo;
+  }
+
+  /// 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));
+    }
+    var parts = duration.split(':');
+    var hours = double.parse(parts[0]);
+    var minutes = double.parse(parts[1]);
+    var seconds = double.parse(parts[2]);
+    const secondsInMillis = 1000;
+    const minutesInMillis = 60 * secondsInMillis;
+    const hoursInMillis = 60 * minutesInMillis;
+    var totalMillis = secondsInMillis * seconds +
+        minutesInMillis * minutes +
+        hoursInMillis * hours;
+    return new Duration(milliseconds: totalMillis.round());
+  }
+
+  FunctionInfo parseFunction(Map json) {
+    FunctionInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..coverageId = json['coverageId']
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..type = json['type']
+      ..returnType = json['returnType']
+      ..inferredReturnType = json['inferredReturnType']
+      ..parameters =
+          (json['parameters'] as List).map((p) => parseParameter(p)).toList()
+      ..code = parseCode(json['code'])
+      ..sideEffects = json['sideEffects']
+      ..inlinedCount = json['inlinedCount']
+      ..modifiers =
+          parseModifiers(new 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']);
+
+  FunctionModifiers parseModifiers(Map<String, bool> json) {
+    return new FunctionModifiers(
+        isStatic: json['static'] == true,
+        isConst: json['const'] == true,
+        isFactory: json['factory'] == true,
+        isExternal: json['external'] == true);
+  }
+
+  ClosureInfo parseClosure(Map json) {
+    ClosureInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..function = parseId(json['function']);
+  }
+
+  Info parseId(id) {
+    String serializedId = id;
+    if (serializedId == null) {
+      return null;
+    }
+    return registry.putIfAbsent(serializedId, () {
+      if (serializedId.startsWith('function/')) {
+        return new FunctionInfo.internal();
+      } else if (serializedId.startsWith('closure/')) {
+        return new ClosureInfo.internal();
+      } else if (serializedId.startsWith('library/')) {
+        return new LibraryInfo.internal();
+      } else if (serializedId.startsWith('class/')) {
+        return new ClassInfo.internal();
+      } else if (serializedId.startsWith('field/')) {
+        return new FieldInfo.internal();
+      } else if (serializedId.startsWith('constant/')) {
+        return new ConstantInfo.internal();
+      } else if (serializedId.startsWith('typedef/')) {
+        return new TypedefInfo.internal();
+      } else if (serializedId.startsWith('outputUnit/')) {
+        return new OutputUnitInfo.internal();
+      }
+      assert(false);
+      return null;
+    });
+  }
+
+  List<CodeSpan> parseCode(dynamic json) {
+    // backwards compatibility with format 5.1:
+    if (json is String) {
+      return [new CodeSpan(start: null, end: null, text: json)];
+    }
+
+    if (json is List) {
+      return json.map((dynamic value) {
+        Map<String, dynamic> jsonCode = value;
+        return new CodeSpan(
+            start: jsonCode['start'],
+            end: jsonCode['end'],
+            text: jsonCode['text']);
+      }).toList();
+    }
+
+    return [];
+  }
+}
+
+class AllInfoToJsonConverter extends Converter<AllInfo, Map>
+    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>();
+
+  AllInfoToJsonConverter({this.isBackwardCompatible: false});
+
+  Id idFor(Info info) {
+    var serializedId = ids[info];
+    if (serializedId != null) return serializedId;
+
+    assert(
+        info is LibraryInfo ||
+            info is ConstantInfo ||
+            info is OutputUnitInfo ||
+            info.parent != null,
+        "$info");
+
+    int id;
+    if (info is ConstantInfo) {
+      // No name and no parent, so `longName` isn't helpful
+      assert(info.name == null);
+      assert(info.parent == null);
+      assert(info.code != null);
+      // Instead, use the content of the code.
+      id = info.code.first.text.hashCode;
+    } else {
+      id = longName(info, useLibraryUri: true, forId: true).hashCode;
+    }
+
+    while (!usedIds.add(id)) {
+      id++;
+    }
+    serializedId = new Id(info.kind, '$id');
+    return ids[info] = serializedId;
+  }
+
+  Map convert(AllInfo info) => info.accept(this);
+
+  Map _visitList(List<Info> infos) {
+    // Using SplayTree to maintain a consistent order of keys
+    var map = new SplayTreeMap<String, Map>(compareNatural);
+    for (var info in infos) {
+      map['${idFor(info).id}'] = info.accept(this);
+    }
+    return map;
+  }
+
+  Map _visitAllInfoElements(AllInfo info) {
+    var jsonLibraries = _visitList(info.libraries);
+    var jsonClasses = _visitList(info.classes);
+    var jsonFunctions = _visitList(info.functions);
+    var jsonTypedefs = _visitList(info.typedefs);
+    var jsonFields = _visitList(info.fields);
+    var jsonConstants = _visitList(info.constants);
+    var jsonClosures = _visitList(info.closures);
+    return {
+      'library': jsonLibraries,
+      'class': jsonClasses,
+      'function': jsonFunctions,
+      'typedef': jsonTypedefs,
+      'field': jsonFields,
+      'constant': jsonConstants,
+      'closure': jsonClosures,
+    };
+  }
+
+  Map _visitDependencyInfo(DependencyInfo info) =>
+      {'id': idFor(info.target).serializedId, 'mask': info.mask};
+
+  Map _visitAllInfoHolding(AllInfo allInfo) {
+    var map = new SplayTreeMap<String, List>(compareNatural);
+    void helper(CodeInfo info) {
+      if (info.uses.isEmpty) return;
+      map[idFor(info).serializedId] = info.uses
+          .map(_visitDependencyInfo)
+          .toList()
+        ..sort((a, b) => a['id'].compareTo(b['id']));
+    }
+
+    allInfo.functions.forEach(helper);
+    allInfo.fields.forEach(helper);
+    return map;
+  }
+
+  Map _visitAllInfoDependencies(AllInfo allInfo) {
+    var map = new SplayTreeMap<String, List>(compareNatural);
+    allInfo.dependencies.forEach((k, v) {
+      map[idFor(k).serializedId] = _toSortedSerializedIds(v, idFor);
+    });
+    return map;
+  }
+
+  Map visitAll(AllInfo info) {
+    var elements = _visitAllInfoElements(info);
+    var jsonHolding = _visitAllInfoHolding(info);
+    var jsonDependencies = _visitAllInfoDependencies(info);
+    return {
+      'elements': elements,
+      'holding': jsonHolding,
+      'dependencies': jsonDependencies,
+      'outputUnits': info.outputUnits.map((u) => u.accept(this)).toList(),
+      'dump_version': isBackwardCompatible ? 5 : info.version,
+      'deferredFiles': info.deferredFiles,
+      'dump_minor_version': isBackwardCompatible ? 1 : info.minorVersion,
+      'program': info.program.accept(this)
+    };
+  }
+
+  Map visitProgram(ProgramInfo info) {
+    return {
+      'entrypoint': idFor(info.entrypoint).serializedId,
+      'size': info.size,
+      'dart2jsVersion': info.dart2jsVersion,
+      'compilationMoment': '${info.compilationMoment}',
+      'compilationDuration': info.compilationDuration.inMicroseconds,
+      'toJsonDuration': info.toJsonDuration.inMicroseconds,
+      'dumpInfoDuration': info.dumpInfoDuration.inMicroseconds,
+      'noSuchMethodEnabled': info.noSuchMethodEnabled,
+      'isRuntimeTypeUsed': info.isRuntimeTypeUsed,
+      'isIsolateInUse': info.isIsolateInUse,
+      'isFunctionApplyUsed': info.isFunctionApplyUsed,
+      'isMirrorsUsed': info.isMirrorsUsed,
+      'minified': info.minified,
+    };
+  }
+
+  Map _visitBasicInfo(BasicInfo info) {
+    var res = {
+      'id': idFor(info).serializedId,
+      'kind': kindToString(info.kind),
+      'name': info.name,
+      'size': info.size,
+    };
+    // TODO(sigmund): Omit this also when outputUnit.id == 0 (most code is in
+    // the main output unit by default).
+    if (info.outputUnit != null) {
+      res['outputUnit'] = idFor(info.outputUnit).serializedId;
+    }
+    if (info.coverageId != null) res['coverageId'] = info.coverageId;
+    if (info.parent != null) res['parent'] = idFor(info.parent).serializedId;
+    return res;
+  }
+
+  Map visitLibrary(LibraryInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(
+            [
+              info.topLevelFunctions,
+              info.topLevelVariables,
+              info.classes,
+              info.typedefs
+            ].expand((i) => i),
+            idFor),
+        'canonicalUri': '${info.uri}',
+      });
+  }
+
+  Map visitClass(ClassInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        // TODO(sigmund): change format, include only when abstract is true.
+        'modifiers': {'abstract': info.isAbstract},
+        'children': _toSortedSerializedIds(
+            [info.fields, info.functions].expand((i) => i), idFor)
+      });
+  }
+
+  Map visitField(FieldInfo info) {
+    var result = _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(info.closures, idFor),
+        'inferredType': info.inferredType,
+        'code': _serializeCode(info.code),
+        'type': info.type,
+      });
+    if (info.isConst) {
+      result['const'] = true;
+      if (info.initializer != null) {
+        result['initializer'] = idFor(info.initializer).serializedId;
+      }
+    }
+    return result;
+  }
+
+  Map visitConstant(ConstantInfo info) => _visitBasicInfo(info)
+    ..addAll(<String, Object>{'code': _serializeCode(info.code)});
+
+  // TODO(sigmund): exclude false values (requires bumping the format version):
+  //     var res = <String, bool>{};
+  //     if (isStatic) res['static'] = true;
+  //     if (isConst) res['const'] = true;
+  //     if (isFactory) res['factory'] = true;
+  //     if (isExternal) res['external'] = true;
+  //     return res;
+  Map _visitFunctionModifiers(FunctionModifiers mods) => {
+        'static': mods.isStatic,
+        'const': mods.isConst,
+        'factory': mods.isFactory,
+        'external': mods.isExternal,
+      };
+
+  Map _visitParameterInfo(ParameterInfo info) =>
+      {'name': info.name, 'type': info.type, 'declaredType': info.declaredType};
+
+  Map visitFunction(FunctionInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(info.closures, idFor),
+        'modifiers': _visitFunctionModifiers(info.modifiers),
+        'returnType': info.returnType,
+        'inferredReturnType': info.inferredReturnType,
+        'parameters':
+            info.parameters.map((p) => _visitParameterInfo(p)).toList(),
+        'sideEffects': info.sideEffects,
+        'inlinedCount': info.inlinedCount,
+        'code': _serializeCode(info.code),
+        'type': info.type,
+        // Note: version 3.2 of dump-info serializes `uses` in a section called
+        // `holding` at the top-level.
+      });
+  }
+
+  Map visitClosure(ClosureInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{'function': idFor(info.function).serializedId});
+  }
+
+  visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type;
+
+  visitOutput(OutputUnitInfo info) => _visitBasicInfo(info)
+    ..['filename'] = info.filename
+    ..['imports'] = info.imports;
+
+  Object _serializeCode(List<CodeSpan> code) {
+    if (isBackwardCompatible) {
+      return code.map((c) => c.text).join('\n');
+    }
+    return code
+        .map<Object>((c) => {
+              'start': c.start,
+              'end': c.end,
+              'text': c.text,
+            })
+        .toList();
+  }
+}
+
+class AllInfoJsonCodec extends Codec<AllInfo, Map> {
+  final Converter<AllInfo, Map> encoder;
+  final Converter<Map, AllInfo> decoder = new JsonToAllInfoConverter();
+
+  AllInfoJsonCodec({bool isBackwardCompatible: false})
+      : encoder = new AllInfoToJsonConverter(
+            isBackwardCompatible: isBackwardCompatible);
+}
+
+class Id {
+  final InfoKind kind;
+  final String id;
+
+  Id(this.kind, this.id);
+
+  String get serializedId => '${kindToString(kind)}/$id';
+}
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
new file mode 100644
index 0000000..d199d09
--- /dev/null
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -0,0 +1,312 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// 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';
+import 'src/proto/info.pb.dart';
+import 'src/util.dart';
+
+export 'src/proto/info.pb.dart';
+
+class ProtoToAllInfoConverter extends Converter<AllInfoPB, AllInfo> {
+  AllInfo convert(AllInfoPB info) {
+    // 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');
+  }
+}
+
+class AllInfoToProtoConverter extends Converter<AllInfo, AllInfoPB> {
+  final Map<Info, Id> ids = {};
+  final Set<int> usedIds = new Set<int>();
+
+  Id idFor(Info info) {
+    if (info == null) return null;
+    var serializedId = ids[info];
+    if (serializedId != null) return serializedId;
+
+    assert(info is LibraryInfo ||
+        info is ConstantInfo ||
+        info is OutputUnitInfo ||
+        info.parent != null);
+
+    int id;
+    if (info is ConstantInfo) {
+      // No name and no parent, so `longName` isn't helpful
+      assert(info.name == null);
+      assert(info.parent == null);
+      assert(info.code != null);
+      // Instead, use the content of the code.
+      id = info.code.first.text.hashCode;
+    } else {
+      id = longName(info, useLibraryUri: true, forId: true).hashCode;
+    }
+    while (!usedIds.add(id)) {
+      id++;
+    }
+    serializedId = new Id(info.kind, id);
+    return ids[info] = serializedId;
+  }
+
+  AllInfoPB convert(AllInfo info) => _convertToAllInfoPB(info);
+
+  DependencyInfoPB _convertToDependencyInfoPB(DependencyInfo info) {
+    var result = new DependencyInfoPB()
+      ..targetId = idFor(info.target)?.serializedId;
+    if (info.mask != null) {
+      result.mask = info.mask;
+    }
+    return result;
+  }
+
+  static ParameterInfoPB _convertToParameterInfoPB(ParameterInfo info) {
+    return new ParameterInfoPB()
+      ..name = info.name
+      ..type = info.type
+      ..declaredType = info.declaredType;
+  }
+
+  LibraryInfoPB _convertToLibraryInfoPB(LibraryInfo info) {
+    final proto = new LibraryInfoPB()..uri = info.uri.toString();
+
+    proto.childrenIds
+        .addAll(info.topLevelFunctions.map((func) => idFor(func).serializedId));
+    proto.childrenIds.addAll(
+        info.topLevelVariables.map((field) => idFor(field).serializedId));
+    proto.childrenIds
+        .addAll(info.classes.map((clazz) => idFor(clazz).serializedId));
+    proto.childrenIds
+        .addAll(info.typedefs.map((def) => idFor(def).serializedId));
+
+    return proto;
+  }
+
+  ClassInfoPB _convertToClassInfoPB(ClassInfo info) {
+    final proto = new ClassInfoPB()..isAbstract = info.isAbstract;
+
+    proto.childrenIds
+        .addAll(info.functions.map((func) => idFor(func).serializedId));
+    proto.childrenIds
+        .addAll(info.fields.map((field) => idFor(field).serializedId));
+
+    return proto;
+  }
+
+  static FunctionModifiersPB _convertToFunctionModifiers(
+      FunctionModifiers modifiers) {
+    return new FunctionModifiersPB()
+      ..isStatic = modifiers.isStatic
+      ..isConst = modifiers.isConst
+      ..isFactory = modifiers.isFactory
+      ..isExternal = modifiers.isExternal;
+  }
+
+  FunctionInfoPB _convertToFunctionInfoPB(FunctionInfo info) {
+    final proto = new FunctionInfoPB()
+      ..functionModifiers = _convertToFunctionModifiers(info.modifiers)
+      ..inlinedCount = info.inlinedCount ?? 0;
+
+    if (info.returnType != null) {
+      proto.returnType = info.returnType;
+    }
+
+    if (info.inferredReturnType != null) {
+      proto.inferredReturnType = info.inferredReturnType;
+    }
+
+    if (info.code != null) {
+      proto.code = info.code.map((c) => c.text).join('\n');
+    }
+
+    if (info.sideEffects != null) {
+      proto.sideEffects = info.sideEffects;
+    }
+
+    proto.childrenIds
+        .addAll(info.closures.map(((closure) => idFor(closure).serializedId)));
+    proto.parameters.addAll(info.parameters.map(_convertToParameterInfoPB));
+
+    return proto;
+  }
+
+  FieldInfoPB _convertToFieldInfoPB(FieldInfo info) {
+    final proto = new FieldInfoPB()
+      ..type = info.type
+      ..inferredType = info.inferredType
+      ..isConst = info.isConst;
+
+    if (info.code != null) {
+      proto.code = info.code.map((c) => c.text).join('\n');
+    }
+
+    if (info.initializer != null) {
+      proto.initializerId = idFor(info.initializer).serializedId;
+    }
+
+    proto.childrenIds
+        .addAll(info.closures.map((closure) => idFor(closure).serializedId));
+
+    return proto;
+  }
+
+  static ConstantInfoPB _convertToConstantInfoPB(ConstantInfo info) {
+    return new ConstantInfoPB()..code = info.code.map((c) => c.text).join('\n');
+  }
+
+  static OutputUnitInfoPB _convertToOutputUnitInfoPB(OutputUnitInfo info) {
+    final proto = new OutputUnitInfoPB();
+    proto.imports.addAll(info.imports.where((import) => import != null));
+    return proto;
+  }
+
+  static TypedefInfoPB _convertToTypedefInfoPB(TypedefInfo info) {
+    return new TypedefInfoPB()..type = info.type;
+  }
+
+  ClosureInfoPB _convertToClosureInfoPB(ClosureInfo info) {
+    return new ClosureInfoPB()..functionId = idFor(info.function).serializedId;
+  }
+
+  InfoPB _convertToInfoPB(Info info) {
+    final proto = new InfoPB()
+      ..id = idFor(info).id
+      ..serializedId = idFor(info).serializedId
+      ..size = info.size;
+
+    if (info.name != null) {
+      proto.name = info.name;
+    }
+
+    if (info.parent != null) {
+      proto.parentId = idFor(info.parent).serializedId;
+    }
+
+    if (info.coverageId != null) {
+      proto.coverageId = info.coverageId;
+    }
+
+    if (info is BasicInfo && info.outputUnit != null) {
+      // TODO(lorenvs): Similar to the JSON codec, omit this for the default
+      // output unit. At the moment, there is no easy way to identify which
+      // output unit is the default on [OutputUnitInfo].
+      proto.outputUnitId = idFor(info.outputUnit).serializedId;
+    }
+
+    if (info is CodeInfo) {
+      proto.uses.addAll(info.uses.map(_convertToDependencyInfoPB));
+    }
+
+    if (info is LibraryInfo) {
+      proto.libraryInfo = _convertToLibraryInfoPB(info);
+    } else if (info is ClassInfo) {
+      proto.classInfo = _convertToClassInfoPB(info);
+    } else if (info is FunctionInfo) {
+      proto.functionInfo = _convertToFunctionInfoPB(info);
+    } else if (info is FieldInfo) {
+      proto.fieldInfo = _convertToFieldInfoPB(info);
+    } else if (info is ConstantInfo) {
+      proto.constantInfo = _convertToConstantInfoPB(info);
+    } else if (info is OutputUnitInfo) {
+      proto.outputUnitInfo = _convertToOutputUnitInfoPB(info);
+    } else if (info is TypedefInfo) {
+      proto.typedefInfo = _convertToTypedefInfoPB(info);
+    } else if (info is ClosureInfo) {
+      proto.closureInfo = _convertToClosureInfoPB(info);
+    }
+
+    return proto;
+  }
+
+  ProgramInfoPB _convertToProgramInfoPB(ProgramInfo info) {
+    var result = new 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)
+      ..noSuchMethodEnabled = info.noSuchMethodEnabled ?? false
+      ..isRuntimeTypeUsed = info.isRuntimeTypeUsed ?? false
+      ..isIsolateUsed = info.isIsolateInUse ?? false
+      ..isFunctionApplyUsed = info.isFunctionApplyUsed ?? false
+      ..isMirrorsUsed = info.isMirrorsUsed ?? false
+      ..minified = info.minified ?? false;
+
+    if (info.dart2jsVersion != null) {
+      result.dart2jsVersion = info.dart2jsVersion;
+    }
+    return result;
+  }
+
+  Iterable<MapEntry<String, InfoPB>> _convertToAllInfosEntries<T extends Info>(
+      Iterable<T> infos) sync* {
+    for (final info in infos) {
+      final infoProto = _convertToInfoPB(info);
+      final entry = MapEntry<String, InfoPB>(infoProto.serializedId, infoProto);
+      yield entry;
+    }
+  }
+
+  static LibraryDeferredImportsPB _convertToLibraryDeferredImportsPB(
+      String libraryUri, Map<String, dynamic> fields) {
+    final proto = new LibraryDeferredImportsPB()
+      ..libraryUri = libraryUri
+      ..libraryName = fields['name'] ?? '<unnamed>';
+
+    Map<String, List<String>> imports = fields['imports'];
+    imports.forEach((prefix, files) {
+      final import = new DeferredImportPB()..prefix = prefix;
+      import.files.addAll(files);
+      proto.imports.add(import);
+    });
+
+    return proto;
+  }
+
+  AllInfoPB _convertToAllInfoPB(AllInfo info) {
+    final proto = new AllInfoPB()
+      ..program = _convertToProgramInfoPB(info.program);
+
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.libraries));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.classes));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.functions));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.fields));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.constants));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.outputUnits));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.typedefs));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.closures));
+
+    info.deferredFiles?.forEach((libraryUri, fields) {
+      proto.deferredImports
+          .add(_convertToLibraryDeferredImportsPB(libraryUri, fields));
+    });
+
+    return proto;
+  }
+}
+
+/// A codec for converting [AllInfo] to a protobuf format.
+///
+/// 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();
+}
+
+class Id {
+  final InfoKind kind;
+  final int id;
+
+  Id(this.kind, this.id);
+
+  String get serializedId => '${kindToString(kind)}/$id';
+}
diff --git a/pkg/dart2js_info/lib/src/binary/sink.dart b/pkg/dart2js_info/lib/src/binary/sink.dart
new file mode 100644
index 0000000..7cacadc
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/binary/sink.dart
@@ -0,0 +1,401 @@
+// 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 'dart:convert';
+import 'dart:typed_data';
+
+/// Interface for serialization.
+// TODO(sigmund): share this with pkg:compiler/src/serialization/*
+abstract class DataSink {
+  /// The amount of data written to this data sink.
+  ///
+  /// The units is based on the underlying data structure for this data sink.
+  int get length;
+
+  /// Flushes any pending data and closes this data sink.
+  ///
+  /// The data sink can no longer be written to after closing.
+  void close();
+
+  /// 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));
+
+  /// 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));
+
+  /// 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});
+
+  /// Writes the boolean [value] to this data sink.
+  void writeBool(bool value);
+
+  /// Writes the non-negative integer [value] to this data sink.
+  void writeInt(int value);
+
+  /// Writes the potentially `null` non-negative [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readIntOrNull].
+  void writeIntOrNull(int value);
+
+  /// Writes the string [value] to this data sink.
+  void writeString(String value);
+
+  /// Writes the potentially `null` string [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readStringOrNull].
+  void writeStringOrNull(String value);
+
+  /// Writes the string [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readStrings].
+  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
+  /// allowed to be `null`.
+  ///
+  /// 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});
+
+  /// Writes the enum value [value] to this data sink.
+  // TODO(johnniwinther): Change the signature to
+  // `void writeEnum<E extends Enum<E>>(E value);` when an interface for enums
+  // is added to the language.
+  void writeEnum(dynamic value);
+
+  /// Writes the URI [value] to this data sink.
+  void writeUri(Uri value);
+}
+
+/// Mixin that implements all convenience methods of [DataSink].
+abstract class DataSinkMixin implements DataSink {
+  @override
+  void writeIntOrNull(int value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeInt(value);
+    }
+  }
+
+  @override
+  void writeStringOrNull(String value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeString(value);
+    }
+  }
+
+  @override
+  void writeStrings(Iterable<String> values, {bool allowNull: false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (String value in values) {
+        writeString(value);
+      }
+    }
+  }
+
+  @override
+  void writeStringMap<V>(Map<String, V> map, void f(V value),
+      {bool allowNull: false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((String key, V value) {
+        writeString(key);
+        f(value);
+      });
+    }
+  }
+
+  @override
+  void writeList<E>(Iterable<E> values, void f(E value),
+      {bool allowNull: false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      values.forEach(f);
+    }
+  }
+
+  @override
+  void writeValueOrNull<E>(E value, void f(E value)) {
+    writeBool(value != null);
+    if (value != null) {
+      f(value);
+    }
+  }
+}
+
+/// Data sink helper that canonicalizes [E] values using indices.
+class IndexedSink<E> {
+  final void Function(int) _writeInt;
+  final Map<E, int> _cache = {};
+
+  IndexedSink(this._writeInt);
+
+  /// Write a reference to [value] to the data sink.
+  ///
+  /// If [value] has not been canonicalized yet, [writeValue] is called to
+  /// serialize the [value] itself.
+  void write(E value, void writeValue(E value)) {
+    int index = _cache[value];
+    if (index == null) {
+      index = _cache.length;
+      _cache[value] = index;
+      _writeInt(index);
+      writeValue(value);
+    } else {
+      _writeInt(index);
+    }
+  }
+}
+
+/// Base implementation of [DataSink] using [DataSinkMixin] to implement
+/// convenience methods.
+abstract class AbstractDataSink extends DataSinkMixin implements DataSink {
+  IndexedSink<String> _stringIndex;
+  IndexedSink<Uri> _uriIndex;
+  Map<Type, IndexedSink> _generalCaches = {};
+
+  AbstractDataSink() {
+    _stringIndex = new IndexedSink<String>(_writeIntInternal);
+    _uriIndex = new IndexedSink<Uri>(_writeIntInternal);
+  }
+
+  @override
+  void writeCached<E>(E value, void f(E value)) {
+    IndexedSink sink =
+        _generalCaches[E] ??= new IndexedSink<E>(_writeIntInternal);
+    sink.write(value, (v) => f(v));
+  }
+
+  @override
+  void writeEnum(dynamic value) {
+    _writeEnumInternal(value);
+  }
+
+  @override
+  void writeBool(bool value) {
+    assert(value != null);
+    _writeIntInternal(value ? 1 : 0);
+  }
+
+  @override
+  void writeUri(Uri value) {
+    assert(value != null);
+    _writeUri(value);
+  }
+
+  @override
+  void writeString(String value) {
+    assert(value != null);
+    _writeString(value);
+  }
+
+  @override
+  void writeInt(int value) {
+    assert(value != null);
+    assert(value >= 0 && value >> 30 == 0);
+    _writeIntInternal(value);
+  }
+
+  void _writeString(String value) {
+    _stringIndex.write(value, _writeStringInternal);
+  }
+
+  void _writeUri(Uri value) {
+    _uriIndex.write(value, _writeUriInternal);
+  }
+
+  /// Actual serialization of a URI value, implemented by subclasses.
+  void _writeUriInternal(Uri value);
+
+  /// Actual serialization of a String value, implemented by subclasses.
+  void _writeStringInternal(String value);
+
+  /// Actual serialization of a non-negative integer value, implemented by
+  /// subclasses.
+  void _writeIntInternal(int value);
+
+  /// Actual serialization of an enum value, implemented by subclasses.
+  void _writeEnumInternal(dynamic value);
+}
+
+/// [DataSink] that writes data as a sequence of bytes.
+///
+/// This data sink works together with [BinarySource].
+class BinarySink extends AbstractDataSink {
+  final Sink<List<int>> sink;
+  BufferedSink _bufferedSink;
+  int _length = 0;
+
+  BinarySink(this.sink) : _bufferedSink = new BufferedSink(sink);
+
+  @override
+  void _writeUriInternal(Uri value) {
+    _writeString(value.toString());
+  }
+
+  @override
+  void _writeStringInternal(String value) {
+    List<int> bytes = utf8.encode(value);
+    _writeIntInternal(bytes.length);
+    _bufferedSink.addBytes(bytes);
+    _length += bytes.length;
+  }
+
+  @override
+  void _writeIntInternal(int value) {
+    assert(value >= 0 && value >> 30 == 0);
+    if (value < 0x80) {
+      _bufferedSink.addByte(value);
+      _length += 1;
+    } else if (value < 0x4000) {
+      _bufferedSink.addByte2((value >> 8) | 0x80, value & 0xFF);
+      _length += 2;
+    } else {
+      _bufferedSink.addByte4((value >> 24) | 0xC0, (value >> 16) & 0xFF,
+          (value >> 8) & 0xFF, value & 0xFF);
+      _length += 4;
+    }
+  }
+
+  @override
+  void _writeEnumInternal(dynamic value) {
+    _writeIntInternal(value.index);
+  }
+
+  void close() {
+    _bufferedSink.flushAndDestroy();
+    _bufferedSink = null;
+    sink.close();
+  }
+
+  /// Returns the number of bytes written to this data sink.
+  int get length => _length;
+}
+
+/// Puts a buffer in front of a [Sink<List<int>>].
+// 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;
+  final Sink<List<int>> _sink;
+  Uint8List _buffer = new Uint8List(SIZE);
+  int length = 0;
+  int flushedLength = 0;
+
+  Float64List _doubleBuffer = new Float64List(1);
+  Uint8List _doubleBufferUint8;
+
+  int get offset => length + flushedLength;
+
+  BufferedSink(this._sink);
+
+  void addDouble(double d) {
+    _doubleBufferUint8 ??= _doubleBuffer.buffer.asUint8List();
+    _doubleBuffer[0] = d;
+    addByte4(_doubleBufferUint8[0], _doubleBufferUint8[1],
+        _doubleBufferUint8[2], _doubleBufferUint8[3]);
+    addByte4(_doubleBufferUint8[4], _doubleBufferUint8[5],
+        _doubleBufferUint8[6], _doubleBufferUint8[7]);
+  }
+
+  void addByte(int byte) {
+    _buffer[length++] = byte;
+    if (length == SIZE) {
+      _sink.add(_buffer);
+      _buffer = new Uint8List(SIZE);
+      length = 0;
+      flushedLength += SIZE;
+    }
+  }
+
+  void addByte2(int byte1, int byte2) {
+    if (length < SAFE_SIZE) {
+      _buffer[length++] = byte1;
+      _buffer[length++] = byte2;
+    } else {
+      addByte(byte1);
+      addByte(byte2);
+    }
+  }
+
+  void addByte4(int byte1, int byte2, int byte3, int byte4) {
+    if (length < SAFE_SIZE) {
+      _buffer[length++] = byte1;
+      _buffer[length++] = byte2;
+      _buffer[length++] = byte3;
+      _buffer[length++] = byte4;
+    } else {
+      addByte(byte1);
+      addByte(byte2);
+      addByte(byte3);
+      addByte(byte4);
+    }
+  }
+
+  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)) {
+      _buffer.setRange(length, length + bytes.length, bytes);
+      length += bytes.length;
+    } else if (bytes.length < SMALL) {
+      // Flush as much as we can in the current buffer.
+      _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 remainder = bytes.length - alreadyEmitted;
+      _buffer = new Uint8List(SIZE);
+      _buffer.setRange(0, remainder, bytes, alreadyEmitted);
+      length = remainder;
+      flushedLength += SIZE;
+    } else {
+      flush();
+      _sink.add(bytes);
+      flushedLength += bytes.length;
+    }
+  }
+
+  void flush() {
+    _sink.add(_buffer.sublist(0, length));
+    _buffer = new Uint8List(SIZE);
+    flushedLength += length;
+    length = 0;
+  }
+
+  void flushAndDestroy() {
+    _sink.add(_buffer.sublist(0, length));
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/binary/source.dart b/pkg/dart2js_info/lib/src/binary/source.dart
new file mode 100644
index 0000000..5ada983
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/binary/source.dart
@@ -0,0 +1,296 @@
+// 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 'dart:typed_data';
+import 'dart:convert';
+
+/// 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());
+
+  /// 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());
+
+  /// 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});
+
+  /// Reads a boolean value from this data source.
+  bool readBool();
+
+  /// Reads a non-negative integer value from this data source.
+  int readInt();
+
+  /// Reads a potentially `null` non-negative integer value from this data
+  /// source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeIntOrNull].
+  int readIntOrNull();
+
+  /// Reads a string value from this data source.
+  String readString();
+
+  /// Reads a potentially `null` string value from this data source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeStringOrNull].
+  String readStringOrNull();
+
+  /// Reads a list of string 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.writeStrings].
+  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
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeStringMap].
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false});
+
+  /// Reads an enum value from the list of enum [values] from this data source.
+  ///
+  /// The [values] argument is intended to be the static `.values` field on
+  /// enum classes, for instance:
+  ///
+  ///    enum Foo { bar, baz }
+  ///    ...
+  ///    Foo foo = source.readEnum(Foo.values);
+  ///
+  E readEnum<E>(List<E> values);
+
+  /// Reads a URI value from this data source.
+  Uri readUri();
+}
+
+/// Mixin that implements all convenience methods of [DataSource].
+abstract class DataSourceMixin implements DataSource {
+  @override
+  E readValueOrNull<E>(E f()) {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return f();
+    }
+    return null;
+  }
+
+  @override
+  List<E> readList<E>(E 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;
+  }
+
+  @override
+  int readIntOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readInt();
+    }
+    return null;
+  }
+
+  @override
+  String readStringOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readString();
+    }
+    return null;
+  }
+
+  @override
+  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;
+  }
+
+  @override
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<String, V> map = {};
+    for (int i = 0; i < count; i++) {
+      String key = readString();
+      V value = f();
+      map[key] = value;
+    }
+    return map;
+  }
+}
+
+/// Data source helper reads canonicalized [E] values through indices.
+class IndexedSource<E> {
+  final int Function() _readInt;
+  final List<E> _cache = [];
+  final Set<int> _pending = new Set();
+
+  IndexedSource(this._readInt);
+
+  /// Reads a reference to an [E] value from the data source.
+  ///
+  /// If the value hasn't yet been read, [readValue] is called to deserialize
+  /// the value itself.
+  E read(E readValue()) {
+    int index = _readInt();
+    if (_pending.contains(index)) throw "serialization cycles not supported";
+    if (index >= _cache.length) {
+      _pending.add(index);
+      _cache.add(null);
+      E value = readValue();
+      _pending.remove(index);
+      _cache[index] = value;
+      return value;
+    } else {
+      return _cache[index];
+    }
+  }
+}
+
+/// Base implementation of [DataSource] using [DataSourceMixin] to implement
+/// convenience methods.
+abstract class AbstractDataSource extends DataSourceMixin
+    implements DataSource {
+  IndexedSource<String> _stringIndex;
+  IndexedSource<Uri> _uriIndex;
+  Map<Type, IndexedSource> _generalCaches = {};
+
+  AbstractDataSource() {
+    _stringIndex = new IndexedSource<String>(_readIntInternal);
+    _uriIndex = new IndexedSource<Uri>(_readIntInternal);
+  }
+
+  @override
+  E readCached<E>(E f()) {
+    IndexedSource source =
+        _generalCaches[E] ??= new IndexedSource<E>(_readIntInternal);
+    return source.read(f);
+  }
+
+  @override
+  E readEnum<E>(List<E> values) {
+    return _readEnumInternal(values);
+  }
+
+  @override
+  Uri readUri() {
+    return _readUri();
+  }
+
+  Uri _readUri() {
+    return _uriIndex.read(_readUriInternal);
+  }
+
+  @override
+  bool readBool() {
+    int value = _readIntInternal();
+    assert(value == 0 || value == 1);
+    return value == 1;
+  }
+
+  @override
+  String readString() {
+    return _readString();
+  }
+
+  String _readString() {
+    return _stringIndex.read(_readStringInternal);
+  }
+
+  @override
+  int readInt() {
+    return _readIntInternal();
+  }
+
+  /// Actual deserialization of a string value, implemented by subclasses.
+  String _readStringInternal();
+
+  /// Actual deserialization of a non-negative integer value, implemented by
+  /// subclasses.
+  int _readIntInternal();
+
+  /// Actual deserialization of a URI value, implemented by subclasses.
+  Uri _readUriInternal();
+
+  /// Actual deserialization of an enum value in [values], implemented by
+  /// subclasses.
+  E _readEnumInternal<E>(List<E> values);
+}
+
+/// [DataSource] that reads data from a sequence of bytes.
+///
+/// This data source works together with [BinarySink].
+class BinarySource extends AbstractDataSource {
+  int _byteOffset = 0;
+  final List<int> _bytes;
+
+  BinarySource(this._bytes);
+  int _readByte() => _bytes[_byteOffset++];
+
+  @override
+  String _readStringInternal() {
+    int length = _readIntInternal();
+    List<int> bytes = new Uint8List(length);
+    bytes.setRange(0, bytes.length, _bytes, _byteOffset);
+    _byteOffset += bytes.length;
+    return utf8.decode(bytes);
+  }
+
+  @override
+  int _readIntInternal() {
+    var byte = _readByte();
+    if (byte & 0x80 == 0) {
+      // 0xxxxxxx
+      return byte;
+    } else if (byte & 0x40 == 0) {
+      // 10xxxxxx
+      return ((byte & 0x3F) << 8) | _readByte();
+    } else {
+      // 11xxxxxx
+      return ((byte & 0x3F) << 24) |
+          (_readByte() << 16) |
+          (_readByte() << 8) |
+          _readByte();
+    }
+  }
+
+  @override
+  Uri _readUriInternal() {
+    String text = _readString();
+    return Uri.parse(text);
+  }
+
+  @override
+  E _readEnumInternal<E>(List<E> values) {
+    int index = _readIntInternal();
+    assert(
+        0 <= index && index < values.length,
+        "Invalid data kind index. "
+        "Expected one of $values, found index $index.");
+    return values[index];
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/diff.dart b/pkg/dart2js_info/lib/src/diff.dart
new file mode 100644
index 0000000..2d43f28
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/diff.dart
@@ -0,0 +1,165 @@
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/util.dart';
+
+class Diff {
+  final BasicInfo info;
+  final DiffKind kind;
+  Diff(this.info, this.kind);
+}
+
+enum DiffKind { add, remove, size, deferred }
+
+class RemoveDiff extends Diff {
+  RemoveDiff(BasicInfo info) : super(info, DiffKind.remove);
+}
+
+class AddDiff extends Diff {
+  AddDiff(BasicInfo info) : super(info, DiffKind.add);
+}
+
+class SizeDiff extends Diff {
+  final int sizeDifference;
+  SizeDiff(BasicInfo info, this.sizeDifference) : super(info, DiffKind.size);
+}
+
+class DeferredStatusDiff extends Diff {
+  final bool wasDeferredBefore;
+  DeferredStatusDiff(BasicInfo info, this.wasDeferredBefore)
+      : super(info, DiffKind.deferred);
+}
+
+List<Diff> diff(AllInfo oldInfo, AllInfo newInfo) {
+  var differ = new _InfoDiffer(oldInfo, newInfo);
+  differ.diff();
+  return differ.diffs;
+}
+
+class _InfoDiffer extends InfoVisitor<Null> {
+  final AllInfo _old;
+  final AllInfo _new;
+
+  BasicInfo _other;
+
+  List<Diff> diffs = <Diff>[];
+
+  _InfoDiffer(this._old, this._new);
+
+  void diff() {
+    _diffList(_old.libraries, _new.libraries);
+  }
+
+  @override
+  visitAll(AllInfo info) {
+    throw new StateError('should not diff AllInfo');
+  }
+
+  @override
+  visitProgram(ProgramInfo info) {
+    throw new StateError('should not diff ProgramInfo');
+  }
+
+  @override
+  visitOutput(OutputUnitInfo info) {
+    throw new StateError('should not diff OutputUnitInfo');
+  }
+
+  // TODO(het): diff constants
+  @override
+  visitConstant(ConstantInfo info) {
+    throw new StateError('should not diff ConstantInfo');
+  }
+
+  @override
+  visitLibrary(LibraryInfo info) {
+    var other = _other as LibraryInfo;
+    _checkSize(info, other);
+    _diffList(info.topLevelVariables, other.topLevelVariables);
+    _diffList(info.topLevelFunctions, other.topLevelFunctions);
+    _diffList(info.classes, other.classes);
+  }
+
+  @override
+  visitClass(ClassInfo info) {
+    var other = _other as ClassInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.fields, other.fields);
+    _diffList(info.functions, other.functions);
+  }
+
+  @override
+  visitClosure(ClosureInfo info) {
+    var other = _other as ClosureInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList([info.function], [other.function]);
+  }
+
+  @override
+  visitField(FieldInfo info) {
+    var other = _other as FieldInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.closures, other.closures);
+  }
+
+  @override
+  visitFunction(FunctionInfo info) {
+    var other = _other as FunctionInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.closures, other.closures);
+  }
+
+  @override
+  visitTypedef(TypedefInfo info) {
+    var other = _other as TypedefInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+  }
+
+  void _checkSize(BasicInfo info, BasicInfo other) {
+    if (info.size != other.size) {
+      diffs.add(new SizeDiff(info, other.size - info.size));
+    }
+  }
+
+  void _checkDeferredStatus(BasicInfo oldInfo, BasicInfo newInfo) {
+    var oldIsDeferred = _isDeferred(oldInfo);
+    var newIsDeferred = _isDeferred(newInfo);
+    if (oldIsDeferred != newIsDeferred) {
+      diffs.add(new DeferredStatusDiff(oldInfo, oldIsDeferred));
+    }
+  }
+
+  bool _isDeferred(BasicInfo info) {
+    var outputUnit = info.outputUnit;
+    return outputUnit.name != null &&
+        outputUnit.name.isNotEmpty &&
+        outputUnit.name != 'main';
+  }
+
+  void _diffList(List<BasicInfo> oldInfos, List<BasicInfo> newInfos) {
+    var oldNames = <String, BasicInfo>{};
+    var newNames = <String, BasicInfo>{};
+    for (var oldInfo in oldInfos) {
+      oldNames[longName(oldInfo, useLibraryUri: true)] = oldInfo;
+    }
+    for (var newInfo in newInfos) {
+      newNames[longName(newInfo, useLibraryUri: true)] = newInfo;
+    }
+    for (var oldName in oldNames.keys) {
+      if (newNames[oldName] == null) {
+        diffs.add(new RemoveDiff(oldNames[oldName]));
+      } else {
+        _other = newNames[oldName];
+        oldNames[oldName].accept(this);
+      }
+    }
+    for (var newName in newNames.keys) {
+      if (oldNames[newName] == null) {
+        diffs.add(new AddDiff(newNames[newName]));
+      }
+    }
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/graph.dart b/pkg/dart2js_info/lib/src/graph.dart
new file mode 100644
index 0000000..1eaabce
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/graph.dart
@@ -0,0 +1,334 @@
+// 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.
+
+/// A library to work with graphs. It contains a couple algorithms, including
+/// Tarjan's algorithm to compute strongly connected components in a graph and
+/// Cooper et al's dominator algorithm.
+///
+/// Portions of the code in this library was adapted from
+/// `package:analyzer/src/generated/collection_utilities.dart`.
+// TODO(sigmund): move this into a shared place, like quiver?
+library dart2js_info.src.graph;
+
+import 'dart:math' as math;
+
+abstract class Graph<N> {
+  Iterable<N> get nodes;
+  bool get isEmpty;
+  int get nodeCount;
+  Iterable<N> targetsOf(N source);
+  Iterable<N> sourcesOf(N source);
+
+  /// Run a topological sort of the graph. Since the graph may contain cycles,
+  /// this results in a list of strongly connected components rather than a list
+  /// 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);
+    return finder.computeTopologicalSort();
+  }
+
+  /// Whether [source] can transitively reach [target].
+  bool containsPath(N source, N target) {
+    Set<N> seen = new Set<N>();
+    bool helper(N node) {
+      if (identical(node, target)) return true;
+      if (!seen.add(node)) return false;
+      return targetsOf(node).any(helper);
+    }
+
+    return helper(source);
+  }
+
+  /// Returns all nodes reachable from [root] in post order.
+  Iterable<N> postOrder(N root) sync* {
+    var seen = new Set<N>();
+    Iterable<N> helper(N n) sync* {
+      if (!seen.add(n)) return;
+      for (var x in targetsOf(n)) {
+        yield* helper(x);
+      }
+      yield n;
+    }
+
+    yield* helper(root);
+  }
+
+  /// Returns an iterable of all nodes reachable from [root] in preorder.
+  Iterable<N> preOrder(N root) sync* {
+    var seen = new Set<N>();
+    var stack = <N>[root];
+    while (stack.isNotEmpty) {
+      var next = stack.removeLast();
+      if (!seen.contains(next)) {
+        seen.add(next);
+        yield next;
+        stack.addAll(targetsOf(next));
+      }
+    }
+  }
+
+  /// Returns a list of nodes that form a cycle containing the given node. If
+  /// the node is not part of a cycle in this graph, then a list containing only
+  /// the node itself will be returned.
+  List<N> findCycleContaining(N node) {
+    assert(node != null);
+    _SccFinder<N> finder = new _SccFinder<N>(this);
+    return finder._componentContaining(node);
+  }
+
+  /// Returns a dominator tree starting from root. This is a new graph, with the
+  /// same nodes as this graph, but where edges exist between a node and the
+  /// nodes it immediately dominates. For example, this graph:
+  ///
+  ///       root
+  ///       /   \
+  ///      a     b
+  ///      |    / \
+  ///      c   d   e
+  ///       \ / \ /
+  ///        f   g
+  ///
+  /// Produces this tree:
+  ///
+  ///       root
+  ///       /|  \
+  ///      a |   b
+  ///      | |  /|\
+  ///      c | d | e
+  ///        |   |
+  ///        f   g
+  ///
+  /// 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>();
+    for (N node in iDom.keys) {
+      if (node != root) graph.addEdge(iDom[node], node);
+    }
+    return graph;
+  }
+}
+
+class EdgeListGraph<N> extends Graph<N> {
+  /// Edges in the graph.
+  Map<N, Set<N>> _edges = new Map<N, Set<N>>();
+
+  /// The reverse of _edges.
+  Map<N, Set<N>> _revEdges = new Map<N, Set<N>>();
+
+  Iterable<N> get nodes => _edges.keys;
+  bool get isEmpty => _edges.isEmpty;
+  int get nodeCount => _edges.length;
+
+  final _empty = new Set<N>();
+
+  Iterable<N> targetsOf(N source) => _edges[source] ?? _empty;
+  Iterable<N> sourcesOf(N source) => _revEdges[source] ?? _empty;
+
+  void addEdge(N source, N target) {
+    assert(source != null);
+    assert(target != null);
+    addNode(source);
+    addNode(target);
+    _edges[source].add(target);
+    _revEdges[target].add(source);
+  }
+
+  void addNode(N node) {
+    assert(node != null);
+    _edges.putIfAbsent(node, () => new Set<N>());
+    _revEdges.putIfAbsent(node, () => new Set<N>());
+  }
+
+  /// Remove the edge from the given [source] node to the given [target] node.
+  /// If there was no such edge then the graph will be unmodified: the number of
+  /// edges will be the same and the set of nodes will be the same (neither node
+  /// will either be added or removed).
+  void removeEdge(N source, N target) {
+    _edges[source]?.remove(target);
+  }
+
+  /// Remove the given node from this graph. As a consequence, any edges for
+  /// which that node was either a head or a tail will also be removed.
+  void removeNode(N node) {
+    _edges.remove(node);
+    var sources = _revEdges[node];
+    if (sources == null) return;
+    for (var source in sources) {
+      _edges[source].remove(node);
+    }
+  }
+
+  /// Remove all of the given nodes from this graph. As a consequence, any edges
+  /// for which those nodes were either a head or a tail will also be removed.
+  void removeAllNodes(List<N> nodes) => nodes.forEach(removeNode);
+}
+
+/// Used by the [SccFinder] to maintain information about the nodes that have
+/// been examined. There is an instance of this class per node in the graph.
+class _NodeInfo<N> {
+  /// Depth of the node corresponding to this info.
+  int index = 0;
+
+  /// Depth of the first node in a cycle.
+  int lowlink = 0;
+
+  /// Whether the corresponding node is on the stack. Used to remove the need
+  /// for searching a collection for the node each time the question needs to be
+  /// asked.
+  bool onStack = false;
+
+  /// Component that contains the corresponding node.
+  List<N> component;
+
+  _NodeInfo(int depth)
+      : index = depth,
+        lowlink = depth,
+        onStack = false;
+}
+
+/// Implements Tarjan's Algorithm for finding the strongly connected components
+/// in a graph.
+class _SccFinder<N> {
+  /// The graph to process.
+  final Graph<N> _graph;
+
+  /// The index used to uniquely identify the depth of nodes.
+  int _index = 0;
+
+  /// Nodes that are being visited in order to identify components.
+  List<N> _stack = new List<N>();
+
+  /// Information associated with each node.
+  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>>();
+
+  _SccFinder(this._graph);
+
+  /// Return a list containing the nodes that are part of the strongly connected
+  /// component that contains the given node.
+  List<N> _componentContaining(N node) => _strongConnect(node).component;
+
+  /// Run Tarjan's algorithm and return the resulting list of strongly connected
+  /// components. The list is 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>> computeTopologicalSort() {
+    for (N node in _graph.nodes) {
+      var nodeInfo = _info[node];
+      if (nodeInfo == null) _strongConnect(node);
+    }
+    return _allComponents;
+  }
+
+  /// Remove and return the top-most element from the stack.
+  N _pop() {
+    N node = _stack.removeAt(_stack.length - 1);
+    _info[node].onStack = false;
+    return node;
+  }
+
+  /// Add the given node to the stack.
+  void _push(N node) {
+    _info[node].onStack = true;
+    _stack.add(node);
+  }
+
+  /// Compute the strongly connected component that contains the given node as
+  /// well as any components containing nodes that are reachable from the given
+  /// component.
+  _NodeInfo<N> _strongConnect(N v) {
+    // Set the depth index for v to the smallest unused index
+    var vInfo = new _NodeInfo<N>(_index++);
+    _info[v] = vInfo;
+    _push(v);
+
+    for (N w in _graph.targetsOf(v)) {
+      var wInfo = _info[w];
+      if (wInfo == null) {
+        // Successor w has not yet been visited; recurse on it
+        wInfo = _strongConnect(w);
+        vInfo.lowlink = math.min(vInfo.lowlink, wInfo.lowlink);
+      } else if (wInfo.onStack) {
+        // Successor w is in stack S and hence in the current SCC
+        vInfo.lowlink = math.min(vInfo.lowlink, wInfo.index);
+      }
+    }
+
+    // If v is a root node, pop the stack and generate an SCC
+    if (vInfo.lowlink == vInfo.index) {
+      var component = new List<N>();
+      N w;
+      do {
+        w = _pop();
+        component.add(w);
+        _info[w].component = component;
+      } while (!identical(w, v));
+      _allComponents.add(component);
+    }
+    return vInfo;
+  }
+}
+
+/// Computes dominators using (Cooper, Harvey, and Kennedy's
+/// algorithm)[http://www.cs.rice.edu/~keith/EMBED/dom.pdf].
+class _DominatorFinder<N> {
+  final Graph<N> _graph;
+  Map<N, N> immediateDominators = {};
+  Map<N, int> postOrderId = {};
+  _DominatorFinder(this._graph);
+
+  run(N root) {
+    immediateDominators[root] = root;
+    bool changed = true;
+    int i = 0;
+    var nodesInPostOrder = _graph.postOrder(root).toList();
+    for (var n in nodesInPostOrder) {
+      postOrderId[n] = i++;
+    }
+    var nodesInReversedPostOrder = nodesInPostOrder.reversed;
+    while (changed) {
+      changed = false;
+      for (var n in nodesInReversedPostOrder) {
+        if (n == root) continue;
+        bool first = true;
+        N idom;
+        for (var p in _graph.sourcesOf(n)) {
+          if (immediateDominators[p] != null) {
+            if (first) {
+              idom = p;
+              first = false;
+            } else {
+              idom = _intersect(p, idom);
+            }
+          }
+        }
+        if (immediateDominators[n] != idom) {
+          immediateDominators[n] = idom;
+          changed = true;
+        }
+      }
+    }
+  }
+
+  N _intersect(N b1, N b2) {
+    var finger1 = b1;
+    var finger2 = b2;
+    while (finger1 != finger2) {
+      while (postOrderId[finger1] < postOrderId[finger2]) {
+        finger1 = immediateDominators[finger1];
+      }
+      while (postOrderId[finger2] < postOrderId[finger1]) {
+        finger2 = immediateDominators[finger2];
+      }
+    }
+    return finger1;
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/io.dart b/pkg/dart2js_info/lib/src/io.dart
new file mode 100644
index 0000000..b37c331
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/io.dart
@@ -0,0 +1,15 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+
+Future<AllInfo> infoFromFile(String fileName) async {
+  var file = new File(fileName);
+  if (fileName.endsWith('.json')) {
+    return new 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
new file mode 100644
index 0000000..910b7b2
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -0,0 +1,1318 @@
+///
+//  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
+
+import 'dart:core' as $core;
+
+import 'package:fixnum/fixnum.dart' as $fixnum;
+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'),
+      createEmptyInstance: create)
+    ..aOS(1, 'targetId')
+    ..aOS(2, 'mask')
+    ..hasRequiredFields = false;
+
+  DependencyInfoPB._() : super();
+  factory DependencyInfoPB() => create();
+  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);
+  DependencyInfoPB clone() => DependencyInfoPB()..mergeFromMessage(this);
+  DependencyInfoPB copyWith(void Function(DependencyInfoPB) updates) =>
+      super.copyWith((message) => updates(message as DependencyInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static DependencyInfoPB create() => DependencyInfoPB._();
+  DependencyInfoPB createEmptyInstance() => create();
+  static $pb.PbList<DependencyInfoPB> createRepeated() =>
+      $pb.PbList<DependencyInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static DependencyInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<DependencyInfoPB>(create);
+  static DependencyInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get targetId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set targetId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasTargetId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearTargetId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get mask => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set mask($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasMask() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearMask() => clearField(2);
+}
+
+class AllInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('AllInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOM<ProgramInfoPB>(1, 'program', subBuilder: ProgramInfoPB.create)
+    ..m<$core.String, InfoPB>(2, '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,
+        subBuilder: LibraryDeferredImportsPB.create)
+    ..hasRequiredFields = false;
+
+  AllInfoPB._() : super();
+  factory AllInfoPB() => create();
+  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);
+  AllInfoPB clone() => AllInfoPB()..mergeFromMessage(this);
+  AllInfoPB copyWith(void Function(AllInfoPB) updates) =>
+      super.copyWith((message) => updates(message as AllInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static AllInfoPB create() => AllInfoPB._();
+  AllInfoPB createEmptyInstance() => create();
+  static $pb.PbList<AllInfoPB> createRepeated() => $pb.PbList<AllInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static AllInfoPB getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AllInfoPB>(create);
+  static AllInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  ProgramInfoPB get program => $_getN(0);
+  @$pb.TagNumber(1)
+  set program(ProgramInfoPB v) {
+    setField(1, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasProgram() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearProgram() => clearField(1);
+  @$pb.TagNumber(1)
+  ProgramInfoPB ensureProgram() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.Map<$core.String, InfoPB> get allInfos => $_getMap(1);
+
+  @$pb.TagNumber(3)
+  $core.List<LibraryDeferredImportsPB> get deferredImports => $_getList(2);
+}
+
+enum InfoPB_Concrete {
+  libraryInfo,
+  classInfo,
+  functionInfo,
+  fieldInfo,
+  constantInfo,
+  outputUnitInfo,
+  typedefInfo,
+  closureInfo,
+  notSet
+}
+
+class InfoPB extends $pb.GeneratedMessage {
+  static const $core.Map<$core.int, InfoPB_Concrete> _InfoPB_ConcreteByTag = {
+    100: InfoPB_Concrete.libraryInfo,
+    101: InfoPB_Concrete.classInfo,
+    102: InfoPB_Concrete.functionInfo,
+    103: InfoPB_Concrete.fieldInfo,
+    104: InfoPB_Concrete.constantInfo,
+    105: InfoPB_Concrete.outputUnitInfo,
+    106: InfoPB_Concrete.typedefInfo,
+    107: InfoPB_Concrete.closureInfo,
+    0: InfoPB_Concrete.notSet
+  };
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('InfoPB',
+      package: const $pb.PackageName('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,
+        subBuilder: DependencyInfoPB.create)
+    ..aOS(8, 'outputUnitId')
+    ..aOM<LibraryInfoPB>(100, 'libraryInfo', subBuilder: LibraryInfoPB.create)
+    ..aOM<ClassInfoPB>(101, 'classInfo', subBuilder: ClassInfoPB.create)
+    ..aOM<FunctionInfoPB>(102, 'functionInfo',
+        subBuilder: FunctionInfoPB.create)
+    ..aOM<FieldInfoPB>(103, 'fieldInfo', subBuilder: FieldInfoPB.create)
+    ..aOM<ConstantInfoPB>(104, 'constantInfo',
+        subBuilder: ConstantInfoPB.create)
+    ..aOM<OutputUnitInfoPB>(105, 'outputUnitInfo',
+        subBuilder: OutputUnitInfoPB.create)
+    ..aOM<TypedefInfoPB>(106, 'typedefInfo', subBuilder: TypedefInfoPB.create)
+    ..aOM<ClosureInfoPB>(107, 'closureInfo', subBuilder: ClosureInfoPB.create)
+    ..hasRequiredFields = false;
+
+  InfoPB._() : super();
+  factory InfoPB() => create();
+  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);
+  InfoPB clone() => InfoPB()..mergeFromMessage(this);
+  InfoPB copyWith(void Function(InfoPB) updates) =>
+      super.copyWith((message) => updates(message as InfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static InfoPB create() => InfoPB._();
+  InfoPB createEmptyInstance() => create();
+  static $pb.PbList<InfoPB> createRepeated() => $pb.PbList<InfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static InfoPB getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<InfoPB>(create);
+  static InfoPB _defaultInstance;
+
+  InfoPB_Concrete whichConcrete() => _InfoPB_ConcreteByTag[$_whichOneof(0)];
+  void clearConcrete() => clearField($_whichOneof(0));
+
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get id => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set id($core.int v) {
+    $_setSignedInt32(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasId() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearId() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get serializedId => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set serializedId($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasSerializedId() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearSerializedId() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get coverageId => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set coverageId($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCoverageId() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCoverageId() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get size => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set size($core.int v) {
+    $_setSignedInt32(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasSize() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearSize() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get parentId => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set parentId($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasParentId() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearParentId() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.List<DependencyInfoPB> get uses => $_getList(6);
+
+  @$pb.TagNumber(8)
+  $core.String get outputUnitId => $_getSZ(7);
+  @$pb.TagNumber(8)
+  set outputUnitId($core.String v) {
+    $_setString(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasOutputUnitId() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearOutputUnitId() => clearField(8);
+
+  @$pb.TagNumber(100)
+  LibraryInfoPB get libraryInfo => $_getN(8);
+  @$pb.TagNumber(100)
+  set libraryInfo(LibraryInfoPB v) {
+    setField(100, v);
+  }
+
+  @$pb.TagNumber(100)
+  $core.bool hasLibraryInfo() => $_has(8);
+  @$pb.TagNumber(100)
+  void clearLibraryInfo() => clearField(100);
+  @$pb.TagNumber(100)
+  LibraryInfoPB ensureLibraryInfo() => $_ensure(8);
+
+  @$pb.TagNumber(101)
+  ClassInfoPB get classInfo => $_getN(9);
+  @$pb.TagNumber(101)
+  set classInfo(ClassInfoPB v) {
+    setField(101, v);
+  }
+
+  @$pb.TagNumber(101)
+  $core.bool hasClassInfo() => $_has(9);
+  @$pb.TagNumber(101)
+  void clearClassInfo() => clearField(101);
+  @$pb.TagNumber(101)
+  ClassInfoPB ensureClassInfo() => $_ensure(9);
+
+  @$pb.TagNumber(102)
+  FunctionInfoPB get functionInfo => $_getN(10);
+  @$pb.TagNumber(102)
+  set functionInfo(FunctionInfoPB v) {
+    setField(102, v);
+  }
+
+  @$pb.TagNumber(102)
+  $core.bool hasFunctionInfo() => $_has(10);
+  @$pb.TagNumber(102)
+  void clearFunctionInfo() => clearField(102);
+  @$pb.TagNumber(102)
+  FunctionInfoPB ensureFunctionInfo() => $_ensure(10);
+
+  @$pb.TagNumber(103)
+  FieldInfoPB get fieldInfo => $_getN(11);
+  @$pb.TagNumber(103)
+  set fieldInfo(FieldInfoPB v) {
+    setField(103, v);
+  }
+
+  @$pb.TagNumber(103)
+  $core.bool hasFieldInfo() => $_has(11);
+  @$pb.TagNumber(103)
+  void clearFieldInfo() => clearField(103);
+  @$pb.TagNumber(103)
+  FieldInfoPB ensureFieldInfo() => $_ensure(11);
+
+  @$pb.TagNumber(104)
+  ConstantInfoPB get constantInfo => $_getN(12);
+  @$pb.TagNumber(104)
+  set constantInfo(ConstantInfoPB v) {
+    setField(104, v);
+  }
+
+  @$pb.TagNumber(104)
+  $core.bool hasConstantInfo() => $_has(12);
+  @$pb.TagNumber(104)
+  void clearConstantInfo() => clearField(104);
+  @$pb.TagNumber(104)
+  ConstantInfoPB ensureConstantInfo() => $_ensure(12);
+
+  @$pb.TagNumber(105)
+  OutputUnitInfoPB get outputUnitInfo => $_getN(13);
+  @$pb.TagNumber(105)
+  set outputUnitInfo(OutputUnitInfoPB v) {
+    setField(105, v);
+  }
+
+  @$pb.TagNumber(105)
+  $core.bool hasOutputUnitInfo() => $_has(13);
+  @$pb.TagNumber(105)
+  void clearOutputUnitInfo() => clearField(105);
+  @$pb.TagNumber(105)
+  OutputUnitInfoPB ensureOutputUnitInfo() => $_ensure(13);
+
+  @$pb.TagNumber(106)
+  TypedefInfoPB get typedefInfo => $_getN(14);
+  @$pb.TagNumber(106)
+  set typedefInfo(TypedefInfoPB v) {
+    setField(106, v);
+  }
+
+  @$pb.TagNumber(106)
+  $core.bool hasTypedefInfo() => $_has(14);
+  @$pb.TagNumber(106)
+  void clearTypedefInfo() => clearField(106);
+  @$pb.TagNumber(106)
+  TypedefInfoPB ensureTypedefInfo() => $_ensure(14);
+
+  @$pb.TagNumber(107)
+  ClosureInfoPB get closureInfo => $_getN(15);
+  @$pb.TagNumber(107)
+  set closureInfo(ClosureInfoPB v) {
+    setField(107, v);
+  }
+
+  @$pb.TagNumber(107)
+  $core.bool hasClosureInfo() => $_has(15);
+  @$pb.TagNumber(107)
+  void clearClosureInfo() => clearField(107);
+  @$pb.TagNumber(107)
+  ClosureInfoPB ensureClosureInfo() => $_ensure(15);
+}
+
+class ProgramInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ProgramInfoPB',
+      package: const $pb.PackageName('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')
+    ..hasRequiredFields = false;
+
+  ProgramInfoPB._() : super();
+  factory ProgramInfoPB() => create();
+  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);
+  ProgramInfoPB clone() => ProgramInfoPB()..mergeFromMessage(this);
+  ProgramInfoPB copyWith(void Function(ProgramInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ProgramInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ProgramInfoPB create() => ProgramInfoPB._();
+  ProgramInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ProgramInfoPB> createRepeated() =>
+      $pb.PbList<ProgramInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ProgramInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ProgramInfoPB>(create);
+  static ProgramInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get entrypointId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set entrypointId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasEntrypointId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearEntrypointId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get size => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set size($core.int v) {
+    $_setSignedInt32(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasSize() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSize() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get dart2jsVersion => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set dart2jsVersion($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasDart2jsVersion() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearDart2jsVersion() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $fixnum.Int64 get compilationMoment => $_getI64(3);
+  @$pb.TagNumber(4)
+  set compilationMoment($fixnum.Int64 v) {
+    $_setInt64(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCompilationMoment() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCompilationMoment() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $fixnum.Int64 get compilationDuration => $_getI64(4);
+  @$pb.TagNumber(5)
+  set compilationDuration($fixnum.Int64 v) {
+    $_setInt64(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasCompilationDuration() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearCompilationDuration() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $fixnum.Int64 get toProtoDuration => $_getI64(5);
+  @$pb.TagNumber(6)
+  set toProtoDuration($fixnum.Int64 v) {
+    $_setInt64(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasToProtoDuration() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearToProtoDuration() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $fixnum.Int64 get dumpInfoDuration => $_getI64(6);
+  @$pb.TagNumber(7)
+  set dumpInfoDuration($fixnum.Int64 v) {
+    $_setInt64(6, v);
+  }
+
+  @$pb.TagNumber(7)
+  $core.bool hasDumpInfoDuration() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearDumpInfoDuration() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.bool get noSuchMethodEnabled => $_getBF(7);
+  @$pb.TagNumber(8)
+  set noSuchMethodEnabled($core.bool v) {
+    $_setBool(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasNoSuchMethodEnabled() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearNoSuchMethodEnabled() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.bool get isRuntimeTypeUsed => $_getBF(8);
+  @$pb.TagNumber(9)
+  set isRuntimeTypeUsed($core.bool v) {
+    $_setBool(8, v);
+  }
+
+  @$pb.TagNumber(9)
+  $core.bool hasIsRuntimeTypeUsed() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearIsRuntimeTypeUsed() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.bool get isIsolateUsed => $_getBF(9);
+  @$pb.TagNumber(10)
+  set isIsolateUsed($core.bool v) {
+    $_setBool(9, v);
+  }
+
+  @$pb.TagNumber(10)
+  $core.bool hasIsIsolateUsed() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearIsIsolateUsed() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.bool get isFunctionApplyUsed => $_getBF(10);
+  @$pb.TagNumber(11)
+  set isFunctionApplyUsed($core.bool v) {
+    $_setBool(10, v);
+  }
+
+  @$pb.TagNumber(11)
+  $core.bool hasIsFunctionApplyUsed() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearIsFunctionApplyUsed() => clearField(11);
+
+  @$pb.TagNumber(12)
+  $core.bool get isMirrorsUsed => $_getBF(11);
+  @$pb.TagNumber(12)
+  set isMirrorsUsed($core.bool v) {
+    $_setBool(11, v);
+  }
+
+  @$pb.TagNumber(12)
+  $core.bool hasIsMirrorsUsed() => $_has(11);
+  @$pb.TagNumber(12)
+  void clearIsMirrorsUsed() => clearField(12);
+
+  @$pb.TagNumber(13)
+  $core.bool get minified => $_getBF(12);
+  @$pb.TagNumber(13)
+  set minified($core.bool v) {
+    $_setBool(12, v);
+  }
+
+  @$pb.TagNumber(13)
+  $core.bool hasMinified() => $_has(12);
+  @$pb.TagNumber(13)
+  void clearMinified() => clearField(13);
+}
+
+class LibraryInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'uri')
+    ..pPS(2, 'childrenIds')
+    ..hasRequiredFields = false;
+
+  LibraryInfoPB._() : super();
+  factory LibraryInfoPB() => create();
+  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);
+  LibraryInfoPB clone() => LibraryInfoPB()..mergeFromMessage(this);
+  LibraryInfoPB copyWith(void Function(LibraryInfoPB) updates) =>
+      super.copyWith((message) => updates(message as LibraryInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static LibraryInfoPB create() => LibraryInfoPB._();
+  LibraryInfoPB createEmptyInstance() => create();
+  static $pb.PbList<LibraryInfoPB> createRepeated() =>
+      $pb.PbList<LibraryInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static LibraryInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<LibraryInfoPB>(create);
+  static LibraryInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get uri => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set uri($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasUri() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUri() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get childrenIds => $_getList(1);
+}
+
+class OutputUnitInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('OutputUnitInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..pPS(1, 'imports')
+    ..hasRequiredFields = false;
+
+  OutputUnitInfoPB._() : super();
+  factory OutputUnitInfoPB() => create();
+  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);
+  OutputUnitInfoPB clone() => OutputUnitInfoPB()..mergeFromMessage(this);
+  OutputUnitInfoPB copyWith(void Function(OutputUnitInfoPB) updates) =>
+      super.copyWith((message) => updates(message as OutputUnitInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static OutputUnitInfoPB create() => OutputUnitInfoPB._();
+  OutputUnitInfoPB createEmptyInstance() => create();
+  static $pb.PbList<OutputUnitInfoPB> createRepeated() =>
+      $pb.PbList<OutputUnitInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static OutputUnitInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<OutputUnitInfoPB>(create);
+  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'),
+      createEmptyInstance: create)
+    ..aOB(1, 'isAbstract')
+    ..pPS(2, 'childrenIds')
+    ..hasRequiredFields = false;
+
+  ClassInfoPB._() : super();
+  factory ClassInfoPB() => create();
+  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);
+  ClassInfoPB clone() => ClassInfoPB()..mergeFromMessage(this);
+  ClassInfoPB copyWith(void Function(ClassInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ClassInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ClassInfoPB create() => ClassInfoPB._();
+  ClassInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ClassInfoPB> createRepeated() => $pb.PbList<ClassInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ClassInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ClassInfoPB>(create);
+  static ClassInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.bool get isAbstract => $_getBF(0);
+  @$pb.TagNumber(1)
+  set isAbstract($core.bool v) {
+    $_setBool(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasIsAbstract() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearIsAbstract() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $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'),
+      createEmptyInstance: create)
+    ..aOS(1, 'code')
+    ..hasRequiredFields = false;
+
+  ConstantInfoPB._() : super();
+  factory ConstantInfoPB() => create();
+  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);
+  ConstantInfoPB clone() => ConstantInfoPB()..mergeFromMessage(this);
+  ConstantInfoPB copyWith(void Function(ConstantInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ConstantInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ConstantInfoPB create() => ConstantInfoPB._();
+  ConstantInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ConstantInfoPB> createRepeated() =>
+      $pb.PbList<ConstantInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ConstantInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ConstantInfoPB>(create);
+  static ConstantInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get code => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set code($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasCode() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearCode() => clearField(1);
+}
+
+class FieldInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FieldInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'type')
+    ..aOS(2, 'inferredType')
+    ..pPS(3, 'childrenIds')
+    ..aOS(4, 'code')
+    ..aOB(5, 'isConst')
+    ..aOS(6, 'initializerId')
+    ..hasRequiredFields = false;
+
+  FieldInfoPB._() : super();
+  factory FieldInfoPB() => create();
+  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);
+  FieldInfoPB clone() => FieldInfoPB()..mergeFromMessage(this);
+  FieldInfoPB copyWith(void Function(FieldInfoPB) updates) =>
+      super.copyWith((message) => updates(message as FieldInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FieldInfoPB create() => FieldInfoPB._();
+  FieldInfoPB createEmptyInstance() => create();
+  static $pb.PbList<FieldInfoPB> createRepeated() => $pb.PbList<FieldInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static FieldInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FieldInfoPB>(create);
+  static FieldInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get type => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set type($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasType() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearType() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get inferredType => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set inferredType($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasInferredType() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearInferredType() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<$core.String> get childrenIds => $_getList(2);
+
+  @$pb.TagNumber(4)
+  $core.String get code => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set code($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCode() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCode() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.bool get isConst => $_getBF(4);
+  @$pb.TagNumber(5)
+  set isConst($core.bool v) {
+    $_setBool(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasIsConst() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearIsConst() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get initializerId => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set initializerId($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasInitializerId() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearInitializerId() => clearField(6);
+}
+
+class TypedefInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('TypedefInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'type')
+    ..hasRequiredFields = false;
+
+  TypedefInfoPB._() : super();
+  factory TypedefInfoPB() => create();
+  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);
+  TypedefInfoPB clone() => TypedefInfoPB()..mergeFromMessage(this);
+  TypedefInfoPB copyWith(void Function(TypedefInfoPB) updates) =>
+      super.copyWith((message) => updates(message as TypedefInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static TypedefInfoPB create() => TypedefInfoPB._();
+  TypedefInfoPB createEmptyInstance() => create();
+  static $pb.PbList<TypedefInfoPB> createRepeated() =>
+      $pb.PbList<TypedefInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static TypedefInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<TypedefInfoPB>(create);
+  static TypedefInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get type => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set type($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasType() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearType() => clearField(1);
+}
+
+class FunctionModifiersPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionModifiersPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOB(1, 'isStatic')
+    ..aOB(2, 'isConst')
+    ..aOB(3, 'isFactory')
+    ..aOB(4, 'isExternal')
+    ..hasRequiredFields = false;
+
+  FunctionModifiersPB._() : super();
+  factory FunctionModifiersPB() => create();
+  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);
+  FunctionModifiersPB clone() => FunctionModifiersPB()..mergeFromMessage(this);
+  FunctionModifiersPB copyWith(void Function(FunctionModifiersPB) updates) =>
+      super.copyWith((message) => updates(message as FunctionModifiersPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FunctionModifiersPB create() => FunctionModifiersPB._();
+  FunctionModifiersPB createEmptyInstance() => create();
+  static $pb.PbList<FunctionModifiersPB> createRepeated() =>
+      $pb.PbList<FunctionModifiersPB>();
+  @$core.pragma('dart2js:noInline')
+  static FunctionModifiersPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FunctionModifiersPB>(create);
+  static FunctionModifiersPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.bool get isStatic => $_getBF(0);
+  @$pb.TagNumber(1)
+  set isStatic($core.bool v) {
+    $_setBool(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasIsStatic() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearIsStatic() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isConst => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isConst($core.bool v) {
+    $_setBool(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasIsConst() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsConst() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.bool get isFactory => $_getBF(2);
+  @$pb.TagNumber(3)
+  set isFactory($core.bool v) {
+    $_setBool(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasIsFactory() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearIsFactory() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.bool get isExternal => $_getBF(3);
+  @$pb.TagNumber(4)
+  set isExternal($core.bool v) {
+    $_setBool(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasIsExternal() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearIsExternal() => clearField(4);
+}
+
+class ParameterInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ParameterInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'name')
+    ..aOS(2, 'type')
+    ..aOS(3, 'declaredType')
+    ..hasRequiredFields = false;
+
+  ParameterInfoPB._() : super();
+  factory ParameterInfoPB() => create();
+  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);
+  ParameterInfoPB clone() => ParameterInfoPB()..mergeFromMessage(this);
+  ParameterInfoPB copyWith(void Function(ParameterInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ParameterInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ParameterInfoPB create() => ParameterInfoPB._();
+  ParameterInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ParameterInfoPB> createRepeated() =>
+      $pb.PbList<ParameterInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ParameterInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ParameterInfoPB>(create);
+  static ParameterInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get type => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set type($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasType() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearType() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get declaredType => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set declaredType($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasDeclaredType() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearDeclaredType() => clearField(3);
+}
+
+class FunctionInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOM<FunctionModifiersPB>(1, 'functionModifiers',
+        subBuilder: FunctionModifiersPB.create)
+    ..pPS(2, 'childrenIds')
+    ..aOS(3, 'returnType')
+    ..aOS(4, 'inferredReturnType')
+    ..pc<ParameterInfoPB>(5, 'parameters', $pb.PbFieldType.PM,
+        subBuilder: ParameterInfoPB.create)
+    ..aOS(6, 'sideEffects')
+    ..a<$core.int>(7, 'inlinedCount', $pb.PbFieldType.O3)
+    ..aOS(8, 'code')
+    ..hasRequiredFields = false;
+
+  FunctionInfoPB._() : super();
+  factory FunctionInfoPB() => create();
+  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);
+  FunctionInfoPB clone() => FunctionInfoPB()..mergeFromMessage(this);
+  FunctionInfoPB copyWith(void Function(FunctionInfoPB) updates) =>
+      super.copyWith((message) => updates(message as FunctionInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FunctionInfoPB create() => FunctionInfoPB._();
+  FunctionInfoPB createEmptyInstance() => create();
+  static $pb.PbList<FunctionInfoPB> createRepeated() =>
+      $pb.PbList<FunctionInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static FunctionInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FunctionInfoPB>(create);
+  static FunctionInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  FunctionModifiersPB get functionModifiers => $_getN(0);
+  @$pb.TagNumber(1)
+  set functionModifiers(FunctionModifiersPB v) {
+    setField(1, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasFunctionModifiers() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearFunctionModifiers() => clearField(1);
+  @$pb.TagNumber(1)
+  FunctionModifiersPB ensureFunctionModifiers() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get childrenIds => $_getList(1);
+
+  @$pb.TagNumber(3)
+  $core.String get returnType => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set returnType($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasReturnType() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearReturnType() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get inferredReturnType => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set inferredReturnType($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasInferredReturnType() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearInferredReturnType() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.List<ParameterInfoPB> get parameters => $_getList(4);
+
+  @$pb.TagNumber(6)
+  $core.String get sideEffects => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set sideEffects($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasSideEffects() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearSideEffects() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.int get inlinedCount => $_getIZ(6);
+  @$pb.TagNumber(7)
+  set inlinedCount($core.int v) {
+    $_setSignedInt32(6, v);
+  }
+
+  @$pb.TagNumber(7)
+  $core.bool hasInlinedCount() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearInlinedCount() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.String get code => $_getSZ(7);
+  @$pb.TagNumber(8)
+  set code($core.String v) {
+    $_setString(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasCode() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearCode() => clearField(8);
+}
+
+class ClosureInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClosureInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'functionId')
+    ..hasRequiredFields = false;
+
+  ClosureInfoPB._() : super();
+  factory ClosureInfoPB() => create();
+  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);
+  ClosureInfoPB clone() => ClosureInfoPB()..mergeFromMessage(this);
+  ClosureInfoPB copyWith(void Function(ClosureInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ClosureInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ClosureInfoPB create() => ClosureInfoPB._();
+  ClosureInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ClosureInfoPB> createRepeated() =>
+      $pb.PbList<ClosureInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ClosureInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ClosureInfoPB>(create);
+  static ClosureInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get functionId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set functionId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasFunctionId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearFunctionId() => clearField(1);
+}
+
+class DeferredImportPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeferredImportPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'prefix')
+    ..pPS(2, 'files')
+    ..hasRequiredFields = false;
+
+  DeferredImportPB._() : super();
+  factory DeferredImportPB() => create();
+  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);
+  DeferredImportPB clone() => DeferredImportPB()..mergeFromMessage(this);
+  DeferredImportPB copyWith(void Function(DeferredImportPB) updates) =>
+      super.copyWith((message) => updates(message as DeferredImportPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static DeferredImportPB create() => DeferredImportPB._();
+  DeferredImportPB createEmptyInstance() => create();
+  static $pb.PbList<DeferredImportPB> createRepeated() =>
+      $pb.PbList<DeferredImportPB>();
+  @$core.pragma('dart2js:noInline')
+  static DeferredImportPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<DeferredImportPB>(create);
+  static DeferredImportPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get prefix => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set prefix($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasPrefix() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPrefix() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get files => $_getList(1);
+}
+
+class LibraryDeferredImportsPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryDeferredImportsPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'libraryUri')
+    ..aOS(2, 'libraryName')
+    ..pc<DeferredImportPB>(3, 'imports', $pb.PbFieldType.PM,
+        subBuilder: DeferredImportPB.create)
+    ..hasRequiredFields = false;
+
+  LibraryDeferredImportsPB._() : super();
+  factory LibraryDeferredImportsPB() => create();
+  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);
+  LibraryDeferredImportsPB clone() =>
+      LibraryDeferredImportsPB()..mergeFromMessage(this);
+  LibraryDeferredImportsPB copyWith(
+          void Function(LibraryDeferredImportsPB) updates) =>
+      super.copyWith((message) => updates(message as LibraryDeferredImportsPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static LibraryDeferredImportsPB create() => LibraryDeferredImportsPB._();
+  LibraryDeferredImportsPB createEmptyInstance() => create();
+  static $pb.PbList<LibraryDeferredImportsPB> createRepeated() =>
+      $pb.PbList<LibraryDeferredImportsPB>();
+  @$core.pragma('dart2js:noInline')
+  static LibraryDeferredImportsPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<LibraryDeferredImportsPB>(create);
+  static LibraryDeferredImportsPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get libraryUri => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set libraryUri($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasLibraryUri() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearLibraryUri() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get libraryName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set libraryName($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasLibraryName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLibraryName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<DeferredImportPB> get imports => $_getList(2);
+}
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
new file mode 100644
index 0000000..9990b57
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
@@ -0,0 +1,6 @@
+///
+//  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
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
new file mode 100644
index 0000000..00eff86
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
@@ -0,0 +1,381 @@
+///
+//  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
+
+const DependencyInfoPB$json = const {
+  '1': 'DependencyInfoPB',
+  '2': const [
+    const {'1': 'target_id', '3': 1, '4': 1, '5': 9, '10': 'targetId'},
+    const {'1': 'mask', '3': 2, '4': 1, '5': 9, '10': 'mask'},
+  ],
+};
+
+const AllInfoPB$json = const {
+  '1': 'AllInfoPB',
+  '2': const [
+    const {
+      '1': 'program',
+      '3': 1,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ProgramInfoPB',
+      '10': 'program'
+    },
+    const {
+      '1': 'all_infos',
+      '3': 2,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.AllInfoPB.AllInfosEntry',
+      '10': 'allInfos'
+    },
+    const {
+      '1': 'deferred_imports',
+      '3': 3,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.LibraryDeferredImportsPB',
+      '10': 'deferredImports'
+    },
+  ],
+  '3': const [AllInfoPB_AllInfosEntry$json],
+};
+
+const AllInfoPB_AllInfosEntry$json = const {
+  '1': 'AllInfosEntry',
+  '2': const [
+    const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+    const {
+      '1': 'value',
+      '3': 2,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.InfoPB',
+      '10': 'value'
+    },
+  ],
+  '7': const {'7': true},
+};
+
+const InfoPB$json = const {
+  '1': 'InfoPB',
+  '2': const [
+    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    const {'1': 'id', '3': 2, '4': 1, '5': 5, '10': 'id'},
+    const {'1': 'serialized_id', '3': 3, '4': 1, '5': 9, '10': 'serializedId'},
+    const {'1': 'coverage_id', '3': 4, '4': 1, '5': 9, '10': 'coverageId'},
+    const {'1': 'size', '3': 5, '4': 1, '5': 5, '10': 'size'},
+    const {'1': 'parent_id', '3': 6, '4': 1, '5': 9, '10': 'parentId'},
+    const {
+      '1': 'uses',
+      '3': 7,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.DependencyInfoPB',
+      '10': 'uses'
+    },
+    const {'1': 'output_unit_id', '3': 8, '4': 1, '5': 9, '10': 'outputUnitId'},
+    const {
+      '1': 'library_info',
+      '3': 100,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.LibraryInfoPB',
+      '9': 0,
+      '10': 'libraryInfo'
+    },
+    const {
+      '1': 'class_info',
+      '3': 101,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ClassInfoPB',
+      '9': 0,
+      '10': 'classInfo'
+    },
+    const {
+      '1': 'function_info',
+      '3': 102,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FunctionInfoPB',
+      '9': 0,
+      '10': 'functionInfo'
+    },
+    const {
+      '1': 'field_info',
+      '3': 103,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FieldInfoPB',
+      '9': 0,
+      '10': 'fieldInfo'
+    },
+    const {
+      '1': 'constant_info',
+      '3': 104,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ConstantInfoPB',
+      '9': 0,
+      '10': 'constantInfo'
+    },
+    const {
+      '1': 'output_unit_info',
+      '3': 105,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.OutputUnitInfoPB',
+      '9': 0,
+      '10': 'outputUnitInfo'
+    },
+    const {
+      '1': 'typedef_info',
+      '3': 106,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.TypedefInfoPB',
+      '9': 0,
+      '10': 'typedefInfo'
+    },
+    const {
+      '1': 'closure_info',
+      '3': 107,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ClosureInfoPB',
+      '9': 0,
+      '10': 'closureInfo'
+    },
+  ],
+  '8': const [
+    const {'1': 'concrete'},
+  ],
+  '9': const [
+    const {'1': 9, '2': 100},
+  ],
+};
+
+const ProgramInfoPB$json = const {
+  '1': 'ProgramInfoPB',
+  '2': const [
+    const {'1': 'entrypoint_id', '3': 1, '4': 1, '5': 9, '10': 'entrypointId'},
+    const {'1': 'size', '3': 2, '4': 1, '5': 5, '10': 'size'},
+    const {
+      '1': 'dart2js_version',
+      '3': 3,
+      '4': 1,
+      '5': 9,
+      '10': 'dart2jsVersion'
+    },
+    const {
+      '1': 'compilation_moment',
+      '3': 4,
+      '4': 1,
+      '5': 3,
+      '10': 'compilationMoment'
+    },
+    const {
+      '1': 'compilation_duration',
+      '3': 5,
+      '4': 1,
+      '5': 3,
+      '10': 'compilationDuration'
+    },
+    const {
+      '1': 'to_proto_duration',
+      '3': 6,
+      '4': 1,
+      '5': 3,
+      '10': 'toProtoDuration'
+    },
+    const {
+      '1': 'dump_info_duration',
+      '3': 7,
+      '4': 1,
+      '5': 3,
+      '10': 'dumpInfoDuration'
+    },
+    const {
+      '1': 'no_such_method_enabled',
+      '3': 8,
+      '4': 1,
+      '5': 8,
+      '10': 'noSuchMethodEnabled'
+    },
+    const {
+      '1': 'is_runtime_type_used',
+      '3': 9,
+      '4': 1,
+      '5': 8,
+      '10': 'isRuntimeTypeUsed'
+    },
+    const {
+      '1': 'is_isolate_used',
+      '3': 10,
+      '4': 1,
+      '5': 8,
+      '10': 'isIsolateUsed'
+    },
+    const {
+      '1': 'is_function_apply_used',
+      '3': 11,
+      '4': 1,
+      '5': 8,
+      '10': 'isFunctionApplyUsed'
+    },
+    const {
+      '1': 'is_mirrors_used',
+      '3': 12,
+      '4': 1,
+      '5': 8,
+      '10': 'isMirrorsUsed'
+    },
+    const {'1': 'minified', '3': 13, '4': 1, '5': 8, '10': 'minified'},
+  ],
+};
+
+const LibraryInfoPB$json = const {
+  '1': 'LibraryInfoPB',
+  '2': const [
+    const {'1': 'uri', '3': 1, '4': 1, '5': 9, '10': 'uri'},
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+  ],
+};
+
+const OutputUnitInfoPB$json = const {
+  '1': 'OutputUnitInfoPB',
+  '2': const [
+    const {'1': 'imports', '3': 1, '4': 3, '5': 9, '10': 'imports'},
+  ],
+};
+
+const ClassInfoPB$json = const {
+  '1': 'ClassInfoPB',
+  '2': const [
+    const {'1': 'is_abstract', '3': 1, '4': 1, '5': 8, '10': 'isAbstract'},
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+  ],
+};
+
+const ConstantInfoPB$json = const {
+  '1': 'ConstantInfoPB',
+  '2': const [
+    const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'},
+  ],
+};
+
+const FieldInfoPB$json = const {
+  '1': 'FieldInfoPB',
+  '2': const [
+    const {'1': 'type', '3': 1, '4': 1, '5': 9, '10': 'type'},
+    const {'1': 'inferred_type', '3': 2, '4': 1, '5': 9, '10': 'inferredType'},
+    const {'1': 'children_ids', '3': 3, '4': 3, '5': 9, '10': 'childrenIds'},
+    const {'1': 'code', '3': 4, '4': 1, '5': 9, '10': 'code'},
+    const {'1': 'is_const', '3': 5, '4': 1, '5': 8, '10': 'isConst'},
+    const {
+      '1': 'initializer_id',
+      '3': 6,
+      '4': 1,
+      '5': 9,
+      '10': 'initializerId'
+    },
+  ],
+};
+
+const TypedefInfoPB$json = const {
+  '1': 'TypedefInfoPB',
+  '2': const [
+    const {'1': 'type', '3': 1, '4': 1, '5': 9, '10': 'type'},
+  ],
+};
+
+const FunctionModifiersPB$json = const {
+  '1': 'FunctionModifiersPB',
+  '2': const [
+    const {'1': 'is_static', '3': 1, '4': 1, '5': 8, '10': 'isStatic'},
+    const {'1': 'is_const', '3': 2, '4': 1, '5': 8, '10': 'isConst'},
+    const {'1': 'is_factory', '3': 3, '4': 1, '5': 8, '10': 'isFactory'},
+    const {'1': 'is_external', '3': 4, '4': 1, '5': 8, '10': 'isExternal'},
+  ],
+};
+
+const ParameterInfoPB$json = const {
+  '1': 'ParameterInfoPB',
+  '2': const [
+    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    const {'1': 'type', '3': 2, '4': 1, '5': 9, '10': 'type'},
+    const {'1': 'declared_type', '3': 3, '4': 1, '5': 9, '10': 'declaredType'},
+  ],
+};
+
+const FunctionInfoPB$json = const {
+  '1': 'FunctionInfoPB',
+  '2': const [
+    const {
+      '1': 'function_modifiers',
+      '3': 1,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FunctionModifiersPB',
+      '10': 'functionModifiers'
+    },
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+    const {'1': 'return_type', '3': 3, '4': 1, '5': 9, '10': 'returnType'},
+    const {
+      '1': 'inferred_return_type',
+      '3': 4,
+      '4': 1,
+      '5': 9,
+      '10': 'inferredReturnType'
+    },
+    const {
+      '1': 'parameters',
+      '3': 5,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.ParameterInfoPB',
+      '10': 'parameters'
+    },
+    const {'1': 'side_effects', '3': 6, '4': 1, '5': 9, '10': 'sideEffects'},
+    const {'1': 'inlined_count', '3': 7, '4': 1, '5': 5, '10': 'inlinedCount'},
+    const {'1': 'code', '3': 8, '4': 1, '5': 9, '10': 'code'},
+  ],
+  '9': const [
+    const {'1': 9, '2': 10},
+  ],
+};
+
+const ClosureInfoPB$json = const {
+  '1': 'ClosureInfoPB',
+  '2': const [
+    const {'1': 'function_id', '3': 1, '4': 1, '5': 9, '10': 'functionId'},
+  ],
+};
+
+const DeferredImportPB$json = const {
+  '1': 'DeferredImportPB',
+  '2': const [
+    const {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
+    const {'1': 'files', '3': 2, '4': 3, '5': 9, '10': 'files'},
+  ],
+};
+
+const LibraryDeferredImportsPB$json = const {
+  '1': 'LibraryDeferredImportsPB',
+  '2': const [
+    const {'1': 'library_uri', '3': 1, '4': 1, '5': 9, '10': 'libraryUri'},
+    const {'1': 'library_name', '3': 2, '4': 1, '5': 9, '10': 'libraryName'},
+    const {
+      '1': 'imports',
+      '3': 3,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.DeferredImportPB',
+      '10': 'imports'
+    },
+  ],
+};
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbserver.dart b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
new file mode 100644
index 0000000..8f63e58
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
@@ -0,0 +1,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
+
+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
new file mode 100644
index 0000000..dc314f7
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
@@ -0,0 +1,113 @@
+// 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.
+
+/// Defines [StringEditBuffer], a buffer that can be used to apply edits on a
+/// string.
+// TODO(sigmund): this should move to a separate package.
+library dart2js.src.string_edit_buffer;
+
+/// A buffer meant to apply edits on a string (rather than building a string
+/// from scratch). Each change is described using the location information on
+/// the original string. Internally this buffer keeps track of how a
+/// modification in one portion can offset a modification further down the
+/// string.
+class StringEditBuffer {
+  final String original;
+  final _edits = <_StringEdit>[];
+
+  StringEditBuffer(this.original);
+
+  bool get hasEdits => _edits.length > 0;
+
+  /// 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));
+  }
+
+  /// Insert [string] at [offset].
+  /// Equivalent to `replace(offset, offset, string)`.
+  void insert(int offset, String string, [sortId]) =>
+      replace(offset, offset, string, sortId);
+
+  /// Remove text from the range [begin] to exclusive [end].
+  /// Equivalent to `replace(begin, end, '')`.
+  void remove(int begin, int end) => replace(begin, end, '');
+
+  /// Applies all pending [edit]s and returns a new string.
+  ///
+  /// This method is non-destructive: it does not discard existing edits or
+  /// change the [original] string. Further edits can be added and this method
+  /// can be called again.
+  ///
+  /// Throws [UnsupportedError] if the edits were overlapping. If no edits were
+  /// made, the original string will be returned.
+  String toString() {
+    var sb = new StringBuffer();
+    if (_edits.length == 0) return original;
+
+    // Sort edits by start location.
+    _edits.sort();
+
+    int consumed = 0;
+    for (var edit in _edits) {
+      if (consumed > edit.begin) {
+        sb = new StringBuffer();
+        sb.write('overlapping edits. Insert at offset ');
+        sb.write(edit.begin);
+        sb.write(' but have consumed ');
+        sb.write(consumed);
+        sb.write(' input characters. List of edits:');
+        for (var e in _edits) {
+          sb.write('\n    ');
+          sb.write(e);
+        }
+        throw new UnsupportedError(sb.toString());
+      }
+
+      // Add characters from the original string between this edit and the last
+      // one, if any.
+      var betweenEdits = original.substring(consumed, edit.begin);
+      sb.write(betweenEdits);
+      sb.write(edit.string);
+      consumed = edit.end;
+    }
+
+    // Add any text from the end of the original string that was not replaced.
+    sb.write(original.substring(consumed));
+    return sb.toString();
+  }
+}
+
+/// A single edit in a [StringEditBuffer].
+class _StringEdit implements Comparable<_StringEdit> {
+  // Offset where edit begins
+  final int begin;
+
+  // Offset where edit ends
+  final int end;
+
+  // Sort index as a tie-breaker for edits that have the same location.
+  final int sortId;
+
+  // String to insert
+  final String string;
+
+  _StringEdit(int begin, this.end, this.string, [int sortId])
+      : begin = begin,
+        sortId = sortId == null ? begin : sortId;
+
+  int get length => end - begin;
+
+  String toString() => '(Edit @ $begin,$end: "$string")';
+
+  int compareTo(_StringEdit other) {
+    int diff = begin - other.begin;
+    if (diff != 0) return diff;
+    diff = end - other.end;
+    if (diff != 0) return diff;
+    // use edit order as a tie breaker
+    return sortId - other.sortId;
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/table.dart b/pkg/dart2js_info/lib/src/table.dart
new file mode 100644
index 0000000..85abcd3
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/table.dart
@@ -0,0 +1,126 @@
+// 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 dart2js_info.src.table;
+
+import 'dart:math' show max;
+
+/// Helper class to present data on the command-line in a table form.
+class Table {
+  int _totalColumns = 0;
+  int get totalColumns => _totalColumns;
+
+  /// Abbreviations, used to make headers shorter.
+  Map<String, String> abbreviations = {};
+
+  /// Width of each column.
+  List<int> widths = <int>[];
+
+  /// The header for each column (`header.length == totalColumns`).
+  List header = [];
+
+  /// The color for each column (`color.length == totalColumns`).
+  List colors = [];
+
+  /// Each row on the table. Note that all rows have the same size
+  /// (`rows[*].length == totalColumns`).
+  List<List> rows = [];
+
+  /// Columns to skip, for example, if they are all zero entries.
+  List<bool> _skipped = <bool>[];
+
+  /// Whether we started adding entries. Indicates that no more columns can be
+  /// added.
+  bool _sealed = false;
+
+  /// Current row being built by [addEntry].
+  List _currentRow;
+
+  /// Add a column with the given [name].
+  void declareColumn(String name,
+      {bool abbreviate: false, String color: _NO_COLOR}) {
+    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'";
+      abbreviations[headerName] = name;
+    }
+    widths.add(max(5, headerName.length + 1));
+    header.add(headerName);
+    colors.add(color);
+    _skipped.add(_totalColumns > 0);
+    _totalColumns++;
+  }
+
+  /// Add an entry in the table, creating a new row each time [totalColumns]
+  /// entries are added.
+  void addEntry(entry) {
+    if (_currentRow == null) {
+      _sealed = true;
+      _currentRow = [];
+    }
+    int pos = _currentRow.length;
+    assert(pos < _totalColumns);
+
+    widths[pos] = max(widths[pos], '$entry'.length + 1);
+    _currentRow.add('$entry');
+    if (entry is int && entry != 0) {
+      _skipped[pos] = false;
+    }
+
+    if (pos + 1 == _totalColumns) {
+      rows.add(_currentRow);
+      _currentRow = [];
+    }
+  }
+
+  /// Add an empty row to divide sections of the table.
+  void addEmptyRow() {
+    var emptyRow = [];
+    for (int i = 0; i < _totalColumns; i++) {
+      emptyRow.add('-' * widths[i]);
+    }
+    rows.add(emptyRow);
+  }
+
+  /// Enter the header titles. OK to do so more than once in long tables.
+  void addHeader() {
+    rows.add(header);
+  }
+
+  /// Generates a string representation of the table to print on a terminal.
+  // TODO(sigmund): add also a .csv format
+  String toString() {
+    var sb = new StringBuffer();
+    sb.write('\n');
+    for (var row in rows) {
+      var lastColor = _NO_COLOR;
+      for (int i = 0; i < _totalColumns; i++) {
+        if (_skipped[i]) continue;
+        var entry = row[i];
+        var color = colors[i];
+        if (lastColor != color) {
+          sb.write(color);
+          lastColor = color;
+        }
+        // Align first column to the left, everything else to the right.
+        sb.write(
+            i == 0 ? entry.padRight(widths[i]) : entry.padLeft(widths[i] + 1));
+      }
+      if (lastColor != _NO_COLOR) sb.write(_NO_COLOR);
+      sb.write('\n');
+    }
+    sb.write('\nWhere:\n');
+    for (var id in abbreviations.keys) {
+      sb.write('  $id:'.padRight(7));
+      sb.write(' ${abbreviations[id]}\n');
+    }
+    return sb.toString();
+  }
+}
+
+const _NO_COLOR = "\x1b[0m";
diff --git a/pkg/dart2js_info/lib/src/util.dart b/pkg/dart2js_info/lib/src/util.dart
new file mode 100644
index 0000000..31e9ffc
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/util.dart
@@ -0,0 +1,99 @@
+// 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 dart2js_info.src.util;
+
+import 'package:dart2js_info/info.dart';
+
+import 'graph.dart';
+
+/// Computes a graph of dependencies from [info].
+Graph<Info> graphFromInfo(AllInfo info) {
+  print('  info: dependency graph information is work in progress and'
+      ' might be incomplete');
+  // Note: we are combining dependency information that is computed in two ways
+  // (functionInfo.uses vs allInfo.dependencies).
+  // TODO(sigmund): fix inconsistencies between these two ways, stick with one
+  // of them.
+  // TODO(sigmund): create a concrete implementation of InfoGraph, instead of
+  // using the EdgeListGraph.
+  var graph = new EdgeListGraph<Info>();
+  for (var f in info.functions) {
+    graph.addNode(f);
+    for (var g in f.uses) {
+      graph.addEdge(f, g.target);
+    }
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        graph.addEdge(f, g);
+      }
+    }
+  }
+
+  for (var f in info.fields) {
+    graph.addNode(f);
+    for (var g in f.uses) {
+      graph.addEdge(f, g.target);
+    }
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        graph.addEdge(f, g);
+      }
+    }
+  }
+
+  return graph;
+}
+
+/// 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}) {
+  var infoPath = [];
+  while (info != null) {
+    infoPath.add(info);
+    info = info.parent;
+  }
+  var sb = new 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).
+    if (segment is LibraryInfo) {
+      // TODO(kevmoo): Remove this when dart2js can be invoked with an app-root
+      // custom URI
+      if (useLibraryUri && forId && segment.uri.isScheme('file')) {
+        assert(Uri.base.isScheme('file'));
+        var currentBase = Uri.base.path;
+        var segmentString = segment.uri.path;
+
+        // If longName is being called to calculate an element ID (forId = true)
+        // then use a relative path for the longName calculation
+        // This allows a more stable ID for cases when files are generated into
+        // temp directories – e.g. with pkg:build_web_compilers
+        if (segmentString.startsWith(currentBase)) {
+          segmentString = segmentString.substring(currentBase.length);
+        }
+
+        sb.write(segmentString);
+      } else {
+        sb.write(useLibraryUri ? segment.uri : segment.name);
+      }
+      sb.write('::');
+    } else {
+      first = false;
+      sb.write(segment.name);
+    }
+  }
+  return sb.toString();
+}
+
+/// Produce a string containing [value] padded with white space up to [n] chars.
+pad(value, n, {bool right: false}) {
+  var s = '$value';
+  if (s.length >= n) return s;
+  var pad = ' ' * (n - s.length);
+  return right ? '$s$pad' : '$pad$s';
+}
diff --git a/pkg/dart2js_info/pubspec.yaml b/pkg/dart2js_info/pubspec.yaml
new file mode 100644
index 0000000..77980f6
--- /dev/null
+++ b/pkg/dart2js_info/pubspec.yaml
@@ -0,0 +1,25 @@
+name: dart2js_info
+version: 0.6.5
+
+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'
+
+dependencies:
+  args: ^1.4.3
+  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
+
+dev_dependencies:
+  test: ^1.2.0
+
+executables:
+  dart2js_info: tools
diff --git a/pkg/dart2js_info/test/binary_serialization_test.dart b/pkg/dart2js_info/test/binary_serialization_test.dart
new file mode 100644
index 0000000..116003e
--- /dev/null
+++ b/pkg/dart2js_info/test/binary_serialization_test.dart
@@ -0,0 +1,41 @@
+// 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 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+import 'package:test/test.dart';
+
+class ByteSink implements Sink<List<int>> {
+  BytesBuilder builder = BytesBuilder();
+
+  add(List<int> data) => builder.add(data);
+  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 helloWorld = File.fromUri(uri);
+      var contents = helloWorld.readAsStringSync();
+      var json = jsonDecode(contents);
+      var info = AllInfoJsonCodec().decode(json);
+
+      var sink = ByteSink();
+      binary.encode(info, sink);
+      var info2 = binary.decode(sink.builder.toBytes());
+      var json2 = AllInfoJsonCodec().encode(info2);
+
+      info.program.toJsonDuration = Duration(milliseconds: 0);
+      var json1 = AllInfoJsonCodec().encode(info);
+      var contents1 = const JsonEncoder.withIndent("  ").convert(json1);
+      var contents2 = const JsonEncoder.withIndent("  ").convert(json2);
+      expect(contents1 == contents2, isTrue);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/graph_test.dart b/pkg/dart2js_info/test/graph_test.dart
new file mode 100644
index 0000000..4934adf
--- /dev/null
+++ b/pkg/dart2js_info/test/graph_test.dart
@@ -0,0 +1,73 @@
+// 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:dart2js_info/src/graph.dart';
+import 'package:test/test.dart';
+
+main() {
+  var graph = makeTestGraph();
+
+  test('preorder traversal', () {
+    expect(graph.preOrder('A').toList(), equals(['A', 'E', 'D', 'C', 'B']));
+  });
+
+  test('postorder traversal', () {
+    expect(graph.postOrder('A').toList(), equals(['C', 'E', 'D', 'B', 'A']));
+  });
+
+  test('topological sort', () {
+    expect(
+        graph.computeTopologicalSort(),
+        equals([
+          ['C'],
+          ['E'],
+          ['D', 'B', 'A']
+        ]));
+  });
+
+  test('contains path', () {
+    expect(graph.containsPath('A', 'C'), isTrue);
+    expect(graph.containsPath('B', 'E'), isTrue);
+    expect(graph.containsPath('C', 'A'), isFalse);
+    expect(graph.containsPath('E', 'B'), isFalse);
+  });
+
+  test('dominator tree', () {
+    // A dominates all other nodes in the graph, the resulting tree looks like
+    //       A
+    //    / / | |
+    //    B C D E
+    var dom = graph.dominatorTree('A');
+    expect(dom.targetsOf('A').length, equals(4));
+  });
+
+  test('cycle finding', () {
+    expect(graph.findCycleContaining('B'), equals(['A', 'D', 'B']));
+    expect(graph.findCycleContaining('C'), equals(['C']));
+  });
+}
+
+/// Creates a simple test graph with the following structure:
+/// ```
+///      A -> E
+///     / ^   ^
+///    /  \  /
+///   v   v /
+///  B -> D
+///  \  /
+///  v v
+///   C
+/// ```
+Graph<String> makeTestGraph() {
+  var graph = new EdgeListGraph<String>();
+  graph.addEdge('A', 'B');
+  graph.addEdge('A', 'D');
+  graph.addEdge('A', 'E');
+  graph.addEdge('B', 'C');
+  graph.addEdge('B', 'D');
+  graph.addEdge('D', 'A');
+  graph.addEdge('D', 'C');
+  graph.addEdge('D', 'E');
+  return graph;
+}
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.dart b/pkg/dart2js_info/test/hello_world/hello_world.dart
new file mode 100644
index 0000000..800db1c
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world/hello_world.dart
@@ -0,0 +1,3 @@
+main() {
+  print("Hello, World!");
+}
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
new file mode 100644
index 0000000..afe12f8
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -0,0 +1,1618 @@
+{
+  "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,
+        "children": [
+          "class/949988971"
+        ],
+        "canonicalUri": "dart:_foreign_helper"
+      },
+      "238986171": {
+        "id": "library/238986171",
+        "kind": "library",
+        "name": "dart2js._js_primitives",
+        "size": 483,
+        "children": [
+          "function/864228238"
+        ],
+        "canonicalUri": "dart:_js_primitives"
+      },
+      "325218131": {
+        "id": "library/325218131",
+        "kind": "library",
+        "name": "_interceptors",
+        "size": 0,
+        "children": [
+          "class/1019758482"
+        ],
+        "canonicalUri": "dart:_interceptors"
+      },
+      "631335891": {
+        "id": "library/631335891",
+        "kind": "library",
+        "name": "dart.core",
+        "size": 0,
+        "children": [
+          "class/36312556",
+          "class/56472591",
+          "class/93352366",
+          "class/143626168",
+          "class/175705485",
+          "class/948502579",
+          "class/974704527",
+          "class/991730135",
+          "function/399195151"
+        ],
+        "canonicalUri": "dart:core"
+      },
+      "689380639": {
+        "id": "library/689380639",
+        "kind": "library",
+        "name": "dart._internal",
+        "size": 0,
+        "children": [
+          "field/908476008",
+          "function/606513838"
+        ],
+        "canonicalUri": "dart:_internal"
+      },
+      "754126564": {
+        "id": "library/754126564",
+        "kind": "library",
+        "name": "dart.collection",
+        "size": 0,
+        "children": [
+          "field/522978319"
+        ],
+        "canonicalUri": "dart:collection"
+      },
+      "965528565": {
+        "id": "library/965528565",
+        "kind": "library",
+        "name": "dart2js._embedded_names",
+        "size": 0,
+        "children": [
+          "class/73206861",
+          "class/716671121",
+          "field/55541185",
+          "field/1020283310"
+        ],
+        "canonicalUri": "dart:_js_embedded_names"
+      },
+      "966364039": {
+        "id": "library/966364039",
+        "kind": "library",
+        "name": "_js_helper",
+        "size": 0,
+        "children": [
+          "class/138211367",
+          "class/156108056",
+          "class/269073412",
+          "class/317291728",
+          "class/324980341",
+          "class/354160010",
+          "class/644348892",
+          "class/866150578",
+          "class/1019636942",
+          "field/417944821",
+          "field/526089142"
+        ],
+        "canonicalUri": "dart:_js_helper"
+      }
+    },
+    "class": {
+      "36312556": {
+        "id": "class/36312556",
+        "kind": "class",
+        "name": "ConcurrentModificationError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/376257386"
+        ]
+      },
+      "56472591": {
+        "id": "class/56472591",
+        "kind": "class",
+        "name": "AssertionError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/840751619"
+        ]
+      },
+      "73206861": {
+        "id": "class/73206861",
+        "kind": "class",
+        "name": "JsGetName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "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"
+        ]
+      },
+      "93352366": {
+        "id": "class/93352366",
+        "kind": "class",
+        "name": "CyclicInitializationError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/944915314"
+        ]
+      },
+      "138211367": {
+        "id": "class/138211367",
+        "kind": "class",
+        "name": "BoundClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/125830184",
+          "field/180845508",
+          "field/302220255",
+          "field/435101137",
+          "field/709451133",
+          "field/1061931090"
+        ]
+      },
+      "143626168": {
+        "id": "class/143626168",
+        "kind": "class",
+        "name": "ArgumentError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/4524053",
+          "field/509005655",
+          "field/727752212",
+          "field/759319863"
+        ]
+      },
+      "156108056": {
+        "id": "class/156108056",
+        "kind": "class",
+        "name": "ReflectionInfo",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "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"
+        ]
+      },
+      "175705485": {
+        "id": "class/175705485",
+        "kind": "class",
+        "name": "IndexError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/505549528",
+          "field/954188953"
+        ]
+      },
+      "269073412": {
+        "id": "class/269073412",
+        "kind": "class",
+        "name": "TypeImpl",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/70141207",
+          "field/412345286"
+        ]
+      },
+      "317291728": {
+        "id": "class/317291728",
+        "kind": "class",
+        "name": "Closure",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/386221903"
+        ]
+      },
+      "324980341": {
+        "id": "class/324980341",
+        "kind": "class",
+        "name": "TypeErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/319720392"
+        ]
+      },
+      "354160010": {
+        "id": "class/354160010",
+        "kind": "class",
+        "name": "Primitives",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/118657756"
+        ]
+      },
+      "644348892": {
+        "id": "class/644348892",
+        "kind": "class",
+        "name": "CastErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/185234473"
+        ]
+      },
+      "716671121": {
+        "id": "class/716671121",
+        "kind": "class",
+        "name": "JsBuiltin",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "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"
+        ]
+      },
+      "866150578": {
+        "id": "class/866150578",
+        "kind": "class",
+        "name": "RuntimeError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/653339731"
+        ]
+      },
+      "948502579": {
+        "id": "class/948502579",
+        "kind": "class",
+        "name": "StateError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/190358771"
+        ]
+      },
+      "949988971": {
+        "id": "class/949988971",
+        "kind": "class",
+        "name": "JS_CONST",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/174368900",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/249142929"
+        ]
+      },
+      "974704527": {
+        "id": "class/974704527",
+        "kind": "class",
+        "name": "RangeError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/111931226",
+          "field/649547880"
+        ]
+      },
+      "991730135": {
+        "id": "class/991730135",
+        "kind": "class",
+        "name": "UnsupportedError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/140571055"
+        ]
+      },
+      "1019636942": {
+        "id": "class/1019636942",
+        "kind": "class",
+        "name": "TypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/856247106",
+          "field/874766737",
+          "field/1068071433"
+        ]
+      },
+      "1019758482": {
+        "id": "class/1019758482",
+        "kind": "class",
+        "name": "ArrayIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/112618843",
+          "field/237146195",
+          "field/504170901",
+          "field/577142640"
+        ]
+      }
+    },
+    "function": {
+      "399195151": {
+        "id": "function/399195151",
+        "kind": "function",
+        "name": "print",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value mask: [\"Hello, World!\"] type: [exact=JSString]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "(Object) -> void",
+        "measurements": null
+      },
+      "531925466": {
+        "id": "function/531925466",
+        "kind": "function",
+        "name": "main",
+        "size": 62,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/60281205",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 0,
+        "code": "main: function() {\n  H.printString(\"Hello, World!\");\n}\n",
+        "type": "() -> dynamic",
+        "measurements": null
+      },
+      "606513838": {
+        "id": "function/606513838",
+        "kind": "function",
+        "name": "printToConsole",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": true
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "line",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "(String) -> void",
+        "measurements": null
+      },
+      "864228238": {
+        "id": "function/864228238",
+        "kind": "function",
+        "name": "printString",
+        "size": 460,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/238986171",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "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
+      }
+    },
+    "typedef": {},
+    "field": {
+      "4524053": {
+        "id": "field/4524053",
+        "kind": "field",
+        "name": "_hasValue",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "Value mask: [true] type: [exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "17152193": {
+        "id": "field/17152193",
+        "kind": "field",
+        "name": "getType",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "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"
+      },
+      "111931226": {
+        "id": "field/111931226",
+        "kind": "field",
+        "name": "start",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "num"
+      },
+      "112618843": {
+        "id": "field/112618843",
+        "kind": "field",
+        "name": "_length",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSUInt32]",
+        "code": null,
+        "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",
+        "parent": "class/991730135",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "153611669": {
+        "id": "field/153611669",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "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",
+        "parent": "class/948502579",
+        "children": [],
+        "inferredType": "Value mask: [\"No element\"] type: [exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "190934046": {
+        "id": "field/190934046",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "202409972": {
+        "id": "field/202409972",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETER_PROPERTY",
+        "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",
+        "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
+      },
+      "237146195": {
+        "id": "field/237146195",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSArray]",
+        "code": null,
+        "type": "JSArray<E>"
+      },
+      "249142929": {
+        "id": "field/249142929",
+        "kind": "field",
+        "name": "code",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "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,
+        "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",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "319720392": {
+        "id": "field/319720392",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/324980341",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "338588500": {
+        "id": "field/338588500",
+        "kind": "field",
+        "name": "requiredParameterCount",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "376257386": {
+        "id": "field/376257386",
+        "kind": "field",
+        "name": "modifiedObject",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/36312556",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "Object"
+      },
+      "386221903": {
+        "id": "field/386221903",
+        "kind": "field",
+        "name": "functionCounter",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/317291728",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int"
+      },
+      "391942199": {
+        "id": "field/391942199",
+        "kind": "field",
+        "name": "OPERATOR_AS_PREFIX",
+        "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",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "447707988": {
+        "id": "field/447707988",
+        "kind": "field",
+        "name": "RTI_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "483247773": {
+        "id": "field/483247773",
+        "kind": "field",
+        "name": "rawRtiToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "504170901": {
+        "id": "field/504170901",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "E"
+      },
+      "505549528": {
+        "id": "field/505549528",
+        "kind": "field",
+        "name": "indexable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "Union of [[exact=IndexError], [exact=JSString], [exact=StringBuffer], [subclass=JSArray]]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "509005655": {
+        "id": "field/509005655",
+        "kind": "field",
+        "name": "name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "Value mask: [\"index\"] type: [null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "522978319": {
+        "id": "field/522978319",
+        "kind": "field",
+        "name": "_toStringVisiting",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/754126564",
+        "children": [],
+        "inferredType": "Container mask: [subclass=JSArray] length: null type: [exact=JSExtendableArray]",
+        "code": null,
+        "type": "List"
+      },
+      "526089142": {
+        "id": "field/526089142",
+        "kind": "field",
+        "name": "_constructorNameFallback",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JS_CONST]",
+        "code": null,
+        "type": "dynamic",
+        "const": true
+      },
+      "577142640": {
+        "id": "field/577142640",
+        "kind": "field",
+        "name": "_index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": null,
+        "type": "int"
+      },
+      "586155906": {
+        "id": "field/586155906",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "603434183": {
+        "id": "field/603434183",
+        "kind": "field",
+        "name": "cachedSortedIndices",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "List"
+      },
+      "626399440": {
+        "id": "field/626399440",
+        "kind": "field",
+        "name": "FUNCTION_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "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
+      },
+      "649547880": {
+        "id": "field/649547880",
+        "kind": "field",
+        "name": "end",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "num"
+      },
+      "653339731": {
+        "id": "field/653339731",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/866150578",
+        "children": [],
+        "inferredType": "Value mask: [\"Intercepted function with no arguments.\"] type: [exact=JSString]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "656800516": {
+        "id": "field/656800516",
+        "kind": "field",
+        "name": "data",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "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,
+        "type": "String"
+      },
+      "727752212": {
+        "id": "field/727752212",
+        "kind": "field",
+        "name": "invalidValue",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "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",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "793498792": {
+        "id": "field/793498792",
+        "kind": "field",
+        "name": "isGivenTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "805748014": {
+        "id": "field/805748014",
+        "kind": "field",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "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"
+      },
+      "840751619": {
+        "id": "field/840751619",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/56472591",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Object"
+      },
+      "844410756": {
+        "id": "field/844410756",
+        "kind": "field",
+        "name": "DEFAULT_VALUES_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "856247106": {
+        "id": "field/856247106",
+        "kind": "field",
+        "name": "bound",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019636942",
+        "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
+      },
+      "908476008": {
+        "id": "field/908476008",
+        "kind": "field",
+        "name": "printToZone",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/689380639",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Function"
+      },
+      "911662921": {
+        "id": "field/911662921",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_INDEX",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "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/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "936474054": {
+        "id": "field/936474054",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "944915314": {
+        "id": "field/944915314",
+        "kind": "field",
+        "name": "variableName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/93352366",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "954188953": {
+        "id": "field/954188953",
+        "kind": "field",
+        "name": "length",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "960584371": {
+        "id": "field/960584371",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "1012317118": {
+        "id": "field/1012317118",
+        "kind": "field",
+        "name": "SIGNATURE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "1019580176": {
+        "id": "field/1019580176",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "1020283310": {
+        "id": "field/1020283310",
+        "kind": "field",
+        "name": "STATIC_FUNCTION_NAME_PROPERTY_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/965528565",
+        "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,
+        "type": "String"
+      },
+      "1063003009": {
+        "id": "field/1063003009",
+        "kind": "field",
+        "name": "isCheckPropertyToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "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,
+        "type": "String"
+      }
+    },
+    "constant": {},
+    "closure": {}
+  },
+  "holding": {
+    "function/399195151": [
+      {
+        "id": "function/606513838",
+        "mask": "inlined"
+      }
+    ],
+    "function/531925466": [
+      {
+        "id": "function/399195151",
+        "mask": "null"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606513838",
+        "mask": "null"
+      },
+      {
+        "id": "function/864228238",
+        "mask": "null"
+      },
+      {
+        "id": "function/864228238",
+        "mask": "null"
+      }
+    ]
+  },
+  "dependencies": {},
+  "outputUnits": [
+    {
+      "id": "outputUnit/987444055",
+      "kind": "outputUnit",
+      "name": null,
+      "size": 10324,
+      "imports": [
+        null
+      ]
+    }
+  ],
+  "dump_version": 5,
+  "deferredFiles": {},
+  "dump_minor_version": "0",
+  "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,
+    "dumpInfoDuration": 0,
+    "noSuchMethodEnabled": false,
+    "minified": false
+  }
+}
\ No newline at end of file
diff --git a/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart b/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart
new file mode 100644
index 0000000..a719959
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart
@@ -0,0 +1 @@
+const helloWorld = "Hello, World!";
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart
new file mode 100644
index 0000000..9baf023
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart
@@ -0,0 +1,6 @@
+import 'deferred_import.dart' deferred as deferred_import;
+
+Future<void> main() async {
+  await deferred_import.loadLibrary();
+  print(deferred_import.helloWorld);
+}
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
new file mode 100644
index 0000000..7098f4a
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -0,0 +1,26128 @@
+{
+  "elements": {
+    "library": {
+      "174368900": {
+        "id": "library/174368900",
+        "kind": "library",
+        "name": "_foreign_helper",
+        "size": 65,
+        "children": [
+          "class/949988971"
+        ],
+        "canonicalUri": "dart:_foreign_helper"
+      },
+      "237882207": {
+        "id": "library/237882207",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "field/162036481",
+          "field/241563122"
+        ],
+        "canonicalUri": "dart:_async_await_error_codes"
+      },
+      "238986171": {
+        "id": "library/238986171",
+        "kind": "library",
+        "name": "dart2js._js_primitives",
+        "size": 483,
+        "children": [
+          "function/864228238"
+        ],
+        "canonicalUri": "dart:_js_primitives"
+      },
+      "239009133": {
+        "id": "library/239009133",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "field/83424460"
+        ],
+        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/deferred_import.dart"
+      },
+      "325218131": {
+        "id": "library/325218131",
+        "kind": "library",
+        "name": "_interceptors",
+        "size": 8861,
+        "children": [
+          "class/86936801",
+          "class/245082925",
+          "class/359696216",
+          "class/418854932",
+          "class/506846212",
+          "class/523978038",
+          "class/535478555",
+          "class/699388972",
+          "class/793539876",
+          "class/851867060",
+          "class/1003011102",
+          "class/1019758482",
+          "class/1034266724",
+          "field/406601007",
+          "function/821285776"
+        ],
+        "canonicalUri": "dart:_interceptors"
+      },
+      "527944179": {
+        "id": "library/527944179",
+        "kind": "library",
+        "name": "dart._js_names",
+        "size": 137,
+        "children": [
+          "function/203738274",
+          "function/508874693"
+        ],
+        "canonicalUri": "dart:_js_names"
+      },
+      "631335891": {
+        "id": "library/631335891",
+        "kind": "library",
+        "name": "dart.core",
+        "size": 9004,
+        "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/803883908",
+          "class/893386369",
+          "class/948502579",
+          "class/959990109",
+          "class/974704527",
+          "class/991730135",
+          "class/1052045656",
+          "field/261042870",
+          "function/399195151"
+        ],
+        "canonicalUri": "dart:core"
+      },
+      "689380639": {
+        "id": "library/689380639",
+        "kind": "library",
+        "name": "dart._internal",
+        "size": 3245,
+        "children": [
+          "class/60704969",
+          "class/171867442",
+          "class/202804702",
+          "class/365655194",
+          "class/540398347",
+          "class/680257415",
+          "class/737466373",
+          "field/908476008",
+          "function/606513838"
+        ],
+        "canonicalUri": "dart:_internal"
+      },
+      "754126564": {
+        "id": "library/754126564",
+        "kind": "library",
+        "name": "dart.collection",
+        "size": 10695,
+        "children": [
+          "class/113750884",
+          "class/123522748",
+          "class/143510818",
+          "class/476286669",
+          "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"
+        ],
+        "canonicalUri": "dart:collection"
+      },
+      "934372066": {
+        "id": "library/934372066",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 996,
+        "children": [
+          "function/921486255"
+        ],
+        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
+      },
+      "965528565": {
+        "id": "library/965528565",
+        "kind": "library",
+        "name": "dart2js._embedded_names",
+        "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"
+        ],
+        "canonicalUri": "dart:_js_embedded_names"
+      },
+      "966364039": {
+        "id": "library/966364039",
+        "kind": "library",
+        "name": "_js_helper",
+        "size": 53313,
+        "children": [
+          "class/8008562",
+          "class/17649844",
+          "class/27679401",
+          "class/44790816",
+          "class/138211367",
+          "class/156108056",
+          "class/216047131",
+          "class/269073412",
+          "class/294355530",
+          "class/317291728",
+          "class/324980341",
+          "class/354160010",
+          "class/373504153",
+          "class/388380492",
+          "class/466061502",
+          "class/500662026",
+          "class/518228506",
+          "class/644348892",
+          "class/692496355",
+          "class/722522722",
+          "class/742137989",
+          "class/790616034",
+          "class/866150578",
+          "class/954836234",
+          "class/958488954",
+          "field/8965675",
+          "field/126292751",
+          "field/244162491",
+          "field/417944821",
+          "field/496557243",
+          "field/526089142",
+          "field/670005717",
+          "field/907727246",
+          "field/926265914",
+          "function/21667157",
+          "function/53631526",
+          "function/64968119",
+          "function/79175019",
+          "function/108053021",
+          "function/109394176",
+          "function/136972596",
+          "function/163889622",
+          "function/193787732",
+          "function/225159691",
+          "function/230858033",
+          "function/257728434",
+          "function/263798810",
+          "function/264370095",
+          "function/265638794",
+          "function/268773900",
+          "function/275681184",
+          "function/292889014",
+          "function/299781104",
+          "function/306374693",
+          "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/544746737",
+          "function/551570860",
+          "function/553851206",
+          "function/555987509",
+          "function/560797298",
+          "function/607704865",
+          "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/756575134",
+          "function/764768055",
+          "function/772250195",
+          "function/788412943",
+          "function/798288240",
+          "function/813370328",
+          "function/827571674",
+          "function/906921796",
+          "function/967508646",
+          "function/984452543",
+          "function/992679489",
+          "function/1012615396",
+          "function/1049802380",
+          "function/1060205580"
+        ],
+        "canonicalUri": "dart:_js_helper"
+      },
+      "1052666095": {
+        "id": "library/1052666095",
+        "kind": "library",
+        "name": "dart.async",
+        "size": 35210,
+        "children": [
+          "class/32494041",
+          "class/80405414",
+          "class/185316425",
+          "class/240292734",
+          "class/410333734",
+          "class/438137149",
+          "class/471305727",
+          "class/566341130",
+          "class/577121337",
+          "class/611525899",
+          "class/714718140",
+          "class/733467750",
+          "class/770824752",
+          "class/784178238",
+          "class/850763763",
+          "class/934351233",
+          "class/952584796",
+          "class/1012203707",
+          "class/1040168844",
+          "class/1059755229",
+          "field/29748263",
+          "field/370436126",
+          "field/639289778",
+          "field/931441116",
+          "field/952591811",
+          "function/67701762",
+          "function/82702408",
+          "function/116583875",
+          "function/160969748",
+          "function/205154197",
+          "function/262026503",
+          "function/271854590",
+          "function/330018012",
+          "function/336168458",
+          "function/337937411",
+          "function/364010339",
+          "function/412886703",
+          "function/415620823",
+          "function/635153575",
+          "function/650942169",
+          "function/658921946",
+          "function/663282901",
+          "function/710611585",
+          "function/831655802",
+          "function/835692712",
+          "function/887884267"
+        ],
+        "canonicalUri": "dart:async"
+      }
+    },
+    "class": {
+      "8008562": {
+        "id": "class/8008562",
+        "kind": "class",
+        "name": "DeferredNotLoadedError",
+        "size": 160,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/826222890",
+          "function/116203851",
+          "function/179653294"
+        ]
+      },
+      "17649844": {
+        "id": "class/17649844",
+        "kind": "class",
+        "name": "JsNoSuchMethodError",
+        "size": 763,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/345425066",
+          "field/347443343",
+          "field/627383241",
+          "function/336352070",
+          "function/636061569"
+        ]
+      },
+      "27679401": {
+        "id": "class/27679401",
+        "kind": "class",
+        "name": "UnknownJsTypeError",
+        "size": 167,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/346735010",
+          "function/430193009",
+          "function/793410068"
+        ]
+      },
+      "32494041": {
+        "id": "class/32494041",
+        "kind": "class",
+        "name": "_TimerImpl",
+        "size": 786,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/9743357",
+          "field/710218156",
+          "field/889385105",
+          "function/773230206"
+        ]
+      },
+      "36312556": {
+        "id": "class/36312556",
+        "kind": "class",
+        "name": "ConcurrentModificationError",
+        "size": 473,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/376257386",
+          "function/701409225",
+          "function/745741399"
+        ]
+      },
+      "44790816": {
+        "id": "class/44790816",
+        "kind": "class",
+        "name": "TearOffClosure",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "56472591": {
+        "id": "class/56472591",
+        "kind": "class",
+        "name": "AssertionError",
+        "size": 0,
+        "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"
+        ]
+      },
+      "73206861": {
+        "id": "class/73206861",
+        "kind": "class",
+        "name": "JsGetName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "modifiers": {
+          "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"
+        ]
+      },
+      "80405414": {
+        "id": "class/80405414",
+        "kind": "class",
+        "name": "_FutureListener",
+        "size": 683,
+        "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",
+          "function/95599505",
+          "function/171287120",
+          "function/350333970",
+          "function/370120278",
+          "function/373761717",
+          "function/430787578",
+          "function/552271305",
+          "function/692185405",
+          "function/748173162",
+          "function/795411795",
+          "function/919469907",
+          "function/1030881401",
+          "function/1055095230"
+        ]
+      },
+      "86936801": {
+        "id": "class/86936801",
+        "kind": "class",
+        "name": "Interceptor",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/425007214",
+          "function/796179660",
+          "function/944731702"
+        ]
+      },
+      "93352366": {
+        "id": "class/93352366",
+        "kind": "class",
+        "name": "CyclicInitializationError",
+        "size": 269,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/944915314",
+          "function/150705145",
+          "function/681643547"
+        ]
+      },
+      "113750884": {
+        "id": "class/113750884",
+        "kind": "class",
+        "name": "_LinkedHashSetIterator",
+        "size": 645,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/65712884",
+          "field/635439616",
+          "field/646361925",
+          "field/795932009",
+          "function/176842663",
+          "function/676035370",
+          "function/834909172"
+        ]
+      },
+      "123522748": {
+        "id": "class/123522748",
+        "kind": "class",
+        "name": "_LinkedHashSet",
+        "size": 3795,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/60920969",
+          "field/229586442",
+          "field/347672432",
+          "field/410301694",
+          "field/435679137",
+          "field/459351028",
+          "field/676869951",
+          "function/702510",
+          "function/16600620",
+          "function/30570662",
+          "function/31139860",
+          "function/98156511",
+          "function/99251871",
+          "function/114607430",
+          "function/130131853",
+          "function/275957193",
+          "function/336424489",
+          "function/380929608",
+          "function/448031436",
+          "function/616072379",
+          "function/649401243",
+          "function/870367819",
+          "function/920500080",
+          "function/969026469",
+          "function/998984172",
+          "function/1002752870"
+        ]
+      },
+      "138211367": {
+        "id": "class/138211367",
+        "kind": "class",
+        "name": "BoundClosure",
+        "size": 1734,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/125830184",
+          "field/180845508",
+          "field/302220255",
+          "field/435101137",
+          "field/709451133",
+          "field/1061931090",
+          "function/15478302",
+          "function/292195356",
+          "function/393060060",
+          "function/564404904",
+          "function/705889064",
+          "function/724475372",
+          "function/762030080",
+          "function/791079680",
+          "function/906797235"
+        ]
+      },
+      "143510818": {
+        "id": "class/143510818",
+        "kind": "class",
+        "name": "LinkedHashSet",
+        "size": 31,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/128684509"
+        ]
+      },
+      "143626168": {
+        "id": "class/143626168",
+        "kind": "class",
+        "name": "ArgumentError",
+        "size": 967,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/4524053",
+          "field/509005655",
+          "field/727752212",
+          "field/759319863",
+          "function/448227795",
+          "function/464959827",
+          "function/606572177",
+          "function/717852932",
+          "function/885768717"
+        ]
+      },
+      "156108056": {
+        "id": "class/156108056",
+        "kind": "class",
+        "name": "ReflectionInfo",
+        "size": 756,
+        "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"
+        ]
+      },
+      "175705485": {
+        "id": "class/175705485",
+        "kind": "class",
+        "name": "IndexError",
+        "size": 742,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/505549528",
+          "field/954188953",
+          "function/275271990",
+          "function/620005669",
+          "function/985926244"
+        ]
+      },
+      "185316425": {
+        "id": "class/185316425",
+        "kind": "class",
+        "name": "_Zone",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/57158184"
+        ]
+      },
+      "202804702": {
+        "id": "class/202804702",
+        "kind": "class",
+        "name": "EfficientLengthIterable",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "216047131": {
+        "id": "class/216047131",
+        "kind": "class",
+        "name": "StringMatch",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/231027572",
+          "field/402795939",
+          "field/404664193"
+        ]
+      },
+      "217690375": {
+        "id": "class/217690375",
+        "kind": "class",
+        "name": "_Exception",
+        "size": 121,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/650081226",
+          "function/431897853",
+          "function/806420362"
+        ]
+      },
+      "240292734": {
+        "id": "class/240292734",
+        "kind": "class",
+        "name": "StreamIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/357627841"
+        ]
+      },
+      "245082925": {
+        "id": "class/245082925",
+        "kind": "class",
+        "name": "JSBool",
+        "size": 225,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/175997763",
+          "function/991909617"
+        ]
+      },
+      "269073412": {
+        "id": "class/269073412",
+        "kind": "class",
+        "name": "TypeImpl",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/70141207",
+          "field/412345286"
+        ]
+      },
+      "293821936": {
+        "id": "class/293821936",
+        "kind": "class",
+        "name": "StringBuffer",
+        "size": 836,
+        "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"
+        ]
+      },
+      "294355530": {
+        "id": "class/294355530",
+        "kind": "class",
+        "name": "TypeErrorDecoder",
+        "size": 2490,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/55197673",
+          "field/79943715",
+          "field/123513767",
+          "field/146902950",
+          "field/169031325",
+          "field/189240247",
+          "field/337959975",
+          "field/359397062",
+          "field/366629653",
+          "field/368849633",
+          "field/381082880",
+          "field/645317327",
+          "field/646744185",
+          "field/817840529",
+          "field/906853360",
+          "field/1012307238",
+          "function/219348673",
+          "function/229841336",
+          "function/473156332",
+          "function/553278458",
+          "function/611761598",
+          "function/640815092",
+          "function/642221110",
+          "function/698206676",
+          "function/725505159",
+          "function/814002251",
+          "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/386221903",
+          "function/253794122",
+          "function/273024378",
+          "function/320253842",
+          "function/476860251",
+          "function/899124813",
+          "function/922840913",
+          "function/1051093947"
+        ]
+      },
+      "324980341": {
+        "id": "class/324980341",
+        "kind": "class",
+        "name": "TypeErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/319720392"
+        ]
+      },
+      "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/272589495"
+        ]
+      },
+      "351911148": {
+        "id": "class/351911148",
+        "kind": "class",
+        "name": "Null",
+        "size": 200,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/565013754",
+          "function/860159722"
+        ]
+      },
+      "354160010": {
+        "id": "class/354160010",
+        "kind": "class",
+        "name": "Primitives",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/118657756",
+          "function/507333070",
+          "function/540949546",
+          "function/549577701",
+          "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",
+        "name": "LinkedHashMapKeyIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/499560688",
+          "function/739160294",
+          "function/950782810"
+        ]
+      },
+      "388380492": {
+        "id": "class/388380492",
+        "kind": "class",
+        "name": "ExceptionAndStackTrace",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/701889804",
+          "field/909027003",
+          "function/259223906"
+        ]
+      },
+      "410333734": {
+        "id": "class/410333734",
+        "kind": "class",
+        "name": "DeferredLoadException",
+        "size": 262,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/443749531",
+          "function/72077250",
+          "function/754771250"
+        ]
+      },
+      "418854932": {
+        "id": "class/418854932",
+        "kind": "class",
+        "name": "JSNull",
+        "size": 268,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/519947595",
+          "function/878987098",
+          "function/962973203"
+        ]
+      },
+      "438137149": {
+        "id": "class/438137149",
+        "kind": "class",
+        "name": "Future",
+        "size": 1279,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/1016218670",
+          "function/385444888",
+          "function/513053773",
+          "function/754498726"
+        ]
+      },
+      "466061502": {
+        "id": "class/466061502",
+        "kind": "class",
+        "name": "StaticClosure",
+        "size": 238,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/143567266",
+          "function/285148179"
+        ]
+      },
+      "471305727": {
+        "id": "class/471305727",
+        "kind": "class",
+        "name": "Completer",
+        "size": 31,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/350634082",
+          "function/1014821943"
+        ]
+      },
+      "476286669": {
+        "id": "class/476286669",
+        "kind": "class",
+        "name": "MapMixin",
+        "size": 195,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/891910474",
+          "function/1008544093"
+        ]
+      },
+      "481500691": {
+        "id": "class/481500691",
+        "kind": "class",
+        "name": "bool",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/173469993",
+          "function/808159833"
+        ]
+      },
+      "500662026": {
+        "id": "class/500662026",
+        "kind": "class",
+        "name": "LinkedHashMapCell",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/192950192",
+          "field/431266734",
+          "field/509651846",
+          "field/996559228",
+          "function/481547973"
+        ]
+      },
+      "506846212": {
+        "id": "class/506846212",
+        "kind": "class",
+        "name": "UnknownJavaScriptObject",
+        "size": 38,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "518228506": {
+        "id": "class/518228506",
+        "kind": "class",
+        "name": "_StackTrace",
+        "size": 393,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/127038922",
+          "field/460958077",
+          "function/272627576",
+          "function/436231120"
+        ]
+      },
+      "523978038": {
+        "id": "class/523978038",
+        "kind": "class",
+        "name": "JSArray",
+        "size": 3800,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/80736041",
+          "function/144469777",
+          "function/144469778",
+          "function/162825675",
+          "function/221934998",
+          "function/369614033",
+          "function/405266426",
+          "function/407139250",
+          "function/437395524",
+          "function/453686242",
+          "function/456567103",
+          "function/478486472",
+          "function/482441661",
+          "function/653699436",
+          "function/952130975",
+          "function/979933658",
+          "function/997099929",
+          "function/1024143730"
+        ]
+      },
+      "535478555": {
+        "id": "class/535478555",
+        "kind": "class",
+        "name": "JSInt",
+        "size": 47,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/93381370",
+          "function/632290992"
+        ]
+      },
+      "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/63166902",
+          "function/164775669",
+          "function/338379080",
+          "function/351622741",
+          "function/390828239",
+          "function/417406426",
+          "function/613322203",
+          "function/633677177",
+          "function/644221207",
+          "function/888466063",
+          "function/904115316",
+          "function/968241519",
+          "function/992393187",
+          "function/1036675160"
+        ]
+      },
+      "577121337": {
+        "id": "class/577121337",
+        "kind": "class",
+        "name": "AsyncError",
+        "size": 137,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/24026359",
+          "field/1023319897",
+          "function/11804710",
+          "function/613119304"
+        ]
+      },
+      "595024907": {
+        "id": "class/595024907",
+        "kind": "class",
+        "name": "NullThrownError",
+        "size": 101,
+        "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"
+        ]
+      },
+      "611525899": {
+        "id": "class/611525899",
+        "kind": "class",
+        "name": "_AsyncRun",
+        "size": 688,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/932611099",
+          "function/67489885",
+          "function/163884478",
+          "function/165003912",
+          "function/546320785",
+          "function/608925525"
+        ]
+      },
+      "614050497": {
+        "id": "class/614050497",
+        "kind": "class",
+        "name": "LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/116599339"
+        ]
+      },
+      "627219877": {
+        "id": "class/627219877",
+        "kind": "class",
+        "name": "Object",
+        "size": 378,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/167405219",
+          "function/749970393",
+          "function/837956997"
+        ]
+      },
+      "631051714": {
+        "id": "class/631051714",
+        "kind": "class",
+        "name": "Exception",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/301932486"
+        ]
+      },
+      "635685670": {
+        "id": "class/635685670",
+        "kind": "class",
+        "name": "String",
+        "size": 28,
+        "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",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/185234473"
+        ]
+      },
+      "680257415": {
+        "id": "class/680257415",
+        "kind": "class",
+        "name": "SkipIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/51929026",
+          "field/824622307"
+        ]
+      },
+      "692496355": {
+        "id": "class/692496355",
+        "kind": "class",
+        "name": "Es6LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/494583530"
+        ]
+      },
+      "699388972": {
+        "id": "class/699388972",
+        "kind": "class",
+        "name": "JSUnmodifiableArray",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "714718140": {
+        "id": "class/714718140",
+        "kind": "class",
+        "name": "_AsyncCompleter",
+        "size": 383,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/102471615",
+          "function/779765691",
+          "function/1065856678"
+        ]
+      },
+      "716671121": {
+        "id": "class/716671121",
+        "kind": "class",
+        "name": "JsBuiltin",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "modifiers": {
+          "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"
+        ]
+      },
+      "722522722": {
+        "id": "class/722522722",
+        "kind": "class",
+        "name": "JsLinkedHashMap",
+        "size": 5142,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/202484522",
+          "field/232791153",
+          "field/269363605",
+          "field/650800220",
+          "field/742643375",
+          "field/795691913",
+          "field/818740436",
+          "function/538046",
+          "function/38646490",
+          "function/123959555",
+          "function/245651187",
+          "function/315128565",
+          "function/370295194",
+          "function/400990606",
+          "function/542135743",
+          "function/573775196",
+          "function/585544091",
+          "function/636443477",
+          "function/665416673",
+          "function/669694580",
+          "function/687991937",
+          "function/689271731",
+          "function/702114504",
+          "function/731794670",
+          "function/756812986",
+          "function/813862273",
+          "function/820195095",
+          "function/889342435",
+          "function/897413385",
+          "function/1015140651",
+          "function/1033661873"
+        ]
+      },
+      "733467750": {
+        "id": "class/733467750",
+        "kind": "class",
+        "name": "_AsyncCallbackEntry",
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/607252",
+          "field/221913650",
+          "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",
+        "name": "LinkedHashMapKeyIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/60719081",
+          "field/130629664",
+          "field/635780781",
+          "field/1051861725"
+        ]
+      },
+      "748502014": {
+        "id": "class/748502014",
+        "kind": "class",
+        "name": "MapBase",
+        "size": 379,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/987508329"
+        ]
+      },
+      "758572498": {
+        "id": "class/758572498",
+        "kind": "class",
+        "name": "SetMixin",
+        "size": 137,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/176570718"
+        ]
+      },
+      "770824752": {
+        "id": "class/770824752",
+        "kind": "class",
+        "name": "_Completer",
+        "size": 510,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/1025923114",
+          "function/766396929"
+        ]
+      },
+      "784178238": {
+        "id": "class/784178238",
+        "kind": "class",
+        "name": "_Future",
+        "size": 15179,
+        "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",
+          "function/94108092",
+          "function/96457955",
+          "function/263363184",
+          "function/271674536",
+          "function/292751514",
+          "function/325386239",
+          "function/352514166",
+          "function/492708773",
+          "function/519629171",
+          "function/533906117",
+          "function/553149607",
+          "function/556268777",
+          "function/574550003",
+          "function/599927967",
+          "function/638807044",
+          "function/664449932",
+          "function/717417998",
+          "function/722405802",
+          "function/772606842",
+          "function/823929753",
+          "function/853973218",
+          "function/901078366",
+          "function/941710296",
+          "function/971160936",
+          "function/983564685",
+          "function/1031131035",
+          "function/1058735230"
+        ]
+      },
+      "790616034": {
+        "id": "class/790616034",
+        "kind": "class",
+        "name": "NullError",
+        "size": 429,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/23408725",
+          "field/414662379",
+          "function/143741280",
+          "function/148863126"
+        ]
+      },
+      "793539876": {
+        "id": "class/793539876",
+        "kind": "class",
+        "name": "JSString",
+        "size": 1983,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/186999466",
+          "function/204916897",
+          "function/312768442",
+          "function/347974666",
+          "function/550544609",
+          "function/726979110",
+          "function/773528822",
+          "function/942227822"
+        ]
+      },
+      "803883908": {
+        "id": "class/803883908",
+        "kind": "class",
+        "name": "Duration",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "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"
+        ]
+      },
+      "812154630": {
+        "id": "class/812154630",
+        "kind": "class",
+        "name": "IterableBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/430480673",
+          "function/580865640"
+        ]
+      },
+      "850763763": {
+        "id": "class/850763763",
+        "kind": "class",
+        "name": "_AsyncAwaitCompleter",
+        "size": 1026,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/334228980",
+          "field/368460625",
+          "function/618126497",
+          "function/693686431",
+          "function/852141617",
+          "function/1014074245"
+        ]
+      },
+      "851867060": {
+        "id": "class/851867060",
+        "kind": "class",
+        "name": "JavaScriptObject",
+        "size": 182,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/91425461",
+          "function/380325809"
+        ]
+      },
+      "866150578": {
+        "id": "class/866150578",
+        "kind": "class",
+        "name": "RuntimeError",
+        "size": 123,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/653339731",
+          "function/841192189",
+          "function/848267879"
+        ]
+      },
+      "868658259": {
+        "id": "class/868658259",
+        "kind": "class",
+        "name": "_LinkedHashSetCell",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/295541341",
+          "field/839347349",
+          "field/914365883",
+          "function/411231605"
+        ]
+      },
+      "893386369": {
+        "id": "class/893386369",
+        "kind": "class",
+        "name": "Error",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/302617892",
+          "function/355012434",
+          "function/1042482096"
+        ]
+      },
+      "934351233": {
+        "id": "class/934351233",
+        "kind": "class",
+        "name": "_ZoneFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/303835005",
+          "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/190358771",
+          "function/130041650",
+          "function/271556856"
+        ]
+      },
+      "949988971": {
+        "id": "class/949988971",
+        "kind": "class",
+        "name": "JS_CONST",
+        "size": 32,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/174368900",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/210974499",
+          "function/436170439"
+        ]
+      },
+      "974704527": {
+        "id": "class/974704527",
+        "kind": "class",
+        "name": "RangeError",
+        "size": 1580,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/111931226",
+          "field/649547880",
+          "function/243489700",
+          "function/349997389",
+          "function/427434111",
+          "function/539017937",
+          "function/965257927",
+          "function/1024465827"
+        ]
+      },
+      "975959345": {
+        "id": "class/975959345",
+        "kind": "class",
+        "name": "_HashSetBase",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "991730135": {
+        "id": "class/991730135",
+        "kind": "class",
+        "name": "UnsupportedError",
+        "size": 264,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/140571055",
+          "function/208283907",
+          "function/474133145"
+        ]
+      },
+      "1003011102": {
+        "id": "class/1003011102",
+        "kind": "class",
+        "name": "JSNumber",
+        "size": 967,
+        "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"
+        ]
+      },
+      "1012203707": {
+        "id": "class/1012203707",
+        "kind": "class",
+        "name": "Timer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/367762222"
+        ]
+      },
+      "1019758482": {
+        "id": "class/1019758482",
+        "kind": "class",
+        "name": "ArrayIterator",
+        "size": 574,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/112618843",
+          "field/237146195",
+          "field/504170901",
+          "field/577142640",
+          "function/950708086",
+          "function/977867690",
+          "function/1027535878"
+        ]
+      },
+      "1034266724": {
+        "id": "class/1034266724",
+        "kind": "class",
+        "name": "PlainJavaScriptObject",
+        "size": 38,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "1040168844": {
+        "id": "class/1040168844",
+        "kind": "class",
+        "name": "_StreamIterator",
+        "size": 66,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/51249772",
+          "field/172148876",
+          "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",
+        "name": "_LinkedIdentityHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/120153851"
+        ]
+      },
+      "1059755229": {
+        "id": "class/1059755229",
+        "kind": "class",
+        "name": "Zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/42778158",
+          "function/343621437",
+          "function/460512542",
+          "function/975105635"
+        ]
+      },
+      "1070558590": {
+        "id": "class/1070558590",
+        "kind": "class",
+        "name": "_LinkedCustomHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/398469089",
+          "field/882420015",
+          "field/973809471"
+        ]
+      }
+    },
+    "function": {
+      "538046": {
+        "id": "function/538046",
+        "kind": "function",
+        "name": "_newHashTable",
+        "size": 234,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "702510": {
+        "id": "function/702510",
+        "kind": "function",
+        "name": "_getTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "11804710": {
+        "id": "function/11804710",
+        "kind": "function",
+        "name": "AsyncError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=AsyncError]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "15204906": {
+        "id": "function/15204906",
+        "kind": "function",
+        "name": "call",
+        "size": 1534,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/963665986",
+        "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: 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
+      },
+      "15478302": {
+        "id": "function/15478302",
+        "kind": "function",
+        "name": "toString",
+        "size": 257,
+        "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: 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
+      },
+      "16600620": {
+        "id": "function/16600620",
+        "kind": "function",
+        "name": "_add",
+        "size": 563,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "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
+      },
+      "16930089": {
+        "id": "function/16930089",
+        "kind": "function",
+        "name": "_thenNoZoneRegistration",
+        "size": 253,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<_thenNoZoneRegistration.E>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic Function(_Future.T)"
+          },
+          {
+            "name": "onError",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "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
+      },
+      "18599313": {
+        "id": "function/18599313",
+        "kind": "function",
+        "name": "_addListener",
+        "size": 869,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/181809904"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "listener",
+            "type": "[exact=_FutureListener]",
+            "declaredType": "_FutureListener<dynamic,dynamic>"
+          }
+        ],
+        "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
+      },
+      "21667157": {
+        "id": "function/21667157",
+        "kind": "function",
+        "name": "areAssignableV1",
+        "size": 631,
+        "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=JSArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "allowShorter",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "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
+      },
+      "22227107": {
+        "id": "function/22227107",
+        "kind": "function",
+        "name": "_setError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "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|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "30570662": {
+        "id": "function/30570662",
+        "kind": "function",
+        "name": "_setTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "void Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "31139860": {
+        "id": "function/31139860",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "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
+      },
+      "38646490": {
+        "id": "function/38646490",
+        "kind": "function",
+        "name": "_setTableEntry",
+        "size": 83,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "39412415": {
+        "id": "function/39412415",
+        "kind": "function",
+        "name": "call",
+        "size": 526,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/938184478",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "theError",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "theStackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "39768413": {
+        "id": "function/39768413",
+        "kind": "function",
+        "name": "handlesValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "51167109": {
+        "id": "function/51167109",
+        "kind": "function",
+        "name": "_error",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "AsyncError",
+        "inferredReturnType": "[null|exact=AsyncError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 8,
+        "code": null,
+        "type": "AsyncError Function()",
+        "measurements": null
+      },
+      "53631526": {
+        "id": "function/53631526",
+        "kind": "function",
+        "name": "loadDeferredLibrary",
+        "size": 4011,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [
+          "closure/601101415",
+          "closure/624687097",
+          "closure/844800611",
+          "closure/965562379"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<Null>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "loadId",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "57158184": {
+        "id": "function/57158184",
+        "kind": "function",
+        "name": "inSameErrorZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/185316425",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "otherZone",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function(Zone)",
+        "measurements": null
+      },
+      "63166902": {
+        "id": "function/63166902",
+        "kind": "function",
+        "name": "run",
+        "size": 152,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "run.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "run.R Function()"
+          }
+        ],
+        "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
+      },
+      "64968119": {
+        "id": "function/64968119",
+        "kind": "function",
+        "name": "tryStringifyException",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "66015995": {
+        "id": "function/66015995",
+        "kind": "function",
+        "name": "toString",
+        "size": 102,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/70813553",
+        "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: function(_) {\n  return P.IterableBase_iterableToShortString(this, \"(\", \")\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "67489885": {
+        "id": "function/67489885",
+        "kind": "function",
+        "name": "_scheduleImmediateJsOverride",
+        "size": 382,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/231160067"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "67701762": {
+        "id": "function/67701762",
+        "kind": "function",
+        "name": "_hasTimer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "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": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "68051831": {
+        "id": "function/68051831",
+        "kind": "function",
+        "name": "handleError",
+        "size": 409,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "asyncError",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "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
+      },
+      "72077250": {
+        "id": "function/72077250",
+        "kind": "function",
+        "name": "toString",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "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: function(_) {\n  return \"DeferredLoadException: '\" + this._s + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "79175019": {
+        "id": "function/79175019",
+        "kind": "function",
+        "name": "_isWorker",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "80736041": {
+        "id": "function/80736041",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "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$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
+      },
+      "82702408": {
+        "id": "function/82702408",
+        "kind": "function",
+        "name": "_startMicrotaskLoop",
+        "size": 415,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "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
+      },
+      "91425461": {
+        "id": "function/91425461",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/851867060",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "93381370": {
+        "id": "function/93381370",
+        "kind": "function",
+        "name": "toString",
+        "size": 66,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/542248491",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"Stack Overflow\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Stack Overflow\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "94108092": {
+        "id": "function/94108092",
+        "kind": "function",
+        "name": "_Future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "95599505": {
+        "id": "function/95599505",
+        "kind": "function",
+        "name": "handleWhenComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "96457955": {
+        "id": "function/96457955",
+        "kind": "function",
+        "name": "_completeWithValue",
+        "size": 222,
+        "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": "_Future.T"
+          }
+        ],
+        "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
+      },
+      "98156511": {
+        "id": "function/98156511",
+        "kind": "function",
+        "name": "contains",
+        "size": 534,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "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": "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
+      },
+      "99251871": {
+        "id": "function/99251871",
+        "kind": "function",
+        "name": "iterator",
+        "size": 172,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<_LinkedHashSet.E>",
+        "inferredReturnType": "[exact=_LinkedHashSetIterator]",
+        "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
+      },
+      "99501118": {
+        "id": "function/99501118",
+        "kind": "function",
+        "name": "complete",
+        "size": 325,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/952584796",
+        "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 = 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
+      },
+      "102471615": {
+        "id": "function/102471615",
+        "kind": "function",
+        "name": "complete",
+        "size": 208,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "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 = 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
+      },
+      "108053021": {
+        "id": "function/108053021",
+        "kind": "function",
+        "name": "hasNoField",
+        "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": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "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": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "114607430": {
+        "id": "function/114607430",
+        "kind": "function",
+        "name": "_getBucket",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "List<dynamic> Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "116203851": {
+        "id": "function/116203851",
+        "kind": "function",
+        "name": "toString",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "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: function(_) {\n  return \"Deferred library \" + H.S(this.libraryName) + \" was not loaded.\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "116583875": {
+        "id": "function/116583875",
+        "kind": "function",
+        "name": "_asyncRethrow",
+        "size": 143,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Completer<dynamic>"
+          }
+        ],
+        "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
+      },
+      "116599339": {
+        "id": "function/116599339",
+        "kind": "function",
+        "name": "LinkedHashMap._empty",
+        "size": 126,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/614050497",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>",
+        "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
+      },
+      "120153851": {
+        "id": "function/120153851",
+        "kind": "function",
+        "name": "_LinkedIdentityHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059387371",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedIdentityHashSet]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "123959555": {
+        "id": "function/123959555",
+        "kind": "function",
+        "name": "JsLinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JsLinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "128684509": {
+        "id": "function/128684509",
+        "kind": "function",
+        "name": "LinkedHashSet",
+        "size": 156,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143510818",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "LinkedHashSet<LinkedHashSet.E>",
+        "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)"
+          }
+        ],
+        "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
+      },
+      "130041650": {
+        "id": "function/130041650",
+        "kind": "function",
+        "name": "toString",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "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: function(_) {\n  return \"Bad state: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "130131853": {
+        "id": "function/130131853",
+        "kind": "function",
+        "name": "_contains",
+        "size": 212,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "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": "_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
+      },
+      "136972596": {
+        "id": "function/136972596",
+        "kind": "function",
+        "name": "isFunctionSubtype",
+        "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 anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "139456351": {
+        "id": "function/139456351",
+        "kind": "function",
+        "name": "call",
+        "size": 297,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/637664934",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "k",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "v",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "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": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "143741280": {
+        "id": "function/143741280",
+        "kind": "function",
+        "name": "toString",
+        "size": 214,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "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: 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
+      },
+      "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,
+        "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: function(receiver) {\n  return receiver.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "148863126": {
+        "id": "function/148863126",
+        "kind": "function",
+        "name": "NullError",
+        "size": 130,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NullError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "match",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "150705145": {
+        "id": "function/150705145",
+        "kind": "function",
+        "name": "toString",
+        "size": 222,
+        "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: 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
+      },
+      "160969748": {
+        "id": "function/160969748",
+        "kind": "function",
+        "name": "_rootRunUnary",
+        "size": 323,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRunUnary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "_rootRunUnary.R Function(_rootRunUnary.T)"
+          },
+          {
+            "name": "arg",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_rootRunUnary.T"
+          }
+        ],
+        "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
+      },
+      "162825675": {
+        "id": "function/162825675",
+        "kind": "function",
+        "name": "join",
+        "size": 383,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \"\n\")",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "163884478": {
+        "id": "function/163884478",
+        "kind": "function",
+        "name": "_scheduleImmediateWithSetImmediate",
+        "size": 395,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/817717319"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "163889622": {
+        "id": "function/163889622",
+        "kind": "function",
+        "name": "wrapException",
+        "size": 402,
+        "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: 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
+      },
+      "164775669": {
+        "id": "function/164775669",
+        "kind": "function",
+        "name": "registerCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerCallback.R Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerCallback.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "registerCallback.R Function() Function(registerCallback.R Function())",
+        "measurements": null
+      },
+      "165003912": {
+        "id": "function/165003912",
+        "kind": "function",
+        "name": "_initializeScheduleImmediate",
+        "size": 1331,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/607767883",
+          "closure/913475889"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[subclass=Closure]",
+        "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
+      },
+      "167405219": {
+        "id": "function/167405219",
+        "kind": "function",
+        "name": "toString",
+        "size": 107,
+        "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: function(_) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(this) + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "171287120": {
+        "id": "function/171287120",
+        "kind": "function",
+        "name": "_onError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[null|subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Function Function()",
+        "measurements": null
+      },
+      "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": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "175997763": {
+        "id": "function/175997763",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/245082925",
+        "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$hashCode: function(receiver) {\n  return receiver ? 519018 : 218159;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "176570718": {
+        "id": "function/176570718",
+        "kind": "function",
+        "name": "toString",
+        "size": 101,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/758572498",
+        "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: function(_) {\n  return P.IterableBase_iterableToFullString(this, \"{\", \"}\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "176842663": {
+        "id": "function/176842663",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 480,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "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
+      },
+      "179653294": {
+        "id": "function/179653294",
+        "kind": "function",
+        "name": "DeferredNotLoadedError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=DeferredNotLoadedError]",
+        "parameters": [
+          {
+            "name": "libraryName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "186999466": {
+        "id": "function/186999466",
+        "kind": "function",
+        "name": "length",
+        "size": 72,
+        "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: function(receiver) {\n  return receiver.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "188708191": {
+        "id": "function/188708191",
+        "kind": "function",
+        "name": "_StreamIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_StreamIterator]",
+        "parameters": [
+          {
+            "name": "stream",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Stream<_StreamIterator.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(Stream<_StreamIterator.T>)",
+        "measurements": null
+      },
+      "193787732": {
+        "id": "function/193787732",
+        "kind": "function",
+        "name": "_getRuntimeTypeAsStringV1",
+        "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": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "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)",
+        "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
+      },
+      "203738274": {
+        "id": "function/203738274",
+        "kind": "function",
+        "name": "extractKeys",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "victim",
+            "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": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "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
+      },
+      "205154197": {
+        "id": "function/205154197",
+        "kind": "function",
+        "name": "_registerErrorHandler",
+        "size": 498,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "errorHandler",
+            "type": "[subclass=Closure]",
+            "declaredType": "Function"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "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
+      },
+      "208283907": {
+        "id": "function/208283907",
+        "kind": "function",
+        "name": "UnsupportedError",
+        "size": 98,
+        "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$: function(message) {\n  return new P.UnsupportedError(message);\n}\n",
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "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": "[exact=JSString]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function([Object])",
+        "measurements": null
+      },
+      "210974499": {
+        "id": "function/210974499",
+        "kind": "function",
+        "name": "List.filled",
+        "size": 268,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/959990109",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "List<List.E>",
+        "inferredReturnType": "Union([exact=JSExtendableArray], [exact=JSFixedArray])",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "fill",
+            "type": "Value([exact=JSBool], value: true)",
+            "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
+      },
+      "219348673": {
+        "id": "function/219348673",
+        "kind": "function",
+        "name": "provokeCallErrorOnNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "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
+      },
+      "225159691": {
+        "id": "function/225159691",
+        "kind": "function",
+        "name": "checkNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "Value([exact=JSString], value: \"/\")",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value([exact=JSString], value: \"/\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "229841336": {
+        "id": "function/229841336",
+        "kind": "function",
+        "name": "provokePropertyErrorOn",
+        "size": 255,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "expression",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "230858033": {
+        "id": "function/230858033",
+        "kind": "function",
+        "name": "runtimeTypeToStringV1",
+        "size": 736,
+        "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": "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
+      },
+      "231669663": {
+        "id": "function/231669663",
+        "kind": "function",
+        "name": "call",
+        "size": 470,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/30023746",
+        "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: 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
+      },
+      "243489700": {
+        "id": "function/243489700",
+        "kind": "function",
+        "name": "checkValidRange",
+        "size": 379,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "start",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "end",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "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)",
+        "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
+      },
+      "245651187": {
+        "id": "function/245651187",
+        "kind": "function",
+        "name": "_isNumericKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "248499885": {
+        "id": "function/248499885",
+        "kind": "function",
+        "name": "call",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/741043867",
+        "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  this.$this._completer.completeError$2(this.e, this.st);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "248883787": {
+        "id": "function/248883787",
+        "kind": "function",
+        "name": "call",
+        "size": 240,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/601101415",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "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
+      },
+      "249771766": {
+        "id": "function/249771766",
+        "kind": "function",
+        "name": "call",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/637416128",
+        "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: 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
+      },
+      "253794122": {
+        "id": "function/253794122",
+        "kind": "function",
+        "name": "fromTearOff",
+        "size": 2845,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "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"
+          }
+        ],
+        "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
+      },
+      "259223906": {
+        "id": "function/259223906",
+        "kind": "function",
+        "name": "ExceptionAndStackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ExceptionAndStackTrace]",
+        "parameters": [
+          {
+            "name": "dartException",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "262026503": {
+        "id": "function/262026503",
+        "kind": "function",
+        "name": "_rootRun",
+        "size": 307,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRun.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "_rootRun.R Function()"
+          }
+        ],
+        "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
+      },
+      "263363184": {
+        "id": "function/263363184",
+        "kind": "function",
+        "name": "_asyncCompleteError",
+        "size": 420,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/411607690"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "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
+      },
+      "263798810": {
+        "id": "function/263798810",
+        "kind": "function",
+        "name": "convertDartClosureToJS",
+        "size": 412,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arity",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "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
+      },
+      "264370095": {
+        "id": "function/264370095",
+        "kind": "function",
+        "name": "rawRtiToJsConstructorName",
+        "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": "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"
+          }
+        ],
+        "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
+      },
+      "271556856": {
+        "id": "function/271556856",
+        "kind": "function",
+        "name": "StateError",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StateError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "271674536": {
+        "id": "function/271674536",
+        "kind": "function",
+        "name": "_propagateToListeners",
+        "size": 7272,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/30023746",
+          "closure/69029087",
+          "closure/830531955",
+          "closure/963665986"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          },
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "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
+      },
+      "271854590": {
+        "id": "function/271854590",
+        "kind": "function",
+        "name": "_asyncReturn",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Completer<dynamic>"
+          }
+        ],
+        "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
+      },
+      "272589495": {
+        "id": "function/272589495",
+        "kind": "function",
+        "name": "current",
+        "size": 381,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/347664883",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "272627576": {
+        "id": "function/272627576",
+        "kind": "function",
+        "name": "_StackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_StackTrace]",
+        "parameters": [
+          {
+            "name": "_exception",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "273024378": {
+        "id": "function/273024378",
+        "kind": "function",
+        "name": "forwardCallTo",
+        "size": 1632,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "isIntercepted",
+            "type": "[exact=JSBool]",
+            "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
+      },
+      "275271990": {
+        "id": "function/275271990",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 65,
+        "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: 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
+      },
+      "275957193": {
+        "id": "function/275957193",
+        "kind": "function",
+        "name": "add",
+        "size": 724,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "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
+      },
+      "285148179": {
+        "id": "function/285148179",
+        "kind": "function",
+        "name": "toString",
+        "size": 194,
+        "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: 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
+      },
+      "292195356": {
+        "id": "function/292195356",
+        "kind": "function",
+        "name": "computeFieldNamed",
+        "size": 441,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "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
+      },
+      "292751514": {
+        "id": "function/292751514",
+        "kind": "function",
+        "name": "_prependListeners",
+        "size": 1333,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/827328529"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "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
+      },
+      "292889014": {
+        "id": "function/292889014",
+        "kind": "function",
+        "name": "extractFunctionTypeObjectFromInternal",
+        "size": 294,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "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"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 8,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "301932486": {
+        "id": "function/301932486",
+        "kind": "function",
+        "name": "Exception",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/631051714",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Exception",
+        "inferredReturnType": "[exact=_Exception]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Exception Function([dynamic])",
+        "measurements": null
+      },
+      "302617892": {
+        "id": "function/302617892",
+        "kind": "function",
+        "name": "_objectToString",
+        "size": 227,
+        "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__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
+      },
+      "306374693": {
+        "id": "function/306374693",
+        "kind": "function",
+        "name": "isDartDynamicTypeRti",
+        "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 nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "308590446": {
+        "id": "function/308590446",
+        "kind": "function",
+        "name": "throwExpression",
+        "size": 70,
+        "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: function(ex) {\n  throw H.wrapException(ex);\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "309114439": {
+        "id": "function/309114439",
+        "kind": "function",
+        "name": "invokeClosure",
+        "size": 535,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Function"
+          },
+          {
+            "name": "numberOfArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg3",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg4",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "310457557": {
+        "id": "function/310457557",
+        "kind": "function",
+        "name": "isAssignableV1",
+        "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 anything; writes anything)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "311229745": {
+        "id": "function/311229745",
+        "kind": "function",
+        "name": "call",
+        "size": 1345,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/844800611",
+        "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: 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
+      },
+      "312768442": {
+        "id": "function/312768442",
+        "kind": "function",
+        "name": "substring",
+        "size": 531,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "endIndex",
+            "type": "[null|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
+      },
+      "315128565": {
+        "id": "function/315128565",
+        "kind": "function",
+        "name": "_isStringKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "316732114": {
+        "id": "function/316732114",
+        "kind": "function",
+        "name": "isDartFunctionType",
+        "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 nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "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|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "325386239": {
+        "id": "function/325386239",
+        "kind": "function",
+        "name": "_chainFuture",
+        "size": 641,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/385965656"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[exact=_Future]",
+            "declaredType": "Future<_Future.T>"
+          }
+        ],
+        "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
+      },
+      "326542993": {
+        "id": "function/326542993",
+        "kind": "function",
+        "name": "_loadHunk",
+        "size": 4563,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [
+          "closure/21475",
+          "closure/566195572",
+          "closure/566195573",
+          "closure/566195574",
+          "closure/566195575",
+          "closure/566195576",
+          "closure/581471934"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<Null>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "hunkName",
+            "type": "[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
+      },
+      "330018012": {
+        "id": "function/330018012",
+        "kind": "function",
+        "name": "_asyncAwait",
+        "size": 97,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "void Function(int,dynamic)"
+          }
+        ],
+        "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
+      },
+      "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": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 10,
+        "code": null,
+        "type": "void Function(dynamic)",
+        "measurements": null
+      },
+      "336168458": {
+        "id": "function/336168458",
+        "kind": "function",
+        "name": "scheduleMicrotask",
+        "size": 354,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "336352070": {
+        "id": "function/336352070",
+        "kind": "function",
+        "name": "JsNoSuchMethodError",
+        "size": 238,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JsNoSuchMethodError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "match",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "336424489": {
+        "id": "function/336424489",
+        "kind": "function",
+        "name": "_computeHashCode",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "337937411": {
+        "id": "function/337937411",
+        "kind": "function",
+        "name": "_awaitOnObject",
+        "size": 1004,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/745039293",
+          "closure/745039294"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "338379080": {
+        "id": "function/338379080",
+        "kind": "function",
+        "name": "errorCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "AsyncError",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "AsyncError Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "341046768": {
+        "id": "function/341046768",
+        "kind": "function",
+        "name": "call",
+        "size": 94,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/411607690",
+        "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  this.$this._completeError$2(this.error, this.stackTrace);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "343621437": {
+        "id": "function/343621437",
+        "kind": "function",
+        "name": "_enter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [
+          {
+            "name": "zone",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "Zone Function(Zone)",
+        "measurements": null
+      },
+      "347974666": {
+        "id": "function/347974666",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 440,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "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
+      },
+      "349997389": {
+        "id": "function/349997389",
+        "kind": "function",
+        "name": "RangeError.value",
+        "size": 150,
+        "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([null|exact=JSString], value: \"index\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "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
+      },
+      "350333970": {
+        "id": "function/350333970",
+        "kind": "function",
+        "name": "handleValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "sourceResult",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_FutureListener.S"
+          }
+        ],
+        "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
+      },
+      "351622741": {
+        "id": "function/351622741",
+        "kind": "function",
+        "name": "runGuarded",
+        "size": 424,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "352514166": {
+        "id": "function/352514166",
+        "kind": "function",
+        "name": "_chainCoreFuture",
+        "size": 655,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          },
+          {
+            "name": "target",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "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
+      },
+      "355012434": {
+        "id": "function/355012434",
+        "kind": "function",
+        "name": "safeToString",
+        "size": 292,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=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
+      },
+      "357240896": {
+        "id": "function/357240896",
+        "kind": "function",
+        "name": "inMilliseconds",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "int Function()",
+        "measurements": null
+      },
+      "357627841": {
+        "id": "function/357627841",
+        "kind": "function",
+        "name": "StreamIterator",
+        "size": 122,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/240292734",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "StreamIterator<StreamIterator.T>",
+        "inferredReturnType": "[exact=_StreamIterator]",
+        "parameters": [
+          {
+            "name": "stream",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Stream<StreamIterator.T>"
+          }
+        ],
+        "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
+      },
+      "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": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 10,
+        "code": null,
+        "type": "void Function(Object)",
+        "measurements": null
+      },
+      "364010339": {
+        "id": "function/364010339",
+        "kind": "function",
+        "name": "_rootHandleUncaughtError",
+        "size": 725,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/35711406"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "367762222": {
+        "id": "function/367762222",
+        "kind": "function",
+        "name": "_createTimer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1012203707",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Timer",
+        "inferredReturnType": "[exact=_TimerImpl]",
+        "parameters": [
+          {
+            "name": "duration",
+            "type": "[exact=Duration]",
+            "declaredType": "Duration"
+          },
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Timer Function(Duration,void Function())",
+        "measurements": null
+      },
+      "369614033": {
+        "id": "function/369614033",
+        "kind": "function",
+        "name": "toString",
+        "size": 112,
+        "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: function(receiver) {\n  return P.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "370120278": {
+        "id": "function/370120278",
+        "kind": "function",
+        "name": "hasErrorCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "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": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "370295194": {
+        "id": "function/370295194",
+        "kind": "function",
+        "name": "internalComputeHashCode",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "int Function(dynamic)",
+        "measurements": null
+      },
+      "372037963": {
+        "id": "function/372037963",
+        "kind": "function",
+        "name": "toString",
+        "size": 114,
+        "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": 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
+      },
+      "372361659": {
+        "id": "function/372361659",
+        "kind": "function",
+        "name": "call",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/629631311",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "errorCode",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          },
+          {
+            "name": "result",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "373761717": {
+        "id": "function/373761717",
+        "kind": "function",
+        "name": "_zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "380325809": {
+        "id": "function/380325809",
+        "kind": "function",
+        "name": "toString",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/851867060",
+        "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: function(receiver) {\n  return String(receiver);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "380929608": {
+        "id": "function/380929608",
+        "kind": "function",
+        "name": "_deleteTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "Value([exact=JSString], value: \"<non-identifier-key>\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "381680028": {
+        "id": "function/381680028",
+        "kind": "function",
+        "name": "call",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/561897310",
+        "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  this.$this._completer.complete$1(this.value);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "385444888": {
+        "id": "function/385444888",
+        "kind": "function",
+        "name": "wait",
+        "size": 2927,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [
+          "closure/590764751",
+          "closure/938184478"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<List<wait.T>>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "futures",
+            "type": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), 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
+      },
+      "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": null,
+        "type": "String Function(String,Object)",
+        "measurements": null
+      },
+      "390828239": {
+        "id": "function/390828239",
+        "kind": "function",
+        "name": "bindCallbackGuarded",
+        "size": 235,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [
+          "closure/558424951"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "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": "_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"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic,dynamic,String)",
+        "measurements": null
+      },
+      "394885266": {
+        "id": "function/394885266",
+        "kind": "function",
+        "name": "call",
+        "size": 488,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/590764751",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "wait.T"
+          }
+        ],
+        "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
+      },
+      "399195151": {
+        "id": "function/399195151",
+        "kind": "function",
+        "name": "print",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value([exact=JSString], value: \"Hello, World!\")",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(Object)",
+        "measurements": null
+      },
+      "400990606": {
+        "id": "function/400990606",
+        "kind": "function",
+        "name": "internalSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
+        "measurements": null
+      },
+      "405266426": {
+        "id": "function/405266426",
+        "kind": "function",
+        "name": "iterator",
+        "size": 114,
+        "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 anything)",
+        "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
+      },
+      "407139250": {
+        "id": "function/407139250",
+        "kind": "function",
+        "name": "setRange",
+        "size": 1400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "start",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "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"
+          }
+        ],
+        "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
+      },
+      "411231605": {
+        "id": "function/411231605",
+        "kind": "function",
+        "name": "_LinkedHashSetCell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSetCell]",
+        "parameters": [
+          {
+            "name": "_element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "412886703": {
+        "id": "function/412886703",
+        "kind": "function",
+        "name": "_rethrow",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "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|subclass=Object]",
+            "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
+      },
+      "417406426": {
+        "id": "function/417406426",
+        "kind": "function",
+        "name": "errorZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "418915149": {
+        "id": "function/418915149",
+        "kind": "function",
+        "name": "ioore",
+        "size": 171,
+        "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 anything)",
+        "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
+      },
+      "419713835": {
+        "id": "function/419713835",
+        "kind": "function",
+        "name": "extractFunctionTypeObjectFrom",
+        "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": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "425007214": {
+        "id": "function/425007214",
+        "kind": "function",
+        "name": "==",
+        "size": 75,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "426855684": {
+        "id": "function/426855684",
+        "kind": "function",
+        "name": "call",
+        "size": 159,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/607767883",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "427434111": {
+        "id": "function/427434111",
+        "kind": "function",
+        "name": "RangeError.range",
+        "size": 187,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RangeError]",
+        "parameters": [
+          {
+            "name": "invalidValue",
+            "type": "[subclass=JSInt]",
+            "declaredType": "num"
+          },
+          {
+            "name": "minValue",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "maxValue",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "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
+      },
+      "430193009": {
+        "id": "function/430193009",
+        "kind": "function",
+        "name": "UnknownJsTypeError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=UnknownJsTypeError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "430787578": {
+        "id": "function/430787578",
+        "kind": "function",
+        "name": "_whenCompleteAction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function() Function()",
+        "measurements": null
+      },
+      "431897853": {
+        "id": "function/431897853",
+        "kind": "function",
+        "name": "toString",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "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: function(_) {\n  return \"Exception: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "435575019": {
+        "id": "function/435575019",
+        "kind": "function",
+        "name": "toStringWrapper",
+        "size": 83,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "436170439": {
+        "id": "function/436170439",
+        "kind": "function",
+        "name": "List.generate",
+        "size": 357,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/959990109",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "List<List.E>",
+        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "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
+      },
+      "436231120": {
+        "id": "function/436231120",
+        "kind": "function",
+        "name": "toString",
+        "size": 316,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "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
+      },
+      "437395524": {
+        "id": "function/437395524",
+        "kind": "function",
+        "name": "JSArray.fixed",
+        "size": 264,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "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
+      },
+      "440018750": {
+        "id": "function/440018750",
+        "kind": "function",
+        "name": "toString",
+        "size": 158,
+        "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: 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
+      },
+      "445547062": {
+        "id": "function/445547062",
+        "kind": "function",
+        "name": "S",
+        "size": 505,
+        "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: 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
+      },
+      "448031436": {
+        "id": "function/448031436",
+        "kind": "function",
+        "name": "_newHashTable",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "448227795": {
+        "id": "function/448227795",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 104,
+        "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: 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
+      },
+      "456567103": {
+        "id": "function/456567103",
+        "kind": "function",
+        "name": "JSArray.markFixed",
+        "size": 113,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "458931695": {
+        "id": "function/458931695",
+        "kind": "function",
+        "name": "tooFew",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/737466373",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StateError",
+        "inferredReturnType": "[exact=StateError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "StateError Function()",
+        "measurements": null
+      },
+      "460512542": {
+        "id": "function/460512542",
+        "kind": "function",
+        "name": "current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 18,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "464959827": {
+        "id": "function/464959827",
+        "kind": "function",
+        "name": "toString",
+        "size": 550,
+        "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: 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
+      },
+      "467155193": {
+        "id": "function/467155193",
+        "kind": "function",
+        "name": "isJsFunction",
+        "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": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "469962639": {
+        "id": "function/469962639",
+        "kind": "function",
+        "name": "call",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/913475889",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "473156332": {
+        "id": "function/473156332",
+        "kind": "function",
+        "name": "TypeErrorDecoder",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=TypeErrorDecoder]",
+        "parameters": [
+          {
+            "name": "_arguments",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_argumentsExpr",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_expr",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_method",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_receiver",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_pattern",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(int,int,int,int,int,String)",
+        "measurements": null
+      },
+      "474133145": {
+        "id": "function/474133145",
+        "kind": "function",
+        "name": "toString",
+        "size": 90,
+        "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: function(_) {\n  return \"Unsupported operation: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "476860251": {
+        "id": "function/476860251",
+        "kind": "function",
+        "name": "cspForwardCall",
+        "size": 1409,
+        "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": "isSuperCall",
+            "type": "[exact=JSBool]",
+            "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: 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
+      },
+      "477609809": {
+        "id": "function/477609809",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 112,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/952584796",
+        "children": [],
+        "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|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "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
+      },
+      "478486472": {
+        "id": "function/478486472",
+        "kind": "function",
+        "name": "markFixedList",
+        "size": 109,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "list",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "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
+      },
+      "481547973": {
+        "id": "function/481547973",
+        "kind": "function",
+        "name": "LinkedHashMapCell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LinkedHashMapCell]",
+        "parameters": [
+          {
+            "name": "hashMapCellKey",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "hashMapCellValue",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "482441661": {
+        "id": "function/482441661",
+        "kind": "function",
+        "name": "skip",
+        "size": 93,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterable<JSArray.E>",
+        "inferredReturnType": "[exact=SubListIterable]",
+        "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",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "486797615": {
+        "id": "function/486797615",
+        "kind": "function",
+        "name": "_computeCspNonce",
+        "size": 173,
+        "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 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
+      },
+      "487598887": {
+        "id": "function/487598887",
+        "kind": "function",
+        "name": "runtimeTypeToString",
+        "size": 136,
+        "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": "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
+      },
+      "491418529": {
+        "id": "function/491418529",
+        "kind": "function",
+        "name": "iae",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "argument",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "492708773": {
+        "id": "function/492708773",
+        "kind": "function",
+        "name": "_Future.immediate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "Union([exact=_Future], [null|exact=JSUnmodifiableArray])",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "494094492": {
+        "id": "function/494094492",
+        "kind": "function",
+        "name": "_endIndex",
+        "size": 125,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [],
+        "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
+      },
+      "494583530": {
+        "id": "function/494583530",
+        "kind": "function",
+        "name": "Es6LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/692496355",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=Es6LinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "499330809": {
+        "id": "function/499330809",
+        "kind": "function",
+        "name": "_computeThisScriptFromTrace",
+        "size": 749,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "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": "_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
+      },
+      "499807915": {
+        "id": "function/499807915",
+        "kind": "function",
+        "name": "<",
+        "size": 174,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "num"
+          }
+        ],
+        "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
+      },
+      "501712645": {
+        "id": "function/501712645",
+        "kind": "function",
+        "name": "joinArgumentsV1",
+        "size": 694,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "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
+      },
+      "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": 14,
+        "code": null,
+        "type": "String Function(String,String)",
+        "measurements": null
+      },
+      "508874693": {
+        "id": "function/508874693",
+        "kind": "function",
+        "name": "unmangleAllIdentifiersIfPreservedAnyways",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "513053773": {
+        "id": "function/513053773",
+        "kind": "function",
+        "name": "Future.value",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Future<Future.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "Container([null|exact=JSUnmodifiableArray], element: [empty], length: 0)",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "Future<Future.T> Function([dynamic])",
+        "measurements": null
+      },
+      "519629171": {
+        "id": "function/519629171",
+        "kind": "function",
+        "name": "_removeListeners",
+        "size": 177,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "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
+      },
+      "519947595": {
+        "id": "function/519947595",
+        "kind": "function",
+        "name": "==",
+        "size": 70,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "521874428": {
+        "id": "function/521874428",
+        "kind": "function",
+        "name": "length",
+        "size": 71,
+        "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 anything)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  return this._contents.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "528985088": {
+        "id": "function/528985088",
+        "kind": "function",
+        "name": "getTraceFromException",
+        "size": 400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "exception",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "533906117": {
+        "id": "function/533906117",
+        "kind": "function",
+        "name": "_setPendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "539017937": {
+        "id": "function/539017937",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 65,
+        "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: function() {\n  return \"RangeError\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "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": 4,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "542135743": {
+        "id": "function/542135743",
+        "kind": "function",
+        "name": "_deleteTableEntry",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "Value([exact=JSString], value: \"<non-identifier-key>\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "544746737": {
+        "id": "function/544746737",
+        "kind": "function",
+        "name": "throwConcurrentModificationError",
+        "size": 135,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "collection",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "546320785": {
+        "id": "function/546320785",
+        "kind": "function",
+        "name": "_scheduleImmediate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "550544609": {
+        "id": "function/550544609",
+        "kind": "function",
+        "name": "toString",
+        "size": 65,
+        "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": 0,
+        "code": "toString$0: function(receiver) {\n  return receiver;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "551570860": {
+        "id": "function/551570860",
+        "kind": "function",
+        "name": "invokeOn",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "Object Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "552271305": {
+        "id": "function/552271305",
+        "kind": "function",
+        "name": "_FutureListener.then",
+        "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": "dynamic Function(_FutureListener.S)"
+          },
+          {
+            "name": "errorCallback",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(_Future<_FutureListener.T>,dynamic Function(_FutureListener.S),Function)",
+        "measurements": null
+      },
+      "553149607": {
+        "id": "function/553149607",
+        "kind": "function",
+        "name": "_chainForeignFuture",
+        "size": 1035,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/953553118",
+          "closure/953553119",
+          "closure/953553120"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "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
+      },
+      "553278458": {
+        "id": "function/553278458",
+        "kind": "function",
+        "name": "provokeCallErrorOnUndefined",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "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
+      },
+      "556268777": {
+        "id": "function/556268777",
+        "kind": "function",
+        "name": "_isComplete",
+        "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, static; writes nothing)",
+        "inlinedCount": 5,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "560797298": {
+        "id": "function/560797298",
+        "kind": "function",
+        "name": "checkSubtype",
+        "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": "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": 5,
+        "code": null,
+        "type": "bool Function(Object,String,List<dynamic>,String)",
+        "measurements": null
+      },
+      "564404904": {
+        "id": "function/564404904",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 399,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "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
+      },
+      "565013754": {
+        "id": "function/565013754",
+        "kind": "function",
+        "name": "toString",
+        "size": 56,
+        "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: function(_) {\n  return \"null\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "569040700": {
+        "id": "function/569040700",
+        "kind": "function",
+        "name": "call",
+        "size": 45,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195572",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  return;\n}\n",
+        "type": "Null Function(Object)",
+        "measurements": null
+      },
+      "569040701": {
+        "id": "function/569040701",
+        "kind": "function",
+        "name": "call",
+        "size": 142,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195573",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "569040702": {
+        "id": "function/569040702",
+        "kind": "function",
+        "name": "call",
+        "size": 602,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195574",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "event",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "569040703": {
+        "id": "function/569040703",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195575",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "569040704": {
+        "id": "function/569040704",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195576",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "573775196": {
+        "id": "function/573775196",
+        "kind": "function",
+        "name": "JsLinkedHashMap.es6",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V>",
+        "inferredReturnType": "[subclass=JsLinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V> Function()",
+        "measurements": null
+      },
+      "574550003": {
+        "id": "function/574550003",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 260,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "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|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "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
+      },
+      "580865640": {
+        "id": "function/580865640",
+        "kind": "function",
+        "name": "iterableToFullString",
+        "size": 712,
+        "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": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "leftDelimiter",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "rightDelimiter",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "581270226": {
+        "id": "function/581270226",
+        "kind": "function",
+        "name": "ListIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ListIterator]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[exact=SubListIterable]",
+            "declaredType": "Iterable<ListIterator.E>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(Iterable<ListIterator.E>)",
+        "measurements": null
+      },
+      "585544091": {
+        "id": "function/585544091",
+        "kind": "function",
+        "name": "_newLinkedCell",
+        "size": 620,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "LinkedHashMapCell",
+        "inferredReturnType": "[exact=LinkedHashMapCell]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "586712659": {
+        "id": "function/586712659",
+        "kind": "function",
+        "name": "call",
+        "size": 929,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/830531955",
+        "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: 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
+      },
+      "599927967": {
+        "id": "function/599927967",
+        "kind": "function",
+        "name": "_clearPendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "601638462": {
+        "id": "function/601638462",
+        "kind": "function",
+        "name": "call",
+        "size": 557,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/21475",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "context",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "603355140": {
+        "id": "function/603355140",
+        "kind": "function",
+        "name": "call",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/817717319",
+        "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  this.callback.call$0();\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "606513838": {
+        "id": "function/606513838",
+        "kind": "function",
+        "name": "printToConsole",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "line",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(String)",
+        "measurements": null
+      },
+      "606572177": {
+        "id": "function/606572177",
+        "kind": "function",
+        "name": "ArgumentError.value",
+        "size": 131,
+        "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": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "607704865": {
+        "id": "function/607704865",
+        "kind": "function",
+        "name": "substitute",
+        "size": 479,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "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)",
+        "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
+      },
+      "608925525": {
+        "id": "function/608925525",
+        "kind": "function",
+        "name": "_scheduleImmediateWithTimer",
+        "size": 175,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "611761598": {
+        "id": "function/611761598",
+        "kind": "function",
+        "name": "extractPattern",
+        "size": 1056,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=TypeErrorDecoder]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "613119304": {
+        "id": "function/613119304",
+        "kind": "function",
+        "name": "toString",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "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: function(_) {\n  return H.S(this.error);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "613322203": {
+        "id": "function/613322203",
+        "kind": "function",
+        "name": "handleUncaughtError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "void Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "616072379": {
+        "id": "function/616072379",
+        "kind": "function",
+        "name": "_modified",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "618126497": {
+        "id": "function/618126497",
+        "kind": "function",
+        "name": "complete",
+        "size": 595,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [
+          "closure/561897310"
+        ],
+        "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;\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
+      },
+      "620005669": {
+        "id": "function/620005669",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 282,
+        "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: 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
+      },
+      "632290992": {
+        "id": "function/632290992",
+        "kind": "function",
+        "name": "StackOverflowError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/542248491",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": true,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StackOverflowError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "633677177": {
+        "id": "function/633677177",
+        "kind": "function",
+        "name": "bindCallback",
+        "size": 278,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [
+          "closure/310226650"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bindCallback.R Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "bindCallback.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "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
+      },
+      "635153575": {
+        "id": "function/635153575",
+        "kind": "function",
+        "name": "_asyncStartSync",
+        "size": 170,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "void Function(int,dynamic)"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_AsyncAwaitCompleter<dynamic>"
+          }
+        ],
+        "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
+      },
+      "636061569": {
+        "id": "function/636061569",
+        "kind": "function",
+        "name": "toString",
+        "size": 430,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "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: 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
+      },
+      "636443477": {
+        "id": "function/636443477",
+        "kind": "function",
+        "name": "_getBucket",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<LinkedHashMapCell>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "List<LinkedHashMapCell> Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "638664464": {
+        "id": "function/638664464",
+        "kind": "function",
+        "name": "stringLastIndexOfUnchecked",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "Value([exact=JSString], value: \"/\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "638807044": {
+        "id": "function/638807044",
+        "kind": "function",
+        "name": "_setChained",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(_Future<dynamic>)",
+        "measurements": null
+      },
+      "639806883": {
+        "id": "function/639806883",
+        "kind": "function",
+        "name": "getArguments",
+        "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": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "640815092": {
+        "id": "function/640815092",
+        "kind": "function",
+        "name": "provokePropertyErrorOnNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "642221110": {
+        "id": "function/642221110",
+        "kind": "function",
+        "name": "buildJavaScriptObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "642229693": {
+        "id": "function/642229693",
+        "kind": "function",
+        "name": "call",
+        "size": 143,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/581471934",
+        "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: function() {\n  $.$get$_eventLog().push(\" - download success: \" + this.hunkName);\n  this.completer.complete$1(null);\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "644221207": {
+        "id": "function/644221207",
+        "kind": "function",
+        "name": "scheduleMicrotask",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "649401243": {
+        "id": "function/649401243",
+        "kind": "function",
+        "name": "_newLinkedCell",
+        "size": 495,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_LinkedHashSetCell",
+        "inferredReturnType": "[exact=_LinkedHashSetCell]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "650942169": {
+        "id": "function/650942169",
+        "kind": "function",
+        "name": "_rootRunBinary",
+        "size": 345,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRunBinary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "_rootRunBinary.R Function(_rootRunBinary.T1,_rootRunBinary.T2)"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_rootRunBinary.T1"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "653699436": {
+        "id": "function/653699436",
+        "kind": "function",
+        "name": "JSArray.markGrowable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSExtendableArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(dynamic)",
+        "measurements": null
+      },
+      "658082982": {
+        "id": "function/658082982",
+        "kind": "function",
+        "name": "isFunctionSubtypeV1",
+        "size": 2387,
+        "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": "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
+      },
+      "658921946": {
+        "id": "function/658921946",
+        "kind": "function",
+        "name": "_rootScheduleMicrotask",
+        "size": 239,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "663282901": {
+        "id": "function/663282901",
+        "kind": "function",
+        "name": "_wrapJsFunctionForAsync",
+        "size": 627,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/629631311"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void Function(int,dynamic)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "664449932": {
+        "id": "function/664449932",
+        "kind": "function",
+        "name": "_asyncComplete",
+        "size": 508,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/379635163"
+        ],
+        "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": "_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
+      },
+      "665416673": {
+        "id": "function/665416673",
+        "kind": "function",
+        "name": "[]",
+        "size": 706,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap.V",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=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
+      },
+      "665676035": {
+        "id": "function/665676035",
+        "kind": "function",
+        "name": "isGenericFunctionTypeParameter",
+        "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 nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "667149426": {
+        "id": "function/667149426",
+        "kind": "function",
+        "name": "call",
+        "size": 81,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/379635163",
+        "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  this.$this._completeWithValue$1(this.value);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "668300184": {
+        "id": "function/668300184",
+        "kind": "function",
+        "name": "closureFromTearOff",
+        "size": 368,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "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",
+            "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
+      },
+      "669694580": {
+        "id": "function/669694580",
+        "kind": "function",
+        "name": "internalFindBucketIndex",
+        "size": 296,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "bucket",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "676035370": {
+        "id": "function/676035370",
+        "kind": "function",
+        "name": "_LinkedHashSetIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSetIterator]",
+        "parameters": [
+          {
+            "name": "_set",
+            "type": "[subclass=_LinkedHashSet]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_modifications",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,int)",
+        "measurements": null
+      },
+      "679532174": {
+        "id": "function/679532174",
+        "kind": "function",
+        "name": "argumentErrorValue",
+        "size": 104,
+        "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: function(object) {\n  return new P.ArgumentError(true, object, null, null);\n}\n",
+        "type": "ArgumentError Function(dynamic)",
+        "measurements": null
+      },
+      "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|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([String])",
+        "measurements": null
+      },
+      "684612786": {
+        "id": "function/684612786",
+        "kind": "function",
+        "name": "ReflectionInfo",
+        "size": 562,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "ReflectionInfo",
+        "inferredReturnType": "[null|exact=ReflectionInfo]",
+        "parameters": [
+          {
+            "name": "jsFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "687991937": {
+        "id": "function/687991937",
+        "kind": "function",
+        "name": "_supportsEs6Maps",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "689069465": {
+        "id": "function/689069465",
+        "kind": "function",
+        "name": "isSubtypeV1",
+        "size": 1215,
+        "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": "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
+      },
+      "689271731": {
+        "id": "function/689271731",
+        "kind": "function",
+        "name": "forEach",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "action",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)"
+          }
+        ],
+        "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
+      },
+      "692185405": {
+        "id": "function/692185405",
+        "kind": "function",
+        "name": "_onValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic 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
+      },
+      "693686431": {
+        "id": "function/693686431",
+        "kind": "function",
+        "name": "_AsyncAwaitCompleter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncAwaitCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "698206676": {
+        "id": "function/698206676",
+        "kind": "function",
+        "name": "buildJavaScriptObjectWithNonClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "701409225": {
+        "id": "function/701409225",
+        "kind": "function",
+        "name": "ConcurrentModificationError",
+        "size": 134,
+        "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": "[null|subclass=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
+      },
+      "702114504": {
+        "id": "function/702114504",
+        "kind": "function",
+        "name": "_addHashTableEntry",
+        "size": 299,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "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
+      },
+      "705889064": {
+        "id": "function/705889064",
+        "kind": "function",
+        "name": "==",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; 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
+      },
+      "708419578": {
+        "id": "function/708419578",
+        "kind": "function",
+        "name": "checkArgumentsV1",
+        "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": "substitution",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "checks",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "710611585": {
+        "id": "function/710611585",
+        "kind": "function",
+        "name": "_makeAsyncAwaitCompleter",
+        "size": 179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Completer<_makeAsyncAwaitCompleter.T>",
+        "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
+      },
+      "712365042": {
+        "id": "function/712365042",
+        "kind": "function",
+        "name": "objectHashCode",
+        "size": 227,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "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": "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
+      },
+      "714600619": {
+        "id": "function/714600619",
+        "kind": "function",
+        "name": "diagnoseIndexError",
+        "size": 417,
+        "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": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "717417998": {
+        "id": "function/717417998",
+        "kind": "function",
+        "name": "_Future.immediateError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,[StackTrace])",
+        "measurements": null
+      },
+      "717561594": {
+        "id": "function/717561594",
+        "kind": "function",
+        "name": "requiresPreamble",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "717852932": {
+        "id": "function/717852932",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 62,
+        "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: function() {\n  return \"\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "722405802": {
+        "id": "function/722405802",
+        "kind": "function",
+        "name": "_isChained",
+        "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, static; 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
+      },
+      "725505159": {
+        "id": "function/725505159",
+        "kind": "function",
+        "name": "matchTypeError",
+        "size": 714,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "726344781": {
+        "id": "function/726344781",
+        "kind": "function",
+        "name": "call",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/558424951",
+        "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: function() {\n  return this.$this.runGuarded$1(this.f);\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "726979110": {
+        "id": "function/726979110",
+        "kind": "function",
+        "name": "+",
+        "size": 188,
+        "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|subclass=Object]",
+            "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
+      },
+      "730595126": {
+        "id": "function/730595126",
+        "kind": "function",
+        "name": "toString",
+        "size": 66,
+        "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: function(_) {\n  return \"Throw of null.\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "731794670": {
+        "id": "function/731794670",
+        "kind": "function",
+        "name": "keys",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterable<JsLinkedHashMap.K>",
+        "inferredReturnType": "[exact=LinkedHashMapKeyIterable]",
+        "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
+      },
+      "739160294": {
+        "id": "function/739160294",
+        "kind": "function",
+        "name": "LinkedHashMapKeyIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LinkedHashMapKeyIterable]",
+        "parameters": [
+          {
+            "name": "_map",
+            "type": "[subclass=JsLinkedHashMap]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "741666293": {
+        "id": "function/741666293",
+        "kind": "function",
+        "name": "call",
+        "size": 654,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/965562379",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<dynamic>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
+        "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
+      },
+      "745741399": {
+        "id": "function/745741399",
+        "kind": "function",
+        "name": "toString",
+        "size": 256,
+        "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: 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
+      },
+      "748173162": {
+        "id": "function/748173162",
+        "kind": "function",
+        "name": "handlesComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "749970393": {
+        "id": "function/749970393",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "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$hashCode: function(_) {\n  return H.Primitives_objectHashCode(this);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "751200407": {
+        "id": "function/751200407",
+        "kind": "function",
+        "name": "joinArguments",
+        "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": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic,int)",
+        "measurements": null
+      },
+      "752981084": {
+        "id": "function/752981084",
+        "kind": "function",
+        "name": "_shrOtherPositive",
+        "size": 276,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "num"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; 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
+      },
+      "754498726": {
+        "id": "function/754498726",
+        "kind": "function",
+        "name": "Future.error",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Future<Future.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Future<Future.T> Function(Object,[StackTrace])",
+        "measurements": null
+      },
+      "754771250": {
+        "id": "function/754771250",
+        "kind": "function",
+        "name": "DeferredLoadException",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=DeferredLoadException]",
+        "parameters": [
+          {
+            "name": "_s",
+            "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
+      },
+      "756575134": {
+        "id": "function/756575134",
+        "kind": "function",
+        "name": "contains",
+        "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": "userAgent",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"call stack\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(String,String)",
+        "measurements": null
+      },
+      "756812986": {
+        "id": "function/756812986",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "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
+      },
+      "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": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "764768055": {
+        "id": "function/764768055",
+        "kind": "function",
+        "name": "areAssignableMapsV1",
+        "size": 574,
+        "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": "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
+      },
+      "766396929": {
+        "id": "function/766396929",
+        "kind": "function",
+        "name": "completeError",
+        "size": 471,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/770824752",
+        "children": [],
+        "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|subclass=Object]",
+            "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
+      },
+      "772250195": {
+        "id": "function/772250195",
+        "kind": "function",
+        "name": "checkDeferredIsLoaded",
+        "size": 178,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "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
+      },
+      "772606842": {
+        "id": "function/772606842",
+        "kind": "function",
+        "name": "_chainSource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_Future<dynamic>",
+        "inferredReturnType": "[null|exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "_Future<dynamic> Function()",
+        "measurements": null
+      },
+      "773230206": {
+        "id": "function/773230206",
+        "kind": "function",
+        "name": "_TimerImpl",
+        "size": 372,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [
+          "closure/637416128"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_TimerImpl]",
+        "parameters": [
+          {
+            "name": "milliseconds",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "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": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "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": "Union([subclass=JsLinkedHashMap], [subtype=Iterable])",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "779765691": {
+        "id": "function/779765691",
+        "kind": "function",
+        "name": "_AsyncCompleter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "784650927": {
+        "id": "function/784650927",
+        "kind": "function",
+        "name": "length",
+        "size": 222,
+        "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$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
+      },
+      "788412943": {
+        "id": "function/788412943",
+        "kind": "function",
+        "name": "throwCyclicInit",
+        "size": 119,
+        "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: function(staticName) {\n  throw H.wrapException(new P.CyclicInitializationError(staticName));\n}\n",
+        "type": "void Function(String)",
+        "measurements": null
+      },
+      "789545114": {
+        "id": "function/789545114",
+        "kind": "function",
+        "name": "_writeAll",
+        "size": 563,
+        "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": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "791079680": {
+        "id": "function/791079680",
+        "kind": "function",
+        "name": "selfOf",
+        "size": 82,
+        "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": "[exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_selfOf: function(closure) {\n  return closure._self;\n}\n",
+        "type": "dynamic Function(BoundClosure)",
+        "measurements": null
+      },
+      "793410068": {
+        "id": "function/793410068",
+        "kind": "function",
+        "name": "toString",
+        "size": 124,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "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: function(_) {\n  var t1 = this._message;\n  return t1.length === 0 ? \"Error\" : \"Error: \" + t1;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "795411795": {
+        "id": "function/795411795",
+        "kind": "function",
+        "name": "matchesErrorTest",
+        "size": 181,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "asyncError",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "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
+      },
+      "796179660": {
+        "id": "function/796179660",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "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$hashCode: function(receiver) {\n  return H.Primitives_objectHashCode(receiver);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "797212862": {
+        "id": "function/797212862",
+        "kind": "function",
+        "name": "call",
+        "size": 117,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553118",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "797212863": {
+        "id": "function/797212863",
+        "kind": "function",
+        "name": "call",
+        "size": 176,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553119",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "797212864": {
+        "id": "function/797212864",
+        "kind": "function",
+        "name": "call",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553120",
+        "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  this.target._completeError$2(this.e, this.s);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "798288240": {
+        "id": "function/798288240",
+        "kind": "function",
+        "name": "isNullType",
+        "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
+      },
+      "806420362": {
+        "id": "function/806420362",
+        "kind": "function",
+        "name": "_Exception",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Exception]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([dynamic])",
+        "measurements": null
+      },
+      "808159833": {
+        "id": "function/808159833",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/481500691",
+        "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": 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
+      },
+      "813862273": {
+        "id": "function/813862273",
+        "kind": "function",
+        "name": "internalGet",
+        "size": 384,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap.V",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=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
+      },
+      "814002251": {
+        "id": "function/814002251",
+        "kind": "function",
+        "name": "provokePropertyErrorOnUndefined",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "820195095": {
+        "id": "function/820195095",
+        "kind": "function",
+        "name": "[]=",
+        "size": 1400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "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
+      },
+      "821285776": {
+        "id": "function/821285776",
+        "kind": "function",
+        "name": "getInterceptor",
+        "size": 61,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "getInterceptor: function(object) {\n  return void 0;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "823929753": {
+        "id": "function/823929753",
+        "kind": "function",
+        "name": "_mayComplete",
+        "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, static; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "827571674": {
+        "id": "function/827571674",
+        "kind": "function",
+        "name": "checkInt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "830798781": {
+        "id": "function/830798781",
+        "kind": "function",
+        "name": "_shrBothPositive",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "num"
+          }
+        ],
+        "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
+      },
+      "831655802": {
+        "id": "function/831655802",
+        "kind": "function",
+        "name": "_microtaskLoop",
+        "size": 290,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "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
+      },
+      "834909172": {
+        "id": "function/834909172",
+        "kind": "function",
+        "name": "current",
+        "size": 75,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_LinkedHashSetIterator.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "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
+      },
+      "835692712": {
+        "id": "function/835692712",
+        "kind": "function",
+        "name": "_scheduleAsyncCallback",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "837956997": {
+        "id": "function/837956997",
+        "kind": "function",
+        "name": "==",
+        "size": 64,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$eq: function(_, other) {\n  return this === other;\n}\n",
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "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": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "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": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "void Function(Iterable<dynamic>,[String])",
+        "measurements": null
+      },
+      "848267879": {
+        "id": "function/848267879",
+        "kind": "function",
+        "name": "toString",
+        "size": 81,
+        "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: function(_) {\n  return \"RuntimeError: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "852141617": {
+        "id": "function/852141617",
+        "kind": "function",
+        "name": "completeError",
+        "size": 365,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [
+          "closure/741043867"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "st",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "852972506": {
+        "id": "function/852972506",
+        "kind": "function",
+        "name": "iterator",
+        "size": 108,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/540398347",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<ListIterable.E>",
+        "inferredReturnType": "[exact=ListIterator]",
+        "parameters": [],
+        "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
+      },
+      "853169304": {
+        "id": "function/853169304",
+        "kind": "function",
+        "name": "call",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/181809904",
+        "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  P._Future__propagateToListeners(this.$this, this.listener);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "853973218": {
+        "id": "function/853973218",
+        "kind": "function",
+        "name": "_reverseListeners",
+        "size": 292,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FutureListener<dynamic,dynamic>",
+        "inferredReturnType": "[null|exact=_FutureListener]",
+        "parameters": [
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "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
+      },
+      "854200700": {
+        "id": "function/854200700",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 80,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return receiver & 0x1FFFFFFF;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "860159722": {
+        "id": "function/860159722",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/351911148",
+        "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$hashCode: function(_) {\n  return P.Object.prototype.get$hashCode.call(this, this);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "864228238": {
+        "id": "function/864228238",
+        "kind": "function",
+        "name": "printString",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/238986171",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "869814859": {
+        "id": "function/869814859",
+        "kind": "function",
+        "name": "call",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/69029087",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_Future<dynamic>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "870367819": {
+        "id": "function/870367819",
+        "kind": "function",
+        "name": "_isNumericElement",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "873863767": {
+        "id": "function/873863767",
+        "kind": "function",
+        "name": "objectTypeName",
+        "size": 1680,
+        "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": 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
+      },
+      "878987098": {
+        "id": "function/878987098",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "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": "[null|exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([dynamic])",
+        "measurements": null
+      },
+      "887884267": {
+        "id": "function/887884267",
+        "kind": "function",
+        "name": "_schedulePriorityAsyncCallback",
+        "size": 656,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "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
+      },
+      "888466063": {
+        "id": "function/888466063",
+        "kind": "function",
+        "name": "registerBinaryCallback",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2)"
+          }
+        ],
+        "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
+      },
+      "889342435": {
+        "id": "function/889342435",
+        "kind": "function",
+        "name": "_getTableBucket",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<LinkedHashMapCell>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "890739228": {
+        "id": "function/890739228",
+        "kind": "function",
+        "name": "formatType",
+        "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": "className",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String,List<dynamic>)",
+        "measurements": null
+      },
+      "891910474": {
+        "id": "function/891910474",
+        "kind": "function",
+        "name": "toString",
+        "size": 77,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/476286669",
+        "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: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "895978326": {
+        "id": "function/895978326",
+        "kind": "function",
+        "name": "_AsyncCallbackEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncCallbackEntry]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(void Function())",
+        "measurements": null
+      },
+      "897413385": {
+        "id": "function/897413385",
+        "kind": "function",
+        "name": "_getTableCell",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "LinkedHashMapCell",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "899124813": {
+        "id": "function/899124813",
+        "kind": "function",
+        "name": "cspForwardInterceptedCall",
+        "size": 1830,
+        "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": "isSuperCall",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "name",
+            "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: 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
+      },
+      "899674954": {
+        "id": "function/899674954",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/385965656",
+        "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  P._Future__chainCoreFuture(this.value, this.$this);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "901078366": {
+        "id": "function/901078366",
+        "kind": "function",
+        "name": "_setValue",
+        "size": 0,
+        "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": "_Future.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(_Future.T)",
+        "measurements": null
+      },
+      "904115316": {
+        "id": "function/904115316",
+        "kind": "function",
+        "name": "registerUnaryCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerUnaryCallback.R Function(registerUnaryCallback.T)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerUnaryCallback.R Function(registerUnaryCallback.T)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "registerUnaryCallback.R Function(registerUnaryCallback.T) Function(registerUnaryCallback.R Function(registerUnaryCallback.T))",
+        "measurements": null
+      },
+      "906797235": {
+        "id": "function/906797235",
+        "kind": "function",
+        "name": "receiverOf",
+        "size": 90,
+        "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": "[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
+      },
+      "906921796": {
+        "id": "function/906921796",
+        "kind": "function",
+        "name": "quoteStringForRegExp",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "907920633": {
+        "id": "function/907920633",
+        "kind": "function",
+        "name": "call",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/745039293",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "907920634": {
+        "id": "function/907920634",
+        "kind": "function",
+        "name": "call",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/745039294",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "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
+      },
+      "919469907": {
+        "id": "function/919469907",
+        "kind": "function",
+        "name": "handlesError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "920500080": {
+        "id": "function/920500080",
+        "kind": "function",
+        "name": "_findBucketIndex",
+        "size": 291,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "bucket",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "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
+      },
+      "921486255": {
+        "id": "function/921486255",
+        "kind": "function",
+        "name": "main",
+        "size": 973,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/934372066",
+        "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,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=Iterable]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "parts",
+            "type": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "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
+      },
+      "922840913": {
+        "id": "function/922840913",
+        "kind": "function",
+        "name": "forwardInterceptedCallTo",
+        "size": 1512,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "932567378": {
+        "id": "function/932567378",
+        "kind": "function",
+        "name": "provokeCallErrorOn",
+        "size": 317,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "expression",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "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
+      },
+      "941710296": {
+        "id": "function/941710296",
+        "kind": "function",
+        "name": "_mayAddListener",
+        "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, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "942227822": {
+        "id": "function/942227822",
+        "kind": "function",
+        "name": "lastIndexOf",
+        "size": 359,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "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
+      },
+      "944731702": {
+        "id": "function/944731702",
+        "kind": "function",
+        "name": "toString",
+        "size": 118,
+        "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: function(receiver) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(receiver) + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "947198569": {
+        "id": "function/947198569",
+        "kind": "function",
+        "name": "call",
+        "size": 104,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/827328529",
+        "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  P._Future__propagateToListeners(this.$this, this._box_0.listeners);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "950708086": {
+        "id": "function/950708086",
+        "kind": "function",
+        "name": "current",
+        "size": 63,
+        "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": 0,
+        "code": "get$current: function() {\n  return this._current;\n}\n",
+        "type": "ArrayIterator.E Function()",
+        "measurements": null
+      },
+      "950782810": {
+        "id": "function/950782810",
+        "kind": "function",
+        "name": "length",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "int Function()",
+        "measurements": null
+      },
+      "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": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "962973203": {
+        "id": "function/962973203",
+        "kind": "function",
+        "name": "toString",
+        "size": 63,
+        "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: function(receiver) {\n  return \"null\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "965257927": {
+        "id": "function/965257927",
+        "kind": "function",
+        "name": "checkNotNegative",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          }
+        ],
+        "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
+      },
+      "968241519": {
+        "id": "function/968241519",
+        "kind": "function",
+        "name": "runUnary",
+        "size": 175,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "runUnary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "runUnary.R Function(runUnary.T)"
+          },
+          {
+            "name": "arg",
+            "type": "[null|subclass=Object]",
+            "declaredType": "runUnary.T"
+          }
+        ],
+        "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
+      },
+      "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": 6,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "969026469": {
+        "id": "function/969026469",
+        "kind": "function",
+        "name": "_LinkedHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSet]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "971160936": {
+        "id": "function/971160936",
+        "kind": "function",
+        "name": "_setErrorObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "void Function(AsyncError)",
+        "measurements": null
+      },
+      "975105635": {
+        "id": "function/975105635",
+        "kind": "function",
+        "name": "_leave",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "previous",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes static)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(Zone)",
+        "measurements": null
+      },
+      "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 anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)",
+        "measurements": null
+      },
+      "979933658": {
+        "id": "function/979933658",
+        "kind": "function",
+        "name": "checkMutable",
+        "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": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "983564685": {
+        "id": "function/983564685",
+        "kind": "function",
+        "name": "_hasError",
+        "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, static; 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
+      },
+      "985926244": {
+        "id": "function/985926244",
+        "kind": "function",
+        "name": "IndexError",
+        "size": 257,
+        "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": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"index\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          },
+          {
+            "name": "length",
+            "type": "[null|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
+      },
+      "987295701": {
+        "id": "function/987295701",
+        "kind": "function",
+        "name": "call",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/231160067",
+        "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  this.callback.call$0();\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "987508329": {
+        "id": "function/987508329",
+        "kind": "function",
+        "name": "mapToString",
+        "size": 1049,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/748502014",
+        "children": [
+          "closure/637664934"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "m",
+            "type": "[subclass=JsLinkedHashMap]",
+            "declaredType": "Map<dynamic,dynamic>"
+          }
+        ],
+        "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
+      },
+      "991909617": {
+        "id": "function/991909617",
+        "kind": "function",
+        "name": "toString",
+        "size": 73,
+        "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: function(receiver) {\n  return String(receiver);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "992393187": {
+        "id": "function/992393187",
+        "kind": "function",
+        "name": "_scheduleMicrotask",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())>",
+        "inferredReturnType": "[exact=_ZoneFunction]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()",
+        "measurements": null
+      },
+      "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 anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "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": null,
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "997099929": {
+        "id": "function/997099929",
+        "kind": "function",
+        "name": "JSArray.growable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSExtendableArray]",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(int)",
+        "measurements": null
+      },
+      "998984172": {
+        "id": "function/998984172",
+        "kind": "function",
+        "name": "_isStringElement",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "1002752870": {
+        "id": "function/1002752870",
+        "kind": "function",
+        "name": "_addHashTableEntry",
+        "size": 194,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "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
+      },
+      "1008544093": {
+        "id": "function/1008544093",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/476286669",
+        "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  return this.__js_helper$_length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "1012615396": {
+        "id": "function/1012615396",
+        "kind": "function",
+        "name": "isIdentical",
+        "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)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "1014074245": {
+        "id": "function/1014074245",
+        "kind": "function",
+        "name": "future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<_AsyncAwaitCompleter.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Future<_AsyncAwaitCompleter.T> Function()",
+        "measurements": null
+      },
+      "1014821943": {
+        "id": "function/1014821943",
+        "kind": "function",
+        "name": "Completer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/471305727",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Completer<Completer.T>",
+        "inferredReturnType": "[exact=_AsyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Completer<Completer.T> Function()",
+        "measurements": null
+      },
+      "1015140651": {
+        "id": "function/1015140651",
+        "kind": "function",
+        "name": "_modified",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "1016194181": {
+        "id": "function/1016194181",
+        "kind": "function",
+        "name": "toList",
+        "size": 723,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<SubListIterable.E>",
+        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "parameters": [
+          {
+            "name": "growable",
+            "type": "Value([exact=JSBool], value: false)",
+            "declaredType": "bool"
+          }
+        ],
+        "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
+      },
+      "1024143730": {
+        "id": "function/1024143730",
+        "kind": "function",
+        "name": "JSArray.typed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(dynamic)",
+        "measurements": null
+      },
+      "1024465827": {
+        "id": "function/1024465827",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 649,
+        "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: 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
+      },
+      "1027535878": {
+        "id": "function/1027535878",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 434,
+        "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 anything)",
+        "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
+      },
+      "1030881401": {
+        "id": "function/1030881401",
+        "kind": "function",
+        "name": "hasErrorTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "1031131035": {
+        "id": "function/1031131035",
+        "kind": "function",
+        "name": "_cloneResult",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(_Future<dynamic>)",
+        "measurements": null
+      },
+      "1031826457": {
+        "id": "function/1031826457",
+        "kind": "function",
+        "name": "call",
+        "size": 135,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/624687097",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "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
+      },
+      "1033661873": {
+        "id": "function/1033661873",
+        "kind": "function",
+        "name": "toString",
+        "size": 77,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "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: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1036675160": {
+        "id": "function/1036675160",
+        "kind": "function",
+        "name": "runBinary",
+        "size": 198,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "runBinary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "runBinary.R Function(runBinary.T1,runBinary.T2)"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "runBinary.T1"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "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
+      },
+      "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": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "1047605700": {
+        "id": "function/1047605700",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 512,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "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]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 11,
+        "code": null,
+        "type": "dynamic Function(dynamic,String)",
+        "measurements": null
+      },
+      "1051093947": {
+        "id": "function/1051093947",
+        "kind": "function",
+        "name": "toString",
+        "size": 110,
+        "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: function(_) {\n  return \"Closure '\" + H.Primitives_objectTypeName(this).trim() + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1055095230": {
+        "id": "function/1055095230",
+        "kind": "function",
+        "name": "_errorTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool Function(Object)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(Object) Function()",
+        "measurements": null
+      },
+      "1058735230": {
+        "id": "function/1058735230",
+        "kind": "function",
+        "name": "then",
+        "size": 409,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<then.R>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic Function(_Future.T)"
+          },
+          {
+            "name": "onError",
+            "type": "[null|subclass=Closure]",
+            "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
+      },
+      "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": null,
+        "type": "String Function(List<dynamic>)",
+        "measurements": null
+      },
+      "1060205580": {
+        "id": "function/1060205580",
+        "kind": "function",
+        "name": "_computeThisScript",
+        "size": 278,
+        "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 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
+      },
+      "1065856678": {
+        "id": "function/1065856678",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 117,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "children": [],
+        "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|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "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
+      }
+    },
+    "typedef": {},
+    "field": {
+      "607252": {
+        "id": "field/607252",
+        "kind": "field",
+        "name": "callback",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": "callback\n",
+        "type": "void Function()"
+      },
+      "4524053": {
+        "id": "field/4524053",
+        "kind": "field",
+        "name": "_hasValue",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "_hasValue\n_hasValue\n_hasValue\n",
+        "type": "bool"
+      },
+      "8965675": {
+        "id": "field/8965675",
+        "kind": "field",
+        "name": "thisScript",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "9743357": {
+        "id": "field/9743357",
+        "kind": "field",
+        "name": "_handle",
+        "size": 8,
+        "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
+      },
+      "23408725": {
+        "id": "field/23408725",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "24026359": {
+        "id": "field/24026359",
+        "kind": "field",
+        "name": "error",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "error<\n",
+        "type": "Object"
+      },
+      "29748263": {
+        "id": "field/29748263",
+        "kind": "field",
+        "name": "_lastPriorityCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "42778158": {
+        "id": "field/42778158",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "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"
+      },
+      "55197673": {
+        "id": "field/55197673",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_method\n",
+        "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",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "LinkedHashMapKeyIterator.E"
+      },
+      "60920969": {
+        "id": "field/60920969",
+        "kind": "field",
+        "name": "_first",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_first\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "65712884": {
+        "id": "field/65712884",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_modifications\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "83424460": {
+        "id": "field/83424460",
+        "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",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"isHunkInitialized\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "111931226": {
+        "id": "field/111931226",
+        "kind": "field",
+        "name": "start",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null|subclass=JSUInt32]",
+        "code": "start\n",
+        "type": "num"
+      },
+      "112618843": {
+        "id": "field/112618843",
+        "kind": "field",
+        "name": "_length",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSUInt32]",
+        "code": "_length\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_expr\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "127038922": {
+        "id": "field/127038922",
+        "kind": "field",
+        "name": "_trace",
+        "size": 7,
+        "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
+      },
+      "130629664": {
+        "id": "field/130629664",
+        "kind": "field",
+        "name": "_map",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[subclass=JsLinkedHashMap]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "140571055": {
+        "id": "field/140571055",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "message\n",
+        "type": "String"
+      },
+      "146902950": {
+        "id": "field/146902950",
+        "kind": "field",
+        "name": "noSuchMethodPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "153611669": {
+        "id": "field/153611669",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "172148876": {
+        "id": "field/172148876",
+        "kind": "field",
+        "name": "_stateData",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_stateData\n",
+        "type": "Object"
+      },
+      "180845508": {
+        "id": "field/180845508",
+        "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",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/644348892",
+        "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
+      },
+      "187449514": {
+        "id": "field/187449514",
+        "kind": "field",
+        "name": "state",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "state\n",
+        "type": "int"
+      },
+      "189240247": {
+        "id": "field/189240247",
+        "kind": "field",
+        "name": "undefinedPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "190358771": {
+        "id": "field/190358771",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "message\n",
+        "type": "String"
+      },
+      "190934046": {
+        "id": "field/190934046",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "192950192": {
+        "id": "field/192950192",
+        "kind": "field",
+        "name": "hashMapCellValue",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "hashMapCellValue@\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_rest\n",
+        "type": "dynamic"
+      },
+      "206386055": {
+        "id": "field/206386055",
+        "kind": "field",
+        "name": "jsFunction",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "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
+      },
+      "221913650": {
+        "id": "field/221913650",
+        "kind": "field",
+        "name": "next",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": "next\n",
+        "type": "_AsyncCallbackEntry"
+      },
+      "229586442": {
+        "id": "field/229586442",
+        "kind": "field",
+        "name": "_rest",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_rest\n",
+        "type": "dynamic"
+      },
+      "231027572": {
+        "id": "field/231027572",
+        "kind": "field",
+        "name": "pattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "232791153": {
+        "id": "field/232791153",
+        "kind": "field",
+        "name": "_strings",
+        "size": 21,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_strings\n",
+        "type": "dynamic"
+      },
+      "237146195": {
+        "id": "field/237146195",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSArray]",
+        "code": "_iterable\n",
+        "type": "JSArray<ArrayIterator.E>"
+      },
+      "240049228": {
+        "id": "field/240049228",
+        "kind": "field",
+        "name": "_stateIncomplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "241563122": {
+        "id": "field/241563122",
+        "kind": "field",
+        "name": "SUCCESS",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/237882207",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "244162491": {
+        "id": "field/244162491",
+        "kind": "field",
+        "name": "_loadedLibraries",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|subclass=_LinkedHashSet]",
+        "code": null,
+        "type": "Set<String>"
+      },
+      "249142929": {
+        "id": "field/249142929",
+        "kind": "field",
+        "name": "code",
+        "size": 5,
+        "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",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "children": [],
+        "inferredType": "[null|exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "269363605": {
+        "id": "field/269363605",
+        "kind": "field",
+        "name": "_first",
+        "size": 19,
+        "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
+      },
+      "295541341": {
+        "id": "field/295541341",
+        "kind": "field",
+        "name": "_previous",
+        "size": 10,
+        "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
+      },
+      "302220255": {
+        "id": "field/302220255",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_receiver\n",
+        "type": "dynamic"
+      },
+      "303835005": {
+        "id": "field/303835005",
+        "kind": "field",
+        "name": "zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/934351233",
+        "children": [],
+        "inferredType": "[exact=_RootZone]",
+        "code": null,
+        "type": "_Zone"
+      },
+      "304825305": {
+        "id": "field/304825305",
+        "kind": "field",
+        "name": "result",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=_Future]",
+        "code": "result\n",
+        "type": "_Future<_FutureListener.T>"
+      },
+      "305114389": {
+        "id": "field/305114389",
+        "kind": "field",
+        "name": "_subscription",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "_subscription\n",
+        "type": "StreamSubscription<dynamic>"
+      },
+      "319720392": {
+        "id": "field/319720392",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324980341",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": "callback\n",
+        "type": "Function"
+      },
+      "345425066": {
+        "id": "field/345425066",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_receiver\n",
+        "type": "String"
+      },
+      "346735010": {
+        "id": "field/346735010",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "347443343": {
+        "id": "field/347443343",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_method\n",
+        "type": "String"
+      },
+      "347672432": {
+        "id": "field/347672432",
+        "kind": "field",
+        "name": "_nums",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_nums\n",
+        "type": "dynamic"
+      },
+      "359397062": {
+        "id": "field/359397062",
+        "kind": "field",
+        "name": "_pattern",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_pattern\n",
+        "type": "String"
+      },
+      "366629653": {
+        "id": "field/366629653",
+        "kind": "field",
+        "name": "nullLiteralPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "368460625": {
+        "id": "field/368460625",
+        "kind": "field",
+        "name": "isSync",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "isSync?\n",
+        "type": "bool"
+      },
+      "368849633": {
+        "id": "field/368849633",
+        "kind": "field",
+        "name": "nullLiteralCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "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,
+        "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
+      },
+      "381082880": {
+        "id": "field/381082880",
+        "kind": "field",
+        "name": "nullCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "386221903": {
+        "id": "field/386221903",
+        "kind": "field",
+        "name": "functionCounter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "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",
+        "name": "_equality",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "type": "bool Function(_LinkedCustomHashSet.E,_LinkedCustomHashSet.E)"
+      },
+      "402795939": {
+        "id": "field/402795939",
+        "kind": "field",
+        "name": "start",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "404664193": {
+        "id": "field/404664193",
+        "kind": "field",
+        "name": "input",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "_collection$_length\n",
+        "type": "int"
+      },
+      "412345286": {
+        "id": "field/412345286",
+        "kind": "field",
+        "name": "_unmangledName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/269073412",
+        "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
+      },
+      "414662379": {
+        "id": "field/414662379",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "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
+      },
+      "431266734": {
+        "id": "field/431266734",
+        "kind": "field",
+        "name": "_previous",
+        "size": 22,
+        "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"
+      },
+      "435679137": {
+        "id": "field/435679137",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_modifications\n",
+        "type": "int"
+      },
+      "443749531": {
+        "id": "field/443749531",
+        "kind": "field",
+        "name": "_s",
+        "size": 3,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_s\n",
+        "type": "String"
+      },
+      "446360348": {
+        "id": "field/446360348",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETERS_INFO",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "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
+      },
+      "459351028": {
+        "id": "field/459351028",
+        "kind": "field",
+        "name": "_last",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_last\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "460958077": {
+        "id": "field/460958077",
+        "kind": "field",
+        "name": "_exception",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_exception\n",
+        "type": "dynamic"
+      },
+      "478876039": {
+        "id": "field/478876039",
+        "kind": "field",
+        "name": "hoursPerDay",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "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
+      },
+      "485816538": {
+        "id": "field/485816538",
+        "kind": "field",
+        "name": "_zone",
+        "size": 6,
+        "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
+      },
+      "496557243": {
+        "id": "field/496557243",
+        "kind": "field",
+        "name": "_eventLog",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
+        "code": null,
+        "type": "List<String>"
+      },
+      "499560688": {
+        "id": "field/499560688",
+        "kind": "field",
+        "name": "_map",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "inferredType": "[subclass=JsLinkedHashMap]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "504170901": {
+        "id": "field/504170901",
+        "kind": "field",
+        "name": "_current",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_current\n",
+        "type": "ArrayIterator.E"
+      },
+      "505549528": {
+        "id": "field/505549528",
+        "kind": "field",
+        "name": "indexable",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "indexable\n",
+        "type": "dynamic"
+      },
+      "509005655": {
+        "id": "field/509005655",
+        "kind": "field",
+        "name": "name",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "name\nname\nname\n",
+        "type": "String"
+      },
+      "509651846": {
+        "id": "field/509651846",
+        "kind": "field",
+        "name": "hashMapCellKey",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "hashMapCellKey\n",
+        "type": "dynamic"
+      },
+      "516194057": {
+        "id": "field/516194057",
+        "kind": "field",
+        "name": "maskTestError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "522978319": {
+        "id": "field/522978319",
+        "kind": "field",
+        "name": "_toStringVisiting",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "children": [],
+        "inferredType": "Container([exact=JSExtendableArray], element: Union([subclass=JsLinkedHashMap], [subtype=Iterable]), length: null)",
+        "code": null,
+        "type": "List<dynamic>"
+      },
+      "525450391": {
+        "id": "field/525450391",
+        "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",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JS_CONST]",
+        "code": null,
+        "type": "JS_CONST",
+        "const": true,
+        "initializer": "constant/586866313"
+      },
+      "563519506": {
+        "id": "field/563519506",
+        "kind": "field",
+        "name": "isJsInteropTypeArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "577142640": {
+        "id": "field/577142640",
+        "kind": "field",
+        "name": "_index",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "_index\n",
+        "type": "int"
+      },
+      "586155906": {
+        "id": "field/586155906",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "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>"
+      },
+      "627383241": {
+        "id": "field/627383241",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "635439616": {
+        "id": "field/635439616",
+        "kind": "field",
+        "name": "_cell",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_cell\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "635780781": {
+        "id": "field/635780781",
+        "kind": "field",
+        "name": "_cell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": null,
+        "type": "LinkedHashMapCell"
+      },
+      "637404994": {
+        "id": "field/637404994",
+        "kind": "field",
+        "name": "INITIALIZE_LOADED_HUNK",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"initializeLoadedHunk\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "639289778": {
+        "id": "field/639289778",
+        "kind": "field",
+        "name": "_nextCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "645317327": {
+        "id": "field/645317327",
+        "kind": "field",
+        "name": "notClosurePattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_collection$_current\n",
+        "type": "_LinkedHashSetIterator.E"
+      },
+      "646744185": {
+        "id": "field/646744185",
+        "kind": "field",
+        "name": "undefinedLiteralCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null|subclass=JSInt]",
+        "code": "end\n",
+        "type": "num"
+      },
+      "650081226": {
+        "id": "field/650081226",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+        "code": "message\n",
+        "type": "dynamic"
+      },
+      "650800220": {
+        "id": "field/650800220",
+        "kind": "field",
+        "name": "_nums",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_nums\n",
+        "type": "dynamic"
+      },
+      "653339731": {
+        "id": "field/653339731",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
+        "code": "message\n",
+        "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",
+        "name": "function",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/934351233",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_strings\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "stackTrace\n",
+        "type": "StackTrace"
+      },
+      "708528118": {
+        "id": "field/708528118",
+        "kind": "field",
+        "name": "stateWhencomplete",
+        "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",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "710218156": {
+        "id": "field/710218156",
+        "kind": "field",
+        "name": "_tick",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_tick\n",
+        "type": "int"
+      },
+      "714493219": {
+        "id": "field/714493219",
+        "kind": "field",
+        "name": "errorCallback",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": "errorCallback\n",
+        "type": "Function"
+      },
+      "717638099": {
+        "id": "field/717638099",
+        "kind": "field",
+        "name": "_MAX_INT32",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "727752212": {
+        "id": "field/727752212",
+        "kind": "field",
+        "name": "invalidValue",
+        "size": 39,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "invalidValue\ninvalidValue\ninvalidValue\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "__js_helper$_modifications\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "message\nmessage\nmessage\n",
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_resultOrListeners<\n",
+        "type": "dynamic"
+      },
+      "790173099": {
+        "id": "field/790173099",
+        "kind": "field",
+        "name": "millisecondsPerSecond",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "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
+      },
+      "795691913": {
+        "id": "field/795691913",
+        "kind": "field",
+        "name": "_last",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_last\n",
+        "type": "LinkedHashMapCell"
+      },
+      "795932009": {
+        "id": "field/795932009",
+        "kind": "field",
+        "name": "_set",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[subclass=_LinkedHashSet]",
+        "code": "_set\n",
+        "type": "dynamic"
+      },
+      "805748014": {
+        "id": "field/805748014",
+        "kind": "field",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "817840529": {
+        "id": "field/817840529",
+        "kind": "field",
+        "name": "_arguments",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_arguments\n",
+        "type": "int"
+      },
+      "818740436": {
+        "id": "field/818740436",
+        "kind": "field",
+        "name": "_length",
+        "size": 20,
+        "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,
+        "type": "int"
+      },
+      "826222890": {
+        "id": "field/826222890",
+        "kind": "field",
+        "name": "libraryName",
+        "size": 12,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "libraryName\n",
+        "type": "String"
+      },
+      "839347349": {
+        "id": "field/839347349",
+        "kind": "field",
+        "name": "_next",
+        "size": 6,
+        "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
+      },
+      "840751619": {
+        "id": "field/840751619",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Object"
+      },
+      "842452872": {
+        "id": "field/842452872",
+        "kind": "field",
+        "name": "FUTURE_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "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
+      },
+      "882420015": {
+        "id": "field/882420015",
+        "kind": "field",
+        "name": "_hasher",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "type": "int Function(_LinkedCustomHashSet.E)"
+      },
+      "889385105": {
+        "id": "field/889385105",
+        "kind": "field",
+        "name": "_once",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [],
+        "inferredType": "Value([exact=JSBool], value: true)",
+        "code": "_once\n",
+        "type": "bool"
+      },
+      "906853360": {
+        "id": "field/906853360",
+        "kind": "field",
+        "name": "_argumentsExpr",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_argumentsExpr\n",
+        "type": "int"
+      },
+      "907727246": {
+        "id": "field/907727246",
+        "kind": "field",
+        "name": "_loadingLibraries",
+        "size": 0,
+        "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>>"
+      },
+      "908476008": {
+        "id": "field/908476008",
+        "kind": "field",
+        "name": "printToZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "void Function(String)"
+      },
+      "909027003": {
+        "id": "field/909027003",
+        "kind": "field",
+        "name": "dartException",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "dartException\n",
+        "type": "dynamic"
+      },
+      "911662921": {
+        "id": "field/911662921",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_INDEX",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "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
+      },
+      "914365883": {
+        "id": "field/914365883",
+        "kind": "field",
+        "name": "_element",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_element\n",
+        "type": "dynamic"
+      },
+      "914591285": {
+        "id": "field/914591285",
+        "kind": "field",
+        "name": "_duration",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "926265914": {
+        "id": "field/926265914",
+        "kind": "field",
+        "name": "deferredLoadHook",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "void Function()"
+      },
+      "927731351": {
+        "id": "field/927731351",
+        "kind": "field",
+        "name": "_statePendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "931441116": {
+        "id": "field/931441116",
+        "kind": "field",
+        "name": "_isInCallbackLoop",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "932611099": {
+        "id": "field/932611099",
+        "kind": "field",
+        "name": "_scheduleImmediateClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": null,
+        "type": "Function"
+      },
+      "936474054": {
+        "id": "field/936474054",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "944915314": {
+        "id": "field/944915314",
+        "kind": "field",
+        "name": "variableName",
+        "size": 13,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "variableName\n",
+        "type": "String"
+      },
+      "951952385": {
+        "id": "field/951952385",
+        "kind": "field",
+        "name": "minutesPerHour",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "952591811": {
+        "id": "field/952591811",
+        "kind": "field",
+        "name": "_lastCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "954188953": {
+        "id": "field/954188953",
+        "kind": "field",
+        "name": "length",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "length>\n",
+        "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",
+        "name": "_validKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": null,
+        "type": "bool Function(dynamic)"
+      },
+      "978504898": {
+        "id": "field/978504898",
+        "kind": "field",
+        "name": "_state",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_state<\n",
+        "type": "int"
+      },
+      "996559228": {
+        "id": "field/996559228",
+        "kind": "field",
+        "name": "_next",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_next\n",
+        "type": "LinkedHashMapCell"
+      },
+      "996584734": {
+        "id": "field/996584734",
+        "kind": "field",
+        "name": "microsecondsPerHour",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "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
+      },
+      "1012307238": {
+        "id": "field/1012307238",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_receiver\n",
+        "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",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "stackTrace\n",
+        "type": "StackTrace"
+      },
+      "1025923114": {
+        "id": "field/1025923114",
+        "kind": "field",
+        "name": "future",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/770824752",
+        "children": [],
+        "inferredType": "[exact=_Future]",
+        "code": "future\nfuture\n",
+        "type": "_Future<_Completer.T>"
+      },
+      "1047452024": {
+        "id": "field/1047452024",
+        "kind": "field",
+        "name": "_contents",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_contents<\n",
+        "type": "String"
+      },
+      "1051861725": {
+        "id": "field/1051861725",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "1055298109": {
+        "id": "field/1055298109",
+        "kind": "field",
+        "name": "_nextListener",
+        "size": 14,
+        "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
+      }
+    },
+    "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",
+        "kind": "constant",
+        "name": null,
+        "size": 49,
+        "code": "C.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",
+        "kind": "constant",
+        "name": null,
+        "size": 35,
+        "outputUnit": "outputUnit/669725655",
+        "code": "C.C__RootZone = new P._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",
+        "kind": "constant",
+        "name": null,
+        "size": 43,
+        "code": "C.JSString_methods = J.JSString.prototype;\n"
+      }
+    },
+    "closure": {
+      "21475": {
+        "id": "closure/21475",
+        "kind": "closure",
+        "name": "_loadHunk_failure",
+        "size": 621,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/601638462"
+      },
+      "30023746": {
+        "id": "closure/30023746",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleValueCallback",
+        "size": 537,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/869814859"
+      },
+      "181809904": {
+        "id": "closure/181809904",
+        "kind": "closure",
+        "name": "_Future__addListener_closure",
+        "size": 149,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/18599313",
+        "function": "function/853169304"
+      },
+      "231160067": {
+        "id": "closure/231160067",
+        "kind": "closure",
+        "name": "_AsyncRun__scheduleImmediateJsOverride_internalCallback",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/67489885",
+        "function": "function/987295701"
+      },
+      "310226650": {
+        "id": "closure/310226650",
+        "kind": "closure",
+        "name": "_RootZone_bindCallback_closure",
+        "size": 179,
+        "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"
+      },
+      "385965656": {
+        "id": "closure/385965656",
+        "kind": "closure",
+        "name": "_Future__chainFuture_closure",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/325386239",
+        "function": "function/899674954"
+      },
+      "411607690": {
+        "id": "closure/411607690",
+        "kind": "closure",
+        "name": "_Future__asyncCompleteError_closure",
+        "size": 155,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/263363184",
+        "function": "function/341046768"
+      },
+      "558424951": {
+        "id": "closure/558424951",
+        "kind": "closure",
+        "name": "_RootZone_bindCallbackGuarded_closure",
+        "size": 122,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040700"
+      },
+      "566195573": {
+        "id": "closure/566195573",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 188,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040701"
+      },
+      "566195574": {
+        "id": "closure/566195574",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 660,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040702"
+      },
+      "566195575": {
+        "id": "closure/566195575",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040703"
+      },
+      "566195576": {
+        "id": "closure/566195576",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040704"
+      },
+      "581471934": {
+        "id": "closure/581471934",
+        "kind": "closure",
+        "name": "_loadHunk_success",
+        "size": 200,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/642229693"
+      },
+      "590764751": {
+        "id": "closure/590764751",
+        "kind": "closure",
+        "name": "Future_wait_closure",
+        "size": 651,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/385444888",
+        "function": "function/394885266"
+      },
+      "601101415": {
+        "id": "closure/601101415",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_loadAndInitialize_closure",
+        "size": 321,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/248883787"
+      },
+      "607767883": {
+        "id": "closure/607767883",
+        "kind": "closure",
+        "name": "_AsyncRun__initializeScheduleImmediate_internalCallback",
+        "size": 204,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/165003912",
+        "function": "function/426855684"
+      },
+      "624687097": {
+        "id": "closure/624687097",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_closure",
+        "size": 219,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/1031826457"
+      },
+      "629631311": {
+        "id": "closure/629631311",
+        "kind": "closure",
+        "name": "_wrapJsFunctionForAsync_closure",
+        "size": 139,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/663282901",
+        "function": "function/372361659"
+      },
+      "637416128": {
+        "id": "closure/637416128",
+        "kind": "closure",
+        "name": "_TimerImpl_internalCallback",
+        "size": 191,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/773230206",
+        "function": "function/249771766"
+      },
+      "637664934": {
+        "id": "closure/637664934",
+        "kind": "closure",
+        "name": "MapBase_mapToString_closure",
+        "size": 349,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/337937411",
+        "function": "function/907920633"
+      },
+      "745039294": {
+        "id": "closure/745039294",
+        "kind": "closure",
+        "name": "_awaitOnObject_closure",
+        "size": 183,
+        "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,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/163884478",
+        "function": "function/603355140"
+      },
+      "827328529": {
+        "id": "closure/827328529",
+        "kind": "closure",
+        "name": "_Future__prependListeners_closure",
+        "size": 155,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/292751514",
+        "function": "function/947198569"
+      },
+      "830531955": {
+        "id": "closure/830531955",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleError",
+        "size": 990,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/586712659"
+      },
+      "844800611": {
+        "id": "closure/844800611",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_initializeSomeLoadedHunks",
+        "size": 1466,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/311229745"
+      },
+      "913475889": {
+        "id": "closure/913475889",
+        "kind": "closure",
+        "name": "_AsyncRun__initializeScheduleImmediate_closure",
+        "size": 270,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/165003912",
+        "function": "function/469962639"
+      },
+      "938184478": {
+        "id": "closure/938184478",
+        "kind": "closure",
+        "name": "Future_wait_handleError",
+        "size": 597,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/385444888",
+        "function": "function/39412415"
+      },
+      "953553118": {
+        "id": "closure/953553118",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 162,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212862"
+      },
+      "953553119": {
+        "id": "closure/953553119",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 230,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212863"
+      },
+      "953553120": {
+        "id": "closure/953553120",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212864"
+      },
+      "963665986": {
+        "id": "closure/963665986",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleWhenCompleteCallback",
+        "size": 1604,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/15204906"
+      },
+      "965562379": {
+        "id": "closure/965562379",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_loadAndInitialize",
+        "size": 758,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/741666293"
+      }
+    }
+  },
+  "holding": {
+    "field/8965675": [
+      {
+        "id": "function/1060205580",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/79943715": [
+      {
+        "id": "function/229841336",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/126292751": [
+      {
+        "id": "function/486797615",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/146902950": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/642221110",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/642221110",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/169031325": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/189240247": [
+      {
+        "id": "function/229841336",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/244162491": [
+      {
+        "id": "function/128684509",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/261042870": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/337959975": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/814002251",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/814002251",
+        "mask": "null"
+      }
+    ],
+    "field/366629653": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/640815092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/640815092",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/368849633": [
+      {
+        "id": "function/219348673",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/219348673",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/381082880": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/496557243": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/522978319": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/645317327": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/698206676",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/698206676",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/646744185": [
+      {
+        "id": "function/553278458",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/553278458",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/907727246": [
+      {
+        "id": "function/116599339",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/932611099": [
+      {
+        "id": "function/165003912",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "function/538046": [
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/542135743",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/15204906": [
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/430787578",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/63166902",
+        "mask": "null"
+      },
+      {
+        "id": "function/869814859",
+        "mask": "null"
+      },
+      {
+        "id": "function/95599505",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95599505",
+        "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"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/873863767",
+        "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/229586442",
+        "mask": "null"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/336424489",
+        "mask": "[subclass=_LinkedHashSet]"
+      },
+      {
+        "id": "function/448031436",
+        "mask": "null"
+      },
+      {
+        "id": "function/649401243",
+        "mask": "null"
+      },
+      {
+        "id": "function/920500080",
+        "mask": "[subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/16930089": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/18599313",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/552271305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/552271305",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/18599313": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/18599313",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      },
+      {
+        "id": "function/853169304",
+        "mask": "null"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "null"
+      }
+    ],
+    "function/21667157": [
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/22227107": [
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "inlined"
+      }
+    ],
+    "function/31139860": [
+      {
+        "id": "field/410301694",
+        "mask": "null"
+      }
+    ],
+    "function/39412415": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/53631526": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031826457",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/210974499",
+        "mask": "null"
+      },
+      {
+        "id": "function/311229745",
+        "mask": "null"
+      },
+      {
+        "id": "function/385444888",
+        "mask": "null"
+      },
+      {
+        "id": "function/436170439",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/741666293",
+        "mask": "null"
+      }
+    ],
+    "function/57158184": [
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      }
+    ],
+    "function/63166902": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/262026503",
+        "mask": "null"
+      }
+    ],
+    "function/66015995": [
+      {
+        "id": "function/430480673",
+        "mask": "null"
+      }
+    ],
+    "function/67489885": [
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/987295701",
+        "mask": "null"
+      }
+    ],
+    "function/67701762": [
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      }
+    ],
+    "function/68051831": [
+      {
+        "id": "field/1023319897",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/714493219",
+        "mask": "null"
+      },
+      {
+        "id": "function/1036675160",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/553851206",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/72077250": [
+      {
+        "id": "field/443749531",
+        "mask": "null"
+      }
+    ],
+    "function/79175019": [
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      }
+    ],
+    "function/80270395": [
+      {
+        "id": "field/154746101",
+        "mask": "null"
+      }
+    ],
+    "function/80736041": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/81057679": [
+      {
+        "id": "function/63166902",
+        "mask": "null"
+      }
+    ],
+    "function/82702408": [
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/931441116",
+        "mask": "null"
+      },
+      {
+        "id": "field/932611099",
+        "mask": "null"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "null"
+      },
+      {
+        "id": "function/82702408",
+        "mask": "null"
+      },
+      {
+        "id": "function/831655802",
+        "mask": "null"
+      }
+    ],
+    "function/94108092": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/95599505": [
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/430787578",
+        "mask": "inlined"
+      }
+    ],
+    "function/96457955": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      }
+    ],
+    "function/98156511": [
+      {
+        "id": "field/347672432",
+        "mask": "null"
+      },
+      {
+        "id": "field/676869951",
+        "mask": "null"
+      },
+      {
+        "id": "function/130131853",
+        "mask": "null"
+      },
+      {
+        "id": "function/702510",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702510",
+        "mask": "null"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "null"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "null"
+      }
+    ],
+    "function/99251871": [
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/60920969",
+        "mask": "null"
+      },
+      {
+        "id": "field/635439616",
+        "mask": "null"
+      },
+      {
+        "id": "function/676035370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/676035370",
+        "mask": "null"
+      }
+    ],
+    "function/99501118": [
+      {
+        "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",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      }
+    ],
+    "function/102471615": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      }
+    ],
+    "function/108053021": [
+      {
+        "id": "function/722993348",
+        "mask": "inlined"
+      }
+    ],
+    "function/116203851": [
+      {
+        "id": "field/826222890",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/116583875": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/852141617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/116599339": [
+      {
+        "id": "function/123959555",
+        "mask": "null"
+      },
+      {
+        "id": "function/494583530",
+        "mask": "null"
+      },
+      {
+        "id": "function/573775196",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/573775196",
+        "mask": "null"
+      },
+      {
+        "id": "function/687991937",
+        "mask": "null"
+      }
+    ],
+    "function/128684509": [
+      {
+        "id": "function/120153851",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120153851",
+        "mask": "null"
+      },
+      {
+        "id": "function/969026469",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/969026469",
+        "mask": "null"
+      }
+    ],
+    "function/130041650": [
+      {
+        "id": "field/190358771",
+        "mask": "null"
+      }
+    ],
+    "function/130131853": [
+      {
+        "id": "field/229586442",
+        "mask": "null"
+      },
+      {
+        "id": "function/114607430",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/114607430",
+        "mask": "null"
+      },
+      {
+        "id": "function/336424489",
+        "mask": "[subclass=_LinkedHashSet]"
+      },
+      {
+        "id": "function/920500080",
+        "mask": "[subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/139456351": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      }
+    ],
+    "function/143741280": [
+      {
+        "id": "field/23408725",
+        "mask": "null"
+      },
+      {
+        "id": "field/414662379",
+        "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])"
+      }
+    ],
+    "function/150705145": [
+      {
+        "id": "field/944915314",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/160969748": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/162825675": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/162872908": [
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      }
+    ],
+    "function/163884478": [
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/603355140",
+        "mask": "null"
+      }
+    ],
+    "function/163889622": [
+      {
+        "id": "function/435575019",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/165003912": [
+      {
+        "id": "function/163884478",
+        "mask": "null"
+      },
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/426855684",
+        "mask": "null"
+      },
+      {
+        "id": "function/469962639",
+        "mask": "null"
+      },
+      {
+        "id": "function/608925525",
+        "mask": "null"
+      },
+      {
+        "id": "function/67489885",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      }
+    ],
+    "function/167405219": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/176570718": [
+      {
+        "id": "function/580865640",
+        "mask": "null"
+      }
+    ],
+    "function/176842663": [
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/635439616",
+        "mask": "null"
+      },
+      {
+        "id": "field/646361925",
+        "mask": "null"
+      },
+      {
+        "id": "field/65712884",
+        "mask": "null"
+      },
+      {
+        "id": "field/795932009",
+        "mask": "null"
+      },
+      {
+        "id": "field/839347349",
+        "mask": "null"
+      },
+      {
+        "id": "field/914365883",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/193787732": [
+      {
+        "id": "function/264370095",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      }
+    ],
+    "function/203738274": [
+      {
+        "id": "function/456567103",
+        "mask": "null"
+      }
+    ],
+    "function/204916897": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/714600619",
+        "mask": "null"
+      }
+    ],
+    "function/205154197": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/553851206",
+        "mask": "null"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      },
+      {
+        "id": "function/888466063",
+        "mask": "null"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "null"
+      }
+    ],
+    "function/210974499": [
+      {
+        "id": "function/1024143730",
+        "mask": "null"
+      },
+      {
+        "id": "function/437395524",
+        "mask": "null"
+      },
+      {
+        "id": "function/653699436",
+        "mask": "null"
+      },
+      {
+        "id": "function/997099929",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/997099929",
+        "mask": "null"
+      }
+    ],
+    "function/221934998": [
+      {
+        "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",
+        "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/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/350333970",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/350333970",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/692185405",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/243489700": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/427434111",
+        "mask": "null"
+      }
+    ],
+    "function/248499885": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      }
+    ],
+    "function/248883787": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      }
+    ],
+    "function/249771766": [
+      {
+        "id": "field/710218156",
+        "mask": "null"
+      },
+      {
+        "id": "field/9743357",
+        "mask": "null"
+      }
+    ],
+    "function/253794122": [
+      {
+        "id": "field/259683855",
+        "mask": "null"
+      },
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "function/143567266",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/143567266",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/273024378",
+        "mask": "null"
+      },
+      {
+        "id": "function/275681184",
+        "mask": "null"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "null"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "null"
+      },
+      {
+        "id": "function/684612786",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      },
+      {
+        "id": "function/906797235",
+        "mask": "null"
+      }
+    ],
+    "function/262026503": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/263363184": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/341046768",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      }
+    ],
+    "function/263798810": [
+      {
+        "id": "function/309114439",
+        "mask": "null"
+      }
+    ],
+    "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"
+      },
+      {
+        "id": "function/148863126",
+        "mask": "null"
+      },
+      {
+        "id": "function/282990063",
+        "mask": "null"
+      },
+      {
+        "id": "function/336352070",
+        "mask": "null"
+      },
+      {
+        "id": "function/430193009",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/430193009",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/632290992",
+        "mask": "inlined"
+      },
+      {
+        "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"
+      }
+    ],
+    "function/271674536": [
+      {
+        "id": "field/1023319897",
+        "mask": "null"
+      },
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/187449514",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/15204906",
+        "mask": "null"
+      },
+      {
+        "id": "function/231669663",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/39768413",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/39768413",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/586712659",
+        "mask": "null"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "null"
+      },
+      {
+        "id": "function/748173162",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/748173162",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      },
+      {
+        "id": "function/919469907",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/919469907",
+        "mask": "null"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "null"
+      }
+    ],
+    "function/271854590": [
+      {
+        "id": "function/102471615",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/618126497",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/272589495": [
+      {
+        "id": "field/261042870",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/273024378": [
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "field/435101137",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/292195356",
+        "mask": "null"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/476860251",
+        "mask": "null"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/922840913",
+        "mask": "null"
+      }
+    ],
+    "function/275957193": [
+      {
+        "id": "field/347672432",
+        "mask": "null"
+      },
+      {
+        "id": "field/676869951",
+        "mask": "null"
+      },
+      {
+        "id": "function/1002752870",
+        "mask": "null"
+      },
+      {
+        "id": "function/16600620",
+        "mask": "null"
+      },
+      {
+        "id": "function/448031436",
+        "mask": "null"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "null"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "null"
+      }
+    ],
+    "function/292195356": [
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/292751514": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/292751514",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "null"
+      },
+      {
+        "id": "function/947198569",
+        "mask": "null"
+      }
+    ],
+    "function/292889014": [
+      {
+        "id": "function/275681184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/275681184",
+        "mask": "null"
+      }
+    ],
+    "function/301932486": [
+      {
+        "id": "function/806420362",
+        "mask": "inlined"
+      }
+    ],
+    "function/302617892": [
+      {
+        "id": "function/1051093947",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/308590446": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      }
+    ],
+    "function/309114439": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/301932486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/301932486",
+        "mask": "null"
+      },
+      {
+        "id": "function/806420362",
+        "mask": "null"
+      }
+    ],
+    "function/311229745": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "function/162825675",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "null"
+      }
+    ],
+    "function/312768442": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/349997389",
+        "mask": "null"
+      },
+      {
+        "id": "function/827571674",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/827571674",
+        "mask": "null"
+      }
+    ],
+    "function/325386239": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/553149607",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/899674954",
+        "mask": "null"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "null"
+      }
+    ],
+    "function/326542993": [
+      {
+        "id": "field/126292751",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "field/8965675",
+        "mask": "null"
+      },
+      {
+        "id": "field/907727246",
+        "mask": "null"
+      },
+      {
+        "id": "function/1014821943",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1014821943",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040700",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040701",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040702",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040703",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040704",
+        "mask": "null"
+      },
+      {
+        "id": "function/601638462",
+        "mask": "null"
+      },
+      {
+        "id": "function/642229693",
+        "mask": "null"
+      },
+      {
+        "id": "function/665416673",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      },
+      {
+        "id": "function/779765691",
+        "mask": "null"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "null"
+      },
+      {
+        "id": "function/820195095",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      },
+      {
+        "id": "function/942227822",
+        "mask": "[null|exact=JSString]"
+      }
+    ],
+    "function/330018012": [
+      {
+        "id": "function/337937411",
+        "mask": "null"
+      }
+    ],
+    "function/335045122": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
+    "function/336168458": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/164775669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/164775669",
+        "mask": "null"
+      },
+      {
+        "id": "function/390828239",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/992393187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/992393187",
+        "mask": "null"
+      }
+    ],
+    "function/336424489": [
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/337937411": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "null"
+      },
+      {
+        "id": "function/16930089",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      },
+      {
+        "id": "function/907920633",
+        "mask": "null"
+      },
+      {
+        "id": "function/907920634",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/341046768": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/350333970": [
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/692185405",
+        "mask": "inlined"
+      }
+    ],
+    "function/350634082": [
+      {
+        "id": "function/162872908",
+        "mask": "inlined"
+      }
+    ],
+    "function/351622741": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/262026503",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "null"
+      }
+    ],
+    "function/352514166": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/292751514",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/638807044",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638807044",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      }
+    ],
+    "function/355012434": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1042482096",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1042482096",
+        "mask": "null"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/109394176",
+        "mask": "null"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "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/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/302617892",
+        "mask": "null"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "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/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "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/357627841": [
+      {
+        "id": "function/188708191",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/188708191",
+        "mask": "null"
+      }
+    ],
+    "function/358340511": [
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      }
+    ],
+    "function/364010339": [
+      {
+        "id": "function/811310425",
+        "mask": "null"
+      },
+      {
+        "id": "function/887884267",
+        "mask": "null"
+      }
+    ],
+    "function/367762222": [
+      {
+        "id": "function/357240896",
+        "mask": "inlined"
+      }
+    ],
+    "function/369614033": [
+      {
+        "id": "function/1060110710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1060110710",
+        "mask": "null"
+      },
+      {
+        "id": "function/580865640",
+        "mask": "null"
+      }
+    ],
+    "function/370120278": [
+      {
+        "id": "function/171287120",
+        "mask": "inlined"
+      }
+    ],
+    "function/372037963": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "null"
+      }
+    ],
+    "function/381680028": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "null"
+      }
+    ],
+    "function/385444888": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/263363184",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "null"
+      },
+      {
+        "id": "function/39412415",
+        "mask": "null"
+      },
+      {
+        "id": "function/394885266",
+        "mask": "null"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/544746737",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/717417998",
+        "mask": "null"
+      },
+      {
+        "id": "function/754498726",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/754498726",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/388977016": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
+    "function/390828239": [
+      {
+        "id": "function/726344781",
+        "mask": "null"
+      }
+    ],
+    "function/394885266": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      },
+      {
+        "id": "function/96457955",
+        "mask": "null"
+      }
+    ],
+    "function/399195151": [
+      {
+        "id": "function/606513838",
+        "mask": "inlined"
+      }
+    ],
+    "function/400990606": [
+      {
+        "id": "function/370295194",
+        "mask": "inlined"
+      }
+    ],
+    "function/405266426": [
+      {
+        "id": "function/977867690",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/977867690",
+        "mask": "null"
+      }
+    ],
+    "function/407139250": [
+      {
+        "id": "function/1016194181",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/208283907",
+        "mask": "null"
+      },
+      {
+        "id": "function/243489700",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/308590446",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/458931695",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/458931695",
+        "mask": "null"
+      },
+      {
+        "id": "function/482441661",
+        "mask": "Union([exact=JSUInt31], [subclass=JSArray])"
+      },
+      {
+        "id": "function/965257927",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/965257927",
+        "mask": "null"
+      },
+      {
+        "id": "function/979933658",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/979933658",
+        "mask": "null"
+      }
+    ],
+    "function/415620823": [
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      }
+    ],
+    "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]"
+      },
+      {
+        "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]"
+      }
+    ],
+    "function/430236296": [
+      {
+        "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"
+      }
+    ],
+    "function/431897853": [
+      {
+        "id": "field/650081226",
+        "mask": "null"
+      }
+    ],
+    "function/435575019": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "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/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "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/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "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/436170439": [
+      {
+        "id": "function/144469777",
+        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      }
+    ],
+    "function/436231120": [
+      {
+        "id": "field/127038922",
+        "mask": "null"
+      },
+      {
+        "id": "field/460958077",
+        "mask": "null"
+      }
+    ],
+    "function/437395524": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/427434111",
+        "mask": "null"
+      },
+      {
+        "id": "function/456567103",
+        "mask": "null"
+      }
+    ],
+    "function/445547062": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "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/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "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/448031436": [
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/380929608",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/380929608",
+        "mask": "null"
+      }
+    ],
+    "function/448227795": [
+      {
+        "id": "field/4524053",
+        "mask": "null"
+      }
+    ],
+    "function/453686242": [
+      {
+        "id": "function/418915149",
+        "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"
+      },
+      {
+        "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/445547062",
+        "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/474133145": [
+      {
+        "id": "field/140571055",
+        "mask": "null"
+      }
+    ],
+    "function/476860251": [
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      }
+    ],
+    "function/477609809": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/482441661": [
+      {
+        "id": "function/199851072",
+        "mask": "null"
+      }
+    ],
+    "function/483766990": [
+      {
+        "id": "function/551570860",
+        "mask": "inlined"
+      }
+    ],
+    "function/487598887": [
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      }
+    ],
+    "function/491418529": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      }
+    ],
+    "function/492708773": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/494094492": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/499330809": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/208283907",
+        "mask": "null"
+      }
+    ],
+    "function/499807915": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      }
+    ],
+    "function/501712645": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "null"
+      },
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/513053773": [
+      {
+        "id": "function/492708773",
+        "mask": "inlined"
+      }
+    ],
+    "function/519629171": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      }
+    ],
+    "function/521874428": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      }
+    ],
+    "function/528985088": [
+      {
+        "id": "field/701889804",
+        "mask": "null"
+      },
+      {
+        "id": "function/272627576",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/272627576",
+        "mask": "null"
+      }
+    ],
+    "function/544746737": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/549577701": [
+      {
+        "id": "function/992679489",
+        "mask": "inlined"
+      }
+    ],
+    "function/553149607": [
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212862",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212863",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212864",
+        "mask": "null"
+      }
+    ],
+    "function/553851206": [
+      {
+        "id": "function/136972596",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/136972596",
+        "mask": "null"
+      },
+      {
+        "id": "function/292889014",
+        "mask": "null"
+      },
+      {
+        "id": "function/419713835",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/419713835",
+        "mask": "null"
+      },
+      {
+        "id": "function/658082982",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      }
+    ],
+    "function/564404904": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      },
+      {
+        "id": "field/180845508",
+        "mask": "null"
+      },
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[subclass=Object]"
+      }
+    ],
+    "function/569040701": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/569040702": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/573775196": [
+      {
+        "id": "function/123959555",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/494583530",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/687991937",
+        "mask": "inlined"
+      }
+    ],
+    "function/574550003": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/22227107",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/22227107",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "null"
+      }
+    ],
+    "function/580865640": [
+      {
+        "id": "field/1047452024",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "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"
+      }
+    ],
+    "function/585544091": [
+      {
+        "id": "field/269363605",
+        "mask": "null"
+      },
+      {
+        "id": "field/431266734",
+        "mask": "null"
+      },
+      {
+        "id": "field/742643375",
+        "mask": "null"
+      },
+      {
+        "id": "field/795691913",
+        "mask": "null"
+      },
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      },
+      {
+        "id": "field/996559228",
+        "mask": "null"
+      },
+      {
+        "id": "function/1015140651",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1015140651",
+        "mask": "null"
+      },
+      {
+        "id": "function/481547973",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/481547973",
+        "mask": "null"
+      }
+    ],
+    "function/586712659": [
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/714493219",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/171287120",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/370120278",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/370120278",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/68051831",
+        "mask": "null"
+      },
+      {
+        "id": "function/795411795",
+        "mask": "null"
+      }
+    ],
+    "function/601638462": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "field/907727246",
+        "mask": "null"
+      },
+      {
+        "id": "function/162825675",
+        "mask": "null"
+      },
+      {
+        "id": "function/272589495",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      },
+      {
+        "id": "function/820195095",
+        "mask": "null"
+      }
+    ],
+    "function/607704865": [
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "null"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "null"
+      },
+      {
+        "id": "function/483766990",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/483766990",
+        "mask": "null"
+      },
+      {
+        "id": "function/551570860",
+        "mask": "null"
+      }
+    ],
+    "function/608925525": [
+      {
+        "id": "function/357240896",
+        "mask": "null"
+      },
+      {
+        "id": "function/367762222",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/367762222",
+        "mask": "null"
+      },
+      {
+        "id": "function/773230206",
+        "mask": "null"
+      }
+    ],
+    "function/611761598": [
+      {
+        "id": "function/473156332",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/473156332",
+        "mask": "null"
+      },
+      {
+        "id": "function/906921796",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/906921796",
+        "mask": "null"
+      }
+    ],
+    "function/613119304": [
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/618126497": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/381680028",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "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"
+      },
+      {
+        "id": "field/954188953",
+        "mask": "null"
+      },
+      {
+        "id": "function/499807915",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/633677177": [
+      {
+        "id": "function/81057679",
+        "mask": "null"
+      }
+    ],
+    "function/635153575": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1014074245",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1014074245",
+        "mask": "null"
+      }
+    ],
+    "function/636061569": [
+      {
+        "id": "field/345425066",
+        "mask": "null"
+      },
+      {
+        "id": "field/347443343",
+        "mask": "null"
+      },
+      {
+        "id": "field/627383241",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/636443477": [
+      {
+        "id": "function/370295194",
+        "mask": "inlined"
+      }
+    ],
+    "function/639806883": [
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      }
+    ],
+    "function/642229693": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "function/102471615",
+        "mask": "null"
+      }
+    ],
+    "function/649401243": [
+      {
+        "id": "field/295541341",
+        "mask": "null"
+      },
+      {
+        "id": "field/410301694",
+        "mask": "null"
+      },
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/459351028",
+        "mask": "null"
+      },
+      {
+        "id": "field/60920969",
+        "mask": "null"
+      },
+      {
+        "id": "field/839347349",
+        "mask": "null"
+      },
+      {
+        "id": "function/411231605",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/411231605",
+        "mask": "null"
+      },
+      {
+        "id": "function/616072379",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/616072379",
+        "mask": "null"
+      }
+    ],
+    "function/650942169": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/653699436": [
+      {
+        "id": "function/1024143730",
+        "mask": "inlined"
+      }
+    ],
+    "function/658082982": [
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "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"
+      }
+    ],
+    "function/658921946": [
+      {
+        "id": "function/390828239",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/633677177",
+        "mask": "null"
+      },
+      {
+        "id": "function/835692712",
+        "mask": "null"
+      }
+    ],
+    "function/663282901": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/372361659",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/888466063",
+        "mask": "null"
+      }
+    ],
+    "function/664449932": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/325386239",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/667149426",
+        "mask": "null"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      }
+    ],
+    "function/665416673": [
+      {
+        "id": "field/192950192",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "field/232791153",
+        "mask": "null"
+      },
+      {
+        "id": "field/650800220",
+        "mask": "null"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "null"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "null"
+      },
+      {
+        "id": "function/813862273",
+        "mask": "null"
+      },
+      {
+        "id": "function/897413385",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/667149426": [
+      {
+        "id": "function/96457955",
+        "mask": "null"
+      }
+    ],
+    "function/668300184": [
+      {
+        "id": "function/253794122",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/669694580": [
+      {
+        "id": "field/509651846",
+        "mask": "null"
+      },
+      {
+        "id": "function/425007214",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/519947595",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/705889064",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/837956997",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/679532174": [
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      }
+    ],
+    "function/684612786": [
+      {
+        "id": "function/222294695",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/222294695",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/689069465": [
+      {
+        "id": "function/1012615396",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1012615396",
+        "mask": "null"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "null"
+      },
+      {
+        "id": "function/257728434",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/257728434",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "null"
+      },
+      {
+        "id": "function/306374693",
+        "mask": "inlined"
+      },
+      {
+        "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"
+      }
+    ],
+    "function/689271731": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/269363605",
+        "mask": "null"
+      },
+      {
+        "id": "field/509651846",
+        "mask": "null"
+      },
+      {
+        "id": "field/742643375",
+        "mask": "null"
+      },
+      {
+        "id": "field/996559228",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/693686431": [
+      {
+        "id": "function/350634082",
+        "mask": "inlined"
+      }
+    ],
+    "function/702114504": [
+      {
+        "id": "field/192950192",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/585544091",
+        "mask": "null"
+      },
+      {
+        "id": "function/897413385",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/705889064": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      },
+      {
+        "id": "field/180845508",
+        "mask": "null"
+      },
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      }
+    ],
+    "function/710611585": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/162872908",
+        "mask": "null"
+      },
+      {
+        "id": "function/350634082",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/693686431",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/693686431",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/714600619": [
+      {
+        "id": "field/954188953",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1008544093",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/186999466",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/31139860",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/349997389",
+        "mask": "null"
+      },
+      {
+        "id": "function/430236296",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/521874428",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      },
+      {
+        "id": "function/756812986",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/985926244",
+        "mask": "null"
+      }
+    ],
+    "function/717417998": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/725505159": [
+      {
+        "id": "field/1012307238",
+        "mask": "null"
+      },
+      {
+        "id": "field/123513767",
+        "mask": "null"
+      },
+      {
+        "id": "field/359397062",
+        "mask": "null"
+      },
+      {
+        "id": "field/55197673",
+        "mask": "null"
+      },
+      {
+        "id": "field/817840529",
+        "mask": "null"
+      },
+      {
+        "id": "field/906853360",
+        "mask": "null"
+      }
+    ],
+    "function/726344781": [
+      {
+        "id": "function/351622741",
+        "mask": "null"
+      }
+    ],
+    "function/726979110": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      }
+    ],
+    "function/731794670": [
+      {
+        "id": "function/739160294",
+        "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/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/248883787",
+        "mask": "null"
+      },
+      {
+        "id": "function/326542993",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      }
+    ],
+    "function/745741399": [
+      {
+        "id": "field/376257386",
+        "mask": "null"
+      },
+      {
+        "id": "function/355012434",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/749970393": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/752981084": [
+      {
+        "id": "function/830798781",
+        "mask": "null"
+      }
+    ],
+    "function/754498726": [
+      {
+        "id": "function/338379080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/717417998",
+        "mask": "inlined"
+      }
+    ],
+    "function/756812986": [
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      }
+    ],
+    "function/764768055": [
+      {
+        "id": "function/310457557",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      }
+    ],
+    "function/766396929": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1065856678",
+        "mask": "[subclass=_Completer]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "null"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/477609809",
+        "mask": "[subclass=_Completer]"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/772250195": [
+      {
+        "id": "field/244162491",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/179653294",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/179653294",
+        "mask": "null"
+      },
+      {
+        "id": "function/98156511",
+        "mask": "[null|subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/778541068": [
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      }
+    ],
+    "function/779765691": [
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      }
+    ],
+    "function/784650927": [
+      {
+        "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])"
+      }
+    ],
+    "function/788412943": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/681643547",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/681643547",
+        "mask": "null"
+      }
+    ],
+    "function/789545114": [
+      {
+        "id": "function/1027535878",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/176842663",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "null"
+      },
+      {
+        "id": "function/405266426",
+        "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "null"
+      },
+      {
+        "id": "function/834909172",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/950708086",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/99251871",
+        "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
+      }
+    ],
+    "function/791079680": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      }
+    ],
+    "function/793410068": [
+      {
+        "id": "field/346735010",
+        "mask": "null"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "null"
+      }
+    ],
+    "function/795411795": [
+      {
+        "id": "field/187449514",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "function/1030881401",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1030881401",
+        "mask": "null"
+      },
+      {
+        "id": "function/1055095230",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055095230",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/796179660": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/797212862": [
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/15925204",
+        "mask": "null"
+      },
+      {
+        "id": "function/599927967",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/599927967",
+        "mask": "null"
+      }
+    ],
+    "function/797212863": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/797212864": [
+      {
+        "id": "function/574550003",
+        "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]"
+      }
+    ],
+    "function/813862273": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/202484522",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/370295194",
+        "mask": "null"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636443477",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/636443477",
+        "mask": "null"
+      },
+      {
+        "id": "function/669694580",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/889342435",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/820195095": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/202484522",
+        "mask": "null"
+      },
+      {
+        "id": "field/232791153",
+        "mask": "null"
+      },
+      {
+        "id": "field/650800220",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "null"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "null"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/370295194",
+        "mask": "null"
+      },
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/400990606",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/400990606",
+        "mask": "null"
+      },
+      {
+        "id": "function/538046",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/585544091",
+        "mask": "null"
+      },
+      {
+        "id": "function/669694580",
+        "mask": "null"
+      },
+      {
+        "id": "function/702114504",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/889342435",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/831655802": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/607252",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      }
+    ],
+    "function/834909172": [
+      {
+        "id": "field/646361925",
+        "mask": "null"
+      }
+    ],
+    "function/835692712": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/931441116",
+        "mask": "null"
+      },
+      {
+        "id": "field/932611099",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "null"
+      },
+      {
+        "id": "function/82702408",
+        "mask": "null"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "null"
+      }
+    ],
+    "function/848267879": [
+      {
+        "id": "field/653339731",
+        "mask": "null"
+      }
+    ],
+    "function/852141617": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "null"
+      },
+      {
+        "id": "function/248499885",
+        "mask": "null"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      }
+    ],
+    "function/852972506": [
+      {
+        "id": "function/581270226",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/581270226",
+        "mask": "null"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "null"
+      }
+    ],
+    "function/853169304": [
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      }
+    ],
+    "function/853973218": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      }
+    ],
+    "function/860159722": [
+      {
+        "id": "function/749970393",
+        "mask": "null"
+      }
+    ],
+    "function/873863767": [
+      {
+        "id": "function/204916897",
+        "mask": "null"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "[exact=JSString]"
+      },
+      {
+        "id": "function/501712645",
+        "mask": "null"
+      },
+      {
+        "id": "function/508874693",
+        "mask": "null"
+      },
+      {
+        "id": "function/549577701",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/549577701",
+        "mask": "null"
+      },
+      {
+        "id": "function/555987509",
+        "mask": "null"
+      },
+      {
+        "id": "function/751200407",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      },
+      {
+        "id": "function/890739228",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/890739228",
+        "mask": "null"
+      },
+      {
+        "id": "function/992679489",
+        "mask": "null"
+      }
+    ],
+    "function/887884267": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      },
+      {
+        "id": "function/835692712",
+        "mask": "null"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "null"
+      }
+    ],
+    "function/890739228": [
+      {
+        "id": "function/508874693",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/751200407",
+        "mask": "inlined"
+      }
+    ],
+    "function/891910474": [
+      {
+        "id": "function/987508329",
+        "mask": "null"
+      }
+    ],
+    "function/899124813": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      },
+      {
+        "id": "function/841192189",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/841192189",
+        "mask": "null"
+      },
+      {
+        "id": "function/906797235",
+        "mask": "null"
+      }
+    ],
+    "function/899674954": [
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      }
+    ],
+    "function/906797235": [
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      }
+    ],
+    "function/907920634": [
+      {
+        "id": "function/259223906",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/259223906",
+        "mask": "null"
+      }
+    ],
+    "function/920500080": [
+      {
+        "id": "field/914365883",
+        "mask": "null"
+      },
+      {
+        "id": "function/425007214",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/519947595",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/705889064",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/837956997",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/921486255": [
+      {
+        "id": "function/116583875",
+        "mask": "null"
+      },
+      {
+        "id": "function/271854590",
+        "mask": "null"
+      },
+      {
+        "id": "function/330018012",
+        "mask": "null"
+      },
+      {
+        "id": "function/357627841",
+        "mask": "null"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "null"
+      },
+      {
+        "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]"
+      }
+    ],
+    "function/922840913": [
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "field/435101137",
+        "mask": "null"
+      },
+      {
+        "id": "field/709451133",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/292195356",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/762030080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/762030080",
+        "mask": "null"
+      },
+      {
+        "id": "function/899124813",
+        "mask": "null"
+      }
+    ],
+    "function/942227822": [
+      {
+        "id": "function/225159691",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/225159691",
+        "mask": "null"
+      },
+      {
+        "id": "function/638664464",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638664464",
+        "mask": "null"
+      }
+    ],
+    "function/944731702": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/947198569": [
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      }
+    ],
+    "function/950708086": [
+      {
+        "id": "field/504170901",
+        "mask": "null"
+      }
+    ],
+    "function/967508646": [
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "null"
+      },
+      {
+        "id": "function/555987509",
+        "mask": "null"
+      },
+      {
+        "id": "function/607704865",
+        "mask": "null"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      },
+      {
+        "id": "function/984452543",
+        "mask": "null"
+      }
+    ],
+    "function/968241519": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/160969748",
+        "mask": "null"
+      }
+    ],
+    "function/984452543": [
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/985926244": [
+      {
+        "id": "field/954188953",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1008544093",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "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]"
+      },
+      {
+        "id": "function/756812986",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/987508329": [
+      {
+        "id": "field/1047452024",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      },
+      {
+        "id": "function/139456351",
+        "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/689271731",
+        "mask": "null"
+      },
+      {
+        "id": "function/778541068",
+        "mask": "null"
+      }
+    ],
+    "function/990521259": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "function/150523169",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/453686242",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/491418529",
+        "mask": "null"
+      },
+      {
+        "id": "function/494094492",
+        "mask": "null"
+      },
+      {
+        "id": "function/985926244",
+        "mask": "null"
+      },
+      {
+        "id": "function/990521259",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/997099929": [
+      {
+        "id": "function/653699436",
+        "mask": "inlined"
+      }
+    ],
+    "function/1002752870": [
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/649401243",
+        "mask": "null"
+      },
+      {
+        "id": "function/702510",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702510",
+        "mask": "null"
+      }
+    ],
+    "function/1008544093": [
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      },
+      {
+        "id": "function/731794670",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/731794670",
+        "mask": "null"
+      },
+      {
+        "id": "function/739160294",
+        "mask": "null"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "null"
+      }
+    ],
+    "function/1014821943": [
+      {
+        "id": "function/779765691",
+        "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"
+      },
+      {
+        "id": "field/649547880",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/1027535878": [
+      {
+        "id": "field/112618843",
+        "mask": "null"
+      },
+      {
+        "id": "field/237146195",
+        "mask": "null"
+      },
+      {
+        "id": "field/504170901",
+        "mask": "null"
+      },
+      {
+        "id": "field/577142640",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/544746737",
+        "mask": "null"
+      }
+    ],
+    "function/1031826457": [
+      {
+        "id": "field/244162491",
+        "mask": "null"
+      },
+      {
+        "id": "function/275957193",
+        "mask": "[null|subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/1033661873": [
+      {
+        "id": "function/987508329",
+        "mask": "null"
+      }
+    ],
+    "function/1036675160": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/650942169",
+        "mask": "null"
+      }
+    ],
+    "function/1042482096": [
+      {
+        "id": "function/109394176",
+        "mask": "inlined"
+      }
+    ],
+    "function/1047605700": [
+      {
+        "id": "field/153843292",
+        "mask": "null"
+      },
+      {
+        "id": "field/154746101",
+        "mask": "null"
+      },
+      {
+        "id": "field/525450391",
+        "mask": "null"
+      },
+      {
+        "id": "field/626762025",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "null"
+      },
+      {
+        "id": "function/990521259",
+        "mask": "null"
+      }
+    ],
+    "function/1051093947": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      }
+    ],
+    "function/1058735230": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/16930089",
+        "mask": "null"
+      },
+      {
+        "id": "function/205154197",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "null"
+      }
+    ],
+    "function/1060205580": [
+      {
+        "id": "function/499330809",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "null"
+      }
+    ],
+    "function/1065856678": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "function/263363184",
+        "mask": "null"
+      }
+    ]
+  },
+  "dependencies": {},
+  "outputUnits": [
+    {
+      "id": "outputUnit/7045321",
+      "kind": "outputUnit",
+      "name": "1",
+      "size": 1353,
+      "imports": [
+        "deferred_import"
+      ]
+    },
+    {
+      "id": "outputUnit/669725655",
+      "kind": "outputUnit",
+      "name": "main",
+      "size": 156027,
+      "imports": []
+    }
+  ],
+  "dump_version": 5,
+  "deferredFiles": {
+    "hello_world_deferred.dart": {
+      "name": "<unnamed>",
+      "imports": {
+        "deferred_import": [
+          "hello_world_deferred.js_1.part.js"
+        ]
+      }
+    }
+  },
+  "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,
+    "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/json_to_proto_deferred_test.dart b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
new file mode 100644
index 0000000..70d7681
--- /dev/null
+++ b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
@@ -0,0 +1,47 @@
+// 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 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:test/test.dart';
+
+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');
+      final helloWorld = File.fromUri(uri);
+      final json = jsonDecode(helloWorld.readAsStringSync());
+      final decoded = AllInfoJsonCodec().decode(json);
+      final proto = AllInfoProtoCodec().encode(decoded);
+
+      expect(proto.deferredImports, hasLength(1));
+      final libraryImports = proto.deferredImports.first;
+      expect(libraryImports.libraryUri, 'hello_world_deferred.dart');
+      expect(libraryImports.libraryName, '<unnamed>');
+      expect(libraryImports.imports, hasLength(1));
+      final import = libraryImports.imports.first;
+      expect(import.prefix, 'deferred_import');
+      expect(import.files, hasLength(1));
+      expect(import.files.first, 'hello_world_deferred.js_1.part.js');
+
+      final infoMap = proto.allInfos;
+
+      final entrypoint = infoMap[proto.program.entrypointId];
+      expect(entrypoint, isNotNull);
+      expect(entrypoint.hasFunctionInfo(), isTrue);
+      expect(entrypoint.outputUnitId, isNotNull);
+
+      // The output unit of the entrypoint function should be the default
+      // entrypoint, which should have no imports.
+      final defaultOutputUnit = infoMap[entrypoint.outputUnitId];
+      expect(defaultOutputUnit, isNotNull);
+      expect(defaultOutputUnit.hasOutputUnitInfo(), isTrue);
+      expect(defaultOutputUnit.outputUnitInfo.imports, isEmpty);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
new file mode 100644
index 0000000..735b2d7
--- /dev/null
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -0,0 +1,78 @@
+// 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 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('json to proto conversion', () {
+    test('hello_world', () {
+      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.compilationMoment.toInt(),
+          DateTime.parse("2017-04-17 09:46:41.661617").microsecondsSinceEpoch);
+      expect(proto.program.toProtoDuration.toInt(),
+          Duration(milliseconds: 4).inMicroseconds);
+      expect(proto.program.dumpInfoDuration.toInt(),
+          Duration(milliseconds: 0).inMicroseconds);
+      expect(proto.program.noSuchMethodEnabled, isFalse);
+      expect(proto.program.minified, isFalse);
+    });
+
+    test('has proper id format', () {
+      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);
+
+      final expectedPrefixes = <InfoKind, String>{};
+      for (final kind in InfoKind.values) {
+        expectedPrefixes[kind] = kindToString(kind) + '/';
+      }
+
+      for (final info in proto.allInfos.entries) {
+        final value = info.value;
+        if (value.hasLibraryInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.library]));
+        } else if (value.hasClassInfo()) {
+          expect(
+              value.serializedId, startsWith(expectedPrefixes[InfoKind.clazz]));
+        } else if (value.hasFunctionInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.function]));
+        } else if (value.hasFieldInfo()) {
+          expect(
+              value.serializedId, startsWith(expectedPrefixes[InfoKind.field]));
+        } else if (value.hasConstantInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.constant]));
+        } else if (value.hasOutputUnitInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.outputUnit]));
+        } else if (value.hasTypedefInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.typedef]));
+        } else if (value.hasClosureInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.closure]));
+        }
+      }
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
new file mode 100644
index 0000000..ae71615
--- /dev/null
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -0,0 +1,34 @@
+// 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 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('parse', () {
+    test('hello_world', () {
+      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);
+
+      var program = decoded.program;
+      expect(program, isNotNull);
+
+      expect(program.entrypoint, isNotNull);
+      expect(program.size, 10324);
+      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));
+      expect(program.noSuchMethodEnabled, false);
+      expect(program.minified, false);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/tool/update_proto.sh b/pkg/dart2js_info/tool/update_proto.sh
new file mode 100755
index 0000000..c784edd
--- /dev/null
+++ b/pkg/dart2js_info/tool/update_proto.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -e
+
+if [ -z "$1" ]; then
+    echo "Expected exactly one argument which is the protoc_plugin version to use"
+else
+    echo "Using protoc_plugin version $1"
+    pub global activate protoc_plugin "$1"
+fi
+
+protoc --proto_path="." --dart_out=lib/src/proto info.proto
+dartfmt -w lib/src/proto
diff --git a/pkg/dart2js_runtime_metrics/CHANGELOG.md b/pkg/dart2js_runtime_metrics/CHANGELOG.md
new file mode 100644
index 0000000..a0712a7
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.1.0
+
+- Initial version.
diff --git a/pkg/dart2js_runtime_metrics/LICENSE b/pkg/dart2js_runtime_metrics/LICENSE
new file mode 100644
index 0000000..a217815
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/LICENSE
@@ -0,0 +1,27 @@
+Copyright 2021, the Dart project authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google LLC nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/dart2js_runtime_metrics/README.md b/pkg/dart2js_runtime_metrics/README.md
new file mode 100644
index 0000000..042f1d9
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/README.md
@@ -0,0 +1,13 @@
+☠☠ **Warning: This package is experimental and may be removed in a future
+version of Dart.** ☠☠
+
+`dart2js` can generate extra code to measure certain activities.
+This library provides access to the measurements at runtime.
+
+An application might make timings and other measurements and report them back to
+a server in order to collect information on how the application is working in
+production. The APIs in this library provide access to measurements that require
+help from dart2js. For example, `startupMetrics` accesses measurements of
+activities that happen as the program is loaded, before `main()`.
+
+The APIs are stubbed so that dummy values are returned on the VM and dartdevc.
diff --git a/pkg/dart2js_runtime_metrics/analysis_options.yaml b/pkg/dart2js_runtime_metrics/analysis_options.yaml
new file mode 100644
index 0000000..bfd745e
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/analysis_options.yaml
@@ -0,0 +1,6 @@
+analyzer:
+  errors:
+    import_internal_library: ignore
+    export_internal_library: ignore
+  strong-mode:
+    implicit-casts: false
diff --git a/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dart2js.dart b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dart2js.dart
new file mode 100644
index 0000000..021c666
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dart2js.dart
@@ -0,0 +1,5 @@
+// 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.
+
+export 'dart:_dart2js_runtime_metrics' show startupMetrics;
diff --git a/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dartdevc.dart b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dartdevc.dart
new file mode 100644
index 0000000..4f4fe5b
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_dartdevc.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.
+
+/// A collection of metrics for events that happen before `main()` is entered.
+///
+/// The contents of the map depend on the platform. The map values are simple
+/// objects (strings, numbers, Booleans). There is always an entry for the key
+/// `'runtime'` with a [String] value.
+Map<String, Object> get startupMetrics {
+  return {'runtime': 'dartdevc'};
+}
diff --git a/pkg/dart2js_runtime_metrics/lib/_startup_metrics_unknown.dart b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_unknown.dart
new file mode 100644
index 0000000..7f8dd74
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_unknown.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.
+
+/// A collection of metrics for events that happen before `main()` is entered.
+///
+/// The contents of the map depend on the platform. The map values are simple
+/// objects (strings, numbers, Booleans). There is always an entry for the key
+/// `'runtime'` with a [String] value.
+Map<String, Object> get startupMetrics {
+  return {'runtime': 'unknown'};
+}
diff --git a/pkg/dart2js_runtime_metrics/lib/_startup_metrics_vm.dart b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_vm.dart
new file mode 100644
index 0000000..090a914
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/lib/_startup_metrics_vm.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.
+
+/// A collection of metrics for events that happen before `main()` is entered.
+///
+/// The contents of the map depend on the platform. The map values are simple
+/// objects (strings, numbers, Booleans). There is always an entry for the key
+/// `'runtime'` with a [String] value.
+Map<String, Object> get startupMetrics {
+  return {'runtime': 'vm'};
+}
diff --git a/pkg/dart2js_runtime_metrics/lib/startup_metrics.dart b/pkg/dart2js_runtime_metrics/lib/startup_metrics.dart
new file mode 100644
index 0000000..c3f7d08
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/lib/startup_metrics.dart
@@ -0,0 +1,8 @@
+// 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.
+
+export '_startup_metrics_unknown.dart'
+    if (dart.library._dart2js_runtime_metrics) '_startup_metrics_dart2js.dart'
+    if (dart.library.ffi) '_startup_metrics_vm.dart'
+    if (dart.library.js) '_startup_metrics_dartdevc.dart';
diff --git a/pkg/dart2js_runtime_metrics/pubspec.yaml b/pkg/dart2js_runtime_metrics/pubspec.yaml
new file mode 100644
index 0000000..c79dd5a
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/pubspec.yaml
@@ -0,0 +1,18 @@
+name: dart2js_runtime_metrics
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+version: 0.1.0
+repository: https://github.com/dart-lang/sdk/tree/master/pkg/dart2js_runtime_metrics
+description: >-
+  `dart2js` can generate extra code to measure certain activities.
+  This library provides access to the measurements at runtime.
+
+environment:
+  # Restrict the upper bound so that we can remove support for this in
+  # a later version of the SDK without it being a breaking change.
+  sdk: ">=2.14.0 <2.15.0"
+
+dev_dependencies:
+  # Unpublished packages that can be used via path dependency
+  expect:
+    path: ../expect
diff --git a/pkg/dart2js_runtime_metrics/test/startup_metrics_test.dart b/pkg/dart2js_runtime_metrics/test/startup_metrics_test.dart
new file mode 100644
index 0000000..5655927
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/test/startup_metrics_test.dart
@@ -0,0 +1,51 @@
+// 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:dart2js_runtime_metrics/startup_metrics.dart';
+import 'package:expect/expect.dart';
+
+void main() {
+  Map<String, Object> metrics = startupMetrics;
+
+  print('metrics: $metrics');
+
+  String expectedRuntime;
+  if (1.0 is! int) {
+    expectedRuntime = 'vm';
+  } else if (ClassWithLongName().toString().contains('minified:')) {
+    // dart2js minified: "Instance of 'minified:xy'".
+    expectedRuntime = 'dart2js';
+  } else if ('$main' == "Closure 'main'") {
+    // dart2js non-minified.
+    expectedRuntime = 'dart2js';
+  } else if ('$main'.startsWith('Closure: () => void from: function main()')) {
+    expectedRuntime = 'dartdevc';
+  } else {
+    throw 'Cannot feature-test current runtime:'
+        '\nmetrics = $metrics\n main = $main';
+  }
+
+  Expect.isTrue(metrics.containsKey('runtime'), "Has 'runtime' key: $metrics");
+  Expect.equals(expectedRuntime, metrics['runtime'],
+      "Expected 'runtime: $expectedRuntime': $metrics");
+
+  if (expectedRuntime == 'dart2js') {
+    Expect.isTrue(metrics.containsKey('callMainMs'));
+    return;
+  }
+
+  if (expectedRuntime == 'dartdevc') {
+    Expect.equals(1, metrics.length);
+    return;
+  }
+
+  if (expectedRuntime == 'vm') {
+    Expect.equals(1, metrics.length);
+    return;
+  }
+
+  throw 'Should not get here.';
+}
+
+class ClassWithLongName {}
diff --git a/pkg/dart2native/bin/dart2native.dart b/pkg/dart2native/bin/dart2native.dart
deleted file mode 100644
index d5d888a..0000000
--- a/pkg/dart2native/bin/dart2native.dart
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env dart
-// 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 'dart:io';
-
-import 'package:args/args.dart';
-import 'package:dart2native/generate.dart';
-import 'package:front_end/src/api_prototype/compiler_options.dart'
-    show Verbosity;
-
-void printUsage(final ArgParser parser) {
-  print('''
-Usage: dart2native <main-dart-file> [<options>]
-
-Generates an executable or an AOT snapshot from <main-dart-file>.
-''');
-  print(parser.usage);
-}
-
-Future<void> main(List<String> args) async {
-  // If we're outputting to a terminal, wrap usage text to that width.
-  int outputLineWidth;
-  try {
-    outputLineWidth = stdout.terminalColumns;
-  } catch (_) {/* Ignore. */}
-
-  final ArgParser parser = ArgParser(usageLineLength: outputLineWidth)
-    ..addMultiOption('define', abbr: 'D', valueHelp: 'key=value', help: '''
-Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
-E.g.: dart2native -Da=1,b=2 main.dart''')
-    ..addFlag('enable-asserts',
-        negatable: false, help: 'Enable assert statements.')
-    ..addMultiOption(
-      'extra-gen-snapshot-options',
-      help: 'Pass additional options to gen_snapshot.',
-      hide: true,
-      valueHelp: 'opt1,opt2,...',
-    )
-    ..addFlag('help',
-        abbr: 'h', negatable: false, help: 'Display this help message.')
-    ..addOption(
-      'output-kind',
-      abbr: 'k',
-      allowed: ['aot', 'exe'],
-      allowedHelp: {
-        'aot': 'Generate an AOT snapshot.',
-        'exe': 'Generate a standalone executable.',
-      },
-      defaultsTo: 'exe',
-      valueHelp: 'aot|exe',
-    )
-    ..addOption('output', abbr: 'o', valueHelp: 'path', help: '''
-Set the output filename. <path> can be relative or absolute.
-E.g.: dart2native main.dart -o ../bin/my_app.exe
-''')
-    ..addOption('packages', abbr: 'p', valueHelp: 'path', help: '''
-Get package locations from the specified file instead of .packages. <path> can be relative or absolute.
-E.g.: dart2native --packages=/tmp/pkgs main.dart
-''')
-    ..addOption('save-debugging-info', abbr: 'S', valueHelp: 'path', help: '''
-Remove debugging information from the output and save it separately to the specified file. <path> can be relative or absolute.
-''')
-    ..addOption('enable-experiment',
-        defaultsTo: '', valueHelp: 'feature', hide: true, help: '''
-Comma separated list of experimental features.
-''')
-    ..addFlag('sound-null-safety',
-        help: 'Respect the nullability of types at runtime.', defaultsTo: null)
-    ..addFlag('verbose',
-        abbr: 'v', negatable: false, help: 'Show verbose output.')
-    ..addOption(
-      'verbosity',
-      defaultsTo: Verbosity.defaultValue,
-      help: '''
-Sets the verbosity level used for filtering messages during compilation.
-''',
-      allowed: Verbosity.allowedValues,
-      allowedHelp: Verbosity.allowedValuesHelp,
-    );
-
-  ArgResults parsedArgs;
-  try {
-    parsedArgs = parser.parse(args);
-  } on FormatException catch (e) {
-    stderr.writeln('Error: ${e.message}');
-    await stderr.flush();
-    printUsage(parser);
-    exit(1);
-  }
-
-  if (parsedArgs['help']) {
-    printUsage(parser);
-    exit(0);
-  }
-
-  if (parsedArgs.rest.length != 1) {
-    printUsage(parser);
-    exit(1);
-  }
-
-  final String sourceFile = parsedArgs.rest[0];
-  if (!FileSystemEntity.isFileSync(sourceFile)) {
-    stderr.writeln(
-        '"$sourceFile" is not a file. See \'--help\' for more information.');
-    await stderr.flush();
-    exit(1);
-  }
-
-  try {
-    await generateNative(
-        kind: parsedArgs['output-kind'],
-        sourceFile: sourceFile,
-        outputFile: parsedArgs['output'],
-        debugFile: parsedArgs['save-debugging-info'],
-        packages: parsedArgs['packages'],
-        defines: parsedArgs['define'],
-        enableExperiment: parsedArgs['enable-experiment'],
-        enableAsserts: parsedArgs['enable-asserts'],
-        soundNullSafety: parsedArgs['sound-null-safety'],
-        verbose: parsedArgs['verbose'],
-        verbosity: parsedArgs['verbosity'],
-        extraOptions: parsedArgs['extra-gen-snapshot-options']);
-  } catch (e) {
-    stderr.writeln('Failed to generate native files:');
-    stderr.writeln(e);
-    await stderr.flush();
-    exit(1);
-  }
-}
diff --git a/pkg/dart2native/lib/dart2native.dart b/pkg/dart2native/lib/dart2native.dart
index 3329a8d..f5f0dfe 100644
--- a/pkg/dart2native/lib/dart2native.dart
+++ b/pkg/dart2native/lib/dart2native.dart
@@ -44,7 +44,7 @@
     String platformDill,
     String sourceFile,
     String kernelFile,
-    String packages,
+    String? packages,
     List<String> defines,
     {String enableExperiment = '',
     List<String> extraGenKernelOptions = const []}) {
@@ -68,7 +68,7 @@
     String genSnapshot,
     String kernelFile,
     String snapshotFile,
-    String debugFile,
+    String? debugFile,
     bool enableAsserts,
     List<String> extraGenSnapshotOptions) {
   return Process.run(genSnapshot, [
diff --git a/pkg/dart2native/lib/generate.dart b/pkg/dart2native/lib/generate.dart
index 8c773d6..23797c9 100644
--- a/pkg/dart2native/lib/generate.dart
+++ b/pkg/dart2native/lib/generate.dart
@@ -21,14 +21,14 @@
 
 Future<void> generateNative({
   String kind = 'exe',
-  String sourceFile,
-  String outputFile,
-  String debugFile,
-  String packages,
-  List<String> defines,
+  required String sourceFile,
+  String? outputFile,
+  String? debugFile,
+  String? packages,
+  required List<String> defines,
   String enableExperiment = '',
   bool enableAsserts = false,
-  bool soundNullSafety,
+  bool? soundNullSafety,
   bool verbose = false,
   String verbosity = 'all',
   List<String> extraOptions = const [],
@@ -42,13 +42,13 @@
     final Kind outputKind = {
       'aot': Kind.aot,
       'exe': Kind.exe,
-    }[kind];
+    }[kind]!;
     final sourceWithoutDart = sourcePath.replaceFirst(RegExp(r'\.dart$'), '');
     final outputPath = path.canonicalize(path.normalize(outputFile ??
         {
           Kind.aot: '$sourceWithoutDart.aot',
           Kind.exe: '$sourceWithoutDart.exe',
-        }[outputKind]));
+        }[outputKind]!));
     final debugPath =
         debugFile != null ? path.canonicalize(path.normalize(debugFile)) : null;
 
diff --git a/pkg/dart2native/pubspec.yaml b/pkg/dart2native/pubspec.yaml
index 1e858a5..6cd6814 100644
--- a/pkg/dart2native/pubspec.yaml
+++ b/pkg/dart2native/pubspec.yaml
@@ -3,16 +3,13 @@
 publish_to: none
 
 environment:
-  sdk: "^2.7.0"
+  sdk: '>=2.12.0 <3.0.0'
 
 # Add the bin/dart2native.dart script to the scripts pub installs.
 executables:
   dart2native:
 
 dependencies:
-   args: ^1.4.0
-   front_end:
-     path: ../front_end
    path: any
 
 dev_dependencies:
diff --git a/pkg/dart_internal/pubspec.yaml b/pkg/dart_internal/pubspec.yaml
index 130631e..d871d5c 100644
--- a/pkg/dart_internal/pubspec.yaml
+++ b/pkg/dart_internal/pubspec.yaml
@@ -1,5 +1,5 @@
 name: dart_internal
-version: 0.2.1
+version: 0.2.2
 repository: https://github.com/dart-lang/sdk/tree/master/pkg/dart_internal
 description: >-
   This package is not intended for wide use. It provides a temporary API to
@@ -9,4 +9,4 @@
 environment:
   # Restrict the upper bound so that we can remove support for this in a later
   # version of the SDK without it being a breaking change.
-  sdk: ">=2.12.0 <2.15.0"
+  sdk: ">=2.12.0 <2.16.0"
diff --git a/pkg/dartdev/.gitignore b/pkg/dartdev/.gitignore
index 0bd726b..493289d 100644
--- a/pkg/dartdev/.gitignore
+++ b/pkg/dartdev/.gitignore
@@ -4,10 +4,6 @@
 .project
 .settings/
 build/
-pubspec.lock
 
 # Directory created by dartdoc
 doc/api/
-
-# Directory created by pub
-.dart_tool/
diff --git a/pkg/dartdev/benchmark/bench.dart b/pkg/dartdev/benchmark/bench.dart
deleted file mode 100644
index abfeaff..0000000
--- a/pkg/dartdev/benchmark/bench.dart
+++ /dev/null
@@ -1,253 +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.
-
-import 'dart:convert';
-import 'dart:io' as io;
-
-import 'package:args/args.dart';
-import 'package:meta/meta.dart';
-
-List<Benchmark> benchmarks = [
-  DartStartup(),
-  DartRunStartup(),
-  SdkSize(),
-];
-
-void main(List<String> args) async {
-  ArgParser argParser = _createArgParser();
-
-  ArgResults argResults;
-
-  try {
-    argResults = argParser.parse(args);
-  } on FormatException catch (e) {
-    print(e.message);
-    print('');
-    printUsage(argParser, includeDescription: false);
-    io.exit(1);
-  }
-
-  if (argResults['help'] || argResults.arguments.isEmpty) {
-    printUsage(argParser);
-    io.exit(0);
-  }
-
-  if (!argResults.wasParsed('dart-sdk')) {
-    print('No value passed for `dart-sdk`.');
-    print('');
-    printUsage(argParser);
-    io.exit(1);
-  }
-
-  if (!argResults.wasParsed('run')) {
-    print('No value passed for `run`.');
-    print('');
-    printUsage(argParser);
-    io.exit(1);
-  }
-
-  Context context = Context(argResults['dart-sdk']);
-
-  String benchmarkName = argResults['run'];
-  Benchmark benchmark = benchmarks.singleWhere((b) => b.id == benchmarkName);
-
-  BenchmarkResult result = await benchmark.run(context);
-  print(result.toJson());
-  io.exit(0);
-}
-
-void printUsage(ArgParser argParser, {bool includeDescription = true}) {
-  print('usage: dart bin/bench.dart <options>');
-  print('');
-  if (includeDescription) {
-    print('Run benchmarks for the dartdev tool.');
-    print('');
-  }
-  print('Options:');
-  print(argParser.usage);
-}
-
-ArgParser _createArgParser() {
-  ArgParser argParser = ArgParser(usageLineLength: io.stdout.terminalColumns);
-  argParser.addFlag(
-    'help',
-    abbr: 'h',
-    negatable: false,
-    help: 'Print this usage information.',
-  );
-  argParser.addOption(
-    'dart-sdk',
-    valueHelp: 'sdk path',
-    help: 'The path to the Dart SDK to use for benchmarking.',
-  );
-  argParser.addOption(
-    'run',
-    valueHelp: 'benchmark',
-    allowed: benchmarks.map((b) => b.id).toList(),
-    allowedHelp: {
-      for (var benchmark in benchmarks) benchmark.id: benchmark.description,
-    },
-    help: 'The benchmark to run.',
-  );
-  return argParser;
-}
-
-abstract class Benchmark {
-  final String id;
-  final String description;
-
-  Benchmark(this.id, this.description);
-
-  Future<BenchmarkResult> run(Context context);
-}
-
-class DartStartup extends Benchmark {
-  DartStartup()
-      : super(
-          'script-startup',
-          'Benchmark the startup time of a minimal Dart script (μs).',
-        );
-
-  @override
-  Future<BenchmarkResult> run(Context context) async {
-    // setup
-    io.Directory dir = io.Directory.systemTemp.createTempSync('dartdev');
-    io.File file = io.File('${dir.path}/hello.dart');
-    file.writeAsStringSync('void main() => print(\'hello\');');
-
-    // perform the benchmark
-    Stopwatch timer = Stopwatch()..start();
-    io.Process.runSync(
-      '${context.sdkPath}/bin/dart',
-      [file.absolute.path],
-    );
-    timer.stop();
-
-    // cleanup
-    dir.deleteSync(recursive: true);
-
-    // report the result
-    int micros = timer.elapsedMicroseconds;
-    return BenchmarkResult(
-      id: id,
-      value: micros,
-      units: 'microseconds',
-      userDescription: '${(micros / 1000.0).toStringAsFixed(2)}ms',
-    );
-  }
-}
-
-class DartRunStartup extends Benchmark {
-  DartRunStartup()
-      : super(
-          'run-script-startup',
-          'Benchmark the startup time of a minimal Dart script, executed with '
-              '`dart run` (μs).',
-        );
-
-  @override
-  Future<BenchmarkResult> run(Context context) async {
-    // setup
-    io.Directory dir = io.Directory.systemTemp.createTempSync('dartdev');
-    io.File file = io.File('${dir.path}/hello.dart');
-    file.writeAsStringSync('void main() => print(\'hello\');');
-
-    // perform the benchmark
-    Stopwatch timer = Stopwatch()..start();
-    io.Process.runSync(
-      '${context.sdkPath}/bin/dart',
-      ['run', file.absolute.path],
-    );
-    timer.stop();
-
-    // cleanup
-    dir.deleteSync(recursive: true);
-
-    // report the result
-    int micros = timer.elapsedMicroseconds;
-    return BenchmarkResult(
-      id: id,
-      value: micros,
-      units: 'microseconds',
-      userDescription: '${(micros / 1000.0).toStringAsFixed(2)}ms',
-    );
-  }
-}
-
-class SdkSize extends Benchmark {
-  SdkSize()
-      : super(
-          'sdk-size',
-          'Benchmark the compressed size of the Dart SDK (bytes).',
-        );
-
-  @override
-  Future<BenchmarkResult> run(Context context) async {
-    // setup
-    io.Directory tempDir = io.Directory.systemTemp.createTempSync('dartdev');
-
-    // perform the benchmark
-    io.File sdkArchive = compress(io.Directory(context.sdkPath), tempDir);
-    int bytes = sdkArchive.lengthSync();
-
-    // cleanup
-    tempDir.deleteSync(recursive: true);
-
-    // report the result
-    return BenchmarkResult(
-      id: id,
-      value: bytes,
-      units: 'bytes',
-      userDescription: '${(bytes / (1024.0 * 1024.0)).toStringAsFixed(1)}MB',
-    );
-  }
-
-  io.File compress(io.Directory sourceDir, io.Directory targetDir) {
-    String name = sourceDir.path.substring(sourceDir.path.lastIndexOf('/') + 1);
-    io.File outFile = io.File('${targetDir.absolute.path}/$name.zip');
-
-    if (io.Platform.isMacOS || io.Platform.isLinux) {
-      io.Process.runSync('zip', [
-        '-r',
-        '-9', // optimized for compressed size
-        outFile.absolute.path,
-        sourceDir.absolute.path,
-      ]);
-    } else {
-      throw Exception('platform not supported: ${io.Platform.operatingSystem}');
-    }
-
-    return outFile;
-  }
-}
-
-class Context {
-  final String sdkPath;
-
-  Context(this.sdkPath);
-}
-
-class BenchmarkResult {
-  final String id;
-  final int value;
-  final String units;
-  final String userDescription;
-
-  BenchmarkResult({
-    @required this.id,
-    @required this.value,
-    @required this.units,
-    @required this.userDescription,
-  });
-
-  String toJson() {
-    Map m = {
-      'id': id,
-      'value': value,
-      'units': units,
-      'userDescription': userDescription,
-    };
-    return JsonEncoder.withIndent('  ').convert(m);
-  }
-}
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index 5895deb..c50d7d0 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -11,9 +11,11 @@
 import 'package:cli_util/cli_logging.dart';
 import 'package:dart_style/src/cli/format_command.dart';
 import 'package:dartdev/src/commands/migrate.dart';
+import 'package:devtools_server/devtools_server.dart';
 import 'package:meta/meta.dart';
 import 'package:pedantic/pedantic.dart';
 import 'package:pub/pub.dart';
+
 import 'package:usage/usage.dart';
 
 import 'src/analytics.dart';
@@ -27,6 +29,7 @@
 import 'src/core.dart';
 import 'src/events.dart';
 import 'src/experiments.dart';
+import 'src/sdk.dart';
 import 'src/utils.dart';
 import 'src/vm_interop_handler.dart';
 
@@ -34,6 +37,15 @@
 /// analytics logic, it has been moved here.
 Future<void> runDartdev(List<String> args, SendPort port) async {
   VmInteropHandler.initialize(port);
+
+  // TODO(sigurdm): Remove when top-level pub is removed.
+  if (args[0] == '__deprecated_pub') {
+    // This is the entry-point supporting the top-level `pub` script.
+    // ignore: deprecated_member_use
+    VmInteropHandler.exit(await deprecatedpubCommand().run(args.skip(1)));
+    return;
+  }
+
   if (args.contains('run')) {
     // These flags have a format that can't be handled by package:args, so while
     // they are valid flags we'll assume the VM has verified them by this point.
@@ -101,6 +113,13 @@
     addCommand(AnalyzeCommand(verbose: verbose));
     addCommand(CreateCommand(verbose: verbose));
     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));
@@ -116,6 +135,7 @@
   @override
   String get invocation =>
       'dart ${verbose ? '[vm-options] ' : ''}<command|dart-file> [arguments]';
+
   @override
   String get usageFooter =>
       'See https://dart.dev/tools/dart-tool for detailed documentation.';
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index a17a169..0954378 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -24,12 +24,16 @@
 /// A class to provide an API wrapper around an analysis server process.
 class AnalysisServer {
   AnalysisServer(
+    this.packagesFile,
     this.sdkPath,
     this.analysisRoots, {
+    this.cacheDirectoryPath,
     @required this.commandName,
     @required this.argResults,
   });
 
+  final String cacheDirectoryPath;
+  final File packagesFile;
   final Directory sdkPath;
   final List<FileSystemEntity> analysisRoots;
   final String commandName;
@@ -85,6 +89,8 @@
       '--disable-server-feature-search',
       '--sdk',
       sdkPath.path,
+      if (cacheDirectoryPath != null) '--cache=$cacheDirectoryPath',
+      if (packagesFile != null) '--packages=${packagesFile.path}',
     ];
 
     _process = await startDartProcess(sdk, command);
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 27fbf53..96f0fbe 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -45,6 +45,12 @@
 
       // Options hidden by default.
       ..addOption(
+        'cache',
+        valueHelp: 'path',
+        help: 'Override the location of the analysis cache.',
+        hide: !verbose,
+      )
+      ..addOption(
         'format',
         valueHelp: 'value',
         help: 'Specifies the format to display errors.',
@@ -61,6 +67,13 @@
               'the file path and error message fields.',
         },
         hide: !verbose,
+      )
+      ..addOption(
+        'packages',
+        valueHelp: 'path',
+        help: 'The path to the package resolution configuration file, which '
+            'supplies a mapping of package names\ninto paths.',
+        hide: !verbose,
       );
   }
 
@@ -97,8 +110,10 @@
         machineFormat ? null : log.progress('Analyzing $targetsNames');
 
     final AnalysisServer server = AnalysisServer(
+      _packagesFile(),
       io.Directory(sdk.sdkPath),
       targets,
+      cacheDirectoryPath: argResults['cache'],
       commandName: 'analyze',
       argResults: argResults,
     );
@@ -179,6 +194,19 @@
     }
   }
 
+  io.File _packagesFile() {
+    var path = argResults['packages'];
+    if (path is String) {
+      var file = io.File(path);
+      if (!file.existsSync()) {
+        usageException("The file doesn't exist: $path");
+      }
+      return file;
+    } else {
+      return null;
+    }
+  }
+
   @visibleForTesting
   static void emitDefaultFormat(
     Logger log,
@@ -303,13 +331,6 @@
     }));
   }
 
-  /// Return a relative path if it is a shorter reference than the given dir.
-  static String _relativePath(String givenPath, io.Directory fromDir) {
-    String fromPath = fromDir?.absolute?.resolveSymbolicLinksSync();
-    String relative = path.relative(givenPath, from: fromPath);
-    return relative.length <= givenPath.length ? relative : givenPath;
-  }
-
   @visibleForTesting
   static void emitMachineFormat(Logger log, List<AnalysisError> errors) {
     for (final AnalysisError error in errors) {
@@ -342,4 +363,11 @@
     }
     return result.toString();
   }
+
+  /// Return a relative path if it is a shorter reference than the given dir.
+  static String _relativePath(String givenPath, io.Directory fromDir) {
+    String fromPath = fromDir?.absolute?.resolveSymbolicLinksSync();
+    String relative = path.relative(givenPath, from: fromPath);
+    return relative.length <= givenPath.length ? relative : givenPath;
+  }
 }
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 5027f18..6c3269d 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -160,7 +160,9 @@
     // Determine output file name.
     String outputFile = argResults[commonOptions['outputFile'].flag];
     if (outputFile == null) {
-      final inputWithoutDart = sourcePath.replaceFirst(RegExp(r'\.dart$'), '');
+      final inputWithoutDart = sourcePath.endsWith('.dart')
+          ? sourcePath.substring(0, sourcePath.length - 5)
+          : sourcePath;
       outputFile = '$inputWithoutDart.$fileExt';
     }
 
@@ -239,7 +241,13 @@
           defaultsTo: null)
       ..addOption('save-debugging-info', abbr: 'S', valueHelp: 'path', help: '''
 Remove debugging information from the output and save it separately to the specified file.
-<path> can be relative or absolute.''');
+<path> can be relative or absolute.''')
+      ..addMultiOption(
+        'extra-gen-snapshot-options',
+        help: 'Pass additional options to gen_snapshot.',
+        hide: true,
+        valueHelp: 'opt1,opt2,...',
+      );
 
     addExperimentalFlags(argParser, verbose);
   }
@@ -277,6 +285,7 @@
         debugFile: argResults['save-debugging-info'],
         verbose: verbose,
         verbosity: argResults['verbosity'],
+        extraOptions: argResults['extra-gen-snapshot-options'],
       );
       return 0;
     } catch (e) {
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
index da41f79..9819614 100644
--- a/pkg/dartdev/lib/src/commands/create.dart
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -102,14 +102,11 @@
     );
 
     if (argResults['pub']) {
-      if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
-        return 255;
-      }
       log.stdout('');
       var progress = log.progress('Running pub get');
       var process = await startDartProcess(
         sdk,
-        [sdk.pubSnapshot, 'get', '--no-precompile'],
+        ['pub', 'get'],
         cwd: dir,
       );
 
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 08d4d36..b19b433 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -90,6 +90,7 @@
         'Computing fixes in ${log.ansi.emphasized(projectName)}$modeText');
 
     var server = AnalysisServer(
+      null,
       io.Directory(sdk.sdkPath),
       [dir],
       commandName: 'fix',
@@ -241,7 +242,7 @@
 
   /// Compress sequences of whitespace characters into a single space.
   String _compressWhitespace(String code) =>
-      code.replaceAll(RegExp(r'\s*'), ' ');
+      code.replaceAll(RegExp(r'\s+'), ' ');
 
   String _pluralFix(int count) => count == 1 ? 'fix' : 'fixes';
 
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index b84cd86..3f4b340 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -50,13 +50,13 @@
 
   @override
   String get invocation {
+    String result = super.invocation;
     if (_verbose) {
-      final splitInvocation = super.invocation.split(' ');
-      splitInvocation.insert(1, '[vm-options]');
-      return splitInvocation.join(' ');
-    } else {
-      return super.invocation;
+      var firstSpace = result.indexOf(' ');
+      if (firstSpace < 0) firstSpace = result.length;
+      result = result.replaceRange(firstSpace, firstSpace, ' [vm-options]');
     }
+    return result;
   }
 
   /// Create the ArgParser instance for this command.
@@ -129,7 +129,7 @@
   stream
       .transform(utf8.decoder)
       .transform(const LineSplitter())
-      .listen(handler);
+      .forEach(handler);
 }
 
 /// A representation of a project on disk.
diff --git a/pkg/dartdev/lib/src/sdk.dart b/pkg/dartdev/lib/src/sdk.dart
index 833df09..2f42de6 100644
--- a/pkg/dartdev/lib/src/sdk.dart
+++ b/pkg/dartdev/lib/src/sdk.dart
@@ -8,42 +8,21 @@
 
 import 'core.dart';
 
-final Sdk sdk = Sdk();
-
-String get _computeSdkPath {
-  // The common case, and how cli_util.dart computes the Dart SDK directory,
-  // path.dirname called twice on Platform.resolvedExecutable. We confirm by
-  // asserting that the directory ./bin/snapshots/ exists after this directory:
-  var sdkPath =
-      path.absolute(path.dirname(path.dirname(Platform.resolvedExecutable)));
-  var snapshotsDir = path.join(sdkPath, 'bin', 'snapshots');
-  if (Directory(snapshotsDir).existsSync()) {
-    return sdkPath;
-  }
-
-  // This is the less common case where the user is in the checked out Dart SDK,
-  // and is executing dart via:
-  // ./out/ReleaseX64/dart ...
-  // We confirm in a similar manner with the snapshot directory existence and
-  // then return the correct sdk path:
-  snapshotsDir = path.absolute(path.dirname(Platform.resolvedExecutable),
-      'dart-sdk', 'bin', 'snapshots');
-  if (Directory(snapshotsDir).existsSync()) {
-    return path.absolute(path.dirname(Platform.resolvedExecutable), 'dart-sdk');
-  }
-
-  // If neither returned above, we return the common case:
-  return sdkPath;
-}
+final Sdk sdk = Sdk._instance;
 
 /// A utility class for finding and referencing paths within the Dart SDK.
 class Sdk {
+  static final Sdk _instance = _createSingleton();
+
+  /// Path to SDK directory.
   final String sdkPath;
+
+  /// The SDK's semantic versioning version (x.y.z-a.b.channel).
   final String version;
 
-  Sdk()
-      : sdkPath = _computeSdkPath,
-        version = Runtime.runtime.version;
+  factory Sdk() => _instance;
+
+  Sdk._(this.sdkPath, this.version);
 
   // Assume that we want to use the same Dart executable that we used to spawn
   // DartDev. We should be able to run programs with out/ReleaseX64/dart even
@@ -78,13 +57,6 @@
         'devtools',
       );
 
-  String get pubSnapshot => path.absolute(
-        sdkPath,
-        'bin',
-        'snapshots',
-        'pub.dart.snapshot',
-      );
-
   static bool checkArtifactExists(String path) {
     if (!File(path).existsSync()) {
       log.stderr('Could not find $path. Have you built the full '
@@ -93,27 +65,68 @@
     }
     return true;
   }
+
+  static Sdk _createSingleton() {
+    // Find SDK path.
+
+    // The common case, and how cli_util.dart computes the Dart SDK directory,
+    // [path.dirname] called twice on Platform.resolvedExecutable. We confirm by
+    // asserting that the directory `./bin/snapshots/` exists in this directory:
+    var sdkPath =
+        path.absolute(path.dirname(path.dirname(Platform.resolvedExecutable)));
+    var snapshotsDir = path.join(sdkPath, 'bin', 'snapshots');
+    if (!Directory(snapshotsDir).existsSync()) {
+      // This is the less common case where the user is in
+      // the checked out Dart SDK, and is executing `dart` via:
+      // ./out/ReleaseX64/dart ...
+      // We confirm in a similar manner with the snapshot directory existence
+      // and then return the correct sdk path:
+      var altPath =
+          path.absolute(path.dirname(Platform.resolvedExecutable), 'dart-sdk');
+      var snapshotsDir = path.join(altPath, 'bin', 'snapshots');
+      if (Directory(snapshotsDir).existsSync()) {
+        sdkPath = altPath;
+      }
+      // If that snapshot dir does not exist either,
+      // we use the first guess anyway.
+    }
+
+    // Defer to [Runtime] for the version.
+    var version = Runtime.runtime.version;
+
+    return Sdk._(sdkPath, version);
+  }
 }
 
-/// Return information about the current runtime.
+/// Information about the current runtime.
 class Runtime {
-  static Runtime runtime = Runtime._();
+  static Runtime runtime = _createSingleton();
 
-  // Match "2.10.0-edge.0b2da6e7 (be) ...".
-  static final RegExp _channelRegex = RegExp(r'.* \(([\d\w]+)\) .*');
-
-  /// The SDK's version number (x.y.z-a.b.channel).
+  /// The SDK's semantic versioning version (x.y.z-a.b.channel).
   final String version;
 
   /// The SDK's release channel (`be`, `dev`, `beta`, `stable`).
-  final String channel;
+  ///
+  /// May be null if [Platform.version] does not have the expected format.
+  final String /*?*/ channel;
 
-  Runtime._()
-      : version = _computeVersion(Platform.version),
-        channel = _computeChannel(Platform.version);
+  Runtime._(this.version, this.channel);
 
-  static String _computeVersion(String version) =>
-      version.substring(0, version.indexOf(' '));
-  static String _computeChannel(String version) =>
-      _channelRegex.firstMatch(version)?.group(1);
+  static Runtime _createSingleton() {
+    var versionString = Platform.version;
+    // Exepcted format: "version (channel) ..."
+    var version = versionString;
+    String /*?*/ channel;
+    var versionEnd = versionString.indexOf(' ');
+    if (versionEnd > 0) {
+      version = versionString.substring(0, versionEnd);
+      var channelEnd = versionString.indexOf(' ', versionEnd + 1);
+      if (channelEnd < 0) channelEnd = versionString.length;
+      if (versionString.startsWith('(', versionEnd + 1) &&
+          versionString.startsWith(')', channelEnd - 1)) {
+        channel = versionString.substring(versionEnd + 2, channelEnd - 1);
+      }
+    }
+    return Runtime._(version, channel);
+  }
 }
diff --git a/pkg/dartdev/lib/src/templates.dart b/pkg/dartdev/lib/src/templates.dart
index 041ded0..3d36844 100644
--- a/pkg/dartdev/lib/src/templates.dart
+++ b/pkg/dartdev/lib/src/templates.dart
@@ -14,7 +14,7 @@
 import 'templates/web_simple.dart';
 
 final _substituteRegExp = RegExp(r'__([a-zA-Z]+)__');
-final _nonValidSubstituteRegExp = RegExp('[^a-zA-Z]');
+final _nonValidSubstituteRegExp = RegExp(r'[^a-zA-Z]');
 
 final List<Generator> generators = [
   ConsoleSimpleGenerator(),
@@ -38,6 +38,11 @@
   final List<TemplateFile> files = [];
   TemplateFile _entrypoint;
 
+  /// Lazily initialized cache for lower-case if [id].
+  ///
+  /// Used by [compareTo].
+  String /*?*/ _lowerCaseId;
+
   Generator(
     this.id,
     this.label,
@@ -45,6 +50,8 @@
     this.categories = const [],
   });
 
+  String get lowerCaseId => _lowerCaseId ??= id.toLowerCase();
+
   /// The entrypoint of the application; the main file for the project, which an
   /// IDE might open after creating the project.
   TemplateFile get entrypoint => _entrypoint;
@@ -92,11 +99,8 @@
     }
   }
 
-  int numFiles() => files.length;
-
   @override
-  int compareTo(Generator other) =>
-      id.toLowerCase().compareTo(other.id.toLowerCase());
+  int compareTo(Generator other) => lowerCaseId.compareTo(other.lowerCaseId);
 
   /// Return some user facing instructions about how to finish installation of
   /// the template.
@@ -199,16 +203,10 @@
 @visibleForTesting
 String substituteVars(String str, Map<String, String> vars) {
   if (vars.keys.any((element) => element.contains(_nonValidSubstituteRegExp))) {
-    throw ArgumentError('vars.keys can only contain letters.');
+    throw ArgumentError.value(
+        vars, 'vars', 'vars.keys can only contain letters.');
   }
 
-  return str.replaceAllMapped(_substituteRegExp, (match) {
-    final item = vars[match[1]];
-
-    if (item == null) {
-      return match[0];
-    } else {
-      return item;
-    }
-  });
+  return str.replaceAllMapped(
+      _substituteRegExp, (match) => vars[match[1]] ?? match[0]);
 }
diff --git a/pkg/dartdev/lib/src/utils.dart b/pkg/dartdev/lib/src/utils.dart
index c5aa257..c36d6fa 100644
--- a/pkg/dartdev/lib/src/utils.dart
+++ b/pkg/dartdev/lib/src/utils.dart
@@ -83,7 +83,7 @@
 // A valid Dart identifier that can be used for a package, i.e. no
 // capital letters.
 // https://dart.dev/guides/language/language-tour#important-concepts
-final RegExp _identifierRegExp = RegExp('[a-z_][a-z0-9_]*');
+final RegExp _identifierRegExp = RegExp(r'^[a-z_][a-z\d_]*$');
 
 // non-contextual dart keywords.
 // https://dart.dev/guides/language/language-tour#keywords
@@ -160,17 +160,16 @@
 };
 
 /// Whether [name] is a valid Pub package.
-bool isValidPackageName(String name) {
-  final Match match = _identifierRegExp.matchAsPrefix(name);
-  return match != null && match.end == name.length && !_keywords.contains(name);
-}
+bool isValidPackageName(String name) =>
+    _identifierRegExp.hasMatch(name) && !_keywords.contains(name);
 
 /// Convert a directory name into a reasonably legal pub package name.
 String normalizeProjectName(String name) {
   name = name.replaceAll('-', '_').replaceAll(' ', '_');
   // Strip any extension (like .dart).
-  if (name.contains('.')) {
-    name = name.substring(0, name.indexOf('.'));
+  var dotIndex = name.indexOf('.');
+  if (dotIndex >= 0) {
+    name = name.substring(0, dotIndex);
   }
   return name;
 }
diff --git a/pkg/dartdev/pubspec.yaml b/pkg/dartdev/pubspec.yaml
index 3887bdf..5f509c2 100644
--- a/pkg/dartdev/pubspec.yaml
+++ b/pkg/dartdev/pubspec.yaml
@@ -12,11 +12,12 @@
     path: ../analysis_server_client
   analyzer:
     path: ../analyzer
-  args: ^1.6.0
-  cli_util: '>=0.1.4 <0.3.0'
+  args: any
+  cli_util: any
   dart2native:
     path: ../dart2native
   dart_style: any
+  devtools_server: any
   front_end:
     path: ../front_end
   intl: any
@@ -24,15 +25,15 @@
     path: ../meta
   nnbd_migration:
     path: ../nnbd_migration
-  path: ^1.0.0
-  pedantic: ^1.9.0
+  path: any
+  pedantic: any
   pub: any
   telemetry:
     path: ../telemetry
-  usage: ^3.4.0
+  usage: any
 
 dev_dependencies:
   lints: any
   pub_semver: any
-  test: ^1.0.0
+  test: any
   yaml: any
diff --git a/pkg/dartdev/test/analysis_server_test.dart b/pkg/dartdev/test/analysis_server_test.dart
index 05f7597..9902dda 100644
--- a/pkg/dartdev/test/analysis_server_test.dart
+++ b/pkg/dartdev/test/analysis_server_test.dart
@@ -24,15 +24,25 @@
     tearDown(() => p?.dispose());
 
     test('can start', () async {
-      AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing', argResults: null);
+      AnalysisServer server = AnalysisServer(
+        null,
+        io.Directory(sdk.sdkPath),
+        [p.dir],
+        commandName: 'testing',
+        argResults: null,
+      );
       await server.start();
       await server.shutdown();
     });
 
     test('can send message', () async {
-      AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing', argResults: null);
+      AnalysisServer server = AnalysisServer(
+        null,
+        io.Directory(sdk.sdkPath),
+        [p.dir],
+        commandName: 'testing',
+        argResults: null,
+      );
       await server.start();
 
       final response = await server.getVersion();
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index 83050f7..b3e1f8b 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -99,7 +99,8 @@
     });
     test('create', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['create', '-tpackage-simple', 'name']);
+      final result =
+          p.runSync(['create', '--no-pub', '-tpackage-simple', 'name']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -113,7 +114,7 @@
             'label': null,
             'value': null,
             'cd1': '0',
-            'cd3': ' template ',
+            'cd3': ' pub template ',
           }
         },
         {
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index d2a43e3..af8984c 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -376,6 +376,70 @@
     expect(stdout, contains('referenced_before_declaration'));
   });
 
+  group('--packages', () {
+    test('existing', () {
+      final foo = project(name: 'foo');
+      foo.file('lib/foo.dart', 'var my_foo = 0;');
+
+      p = project(mainSrc: '''
+import 'package:foo/foo.dart';
+void f() {
+  my_foo;
+}''');
+      p.file('my_packages.json', '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "foo",
+      "rootUri": "file://${foo.dirPath}",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    }
+  ]
+}
+''');
+      var result = p.runSync([
+        'analyze',
+        '--packages=${p.findFile('my_packages.json').path}',
+        p.dirPath,
+      ]);
+
+      expect(result.exitCode, 0);
+      expect(result.stderr, isEmpty);
+      expect(result.stdout, contains('No issues found!'));
+    });
+
+    test('not existing', () {
+      p = project();
+      var result = p.runSync([
+        'analyze',
+        '--packages=no.such.file',
+        p.dirPath,
+      ]);
+
+      expect(result.exitCode, 64);
+      expect(result.stderr, contains("The file doesn't exist: no.such.file"));
+      expect(result.stderr, contains(_analyzeUsageText));
+    });
+  });
+
+  test('--cache', () {
+    var cache = project(name: 'cache');
+
+    p = project(mainSrc: 'var v = 0;');
+    var result = p.runSync([
+      'analyze',
+      '--cache=${cache.dirPath}',
+      p.mainPath,
+    ]);
+
+    expect(result.exitCode, 0);
+    expect(result.stderr, isEmpty);
+    expect(result.stdout, contains('No issues found!'));
+    expect(cache.findDirectory('.analysis-driver'), isNotNull);
+  });
+
   group('display mode', () {
     final sampleInfoJson = {
       'severity': 'INFO',
diff --git a/pkg/dartdev/test/commands/devtools_test.dart b/pkg/dartdev/test/commands/devtools_test.dart
new file mode 100644
index 0000000..37bc32e
--- /dev/null
+++ b/pkg/dartdev/test/commands/devtools_test.dart
@@ -0,0 +1,94 @@
+// 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';
+import 'dart:io';
+
+import 'package:test/test.dart';
+
+import '../utils.dart';
+
+void main() {
+  group('devtools', devtools, timeout: longTimeout);
+}
+
+void devtools() {
+  TestProject p;
+
+  tearDown(() => p?.dispose());
+
+  test('--help', () {
+    p = project();
+    var result = p.runSync(['devtools', '--help']);
+    expect(result.exitCode, 0);
+    expect(result.stderr, isEmpty);
+    expect(result.stdout, contains('Open DevTools'));
+    expect(result.stdout,
+        contains('Usage: dart devtools [arguments] [service protocol uri]'));
+
+    // Does not show verbose help.
+    expect(result.stdout.contains('--try-ports'), isFalse);
+  });
+
+  test('--help --verbose', () {
+    p = project();
+    var result = p.runSync(['devtools', '--help', '--verbose']);
+    expect(result.exitCode, 0);
+    expect(result.stderr, isEmpty);
+    expect(result.stdout, contains('Open DevTools'));
+    expect(result.stdout,
+        contains('Usage: dart devtools [arguments] [service protocol uri]'));
+
+    // Shows verbose help.
+    expect(result.stdout, contains('--try-ports'));
+  });
+
+  group('integration', () {
+    Process process;
+
+    tearDown(() {
+      process?.kill();
+    });
+
+    test('serves resources', () async {
+      p = project();
+
+      // start the devtools server
+      process = await p.start(['devtools', '--no-launch-browser', '--machine']);
+
+      final Stream<String> inStream = process.stdout
+          .transform<String>(utf8.decoder)
+          .transform<String>(const LineSplitter());
+
+      final line = await inStream.first;
+      final json = jsonDecode(line);
+
+      // {"event":"server.started","method":"server.started","params":{
+      //   "host":"127.0.0.1","port":9100,"pid":93508,"protocolVersion":"1.1.0"
+      // }}
+      expect(json['event'], 'server.started');
+      expect(json['params'], isNotNull);
+
+      final host = json['params']['host'];
+      final port = json['params']['port'];
+      expect(host, isA<String>());
+      expect(port, isA<int>());
+
+      // Connect to the port and confirm we can load a devtools resource.
+      HttpClient client = HttpClient();
+      final httpRequest = await client.get(host, port, 'index.html');
+      final httpResponse = await httpRequest.close();
+
+      final contents =
+          (await httpResponse.transform(utf8.decoder).toList()).join();
+      client.close();
+
+      expect(contents, contains('DevTools'));
+
+      // kill the process
+      process.kill();
+      process = null;
+    });
+  });
+}
diff --git a/pkg/dartdev/test/commands/flag_test.dart b/pkg/dartdev/test/commands/flag_test.dart
index bfcc02c..da055db 100644
--- a/pkg/dartdev/test/commands/flag_test.dart
+++ b/pkg/dartdev/test/commands/flag_test.dart
@@ -37,8 +37,8 @@
       if (command.argParser != null) {
         if (command.name != 'help' &&
             command.name != 'format' &&
-            command.name != 'migrate' &&
-            command.name != 'pub') {
+            command.name != 'pub' &&
+            command.name != 'test') {
           expect(command.argParser.usageLineLength,
               stdout.hasTerminal ? stdout.terminalColumns : null);
         } else if (command.name == 'pub') {
@@ -82,8 +82,8 @@
     var result = p.runSync(['--help', '--verbose']);
 
     expect(result.exitCode, 0);
-    expect(result.stdout, isEmpty);
-    expect(result.stderr,
+    expect(result.stderr, isEmpty);
+    expect(result.stdout,
         contains('The following options are only used for VM development'));
   });
 
@@ -92,11 +92,27 @@
     var result = p.runSync(['--help', '-v']);
 
     expect(result.exitCode, 0);
-    expect(result.stdout, isEmpty);
-    expect(result.stderr,
+    expect(result.stderr, isEmpty);
+    expect(result.stdout,
         contains('The following options are only used for VM development'));
   });
 
+  test('print Dart CLI help on usage error', () {
+    p = project();
+    var result = p.runSync(['---help']);
+    expect(result.exitCode, 255);
+    expect(result.stdout, contains(DartdevRunner.dartdevDescription));
+    expect(result.stderr, isEmpty);
+  });
+
+  test('print VM help on usage error when --disable-dart-dev is provided', () {
+    p = project();
+    var result = p.runSync(['---help', '--disable-dart-dev']);
+    expect(result.exitCode, 255);
+    expect(result.stdout, isNot(contains(DartdevRunner.dartdevDescription)));
+    expect(result.stderr, isEmpty);
+  });
+
   test('help', () {
     p = project();
     var result = p.runSync(['help']);
diff --git a/pkg/dartdev/test/sdk_test.dart b/pkg/dartdev/test/sdk_test.dart
index 2f0acab..34dbfc7 100644
--- a/pkg/dartdev/test/sdk_test.dart
+++ b/pkg/dartdev/test/sdk_test.dart
@@ -25,10 +25,6 @@
     expectFileExists(Sdk().analysisServerSnapshot);
   });
 
-  test('pub snapshot', () {
-    expectFileExists(Sdk().pubSnapshot);
-  });
-
   test('dds snapshot', () {
     expectFileExists(Sdk().ddsSnapshot);
   });
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index 5a64ced..ae6be55 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -141,6 +141,11 @@
   String get absolutePathToDartdevFile =>
       path.join(sdkRootPath, 'pkg', 'dartdev', 'bin', 'dartdev.dart');
 
+  Directory findDirectory(String name) {
+    var directory = Directory(path.join(dir.path, name));
+    return directory.existsSync() ? directory : null;
+  }
+
   File findFile(String name) {
     var file = File(path.join(dir.path, name));
     return file.existsSync() ? file : null;
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 9859145..953e36b 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,13 @@
+# 2.1.2
+- Silently handle exceptions that occur within RPC request handlers.
+
+# 2.1.1
+- Fix another possibility of `LateInitializationError` being thrown when trying to
+  cleanup after an error during initialization.
+
+# 2.1.0
+- Added getAvailableCachedCpuSamples and getCachedCpuSamples.
+
 # 2.0.2
 - Fix possibility of `LateInitializationError` being thrown when trying to
   cleanup after an error during initialization.
diff --git a/pkg/dds/dds_protocol.md b/pkg/dds/dds_protocol.md
index b690c1a..48ac4c1 100644
--- a/pkg/dds/dds_protocol.md
+++ b/pkg/dds/dds_protocol.md
@@ -1,6 +1,6 @@
-# Dart Development Service Protocol 1.2
+# Dart Development Service Protocol 1.3
 
-This document describes _version 1.2_ of the Dart Development Service Protocol.
+This document describes _version 1.3_ of the Dart Development Service Protocol.
 This protocol is an extension of the Dart VM Service Protocol and implements it
 in it's entirety. For details on the VM Service Protocol, see the [Dart VM Service Protocol Specification][service-protocol].
 
@@ -16,16 +16,22 @@
 - [IDs and Names](#ids-and-names)
 - [Revision History](#revision-history)
 - [Public RPCs](#public-rpcs)
+  - [getAvailableCachedCpuSamples](#getavailablecachedcpusamples)
+  - [getCachedCpuSamples](#getcachedcpusamples)[
   - [getClientName](#getclientname)
   - [getDartDevelopmentServiceVersion](#getdartdevelopmentserviceversion)
   - [getLogHistorySize](#getloghistorysize)
+  - [getStreamHistory](#getstreamhistory)[
   - [requirePermissionToResume](#requirepermissiontoresume)
   - [setClientName](#setclientname)
   - [setLogHistorySize](#setloghistorysize)
 - [Public Types](#public-types)
+  - [AvailableCachedCpuSamples](#availablecachedcpusamples)[
+  - [CachedCpuSamples](#cachedcpusamples)
   - [ClientName](#clientname)
   - [DartDevelopmentServiceVersion](#dartdevelopmentserviceversion)
   - [Size](#size)
+  - [StreamHistory](#streamhistory)[
 
 ## RPCs, Requests, and Responses
 
@@ -67,6 +73,29 @@
 
 The DDS Protocol supports all [public RPCs defined in the VM Service protocol][service-protocol-public-rpcs].
 
+### getAvailableCachedCpuSamples
+
+```
+AvailableCachedCpuSamples getAvailableCachedCpuSamples();
+```
+
+The _getAvailableCachedCpuSamples_ RPC is used to determine which caches of CPU samples
+are available. Caches are associated with individual _UserTag_ names and are specified
+when DDS is started via the _cachedUserTags_ parameter.
+
+See [AvailableCachedCpuSamples](#availablecachedcpusamples).
+
+### getCachedCpuSamples
+
+```
+CachedCpuSamples getCachedCpuSamples(string isolateId, string userTag);
+```
+
+The _getCachedCpuSamples_ RPC is used to retrieve a cache of CPU samples collected
+under a _UserTag_ with name _userTag_.
+
+See [CachedCpuSamples](#cachedcpusamples).
+
 ### getClientName
 
 ```
@@ -181,6 +210,37 @@
 
 The DDS Protocol supports all [public types defined in the VM Service protocol][service-protocol-public-types].
 
+### AvailableCachedCpuSamples
+
+```
+class AvailableCachedCpuSamples extends Response {
+  // A list of UserTag names associated with CPU sample caches.
+  string[] cacheNames;
+}
+```
+
+A collection of [UserTag] names associated with caches of CPU samples.
+
+See [getAvailableCachedCpuSamples](#getavailablecachedcpusamples).
+
+### CachedCpuSamples
+
+```
+class CachedCpuSamples extends CpuSamples {
+  // The name of the UserTag associated with this cache of samples.
+  string userTag;
+
+  // Provided if the CPU sample cache has filled and older samples have been
+  // dropped.
+  bool truncated [optional];
+}
+```
+
+An extension of [CpuSamples](#cpu-samples) which represents a set of cached
+samples, associated with a particular [UserTag] name.
+
+See [getCachedCpuSamples](#getcachedcpusamples).
+
 ### ClientName
 
 ```
@@ -220,10 +280,12 @@
 1.0 | Initial revision
 1.1 | Added `getDartDevelopmentServiceVersion` RPC.
 1.2 | Added `getStreamHistory` RPC.
+1.3 | Added `getAvailableCachedCpuSamples` and `getCachedCpuSamples` RPCs.
 
 [resume]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#resume
 [success]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#success
 [version]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#version
+[cpu-samples]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#cpusamples
 
 [service-protocol]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md
 [service-protocol-rpcs-requests-and-responses]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#rpcs-requests-and-responses
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
index e8f05bb..f31e447 100644
--- a/pkg/dds/lib/dds.dart
+++ b/pkg/dds/lib/dds.dart
@@ -42,6 +42,7 @@
     Uri? serviceUri,
     bool enableAuthCodes = true,
     bool ipv6 = false,
+    List<String> cachedUserTags = const [],
     DevToolsConfiguration? devToolsConfiguration,
     bool logRequests = false,
   }) async {
@@ -79,6 +80,7 @@
       remoteVmServiceUri,
       serviceUri,
       enableAuthCodes,
+      cachedUserTags,
       ipv6,
       devToolsConfiguration,
       logRequests,
@@ -136,9 +138,13 @@
   /// requests.
   bool get isRunning;
 
+  /// The list of [UserTag]s used to determine which CPU samples are cached by
+  /// DDS.
+  List<String> get cachedUserTags;
+
   /// The version of the DDS protocol supported by this [DartDevelopmentService]
   /// instance.
-  static const String protocolVersion = '1.2';
+  static const String protocolVersion = '1.3';
 }
 
 class DartDevelopmentServiceException implements Exception {
diff --git a/pkg/dds/lib/src/client.dart b/pkg/dds/lib/src/client.dart
index 1df3a3a..771ccee 100644
--- a/pkg/dds/lib/src/client.dart
+++ b/pkg/dds/lib/src/client.dart
@@ -206,6 +206,19 @@
       return supportedProtocols;
     });
 
+    _clientPeer.registerMethod(
+      'getAvailableCachedCpuSamples',
+      (_) => {
+        'type': 'AvailableCachedCpuSamples',
+        'cacheNames': dds.cachedUserTags,
+      },
+    );
+
+    _clientPeer.registerMethod(
+      'getCachedCpuSamples',
+      dds.isolateManager.getCachedCpuSamples,
+    );
+
     // `evaluate` and `evaluateInFrame` actually consist of multiple RPC
     // invocations, including a call to `compileExpression` which can be
     // overridden by clients which provide their own implementation (e.g.,
diff --git a/pkg/dds/lib/src/common/ring_buffer.dart b/pkg/dds/lib/src/common/ring_buffer.dart
new file mode 100644
index 0000000..a2efa53
--- /dev/null
+++ b/pkg/dds/lib/src/common/ring_buffer.dart
@@ -0,0 +1,68 @@
+// 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:math';
+
+class RingBuffer<T> {
+  RingBuffer(this._bufferSize) {
+    _buffer = List<T?>.filled(
+      _bufferSize,
+      null,
+    );
+  }
+
+  Iterable<T> call() sync* {
+    for (int i = _size - 1; i >= 0; --i) {
+      yield _buffer[(_count - i - 1) % _bufferSize]!;
+    }
+  }
+
+  /// Inserts a new element into the [RingBuffer].
+  ///
+  /// Returns the element evicted as a result of adding the new element if the
+  /// buffer is as max capacity, null otherwise.
+  T? add(T e) {
+    if (_buffer.isEmpty) {
+      return null;
+    }
+    T? evicted;
+    final index = _count % _bufferSize;
+    if (index < _count) {
+      evicted = _buffer[index];
+    }
+    _buffer[index] = e;
+    _count++;
+    return evicted;
+  }
+
+  void resize(int size) {
+    assert(size >= 0);
+    if (size == _bufferSize) {
+      return;
+    }
+    final resized = List<T?>.filled(
+      size,
+      null,
+    );
+    int count = 0;
+    if (size > 0) {
+      for (final e in this()) {
+        resized[count++ % size] = e;
+      }
+    }
+    _count = count;
+    _bufferSize = size;
+    _buffer = resized;
+  }
+
+  bool get isTruncated => _count % bufferSize < _count;
+
+  int get bufferSize => _bufferSize;
+
+  int get _size => min(_count, _bufferSize);
+
+  int _bufferSize;
+  int _count = 0;
+  late List<T?> _buffer;
+}
diff --git a/pkg/dds/lib/src/cpu_samples_manager.dart b/pkg/dds/lib/src/cpu_samples_manager.dart
new file mode 100644
index 0000000..a0c413a
--- /dev/null
+++ b/pkg/dds/lib/src/cpu_samples_manager.dart
@@ -0,0 +1,201 @@
+// 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:dds/src/common/ring_buffer.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'dds_impl.dart';
+
+/// Manages CPU sample caches for an individual [Isolate].
+class CpuSamplesManager {
+  CpuSamplesManager(this.dds, this.isolateId) {
+    for (final userTag in dds.cachedUserTags) {
+      cpuSamplesCaches[userTag] = CpuSamplesRepository(userTag);
+    }
+  }
+
+  void handleUserTagEvent(Event event) {
+    assert(event.kind! == EventKind.kUserTagChanged);
+    _currentTag = event.updatedTag!;
+    final previousTag = event.previousTag!;
+    if (cpuSamplesCaches.containsKey(previousTag)) {
+      _lastCachedTag = previousTag;
+    }
+  }
+
+  void handleCpuSamplesEvent(Event event) {
+    assert(event.kind! == EventKind.kCpuSamples);
+    // There might be some samples left in the buffer for the previously set
+    // user tag. We'll check for them here and then close out the cache.
+    if (_lastCachedTag != null) {
+      cpuSamplesCaches[_lastCachedTag]!.cacheSamples(
+        event.cpuSamples!,
+      );
+      _lastCachedTag = null;
+    }
+    cpuSamplesCaches[_currentTag]?.cacheSamples(event.cpuSamples!);
+  }
+
+  final DartDevelopmentServiceImpl dds;
+  final String isolateId;
+  final cpuSamplesCaches = <String, CpuSamplesRepository>{};
+
+  String _currentTag = '';
+  String? _lastCachedTag;
+}
+
+class CpuSamplesRepository extends RingBuffer<CpuSample> {
+  // TODO(#46978): math to figure out proper buffer sizes.
+  CpuSamplesRepository(
+    this.tag, [
+    int bufferSize = 1000000,
+  ]) : super(bufferSize);
+
+  void cacheSamples(CpuSamples samples) {
+    String getFunctionId(ProfileFunction function) {
+      final functionObject = function.function;
+      if (functionObject is NativeFunction) {
+        return 'native/${functionObject.name}';
+      }
+      return functionObject.id!;
+    }
+
+    // Initialize upon seeing our first samples.
+    if (functions.isEmpty) {
+      samplePeriod = samples.samplePeriod!;
+      maxStackDepth = samples.maxStackDepth!;
+      pid = samples.pid!;
+      functions.addAll(samples.functions!);
+
+      // Build the initial id to function index mapping. This allows for us to
+      // lookup a ProfileFunction in the global function list stored in this
+      // cache. This works since most ProfileFunction objects will have an
+      // associated function with a *typically* stable service ID that we can
+      // use as a key.
+      //
+      // TODO(bkonyi): investigate creating some form of stable ID for
+      // Functions tied to closures.
+      for (int i = 0; i < functions.length; ++i) {
+        idToFunctionIndex[getFunctionId(functions[i])] = i;
+      }
+
+      // Clear tick information as we'll need to recalculate these values later
+      // when a request for samples from this repository is received.
+      for (final f in functions) {
+        f.inclusiveTicks = 0;
+        f.exclusiveTicks = 0;
+      }
+
+      _firstSampleTimestamp = samples.timeOriginMicros!;
+    } else {
+      final newFunctions = samples.functions!;
+      final indexMapping = <int, int>{};
+
+      // Check to see if we've got a function object we've never seen before.
+      for (int i = 0; i < newFunctions.length; ++i) {
+        final key = getFunctionId(newFunctions[i]);
+        if (!idToFunctionIndex.containsKey(key)) {
+          idToFunctionIndex[key] = functions.length;
+          // Keep track of the original index and the location of the function
+          // in the master function list so we can update the function indicies
+          // for each sample in this batch.
+          indexMapping[i] = functions.length;
+          functions.add(newFunctions[i]);
+
+          // Reset tick state as we'll recalculate later.
+          functions.last.inclusiveTicks = 0;
+          functions.last.exclusiveTicks = 0;
+        }
+      }
+
+      // Update the indicies into the function table for functions that were
+      // newly processed in the most recent event.
+      for (final sample in samples.samples!) {
+        final stack = sample.stack!;
+        for (int i = 0; i < stack.length; ++i) {
+          if (indexMapping.containsKey(stack[i])) {
+            stack[i] = indexMapping[stack[i]]!;
+          }
+        }
+      }
+    }
+
+    final relevantSamples = samples.samples!.where((s) => s.userTag == tag);
+    for (final sample in relevantSamples) {
+      add(sample);
+    }
+  }
+
+  @override
+  CpuSample? add(CpuSample sample) {
+    final evicted = super.add(sample);
+
+    void updateTicksForSample(CpuSample sample, int increment) {
+      final stack = sample.stack!;
+      for (int i = 0; i < stack.length; ++i) {
+        final function = functions[stack[i]];
+        function.inclusiveTicks = function.inclusiveTicks! + increment;
+        if (i + 1 == stack.length) {
+          function.exclusiveTicks = function.exclusiveTicks! + increment;
+        }
+      }
+    }
+
+    if (evicted != null) {
+      // If a sample is evicted from the cache, we need to decrement the tick
+      // counters for each function in the sample's stack.
+      updateTicksForSample(sample, -1);
+
+      // We also need to change the first timestamp to that of the next oldest
+      // sample.
+      _firstSampleTimestamp = call().first.timestamp!;
+    }
+    _lastSampleTimestamp = sample.timestamp!;
+
+    // Update function ticks to include the new sample.
+    updateTicksForSample(sample, 1);
+
+    return evicted;
+  }
+
+  Map<String, dynamic> toJson() {
+    return {
+      'type': 'CachedCpuSamples',
+      'userTag': tag,
+      'truncated': isTruncated,
+      if (functions.isNotEmpty) ...{
+        'samplePeriod': samplePeriod,
+        'maxStackDepth': maxStackDepth,
+      },
+      'timeOriginMicros': _firstSampleTimestamp,
+      'timeExtentMicros': _lastSampleTimestamp - _firstSampleTimestamp,
+      'functions': [
+        // TODO(bkonyi): remove functions with no ticks and update sample stacks.
+        for (final f in functions) f.toJson(),
+      ],
+      'sampleCount': call().length,
+      'samples': [
+        for (final s in call()) s.toJson(),
+      ]
+    };
+  }
+
+  /// The UserTag associated with all samples stored in this repository.
+  final String tag;
+
+  /// The list of function references with corresponding profiler tick data.
+  /// ** NOTE **: The tick values here need to be updated as new CpuSamples
+  /// events are delivered.
+  final functions = <ProfileFunction>[];
+  final idToFunctionIndex = <String, int>{};
+
+  /// Assume sample period and max stack depth won't change.
+  late final int samplePeriod;
+  late final int maxStackDepth;
+
+  late final int pid;
+
+  int _firstSampleTimestamp = 0;
+  int _lastSampleTimestamp = 0;
+}
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index 64b66be..5099eef 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -3,10 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 import 'dart:io';
 
 import 'package:collection/collection.dart';
 import 'package:meta/meta.dart';
+import 'package:package_config/package_config.dart';
+import 'package:path/path.dart' as path;
 import 'package:vm_service/vm_service.dart' as vm;
 
 import '../../../dds.dart';
@@ -19,6 +22,14 @@
 import '../protocol_generated.dart';
 import '../protocol_stream.dart';
 
+/// The mime type to send with source responses to the client.
+///
+/// This is used so if the source name does not end with ".dart" the client can
+/// still tell which language to use (for syntax highlighting, etc.).
+///
+/// https://github.com/microsoft/vscode/issues/8182#issuecomment-231151640
+const dartMimeType = 'text/x-dart';
+
 /// Maximum number of toString()s to be called when responding to variables
 /// requests from the client.
 ///
@@ -38,6 +49,184 @@
 /// will work.
 const threadExceptionExpression = r'$_threadException';
 
+/// Pattern for extracting useful error messages from an evaluation exception.
+final _evalErrorMessagePattern = RegExp('Error: (.*)');
+
+/// Pattern for extracting useful error messages from an unhandled exception.
+final _exceptionMessagePattern = RegExp('Unhandled exception:\n(.*)');
+
+/// Whether to subscribe to stdout/stderr through the VM Service.
+///
+/// This is set by [attachRequest] so that any output will still be captured and
+/// sent to the client without needing to access the process.
+///
+/// [launchRequest] reads the stdout/stderr streams directly and does not need
+/// to have them sent via the VM Service.
+var _subscribeToOutputStreams = false;
+
+/// Pattern for a trailing semicolon.
+final _trailingSemicolonPattern = RegExp(r';$');
+
+/// An implementation of [LaunchRequestArguments] that includes all fields used
+/// by the base Dart debug adapter.
+///
+/// This class represents the data passed from the client editor to the debug
+/// adapter in launchRequest, which is a request to start debugging an
+/// application.
+///
+/// Specialised adapters (such as Flutter) will likely extend this class with
+/// their own additional fields.
+class DartAttachRequestArguments extends DartCommonLaunchAttachRequestArguments
+    implements AttachRequestArguments {
+  /// Optional data from the previous, restarted session.
+  /// The data is sent as the 'restart' attribute of the 'terminated' event.
+  /// The client should leave the data intact.
+  final Object? restart;
+
+  /// The VM Service URI to attach to.
+  ///
+  /// Either this or [vmServiceInfoFile] must be supplied.
+  final String? vmServiceUri;
+
+  /// The VM Service info file to extract the VM Service URI from to attach to.
+  ///
+  /// Either this or [vmServiceUri] must be supplied.
+  final String? vmServiceInfoFile;
+
+  DartAttachRequestArguments({
+    this.restart,
+    this.vmServiceUri,
+    this.vmServiceInfoFile,
+    String? name,
+    String? cwd,
+    List<String>? additionalProjectPaths,
+    bool? debugSdkLibraries,
+    bool? debugExternalPackageLibraries,
+    bool? evaluateGettersInDebugViews,
+    bool? evaluateToStringInDebugViews,
+    bool? sendLogsToClient,
+  }) : super(
+          name: name,
+          cwd: cwd,
+          additionalProjectPaths: additionalProjectPaths,
+          debugSdkLibraries: debugSdkLibraries,
+          debugExternalPackageLibraries: debugExternalPackageLibraries,
+          evaluateGettersInDebugViews: evaluateGettersInDebugViews,
+          evaluateToStringInDebugViews: evaluateToStringInDebugViews,
+          sendLogsToClient: sendLogsToClient,
+        );
+
+  DartAttachRequestArguments.fromMap(Map<String, Object?> obj)
+      : restart = obj['restart'],
+        vmServiceUri = obj['vmServiceUri'] as String?,
+        vmServiceInfoFile = obj['vmServiceInfoFile'] as String?,
+        super.fromMap(obj);
+
+  @override
+  Map<String, Object?> toJson() => {
+        ...super.toJson(),
+        if (restart != null) 'restart': restart,
+        if (vmServiceUri != null) 'vmServiceUri': vmServiceUri,
+        if (vmServiceInfoFile != null) 'vmServiceInfoFile': vmServiceInfoFile,
+      };
+
+  static DartAttachRequestArguments fromJson(Map<String, Object?> obj) =>
+      DartAttachRequestArguments.fromMap(obj);
+}
+
+/// A common base for [DartLaunchRequestArguments] and
+/// [DartAttachRequestArguments] for fields that are common to both.
+class DartCommonLaunchAttachRequestArguments extends RequestArguments {
+  final String? name;
+  final String? cwd;
+
+  /// Paths that should be considered the users local code.
+  ///
+  /// These paths will generally be all of the open folders in the users editor
+  /// and are used to determine whether a library is "external" or not to
+  /// support debugging "just my code" where SDK/Pub package code will be marked
+  /// as not-debuggable.
+  final List<String>? additionalProjectPaths;
+
+  /// Whether SDK libraries should be marked as debuggable.
+  ///
+  /// Treated as `false` if null, which means "step in" will not step into SDK
+  /// libraries.
+  final bool? debugSdkLibraries;
+
+  /// Whether external package libraries should be marked as debuggable.
+  ///
+  /// Treated as `false` if null, which means "step in" will not step into
+  /// libraries in packages that are not either the local package or a path
+  /// dependency. This allows users to debug "just their code" and treat Pub
+  /// packages as block boxes.
+  final bool? debugExternalPackageLibraries;
+
+  /// Whether to evaluate getters in debug views like hovers and the variables
+  /// list.
+  ///
+  /// Invoking getters has a performance cost and may introduce side-effects,
+  /// although users may expected this functionality. null is treated like false
+  /// although clients may have their own defaults (for example Dart-Code sends
+  /// true by default at the time of writing).
+  final bool? evaluateGettersInDebugViews;
+
+  /// Whether to call toString() on objects in debug views like hovers and the
+  /// variables list.
+  ///
+  /// Invoking toString() has a performance cost and may introduce side-effects,
+  /// although users may expected this functionality. null is treated like false
+  /// although clients may have their own defaults (for example Dart-Code sends
+  /// true by default at the time of writing).
+  final bool? evaluateToStringInDebugViews;
+
+  /// Whether to send debug logging to clients in a custom `dart.log` event. This
+  /// is used both by the out-of-process tests to ensure the logs contain enough
+  /// information to track down issues, but also by Dart-Code to capture VM
+  /// service traffic in a unified log file.
+  final bool? sendLogsToClient;
+
+  DartCommonLaunchAttachRequestArguments({
+    required this.name,
+    required this.cwd,
+    required this.additionalProjectPaths,
+    required this.debugSdkLibraries,
+    required this.debugExternalPackageLibraries,
+    required this.evaluateGettersInDebugViews,
+    required this.evaluateToStringInDebugViews,
+    required this.sendLogsToClient,
+  });
+
+  DartCommonLaunchAttachRequestArguments.fromMap(Map<String, Object?> obj)
+      : name = obj['name'] as String?,
+        cwd = obj['cwd'] as String?,
+        additionalProjectPaths =
+            (obj['additionalProjectPaths'] as List?)?.cast<String>(),
+        debugSdkLibraries = obj['debugSdkLibraries'] as bool?,
+        debugExternalPackageLibraries =
+            obj['debugExternalPackageLibraries'] as bool?,
+        evaluateGettersInDebugViews =
+            obj['evaluateGettersInDebugViews'] as bool?,
+        evaluateToStringInDebugViews =
+            obj['evaluateToStringInDebugViews'] as bool?,
+        sendLogsToClient = obj['sendLogsToClient'] as bool?;
+
+  Map<String, Object?> toJson() => {
+        if (name != null) 'name': name,
+        if (cwd != null) 'cwd': cwd,
+        if (additionalProjectPaths != null)
+          'additionalProjectPaths': additionalProjectPaths,
+        if (debugSdkLibraries != null) 'debugSdkLibraries': debugSdkLibraries,
+        if (debugExternalPackageLibraries != null)
+          'debugExternalPackageLibraries': debugExternalPackageLibraries,
+        if (evaluateGettersInDebugViews != null)
+          'evaluateGettersInDebugViews': evaluateGettersInDebugViews,
+        if (evaluateToStringInDebugViews != null)
+          'evaluateToStringInDebugViews': evaluateToStringInDebugViews,
+        if (sendLogsToClient != null) 'sendLogsToClient': sendLogsToClient,
+      };
+}
+
 /// A base DAP Debug Adapter implementation for running and debugging Dart-based
 /// applications (including Flutter and Tests).
 ///
@@ -74,9 +263,9 @@
 /// an expression into an evaluation console) or to events sent by the server
 /// (for example when the server sends a `StoppedEvent` it may cause the client
 /// to then send a `stackTraceRequest` or `scopesRequest` to get variables).
-abstract class DartDebugAdapter<T extends DartLaunchRequestArguments>
-    extends BaseDebugAdapter<T> {
-  late final T args;
+abstract class DartDebugAdapter<TL extends DartLaunchRequestArguments,
+    TA extends DartAttachRequestArguments> extends BaseDebugAdapter<TL, TA> {
+  late final DartCommonLaunchAttachRequestArguments args;
   final _debuggerInitializedCompleter = Completer<void>();
   final _configurationDoneCompleter = Completer<void>();
 
@@ -105,6 +294,12 @@
   /// yet been made.
   DartDevelopmentService? _dds;
 
+  /// The [InitializeRequestArguments] provided by the client in the
+  /// `initialize` request.
+  ///
+  /// `null` if the `initialize` request has not yet been made.
+  InitializeRequestArguments? _initializeArgs;
+
   /// Whether to use IPv6 for DAP/Debugger services.
   final bool ipv6;
 
@@ -122,6 +317,41 @@
   /// have been called.
   late final bool isAttach;
 
+  /// A list of evaluateNames for InstanceRef IDs.
+  ///
+  /// When providing variables for fields/getters or items in maps/arrays, we
+  /// need to provide an expression to the client that evaluates to that
+  /// variable so that functionality like "Add to Watch" or "Copy Value" can
+  /// work. For example, if a user expands a list named `myList` then the 1st
+  /// [Variable] returned should have an evaluateName of `myList[0]`. The `foo`
+  /// getter of that object would then have an evaluateName of `myList[0].foo`.
+  ///
+  /// Since those expressions aren't round-tripped as child variables are
+  /// requested we build them up as we send variables out, so we can append to
+  /// them when returning elements/map entries/fields/getters.
+  final _evaluateNamesForInstanceRefIds = <String, String>{};
+
+  /// A list of all possible project paths that should be considered the users
+  /// own code.
+  ///
+  /// This is made up of the folder containing the 'program' being executed, the
+  /// 'cwd' and any 'additionalProjectPaths' from the launch arguments.
+  late final List<String> projectPaths = [
+    args.cwd,
+    if (args is DartLaunchRequestArguments)
+      path.dirname((args as DartLaunchRequestArguments).program),
+    ...?args.additionalProjectPaths,
+  ].whereNotNull().toList();
+
+  /// Whether we have already sent the [TerminatedEvent] to the client.
+  ///
+  /// This is tracked so that we don't send multiple if there are multiple
+  /// events that suggest the session ended (such as a process exiting and the
+  /// VM Service closing).
+  bool _hasSentTerminatedEvent = false;
+
+  late final sendLogsToClient = args.sendLogsToClient ?? false;
+
   DartDebugAdapter(
     ByteStreamServerChannel channel, {
     this.ipv6 = false,
@@ -142,28 +372,72 @@
   bool get evaluateToStringInDebugViews =>
       args.evaluateToStringInDebugViews ?? false;
 
+  /// The [InitializeRequestArguments] provided by the client in the
+  /// `initialize` request.
+  ///
+  /// `null` if the `initialize` request has not yet been made.
+  InitializeRequestArguments? get initializeArgs => _initializeArgs;
+
+  /// Whether the VM Service closing should be used as a signal to terminate the
+  /// debug session.
+  ///
+  /// It is generally better to handle termination when the debuggee terminates
+  /// instead, since this ensures the stdout/stderr streams have been drained.
+  /// However, that's not possible in some cases (for example 'runInTerminal'
+  /// or attaching), so this is the only signal we have.
+  ///
+  /// It is up to the subclass DA to provide this value correctly based on
+  /// whether it will call [handleSessionTerminate] itself upon process
+  /// termination.
+  bool get terminateOnVmServiceClose;
+
+  /// Overridden by sub-classes to handle when the client sends an
+  /// `attachRequest` (a request to attach to a running app).
+  ///
+  /// Sub-classes can use the [args] field to access the arguments provided
+  /// to this request.
+  Future<void> attachImpl();
+
   /// [attachRequest] is called by the client when it wants us to to attach to
   /// an existing app. This will only be called once (and only one of this or
   /// launchRequest will be called).
   @override
   Future<void> attachRequest(
     Request request,
-    T args,
+    TA args,
     void Function() sendResponse,
   ) async {
     this.args = args;
     isAttach = true;
+    _subscribeToOutputStreams = true;
 
     // Common setup.
-    await _prepareForLaunchOrAttach();
-
-    // TODO(dantup): Implement attach support.
-    throw UnimplementedError();
+    await _prepareForLaunchOrAttach(null);
 
     // Delegate to the sub-class to attach to the process.
-    // await attachImpl();
-    //
-    // sendResponse();
+    await attachImpl();
+
+    sendResponse();
+  }
+
+  /// Builds an evaluateName given a parent VM InstanceRef ID and a suffix.
+  ///
+  /// If [parentInstanceRefId] is `null`, or we have no evaluateName for it,
+  /// will return null.
+  String? buildEvaluateName(
+    String suffix, {
+    required String? parentInstanceRefId,
+  }) {
+    final parentEvaluateName =
+        _evaluateNamesForInstanceRefIds[parentInstanceRefId];
+    return combineEvaluateName(parentEvaluateName, suffix);
+  }
+
+  /// Builds an evaluateName given a prefix and a suffix.
+  ///
+  /// If [prefix] is null, will return be null.
+  String? combineEvaluateName(String? prefix, String suffix) {
+    return prefix != null ? '$prefix$suffix' : null;
   }
 
   /// configurationDone is called by the client when it has finished sending
@@ -193,27 +467,43 @@
   /// The URI protocol will be changed to ws/wss but otherwise not normalised.
   /// The caller should handle any other normalisation (such as adding /ws to
   /// the end if required).
-  Future<void> connectDebugger(Uri uri) async {
+  ///
+  /// If [resumeIfStarting] is true, isolates waiting to start will
+  /// automatically be resumed. This is usually desired in launch requests, but
+  /// not when attaching.
+  Future<void> connectDebugger(
+    Uri uri, {
+    required bool resumeIfStarting,
+  }) async {
     // Start up a DDS instance for this VM.
     if (enableDds) {
-      // TODO(dantup): Do we need to worry about there already being one connected
-      //   if this URL came from another service that may have started one?
       logger?.call('Starting a DDS instance for $uri');
-      final dds = await DartDevelopmentService.startDartDevelopmentService(
-        uri,
-        enableAuthCodes: enableAuthCodes,
-        ipv6: ipv6,
-      );
-      _dds = dds;
-      uri = dds.wsUri!;
+      try {
+        final dds = await DartDevelopmentService.startDartDevelopmentService(
+          uri,
+          enableAuthCodes: enableAuthCodes,
+          ipv6: ipv6,
+        );
+        _dds = dds;
+        uri = dds.wsUri!;
+      } on DartDevelopmentServiceException catch (e) {
+        // If there's already a DDS instance, then just continue. This is common
+        // when attaching, as the program may have already been run with a DDS
+        // instance.
+        if (e.errorCode ==
+            DartDevelopmentServiceException.existingDdsInstanceError) {
+          uri = _cleanVmServiceUri(uri);
+        } else {
+          rethrow;
+        }
+      }
     } else {
       uri = _cleanVmServiceUri(uri);
     }
 
     logger?.call('Connecting to debugger at $uri');
     sendOutput('console', 'Connecting to VM Service at $uri\n');
-    final vmService =
-        await _vmServiceConnectUri(uri.toString(), logger: logger);
+    final vmService = await _vmServiceConnectUri(uri.toString());
     logger?.call('Connected to debugger at $uri!');
 
     // TODO(dantup): VS Code currently depends on a custom dart.debuggerUris
@@ -223,6 +513,7 @@
     // perhaps gated on a capability/argument).
     this.vmService = vmService;
 
+    unawaited(vmService.onDone.then((_) => _handleVmServiceClosed()));
     _subscriptions.addAll([
       vmService.onIsolateEvent.listen(_handleIsolateEvent),
       vmService.onDebugEvent.listen(_handleDebugEvent),
@@ -230,8 +521,10 @@
       // TODO(dantup): Implement these.
       // vmService.onExtensionEvent.listen(_handleExtensionEvent),
       // vmService.onServiceEvent.listen(_handleServiceEvent),
-      // vmService.onStdoutEvent.listen(_handleStdoutEvent),
-      // vmService.onStderrEvent.listen(_handleStderrEvent),
+      if (_subscribeToOutputStreams)
+        vmService.onStdoutEvent.listen(_handleStdoutEvent),
+      if (_subscribeToOutputStreams)
+        vmService.onStderrEvent.listen(_handleStderrEvent),
     ]);
     await Future.wait([
       vmService.streamListen(vm.EventStreams.kIsolate),
@@ -239,8 +532,8 @@
       vmService.streamListen(vm.EventStreams.kLogging),
       // vmService.streamListen(vm.EventStreams.kExtension),
       // vmService.streamListen(vm.EventStreams.kService),
-      // vmService.streamListen(vm.EventStreams.kStdout),
-      // vmService.streamListen(vm.EventStreams.kStderr),
+      vmService.streamListen(vm.EventStreams.kStdout),
+      vmService.streamListen(vm.EventStreams.kStderr),
     ]);
 
     final vmInfo = await vmService.getVM();
@@ -264,7 +557,8 @@
       final pauseEventKind = isolate.runnable ?? false
           ? vm.EventKind.kIsolateRunnable
           : vm.EventKind.kIsolateStart;
-      await _isolateManager.registerIsolate(isolate, pauseEventKind);
+      final thread =
+          await _isolateManager.registerIsolate(isolate, pauseEventKind);
 
       // If the Isolate already has a Pause event we can give it to the
       // IsolateManager to handle (if it's PausePostStart it will re-configure
@@ -272,9 +566,18 @@
       // runnable - otherwise we'll handle this when it becomes runnable in an
       // event later).
       if (isolate.pauseEvent?.kind?.startsWith('Pause') ?? false) {
-        await _isolateManager.handleEvent(isolate.pauseEvent!);
+        await _isolateManager.handleEvent(
+          isolate.pauseEvent!,
+          resumeIfStarting: resumeIfStarting,
+        );
       } else if (isolate.runnable == true) {
-        await _isolateManager.resumeIsolate(isolate);
+        // If requested, automatically resume. Otherwise send a Stopped event to
+        // inform the client UI the thread is paused.
+        if (resumeIfStarting) {
+          await _isolateManager.resumeIsolate(isolate);
+        } else {
+          _isolateManager.sendStoppedOnEntryEvent(thread.threadId);
+        }
       }
     }));
 
@@ -313,7 +616,7 @@
   ) async {
     switch (request.command) {
 
-      /// Used by tests to validate available protocols (eg. DDS). There may be
+      /// Used by tests to validate available protocols (e.g. DDS). There may be
       /// value in making this available to clients in future, but for now it's
       /// internal.
       case '_getSupportedProtocols':
@@ -404,25 +707,49 @@
     // allows us to construct evaluateNames that evaluate to the fields down the
     // tree to support some of the debugger functionality (for example
     // "Copy Value", which re-evaluates).
-    final expression = args.expression.trim();
+    final expression = args.expression
+        .trim()
+        // Remove any trailing semicolon as the VM only evaluates expressions
+        // but a user may have highlighted a whole line/statement to send for
+        // evaluation.
+        .replaceFirst(_trailingSemicolonPattern, '');
     final exceptionReference = thread.exceptionReference;
     final isExceptionExpression = expression == threadExceptionExpression ||
         expression.startsWith('$threadExceptionExpression.');
 
     vm.Response? result;
-    if (exceptionReference != null && isExceptionExpression) {
-      result = await _evaluateExceptionExpression(
-        exceptionReference,
-        expression,
-        thread,
-      );
-    } else {
-      result = await vmService?.evaluateInFrame(
-        thread.isolate.id!,
-        frameIndex,
-        expression,
-        disableBreakpoints: true,
-      );
+    try {
+      if (exceptionReference != null && isExceptionExpression) {
+        result = await _evaluateExceptionExpression(
+          exceptionReference,
+          expression,
+          thread,
+        );
+      } else {
+        result = await vmService?.evaluateInFrame(
+          thread.isolate.id!,
+          frameIndex,
+          expression,
+          disableBreakpoints: true,
+        );
+      }
+    } catch (e) {
+      final rawMessage = '$e';
+
+      // Error messages can be quite verbose and don't fit well into a
+      // single-line watch window. For example:
+      //
+      //    evaluateInFrame: (113) Expression compilation error
+      //    org-dartlang-debug:synthetic_debug_expression:1:5: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      //    1 + "a"
+      //        ^
+      //
+      // So in the case of a Watch context, try to extract the useful message.
+      if (args.context == 'watch') {
+        throw DebugAdapterException(extractEvaluationErrorMessage(rawMessage));
+      }
+
+      throw DebugAdapterException(rawMessage);
     }
 
     if (result is vm.ErrorRef) {
@@ -435,11 +762,14 @@
         result,
         allowCallingToString: evaluateToStringInDebugViews,
       );
-      // TODO(dantup): We may need to store `expression` with this data
-      // to allow building nested evaluateNames.
+
       final variablesReference =
           _converter.isSimpleKind(result.kind) ? 0 : thread.storeData(result);
 
+      // Store the expression that gets this object as we may need it to
+      // compute evaluateNames for child objects later.
+      storeEvaluateName(result, expression);
+
       sendResponse(EvaluateResponseBody(
         result: resultString,
         variablesReference: variablesReference,
@@ -451,6 +781,37 @@
     }
   }
 
+  /// Tries to extract the useful part from an evaluation exception message.
+  ///
+  /// If no message could be extracted, returns the whole original error.
+  String extractEvaluationErrorMessage(String rawError) {
+    final match = _evalErrorMessagePattern.firstMatch(rawError);
+    final shortError = match != null ? match.group(1)! : null;
+    return shortError ?? rawError;
+  }
+
+  /// Tries to extract the useful part from an unhandled exception message.
+  ///
+  /// If no message could be extracted, returns the whole original error.
+  String extractUnhandledExceptionMessage(String rawError) {
+    final match = _exceptionMessagePattern.firstMatch(rawError);
+    final shortError = match != null ? match.group(1)! : null;
+    return shortError ?? rawError;
+  }
+
+  /// Sends a [TerminatedEvent] if one has not already been sent.
+  void handleSessionTerminate([String exitSuffix = '']) {
+    if (_hasSentTerminatedEvent) {
+      return;
+    }
+
+    _hasSentTerminatedEvent = true;
+    // Always add a leading newline since the last written text might not have
+    // had one.
+    sendOutput('console', '\nExited$exitSuffix.');
+    sendEvent(TerminatedEventBody());
+  }
+
   /// [initializeRequest] is the first call from the client during
   /// initialization and allows exchanging capabilities and configuration
   /// between client and server.
@@ -461,9 +822,12 @@
   @override
   Future<void> initializeRequest(
     Request request,
-    InitializeRequestArguments? args,
+    InitializeRequestArguments args,
     void Function(Capabilities) sendResponse,
   ) async {
+    // Capture args so we can read capabilities later.
+    _initializeArgs = args;
+
     // TODO(dantup): Capture/honor editor-specific settings like linesStartAt1
     sendResponse(Capabilities(
       exceptionBreakpointFilters: [
@@ -479,12 +843,12 @@
         ),
       ],
       supportsClipboardContext: true,
-      // TODO(dantup): All of these...
-      // supportsConditionalBreakpoints: true,
+      supportsConditionalBreakpoints: true,
       supportsConfigurationDoneRequest: true,
       supportsDelayedStackTraceLoading: true,
       supportsEvaluateForHovers: true,
-      // supportsLogPoints: true,
+      supportsLogPoints: true,
+      // TODO(dantup): All of these...
       // supportsRestartFrame: true,
       supportsTerminateRequest: true,
     ));
@@ -493,6 +857,36 @@
     sendEvent(InitializedEventBody());
   }
 
+  /// Checks whether this library is from an external package.
+  ///
+  /// This is used to support debugging "Just My Code" so Pub packages can be
+  /// marked as not-debuggable.
+  ///
+  /// A library is considered local if the path is within the 'cwd' or
+  /// 'additionalProjectPaths' in the launch arguments. An editor should include
+  /// the paths of all open workspace folders in 'additionalProjectPaths' to
+  /// support this feature correctly.
+  bool isExternalPackageLibrary(Uri uri) {
+    if (!uri.isScheme('package')) {
+      return false;
+    }
+    final libraryPath = resolvePackageUri(uri);
+    if (libraryPath == null) {
+      return false;
+    }
+
+    // Always compare paths case-insensitively to avoid any issues where APIs
+    // may have returned different casing (e.g. Windows drive letters). It's
+    // almost certain a user wouldn't have a "local" package and an "external"
+    // package with paths differing only be case.
+    final libraryPathLower = libraryPath.toLowerCase();
+    return !projectPaths.any((projectPath) =>
+        path.isWithin(projectPath.toLowerCase(), libraryPathLower));
+  }
+
+  /// Checks whether this library is from the SDK.
+  bool isSdkLibrary(Uri uri) => uri.isScheme('dart');
+
   /// Overridden by sub-classes to handle when the client sends a
   /// `launchRequest` (a request to start running/debugging an app).
   ///
@@ -502,18 +896,18 @@
 
   /// [launchRequest] is called by the client when it wants us to to start the app
   /// to be run/debug. This will only be called once (and only one of this or
-  /// attachRequest will be called).
+  /// [attachRequest] will be called).
   @override
   Future<void> launchRequest(
     Request request,
-    T args,
+    TL args,
     void Function() sendResponse,
   ) async {
     this.args = args;
     isAttach = false;
 
     // Common setup.
-    await _prepareForLaunchOrAttach();
+    await _prepareForLaunchOrAttach(args.noDebug);
 
     // Delegate to the sub-class to launch the process.
     await launchImpl();
@@ -521,6 +915,20 @@
     sendResponse();
   }
 
+  /// Checks whether a library URI should be considered debuggable.
+  ///
+  /// Initial values are provided in the launch arguments, but may be updated
+  /// by the `updateDebugOptions` custom request.
+  bool libaryIsDebuggable(Uri uri) {
+    if (isSdkLibrary(uri)) {
+      return _isolateManager.debugSdkLibraries;
+    } else if (isExternalPackageLibrary(uri)) {
+      return _isolateManager.debugExternalPackageLibraries;
+    } else {
+      return true;
+    }
+  }
+
   /// Handles the clients "next" ("step over") request for the thread in
   /// [args.threadId].
   @override
@@ -533,6 +941,12 @@
     sendResponse();
   }
 
+  /// Resolves a `package: URI` to the real underlying source path.
+  ///
+  /// Returns `null` if no mapping was possible, for example if the package is
+  /// not in the package mapping file.
+  String? resolvePackageUri(Uri uri) => _converter.resolvePackageUri(uri);
+
   /// [scopesRequest] is called by the client to request all of the variables
   /// scopes available for a given stack frame.
   @override
@@ -546,7 +960,7 @@
     // For local variables, we can just reuse the frameId as variablesReference
     // as variablesRequest handles stored data of type `Frame` directly.
     scopes.add(Scope(
-      name: 'Variables',
+      name: 'Locals',
       presentationHint: 'locals',
       variablesReference: args.frameId,
       expensive: false,
@@ -658,6 +1072,44 @@
     await _dds?.shutdown();
   }
 
+  /// [sourceRequest] is called by the client to request source code for a given
+  /// source.
+  ///
+  /// The client may provide a whole source or just an int sourceReference (the
+  /// spec originally had only sourceReference but now supports whole sources).
+  ///
+  /// The supplied sourceReference should correspond to a ScriptRef instance
+  /// that was stored to generate the sourceReference when sent to the client.
+  @override
+  Future<void> sourceRequest(
+    Request request,
+    SourceArguments args,
+    void Function(SourceResponseBody) sendResponse,
+  ) async {
+    final storedData = _isolateManager.getStoredData(
+      args.source?.sourceReference ?? args.sourceReference,
+    );
+    if (storedData == null) {
+      throw StateError('source reference is no longer valid');
+    }
+    final thread = storedData.thread;
+    final data = storedData.data;
+    final scriptRef = data is vm.ScriptRef ? data : null;
+    if (scriptRef == null) {
+      throw StateError('source reference was not a valid script');
+    }
+
+    final script = await thread.getScript(scriptRef);
+    final scriptSource = script.source;
+    if (scriptSource == null) {
+      throw DebugAdapterException('<source not available>');
+    }
+
+    sendResponse(
+      SourceResponseBody(content: scriptSource, mimeType: dartMimeType),
+    );
+  }
+
   /// Handles a request from the client for the call stack for [args.threadId].
   ///
   /// This is usually called after we sent a [StoppedEvent] to the client
@@ -715,9 +1167,12 @@
       // The VM doesn't support fetching an arbitrary slice of frames, only a
       // maximum limit, so if the client asks for frames 20-30 we must send a
       // request for the first 30 and trim them ourselves.
-      final limit = startFrame + numFrames;
+
+      // DAP says if numFrames is 0 or missing (which we swap to 0 above) we
+      // should return all.
+      final limit = numFrames == 0 ? null : startFrame + numFrames;
       final stack = await vmService?.getStack(thread.isolate.id!, limit: limit);
-      final frames = stack?.frames;
+      final frames = stack?.asyncCausalFrames ?? stack?.frames;
 
       if (stack != null && frames != null) {
         // When the call stack is truncated, we always add [stackFrameBatchSize]
@@ -733,10 +1188,19 @@
             ? frames.length + stackFrameBatchSize
             : frames.length;
 
+        // Find the first async marker, because some functionality only works
+        // up until the first async bounday (e.g. rewind) since we're showing
+        // the user async frames which are out-of-sync with the real frames
+        // past that point.
+        final firstAsyncMarkerIndex = frames.indexWhere(
+          (frame) => frame.kind == vm.FrameKind.kAsyncSuspensionMarker,
+        );
+
         Future<StackFrame> convert(int index, vm.Frame frame) async {
           return _converter.convertVmToDapStackFrame(
             thread,
             frame,
+            firstAsyncMarkerIndex: firstAsyncMarkerIndex,
             isTopFrame: startFrame == 0 && index == 0,
           );
         }
@@ -776,6 +1240,14 @@
     sendResponse();
   }
 
+  /// Stores [evaluateName] as the expression that can be evaluated to get
+  /// [instanceRef].
+  void storeEvaluateName(vm.InstanceRef instanceRef, String? evaluateName) {
+    if (evaluateName != null) {
+      _evaluateNamesForInstanceRefIds[instanceRef.id!] = evaluateName;
+    }
+  }
+
   /// Overridden by sub-classes to handle when the client sends a
   /// `terminateRequest` (a request for a graceful shut down).
   Future<void> terminateImpl();
@@ -820,6 +1292,18 @@
     sendResponse(ThreadsResponseBody(threads: threads));
   }
 
+  /// Sets the package config file to use for `package: URI` resolution.
+  ///
+  /// TODO(dantup): Remove this once
+  ///   https://github.com/dart-lang/sdk/issues/45530 is done as it will not be
+  ///   necessary.
+  void usePackageConfigFile(File packageConfig) {
+    _converter.packageConfig = PackageConfig.parseString(
+      packageConfig.readAsStringSync(),
+      Uri.file(packageConfig.path),
+    );
+  }
+
   /// [variablesRequest] is called by the client to request child variables for
   /// a given variables variablesReference.
   ///
@@ -853,19 +1337,55 @@
       final vars = vmData.vars;
       if (vars != null) {
         Future<Variable> convert(int index, vm.BoundVariable variable) {
+          // Store the expression that gets this object as we may need it to
+          // compute evaluateNames for child objects later.
+          storeEvaluateName(variable.value, variable.name);
           return _converter.convertVmResponseToVariable(
             thread,
             variable.value,
             name: variable.name,
             allowCallingToString: evaluateToStringInDebugViews &&
                 index <= maxToStringsPerEvaluation,
+            evaluateName: variable.name,
           );
         }
 
         variables.addAll(await Future.wait(vars.mapIndexed(convert)));
+
+        // Sort the variables by name.
+        variables.sortBy((v) => v.name);
       }
-    } else if (vmData is vm.MapAssociation) {
-      // TODO(dantup): Maps
+    } else if (data is vm.MapAssociation) {
+      final key = data.key;
+      final value = data.value;
+      if (key is vm.InstanceRef && value is vm.InstanceRef) {
+        // For a MapAssociation, we create a dummy set of variables for "key" and
+        // "value" so that each may be expanded if they are complex values.
+        variables.addAll([
+          Variable(
+            name: 'key',
+            value: await _converter.convertVmInstanceRefToDisplayString(
+              thread,
+              key,
+              allowCallingToString: evaluateToStringInDebugViews,
+            ),
+            variablesReference:
+                _converter.isSimpleKind(key.kind) ? 0 : thread.storeData(key),
+          ),
+          Variable(
+              name: 'value',
+              value: await _converter.convertVmInstanceRefToDisplayString(
+                thread,
+                value,
+                allowCallingToString: evaluateToStringInDebugViews,
+              ),
+              variablesReference: _converter.isSimpleKind(value.kind)
+                  ? 0
+                  : thread.storeData(value),
+              evaluateName:
+                  buildEvaluateName('', parentInstanceRefId: value.id)),
+        ]);
+      }
     } else if (vmData is vm.ObjRef) {
       final object =
           await _isolateManager.getObject(storedData.thread.isolate, vmData);
@@ -877,13 +1397,10 @@
           variablesReference: 0,
         ));
       } else if (object is vm.Instance) {
-        // TODO(dantup): evaluateName
-        // should be built taking the parent into account, for ex. if
-        // args.variablesReference == thread.exceptionReference then we need to
-        // use some sythensized variable name like `frameExceptionExpression`.
         variables.addAll(await _converter.convertVmInstanceToVariablesList(
           thread,
           object,
+          evaluateName: buildEvaluateName('', parentInstanceRefId: vmData.id),
           allowCallingToString: evaluateToStringInDebugViews,
           startItem: childStart,
           numItems: childCount,
@@ -897,8 +1414,6 @@
       }
     }
 
-    variables.sortBy((v) => v.name);
-
     sendResponse(VariablesResponseBody(variables: variables));
   }
 
@@ -993,6 +1508,7 @@
         // string they logged regardless of the evaluateToStringInDebugViews
         // setting.
         allowCallingToString: true,
+        allowTruncatedValue: false,
         includeQuotesAroundString: false,
       );
     }
@@ -1018,9 +1534,30 @@
     }
   }
 
+  void _handleStderrEvent(vm.Event event) {
+    _sendOutputStreamEvent('stderr', event);
+  }
+
+  void _handleStdoutEvent(vm.Event event) {
+    _sendOutputStreamEvent('stdout', event);
+  }
+
+  Future<void> _handleVmServiceClosed() async {
+    if (terminateOnVmServiceClose) {
+      handleSessionTerminate();
+    }
+  }
+
+  void _logTraffic(String data) {
+    logger?.call(data);
+    if (sendLogsToClient) {
+      sendEvent(RawEventBody(data), eventType: 'dart.log');
+    }
+  }
+
   /// Performs some setup that is common to both [launchRequest] and
   /// [attachRequest].
-  Future<void> _prepareForLaunchOrAttach() async {
+  Future<void> _prepareForLaunchOrAttach(bool? noDebug) async {
     // Don't start launching until configurationDone.
     if (!_configurationDoneCompleter.isCompleted) {
       logger?.call('Waiting for configurationDone request...');
@@ -1029,13 +1566,25 @@
 
     // Notify IsolateManager if we'll be debugging so it knows whether to set
     // up breakpoints etc. when isolates are registered.
-    final debug = !(args.noDebug ?? false);
+    final debug = !(noDebug ?? false);
     _isolateManager.debug = debug;
     _isolateManager.debugSdkLibraries = args.debugSdkLibraries ?? true;
     _isolateManager.debugExternalPackageLibraries =
         args.debugExternalPackageLibraries ?? true;
   }
 
+  /// Sends output for a VM WriteEvent to the client.
+  ///
+  /// Used to pass stdout/stderr when there's no access to the streams directly.
+  void _sendOutputStreamEvent(String type, vm.Event event) {
+    final data = event.bytes;
+    if (data == null) {
+      return;
+    }
+    final message = utf8.decode(base64Decode(data));
+    sendOutput('stdout', message);
+  }
+
   /// Updates the current debug options for the session.
   ///
   /// Clients may not know about all debug options, so anything not included
@@ -1057,17 +1606,15 @@
 
   /// A wrapper around the same name function from package:vm_service that
   /// allows logging all traffic over the VM Service.
-  Future<vm.VmService> _vmServiceConnectUri(
-    String wsUri, {
-    Logger? logger,
-  }) async {
+  Future<vm.VmService> _vmServiceConnectUri(String wsUri) async {
     final socket = await WebSocket.connect(wsUri);
     final controller = StreamController();
     final streamClosedCompleter = Completer();
+    final logger = this.logger;
 
     socket.listen(
       (data) {
-        logger?.call('<== [VM] $data');
+        _logTraffic('<== [VM] $data');
         controller.add(data);
       },
       onDone: () => streamClosedCompleter.complete(),
@@ -1077,6 +1624,7 @@
       controller.stream,
       (String message) {
         logger?.call('==> [VM] $message');
+        _logTraffic('==> [VM] $message');
         socket.add(message);
       },
       log: logger != null ? VmServiceLogger(logger) : null,
@@ -1095,106 +1643,85 @@
 ///
 /// Specialised adapters (such as Flutter) will likely extend this class with
 /// their own additional fields.
-class DartLaunchRequestArguments extends LaunchRequestArguments {
+class DartLaunchRequestArguments extends DartCommonLaunchAttachRequestArguments
+    implements LaunchRequestArguments {
+  /// Optional data from the previous, restarted session.
+  /// The data is sent as the 'restart' attribute of the 'terminated' event.
+  /// The client should leave the data intact.
+  final Object? restart;
+
+  /// If noDebug is true the launch request should launch the program without
+  /// enabling debugging.
+  final bool? noDebug;
+
   final String program;
   final List<String>? args;
-  final String? cwd;
-  final String? vmServiceInfoFile;
   final int? vmServicePort;
   final List<String>? vmAdditionalArgs;
   final bool? enableAsserts;
 
-  /// Whether SDK libraries should be marked as debuggable.
+  /// Which console to run the program in.
   ///
-  /// Treated as `false` if null, which means "step in" will not step into SDK
-  /// libraries.
-  final bool? debugSdkLibraries;
-
-  /// Whether external package libraries should be marked as debuggable.
+  /// If "terminal" or "externalTerminal" will cause the program to be run by
+  /// the client by having the server call the `runInTerminal` request on the
+  /// client (as long as the client advertises support for
+  /// `runInTerminalRequest`).
   ///
-  /// Treated as `false` if null, which means "step in" will not step into
-  /// libraries in packages that are not either the local package or a path
-  /// dependency. This allows users to debug "just their code" and treat Pub
-  /// packages as block boxes.
-  final bool? debugExternalPackageLibraries;
-
-  /// Whether to evaluate getters in debug views like hovers and the variables
-  /// list.
-  ///
-  /// Invoking getters has a performance cost and may introduce side-effects,
-  /// although users may expected this functionality. null is treated like false
-  /// although clients may have their own defaults (for example Dart-Code sends
-  /// true by default at the time of writing).
-  final bool? evaluateGettersInDebugViews;
-
-  /// Whether to call toString() on objects in debug views like hovers and the
-  /// variables list.
-  ///
-  /// Invoking toString() has a performance cost and may introduce side-effects,
-  /// although users may expected this functionality. null is treated like false
-  /// although clients may have their own defaults (for example Dart-Code sends
-  /// true by default at the time of writing).
-  final bool? evaluateToStringInDebugViews;
-
-  /// Whether to send debug logging to clients in a custom `dart.log` event. This
-  /// is used both by the out-of-process tests to ensure the logs contain enough
-  /// information to track down issues, but also by Dart-Code to capture VM
-  /// service traffic in a unified log file.
-  final bool? sendLogsToClient;
+  /// Otherwise will run inside the debug adapter and stdout/stderr will be
+  /// routed to the client using [OutputEvent]s. This is the default (and
+  /// simplest) way, but prevents the user from being able to type into `stdin`.
+  final String? console;
 
   DartLaunchRequestArguments({
-    Object? restart,
-    bool? noDebug,
+    this.restart,
+    this.noDebug,
     required this.program,
     this.args,
-    this.cwd,
-    this.vmServiceInfoFile,
     this.vmServicePort,
     this.vmAdditionalArgs,
+    this.console,
     this.enableAsserts,
-    this.debugSdkLibraries,
-    this.debugExternalPackageLibraries,
-    this.evaluateGettersInDebugViews,
-    this.evaluateToStringInDebugViews,
-    this.sendLogsToClient,
-  }) : super(restart: restart, noDebug: noDebug);
+    String? name,
+    String? cwd,
+    List<String>? additionalProjectPaths,
+    bool? debugSdkLibraries,
+    bool? debugExternalPackageLibraries,
+    bool? evaluateGettersInDebugViews,
+    bool? evaluateToStringInDebugViews,
+    bool? sendLogsToClient,
+  }) : super(
+          name: name,
+          cwd: cwd,
+          additionalProjectPaths: additionalProjectPaths,
+          debugSdkLibraries: debugSdkLibraries,
+          debugExternalPackageLibraries: debugExternalPackageLibraries,
+          evaluateGettersInDebugViews: evaluateGettersInDebugViews,
+          evaluateToStringInDebugViews: evaluateToStringInDebugViews,
+          sendLogsToClient: sendLogsToClient,
+        );
 
   DartLaunchRequestArguments.fromMap(Map<String, Object?> obj)
-      : program = obj['program'] as String,
+      : restart = obj['restart'],
+        noDebug = obj['noDebug'] as bool?,
+        program = obj['program'] as String,
         args = (obj['args'] as List?)?.cast<String>(),
-        cwd = obj['cwd'] as String?,
-        vmServiceInfoFile = obj['vmServiceInfoFile'] as String?,
-        vmServicePort = obj['vmServicePort'] as int?,
         vmAdditionalArgs = (obj['vmAdditionalArgs'] as List?)?.cast<String>(),
+        vmServicePort = obj['vmServicePort'] as int?,
+        console = obj['console'] as String?,
         enableAsserts = obj['enableAsserts'] as bool?,
-        debugSdkLibraries = obj['debugSdkLibraries'] as bool?,
-        debugExternalPackageLibraries =
-            obj['debugExternalPackageLibraries'] as bool?,
-        evaluateGettersInDebugViews =
-            obj['evaluateGettersInDebugViews'] as bool?,
-        evaluateToStringInDebugViews =
-            obj['evaluateToStringInDebugViews'] as bool?,
-        sendLogsToClient = obj['sendLogsToClient'] as bool?,
         super.fromMap(obj);
 
   @override
   Map<String, Object?> toJson() => {
         ...super.toJson(),
+        if (restart != null) 'restart': restart,
+        if (noDebug != null) 'noDebug': noDebug,
         'program': program,
         if (args != null) 'args': args,
-        if (cwd != null) 'cwd': cwd,
-        if (vmServiceInfoFile != null) 'vmServiceInfoFile': vmServiceInfoFile,
-        if (vmServicePort != null) 'vmServicePort': vmServicePort,
         if (vmAdditionalArgs != null) 'vmAdditionalArgs': vmAdditionalArgs,
+        if (vmServicePort != null) 'vmServicePort': vmServicePort,
+        if (console != null) 'console': console,
         if (enableAsserts != null) 'enableAsserts': enableAsserts,
-        if (debugSdkLibraries != null) 'debugSdkLibraries': debugSdkLibraries,
-        if (debugExternalPackageLibraries != null)
-          'debugExternalPackageLibraries': debugExternalPackageLibraries,
-        if (evaluateGettersInDebugViews != null)
-          'evaluateGettersInDebugViews': evaluateGettersInDebugViews,
-        if (evaluateToStringInDebugViews != null)
-          'evaluateToStringInDebugViews': evaluateToStringInDebugViews,
-        if (sendLogsToClient != null) 'sendLogsToClient': sendLogsToClient,
       };
 
   static DartLaunchRequestArguments fromJson(Map<String, Object?> obj) =>
diff --git a/pkg/dds/lib/src/dap/adapters/dart_cli.dart b/pkg/dds/lib/src/dap/adapters/dart_cli.dart
index c01214d..bf0eab9 100644
--- a/pkg/dds/lib/src/dap/adapters/dart_cli.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart_cli.dart
@@ -10,26 +10,17 @@
 import 'package:pedantic/pedantic.dart';
 import 'package:vm_service/vm_service.dart' as vm;
 
+import '../exceptions.dart';
 import '../logging.dart';
 import '../protocol_generated.dart';
 import '../protocol_stream.dart';
 import 'dart.dart';
 
 /// A DAP Debug Adapter for running and debugging Dart CLI scripts.
-class DartCliDebugAdapter extends DartDebugAdapter<DartLaunchRequestArguments> {
+class DartCliDebugAdapter extends DartDebugAdapter<DartLaunchRequestArguments,
+    DartAttachRequestArguments> {
   Process? _process;
 
-  /// The location of the vm-service-info file (if debugging).
-  ///
-  /// This may be provided by the user (eg. if attaching) or generated by the DA.
-  File? _vmServiceInfoFile;
-
-  /// A watcher for [_vmServiceInfoFile] to detect when the VM writes the service
-  /// info file.
-  ///
-  /// Should be cancelled once the file has been successfully read.
-  StreamSubscription<FileSystemEvent>? _vmServiceInfoFileWatcher;
-
   /// Process IDs to terminate during shutdown.
   ///
   /// This may be populated with pids from the VM Service to ensure we clean up
@@ -41,6 +32,9 @@
   @override
   final parseLaunchArgs = DartLaunchRequestArguments.fromJson;
 
+  @override
+  final parseAttachArgs = DartAttachRequestArguments.fromJson;
+
   DartCliDebugAdapter(
     ByteStreamServerChannel channel, {
     bool ipv6 = false,
@@ -57,11 +51,18 @@
     channel.closed.then((_) => shutdown());
   }
 
+  /// Whether the VM Service closing should be used as a signal to terminate the
+  /// debug session.
+  ///
+  /// If we have a process, we will instead use its termination as a signal to
+  /// terminate the debug session. Otherwise, we will use the VM Service close.
+  bool get terminateOnVmServiceClose => _process == null;
+
   Future<void> debuggerConnected(vm.VM vmInfo) async {
     if (!isAttach) {
       // Capture the PID from the VM Service so that we can terminate it when
       // cleaning up. Terminating the process might not be enough as it could be
-      // just a shell script (eg. pub on Windows) and may not pass the
+      // just a shell script (e.g. pub on Windows) and may not pass the
       // signal on correctly.
       // See: https://github.com/Dart-Code/Dart-Code/issues/907
       final pid = vmInfo.pid;
@@ -81,13 +82,49 @@
     );
   }
 
+  /// Waits for [vmServiceInfoFile] to exist and become valid before returning
+  /// the VM Service URI contained within.
+  Future<Uri> waitForVmServiceInfoFile(File vmServiceInfoFile) async {
+    final completer = Completer<Uri>();
+    late final StreamSubscription<FileSystemEvent> vmServiceInfoFileWatcher;
+
+    Uri? tryParseServiceInfoFile(FileSystemEvent event) {
+      final uri = _readVmServiceInfoFile(vmServiceInfoFile);
+      if (uri != null && !completer.isCompleted) {
+        vmServiceInfoFileWatcher.cancel();
+        completer.complete(uri);
+      }
+    }
+
+    vmServiceInfoFileWatcher = vmServiceInfoFile.parent
+        .watch(events: FileSystemEvent.all)
+        .where((event) => event.path == vmServiceInfoFile.path)
+        .listen(
+          tryParseServiceInfoFile,
+          onError: (e) => logger?.call('Ignoring exception from watcher: $e'),
+        );
+
+    // After setting up the watcher, also check if the file already exists to
+    // ensure we don't miss it if it was created right before we set the
+    // watched up.
+    final uri = _readVmServiceInfoFile(vmServiceInfoFile);
+    if (uri != null && !completer.isCompleted) {
+      unawaited(vmServiceInfoFileWatcher.cancel());
+      completer.complete(uri);
+    }
+
+    return completer.future;
+  }
+
   /// Called by [launchRequest] to request that we actually start the app to be
   /// run/debugged.
   ///
   /// For debugging, this should start paused, connect to the VM Service, set
   /// breakpoints, and resume.
   Future<void> launchImpl() async {
+    final args = this.args as DartLaunchRequestArguments;
     final vmPath = Platform.resolvedExecutable;
+    File? vmServiceInfoFile;
 
     final debug = !(args.noDebug ?? false);
     if (debug) {
@@ -100,17 +137,12 @@
         Directory.systemTemp.createTempSync('dart-vm-service').path,
         'vm.json',
       );
-      _vmServiceInfoFile = File(serviceInfoFilePath);
-      _vmServiceInfoFileWatcher = _vmServiceInfoFile?.parent
-          .watch(events: FileSystemEvent.all)
-          .where((event) => event.path == _vmServiceInfoFile?.path)
-          .listen(
-            _handleVmServiceInfoEvent,
-            onError: (e) => logger?.call('Ignoring exception from watcher: $e'),
-          );
+
+      vmServiceInfoFile = File(serviceInfoFilePath);
+      unawaited(waitForVmServiceInfoFile(vmServiceInfoFile)
+          .then((uri) => connectDebugger(uri, resumeIfStarting: true)));
     }
 
-    final vmServiceInfoFile = _vmServiceInfoFile;
     final vmArgs = <String>[
       if (debug) ...[
         '--enable-vm-service=${args.vmServicePort ?? 0}${ipv6 ? '/::1' : ''}',
@@ -132,6 +164,125 @@
       ...?args.args,
     ];
 
+    // Find the package_config file for this script.
+    // TODO(dantup): Remove this once
+    //   https://github.com/dart-lang/sdk/issues/45530 is done as it will not be
+    //   necessary.
+    var possibleRoot = path.isAbsolute(args.program)
+        ? path.dirname(args.program)
+        : path.dirname(path.normalize(path.join(args.cwd ?? '', args.program)));
+    final packageConfig = _findPackageConfigFile(possibleRoot);
+    if (packageConfig != null) {
+      this.usePackageConfigFile(packageConfig);
+    }
+
+    // If the client supports runInTerminal and args.console is set to either
+    // 'terminal' or 'runInTerminal' we won't run the process ourselves, but
+    // instead call the client to run it for us (this allows it to run in a
+    // terminal where the user can interact with `stdin`).
+    final canRunInTerminal =
+        initializeArgs?.supportsRunInTerminalRequest ?? false;
+
+    // The terminal kinds used by DAP are 'integrated' and 'external'.
+    final terminalKind = canRunInTerminal
+        ? args.console == 'terminal'
+            ? 'integrated'
+            : args.console == 'externalTerminal'
+                ? 'external'
+                : null
+        : null;
+
+    // TODO(dantup): Support passing env to both of these.
+
+    if (terminalKind != null) {
+      await launchInEditorTerminal(debug, terminalKind, vmPath, processArgs);
+    } else {
+      await launchAsProcess(vmPath, processArgs);
+    }
+  }
+
+  /// Called by [attachRequest] to request that we actually connect to the app
+  /// to be debugged.
+  Future<void> attachImpl() async {
+    final args = this.args as DartAttachRequestArguments;
+    final vmServiceUri = args.vmServiceUri;
+    final vmServiceInfoFile = args.vmServiceInfoFile;
+
+    if ((vmServiceUri == null) == (vmServiceInfoFile == null)) {
+      throw DebugAdapterException(
+        'To attach, provide exactly one of vmServiceUri/vmServiceInfoFile',
+      );
+    }
+
+    // Find the package_config file for this script.
+    // TODO(dantup): Remove this once
+    //   https://github.com/dart-lang/sdk/issues/45530 is done as it will not be
+    //   necessary.
+    final cwd = args.cwd;
+    if (cwd != null) {
+      final packageConfig = _findPackageConfigFile(cwd);
+      if (packageConfig != null) {
+        this.usePackageConfigFile(packageConfig);
+      }
+    }
+
+    final uri = vmServiceUri != null
+        ? Uri.parse(vmServiceUri)
+        : await waitForVmServiceInfoFile(File(vmServiceInfoFile!));
+
+    unawaited(connectDebugger(uri, resumeIfStarting: false));
+  }
+
+  /// Calls the client (via a `runInTerminal` request) to spawn the process so
+  /// that it can run in a local terminal that the user can interact with.
+  Future<void> launchInEditorTerminal(
+    bool debug,
+    String terminalKind,
+    String vmPath,
+    List<String> processArgs,
+  ) async {
+    final args = this.args as DartLaunchRequestArguments;
+    logger?.call('Spawning $vmPath with $processArgs in ${args.cwd}'
+        ' via client ${terminalKind} terminal');
+
+    // runInTerminal is a DAP request that goes from server-to-client that
+    // allows the DA to ask the client editor to run the debugee for us. In this
+    // case we will have no access to the process (although we get the PID) so
+    // for debugging will rely on the process writing the service-info file that
+    // we can detect with the normal watching code.
+    final requestArgs = RunInTerminalRequestArguments(
+      args: [vmPath, ...processArgs],
+      cwd: args.cwd ?? path.dirname(args.program),
+      kind: terminalKind,
+      title: args.name ?? 'Dart',
+    );
+    try {
+      final response = await sendRequest(requestArgs);
+      final body =
+          RunInTerminalResponseBody.fromJson(response as Map<String, Object?>);
+      logger?.call(
+        'Client spawned process'
+        ' (proc: ${body.processId}, shell: ${body.shellProcessId})',
+      );
+    } catch (e) {
+      logger?.call('Client failed to spawn process $e');
+      sendOutput('console', '\nFailed to spawn process: $e');
+      handleSessionTerminate();
+    }
+
+    // When using `runInTerminal` and `noDebug`, we will not connect to the VM
+    // Service so we will have no way of knowing when the process completes, so
+    // we just send the termination event right away.
+    if (!debug) {
+      handleSessionTerminate();
+    }
+  }
+
+  /// Launches the program as a process controlled by the debug adapter.
+  ///
+  /// Output to `stdout`/`stderr` will be sent to the editor using
+  /// [OutputEvent]s.
+  Future<void> launchAsProcess(String vmPath, List<String> processArgs) async {
     logger?.call('Spawning $vmPath with $processArgs in ${args.cwd}');
     final process = await Process.start(
       vmPath,
@@ -146,6 +297,36 @@
     unawaited(process.exitCode.then(_handleExitCode));
   }
 
+  /// Find the `package_config.json` file for the program being launched.
+  ///
+  /// TODO(dantup): Remove this once
+  ///   https://github.com/dart-lang/sdk/issues/45530 is done as it will not be
+  ///   necessary.
+  File? _findPackageConfigFile(String possibleRoot) {
+    File? packageConfig;
+    while (true) {
+      packageConfig =
+          File(path.join(possibleRoot, '.dart_tool', 'package_config.json'));
+
+      // If this packageconfig exists, use it.
+      if (packageConfig.existsSync()) {
+        break;
+      }
+
+      final parent = path.dirname(possibleRoot);
+
+      // If we can't go up anymore, the search failed.
+      if (parent == possibleRoot) {
+        packageConfig = null;
+        break;
+      }
+
+      possibleRoot = parent;
+    }
+
+    return packageConfig;
+  }
+
   /// Called by [terminateRequest] to request that we gracefully shut down the
   /// app being run (or in the case of an attach, disconnect).
   Future<void> terminateImpl() async {
@@ -158,10 +339,7 @@
   void _handleExitCode(int code) {
     final codeSuffix = code == 0 ? '' : ' ($code)';
     logger?.call('Process exited ($code)');
-    // Always add a leading newline since the last written text might not have
-    // had one.
-    sendOutput('console', '\nExited$codeSuffix.');
-    sendEvent(TerminatedEventBody());
+    handleSessionTerminate(codeSuffix);
   }
 
   void _handleStderr(List<int> data) {
@@ -172,19 +350,14 @@
     sendOutput('stdout', utf8.decode(data));
   }
 
-  /// Handles file watcher events for the vm-service-info file and connects the
-  /// debugger.
+  /// Attempts to read VM Service info from a watcher event.
   ///
-  /// The vm-service-info file is written by the VM when we start the app/script
-  /// to debug and contains the VM Service URI. This allows us to access the
-  /// auth token without needing to have the URI printed to/scraped from stdout.
-  void _handleVmServiceInfoEvent(FileSystemEvent event) {
+  /// If successful, returns the URI. Otherwise, returns null.
+  Uri? _readVmServiceInfoFile(File file) {
     try {
-      final content = _vmServiceInfoFile!.readAsStringSync();
+      final content = file.readAsStringSync();
       final json = jsonDecode(content);
-      final uri = Uri.parse(json['uri']);
-      unawaited(connectDebugger(uri));
-      _vmServiceInfoFileWatcher?.cancel();
+      return Uri.parse(json['uri']);
     } catch (e) {
       // It's possible we tried to read the file before it was completely
       // written so ignore and try again on the next event.
diff --git a/pkg/dds/lib/src/dap/base_debug_adapter.dart b/pkg/dds/lib/src/dap/base_debug_adapter.dart
index a74f1f3..3f64d98 100644
--- a/pkg/dds/lib/src/dap/base_debug_adapter.dart
+++ b/pkg/dds/lib/src/dap/base_debug_adapter.dart
@@ -26,14 +26,26 @@
 /// appropriate method calls/events.
 ///
 /// This class does not implement any DA functionality, only message handling.
-abstract class BaseDebugAdapter<TLaunchArgs extends LaunchRequestArguments> {
+abstract class BaseDebugAdapter<TLaunchArgs extends LaunchRequestArguments,
+    TAttachArgs extends AttachRequestArguments> {
   int _sequence = 1;
   final ByteStreamServerChannel _channel;
 
+  /// Completers for requests that are sent from the server back to the editor
+  /// such as `runInTerminal`.
+  final _serverToClientRequestCompleters = <int, Completer<Object?>>{};
+
   BaseDebugAdapter(this._channel) {
     _channel.listen(_handleIncomingMessage);
   }
 
+  /// Parses arguments for [attachRequest] into a type of [TAttachArgs].
+  ///
+  /// This method must be implemented by the implementing class using a class
+  /// that corresponds to the arguments it expects (these may differ between
+  /// Dart CLI, Dart tests, Flutter, Flutter tests).
+  TAttachArgs Function(Map<String, Object?>) get parseAttachArgs;
+
   /// Parses arguments for [launchRequest] into a type of [TLaunchArgs].
   ///
   /// This method must be implemented by the implementing class using a class
@@ -43,7 +55,7 @@
 
   Future<void> attachRequest(
     Request request,
-    TLaunchArgs args,
+    TAttachArgs args,
     void Function() sendResponse,
   );
 
@@ -163,10 +175,10 @@
 
   /// Sends an event, lookup up the event type based on the runtimeType of
   /// [body].
-  void sendEvent(EventBody body) {
+  void sendEvent(EventBody body, {String? eventType}) {
     final event = Event(
       seq: _sequence++,
-      event: eventTypes[body.runtimeType]!,
+      event: eventType ?? eventTypes[body.runtimeType]!,
       body: body,
     );
     _channel.sendEvent(event);
@@ -174,13 +186,19 @@
 
   /// Sends a request to the client, looking up the request type based on the
   /// runtimeType of [arguments].
-  void sendRequest(RequestArguments arguments) {
+  Future<Object?> sendRequest(RequestArguments arguments) {
     final request = Request(
       seq: _sequence++,
       command: commandTypes[arguments.runtimeType]!,
       arguments: arguments,
     );
+
+    // Store a completer to be used when a response comes back.
+    final completer = Completer<Object?>();
+    _serverToClientRequestCompleters[request.seq] = completer;
     _channel.sendRequest(request);
+
+    return completer.future;
   }
 
   Future<void> setBreakpointsRequest(
@@ -194,6 +212,12 @@
     void Function(SetExceptionBreakpointsResponseBody) sendResponse,
   );
 
+  Future<void> sourceRequest(
+    Request request,
+    SourceArguments args,
+    void Function(SourceResponseBody) sendResponse,
+  );
+
   Future<void> stackTraceRequest(
     Request request,
     StackTraceArguments args,
@@ -255,7 +279,7 @@
     } else if (request.command == 'launch') {
       handle(request, _withVoidResponse(launchRequest), parseLaunchArgs);
     } else if (request.command == 'attach') {
-      handle(request, _withVoidResponse(attachRequest), parseLaunchArgs);
+      handle(request, _withVoidResponse(attachRequest), parseAttachArgs);
     } else if (request.command == 'terminate') {
       handle(
         request,
@@ -302,6 +326,8 @@
       handle(request, threadsRequest, _voidArgs);
     } else if (request.command == 'stackTrace') {
       handle(request, stackTraceRequest, StackTraceArguments.fromJson);
+    } else if (request.command == 'source') {
+      handle(request, sourceRequest, SourceArguments.fromJson);
     } else if (request.command == 'scopes') {
       handle(request, scopesRequest, ScopesArguments.fromJson);
     } else if (request.command == 'variables') {
@@ -318,8 +344,16 @@
   }
 
   void _handleIncomingResponse(Response response) {
-    // TODO(dantup): Implement this when the server sends requests to the client
-    // (for example runInTerminalRequest).
+    final completer =
+        _serverToClientRequestCompleters.remove(response.requestSeq);
+
+    if (response.success) {
+      completer?.complete(response.body);
+    } else {
+      completer?.completeError(
+        response.message ?? 'Request ${response.requestSeq} failed',
+      );
+    }
   }
 
   /// Helpers for requests that have `void` arguments. The supplied args are
diff --git a/pkg/dds/lib/src/dap/isolate_manager.dart b/pkg/dds/lib/src/dap/isolate_manager.dart
index 9c16536..6eb4a24 100644
--- a/pkg/dds/lib/src/dap/isolate_manager.dart
+++ b/pkg/dds/lib/src/dap/isolate_manager.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 
+import 'package:collection/collection.dart';
 import 'package:vm_service/vm_service.dart' as vm;
 
 import 'adapters/dart.dart';
@@ -55,6 +57,10 @@
   /// isolates that appear after initial breakpoints were sent.
   final Map<String, List<SourceBreakpoint>> _clientBreakpointsByUri = {};
 
+  /// Tracks client breakpoints by the ID assigned by the VM so we can look up
+  /// conditions/logpoints when hitting breakpoints.
+  final Map<String, SourceBreakpoint> _clientBreakpointsByVmId = {};
+
   /// Tracks breakpoints created in the VM so they can be removed when the
   /// editor sends new breakpoints (currently the editor just sends a new list
   /// and not requests to add/remove).
@@ -81,6 +87,12 @@
   /// when asking for data so it's all stored together here.
   final _storedData = <int, _StoredData>{};
 
+  /// A pattern that matches an opening brace `{` that was not preceeded by a
+  /// dollar.
+  ///
+  /// Any leading character matched in place of the dollar is in the first capture.
+  final _braceNotPrefixedByDollarOrBackslashPattern = RegExp(r'(^|[^\\\$]){');
+
   IsolateManager(this._adapter);
 
   /// A list of all current active isolates.
@@ -116,8 +128,14 @@
 
   ThreadInfo? getThread(int threadId) => _threadsByThreadId[threadId];
 
-  /// Handles Isolate and Debug events
-  Future<void> handleEvent(vm.Event event) async {
+  /// Handles Isolate and Debug events.
+  ///
+  /// If [resumeIfStarting] is `true`, PauseStart/PausePostStart events will be
+  /// automatically resumed from.
+  Future<void> handleEvent(
+    vm.Event event, {
+    bool resumeIfStarting = true,
+  }) async {
     final isolateId = event.isolate?.id;
     if (isolateId == null) {
       return;
@@ -139,7 +157,7 @@
     if (eventKind == vm.EventKind.kIsolateExit) {
       _handleExit(event);
     } else if (eventKind?.startsWith('Pause') ?? false) {
-      await _handlePause(event);
+      await _handlePause(event, resumeIfStarting: resumeIfStarting);
     } else if (eventKind == vm.EventKind.kResume) {
       _handleResumed(event);
     }
@@ -151,7 +169,7 @@
   /// New isolates will be configured with the correct pause-exception behaviour,
   /// libraries will be marked as debuggable if appropriate, and breakpoints
   /// sent.
-  Future<void> registerIsolate(
+  Future<ThreadInfo> registerIsolate(
     vm.IsolateRef isolate,
     String eventKind,
   ) async {
@@ -181,6 +199,8 @@
       await _configureIsolate(isolate);
       registrationCompleter.complete();
     }
+
+    return info;
   }
 
   Future<void> resumeIsolate(vm.IsolateRef isolateRef,
@@ -233,6 +253,11 @@
     }
   }
 
+  /// Sends an event informing the client that a thread is stopped at entry.
+  void sendStoppedOnEntryEvent(int threadId) {
+    _adapter.sendEvent(StoppedEventBody(reason: 'entry', threadId: threadId));
+  }
+
   /// Records breakpoints for [uri].
   ///
   /// [breakpoints] represents the new set and entirely replaces anything given
@@ -271,6 +296,27 @@
   ThreadInfo? threadForIsolate(vm.IsolateRef? isolate) =>
       isolate?.id != null ? _threadsByIsolateId[isolate!.id!] : null;
 
+  /// Evaluates breakpoint condition [condition] and returns whether the result
+  /// is true (or non-zero for a numeric), sending any evaluation error to the
+  /// client.
+  Future<bool> _breakpointConditionEvaluatesTrue(
+    ThreadInfo thread,
+    String condition,
+  ) async {
+    final result =
+        await _evaluateAndPrintErrors(thread, condition, 'condition');
+    if (result == null) {
+      return false;
+    }
+
+    // Values we consider true for breakpoint conditions are boolean true,
+    // or non-zero numerics.
+    return (result.kind == vm.InstanceKind.kBool &&
+            result.valueAsString == 'true') ||
+        (result.kind == vm.InstanceKind.kInt && result.valueAsString != '0') ||
+        (result.kind == vm.InstanceKind.kDouble && result.valueAsString != '0');
+  }
+
   /// Configures a new isolate, setting it's exception-pause mode, which
   /// libraries are debuggable, and sending all breakpoints.
   Future<void> _configureIsolate(vm.IsolateRef isolate) async {
@@ -281,6 +327,44 @@
     ], eagerError: true);
   }
 
+  /// Evaluates an expression, returning the result if it is a [vm.InstanceRef]
+  /// and sending any error as an [OutputEvent].
+  Future<vm.InstanceRef?> _evaluateAndPrintErrors(
+    ThreadInfo thread,
+    String expression,
+    String type,
+  ) async {
+    try {
+      final result = await _adapter.vmService?.evaluateInFrame(
+        thread.isolate.id!,
+        0,
+        expression,
+        disableBreakpoints: true,
+      );
+
+      if (result is vm.InstanceRef) {
+        return result;
+      } else if (result is vm.ErrorRef) {
+        final message = result.message ?? '<error ref>';
+        _adapter.sendOutput(
+          'console',
+          'Debugger failed to evaluate breakpoint $type "$expression": $message\n',
+        );
+      } else if (result is vm.Sentinel) {
+        final message = result.valueAsString ?? '<collected>';
+        _adapter.sendOutput(
+          'console',
+          'Debugger failed to evaluate breakpoint $type "$expression": $message\n',
+        );
+      }
+    } catch (e) {
+      _adapter.sendOutput(
+        'console',
+        'Debugger failed to evaluate breakpoint $type "$expression": $e\n',
+      );
+    }
+  }
+
   void _handleExit(vm.Event event) {
     final isolate = event.isolate!;
     final isolateId = isolate.id!;
@@ -297,18 +381,23 @@
 
   /// Handles a pause event.
   ///
-  /// For [vm.EventKind.kPausePostRequest] which occurs after a restart, the isolate
-  /// will be re-configured (pause-exception behaviour, debuggable libraries,
-  /// breakpoints) and then resumed.
+  /// For [vm.EventKind.kPausePostRequest] which occurs after a restart, the
+  /// isolate will be re-configured (pause-exception behaviour, debuggable
+  /// libraries, breakpoints) and then (if [resumeIfStarting] is `true`)
+  /// resumed.
   ///
-  /// For [vm.EventKind.kPauseStart], the isolate will be resumed.
+  /// For [vm.EventKind.kPauseStart] and [resumeIfStarting] is `true`, the
+  /// isolate will be resumed.
   ///
   /// For breakpoints with conditions that are not met and for logpoints, the
   /// isolate will be automatically resumed.
   ///
   /// For all other pause types, the isolate will remain paused and a
   /// corresponding "Stopped" event sent to the editor.
-  Future<void> _handlePause(vm.Event event) async {
+  Future<void> _handlePause(
+    vm.Event event, {
+    bool resumeIfStarting = true,
+  }) async {
     final eventKind = event.kind;
     final isolate = event.isolate!;
     final thread = _threadsByIsolateId[isolate.id!];
@@ -325,13 +414,21 @@
     // after a hot restart.
     if (eventKind == vm.EventKind.kPausePostRequest) {
       await _configureIsolate(isolate);
-      await resumeThread(thread.threadId);
+      if (resumeIfStarting) {
+        await resumeThread(thread.threadId);
+      }
     } else if (eventKind == vm.EventKind.kPauseStart) {
       // Don't resume from a PauseStart if this has already happened (see
       // comments on [thread.hasBeenStarted]).
       if (!thread.hasBeenStarted) {
-        thread.hasBeenStarted = true;
-        await resumeThread(thread.threadId);
+        // If requested, automatically resume. Otherwise send a Stopped event to
+        // inform the client UI the thread is paused.
+        if (resumeIfStarting) {
+          thread.hasBeenStarted = true;
+          await resumeThread(thread.threadId);
+        } else {
+          sendStoppedOnEntryEvent(thread.threadId);
+        }
       }
     } else {
       // PauseExit, PauseBreakpoint, PauseInterrupted, PauseException
@@ -340,6 +437,29 @@
       if (eventKind == vm.EventKind.kPauseBreakpoint &&
           (event.pauseBreakpoints?.isNotEmpty ?? false)) {
         reason = 'breakpoint';
+        // Look up the client breakpoints that correspond to the VM breakpoint(s)
+        // we hit. It's possible some of these may be missing because we could
+        // hit a breakpoint that was set before we were attached.
+        final clientBreakpoints = event.pauseBreakpoints!
+            .map((bp) => _clientBreakpointsByVmId[bp.id!])
+            .toSet();
+
+        // Split into logpoints (which just print messages) and breakpoints.
+        final logPoints = clientBreakpoints
+            .whereNotNull()
+            .where((bp) => bp.logMessage?.isNotEmpty ?? false)
+            .toSet();
+        final breakpoints = clientBreakpoints.difference(logPoints);
+
+        await _processLogPoints(thread, logPoints);
+
+        // Resume if there are no (non-logpoint) breakpoints, of any of the
+        // breakpoints don't have false conditions.
+        if (breakpoints.isEmpty ||
+            !await _shouldHitBreakpoint(thread, breakpoints)) {
+          await resumeThread(thread.threadId);
+          return;
+        }
       } else if (eventKind == vm.EventKind.kPauseBreakpoint) {
         reason = 'step';
       } else if (eventKind == vm.EventKind.kPauseException) {
@@ -350,6 +470,7 @@
       // can add a variables scope for it so it can be examined.
       final exception = event.exception;
       if (exception != null) {
+        _adapter.storeEvaluateName(exception, threadExceptionExpression);
         thread.exceptionReference = thread.storeData(exception);
       }
 
@@ -371,32 +492,38 @@
     }
   }
 
-  bool _isExternalPackageLibrary(vm.LibraryRef library) =>
-      // TODO(dantup): This needs to check if it's _external_, eg.
-      //
-      // - is from the flutter SDK (flutter, flutter_test, ...)
-      // - is from pub/pubcache
-      //
-      // This is intended to match the users idea of "my code". For example
-      // they may wish to debug the current app being run, as well as any other
-      // projects that are references with path: dependencies (which are likely
-      // their own supporting projects).
-      false /*library.uri?.startsWith('package:') ?? false*/;
-
-  bool _isSdkLibrary(vm.LibraryRef library) =>
-      library.uri?.startsWith('dart:') ?? false;
-
-  /// Checks whether a library should be considered debuggable.
+  /// Interpolates and prints messages for any log points.
   ///
-  /// Initial values are provided in the launch arguments, but may be updated
-  /// by the `updateDebugOptions` custom request.
-  bool _libaryIsDebuggable(vm.LibraryRef library) {
-    if (_isSdkLibrary(library)) {
-      return debugSdkLibraries;
-    } else if (_isExternalPackageLibrary(library)) {
-      return debugExternalPackageLibraries;
-    } else {
-      return true;
+  /// Log Points are breakpoints with string messages attached. When the VM hits
+  /// the breakpoint, we evaluate/print the message and then automatically
+  /// resume (as long as there was no other breakpoint).
+  Future<void> _processLogPoints(
+    ThreadInfo thread,
+    Set<SourceBreakpoint> logPoints,
+  ) async {
+    // Otherwise, we need to evaluate all of the conditions and see if any are
+    // true, in which case we will also hit.
+    final messages = logPoints.map((bp) => bp.logMessage!).toList();
+
+    final results = await Future.wait(messages.map(
+      (message) {
+        // Log messages are bare so use jsonEncode to make them valid string
+        // expressions.
+        final expression = jsonEncode(message)
+            // The DAP spec says "Expressions within {} are interpolated" so to
+            // avoid any clever parsing, just prefix them with $ and treat them
+            // like other Dart interpolation expressions.
+            .replaceAllMapped(_braceNotPrefixedByDollarOrBackslashPattern,
+                (match) => '${match.group(1)}\${')
+            // Remove any backslashes the user added to "escape" braces.
+            .replaceAll(r'\\{', '{');
+        return _evaluateAndPrintErrors(thread, expression, 'log message');
+      },
+    ));
+
+    for (final messageResult in results) {
+      // TODO(dantup): Format this using other existing code in protocol converter?
+      _adapter.sendOutput('console', '${messageResult?.valueAsString}\n');
     }
   }
 
@@ -435,6 +562,7 @@
             isolateId, uri, bp.line,
             column: bp.column);
         existingBreakpointsForIsolateAndUri.add(vmBp);
+        _clientBreakpointsByVmId[vmBp.id!] = bp;
       });
     }
   }
@@ -468,10 +596,40 @@
       return;
     }
     await Future.wait(libraries.map((library) async {
-      final isDebuggable = _libaryIsDebuggable(library);
+      final libraryUri = library.uri;
+      final isDebuggable = libraryUri != null
+          ? _adapter.libaryIsDebuggable(Uri.parse(libraryUri))
+          : false;
       await service.setLibraryDebuggable(isolateId, library.id!, isDebuggable);
     }));
   }
+
+  /// Checks whether a breakpoint the VM paused at is one we should actually
+  /// remain at. That is, it either has no condition, or its condition evaluates
+  /// to something truthy.
+  Future<bool> _shouldHitBreakpoint(
+    ThreadInfo thread,
+    Set<SourceBreakpoint?> breakpoints,
+  ) async {
+    // If any were missing (they're null) or do not have a condition, we should
+    // hit the breakpoint.
+    final clientBreakpointsWithConditions =
+        breakpoints.where((bp) => bp?.condition?.isNotEmpty ?? false).toList();
+    if (breakpoints.length != clientBreakpointsWithConditions.length) {
+      return true;
+    }
+
+    // Otherwise, we need to evaluate all of the conditions and see if any are
+    // true, in which case we will also hit.
+    final conditions =
+        clientBreakpointsWithConditions.map((bp) => bp!.condition!).toSet();
+
+    final results = await Future.wait(conditions.map(
+      (condition) => _breakpointConditionEvaluatesTrue(thread, condition),
+    ));
+
+    return results.any((result) => result);
+  }
 }
 
 /// Holds state for a single Isolate/Thread.
diff --git a/pkg/dds/lib/src/dap/protocol_common.dart b/pkg/dds/lib/src/dap/protocol_common.dart
index f9c09f4..9a20311 100644
--- a/pkg/dds/lib/src/dap/protocol_common.dart
+++ b/pkg/dds/lib/src/dap/protocol_common.dart
@@ -2,12 +2,35 @@
 // for 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';
+
 /// A base class for (spec-generated) classes that represent the `body` of a an
 /// event.
 abstract class EventBody {
   static bool canParse(Object? obj) => obj is Map<String, Object?>?;
 }
 
+/// A generic event body class that just supplies an object directly.
+///
+/// Used to support custom events sent by the debug adapter such as 'dart.log'.
+///
+/// The supplied [body] must be convertable to JSON.
+class RawEventBody extends EventBody {
+  final Object body;
+
+  RawEventBody(this.body)
+      : assert(() {
+          try {
+            jsonEncode(body);
+            return true;
+          } catch (e) {
+            return false;
+          }
+        }(), 'body should be JSON encodable');
+
+  Object toJson() => body;
+}
+
 /// A generic arguments class that just supplies the arguments map directly.
 ///
 /// Used to support custom requests that may be provided by other implementing
diff --git a/pkg/dds/lib/src/dap/protocol_converter.dart b/pkg/dds/lib/src/dap/protocol_converter.dart
index 6285121..a3e836e 100644
--- a/pkg/dds/lib/src/dap/protocol_converter.dart
+++ b/pkg/dds/lib/src/dap/protocol_converter.dart
@@ -6,6 +6,7 @@
 import 'dart:io';
 
 import 'package:collection/collection.dart';
+import 'package:package_config/package_config_types.dart';
 import 'package:path/path.dart' as path;
 import 'package:vm_service/vm_service.dart' as vm;
 
@@ -25,6 +26,11 @@
   /// the debug session.
   final DartDebugAdapter _adapter;
 
+  /// Temporary PackageConfig used for resolving package: URIs.
+  /// TODO(dantup): Replace this implementation with one that calls the VM
+  ///   Service once https://github.com/dart-lang/sdk/issues/45530 is done.
+  PackageConfig packageConfig = PackageConfig.empty;
+
   ProtocolConverter(this._adapter);
 
   /// Converts an absolute path to one relative to the cwd used to launch the
@@ -55,17 +61,22 @@
     ThreadInfo thread,
     vm.InstanceRef ref, {
     required bool allowCallingToString,
+    bool allowTruncatedValue = true,
     bool includeQuotesAroundString = true,
   }) async {
     final isTruncated = ref.valueAsStringIsTruncated ?? false;
     if (ref.kind == vm.InstanceKind.kString && isTruncated) {
-      // Call toString() if allowed, otherwise (or if it returns null) fall back
-      // to the truncated value with "…" suffix.
-      var stringValue = allowCallingToString
+      // Call toString() if allowed (and we don't already have a value),
+      // otherwise (or if it returns null) fall back to the truncated value
+      // with "…" suffix.
+      var stringValue = allowCallingToString &&
+              (ref.valueAsString == null || !allowTruncatedValue)
           ? await _callToString(
               thread,
               ref,
-              includeQuotesAroundString: includeQuotesAroundString,
+              // Quotes are handled below, so they can be wrapped around the
+              // elipsis.
+              includeQuotesAroundString: false,
             )
           : null;
       stringValue ??= '${ref.valueAsString}…';
@@ -88,7 +99,11 @@
           ref,
           includeQuotesAroundString: false,
         );
-        stringValue += ' ($toStringValue)';
+        // Include the toString() result only if it's not the default (which
+        // duplicates the type name we're already showing).
+        if (toStringValue != "Instance of '${ref.classRef?.name}'") {
+          stringValue += ' ($toStringValue)';
+        }
       }
       return stringValue;
     } else if (ref.kind == 'List') {
@@ -110,6 +125,7 @@
   Future<List<dap.Variable>> convertVmInstanceToVariablesList(
     ThreadInfo thread,
     vm.Instance instance, {
+    required String? evaluateName,
     required bool allowCallingToString,
     int? startItem = 0,
     int? numItems,
@@ -124,6 +140,8 @@
         await convertVmResponseToVariable(
           thread,
           instance,
+          name: null,
+          evaluateName: evaluateName,
           allowCallingToString: allowCallingToString,
         )
       ];
@@ -137,7 +155,9 @@
             (index, response) => convertVmResponseToVariable(
               thread,
               response,
-              name: '${start + index}',
+              name: '[${start + index}]',
+              evaluateName: _adapter.combineEvaluateName(
+                  evaluateName, '[${start + index}]'),
               allowCallingToString:
                   allowCallingToString && index <= maxToStringsPerEvaluation,
             ),
@@ -152,14 +172,26 @@
       return Future.wait(associations
           .sublist(start, numItems != null ? start + numItems : null)
           .mapIndexed((index, mapEntry) async {
+        final key = mapEntry.key;
+        final value = mapEntry.value;
         final callToString =
             allowCallingToString && index <= maxToStringsPerEvaluation;
-        final keyDisplay = await convertVmResponseToDisplayString(
-            thread, mapEntry.key,
+
+        final keyDisplay = await convertVmResponseToDisplayString(thread, key,
             allowCallingToString: callToString);
         final valueDisplay = await convertVmResponseToDisplayString(
-            thread, mapEntry.value,
+            thread, value,
             allowCallingToString: callToString);
+
+        // We only provide an evaluateName for the value, and only if the
+        // key is a simple value.
+        if (key is vm.InstanceRef &&
+            value is vm.InstanceRef &&
+            evaluateName != null &&
+            isSimpleKind(key.kind)) {
+          _adapter.storeEvaluateName(value, '$evaluateName[$keyDisplay]');
+        }
+
         return dap.Variable(
           name: '${start + index}',
           value: '$keyDisplay -> $valueDisplay',
@@ -169,11 +201,17 @@
     } else if (fields != null) {
       // Otherwise, show the fields from the instance.
       final variables = await Future.wait(fields.mapIndexed(
-          (index, field) async => convertVmResponseToVariable(
-              thread, field.value,
-              name: field.decl?.name ?? '<unnamed field>',
+        (index, field) async {
+          final name = field.decl?.name;
+          return convertVmResponseToVariable(thread, field.value,
+              name: name ?? '<unnamed field>',
+              evaluateName: name != null
+                  ? _adapter.combineEvaluateName(evaluateName, '.$name')
+                  : null,
               allowCallingToString:
-                  allowCallingToString && index <= maxToStringsPerEvaluation)));
+                  allowCallingToString && index <= maxToStringsPerEvaluation);
+        },
+      ));
 
       // Also evaluate the getters if evaluateGettersInDebugViews=true enabled.
       final service = _adapter.vmService;
@@ -186,24 +224,37 @@
         /// Helper to evaluate each getter and convert the response to a
         /// variable.
         Future<dap.Variable> evaluate(int index, String getterName) async {
-          final response = await service.evaluate(
-            thread.isolate.id!,
-            instance.id!,
-            getterName,
-          );
-          // Convert results to variables.
-          return convertVmResponseToVariable(
-            thread,
-            response,
-            name: getterName,
-            allowCallingToString:
-                allowCallingToString && index <= maxToStringsPerEvaluation,
-          );
+          try {
+            final response = await service.evaluate(
+              thread.isolate.id!,
+              instance.id!,
+              getterName,
+            );
+            // Convert results to variables.
+            return convertVmResponseToVariable(
+              thread,
+              response,
+              name: getterName,
+              evaluateName:
+                  _adapter.combineEvaluateName(evaluateName, '.$getterName'),
+              allowCallingToString:
+                  allowCallingToString && index <= maxToStringsPerEvaluation,
+            );
+          } catch (e) {
+            return dap.Variable(
+              name: getterName,
+              value: _adapter.extractEvaluationErrorMessage('$e'),
+              variablesReference: 0,
+            );
+          }
         }
 
         variables.addAll(await Future.wait(getterNames.mapIndexed(evaluate)));
       }
 
+      // Sort the fields/getters by name.
+      variables.sortBy((v) => v.name);
+
       return variables;
     } else {
       // For any other type that we don't produce variables for, return an empty
@@ -248,7 +299,8 @@
   Future<dap.Variable> convertVmResponseToVariable(
     ThreadInfo thread,
     vm.Response response, {
-    String? name,
+    required String? name,
+    required String? evaluateName,
     required bool allowCallingToString,
   }) async {
     if (response is vm.InstanceRef) {
@@ -259,6 +311,7 @@
 
       return dap.Variable(
         name: name ?? response.kind.toString(),
+        evaluateName: evaluateName,
         value: await convertVmResponseToDisplayString(
           thread,
           response,
@@ -268,13 +321,21 @@
       );
     } else if (response is vm.Sentinel) {
       return dap.Variable(
-        name: '<sentinel>',
+        name: name ?? '<sentinel>',
         value: response.valueAsString.toString(),
         variablesReference: 0,
       );
+    } else if (response is vm.ErrorRef) {
+      final errorMessage = _adapter
+          .extractUnhandledExceptionMessage(response.message ?? '<error>');
+      return dap.Variable(
+        name: name ?? '<error>',
+        value: '<$errorMessage>',
+        variablesReference: 0,
+      );
     } else {
       return dap.Variable(
-        name: '<error>',
+        name: name ?? '<error>',
         value: response.runtimeType.toString(),
         variablesReference: 0,
       );
@@ -325,14 +386,16 @@
 
     final scriptRef = location.script;
     final tokenPos = location.tokenPos;
-    final uri = scriptRef?.uri;
+    final scriptRefUri = scriptRef?.uri;
+    final uri = scriptRefUri != null ? Uri.parse(scriptRefUri) : null;
+    final uriIsPackage = uri?.isScheme('package') ?? false;
     final sourcePath = uri != null ? await convertVmUriToSourcePath(uri) : null;
     var canShowSource = sourcePath != null && File(sourcePath).existsSync();
 
     // Download the source if from a "dart:" uri.
     int? sourceReference;
     if (uri != null &&
-        (uri.startsWith('dart:') || uri.startsWith('org-dartlang-app:')) &&
+        (uri.isScheme('dart') || uri.isScheme('org-dartlang-app')) &&
         scriptRef != null) {
       sourceReference = thread.storeData(scriptRef);
       canShowSource = true;
@@ -349,13 +412,31 @@
       }
     }
 
+    // If a source would be considered not-debuggable (for example it's in the
+    // SDK and debugSdkLibraries=false) then we should also mark it as
+    // deemphasized so that the editor can jump up the stack to the first frame
+    // of debuggable code.
+    final isDebuggable = uri != null && _adapter.libaryIsDebuggable(uri);
+    final presentationHint = isDebuggable ? null : 'deemphasize';
+    final origin = uri != null && _adapter.isSdkLibrary(uri)
+        ? 'from the SDK'
+        : uri != null && _adapter.isExternalPackageLibrary(uri)
+            ? 'from external packages'
+            : null;
+
     final source = canShowSource
         ? dap.Source(
-            name: sourcePath != null ? convertToRelativePath(sourcePath) : uri,
+            name: uriIsPackage
+                ? uri!.toString()
+                : sourcePath != null
+                    ? convertToRelativePath(sourcePath)
+                    : uri?.toString() ?? '<unknown source>',
             path: sourcePath,
             sourceReference: sourceReference,
-            origin: null,
-            adapterData: location.script)
+            origin: origin,
+            adapterData: location.script,
+            presentationHint: presentationHint,
+          )
         : null;
 
     // The VM only allows us to restart from frames that are not the top frame,
@@ -374,18 +455,17 @@
     );
   }
 
-  /// Converts the source path from the VM to a file path.
+  /// Converts the source URI from the VM to a file path.
   ///
   /// This is required so that when the user stops (or navigates via a stack
   /// frame) we open the same file on their local disk. If we downloaded the
   /// source from the VM, they would end up seeing two copies of files (and they
   /// would each have their own breakpoints) which can be confusing.
-  Future<String?> convertVmUriToSourcePath(String uri) async {
-    if (uri.startsWith('file://')) {
-      return Uri.parse(uri).toFilePath();
-    } else if (uri.startsWith('package:')) {
-      // TODO(dantup): Handle mapping package: uris ?
-      return null;
+  Future<String?> convertVmUriToSourcePath(Uri uri) async {
+    if (uri.isScheme('file')) {
+      return uri.toFilePath();
+    } else if (uri.isScheme('package')) {
+      return resolvePackageUri(uri);
     } else {
       return null;
     }
@@ -402,6 +482,19 @@
         kind == 'Closure';
   }
 
+  /// Resolves a `package: URI` to the real underlying source path.
+  ///
+  /// Returns `null` if no mapping was possible, for example if the package is
+  /// not in the package mapping file.
+  String? resolvePackageUri(Uri uri) {
+    // TODO(dantup): Replace this implementation with one that calls the VM
+    //   Service once https://github.com/dart-lang/sdk/issues/45530 is done.
+    // This implementation makes assumptions about the package file being used
+    // that might not be correct (for example if the user uses the --packages
+    // flag).
+    return packageConfig.resolve(uri)?.toFilePath();
+  }
+
   /// Invokes the toString() method on a [vm.InstanceRef] and converts the
   /// response to a user-friendly display string.
   ///
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
index 4360bcc..7de1b71 100644
--- a/pkg/dds/lib/src/dds_impl.dart
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:collection';
 import 'dart:convert';
 import 'dart:io';
 import 'dart:math';
@@ -54,6 +55,7 @@
     this._remoteVmServiceUri,
     this._uri,
     this._authCodesEnabled,
+    this._cachedUserTags,
     this._ipv6,
     this._devToolsConfiguration,
     this.shouldLogRequests,
@@ -66,7 +68,6 @@
   }
 
   Future<void> startService() async {
-    bool started = false;
     DartDevelopmentServiceException? error;
     // TODO(bkonyi): throw if we've already shutdown.
     // Establish the connection to the VM service.
@@ -76,7 +77,7 @@
     unawaited(
       vmServiceClient.listen().then(
         (_) {
-          if (started) {
+          if (_initializationComplete) {
             shutdown();
           } else {
             // If we fail to connect to the service or the connection is
@@ -87,7 +88,7 @@
           }
         },
         onError: (e, st) {
-          if (started) {
+          if (_initializationComplete) {
             shutdown();
           } else {
             // If we encounter an error while we're starting up, we'll need to
@@ -110,9 +111,17 @@
 
       // Once we have a connection to the VM service, we're ready to spawn the intermediary.
       await _startDDSServer();
-      started = true;
+      _initializationComplete = true;
     } on StateError {
-      /* Ignore json-rpc state errors */
+      // Handle json-rpc state errors.
+      //
+      // It's possible that ordering of events on the event queue can result in
+      // the cleanup code above being called after this function has returned,
+      // resulting in an invalid DDS instance being released into the wild.
+      //
+      // If initialization hasn't completed and the error hasn't already been
+      // set, set it now.
+      error ??= DartDevelopmentServiceException.failedToStart();
     }
 
     // Check if we encountered any errors during startup, cleanup, and throw.
@@ -140,8 +149,17 @@
     }
     pipeline = pipeline.addMiddleware(_authCodeMiddleware);
     final handler = pipeline.addHandler(_handlers().handler);
-    // Start the DDS server.
-    _server = await io.serve(handler, host, port);
+    // Start the DDS server. Run in an error Zone to ensure that asynchronous
+    // exceptions encountered during request handling are handled, as exceptions
+    // thrown during request handling shouldn't take down the entire service.
+    _server = await runZonedGuarded(
+      () async => await io.serve(handler, host, port),
+      (error, stack) {
+        if (shouldLogRequests) {
+          print('Asynchronous error: $error\n$stack');
+        }
+      },
+    )!;
 
     final tmpUri = Uri(
       scheme: 'http',
@@ -173,8 +191,8 @@
   /// Stop accepting requests after gracefully handling existing requests.
   @override
   Future<void> shutdown() async {
-    if (_done.isCompleted || _shuttingDown) {
-      // Already shutdown.
+    if (_done.isCompleted || _shuttingDown || !_initializationComplete) {
+      // Already shutdown or we were interrupted during initialization.
       return;
     }
     _shuttingDown = true;
@@ -381,8 +399,12 @@
 
   final DevToolsConfiguration? _devToolsConfiguration;
 
+  List<String> get cachedUserTags => UnmodifiableListView(_cachedUserTags);
+  final List<String> _cachedUserTags;
+
   Future<void> get done => _done.future;
   Completer _done = Completer<void>();
+  bool _initializationComplete = false;
   bool _shuttingDown = false;
 
   ClientManager get clientManager => _clientManager;
diff --git a/pkg/dds/lib/src/devtools/devtools_client.dart b/pkg/dds/lib/src/devtools/devtools_client.dart
index 8bc3564..e5ec54e 100644
--- a/pkg/dds/lib/src/devtools/devtools_client.dart
+++ b/pkg/dds/lib/src/devtools/devtools_client.dart
@@ -4,12 +4,11 @@
 
 import 'dart:async';
 
+import 'package:devtools_shared/devtools_server.dart';
 import 'package:json_rpc_2/src/server.dart' as json_rpc;
 import 'package:sse/src/server/sse_handler.dart';
 import 'package:stream_channel/stream_channel.dart';
 
-import 'server_api.dart';
-
 class LoggingMiddlewareSink<S> implements StreamSink<S> {
   LoggingMiddlewareSink(this.sink);
 
diff --git a/pkg/dds/lib/src/devtools/devtools_handler.dart b/pkg/dds/lib/src/devtools/devtools_handler.dart
index 87c4fa6..3b55bfb 100644
--- a/pkg/dds/lib/src/devtools/devtools_handler.dart
+++ b/pkg/dds/lib/src/devtools/devtools_handler.dart
@@ -5,13 +5,13 @@
 import 'dart:async';
 
 import 'package:dds/src/constants.dart';
+import 'package:devtools_shared/devtools_server.dart';
 import 'package:shelf/shelf.dart';
 import 'package:shelf_static/shelf_static.dart';
 import 'package:sse/server/sse_handler.dart';
 
 import '../dds_impl.dart';
 import 'devtools_client.dart';
-import 'server_api.dart';
 
 /// Returns a [Handler] which handles serving DevTools and the DevTools server
 /// API under $DDS_URI/devtools/.
diff --git a/pkg/dds/lib/src/devtools/file_system.dart b/pkg/dds/lib/src/devtools/file_system.dart
deleted file mode 100644
index d5d6c6a..0000000
--- a/pkg/dds/lib/src/devtools/file_system.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(bkonyi): remove once package:devtools_server_api is available
-// See https://github.com/flutter/devtools/issues/2958.
-
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:path/path.dart' as path;
-
-import 'usage.dart';
-
-class LocalFileSystem {
-  static String _userHomeDir() {
-    final String envKey =
-        Platform.operatingSystem == 'windows' ? 'APPDATA' : 'HOME';
-    final String? value = Platform.environment[envKey];
-    return value == null ? '.' : value;
-  }
-
-  /// Returns the path to the DevTools storage directory.
-  static String devToolsDir() {
-    return path.join(_userHomeDir(), '.flutter-devtools');
-  }
-
-  /// Moves the .devtools file to ~/.flutter-devtools/.devtools if the .devtools file
-  /// exists in the user's home directory.
-  static void maybeMoveLegacyDevToolsStore() {
-    final file = File(path.join(_userHomeDir(), DevToolsUsage.storeName));
-    if (file.existsSync()) {
-      ensureDevToolsDirectory();
-      file.copySync(path.join(devToolsDir(), DevToolsUsage.storeName));
-      file.deleteSync();
-    }
-  }
-
-  /// Creates the ~/.flutter-devtools directory if it does not already exist.
-  static void ensureDevToolsDirectory() {
-    Directory('${LocalFileSystem.devToolsDir()}').createSync();
-  }
-
-  /// Returns a DevTools file from the given path.
-  ///
-  /// Only files within ~/.flutter-devtools/ can be accessed.
-  static File? devToolsFileFromPath(String pathFromDevToolsDir) {
-    if (pathFromDevToolsDir.contains('..')) {
-      // The passed in path should not be able to walk up the directory tree
-      // outside of the ~/.flutter-devtools/ directory.
-      return null;
-    }
-    ensureDevToolsDirectory();
-    final file = File(path.join(devToolsDir(), pathFromDevToolsDir));
-    if (!file.existsSync()) {
-      return null;
-    }
-    return file;
-  }
-
-  /// Returns a DevTools file from the given path as encoded json.
-  ///
-  /// Only files within ~/.flutter-devtools/ can be accessed.
-  static String? devToolsFileAsJson(String pathFromDevToolsDir) {
-    final file = devToolsFileFromPath(pathFromDevToolsDir);
-    if (file == null) return null;
-
-    final fileName = path.basename(file.path);
-    if (!fileName.endsWith('.json')) return null;
-
-    final content = file.readAsStringSync();
-    final json = jsonDecode(content);
-    json['lastModifiedTime'] = file.lastModifiedSync().toString();
-    return jsonEncode(json);
-  }
-
-  /// Whether the flutter store file exists.
-  static bool flutterStoreExists() {
-    final flutterStore = File('${_userHomeDir()}/.flutter');
-    return flutterStore.existsSync();
-  }
-}
diff --git a/pkg/dds/lib/src/devtools/server_api.dart b/pkg/dds/lib/src/devtools/server_api.dart
deleted file mode 100644
index 5f21a03..0000000
--- a/pkg/dds/lib/src/devtools/server_api.dart
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(bkonyi): remove once package:devtools_server_api is available
-// See https://github.com/flutter/devtools/issues/2958.
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:devtools_shared/devtools_shared.dart';
-import 'package:shelf/shelf.dart' as shelf;
-
-import 'file_system.dart';
-import 'usage.dart';
-
-/// The DevTools server API.
-///
-/// This defines endpoints that serve all requests that come in over api/.
-class ServerApi {
-  static const errorNoActiveSurvey = 'ERROR: setActiveSurvey not called.';
-
-  /// Determines whether or not [request] is an API call.
-  static bool canHandle(shelf.Request request) {
-    return request.url.path.startsWith(apiPrefix);
-  }
-
-  /// Handles all requests.
-  ///
-  /// To override an API call, pass in a subclass of [ServerApi].
-  static FutureOr<shelf.Response> handle(
-    shelf.Request request, [
-    ServerApi? api,
-  ]) {
-    api ??= ServerApi();
-    switch (request.url.path) {
-      // ----- Flutter Tool GA store. -----
-      case apiGetFlutterGAEnabled:
-        // Is Analytics collection enabled?
-        return api.getCompleted(
-          request,
-          json.encode(FlutterUsage.doesStoreExist ? _usage!.enabled : null),
-        );
-      case apiGetFlutterGAClientId:
-        // Flutter Tool GA clientId - ONLY get Flutter's clientId if enabled is
-        // true.
-        return (FlutterUsage.doesStoreExist)
-            ? api.getCompleted(
-                request,
-                json.encode(_usage!.enabled ? _usage!.clientId : null),
-              )
-            : api.getCompleted(
-                request,
-                json.encode(null),
-              );
-
-      // ----- DevTools GA store. -----
-
-      case apiResetDevTools:
-        _devToolsUsage.reset();
-        return api.getCompleted(request, json.encode(true));
-      case apiGetDevToolsFirstRun:
-        // Has DevTools been run first time? To bring up welcome screen.
-        return api.getCompleted(
-          request,
-          json.encode(_devToolsUsage.isFirstRun),
-        );
-      case apiGetDevToolsEnabled:
-        // Is DevTools Analytics collection enabled?
-        return api.getCompleted(request, json.encode(_devToolsUsage.enabled));
-      case apiSetDevToolsEnabled:
-        // Enable or disable DevTools analytics collection.
-        final queryParams = request.requestedUri.queryParameters;
-        if (queryParams.containsKey(devToolsEnabledPropertyName)) {
-          _devToolsUsage.enabled =
-              json.decode(queryParams[devToolsEnabledPropertyName]!);
-        }
-        return api.setCompleted(request, json.encode(_devToolsUsage.enabled));
-
-      // ----- DevTools survey store. -----
-
-      case apiSetActiveSurvey:
-        // Assume failure.
-        bool result = false;
-
-        // Set the active survey used to store subsequent apiGetSurveyActionTaken,
-        // apiSetSurveyActionTaken, apiGetSurveyShownCount, and
-        // apiIncrementSurveyShownCount calls.
-        final queryParams = request.requestedUri.queryParameters;
-        if (queryParams.keys.length == 1 &&
-            queryParams.containsKey(activeSurveyName)) {
-          final String theSurveyName = queryParams[activeSurveyName]!;
-
-          // Set the current activeSurvey.
-          _devToolsUsage.activeSurvey = theSurveyName;
-          result = true;
-        }
-
-        return api.getCompleted(request, json.encode(result));
-      case apiGetSurveyActionTaken:
-        // Request setActiveSurvey has not been requested.
-        if (_devToolsUsage.activeSurvey == null) {
-          return api.badRequest('$errorNoActiveSurvey '
-              '- $apiGetSurveyActionTaken');
-        }
-        // SurveyActionTaken has the survey been acted upon (taken or dismissed)
-        return api.getCompleted(
-          request,
-          json.encode(_devToolsUsage.surveyActionTaken),
-        );
-      // TODO(terry): remove the query param logic for this request.
-      // setSurveyActionTaken should only be called with the value of true, so
-      // we can remove the extra complexity.
-      case apiSetSurveyActionTaken:
-        // Request setActiveSurvey has not been requested.
-        if (_devToolsUsage.activeSurvey == null) {
-          return api.badRequest('$errorNoActiveSurvey '
-              '- $apiSetSurveyActionTaken');
-        }
-        // Set the SurveyActionTaken.
-        // Has the survey been taken or dismissed..
-        final queryParams = request.requestedUri.queryParameters;
-        if (queryParams.containsKey(surveyActionTakenPropertyName)) {
-          _devToolsUsage.surveyActionTaken =
-              json.decode(queryParams[surveyActionTakenPropertyName]!);
-        }
-        return api.setCompleted(
-          request,
-          json.encode(_devToolsUsage.surveyActionTaken),
-        );
-      case apiGetSurveyShownCount:
-        // Request setActiveSurvey has not been requested.
-        if (_devToolsUsage.activeSurvey == null) {
-          return api.badRequest('$errorNoActiveSurvey '
-              '- $apiGetSurveyShownCount');
-        }
-        // SurveyShownCount how many times have we asked to take survey.
-        return api.getCompleted(
-          request,
-          json.encode(_devToolsUsage.surveyShownCount),
-        );
-      case apiIncrementSurveyShownCount:
-        // Request setActiveSurvey has not been requested.
-        if (_devToolsUsage.activeSurvey == null) {
-          return api.badRequest('$errorNoActiveSurvey '
-              '- $apiIncrementSurveyShownCount');
-        }
-        // Increment the SurveyShownCount, we've asked about the survey.
-        _devToolsUsage.incrementSurveyShownCount();
-        return api.getCompleted(
-          request,
-          json.encode(_devToolsUsage.surveyShownCount),
-        );
-      case apiGetBaseAppSizeFile:
-        final queryParams = request.requestedUri.queryParameters;
-        if (queryParams.containsKey(baseAppSizeFilePropertyName)) {
-          final filePath = queryParams[baseAppSizeFilePropertyName]!;
-          final fileJson = LocalFileSystem.devToolsFileAsJson(filePath);
-          if (fileJson == null) {
-            return api.badRequest('No JSON file available at $filePath.');
-          }
-          return api.getCompleted(request, fileJson);
-        }
-        return api.badRequest('Request for base app size file does not '
-            'contain a query parameter with the expected key: '
-            '$baseAppSizeFilePropertyName');
-      case apiGetTestAppSizeFile:
-        final queryParams = request.requestedUri.queryParameters;
-        if (queryParams.containsKey(testAppSizeFilePropertyName)) {
-          final filePath = queryParams[testAppSizeFilePropertyName]!;
-          final fileJson = LocalFileSystem.devToolsFileAsJson(filePath);
-          if (fileJson == null) {
-            return api.badRequest('No JSON file available at $filePath.');
-          }
-          return api.getCompleted(request, fileJson);
-        }
-        return api.badRequest('Request for test app size file does not '
-            'contain a query parameter with the expected key: '
-            '$testAppSizeFilePropertyName');
-      default:
-        return api.notImplemented(request);
-    }
-  }
-
-  // Accessing Flutter usage file e.g., ~/.flutter.
-  // NOTE: Only access the file if it exists otherwise Flutter Tool hasn't yet
-  //       been run.
-  static final FlutterUsage? _usage =
-      FlutterUsage.doesStoreExist ? FlutterUsage() : null;
-
-  // Accessing DevTools usage file e.g., ~/.devtools
-  static final DevToolsUsage _devToolsUsage = DevToolsUsage();
-
-  static DevToolsUsage get devToolsPreferences => _devToolsUsage;
-
-  /// Logs a page view in the DevTools server.
-  ///
-  /// In the open-source version of DevTools, Google Analytics handles this
-  /// without any need to involve the server.
-  FutureOr<shelf.Response> logScreenView(shelf.Request request) =>
-      notImplemented(request);
-
-  /// Return the value of the property.
-  FutureOr<shelf.Response> getCompleted(shelf.Request request, String value) =>
-      shelf.Response.ok('$value');
-
-  /// Return the value of the property after the property value has been set.
-  FutureOr<shelf.Response> setCompleted(shelf.Request request, String value) =>
-      shelf.Response.ok('$value');
-
-  /// A [shelf.Response] for API calls that encountered a request problem e.g.,
-  /// setActiveSurvey not called.
-  ///
-  /// This is a 400 Bad Request response.
-  FutureOr<shelf.Response> badRequest([String? logError]) {
-    if (logError != null) print(logError);
-    return shelf.Response(HttpStatus.badRequest);
-  }
-
-  /// A [shelf.Response] for API calls that have not been implemented in this
-  /// server.
-  ///
-  /// This is a no-op 204 No Content response because returning 404 Not Found
-  /// creates unnecessary noise in the console.
-  FutureOr<shelf.Response> notImplemented(shelf.Request request) =>
-      shelf.Response(HttpStatus.noContent);
-}
diff --git a/pkg/dds/lib/src/devtools/usage.dart b/pkg/dds/lib/src/devtools/usage.dart
deleted file mode 100644
index 8e61b90..0000000
--- a/pkg/dds/lib/src/devtools/usage.dart
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(bkonyi): remove once package:devtools_server_api is available
-// See https://github.com/flutter/devtools/issues/2958.
-
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:path/path.dart' as path;
-import 'package:usage/usage_io.dart';
-
-import 'file_system.dart';
-
-/// Access the file '~/.flutter'.
-class FlutterUsage {
-  /// Create a new Usage instance; [versionOverride] and [configDirOverride] are
-  /// used for testing.
-  FlutterUsage({
-    String settingsName = 'flutter',
-    String? versionOverride,
-    String? configDirOverride,
-  }) {
-    _analytics = AnalyticsIO('', settingsName, '');
-  }
-
-  late Analytics _analytics;
-
-  /// Does the .flutter store exist?
-  static bool get doesStoreExist {
-    return LocalFileSystem.flutterStoreExists();
-  }
-
-  bool get isFirstRun => _analytics.firstRun;
-
-  bool get enabled => _analytics.enabled;
-
-  set enabled(bool value) => _analytics.enabled = value;
-
-  String get clientId => _analytics.clientId;
-}
-
-// Access the DevTools on disk store (~/.devtools/.devtools).
-class DevToolsUsage {
-  /// Create a new Usage instance; [versionOverride] and [configDirOverride] are
-  /// used for testing.
-  DevToolsUsage({
-    String? versionOverride,
-    String? configDirOverride,
-  }) {
-    LocalFileSystem.maybeMoveLegacyDevToolsStore();
-    properties = IOPersistentProperties(
-      storeName,
-      documentDirPath: LocalFileSystem.devToolsDir(),
-    );
-  }
-
-  static const storeName = '.devtools';
-
-  /// The activeSurvey is the property name of a top-level property
-  /// existing or created in the file ~/.devtools
-  /// If the property doesn't exist it is created with default survey values:
-  ///
-  ///   properties[activeSurvey]['surveyActionTaken'] = false;
-  ///   properties[activeSurvey]['surveyShownCount'] = 0;
-  ///
-  /// It is a requirement that the API apiSetActiveSurvey must be called before
-  /// calling any survey method on DevToolsUsage (addSurvey, rewriteActiveSurvey,
-  /// surveyShownCount, incrementSurveyShownCount, or surveyActionTaken).
-  String? _activeSurvey;
-
-  late IOPersistentProperties properties;
-
-  static const _surveyActionTaken = 'surveyActionTaken';
-  static const _surveyShownCount = 'surveyShownCount';
-
-  void reset() {
-    properties.remove('firstRun');
-    properties['enabled'] = false;
-  }
-
-  bool get isFirstRun {
-    properties['firstRun'] = properties['firstRun'] == null;
-    return properties['firstRun'];
-  }
-
-  bool get enabled {
-    if (properties['enabled'] == null) {
-      properties['enabled'] = false;
-    }
-
-    return properties['enabled'];
-  }
-
-  set enabled(bool? value) {
-    properties['enabled'] = value;
-    return properties['enabled'];
-  }
-
-  bool surveyNameExists(String? surveyName) => properties[surveyName] != null;
-
-  void _addSurvey(String? surveyName) {
-    assert(activeSurvey == surveyName);
-    rewriteActiveSurvey(false, 0);
-  }
-
-  String? get activeSurvey => _activeSurvey;
-
-  set activeSurvey(String? surveyName) {
-    _activeSurvey = surveyName;
-
-    if (!surveyNameExists(activeSurvey)) {
-      // Create the survey if property is non-existent in ~/.devtools
-      _addSurvey(activeSurvey);
-    }
-  }
-
-  /// Need to rewrite the entire survey structure for property to be persisted.
-  void rewriteActiveSurvey(bool? actionTaken, int? shownCount) {
-    properties[activeSurvey] = {
-      _surveyActionTaken: actionTaken,
-      _surveyShownCount: shownCount,
-    };
-  }
-
-  int? get surveyShownCount {
-    final prop = properties[activeSurvey];
-    if (prop[_surveyShownCount] == null) {
-      rewriteActiveSurvey(prop[_surveyActionTaken], 0);
-    }
-    return properties[activeSurvey][_surveyShownCount];
-  }
-
-  void incrementSurveyShownCount() {
-    surveyShownCount; // Ensure surveyShownCount has been initialized.
-    final prop = properties[activeSurvey];
-    rewriteActiveSurvey(prop[_surveyActionTaken], prop[_surveyShownCount] + 1);
-  }
-
-  bool get surveyActionTaken {
-    return properties[activeSurvey][_surveyActionTaken] == true;
-  }
-
-  set surveyActionTaken(bool? value) {
-    final prop = properties[activeSurvey];
-    rewriteActiveSurvey(value, prop[_surveyShownCount]);
-  }
-}
-
-abstract class PersistentProperties {
-  PersistentProperties(this.name);
-
-  final String name;
-
-  dynamic operator [](String key);
-
-  void operator []=(String key, dynamic value);
-
-  /// Re-read settings from the backing store.
-  ///
-  /// May be a no-op on some platforms.
-  void syncSettings();
-}
-
-const JsonEncoder _jsonEncoder = JsonEncoder.withIndent('  ');
-
-class IOPersistentProperties extends PersistentProperties {
-  IOPersistentProperties(
-    String name, {
-    String? documentDirPath,
-  }) : super(name) {
-    final String fileName = name.replaceAll(' ', '_');
-    documentDirPath ??= LocalFileSystem.devToolsDir();
-    _file = File(path.join(documentDirPath, fileName));
-    if (!_file.existsSync()) {
-      _file.createSync(recursive: true);
-    }
-    syncSettings();
-  }
-
-  IOPersistentProperties.fromFile(File file) : super(path.basename(file.path)) {
-    _file = file;
-    if (!_file.existsSync()) {
-      _file.createSync(recursive: true);
-    }
-    syncSettings();
-  }
-
-  late File _file;
-
-  Map? _map;
-
-  @override
-  dynamic operator [](String? key) => _map![key];
-
-  @override
-  void operator []=(String? key, dynamic value) {
-    if (value == null && !_map!.containsKey(key)) return;
-    if (_map![key] == value) return;
-
-    if (value == null) {
-      _map!.remove(key);
-    } else {
-      _map![key] = value;
-    }
-
-    try {
-      _file.writeAsStringSync(_jsonEncoder.convert(_map) + '\n');
-    } catch (_) {}
-  }
-
-  @override
-  void syncSettings() {
-    try {
-      String contents = _file.readAsStringSync();
-      if (contents.isEmpty) contents = '{}';
-      _map = jsonDecode(contents);
-    } catch (_) {
-      _map = {};
-    }
-  }
-
-  void remove(String propertyName) {
-    _map!.remove(propertyName);
-  }
-}
diff --git a/pkg/dds/lib/src/isolate_manager.dart b/pkg/dds/lib/src/isolate_manager.dart
index e9e14df..7522183 100644
--- a/pkg/dds/lib/src/isolate_manager.dart
+++ b/pkg/dds/lib/src/isolate_manager.dart
@@ -3,10 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import 'package:vm_service/vm_service.dart';
 
 import 'client.dart';
 import 'constants.dart';
+import 'cpu_samples_manager.dart';
 import 'dds_impl.dart';
+import 'utils/mutex.dart';
 
 /// This file contains functionality used to track the running state of
 /// all isolates in a given Dart process.
@@ -35,7 +38,11 @@
 }
 
 class _RunningIsolate {
-  _RunningIsolate(this.isolateManager, this.id, this.name);
+  _RunningIsolate(this.isolateManager, this.id, this.name)
+      : cpuSamplesManager = CpuSamplesManager(
+          isolateManager.dds,
+          id,
+        );
 
   // State setters.
   void pausedOnExit() => _state = _IsolateState.pauseExit;
@@ -103,6 +110,29 @@
   /// Should always be called after an isolate is resumed.
   void clearResumeApprovals() => _resumeApprovalsByName.clear();
 
+  Map<String, dynamic> getCachedCpuSamples(String userTag) {
+    final repo = cpuSamplesManager.cpuSamplesCaches[userTag];
+    if (repo == null) {
+      throw json_rpc.RpcException.invalidParams(
+        'CPU sample caching is not enabled for tag: "$userTag"',
+      );
+    }
+    return repo.toJson();
+  }
+
+  void handleEvent(Event event) {
+    switch (event.kind) {
+      case EventKind.kUserTagChanged:
+        cpuSamplesManager.handleUserTagEvent(event);
+        return;
+      case EventKind.kCpuSamples:
+        cpuSamplesManager.handleCpuSamplesEvent(event);
+        return;
+      default:
+        return;
+    }
+  }
+
   int get _isolateStateMask => isolateStateToMaskMapping[_state] ?? 0;
 
   static const isolateStateToMaskMapping = {
@@ -112,6 +142,7 @@
   };
 
   final IsolateManager isolateManager;
+  final CpuSamplesManager cpuSamplesManager;
   final String name;
   final String id;
   final Set<String?> _resumeApprovalsByName = {};
@@ -122,49 +153,62 @@
   IsolateManager(this.dds);
 
   /// Handles state changes for isolates.
-  void handleIsolateEvent(json_rpc.Parameters parameters) {
-    final event = parameters['event'];
-    final eventKind = event['kind'].asString;
-
+  void handleIsolateEvent(Event event) {
     // There's no interesting information about isolate state associated with
     // and IsolateSpawn event.
-    if (eventKind == ServiceEvents.isolateSpawn) {
+    // TODO(bkonyi): why isn't IsolateSpawn in package:vm_service
+    if (event.kind! == ServiceEvents.isolateSpawn) {
       return;
     }
 
-    final isolateData = event['isolate'];
-    final id = isolateData['id'].asString;
-    final name = isolateData['name'].asString;
-    _updateIsolateState(id, name, eventKind);
+    final isolateData = event.isolate!;
+    final id = isolateData.id!;
+    final name = isolateData.name!;
+    _updateIsolateState(id, name, event.kind!);
+  }
+
+  void routeEventToIsolate(Event event) {
+    final isolateId = event.isolate!.id!;
+    if (isolates.containsKey(isolateId)) {
+      isolates[isolateId]!.handleEvent(event);
+    }
   }
 
   void _updateIsolateState(String id, String name, String eventKind) {
-    switch (eventKind) {
-      case ServiceEvents.isolateStart:
-        isolateStarted(id, name);
-        break;
-      case ServiceEvents.isolateExit:
-        isolateExited(id);
-        break;
-      default:
-        final isolate = isolates[id];
+    _mutex.runGuarded(
+      () {
         switch (eventKind) {
-          case ServiceEvents.pauseExit:
-            isolate!.pausedOnExit();
+          case ServiceEvents.isolateStart:
+            isolateStarted(id, name);
             break;
-          case ServiceEvents.pausePostRequest:
-            isolate!.pausedPostRequest();
-            break;
-          case ServiceEvents.pauseStart:
-            isolate!.pausedOnStart();
-            break;
-          case ServiceEvents.resume:
-            isolate!.resumed();
+          case ServiceEvents.isolateExit:
+            isolateExited(id);
             break;
           default:
-            break;
+            final isolate = isolates[id];
+            // The isolate may have disappeared after the state event was sent.
+            if (isolate == null) {
+              return;
+            }
+            switch (eventKind) {
+              case ServiceEvents.pauseExit:
+                isolate.pausedOnExit();
+                break;
+              case ServiceEvents.pausePostRequest:
+                isolate.pausedPostRequest();
+                break;
+              case ServiceEvents.pauseStart:
+                isolate.pausedOnStart();
+                break;
+              case ServiceEvents.resume:
+                isolate.resumed();
+                break;
+              default:
+                break;
+            }
         }
-    }
+      },
+    );
   }
 
   /// Initializes the set of running isolates.
@@ -172,25 +216,30 @@
     if (_initialized) {
       return;
     }
-    final vm = await dds.vmServiceClient.sendRequest('getVM');
-    final List<Map> isolateRefs = vm['isolates'].cast<Map<String, dynamic>>();
-    // Check the pause event for each isolate to determine whether or not the
-    // isolate is already paused.
-    for (final isolateRef in isolateRefs) {
-      final id = isolateRef['id'];
-      final isolate = await dds.vmServiceClient.sendRequest('getIsolate', {
-        'isolateId': id,
-      });
-      final name = isolate['name'];
-      if (isolate.containsKey('pauseEvent')) {
-        isolates[id] = _RunningIsolate(this, id, name);
-        final eventKind = isolate['pauseEvent']['kind'];
-        _updateIsolateState(id, name, eventKind);
-      } else {
-        // If the isolate doesn't have a pauseEvent, assume it's running.
-        isolateStarted(id, name);
-      }
-    }
+    await _mutex.runGuarded(
+      () async {
+        final vm = await dds.vmServiceClient.sendRequest('getVM');
+        final List<Map> isolateRefs =
+            vm['isolates'].cast<Map<String, dynamic>>();
+        // Check the pause event for each isolate to determine whether or not the
+        // isolate is already paused.
+        for (final isolateRef in isolateRefs) {
+          final id = isolateRef['id'];
+          final isolate = await dds.vmServiceClient.sendRequest('getIsolate', {
+            'isolateId': id,
+          });
+          final name = isolate['name'];
+          if (isolate.containsKey('pauseEvent')) {
+            isolates[id] = _RunningIsolate(this, id, name);
+            final eventKind = isolate['pauseEvent']['kind'];
+            _updateIsolateState(id, name, eventKind);
+          } else {
+            // If the isolate doesn't have a pauseEvent, assume it's running.
+            isolateStarted(id, name);
+          }
+        }
+      },
+    );
     _initialized = true;
   }
 
@@ -218,16 +267,30 @@
     DartDevelopmentServiceClient client,
     json_rpc.Parameters parameters,
   ) async {
+    return await _mutex.runGuarded(
+      () async {
+        final isolateId = parameters['isolateId'].asString;
+        final isolate = isolates[isolateId];
+        if (isolate == null) {
+          return RPCResponses.collectedSentinel;
+        }
+        if (isolate.shouldResume(resumingClient: client)) {
+          isolate.clearResumeApprovals();
+          return await _sendResumeRequest(isolateId, parameters);
+        }
+        return RPCResponses.success;
+      },
+    );
+  }
+
+  Map<String, dynamic> getCachedCpuSamples(json_rpc.Parameters parameters) {
     final isolateId = parameters['isolateId'].asString;
-    final isolate = isolates[isolateId];
-    if (isolate == null) {
+    if (!isolates.containsKey(isolateId)) {
       return RPCResponses.collectedSentinel;
     }
-    if (isolate.shouldResume(resumingClient: client)) {
-      isolate.clearResumeApprovals();
-      return await _sendResumeRequest(isolateId, parameters);
-    }
-    return RPCResponses.success;
+    final isolate = isolates[isolateId]!;
+    final userTag = parameters['userTag'].asString;
+    return isolate.getCachedCpuSamples(userTag);
   }
 
   /// Forwards a `resume` request to the VM service.
@@ -248,5 +311,6 @@
 
   bool _initialized = false;
   final DartDevelopmentServiceImpl dds;
+  final _mutex = Mutex();
   final Map<String, _RunningIsolate> isolates = {};
 }
diff --git a/pkg/dds/lib/src/logging_repository.dart b/pkg/dds/lib/src/logging_repository.dart
index 4537d7e..25d52cb 100644
--- a/pkg/dds/lib/src/logging_repository.dart
+++ b/pkg/dds/lib/src/logging_repository.dart
@@ -2,17 +2,16 @@
 // for 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 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 
 import 'client.dart';
+import 'common/ring_buffer.dart';
 
 /// [LoggingRepository] is used to store historical log messages from the
 /// target VM service. Clients which connect to DDS and subscribe to the
 /// `Logging` stream will be sent all messages contained within this repository
 /// upon initial subscription.
-class LoggingRepository extends _RingBuffer<Map<String, dynamic>> {
+class LoggingRepository extends RingBuffer<Map<String, dynamic>> {
   LoggingRepository([int logHistoryLength = 10000]) : super(logHistoryLength) {
     // TODO(bkonyi): enforce log history limit when DartDevelopmentService
     // allows for this to be set via Dart code.
@@ -45,54 +44,3 @@
   final Set<DartDevelopmentServiceClient> _sentHistoricLogsClientSet = {};
   static const int _kMaxLogBufferSize = 100000;
 }
-
-// TODO(bkonyi): move to standalone file if we decide to use this elsewhere.
-class _RingBuffer<T> {
-  _RingBuffer(this._bufferSize) {
-    _buffer = List<T?>.filled(
-      _bufferSize,
-      null,
-    );
-  }
-
-  Iterable<T> call() sync* {
-    for (int i = _size - 1; i >= 0; --i) {
-      yield _buffer[(_count - i - 1) % _bufferSize]!;
-    }
-  }
-
-  void add(T e) {
-    if (_buffer.isEmpty) {
-      return;
-    }
-    _buffer[_count++ % _bufferSize] = e;
-  }
-
-  void resize(int size) {
-    assert(size >= 0);
-    if (size == _bufferSize) {
-      return;
-    }
-    final resized = List<T?>.filled(
-      size,
-      null,
-    );
-    int count = 0;
-    if (size > 0) {
-      for (final e in this()) {
-        resized[count++ % size] = e;
-      }
-    }
-    _count = count;
-    _bufferSize = size;
-    _buffer = resized;
-  }
-
-  int get bufferSize => _bufferSize;
-
-  int get _size => min(_count, _bufferSize);
-
-  int _bufferSize;
-  int _count = 0;
-  late List<T?> _buffer;
-}
diff --git a/pkg/dds/lib/src/stream_manager.dart b/pkg/dds/lib/src/stream_manager.dart
index 94f791a..46e22cf 100644
--- a/pkg/dds/lib/src/stream_manager.dart
+++ b/pkg/dds/lib/src/stream_manager.dart
@@ -5,11 +5,13 @@
 import 'dart:typed_data';
 
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import 'package:vm_service/vm_service.dart';
 
 import 'client.dart';
 import 'dds_impl.dart';
 import 'logging_repository.dart';
 import 'rpc_error_codes.dart';
+import 'utils/mutex.dart';
 
 class StreamManager {
   StreamManager(this.dds);
@@ -107,18 +109,31 @@
         // Stdout and Stderr streams may not exist.
       }
     }
+    if (dds.cachedUserTags.isNotEmpty) {
+      await streamListen(null, EventStreams.kProfiler);
+    }
     dds.vmServiceClient.registerMethod(
       'streamNotify',
-      (parameters) {
+      (json_rpc.Parameters parameters) {
         final streamId = parameters['streamId'].asString;
+        final event =
+            Event.parse(parameters['event'].asMap.cast<String, dynamic>())!;
+
         // Forward events from the streams IsolateManager subscribes to.
         if (isolateManagerStreams.contains(streamId)) {
-          dds.isolateManager.handleIsolateEvent(parameters);
+          dds.isolateManager.handleIsolateEvent(event);
         }
         // Keep a history of messages to send to clients when they first
         // subscribe to a stream with an event history.
         if (loggingRepositories.containsKey(streamId)) {
-          loggingRepositories[streamId]!.add(parameters.asMap);
+          loggingRepositories[streamId]!.add(
+            parameters.asMap.cast<String, dynamic>(),
+          );
+        }
+        // If the event contains an isolate, forward the event to the
+        // corresponding isolate to be handled.
+        if (event.isolate != null) {
+          dds.isolateManager.routeEventToIsolate(event);
         }
         streamNotify(streamId, parameters.value);
       },
@@ -133,51 +148,56 @@
     DartDevelopmentServiceClient? client,
     String stream,
   ) async {
-    assert(stream.isNotEmpty);
-    if (!streamListeners.containsKey(stream)) {
-      // Initialize the list of clients for the new stream before we do
-      // anything else to ensure multiple clients registering for the same
-      // stream in quick succession doesn't result in multiple streamListen
-      // requests being sent to the VM service.
-      streamListeners[stream] = <DartDevelopmentServiceClient>[];
-      if ((stream == kDebugStream && client == null) ||
-          stream != kDebugStream) {
-        // This will return an RPC exception if the stream doesn't exist. This
-        // will throw and the exception will be forwarded to the client.
-        final result = await dds.vmServiceClient.sendRequest('streamListen', {
-          'streamId': stream,
-        });
-        assert(result['type'] == 'Success');
-      }
-    }
-    if (streamListeners[stream]!.contains(client)) {
-      throw kStreamAlreadySubscribedException;
-    }
-    if (client != null) {
-      streamListeners[stream]!.add(client);
-      if (loggingRepositories.containsKey(stream)) {
-        loggingRepositories[stream]!.sendHistoricalLogs(client);
-      } else if (stream == kServiceStream) {
-        // Send all previously registered service extensions when a client
-        // subscribes to the Service stream.
-        for (final c in dds.clientManager.clients) {
-          if (c == client) {
-            continue;
-          }
-          final namespace = dds.getNamespace(c);
-          for (final service in c.services.keys) {
-            client.sendNotification(
-              'streamNotify',
-              _buildStreamRegisteredEvent(
-                namespace!,
-                service,
-                c.services[service]!,
-              ),
-            );
+    await _mutex.runGuarded(
+      () async {
+        assert(stream.isNotEmpty);
+        if (!streamListeners.containsKey(stream)) {
+          // Initialize the list of clients for the new stream before we do
+          // anything else to ensure multiple clients registering for the same
+          // stream in quick succession doesn't result in multiple streamListen
+          // requests being sent to the VM service.
+          streamListeners[stream] = <DartDevelopmentServiceClient>[];
+          if ((stream == kDebugStream && client == null) ||
+              stream != kDebugStream) {
+            // This will return an RPC exception if the stream doesn't exist. This
+            // will throw and the exception will be forwarded to the client.
+            final result =
+                await dds.vmServiceClient.sendRequest('streamListen', {
+              'streamId': stream,
+            });
+            assert(result['type'] == 'Success');
           }
         }
-      }
-    }
+        if (streamListeners[stream]!.contains(client)) {
+          throw kStreamAlreadySubscribedException;
+        }
+        if (client != null) {
+          streamListeners[stream]!.add(client);
+          if (loggingRepositories.containsKey(stream)) {
+            loggingRepositories[stream]!.sendHistoricalLogs(client);
+          } else if (stream == kServiceStream) {
+            // Send all previously registered service extensions when a client
+            // subscribes to the Service stream.
+            for (final c in dds.clientManager.clients) {
+              if (c == client) {
+                continue;
+              }
+              final namespace = dds.getNamespace(c);
+              for (final service in c.services.keys) {
+                client.sendNotification(
+                  'streamNotify',
+                  _buildStreamRegisteredEvent(
+                    namespace!,
+                    service,
+                    c.services[service]!,
+                  ),
+                );
+              }
+            }
+          }
+        }
+      },
+    );
   }
 
   List<Map<String, dynamic>>? getStreamHistory(String stream) {
@@ -198,27 +218,32 @@
     String stream, {
     bool cancelCoreStream = false,
   }) async {
-    assert(stream.isNotEmpty);
-    final listeners = streamListeners[stream];
-    if (listeners == null || client != null && !listeners.contains(client)) {
-      throw kStreamNotSubscribedException;
-    }
-    listeners.remove(client);
-    // Don't cancel streams DDS needs to function.
-    if (listeners.isEmpty &&
-        (!ddsCoreStreams.contains(stream) || cancelCoreStream)) {
-      streamListeners.remove(stream);
-      // Ensure the VM service hasn't shutdown.
-      if (dds.vmServiceClient.isClosed) {
-        return;
-      }
-      final result = await dds.vmServiceClient.sendRequest('streamCancel', {
-        'streamId': stream,
-      });
-      assert(result['type'] == 'Success');
-    } else {
-      streamListeners[stream] = listeners;
-    }
+    await _mutex.runGuarded(
+      () async {
+        assert(stream.isNotEmpty);
+        final listeners = streamListeners[stream];
+        if (listeners == null ||
+            client != null && !listeners.contains(client)) {
+          throw kStreamNotSubscribedException;
+        }
+        listeners.remove(client);
+        // Don't cancel streams DDS needs to function.
+        if (listeners.isEmpty &&
+            (!ddsCoreStreams.contains(stream) || cancelCoreStream)) {
+          streamListeners.remove(stream);
+          // Ensure the VM service hasn't shutdown.
+          if (dds.vmServiceClient.isClosed) {
+            return;
+          }
+          final result = await dds.vmServiceClient.sendRequest('streamCancel', {
+            'streamId': stream,
+          });
+          assert(result['type'] == 'Success');
+        } else {
+          streamListeners[stream] = listeners;
+        }
+      },
+    );
   }
 
   /// Cleanup stream subscriptions for `client` when it has disconnected.
@@ -251,6 +276,7 @@
   static const kExtensionStream = 'Extension';
   static const kIsolateStream = 'Isolate';
   static const kLoggingStream = 'Logging';
+  static const kProfilerStream = 'Profiler';
   static const kStderrStream = 'Stderr';
   static const kStdoutStream = 'Stdout';
 
@@ -272,6 +298,12 @@
     kStdoutStream,
   };
 
+  // Never cancel the profiler stream as `CpuSampleRepository` requires
+  // `UserTagChanged` events to enable/disable sample caching.
+  static const cpuSampleRepositoryStreams = <String>{
+    kProfilerStream,
+  };
+
   // The set of streams that DDS requires to function.
   static final ddsCoreStreams = <String>{
     ...isolateManagerStreams,
@@ -280,4 +312,5 @@
 
   final DartDevelopmentServiceImpl dds;
   final streamListeners = <String, List<DartDevelopmentServiceClient>>{};
+  final _mutex = Mutex();
 }
diff --git a/pkg/dds/lib/src/utils/mutex.dart b/pkg/dds/lib/src/utils/mutex.dart
new file mode 100644
index 0000000..b697e78
--- /dev/null
+++ b/pkg/dds/lib/src/utils/mutex.dart
@@ -0,0 +1,46 @@
+// 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:collection';
+
+/// Used to protect global state accessed in blocks containing calls to
+/// asynchronous methods.
+class Mutex {
+  /// Executes a block of code containing asynchronous calls atomically.
+  ///
+  /// If no other asynchronous context is currently executing within
+  /// [criticalSection], it will immediately be called. Otherwise, the caller
+  /// will be suspended and entered into a queue to be resumed once the lock is
+  /// released.
+  Future<T> runGuarded<T>(FutureOr<T> Function() criticalSection) async {
+    try {
+      await _acquireLock();
+      return await criticalSection();
+    } finally {
+      _releaseLock();
+    }
+  }
+
+  Future<void> _acquireLock() async {
+    if (!_locked) {
+      _locked = true;
+      return;
+    }
+    final request = Completer<void>();
+    _outstandingRequests.add(request);
+    await request.future;
+  }
+
+  void _releaseLock() {
+    _locked = false;
+    if (_outstandingRequests.isNotEmpty) {
+      final request = _outstandingRequests.removeFirst();
+      request.complete();
+    }
+  }
+
+  bool _locked = false;
+  final _outstandingRequests = Queue<Completer<void>>();
+}
diff --git a/pkg/dds/lib/vm_service_extensions.dart b/pkg/dds/lib/vm_service_extensions.dart
index 903c14a..09bda25 100644
--- a/pkg/dds/lib/vm_service_extensions.dart
+++ b/pkg/dds/lib/vm_service_extensions.dart
@@ -13,18 +13,46 @@
   static bool _factoriesRegistered = false;
   static Version? _ddsVersion;
 
-  /// The _getDartDevelopmentServiceVersion_ RPC is used to determine what version of
+  /// The [getDartDevelopmentServiceVersion] RPC is used to determine what version of
   /// the Dart Development Service Protocol is served by a DDS instance.
   ///
   /// The result of this call is cached for subsequent invocations.
   Future<Version> getDartDevelopmentServiceVersion() async {
     if (_ddsVersion == null) {
-      _ddsVersion =
-          await _callHelper<Version>('getDartDevelopmentServiceVersion');
+      _ddsVersion = await _callHelper<Version>(
+        'getDartDevelopmentServiceVersion',
+      );
     }
     return _ddsVersion!;
   }
 
+  /// The [getCachedCpuSamples] RPC is used to retrieve a cache of CPU samples
+  /// collected under a [UserTag] with name `userTag`.
+  Future<CachedCpuSamples> getCachedCpuSamples(
+      String isolateId, String userTag) async {
+    if (!(await _versionCheck(1, 3))) {
+      throw UnimplementedError('getCachedCpuSamples requires DDS version 1.3');
+    }
+    return _callHelper<CachedCpuSamples>('getCachedCpuSamples', args: {
+      'isolateId': isolateId,
+      'userTag': userTag,
+    });
+  }
+
+  /// The [getAvailableCachedCpuSamples] RPC is used to determine which caches of CPU samples
+  /// are available. Caches are associated with individual [UserTag] names and are specified
+  /// when DDS is started via the `cachedUserTags` parameter.
+  Future<AvailableCachedCpuSamples> getAvailableCachedCpuSamples() async {
+    if (!(await _versionCheck(1, 3))) {
+      throw UnimplementedError(
+        'getAvailableCachedCpuSamples requires DDS version 1.3',
+      );
+    }
+    return _callHelper<AvailableCachedCpuSamples>(
+      'getAvailableCachedCpuSamples',
+    );
+  }
+
   /// Retrieve the event history for `stream`.
   ///
   /// If `stream` does not have event history collected, a parameter error is
@@ -126,6 +154,11 @@
 
   static void _registerFactories() {
     addTypeFactory('StreamHistory', StreamHistory.parse);
+    addTypeFactory(
+      'AvailableCachedCpuSamples',
+      AvailableCachedCpuSamples.parse,
+    );
+    addTypeFactory('CachedCpuSamples', CachedCpuSamples.parse);
     _factoriesRegistered = true;
   }
 }
@@ -154,3 +187,86 @@
   List<Event> get history => UnmodifiableListView(_history);
   final List<Event> _history;
 }
+
+/// An extension of [CpuSamples] which represents a set of cached samples,
+/// associated with a particular [UserTag] name.
+class CachedCpuSamples extends CpuSamples {
+  static CachedCpuSamples? parse(Map<String, dynamic>? json) =>
+      json == null ? null : CachedCpuSamples._fromJson(json);
+
+  CachedCpuSamples({
+    required this.userTag,
+    this.truncated,
+    required int? samplePeriod,
+    required int? maxStackDepth,
+    required int? sampleCount,
+    required int? timeSpan,
+    required int? timeOriginMicros,
+    required int? timeExtentMicros,
+    required int? pid,
+    required List<ProfileFunction>? functions,
+    required List<CpuSample>? samples,
+  }) : super(
+          samplePeriod: samplePeriod,
+          maxStackDepth: maxStackDepth,
+          sampleCount: sampleCount,
+          timeSpan: timeSpan,
+          timeOriginMicros: timeOriginMicros,
+          timeExtentMicros: timeExtentMicros,
+          pid: pid,
+          functions: functions,
+          samples: samples,
+        );
+
+  CachedCpuSamples._fromJson(Map<String, dynamic> json)
+      : userTag = json['userTag']!,
+        truncated = json['truncated'],
+        super(
+          samplePeriod: json['samplePeriod'] ?? -1,
+          maxStackDepth: json['maxStackDepth'] ?? -1,
+          sampleCount: json['sampleCount'] ?? -1,
+          timeSpan: json['timeSpan'] ?? -1,
+          timeOriginMicros: json['timeOriginMicros'] ?? -1,
+          timeExtentMicros: json['timeExtentMicros'] ?? -1,
+          pid: json['pid'] ?? -1,
+          functions: List<ProfileFunction>.from(
+            createServiceObject(json['functions'], const ['ProfileFunction'])
+                    as List? ??
+                [],
+          ),
+          samples: List<CpuSample>.from(
+            createServiceObject(json['samples'], const ['CpuSample'])
+                    as List? ??
+                [],
+          ),
+        );
+
+  @override
+  String get type => 'CachedCpuSamples';
+
+  /// The name of the [UserTag] associated with this cache of [CpuSamples].
+  final String userTag;
+
+  /// Provided if the CPU sample cache has filled and older samples have been
+  /// dropped.
+  final bool? truncated;
+}
+
+/// A collection of [UserTag] names associated with caches of CPU samples.
+class AvailableCachedCpuSamples extends Response {
+  static AvailableCachedCpuSamples? parse(Map<String, dynamic>? json) =>
+      json == null ? null : AvailableCachedCpuSamples._fromJson(json);
+
+  AvailableCachedCpuSamples({
+    required this.cacheNames,
+  });
+
+  AvailableCachedCpuSamples._fromJson(Map<String, dynamic> json)
+      : cacheNames = List<String>.from(json['cacheNames']);
+
+  @override
+  String get type => 'AvailableCachedUserTagCpuSamples';
+
+  /// A [List] of [UserTag] names associated with CPU sample caches.
+  final List<String> cacheNames;
+}
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index 012f3e3..ae212ba 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,12 +3,12 @@
   A library used to spawn the Dart Developer Service, used to communicate with
   a Dart VM Service instance.
 
-version: 2.0.2
+version: 2.1.2
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+  sdk: '>=2.13.0 <3.0.0'
 
 dependencies:
   async: ^2.4.1
@@ -16,6 +16,7 @@
   devtools_shared: ^2.3.0
   json_rpc_2: ^3.0.0
   meta: ^1.1.8
+  package_config: ^2.0.0
   path: ^1.8.0
   pedantic: ^1.7.0
   shelf: ^1.0.0
@@ -24,8 +25,7 @@
   shelf_web_socket: ^1.0.0
   sse: ^4.0.0
   stream_channel: ^2.0.0
-  usage: ^4.0.0
-  vm_service: ^7.0.0
+  vm_service: ^7.2.0
   web_socket_channel: ^2.0.0
 
 dev_dependencies:
diff --git a/pkg/dds/test/dap/integration/debug_attach_test.dart b/pkg/dds/test/dap/integration/debug_attach_test.dart
new file mode 100644
index 0000000..3df0fc9
--- /dev/null
+++ b/pkg/dds/test/dap/integration/debug_attach_test.dart
@@ -0,0 +1,121 @@
+// 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:path/path.dart' as path;
+import 'package:test/test.dart';
+
+import 'test_client.dart';
+import 'test_scripts.dart';
+import 'test_support.dart';
+
+main() {
+  group('debug mode', () {
+    late DapTestSession dap;
+    setUp(() async {
+      dap = await DapTestSession.setUp();
+    });
+    tearDown(() => dap.tearDown());
+
+    test('can attach to a simple script using vmServiceUri', () async {
+      final testFile = dap.createTestFile(simpleArgPrintingProgram);
+
+      final args = ['one', 'two'];
+      final proc = await startDartProcessPaused(
+        testFile.path,
+        args,
+        cwd: dap.testAppDir.path,
+      );
+      final vmServiceUri = await waitForStdoutVmServiceBanner(proc);
+
+      final outputEvents = await dap.client.collectOutput(
+        launch: () => dap.client.attach(
+          vmServiceUri: vmServiceUri.toString(),
+          autoResume: true,
+          cwd: dap.testAppDir.path,
+        ),
+      );
+
+      // Expect a "console" output event that prints the URI of the VM Service
+      // the debugger connects to.
+      final vmConnection = outputEvents.first;
+      expect(vmConnection.output,
+          startsWith('Connecting to VM Service at ws://127.0.0.1:'));
+      expect(vmConnection.category, equals('console'));
+
+      // Expect the normal applications output.
+      final output = outputEvents
+          .skip(1)
+          .map((e) => e.output)
+          // The stdout also contains the Observatory+DevTools banners.
+          .where(
+            (line) =>
+                !line.startsWith('Observatory listening on') &&
+                !line.startsWith(
+                    'The Dart DevTools debugger and profiler is available at'),
+          )
+          .join();
+      expectLines(output, [
+        'Hello!',
+        'World!',
+        'args: [one, two]',
+        '',
+        'Exited.',
+      ]);
+    });
+
+    test('can attach to a simple script using vmServiceInfoFile', () async {
+      final testFile = dap.createTestFile(simpleArgPrintingProgram);
+
+      // Spawn the program using --write-service-info which we'll pass the path
+      // of directly to the DAP to read.
+      final vmServiceInfoFilePath = path.join(
+        dap.testAppDir.path,
+        'vmServiceInfo.json',
+      );
+      await startDartProcessPaused(
+        testFile.path,
+        ['one', 'two'],
+        cwd: dap.testAppDir.path,
+        vmArgs: ['--write-service-info=${Uri.file(vmServiceInfoFilePath)}'],
+      );
+      final outputEvents = await dap.client.collectOutput(
+        launch: () => dap.client.attach(
+          vmServiceInfoFile: vmServiceInfoFilePath,
+          autoResume: true,
+          cwd: dap.testAppDir.path,
+        ),
+      );
+
+      // Expect a "console" output event that prints the URI of the VM Service
+      // the debugger connects to.
+      final vmConnection = outputEvents.first;
+      expect(
+        vmConnection.output,
+        startsWith('Connecting to VM Service at ws://127.0.0.1:'),
+      );
+      expect(vmConnection.category, equals('console'));
+
+      // Expect the normal applications output.
+      final output = outputEvents
+          .skip(1)
+          .map((e) => e.output)
+          // The stdout also contains the Observatory+DevTools banners.
+          .where(
+            (line) =>
+                !line.startsWith('Observatory listening on') &&
+                !line.startsWith(
+                    'The Dart DevTools debugger and profiler is available at'),
+          )
+          .join();
+      expectLines(output, [
+        'Hello!',
+        'World!',
+        'args: [one, two]',
+        '',
+        'Exited.',
+      ]);
+    });
+    // These tests can be slow due to starting up the external server process.
+  }, timeout: Timeout.none);
+}
diff --git a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
index 62cacbf..c67890b 100644
--- a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
+++ b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
@@ -19,7 +19,7 @@
     test('stops at a line breakpoint', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       await client.hitBreakpoint(testFile, breakpointLine);
     });
@@ -27,7 +27,7 @@
     test('stops at a line breakpoint and can be resumed', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       // Hit the initial breakpoint.
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
@@ -40,14 +40,14 @@
     });
 
     test('stops at a line breakpoint and can step over (next)', () async {
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
-  print('Hello!'); // BREAKPOINT
-  print('Hello!'); // STEP
+  print('Hello!'); $breakpointMarker
+  print('Hello!'); $stepMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Hit the initial breakpoint.
       final stop = await dap.client.hitBreakpoint(testFile, breakpointLine);
@@ -63,18 +63,18 @@
         'stops at a line breakpoint and can step over (next) an async boundary',
         () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 Future<void> main(List<String> args) async {
-  await asyncPrint('Hello!'); // BREAKPOINT
-  await asyncPrint('Hello!'); // STEP
+  await asyncPrint('Hello!'); $breakpointMarker
+  await asyncPrint('Hello!'); $stepMarker
 }
 
 Future<void> asyncPrint(String message) async {
   await Future.delayed(const Duration(milliseconds: 1));
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Hit the initial breakpoint.
       final stop = await dap.client.hitBreakpoint(testFile, breakpointLine);
@@ -96,17 +96,17 @@
 
     test('stops at a line breakpoint and can step in', () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
-  log('Hello!'); // BREAKPOINT
+  log('Hello!'); $breakpointMarker
 }
 
-void log(String message) { // STEP
+void log(String message) { $stepMarker
   print(message);
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Hit the initial breakpoint.
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
@@ -120,18 +120,18 @@
 
     test('stops at a line breakpoint and can step out', () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
   log('Hello!');
-  log('Hello!'); // STEP
+  log('Hello!'); $stepMarker
 }
 
 void log(String message) {
-  print(message); // BREAKPOINT
+  print(message); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Hit the initial breakpoint.
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
@@ -145,14 +145,14 @@
 
     test('does not step into SDK code with debugSdkLibraries=false', () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
-  print('Hello!'); // BREAKPOINT
-  print('Hello!'); // STEP
+  print('Hello!'); $breakpointMarker
+  print('Hello!'); $stepMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Hit the initial breakpoint.
       final stop = await client.hitBreakpoint(
@@ -173,13 +173,13 @@
 
     test('steps into SDK code with debugSdkLibraries=true', () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
   print('Hello!');
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       // Hit the initial breakpoint.
       final stop = await dap.client.hitBreakpoint(
@@ -200,26 +200,114 @@
 
     test(
         'does not step into external package code with debugExternalPackageLibraries=false',
-        () {
-      // TODO(dantup): Support for debugExternalPackageLibraries
-    }, skip: true);
+        () async {
+      final client = dap.client;
+      final otherPackageUri = await dap.createFooPackage();
+      final testFile = dap.createTestFile('''
+import '$otherPackageUri';
+
+void main(List<String> args) async {
+  foo(); $breakpointMarker
+  foo(); $stepMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
+
+      // Hit the initial breakpoint.
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          debugExternalPackageLibraries: false,
+        ),
+      );
+
+      // Step in and expect stopping on the next line (don't go into the package).
+      await Future.wait([
+        client.expectStop('step', file: testFile, line: stepLine),
+        client.stepIn(stop.threadId!),
+      ], eagerError: true);
+    });
 
     test(
         'steps into external package code with debugExternalPackageLibraries=true',
-        () {
-      // TODO(dantup): Support for debugExternalPackageLibraries
-    }, skip: true);
+        () async {
+      final client = dap.client;
+      final otherPackageUri = await dap.createFooPackage();
+      final testFile = dap.createTestFile('''
+import '$otherPackageUri';
+
+void main(List<String> args) async {
+  foo(); $breakpointMarker
+  foo();
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      // Hit the initial breakpoint.
+      final stop = await dap.client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          debugExternalPackageLibraries: true,
+        ),
+      );
+
+      // Step in and expect to go into the package.
+      await Future.wait([
+        client.expectStop('step', sourceName: '$otherPackageUri'),
+        client.stepIn(stop.threadId!),
+      ], eagerError: true);
+    });
+
+    test(
+        'steps into other-project package code with debugExternalPackageLibraries=false',
+        () async {
+      final client = dap.client;
+      final otherPackageUri = await dap.createFooPackage();
+      final testFile = dap.createTestFile('''
+import '$otherPackageUri';
+
+void main(List<String> args) async {
+  foo(); $breakpointMarker
+  foo();
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      // Hit the initial breakpoint.
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          debugExternalPackageLibraries: false,
+          // Include the packages folder as an additional project path so that
+          // it will be treated as local code.
+          additionalProjectPaths: [dap.testPackageDir.path],
+        ),
+      );
+
+      // Step in and expect stopping in the the other package.
+      await Future.wait([
+        client.expectStop('step', sourceName: '$otherPackageUri'),
+        client.stepIn(stop.threadId!),
+      ], eagerError: true);
+    });
 
     test('allows changing debug settings during session', () async {
       final client = dap.client;
-      final testFile = dap.createTestFile(r'''
+      final testFile = dap.createTestFile('''
 void main(List<String> args) async {
-  print('Hello!'); // BREAKPOINT
-  print('Hello!'); // STEP
+  print('Hello!'); $breakpointMarker
+  print('Hello!'); $stepMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
-      final stepLine = lineWith(testFile, '// STEP');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+      final stepLine = lineWith(testFile, stepMarker);
 
       // Start with debugSdkLibraryes _enabled_ and hit the breakpoint.
       final stop = await client.hitBreakpoint(
@@ -243,6 +331,153 @@
         client.stepIn(stop.threadId!),
       ], eagerError: true);
     });
+  }, timeout: Timeout.none);
+
+  group('debug mode conditional breakpoints', () {
+    test('stops with condition evaluating to true', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        condition: '1 == 1',
+      );
+    });
+
+    test('does not stop with condition evaluating to false', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      await client.doNotHitBreakpoint(
+        testFile,
+        breakpointLine,
+        condition: '1 == 2',
+      );
+    });
+
+    test('stops with condition evaluating to non-zero', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        condition: '1 + 1',
+      );
+    });
+
+    test('does not stop with condition evaluating to zero', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      await client.doNotHitBreakpoint(
+        testFile,
+        breakpointLine,
+        condition: '1 - 1',
+      );
+    });
+
+    test('reports evaluation errors for conditions', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final outputEventsFuture = client.outputEvents.toList();
+
+      await client.doNotHitBreakpoint(
+        testFile,
+        breakpointLine,
+        condition: "1 + 'a'",
+      );
+
+      final outputEvents = await outputEventsFuture;
+      final outputMessages = outputEvents.map((e) => e.output);
+
+      final hasPrefix = startsWith(
+          'Debugger failed to evaluate breakpoint condition "1 + \'a\'": '
+          'evaluateInFrame: (113) Expression compilation error');
+      final hasDescriptiveMessage = contains(
+          "A value of type 'String' can't be assigned to a variable of type 'num'");
+
+      expect(
+        outputMessages,
+        containsAll([allOf(hasPrefix, hasDescriptiveMessage)]),
+      );
+    });
+    // These tests can be slow due to starting up the external server process.
+  }, timeout: Timeout.none);
+
+  group('debug mode logpoints', () {
+    /// A helper that tests a LogPoint using [logMessage] and expecting the
+    /// script not to pause and [expectedMessage] to show up in the output.
+    Future<void> _testLogPoint(
+      DapTestSession dap,
+      String logMessage,
+      String expectedMessage,
+    ) async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final outputEventsFuture = client.outputEvents.toList();
+
+      await client.doNotHitBreakpoint(
+        testFile,
+        breakpointLine,
+        logMessage: logMessage,
+      );
+
+      final outputEvents = await outputEventsFuture;
+      final outputMessages = outputEvents.map((e) => e.output.trim());
+
+      expect(
+        outputMessages,
+        contains(expectedMessage),
+      );
+    }
+
+    test('print simple messages', () async {
+      await _testLogPoint(
+        dap,
+        r'This is a test message',
+        'This is a test message',
+      );
+    });
+
+    test('print messages with Dart interpolation', () async {
+      await _testLogPoint(
+        dap,
+        r'This is a test message in ${DateTime.now().year}',
+        'This is a test message in ${DateTime.now().year}',
+      );
+    });
+
+    test('print messages with just {braces}', () async {
+      await _testLogPoint(
+        dap,
+        // The DAP spec says "Expressions within {} are interpolated" so in the DA
+        // we just prefix them with $ and treat them like other Dart interpolation
+        // expressions.
+        r'This is a test message in {DateTime.now().year}',
+        'This is a test message in ${DateTime.now().year}',
+      );
+    });
+
+    test('allows \\{escaped braces}', () async {
+      await _testLogPoint(
+        dap,
+        // Since we treat things in {braces} as expressions, we need to support
+        // escaping them.
+        r'This is a test message with \{escaped braces}',
+        r'This is a test message with {escaped braces}',
+      );
+    });
+
     // These tests can be slow due to starting up the external server process.
   }, timeout: Timeout.none);
 }
diff --git a/pkg/dds/test/dap/integration/debug_eval_test.dart b/pkg/dds/test/dap/integration/debug_eval_test.dart
index ab24f0c..9d6ff1b 100644
--- a/pkg/dds/test/dap/integration/debug_eval_test.dart
+++ b/pkg/dds/test/dap/integration/debug_eval_test.dart
@@ -19,49 +19,66 @@
   group('debug mode evaluation', () {
     test('evaluates expressions with simple results', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   var a = 1;
   var b = 2;
   var c = 'test';
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
-      await client.expectTopFrameEvalResult(stop.threadId!, 'a', '1');
-      await client.expectTopFrameEvalResult(stop.threadId!, 'a * b', '2');
-      await client.expectTopFrameEvalResult(stop.threadId!, 'c', '"test"');
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      await client.expectEvalResult(topFrameId, 'a', '1');
+      await client.expectEvalResult(topFrameId, 'a * b', '2');
+      await client.expectEvalResult(topFrameId, 'c', '"test"');
     });
 
     test('evaluates expressions with complex results', () async {
       final client = dap.client;
       final testFile = await dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
-      final result = await client.expectTopFrameEvalResult(
-        stop.threadId!,
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      final result = await client.expectEvalResult(
+        topFrameId,
         'DateTime(2000, 1, 1)',
         'DateTime',
       );
 
       // Check we got a variablesReference that maps on to the fields.
-      expect(result.variablesReference, greaterThan(0));
+      expect(result.variablesReference, isPositive);
       await client.expectVariables(
         result.variablesReference,
         '''
-            isUtc: false
-          ''',
+            isUtc: false, eval: DateTime(2000, 1, 1).isUtc
+        ''',
       );
     });
 
+    test('evaluates expressions ending with semicolons', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+void main(List<String> args) {
+  var a = 1;
+  var b = 2;
+  print('Hello!'); $breakpointMarker
+}''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      await client.expectEvalResult(topFrameId, 'a + b;', '3');
+    });
+
     test(
         'evaluates complex expressions expressions with evaluateToStringInDebugViews=true',
         () async {
       final client = dap.client;
       final testFile = await dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(
         testFile,
@@ -70,8 +87,9 @@
             client.launch(testFile.path, evaluateToStringInDebugViews: true),
       );
 
-      await client.expectTopFrameEvalResult(
-        stop.threadId!,
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      await client.expectEvalResult(
+        topFrameId,
         'DateTime(2000, 1, 1)',
         'DateTime (2000-01-01 00:00:00.000)',
       );
@@ -87,9 +105,9 @@
 }''');
 
       final stop = await client.hitException(testFile);
-
-      final result = await client.expectTopFrameEvalResult(
-        stop.threadId!,
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      final result = await client.expectEvalResult(
+        topFrameId,
         threadExceptionExpression,
         '"my error"',
       );
@@ -106,12 +124,13 @@
 }''');
 
       final stop = await client.hitException(testFile);
-      final result = await client.expectTopFrameEvalResult(
-        stop.threadId!,
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      final result = await client.expectEvalResult(
+        topFrameId,
         threadExceptionExpression,
         '_Exception',
       );
-      expect(result.variablesReference, greaterThan(0));
+      expect(result.variablesReference, isPositive);
     });
 
     test(
@@ -125,8 +144,9 @@
     ''');
 
       final stop = await client.hitException(testFile);
-      await client.expectTopFrameEvalResult(
-        stop.threadId!,
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      await client.expectEvalResult(
+        topFrameId,
         '$threadExceptionExpression.message.length',
         '5',
       );
@@ -134,16 +154,16 @@
 
     test('can evaluate expressions in non-top frames', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   var a = 999;
   foo();
 }
 
 void foo() {
-  var a = 111; // BREAKPOINT
+  var a = 111; $breakpointMarker
 }''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
       final stack = await client.getValidStack(stop.threadId!,
@@ -153,6 +173,48 @@
       await client.expectEvalResult(secondFrameId, 'a', '999');
     });
 
+    test('returns the full message for evaluation errors', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      expectResponseError(
+        client.evaluate(
+          '1 + "a"',
+          frameId: topFrameId,
+        ),
+        allOf([
+          contains('evaluateInFrame: (113) Expression compilation error'),
+          contains("'String' can't be assigned to a variable of type 'num'."),
+          contains(
+            '1 + "a"\n'
+            '    ^',
+          )
+        ]),
+      );
+    });
+
+    test('returns short errors for evaluation in "watch" context', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
+      expectResponseError(
+        client.evaluate(
+          '1 + "a"',
+          frameId: topFrameId,
+          context: 'watch',
+        ),
+        equals(
+          "A value of type 'String' can't be assigned "
+          "to a variable of type 'num'.",
+        ),
+      );
+    });
     // These tests can be slow due to starting up the external server process.
   }, timeout: Timeout.none);
 }
diff --git a/pkg/dds/test/dap/integration/debug_exceptions_test.dart b/pkg/dds/test/dap/integration/debug_exceptions_test.dart
new file mode 100644
index 0000000..752ce5f
--- /dev/null
+++ b/pkg/dds/test/dap/integration/debug_exceptions_test.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.
+
+import 'package:test/test.dart';
+
+import 'test_client.dart';
+import 'test_scripts.dart';
+import 'test_support.dart';
+
+main() {
+  group('debug mode', () {
+    late DapTestSession dap;
+    setUp(() async {
+      dap = await DapTestSession.setUp();
+    });
+    tearDown(() => dap.tearDown());
+
+    test('does not pause on exceptions if mode not set', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleThrowingProgram);
+
+      // Run the app and expect it to complete (it should not pause).
+      final outputEvents = await client.collectOutput(file: testFile);
+
+      // Expect error info printed to stderr.
+      final output = outputEvents
+          .where((e) => e.category == 'stderr')
+          .map((e) => e.output)
+          .join();
+      expectLinesStartWith(output, [
+        'Unhandled exception:',
+        'error',
+      ]);
+    });
+
+    test('pauses on uncaught exceptions when mode=Unhandled', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleThrowingProgram);
+
+      // Run and expect to pause on an exception.
+      await client.pauseOnException(
+        testFile,
+        exceptionPauseMode: 'Unhandled',
+      );
+    });
+
+    test('does not pauses on caught exceptions when mode=Unhandled', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleCaughtErrorProgram);
+
+      // Run the app and expect it to complete (it should not pause).
+      final outputEvents = await client.collectOutput(file: testFile);
+
+      // Expect error info printed to stderr.
+      final output = outputEvents
+          .where((e) => e.category == 'stdout')
+          .map((e) => e.output)
+          .join();
+      expectLines(output, ['Caught!']);
+    });
+
+    test('pauses on caught exceptions when mode=All', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleCaughtErrorProgram);
+
+      // Run and expect to pause on an exception.
+      await client.pauseOnException(
+        testFile,
+        exceptionPauseMode: 'All',
+      );
+    });
+    // These tests can be slow due to starting up the external server process.
+  }, timeout: Timeout.none);
+}
diff --git a/pkg/dds/test/dap/integration/debug_stack_test.dart b/pkg/dds/test/dap/integration/debug_stack_test.dart
new file mode 100644
index 0000000..72f2cb5
--- /dev/null
+++ b/pkg/dds/test/dap/integration/debug_stack_test.dart
@@ -0,0 +1,162 @@
+// 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/test.dart';
+
+import 'test_client.dart';
+import 'test_scripts.dart';
+import 'test_support.dart';
+
+main() {
+  late DapTestSession dap;
+  setUp(() async {
+    dap = await DapTestSession.setUp();
+  });
+  tearDown(() => dap.tearDown());
+
+  group('debug mode stack trace', () {
+    test('includes expected names and async boundaries', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(simpleAsyncProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final stack = await client.getValidStack(
+        stop.threadId!,
+        startFrame: 0,
+        numFrames: 8,
+      );
+
+      expect(
+        stack.stackFrames.map((f) => f.name),
+        equals([
+          'four',
+          'three',
+          '<asynchronous gap>',
+          'two',
+          '<asynchronous gap>',
+          'one',
+          '<asynchronous gap>',
+          'main',
+        ]),
+      );
+
+      // Ensure async gaps have their presentationHint set to 'label'.
+      expect(
+        stack.stackFrames.map((f) => f.presentationHint),
+        equals([
+          null,
+          null,
+          'label',
+          null,
+          'label',
+          null,
+          'label',
+          null,
+        ]),
+      );
+    });
+
+    test('only sets canRestart where VM can rewind', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(simpleAsyncProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final stack = await client.getValidStack(
+        stop.threadId!,
+        startFrame: 0,
+        numFrames: 8,
+      );
+
+      expect(
+        stack.stackFrames.map((f) => f.canRestart ?? false),
+        equals([
+          // Top frame cannot be rewound to:
+          // https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#resume
+          isFalse,
+          // Other frames can
+          isTrue,
+          // Until after an async boundary
+          isFalse,
+          isFalse,
+          isFalse,
+          isFalse,
+          isFalse,
+          isFalse,
+        ]),
+      );
+    });
+
+    test('deemphasizes SDK frames when debugSdk=false', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(sdkStackFrameProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(testFile.path, debugSdkLibraries: false),
+      );
+      final stack = await client.getValidStack(
+        stop.threadId!,
+        startFrame: 0,
+        numFrames: 100,
+      );
+
+      // Get all frames that are SDK Frames
+      final sdkFrames = stack.stackFrames
+          .where((frame) => frame.source?.name?.startsWith('dart:') ?? false)
+          .toList();
+      // Ensure we got some frames for the test to be valid.
+      expect(sdkFrames, isNotEmpty);
+
+      for (final sdkFrame in sdkFrames) {
+        expect(
+          sdkFrame.source?.presentationHint,
+          equals('deemphasize'),
+          reason: '${sdkFrame.source!.name} should be deemphasized',
+        );
+      }
+    });
+
+    test('does not deemphasize SDK frames when debugSdk=true', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile(sdkStackFrameProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(testFile.path, debugSdkLibraries: true),
+      );
+      final stack = await client.getValidStack(
+        stop.threadId!,
+        startFrame: 0,
+        numFrames: 100,
+      );
+
+      // Get all frames that are SDK Frames
+      final sdkFrames = stack.stackFrames
+          .where((frame) => frame.source?.name?.startsWith('dart:') ?? false)
+          .toList();
+      // Ensure we got some frames for the test to be valid.
+      expect(sdkFrames, isNotEmpty);
+
+      for (final sdkFrame in sdkFrames) {
+        expect(
+          sdkFrame.source?.presentationHint,
+          isNot(equals('deemphasize')),
+          reason: '${sdkFrame.source!.name} should not be deemphasized',
+        );
+        expect(
+          sdkFrame.source?.origin,
+          equals('from the SDK'),
+          reason: '${sdkFrame.source!.name} should be labelled as SDK code',
+        );
+      }
+    });
+    // These tests can be slow due to starting up the external server process.
+  }, timeout: Timeout.none);
+}
diff --git a/pkg/dds/test/dap/integration/debug_test.dart b/pkg/dds/test/dap/integration/debug_test.dart
index 41863f9..6e7565b 100644
--- a/pkg/dds/test/dap/integration/debug_test.dart
+++ b/pkg/dds/test/dap/integration/debug_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:io';
+
 import 'package:dds/src/dap/protocol_generated.dart';
 import 'package:test/test.dart';
 
@@ -18,13 +20,7 @@
     tearDown(() => dap.tearDown());
 
     test('runs a simple script', () async {
-      final testFile = dap.createTestFile(r'''
-void main(List<String> args) async {
-  print('Hello!');
-  print('World!');
-  print('args: $args');
-}
-    ''');
+      final testFile = dap.createTestFile(simpleArgPrintingProgram);
 
       final outputEvents = await dap.client.collectOutput(
         launch: () => dap.client.launch(
@@ -51,10 +47,55 @@
       ]);
     });
 
+    test('runs a simple script using runInTerminal request', () async {
+      final testFile = dap.createTestFile(emptyProgram);
+
+      // Set up a handler to handle the server calling the clients runInTerminal
+      // request and capture the args.
+      RunInTerminalRequestArguments? runInTerminalArgs;
+      Process? proc;
+      dap.client.handleRequest(
+        'runInTerminal',
+        (args) async {
+          runInTerminalArgs = RunInTerminalRequestArguments.fromJson(
+            args as Map<String, Object?>,
+          );
+
+          // Run the requested process (emulating what the editor would do) so
+          // that the DA will pick up the service info file, connect to the VM,
+          // resume, and then detect its termination.
+          final runArgs = runInTerminalArgs!;
+          proc = await Process.start(
+            runArgs.args.first,
+            runArgs.args.skip(1).toList(),
+            workingDirectory: runArgs.cwd,
+          );
+
+          return RunInTerminalResponseBody(processId: proc!.pid);
+        },
+      );
+
+      // Run the script until we get a TerminatedEvent.
+      await Future.wait([
+        dap.client.event('terminated'),
+        dap.client.initialize(supportsRunInTerminalRequest: true),
+        dap.client.launch(testFile.path, console: "terminal"),
+      ], eagerError: true);
+
+      expect(runInTerminalArgs, isNotNull);
+      expect(proc, isNotNull);
+      expect(
+        runInTerminalArgs!.args,
+        containsAllInOrder([Platform.resolvedExecutable, testFile.path]),
+      );
+      expect(proc!.pid, isPositive);
+      expect(proc!.exitCode, completes);
+    });
+
     test('provides a list of threads', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       await client.hitBreakpoint(testFile, breakpointLine);
       final response = await client.getValidThreads();
@@ -66,7 +107,7 @@
     test('runs with DDS by default', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       await client.hitBreakpoint(testFile, breakpointLine);
       expect(await client.ddsAvailable, isTrue);
@@ -79,6 +120,45 @@
       final vmServiceUri = _extractVmServiceUri(outputEvents.first);
       expect(vmServiceUri.path, matches(vmServiceAuthCodePathPattern));
     });
+
+    test('can download source code from the VM', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile(simpleBreakpointProgram);
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      // Hit the initial breakpoint.
+      final stop = await dap.client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          debugSdkLibraries: true,
+        ),
+      );
+
+      // Step in to go into print.
+      final responses = await Future.wait([
+        client.expectStop('step', sourceName: 'dart:core/print.dart'),
+        client.stepIn(stop.threadId!),
+      ], eagerError: true);
+      final stopResponse = responses.first as StoppedEventBody;
+
+      // Fetch the top stack frame (which should be inside print).
+      final stack = await client.getValidStack(
+        stopResponse.threadId!,
+        startFrame: 0,
+        numFrames: 1,
+      );
+      final topFrame = stack.stackFrames.first;
+
+      // SDK sources should have a sourceReference and no path.
+      expect(topFrame.source!.path, isNull);
+      expect(topFrame.source!.sourceReference, isPositive);
+
+      // Source code should contain the implementation/signature of print().
+      final source = await client.getValidSource(topFrame.source!);
+      expect(source.content, contains('void print(Object? object) {'));
+    });
     // These tests can be slow due to starting up the external server process.
   }, timeout: Timeout.none);
 
@@ -89,7 +169,7 @@
 
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       await client.hitBreakpoint(testFile, breakpointLine);
 
@@ -126,6 +206,6 @@
 Uri _extractVmServiceUri(OutputEventBody vmConnectionBanner) {
   // TODO(dantup): Change this to use the dart.debuggerUris custom event
   //   if implemented (whch VS Code also needs).
-  final match = vmServiceUriPattern.firstMatch(vmConnectionBanner.output);
+  final match = dapVmServiceBannerPattern.firstMatch(vmConnectionBanner.output);
   return Uri.parse(match!.group(1)!);
 }
diff --git a/pkg/dds/test/dap/integration/debug_variables_test.dart b/pkg/dds/test/dap/integration/debug_variables_test.dart
index b5e357c..86f4412 100644
--- a/pkg/dds/test/dap/integration/debug_variables_test.dart
+++ b/pkg/dds/test/dap/integration/debug_variables_test.dart
@@ -5,6 +5,7 @@
 import 'package:test/test.dart';
 
 import 'test_client.dart';
+import 'test_scripts.dart';
 import 'test_support.dart';
 
 main() {
@@ -17,7 +18,7 @@
   group('debug mode variables', () {
     test('provides variable list for frames', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   final myVariable = 1;
   foo();
@@ -25,10 +26,10 @@
 
 void foo() {
   final b = 2;
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
       final stack = await client.getValidStack(
@@ -40,18 +41,18 @@
       // Check top two frames (in `foo` and in `main`).
       await client.expectScopeVariables(
         stack.stackFrames[0].id, // Top frame: foo
-        'Variables',
+        'Locals',
         '''
-            b: 2
-          ''',
+            b: 2, eval: b
+        ''',
       );
       await client.expectScopeVariables(
         stack.stackFrames[1].id, // Second frame: main
-        'Variables',
+        'Locals',
         '''
-            args: List (0 items)
-            myVariable: 1
-          ''',
+            args: List (0 items), eval: args
+            myVariable: 1, eval: myVariable
+        ''',
       );
     });
 
@@ -64,25 +65,20 @@
     ''');
 
       final stop = await client.hitException(testFile);
-      final stack = await client.getValidStack(
-        stop.threadId!,
-        startFrame: 0,
-        numFrames: 1,
-      );
-      final topFrameId = stack.stackFrames.first.id;
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
 
       // Check for an additional Scope named "Exceptions" that includes the
       // exception.
       await client.expectScopeVariables(
         topFrameId,
         'Exceptions',
-        '''
-            String: "my error"
-          ''',
+        r'''
+            String: "my error", eval: $_threadException
+        ''',
       );
     });
 
-    test('provides complex exception types frames', () async {
+    test('provides complex exception types for frames', () async {
       final client = dap.client;
       final testFile = await dap.createTestFile(r'''
 void main(List<String> args) {
@@ -91,36 +87,30 @@
     ''');
 
       final stop = await client.hitException(testFile);
-      final stack = await client.getValidStack(
-        stop.threadId!,
-        startFrame: 0,
-        numFrames: 1,
-      );
-      final topFrameId = stack.stackFrames.first.id;
+      final topFrameId = await client.getTopFrameId(stop.threadId!);
 
       // Check for an additional Scope named "Exceptions" that includes the
       // exception.
       await client.expectScopeVariables(
         topFrameId,
         'Exceptions',
-        // TODO(dantup): evaluateNames
-        '''
-            invalidValue: null
-            message: "Must not be null"
-            name: "args"
-          ''',
+        r'''
+            invalidValue: null, eval: $_threadException.invalidValue
+            message: "Must not be null", eval: $_threadException.message
+            name: "args", eval: $_threadException.name
+        ''',
       );
     });
 
     test('includes simple variable fields', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   final myVariable = DateTime(2000, 1, 1);
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
       await client.expectLocalVariable(
@@ -128,21 +118,21 @@
         expectedName: 'myVariable',
         expectedDisplayString: 'DateTime',
         expectedVariables: '''
-            isUtc: false
-          ''',
+            isUtc: false, eval: myVariable.isUtc
+        ''',
       );
     });
 
     test('includes variable getters when evaluateGettersInDebugViews=true',
         () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   final myVariable = DateTime(2000, 1, 1);
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(
         testFile,
@@ -157,19 +147,19 @@
         expectedName: 'myVariable',
         expectedDisplayString: 'DateTime',
         expectedVariables: '''
-            day: 1
-            hour: 0
-            isUtc: false
-            microsecond: 0
-            millisecond: 0
-            minute: 0
-            month: 1
-            runtimeType: Type (DateTime)
-            second: 0
-            timeZoneOffset: Duration
-            weekday: 6
-            year: 2000
-          ''',
+            day: 1, eval: myVariable.day
+            hour: 0, eval: myVariable.hour
+            isUtc: false, eval: myVariable.isUtc
+            microsecond: 0, eval: myVariable.microsecond
+            millisecond: 0, eval: myVariable.millisecond
+            minute: 0, eval: myVariable.minute
+            month: 1, eval: myVariable.month
+            runtimeType: Type (DateTime), eval: myVariable.runtimeType
+            second: 0, eval: myVariable.second
+            timeZoneOffset: Duration, eval: myVariable.timeZoneOffset
+            weekday: 6, eval: myVariable.weekday
+            year: 2000, eval: myVariable.year
+        ''',
         ignore: {
           // Don't check fields that may very based on timezone as it'll make
           // these tests fragile, and this isn't really what's being tested.
@@ -182,59 +172,283 @@
 
     test('renders a simple list', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   final myVariable = ["first", "second", "third"];
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
       await client.expectLocalVariable(
         stop.threadId!,
         expectedName: 'myVariable',
         expectedDisplayString: 'List (3 items)',
-        // TODO(dantup): evaluateNames
         expectedVariables: '''
-            0: "first"
-            1: "second"
-            2: "third"
-          ''',
+            [0]: "first", eval: myVariable[0]
+            [1]: "second", eval: myVariable[1]
+            [2]: "third", eval: myVariable[2]
+        ''',
       );
     });
 
     test('renders a simple list subset', () async {
       final client = dap.client;
-      final testFile = await dap.createTestFile(r'''
+      final testFile = await dap.createTestFile('''
 void main(List<String> args) {
   final myVariable = ["first", "second", "third"];
-  print('Hello!'); // BREAKPOINT
+  print('Hello!'); $breakpointMarker
 }
     ''');
-      final breakpointLine = lineWith(testFile, '// BREAKPOINT');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
       final stop = await client.hitBreakpoint(testFile, breakpointLine);
       await client.expectLocalVariable(
         stop.threadId!,
         expectedName: 'myVariable',
         expectedDisplayString: 'List (3 items)',
-        // TODO(dantup): evaluateNames
         expectedVariables: '''
-            1: "second"
-          ''',
+            [1]: "second", eval: myVariable[1]
+        ''',
         start: 1,
         count: 1,
       );
     });
 
-    test('renders a simple map', () {
-      // TODO(dantup): Implement this (inc evaluateNames)
-    }, skip: true);
+    test('renders a simple map with keys/values', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+void main(List<String> args) {
+  final myVariable = {
+    'zero': 0,
+    'one': 1,
+    'two': 2
+  };
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
 
-    test('renders a simple map subset', () {
-      // TODO(dantup): Implement this (inc evaluateNames)
-    }, skip: true);
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final variables = await client.expectLocalVariable(
+        stop.threadId!,
+        expectedName: 'myVariable',
+        expectedDisplayString: 'Map (3 items)',
+        // For maps, we render a level of MapAssociates first, which show
+        // their index numbers. Expanding them has a Key and a Value "field"
+        // which correspond to the items.
+        expectedVariables: '''
+            0: "zero" -> 0
+            1: "one" -> 1
+            2: "two" -> 2
+        ''',
+      );
+
+      // Check one of the MapAssociation variables has the correct Key/Value
+      // inside.
+      expect(variables.variables, hasLength(3));
+      final variableOne = variables.variables[1];
+      expect(variableOne.variablesReference, isPositive);
+      await client.expectVariables(
+        variableOne.variablesReference,
+        '''
+            key: "one"
+            value: 1, eval: myVariable["one"]
+        ''',
+      );
+    });
+
+    test('renders a simple map subset', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+void main(List<String> args) {
+  final myVariable = {
+    'zero': 0,
+    'one': 1,
+    'two': 2
+  };
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      await client.expectLocalVariable(
+        stop.threadId!,
+        expectedName: 'myVariable',
+        expectedDisplayString: 'Map (3 items)',
+        // For maps, we render a level of MapAssociates first, which show
+        // their index numbers. Expanding them has a Key and a Value "field"
+        // which correspond to the items.
+        expectedVariables: '''
+            1: "one" -> 1
+        ''',
+        start: 1,
+        count: 1,
+      );
+    });
+
+    test('renders a complex map with keys/values', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+void main(List<String> args) {
+  final myVariable = {
+    DateTime(2000, 1, 1): Exception("my error")
+  };
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final mapVariables = await client.expectLocalVariable(
+        stop.threadId!,
+        expectedName: 'myVariable',
+        expectedDisplayString: 'Map (1 item)',
+        expectedVariables: '''
+            0: DateTime -> _Exception
+        ''',
+      );
+
+      // Check one of the MapAssociation variables has the correct Key/Value
+      // inside.
+      expect(mapVariables.variables, hasLength(1));
+      final mapVariable = mapVariables.variables[0];
+      expect(mapVariable.variablesReference, isPositive);
+      final variables = await client.expectVariables(
+        mapVariable.variablesReference,
+        // We don't expect an evaluteName because the key is not a simple type.
+        '''
+            key: DateTime
+            value: _Exception
+        ''',
+      );
+
+      // Check the Key can be drilled into.
+      expect(variables.variables, hasLength(2));
+      final keyVariable = variables.variables[0];
+      expect(keyVariable.variablesReference, isPositive);
+      await client.expectVariables(
+        keyVariable.variablesReference,
+        '''
+            isUtc: false
+        ''',
+      );
+
+      // Check the Value can be drilled into.
+      final valueVariable = variables.variables[1];
+      expect(valueVariable.variablesReference, isPositive);
+      await client.expectVariables(
+        valueVariable.variablesReference,
+        '''
+            message: "my error"
+        ''',
+      );
+    });
+
+    test('calls toString() on custom classes', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+class Foo {
+  toString() => 'Bar!';
+}
+
+void main() {
+  final myVariable = Foo();
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          evaluateToStringInDebugViews: true,
+        ),
+      );
+
+      await client.expectScopeVariables(
+        await client.getTopFrameId(stop.threadId!),
+        'Locals',
+        r'''
+            myVariable: Foo (Bar!), eval: myVariable
+        ''',
+      );
+    });
+
+    test('does not use toString() result if "Instance of Foo"', () async {
+      // When evaluateToStringInDebugViews=true, we should discard the result of
+      // caling toString() when it's just 'Instance of Foo' because we're already
+      // showing the type, and otherwise we show:
+      //
+      //     myVariable: Foo (Instance of Foo)
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+class Foo {}
+
+void main() {
+  final myVariable = Foo();
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          evaluateToStringInDebugViews: true,
+        ),
+      );
+
+      await client.expectScopeVariables(
+        await client.getTopFrameId(stop.threadId!),
+        'Locals',
+        r'''
+            myVariable: Foo, eval: myVariable
+        ''',
+      );
+    });
+
+    test('handles errors in getters', () async {
+      final client = dap.client;
+      final testFile = await dap.createTestFile('''
+class Foo {
+  String get doesNotThrow => "success";
+  String get throws => throw Exception('err');
+}
+
+void main() {
+  final myVariable = Foo();
+  print('Hello!'); $breakpointMarker
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(
+        testFile,
+        breakpointLine,
+        launch: () => client.launch(
+          testFile.path,
+          evaluateGettersInDebugViews: true,
+        ),
+      );
+
+      await client.expectLocalVariable(
+        stop.threadId!,
+        expectedName: 'myVariable',
+        expectedDisplayString: 'Foo',
+        expectedVariables: '''
+            doesNotThrow: "success", eval: myVariable.doesNotThrow
+            throws: <Exception: err>
+        ''',
+        ignore: {'runtimeType'},
+      );
+    });
     // These tests can be slow due to starting up the external server process.
   }, timeout: Timeout.none);
 }
diff --git a/pkg/dds/test/dap/integration/no_debug_test.dart b/pkg/dds/test/dap/integration/no_debug_test.dart
index bb0af1d..c5e5e54 100644
--- a/pkg/dds/test/dap/integration/no_debug_test.dart
+++ b/pkg/dds/test/dap/integration/no_debug_test.dart
@@ -2,9 +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:io';
+
+import 'package:dds/src/dap/protocol_generated.dart';
 import 'package:test/test.dart';
 
 import 'test_client.dart';
+import 'test_scripts.dart';
 import 'test_support.dart';
 
 main() {
@@ -16,13 +20,7 @@
 
   group('noDebug mode', () {
     test('runs a simple script', () async {
-      final testFile = dap.createTestFile(r'''
-void main(List<String> args) async {
-  print('Hello!');
-  print('World!');
-  print('args: $args');
-}
-    ''');
+      final testFile = dap.createTestFile(simpleArgPrintingProgram);
 
       final outputEvents = await dap.client.collectOutput(
         launch: () => dap.client.launch(
@@ -41,6 +39,40 @@
         'Exited.',
       ]);
     });
+
+    test('runs a simple script using the runInTerminal request', () async {
+      final testFile = dap.createTestFile(emptyProgram);
+
+      // Set up a handler to handle the server calling the clients runInTerminal
+      // request and capture the args.
+      RunInTerminalRequestArguments? runInTerminalArgs;
+      dap.client.handleRequest(
+        'runInTerminal',
+        (args) {
+          runInTerminalArgs = RunInTerminalRequestArguments.fromJson(
+            args as Map<String, Object?>,
+          );
+          return RunInTerminalResponseBody();
+        },
+      );
+
+      // Run the script until we get a TerminatedEvent.
+      await Future.wait([
+        dap.client.event('terminated'),
+        dap.client.initialize(supportsRunInTerminalRequest: true),
+        dap.client.launch(
+          testFile.path,
+          noDebug: true,
+          console: "terminal",
+        ),
+      ], eagerError: true);
+
+      expect(runInTerminalArgs, isNotNull);
+      expect(
+        runInTerminalArgs!.args,
+        containsAllInOrder([Platform.resolvedExecutable, testFile.path]),
+      );
+    });
     // These tests can be slow due to starting up the external server process.
   }, timeout: Timeout.none);
 }
diff --git a/pkg/dds/test/dap/integration/test_client.dart b/pkg/dds/test/dap/integration/test_client.dart
index bfa05c6..77ddc1a 100644
--- a/pkg/dds/test/dap/integration/test_client.dart
+++ b/pkg/dds/test/dap/integration/test_client.dart
@@ -31,6 +31,11 @@
   final _eventController = StreamController<Event>.broadcast();
   int _seq = 1;
 
+  /// Functions provided by tests to handle requests that may come from the
+  /// server (such as `runInTerminal`).
+  final _serverRequestHandlers =
+      <String, FutureOr<Object?> Function(Object?)>{};
+
   DapTestClient._(
     this._channel,
     this._logger, {
@@ -54,6 +59,57 @@
   Stream<OutputEventBody> get outputEvents => events('output')
       .map((e) => OutputEventBody.fromJson(e.body as Map<String, Object?>));
 
+  /// Send an attachRequest to the server, asking it to attach to an existing
+  /// Dart program.
+  Future<Response> attach({
+    required bool autoResume,
+    String? vmServiceUri,
+    String? vmServiceInfoFile,
+    String? cwd,
+    List<String>? additionalProjectPaths,
+    bool? debugSdkLibraries,
+    bool? debugExternalPackageLibraries,
+    bool? evaluateGettersInDebugViews,
+    bool? evaluateToStringInDebugViews,
+  }) async {
+    assert(
+      (vmServiceUri == null) != (vmServiceInfoFile == null),
+      'Provide exactly one of vmServiceUri/vmServiceInfoFile',
+    );
+
+    // When attaching, the paused VM will not be automatically unpaused, but
+    // instead send a Stopped(reason: 'entry') event. Respond to this by
+    // resuming.
+    final resumeFuture = autoResume
+        ? expectStop('entry').then((event) => continue_(event.threadId!))
+        : null;
+
+    final attachResponse = sendRequest(
+      DartAttachRequestArguments(
+        vmServiceUri: vmServiceUri,
+        vmServiceInfoFile: vmServiceInfoFile,
+        cwd: cwd,
+        additionalProjectPaths: additionalProjectPaths,
+        debugSdkLibraries: debugSdkLibraries,
+        debugExternalPackageLibraries: debugExternalPackageLibraries,
+        evaluateGettersInDebugViews: evaluateGettersInDebugViews,
+        evaluateToStringInDebugViews: evaluateToStringInDebugViews,
+        // 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,
+      ),
+      // We can't automatically pick the command when using a custom type
+      // (DartAttachRequestArguments).
+      overrideCommand: 'attach',
+    );
+
+    // If we were expecting a pause and to resume, ensure that happens.
+    await resumeFuture;
+
+    return attachResponse;
+  }
+
   /// Sends a continue request for the given thread.
   ///
   /// Returns a Future that completes when the server returns a corresponding
@@ -97,14 +153,28 @@
     return _eventController.stream.where((e) => e.event == event);
   }
 
+  /// Records a handler for when the server sends a [request] request.
+  void handleRequest(
+    String request,
+    FutureOr<Object?> Function(Object?) handler,
+  ) {
+    _serverRequestHandlers[request] = handler;
+  }
+
   /// Send an initialize request to the server.
   ///
   /// This occurs before the request to start running/debugging a script and is
   /// used to exchange capabilities and send breakpoints and other settings.
-  Future<Response> initialize({String exceptionPauseMode = 'None'}) async {
+  Future<Response> initialize({
+    String exceptionPauseMode = 'None',
+    bool? supportsRunInTerminalRequest,
+  }) async {
     final responses = await Future.wait([
       event('initialized'),
-      sendRequest(InitializeRequestArguments(adapterID: 'test')),
+      sendRequest(InitializeRequestArguments(
+        adapterID: 'test',
+        supportsRunInTerminalRequest: supportsRunInTerminalRequest,
+      )),
       sendRequest(
         SetExceptionBreakpointsArguments(
           filters: [exceptionPauseMode],
@@ -121,6 +191,8 @@
     List<String>? args,
     String? cwd,
     bool? noDebug,
+    List<String>? additionalProjectPaths,
+    String? console,
     bool? debugSdkLibraries,
     bool? debugExternalPackageLibraries,
     bool? evaluateGettersInDebugViews,
@@ -132,6 +204,8 @@
         program: program,
         cwd: cwd,
         args: args,
+        additionalProjectPaths: additionalProjectPaths,
+        console: console,
         debugSdkLibraries: debugSdkLibraries,
         debugExternalPackageLibraries: debugExternalPackageLibraries,
         evaluateGettersInDebugViews: evaluateGettersInDebugViews,
@@ -179,6 +253,33 @@
     return _logIfSlow('Request "$command"', completer.future);
   }
 
+  /// Sends a response to the server.
+  ///
+  /// This is used to respond to server-to-client requests such as
+  /// `runInTerminal`.
+  void sendResponse(Request request, Object? responseBody) {
+    final response = Response(
+      success: true,
+      requestSeq: request.seq,
+      seq: _seq++,
+      command: request.command,
+      body: responseBody,
+    );
+    _channel.sendResponse(response);
+  }
+
+  /// Sends a source request to the server to request source code for a [source]
+  /// reference that may have come from a stack frame or similar.
+  ///
+  /// Returns a Future that completes when the server returns a corresponding
+  /// response.
+  Future<Response> source(Source source) => sendRequest(
+        SourceArguments(
+          source: source,
+          sourceReference: source.sourceReference!,
+        ),
+      );
+
   /// Sends a stackTrace request to the server to request the call stack for a
   /// given thread.
   ///
@@ -198,7 +299,6 @@
     File? file,
     Future<Response> Function()? launch,
   }) {
-    // Launch script and wait for termination.
     return Future.wait([
       initialize(),
       launch?.call() ?? this.launch(file!.path),
@@ -256,7 +356,7 @@
 
   /// Handles an incoming message from the server, completing the relevant request
   /// of raising the appropriate event.
-  void _handleMessage(message) {
+  Future<void> _handleMessage(message) async {
     if (message is Response) {
       final pendingRequest = _pendingRequests.remove(message.requestSeq);
       if (pendingRequest == null) {
@@ -275,8 +375,19 @@
       // tests are waiting on something that will never come, they fail at
       // a useful location.
       if (message.event == 'terminated') {
-        _eventController.close();
+        unawaited(_eventController.close());
       }
+    } else if (message is Request) {
+      // The server sent a request to the client. Call the handler and then send
+      // back its result in a response.
+      final command = message.command;
+      final args = message.arguments;
+      final handler = _serverRequestHandlers[command];
+      if (handler == null) {
+        throw 'Test did not configure a handler for servers request: $command';
+      }
+      final result = await handler(args);
+      sendResponse(message, result);
     }
   }
 
@@ -286,14 +397,13 @@
   /// Returns [future].
   Future<T> _logIfSlow<T>(String name, Future<T> future) {
     var didComplete = false;
-    future.then((_) => didComplete = true);
     Future.delayed(_requestWarningDuration).then((_) {
       if (!didComplete) {
         print(
             '$name has taken longer than ${_requestWarningDuration.inSeconds}s');
       }
     });
-    return future;
+    return future.whenComplete(() => didComplete = true);
   }
 
   /// Creates a [DapTestClient] that connects the server listening on
@@ -331,6 +441,7 @@
   Future<StoppedEventBody> hitBreakpoint(
     File file,
     int line, {
+    String? condition,
     Future<Response> Function()? launch,
   }) async {
     final stop = expectStop('breakpoint', file: file, line: line);
@@ -340,7 +451,7 @@
       sendRequest(
         SetBreakpointsArguments(
           source: Source(path: file.path),
-          breakpoints: [SourceBreakpoint(line: line)],
+          breakpoints: [SourceBreakpoint(line: line, condition: condition)],
         ),
       ),
       launch?.call() ?? this.launch(file.path),
@@ -349,6 +460,62 @@
     return stop;
   }
 
+  /// Sets the exception pause mode to [pauseMode] and expects to pause after
+  /// running the script.
+  ///
+  /// Launch options can be customised by passing a custom [launch] function that
+  /// will be used instead of calling `launch(file.path)`.
+  Future<StoppedEventBody> pauseOnException(
+    File file, {
+    String? exceptionPauseMode, // All, Unhandled, None
+    Future<Response> Function()? launch,
+  }) async {
+    final stop = expectStop('exception', file: file);
+
+    await Future.wait([
+      initialize(),
+      sendRequest(
+        SetExceptionBreakpointsArguments(
+          filters: [if (exceptionPauseMode != null) exceptionPauseMode],
+        ),
+      ),
+      launch?.call() ?? this.launch(file.path),
+    ], eagerError: true);
+
+    return stop;
+  }
+
+  /// Sets a breakpoint at [line] in [file] and expects _not_ to hit it after
+  /// running the script (instead the script is expected to terminate).
+  ///
+  /// Launch options can be customised by passing a custom [launch] function that
+  /// will be used instead of calling `launch(file.path)`.
+  Future<void> doNotHitBreakpoint(
+    File file,
+    int line, {
+    String? condition,
+    String? logMessage,
+    Future<Response> Function()? launch,
+  }) async {
+    await Future.wait([
+      event('terminated'),
+      initialize(),
+      sendRequest(
+        SetBreakpointsArguments(
+          source: Source(path: file.path),
+          breakpoints: [
+            SourceBreakpoint(
+              line: line,
+              condition: condition,
+              logMessage: logMessage,
+            )
+          ],
+        ),
+      ),
+      launch?.call() ?? this.launch(file.path),
+    ], eagerError: true);
+  }
+
   /// Returns whether DDS is available for the VM Service the debug adapter
   /// is connected to.
   Future<bool> get ddsAvailable async {
@@ -388,25 +555,32 @@
   ///
   /// If [file] or [line] are provided, they will be checked against the stop
   /// location for the top stack frame.
-  Future<StoppedEventBody> expectStop(String reason,
-      {File? file, int? line, String? sourceName}) async {
+  Future<StoppedEventBody> expectStop(
+    String reason, {
+    File? file,
+    int? line,
+    String? sourceName,
+  }) async {
     final e = await event('stopped');
     final stop = StoppedEventBody.fromJson(e.body as Map<String, Object?>);
     expect(stop.reason, equals(reason));
 
     final result =
         await getValidStack(stop.threadId!, startFrame: 0, numFrames: 1);
-    expect(result.stackFrames, hasLength(1));
-    final frame = result.stackFrames[0];
 
-    if (file != null) {
-      expect(frame.source!.path, equals(file.path));
-    }
-    if (sourceName != null) {
-      expect(frame.source!.name, equals(sourceName));
-    }
-    if (line != null) {
-      expect(frame.line, equals(line));
+    if (file != null || line != null || sourceName != null) {
+      expect(result.stackFrames, hasLength(1));
+      final frame = result.stackFrames[0];
+
+      if (file != null) {
+        expect(frame.source?.path, equals(file.path));
+      }
+      if (sourceName != null) {
+        expect(frame.source?.name, equals(sourceName));
+      }
+      if (line != null) {
+        expect(frame.line, equals(line));
+      }
     }
 
     return stop;
@@ -423,6 +597,14 @@
         response.body as Map<String, Object?>);
   }
 
+  /// Fetches source for a sourceReference and asserts it was a valid response.
+  Future<SourceResponseBody> getValidSource(Source source) async {
+    final response = await this.source(source);
+    expect(response.success, isTrue);
+    expect(response.command, equals('source'));
+    return SourceResponseBody.fromJson(response.body as Map<String, Object?>);
+  }
+
   /// Fetches threads and asserts a valid response.
   Future<ThreadsResponseBody> getValidThreads() async {
     final response = await threads();
@@ -476,7 +658,7 @@
 
   /// A helper that finds a named variable in the Variables scope for the top
   /// frame and asserts its child variables (fields/getters/etc) match.
-  Future<void> expectLocalVariable(
+  Future<VariablesResponseBody> expectLocalVariable(
     int threadId, {
     required String expectedName,
     required String expectedDisplayString,
@@ -493,7 +675,7 @@
     );
     final topFrame = stack.stackFrames.first;
 
-    final variablesScope = await getValidScope(topFrame.id, 'Variables');
+    final variablesScope = await getValidScope(topFrame.id, 'Locals');
     final variables =
         await getValidVariables(variablesScope.variablesReference);
     final expectedVariable = variables.variables
@@ -503,7 +685,7 @@
     expect(expectedVariable.value, equals(expectedDisplayString));
 
     // Check the child fields.
-    await expectVariables(
+    return expectVariables(
       expectedVariable.variablesReference,
       expectedVariables,
       start: start,
@@ -584,7 +766,7 @@
       final type = v.type;
       final presentationHint = v.presentationHint;
 
-      buffer.write(v.name);
+      buffer.write('${v.name}: $value');
       if (evaluateName != null) {
         buffer.write(', eval: $evaluateName');
       }
@@ -594,12 +776,11 @@
       if (namedVariables != null) {
         buffer.write(', $namedVariables named items');
       }
-      buffer.write(': $value');
       if (type != null) {
-        buffer.write(' ($type)');
+        buffer.write(', $type');
       }
       if (presentationHint != null) {
-        buffer.write(' ($presentationHint)');
+        buffer.write(', $presentationHint');
       }
 
       return buffer.toString();
@@ -617,17 +798,11 @@
     return variables;
   }
 
-  /// Evalutes [expression] in the top frame of thread [threadId] and expects a
-  /// specific [expectedResult].
-  Future<EvaluateResponseBody> expectTopFrameEvalResult(
+  Future<int> getTopFrameId(
     int threadId,
-    String expression,
-    String expectedResult,
   ) async {
     final stack = await getValidStack(threadId, startFrame: 0, numFrames: 1);
-    final topFrameId = stack.stackFrames.first.id;
-
-    return expectEvalResult(topFrameId, expression, expectedResult);
+    return stack.stackFrames.first.id;
   }
 
   /// Evalutes [expression] in frame [frameId] and expects a specific
diff --git a/pkg/dds/test/dap/integration/test_scripts.dart b/pkg/dds/test/dap/integration/test_scripts.dart
index 6b6a05b..08b5390 100644
--- a/pkg/dds/test/dap/integration/test_scripts.dart
+++ b/pkg/dds/test/dap/integration/test_scripts.dart
@@ -2,16 +2,86 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/// A marker used in some test scripts/tests for where to set breakpoints.
+const breakpointMarker = '// BREAKPOINT';
+
 /// A simple empty Dart script that should run with no output and no errors.
 const emptyProgram = '''
   void main(List<String> args) {}
 ''';
 
+/// A simple async Dart script that when stopped at the line of '// BREAKPOINT'
+/// will contain SDK frames in the call stack.
+const sdkStackFrameProgram = '''
+  void main() {
+    [0].where((i) {
+      return i == 0; $breakpointMarker
+    }).toList();
+  }
+''';
+
+/// A simple Dart script that prints its arguments.
+const simpleArgPrintingProgram = r'''
+  void main(List<String> args) async {
+    print('Hello!');
+    print('World!');
+    print('args: $args');
+  }
+''';
+
+/// A simple async Dart script that when stopped at the line of '// BREAKPOINT'
+/// will contain multiple stack frames across some async boundaries.
+const simpleAsyncProgram = '''
+  import 'dart:async';
+
+  Future<void> main() async {
+    await one();
+  }
+
+  Future<void> one() async {
+    await two();
+  }
+
+  Future<void> two() async {
+    await three();
+  }
+
+  Future<void> three() async {
+    await Future.delayed(const Duration(microseconds: 1));
+    four();
+  }
+
+  void four() {
+    print('!'); $breakpointMarker
+  }
+''';
+
 /// A simple Dart script that should run with no errors and contains a comment
 /// marker '// BREAKPOINT' for use in tests that require stopping at a breakpoint
 /// but require no other context.
-const simpleBreakpointProgram = r'''
+const simpleBreakpointProgram = '''
   void main(List<String> args) async {
-    print('Hello!'); // BREAKPOINT
+    print('Hello!'); $breakpointMarker
   }
 ''';
+
+/// A simple Dart script that throws an error and catches it in user code.
+const simpleCaughtErrorProgram = r'''
+  void main(List<String> args) async {
+    try {
+      throw 'error';
+    } catch (e) {
+      print('Caught!');
+    }
+  }
+''';
+
+/// A simple Dart script that throws in user code.
+const simpleThrowingProgram = r'''
+  void main(List<String> args) async {
+    throw 'error';
+  }
+''';
+
+/// A marker used in some test scripts/tests for where to expected steps.
+const stepMarker = '// STEP';
diff --git a/pkg/dds/test/dap/integration/test_server.dart b/pkg/dds/test/dap/integration/test_server.dart
index dc96dc7..3e4cb72 100644
--- a/pkg/dds/test/dap/integration/test_server.dart
+++ b/pkg/dds/test/dap/integration/test_server.dart
@@ -31,8 +31,15 @@
   StreamSink<List<int>> get sink => stdinController.sink;
   Stream<List<int>> get stream => stdoutController.stream;
 
-  InProcessDapTestServer._() {
-    _server = DapServer(stdinController.stream, stdoutController.sink);
+  InProcessDapTestServer._(List<String> args) {
+    _server = DapServer(
+      stdinController.stream,
+      stdoutController.sink,
+      // Simulate flags based on the args to aid testing.
+      enableDds: !args.contains('--no-dds'),
+      ipv6: args.contains('--ipv6'),
+      enableAuthCodes: !args.contains('--no-auth-codes'),
+    );
   }
 
   @override
@@ -44,7 +51,9 @@
     Logger? logger,
     List<String>? additionalArgs,
   }) async {
-    return InProcessDapTestServer._();
+    return InProcessDapTestServer._([
+      ...?additionalArgs,
+    ]);
   }
 }
 
@@ -97,12 +106,7 @@
 
     final _process = await Process.start(
       Platform.resolvedExecutable,
-      [
-        dapServerScript,
-        'dap',
-        ...?additionalArgs,
-        if (logger != null) '--verbose'
-      ],
+      [dapServerScript, 'dap', ...?additionalArgs],
     );
 
     return OutOfProcessDapTestServer._(_process, logger);
diff --git a/pkg/dds/test/dap/integration/test_support.dart b/pkg/dds/test/dap/integration/test_support.dart
index a44a791..4c804c6 100644
--- a/pkg/dds/test/dap/integration/test_support.dart
+++ b/pkg/dds/test/dap/integration/test_support.dart
@@ -3,15 +3,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 import 'dart:io';
 
 import 'package:dds/src/dap/logging.dart';
+import 'package:dds/src/dap/protocol_generated.dart';
+import 'package:package_config/package_config.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
 import 'test_client.dart';
 import 'test_server.dart';
 
+/// A [RegExp] that matches the "Connecting to VM Service" banner that is sent
+/// by the DAP adapter as the first output event for a debug session.
+final dapVmServiceBannerPattern =
+    RegExp(r'Connecting to VM Service at ([^\s]+)\s');
+
 /// Whether to run the DAP server in-process with the tests, or externally in
 /// another process.
 ///
@@ -21,57 +29,186 @@
 /// simplified in VS Code by using a launch config with custom CodeLens links).
 final useInProcessDap = Platform.environment['DAP_TEST_INTERNAL'] == 'true';
 
+/// Whether to print all protocol traffic to stdout while running tests.
+///
+/// This is useful for debugging locally or on the bots and will include both
+/// DAP traffic (between the test DAP client and the DAP server) and the VM
+/// Service traffic (wrapped in a custom 'dart.log' event).
+final verboseLogging = Platform.environment['DAP_TEST_VERBOSE'] == 'true';
+
 /// A [RegExp] that matches the `path` part of a VM Service URI that contains
 /// an authentication token.
 final vmServiceAuthCodePathPattern = RegExp(r'^/[\w_\-=]{5,15}/ws$');
 
-/// A [RegExp] that matches the "Connecting to VM Service" banner that is sent
-/// as the first output event for a debug session.
-final vmServiceUriPattern = RegExp(r'Connecting to VM Service at ([^\s]+)\s');
+/// A [RegExp] that matches the "Observatory listening on" banner that is sent
+/// by the VM when not using --write-service-info.
+final vmServiceBannerPattern = RegExp(r'Observatory listening on ([^\s]+)\s');
 
 /// Expects [actual] to equal the lines [expected], ignoring differences in line
-/// endings.
+/// endings and trailing whitespace.
 void expectLines(String actual, List<String> expected) {
-  expect(actual.replaceAll('\r\n', '\n'), equals(expected.join('\n')));
+  expect(
+    actual.replaceAll('\r\n', '\n').trim(),
+    equals(expected.join('\n').trim()),
+  );
+}
+
+/// Expects [actual] starts with [expected], ignoring differences in line
+/// endings and trailing whitespace.
+void expectLinesStartWith(String actual, List<String> expected) {
+  expect(
+    actual.replaceAll('\r\n', '\n').trim(),
+    startsWith(expected.join('\n').trim()),
+  );
+}
+
+/// Expects [response] to fail with a `message` matching [messageMatcher].
+expectResponseError<T>(Future<T> response, Matcher messageMatcher) {
+  expect(
+    response,
+    throwsA(
+      const TypeMatcher<Response>()
+          .having((r) => r.success, 'success', isFalse)
+          .having((r) => r.message, 'message', messageMatcher),
+    ),
+  );
 }
 
 /// Returns the 1-base line in [file] that contains [searchText].
 int lineWith(File file, String searchText) =>
     file.readAsLinesSync().indexWhere((line) => line.contains(searchText)) + 1;
 
+Future<Process> startDartProcessPaused(
+  String script,
+  List<String> args, {
+  required String cwd,
+  List<String>? vmArgs,
+}) async {
+  final vmPath = Platform.resolvedExecutable;
+  vmArgs ??= [];
+  vmArgs.addAll([
+    '--enable-vm-service=0',
+    '--pause_isolates_on_start=true',
+  ]);
+  final processArgs = [
+    ...vmArgs,
+    script,
+    ...args,
+  ];
+
+  return Process.start(
+    vmPath,
+    processArgs,
+    workingDirectory: cwd,
+  );
+}
+
+/// Monitors [process] for the Observatory/VM Service banner and extracts the
+/// VM Service URI.
+Future<Uri> waitForStdoutVmServiceBanner(Process process) {
+  final _vmServiceUriCompleter = Completer<Uri>();
+
+  late StreamSubscription<String> vmServiceBannerSub;
+  vmServiceBannerSub = process.stdout.transform(utf8.decoder).listen(
+    (line) {
+      final match = vmServiceBannerPattern.firstMatch(line);
+      if (match != null) {
+        _vmServiceUriCompleter.complete(Uri.parse(match.group(1)!));
+        vmServiceBannerSub.cancel();
+      }
+    },
+    onDone: () {
+      if (!_vmServiceUriCompleter.isCompleted) {
+        _vmServiceUriCompleter.completeError('Stream ended');
+      }
+    },
+  );
+
+  return _vmServiceUriCompleter.future;
+}
+
 /// A helper class containing the DAP server/client for DAP integration tests.
 class DapTestSession {
   DapTestServer server;
   DapTestClient client;
-  final _testFolders = <Directory>[];
+  final Directory _testDir =
+      Directory.systemTemp.createTempSync('dart-sdk-dap-test');
+  late final Directory testAppDir;
+  late final Directory testPackageDir;
+  var _packageConfig = PackageConfig.empty;
 
-  DapTestSession._(this.server, this.client);
+  DapTestSession._(this.server, this.client) {
+    testAppDir = _testDir.createTempSync('app');
+    testPackageDir = _testDir.createTempSync('packages');
+  }
+
+  /// Create a simple package named `foo` that has an empty `foo` function.
+  Future<Uri> createFooPackage() {
+    return createSimplePackage(
+      'foo',
+      '''
+foo() {
+  // Does nothing.
+}
+      ''',
+    );
+  }
+
+  /// Creates a simple package script and adds the package to
+  /// .dart_tool/package_config.json
+  Future<Uri> createSimplePackage(
+    String name,
+    String content,
+  ) async {
+    final dartToolDirectory =
+        Directory(path.join(testAppDir.path, '.dart_tool'))..createSync();
+    final packageConfigJsonFile =
+        File(path.join(dartToolDirectory.path, 'package_config.json'));
+    final packageConfigJsonUri = Uri.file(packageConfigJsonFile.path);
+
+    // Write the packages Dart implementation file.
+    final testPackageDirectory = Directory(path.join(testPackageDir.path, name))
+      ..createSync(recursive: true);
+    final testFile = File(path.join(testPackageDirectory.path, '$name.dart'));
+    testFile.writeAsStringSync(content);
+
+    // Add this new package to the PackageConfig.
+    final newPackage = Package(name, Uri.file('${testPackageDirectory.path}/'));
+    _packageConfig = PackageConfig([..._packageConfig.packages, newPackage]);
+
+    // Write the PackageConfig to disk.
+    final sink = packageConfigJsonFile.openWrite();
+    PackageConfig.writeString(_packageConfig, sink, packageConfigJsonUri);
+    await sink.close();
+
+    return Uri.parse('package:$name/$name.dart');
+  }
 
   /// Creates a file in a temporary folder to be used as an application for testing.
   ///
   /// The file will be deleted at the end of the test run.
   File createTestFile(String content) {
-    final testAppDir = Directory.systemTemp.createTempSync('dart-sdk-dap-test');
-    _testFolders.add(testAppDir);
     final testFile = File(path.join(testAppDir.path, 'test_file.dart'));
     testFile.writeAsStringSync(content);
     return testFile;
   }
 
-  static Future<DapTestSession> setUp({List<String>? additionalArgs}) async {
-    final server = await _startServer(additionalArgs: additionalArgs);
-    final client = await DapTestClient.connect(server);
-    return DapTestSession._(server, client);
-  }
-
   Future<void> tearDown() async {
     await client.stop();
     await server.stop();
 
     // Clean up any temp folders created during the test runs.
-    _testFolders
-      ..forEach((dir) => dir.deleteSync(recursive: true))
-      ..clear();
+    _testDir.deleteSync(recursive: true);
+  }
+
+  static Future<DapTestSession> setUp({List<String>? additionalArgs}) async {
+    final server = await _startServer(additionalArgs: additionalArgs);
+    final client = await DapTestClient.connect(
+      server,
+      captureVmServiceTraffic: verboseLogging,
+      logger: verboseLogging ? print : null,
+    );
+    return DapTestSession._(server, client);
   }
 
   /// Starts a DAP server that can be shared across tests.
diff --git a/pkg/dds/test/get_cached_cpu_samples_script.dart b/pkg/dds/test/get_cached_cpu_samples_script.dart
new file mode 100644
index 0000000..5949574
--- /dev/null
+++ b/pkg/dds/test/get_cached_cpu_samples_script.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:developer';
+
+fib(int n) {
+  if (n <= 1) {
+    return n;
+  }
+  return fib(n - 1) + fib(n - 2);
+}
+
+void main() {
+  UserTag('Testing').makeCurrent();
+  int i = 5;
+  while (true) {
+    ++i;
+    fib(i);
+  }
+}
diff --git a/pkg/dds/test/get_cached_cpu_samples_test.dart b/pkg/dds/test/get_cached_cpu_samples_test.dart
new file mode 100644
index 0000000..77d2bdb
--- /dev/null
+++ b/pkg/dds/test/get_cached_cpu_samples_test.dart
@@ -0,0 +1,124 @@
+// 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:dds/dds.dart';
+import 'package:dds/src/utils/mutex.dart';
+import 'package:dds/vm_service_extensions.dart';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'package:vm_service/vm_service_io.dart';
+import 'common/test_helper.dart';
+
+void main() {
+  late Process process;
+  late DartDevelopmentService dds;
+
+  setUp(() async {
+    process = await spawnDartProcess(
+      'get_cached_cpu_samples_script.dart',
+    );
+  });
+
+  tearDown(() async {
+    await dds.shutdown();
+    process.kill();
+  });
+
+  test(
+    'No UserTags to cache',
+    () async {
+      dds = await DartDevelopmentService.startDartDevelopmentService(
+        remoteVmServiceUri,
+      );
+      expect(dds.isRunning, true);
+      final service = await vmServiceConnectUri(dds.wsUri.toString());
+
+      // We didn't provide `cachedUserTags` when starting DDS, so we shouldn't
+      // be caching anything.
+      final availableCaches = await service.getAvailableCachedCpuSamples();
+      expect(availableCaches.cacheNames.length, 0);
+
+      final isolate = (await service.getVM()).isolates!.first;
+
+      try {
+        await service.getCachedCpuSamples(isolate.id!, 'Fake');
+        fail('Invalid userTag did not cause an exception');
+      } on RPCError catch (e) {
+        expect(
+          e.message,
+          'CPU sample caching is not enabled for tag: "Fake"',
+        );
+      }
+    },
+    timeout: Timeout.none,
+  );
+
+  test(
+    'Cache CPU samples for provided UserTag name',
+    () async {
+      const kUserTag = 'Testing';
+      dds = await DartDevelopmentService.startDartDevelopmentService(
+        remoteVmServiceUri,
+        cachedUserTags: [kUserTag],
+      );
+      expect(dds.isRunning, true);
+      final service = await vmServiceConnectUri(dds.wsUri.toString());
+
+      // Ensure we're caching results for samples under the 'Testing' UserTag.
+      final availableCaches = await service.getAvailableCachedCpuSamples();
+      expect(availableCaches.cacheNames.length, 1);
+      expect(availableCaches.cacheNames.first, kUserTag);
+
+      final isolate = (await service.getVM()).isolates!.first;
+
+      final completer = Completer<void>();
+      int i = 0;
+      int count = 0;
+      final mutex = Mutex();
+
+      late StreamSubscription sub;
+      sub = service.onProfilerEvent.listen(
+        (event) async {
+          // Process one event at a time to prevent racey updates to count.
+          await mutex.runGuarded(
+            () async {
+              if (event.kind == EventKind.kCpuSamples &&
+                  event.isolate!.id! == isolate.id!) {
+                ++i;
+                if (i > 3) {
+                  if (!completer.isCompleted) {
+                    await sub.cancel();
+                    completer.complete();
+                  }
+                  return;
+                }
+                // Ensure the number of CPU samples in the CpuSample event is
+                // is consistent with the number of samples in the cache.
+                expect(event.cpuSamples, isNotNull);
+                count += event.cpuSamples!.samples!
+                    .where((e) => e.userTag == kUserTag)
+                    .length;
+                final cache = await service.getCachedCpuSamples(
+                  isolate.id!,
+                  availableCaches.cacheNames.first,
+                );
+                // DDS may have processed more sample blocks than we've had a chance
+                // to, so just ensure we have at least as many samples in the cache
+                // as we've seen.
+                expect(cache.sampleCount! >= count, true);
+              }
+            },
+          );
+        },
+      );
+      await service.streamListen(EventStreams.kProfiler);
+      await service.resume(isolate.id!);
+      await completer.future;
+    },
+    timeout: Timeout.none,
+  );
+}
diff --git a/pkg/dds/test/handles_exceptions_in_shelf_handlers.dart b/pkg/dds/test/handles_exceptions_in_shelf_handlers.dart
new file mode 100644
index 0000000..dda9ebd
--- /dev/null
+++ b/pkg/dds/test/handles_exceptions_in_shelf_handlers.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.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:dds/dds.dart';
+import 'package:dds/src/dds_impl.dart';
+import 'package:test/test.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+import 'common/fakes.dart';
+
+Future<HttpServer> startHttpServer() async {
+  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
+  server.listen((event) async {
+    event.response.add([1, 2, 3]);
+    await event.response.flush();
+    await server.close(force: true);
+  });
+  return server;
+}
+
+void main() {
+  webSocketBuilder = (Uri _) => FakeWebSocketChannel();
+  peerBuilder = (WebSocketChannel _, dynamic __) async => FakePeer();
+
+  test("Handles 'Connection closed before full header was received'", () async {
+    final httpServer = await startHttpServer();
+    final dds = await DartDevelopmentService.startDartDevelopmentService(
+      Uri(scheme: 'http', host: httpServer.address.host, port: httpServer.port),
+      enableAuthCodes: false,
+    );
+    final uri = dds.uri!;
+
+    try {
+      final client = HttpClient();
+      final request = await client.get(uri.host, uri.port, 'getVM');
+      await request.close();
+      fail('Unexpected successful response');
+    } catch (e) {
+      expect(
+        e.toString(),
+        contains(
+          'Connection closed before full header was received',
+        ),
+      );
+    } finally {
+      await dds.shutdown();
+      await dds.done;
+    }
+  });
+}
diff --git a/pkg/dds/test/handles_shutdown_before_startup_test.dart b/pkg/dds/test/handles_shutdown_before_startup_test.dart
index ae1b06a..5d3c110 100644
--- a/pkg/dds/test/handles_shutdown_before_startup_test.dart
+++ b/pkg/dds/test/handles_shutdown_before_startup_test.dart
@@ -24,6 +24,29 @@
   Future<void> listen() => Future.error('Connection lost');
 }
 
+class StreamListenDisconnectPeer extends FakePeer {
+  // Simulate connection disappearing while we're initializing the
+  // streamManager.
+  @override
+  Future<dynamic> sendRequest(String method, [args]) async {
+    final completer = Completer<dynamic>();
+    switch (method) {
+      case 'streamListen':
+        completer.completeError(
+          StateError('The client closed with pending request "streamListen".'),
+        );
+        // Notify listeners that this client is closed. This completer must be
+        // completed _after_ the above completer to get the proper event queue
+        // scheduling order.
+        doneCompleter.complete();
+        break;
+      default:
+        completer.complete(await super.sendRequest(method, args));
+    }
+    return completer.future;
+  }
+}
+
 // Regression test for https://github.com/flutter/flutter/issues/86361.
 void main() {
   webSocketBuilder = (Uri _) => FakeWebSocketChannel();
@@ -51,4 +74,17 @@
       /* We expect to fail to start */
     }
   });
+
+  test('Shutdown during initialization complete', () async {
+    peerBuilder =
+        (WebSocketChannel _, dynamic __) async => StreamListenDisconnectPeer();
+    try {
+      await DartDevelopmentService.startDartDevelopmentService(
+        Uri(scheme: 'http'),
+      );
+      fail('Invalid DDS instance returned');
+    } on DartDevelopmentServiceException {
+      /* We expect to fail to start */
+    }
+  });
 }
diff --git a/pkg/dds/test/regress_45569_test.dart b/pkg/dds/test/regress_45569_test.dart
index d08c9c1..a630d6a 100644
--- a/pkg/dds/test/regress_45569_test.dart
+++ b/pkg/dds/test/regress_45569_test.dart
@@ -3,10 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
+import 'dart:math';
 
 import 'package:dds/dds.dart';
 import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
 import 'package:vm_service/vm_service_io.dart';
+
 import 'common/test_helper.dart';
 
 void main() {
@@ -27,27 +30,32 @@
     process.kill();
   });
 
+  Future<void> streamSubscribeUnsubscribe(
+    VmService client, {
+    required bool delay,
+  }) async {
+    await client.streamListen('Service');
+    await Future.delayed(
+      Duration(milliseconds: delay ? Random().nextInt(200) : 0),
+    );
+    await client.streamCancel('Service');
+  }
+
   test('Ensure streamListen and streamCancel calls are handled atomically',
       () async {
-    dds = await DartDevelopmentService.startDartDevelopmentService(
-      remoteVmServiceUri,
-    );
-    expect(dds.isRunning, true);
-    final connection1 = await vmServiceConnectUri(dds.wsUri.toString());
-    final connection2 = await vmServiceConnectUri(dds.wsUri.toString());
+    for (int i = 0; i < 100; ++i) {
+      dds = await DartDevelopmentService.startDartDevelopmentService(
+        remoteVmServiceUri,
+      );
+      expect(dds.isRunning, true);
+      final connection1 = await vmServiceConnectUri(dds.wsUri.toString());
+      final connection2 = await vmServiceConnectUri(dds.wsUri.toString());
 
-    for (int i = 0; i < 50; ++i) {
-      final listenFutures = <Future>[
-        connection1.streamListen('Service'),
-        connection2.streamListen('Service'),
-      ];
-      await Future.wait(listenFutures);
-
-      final cancelFutures = <Future>[
-        connection1.streamCancel('Service'),
-        connection2.streamCancel('Service'),
-      ];
-      await Future.wait(cancelFutures);
+      await Future.wait([
+        streamSubscribeUnsubscribe(connection1, delay: true),
+        streamSubscribeUnsubscribe(connection2, delay: false),
+      ]);
+      await dds.shutdown();
     }
   });
 }
diff --git a/pkg/dds/tool/dap/codegen.dart b/pkg/dds/tool/dap/codegen.dart
index edd064b..7dee5b3 100644
--- a/pkg/dds/tool/dap/codegen.dart
+++ b/pkg/dds/tool/dap/codegen.dart
@@ -482,7 +482,7 @@
     } else if (type.isUnion) {
       final types = type.unionTypes;
 
-      // Write a check against each type, eg.:
+      // Write a check against each type, e.g.:
       // x is y ? new Either.tx(x) : (...)
       for (var i = 0; i < types.length; i++) {
         final isLast = i == types.length - 1;
diff --git a/pkg/dds/tool/dap/run_server.dart b/pkg/dds/tool/dap/run_server.dart
index cfddd48..0178e85 100644
--- a/pkg/dds/tool/dap/run_server.dart
+++ b/pkg/dds/tool/dap/run_server.dart
@@ -26,7 +26,6 @@
   static const argIpv6 = 'ipv6';
   static const argDds = 'dds';
   static const argAuthCodes = 'auth-codes';
-  static const argVerbose = 'verbose';
 
   final Stream<List<int>> _inputStream;
   final StreamSink<List<int>> _outputSink;
@@ -41,6 +40,7 @@
     argParser
       ..addFlag(
         argIpv6,
+        defaultsTo: false,
         help: 'Whether to bind DAP/VM Service/DDS to IPv6 addresses',
       )
       ..addFlag(
diff --git a/pkg/dev_compiler/lib/src/compiler/js_utils.dart b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
index f6feb7d..73aeddc 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_utils.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
@@ -44,3 +44,12 @@
     super.visitAssignment(node);
   }
 }
+
+/// Recursively clears all source information from all visited nodes.
+class SourceInformationClearer extends BaseVisitor<void> {
+  @override
+  void visitNode(Node node) {
+    node.visitChildren(this);
+    node.sourceInformation = null;
+  }
+}
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index d7acc90..49c2ff5 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -310,13 +310,16 @@
       id ??= js_ast.TemporaryId(idName);
       addSymbol(
           id,
-          js.call('#.privateName(#, #)',
-              [runtimeModule, emitLibraryName(library), js.string(name)]));
+          runtimeCall('privateName(#, #)',
+              [emitLibraryName(library), js.string(name)]));
       if (!containerizeSymbols) {
         // TODO(vsm): Change back to `const`.
         // See https://github.com/dart-lang/sdk/issues/40380.
-        moduleItems.add(js.statement('var # = #.privateName(#, #)',
-            [id, runtimeModule, emitLibraryName(library), js.string(name)]));
+        moduleItems.add(js.statement('var # = #', [
+          id,
+          runtimeCall(
+              'privateName(#, #)', [emitLibraryName(library), js.string(name)])
+        ]));
       }
       return id;
     }
@@ -492,15 +495,15 @@
       // To bootstrap the SDK, this needs to be emitted before other code.
       var symbol = js_ast.TemporaryId('_privateNames');
       items.add(js.statement('const # = Symbol("_privateNames")', symbol));
-      items.add(js.statement(r'''
-        #.privateName = function(library, name) {
+      items.add(runtimeStatement(r'''
+        privateName = function(library, name) {
           let names = library[#];
           if (names == null) names = library[#] = new Map();
           let symbol = names.get(name);
           if (symbol == null) names.set(name, symbol = Symbol(name));
           return symbol;
         }
-      ''', [runtimeModule, symbol, symbol]));
+      ''', [symbol, symbol]));
     }
 
     return items;
@@ -689,9 +692,9 @@
 
     // Track the module name for each library in the module.
     // This data is only required for debugging.
-    moduleItems.add(js.statement(
-        '#.trackLibraries(#, #, #, $sourceMapLocationID);',
-        [runtimeModule, js.string(name), module, partMap]));
+    moduleItems.add(runtimeStatement(
+        'trackLibraries(#, #, #, $sourceMapLocationID)',
+        [js.string(name), module, partMap]));
   }
 
   /// Returns an accessor for [id] via the symbol container.
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index e777ddf..102b0e8 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -8,6 +8,8 @@
 import 'dart:convert';
 import 'dart:math' show max, min;
 
+import 'package:front_end/src/fasta/kernel/constructor_tearoff_lowering.dart'
+    show isTearOffLowering;
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
@@ -392,7 +394,7 @@
 
     var items = startModule(libraries);
     _nullableInference.allowNotNullDeclarations = isBuildingSdk;
-    _typeTable = TypeTable(runtimeModule);
+    _typeTable = TypeTable(runtimeCall);
 
     // Collect all class/type Element -> Node mappings
     // in case we need to forward declare any classes.
@@ -712,8 +714,10 @@
     var jsPeerNames = _extensionTypes.getNativePeers(c);
     if (jsPeerNames.length == 1 && c.typeParameters.isNotEmpty) {
       // Special handling for JSArray<E>
-      body.add(runtimeStatement('setExtensionBaseClass(#, #.global.#)',
-          [className, runtimeModule, jsPeerNames[0]]));
+      body.add(runtimeStatement('setExtensionBaseClass(#, #)', [
+        className,
+        runtimeCall('global.#', [jsPeerNames[0]])
+      ]));
     }
 
     var finishGenericTypeTest = _emitClassTypeTests(c, className, body);
@@ -876,9 +880,9 @@
       arrowFnBody = js_ast.Block(extensionInit);
     }
 
-    body.add(js.statement('#[#.mixinOn] = #', [
+    body.add(js.statement('#[#] = #', [
       className,
-      runtimeModule,
+      runtimeCall('mixinOn'),
       js_ast.ArrowFun([superclassId], arrowFnBody)
     ]));
   }
@@ -1125,13 +1129,29 @@
       var mixinName =
           getLocalClassName(superclass) + '_' + getLocalClassName(mixinClass);
       var mixinId = _emitTemporaryId(mixinName + '\$');
-      // Collect all forwarding stubs from anonymous mixins classes. These will
-      // contain covariant parameter checks that need to be applied.
-      var forwardingMethodStubs = [
+      // Collect all forwarding stub setters from anonymous mixins classes.
+      // These will contain covariant parameter checks that need to be applied.
+      var savedClassProperties = _classProperties;
+      _classProperties =
+          ClassPropertyModel.build(_types, _extensionTypes, _virtualFields, m);
+
+      var forwardingSetters = {
         for (var procedure in m.procedures)
           if (procedure.isForwardingStub && !procedure.isAbstract)
-            _emitMethodDeclaration(procedure)
-      ];
+            procedure.name.text: procedure
+      };
+
+      var forwardingMethodStubs = <js_ast.Method>[];
+      for (var s in forwardingSetters.values) {
+        forwardingMethodStubs.add(_emitMethodDeclaration(s));
+        // If there are getters matching the setters somewhere above in the
+        // class hierarchy we must also generate a forwarding getter due to the
+        // representation used in the compiled JavaScript.
+        var getterWrapper = _emitSuperAccessorWrapper(s, {}, forwardingSetters);
+        if (getterWrapper != null) forwardingMethodStubs.add(getterWrapper);
+      }
+
+      _classProperties = savedClassProperties;
 
       // Bind the mixin class to a name to workaround a V8 bug with es6 classes
       // and anonymous function names.
@@ -1339,8 +1359,7 @@
       var names = extensions
           .map((e) => propertyName(js_ast.memberNameForDartMember(e)))
           .toList();
-      body.add(js.statement('#.#(#, #);', [
-        runtimeModule,
+      body.add(runtimeStatement('#(#, #)', [
         helperName,
         className,
         js_ast.ArrayInitializer(names, multiline: names.length > 4)
@@ -1361,9 +1380,9 @@
     var interfaces = c.implementedTypes.toList()
       ..addAll(c.superclassConstraints());
     if (interfaces.isNotEmpty) {
-      body.add(js.statement('#[#.implements] = () => [#];', [
+      body.add(js.statement('#[#] = () => [#];', [
         className,
-        runtimeModule,
+        runtimeCall('implements'),
         interfaces.map((i) =>
             _emitInterfaceType(i.asInterfaceType, emitNullability: false))
       ]));
@@ -1786,11 +1805,14 @@
     if (c == _coreTypes.objectClass) {
       // Dart does not use ES6 constructors.
       // Add an error to catch any invalid usage.
-      jsMethods.add(
-          js_ast.Method(propertyName('constructor'), js.fun(r'''function() {
-                  throw Error("use `new " + #.typeName(#.getReifiedType(this)) +
-                      ".new(...)` to create a Dart object");
-              }''', [runtimeModule, runtimeModule])));
+      jsMethods.add(js_ast.Method(
+          propertyName('constructor'),
+          js.fun(r'''function() {
+                throw Error("use `new " + # +
+                    ".new(...)` to create a Dart object");
+              }''', [
+            runtimeCall('typeName(#)', [runtimeCall('getReifiedType(this)')])
+          ])));
     } else if (c == _jsArrayClass) {
       // Provide access to the Array constructor property, so it works like
       // other native types (rather than calling the Dart Object "constructor"
@@ -1914,11 +1936,20 @@
       fn = _emitFunction(member.function, member.name.text);
     }
 
-    return js_ast.Method(_declareMemberName(member), fn,
+    var method = js_ast.Method(_declareMemberName(member), fn,
         isGetter: member.isGetter,
         isSetter: member.isSetter,
-        isStatic: member.isStatic)
-      ..sourceInformation = _nodeEnd(member.fileEndOffset);
+        isStatic: member.isStatic);
+
+    if (isTearOffLowering(member)) {
+      // Remove all source information from static methods introduced by the
+      // constructor tearoff CFE lowering.
+      method.accept(js_ast.SourceInformationClearer());
+    } else {
+      method.sourceInformation = _nodeEnd(member.fileEndOffset);
+    }
+
+    return method;
   }
 
   js_ast.Fun _emitNativeFunctionBody(Procedure node) {
@@ -2191,6 +2222,8 @@
     // an ES6 iterator.
     return js_ast.Method(
         js.call('Symbol.iterator'),
+        // TODO(nshahan) Don't access values in `runtimeModule` outside of
+        // `runtimeCall`.
         js.call('function() { return new #.JsIterator(this.#); }', [
           runtimeModule,
           _emitMemberName('iterator', memberClass: _coreTypes.iterableClass)
@@ -2376,7 +2409,11 @@
     // Static members skip the rename steps and may require JS interop renames.
     if (isStatic) {
       var memberName = _emitStaticMemberName(name, member);
-      memberNames[member] = memberName.valueWithoutQuotes;
+      if (!isTearOffLowering(member)) {
+        // No need to track the names of methods that were created by the CFE
+        // lowering and don't exist in the original source code.
+        memberNames[member] = memberName.valueWithoutQuotes;
+      }
       return memberName;
     }
 
@@ -2889,8 +2926,9 @@
     // underlying type for type checks, so they operate virtually the same as
     // anonymous types. We represent package:js types with a corresponding type
     // object.
-    var jsName = isJSAnonymousType(c) ?
-        getLocalClassName(c) : _emitJsNameWithoutGlobal(c);
+    var jsName = isJSAnonymousType(c)
+        ? getLocalClassName(c)
+        : _emitJsNameWithoutGlobal(c);
     if (jsName != null) {
       typeRep = runtimeCall('packageJSType(#)', [js.escapedString(jsName)]);
     }
@@ -3592,13 +3630,14 @@
         // Get the best available location even if the offset is missing.
         // https://github.com/dart-lang/sdk/issues/34942
         var location = p.location;
-        var check = js.statement(' if (#) #.nullFailed(#, #, #, #);', [
+        var check = js.statement(' if (#) #;', [
           condition,
-          runtimeModule,
-          _cacheUri(location?.file?.toString()),
-          js.number(location?.line ?? -1),
-          js.number(location?.column ?? -1),
-          js.escapedString('${p.name}'),
+          runtimeCall('nullFailed(#, #, #, #)', [
+            _cacheUri(location?.file?.toString()),
+            js.number(location?.line ?? -1),
+            js.number(location?.column ?? -1),
+            js.escapedString('${p.name}')
+          ])
         ]);
         body.add(check);
       }
@@ -3927,18 +3966,19 @@
     var conditionSource =
         source.substring(node.conditionStartOffset, node.conditionEndOffset);
     var location = _toSourceLocation(node.conditionStartOffset);
-    return js.statement(' if (!#) #.assertFailed(#, #, #, #, #);', [
+    return js.statement(' if (!#) #;', [
       jsCondition,
-      runtimeModule,
-      if (node.message == null)
-        js_ast.LiteralNull()
-      else
-        _visitExpression(node.message),
-      _cacheUri(location.sourceUrl.toString()),
-      // Lines and columns are typically printed with 1 based indexing.
-      js.number(location.line + 1),
-      js.number(location.column + 1),
-      js.escapedString(conditionSource),
+      runtimeCall('assertFailed(#, #, #, #, #)', [
+        if (node.message == null)
+          js_ast.LiteralNull()
+        else
+          _visitExpression(node.message),
+        _cacheUri(location.sourceUrl.toString()),
+        // Lines and columns are typically printed with 1 based indexing.
+        js.number(location.line + 1),
+        js.number(location.column + 1),
+        js.escapedString(conditionSource),
+      ])
     ]);
   }
 
@@ -4351,16 +4391,14 @@
           clause, catchBody, exceptionParameter, stackTraceParameter);
     }
     var catchStatements = [
-      js.statement('let # = #.getThrown(#)', [
+      js.statement('let # = #', [
         _emitVariableDef(exceptionParameter),
-        runtimeModule,
-        _emitVariableRef(caughtError)
+        runtimeCall('getThrown(#)', [_emitVariableRef(caughtError)])
       ]),
       if (stackTraceParameter != null)
-        js.statement('let # = #.stackTrace(#)', [
+        js.statement('let # = #', [
           _emitVariableDef(stackTraceParameter),
-          runtimeModule,
-          _emitVariableRef(caughtError)
+          runtimeCall('stackTrace(#)', [_emitVariableRef(caughtError)])
         ]),
       catchBody,
     ];
@@ -5217,8 +5255,10 @@
     // a measurable performance effect (possibly the helper is simple enough to
     // be inlined).
     if (isNullable(left)) {
-      return js.call(negated ? '!#.equals(#, #)' : '#.equals(#, #)',
-          [runtimeModule, _visitExpression(left), _visitExpression(right)]);
+      return js.call(negated ? '!#' : '#', [
+        runtimeCall(
+            'equals(#, #)', [_visitExpression(left), _visitExpression(right)])
+      ]);
     }
 
     // Otherwise we emit a call to the == method.
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 86a0cc2..06310f6 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -83,6 +83,8 @@
   final ModuleFormat _moduleFormat;
   final Component _sdkComponent;
 
+  void Function() onDone;
+
   ExpressionCompilerWorker._(
     this._processedOptions,
     this._compilerOptions,
@@ -90,6 +92,7 @@
     this._sdkComponent,
     this.requestStream,
     this.sendResponse,
+    this.onDone,
   );
 
   /// Create expression compiler worker from [args] and start it.
@@ -140,6 +143,7 @@
     }
   }
 
+  /// Parse args and create the worker, hook cleanup code to run when done.
   static Future<ExpressionCompilerWorker> createFromArgs(
     List<String> args, {
     Stream<Map<String, dynamic>> requestStream,
@@ -186,6 +190,9 @@
       verbose: parsedArgs['verbose'] as bool,
       requestStream: requestStream,
       sendResponse: sendResponse,
+      onDone: () {
+        if (fileSystem is AssetFileSystem) fileSystem.close();
+      },
     );
   }
 
@@ -209,6 +216,7 @@
     Stream<Map<String, dynamic>> requestStream, // Defaults to read from stdin
     void Function(Map<String, dynamic>)
         sendResponse, // Defaults to write to stdout
+    void Function() onDone,
   }) async {
     var compilerOptions = CompilerOptions()
       ..compileSdk = false
@@ -241,7 +249,7 @@
       throw Exception('Could not load SDK component: $sdkSummary');
     }
     return ExpressionCompilerWorker._(processedOptions, compilerOptions,
-        moduleFormat, sdkComponent, requestStream, sendResponse)
+        moduleFormat, sdkComponent, requestStream, sendResponse, onDone)
       .._updateCache(sdkComponent, dartSdkModule, true);
   }
 
@@ -281,10 +289,7 @@
     _processedOptions.ticker.logMs('Stopped expression compiler worker.');
   }
 
-  void close() {
-    var fileSystem = _processedOptions?.fileSystem;
-    if (fileSystem != null && fileSystem is AssetFileSystem) fileSystem.close();
-  }
+  void close() => onDone?.call();
 
   /// Handles a `CompileExpression` request.
   Future<Map<String, dynamic>> _compileExpression(
diff --git a/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart b/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
index acb2bcd..7c77325e 100644
--- a/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
+++ b/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.9
 
+import 'package:front_end/src/fasta/kernel/constructor_tearoff_lowering.dart'
+    show isTearOffLowering;
 import 'package:kernel/kernel.dart';
 
 import 'module_symbols.dart';
@@ -143,7 +145,10 @@
   void visitProcedure(Procedure node) {
     // Legacy libraries contain procedures with no bodies for all Object methods
     // in every class. We can ignore these unless they actually contain a body.
-    if (node.function.body == null) return;
+    //
+    // Also avoid adding information for the static methods introduced by the
+    // CFE lowering for constructor tearoffs.
+    if (node.function.body == null || isTearOffLowering(node)) return;
     var functionSymbol = FunctionSymbol(
         name: node.name.text,
         // TODO(nshahan) typeId - probably should canonicalize but keep original
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 1beb7d8..8468f28 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -48,7 +48,7 @@
   bool get supportsExplicitGetterCalls => false;
 
   @override
-  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.none;
+  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.all;
 
   @override
   String get name => 'dartdevc';
diff --git a/pkg/dev_compiler/lib/src/kernel/type_table.dart b/pkg/dev_compiler/lib/src/kernel/type_table.dart
index b9833db..54a7d17 100644
--- a/pkg/dev_compiler/lib/src/kernel/type_table.dart
+++ b/pkg/dev_compiler/lib/src/kernel/type_table.dart
@@ -112,9 +112,9 @@
   final typeContainer = ModuleItemContainer<DartType>.asObject('T',
       keyToString: (DartType t) => escapeIdentifier(_typeString(t)));
 
-  final js_ast.Identifier _runtimeModule;
+  final js_ast.Expression Function(String, [List<Object>]) _runtimeCall;
 
-  TypeTable(this._runtimeModule);
+  TypeTable(this._runtimeCall);
 
   /// Returns true if [type] is already recorded in the table.
   bool _isNamed(DartType type) =>
@@ -135,8 +135,10 @@
   List<js_ast.Statement> dischargeBoundTypes() {
     js_ast.Expression emitValue(DartType t, ModuleItemData data) {
       var access = js.call('#.#', [data.id, data.jsKey]);
-      return js.call('() => ((# = #.constFn(#))())',
-          [access, _runtimeModule, data.jsValue]);
+      return js.call('() => ((# = #)())', [
+        access,
+        _runtimeCall('constFn(#)', [data.jsValue])
+      ]);
     }
 
     var boundTypes = typeContainer.emit(emitValue: emitValue);
@@ -153,8 +155,11 @@
     var id = _unboundTypeIds[type];
     // TODO(vsm): Change back to `let`.
     // See https://github.com/dart-lang/sdk/issues/40380.
-    return js.statement('var # = () => ((# = #.constFn(#))());',
-        [id, id, _runtimeModule, init]);
+    return js.statement('var # = () => ((# = #)());', [
+      id,
+      id,
+      _runtimeCall('constFn(#)', [init])
+    ]);
   }
 
   /// Emit a list of statements declaring the cache variables and generator
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.dart
new file mode 100644
index 0000000..9b56991
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.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.9
+
+library dev_compiler.test.expression_compiler;
+
+import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
+import 'package:test/test.dart';
+import 'expression_compiler_e2e_shared.dart';
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+  var driver = await TestDriver.init();
+
+  group('(Sound null safety)', () {
+    tearDownAll(() async {
+      await driver.finish();
+    });
+
+    group('(AMD module system)', () {
+      var setup = SetupCompilerOptions(
+          soundNullSafety: true, moduleFormat: ModuleFormat.amd);
+      runSharedTests(setup, driver);
+    });
+  });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.dart
new file mode 100644
index 0000000..92a7c96
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.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.9
+
+library dev_compiler.test.expression_compiler;
+
+import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
+import 'package:test/test.dart';
+import 'expression_compiler_e2e_shared.dart';
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+  var driver = await TestDriver.init();
+
+  group('(Unsound null safety)', () {
+    tearDownAll(() async {
+      await driver.finish();
+    });
+
+    group('(AMD module system)', () {
+      var setup = SetupCompilerOptions(
+          soundNullSafety: false, moduleFormat: ModuleFormat.amd);
+      runSharedTests(setup, driver);
+    });
+  });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.dart
new file mode 100644
index 0000000..682327e
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.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.9
+
+library dev_compiler.test.expression_compiler;
+
+import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
+import 'package:test/test.dart';
+import 'expression_compiler_e2e_shared.dart';
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+  var driver = await TestDriver.init();
+
+  group('(Sound null safety)', () {
+    tearDownAll(() async {
+      await driver.finish();
+    });
+
+    group('(DDC module system)', () {
+      var setup = SetupCompilerOptions(
+          soundNullSafety: true, moduleFormat: ModuleFormat.ddc);
+      runSharedTests(setup, driver);
+    });
+  });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.dart
new file mode 100644
index 0000000..21bc460
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.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.9
+
+library dev_compiler.test.expression_compiler;
+
+import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
+import 'package:test/test.dart';
+import 'expression_compiler_e2e_shared.dart';
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+  var driver = await TestDriver.init();
+
+  group('(Unsound null safety)', () {
+    tearDownAll(() async {
+      await driver.finish();
+    });
+
+    group('(DDC module system)', () {
+      var setup = SetupCompilerOptions(
+          soundNullSafety: false, moduleFormat: ModuleFormat.ddc);
+      runSharedTests(setup, driver);
+    });
+  });
+}
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 40f3f36..be6d857 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
@@ -173,15 +173,15 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
       await driver.check(
           breakpointId: 'bp',
           expression: 'typo',
-          expectedError: "Error: Getter not found: 'typo'");
+          expectedError: "Error: Undefined name 'typo'");
     });
 
     test('local (trimmed scope)', () async {
@@ -215,15 +215,15 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
       await driver.check(
           breakpointId: 'bp',
           expression: 'typo',
-          expectedError: "Getter not found: \'typo\'");
+          expectedError: "Undefined name \'typo\'");
     });
 
     test('local', () async {
@@ -257,8 +257,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -366,15 +366,15 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
       await driver.check(
           breakpointId: 'globalFunctionBP',
           expression: 'typo',
-          expectedError: "Getter not found: 'typo'.");
+          expectedError: "Undefined name 'typo'.");
     });
 
     test('local with primitive type', () async {
@@ -501,8 +501,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -649,8 +649,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -712,15 +712,15 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
       await driver.check(
           breakpointId: 'bp',
           expression: 'typo',
-          expectedError: "Getter not found: 'typo'.");
+          expectedError: "Undefined name 'typo'.");
     });
 
     test('expression using captured variables', () async {
@@ -780,8 +780,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('call function not using type', () async {
@@ -840,8 +840,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('expression using local', () async {
@@ -881,8 +881,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('(then) expression using local', () async {
@@ -894,7 +894,7 @@
       await driver.check(
           breakpointId: 'thenBP',
           expression: 'z',
-          expectedError: "Error: Getter not found: 'z'");
+          expectedError: "Error: Undefined name 'z'");
     });
 
     test('(else) expression using local', () async {
@@ -906,7 +906,7 @@
       await driver.check(
           breakpointId: 'elseBP',
           expression: 'y',
-          expectedError: "Error: Getter not found: 'y'");
+          expectedError: "Error: Undefined name 'y'");
     });
 
     test('(post) expression using local', () async {
@@ -918,14 +918,14 @@
       await driver.check(
           breakpointId: 'postBP',
           expression: 'z',
-          expectedError: "Error: Getter not found: 'z'");
+          expectedError: "Error: Undefined name 'z'");
     });
 
     test('(post) expression using local out of scope', () async {
       await driver.check(
           breakpointId: 'postBP',
           expression: 'y',
-          expectedError: "Error: Getter not found: 'y'");
+          expectedError: "Error: Undefined name 'y'");
     });
   });
 
@@ -948,8 +948,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('expression loop variable', () async {
@@ -975,8 +975,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('evaluate formals', () async {
@@ -1020,8 +1020,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('evaluation that non-destructively appends to the type container',
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
deleted file mode 100644
index 9db3279..0000000
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
+++ /dev/null
@@ -1,34 +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.
-
-// @dart = 2.9
-
-library dev_compiler.test.expression_compiler;
-
-import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
-import 'package:test/test.dart';
-import 'expression_compiler_e2e_shared.dart';
-import 'expression_compiler_e2e_suite.dart';
-
-void main() async {
-  var driver = await TestDriver.init();
-
-  group('(Sound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
-    });
-
-    group('(AMD module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: true, moduleFormat: ModuleFormat.amd);
-      runSharedTests(setup, driver);
-    });
-
-    group('(DDC module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: true, moduleFormat: ModuleFormat.ddc);
-      runSharedTests(setup, driver);
-    });
-  });
-}
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 7300029..a20eb79 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
@@ -107,22 +107,23 @@
 
 class TestCompiler {
   final SetupCompilerOptions setup;
-  Component component;
-  ExpressionCompiler evaluator;
-  ModuleMetadata metadata;
-  source_maps.SingleMapping sourceMap;
+  final Component component;
+  final ExpressionCompiler evaluator;
+  final ModuleMetadata metadata;
+  final source_maps.SingleMapping sourceMap;
 
-  TestCompiler(this.setup);
+  TestCompiler._(this.setup, this.component, this.evaluator, this.metadata,
+      this.sourceMap);
 
-  Future<TestCompiler> init({Uri input, Uri output, Uri packages}) async {
+  static Future<TestCompiler> init(SetupCompilerOptions setup,
+      {Uri input, Uri output, Uri packages}) async {
     // Initialize the incremental compiler and module component.
     // TODO: extend this for multi-module compilations by storing separate
     // compilers/components/names per module.
     setup.options.packagesFileUri = packages;
     var compiler = DevelopmentIncrementalCompiler(setup.options, input);
-    component = await compiler.computeDelta();
+    var component = await compiler.computeDelta();
     component.computeCanonicalNames();
-
     // Initialize DDC.
     var moduleName = '${p.basenameWithoutExtension(output.toFilePath())}';
 
@@ -158,8 +159,6 @@
       compiler: kernel2jsCompiler,
       component: component,
     );
-    metadata = code.metadata;
-    sourceMap = source_maps.SingleMapping.fromJson(code.sourceMap);
     var codeBytes = utf8.encode(code.code);
     var sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
 
@@ -167,7 +166,7 @@
     File('${output.toFilePath()}.map').writeAsBytesSync(sourceMapBytes);
 
     // Save the expression evaluator for future evaluations.
-    evaluator = ExpressionCompiler(
+    var evaluator = ExpressionCompiler(
       setup.options,
       setup.moduleFormat,
       setup.errors,
@@ -181,7 +180,9 @@
     }
     setup.diagnosticMessages.clear();
 
-    return this;
+    var sourceMap = source_maps.SingleMapping.fromJson(code.sourceMap);
+    return TestCompiler._(
+        setup, component, evaluator, code.metadata, sourceMap);
   }
 
   Future<TestCompilationResult> compileExpression(
@@ -212,45 +213,61 @@
 }
 
 class TestDriver {
-  SetupCompilerOptions setup;
-  String source;
-  Directory chromeDir;
-  Directory testDir;
-  String moduleFormatString;
+  final browser.Chrome chrome;
+  final Directory chromeDir;
+  final wip.WipConnection connection;
+  final wip.WipDebugger debugger;
+  TestCompiler compiler;
   Uri htmlBootstrapper;
   Uri input;
+  String moduleFormatString;
   Uri output;
   Uri packagesFile;
-  browser.Chrome chrome;
-  wip.WipDebugger debugger;
-  wip.WipConnection connection;
-  TestCompiler compiler;
+  String preemptiveBp;
+  SetupCompilerOptions setup;
+  String source;
+  Directory testDir;
 
-  TestDriver._();
-
-  static Future<TestDriver> init() async {
-    var driver = TestDriver._();
-    await driver.initChrome();
-    return driver;
-  }
+  TestDriver._(this.chrome, this.chromeDir, this.connection, this.debugger);
 
   /// Initializes a Chrome browser instance, tab connection, and debugger.
-  ///
-  /// Should be called once after creating TestDriver.
-  Future<void> initChrome() async {
+  static Future<TestDriver> init() async {
     // Create a temporary directory for holding Chrome tests.
-    var systemTempDir = Directory.systemTemp;
-    chromeDir = await systemTempDir.createTemp('ddc_eval_test_anchor');
+    var chromeDir = Directory.systemTemp.createTempSync('ddc_eval_test_anchor');
 
-    // Start Chrome on an empty page with a single empty tab.
-    chrome = await browser.Chrome.startWithDebugPort(['about:blank'],
-        userDataDir: chromeDir.uri.toFilePath(), headless: true);
+    // Try to start Chrome on an empty page with a single empty tab.
+    // TODO(#45713): Headless Chrome crashes the Windows bots, so run in
+    // standard mode until it's fixed.
+    browser.Chrome chrome;
+    var retries = 3;
+    while (chrome == null && retries-- > 0) {
+      try {
+        chrome = await browser.Chrome.startWithDebugPort(['about:blank'],
+            userDataDir: chromeDir.uri.toFilePath(),
+            headless: !Platform.isWindows);
+      } catch (e) {
+        if (retries == 0) rethrow;
+        await Future.delayed(Duration(seconds: 5));
+      }
+    }
 
     // Connect to the first 'normal' tab.
     var tab = await chrome.chromeConnection
         .getTab((tab) => !tab.isBackgroundPage && !tab.isChromeExtension);
-    connection = await tab.connect();
-    debugger = connection.debugger;
+    if (tab == null) {
+      throw Exception('Unable to connect to Chrome tab');
+    }
+
+    var connection = await tab.connect().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to connect to WIP tab'));
+
+    await connection.page.enable().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to enable WIP tab page'));
+
+    var debugger = connection.debugger;
+    await debugger.enable().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to enable WIP debugger'));
+    return TestDriver._(chrome, chromeDir, connection, debugger);
   }
 
   /// Must be called when testing a new Dart program.
@@ -268,7 +285,7 @@
     source = '${setup.dartLangComment}\n\n$source';
     this.setup = setup;
     this.source = source;
-    testDir = await chromeDir.createTemp('ddc_eval_test');
+    testDir = chromeDir.createTempSync('ddc_eval_test');
     var buildDir = p.dirname(p.dirname(p.dirname(Platform.resolvedExecutable)));
     var scriptPath = Platform.script.normalizePath().toFilePath();
     var ddcPath = p.dirname(p.dirname(p.dirname(scriptPath)));
@@ -295,8 +312,8 @@
       ''');
 
     // Initialize DDC and the incremental compiler, then perform a full compile.
-    compiler = await TestCompiler(setup)
-        .init(input: input, output: output, packages: packagesFile);
+    compiler = await TestCompiler.init(setup,
+        input: input, output: output, packages: packagesFile);
 
     htmlBootstrapper = testDir.uri.resolve('bootstrapper.html');
     var bootstrapFile = File(htmlBootstrapper.toFilePath())..createSync();
@@ -314,6 +331,9 @@
             setup.soundNullSafety ? 'sound' : 'kernel',
             'legacy',
             'dart_sdk.js'));
+        if (!File(dartSdkPath).existsSync()) {
+          throw Exception('Unable to find Dart SDK at $dartSdkPath');
+        }
         var dartLibraryPath =
             escaped(p.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js'));
         var outputPath = output.toFilePath();
@@ -341,6 +361,9 @@
         moduleFormatString = 'amd';
         var dartSdkPath = escaped(p.join(buildDir, 'gen', 'utils', 'dartdevc',
             setup.soundNullSafety ? 'sound' : 'kernel', 'amd', 'dart_sdk'));
+        if (!File('$dartSdkPath.js').existsSync()) {
+          throw Exception('Unable to find Dart SDK at $dartSdkPath.js');
+        }
         var requirePath = escaped(p.join(buildDir, 'dart-sdk', 'lib',
             'dev_compiler', 'kernel', 'amd', 'require.js'));
         var outputPath = escaped(p.withoutExtension(output.toFilePath()));
@@ -378,27 +401,30 @@
             'Unsupported module format for SDK evaluation tests: ${setup.moduleFormat}');
     }
 
-    await debugger.enable();
+    await setBreakpointsActive(debugger, true);
 
     // Pause as soon as the test file loads but before it executes.
     var urlRegex = '.*${libraryUriToJsIdentifier(output)}.*';
-    await debugger.sendCommand('Debugger.setBreakpointByUrl', params: {
+    var bpResponse =
+        await debugger.sendCommand('Debugger.setBreakpointByUrl', params: {
       'urlRegex': urlRegex,
       'lineNumber': 0,
     });
+    preemptiveBp = wip.SetBreakpointResponse(bpResponse.json).breakpointId;
   }
 
-  void finish() async {
+  Future<void> finish() async {
     await chrome?.close();
     // Chrome takes a while to free its claim on chromeDir, so wait a bit.
-    await Future.delayed(const Duration(milliseconds: 500));
+    await Future.delayed(Duration(milliseconds: 500));
     chromeDir?.deleteSync(recursive: true);
   }
 
   Future<void> cleanupTest() async {
+    await setBreakpointsActive(debugger, false);
+    await debugger.removeBreakpoint(preemptiveBp);
     setup.diagnosticMessages.clear();
     setup.errors.clear();
-    await debugger.disable();
   }
 
   Future<void> check(
@@ -424,11 +450,14 @@
 
     // Navigate from the empty page and immediately pause on the preemptive
     // breakpoint.
-    await connection.page.navigate('$htmlBootstrapper');
+    await connection.page.navigate('$htmlBootstrapper').timeout(
+        Duration(seconds: 5),
+        onTimeout: () => throw Exception(
+            'Unable to navigate to page bootstrap script: $htmlBootstrapper'));
 
     // Poll until the script is found, or timeout after a few seconds.
     var script = (await scriptController.stream.first.timeout(
-            const Duration(seconds: 5),
+            Duration(seconds: 5),
             onTimeout: () => throw Exception(
                 'Unable to find JS script corresponding to test file $output in ${debugger.scripts}.')))
         .script;
@@ -446,11 +475,11 @@
     await debugger.resume();
     final event = await pauseController.stream
         .skip(1)
-        .timeout(const Duration(seconds: 5),
+        .timeout(Duration(seconds: 5),
             onTimeout: (event) => throw Exception(
                 'Unable to find JS preemptive pause event in $output.'))
         .first
-        .timeout(const Duration(seconds: 5),
+        .timeout(Duration(seconds: 5),
             onTimeout: () => throw Exception(
                 'Unable to find JS pause event corresponding to line ($dartLine -> $location) in $output.'));
     await pauseSub.cancel();
@@ -490,6 +519,9 @@
     await debugger.removeBreakpoint(bp.breakpointId);
     var value = await stringifyRemoteObject(evalResult);
 
+    // Resume execution to the end of the current script
+    await debugger.resume();
+
     expect(
         result,
         const TypeMatcher<TestCompilationResult>()
@@ -614,3 +646,10 @@
 }
 
 String escaped(String path) => path.replaceAll('\\', '\\\\');
+
+Future setBreakpointsActive(wip.WipDebugger debugger, bool active) async {
+  await debugger.sendCommand('Debugger.setBreakpointsActive', params: {
+    'active': active
+  }).timeout(Duration(seconds: 5),
+      onTimeout: () => throw Exception('Unable to set breakpoint activity'));
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
deleted file mode 100644
index 72df6f5..0000000
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
+++ /dev/null
@@ -1,34 +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.
-
-// @dart = 2.9
-
-library dev_compiler.test.expression_compiler;
-
-import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
-import 'package:test/test.dart';
-import 'expression_compiler_e2e_shared.dart';
-import 'expression_compiler_e2e_suite.dart';
-
-void main() async {
-  var driver = await TestDriver.init();
-
-  group('(Unsound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
-    });
-
-    group('(AMD module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: false, moduleFormat: ModuleFormat.amd);
-      runSharedTests(setup, driver);
-    });
-
-    group('(DDC module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: false, moduleFormat: ModuleFormat.ddc);
-      runSharedTests(setup, driver);
-    });
-  });
-}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
index c54916b..8bf3653 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
@@ -895,6 +895,7 @@
   Future<void> stop() async {
     server.stop();
     await super.stop();
+    (assetFileSystem as AssetFileSystem).close();
   }
 }
 
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index e63b928..47f9e8d 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -65,7 +65,8 @@
   });
 
   test('this', () async {
-    await expectNotNull('class C { m() { return this; } }', 'this');
+    await expectNotNull(
+        'library a; class C { m() { return this; } }', 'this, new a::C()');
   });
 
   test('is', () async {
@@ -80,7 +81,7 @@
 
   test('constructor', () async {
     await expectNotNull(
-        'library a; class C {} main() { new C(); }', 'new a::C()');
+        'library a; class C {} main() { new C(); }', 'new a::C(), new a::C()');
   });
 
   group('operator', () {
@@ -490,7 +491,7 @@
       await expectNotNull(
           'library b; $imports class C { @notNull m() {} } '
               'main() { var c = new C(); c.m(); }',
-          'new b::C(), c.{b::C.m}(), c');
+          'new b::C(), new b::C(), c.{b::C.m}(), c');
     });
   });
 }
diff --git a/pkg/front_end/PRESUBMIT.py b/pkg/front_end/PRESUBMIT.py
index 8f25cd2..0a04904 100644
--- a/pkg/front_end/PRESUBMIT.py
+++ b/pkg/front_end/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # 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.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/pkg/front_end/analysis_options.yaml b/pkg/front_end/analysis_options.yaml
index 21d20ef..b82914b 100644
--- a/pkg/front_end/analysis_options.yaml
+++ b/pkg/front_end/analysis_options.yaml
@@ -18,4 +18,6 @@
     - package_api_docs
     - lines_longer_than_80_chars
     - unrelated_type_equality_checks
+    - annotate_overrides
+    - always_declare_return_types
     # - always_specify_types
diff --git a/pkg/front_end/benchmarks/ikg/dart2js.dart b/pkg/front_end/benchmarks/ikg/dart2js.dart
index 3877ff2..004709e 100644
--- a/pkg/front_end/benchmarks/ikg/dart2js.dart
+++ b/pkg/front_end/benchmarks/ikg/dart2js.dart
@@ -6,4 +6,4 @@
 
 import 'package:compiler/src/dart2js.dart' as dart2js;
 
-main(args) => dart2js.main(args);
+void main(args) => dart2js.main(args);
diff --git a/pkg/front_end/benchmarks/ikg/hello.dart b/pkg/front_end/benchmarks/ikg/hello.dart
index dca2fae..f4591c1 100644
--- a/pkg/front_end/benchmarks/ikg/hello.dart
+++ b/pkg/front_end/benchmarks/ikg/hello.dart
@@ -2,4 +2,4 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-main() => print('hello world');
+void main() => print('hello world');
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
index 9220790..379c5ac 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -47,19 +47,11 @@
 ///
 /// If [explicitExperimentalFlags] is `null` or doesn't contain [flag], the
 /// default value from [defaultExperimentalFlags] is returned.
-///
-/// If [flag] is marked as expired in [expiredExperimentalFlags], the value from
-/// [defaultExperimentalFlags] is always returned.
 bool isExperimentEnabled(ExperimentalFlag flag,
     {Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
     Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting}) {
   assert(defaultExperimentalFlags.containsKey(flag),
       "No default value for $flag.");
-  assert(expiredExperimentalFlags.containsKey(flag),
-      "No expired value for $flag.");
-  if (expiredExperimentalFlags[flag]!) {
-    return defaultExperimentalFlags[flag]!;
-  }
   bool? enabled;
   if (explicitExperimentalFlags != null) {
     enabled = explicitExperimentalFlags[flag];
@@ -81,9 +73,6 @@
 /// If [allowedExperimentalFlags] is `null` [defaultAllowedExperimentalFlags] is
 /// used for the per library flag state.
 ///
-/// If [flag] is marked as expired in [expiredExperimentalFlags], the value from
-/// [defaultExperimentalFlags] is always returned.
-///
 /// The canonical uri, also known as the import uri, is the absolute uri that
 /// defines the identity of a library, for instance `dart:core`, `package:foo`,
 /// or `file:///path/dir/file.dart`.
@@ -93,11 +82,6 @@
     AllowedExperimentalFlags? allowedExperimentalFlags}) {
   assert(defaultExperimentalFlags.containsKey(flag),
       "No default value for $flag.");
-  assert(expiredExperimentalFlags.containsKey(flag),
-      "No expired value for $flag.");
-  if (expiredExperimentalFlags[flag]!) {
-    return defaultExperimentalFlags[flag]!;
-  }
   bool? enabled;
   if (explicitExperimentalFlags != null) {
     enabled = explicitExperimentalFlags[flag];
@@ -190,11 +174,6 @@
     Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
   assert(defaultExperimentalFlags.containsKey(flag),
       "No default value for $flag.");
-  assert(expiredExperimentalFlags.containsKey(flag),
-      "No expired value for $flag.");
-  if (expiredExperimentalFlags[flag]!) {
-    return defaultExperimentalFlags[flag]!;
-  }
 
   bool? enabledByDefault;
   if (defaultExperimentFlagsForTesting != null) {
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 65286ee..ca19764 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
@@ -29,22 +29,22 @@
 }
 
 const Version enableAlternativeInvalidationStrategyVersion =
-    const Version(2, 14);
-const Version enableConstFunctionsVersion = const Version(2, 14);
+    const Version(2, 15);
+const Version enableConstFunctionsVersion = const Version(2, 15);
 const Version enableConstantUpdate2018Version = const Version(2, 0);
-const Version enableConstructorTearoffsVersion = const Version(2, 14);
+const Version enableConstructorTearoffsVersion = const Version(2, 15);
 const Version enableControlFlowCollectionsVersion = const Version(2, 0);
 const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableExtensionTypesVersion = const Version(2, 14);
+const Version enableExtensionTypesVersion = const Version(2, 15);
 const Version enableGenericMetadataVersion = const Version(2, 14);
 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 enableTestExperimentVersion = const Version(2, 14);
+const Version enableTestExperimentVersion = const Version(2, 15);
 const Version enableTripleShiftVersion = const Version(2, 14);
-const Version enableValueClassVersion = const Version(2, 14);
-const Version enableVarianceVersion = const Version(2, 14);
+const Version enableValueClassVersion = const Version(2, 15);
+const Version enableVarianceVersion = const Version(2, 15);
 
 ExperimentalFlag? parseExperimentalFlag(String flag) {
   switch (flag) {
@@ -88,7 +88,7 @@
   ExperimentalFlag.alternativeInvalidationStrategy: false,
   ExperimentalFlag.constFunctions: false,
   ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.constructorTearoffs: false,
+  ExperimentalFlag.constructorTearoffs: true,
   ExperimentalFlag.controlFlowCollections: true,
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
@@ -123,41 +123,41 @@
 };
 
 const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 14),
-  ExperimentalFlag.constFunctions: const Version(2, 14),
+  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 15),
+  ExperimentalFlag.constFunctions: const Version(2, 15),
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
-  ExperimentalFlag.constructorTearoffs: const Version(2, 14),
+  ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.extensionTypes: const Version(2, 14),
+  ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
   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.testExperiment: const Version(2, 14),
+  ExperimentalFlag.testExperiment: const Version(2, 15),
   ExperimentalFlag.tripleShift: const Version(2, 14),
-  ExperimentalFlag.valueClass: const Version(2, 14),
-  ExperimentalFlag.variance: const Version(2, 14),
+  ExperimentalFlag.valueClass: const Version(2, 15),
+  ExperimentalFlag.variance: const Version(2, 15),
 };
 
 const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 14),
-  ExperimentalFlag.constFunctions: const Version(2, 14),
+  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 15),
+  ExperimentalFlag.constFunctions: const Version(2, 15),
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
-  ExperimentalFlag.constructorTearoffs: const Version(2, 14),
+  ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.extensionTypes: const Version(2, 14),
+  ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
   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.testExperiment: const Version(2, 14),
+  ExperimentalFlag.testExperiment: const Version(2, 15),
   ExperimentalFlag.tripleShift: const Version(2, 14),
-  ExperimentalFlag.valueClass: const Version(2, 14),
-  ExperimentalFlag.variance: const Version(2, 14),
+  ExperimentalFlag.valueClass: const Version(2, 15),
+  ExperimentalFlag.variance: const Version(2, 15),
 };
 
 const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
diff --git a/pkg/front_end/lib/src/api_prototype/language_version.dart b/pkg/front_end/lib/src/api_prototype/language_version.dart
index 3aa685b..566c816 100644
--- a/pkg/front_end/lib/src/api_prototype/language_version.dart
+++ b/pkg/front_end/lib/src/api_prototype/language_version.dart
@@ -17,8 +17,6 @@
 
 import '../fasta/compiler_context.dart' show CompilerContext;
 
-import '../fasta/source/source_library_builder.dart' show SourceLibraryBuilder;
-
 import '../fasta/uri_translator.dart' show UriTranslator;
 
 import 'compiler_options.dart' show CompilerOptions;
@@ -146,7 +144,6 @@
     Uri uri, CompilerOptions options) async {
   // This method is here in order to use the opt out hack here for test
   // sources.
-  if (SourceLibraryBuilder.isOptOutTest(uri)) return true;
   VersionAndPackageUri versionAndLibraryUri =
       await languageVersionForUri(uri, options);
   return !options.isExperimentEnabledInLibraryByVersion(
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index ee007f5..b8d1d74 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -12,7 +12,7 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show StringToken;
 
-import 'package:kernel/kernel.dart' show Component, Statement;
+import 'package:kernel/kernel.dart' show Component;
 
 import 'package:kernel/ast.dart' as ir;
 
@@ -37,8 +37,6 @@
 
 import '../kernel_generator_impl.dart' show generateKernelInternal;
 
-import '../fasta/kernel/redirecting_factory_body.dart' as redirecting;
-
 import 'compiler_state.dart' show InitializedCompilerState;
 
 import 'util.dart' show equalLists, equalMaps, equalSets;
@@ -242,18 +240,24 @@
 /// constructor.
 // TODO(sigmund): Delete this API once `member.isRedirectingFactory`
 // is implemented correctly for patch files (Issue #33495).
-bool isRedirectingFactory(ir.Procedure member) {
-  if (member.kind == ir.ProcedureKind.Factory) {
-    Statement? body = member.function.body;
-    if (body is redirecting.RedirectingFactoryBody) return true;
-    if (body is ir.ExpressionStatement) {
-      ir.Expression expression = body.expression;
-      if (expression is ir.Let) {
-        if (expression.variable.name == redirecting.letName) {
-          return true;
-        }
-      }
-    }
+bool isRedirectingFactory(ir.Procedure member) => member.isRedirectingFactory;
+
+/// Determines what `ProcedureKind` the given extension [member] is based on
+/// the member name.
+///
+/// Note: classifies operators as `ProcedureKind.Method`.
+ir.ProcedureKind getExtensionMemberKind(ir.Procedure member) {
+  assert(member.isExtensionMember);
+  String name = member.name.text;
+  int pipeIndex = name.indexOf('|');
+  int poundIndex = name.indexOf('#');
+  assert(pipeIndex >= 0);
+  if (poundIndex >= 0) {
+    String getOrSet = name.substring(pipeIndex + 1, poundIndex);
+    return getOrSet == 'get'
+        ? ir.ProcedureKind.Getter
+        : ir.ProcedureKind.Setter;
+  } else {
+    return member.kind;
   }
-  return false;
 }
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index 42a227f..f592c51 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -87,4 +87,7 @@
         serializeComponent,
         serializeProcedure;
 
-export '../fasta/resolve_input_uri.dart' show resolveInputUri;
+export 'package:_fe_analyzer_shared/src/util/options.dart';
+
+export 'package:_fe_analyzer_shared/src/util/resolve_input_uri.dart'
+    show resolveInputUri;
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 3babd76..46aabec 100644
--- a/pkg/front_end/lib/src/base/command_line_options.dart
+++ b/pkg/front_end/lib/src/base/command_line_options.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.
 
+import 'package:_fe_analyzer_shared/src/util/options.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:kernel/target/targets.dart';
+
 class Flags {
   // TODO(johnniwinther): What is the right name for this?
   static const String nnbdStrongMode = "--nnbd-strong";
@@ -47,3 +51,79 @@
 
   static const String invocationModes = "--invocation-modes";
 }
+
+class Options {
+  static const Option<Uri?> compileSdk =
+      const Option(Flags.compileSdk, const UriValue());
+  static const Option<bool> dumpIr =
+      const Option(Flags.dumpIr, const BoolValue(false));
+  static const Option<List<String>?> enableExperiment =
+      const Option(Flags.enableExperiment, const StringListValue());
+  static const Option<bool> excludeSource =
+      const Option(Flags.excludeSource, const BoolValue(false));
+  static const Option<bool> omitPlatform =
+      const Option(Flags.omitPlatform, const BoolValue(false));
+  static const Option<List<String>?> fatal =
+      const Option(Flags.fatal, const StringListValue());
+  static const Option<String?> fatalSkip =
+      const Option(Flags.fatalSkip, const StringValue());
+  static const Option<int?> forceLateLowering = const Option(
+      Flags.forceLateLowering,
+      const IntValue(defaultValue: null, noArgValue: LateLowering.all));
+  static const Option<bool?> forceLateLoweringSentinel =
+      const Option(Flags.forceLateLoweringSentinel, const BoolValue(null));
+  static const Option<bool?> forceStaticFieldLowering =
+      const Option(Flags.forceStaticFieldLowering, const BoolValue(null));
+  static const Option<bool?> forceNoExplicitGetterCalls =
+      const Option(Flags.forceNoExplicitGetterCalls, const BoolValue(null));
+  static const Option<int?> forceConstructorTearOffLowering = const Option(
+      Flags.forceConstructorTearOffLowering,
+      const IntValue(
+          defaultValue: null, noArgValue: ConstructorTearOffLowering.all));
+  static const Option<bool> help = const Option(
+      Flags.help, const BoolValue(false),
+      aliases: ["-h", "/?", "/h"]);
+  static const Option<Uri?> librariesJson =
+      const Option(Flags.librariesJson, const UriValue());
+  static const Option<bool> noDefines =
+      const Option(Flags.noDefines, const BoolValue(false));
+  static const Option<Uri?> output =
+      const Option(Flags.output, const UriValue(), aliases: ["--out", "-o"]);
+  static const Option<Uri?> packages =
+      const Option(Flags.packages, const UriValue());
+  static const Option<Uri?> platform =
+      const Option(Flags.platform, const UriValue());
+  static const Option<Uri?> sdk = const Option(Flags.sdk, const UriValue());
+  static const Option<Uri?> singleRootBase =
+      const Option(Flags.singleRootBase, const UriValue());
+  static const Option<String?> singleRootScheme =
+      const Option(Flags.singleRootScheme, const StringValue());
+  static const Option<bool> nnbdWeakMode =
+      const Option(Flags.nnbdWeakMode, const BoolValue(false));
+  static const Option<bool> nnbdStrongMode =
+      const Option(Flags.nnbdStrongMode, const BoolValue(false));
+  static const Option<bool> nnbdAgnosticMode =
+      const Option(Flags.nnbdAgnosticMode, const BoolValue(false));
+  static const Option<String> target = const Option(
+      Flags.target, const StringValue(defaultValue: 'vm'),
+      aliases: ["-t"]);
+  static const Option<bool> verbose =
+      const Option(Flags.verbose, const BoolValue(false), aliases: ["-v"]);
+  static const Option<String> verbosity = const Option(
+      Flags.verbosity, const StringValue(defaultValue: Verbosity.defaultValue));
+  static const Option<bool> verify =
+      const Option(Flags.verify, const BoolValue(false));
+  static const Option<bool> skipPlatformVerification =
+      const Option(Flags.skipPlatformVerification, const BoolValue(false));
+  static const Option<bool> warnOnReachabilityCheck =
+      const Option(Flags.warnOnReachabilityCheck, const BoolValue(false));
+  static const Option<List<Uri>?> linkDependencies =
+      const Option(Flags.linkDependencies, const UriListValue());
+  static const Option<bool> noDeps =
+      const Option(Flags.noDeps, const BoolValue(false));
+  static const Option<String?> invocationModes =
+      const Option(Flags.invocationModes, const StringValue());
+  static const Option<Map<String, String>> defines = const Option(
+      "-D", const DefineValue(),
+      isDefines: true, aliases: ["--define"]);
+}
diff --git a/pkg/front_end/lib/src/base/libraries_specification.dart b/pkg/front_end/lib/src/base/libraries_specification.dart
index 61f0028..ad345f4 100644
--- a/pkg/front_end/lib/src/base/libraries_specification.dart
+++ b/pkg/front_end/lib/src/base/libraries_specification.dart
@@ -137,20 +137,19 @@
       if (targetName.startsWith("comment:")) return null;
       Map<String, LibraryInfo> libraries = <String, LibraryInfo>{};
       if (targetData is! Map) {
-        return _reportError(
-            "target specification for '$targetName' is not a map");
+        _reportError("target specification for '$targetName' is not a map");
       }
       if (!targetData.containsKey("libraries")) {
-        return _reportError("target specification "
+        _reportError("target specification "
             "for '$targetName' doesn't have a libraries entry");
       }
       dynamic librariesData = targetData["libraries"];
       if (librariesData is! Map<String, dynamic>) {
-        return _reportError("libraries entry for '$targetName' is not a map");
+        _reportError("libraries entry for '$targetName' is not a map");
       }
       librariesData.forEach((String name, data) {
         if (data is! Map<String, dynamic>) {
-          return _reportError(
+          _reportError(
               "library data for '$name' in target '$targetName' is not a map");
         }
         Uri checkAndResolve(uriString) {
@@ -175,13 +174,12 @@
         } else if (data['patches'] == null) {
           patches = const [];
         } else {
-          return _reportError(
-              "patches entry for '$name' is not a list or a string");
+          _reportError("patches entry for '$name' is not a list or a string");
         }
 
         dynamic supported = data['supported'] ?? true;
         if (supported is! bool) {
-          return _reportError("\"supported\" entry: expected a 'bool' but "
+          _reportError("\"supported\" entry: expected a 'bool' but "
               "got a '${supported.runtimeType}' ('$supported')");
         }
         libraries[name] =
@@ -193,7 +191,7 @@
     return new LibrariesSpecification(targets);
   }
 
-  static _reportError(String error) =>
+  static Never _reportError(String error) =>
       throw new LibrariesSpecificationException(error);
 
   /// Serialize this specification to json.
@@ -265,5 +263,6 @@
   Object error;
   LibrariesSpecificationException(this.error);
 
+  @override
   String toString() => '$error';
 }
diff --git a/pkg/front_end/lib/src/base/library_info.dart b/pkg/front_end/lib/src/base/library_info.dart
index ec1153a..5dea369 100644
--- a/pkg/front_end/lib/src/base/library_info.dart
+++ b/pkg/front_end/lib/src/base/library_info.dart
@@ -159,5 +159,6 @@
 
   const Maturity(this.level, this.name, this.description);
 
+  @override
   String toString() => "$name: $level\n$description\n";
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index b3f9998..219a798 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -793,7 +793,7 @@
 
   String debugString() {
     StringBuffer sb = new StringBuffer();
-    writeList(String name, List elements) {
+    void writeList(String name, List elements) {
       if (elements.isEmpty) {
         sb.writeln('$name: <empty>');
         return;
@@ -858,6 +858,7 @@
 
   HermeticFileSystem(this.includedFiles, this._realFileSystem);
 
+  @override
   FileSystemEntity entityForUri(Uri uri) {
     if (includedFiles.contains(uri)) return _realFileSystem.entityForUri(uri);
     throw new HermeticAccessException(uri);
diff --git a/pkg/front_end/lib/src/fasta/README.md b/pkg/front_end/lib/src/fasta/README.md
index c2f0fa4..953abaf 100644
--- a/pkg/front_end/lib/src/fasta/README.md
+++ b/pkg/front_end/lib/src/fasta/README.md
@@ -13,10 +13,10 @@
 
 ## Getting Started
 
-1. [Build](https://github.com/dart-lang/sdk/wiki/Building#building) the VM and patched SDK. Note: you only need to build the targets `runtime_kernel`, and `dart_precompiled_runtime`, so you only need to run this command:
+1. [Build](https://github.com/dart-lang/sdk/wiki/Building#building) the VM and patched SDK. Note: you only need to build the targets `runtime` and `dart_precompiled_runtime`, so you only need to run this command:
 
 ```bash
-./tools/build.py --mode release --arch x64 runtime_kernel dart_precompiled_runtime
+./tools/build.py --mode release --arch x64 runtime dart_precompiled_runtime
 ```
 
 ## Create an Outline File
diff --git a/pkg/front_end/lib/src/fasta/TESTING.md b/pkg/front_end/lib/src/fasta/TESTING.md
index 251e9da..e89d5c9 100644
--- a/pkg/front_end/lib/src/fasta/TESTING.md
+++ b/pkg/front_end/lib/src/fasta/TESTING.md
@@ -40,7 +40,7 @@
 
 ```
 # Language, co19, kernel, for VM using Fasta.
-./tools/build.py -mrelease runtime_kernel && ./tools/test.py -mrelease -cdartk co19 language kernel --time -pcolor --report -j16
+./tools/build.py -mrelease runtime && ./tools/test.py -mrelease -cdartk co19 language kernel --time -pcolor --report -j16
 ```
 
 
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index a0539e8..b0fa8e8 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -216,6 +216,7 @@
   @override
   Builder get origin => this;
 
+  @override
   bool get hasProblem => false;
 
   @override
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 e516b79..e87af39 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
@@ -24,16 +24,19 @@
       : fileUri = compilationUnit.fileUri,
         super(null, 0, name, compilationUnit, charOffset);
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type.withDeclaredNullability(nullability);
   }
 
+  @override
   String get debugName => "BuiltinTypeDeclarationBuilder";
 }
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 4de08b9..e893019 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -44,6 +44,8 @@
 
 import '../kernel/kernel_helper.dart';
 
+import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
+
 import '../loader.dart';
 
 import '../modifier.dart';
@@ -304,6 +306,7 @@
   @override
   bool get isAbstract => (modifiers & abstractMask) != 0;
 
+  @override
   bool get isMixin => (modifiers & mixinDeclarationMask) != 0;
 
   @override
@@ -319,9 +322,11 @@
     return isMixinApplication && !isNamedMixinApplication;
   }
 
+  @override
   bool get declaresConstConstructor =>
       (modifiers & declaresConstConstructorMask) != 0;
 
+  @override
   void forEachConstructor(void Function(String, MemberBuilder) f,
       {bool includeInjectedConstructors: false}) {
     if (isPatch) {
@@ -352,12 +357,12 @@
           delayedActionPerformers, synthesizedFunctionNodes);
     }
 
-    MetadataBuilder.buildAnnotations(
-        isPatch ? origin.cls : cls, metadata, library, this, null, fileUri);
+    MetadataBuilder.buildAnnotations(isPatch ? origin.cls : cls, metadata,
+        library, this, null, fileUri, library.scope);
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
-        typeVariables![i].buildOutlineExpressions(
-            library, this, null, coreTypes, delayedActionPerformers);
+        typeVariables![i].buildOutlineExpressions(library, this, null,
+            coreTypes, delayedActionPerformers, scope.parent!);
       }
     }
 
@@ -367,6 +372,7 @@
 
   /// Registers a constructor redirection for this class and returns true if
   /// this redirection gives rise to a cycle that has not been reported before.
+  @override
   bool checkConstructorCyclic(String source, String target) {
     ConstructorRedirection? redirect = new ConstructorRedirection(target);
     _redirectingConstructors ??= <String, ConstructorRedirection>{};
@@ -424,6 +430,7 @@
     scope.forEach(f);
   }
 
+  @override
   void forEachDeclaredField(
       void Function(String name, FieldBuilder fieldBuilder) callback) {
     void callbackFilteringFieldBuilders(String name, Builder builder) {
@@ -921,7 +928,8 @@
         targetNode.computeFunctionType(library.nonNullable);
     if (typeArguments != null &&
         targetFunctionType.typeParameters.length != typeArguments.length) {
-      addProblem(
+      addProblemForRedirectingFactory(
+          factory,
           templateTypeArgumentMismatch
               .withArguments(targetFunctionType.typeParameters.length),
           redirectionTarget.charOffset,
@@ -946,7 +954,8 @@
         Loader loader = library.loader;
         if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
             SubtypeCheckMode.ignoringNullabilities)) {
-          addProblem(
+          addProblemForRedirectingFactory(
+              factory,
               templateRedirectingFactoryIncompatibleTypeArgument.withArguments(
                   typeArgument,
                   typeParameterBound,
@@ -957,7 +966,8 @@
         } else if (library.isNonNullableByDefault && loader is SourceLoader) {
           if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
               SubtypeCheckMode.withNullabilities)) {
-            addProblem(
+            addProblemForRedirectingFactory(
+                factory,
                 templateRedirectingFactoryIncompatibleTypeArgument
                     .withArguments(typeArgument, typeParameterBound,
                         library.isNonNullableByDefault),
@@ -1002,9 +1012,65 @@
     }
   }
 
+  bool _isCyclicRedirectingFactory(RedirectingFactoryBuilder factory) {
+    // We use the [tortoise and hare algorithm]
+    // (https://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare) to
+    // handle cycles.
+    Builder? tortoise = factory;
+    Builder? hare = factory.redirectionTarget.target;
+    if (hare == factory) {
+      return true;
+    }
+    while (tortoise != hare) {
+      // Hare moves 2 steps forward.
+      if (hare is! RedirectingFactoryBuilder) {
+        return false;
+      }
+      hare = hare.redirectionTarget.target;
+      if (hare == factory) {
+        return true;
+      }
+      if (hare is! RedirectingFactoryBuilder) {
+        return false;
+      }
+      hare = hare.redirectionTarget.target;
+      if (hare == factory) {
+        return true;
+      }
+      // Tortoise moves one step forward. No need to test type of tortoise
+      // as it follows hare which already checked types.
+      tortoise =
+          (tortoise as RedirectingFactoryBuilder).redirectionTarget.target;
+    }
+    // Cycle found, but original factory doesn't belong to a cycle.
+    return false;
+  }
+
+  void addProblemForRedirectingFactory(RedirectingFactoryBuilder factory,
+      Message message, int charOffset, int length) {
+    addProblem(message, charOffset, length);
+    String text = library.loader.target.context
+        .format(
+            message.withLocation(fileUri, charOffset, length), Severity.error)
+        .plain;
+    factory.body = new RedirectingFactoryBody.error(text);
+  }
+
   @override
   void checkRedirectingFactory(
       RedirectingFactoryBuilder factory, TypeEnvironment typeEnvironment) {
+    // Check that factory declaration is not cyclic.
+    if (_isCyclicRedirectingFactory(factory)) {
+      addProblemForRedirectingFactory(
+          factory,
+          templateCyclicRedirectingFactoryConstructors
+              .withArguments("${factory.member.enclosingClass!.name}"
+                  "${factory.name == '' ? '' : '.${factory.name}'}"),
+          factory.charOffset,
+          noLength);
+      return;
+    }
+
     // The factory type cannot contain any type parameters other than those of
     // its enclosing class, because constructors cannot specify type parameters
     // of their own.
@@ -1016,13 +1082,16 @@
 
     // TODO(hillerstrom): It would be preferable to know whether a failure
     // happened during [_computeRedirecteeType].
-    if (redirecteeType == null) return;
+    if (redirecteeType == null) {
+      return;
+    }
 
     // Check whether [redirecteeType] <: [factoryType].
     Loader loader = library.loader;
     if (!typeEnvironment.isSubtypeOf(
         redirecteeType, factoryType, SubtypeCheckMode.ignoringNullabilities)) {
-      addProblem(
+      addProblemForRedirectingFactory(
+          factory,
           templateIncompatibleRedirecteeFunctionType.withArguments(
               redirecteeType, factoryType, library.isNonNullableByDefault),
           factory.redirectionTarget.charOffset,
@@ -1030,7 +1099,8 @@
     } else if (library.isNonNullableByDefault && loader is SourceLoader) {
       if (!typeEnvironment.isSubtypeOf(
           redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
-        addProblem(
+        addProblemForRedirectingFactory(
+            factory,
             templateIncompatibleRedirecteeFunctionType.withArguments(
                 redirecteeType, factoryType, library.isNonNullableByDefault),
             factory.redirectionTarget.charOffset,
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 4d0f32a..2167087 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -143,6 +143,7 @@
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             compilationUnit, charOffset, nativeMethodName);
 
+  @override
   SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
 
   @override
@@ -154,6 +155,7 @@
   @override
   Member get invokeTarget => constructor;
 
+  @override
   FunctionNode get function => _constructor.function;
 
   @override
@@ -271,7 +273,7 @@
               library, classBuilder!, this, classBuilder!.scope, fileUri);
       bodyBuilder.constantContext = ConstantContext.required;
       bodyBuilder.parseInitializers(beginInitializers!);
-      bodyBuilder.resolveRedirectingFactoryTargets();
+      bodyBuilder.performBacklogComputations(delayedActionPerformers);
     }
     beginInitializers = null;
     if (isConst && isPatch) {
diff --git a/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
index b5e9b80..4a17233 100644
--- a/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
@@ -14,5 +14,6 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("dynamic", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "DynamicTypeDeclarationBuilder";
 }
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 22e54cb..14c0575 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -45,6 +45,7 @@
 
   AsyncMarker actualAsyncModifier = AsyncMarker.Sync;
 
+  @override
   final bool isExtensionInstanceMember = false;
 
   final Procedure _procedureInternal;
@@ -207,7 +208,7 @@
     if (bodyInternal != null) {
       unexpected("null", "${bodyInternal.runtimeType}", charOffset, fileUri);
     }
-    bodyInternal = new RedirectingFactoryBody(target, typeArguments);
+    bodyInternal = new RedirectingFactoryBody(target, typeArguments, function);
     function.body = bodyInternal;
     bodyInternal?.parent = function;
     if (isPatch) {
@@ -307,7 +308,7 @@
           noLength, fileUri);
     }
 
-    bodyInternal = new RedirectingFactoryBody(target, typeArguments);
+    bodyInternal = new RedirectingFactoryBody(target, typeArguments, function);
     function.body = bodyInternal;
     bodyInternal?.parent = function;
     _procedure.isRedirectingFactory = true;
@@ -364,6 +365,7 @@
     return _procedureInternal;
   }
 
+  @override
   bool _hasBuiltOutlines = false;
 
   @override
@@ -436,7 +438,10 @@
             target.enclosingClass!.typeParameters.length, const DynamicType(),
             growable: true);
       }
-      member.function!.body = new RedirectingFactoryBody(target, typeArguments);
+
+      function.body =
+          new RedirectingFactoryBody(target, typeArguments, function);
+      function.body!.parent = function;
     }
     if (_factoryTearOff != null &&
         (target is Constructor || target is Procedure && target.isFactory)) {
@@ -452,6 +457,7 @@
     _hasBuiltOutlines = true;
   }
 
+  @override
   void _finishPatch() {
     super._finishPatch();
 
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 eceff88..1915d6c 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -98,12 +98,14 @@
 
   bool hadTypesInferred = false;
 
+  @override
   bool hasBodyBeenBuilt = false;
 
   // TODO(johnniwinther): [parent] is not trust-worthy for determining
   //  properties since it is changed after the creation of the builder. For now
   //  we require it has an argument here. A follow-up should clean up the
   //  misuse of parent.
+  @override
   final bool isTopLevel;
 
   SourceFieldBuilder(
@@ -301,12 +303,16 @@
     _typeEnsured = true;
   }
 
+  @override
   SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
 
+  @override
   Member get member => _fieldEncoding.field;
 
+  @override
   String get debugName => "FieldBuilder";
 
+  @override
   bool get isField => true;
 
   @override
@@ -340,6 +346,7 @@
         isSynthetic: isSynthetic);
   }
 
+  @override
   bool get isEligibleForInference {
     return type == null && (hasInitializer || isClassInstanceMember);
   }
@@ -400,8 +407,8 @@
     _fieldEncoding.completeSignature(coreTypes);
 
     for (Annotatable annotatable in _fieldEncoding.annotatables) {
-      MetadataBuilder.buildAnnotations(
-          annotatable, metadata, library, classBuilder, this, fileUri);
+      MetadataBuilder.buildAnnotations(annotatable, metadata, library,
+          classBuilder, this, fileUri, classBuilder?.scope ?? library.scope);
     }
 
     // For modular compilation we need to include initializers of all const
@@ -423,9 +430,8 @@
           bodyBuilder,
           fieldType,
           bodyBuilder.parseFieldInitializer(_constInitializerToken!));
-      if (library.loader is SourceLoader &&
-          (bodyBuilder.transformSetLiterals ||
-              bodyBuilder.transformCollections)) {
+      if (bodyBuilder.transformSetLiterals ||
+          bodyBuilder.transformCollections) {
         // Wrap the initializer in a temporary parent expression; the
         // transformations need a parent relation.
         Not wrapper = new Not(initializer);
@@ -435,14 +441,12 @@
         initializer = wrapper.operand;
       }
       buildBody(coreTypes, initializer);
-      bodyBuilder.resolveRedirectingFactoryTargets();
-      if (bodyBuilder.hasDelayedActions) {
-        delayedActionPerformers.add(bodyBuilder);
-      }
+      bodyBuilder.performBacklogComputations(delayedActionPerformers);
     }
     _constInitializerToken = null;
   }
 
+  @override
   DartType get fieldType => _fieldEncoding.type;
 
   void set fieldType(DartType value) {
@@ -503,6 +507,7 @@
     return fieldType;
   }
 
+  @override
   DartType get builtType => fieldType;
 
   List<ClassMember>? _localMembers;
@@ -1463,6 +1468,7 @@
       // ignore: unnecessary_null_comparison
       : assert(isInternalImplementation != null);
 
+  @override
   Member getMember(ClassHierarchyBuilder hierarchy) {
     fieldBuilder._ensureType(hierarchy);
     return _member;
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 14f3d3d..660e08a 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
@@ -12,11 +12,14 @@
 
 class FixedTypeBuilder extends TypeBuilder {
   final DartType type;
+  @override
   final Uri? fileUri;
+  @override
   final int? charOffset;
 
   const FixedTypeBuilder(this.type, this.fileUri, this.charOffset);
 
+  @override
   TypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -24,36 +27,45 @@
     return this;
   }
 
+  @override
   Object? get name => null;
 
+  @override
   NullabilityBuilder get nullabilityBuilder =>
       new NullabilityBuilder.fromNullability(type.nullability);
 
+  @override
   String get debugName => 'FixedTypeBuilder';
 
+  @override
   bool get isVoidType => type is VoidType;
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write('type=${type}');
     return buffer;
   }
 
+  @override
   DartType build(LibraryBuilder library,
       {TypedefType? origin, bool? nonInstanceContext}) {
     return type;
   }
 
+  @override
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return unhandled('buildSupertype', 'FixedTypeBuilder', charOffset, fileUri);
   }
 
+  @override
   Supertype buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return unhandled(
         'buildMixedInType', 'FixedTypeBuilder', charOffset, fileUri);
   }
 
+  @override
   TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) =>
       this;
 }
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 cf242da..216d044 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
@@ -28,8 +28,6 @@
 
 import '../source/source_library_builder.dart';
 
-import '../source/source_loader.dart' show SourceLoader;
-
 import '../kernel/body_builder.dart' show BodyBuilder;
 
 import '../kernel/internal_ast.dart' show VariableDeclarationImpl;
@@ -56,10 +54,12 @@
   /// List of metadata builders for the metadata declared on this parameter.
   final List<MetadataBuilder>? metadata;
 
+  @override
   final int modifiers;
 
   final TypeBuilder? type;
 
+  @override
   final String name;
 
   @override
@@ -70,6 +70,7 @@
   FormalParameterKind kind = FormalParameterKind.mandatory;
 
   /// The variable declaration created for this formal parameter.
+  @override
   VariableDeclaration? variable;
 
   /// The first token of the default value, if any.
@@ -91,6 +92,7 @@
       : this.fileUri = fileUri ?? compilationUnit?.fileUri,
         super(compilationUnit, charOffset);
 
+  @override
   String get debugName => "FormalParameterBuilder";
 
   // TODO(johnniwinther): Cleanup `isRequired` semantics in face of required
@@ -109,6 +111,7 @@
 
   bool get isOptional => !isRequired;
 
+  @override
   bool get isLocal => true;
 
   bool get isInitializingFormal => (modifiers & initializingFormalMask) != 0;
@@ -118,6 +121,7 @@
   // An initializing formal parameter might be final without its
   // VariableDeclaration being final. See
   // [ProcedureBuilder.computeFormalParameterInitializerScope]..
+  @override
   bool get isAssignable => variable!.isAssignable && !isInitializingFormal;
 
   @override
@@ -221,19 +225,13 @@
         initializer = bodyBuilder.typeInferrer.inferParameterInitializer(
             bodyBuilder, initializer, variable!.type, hasDeclaredInitializer);
         variable!.initializer = initializer..parent = variable;
-        if (library.loader is SourceLoader) {
-          SourceLoader loader = library.loader;
-          loader.transformPostInference(
-              variable!,
-              bodyBuilder.transformSetLiterals,
-              bodyBuilder.transformCollections,
-              library.library);
-        }
+        library.loader.transformPostInference(
+            variable!,
+            bodyBuilder.transformSetLiterals,
+            bodyBuilder.transformCollections,
+            library.library);
         initializerWasInferred = true;
-        bodyBuilder.resolveRedirectingFactoryTargets();
-        if (bodyBuilder.hasDelayedActions) {
-          delayedActionPerformers.add(bodyBuilder);
-        }
+        bodyBuilder.performBacklogComputations(delayedActionPerformers);
       }
     }
     initializerToken = null;
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 71dc58a..c462800 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -58,20 +58,28 @@
 
   AsyncMarker get asyncModifier;
 
+  @override
   ProcedureKind? get kind;
 
+  @override
   bool get isAbstract;
 
+  @override
   bool get isConstructor;
 
+  @override
   bool get isRegularMethod;
 
+  @override
   bool get isGetter;
 
+  @override
   bool get isSetter;
 
+  @override
   bool get isOperator;
 
+  @override
   bool get isFactory;
 
   /// This is the formal parameter scope as specified in the Dart Programming
@@ -95,6 +103,7 @@
 
   void set body(Statement? newBody);
 
+  @override
   bool get isNative;
 
   /// Returns the [index]th parameter of this function.
@@ -486,8 +495,9 @@
           isClassMember || isExtensionMember
               ? parent as DeclarationBuilder
               : null;
-      MetadataBuilder.buildAnnotations(
-          member, metadata, library, classOrExtensionBuilder, this, fileUri);
+      Scope parentScope = classOrExtensionBuilder?.scope ?? library.scope;
+      MetadataBuilder.buildAnnotations(member, metadata, library,
+          classOrExtensionBuilder, this, fileUri, parentScope);
       if (typeVariables != null) {
         for (int i = 0; i < typeVariables!.length; i++) {
           typeVariables![i].buildOutlineExpressions(
@@ -495,7 +505,8 @@
               classOrExtensionBuilder,
               this,
               coreTypes,
-              delayedActionPerformers);
+              delayedActionPerformers,
+              computeTypeParameterScope(parentScope));
         }
       }
 
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 54d2a6a..5128a9d 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
@@ -28,8 +28,11 @@
   final TypeBuilder? returnType;
   final List<TypeVariableBuilder>? typeVariables;
   final List<FormalParameterBuilder>? formals;
+  @override
   final NullabilityBuilder nullabilityBuilder;
+  @override
   final Uri? fileUri;
+  @override
   final int charOffset;
 
   FunctionTypeBuilder(this.returnType, this.typeVariables, this.formals,
@@ -41,6 +44,7 @@
   @override
   String get debugName => "Function";
 
+  @override
   bool get isVoidType => false;
 
   @override
@@ -77,6 +81,7 @@
     return buffer;
   }
 
+  @override
   FunctionType build(LibraryBuilder library,
       {TypedefType? origin, bool? nonInstanceContext}) {
     DartType builtReturnType =
@@ -120,6 +125,7 @@
         typedefType: origin);
   }
 
+  @override
   Supertype? buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     library.addProblem(
@@ -127,11 +133,13 @@
     return null;
   }
 
+  @override
   Supertype? buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return buildSupertype(library, charOffset, fileUri);
   }
 
+  @override
   FunctionTypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -160,6 +168,7 @@
     return newType;
   }
 
+  @override
   FunctionTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
     return new FunctionTypeBuilder(returnType, typeVariables, formals,
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 a54a5b3..a004dac 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
@@ -16,8 +16,10 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("FutureOr", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "FutureOrTypeDeclarationBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
@@ -27,6 +29,7 @@
         nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(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 7226d05..1adb629 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
@@ -16,6 +16,7 @@
 
 class InvalidTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
     with ErroneousMemberBuilderMixin {
+  @override
   String get debugName => "InvalidTypeBuilder";
 
   final LocatedMessage message;
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 2c6badc0..439f98b 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -444,8 +444,10 @@
   LibraryLocalDeclarationIterator(this.library)
       : iterator = library.scope.iterator;
 
+  @override
   Builder get current => iterator.current;
 
+  @override
   bool moveNext() {
     while (iterator.moveNext()) {
       if (current.parent == library) return true;
@@ -461,10 +463,13 @@
   LibraryLocalDeclarationNameIterator(this.library)
       : iterator = library.scope.nameIterator;
 
+  @override
   Builder get current => iterator.current;
 
+  @override
   String get name => iterator.name;
 
+  @override
   bool moveNext() {
     while (iterator.moveNext()) {
       if (current.parent == library) return true;
diff --git a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
index 21d767b..80ed54d 100644
--- a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
@@ -30,14 +30,8 @@
       SourceLibraryBuilder library,
       DeclarationBuilder? classOrExtensionBuilder,
       MemberBuilder? member,
-      Uri fileUri) {
+      Uri fileUri, Scope scope) {
     if (metadata == null) return;
-    Scope scope = parent is Library ||
-            parent is Class ||
-            parent is Extension ||
-            classOrExtensionBuilder == null
-        ? library.scope
-        : classOrExtensionBuilder.scope;
     BodyBuilder bodyBuilder = library.loader
         .createBodyBuilderForOutlineExpression(library, classOrExtensionBuilder,
             member ?? classOrExtensionBuilder ?? library, scope, fileUri);
@@ -47,6 +41,6 @@
           bodyBuilder.parseAnnotation(annotationBuilder.beginToken));
     }
     bodyBuilder.inferAnnotations(parent, parent.annotations);
-    bodyBuilder.resolveRedirectingFactoryTargets();
+    bodyBuilder.performBacklogComputations();
   }
 }
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 7a769e4..079fb6b 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
@@ -17,7 +17,9 @@
 class MixinApplicationBuilder extends TypeBuilder {
   final TypeBuilder? supertype;
   final List<TypeBuilder> mixins;
+  @override
   final Uri fileUri;
+  @override
   final int charOffset;
   Supertype? builtType;
 
@@ -26,16 +28,21 @@
   MixinApplicationBuilder(
       this.supertype, this.mixins, this.fileUri, this.charOffset);
 
+  @override
   String? get name => null;
 
+  @override
   NullabilityBuilder get nullabilityBuilder {
     return unsupported("nullabilityBuilder", -1, null);
   }
 
+  @override
   String get debugName => "MixinApplicationBuilder";
 
+  @override
   bool get isVoidType => false;
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(supertype);
     buffer.write(" with ");
@@ -74,6 +81,7 @@
     return unsupported("withNullabilityBuilder", -1, null);
   }
 
+  @override
   MixinApplicationBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
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 fd75e28..bccd75e 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,10 +48,12 @@
 import 'void_type_declaration_builder.dart';
 
 class NamedTypeBuilder extends TypeBuilder {
+  @override
   final Object name;
 
   List<TypeBuilder>? arguments;
 
+  @override
   final NullabilityBuilder nullabilityBuilder;
 
   @override
@@ -71,6 +73,7 @@
       [this.arguments, this.fileUri, this.charOffset])
       : this.name = declaration.name;
 
+  @override
   bool get isVoidType => declaration is VoidTypeDeclarationBuilder;
 
   @override
@@ -174,8 +177,10 @@
     }
   }
 
+  @override
   String get debugName => "NamedTypeBuilder";
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(flattenName(name, charOffset ?? TreeNode.noOffset, fileUri));
     if (arguments?.isEmpty ?? true) return buffer;
@@ -313,6 +318,7 @@
     }
   }
 
+  @override
   Supertype? buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration!;
@@ -385,6 +391,7 @@
     return handleInvalidSupertype(library, charOffset, fileUri);
   }
 
+  @override
   Supertype? buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration!;
@@ -410,6 +417,7 @@
     return handleInvalidSupertype(library, charOffset, fileUri);
   }
 
+  @override
   TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) {
     TypeBuilder? result = substitution[declaration];
     if (result != null) {
@@ -440,6 +448,7 @@
     return this;
   }
 
+  @override
   NamedTypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -462,6 +471,7 @@
     return newType;
   }
 
+  @override
   NamedTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
     return new NamedTypeBuilder(
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 7a2c3cb..52b67ee 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
@@ -19,14 +19,17 @@
     assert(coreLibrary.importUri == Uri.parse('dart:core'));
   }
 
+  @override
   String get debugName => "NeverTypeDeclarationBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(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 914bbe3..9e18f07 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
@@ -16,14 +16,17 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("Null", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "NullTypeBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type;
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type;
diff --git a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
index 2789417..e9920a6 100644
--- a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
@@ -75,6 +75,7 @@
     }
   }
 
+  @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
     writeNullabilityOn(buffer);
diff --git a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
index 70c5bbd..3f8d28b 100644
--- a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
@@ -21,6 +21,7 @@
 
   final Scope exportScope = new Scope.top();
 
+  @override
   final SourceLibraryBuilder parent;
 
   final bool deferred;
@@ -43,6 +44,7 @@
     }
   }
 
+  @override
   Uri get fileUri => parent.fileUri;
 
   Builder? lookup(String name, int charOffset, Uri fileUri) {
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 8950e51..741445c 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -30,6 +30,7 @@
 
   Procedure get procedure;
 
+  @override
   ProcedureKind get kind;
 
   Procedure get actualProcedure;
@@ -53,6 +54,7 @@
   @override
   AsyncMarker actualAsyncModifier = AsyncMarker.Sync;
 
+  @override
   final bool isExtensionInstanceMember;
 
   late Procedure _procedure;
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 78e98ed..511ad2e 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
@@ -39,10 +39,12 @@
 
   String get debugName;
 
+  @override
   LibraryBuilder get parent;
 
   LibraryBuilder get library;
 
+  @override
   Uri get fileUri;
 
   List<TypeVariableBuilder>? get typeVariables;
@@ -54,6 +56,7 @@
   DartType buildThisType();
 
   /// [arguments] have already been built.
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments);
 
@@ -145,13 +148,17 @@
       : fileUri = parent.fileUri,
         super(metadata, 0, name, parent, charOffset);
 
+  @override
   String get debugName => "TypeAliasBuilder";
 
+  @override
   LibraryBuilder get parent => super.parent as LibraryBuilder;
 
+  @override
   LibraryBuilder get library => super.parent as LibraryBuilder;
 
   /// [arguments] have already been built.
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     DartType thisType = buildThisType();
@@ -259,6 +266,7 @@
   /// `const InvalidType()`). If `this` type alias expands to a
   /// [TypeVariableBuilder] then the type alias cannot be used as a class, in
   /// which case an error is emitted and `this` is returned.
+  @override
   TypeDeclarationBuilder? unaliasDeclaration(List<TypeBuilder>? typeArguments,
       {bool isUsedAsClass = false,
       int? usedAsClassCharOffset,
@@ -453,6 +461,7 @@
   /// [this], such that the returned [TypeBuilder]s are appropriate type
   /// arguments for passing to the [ClassBuilder] which is the end of the
   /// unaliasing chain.
+  @override
   List<TypeBuilder>? unaliasTypeArguments(List<TypeBuilder>? typeArguments) {
     TypeDeclarationBuilder? currentDeclarationBuilder = this;
     List<TypeBuilder>? currentTypeArguments = typeArguments;
@@ -513,6 +522,7 @@
 
   Map<Name, Procedure>? get tearOffs;
 
+  @override
   Procedure? findConstructorOrFactory(
       String text, int charOffset, Uri uri, LibraryBuilder accessingLibrary) {
     if (tearOffs != null) {
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 11098cb..b7feb2e 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -43,6 +43,7 @@
 
   StringBuffer printOn(StringBuffer buffer);
 
+  @override
   String toString() => "$debugName(${printOn(new StringBuffer())})";
 
   /// Returns the [TypeBuilder] for this type in which [TypeVariableBuilder]s
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 9d91421..a612517 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
@@ -13,6 +13,7 @@
         templateInternalProblemUnfinishedTypeVariable,
         templateTypeArgumentsOnTypeVariable;
 
+import '../scope.dart';
 import '../source/source_library_builder.dart';
 import '../util/helpers.dart';
 
@@ -67,10 +68,13 @@
         super(null, 0, parameter.name ?? '', compilationUnit,
             parameter.fileOffset);
 
+  @override
   bool get isTypeVariable => true;
 
+  @override
   String get debugName => "TypeVariableBuilder";
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(name);
     if (bound != null) {
@@ -80,8 +84,10 @@
     return buffer;
   }
 
+  @override
   String toString() => "${printOn(new StringBuffer())}";
 
+  @override
   TypeVariableBuilder get origin => actualOrigin ?? this;
 
   /// The [TypeParameter] built by this builder.
@@ -93,6 +99,7 @@
     parameter.variance = value;
   }
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
@@ -138,6 +145,7 @@
     return type;
   }
 
+  @override
   TypeParameterType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     if (arguments != null) {
@@ -179,6 +187,7 @@
     }
   }
 
+  @override
   void applyPatch(covariant TypeVariableBuilder patch) {
     patch.actualOrigin = this;
   }
@@ -200,9 +209,10 @@
       DeclarationBuilder? classOrExtensionBuilder,
       MemberBuilder? memberBuilder,
       CoreTypes coreTypes,
-      List<DelayedActionPerformer> delayedActionPerformers) {
+      List<DelayedActionPerformer> delayedActionPerformers,
+      Scope scope) {
     MetadataBuilder.buildAnnotations(parameter, metadata, libraryBuilder,
-        classOrExtensionBuilder, memberBuilder, fileUri!);
+        classOrExtensionBuilder, memberBuilder, fileUri!, scope);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
index 2639164..39c5f37 100644
--- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
+++ b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
@@ -26,5 +26,6 @@
     return builder.check(library, charOffset, fileUri);
   }
 
+  @override
   String toString() => "UnresolvedType(@$charOffset, $builder)";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
index 25c6760..97e238f 100644
--- a/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
@@ -14,5 +14,6 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("void", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "VoidTypeDeclarationBuilder";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder_graph.dart b/pkg/front_end/lib/src/fasta/builder_graph.dart
index d874063..9e2b434 100644
--- a/pkg/front_end/lib/src/fasta/builder_graph.dart
+++ b/pkg/front_end/lib/src/fasta/builder_graph.dart
@@ -25,8 +25,10 @@
 
   BuilderGraph(this.builders);
 
+  @override
   Iterable<Uri> get vertices => builders.keys;
 
+  @override
   Iterable<Uri> neighborsOf(Uri vertex) sync* {
     LibraryBuilder? library = builders[vertex];
     if (library == null) {
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 528c601..9cb19b4 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -114,7 +114,7 @@
 }
 
 String formatErrorMessage(String? sourceLine, Location? location,
-    int squigglyLength, String path, String messageText) {
+    int squigglyLength, String? path, String messageText) {
   if (sourceLine == null || location == null) {
     sourceLine = "";
   } else if (sourceLine.isNotEmpty) {
diff --git a/pkg/front_end/lib/src/fasta/crash.dart b/pkg/front_end/lib/src/fasta/crash.dart
index 87f406a..c9a8700 100644
--- a/pkg/front_end/lib/src/fasta/crash.dart
+++ b/pkg/front_end/lib/src/fasta/crash.dart
@@ -33,6 +33,7 @@
 
   Crash(this.uri, this.charOffset, this.error, this.trace);
 
+  @override
   String toString() {
     return """
 Crash when compiling $uri,
@@ -49,7 +50,7 @@
 
 Future<T> reportCrash<T>(error, StackTrace trace,
     [Uri? uri, int? charOffset]) async {
-  note(String note) async {
+  Future<void> note(String note) async {
     stderr.write(note);
     await stderr.flush();
   }
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 1462633..c4ba7a5 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
@@ -23,6 +23,7 @@
 import 'dill_member_builder.dart';
 
 class DillClassBuilder extends ClassBuilderImpl {
+  @override
   final Class cls;
 
   DillClassBuilder(Class cls, DillLibraryBuilder parent)
@@ -45,8 +46,10 @@
             parent,
             cls.fileOffset);
 
+  @override
   DillLibraryBuilder get library => super.library as DillLibraryBuilder;
 
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     List<TypeVariableBuilder>? typeVariables = super.typeVariables;
     if (typeVariables == null && cls.typeParameters.isNotEmpty) {
@@ -56,8 +59,10 @@
     return typeVariables;
   }
 
+  @override
   Uri get fileUri => cls.fileUri;
 
+  @override
   TypeBuilder? get supertypeBuilder {
     TypeBuilder? supertype = super.supertypeBuilder;
     if (supertype == null) {
@@ -137,6 +142,7 @@
 
   /// Returns true if this class is the result of applying a mixin to its
   /// superclass.
+  @override
   bool get isMixinApplication => cls.isMixinApplication;
 
   @override
@@ -152,6 +158,7 @@
     unimplemented("mixedInType=", -1, null);
   }
 
+  @override
   List<TypeBuilder>? get interfaceBuilders {
     if (cls.implementedTypes.isEmpty) return null;
     if (super.interfaceBuilders == null) {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
index 1a1857b..097bdc1 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
@@ -21,6 +21,7 @@
 import 'dill_extension_member_builder.dart';
 
 class DillExtensionBuilder extends ExtensionBuilderImpl {
+  @override
   final Extension extension;
   List<TypeVariableBuilder>? _typeParameters;
   TypeBuilder? _onType;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
index c35ec2c..9dc0213 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
@@ -17,6 +17,7 @@
   @override
   bool get isStatic => _descriptor.isStatic;
 
+  @override
   bool get isExternal => member.isExternal;
 
   @override
@@ -47,6 +48,7 @@
       this.field, ExtensionMemberDescriptor descriptor, Builder parent)
       : super(field, descriptor, parent);
 
+  @override
   Member get member => field;
 
   @override
@@ -73,6 +75,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Setter),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -93,6 +96,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Getter),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -113,6 +117,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Operator),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
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 4c1afba..8d60ebc 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
@@ -63,6 +63,7 @@
   @override
   final Library library;
 
+  @override
   DillLoader loader;
 
   /// Exports that can't be serialized.
@@ -144,11 +145,13 @@
   @override
   LibraryBuilder get nameOriginBuilder => this;
 
+  @override
   void addSyntheticDeclarationOfDynamic() {
     addBuilder("dynamic",
         new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1), -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNever() {
     addBuilder(
         "Never",
@@ -157,6 +160,7 @@
         -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNull() {
     // The name "Null" is declared by the class Null.
   }
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 e76b8e2..14ea957 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -32,6 +32,7 @@
 
   DillLoader(TargetImplementation target) : super(target);
 
+  @override
   Template<SummaryTemplate> get outlineSummaryTemplate =>
       templateDillOutlineSummary;
 
@@ -83,6 +84,7 @@
         as DillLibraryBuilder;
   }
 
+  @override
   Future<Null> buildOutline(DillLibraryBuilder builder) async {
     // ignore: unnecessary_null_comparison
     if (builder.library == null) {
@@ -91,6 +93,7 @@
     builder.markAsReadyToBuild();
   }
 
+  @override
   Future<Null> buildBody(DillLibraryBuilder builder) {
     return buildOutline(builder);
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index 54a3158..9730305 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -23,42 +23,56 @@
 import '../problems.dart' show unhandled;
 
 abstract class DillMemberBuilder extends MemberBuilderImpl {
+  @override
   final int modifiers;
 
   DillMemberBuilder(Member member, Builder parent)
       : modifiers = computeModifiers(member),
         super(parent, member.fileOffset, member.fileUri);
 
+  @override
   Member get member;
 
+  @override
   Iterable<Member> get exportedMembers => [member];
 
+  @override
   String get debugName => "DillMemberBuilder";
 
+  @override
   String get name => member.name.text;
 
+  @override
   bool get isConstructor => member is Constructor;
 
+  @override
   ProcedureKind? get kind {
     final Member member = this.member;
     return member is Procedure ? member.kind : null;
   }
 
+  @override
   bool get isRegularMethod => identical(ProcedureKind.Method, kind);
 
+  @override
   bool get isGetter => identical(ProcedureKind.Getter, kind);
 
+  @override
   bool get isSetter => identical(ProcedureKind.Setter, kind);
 
+  @override
   bool get isOperator => identical(ProcedureKind.Operator, kind);
 
+  @override
   bool get isFactory => identical(ProcedureKind.Factory, kind);
 
+  @override
   bool get isRedirectingGenerativeConstructor {
     return isConstructor &&
         isRedirectingGenerativeConstructorImplementation(member as Constructor);
   }
 
+  @override
   bool get isSynthetic {
     final Member member = this.member;
     return member is Constructor && member.isSynthetic;
@@ -93,6 +107,7 @@
 
   DillFieldBuilder(this.field, Builder parent) : super(field, parent);
 
+  @override
   Member get member => field;
 
   @override
@@ -104,6 +119,7 @@
   @override
   Member? get invokeTarget => field;
 
+  @override
   bool get isField => true;
 
   @override
@@ -117,6 +133,7 @@
       : assert(procedure.kind == ProcedureKind.Getter),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -136,6 +153,7 @@
       : assert(procedure.kind == ProcedureKind.Setter),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -155,6 +173,7 @@
       : assert(procedure.kind == ProcedureKind.Method),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -174,6 +193,7 @@
       : assert(procedure.kind == ProcedureKind.Operator),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -193,6 +213,7 @@
   DillFactoryBuilder(this.procedure, this._factoryTearOff, Builder parent)
       : super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -284,6 +305,7 @@
     return other is DillClassMember && memberBuilder == other.memberBuilder;
   }
 
+  @override
   String toString() => 'DillClassMember($memberBuilder,forSetter=${forSetter})';
 }
 
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 089e3d4..f9c24fd 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -86,6 +86,7 @@
         new DillLibraryBuilder(library, loader);
   }
 
+  @override
   void releaseAncillaryResources() {
     libraryBuilders.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 6dc3d32..697dbef 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
@@ -18,22 +18,27 @@
 import 'dill_library_builder.dart' show DillLibraryBuilder;
 
 class DillTypeAliasBuilder extends TypeAliasBuilderImpl {
+  @override
   final Typedef typedef;
 
+  @override
   final Map<Name, Procedure>? tearOffs;
 
   List<TypeVariableBuilder>? _typeVariables;
   TypeBuilder? _type;
 
+  @override
   DartType? thisType;
 
   DillTypeAliasBuilder(this.typedef, this.tearOffs, DillLibraryBuilder parent)
       : super(null, typedef.name, parent, typedef.fileOffset);
 
+  @override
   List<MetadataBuilder> get metadata {
     return unimplemented("metadata", -1, null);
   }
 
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     if (_typeVariables == null && typedef.typeParameters.isNotEmpty) {
       _typeVariables =
@@ -42,10 +47,12 @@
     return _typeVariables;
   }
 
+  @override
   int varianceAt(int index) {
     return typedef.typeParameters[index].variance;
   }
 
+  @override
   bool get fromDill => true;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
index 56b1627..d56e24f 100644
--- a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
@@ -27,6 +27,7 @@
 /// Entity that delegates to an underlying memory or physical file system
 /// entity.
 class HybridFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
   FileSystemEntity? _delegate;
   final HybridFileSystem _fs;
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 48bbed7..6a57d1d 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -2065,7 +2065,7 @@
 
     // Maps all non-platform LibraryBuilders from their import URI.
     Map<Uri, LibraryBuilder> builders = <Uri, LibraryBuilder>{};
-    Map<Uri?, LibraryBuilder> partUriToParent = <Uri, LibraryBuilder>{};
+    Map<Uri?, LibraryBuilder> partUriToParent = <Uri?, LibraryBuilder>{};
 
     // Invalidated URIs translated back to their import URI (package:, dart:,
     // etc.).
@@ -2097,7 +2097,7 @@
       return false;
     }
 
-    addBuilderAndInvalidateUris(Uri uri, LibraryBuilder libraryBuilder) {
+    void addBuilderAndInvalidateUris(Uri uri, LibraryBuilder libraryBuilder) {
       if (uri.scheme == "dart" && !libraryBuilder.isSynthetic) {
         if (seenUris.add(libraryBuilder.importUri)) {
           reusedLibraries.add(libraryBuilder);
@@ -2331,6 +2331,7 @@
 
   const InitializeFromComponentError(this.message);
 
+  @override
   String toString() => message;
 }
 
@@ -2400,6 +2401,7 @@
       DillTarget dillTarget, UriTranslator uriTranslator)
       : super(fileSystem, includeComments, dillTarget, uriTranslator);
 
+  @override
   ChangedStructureNotifier get changedStructureNotifier => this;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/incremental_serializer.dart b/pkg/front_end/lib/src/fasta/incremental_serializer.dart
index c9d9a0b..5803a9a 100644
--- a/pkg/front_end/lib/src/fasta/incremental_serializer.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_serializer.dart
@@ -256,7 +256,7 @@
 
   /// Add the group but not its dependencies to the output if they weren't added
   /// already.
-  addDataButNotDependentData(SerializationGroup group,
+  void addDataButNotDependentData(SerializationGroup group,
       Set<SerializationGroup> cachedPackagesInOutput, Sink<List<int>> sink) {
     if (cachedPackagesInOutput.add(group)) {
       sink.add(group.serializedData);
@@ -265,7 +265,7 @@
 
   /// Add the group and its dependencies to the output if they weren't added
   /// already.
-  addDataAndDependentData(SerializationGroup group,
+  void addDataAndDependentData(SerializationGroup group,
       Set<SerializationGroup> cachedPackagesInOutput, Sink<List<int>> sink) {
     if (cachedPackagesInOutput.add(group)) {
       sink.add(group.serializedData);
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 771e607..0db0a7a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -12,6 +12,7 @@
     show
         Assert,
         BlockKind,
+        ConstructorReferenceContext,
         FormalParameterKind,
         IdentifierContext,
         MemberKind,
@@ -99,6 +100,8 @@
 
 import '../scope.dart';
 
+import '../source/diet_parser.dart';
+
 import '../source/scope_listener.dart'
     show
         FixedNullableList,
@@ -125,9 +128,11 @@
 
 import 'constness.dart' show Constness;
 
+import 'constructor_tearoff_lowering.dart';
+
 import 'expression_generator.dart';
 
-import 'expression_generator_helper.dart' show ExpressionGeneratorHelper;
+import 'expression_generator_helper.dart';
 
 import 'forest.dart' show Forest;
 
@@ -138,8 +143,7 @@
         RedirectingFactoryBody,
         RedirectionTarget,
         getRedirectingFactoryBody,
-        getRedirectionTarget,
-        isRedirectingFactory;
+        getRedirectionTarget;
 
 import 'type_algorithms.dart' show calculateBounds;
 
@@ -160,6 +164,7 @@
 
 class BodyBuilder extends ScopeListener<JumpTarget>
     implements ExpressionGeneratorHelper, EnsureLoaded, DelayedActionPerformer {
+  @override
   final Forest forest;
 
   // TODO(ahe): Rename [library] to 'part'.
@@ -301,8 +306,9 @@
 
   Scope? switchScope;
 
-  CloneVisitorNotMembers? cloner;
+  late _BodyBuilderCloner _cloner = new _BodyBuilderCloner(this);
 
+  @override
   ConstantContext constantContext = ConstantContext.none;
 
   UnresolvedType? currentLocalVariableType;
@@ -317,26 +323,25 @@
 
   /// List of built redirecting factory invocations.  The targets of the
   /// invocations are to be resolved in a separate step.
-  final List<StaticInvocation> redirectingFactoryInvocations =
-      <StaticInvocation>[];
+  final List<FactoryConstructorInvocation> redirectingFactoryInvocations =
+      <FactoryConstructorInvocation>[];
 
   /// List of redirecting factory invocations delayed for resolution.
   ///
   /// A resolution of a redirecting factory invocation can be delayed because
   /// the inference in the declaration of the redirecting factory isn't done
   /// yet.
-  final List<StaticInvocation> delayedRedirectingFactoryInvocations =
-      <StaticInvocation>[];
+  final List<FactoryConstructorInvocation>
+      delayedRedirectingFactoryInvocations = <FactoryConstructorInvocation>[];
 
   /// List of built type aliased generative constructor invocations that
   /// require unaliasing.
-  final List<TypeAliasedConstructorInvocationJudgment>
+  final List<TypeAliasedConstructorInvocation>
       typeAliasedConstructorInvocations = [];
 
   /// List of built type aliased factory constructor invocations that require
   /// unaliasing.
-  final List<TypeAliasedFactoryInvocationJudgment>
-      typeAliasedFactoryInvocations = [];
+  final List<TypeAliasedFactoryInvocation> typeAliasedFactoryInvocations = [];
 
   /// Variables with metadata.  Their types need to be inferred late, for
   /// example, in [finishFunction].
@@ -442,6 +447,7 @@
     return isDeclarationInstanceMember || member is ConstructorBuilder;
   }
 
+  @override
   TypeEnvironment get typeEnvironment => typeInferrer.typeSchemaEnvironment;
 
   DartType get implicitTypeArgument => const ImplicitTypeArgument();
@@ -555,6 +561,14 @@
 
   Statement popStatement() => forest.wrapVariables(pop() as Statement);
 
+  Statement? popNullableStatement() {
+    Statement? statement = pop(NullValue.Block) as Statement?;
+    if (statement != null) {
+      statement = forest.wrapVariables(statement);
+    }
+    return statement;
+  }
+
   void enterSwitchScope() {
     push(switchScope ?? NullValue.SwitchScope);
     switchScope = scope;
@@ -646,18 +660,42 @@
     debugEvent("beginMetadata");
     super.push(constantContext);
     constantContext = ConstantContext.inferred;
+    assert(checkState(token, [ValueKinds.ConstantContext]));
   }
 
   @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
+    assert(checkState(beginToken, [
+      /*arguments*/ ValueKinds.ArgumentsOrNull,
+      /*suffix*/ if (periodBeforeName != null)
+        unionOfKinds([ValueKinds.Identifier, ValueKinds.ParserRecovery]),
+      /*type arguments*/ ValueKinds.TypeArgumentsOrNull,
+      /*type*/ unionOfKinds([
+        ValueKinds.Generator,
+        ValueKinds.QualifiedName,
+        ValueKinds.ProblemBuilder,
+        ValueKinds.ParserRecovery
+      ])
+    ]));
     debugEvent("Metadata");
     Arguments? arguments = pop() as Arguments?;
-    pushQualifiedReference(beginToken.next!, periodBeforeName);
+    pushQualifiedReference(
+        beginToken.next!, periodBeforeName, ConstructorReferenceContext.Const);
+    assert(checkState(beginToken, [
+      /*constructor name identifier*/ ValueKinds.IdentifierOrNull,
+      /*constructor name*/ ValueKinds.Name,
+      /*type arguments*/ ValueKinds.TypeArgumentsOrNull,
+      /*class*/ unionOfKinds([
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+        ValueKinds.ParserRecovery
+      ]),
+    ]));
     if (arguments != null) {
       push(arguments);
       _buildConstructorReferenceInvocation(
           beginToken.next!, beginToken.offset, Constness.explicitConst,
-          inMetadata: true);
+          inMetadata: true, inImplicitCreationContext: false);
       push(popForValue());
     } else {
       pop(); // Name last identifier
@@ -667,13 +705,14 @@
       if (expression is Identifier) {
         Identifier identifier = expression;
         expression = new UnresolvedNameGenerator(this, identifier.token,
-            new Name(identifier.name, libraryBuilder.nameOrigin));
+            new Name(identifier.name, libraryBuilder.nameOrigin),
+            unresolvedReadKind: UnresolvedKind.Unknown);
       }
       if (name?.isNotEmpty ?? false) {
         Token period = periodBeforeName ?? beginToken.next!.next!;
         Generator generator = expression as Generator;
-        expression = generator.buildPropertyAccess(
-            new IncompletePropertyAccessGenerator(
+        expression = generator.buildSelectorAccess(
+            new PropertySelector(
                 this, period.next!, new Name(name!, libraryBuilder.nameOrigin)),
             period.next!.offset,
             false);
@@ -695,10 +734,12 @@
       }
       constantContext = savedConstantContext;
     }
+    assert(checkState(beginToken, [ValueKinds.Expression]));
   }
 
   @override
   void endMetadataStar(int count) {
+    assert(checkState(null, repeatedKinds(ValueKinds.Expression, count)));
     debugEvent("MetadataStar");
     if (count == 0) {
       push(NullValue.Metadata);
@@ -707,6 +748,7 @@
               .popNonNullable(stack, count, dummyExpression) ??
           NullValue.Metadata /* Ignore parser recovery */);
     }
+    assert(checkState(null, [ValueKinds.AnnotationListOrNull]));
   }
 
   @override
@@ -728,6 +770,7 @@
       }
     }
     push(count);
+    assert(checkState(beginToken, [ValueKinds.Integer]));
   }
 
   @override
@@ -754,14 +797,19 @@
       }
     }
     push(count);
+    assert(checkState(beginToken, [ValueKinds.Integer]));
   }
 
-  @override
   void finishFields() {
     debugEvent("finishFields");
+    assert(checkState(null, [/*field count*/ ValueKinds.Integer]));
     int count = pop() as int;
     List<FieldBuilder> fields = <FieldBuilder>[];
     for (int i = 0; i < count; i++) {
+      assert(checkState(null, [
+        ValueKinds.FieldInitializerOrNull,
+        ValueKinds.Identifier,
+      ]));
       Expression? initializer = pop() as Expression?;
       Identifier identifier = pop() as Identifier;
       String name = identifier.name;
@@ -809,6 +857,8 @@
         fieldBuilder.buildBody(coreTypes, null);
       }
     }
+    assert(checkState(
+        null, [ValueKinds.TypeOrNull, ValueKinds.AnnotationListOrNull]));
     {
       // 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
@@ -824,8 +874,34 @@
     }
     pop(); // Annotations.
 
-    resolveRedirectingFactoryTargets();
-    finishVariableMetadata();
+    performBacklogComputations();
+    assert(stack.length == 0);
+  }
+
+  /// Perform delayed computations that were put on back log during body
+  /// building.
+  ///
+  /// Back logged computations include resolution of redirecting factory
+  /// invocations and checking of typedef types.
+  void performBacklogComputations(
+      [List<DelayedActionPerformer>? delayedActionPerformers]) {
+    _finishVariableMetadata();
+    _unaliasTypeAliasedConstructorInvocations();
+    _unaliasTypeAliasedFactoryInvocations();
+    _resolveRedirectingFactoryTargets(
+        redirectingFactoryInvocations, delayedRedirectingFactoryInvocations);
+    libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
+    if (hasDelayedActions) {
+      assert(
+          delayedActionPerformers != null,
+          "Body builder has delayed actions that cannot be performed: "
+          "$delayedRedirectingFactoryInvocations");
+      delayedActionPerformers?.add(this);
+    }
+  }
+
+  void finishRedirectingFactoryBody() {
+    performBacklogComputations();
   }
 
   @override
@@ -844,6 +920,7 @@
       exitLocalScope();
       push(block);
     }
+    assert(checkState(closeBrace, [ValueKinds.StatementOrNull]));
   }
 
   void prepareInitializers() {
@@ -915,6 +992,14 @@
 
   @override
   void endInitializer(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Initializer,
+        ValueKinds.Generator,
+        ValueKinds.Expression,
+      ])
+    ]));
+
     debugEvent("endInitializer");
     inFieldInitializer = false;
     assert(!inInitializer);
@@ -952,7 +1037,11 @@
 
   DartType _computeReturnTypeContext(MemberBuilder member) {
     if (member is ProcedureBuilder) {
-      return member.function.returnType;
+      final bool isReturnTypeUndeclared = member.returnType == null &&
+          member.function.returnType is DynamicType;
+      return isReturnTypeUndeclared && libraryBuilder.isNonNullableByDefault
+          ? const UnknownType()
+          : member.function.returnType;
     } else if (member is SourceFactoryBuilder) {
       return member.function.returnType;
     } else {
@@ -961,7 +1050,6 @@
     }
   }
 
-  @override
   void finishFunction(
       FormalParameters? formals, AsyncMarker asyncModifier, Statement? body) {
     debugEvent("finishFunction");
@@ -1005,8 +1093,8 @@
           VariableDeclaration? tearOffParameter =
               builder.getTearOffParameter(i);
           if (tearOffParameter != null) {
-            cloner ??= new CloneVisitorNotMembers();
-            Expression tearOffInitializer = cloner!.clone(initializer!);
+            Expression tearOffInitializer =
+                _cloner.cloneInContext(initializer!);
             tearOffParameter.initializer = tearOffInitializer
               ..parent = tearOffParameter;
             libraryBuilder.loader.transformPostInference(
@@ -1097,9 +1185,7 @@
       }
     }
 
-    resolveRedirectingFactoryTargets();
-    finishVariableMetadata();
-    libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
+    performBacklogComputations();
   }
 
   void checkAsyncReturnType(AsyncMarker asyncModifier, DartType returnType,
@@ -1165,6 +1251,7 @@
   ///    transformation needed has been performed); and
   /// b) The library is correctly marked as being used to allow for proper
   ///    'dependency pruning'.
+  @override
   void ensureLoaded(Member? member) {
     if (member == null) return;
     Library ensureLibraryLoaded = member.enclosingLibrary;
@@ -1182,6 +1269,7 @@
   /// This is designed for use with asserts.
   /// See [ensureLoaded] for a description of what 'loaded' means and the ideas
   /// behind that.
+  @override
   bool isLoaded(Member? member) {
     if (member == null) return true;
     Library ensureLibraryLoaded = member.enclosingLibrary;
@@ -1195,14 +1283,6 @@
     return true;
   }
 
-  // TODO(eernst): Rename this method now that it handles more tasks.
-  void resolveRedirectingFactoryTargets() {
-    _unaliasTypeAliasedConstructorInvocations();
-    _unaliasTypeAliasedFactoryInvocations();
-    _resolveRedirectingFactoryTargets(
-        redirectingFactoryInvocations, delayedRedirectingFactoryInvocations);
-  }
-
   /// Return an [Expression] resolving the argument invocation.
   ///
   /// The arguments specify the [StaticInvocation] whose `.target` is
@@ -1214,78 +1294,56 @@
     Procedure initialTarget = target;
     Expression replacementNode;
 
-    RedirectionTarget? redirectionTarget =
+    RedirectionTarget redirectionTarget =
         getRedirectionTarget(initialTarget, this);
-    Member? resolvedTarget = redirectionTarget?.target;
-    if (redirectionTarget != null &&
-        redirectionTarget.typeArguments.any((type) => type is UnknownType)) {
+    Member resolvedTarget = redirectionTarget.target;
+    if (redirectionTarget.typeArguments.any((type) => type is UnknownType)) {
       return null;
     }
 
-    if (resolvedTarget == null) {
-      String name = constructorNameForDiagnostics(initialTarget.name.text,
-          className: initialTarget.enclosingClass!.name);
-      // TODO(dmitryas): Report this error earlier.
-      replacementNode = buildProblem(
-          fasta.templateCyclicRedirectingFactoryConstructors
-              .withArguments(name),
-          initialTarget.fileOffset,
-          name.length);
-    } else if (resolvedTarget is Constructor &&
-        resolvedTarget.enclosingClass.isAbstract) {
-      replacementNode = evaluateArgumentsBefore(
-          forest.createArguments(noLocation, arguments.positional,
-              types: arguments.types, named: arguments.named),
-          buildAbstractClassInstantiationError(
-              fasta.templateAbstractRedirectedClassInstantiation
-                  .withArguments(resolvedTarget.enclosingClass.name),
-              resolvedTarget.enclosingClass.name,
-              initialTarget.fileOffset));
+    RedirectingFactoryBody? redirectingFactoryBody =
+        getRedirectingFactoryBody(resolvedTarget);
+    if (redirectingFactoryBody != null) {
+      // If the redirection target is itself a redirecting factory, it means
+      // that it is unresolved.
+      assert(redirectingFactoryBody.isError);
+      String errorMessage = redirectingFactoryBody.errorMessage!;
+      replacementNode = new InvalidExpression(errorMessage)
+        ..fileOffset = fileOffset;
     } else {
-      RedirectingFactoryBody? redirectingFactoryBody =
-          getRedirectingFactoryBody(resolvedTarget);
-      if (redirectingFactoryBody != null) {
-        // If the redirection target is itself a redirecting factory, it means
-        // that it is unresolved.
-        assert(redirectingFactoryBody.isUnresolved);
-        String errorName = redirectingFactoryBody.unresolvedName!;
-        replacementNode = buildProblem(
-            fasta.templateMethodNotFound.withArguments(errorName),
-            fileOffset,
-            noLength,
-            suppressMessage: true);
-      } else {
-        Substitution substitution = Substitution.fromPairs(
-            initialTarget.function.typeParameters, arguments.types);
-        for (int i = 0; i < redirectionTarget!.typeArguments.length; i++) {
-          DartType typeArgument =
-              substitution.substituteType(redirectionTarget.typeArguments[i]);
-          if (i < arguments.types.length) {
-            arguments.types[i] = typeArgument;
-          } else {
-            arguments.types.add(typeArgument);
-          }
+      Substitution substitution = Substitution.fromPairs(
+          initialTarget.function.typeParameters, arguments.types);
+      for (int i = 0; i < redirectionTarget.typeArguments.length; i++) {
+        DartType typeArgument =
+            substitution.substituteType(redirectionTarget.typeArguments[i]);
+        if (i < arguments.types.length) {
+          arguments.types[i] = typeArgument;
+        } else {
+          arguments.types.add(typeArgument);
         }
-        arguments.types.length = redirectionTarget.typeArguments.length;
-
-        replacementNode = buildStaticInvocation(
-            resolvedTarget,
-            forest.createArguments(noLocation, arguments.positional,
-                types: arguments.types,
-                named: arguments.named,
-                hasExplicitTypeArguments: hasExplicitTypeArguments(arguments)),
-            constness:
-                isConst ? Constness.explicitConst : Constness.explicitNew,
-            charOffset: fileOffset);
       }
+      arguments.types.length = redirectionTarget.typeArguments.length;
+
+      replacementNode = buildStaticInvocation(
+          resolvedTarget,
+          forest.createArguments(noLocation, arguments.positional,
+              types: arguments.types,
+              named: arguments.named,
+              hasExplicitTypeArguments: hasExplicitTypeArguments(arguments)),
+          constness: isConst ? Constness.explicitConst : Constness.explicitNew,
+          charOffset: fileOffset);
     }
     return replacementNode;
   }
 
   void _resolveRedirectingFactoryTargets(
-      List<StaticInvocation> redirectingFactoryInvocations,
-      List<StaticInvocation>? delayedRedirectingFactoryInvocations) {
-    for (StaticInvocation invocation in redirectingFactoryInvocations) {
+      List<FactoryConstructorInvocation> redirectingFactoryInvocations,
+      List<FactoryConstructorInvocation>?
+          delayedRedirectingFactoryInvocations) {
+    List<FactoryConstructorInvocation> invocations =
+        redirectingFactoryInvocations.toList();
+    redirectingFactoryInvocations.clear();
+    for (FactoryConstructorInvocation invocation in invocations) {
       // If the invocation was invalid, it or its parent has already been
       // desugared into an exception throwing expression.  There is nothing to
       // resolve anymore.  Note that in the case where the invocation's parent
@@ -1295,8 +1353,7 @@
       if (invocation.parent == null) continue;
       // ignore: unnecessary_null_comparison
       if (typeInferrer != null) {
-        if (invocation is FactoryConstructorInvocationJudgment &&
-            !invocation.hasBeenInferred) {
+        if (!invocation.hasBeenInferred) {
           continue;
         }
       } else {
@@ -1317,11 +1374,10 @@
         invocation.replaceWith(replacement);
       }
     }
-    redirectingFactoryInvocations.clear();
   }
 
   void _unaliasTypeAliasedConstructorInvocations() {
-    for (TypeAliasedConstructorInvocationJudgment invocation
+    for (TypeAliasedConstructorInvocation invocation
         in typeAliasedConstructorInvocations) {
       bool inferred = !hasExplicitTypeArguments(invocation.arguments);
       DartType aliasedType = new TypedefType(
@@ -1347,7 +1403,7 @@
   }
 
   void _unaliasTypeAliasedFactoryInvocations() {
-    for (TypeAliasedFactoryInvocationJudgment invocation
+    for (TypeAliasedFactoryInvocation invocation
         in typeAliasedFactoryInvocations) {
       bool inferred = !hasExplicitTypeArguments(invocation.arguments);
       DartType aliasedType = new TypedefType(
@@ -1380,6 +1436,7 @@
   /// calculations in another library.  For example, a resolution of a
   /// redirecting factory invocation depends on the type inference in the
   /// redirecting factory.
+  @override
   void performDelayedActions() {
     if (delayedRedirectingFactoryInvocations.isNotEmpty) {
       _resolveRedirectingFactoryTargets(
@@ -1397,11 +1454,12 @@
     }
   }
 
+  @override
   bool get hasDelayedActions {
     return delayedRedirectingFactoryInvocations.isNotEmpty;
   }
 
-  void finishVariableMetadata() {
+  void _finishVariableMetadata() {
     List<VariableDeclaration>? variablesWithMetadata =
         this.variablesWithMetadata;
     this.variablesWithMetadata = null;
@@ -1421,10 +1479,9 @@
         List<Expression> annotations = variables.first.annotations;
         inferAnnotations(variables.first, annotations);
         for (int i = 1; i < variables.length; i++) {
-          cloner ??= new CloneVisitorNotMembers();
           VariableDeclaration variable = variables[i];
           for (int i = 0; i < annotations.length; i++) {
-            variable.addAnnotation(cloner!.clone(annotations[i]));
+            variable.addAnnotation(_cloner.cloneInContext(annotations[i]));
           }
         }
       }
@@ -1433,6 +1490,7 @@
 
   @override
   List<Expression> finishMetadata(Annotatable? parent) {
+    assert(checkState(null, [ValueKinds.AnnotationList]));
     List<Expression> expressions = pop() as List<Expression>;
     inferAnnotations(parent, expressions);
 
@@ -1450,8 +1508,7 @@
     } else {
       temporaryParent = new ListLiteral(expressions);
     }
-    resolveRedirectingFactoryTargets();
-    finishVariableMetadata();
+    performBacklogComputations();
     return temporaryParent != null ? temporaryParent.expressions : expressions;
   }
 
@@ -1484,10 +1541,17 @@
         new FormalParameters(formals, fileOffset, noLength, uri)
             .computeFormalParameterScope(scope, member, this));
 
-    token = parser.parseExpression(parser.syntheticPreviousToken(token));
+    Token endToken =
+        parser.parseExpression(parser.syntheticPreviousToken(token));
 
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ])
+    ]));
     Expression expression = popForValue();
-    Token eof = token.next!;
+    Token eof = endToken.next!;
 
     if (!eof.isEof) {
       expression = wrapInLocatedProblem(
@@ -1509,7 +1573,7 @@
         "Previously implicit assumption about inferFunctionBody "
         "not returning anything different.");
 
-    resolveRedirectingFactoryTargets();
+    performBacklogComputations();
     libraryBuilder.loader.transformPostInference(fakeReturn,
         transformSetLiterals, transformCollections, libraryBuilder.library);
 
@@ -1517,7 +1581,8 @@
   }
 
   void parseInitializers(Token token) {
-    Parser parser = new Parser(this);
+    Parser parser = new Parser(this,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (!token.isEof) {
       token = parser.parseInitializers(token);
       checkEmpty(token.charOffset);
@@ -1530,18 +1595,29 @@
   }
 
   Expression parseFieldInitializer(Token token) {
-    Parser parser = new Parser(this);
-    token = parser.parseExpression(parser.syntheticPreviousToken(token));
+    Parser parser = new Parser(this,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
+    Token endToken =
+        parser.parseExpression(parser.syntheticPreviousToken(token));
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ])
+    ]));
     Expression expression = popForValue();
-    checkEmpty(token.charOffset);
+    checkEmpty(endToken.charOffset);
     return expression;
   }
 
   Expression parseAnnotation(Token token) {
-    Parser parser = new Parser(this);
-    token = parser.parseMetadata(parser.syntheticPreviousToken(token));
+    Parser parser = new Parser(this,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
+    Token endToken = parser.parseMetadata(parser.syntheticPreviousToken(token));
+    assert(checkState(token, [ValueKinds.Expression]));
     Expression annotation = pop() as Expression;
-    checkEmpty(token.charOffset);
+    checkEmpty(endToken.charOffset);
     return annotation;
   }
 
@@ -1616,6 +1692,13 @@
 
   @override
   void handleExpressionStatement(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     debugEvent("ExpressionStatement");
     push(forest.createExpressionStatement(
         offsetForToken(token), popForEffect()));
@@ -1661,16 +1744,32 @@
       push(forest.createArguments(
           beginToken.offset, new List<Expression>.from(arguments)));
     }
+    assert(checkState(beginToken, [ValueKinds.Arguments]));
   }
 
   @override
   void handleParenthesizedCondition(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     debugEvent("ParenthesizedCondition");
     push(popForValue());
+    assert(checkState(token, [ValueKinds.Expression]));
   }
 
   @override
   void handleParenthesizedExpression(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     debugEvent("ParenthesizedExpression");
     Expression value = popForValue();
     if (value is ShadowLargeIntLiteral) {
@@ -1686,6 +1785,12 @@
     } else {
       push(new ParenthesizedExpressionGenerator(this, token.endGroup!, value));
     }
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ]),
+    ]));
   }
 
   @override
@@ -1713,8 +1818,7 @@
     bool isInForest = arguments is Arguments &&
         typeArguments != null &&
         (receiver is! TypeUseGenerator ||
-            (receiver is TypeUseGenerator &&
-                receiver.declaration is! TypeAliasBuilder));
+            receiver.declaration is! TypeAliasBuilder);
     if (isInForest) {
       assert(forest.argumentsTypeArguments(arguments).isEmpty);
       forest.argumentsSetTypeArguments(
@@ -1730,9 +1834,9 @@
     } else if (receiver is Identifier) {
       Name name = new Name(receiver.name, libraryBuilder.nameOrigin);
       if (arguments == null) {
-        push(new IncompletePropertyAccessGenerator(this, beginToken, name));
+        push(new PropertySelector(this, beginToken, name));
       } else {
-        push(new SendAccessGenerator(
+        push(new InvocationSelector(
             this, beginToken, name, typeArguments, arguments as Arguments,
             isTypeArgumentsInForest: isInForest));
       }
@@ -1748,13 +1852,14 @@
         ValueKinds.Expression,
         ValueKinds.Generator,
         ValueKinds.Initializer,
-        ValueKinds.ProblemBuilder
+        ValueKinds.ProblemBuilder,
+        ValueKinds.Selector,
       ])
     ]));
   }
 
   @override
-  /* Expression | Generator | Initializer */ finishSend(Object receiver,
+  Expression_Generator_Initializer finishSend(Object receiver,
       List<UnresolvedType>? typeArguments, Arguments arguments, int charOffset,
       {bool isTypeArgumentsInForest = false}) {
     if (receiver is Generator) {
@@ -1768,6 +1873,12 @@
 
   @override
   void beginCascade(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ]),
+    ]));
     debugEvent("beginCascade");
     Expression expression = popForValue();
     if (expression is Cascade) {
@@ -1786,10 +1897,24 @@
       push(_createReadOnlyVariableAccess(variable, token, expression.fileOffset,
           null, ReadOnlyAccessKind.LetVariable));
     }
+    assert(checkState(token, [
+      ValueKinds.Generator,
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ]),
+    ]));
   }
 
   @override
   void endCascade() {
+    assert(checkState(null, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ]),
+      ValueKinds.Expression,
+    ]));
     debugEvent("endCascade");
     Expression expression = popForEffect();
     Cascade cascadeReceiver = pop() as Cascade;
@@ -1802,18 +1927,35 @@
     debugEvent("beginCaseExpression");
     super.push(constantContext);
     constantContext = ConstantContext.inferred;
+    assert(checkState(caseKeyword, [ValueKinds.ConstantContext]));
   }
 
   @override
   void endCaseExpression(Token colon) {
+    assert(checkState(colon, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+      ValueKinds.ConstantContext,
+    ]));
     debugEvent("endCaseExpression");
     Expression expression = popForValue();
     constantContext = pop() as ConstantContext;
     super.push(expression);
+    assert(checkState(colon, [ValueKinds.Expression]));
   }
 
   @override
   void beginBinaryExpression(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     bool isAnd = optional("&&", token);
     if (isAnd || optional("||", token)) {
       Expression lhs = popForValue();
@@ -1824,10 +1966,25 @@
       }
       push(lhs);
     }
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
   }
 
   @override
   void endBinaryExpression(Token token) {
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+        ValueKinds.Selector,
+      ]),
+    ]));
     debugEvent("BinaryExpression");
     if (optional(".", token) ||
         optional("..", token) ||
@@ -1842,6 +1999,13 @@
     } else {
       doBinaryExpression(token);
     }
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.Initializer,
+      ]),
+    ]));
   }
 
   void doBinaryExpression(Token token) {
@@ -1897,10 +2061,25 @@
         push(forest.createBinary(fileOffset, left as Expression, name, right));
       }
     }
+    assert(checkState(token, <ValueKind>[
+      ValueKinds.Expression,
+    ]));
   }
 
   /// Handle `a && b` and `a || b`.
   void doLogicalExpression(Token token) {
+    assert(checkState(token, <ValueKind>[
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     Expression argument = popForValue();
     Expression receiver = pop() as Expression;
     Expression logicalExpression = forest.createLogicalExpression(
@@ -1911,19 +2090,50 @@
       // [beginBinaryExpression].
       typeInferrer.assignedVariables.endNode(logicalExpression);
     }
+    assert(checkState(token, <ValueKind>[
+      ValueKinds.Expression,
+    ]));
   }
 
   /// Handle `a ?? b`.
   void doIfNull(Token token) {
+    assert(checkState(token, <ValueKind>[
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
     Expression b = popForValue();
     Expression a = popForValue();
     push(new IfNullExpression(a, b)..fileOffset = offsetForToken(token));
+    assert(checkState(token, <ValueKind>[
+      ValueKinds.Expression,
+    ]));
   }
 
   /// Handle `a?.b(...)`.
   void doIfNotNull(Token token) {
+    assert(checkState(token, <ValueKind>[
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.Selector,
+      ]),
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+        ValueKinds.Initializer,
+      ]),
+    ]));
     Object? send = pop();
-    if (send is IncompleteSendGenerator) {
+    if (send is Selector) {
       push(send.withReceiver(pop(), token.charOffset, isNullAware: true));
     } else {
       pop();
@@ -1931,19 +2141,51 @@
       push(buildProblem(fasta.templateExpectedIdentifier.withArguments(token),
           offsetForToken(token), lengthForToken(token)));
     }
+    assert(checkState(token, <ValueKind>[
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.Initializer,
+      ]),
+    ]));
   }
 
   void doDotOrCascadeExpression(Token token) {
+    assert(checkState(token, <ValueKind>[
+      /* after . or .. */ unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.Selector,
+      ]),
+      /* before . or .. */ unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.ProblemBuilder,
+        ValueKinds.Initializer,
+      ]),
+    ]));
     Object? send = pop();
-    if (send is IncompleteSendGenerator) {
+    if (send is Selector) {
       Object? receiver = optional(".", token) ? pop() : popForValue();
       push(send.withReceiver(receiver, token.charOffset));
+    } else if (send is IncompleteErrorGenerator) {
+      // Pop the "receiver" and push the error.
+      pop();
+      push(send);
     } else {
+      // Pop the "receiver" and push the error.
       pop();
       token = token.next!;
       push(buildProblem(fasta.templateExpectedIdentifier.withArguments(token),
           offsetForToken(token), lengthForToken(token)));
     }
+    assert(checkState(token, <ValueKind>[
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+        ValueKinds.Initializer,
+      ]),
+    ]));
   }
 
   bool areArgumentsCompatible(FunctionNode function, Arguments arguments) {
@@ -1952,12 +2194,11 @@
   }
 
   @override
-  Expression throwNoSuchMethodError(
+  Expression buildUnresolvedError(
       Expression receiver, String name, Arguments arguments, int charOffset,
       {Member? candidate,
       bool isSuper: false,
-      bool isGetter: false,
-      bool isSetter: false,
+      required UnresolvedKind kind,
       bool isStatic: false,
       LocatedMessage? message}) {
     int length = name.length;
@@ -1993,18 +2234,37 @@
       context = [contextMessage.withLocation(uri, offset, length)];
     }
     if (message == null) {
-      if (isGetter) {
-        message = warnUnresolvedGet(kernelName, charOffset,
-                isSuper: isSuper, reportWarning: false, context: context)
-            .withLocation(uri, charOffset, length);
-      } else if (isSetter) {
-        message = warnUnresolvedSet(kernelName, charOffset,
-                isSuper: isSuper, reportWarning: false, context: context)
-            .withLocation(uri, charOffset, length);
-      } else {
-        message = warnUnresolvedMethod(kernelName, charOffset,
-                isSuper: isSuper, reportWarning: false, context: context)
-            .withLocation(uri, charOffset, length);
+      switch (kind) {
+        case UnresolvedKind.Unknown:
+          assert(!isSuper);
+          message = fasta.templateNameNotFound
+              .withArguments(name)
+              .withLocation(uri, charOffset, length);
+          break;
+        case UnresolvedKind.Member:
+          message = warnUnresolvedMember(kernelName, charOffset,
+                  isSuper: isSuper, reportWarning: false, context: context)
+              .withLocation(uri, charOffset, length);
+          break;
+        case UnresolvedKind.Getter:
+          message = warnUnresolvedGet(kernelName, charOffset,
+                  isSuper: isSuper, reportWarning: false, context: context)
+              .withLocation(uri, charOffset, length);
+          break;
+        case UnresolvedKind.Setter:
+          message = warnUnresolvedSet(kernelName, charOffset,
+                  isSuper: isSuper, reportWarning: false, context: context)
+              .withLocation(uri, charOffset, length);
+          break;
+        case UnresolvedKind.Method:
+          message = warnUnresolvedMethod(kernelName, charOffset,
+                  isSuper: isSuper, reportWarning: false, context: context)
+              .withLocation(uri, charOffset, length);
+          break;
+        case UnresolvedKind.Constructor:
+          message = warnUnresolvedConstructor(kernelName, isSuper: isSuper)
+              .withLocation(uri, charOffset, length);
+          break;
       }
     }
     return buildProblem(
@@ -2012,6 +2272,20 @@
         context: context);
   }
 
+  Message warnUnresolvedMember(Name name, int charOffset,
+      {bool isSuper: false,
+      bool reportWarning: true,
+      List<LocatedMessage>? context}) {
+    Message message = isSuper
+        ? fasta.templateSuperclassHasNoMember.withArguments(name.text)
+        : fasta.templateMemberNotFound.withArguments(name.text);
+    if (reportWarning) {
+      addProblemErrorIfConst(message, charOffset, name.text.length,
+          context: context);
+    }
+    return message;
+  }
+
   @override
   Message warnUnresolvedGet(Name name, int charOffset,
       {bool isSuper: false,
@@ -2048,6 +2322,7 @@
       bool reportWarning: true,
       List<LocatedMessage>? context}) {
     String plainName = name.text;
+
     int dotIndex = plainName.lastIndexOf(".");
     if (dotIndex != -1) {
       plainName = plainName.substring(dotIndex + 1);
@@ -2067,6 +2342,13 @@
     return message;
   }
 
+  Message warnUnresolvedConstructor(Name name, {bool isSuper: false}) {
+    Message message = isSuper
+        ? fasta.templateSuperclassHasNoConstructor.withArguments(name.text)
+        : fasta.templateConstructorNotFound.withArguments(name.text);
+    return message;
+  }
+
   @override
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset) {
     addProblemErrorIfConst(
@@ -2098,28 +2380,37 @@
       // This deals with this kind of initializer: `C(a) : a = a;`
       Scope scope = inInitializer ? enclosingScope : this.scope;
       push(scopeLookup(scope, name, token));
-      return;
-    } else if (context.inDeclaration) {
-      if (context == IdentifierContext.topLevelVariableDeclaration ||
-          context == IdentifierContext.fieldDeclaration) {
-        constantContext = member.isConst
-            ? ConstantContext.inferred
-            : !member.isStatic &&
-                    classBuilder != null &&
-                    classBuilder!.declaresConstConstructor
-                ? ConstantContext.required
-                : ConstantContext.none;
-      }
-    } else if (constantContext != ConstantContext.none &&
-        !context.allowedInConstantExpression) {
-      addProblem(
-          fasta.messageNotAConstantExpression, token.charOffset, token.length);
-    }
-    if (token.isSynthetic) {
-      push(new ParserRecovery(offsetForToken(token)));
     } else {
-      push(new Identifier(token));
+      if (context.inDeclaration) {
+        if (context == IdentifierContext.topLevelVariableDeclaration ||
+            context == IdentifierContext.fieldDeclaration) {
+          constantContext = member.isConst
+              ? ConstantContext.inferred
+              : !member.isStatic &&
+                      classBuilder != null &&
+                      classBuilder!.declaresConstConstructor
+                  ? ConstantContext.required
+                  : ConstantContext.none;
+        }
+      } else if (constantContext != ConstantContext.none &&
+          !context.allowedInConstantExpression) {
+        addProblem(fasta.messageNotAConstantExpression, token.charOffset,
+            token.length);
+      }
+      if (token.isSynthetic) {
+        push(new ParserRecovery(offsetForToken(token)));
+      } else {
+        push(new Identifier(token));
+      }
     }
+    assert(checkState(token, [
+      unionOfKinds([
+        ValueKinds.Identifier,
+        ValueKinds.Generator,
+        ValueKinds.ParserRecovery,
+        ValueKinds.ProblemBuilder,
+      ]),
+    ]));
   }
 
   /// Helper method to create a [VariableGet] of the [variable] using
@@ -2154,7 +2445,7 @@
   /// implies that it shouldn't be turned into a [ThisPropertyAccessGenerator]
   /// if the name doesn't resolve in the scope).
   @override
-  /*Generator|Expression|Builder*/ scopeLookup(
+  Expression_Generator_Builder scopeLookup(
       Scope scope, String name, Token token,
       {bool isQualified: false, PrefixBuilder? prefix}) {
     int charOffset = offsetForToken(token);
@@ -2196,7 +2487,8 @@
         assert(declaration == null);
         if (constantContext != ConstantContext.none ||
             (inFieldInitializer && !inLateFieldInitializer) && !inInitializer) {
-          return new UnresolvedNameGenerator(this, token, n);
+          return new UnresolvedNameGenerator(this, token, n,
+              unresolvedReadKind: UnresolvedKind.Unknown);
         }
         if (extensionThis != null) {
           // If we are in an extension instance member we interpret this as an
@@ -2212,7 +2504,8 @@
           member.name == "_getMainClosure") {
         return forest.createNullLiteral(charOffset);
       } else {
-        return new UnresolvedNameGenerator(this, token, n);
+        return new UnresolvedNameGenerator(this, token, n,
+            unresolvedReadKind: UnresolvedKind.Unknown);
       }
     } else if (declaration.isTypeDeclaration) {
       if (declaration is AccessErrorBuilder) {
@@ -2271,7 +2564,8 @@
       }
       if (declaration == null && setterBuilder == null) {
         return new UnresolvedNameGenerator(
-            this, token, new Name(name, libraryBuilder.nameOrigin));
+            this, token, new Name(name, libraryBuilder.nameOrigin),
+            unresolvedReadKind: UnresolvedKind.Unknown);
       }
       MemberBuilder? getterBuilder =
           declaration is MemberBuilder ? declaration : null;
@@ -2373,10 +2667,8 @@
       push(forest.createStringLiteral(offsetForToken(token), value));
     } else {
       int count = 1 + interpolationCount * 2;
-      List<Object>? parts = const FixedNullableList<Object>().popNonNullable(
-          stack,
-          count,
-          /* dummyValue = */ 0);
+      List<Object>? parts = const FixedNullableList<Object>()
+          .popNonNullable(stack, count, /* dummyValue = */ 0);
       if (parts == null) {
         push(new ParserRecovery(endToken.charOffset));
         return;
@@ -2784,6 +3076,7 @@
     }
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     // TODO(danrubel): Consider improved recovery by adding this block
     // as part of a synthetic top level function.
@@ -4066,10 +4359,11 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     debugEvent("ConstructorReference");
-    pushQualifiedReference(start, periodBeforeName);
+    pushQualifiedReference(
+        start, periodBeforeName, constructorReferenceContext);
   }
 
   /// A qualified reference is something that matches one of:
@@ -4105,7 +4399,8 @@
   /// stack and pushes 3 values: a generator (the type in a constructor
   /// reference, or an expression in metadata), a list of type arguments, and a
   /// name.
-  void pushQualifiedReference(Token start, Token? periodBeforeName) {
+  void pushQualifiedReference(Token start, Token? periodBeforeName,
+      ConstructorReferenceContext constructorReferenceContext) {
     assert(checkState(start, [
       /*suffix*/ if (periodBeforeName != null)
         unionOfKinds([ValueKinds.Identifier, ValueKinds.ParserRecovery]),
@@ -4115,7 +4410,7 @@
         ValueKinds.QualifiedName,
         ValueKinds.ProblemBuilder,
         ValueKinds.ParserRecovery
-      ])
+      ]),
     ]));
     Object? suffixObject = popIfNotNull(periodBeforeName);
     Identifier? suffix;
@@ -4140,7 +4435,7 @@
           start,
           unionOfKinds([ValueKinds.Generator, ValueKinds.ProblemBuilder]),
           qualifier));
-      if (qualifier is TypeUseGenerator) {
+      if (qualifier is TypeUseGenerator && suffix == null) {
         type = qualifier;
         if (typeArguments != null) {
           // TODO(ahe): Point to the type arguments instead.
@@ -4148,7 +4443,16 @@
               identifier.charOffset, identifier.name.length);
         }
       } else if (qualifier is Generator) {
-        type = qualifier.qualifiedLookup(identifier.token);
+        if (constructorReferenceContext !=
+            ConstructorReferenceContext.Implicit) {
+          type = qualifier.qualifiedLookup(qualified.token);
+        } else {
+          type = qualifier.buildSelectorAccess(
+              new PropertySelector(this, qualified.token,
+                  new Name(qualified.name, libraryBuilder.nameOrigin)),
+              qualified.token.charOffset,
+              false);
+        }
         identifier = null;
       } else if (qualifier is ProblemBuilder) {
         type = qualifier;
@@ -4167,6 +4471,9 @@
     } else {
       name = "";
     }
+
+    // TODO(johnniwinther): Provide sufficient offsets for pointing correctly
+    //  to prefix, class name and suffix.
     push(type);
     push(typeArguments ?? NullValue.TypeArguments);
     push(name);
@@ -4179,7 +4486,8 @@
       /*class*/ unionOfKinds([
         ValueKinds.Generator,
         ValueKinds.ProblemBuilder,
-        ValueKinds.ParserRecovery
+        ValueKinds.ParserRecovery,
+        ValueKinds.Expression,
       ]),
     ]));
   }
@@ -4200,9 +4508,9 @@
     LocatedMessage? argMessage = checkArgumentsForFunction(
         target.function!, arguments, charOffset, typeParameters);
     if (argMessage != null) {
-      return throwNoSuchMethodError(forest.createNullLiteral(charOffset),
+      return buildUnresolvedError(forest.createNullLiteral(charOffset),
           target.name.text, arguments, charOffset,
-          candidate: target, message: argMessage);
+          candidate: target, message: argMessage, kind: UnresolvedKind.Method);
     }
 
     bool isConst = constness == Constness.explicitConst ||
@@ -4223,8 +4531,8 @@
         libraryBuilder.checkBoundsInConstructorInvocation(
             node, typeEnvironment, uri);
       } else {
-        TypeAliasedConstructorInvocationJudgment constructorInvocation =
-            node = new TypeAliasedConstructorInvocationJudgment(
+        TypeAliasedConstructorInvocation constructorInvocation =
+            node = new TypeAliasedConstructorInvocation(
                 typeAliasBuilder, target, arguments,
                 isConst: isConst)
               ..fileOffset = charOffset;
@@ -4246,15 +4554,18 @@
         }
         StaticInvocation node;
         if (typeAliasBuilder == null) {
-          node = new FactoryConstructorInvocationJudgment(target, arguments,
-              isConst: isConst)
-            ..fileOffset = charOffset;
+          FactoryConstructorInvocation factoryInvocation =
+              new FactoryConstructorInvocation(target, arguments,
+                  isConst: isConst)
+                ..fileOffset = charOffset;
           libraryBuilder.checkBoundsInFactoryInvocation(
-              node, typeEnvironment, uri,
+              factoryInvocation, typeEnvironment, uri,
               inferred: !hasExplicitTypeArguments(arguments));
+          redirectingFactoryInvocations.add(factoryInvocation);
+          node = factoryInvocation;
         } else {
-          TypeAliasedFactoryInvocationJudgment constructorInvocation =
-              new TypeAliasedFactoryInvocationJudgment(
+          TypeAliasedFactoryInvocation constructorInvocation =
+              new TypeAliasedFactoryInvocation(
                   typeAliasBuilder, target, arguments,
                   isConst: isConst)
                 ..fileOffset = charOffset;
@@ -4272,6 +4583,7 @@
     }
   }
 
+  @override
   Expression buildExtensionMethodInvocation(
       int fileOffset, Procedure target, Arguments arguments,
       {required bool isTearOff}) {
@@ -4280,9 +4592,9 @@
         target.function, arguments, fileOffset, typeParameters,
         isExtensionMemberInvocation: true);
     if (argMessage != null) {
-      return throwNoSuchMethodError(forest.createNullLiteral(fileOffset),
+      return buildUnresolvedError(forest.createNullLiteral(fileOffset),
           target.name.text, arguments, fileOffset,
-          candidate: target, message: argMessage);
+          candidate: target, message: argMessage, kind: UnresolvedKind.Method);
     }
 
     Expression node;
@@ -4480,12 +4792,12 @@
     debugEvent("NewExpression");
     _buildConstructorReferenceInvocation(
         token.next!, token.offset, Constness.explicitNew,
-        inMetadata: false);
+        inMetadata: false, inImplicitCreationContext: false);
   }
 
   void _buildConstructorReferenceInvocation(
       Token nameToken, int offset, Constness constness,
-      {required bool inMetadata}) {
+      {required bool inMetadata, required bool inImplicitCreationContext}) {
     assert(checkState(nameToken, [
       /*arguments*/ ValueKinds.Arguments,
       /*constructor name identifier*/ ValueKinds.IdentifierOrNull,
@@ -4494,8 +4806,10 @@
       /*class*/ unionOfKinds([
         ValueKinds.Generator,
         ValueKinds.ProblemBuilder,
-        ValueKinds.ParserRecovery
+        ValueKinds.ParserRecovery,
+        ValueKinds.Expression,
       ]),
+      /*previous constant context*/ ValueKinds.ConstantContext,
     ]));
     Arguments arguments = pop() as Arguments;
     Identifier? nameLastIdentifier = pop(NullValue.Identifier) as Identifier?;
@@ -4514,19 +4828,66 @@
     ConstantContext savedConstantContext = pop() as ConstantContext;
     if (type is Generator) {
       push(type.invokeConstructor(
-          typeArguments, name, arguments, nameToken, nameLastToken, constness));
+          typeArguments, name, arguments, nameToken, nameLastToken, constness,
+          inImplicitCreationContext: inImplicitCreationContext));
     } else if (type is ParserRecovery) {
       push(new ParserErrorGenerator(
           this, nameToken, fasta.messageSyntheticToken));
+    } else if (type is Expression) {
+      push(createInstantiationAndInvocation(
+          () => type, typeArguments, name, name, arguments,
+          instantiationOffset: offset,
+          invocationOffset: nameLastToken.charOffset,
+          inImplicitCreationContext: inImplicitCreationContext));
     } else {
       String? typeName;
       if (type is ProblemBuilder) {
         typeName = type.fullNameForErrors;
       }
-      push(throwNoSuchMethodError(forest.createNullLiteral(offset),
-          debugName(typeName!, name), arguments, nameToken.charOffset));
+      push(buildUnresolvedError(forest.createNullLiteral(offset),
+          debugName(typeName!, name), arguments, nameToken.charOffset,
+          kind: UnresolvedKind.Constructor));
     }
     constantContext = savedConstantContext;
+    assert(checkState(nameToken, [
+      unionOfKinds([
+        ValueKinds.Expression,
+        ValueKinds.Generator,
+      ])
+    ]));
+  }
+
+  @override
+  Expression createInstantiationAndInvocation(
+      Expression Function() receiverFunction,
+      List<UnresolvedType>? typeArguments,
+      String className,
+      String constructorName,
+      Arguments arguments,
+      {required int instantiationOffset,
+      required int invocationOffset,
+      required bool inImplicitCreationContext}) {
+    if (enableConstructorTearOffsInLibrary && inImplicitCreationContext) {
+      Expression receiver = receiverFunction();
+      if (typeArguments != null) {
+        receiver = forest.createInstantiation(instantiationOffset, receiver,
+            buildDartTypeArguments(typeArguments));
+      }
+      return forest.createMethodInvocation(invocationOffset, receiver,
+          new Name(constructorName, libraryBuilder.nameOrigin), arguments);
+    } else {
+      if (typeArguments != null) {
+        assert(forest.argumentsTypeArguments(arguments).isEmpty);
+        forest.argumentsSetTypeArguments(
+            arguments, buildDartTypeArguments(typeArguments));
+      }
+      return buildUnresolvedError(
+          forest.createNullLiteral(instantiationOffset),
+          constructorNameForDiagnostics(constructorName, className: className),
+          arguments,
+          invocationOffset,
+          kind: UnresolvedKind.Constructor);
+    }
   }
 
   @override
@@ -4534,7 +4895,7 @@
     debugEvent("ImplicitCreationExpression");
     _buildConstructorReferenceInvocation(
         token.next!, token.offset, Constness.implicit,
-        inMetadata: false);
+        inMetadata: false, inImplicitCreationContext: true);
   }
 
   @override
@@ -4548,7 +4909,8 @@
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
-      TypeDeclarationBuilder? typeAliasBuilder}) {
+      TypeDeclarationBuilder? typeAliasBuilder,
+      required UnresolvedKind unresolvedKind}) {
     if (arguments == null) {
       return buildProblem(fasta.messageMissingArgumentList,
           nameToken.charOffset, nameToken.length);
@@ -4602,9 +4964,9 @@
                       nameToken.lexeme.length));
             }
 
-            return throwNoSuchMethodError(forest.createNullLiteral(charOffset),
+            return buildUnresolvedError(forest.createNullLiteral(charOffset),
                 errorName, arguments, nameLastToken.charOffset,
-                message: message);
+                message: message, kind: UnresolvedKind.Constructor);
           }
           MemberBuilder? b = classBuilder.findConstructorOrFactory(
               name, charOffset, uri, libraryBuilder);
@@ -4634,9 +4996,9 @@
                 charLength: nameToken.length);
             return invocation;
           } else {
-            return throwNoSuchMethodError(forest.createNullLiteral(charOffset),
+            return buildUnresolvedError(forest.createNullLiteral(charOffset),
                 errorName, arguments, nameLastToken.charOffset,
-                message: message);
+                message: message, kind: UnresolvedKind.Constructor);
           }
         } else {
           // Empty `typeArguments` and `aliasBuilder``is non-generic, but it
@@ -4776,12 +5138,6 @@
             charOffset: nameToken.charOffset,
             charLength: nameToken.length,
             typeAliasBuilder: typeAliasBuilder as TypeAliasBuilder?);
-
-        if (invocation is StaticInvocation &&
-            isRedirectingFactory(target, helper: this)) {
-          redirectingFactoryInvocations.add(invocation);
-        }
-
         return invocation;
       } else {
         errorName ??= debugName(type.name, name);
@@ -4796,9 +5152,9 @@
       errorName ??= debugName(type!.fullNameForErrors, name);
     }
 
-    return throwNoSuchMethodError(forest.createNullLiteral(charOffset),
-        errorName, arguments, nameLastToken.charOffset,
-        message: message);
+    return buildUnresolvedError(forest.createNullLiteral(charOffset), errorName,
+        arguments, nameLastToken.charOffset,
+        message: message, kind: unresolvedKind);
   }
 
   @override
@@ -4806,7 +5162,7 @@
     debugEvent("endConstExpression");
     _buildConstructorReferenceInvocation(
         token.next!, token.offset, Constness.explicitConst,
-        inMetadata: false);
+        inMetadata: false, inImplicitCreationContext: false);
   }
 
   @override
@@ -4894,9 +5250,7 @@
           node = forest.createIfMapEntry(offsetForToken(ifToken),
               toValue(condition), thenEntry, elseMapEntry);
         } else {
-          int offset = elseEntry is Expression
-              ? elseEntry.fileOffset
-              : offsetForToken(ifToken);
+          int offset = elseEntry.fileOffset;
           node = new MapLiteralEntry(
               buildProblem(
                   fasta.messageCantDisambiguateAmbiguousInformation, offset, 1),
@@ -4921,9 +5275,7 @@
           node = forest.createIfMapEntry(offsetForToken(ifToken),
               toValue(condition), thenMapEntry, elseEntry);
         } else {
-          int offset = thenEntry is Expression
-              ? thenEntry.fileOffset
-              : offsetForToken(ifToken);
+          int offset = thenEntry.fileOffset;
           node = new MapLiteralEntry(
               buildProblem(
                   fasta.messageCantDisambiguateAmbiguousInformation, offset, 1),
@@ -5071,9 +5423,19 @@
     // This is matched by the call to [endNode] in [pushNamedFunction] or
     // [endFunctionExpression].
     typeInferrer.assignedVariables.beginNode();
+    assert(checkState(null, [
+      /* inCatchBlock */ ValueKinds.Bool,
+      /* switch scope */ ValueKinds.SwitchScopeOrNull,
+    ]));
   }
 
   void exitFunction() {
+    assert(checkState(null, [
+      /* inCatchBlock */ ValueKinds.Bool,
+      /* switch scope */ ValueKinds.SwitchScopeOrNull,
+      /* function type variables */ ValueKinds.TypeVariableListOrNull,
+      /* function block scope */ ValueKinds.Scope,
+    ]));
     debugEvent("exitFunction");
     functionNestingLevel--;
     inCatchBlock = pop() as bool;
@@ -5083,6 +5445,9 @@
     exitLocalScope();
     push(typeVariables ?? NullValue.TypeVariables);
     _exitLocalState();
+    assert(checkState(null, [
+      ValueKinds.TypeVariableListOrNull,
+    ]));
   }
 
   @override
@@ -5207,7 +5572,20 @@
   @override
   void endFunctionExpression(Token beginToken, Token token) {
     debugEvent("FunctionExpression");
-    Statement body = popStatement();
+    assert(checkState(beginToken, [
+      /* body */ ValueKinds.StatementOrNull,
+      /* async marker */ ValueKinds.AsyncMarker,
+      /* function type scope */ ValueKinds.Scope,
+      /* formal parameters */ ValueKinds.FormalParameters,
+      /* inCatchBlock */ ValueKinds.Bool,
+      /* switch scope */ ValueKinds.SwitchScopeOrNull,
+      /* function type variables */ ValueKinds.TypeVariableListOrNull,
+      /* function block scope */ ValueKinds.Scope,
+    ]));
+    Statement body = popNullableStatement() ??
+        // In erroneous cases, there might not be function body. In such cases
+        // we use an empty statement instead.
+        forest.createEmptyStatement(token.charOffset);
     AsyncMarker asyncModifier = pop() as AsyncMarker;
     exitLocalScope();
     FormalParameters formals = pop() as FormalParameters;
@@ -5231,6 +5609,9 @@
     // This is matched by the call to [beginNode] in [enterFunction].
     typeInferrer.assignedVariables
         .endNode(result, isClosureOrLateVariableInitializer: true);
+    assert(checkState(beginToken, [
+      /* function expression or problem */ ValueKinds.Expression,
+    ]));
   }
 
   @override
@@ -5870,9 +6251,7 @@
     if (target == null && name == null) {
       push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.messageBreakOutsideOfLoop, breakKeyword.charOffset));
-    } else if (target == null ||
-        target is! JumpTarget ||
-        !target.isBreakTarget) {
+    } else if (target == null || !target.isBreakTarget) {
       Token labelToken = breakKeyword.next!;
       push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.templateInvalidBreakTarget.withArguments(name!),
@@ -6094,7 +6473,9 @@
 
   @override
   Expression buildProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage>? context, bool suppressMessage: false}) {
+      {List<LocatedMessage>? context,
+      bool suppressMessage: false,
+      Expression? expression}) {
     if (!suppressMessage) {
       addProblem(message, charOffset, length,
           wasHandled: true, context: context);
@@ -6102,9 +6483,7 @@
     String text = libraryBuilder.loader.target.context
         .format(message.withLocation(uri, charOffset, length), Severity.error)
         .plain;
-    InvalidExpression expression = new InvalidExpression(text)
-      ..fileOffset = charOffset;
-    return expression;
+    return new InvalidExpression(text, expression)..fileOffset = charOffset;
   }
 
   @override
@@ -6131,15 +6510,9 @@
     if (offset == -1) {
       offset = message.charOffset;
     }
-    return new Let(
-        new VariableDeclaration.forValue(
-            buildProblem(
-                message.messageObject, message.charOffset, message.length,
-                context: context),
-            type: NeverType.fromNullability(libraryBuilder.nonNullable))
-          ..fileOffset = offset,
-        expression)
-      ..fileOffset = offset;
+    return buildProblem(
+        message.messageObject, message.charOffset, message.length,
+        context: context, expression: expression);
   }
 
   Expression buildFallThroughError(int charOffset) {
@@ -6399,6 +6772,12 @@
       if (operand is Generator) {
         push(operand.applyTypeArguments(
             openAngleBracket.charOffset, typeArguments));
+      } else if (operand is StaticTearOff &&
+              (operand.target.isFactory || isTearOffLowering(operand.target)) ||
+          operand is ConstructorTearOff ||
+          operand is RedirectingFactoryTearOff) {
+        push(buildProblem(fasta.messageConstructorTearOffWithTypeArguments,
+            openAngleBracket.charOffset, noLength));
       } else {
         push(new Instantiation(
             toValue(operand), buildDartTypeArguments(typeArguments))
@@ -6433,12 +6812,8 @@
           allowPotentiallyConstantType: allowPotentiallyConstantType);
       if (message == null) return unresolved;
       return new UnresolvedType(
-          new NamedTypeBuilder(
-              typeParameter.name!,
-              builder.nullabilityBuilder,
-              /* arguments = */ null,
-              unresolved.fileUri,
-              unresolved.charOffset)
+          new NamedTypeBuilder(typeParameter.name!, builder.nullabilityBuilder,
+              /* arguments = */ null, unresolved.fileUri, unresolved.charOffset)
             ..bind(new InvalidTypeDeclarationBuilder(
                 typeParameter.name!, message)),
           unresolved.charOffset,
@@ -6736,6 +7111,7 @@
 
   Operator(this.token, this.charOffset);
 
+  @override
   String toString() => "operator($name)";
 }
 
@@ -6827,6 +7203,7 @@
 
   final JumpTarget continueTarget;
 
+  @override
   final int functionNestingLevel;
 
   @override
@@ -6841,40 +7218,52 @@
   @override
   Uri get fileUri => parent.fileUri!;
 
+  @override
   bool get hasUsers => breakTarget.hasUsers || continueTarget.hasUsers;
 
+  @override
   List<Statement> get users => unsupported("users", charOffset, fileUri);
 
+  @override
   JumpTargetKind get kind => unsupported("kind", charOffset, fileUri);
 
+  @override
   bool get isBreakTarget => true;
 
+  @override
   bool get isContinueTarget => true;
 
+  @override
   bool get isGotoTarget => false;
 
+  @override
   void addBreak(Statement statement) {
     breakTarget.addBreak(statement);
   }
 
+  @override
   void addContinue(Statement statement) {
     continueTarget.addContinue(statement);
   }
 
+  @override
   void addGoto(Statement statement) {
     unsupported("addGoto", charOffset, fileUri);
   }
 
+  @override
   void resolveBreaks(
       Forest forest, LabeledStatement target, Statement targetStatement) {
     breakTarget.resolveBreaks(forest, target, targetStatement);
   }
 
+  @override
   List<BreakStatementImpl>? resolveContinues(
       Forest forest, LabeledStatement target) {
     return continueTarget.resolveContinues(forest, target);
   }
 
+  @override
   void resolveGotos(Forest forest, SwitchCase target) {
     unsupported("resolveGotos", charOffset, fileUri);
   }
@@ -6964,6 +7353,7 @@
         isModifiable: false);
   }
 
+  @override
   String toString() {
     return "FormalParameters($parameters, $charOffset, $uri)";
   }
@@ -7036,6 +7426,7 @@
 
   Label(this.name, this.charOffset);
 
+  @override
   String toString() => "label($name)";
 }
 
@@ -7049,3 +7440,52 @@
   VariableDeclaration get variable =>
       (explicitVariableDeclaration ?? syntheticVariableDeclaration)!;
 }
+
+class _BodyBuilderCloner extends CloneVisitorNotMembers {
+  final BodyBuilder bodyBuilder;
+
+  _BodyBuilderCloner(this.bodyBuilder);
+
+  @override
+  TreeNode visitStaticInvocation(StaticInvocation node) {
+    if (node is FactoryConstructorInvocation) {
+      FactoryConstructorInvocation result = new FactoryConstructorInvocation(
+          node.target, clone(node.arguments),
+          isConst: node.isConst)
+        ..hasBeenInferred = node.hasBeenInferred;
+      bodyBuilder.redirectingFactoryInvocations.add(result);
+      return result;
+    } else if (node is TypeAliasedFactoryInvocation) {
+      TypeAliasedFactoryInvocation result = new TypeAliasedFactoryInvocation(
+          node.typeAliasBuilder, node.target, clone(node.arguments),
+          isConst: node.isConst)
+        ..hasBeenInferred = node.hasBeenInferred;
+      bodyBuilder.typeAliasedFactoryInvocations.add(result);
+      return result;
+    }
+    return super.visitStaticInvocation(node);
+  }
+
+  @override
+  TreeNode visitConstructorInvocation(ConstructorInvocation node) {
+    if (node is TypeAliasedConstructorInvocation) {
+      TypeAliasedConstructorInvocation result =
+          new TypeAliasedConstructorInvocation(
+              node.typeAliasBuilder, node.target, clone(node.arguments),
+              isConst: node.isConst)
+            ..hasBeenInferred = node.hasBeenInferred;
+      bodyBuilder.typeAliasedConstructorInvocations.add(result);
+      return result;
+    }
+    return super.visitConstructorInvocation(node);
+  }
+
+  @override
+  TreeNode visitArguments(Arguments node) {
+    if (node is ArgumentsImpl) {
+      return ArgumentsImpl.clone(node, node.positional.map(clone).toList(),
+          node.named.map(clone).toList(), node.types.map(visitType).toList());
+    }
+    return super.visitArguments(node);
+  }
+}
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 ccd60c9..99eba28 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
@@ -504,6 +504,7 @@
 
   final List<ClassMember> _delayedMemberComputations = <ClassMember>[];
 
+  @override
   final CoreTypes coreTypes;
 
   late Types types;
@@ -639,6 +640,7 @@
     return null;
   }
 
+  @override
   InterfaceType getTypeAsInstanceOf(
       InterfaceType type, Class superclass, Library clientLibrary) {
     if (type.classNode == superclass) return type;
@@ -647,6 +649,7 @@
         .withDeclaredNullability(type.nullability);
   }
 
+  @override
   List<DartType>? getTypeArgumentsAsInstanceOf(
       InterfaceType type, Class superclass) {
     if (type.classNode == superclass) return type.typeArguments;
@@ -718,6 +721,7 @@
         uniteNullabilities(type1.nullability, type2.nullability));
   }
 
+  @override
   Member? getInterfaceMember(Class cls, Name name, {bool setter: false}) {
     return getNodeFromClass(cls)
         .getInterfaceMember(name, setter)
@@ -2675,7 +2679,7 @@
             //      //   {Super.method, Class.method}
             //    }
             //
-            // Maybe we should recognized this.
+            // Maybe we should recognize this.
             interfaceMembers.addAll(implementedMembers);
 
             /// Normally, if only one member defines the interface member there
@@ -3409,6 +3413,7 @@
     return result;
   }
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb
@@ -3555,6 +3560,7 @@
       this.cls, CoreTypes coreTypes, TypeBuilderConstraintGatherer gatherer)
       : super(coreTypes, gatherer);
 
+  @override
   Supertype? asInstantiationOf(Supertype type, Class superclass) {
     List<DartType>? arguments =
         gatherer.getTypeArgumentsAsInstanceOf(type.asInterfaceType, superclass);
@@ -3562,6 +3568,7 @@
     return new Supertype(superclass, arguments);
   }
 
+  @override
   void reportProblem(Message message, Class kernelClass) {
     int length = cls.isMixinApplication ? 1 : cls.fullNameForErrors.length;
     cls.addProblem(message, cls.charOffset, length);
@@ -3570,6 +3577,7 @@
 
 class TypeBuilderConstraintGatherer extends TypeConstraintGatherer
     with StandardBounds, TypeSchemaStandardBounds {
+  @override
   final ClassHierarchyBuilder hierarchy;
 
   TypeBuilderConstraintGatherer(this.hierarchy,
@@ -3640,6 +3648,7 @@
   DelayedOverrideCheck(
       this._classBuilder, this._declaredMember, this._overriddenMembers);
 
+  @override
   void check(ClassHierarchyBuilder hierarchy) {
     Member declaredMember = _declaredMember.getMember(hierarchy);
 
@@ -3694,6 +3703,7 @@
 
   const DelayedGetterSetterCheck(this.classBuilder, this.getter, this.setter);
 
+  @override
   void check(ClassHierarchyBuilder hierarchy) {
     classBuilder.checkGetterSetter(hierarchy.types, getter.getMember(hierarchy),
         setter.getMember(hierarchy));
@@ -4167,7 +4177,9 @@
         SourceLibraryBuilder library =
             classBuilder.library as SourceLibraryBuilder;
         if (canonicalMember is Procedure) {
-          library.forwardersOrigins..add(stub)..add(canonicalMember);
+          library.forwardersOrigins
+            ..add(stub)
+            ..add(canonicalMember);
         }
         _member = stub;
         _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
@@ -4230,6 +4242,7 @@
     return "${fullNameForErrors}$suffix";
   }
 
+  @override
   String toString() => 'SynthesizedInterfaceMember($classBuilder,$name,'
       '$declarations,forSetter=$forSetter)';
 }
@@ -4373,6 +4386,7 @@
   @override
   String get fullNameForErrors => inheritedClassMember.fullNameForErrors;
 
+  @override
   String get fullName => inheritedClassMember.fullName;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/collections.dart b/pkg/front_end/lib/src/fasta/kernel/collections.dart
index f5e8c18..a11bbc7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/collections.dart
@@ -334,6 +334,7 @@
         ..fileOffset = syntheticAssignment!.fileOffset)
       : expressionEffects;
 
+  @override
   void visitChildren(Visitor v) {
     variable.accept(v);
     iterable.accept(v);
@@ -343,6 +344,7 @@
     problem?.accept(v);
   }
 
+  @override
   void transformChildren(Transformer v) {
     // ignore: unnecessary_null_comparison
     if (variable != null) {
@@ -690,6 +692,7 @@
         ..fileOffset = syntheticAssignment!.fileOffset)
       : expressionEffects;
 
+  @override
   void visitChildren(Visitor v) {
     variable.accept(v);
     iterable.accept(v);
@@ -699,6 +702,7 @@
     problem?.accept(v);
   }
 
+  @override
   void transformChildren(Transformer v) {
     // ignore: unnecessary_null_comparison
     if (variable != null) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_collection_builders.dart b/pkg/front_end/lib/src/fasta/kernel/constant_collection_builders.dart
index 2649c47..37ab572 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_collection_builders.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_collection_builders.dart
@@ -44,7 +44,7 @@
       parts.add(spread);
     } else if (spread == evaluator.nullConstant) {
       // Null spread
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           spreadExpression, messageConstEvalNullValue);
     } else {
       // Fully evaluated spread
@@ -67,7 +67,7 @@
         });
       } else {
         // Not list or set in spread
-        return evaluator.createErrorConstant(
+        return evaluator.createEvaluationErrorConstant(
             spreadExpression, messageConstEvalNotListOrSetInSpread);
       }
       for (Constant entry in entries) {
@@ -159,14 +159,14 @@
   @override
   AbortConstant? addConstant(Constant constant, TreeNode context) {
     if (!evaluator.hasPrimitiveEqual(constant)) {
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           context,
           templateConstEvalElementImplementsEqual.withArguments(
               constant, evaluator.isNonNullableByDefault));
     }
     bool unseen = seen.add(constant);
     if (!unseen) {
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           context,
           templateConstEvalDuplicateElement.withArguments(
               constant, evaluator.isNonNullableByDefault));
@@ -176,7 +176,7 @@
           evaluator._weakener.visitConstant(constant) ?? constant;
       bool weakUnseen = weakSeen.add(weakConstant);
       if (unseen != weakUnseen) {
-        return evaluator.createErrorConstant(
+        return evaluator.createEvaluationErrorConstant(
             context, messageNonAgnosticConstant);
       }
     }
@@ -267,7 +267,7 @@
       parts.add(spread);
     } else if (spread == evaluator.nullConstant) {
       // Null spread
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           spreadExpression, messageConstEvalNullValue);
     } else {
       // Fully evaluated spread
@@ -286,7 +286,7 @@
         if (error != null) return error;
       } else {
         // Not map in spread
-        return evaluator.createErrorConstant(
+        return evaluator.createEvaluationErrorConstant(
             spreadExpression, messageConstEvalNotMapInSpread);
       }
     }
@@ -305,14 +305,14 @@
       parts.add(lastPart = <ConstantMapEntry>[]);
     }
     if (!evaluator.hasPrimitiveEqual(key)) {
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           keyContext,
           templateConstEvalKeyImplementsEqual.withArguments(
               key, evaluator.isNonNullableByDefault));
     }
     bool unseenKey = seenKeys.add(key);
     if (!unseenKey) {
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           keyContext,
           templateConstEvalDuplicateKey.withArguments(
               key, evaluator.isNonNullableByDefault));
@@ -321,7 +321,7 @@
       Constant weakKey = evaluator._weakener.visitConstant(key) ?? key;
       bool weakUnseenKey = weakSeenKeys.add(weakKey);
       if (unseenKey != weakUnseenKey) {
-        return evaluator.createErrorConstant(
+        return evaluator.createEvaluationErrorConstant(
             keyContext, messageNonAgnosticConstant);
       }
     }
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 5bc55d2..329190f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -20,7 +20,6 @@
 
 import 'dart:io' as io;
 
-import 'package:front_end/src/fasta/kernel/constructor_tearoff_lowering.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/clone.dart';
@@ -34,48 +33,10 @@
 import 'package:kernel/type_environment.dart';
 import 'package:kernel/target/targets.dart';
 
-import '../fasta_codes.dart'
-    show
-        LocatedMessage,
-        Message,
-        messageConstEvalCircularity,
-        messageConstEvalContext,
-        messageConstEvalExtension,
-        messageConstEvalExternalConstructor,
-        messageConstEvalExternalFactory,
-        messageConstEvalFailedAssertion,
-        messageConstEvalNotListOrSetInSpread,
-        messageConstEvalNotMapInSpread,
-        messageConstEvalNonNull,
-        messageConstEvalNullValue,
-        messageConstEvalStartingPoint,
-        messageConstEvalUnevaluated,
-        messageNonAgnosticConstant,
-        messageNotAConstantExpression,
-        noLength,
-        templateConstEvalCaseImplementsEqual,
-        templateConstEvalDeferredLibrary,
-        templateConstEvalDuplicateElement,
-        templateConstEvalDuplicateKey,
-        templateConstEvalElementImplementsEqual,
-        templateConstEvalFailedAssertionWithMessage,
-        templateConstEvalFreeTypeParameter,
-        templateConstEvalGetterNotFound,
-        templateConstEvalInvalidType,
-        templateConstEvalInvalidBinaryOperandType,
-        templateConstEvalInvalidEqualsOperandType,
-        templateConstEvalInvalidMethodInvocation,
-        templateConstEvalInvalidPropertyGet,
-        templateConstEvalInvalidStaticInvocation,
-        templateConstEvalInvalidStringInterpolationOperand,
-        templateConstEvalInvalidSymbolName,
-        templateConstEvalKeyImplementsEqual,
-        templateConstEvalNonConstantVariableGet,
-        templateConstEvalUnhandledCoreException,
-        templateConstEvalUnhandledException,
-        templateConstEvalZeroDivisor;
+import '../fasta_codes.dart';
 
 import 'constant_int_folder.dart';
+import 'constructor_tearoff_lowering.dart';
 
 part 'constant_collection_builders.dart';
 
@@ -207,6 +168,7 @@
 
   ConstantWeakener(this._evaluator);
 
+  @override
   Constant? processValue(Constant node, Constant? value) {
     if (value != null) {
       value = _evaluator.canonicalize(value);
@@ -726,10 +688,10 @@
     Instantiation result =
         super.visitInstantiation(node, removalSentinel) as Instantiation;
     Expression expression = result.expression;
-    if (enableConstructorTearOff && expression is ConstantExpression) {
+    if (expression is ConstantExpression) {
       if (result.typeArguments.every(isInstantiated)) {
         return evaluateAndTransformWithContext(node, result);
-      } else {
+      } else if (enableConstructorTearOff) {
         Constant constant = expression.constant;
         if (constant is TypedefTearOffConstant) {
           Substitution substitution =
@@ -1070,29 +1032,28 @@
       if (result is _AbortDueToErrorConstant) {
         final LocatedMessage locatedMessageActualError =
             createLocatedMessage(result.node, result.message);
-        final List<LocatedMessage> contextMessages = <LocatedMessage>[
-          locatedMessageActualError
-        ];
-        if (result.context != null) contextMessages.addAll(result.context!);
-        if (contextNode != null && contextNode != result.node) {
-          contextMessages
-              .add(createLocatedMessage(contextNode, messageConstEvalContext));
-        }
+        if (result.isEvaluationError) {
+          final List<LocatedMessage> contextMessages = <LocatedMessage>[
+            locatedMessageActualError
+          ];
+          if (result.context != null) contextMessages.addAll(result.context!);
+          if (contextNode != null && contextNode != result.node) {
+            contextMessages.add(
+                createLocatedMessage(contextNode, messageConstEvalContext));
+          }
 
-        {
-          final LocatedMessage locatedMessage =
-              createLocatedMessage(node, messageConstEvalStartingPoint);
-          errorReporter.report(locatedMessage, contextMessages);
+          {
+            final LocatedMessage locatedMessage =
+                createLocatedMessage(node, messageConstEvalStartingPoint);
+            errorReporter.report(locatedMessage, contextMessages);
+          }
+        } else {
+          errorReporter.report(locatedMessageActualError);
         }
         return new UnevaluatedConstant(
             new InvalidExpression(result.message.message));
       }
-      if (result is _AbortDueToInvalidExpressionConstant) {
-        InvalidExpression invalid = new InvalidExpression(result.message)
-          ..fileOffset = node.fileOffset;
-        errorReporter.reportInvalidExpression(invalid);
-        return new UnevaluatedConstant(invalid);
-      } else if (result is _AbortDueToThrowConstant) {
+      if (result is _AbortDueToThrowConstant) {
         final Object value = result.throwValue;
         Message? message;
         if (value is Constant) {
@@ -1116,11 +1077,18 @@
         }
         return new UnevaluatedConstant(new InvalidExpression(message.message));
       }
+      if (result is _AbortDueToInvalidExpressionConstant) {
+        return new UnevaluatedConstant(
+            // Create a new [InvalidExpression] without the expression, which
+            // might now have lost the needed context. For instance references
+            // to variables no longer in scope.
+            new InvalidExpression(result.node.message));
+      }
       throw "Unexpected error constant";
     }
     if (result is UnevaluatedConstant) {
       if (errorOnUnevaluatedConstant) {
-        return createErrorConstant(node, messageConstEvalUnevaluated);
+        return createEvaluationErrorConstant(node, messageConstEvalUnevaluated);
       }
       return canonicalize(new UnevaluatedConstant(
           removeRedundantFileUriExpressions(result.expression)));
@@ -1146,8 +1114,11 @@
       // No return statement in function body with void return type.
       return new NullConstant();
     }
-    return createInvalidExpressionConstant(statement,
-        'No valid constant returned from the execution of $statement.');
+    return createEvaluationErrorConstant(
+        statement,
+        templateConstEvalError.withArguments(
+            'No valid constant returned from the execution of the '
+            'statement.'));
   }
 
   /// Returns [null] on success and an error-"constant" on failure, as such the
@@ -1162,27 +1133,33 @@
     } else if (status is ReturnStatus) {
       if (status.value == null) return null;
       // Should not be reachable.
-      return createInvalidExpressionConstant(
-          constructor, "Constructors can't have a return value.");
+      return createEvaluationErrorConstant(
+          constructor,
+          templateConstEvalError
+              .withArguments("Constructors can't have a return value."));
     } else if (status is! ProceedStatus) {
-      return createInvalidExpressionConstant(
-          constructor, "Invalid execution status of constructor body.");
+      return createEvaluationErrorConstant(
+          constructor,
+          templateConstEvalError
+              .withArguments("Invalid execution status of constructor body."));
     }
     return null;
   }
 
   /// Create an error-constant indicating that an error has been detected during
   /// constant evaluation.
-  AbortConstant createErrorConstant(TreeNode node, Message message,
+  AbortConstant createEvaluationErrorConstant(TreeNode node, Message message,
       {List<LocatedMessage>? context}) {
-    return new _AbortDueToErrorConstant(node, message, context: context);
+    return new _AbortDueToErrorConstant(node, message,
+        context: context, isEvaluationError: true);
   }
 
-  /// Create an error-constant indicating a construct that should not occur
-  /// inside a potentially constant expression.
-  /// It is assumed that an error has already been reported.
-  AbortConstant createInvalidExpressionConstant(TreeNode node, String message) {
-    return new _AbortDueToInvalidExpressionConstant(node, message);
+  /// Create an error-constant indicating that an non-constant expression has
+  /// been found.
+  AbortConstant createExpressionErrorConstant(TreeNode node, Message message,
+      {List<LocatedMessage>? context}) {
+    return new _AbortDueToErrorConstant(node, message,
+        context: context, isEvaluationError: false);
   }
 
   /// Produce an unevaluated constant node for an expression.
@@ -1298,7 +1275,8 @@
         if (cachedResult == null) {
           // [null] is a sentinel value only used when still evaluating the same
           // node.
-          return createErrorConstant(node, messageConstEvalCircularity);
+          return createEvaluationErrorConstant(
+              node, messageConstEvalCircularity);
         }
         result = cachedResult;
       } else {
@@ -1322,7 +1300,8 @@
         if (nodeCache[node] == null &&
             !(enableConstFunctions && isRecursiveFunctionCall)) {
           // recursive call
-          return createErrorConstant(node, messageConstEvalCircularity);
+          return createEvaluationErrorConstant(
+              node, messageConstEvalCircularity);
         }
         // else we've seen the node before and come to a result -> we won't
         // go into an infinite loop here either.
@@ -1349,12 +1328,12 @@
     return _evaluateSubexpression(node);
   }
 
+  // TODO(johnniwinther): Remove this and handle each expression directly.
   @override
   Constant defaultExpression(Expression node) {
     // Only a subset of the expression language is valid for constant
     // evaluation.
-    return createInvalidExpressionConstant(
-        node, 'Constant evaluation has no support for ${node.runtimeType}!');
+    return createExpressionErrorConstant(node, messageNotAConstantExpression);
   }
 
   @override
@@ -1427,7 +1406,10 @@
   @override
   Constant visitListLiteral(ListLiteral node) {
     if (!node.isConst && !enableConstFunctions) {
-      return createInvalidExpressionConstant(node, "Non-constant list literal");
+      return createExpressionErrorConstant(
+          node,
+          templateNotConstantExpression
+              .withArguments('Non-constant list literal'));
     }
     final ListConstantBuilder builder = new ListConstantBuilder(
         node, convertType(node.typeArgument), this,
@@ -1461,7 +1443,10 @@
   @override
   Constant visitSetLiteral(SetLiteral node) {
     if (!node.isConst) {
-      return createInvalidExpressionConstant(node, "Non-constant set literal");
+      return createExpressionErrorConstant(
+          node,
+          templateNotConstantExpression
+              .withArguments('Non-constant set literal'));
     }
     final SetConstantBuilder builder =
         new SetConstantBuilder(node, convertType(node.typeArgument), this);
@@ -1494,7 +1479,10 @@
   @override
   Constant visitMapLiteral(MapLiteral node) {
     if (!node.isConst) {
-      return createInvalidExpressionConstant(node, "Non-constant map literal");
+      return createExpressionErrorConstant(
+          node,
+          templateNotConstantExpression
+              .withArguments('Non-constant map literal'));
     }
     final MapConstantBuilder builder = new MapConstantBuilder(
         node, convertType(node.keyType), convertType(node.valueType), this);
@@ -1529,25 +1517,27 @@
     if (enableConstFunctions) {
       return new FunctionValue(node.function, env);
     }
-    return createInvalidExpressionConstant(node, "Function literal");
+    return createExpressionErrorConstant(node,
+        templateNotConstantExpression.withArguments('Function expression'));
   }
 
   @override
   Constant visitConstructorInvocation(ConstructorInvocation node) {
     if (!node.isConst && !enableConstFunctions) {
-      return createInvalidExpressionConstant(
-          node, 'Non-constant constructor invocation "$node".');
+      return createExpressionErrorConstant(
+          node, templateNotConstantExpression.withArguments('New expression'));
     }
 
     final Constructor constructor = node.target;
-    AbortConstant? error = checkConstructorConst(node, constructor);
+    AbortConstant? error =
+        checkConstructorConst(node, constructor, messageNonConstConstructor);
     if (error != null) return error;
 
     final Class klass = constructor.enclosingClass;
     if (klass.isAbstract) {
       // Probably unreachable.
-      return createInvalidExpressionConstant(
-          node, 'Constructor "$node" belongs to abstract class "${klass}".');
+      return createExpressionErrorConstant(
+          node, templateAbstractClassInstantiation.withArguments(klass.name));
     }
 
     final List<Constant>? positionals =
@@ -1592,7 +1582,7 @@
           (isNonNullableByDefault || isValidSymbolName(nameValue.value))) {
         return canonicalize(new SymbolConstant(nameValue.value, null));
       }
-      return createErrorConstant(
+      return createEvaluationErrorConstant(
           node.arguments.positional.first,
           templateConstEvalInvalidSymbolName.withArguments(
               nameValue, isNonNullableByDefault));
@@ -1640,21 +1630,20 @@
 
   /// Returns [null] on success and an error-"constant" on failure, as such the
   /// return value should be checked.
-  AbortConstant? checkConstructorConst(TreeNode node, Constructor constructor) {
+  AbortConstant? checkConstructorConst(
+      TreeNode node, Constructor constructor, Message messageIfNonConst) {
     if (!constructor.isConst) {
-      return createInvalidExpressionConstant(
-          node, 'Non-const constructor invocation.');
+      return createExpressionErrorConstant(node, messageIfNonConst);
     }
     if (constructor.function.body != null &&
         constructor.function.body is! EmptyStatement &&
         !enableConstFunctions) {
       // Probably unreachable.
-      return createInvalidExpressionConstant(
-          node,
-          'Constructor "$node" has non-trivial body '
-          '"${constructor.function.body.runtimeType}".');
+      return createExpressionErrorConstant(
+          node, messageConstConstructorWithBody);
     } else if (constructor.isExternal) {
-      return createErrorConstant(node, messageConstEvalExternalConstructor);
+      return createEvaluationErrorConstant(
+          node, messageConstEvalExternalConstructor);
     }
     return null;
   }
@@ -1884,7 +1873,8 @@
           if (constant is AbortConstant) return constant;
           env.addVariableValue(variable, constant);
         } else if (init is SuperInitializer) {
-          AbortConstant? error = checkConstructorConst(init, constructor);
+          AbortConstant? error = checkConstructorConst(
+              init, init.target, messageConstConstructorWithNonConstSuper);
           if (error != null) return error;
           List<DartType>? types = _evaluateSuperTypeArguments(
               init, constructor.enclosingClass.supertype!);
@@ -1923,7 +1913,9 @@
         } else if (init is RedirectingInitializer) {
           // Since a redirecting constructor targets a constructor of the same
           // class, we pass the same [typeArguments].
-          AbortConstant? error = checkConstructorConst(init, constructor);
+
+          AbortConstant? error = checkConstructorConst(
+              init, init.target, messageConstConstructorRedirectionToNonConst);
           if (error != null) return error;
           List<Constant>? positionalArguments =
               _evaluatePositionalArguments(init.arguments);
@@ -1960,10 +1952,12 @@
           // super that takes no arguments. It thus cannot be const.
           // Explicit constructors with incorrect super calls will get a
           // ShadowInvalidInitializer which is actually a LocalInitializer.
-          return createInvalidExpressionConstant(
-              constructor,
+          assert(
+              false,
               'No support for handling initializer of type '
               '"${init.runtimeType}".');
+          return createEvaluationErrorConstant(
+              init, messageNotAConstantExpression);
         }
       }
 
@@ -2003,7 +1997,7 @@
     } else if (condition is BoolConstant) {
       if (!condition.value) {
         if (statement.message == null) {
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               statement.condition, messageConstEvalFailedAssertion);
         }
         final Constant message = _evaluateSubexpression(statement.message!);
@@ -2014,12 +2008,12 @@
               conditionStartOffset: statement.conditionStartOffset,
               conditionEndOffset: statement.conditionEndOffset));
         } else if (message is StringConstant) {
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               statement.condition,
               templateConstEvalFailedAssertionWithMessage
                   .withArguments(message.value));
         } else {
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               statement.message!,
               templateConstEvalInvalidType.withArguments(
                   message,
@@ -2029,7 +2023,7 @@
         }
       }
     } else {
-      return createErrorConstant(
+      return createEvaluationErrorConstant(
           statement.condition,
           templateConstEvalInvalidType.withArguments(
               condition,
@@ -2043,21 +2037,22 @@
 
   @override
   Constant visitInvalidExpression(InvalidExpression node) {
-    return createInvalidExpressionConstant(node, node.message ?? '');
+    return new _AbortDueToInvalidExpressionConstant(node);
   }
 
   @override
   Constant visitDynamicInvocation(DynamicInvocation node) {
     // We have no support for generic method invocation at the moment.
     if (node.arguments.types.isNotEmpty) {
-      return createInvalidExpressionConstant(node, "generic method invocation");
+      return createExpressionErrorConstant(node,
+          templateNotConstantExpression.withArguments("Dynamic invocation"));
     }
 
     // We have no support for method invocation with named arguments at the
     // moment.
     if (node.arguments.named.isNotEmpty) {
-      return createInvalidExpressionConstant(
-          node, "method invocation with named arguments");
+      return createExpressionErrorConstant(node,
+          templateNotConstantExpression.withArguments("Dynamic invocation"));
     }
 
     final Constant receiver = _evaluateSubexpression(node.receiver);
@@ -2094,14 +2089,15 @@
   Constant visitInstanceInvocation(InstanceInvocation node) {
     // We have no support for generic method invocation at the moment.
     if (node.arguments.types.isNotEmpty) {
-      return createInvalidExpressionConstant(node, "generic method invocation");
+      return createExpressionErrorConstant(node,
+          templateNotConstantExpression.withArguments("Instance invocation"));
     }
 
     // We have no support for method invocation with named arguments at the
     // moment.
     if (node.arguments.named.isNotEmpty) {
-      return createInvalidExpressionConstant(
-          node, "method invocation with named arguments");
+      return createExpressionErrorConstant(node,
+          templateNotConstantExpression.withArguments("Instance invocation"));
     }
 
     final Constant receiver = _evaluateSubexpression(node.receiver);
@@ -2140,7 +2136,8 @@
   @override
   Constant visitFunctionInvocation(FunctionInvocation node) {
     if (!enableConstFunctions) {
-      return createInvalidExpressionConstant(node, "function invocation");
+      return createExpressionErrorConstant(node,
+          templateNotConstantExpression.withArguments('Function invocation'));
     }
 
     final Constant receiver = _evaluateSubexpression(node.receiver);
@@ -2152,7 +2149,10 @@
   @override
   Constant visitLocalFunctionInvocation(LocalFunctionInvocation node) {
     if (!enableConstFunctions) {
-      return createInvalidExpressionConstant(node, "local function invocation");
+      return createExpressionErrorConstant(
+          node,
+          templateNotConstantExpression
+              .withArguments('Local function invocation'));
     }
 
     final Constant receiver = env.lookupVariable(node.variable)!;
@@ -2204,8 +2204,10 @@
           receiver.function, types, arguments, named,
           functionEnvironment: receiver.environment);
     } else {
-      return createInvalidExpressionConstant(
-          node, "function invocation with invalid receiver");
+      return createEvaluationErrorConstant(
+          node,
+          templateConstEvalError
+              .withArguments('Function invocation with invalid receiver.'));
     }
   }
 
@@ -2252,7 +2254,7 @@
       // to take the special cases into account.
       return doubleSpecialCases(left, right) ?? makeBoolConstant(left == right);
     } else {
-      return createErrorConstant(
+      return createEvaluationErrorConstant(
           node,
           templateConstEvalInvalidEqualsOperandType.withArguments(
               left, left.getType(_staticTypeContext!), isNonNullableByDefault));
@@ -2288,7 +2290,7 @@
               return canonicalize(
                   new StringConstant(receiver.value + other.value));
             }
-            return createErrorConstant(
+            return createEvaluationErrorConstant(
                 node,
                 templateConstEvalInvalidBinaryOperandType.withArguments(
                     '+',
@@ -2306,7 +2308,7 @@
                 }
                 return canonicalize(new StringConstant(receiver.value[index]));
               }
-              return createErrorConstant(
+              return createEvaluationErrorConstant(
                   node,
                   templateConstEvalInvalidBinaryOperandType.withArguments(
                       '[]',
@@ -2328,7 +2330,7 @@
         } else if (other is DoubleConstant) {
           if ((op == '|' || op == '&' || op == '^') ||
               (op == '<<' || op == '>>' || op == '>>>')) {
-            return createErrorConstant(
+            return createEvaluationErrorConstant(
                 node,
                 templateConstEvalInvalidBinaryOperandType.withArguments(
                     op,
@@ -2341,7 +2343,7 @@
           return canonicalize(evaluateBinaryNumericOperation(
               op, receiverValue, other.value, node));
         }
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidBinaryOperandType.withArguments(
                 op,
@@ -2353,7 +2355,7 @@
     } else if (receiver is DoubleConstant) {
       if ((op == '|' || op == '&' || op == '^') ||
           (op == '<<' || op == '>>' || op == '>>>')) {
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidBinaryOperandType.withArguments(
                 op,
@@ -2375,7 +2377,7 @@
           return canonicalize(
               evaluateBinaryNumericOperation(op, receiver.value, value, node));
         }
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidBinaryOperandType.withArguments(
                 op,
@@ -2402,7 +2404,7 @@
         }
       }
     } else if (receiver is NullConstant) {
-      return createErrorConstant(node, messageConstEvalNullValue);
+      return createEvaluationErrorConstant(node, messageConstEvalNullValue);
     } else if (receiver is ListConstant && enableConstFunctions) {
       if (positionalArguments.length == 1) {
         final Constant other = positionalArguments[0];
@@ -2416,7 +2418,7 @@
               }
               return receiver.entries[index];
             }
-            return createErrorConstant(
+            return createEvaluationErrorConstant(
                 node,
                 templateConstEvalInvalidBinaryOperandType.withArguments(
                     '[]',
@@ -2512,7 +2514,7 @@
       }
     }
 
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidMethodInvocation.withArguments(
             op, receiver, isNonNullableByDefault));
@@ -2543,7 +2545,7 @@
             return right;
           }
 
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               node,
               templateConstEvalInvalidBinaryOperandType.withArguments(
                   logicalExpressionOperatorToString(node.operatorEnum),
@@ -2552,7 +2554,7 @@
                   right.getType(_staticTypeContext!),
                   isNonNullableByDefault));
         }
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidMethodInvocation.withArguments(
                 logicalExpressionOperatorToString(node.operatorEnum),
@@ -2568,7 +2570,7 @@
             return right;
           }
 
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               node,
               templateConstEvalInvalidBinaryOperandType.withArguments(
                   logicalExpressionOperatorToString(node.operatorEnum),
@@ -2577,7 +2579,7 @@
                   right.getType(_staticTypeContext!),
                   isNonNullableByDefault));
         }
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidMethodInvocation.withArguments(
                 logicalExpressionOperatorToString(node.operatorEnum),
@@ -2585,7 +2587,7 @@
                 isNonNullableByDefault));
       default:
         // Probably unreachable.
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidMethodInvocation.withArguments(
                 logicalExpressionOperatorToString(node.operatorEnum),
@@ -2614,7 +2616,7 @@
           new ConditionalExpression(extract(condition), extract(then),
               extract(otherwise), node.staticType));
     } else {
-      return createErrorConstant(
+      return createEvaluationErrorConstant(
           node.condition,
           templateConstEvalInvalidType.withArguments(
               condition,
@@ -2631,7 +2633,8 @@
       // const.
       // Access "this" during instance creation.
       if (instanceBuilder == null) {
-        return createErrorConstant(node, messageNotAConstantExpression);
+        return createEvaluationErrorConstant(
+            node, messageNotAConstantExpression);
       }
 
       for (final MapEntry<Field, Constant> entry
@@ -2645,8 +2648,11 @@
       // Meant as a "stable backstop for situations where Fasta fails to
       // rewrite various erroneous constructs into invalid expressions".
       // Probably unreachable.
-      return createInvalidExpressionConstant(node,
-          'Could not evaluate field get ${node.name} on incomplete instance');
+      return createEvaluationErrorConstant(
+          node,
+          templateConstEvalError.withArguments(
+              'Could not evaluate field get ${node.name} on incomplete '
+              'instance'));
     }
 
     final Constant receiver = _evaluateSubexpression(node.receiver);
@@ -2660,7 +2666,7 @@
               resultType: node.resultType,
               interfaceTarget: node.interfaceTarget));
     } else if (receiver is NullConstant) {
-      return createErrorConstant(node, messageConstEvalNullValue);
+      return createEvaluationErrorConstant(node, messageConstEvalNullValue);
     } else if (receiver is ListConstant && enableConstFunctions) {
       switch (node.name.text) {
         case 'first':
@@ -2702,7 +2708,7 @@
         }
       }
     }
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidPropertyGet.withArguments(
             node.name.text, receiver, isNonNullableByDefault));
@@ -2718,9 +2724,9 @@
       return unevaluated(
           node, new DynamicGet(node.kind, extract(receiver), node.name));
     } else if (receiver is NullConstant) {
-      return createErrorConstant(node, messageConstEvalNullValue);
+      return createEvaluationErrorConstant(node, messageConstEvalNullValue);
     }
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidPropertyGet.withArguments(
             node.name.text, receiver, isNonNullableByDefault));
@@ -2730,7 +2736,7 @@
   Constant visitInstanceTearOff(InstanceTearOff node) {
     final Constant receiver = _evaluateSubexpression(node.receiver);
     if (receiver is AbortConstant) return receiver;
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidPropertyGet.withArguments(
             node.name.text, receiver, isNonNullableByDefault));
@@ -2740,7 +2746,7 @@
   Constant visitFunctionTearOff(FunctionTearOff node) {
     final Constant receiver = _evaluateSubexpression(node.receiver);
     if (receiver is AbortConstant) return receiver;
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidPropertyGet.withArguments(
             Name.callName.text, receiver, isNonNullableByDefault));
@@ -2765,14 +2771,14 @@
     final VariableDeclaration variable = node.variable;
     if (enableConstFunctions) {
       return env.lookupVariable(variable) ??
-          createErrorConstant(
+          createEvaluationErrorConstant(
               node,
               templateConstEvalGetterNotFound
                   .withArguments(variable.name ?? ''));
     } else {
       if (variable.parent is Let || _isFormalParameter(variable)) {
         return env.lookupVariable(node.variable) ??
-            createErrorConstant(
+            createEvaluationErrorConstant(
                 node,
                 templateConstEvalNonConstantVariableGet
                     .withArguments(variable.name ?? ''));
@@ -2781,8 +2787,10 @@
         return _evaluateSubexpression(variable.initializer!);
       }
     }
-    return createInvalidExpressionConstant(
-        node, 'Variable get of a non-const variable.');
+    return createExpressionErrorConstant(
+        node,
+        templateNotConstantExpression
+            .withArguments('Read of a non-const variable'));
   }
 
   @override
@@ -2791,9 +2799,14 @@
       final VariableDeclaration variable = node.variable;
       Constant value = _evaluateSubexpression(node.value);
       if (value is AbortConstant) return value;
-      return env.updateVariableValue(variable, value) ??
-          createInvalidExpressionConstant(
-              node, 'Variable set of an unknown value.');
+      Constant? result = env.updateVariableValue(variable, value);
+      if (result != null) {
+        return result;
+      }
+      return createEvaluationErrorConstant(
+          node,
+          templateConstEvalError
+              .withArguments('Variable set of an unknown value.'));
     }
     return defaultExpression(node);
   }
@@ -2826,21 +2839,18 @@
         if (target.isConst) {
           return _evaluateExpressionInContext(target, target.initializer!);
         }
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidStaticInvocation
                 .withArguments(target.name.text));
-      } else if (target is Procedure) {
-        if (target.kind == ProcedureKind.Method) {
-          return canonicalize(new StaticTearOffConstant(target));
-        }
-        return createErrorConstant(
-            node,
-            templateConstEvalInvalidStaticInvocation
-                .withArguments(target.name.text));
+      } else if (target is Procedure && target.kind == ProcedureKind.Method) {
+        // TODO(johnniwinther): Remove this. This should never occur.
+        return canonicalize(new StaticTearOffConstant(target));
       } else {
-        return createInvalidExpressionConstant(
-            node, 'No support for ${target.runtimeType} in a static-get.');
+        return createEvaluationErrorConstant(
+            node,
+            templateConstEvalInvalidStaticInvocation
+                .withArguments(target.name.text));
       }
     });
   }
@@ -2875,7 +2885,7 @@
         // error reporting till later.
         concatenated.add(constant);
       } else {
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             node,
             templateConstEvalInvalidStringInterpolationOperand.withArguments(
                 constant, isNonNullableByDefault));
@@ -3030,7 +3040,8 @@
                 return _handleHasEnvironment(name);
               }
             } else if (name is NullConstant) {
-              return createErrorConstant(node, messageConstEvalNullValue);
+              return createEvaluationErrorConstant(
+                  node, messageConstEvalNullValue);
             }
           } else {
             // Leave environment constant unevaluated.
@@ -3041,7 +3052,29 @@
                     isConst: true));
           }
         } else if (target.isExternal) {
-          return createErrorConstant(node, messageConstEvalExternalFactory);
+          return createEvaluationErrorConstant(
+              node, messageConstEvalExternalFactory);
+        } else if (enableConstFunctions) {
+          return _handleFunctionInvocation(
+              node.target.function, typeArguments, positionals, named);
+        } else {
+          return createExpressionErrorConstant(
+              node,
+              templateNotConstantExpression
+                  .withArguments('Non-redirecting const factory invocation'));
+        }
+      } else {
+        if (enableConstFunctions) {
+          return _handleFunctionInvocation(
+              node.target.function, typeArguments, positionals, named);
+        } else if (!node.isConst) {
+          return createExpressionErrorConstant(node,
+              templateNotConstantExpression.withArguments('New expression'));
+        } else {
+          return createEvaluationErrorConstant(
+              node,
+              templateNotConstantExpression
+                  .withArguments('Non-const factory invocation'));
         }
       }
     } else if (target.name.text == 'identical') {
@@ -3062,7 +3095,8 @@
               Constant weakResult = makeBoolConstant(
                   identical(weakLeft ?? left, weakRight ?? right));
               if (!identical(result, weakResult)) {
-                return createErrorConstant(node, messageNonAgnosticConstant);
+                return createEvaluationErrorConstant(
+                    node, messageNonAgnosticConstant);
               }
             }
           }
@@ -3077,26 +3111,14 @@
         return evaluateIdentical();
       }
     } else if (target.isExtensionMember) {
-      return createErrorConstant(node, messageConstEvalExtension);
+      return createEvaluationErrorConstant(node, messageConstEvalExtension);
     } else if (enableConstFunctions && target.kind == ProcedureKind.Method) {
       return _handleFunctionInvocation(
           node.target.function, typeArguments, positionals, named);
     }
 
-    String name = target.name.text;
-    if (target.isFactory) {
-      if (name.isEmpty) {
-        name = target.enclosingClass!.name;
-      } else {
-        name = '${target.enclosingClass!.name}.${name}';
-      }
-
-      if (enableConstFunctions) {
-        return _handleFunctionInvocation(
-            node.target.function, typeArguments, positionals, named);
-      }
-    }
-    return createInvalidExpressionConstant(node, "Invocation of $name");
+    return createExpressionErrorConstant(
+        node, templateNotConstantExpression.withArguments('Static invocation'));
   }
 
   Constant _handleFunctionInvocation(
@@ -3132,7 +3154,7 @@
           function.returnType.nullability == Nullability.nonNullable) {
         // Ensure that the evaluated constant returned is not null if the
         // function has a non-nullable return type.
-        return createErrorConstant(
+        return createEvaluationErrorConstant(
             function,
             templateConstEvalInvalidType.withArguments(
                 result,
@@ -3234,7 +3256,8 @@
         Constant weakConstant = _weakener.visitConstant(constant) ?? constant;
         bool weakResult = performIs(weakConstant, strongMode: false);
         if (strongResult != weakResult) {
-          return createErrorConstant(node, messageNonAgnosticConstant);
+          return createEvaluationErrorConstant(
+              node, messageNonAgnosticConstant);
         }
         return makeBoolConstant(strongResult);
       case EvaluationMode.weak:
@@ -3252,7 +3275,7 @@
     if (shouldBeUnevaluated) {
       return unevaluated(node, new Not(extract(constant)));
     }
-    return createErrorConstant(
+    return createEvaluationErrorConstant(
         node,
         templateConstEvalInvalidType.withArguments(
             constant,
@@ -3266,7 +3289,7 @@
     final Constant constant = _evaluateSubexpression(node.operand);
     if (constant is AbortConstant) return constant;
     if (constant is NullConstant) {
-      return createErrorConstant(node, messageConstEvalNonNull);
+      return createEvaluationErrorConstant(node, messageConstEvalNonNull);
     }
     if (shouldBeUnevaluated) {
       return unevaluated(node, new NullCheck(extract(constant)));
@@ -3324,7 +3347,7 @@
         // ignore: unnecessary_null_comparison
         assert(types != null);
 
-        List<DartType> typeArguments = convertTypes(types);
+        List<DartType> typeArguments = types;
         if (constant is TypedefTearOffConstant) {
           Substitution substitution =
               Substitution.fromPairs(constant.parameters, typeArguments);
@@ -3345,21 +3368,25 @@
                 .toList();
           }
         }
-        return canonicalize(new InstantiationConstant(constant, typeArguments));
+        return canonicalize(
+            new InstantiationConstant(constant, convertTypes(typeArguments)));
       } else {
         // Probably unreachable.
-        return createInvalidExpressionConstant(
+        return createEvaluationErrorConstant(
             node,
-            'The number of type arguments supplied in the partial '
-            'instantiation does not match the number of type arguments '
-            'of the $constant.');
+            templateConstEvalError.withArguments(
+                'The number of type arguments supplied in the partial '
+                'instantiation does not match the number of type arguments '
+                'of the $constant.'));
       }
     }
     // The inner expression in an instantiation can never be null, since
     // instantiations are only inferred on direct references to declarations.
     // Probably unreachable.
-    return createInvalidExpressionConstant(
-        node, 'Only tear-off constants can be partially instantiated.');
+    return createEvaluationErrorConstant(
+        node,
+        templateConstEvalError.withArguments(
+            'Only tear-off constants can be partially instantiated.'));
   }
 
   @override
@@ -3388,14 +3415,16 @@
           new TypedefTearOffConstant(typeParameters, constant, typeArguments));
     } else {
       // Probably unreachable.
-      return createInvalidExpressionConstant(
-          node, "Unexpected typedef tearoff target: ${constant}.");
+      return createEvaluationErrorConstant(
+          node,
+          templateConstEvalError.withArguments(
+              "Unsupported typedef tearoff target: ${constant}."));
     }
   }
 
   @override
   Constant visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
-    return createErrorConstant(node,
+    return createEvaluationErrorConstant(node,
         templateConstEvalDeferredLibrary.withArguments(node.import.name!));
   }
 
@@ -3488,7 +3517,8 @@
         bool weakResult = isSubtype(
             weakConstant, type, SubtypeCheckMode.ignoringNullabilities);
         if (strongResult != weakResult) {
-          return createErrorConstant(node, messageNonAgnosticConstant);
+          return createEvaluationErrorConstant(
+              node, messageNonAgnosticConstant);
         }
         result = strongResult;
         break;
@@ -3498,7 +3528,7 @@
         break;
     }
     if (!result) {
-      return createErrorConstant(
+      return createEvaluationErrorConstant(
           node,
           templateConstEvalInvalidType.withArguments(constant, type,
               constant.getType(_staticTypeContext!), isNonNullableByDefault));
@@ -3551,7 +3581,7 @@
     final DartType result = env.substituteType(type);
 
     if (!isInstantiated(result)) {
-      _gotError = createErrorConstant(
+      _gotError = createEvaluationErrorConstant(
           node,
           templateConstEvalFreeTypeParameter.withArguments(
               type, isNonNullableByDefault));
@@ -3662,7 +3692,7 @@
         return new DoubleConstant(a / b);
       case '~/':
         if (b == 0) {
-          return createErrorConstant(
+          return createEvaluationErrorConstant(
               node, templateConstEvalZeroDivisor.withArguments(op, '$a'));
         }
         return intFolder.truncatingDivide(node, a, b);
@@ -3682,8 +3712,8 @@
     }
 
     // Probably unreachable.
-    return createInvalidExpressionConstant(
-        node, "Unexpected binary numeric operation '$op'.");
+    return createExpressionErrorConstant(node,
+        templateNotConstantExpression.withArguments("Binary '$op' operation"));
   }
 
   // TODO(johnniwinther): Remove the need for this by adding a current library
@@ -4129,6 +4159,7 @@
 class RedundantFileUriExpressionRemover extends Transformer {
   Uri? currentFileUri = null;
 
+  @override
   TreeNode visitFileUriExpression(FileUriExpression node) {
     if (node.fileUri == currentFileUri) {
       return node.expression.accept(this);
@@ -4261,8 +4292,10 @@
   final TreeNode node;
   final Message message;
   final List<LocatedMessage>? context;
+  final bool isEvaluationError;
 
-  _AbortDueToErrorConstant(this.node, this.message, {this.context});
+  _AbortDueToErrorConstant(this.node, this.message,
+      {this.context, required this.isEvaluationError});
 
   @override
   R accept<R>(ConstantVisitor<R> v) {
@@ -4326,10 +4359,9 @@
 }
 
 class _AbortDueToInvalidExpressionConstant extends AbortConstant {
-  final TreeNode node;
-  final String message;
+  final InvalidExpression node;
 
-  _AbortDueToInvalidExpressionConstant(this.node, this.message);
+  _AbortDueToInvalidExpressionConstant(this.node);
 
   @override
   R accept<R>(ConstantVisitor<R> v) {
@@ -4462,16 +4494,14 @@
 abstract class ErrorReporter {
   const ErrorReporter();
 
-  void report(LocatedMessage message, List<LocatedMessage>? context);
-
-  void reportInvalidExpression(InvalidExpression node);
+  void report(LocatedMessage message, [List<LocatedMessage>? context]);
 }
 
 class SimpleErrorReporter implements ErrorReporter {
   const SimpleErrorReporter();
 
   @override
-  void report(LocatedMessage message, List<LocatedMessage>? context) {
+  void report(LocatedMessage message, [List<LocatedMessage>? context]) {
     _report(message);
     if (context != null) {
       for (LocatedMessage contextMessage in context) {
@@ -4480,11 +4510,6 @@
     }
   }
 
-  @override
-  void reportInvalidExpression(InvalidExpression node) {
-    // Ignored
-  }
-
   void _report(LocatedMessage message) {
     reportMessage(message.uri, message.charOffset, message.message);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_int_folder.dart b/pkg/front_end/lib/src/fasta/kernel/constant_int_folder.dart
index 8ffd6f5..452ad53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_int_folder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_int_folder.dart
@@ -7,11 +7,7 @@
 
 import 'constant_evaluator.dart';
 
-import '../fasta_codes.dart'
-    show
-        templateConstEvalNegativeShift,
-        templateConstEvalTruncateError,
-        templateConstEvalZeroDivisor;
+import '../fasta_codes.dart';
 
 abstract class ConstantIntFolder {
   final ConstantEvaluator evaluator;
@@ -52,11 +48,11 @@
   AbortConstant? _checkOperands(
       Expression node, String op, num left, num right) {
     if ((op == '<<' || op == '>>' || op == '>>>') && right < 0) {
-      return evaluator.createErrorConstant(node,
+      return evaluator.createEvaluationErrorConstant(node,
           templateConstEvalNegativeShift.withArguments(op, '$left', '$right'));
     }
     if ((op == '%' || op == '~/') && right == 0) {
-      return evaluator.createErrorConstant(
+      return evaluator.createEvaluationErrorConstant(
           node, templateConstEvalZeroDivisor.withArguments(op, '$left'));
     }
     return null;
@@ -91,8 +87,10 @@
         return new IntConstant(~operand.value);
       default:
         // Probably unreachable.
-        return evaluator.createInvalidExpressionConstant(
-            node, "Invalid unary operator $op");
+        return evaluator.createExpressionErrorConstant(
+            node,
+            templateNotConstantExpression
+                .withArguments("Unary '$op' operation"));
     }
   }
 
@@ -140,8 +138,10 @@
         return evaluator.makeBoolConstant(a > b);
       default:
         // Probably unreachable.
-        return evaluator.createInvalidExpressionConstant(
-            node, "Invalid binary operator $op");
+        return evaluator.createExpressionErrorConstant(
+            node,
+            templateNotConstantExpression
+                .withArguments("Binary '$op' operation"));
     }
   }
 
@@ -150,7 +150,7 @@
     try {
       return new IntConstant(left ~/ right);
     } catch (e) {
-      return evaluator.createErrorConstant(node,
+      return evaluator.createEvaluationErrorConstant(node,
           templateConstEvalTruncateError.withArguments('$left', '$right'));
     }
   }
@@ -204,8 +204,10 @@
         return new DoubleConstant(_truncate32(~intValue).toDouble());
       default:
         // Probably unreachable.
-        return evaluator.createInvalidExpressionConstant(
-            node, "Invalid unary operator $op");
+        return evaluator.createExpressionErrorConstant(
+            node,
+            templateNotConstantExpression
+                .withArguments("Unary '$op' operation"));
     }
   }
 
@@ -259,8 +261,10 @@
         return evaluator.makeBoolConstant(a > b);
       default:
         // Probably unreachable.
-        return evaluator.createInvalidExpressionConstant(
-            node, "Invalid binary operator $op");
+        return evaluator.createExpressionErrorConstant(
+            node,
+            templateNotConstantExpression
+                .withArguments("Binary '$op' operation"));
     }
   }
 
@@ -268,7 +272,7 @@
   Constant truncatingDivide(Expression node, num left, num right) {
     double division = (left / right);
     if (division.isNaN || division.isInfinite) {
-      return evaluator.createErrorConstant(node,
+      return evaluator.createEvaluationErrorConstant(node,
           templateConstEvalTruncateError.withArguments('$left', '${right}'));
     }
     double result = division.truncateToDouble();
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 ada23ac..ad3885a 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
@@ -76,6 +76,19 @@
   return null;
 }
 
+/// Returns `true` if [member] is a lowered constructor, factory or typedef tear
+/// off.
+bool isTearOffLowering(Member member) {
+  return member is Procedure &&
+      (isConstructorTearOffLowering(member) ||
+          isTypedefTearOffLowering(member));
+}
+
+/// Returns `true` if [procedure] is a lowered constructor or factory tear off.
+bool isConstructorTearOffLowering(Procedure procedure) {
+  return extractConstructorNameFromTearOff(procedure.name) != null;
+}
+
 /// Returns `true` if [procedure] is a lowered typedef tear off.
 bool isTypedefTearOffLowering(Procedure procedure) {
   return extractTypedefNameFromTearOff(procedure.name) != null;
@@ -253,7 +266,19 @@
     FreshTypeParameters freshTypeParameters) {
   int fileOffset = tearOff.fileOffset;
 
+  List<TypeParameter> typeParameters;
+  if (target is Constructor) {
+    typeParameters = target.enclosingClass.typeParameters;
+  } else {
+    typeParameters = target.function!.typeParameters;
+  }
+
   if (!freshTypeParameters.substitution.isEmpty) {
+    if (typeArguments.length != typeParameters.length) {
+      // Error case: Use default types as type arguments.
+      typeArguments = new List<DartType>.generate(typeParameters.length,
+          (int index) => typeParameters[index].defaultType);
+    }
     if (typeArguments.isNotEmpty) {
       // Translate [typeArgument] into the context of the synthesized procedure.
       typeArguments = new List<DartType>.generate(
@@ -262,14 +287,21 @@
               .substituteType(typeArguments[index]));
     }
   }
-
+  Map<TypeParameter, DartType> substitutionMap;
+  if (typeParameters.length == typeArguments.length) {
+    substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+        typeParameters, typeArguments);
+  } else {
+    // Error case: Substitute type parameters with `dynamic`.
+    substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+        typeParameters,
+        new List<DartType>.generate(
+            typeParameters.length, (int index) => const DynamicType()));
+  }
   Arguments arguments = _createArguments(tearOff, typeArguments, fileOffset);
   _createTearOffBody(tearOff, target, arguments);
   return new SynthesizedFunctionNode(
-      new Map<TypeParameter, DartType>.fromIterables(
-          target.enclosingClass!.typeParameters, typeArguments),
-      target.function!,
-      tearOff.function,
+      substitutionMap, target.function!, tearOff.function,
       identicalSignatures: false);
 }
 
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 82dbe5c..dd26634 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -63,8 +63,7 @@
 
 import 'constness.dart' show Constness;
 
-import 'expression_generator_helper.dart'
-    show ExpressionGeneratorHelper, isProperRenameForClass;
+import 'expression_generator_helper.dart';
 
 import 'forest.dart';
 
@@ -171,10 +170,10 @@
   /// Returns a [Expression] representing a compile-time error.
   ///
   /// At runtime, an exception will be thrown.
-  Expression _makeInvalidRead() {
-    return _helper.throwNoSuchMethodError(_forest.createNullLiteral(fileOffset),
+  Expression _makeInvalidRead(UnresolvedKind unresolvedKind) {
+    return _helper.buildUnresolvedError(_forest.createNullLiteral(fileOffset),
         _plainNameForRead, _forest.createArgumentsEmpty(noLocation), fileOffset,
-        isGetter: true);
+        kind: unresolvedKind);
   }
 
   /// Returns a [Expression] representing a compile-time error wrapping
@@ -182,12 +181,12 @@
   ///
   /// At runtime, [value] will be evaluated before throwing an exception.
   Expression _makeInvalidWrite(Expression value) {
-    return _helper.throwNoSuchMethodError(
+    return _helper.buildUnresolvedError(
         _forest.createNullLiteral(fileOffset),
         _plainNameForRead,
         _forest.createArguments(noLocation, <Expression>[value]),
         fileOffset,
-        isSetter: true);
+        kind: UnresolvedKind.Setter);
   }
 
   Expression buildForEffect() => buildSimpleRead();
@@ -216,13 +215,13 @@
   ///
   /// If the invocation has explicit type arguments
   /// [buildTypeWithResolvedArguments] called instead.
-  /* Expression | Generator | Initializer */ doInvocation(
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false});
 
-  /* Expression | Generator */ buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
-    if (send is SendAccessGenerator) {
+  Expression_Generator buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
+    if (send is InvocationSelector) {
       return _helper.buildMethodInvocation(buildSimpleRead(), send.name,
           send.arguments, offsetForToken(send.token),
           isNullAware: isNullAware,
@@ -238,7 +237,7 @@
     }
   }
 
-  /*Expression | Generator*/ buildEqualsOperation(Token token, Expression right,
+  Expression_Generator buildEqualsOperation(Token token, Expression right,
       {required bool isNot}) {
     // ignore: unnecessary_null_comparison
     assert(isNot != null);
@@ -246,18 +245,18 @@
         isNot: isNot);
   }
 
-  /*Expression | Generator*/ buildBinaryOperation(
+  Expression_Generator buildBinaryOperation(
       Token token, Name binaryName, Expression right) {
     return _forest.createBinary(
         offsetForToken(token), buildSimpleRead(), binaryName, right);
   }
 
-  /*Expression | Generator*/ buildUnaryOperation(Token token, Name unaryName) {
+  Expression_Generator buildUnaryOperation(Token token, Name unaryName) {
     return _forest.createUnary(
         offsetForToken(token), unaryName, buildSimpleRead());
   }
 
-  /*Expression|Generator*/ applyTypeArguments(
+  Expression_Generator applyTypeArguments(
       int fileOffset, List<UnresolvedType>? typeArguments) {
     return new Instantiation(
         buildSimpleRead(), _helper.buildDartTypeArguments(typeArguments))
@@ -296,22 +295,18 @@
       Arguments arguments,
       Token nameToken,
       Token nameLastToken,
-      Constness constness) {
-    if (typeArguments != null) {
-      assert(_forest.argumentsTypeArguments(arguments).isEmpty);
-      _forest.argumentsSetTypeArguments(
-          arguments, _helper.buildDartTypeArguments(typeArguments));
-    }
-    return _helper.throwNoSuchMethodError(
-        _forest.createNullLiteral(fileOffset),
-        _helper.constructorNameForDiagnostics(name,
-            className: _plainNameForRead),
-        arguments,
-        nameToken.charOffset);
+      Constness constness,
+      {required bool inImplicitCreationContext}) {
+    return _helper.createInstantiationAndInvocation(() => buildSimpleRead(),
+        typeArguments, _plainNameForRead, name, arguments,
+        instantiationOffset: fileOffset,
+        invocationOffset: nameLastToken.charOffset,
+        inImplicitCreationContext: inImplicitCreationContext);
   }
 
   void printOn(StringSink sink);
 
+  @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
     buffer.write(_debugName);
@@ -777,6 +772,7 @@
       ..fileOffset = receiverExpression.fileOffset;
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return new NullAwareIfNullSet(receiverExpression, name, value,
@@ -787,6 +783,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -801,6 +798,7 @@
         forPostIncDec: isPostIncDec);
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildCompoundAssignment(
@@ -1040,6 +1038,7 @@
     return result;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -1176,6 +1175,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -1235,8 +1235,10 @@
       this.index, this.getter, this.setter)
       : super(helper, token);
 
+  @override
   String get _plainNameForRead => "[]";
 
+  @override
   String get _debugName => "SuperIndexedAccessGenerator";
 
   @override
@@ -1279,6 +1281,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -1431,7 +1434,7 @@
   Expression _createRead() {
     Expression read;
     if (readTarget == null) {
-      read = _makeInvalidRead();
+      read = _makeInvalidRead(UnresolvedKind.Getter);
     } else {
       _reportNonNullableInNullAwareWarningIfNeeded();
       read = _helper.makeStaticGet(readTarget!, token);
@@ -1689,7 +1692,7 @@
   Expression _createRead() {
     Expression read;
     if (readTarget == null) {
-      read = _makeInvalidRead();
+      read = _makeInvalidRead(UnresolvedKind.Getter);
     } else {
       read = _helper.buildExtensionMethodInvocation(
           fileOffset,
@@ -2014,7 +2017,7 @@
   Expression _createRead(Expression receiver) {
     Expression read;
     if (readTarget == null) {
-      read = _makeInvalidRead();
+      read = _makeInvalidRead(UnresolvedKind.Getter);
     } else {
       read = _helper.buildExtensionMethodInvocation(
           fileOffset,
@@ -2338,14 +2341,16 @@
     return explicitTypeArguments ?? const <DartType>[];
   }
 
+  @override
   String get _plainNameForRead => "[]";
 
+  @override
   String get _debugName => "ExplicitExtensionIndexedAccessGenerator";
 
   @override
   Expression buildSimpleRead() {
     if (readTarget == null) {
-      return _makeInvalidRead();
+      return _makeInvalidRead(UnresolvedKind.Method);
     }
     VariableDeclarationImpl? variable;
     Expression receiverValue;
@@ -2441,6 +2446,7 @@
     return result;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -2574,6 +2580,7 @@
     return _makeInvalidRead();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -2582,6 +2589,7 @@
     return _makeInvalidRead();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return _makeInvalidRead();
@@ -2599,7 +2607,8 @@
       setter = null;
     }
     if (getter == null && setter == null) {
-      return new UnresolvedNameGenerator(_helper, token, name);
+      return new UnresolvedNameGenerator(_helper, token, name,
+          unresolvedReadKind: UnresolvedKind.Member);
     }
     return new ExplicitExtensionInstanceAccessGenerator.fromBuilder(
         _helper,
@@ -2618,8 +2627,9 @@
         isNullAware: isNullAware);
   }
 
-  /* Expression | Generator */ buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  @override
+  Expression_Generator buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
     if (_helper.constantContext != ConstantContext.none) {
       _helper.addProblem(
           messageNotAConstantExpression, fileOffset, token.length);
@@ -2636,7 +2646,8 @@
   }
 
   @override
-  buildBinaryOperation(Token token, Name binaryName, Expression right) {
+  Expression_Generator buildBinaryOperation(
+      Token token, Name binaryName, Expression right) {
     int fileOffset = offsetForToken(token);
     Generator generator = _createInstanceAccess(token, binaryName);
     return generator.doInvocation(fileOffset, null,
@@ -2644,7 +2655,7 @@
   }
 
   @override
-  buildUnaryOperation(Token token, Name unaryName) {
+  Expression_Generator buildUnaryOperation(Token token, Name unaryName) {
     int fileOffset = offsetForToken(token);
     Generator generator = _createInstanceAccess(token, unaryName);
     return generator.doInvocation(
@@ -2652,7 +2663,7 @@
   }
 
   @override
-  doInvocation(
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     Generator generator = _createInstanceAccess(token, callName);
@@ -2661,7 +2672,7 @@
   }
 
   @override
-  Expression _makeInvalidRead() {
+  Expression _makeInvalidRead([UnresolvedKind? unresolvedKind]) {
     return _helper.buildProblem(messageExplicitExtensionAsExpression,
         fileOffset, lengthForToken(token));
   }
@@ -2680,7 +2691,8 @@
     Builder? getter = extensionBuilder.lookupLocalMemberByName(indexGetName);
     Builder? setter = extensionBuilder.lookupLocalMemberByName(indexSetName);
     if (getter == null && setter == null) {
-      return new UnresolvedNameGenerator(_helper, token, indexGetName);
+      return new UnresolvedNameGenerator(_helper, token, indexGetName,
+          unresolvedReadKind: UnresolvedKind.Method);
     }
 
     return new ExplicitExtensionIndexedAccessGenerator.fromBuilder(
@@ -2852,10 +2864,10 @@
   }
 
   @override
-  buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  Expression_Generator buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
     Object propertyAccess =
-        suffixGenerator.buildPropertyAccess(send, operatorOffset, isNullAware);
+        suffixGenerator.buildSelectorAccess(send, operatorOffset, isNullAware);
     if (propertyAccess is Generator) {
       return new DeferredAccessGenerator(
           _helper, token, prefixGenerator, propertyAccess);
@@ -2898,12 +2910,8 @@
               _uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
     }
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        name,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null);
+    NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null);
     _helper.libraryBuilder.addProblem(
         message.messageObject, message.charOffset, message.length, message.uri);
     result.bind(result.buildInvalidTypeDeclarationBuilder(message));
@@ -2911,7 +2919,7 @@
   }
 
   @override
-  doInvocation(
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     Object suffix = suffixGenerator.doInvocation(
@@ -2933,10 +2941,12 @@
       Arguments arguments,
       Token nameToken,
       Token nameLastToken,
-      Constness constness) {
+      Constness constness,
+      {required bool inImplicitCreationContext}) {
     return _helper.wrapInDeferredCheck(
-        suffixGenerator.invokeConstructor(typeArguments, name, arguments,
-            nameToken, nameLastToken, constness),
+        suffixGenerator.invokeConstructor(
+            typeArguments, name, arguments, nameToken, nameLastToken, constness,
+            inImplicitCreationContext: inImplicitCreationContext),
         prefixGenerator.prefix,
         offsetForToken(suffixGenerator.token));
   }
@@ -2982,6 +2992,7 @@
   final TypeDeclarationBuilder declaration;
   List<UnresolvedType>? typeArguments;
 
+  @override
   final String targetName;
 
   Expression? _expression;
@@ -3048,7 +3059,8 @@
       Arguments arguments,
       Token nameToken,
       Token nameLastToken,
-      Constness constness) {
+      Constness constness,
+      {required bool inImplicitCreationContext}) {
     return _helper.buildConstructorInvocation(
         declaration,
         nameToken,
@@ -3057,7 +3069,8 @@
         name,
         typeArguments,
         offsetForToken(nameToken),
-        constness);
+        constness,
+        unresolvedKind: UnresolvedKind.Constructor);
   }
 
   @override
@@ -3093,8 +3106,8 @@
   }
 
   @override
-  buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  Expression_Generator buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
     int nameOffset = offsetForToken(send.token);
     Name name = send.name;
     Arguments? arguments = send.arguments;
@@ -3158,7 +3171,7 @@
       Generator generator;
       if (member == null) {
         // If we find a setter, [member] is an [AccessErrorBuilder], not null.
-        if (send is IncompletePropertyAccessGenerator) {
+        if (send is PropertySelector) {
           assert(
               send.typeArguments == null,
               "Unexpected non-null typeArguments of "
@@ -3218,8 +3231,8 @@
                     _helper.buildDartTypeArguments(typeArguments);
               }
               if (isGenericTypedefTearOff) {
-                if (isProperRenameForClass(
-                    _helper.typeEnvironment, aliasBuilder!.typedef)) {
+                if (isProperRenameForClass(_helper.typeEnvironment,
+                    aliasBuilder!.typedef, aliasBuilder.library.library)) {
                   return tearOffExpression;
                 }
                 Procedure? tearOffLowering =
@@ -3255,7 +3268,8 @@
               return tearOffExpression;
             }
           }
-          generator = new UnresolvedNameGenerator(_helper, send.token, name);
+          generator = new UnresolvedNameGenerator(_helper, send.token, name,
+              unresolvedReadKind: UnresolvedKind.Member);
         } else {
           return _helper.buildConstructorInvocation(
               declaration,
@@ -3267,11 +3281,18 @@
               token.charOffset,
               Constness.implicit,
               isTypeArgumentsInForest: send.isTypeArgumentsInForest,
-              typeAliasBuilder: aliasBuilder);
+              typeAliasBuilder: aliasBuilder,
+              unresolvedKind:
+                  isNullAware ? UnresolvedKind.Method : UnresolvedKind.Member);
         }
       } else if (member is AmbiguousBuilder) {
         return _helper.buildProblem(
             member.message, member.charOffset, name.text.length);
+      } else if (member.isStatic &&
+          !member.isFactory &&
+          typeArguments != null) {
+        return _helper.buildProblem(messageStaticTearOffFromInstantiatedClass,
+            send.fileOffset, send.name.text.length);
       } else {
         Builder? setter;
         if (member.isSetter) {
@@ -3309,12 +3330,12 @@
     } else {
       // `SomeType?.toString` is the same as `SomeType.toString`, not
       // `(SomeType).toString`.
-      return super.buildPropertyAccess(send, operatorOffset, isNullAware);
+      return super.buildSelectorAccess(send, operatorOffset, isNullAware);
     }
   }
 
   @override
-  doInvocation(
+  Expression_Generator_Builder doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (declaration.isExtension) {
@@ -3345,12 +3366,14 @@
     } else {
       return _helper.buildConstructorInvocation(declaration, token, token,
           arguments, "", typeArguments, token.charOffset, Constness.implicit,
-          isTypeArgumentsInForest: isTypeArgumentsInForest);
+          isTypeArgumentsInForest: isTypeArgumentsInForest,
+          unresolvedKind: UnresolvedKind.Constructor);
     }
   }
 
   @override
-  applyTypeArguments(int fileOffset, List<UnresolvedType>? typeArguments) {
+  Expression_Generator applyTypeArguments(
+      int fileOffset, List<UnresolvedType>? typeArguments) {
     return new TypeUseGenerator(_helper, token, declaration, targetName)
       ..typeArguments = typeArguments;
   }
@@ -3394,8 +3417,10 @@
 ///   }
 ///
 class ReadOnlyAccessGenerator extends AbstractReadOnlyAccessGenerator {
+  @override
   final String targetName;
 
+  @override
   Expression expression;
 
   ReadOnlyAccessGenerator(ExpressionGeneratorHelper helper, Token token,
@@ -3425,6 +3450,7 @@
 
   Expression _createRead() => expression;
 
+  @override
   Expression _makeInvalidWrite(Expression value) {
     switch (kind) {
       case ReadOnlyAccessKind.ConstVariable:
@@ -3493,7 +3519,7 @@
   }
 
   @override
-  doInvocation(
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest.createExpressionInvocation(
@@ -3529,37 +3555,35 @@
 
   /// Pass [arguments] that must be evaluated before throwing an error.  At
   /// most one of [isGetter] and [isSetter] should be true and they're passed
-  /// to [ExpressionGeneratorHelper.throwNoSuchMethodError] if it is used.
+  /// to [ExpressionGeneratorHelper.buildUnresolvedError] if it is used.
   Expression buildError(Arguments arguments,
-      {bool isGetter: false, bool isSetter: false, int offset});
+      {required UnresolvedKind kind, int? charOffset});
 
   Name get name => unsupported("name", fileOffset, _uri);
 
   @override
   String get _plainNameForRead => name.text;
 
-  withReceiver(Object? receiver, int operatorOffset,
-          {bool isNullAware: false}) =>
-      this;
-
   @override
   List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
     return <Initializer>[
-      _helper.buildInvalidInitializer(
-          buildError(_forest.createArgumentsEmpty(fileOffset), isSetter: true))
+      _helper.buildInvalidInitializer(buildError(
+          _forest.createArgumentsEmpty(fileOffset),
+          kind: UnresolvedKind.Setter))
     ];
   }
 
   @override
-  doInvocation(
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
-    return buildError(arguments, offset: offset);
+    return buildError(arguments,
+        charOffset: offset, kind: UnresolvedKind.Method);
   }
 
   @override
-  buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  Expression_Generator buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
     return send.withReceiver(buildSimpleRead(), operatorOffset,
         isNullAware: isNullAware);
   }
@@ -3567,7 +3591,7 @@
   @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildError(_forest.createArguments(fileOffset, <Expression>[value]),
-        isSetter: true);
+        kind: UnresolvedKind.Setter);
   }
 
   @override
@@ -3577,7 +3601,7 @@
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
     return buildError(_forest.createArguments(fileOffset, <Expression>[value]),
-        isGetter: true);
+        kind: UnresolvedKind.Getter);
   }
 
   @override
@@ -3586,7 +3610,7 @@
     return buildError(
         _forest.createArguments(
             fileOffset, <Expression>[_forest.createIntLiteral(offset, 1)]),
-        isGetter: true)
+        kind: UnresolvedKind.Getter)
       ..fileOffset = offset;
   }
 
@@ -3596,7 +3620,7 @@
     return buildError(
         _forest.createArguments(
             fileOffset, <Expression>[_forest.createIntLiteral(offset, 1)]),
-        isGetter: true)
+        kind: UnresolvedKind.Getter)
       ..fileOffset = offset;
   }
 
@@ -3604,23 +3628,25 @@
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return buildError(_forest.createArguments(fileOffset, <Expression>[value]),
-        isSetter: true);
+        kind: UnresolvedKind.Setter);
   }
 
   @override
   Expression buildSimpleRead() {
-    return buildError(_forest.createArgumentsEmpty(fileOffset), isGetter: true);
+    return buildError(_forest.createArgumentsEmpty(fileOffset),
+        kind: UnresolvedKind.Member);
   }
 
   @override
-  Expression _makeInvalidRead() {
-    return buildError(_forest.createArgumentsEmpty(fileOffset), isGetter: true);
+  Expression _makeInvalidRead(UnresolvedKind unresolvedKind) {
+    return buildError(_forest.createArgumentsEmpty(fileOffset),
+        kind: unresolvedKind);
   }
 
   @override
   Expression _makeInvalidWrite(Expression value) {
     return buildError(_forest.createArguments(fileOffset, <Expression>[value]),
-        isSetter: true);
+        kind: UnresolvedKind.Setter);
   }
 
   @override
@@ -3630,13 +3656,14 @@
       Arguments arguments,
       Token nameToken,
       Token nameLastToken,
-      Constness constness) {
+      Constness constness,
+      {required bool inImplicitCreationContext}) {
     if (typeArguments != null) {
       assert(_forest.argumentsTypeArguments(arguments).isEmpty);
       _forest.argumentsSetTypeArguments(
           arguments, _helper.buildDartTypeArguments(typeArguments));
     }
-    return buildError(arguments);
+    return buildError(arguments, kind: UnresolvedKind.Constructor);
   }
 
   @override
@@ -3653,16 +3680,20 @@
   @override
   final Name name;
 
+  final UnresolvedKind unresolvedReadKind;
+
   factory UnresolvedNameGenerator(
-      ExpressionGeneratorHelper helper, Token token, Name name) {
+      ExpressionGeneratorHelper helper, Token token, Name name,
+      {required UnresolvedKind unresolvedReadKind}) {
     if (name.text.isEmpty) {
       unhandled("empty", "name", offsetForToken(token), helper.uri);
     }
-    return new UnresolvedNameGenerator.internal(helper, token, name);
+    return new UnresolvedNameGenerator.internal(
+        helper, token, name, unresolvedReadKind);
   }
 
-  UnresolvedNameGenerator.internal(
-      ExpressionGeneratorHelper helper, Token token, this.name)
+  UnresolvedNameGenerator.internal(ExpressionGeneratorHelper helper,
+      Token token, this.name, this.unresolvedReadKind)
       : super(helper, token);
 
   @override
@@ -3672,16 +3703,17 @@
   Expression doInvocation(
       int charOffset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
-    return buildError(arguments, offset: charOffset);
+    return buildError(arguments,
+        charOffset: charOffset, kind: UnresolvedKind.Method);
   }
 
   @override
   Expression buildError(Arguments arguments,
-      {bool isGetter: false, bool isSetter: false, int? offset}) {
-    offset ??= fileOffset;
-    return _helper.throwNoSuchMethodError(
-        _forest.createNullLiteral(offset), _plainNameForRead, arguments, offset,
-        isGetter: isGetter, isSetter: isSetter);
+      {required UnresolvedKind kind, int? charOffset}) {
+    charOffset ??= fileOffset;
+    return _helper.buildUnresolvedError(_forest.createNullLiteral(charOffset),
+        _plainNameForRead, arguments, charOffset,
+        kind: kind);
   }
 
   @override
@@ -3705,7 +3737,8 @@
 
   @override
   Expression buildSimpleRead() {
-    return buildError(_forest.createArgumentsEmpty(fileOffset), isGetter: true)
+    return buildError(_forest.createArgumentsEmpty(fileOffset),
+        kind: unresolvedReadKind)
       ..fileOffset = fileOffset;
   }
 
@@ -3718,7 +3751,7 @@
   Expression _buildUnresolvedVariableAssignment(
       bool isCompound, Expression value) {
     return buildError(_forest.createArguments(fileOffset, <Expression>[value]),
-        isSetter: true);
+        kind: UnresolvedKind.Setter);
   }
 
   @override
@@ -3744,7 +3777,7 @@
   }
 
   @override
-  Expression doInvocation(
+  Never doInvocation(
       int charOffset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return unhandled("${runtimeType}", "doInvocation", charOffset, _uri);
@@ -3783,7 +3816,7 @@
   }
 
   @override
-  _makeInvalidRead() {
+  Never _makeInvalidRead([UnresolvedKind? unresolvedKind]) {
     return unsupported("makeInvalidRead", token.charOffset, _helper.uri);
   }
 
@@ -3990,7 +4023,7 @@
   }
 
   @override
-  /* Expression | Generator | Initializer */ doInvocation(
+  Expression doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.wrapInLocatedProblem(
@@ -4001,31 +4034,27 @@
   }
 
   @override
-  /* Expression | Generator */ buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
-    if (send is IncompleteSendGenerator) {
-      assert(send.name.text == send.token.lexeme,
-          "'${send.name.text}' != ${send.token.lexeme}");
-      Object result = qualifiedLookup(send.token);
-      if (send is SendAccessGenerator) {
-        result = _helper.finishSend(
-            result, send.typeArguments, send.arguments, fileOffset,
-            isTypeArgumentsInForest: send.isTypeArgumentsInForest);
-      }
-      if (isNullAware) {
-        result = _helper.wrapInLocatedProblem(
-            _helper.toValue(result),
-            messageCantUsePrefixWithNullAware.withLocation(
-                _helper.uri, fileOffset, lengthForToken(token)));
-      }
-      return result;
-    } else {
-      return buildSimpleRead();
+  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);
     }
+    if (isNullAware) {
+      result = _helper.wrapInLocatedProblem(
+          _helper.toValue(result),
+          messageCantUsePrefixWithNullAware.withLocation(
+              _helper.uri, fileOffset, lengthForToken(token)));
+    }
+    return result;
   }
 
   @override
-  Expression _makeInvalidRead() {
+  Expression _makeInvalidRead([UnresolvedKind? unresolvedKind]) {
     return _helper.buildProblem(
         messageCantUsePrefixAsExpression, fileOffset, lengthForToken(token));
   }
@@ -4068,7 +4097,7 @@
   String get _debugName => "UnexpectedQualifiedUseGenerator";
 
   @override
-  Expression buildSimpleRead() => _makeInvalidRead();
+  Expression buildSimpleRead() => _makeInvalidRead(UnresolvedKind.Member);
 
   @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
@@ -4078,7 +4107,7 @@
   @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
-    return _makeInvalidRead();
+    return _makeInvalidRead(UnresolvedKind.Member);
   }
 
   @override
@@ -4087,21 +4116,22 @@
       bool voidContext: false,
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
-    return _makeInvalidRead();
+    return _makeInvalidRead(UnresolvedKind.Member);
   }
 
   @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset = TreeNode.noOffset, bool voidContext = false}) {
-    return _makeInvalidRead();
+    return _makeInvalidRead(UnresolvedKind.Member);
   }
 
   @override
   Expression doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
-    return _helper.throwNoSuchMethodError(_forest.createNullLiteral(offset),
-        _plainNameForRead, arguments, fileOffset);
+    return _helper.buildUnresolvedError(_forest.createNullLiteral(offset),
+        _plainNameForRead, arguments, fileOffset,
+        kind: UnresolvedKind.Method);
   }
 
   @override
@@ -4168,17 +4198,21 @@
         suppressMessage: true);
   }
 
+  @override
   Expression buildSimpleRead() => buildProblem();
 
+  @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -4187,35 +4221,44 @@
     return buildProblem();
   }
 
+  @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildProblem();
   }
 
-  Expression _makeInvalidRead() => buildProblem();
+  @override
+  Expression _makeInvalidRead([UnresolvedKind? unresolvedKind]) =>
+      buildProblem();
 
+  @override
   Expression _makeInvalidWrite(Expression value) => buildProblem();
 
+  @override
   List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
     return <Initializer>[_helper.buildInvalidInitializer(buildProblem())];
   }
 
+  @override
   Expression doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return buildProblem();
   }
 
-  Expression buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  @override
+  Expression buildSelectorAccess(
+      Selector send, int operatorOffset, bool isNullAware) {
     return buildProblem();
   }
 
+  @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments) {
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
@@ -4231,17 +4274,20 @@
     return result;
   }
 
+  @override
   Expression qualifiedLookup(Token name) {
     return buildProblem();
   }
 
+  @override
   Expression invokeConstructor(
       List<UnresolvedType>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
       Token nameLastToken,
-      Constness constness) {
+      Constness constness,
+      {required bool inImplicitCreationContext}) {
     return buildProblem();
   }
 
@@ -4320,13 +4366,16 @@
       {this.isSuper: false})
       : super(helper, token);
 
+  @override
   String get _plainNameForRead {
     return unsupported(
         "${isSuper ? 'super' : 'this'}.plainNameForRead", fileOffset, _uri);
   }
 
+  @override
   String get _debugName => "ThisAccessGenerator";
 
+  @override
   Expression buildSimpleRead() {
     if (!isSuper) {
       if (inFieldInitializer && !inLateFieldInitializer) {
@@ -4363,12 +4412,13 @@
     }
   }
 
-  buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+  @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 SendAccessGenerator) {
+    if (isInitializer && send is InvocationSelector) {
       if (isNullAware) {
         _helper.addProblem(
             messageInvalidUseOfNullAwareAccess, operatorOffset, 2);
@@ -4378,7 +4428,7 @@
     if (inFieldInitializer && !inLateFieldInitializer && !isInitializer) {
       return buildFieldInitializerError(null);
     }
-    if (send is SendAccessGenerator) {
+    if (send is InvocationSelector) {
       // Notice that 'this' or 'super' can't be null. So we can ignore the
       // value of [isNullAware].
       if (isNullAware) {
@@ -4414,7 +4464,8 @@
     }
   }
 
-  doInvocation(
+  @override
+  Expression_Generator_Initializer doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (isInitializer) {
@@ -4428,7 +4479,8 @@
   }
 
   @override
-  buildEqualsOperation(Token token, Expression right, {required bool isNot}) {
+  Expression_Generator buildEqualsOperation(Token token, Expression right,
+      {required bool isNot}) {
     // ignore: unnecessary_null_comparison
     assert(isNot != null);
     if (isSuper) {
@@ -4448,7 +4500,8 @@
   }
 
   @override
-  buildBinaryOperation(Token token, Name binaryName, Expression right) {
+  Expression_Generator buildBinaryOperation(
+      Token token, Name binaryName, Expression right) {
     if (isSuper) {
       int offset = offsetForToken(token);
       return _helper.buildMethodInvocation(
@@ -4462,7 +4515,7 @@
   }
 
   @override
-  buildUnaryOperation(Token token, Name unaryName) {
+  Expression_Generator buildUnaryOperation(Token token, Name unaryName) {
     if (isSuper) {
       int offset = offsetForToken(token);
       return _helper.buildMethodInvocation(
@@ -4494,14 +4547,15 @@
     }
     if (message != null) {
       return _helper.buildInvalidInitializer(
-          _helper.throwNoSuchMethodError(
+          _helper.buildUnresolvedError(
               _forest.createNullLiteral(offset),
               _helper.constructorNameForDiagnostics(name.text,
                   isSuper: isSuper),
               arguments,
               offset,
               isSuper: isSuper,
-              message: message),
+              message: message,
+              kind: UnresolvedKind.Constructor),
           offset);
     } else if (isSuper) {
       return _helper.buildSuperInitializer(
@@ -4512,15 +4566,18 @@
     }
   }
 
+  @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -4529,11 +4586,13 @@
     return buildAssignmentError();
   }
 
+  @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildAssignmentError();
@@ -4579,50 +4638,43 @@
   }
 }
 
-abstract class IncompleteSendGenerator implements Generator {
-  Name get name;
-
-  withReceiver(Object? receiver, int operatorOffset, {bool isNullAware: false});
-
-  List<UnresolvedType>? get typeArguments => null;
-
-  bool get isTypeArgumentsInForest => true;
-
-  Arguments? get arguments => null;
-}
-
-class IncompleteErrorGenerator extends ErroneousExpressionGenerator
-    with IncompleteSendGenerator {
+class IncompleteErrorGenerator extends ErroneousExpressionGenerator {
   final Message message;
 
   IncompleteErrorGenerator(
       ExpressionGeneratorHelper helper, Token token, this.message)
       : super(helper, token);
 
+  @override
   String get _plainNameForRead => token.lexeme;
 
+  @override
   String get _debugName => "IncompleteErrorGenerator";
 
   @override
   Expression buildError(Arguments arguments,
-      {bool isGetter: false, bool isSetter: false, int? offset}) {
-    int length = noLength;
-    if (offset == null) {
-      offset = fileOffset;
-      length = lengthForToken(token);
+      {required UnresolvedKind kind,
+      String? name,
+      int? charOffset,
+      int? charLength}) {
+    if (charOffset == null) {
+      charOffset = fileOffset;
+      charLength ??= lengthForToken(token);
     }
-    return _helper.buildProblem(message, offset, length);
+    charLength ??= noLength;
+    return _helper.buildProblem(message, charOffset, charLength);
   }
 
   @override
-  doInvocation(
+  Generator doInvocation(
           int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
           {bool isTypeArgumentsInForest = false}) =>
       this;
 
   @override
   Expression buildSimpleRead() {
-    return buildError(_forest.createArgumentsEmpty(fileOffset), isGetter: true)
+    return buildError(_forest.createArgumentsEmpty(fileOffset),
+        kind: UnresolvedKind.Member)
       ..fileOffset = fileOffset;
   }
 
@@ -4633,176 +4685,6 @@
   }
 }
 
-// TODO(ahe): Rename to SendGenerator.
-class SendAccessGenerator extends Generator with IncompleteSendGenerator {
-  @override
-  final Name name;
-
-  @override
-  final List<UnresolvedType>? typeArguments;
-
-  @override
-  final bool isTypeArgumentsInForest;
-
-  @override
-  final Arguments arguments;
-
-  final bool isPotentiallyConstant;
-
-  SendAccessGenerator(ExpressionGeneratorHelper helper, Token token, this.name,
-      this.typeArguments, this.arguments,
-      {this.isPotentiallyConstant = false, this.isTypeArgumentsInForest = true})
-      : super(helper, token) {
-    // ignore: unnecessary_null_comparison
-    assert(arguments != null);
-  }
-
-  String get _plainNameForRead => name.text;
-
-  String get _debugName => "SendAccessGenerator";
-
-  Expression buildSimpleRead() {
-    return unsupported("buildSimpleRead", fileOffset, _uri);
-  }
-
-  Expression buildAssignment(Expression value, {bool voidContext: false}) {
-    return unsupported("buildAssignment", fileOffset, _uri);
-  }
-
-  withReceiver(Object? receiver, int operatorOffset,
-      {bool isNullAware: false}) {
-    if (receiver is Generator) {
-      return receiver.buildPropertyAccess(this, operatorOffset, isNullAware);
-    }
-    return _helper.buildMethodInvocation(
-        _helper.toValue(receiver), name, arguments, fileOffset,
-        isNullAware: isNullAware);
-  }
-
-  Expression buildIfNullAssignment(Expression value, DartType type, int offset,
-      {bool voidContext: false}) {
-    return unsupported("buildNullAwareAssignment", offset, _uri);
-  }
-
-  Expression buildCompoundAssignment(Name binaryOperator, Expression value,
-      {int offset: TreeNode.noOffset,
-      bool voidContext: false,
-      bool isPreIncDec: false,
-      bool isPostIncDec: false}) {
-    return unsupported("buildCompoundAssignment", offset, _uri);
-  }
-
-  Expression buildPrefixIncrement(Name binaryOperator,
-      {int offset: TreeNode.noOffset, bool voidContext: false}) {
-    return unsupported("buildPrefixIncrement", offset, _uri);
-  }
-
-  Expression buildPostfixIncrement(Name binaryOperator,
-      {int offset: TreeNode.noOffset, bool voidContext: false}) {
-    return unsupported("buildPostfixIncrement", offset, _uri);
-  }
-
-  Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
-      {bool isTypeArgumentsInForest = false}) {
-    return unsupported("doInvocation", offset, _uri);
-  }
-
-  @override
-  Generator buildIndexedAccess(Expression index, Token token,
-      {required bool isNullAware}) {
-    // ignore: unnecessary_null_comparison
-    assert(isNullAware != null);
-    return unsupported("buildIndexedAccess", offsetForToken(token), _uri);
-  }
-
-  @override
-  void printOn(StringSink sink) {
-    sink.write(", name: ");
-    sink.write(name.text);
-    sink.write(", arguments: ");
-    Arguments node = arguments;
-    if (node is Node) {
-      printNodeOn(node, sink);
-    } else {
-      sink.write(node);
-    }
-  }
-}
-
-class IncompletePropertyAccessGenerator extends Generator
-    with IncompleteSendGenerator {
-  final Name name;
-
-  IncompletePropertyAccessGenerator(
-      ExpressionGeneratorHelper helper, Token token, this.name)
-      : super(helper, token);
-
-  String get _plainNameForRead => name.text;
-
-  String get _debugName => "IncompletePropertyAccessGenerator";
-
-  Expression buildSimpleRead() {
-    return unsupported("buildSimpleRead", fileOffset, _uri);
-  }
-
-  Expression buildAssignment(Expression value, {bool voidContext: false}) {
-    return unsupported("buildAssignment", fileOffset, _uri);
-  }
-
-  withReceiver(Object? receiver, int operatorOffset,
-      {bool isNullAware: false}) {
-    if (receiver is Generator) {
-      return receiver.buildPropertyAccess(this, operatorOffset, isNullAware);
-    }
-    return PropertyAccessGenerator.make(
-        _helper, token, _helper.toValue(receiver), name, isNullAware);
-  }
-
-  Expression buildIfNullAssignment(Expression value, DartType type, int offset,
-      {bool voidContext: false}) {
-    return unsupported("buildNullAwareAssignment", offset, _uri);
-  }
-
-  Expression buildCompoundAssignment(Name binaryOperator, Expression value,
-      {int offset: TreeNode.noOffset,
-      bool voidContext: false,
-      bool isPreIncDec: false,
-      bool isPostIncDec: false}) {
-    return unsupported("buildCompoundAssignment", offset, _uri);
-  }
-
-  Expression buildPrefixIncrement(Name binaryOperator,
-      {int offset: TreeNode.noOffset, bool voidContext: false}) {
-    return unsupported("buildPrefixIncrement", offset, _uri);
-  }
-
-  Expression buildPostfixIncrement(Name binaryOperator,
-      {int offset: TreeNode.noOffset, bool voidContext: false}) {
-    return unsupported("buildPostfixIncrement", offset, _uri);
-  }
-
-  Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
-      {bool isTypeArgumentsInForest = false}) {
-    return unsupported("doInvocation", offset, _uri);
-  }
-
-  @override
-  Generator buildIndexedAccess(Expression index, Token token,
-      {required bool isNullAware}) {
-    // ignore: unnecessary_null_comparison
-    assert(isNullAware != null);
-    return unsupported("buildIndexedAccess", offsetForToken(token), _uri);
-  }
-
-  @override
-  void printOn(StringSink sink) {
-    sink.write(", name: ");
-    sink.write(name.text);
-  }
-}
-
 /// [ParenthesizedExpressionGenerator] represents the subexpression whose prefix
 /// is a parenthesized expression.
 ///
@@ -4819,6 +4701,7 @@
 // TODO(johnniwinther): Remove this in favor of [ParenthesizedExpression] when
 // the [TypePromoter] is replaced by [FlowAnalysis].
 class ParenthesizedExpressionGenerator extends AbstractReadOnlyAccessGenerator {
+  @override
   final Expression expression;
 
   ParenthesizedExpressionGenerator(
@@ -4835,11 +4718,13 @@
   Expression _createRead() =>
       _helper.forest.createParenthesized(fileOffset, expression);
 
+  @override
   String get _debugName => "ParenthesizedExpressionGenerator";
 
-  /* Expression | Generator */ buildPropertyAccess(
-      IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
-    if (send is SendAccessGenerator) {
+  @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),
           isNullAware: isNullAware,
@@ -4865,3 +4750,152 @@
 bool isFieldOrGetter(Member? member) {
   return member is Field || (member is Procedure && member.isGetter);
 }
+
+/// A [Selector] is a part of an object access after `.` or `..` or `?.`,
+/// including arguments, if present.
+///
+/// For instance, an [InvocationSelector] is created for `b()` in
+///
+///    a.b();
+///    a..b();
+///    a?.b();
+///
+/// and a [PropertySelector] is created for `b` in
+///
+///    a.b;
+///    a.b = c;
+///    a..b;
+///    a..b = c;
+///    a?.b;
+///    a?.b = c;
+///
+abstract class Selector {
+  final ExpressionGeneratorHelper _helper;
+  final Token token;
+
+  Selector(this._helper, this.token);
+
+  int get fileOffset => offsetForToken(token);
+
+  Name get name;
+
+  /// Applies this selector to [receiver].
+  Expression_Generator withReceiver(Object? receiver, int operatorOffset,
+      {bool isNullAware: false});
+
+  List<UnresolvedType>? get typeArguments => null;
+
+  bool get isTypeArgumentsInForest => true;
+
+  Arguments? get arguments => null;
+
+  /// Internal name used for debugging.
+  String get _debugName;
+
+  void printOn(StringSink sink);
+
+  @override
+  String toString() {
+    StringBuffer buffer = new StringBuffer();
+    buffer.write(_debugName);
+    buffer.write("(offset: ");
+    buffer.write("${fileOffset}");
+    printOn(buffer);
+    buffer.write(")");
+    return "$buffer";
+  }
+}
+
+/// An [InvocationSelector] is the part of an object invocation after `.` or
+/// `..` or `?.` including arguments.
+///
+/// For instance, an [InvocationSelector] is created for `b()` in
+///
+///    a.b();
+///    a..b();
+///    a?.b();
+///
+class InvocationSelector extends Selector {
+  @override
+  final Name name;
+
+  @override
+  final List<UnresolvedType>? typeArguments;
+
+  @override
+  final bool isTypeArgumentsInForest;
+
+  @override
+  final Arguments arguments;
+
+  final bool isPotentiallyConstant;
+
+  InvocationSelector(ExpressionGeneratorHelper helper, Token token, this.name,
+      this.typeArguments, this.arguments,
+      {this.isPotentiallyConstant = false, this.isTypeArgumentsInForest = true})
+      : super(helper, token) {
+    // ignore: unnecessary_null_comparison
+    assert(arguments != null);
+  }
+
+  @override
+  String get _debugName => 'InvocationSelector';
+
+  @override
+  Expression_Generator withReceiver(Object? receiver, int operatorOffset,
+      {bool isNullAware: false}) {
+    if (receiver is Generator) {
+      return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
+    }
+    return _helper.buildMethodInvocation(
+        _helper.toValue(receiver), name, arguments, fileOffset,
+        isNullAware: isNullAware);
+  }
+
+  @override
+  void printOn(StringSink sink) {
+    sink.write(", name: ");
+    sink.write(name.text);
+    sink.write(", arguments: ");
+    printNodeOn(arguments, sink);
+  }
+}
+
+/// A [PropertySelector] is the part of an object access after `.` or `..` or
+/// `?.`.
+///
+/// For instance a [PropertySelector] is created for `b` in
+///
+///    a.b;
+///    a.b = c;
+///    a..b;
+///    a..b = c;
+///    a?.b;
+///    a?.b = c;
+///
+class PropertySelector extends Selector {
+  @override
+  final Name name;
+
+  PropertySelector(ExpressionGeneratorHelper helper, Token token, this.name)
+      : super(helper, token);
+
+  @override
+  String get _debugName => 'PropertySelector';
+
+  @override
+  Expression_Generator withReceiver(Object? receiver, int operatorOffset,
+      {bool isNullAware: false}) {
+    if (receiver is Generator) {
+      return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
+    }
+    return PropertyAccessGenerator.make(
+        _helper, token, _helper.toValue(receiver), name, isNullAware);
+  }
+
+  @override
+  void printOn(StringSink sink) {
+    sink.write(", name: ");
+    sink.write(name.text);
+  }
+}
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 c19553b..ecc97bb 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
@@ -33,6 +33,7 @@
         FunctionNode,
         Initializer,
         InterfaceType,
+        Library,
         Member,
         Name,
         Procedure,
@@ -43,6 +44,15 @@
         Typedef,
         VariableDeclaration;
 
+/// Alias for Expression | Generator
+typedef Expression_Generator = dynamic;
+
+/// Alias for Expression | Generator | Builder
+typedef Expression_Generator_Builder = dynamic;
+
+/// Alias for Expression | Generator | Initializer
+typedef Expression_Generator_Initializer = dynamic;
+
 abstract class ExpressionGeneratorHelper implements InferenceHelper {
   SourceLibraryBuilder get libraryBuilder;
 
@@ -65,11 +75,11 @@
 
   bool get enableConstructorTearOffsInLibrary;
 
-  /* Generator | Expression | Builder */ scopeLookup(
+  Expression_Generator_Builder scopeLookup(
       Scope scope, String name, Token token,
       {bool isQualified: false, PrefixBuilder? prefix});
 
-  /* Expression | Generator | Initializer */ finishSend(Object receiver,
+  Expression_Generator_Initializer finishSend(Object receiver,
       List<UnresolvedType>? typeArguments, Arguments arguments, int offset,
       {bool isTypeArgumentsInForest = false});
 
@@ -96,12 +106,11 @@
       int fileOffset, Procedure target, Arguments arguments,
       {required bool isTearOff});
 
-  Expression throwNoSuchMethodError(
-      Expression receiver, String name, Arguments arguments, int offset,
+  Expression buildUnresolvedError(
+      Expression receiver, String name, Arguments arguments, int charOffset,
       {Member candidate,
       bool isSuper,
-      bool isGetter,
-      bool isSetter,
+      required UnresolvedKind kind,
       bool isStatic,
       LocatedMessage message});
 
@@ -131,7 +140,8 @@
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
-      TypeDeclarationBuilder? typeAliasBuilder});
+      TypeDeclarationBuilder? typeAliasBuilder,
+      required UnresolvedKind unresolvedKind});
 
   UnresolvedType validateTypeUse(UnresolvedType unresolved,
       {required bool nonInstanceAccessIsError,
@@ -183,10 +193,40 @@
   void registerVariableAssignment(VariableDeclaration variable);
 
   TypeEnvironment get typeEnvironment;
+
+  /// If explicit instantiations are supported in this library, create an
+  /// instantiation of the result of [receiverFunction] using
+  /// [typeArguments] followed by an invocation of [name] with [arguments].
+  /// Otherwise create the errors for the corresponding invalid implicit
+  /// creation expression.
+  ///
+  /// This is used to handle the syntax for implicit creation expression as
+  /// an explicit instantiation with and invocation. For instance
+  ///
+  ///     a.b<c>.d()
+  ///
+  /// The parser treat the as the constructor invocation of constructor `d` on
+  /// class `b` with prefix `a` with type arguments `<c>`, but with explicit
+  /// instantiation it could instead be the explicit instantiation of expression
+  /// `a.b` with type arguments `<c>` followed by and invocation of `d()`.
+  ///
+  /// If [inImplicitCreationContext] is `false`, then the expression is
+  /// preceded by `new` or `const`, and an error should be reported instead of
+  /// creating the instantiation and invocation.
+  Expression createInstantiationAndInvocation(
+      Expression Function() receiverFunction,
+      List<UnresolvedType>? typeArguments,
+      String className,
+      String constructorName,
+      Arguments arguments,
+      {required int instantiationOffset,
+      required int invocationOffset,
+      required bool inImplicitCreationContext});
 }
 
 /// Checks that a generic [typedef] for a generic class.
-bool isProperRenameForClass(TypeEnvironment typeEnvironment, Typedef typedef) {
+bool isProperRenameForClass(
+    TypeEnvironment typeEnvironment, Typedef typedef, Library typedefLibrary) {
   DartType? rhsType = typedef.type;
   if (rhsType is! InterfaceType) {
     return false;
@@ -201,7 +241,7 @@
   for (int i = 0; i < fromParameters.length; ++i) {
     if (typeArguments[i] !=
         new TypeParameterType.withDefaultNullabilityForLibrary(
-            fromParameters[i], typedef.enclosingLibrary)) {
+            fromParameters[i], typedefLibrary)) {
       return false;
     }
   }
@@ -223,3 +263,12 @@
 
   return true;
 }
+
+enum UnresolvedKind {
+  Unknown,
+  Member,
+  Method,
+  Getter,
+  Setter,
+  Constructor,
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index fa8be39..12ba226 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -874,23 +874,28 @@
     setParents(declarations, this);
   }
 
+  @override
   R accept<R>(v) {
     throw unsupported("accept", fileOffset, uri);
   }
 
+  @override
   R accept1<R, A>(v, arg) {
     throw unsupported("accept1", fileOffset, uri);
   }
 
-  visitChildren(v) {
+  @override
+  Never visitChildren(v) {
     throw unsupported("visitChildren", fileOffset, uri);
   }
 
-  transformChildren(v) {
+  @override
+  Never transformChildren(v) {
     throw unsupported("transformChildren", fileOffset, uri);
   }
 
-  transformOrRemoveChildren(v) {
+  @override
+  Never transformOrRemoveChildren(v) {
     throw unsupported("transformOrRemoveChildren", fileOffset, uri);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
index af85f4c..c4f1db7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
@@ -48,7 +48,7 @@
   }
 
   @override
-  visitChildren(Visitor<dynamic> v) {
+  Never visitChildren(Visitor<dynamic> v) {
     unsupported("visitChildren", fieldBuilder.charOffset, fieldBuilder.fileUri);
   }
 
@@ -91,6 +91,7 @@
 }
 
 class _ImplicitFieldTypeRoot extends ImplicitFieldType {
+  @override
   final SourceFieldBuilder fieldBuilder;
   List<ImplicitFieldType>? _overriddenFields;
   Token? initializerToken;
@@ -98,10 +99,12 @@
 
   _ImplicitFieldTypeRoot(this.fieldBuilder, this.initializerToken) : super._();
 
+  @override
   DartType inferType() {
     return fieldBuilder.inferType();
   }
 
+  @override
   DartType computeType() {
     if (isStarted) {
       fieldBuilder.library.addProblem(
@@ -161,10 +164,12 @@
     return inferredType;
   }
 
+  @override
   void addOverride(ImplicitFieldType other) {
     (_overriddenFields ??= []).add(other);
   }
 
+  @override
   DartType checkInferred(DartType type) {
     if (_overriddenFields != null) {
       for (ImplicitFieldType overridden in _overriddenFields!) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
index 5582ac5..e30af66 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
@@ -37,7 +37,7 @@
   }
 
   @override
-  visitChildren(Visitor v) {
+  Never visitChildren(Visitor v) {
     unhandled("$runtimeType", "${v.runtimeType}", -1, null);
   }
 
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 e820080..3f1b27e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -119,7 +119,22 @@
   @override
   ExpressionInferenceResult visitDynamicGet(
       DynamicGet node, DartType typeContext) {
-    return _unhandledExpression(node, typeContext);
+    // The node has already been inferred, for instance as part of a for-in
+    // loop, so just compute the result type.
+    DartType resultType;
+    switch (node.kind) {
+      case DynamicAccessKind.Dynamic:
+        resultType = const DynamicType();
+        break;
+      case DynamicAccessKind.Never:
+        resultType = NeverType.fromNullability(inferrer.library.nonNullable);
+        break;
+      case DynamicAccessKind.Invalid:
+      case DynamicAccessKind.Unresolved:
+        resultType = const InvalidType();
+        break;
+    }
+    return new ExpressionInferenceResult(resultType, node);
   }
 
   @override
@@ -334,9 +349,13 @@
   @override
   ExpressionInferenceResult visitInvalidExpression(
       InvalidExpression node, DartType typeContext) {
-    // TODO(johnniwinther): The inferred type should be an InvalidType. Using
-    // BottomType leads to cascading errors so we use DynamicType for now.
-    return new ExpressionInferenceResult(const DynamicType(), node);
+    if (node.expression != null) {
+      ExpressionInferenceResult result = inferrer.inferExpression(
+          node.expression!, typeContext, !inferrer.isTopLevel,
+          isVoidAllowed: true);
+      node.expression = result.expression..parent = node;
+    }
+    return new ExpressionInferenceResult(const InvalidType(), node);
   }
 
   @override
@@ -384,7 +403,7 @@
           }
         }
       }
-    } else {
+    } else if (operandType is! InvalidType) {
       if (!inferrer.isTopLevel) {
         result = inferrer.helper!.buildProblem(
             templateInstantiationNonGenericFunctionType.withArguments(
@@ -884,6 +903,7 @@
     return const StatementInferenceResult();
   }
 
+  @override
   ExpressionInferenceResult visitDoubleLiteral(
       DoubleLiteral node, DartType typeContext) {
     return new ExpressionInferenceResult(
@@ -905,8 +925,8 @@
     return const StatementInferenceResult();
   }
 
-  ExpressionInferenceResult visitFactoryConstructorInvocationJudgment(
-      FactoryConstructorInvocationJudgment node, DartType typeContext) {
+  ExpressionInferenceResult visitFactoryConstructorInvocation(
+      FactoryConstructorInvocation node, DartType typeContext) {
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
 
     FunctionType functionType = node.target.function
@@ -935,8 +955,8 @@
         result.inferredType, result.applyResult(resultNode));
   }
 
-  ExpressionInferenceResult visitTypeAliasedConstructorInvocationJudgment(
-      TypeAliasedConstructorInvocationJudgment node, DartType typeContext) {
+  ExpressionInferenceResult visitTypeAliasedConstructorInvocation(
+      TypeAliasedConstructorInvocation node, DartType typeContext) {
     assert(getExplicitTypeArguments(node.arguments) == null);
     Typedef typedef = node.typeAliasBuilder.typedef;
     FunctionType calleeType = node.target.function
@@ -960,8 +980,8 @@
         result.inferredType, result.applyResult(resultNode));
   }
 
-  ExpressionInferenceResult visitTypeAliasedFactoryInvocationJudgment(
-      TypeAliasedFactoryInvocationJudgment node, DartType typeContext) {
+  ExpressionInferenceResult visitTypeAliasedFactoryInvocation(
+      TypeAliasedFactoryInvocation node, DartType typeContext) {
     assert(getExplicitTypeArguments(node.arguments) == null);
     Typedef typedef = node.typeAliasBuilder.typedef;
     FunctionType calleeType = node.target.function
@@ -4768,10 +4788,13 @@
             !isThisReceiver) {
           Member interfaceMember = readTarget.member!;
           if (interfaceMember is Procedure) {
+            DartType typeToCheck = inferrer.isNonNullableByDefault
+                ? interfaceMember.function
+                    .computeFunctionType(inferrer.library.nonNullable)
+                : interfaceMember.function.returnType;
             checkReturn =
                 TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
-                    interfaceMember.enclosingClass!,
-                    interfaceMember.function.returnType);
+                    interfaceMember.enclosingClass!, typeToCheck);
           } else if (interfaceMember is Field) {
             checkReturn =
                 TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
@@ -6224,6 +6247,7 @@
     return new ExpressionInferenceResult(inferredType, node);
   }
 
+  @override
   ExpressionInferenceResult visitThisExpression(
       ThisExpression node, DartType typeContext) {
     inferrer.flowAnalysis.thisOrSuper(node, inferrer.thisType!);
@@ -6321,6 +6345,13 @@
       TypeLiteral node, DartType typeContext) {
     DartType inferredType =
         inferrer.coreTypes.typeRawType(inferrer.library.nonNullable);
+    if (inferrer.library.enableConstructorTearOffsInLibrary) {
+      inferrer.library.checkBoundsInType(
+          node.type,
+          inferrer.typeSchemaEnvironment,
+          inferrer.library.fileUri,
+          node.fileOffset);
+    }
     return new ExpressionInferenceResult(inferredType, node);
   }
 
@@ -6436,20 +6467,15 @@
     }
     if (initializerResult != null) {
       DartType initializerType = initializerResult.inferredType;
-      if (node.isImplicitlyTyped) {
-        if (inferrer.isNonNullableByDefault &&
-            initializerType is TypeParameterType) {
-          inferrer.flowAnalysis.promote(node, initializerType);
-        }
-      } else {
-        // TODO(paulberry): `initializerType` is sometimes `null` during top
-        // level inference.  Figure out how to prevent this.
-        // ignore: unnecessary_null_comparison
-        if (initializerType != null) {
-          inferrer.flowAnalysis.initialize(
-              node, initializerType, initializerResult.expression,
-              isFinal: node.isFinal, isLate: node.isLate);
-        }
+      // TODO(paulberry): `initializerType` is sometimes `null` during top
+      // level inference.  Figure out how to prevent this.
+      // ignore: unnecessary_null_comparison
+      if (initializerType != null) {
+        inferrer.flowAnalysis.initialize(
+            node, initializerType, initializerResult.expression,
+            isFinal: node.isFinal,
+            isLate: node.isLate,
+            isImplicitlyTyped: node.isImplicitlyTyped);
       }
       Expression initializer = inferrer.ensureAssignableResult(
           node.type, initializerResult,
@@ -6924,6 +6950,7 @@
   ForInResult(this.variable, this.iterable, this.syntheticAssignment,
       this.expressionSideEffects);
 
+  @override
   String toString() => 'ForInResult($variable,$iterable,'
       '$syntheticAssignment,$expressionSideEffects)';
 }
@@ -6942,6 +6969,7 @@
 
   LocalForInVariable(this.variableSet);
 
+  @override
   DartType computeElementType(TypeInferrerImpl inferrer) {
     VariableDeclaration variable = variableSet.variable;
     DartType? promotedType;
@@ -6951,6 +6979,7 @@
     return promotedType ?? variable.type;
   }
 
+  @override
   Expression inferAssignment(TypeInferrerImpl inferrer, DartType rhsType) {
     DartType variableType =
         inferrer.computeGreatestClosure(variableSet.variable.type);
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 9364065..3a1de7d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -87,12 +87,14 @@
 class AllInferredTypeArgumentsInfo extends TypeArgumentsInfo {
   const AllInferredTypeArgumentsInfo();
 
+  @override
   bool isInferred(int index) => true;
 }
 
 class NoneInferredTypeArgumentsInfo extends TypeArgumentsInfo {
   const NoneInferredTypeArgumentsInfo();
 
+  @override
   bool isInferred(int index) => false;
 }
 
@@ -101,6 +103,7 @@
 
   ExtensionMethodTypeArgumentsInfo(this.arguments);
 
+  @override
   bool isInferred(int index) {
     if (index < arguments._extensionTypeParameterCount) {
       // The index refers to a type argument for a type parameter declared on
@@ -114,6 +117,7 @@
         arguments._explicitTypeArgumentCount;
   }
 
+  @override
   int getOffsetForIndex(int index, int offset) {
     if (index < arguments._extensionTypeParameterCount) {
       return arguments._extensionTypeArgumentOffset ?? offset;
@@ -487,6 +491,21 @@
 
   int _explicitTypeArgumentCount;
 
+  ArgumentsImpl.internal(
+      {required List<Expression> positional,
+      required List<DartType>? types,
+      required List<NamedExpression>? named,
+      required int extensionTypeParameterCount,
+      required int explicitExtensionTypeArgumentCount,
+      required int? extensionTypeArgumentOffset,
+      required int explicitTypeArgumentCount})
+      : this._extensionTypeParameterCount = extensionTypeParameterCount,
+        this._explicitExtensionTypeArgumentCount =
+            explicitExtensionTypeArgumentCount,
+        this._extensionTypeArgumentOffset = extensionTypeArgumentOffset,
+        this._explicitTypeArgumentCount = explicitTypeArgumentCount,
+        super(positional, types: types, named: named);
+
   ArgumentsImpl(List<Expression> positional,
       {List<DartType>? types, List<NamedExpression>? named})
       : _explicitTypeArgumentCount = types?.length ?? 0,
@@ -519,6 +538,19 @@
               ..addAll(
                   _normalizeTypeArguments(typeParameterCount, typeArguments)));
 
+  static ArgumentsImpl clone(ArgumentsImpl node, List<Expression> positional,
+      List<NamedExpression> named, List<DartType> types) {
+    return new ArgumentsImpl.internal(
+        positional: positional,
+        named: named,
+        types: types,
+        extensionTypeParameterCount: node._extensionTypeParameterCount,
+        explicitExtensionTypeArgumentCount:
+            node._explicitExtensionTypeArgumentCount,
+        explicitTypeArgumentCount: node._explicitTypeArgumentCount,
+        extensionTypeArgumentOffset: node._extensionTypeArgumentOffset);
+  }
+
   static List<DartType> _normalizeTypeArguments(
       int length, List<DartType> arguments) {
     if (arguments.isEmpty && length > 0) {
@@ -668,6 +700,7 @@
     return visitor.visitDeferredCheck(this, typeContext);
   }
 
+  @override
   InternalExpressionKind get kind => InternalExpressionKind.DeferredCheck;
 
   @override
@@ -729,23 +762,23 @@
 
 /// Shadow object for [StaticInvocation] when the procedure being invoked is a
 /// factory constructor.
-class FactoryConstructorInvocationJudgment extends StaticInvocation
+class FactoryConstructorInvocation extends StaticInvocation
     implements ExpressionJudgment {
   bool hasBeenInferred = false;
 
-  FactoryConstructorInvocationJudgment(Procedure target, Arguments arguments,
+  FactoryConstructorInvocation(Procedure target, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   @override
   ExpressionInferenceResult acceptInference(
       InferenceVisitor visitor, DartType typeContext) {
-    return visitor.visitFactoryConstructorInvocationJudgment(this, typeContext);
+    return visitor.visitFactoryConstructorInvocation(this, typeContext);
   }
 
   @override
   String toString() {
-    return "FactoryConstructorInvocationJudgment(${toStringInternal()})";
+    return "FactoryConstructorInvocation(${toStringInternal()})";
   }
 
   @override
@@ -767,12 +800,12 @@
 
 /// Shadow object for [ConstructorInvocation] when the procedure being invoked
 /// is a type aliased constructor.
-class TypeAliasedConstructorInvocationJudgment extends ConstructorInvocation
+class TypeAliasedConstructorInvocation extends ConstructorInvocation
     implements ExpressionJudgment {
   bool hasBeenInferred = false;
   final TypeAliasBuilder typeAliasBuilder;
 
-  TypeAliasedConstructorInvocationJudgment(
+  TypeAliasedConstructorInvocation(
       this.typeAliasBuilder, Constructor target, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
@@ -780,13 +813,12 @@
   @override
   ExpressionInferenceResult acceptInference(
       InferenceVisitor visitor, DartType typeContext) {
-    return visitor.visitTypeAliasedConstructorInvocationJudgment(
-        this, typeContext);
+    return visitor.visitTypeAliasedConstructorInvocation(this, typeContext);
   }
 
   @override
   String toString() {
-    return "TypeAliasedConstructorInvocationJudgment(${toStringInternal()})";
+    return "TypeAliasedConstructorInvocation(${toStringInternal()})";
   }
 
   @override
@@ -797,12 +829,12 @@
 
 /// Shadow object for [StaticInvocation] when the procedure being invoked is a
 /// type aliased factory constructor.
-class TypeAliasedFactoryInvocationJudgment extends StaticInvocation
+class TypeAliasedFactoryInvocation extends StaticInvocation
     implements ExpressionJudgment {
   bool hasBeenInferred = false;
   final TypeAliasBuilder typeAliasBuilder;
 
-  TypeAliasedFactoryInvocationJudgment(
+  TypeAliasedFactoryInvocation(
       this.typeAliasBuilder, Procedure target, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
@@ -810,12 +842,12 @@
   @override
   ExpressionInferenceResult acceptInference(
       InferenceVisitor visitor, DartType typeContext) {
-    return visitor.visitTypeAliasedFactoryInvocationJudgment(this, typeContext);
+    return visitor.visitTypeAliasedFactoryInvocation(this, typeContext);
   }
 
   @override
   String toString() {
-    return "TypeAliasedConstructorInvocationJudgment(${toStringInternal()})";
+    return "TypeAliasedConstructorInvocation(${toStringInternal()})";
   }
 
   @override
@@ -1005,6 +1037,7 @@
 
 class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment {
   final String literal;
+  @override
   final int fileOffset;
   bool isParenthesized = false;
 
@@ -2547,6 +2580,14 @@
   String toString() {
     return "IndexGet(${toStringInternal()})";
   }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.writeExpression(receiver);
+    printer.write('[');
+    printer.writeExpression(index);
+    printer.write(']');
+  }
 }
 
 /// Internal expression representing an index set expression.
@@ -2646,6 +2687,15 @@
   String toString() {
     return "IndexSet(${toStringInternal()})";
   }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.writeExpression(receiver);
+    printer.write('[');
+    printer.writeExpression(index);
+    printer.write('] = ');
+    printer.writeExpression(value);
+  }
 }
 
 /// Internal expression representing a  super index set expression.
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 7c62ddb..c82741e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -83,7 +83,7 @@
         ArgumentsImpl,
         Cascade,
         DeferredCheck,
-        FactoryConstructorInvocationJudgment,
+        FactoryConstructorInvocation,
         FunctionDeclarationImpl,
         InvalidSuperInitializerJudgment,
         LoadLibraryTearOff,
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 d0033fa..a7da5cc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
@@ -4,8 +4,6 @@
 
 library fasta.kernel_constants;
 
-import 'package:kernel/ast.dart' show InvalidExpression;
-
 import '../builder/library_builder.dart';
 
 import '../fasta_codes.dart' show LocatedMessage;
@@ -20,7 +18,7 @@
   KernelConstantErrorReporter(this.loader);
 
   @override
-  void report(LocatedMessage message, List<LocatedMessage>? context) {
+  void report(LocatedMessage message, [List<LocatedMessage>? context]) {
     // Try to find library.
     LibraryBuilder? builder = loader.builders[message.uri];
     if (builder == null) {
@@ -35,7 +33,7 @@
     if (builder == null) {
       // TODO(jensj): Probably a part or something.
       loader.addProblem(message.messageObject, message.charOffset,
-          message.length, message.uri!,
+          message.length, message.uri,
           context: context);
     } else {
       builder.addProblem(message.messageObject, message.charOffset,
@@ -43,20 +41,4 @@
           context: context);
     }
   }
-
-  @override
-  void reportInvalidExpression(InvalidExpression node) {
-    // TODO(johnniwinther): Improve the precision of this assertion. Do we
-    // for instance allow warnings only to have been reported in previous
-    // compilations.
-    assert(
-        // Either we have already reported an error
-        loader.hasSeenError ||
-            // or we have reported an error in a previous compilation.
-            loader.builders.values.any((builder) =>
-                builder.library.problemsAsJson?.isNotEmpty ?? false),
-        "No error reported before seeing: "
-        "${node.message}");
-    // Assumed to be already reported.
-  }
 }
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 71176e5..bb99b32 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -59,32 +59,54 @@
 
     // For mixin application constructors, the argument count is the same, but
     // for redirecting tear off lowerings, the argument count of the tear off
-    // can be less than that of the redirection target.
-
-    assert(_synthesized.positionalParameters.length <=
-        _original.positionalParameters.length);
-    for (int i = 0; i < _synthesized.positionalParameters.length; i++) {
-      cloneInitializer(_original.positionalParameters[i],
-          _synthesized.positionalParameters[i]);
-    }
+    // can be less than that of the redirection target or, in errors cases, be
+    // unrelated.
 
     if (identicalSignatures) {
+      assert(_synthesized.positionalParameters.length ==
+          _original.positionalParameters.length);
+      for (int i = 0; i < _synthesized.positionalParameters.length; i++) {
+        cloneInitializer(_original.positionalParameters[i],
+            _synthesized.positionalParameters[i]);
+      }
       assert(_synthesized.namedParameters.length ==
           _original.namedParameters.length);
       for (int i = 0; i < _synthesized.namedParameters.length; i++) {
         cloneInitializer(
             _original.namedParameters[i], _synthesized.namedParameters[i]);
       }
-    } else if (_synthesized.namedParameters.isNotEmpty) {
-      Map<String, VariableDeclaration> originalParameters = {};
-      for (int i = 0; i < _original.namedParameters.length; i++) {
-        originalParameters[_original.namedParameters[i].name!] =
-            _original.namedParameters[i];
+    } else {
+      for (int i = 0; i < _synthesized.positionalParameters.length; i++) {
+        VariableDeclaration synthesizedParameter =
+            _synthesized.positionalParameters[i];
+        if (i < _original.positionalParameters.length) {
+          cloneInitializer(
+              _original.positionalParameters[i], synthesizedParameter);
+        } else {
+          // Error case: use `null` as initializer.
+          synthesizedParameter.initializer = new NullLiteral()
+            ..parent = synthesizedParameter;
+        }
       }
-      for (int i = 0; i < _synthesized.namedParameters.length; i++) {
-        cloneInitializer(
-            originalParameters[_synthesized.namedParameters[i].name!]!,
-            _synthesized.namedParameters[i]);
+      if (_synthesized.namedParameters.isNotEmpty) {
+        Map<String, VariableDeclaration> originalParameters = {};
+        for (int i = 0; i < _original.namedParameters.length; i++) {
+          originalParameters[_original.namedParameters[i].name!] =
+              _original.namedParameters[i];
+        }
+        for (int i = 0; i < _synthesized.namedParameters.length; i++) {
+          VariableDeclaration synthesizedParameter =
+              _synthesized.namedParameters[i];
+          VariableDeclaration? originalParameter =
+              originalParameters[synthesizedParameter.name!];
+          if (originalParameter != null) {
+            cloneInitializer(originalParameter, synthesizedParameter);
+          } else {
+            // Error case: use `null` as initializer.
+            synthesizedParameter.initializer = new NullLiteral()
+              ..parent = synthesizedParameter;
+          }
+        }
       }
     }
   }
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 93fb9a8..64ce17a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -152,6 +152,7 @@
   SourceLoader createLoader() =>
       new SourceLoader(fileSystem, includeComments, this);
 
+  @override
   void addSourceInformation(
       Uri importUri, Uri fileUri, List<int> lineStarts, List<int> sourceCode) {
     uriToSource[fileUri] =
@@ -289,6 +290,7 @@
     return result;
   }
 
+  @override
   void breakCycle(ClassBuilder builder) {
     Class cls = builder.cls;
     cls.implementedTypes.clear();
@@ -1380,6 +1382,7 @@
     }
   }
 
+  @override
   void releaseAncillaryResources() {
     component = null;
   }
@@ -1408,6 +1411,7 @@
 
   KernelDiagnosticReporter(this.loader);
 
+  @override
   void report(Message message, int charOffset, int length, Uri? fileUri,
       {List<LocatedMessage>? context}) {
     loader.addProblem(message, charOffset, noLength, fileUri, context: context);
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 0c76efe..7199ba7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -25,11 +25,13 @@
 
 /// Builder to represent the `deferLibrary.loadLibrary` calls and tear-offs.
 class LoadLibraryBuilder extends BuilderImpl {
+  @override
   final SourceLibraryBuilder parent;
 
   final LibraryDependency importDependency;
 
   /// Offset of the import prefix.
+  @override
   final int charOffset;
 
   /// Synthetic static method to represent the tear-off of 'loadLibrary'.  If
@@ -38,6 +40,7 @@
 
   LoadLibraryBuilder(this.parent, this.importDependency, this.charOffset);
 
+  @override
   Uri get fileUri => parent.fileUri;
 
   LoadLibrary createLoadLibrary(
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 4f63d8b..3697827 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
@@ -31,48 +31,63 @@
 /// the redirection target in a factory method body.
 const String varNamePrefix = "#typeArg";
 
-class RedirectingFactoryBody extends ExpressionStatement {
-  RedirectingFactoryBody.internal(Expression value,
-      [List<DartType>? typeArguments])
-      : super(new Let(new VariableDeclaration(letName, initializer: value),
-            encodeTypeArguments(typeArguments)));
+class RedirectingFactoryBody extends ReturnStatement {
+  RedirectingFactoryBody._internal(Expression value) : super(value);
 
-  RedirectingFactoryBody(Member target, [List<DartType>? typeArguments])
-      : this.internal(new StaticGet(target), typeArguments);
+  RedirectingFactoryBody(
+      Member target, List<DartType> typeArguments, FunctionNode function)
+      : this._internal(_makeForwardingCall(target, typeArguments, function));
 
-  RedirectingFactoryBody.unresolved(String name)
-      : this.internal(new StringLiteral(name));
+  RedirectingFactoryBody.error(String errorMessage)
+      : this._internal(new InvalidExpression(errorMessage));
 
   Member? get target {
-    dynamic value = getValue(expression);
-    return value is StaticGet ? value.target : null;
+    final Expression? value = this.expression;
+    if (value is StaticInvocation) {
+      return value.target;
+    } else if (value is ConstructorInvocation) {
+      return value.target;
+    }
+    return null;
   }
 
-  String? get unresolvedName {
-    dynamic value = getValue(expression);
-    return value is StringLiteral ? value.value : null;
+  String? get errorMessage {
+    final Expression? value = this.expression;
+    return value is InvalidExpression ? value.message : null;
   }
 
-  bool get isUnresolved => unresolvedName != null;
+  bool get isError => errorMessage != null;
 
   List<DartType>? get typeArguments {
-    if (expression is Let) {
-      Let bodyExpression = expression as Let;
-      if (bodyExpression.variable.name == letName) {
-        return decodeTypeArguments(bodyExpression.body);
-      }
+    final Expression? value = this.expression;
+    if (value is InvocationExpression) {
+      return value.arguments.types;
     }
     return null;
   }
 
-  static getValue(Expression expression) {
-    if (expression is Let) {
-      VariableDeclaration variable = expression.variable;
-      if (variable.name == letName) {
-        return variable.initializer;
-      }
+  static Expression _makeForwardingCall(
+      Member target, List<DartType> typeArguments, FunctionNode function) {
+    final List<Expression> positional = function.positionalParameters
+        .map((v) => new VariableGet(v)..fileOffset = v.fileOffset)
+        .toList();
+    final List<NamedExpression> named = function.namedParameters
+        .map((v) => new NamedExpression(
+            v.name!, new VariableGet(v)..fileOffset = v.fileOffset)
+          ..fileOffset = v.fileOffset)
+        .toList();
+    final Arguments args =
+        new Arguments(positional, named: named, types: typeArguments);
+    if (target is Procedure) {
+      return new StaticInvocation(target, args)
+        ..fileOffset = function.fileOffset;
+    } else if (target is Constructor) {
+      return new ConstructorInvocation(target, args)
+        ..fileOffset = function.fileOffset;
+    } else {
+      throw 'Unexpected target for redirecting factory:'
+          ' ${target.runtimeType} $target';
     }
-    return null;
   }
 
   static void restoreFromDill(Procedure factory) {
@@ -80,41 +95,51 @@
     // dill files. See `ClassBuilder.addRedirectingConstructor` in
     // [kernel_class_builder.dart](kernel_class_builder.dart).
     FunctionNode function = factory.function;
-    ExpressionStatement statement = function.body as ExpressionStatement;
-    List<DartType>? typeArguments;
-    if (statement.expression is Let) {
-      Let expression = statement.expression as Let;
-      typeArguments = decodeTypeArguments(expression.body);
-    }
-    function.body = new RedirectingFactoryBody.internal(
-        getValue(statement.expression), typeArguments)
+    Expression value = (function.body as ReturnStatement).expression!;
+    function.body = new RedirectingFactoryBody._internal(value)
       ..parent = function;
   }
 
   static bool hasRedirectingFactoryBodyShape(Procedure factory) {
-    if (factory.function.body is! ExpressionStatement) return false;
-    Expression body = (factory.function.body as ExpressionStatement).expression;
-    if (body is Let &&
-        body.variable.name == letName &&
-        body.variable.type is DynamicType &&
-        body.variable.initializer is StaticGet) {
-      Expression currentArgument = body.body;
-      int argumentCount = 0;
-      while (currentArgument is! InvalidExpression) {
-        Expression argument = currentArgument;
-        if (argument is Let) {
-          String argumentName = "${varNamePrefix}${argumentCount}";
-          if (argument.variable.name != argumentName) {
-            return false;
-          }
-          if (argument.variable.initializer is! NullLiteral) {
-            return false;
-          }
-          currentArgument = argument.body;
-          ++argumentCount;
-        } else {
+    final FunctionNode function = factory.function;
+    final Statement? body = function.body;
+    if (body is! ReturnStatement) return false;
+    final Expression? value = body.expression;
+    if (body is InvalidExpression) {
+      return true;
+    } else if (value is StaticInvocation || value is ConstructorInvocation) {
+      // Verify that invocation forwards all arguments.
+      final Arguments args = (value as InvocationExpression).arguments;
+      if (args.positional.length != function.positionalParameters.length) {
+        return false;
+      }
+      int i = 0;
+      for (Expression arg in args.positional) {
+        if (arg is! VariableGet) {
           return false;
         }
+        if (arg.variable != function.positionalParameters[i]) {
+          return false;
+        }
+        ++i;
+      }
+      if (args.named.length != function.namedParameters.length) {
+        return false;
+      }
+      i = 0;
+      for (NamedExpression arg in args.named) {
+        final Expression value = arg.value;
+        if (value is! VariableGet) {
+          return false;
+        }
+        final VariableDeclaration param = function.namedParameters[i];
+        if (value.variable != param) {
+          return false;
+        }
+        if (arg.name != param.name) {
+          return false;
+        }
+        ++i;
       }
       return true;
     } else {
@@ -122,33 +147,6 @@
     }
   }
 
-  static Expression encodeTypeArguments(List<DartType>? typeArguments) {
-    Expression result = new InvalidExpression(null);
-    if (typeArguments == null) {
-      return result;
-    }
-    for (int i = typeArguments.length - 1; i >= 0; i--) {
-      result = new Let(
-          new VariableDeclaration("$varNamePrefix$i",
-              type: typeArguments[i], initializer: new NullLiteral()),
-          result);
-    }
-    return result;
-  }
-
-  static List<DartType>? decodeTypeArguments(Expression encoded) {
-    if (encoded is InvalidExpression) {
-      return null;
-    }
-    List<DartType> result = <DartType>[];
-    while (encoded is Let) {
-      Let head = encoded;
-      result.add(head.variable.type);
-      encoded = head.body;
-    }
-    return result;
-  }
-
   @override
   String toString() {
     return "RedirectingFactoryBody(${toStringInternal()})";
@@ -178,31 +176,27 @@
   RedirectionTarget(this.target, this.typeArguments);
 }
 
-RedirectionTarget? getRedirectionTarget(Procedure member, EnsureLoaded helper) {
+RedirectionTarget getRedirectionTarget(Procedure factory, EnsureLoaded helper) {
   List<DartType> typeArguments = new List<DartType>.generate(
-      member.function.typeParameters.length, (int i) {
+      factory.function.typeParameters.length, (int i) {
     return new TypeParameterType.withDefaultNullabilityForLibrary(
-        member.function.typeParameters[i], member.enclosingLibrary);
+        factory.function.typeParameters[i], factory.enclosingLibrary);
   }, growable: true);
 
-  // We use the [tortoise and hare algorithm]
-  // (https://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare) to
-  // handle cycles.
-  Member tortoise = member;
-  RedirectingFactoryBody? tortoiseBody = getRedirectingFactoryBody(tortoise);
-  Member? hare = tortoiseBody?.target;
-  helper.ensureLoaded(hare);
-  RedirectingFactoryBody? hareBody = getRedirectingFactoryBody(hare);
-  while (tortoise != hare) {
-    if (tortoiseBody?.isUnresolved ?? true) {
-      return new RedirectionTarget(tortoise, typeArguments);
+  // Cyclic factories are detected earlier, so we're guaranteed to
+  // reach either a non-redirecting factory or an error eventually.
+  Member target = factory;
+  for (;;) {
+    RedirectingFactoryBody? body = getRedirectingFactoryBody(target);
+    if (body == null || body.isError) {
+      return new RedirectionTarget(target, typeArguments);
     }
-    Member nextTortoise = tortoiseBody!.target!;
-    helper.ensureLoaded(nextTortoise);
-    List<DartType>? nextTypeArguments = tortoiseBody.typeArguments;
+    Member nextMember = body.target!;
+    helper.ensureLoaded(nextMember);
+    List<DartType>? nextTypeArguments = body.typeArguments;
     if (nextTypeArguments != null) {
       Substitution sub = Substitution.fromPairs(
-          tortoise.function!.typeParameters, typeArguments);
+          target.function!.typeParameters, typeArguments);
       typeArguments =
           new List<DartType>.generate(nextTypeArguments.length, (int i) {
         return sub.substituteType(nextTypeArguments[i]);
@@ -210,13 +204,6 @@
     } else {
       typeArguments = <DartType>[];
     }
-
-    tortoise = nextTortoise;
-    tortoiseBody = getRedirectingFactoryBody(tortoise);
-    helper.ensureLoaded(hareBody?.target);
-    hare = getRedirectingFactoryBody(hareBody?.target)?.target;
-    helper.ensureLoaded(hare);
-    hareBody = getRedirectingFactoryBody(hare);
+    target = nextMember;
   }
-  return null;
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
index 4cab9fe..2c1e357 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
@@ -47,6 +47,7 @@
     _addMethodFunctionType = addMethod.getterType as FunctionType;
   }
 
+  @override
   TreeNode visitSetLiteral(SetLiteral node) {
     if (node.isConst) return node;
 
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 46c52c1..608b28e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -438,6 +438,7 @@
 /// Type variables are represented by their indices in the corresponding
 /// declaration.
 class TypeVariablesGraph implements Graph<int> {
+  @override
   late List<int> vertices;
   List<TypeVariableBuilder> variables;
   List<TypeBuilder> bounds;
@@ -491,6 +492,7 @@
 
   /// Returns indices of type variables that depend on the type variable with
   /// [index].
+  @override
   Iterable<int> neighborsOf(int index) {
     return edges[index];
   }
@@ -1095,6 +1097,7 @@
 class TypeVariableSearch implements DartTypeVisitor<bool> {
   const TypeVariableSearch();
 
+  @override
   bool defaultDartType(DartType node) => throw "unsupported";
 
   bool anyTypeVariables(List<DartType> types) {
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 7f6631d..550c2d2 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
@@ -41,20 +41,14 @@
   @override
   TypeBuilder visitInvalidType(InvalidType node) {
     return new FixedTypeBuilder(
-        node,
-        /* fileUri = */ null,
-        /* charOffset = */ null);
+        node, /* fileUri = */ null, /* charOffset = */ null);
   }
 
   @override
   TypeBuilder visitDynamicType(DynamicType node) {
     // 'dynamic' is always nullable.
-    return new NamedTypeBuilder(
-        "dynamic",
-        const NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("dynamic", const NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new DynamicTypeDeclarationBuilder(
           const DynamicType(), loader.coreLibrary, -1));
   }
@@ -62,12 +56,8 @@
   @override
   TypeBuilder visitVoidType(VoidType node) {
     // 'void' is always nullable.
-    return new NamedTypeBuilder(
-        "void",
-        const NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("void", const NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new VoidTypeDeclarationBuilder(
           const VoidType(), loader.coreLibrary, -1));
   }
@@ -85,12 +75,8 @@
 
   @override
   TypeBuilder visitNullType(NullType node) {
-    return new NamedTypeBuilder(
-        "Null",
-        new NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("Null", new NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new NullTypeDeclarationBuilder(node, loader.coreLibrary, -1));
   }
 
@@ -179,6 +165,7 @@
         /* charOffset = */ TreeNode.noOffset);
   }
 
+  @override
   TypeBuilder visitTypeParameterType(TypeParameterType node) {
     TypeParameter parameter = node.parameter;
     TreeNode? kernelClassOrTypeDef = parameter.parent;
@@ -198,6 +185,7 @@
       ..bind(new TypeVariableBuilder.fromKernel(parameter, library));
   }
 
+  @override
   TypeBuilder visitTypedefType(TypedefType node) {
     throw "Not implemented";
   }
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 8a23b53..57d4f7c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -105,8 +105,10 @@
     }
   }
 
+  @override
   void defaultDartType(DartType type) {}
 
+  @override
   void visitTypedefType(TypedefType node) {
     Typedef typedefNode = node.typedefNode;
     result.add(nameForEntity(
@@ -127,28 +129,34 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitInvalidType(InvalidType node) {
     // TODO(askesc): Throw internal error if InvalidType appears in diagnostics.
     result.add("invalid-type");
   }
 
+  @override
   void visitNeverType(NeverType node) {
     result.add("Never");
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitNullType(NullType node) {
     result.add("Null");
   }
 
+  @override
   void visitDynamicType(DynamicType node) {
     result.add("dynamic");
   }
 
+  @override
   void visitVoidType(VoidType node) {
     result.add("void");
   }
 
+  @override
   void visitTypeParameterType(TypeParameterType node) {
     TreeNode? parent = node.parameter;
     while (parent is! Library && parent != null) {
@@ -166,6 +174,7 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitFunctionType(FunctionType node) {
     node.returnType.accept(this);
     result.add(" Function");
@@ -221,6 +230,7 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitInterfaceType(InterfaceType node) {
     Class classNode = node.classNode;
     // TODO(johnniwinther): Ensure enclosing libraries on classes earlier
@@ -244,6 +254,7 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitFutureOrType(FutureOrType node) {
     result.add("FutureOr<");
     node.typeArgument.accept(this);
@@ -251,6 +262,7 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitExtensionType(ExtensionType node) {
     // TODO(johnniwinther): Ensure enclosing libraries on extensions earlier
     // in the compiler to ensure types in error messages have context.
@@ -273,24 +285,30 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void defaultConstant(Constant node) {}
 
+  @override
   void visitNullConstant(NullConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitBoolConstant(BoolConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitIntConstant(IntConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitDoubleConstant(DoubleConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitSymbolConstant(SymbolConstant node) {
     String text = node.libraryReference != null
         ? '#${node.libraryReference!.asLibrary.importUri}::${node.name}'
@@ -298,10 +316,12 @@
     result.add(text);
   }
 
+  @override
   void visitStringConstant(StringConstant node) {
     result.add(json.encode(node.value));
   }
 
+  @override
   void visitInstanceConstant(InstanceConstant node) {
     new InterfaceType(node.classNode, Nullability.legacy, node.typeArguments)
         .accept(this);
@@ -317,6 +337,7 @@
     result.add("}");
   }
 
+  @override
   void visitListConstant(ListConstant node) {
     result.add("<");
     node.typeArgument.accept(this);
@@ -330,6 +351,7 @@
     result.add("]");
   }
 
+  @override
   void visitSetConstant(SetConstant node) {
     result.add("<");
     node.typeArgument.accept(this);
@@ -343,6 +365,7 @@
     result.add("}");
   }
 
+  @override
   void visitMapConstant(MapConstant node) {
     result.add("<");
     node.keyType.accept(this);
@@ -360,6 +383,7 @@
     result.add("}");
   }
 
+  @override
   void visitStaticTearOffConstant(StaticTearOffConstant node) {
     Procedure procedure = node.target;
     Class? classNode = procedure.enclosingClass;
@@ -374,6 +398,7 @@
     result.add(procedure.name.text);
   }
 
+  @override
   void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     Member constructor = node.target;
     Class classNode = constructor.enclosingClass!;
@@ -386,6 +411,7 @@
     result.add(constructor.name.text);
   }
 
+  @override
   void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     Member constructor = node.target;
@@ -399,6 +425,7 @@
     result.add(constructor.name.text);
   }
 
+  @override
   void visitInstantiationConstant(InstantiationConstant node) {
     node.tearOffConstant.accept(this);
     if (node.types.isNotEmpty) {
@@ -413,6 +440,7 @@
     }
   }
 
+  @override
   void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     node.tearOffConstant.accept(this);
     if (node.parameters.isNotEmpty) {
@@ -443,10 +471,12 @@
     }
   }
 
+  @override
   void visitTypeLiteralConstant(TypeLiteralConstant node) {
     node.type.accept(this);
   }
 
+  @override
   void visitUnevaluatedConstant(UnevaluatedConstant node) {
     unsupported('printing unevaluated constants', -1, null);
   }
@@ -464,6 +494,7 @@
   LabeledNode(
       this.node, this.name, this.importUri, this.fileUri, this.typeLabeler);
 
+  @override
   String toString() {
     List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
     if (entityForName.length == 1) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index a077ad7..f1f909e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -152,10 +152,12 @@
 class ByteSink implements Sink<List<int>> {
   final BytesBuilder builder = new BytesBuilder();
 
+  @override
   void add(List<int> data) {
     builder.add(data);
   }
 
+  @override
   void close() {}
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 7c313ec..efc9de8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -29,10 +29,7 @@
 import '../type_inference/type_schema.dart' show UnknownType;
 
 import 'redirecting_factory_body.dart'
-    show
-        RedirectingFactoryBody,
-        getRedirectingFactoryBody,
-        isRedirectingFactory;
+    show RedirectingFactoryBody, isRedirectingFactory;
 
 List<LocatedMessage> verifyComponent(Component component, Target target,
     {bool? isOutline, bool? afterConst, bool skipPlatform: false}) {
@@ -182,7 +179,7 @@
   }
 
   @override
-  problem(TreeNode? node, String details,
+  void problem(TreeNode? node, String details,
       {TreeNode? context, TreeNode? origin}) {
     node ??= (context ?? currentClassOrExtensionOrMember);
     int offset = node?.fileOffset ?? -1;
@@ -284,13 +281,11 @@
     bool hasBody = isRedirectingFactory(node) ||
         RedirectingFactoryBody.hasRedirectingFactoryBodyShape(node);
     bool hasFlag = node.isRedirectingFactory;
-    if (hasBody != hasFlag) {
-      String hasBodyString = hasBody ? "has" : "doesn't have";
-      String hasFlagString = hasFlag ? "has" : "doesn't have";
+    if (hasFlag && !hasBody) {
       problem(
           node,
-          "Procedure '${node.name}' ${hasBodyString} a body "
-          "of a redirecting factory, but ${hasFlagString} the "
+          "Procedure '${node.name}' doesn't have a body "
+          "of a redirecting factory, but has the "
           "'isRedirectingFactory' bit set.");
     }
 
@@ -429,10 +424,6 @@
   void visitStaticInvocation(StaticInvocation node) {
     enterTreeNode(node);
     super.visitStaticInvocation(node);
-    RedirectingFactoryBody? body = getRedirectingFactoryBody(node.target);
-    if (body != null) {
-      problem(node, "Attempt to invoke redirecting factory.");
-    }
     exitTreeNode(node);
   }
 
@@ -455,7 +446,7 @@
   FastaVerifyGetStaticType(TypeEnvironment env, this.skipPlatform) : super(env);
 
   @override
-  visitLibrary(Library node) {
+  void visitLibrary(Library node) {
     // 'dart:test' is used in the unit tests and isn't an actual part of the
     // platform.
     if (skipPlatform &&
diff --git a/pkg/front_end/lib/src/fasta/library_graph.dart b/pkg/front_end/lib/src/fasta/library_graph.dart
index bc01000..95a3627 100644
--- a/pkg/front_end/lib/src/fasta/library_graph.dart
+++ b/pkg/front_end/lib/src/fasta/library_graph.dart
@@ -16,8 +16,10 @@
 
   LibraryGraph(this.libraries);
 
+  @override
   Iterable<Uri> get vertices => libraries.keys;
 
+  @override
   Iterable<Uri> neighborsOf(Uri vertex) sync* {
     Library? library = libraries[vertex];
     if (library == null) {
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 0a41ca0..127ce5c 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -88,7 +88,8 @@
     return unhandled(string, "Modifier.fromString", -1, null);
   }
 
-  toString() => "modifier(${'$kind'.substring('ModifierEnum.'.length)})";
+  @override
+  String toString() => "modifier(${'$kind'.substring('ModifierEnum.'.length)})";
 
   static int toMask(List<Modifier>? modifiers) {
     int result = 0;
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index 00e16c9..eea59f1 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -34,7 +34,8 @@
                 .withArguments(severityTexts[severity]!, "$trace")
                 .withoutLocation();
 
-  toString() => "DebugAbort: ${message.message}";
+  @override
+  String toString() => "DebugAbort: ${message.message}";
 }
 
 /// Used to report an internal error.
diff --git a/pkg/front_end/lib/src/fasta/resolve_input_uri.dart b/pkg/front_end/lib/src/fasta/resolve_input_uri.dart
deleted file mode 100644
index 6f0dba3..0000000
--- a/pkg/front_end/lib/src/fasta/resolve_input_uri.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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/util/relativize.dart';
-
-Uri resolveInputUri(String path) {
-  Uri uri;
-  if (path.indexOf(":") == -1) {
-    uri = new Uri.file(path, windows: isWindows);
-  } else if (!isWindows) {
-    uri = parseUri(path);
-  } else {
-    uri = resolveAmbiguousWindowsPath(path);
-  }
-  return Uri.base.resolveUri(uri);
-}
-
-Uri parseUri(String path) {
-  if (path.startsWith("file:")) {
-    if (Uri.base.scheme == "file") {
-      // The Uri class doesn't handle relative file URIs correctly, the
-      // following works around that issue.
-      return new Uri(path: Uri.parse("x-$path").path);
-    }
-  }
-  return Uri.parse(path);
-}
-
-Uri resolveAmbiguousWindowsPath(String path) {
-  try {
-    return new Uri.file(path, windows: isWindows);
-  } on ArgumentError catch (_) {
-    return parseUri(path);
-  }
-}
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index 34849e8..f6e9a39 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -81,6 +81,7 @@
 
   Scope? get parent => _parent;
 
+  @override
   String toString() => "Scope($classNameOrDebugName, ${_local.keys})";
 }
 
@@ -343,7 +344,7 @@
         isModifiable: true);
   }
 
-  void recordUse(String name, int charOffset, Uri fileUri) {
+  void recordUse(String name, int charOffset) {
     if (isModifiable) {
       usedNames ??= <String, int>{};
       // Don't use putIfAbsent to avoid the context allocation needed
@@ -371,7 +372,7 @@
 
   Builder? lookup(String name, int charOffset, Uri fileUri,
       {bool isInstanceScope: true}) {
-    recordUse(name, charOffset, fileUri);
+    recordUse(name, charOffset);
     Builder? builder =
         lookupIn(name, charOffset, fileUri, _local, isInstanceScope);
     if (builder != null) return builder;
@@ -388,7 +389,7 @@
 
   Builder? lookupSetter(String name, int charOffset, Uri fileUri,
       {bool isInstanceScope: true}) {
-    recordUse(name, charOffset, fileUri);
+    recordUse(name, charOffset);
     Builder? builder =
         lookupIn(name, charOffset, fileUri, _setters, isInstanceScope);
     if (builder != null) return builder;
@@ -604,6 +605,7 @@
     }
   }
 
+  @override
   String toString() => "ConstructorScope($className, ${local.keys})";
 }
 
@@ -676,14 +678,15 @@
 
   final Builder builder;
 
+  @override
   final int charOffset;
 
+  @override
   final Uri fileUri;
 
   ProblemBuilder(this.name, this.builder, this.charOffset, this.fileUri);
 
-  get target => null;
-
+  @override
   bool get hasProblem => true;
 
   Message get message;
@@ -778,6 +781,7 @@
   @override
   Iterable<Member> get exportedMembers => const [];
 
+  @override
   bool get isNative => false;
 
   @override
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 331d16b..fb22647 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -5,7 +5,13 @@
 library fasta.diet_listener;
 
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
-    show Assert, DeclarationKind, MemberKind, Parser, optional;
+    show
+        Assert,
+        ConstructorReferenceContext,
+        DeclarationKind,
+        MemberKind,
+        Parser,
+        optional;
 
 import 'package:_fe_analyzer_shared/src/parser/quote.dart' show unescapeString;
 
@@ -50,7 +56,7 @@
 
 import '../ignored_parser_errors.dart' show isIgnoredParserError;
 
-import '../kernel/body_builder.dart' show BodyBuilder;
+import '../kernel/body_builder.dart' show BodyBuilder, FormalParameters;
 
 import '../problems.dart'
     show DebugAbort, internalProblem, unexpected, unhandled;
@@ -64,11 +70,14 @@
 
 import '../type_inference/type_inferrer.dart' show TypeInferrer;
 
+import 'diet_parser.dart';
+
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'stack_listener_impl.dart';
 
 class DietListener extends StackListenerImpl {
+  @override
   final SourceLibraryBuilder libraryBuilder;
 
   final ClassHierarchy hierarchy;
@@ -343,7 +352,7 @@
     checkEmpty(beginToken.charOffset);
     if (name is ParserRecovery) return;
 
-    final StackListenerImpl listener = createFunctionListener(
+    final BodyBuilder listener = createFunctionListener(
         lookupBuilder(beginToken, getOrSet, name as String)
             as FunctionBuilderImpl);
     buildFunctionBody(listener, bodyToken, metadata, MemberKind.TopLevelMethod);
@@ -576,8 +585,8 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     debugEvent("ConstructorReference");
     popIfNotNull(periodBeforeName);
   }
@@ -718,7 +727,7 @@
             : MemberKind.NonStaticMethod);
   }
 
-  StackListenerImpl createListener(ModifierBuilder builder, Scope memberScope,
+  BodyBuilder createListener(ModifierBuilder builder, Scope memberScope,
       {required bool isDeclarationInstanceMember,
       VariableDeclaration? extensionThis,
       List<TypeParameter>? extensionTypeParameters,
@@ -746,7 +755,7 @@
         constantContext);
   }
 
-  StackListenerImpl createListenerInternal(
+  BodyBuilder createListenerInternal(
       ModifierBuilder builder,
       Scope memberScope,
       Scope? formalParameterScope,
@@ -771,7 +780,7 @@
       ..constantContext = constantContext;
   }
 
-  StackListenerImpl createFunctionListener(FunctionBuilderImpl builder) {
+  BodyBuilder createFunctionListener(FunctionBuilderImpl builder) {
     final Scope typeParameterScope =
         builder.computeTypeParameterScope(memberScope);
     final Scope formalParameterScope =
@@ -790,9 +799,10 @@
 
   void buildRedirectingFactoryMethod(Token token, FunctionBuilderImpl builder,
       MemberKind kind, Token? metadata) {
-    final StackListenerImpl listener = createFunctionListener(builder);
+    final BodyBuilder listener = createFunctionListener(builder);
     try {
-      Parser parser = new Parser(listener);
+      Parser parser = new Parser(listener,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
       if (metadata != null) {
         parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
         listener.pop(); // Pops metadata constants.
@@ -801,6 +811,7 @@
       token = parser.parseFormalParametersOpt(
           parser.syntheticPreviousToken(token), MemberKind.Factory);
       listener.pop(); // Pops formal parameters.
+      listener.finishRedirectingFactoryBody();
       listener.checkEmpty(token.next!.charOffset);
     } on DebugAbort {
       rethrow;
@@ -819,7 +830,7 @@
         lookupBuilder(token, null, names.first!) as SourceFieldBuilder;
     // TODO(paulberry): don't re-parse the field if we've already parsed it
     // for type inference.
-    parseFields(
+    _parseFields(
         createListener(declaration, memberScope,
             isDeclarationInstanceMember:
                 declaration.isDeclarationInstanceMember,
@@ -944,45 +955,24 @@
   AsyncMarker? getAsyncMarker(StackListenerImpl listener) =>
       listener.pop() as AsyncMarker?;
 
-  /// Invokes the listener's [finishFunction] method.
-  ///
-  /// This is a separate method so that it may be overridden by a derived class
-  /// if more computation must be done before finishing the function.
-  void listenerFinishFunction(
-      StackListenerImpl listener,
-      Token token,
-      MemberKind kind,
-      dynamic formals,
-      AsyncMarker asyncModifier,
-      dynamic body) {
-    listener.finishFunction(formals, asyncModifier, body);
-  }
-
-  /// Invokes the listener's [finishFields] method.
-  ///
-  /// This is a separate method so that it may be overridden by a derived class
-  /// if more computation must be done before finishing the function.
-  void listenerFinishFields(StackListenerImpl listener, Token startToken,
-      Token? metadata, bool isTopLevel) {
-    listener.finishFields();
-  }
-
-  void buildFunctionBody(StackListenerImpl listener, Token startToken,
+  void buildFunctionBody(BodyBuilder bodyBuilder, Token startToken,
       Token? metadata, MemberKind kind) {
     Token token = startToken;
     try {
-      Parser parser = new Parser(listener);
+      Parser parser = new Parser(bodyBuilder,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
       if (metadata != null) {
         parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
-        listener.pop(); // Annotations.
+        bodyBuilder.pop(); // Annotations.
       }
       token = parser.parseFormalParametersOpt(
           parser.syntheticPreviousToken(token), kind);
-      Object? formals = listener.pop();
-      listener.checkEmpty(token.next!.charOffset);
+      FormalParameters? formals = bodyBuilder.pop() as FormalParameters?;
+      bodyBuilder.checkEmpty(token.next!.charOffset);
       token = parser.parseInitializersOpt(token);
       token = parser.parseAsyncModifierOpt(token);
-      AsyncMarker asyncModifier = getAsyncMarker(listener) ?? AsyncMarker.Sync;
+      AsyncMarker asyncModifier =
+          getAsyncMarker(bodyBuilder) ?? AsyncMarker.Sync;
       if (kind == MemberKind.Factory && asyncModifier != AsyncMarker.Sync) {
         // Factories has to be sync. The parser issued an error.
         // Recover to sync.
@@ -991,10 +981,9 @@
       bool isExpression = false;
       bool allowAbstract = asyncModifier == AsyncMarker.Sync;
       parser.parseFunctionBody(token, isExpression, allowAbstract);
-      Object? body = listener.pop();
-      listener.checkEmpty(token.charOffset);
-      listenerFinishFunction(
-          listener, startToken, kind, formals, asyncModifier, body);
+      Statement? body = bodyBuilder.pop() as Statement?;
+      bodyBuilder.checkEmpty(token.charOffset);
+      bodyBuilder.finishFunction(formals, asyncModifier, body);
     } on DebugAbort {
       rethrow;
     } catch (e, s) {
@@ -1002,18 +991,19 @@
     }
   }
 
-  void parseFields(StackListenerImpl listener, Token startToken,
-      Token? metadata, bool isTopLevel) {
+  void _parseFields(BodyBuilder bodyBuilder, Token startToken, Token? metadata,
+      bool isTopLevel) {
     Token token = startToken;
-    Parser parser = new Parser(listener);
+    Parser parser = new Parser(bodyBuilder,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (isTopLevel) {
       token = parser.parseTopLevelMember(metadata ?? token);
     } else {
       // TODO(danrubel): disambiguate between class/mixin/extension members
       token = parser.parseClassMember(metadata ?? token, null).next!;
     }
-    listenerFinishFields(listener, startToken, metadata, isTopLevel);
-    listener.checkEmpty(token.charOffset);
+    bodyBuilder.finishFields();
+    bodyBuilder.checkEmpty(token.charOffset);
   }
 
   Builder? lookupBuilder(Token token, Token? getOrSet, String name) {
@@ -1122,7 +1112,8 @@
     if (metadata != null) {
       StackListenerImpl listener = createListener(builder, memberScope,
           isDeclarationInstanceMember: false);
-      Parser parser = new Parser(listener);
+      Parser parser = new Parser(listener,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
       parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
       return listener.finishMetadata(parent);
     }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_parser.dart b/pkg/front_end/lib/src/fasta/source/diet_parser.dart
index 6bed46d..0299973 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_parser.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_parser.dart
@@ -9,10 +9,15 @@
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
     show ClassMemberParser, Listener, MemberKind;
 
+const bool useImplicitCreationExpressionInCfe = true;
+
 // TODO(ahe): Move this to parser package.
 class DietParser extends ClassMemberParser {
-  DietParser(Listener listener) : super(listener);
+  DietParser(Listener listener)
+      : super(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
 
+  @override
   Token parseFormalParametersRest(Token token, MemberKind kind) {
     return skipFormalParametersRest(token, kind);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/directive_listener.dart b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
index a7915a4..ef44416 100644
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
@@ -37,7 +37,7 @@
   DirectiveListener();
 
   @override
-  beginExport(Token export) {
+  void beginExport(Token export) {
     _combinators = <NamespaceCombinator>[];
   }
 
@@ -47,7 +47,7 @@
   }
 
   @override
-  beginImport(Token import) {
+  void beginImport(Token import) {
     _combinators = <NamespaceCombinator>[];
   }
 
@@ -59,7 +59,7 @@
   }
 
   @override
-  beginPart(Token part) {
+  void beginPart(Token part) {
     _inPart = true;
   }
 
@@ -69,7 +69,7 @@
   }
 
   @override
-  endExport(Token export, Token semicolon) {
+  void endExport(Token export, Token semicolon) {
     exports.add(new NamespaceDirective.export(_uri, _combinators));
     _uri = null;
     _combinators = null;
@@ -82,14 +82,14 @@
   }
 
   @override
-  endImport(Token? import, Token? semicolon) {
+  void endImport(Token? import, Token? semicolon) {
     imports.add(new NamespaceDirective.import(_uri, _combinators));
     _uri = null;
     _combinators = null;
   }
 
   @override
-  endPart(Token part, Token semicolon) {
+  void endPart(Token part, Token semicolon) {
     parts.add(_uri);
     _uri = null;
     _inPart = false;
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 1cbd3d7..c1ac2cf 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -7,6 +7,7 @@
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
     show
         Assert,
+        ConstructorReferenceContext,
         DeclarationKind,
         FormalParameterKind,
         IdentifierContext,
@@ -101,6 +102,7 @@
 }
 
 class OutlineBuilder extends StackListenerImpl {
+  @override
   final SourceLibraryBuilder libraryBuilder;
 
   final bool enableNative;
@@ -990,30 +992,35 @@
         endToken, _MethodKind.classMethod);
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.classConstructor);
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.mixinMethod);
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.extensionMethod);
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.mixinConstructor);
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
@@ -1031,7 +1038,7 @@
     }
     assert(checkState(beginToken, [
       ValueKinds.AsyncModifier,
-      ValueKinds.FormalsOrNull,
+      ValueKinds.FormalListOrNull,
       ValueKinds.Integer, // formals offset
       ValueKinds.TypeVariableListOrNull,
       ValueKinds.Integer, // name offset
@@ -2028,8 +2035,8 @@
   }
 
   @override
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     debugEvent("ConstructorReference");
     popIfNotNull(periodBeforeName); // charOffset.
     String? suffix = popIfNotNull(periodBeforeName) as String?;
@@ -2212,6 +2219,7 @@
     push(asyncMarkerFromTokens(asyncToken, starToken));
   }
 
+  @override
   void addProblem(Message message, int charOffset, int length,
       {bool wasHandled: false, List<LocatedMessage>? context}) {
     libraryBuilder.addProblem(message, charOffset, length, uri,
diff --git a/pkg/front_end/lib/src/fasta/source/scope_listener.dart b/pkg/front_end/lib/src/fasta/source/scope_listener.dart
index ee9b746..21c67fe 100644
--- a/pkg/front_end/lib/src/fasta/source/scope_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/scope_listener.dart
@@ -13,6 +13,7 @@
 
 import '../scope.dart' show Scope;
 import 'stack_listener_impl.dart';
+import 'value_kinds.dart';
 
 export 'package:_fe_analyzer_shared/src/parser/stack_listener.dart'
     show FixedNullableList, GrowableList, NullValue, ParserRecovery;
@@ -49,10 +50,16 @@
   void enterLocalScope(String debugName, [Scope? newScope]) {
     push(scope);
     scope = newScope ?? scope.createNestedScope(debugName);
+    assert(checkState(null, [
+      ValueKinds.Scope,
+    ]));
   }
 
   @override
   void exitLocalScope() {
+    assert(checkState(null, [
+      ValueKinds.Scope,
+    ]));
     scope = pop() as Scope;
     // ignore: unnecessary_null_comparison
     assert(scope != null);
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 395a4d2..0809082 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
@@ -39,7 +39,6 @@
 import '../kernel/combined_member_signature.dart';
 import '../kernel/kernel_builder.dart' show compareProcedures;
 import '../kernel/kernel_target.dart' show KernelTarget;
-import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
 import '../kernel/redirecting_factory_body.dart' show redirectingName;
 import '../kernel/type_algorithms.dart'
     show Variance, computeTypeVariableBuilderVariance;
@@ -89,6 +88,7 @@
 
   final List<ConstructorReferenceBuilder>? constructorReferences;
 
+  @override
   TypeBuilder? mixedInTypeBuilder;
 
   bool isMixinDeclaration;
@@ -218,16 +218,12 @@
     }
     Supertype? mixedInType =
         mixedInTypeBuilder?.buildMixedInType(library, charOffset, fileUri);
-    if (mixedInType != null) {
-      Class superclass = mixedInType.classNode;
-      if (superclass.name == 'Function' &&
-          superclass.enclosingLibrary == coreLibrary.library) {
-        library.addProblem(messageMixinFunction, charOffset, noLength, fileUri);
-        mixedInType = null;
-        mixedInTypeBuilder = null;
-        actualCls.isAnonymousMixin = false;
-        isMixinDeclaration = false;
-      }
+    if (_isFunction(mixedInType, coreLibrary)) {
+      library.addProblem(messageMixinFunction, charOffset, noLength, fileUri);
+      mixedInType = null;
+      mixedInTypeBuilder = null;
+      actualCls.isAnonymousMixin = false;
+      isMixinDeclaration = false;
     }
     if (mixedInType == null && mixedInTypeBuilder is! NamedTypeBuilder) {
       mixedInTypeBuilder = null;
@@ -244,9 +240,7 @@
         Supertype? supertype =
             interfaceBuilders![i].buildSupertype(library, charOffset, fileUri);
         if (supertype != null) {
-          Class superclass = supertype.classNode;
-          if (superclass.name == 'Function' &&
-              superclass.enclosingLibrary == coreLibrary.library) {
+          if (_isFunction(supertype, coreLibrary)) {
             library.addProblem(
                 messageImplementFunction, charOffset, noLength, fileUri);
             continue;
@@ -292,6 +286,25 @@
     return cls;
   }
 
+  bool _isFunction(Supertype? supertype, LibraryBuilder coreLibrary) {
+    if (supertype != null) {
+      Class superclass = supertype.classNode;
+      if (superclass.name == 'Function' &&
+          // We use `superclass.parent` here instead of
+          // `superclass.enclosingLibrary` to handle platform compilation. If
+          // we are currently compiling the platform, the enclosing library of
+          // `Function` has not yet been set, so the accessing
+          // `enclosingLibrary` would result in a cast error. We assume that the
+          // SDK does not contain this error, which we otherwise not find. If we
+          // are _not_ compiling the platform, the `superclass.parent` has been
+          // set, if it is `Function` from `dart:core`.
+          superclass.parent == coreLibrary.library) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   TypeBuilder checkSupertype(TypeBuilder supertype) {
     if (typeVariables == null) return supertype;
     Message? message;
@@ -547,7 +560,7 @@
       } else {
         assert(
             // This is a synthesized constructor.
-            builder is DillConstructorBuilder && builder.member is Constructor,
+            builder is DillConstructorBuilder,
             "Unexpected constructor: $builder.");
       }
     }, includeInjectedConstructors: true);
@@ -924,42 +937,44 @@
                 _addRedirectingConstructor(
                     declaration, library, getterReference);
               }
+              Member? targetNode;
               if (targetBuilder is FunctionBuilder) {
-                List<DartType> typeArguments = declaration.typeArguments ??
-                    new List<DartType>.filled(
-                        targetBuilder
-                            .member.enclosingClass!.typeParameters.length,
-                        const UnknownType());
-                declaration.setRedirectingFactoryBody(
-                    targetBuilder.member, typeArguments);
+                targetNode = targetBuilder.member;
               } else if (targetBuilder is DillMemberBuilder) {
-                List<DartType> typeArguments = declaration.typeArguments ??
-                    new List<DartType>.filled(
-                        targetBuilder
-                            .member.enclosingClass!.typeParameters.length,
-                        const UnknownType());
-                declaration.setRedirectingFactoryBody(
-                    targetBuilder.member, typeArguments);
+                targetNode = targetBuilder.member;
               } else if (targetBuilder is AmbiguousBuilder) {
-                addProblem(
+                addProblemForRedirectingFactory(
+                    declaration,
                     templateDuplicatedDeclarationUse
                         .withArguments(redirectionTarget.fullNameForErrors),
                     redirectionTarget.charOffset,
                     noLength);
-                // CoreTypes aren't computed yet, and this is the outline
-                // phase. So we can't and shouldn't create a method body.
-                declaration.body = new RedirectingFactoryBody.unresolved(
-                    redirectionTarget.fullNameForErrors);
               } else {
-                addProblem(
+                addProblemForRedirectingFactory(
+                    declaration,
                     templateRedirectionTargetNotFound
                         .withArguments(redirectionTarget.fullNameForErrors),
                     redirectionTarget.charOffset,
                     noLength);
-                // CoreTypes aren't computed yet, and this is the outline
-                // phase. So we can't and shouldn't create a method body.
-                declaration.body = new RedirectingFactoryBody.unresolved(
-                    redirectionTarget.fullNameForErrors);
+              }
+              if (targetNode != null &&
+                  targetNode is Constructor &&
+                  targetNode.enclosingClass.isAbstract) {
+                addProblemForRedirectingFactory(
+                    declaration,
+                    templateAbstractRedirectedClassInstantiation
+                        .withArguments(redirectionTarget.fullNameForErrors),
+                    redirectionTarget.charOffset,
+                    noLength);
+                targetNode = null;
+              }
+              if (targetNode != null) {
+                List<DartType> typeArguments = declaration.typeArguments ??
+                    new List<DartType>.filled(
+                        targetNode.enclosingClass!.typeParameters.length,
+                        const UnknownType());
+                declaration.setRedirectingFactoryBody(
+                    targetNode, typeArguments);
               }
             }
           }
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 5ffcb20..d528324 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -79,6 +79,7 @@
   @override
   SourceExtensionBuilder get origin => _origin ?? this;
 
+  @override
   Extension get extension => isPatch ? origin._extension : _extension;
 
   /// Builds the [Extension] for this extension build and inserts the members
@@ -278,11 +279,11 @@
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     MetadataBuilder.buildAnnotations(isPatch ? origin.extension : extension,
-        metadata, library, this, null, fileUri);
+        metadata, library, this, null, fileUri, library.scope);
     if (typeParameters != null) {
       for (int i = 0; i < typeParameters!.length; i++) {
-        typeParameters![i].buildOutlineExpressions(
-            library, this, null, coreTypes, delayedActionPerformers);
+        typeParameters![i].buildOutlineExpressions(library, this, null,
+            coreTypes, delayedActionPerformers, scope.parent!);
       }
     }
 
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 324a721..3cf100e 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
@@ -133,6 +133,7 @@
 class SourceLibraryBuilder extends LibraryBuilderImpl {
   static const String MALFORMED_URI_SCHEME = "org-dartlang-malformed-uri";
 
+  @override
   final SourceLoader loader;
 
   final TypeParameterScopeBuilder libraryDeclaration;
@@ -151,6 +152,7 @@
 
   final Scope importScope;
 
+  @override
   final Uri fileUri;
 
   final Uri? _packageUri;
@@ -159,6 +161,7 @@
 
   final List<Object> accessors = <Object>[];
 
+  @override
   String? name;
 
   String? partOfName;
@@ -211,6 +214,7 @@
   // This allows code generated in one library to use the private namespace of
   // another, for example during expression compilation (debugging).
   Library get nameOrigin => _nameOrigin?.library ?? library;
+  @override
   LibraryBuilder get nameOriginBuilder => _nameOrigin ?? this;
   final LibraryBuilder? _nameOrigin;
 
@@ -343,8 +347,7 @@
   /// a version that is too low for opting in to the experiment.
   bool get enableNonNullableInLibrary => _enableNonNullableInLibrary ??=
       loader.target.isExperimentEnabledInLibrary(
-              ExperimentalFlag.nonNullable, _packageUri ?? importUri) &&
-          !isOptOutTest(library.importUri);
+          ExperimentalFlag.nonNullable, _packageUri ?? importUri);
 
   Version get enableNonNullableVersionInLibrary =>
       _enableNonNullableVersionInLibrary ??= loader.target
@@ -481,30 +484,6 @@
       enableNonNullableInLibrary &&
       languageVersion.version >= enableNonNullableVersionInLibrary;
 
-  static bool isOptOutTest(Uri uri) {
-    String path = uri.path;
-    for (String testDir in ['/tests/', '/generated_tests/']) {
-      int start = path.indexOf(testDir);
-      if (start == -1) continue;
-      String rest = path.substring(start + testDir.length);
-      return optOutTestPaths.any(rest.startsWith);
-    }
-    return false;
-  }
-
-  static const List<String> optOutTestPaths = [
-    'co19_2/',
-    'corelib_2/',
-    'web_2/',
-    'ffi_2',
-    'language_2/',
-    'lib_2/',
-    'samples_2/',
-    'service_2/',
-    'standalone_2/',
-    'vm/dart_2/', // in runtime/tests
-  ];
-
   LanguageVersion get languageVersion {
     assert(
         _languageVersion.isFinal,
@@ -736,7 +715,7 @@
     String? nativePath;
     const String nativeExtensionScheme = "dart-ext:";
     if (uri.startsWith(nativeExtensionScheme)) {
-      addProblem(messageDeprecateDartExt, charOffset, noLength, fileUri);
+      addProblem(messageUnsupportedDartExt, charOffset, noLength, fileUri);
       String strippedUri = uri.substring(nativeExtensionScheme.length);
       if (strippedUri.startsWith("package")) {
         resolvedUri = resolve(this.importUri, strippedUri,
@@ -1445,13 +1424,16 @@
   @override
   SourceLibraryBuilder get origin => actualOrigin ?? this;
 
+  @override
   Uri get importUri => library.importUri;
 
+  @override
   void addSyntheticDeclarationOfDynamic() {
     addBuilder("dynamic",
         new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1), -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNever() {
     addBuilder(
         "Never",
@@ -1460,6 +1442,7 @@
         -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNull() {
     // TODO(dmitryas): Uncomment the following when the Null class is removed
     // from the SDK.
@@ -2673,7 +2656,7 @@
   @override
   void buildOutlineExpressions() {
     MetadataBuilder.buildAnnotations(
-        library, metadata, this, null, null, fileUri);
+        library, metadata, this, null, null, fileUri, scope);
   }
 
   /// Builds the core AST structures for [declaration] needed for the outline.
@@ -2886,6 +2869,7 @@
         suppressMessage: false);
   }
 
+  @override
   int finishDeferredLoadTearoffs() {
     int total = 0;
     for (Import import in imports) {
@@ -2900,6 +2884,7 @@
     return total;
   }
 
+  @override
   int finishForwarders() {
     int count = 0;
     CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
@@ -2954,6 +2939,7 @@
     nativeMethods.add(method);
   }
 
+  @override
   int finishNativeMethods() {
     for (FunctionBuilder method in nativeMethods) {
       method.becomeNative(loader);
@@ -2991,6 +2977,7 @@
     return copy;
   }
 
+  @override
   int finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
     int count = boundlessTypeVariables.length;
     // Ensure that type parameters are built after their dependencies by sorting
@@ -3097,6 +3084,7 @@
     _pendingNullabilities.clear();
   }
 
+  @override
   int computeVariances() {
     int count = 0;
     for (Builder? declaration in libraryDeclaration.members!.values) {
@@ -3201,6 +3189,7 @@
     return false;
   }
 
+  @override
   int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
       TypeBuilder bottomType, ClassBuilder objectClass) {
     int count = 0;
@@ -3490,6 +3479,7 @@
     }
   }
 
+  @override
   int finishPatchMethods() {
     if (!isPatch) return 0;
     int count = 0;
@@ -4563,8 +4553,10 @@
 
   bool get valid => true;
 
+  @override
   int get hashCode => version.hashCode * 13 + isExplicit.hashCode * 19;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is LanguageVersion &&
@@ -4572,6 +4564,7 @@
         isExplicit == other.isExplicit;
   }
 
+  @override
   String toString() {
     return 'LanguageVersion(version=$version,isExplicit=$isExplicit,'
         'fileUri=$fileUri,charOffset=$charOffset,charCount=$charCount)';
@@ -4579,11 +4572,17 @@
 }
 
 class InvalidLanguageVersion implements LanguageVersion {
+  @override
   final Uri fileUri;
+  @override
   final int charOffset;
+  @override
   final int charCount;
+  @override
   final Version version;
+  @override
   final bool isExplicit;
+  @override
   bool isFinal = false;
 
   InvalidLanguageVersion(this.fileUri, this.charOffset, this.charCount,
@@ -4592,13 +4591,16 @@
   @override
   bool get valid => false;
 
+  @override
   int get hashCode => isExplicit.hashCode * 19;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is InvalidLanguageVersion && isExplicit == other.isExplicit;
   }
 
+  @override
   String toString() {
     return 'InvalidLanguageVersion(isExplicit=$isExplicit,'
         'fileUri=$fileUri,charOffset=$charOffset,charCount=$charCount)';
@@ -4608,6 +4610,7 @@
 class ImplicitLanguageVersion implements LanguageVersion {
   @override
   final Version version;
+  @override
   bool isFinal = false;
 
   ImplicitLanguageVersion(this.version);
@@ -4627,6 +4630,7 @@
   @override
   bool get isExplicit => false;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is ImplicitLanguageVersion && version == other.version;
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 538d6cc..ea3cf9b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -114,7 +114,7 @@
 import '../util/helpers.dart';
 
 import 'diet_listener.dart' show DietListener;
-import 'diet_parser.dart' show DietParser;
+import 'diet_parser.dart' show DietParser, useImplicitCreationExpressionInCfe;
 import 'outline_builder.dart' show OutlineBuilder;
 import 'source_class_builder.dart' show SourceClassBuilder;
 import 'source_library_builder.dart' show SourceLibraryBuilder;
@@ -203,9 +203,11 @@
 
   ClassHierarchyBuilder get builderHierarchy => _builderHierarchy!;
 
+  @override
   Template<SummaryTemplate> get outlineSummaryTemplate =>
       templateSourceOutlineSummary;
 
+  @override
   bool get isSourceLoader => true;
 
   Future<Token> tokenize(SourceLibraryBuilder library,
@@ -271,10 +273,9 @@
                     library.importUri,
                     library.packageLanguageVersion.version),
             enableNonNullable: target.isExperimentEnabledInLibraryByVersion(
-                    ExperimentalFlag.nonNullable,
-                    library.importUri,
-                    library.packageLanguageVersion.version) &&
-                !SourceLibraryBuilder.isOptOutTest(library.importUri)),
+                ExperimentalFlag.nonNullable,
+                library.importUri,
+                library.packageLanguageVersion.version)),
         languageVersionChanged:
             (Scanner scanner, LanguageVersionToken version) {
       if (!suppressLexicalErrors) {
@@ -475,6 +476,7 @@
     return bytes.sublist(0, bytes.length - 1);
   }
 
+  @override
   Future<Null> buildOutline(SourceLibraryBuilder library) async {
     Token tokens = await tokenize(library);
     // ignore: unnecessary_null_comparison
@@ -483,6 +485,7 @@
     new ClassMemberParser(listener).parseUnit(tokens);
   }
 
+  @override
   Future<Null> buildBody(LibraryBuilder library) async {
     if (library is SourceLibraryBuilder) {
       // We tokenize source files twice to keep memory usage low. This is the
@@ -557,12 +560,16 @@
       ..parent = parent;
     BodyBuilder listener = dietListener.createListener(
         builder, dietListener.memberScope,
-        isDeclarationInstanceMember: isClassInstanceMember) as BodyBuilder;
+        isDeclarationInstanceMember: isClassInstanceMember);
 
     return listener.parseSingleExpression(
-        new Parser(listener), token, parameters);
+        new Parser(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe),
+        token,
+        parameters);
   }
 
+  @override
   KernelTarget get target => super.target as KernelTarget;
 
   DietListener createDietListener(SourceLibraryBuilder library) {
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 60e717f..70a6813 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
@@ -18,7 +18,9 @@
     show noLength, templateCyclicTypedef, templateTypeArgumentMismatch;
 
 import '../problems.dart' show unhandled;
+import '../scope.dart';
 
+import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/fixed_type_builder.dart';
 import '../builder/formal_parameter_builder.dart';
@@ -40,15 +42,19 @@
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
+  @override
   final TypeBuilder? type;
 
   final List<TypeVariableBuilder>? _typeVariables;
 
   /// The [Typedef] built by this builder.
+  @override
   final Typedef typedef;
 
+  @override
   DartType? thisType;
 
+  @override
   Map<Name, Procedure>? tearOffs;
 
   SourceTypeAliasBuilder(
@@ -131,6 +137,7 @@
     return typedef;
   }
 
+  @override
   DartType buildThisType() {
     if (thisType != null) {
       if (identical(thisType, pendingTypeAliasMarker)) {
@@ -256,11 +263,16 @@
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     MetadataBuilder.buildAnnotations(
-        typedef, metadata, library, null, null, fileUri);
+        typedef, metadata, library, null, null, fileUri, library.scope);
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
         typeVariables![i].buildOutlineExpressions(
-            library, null, null, coreTypes, delayedActionPerformers);
+            library,
+            null,
+            null,
+            coreTypes,
+            delayedActionPerformers,
+            computeTypeParameterScope(library.scope));
       }
     }
     _tearOffDependencies?.forEach((Procedure tearOff, Member target) {
@@ -273,14 +285,30 @@
     });
   }
 
+  Scope computeTypeParameterScope(Scope parent) {
+    if (typeVariables == null) return parent;
+    Map<String, Builder> local = <String, Builder>{};
+    for (TypeVariableBuilder variable in typeVariables!) {
+      local[variable.name] = variable;
+    }
+    return new Scope(
+        local: local,
+        parent: parent,
+        debugName: "type parameter",
+        isModifiable: false);
+  }
+
   Map<Procedure, Member>? _tearOffDependencies;
 
   void buildTypedefTearOffs(
       SourceLibraryBuilder library, void Function(Procedure) f) {
     TypeDeclarationBuilder? declaration = unaliasDeclaration(null);
+    DartType? targetType = typedef.type;
     if (declaration is ClassBuilder &&
+        targetType is InterfaceType &&
         typedef.typeParameters.isNotEmpty &&
-        !isProperRenameForClass(library.loader.typeEnvironment, typedef)) {
+        !isProperRenameForClass(
+            library.loader.typeEnvironment, typedef, library.library)) {
       tearOffs = {};
       _tearOffDependencies = {};
       declaration
@@ -293,10 +321,10 @@
           Name targetName =
               new Name(constructorName, declaration.library.library);
           Procedure tearOff = tearOffs![targetName] =
-              createTypedefTearOffProcedure(
-                  name, constructorName, library, fileUri, charOffset);
+              createTypedefTearOffProcedure(name, constructorName, library,
+                  target.fileUri, target.fileOffset);
           _tearOffDependencies![tearOff] = target;
-          InterfaceType targetType = typedef.type as InterfaceType;
+
           buildTypedefTearOffProcedure(tearOff, target, declaration.cls,
               typedef.typeParameters, targetType.typeArguments, library);
           f(tearOff);
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
index 0544f97..fa89f68 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
@@ -47,19 +47,6 @@
 
   // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
   // and ast_builder.dart.
-  void finishFunction(
-      covariant formals, AsyncMarker asyncModifier, covariant body) {
-    problems.unsupported("finishFunction", -1, uri);
-  }
-
-  // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
-  // and ast_builder.dart.
-  dynamic finishFields() {
-    return problems.unsupported("finishFields", -1, uri);
-  }
-
-  // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
-  // and ast_builder.dart.
   List<Expression> finishMetadata(Annotatable? parent) {
     return problems.unsupported("finishMetadata", -1, uri);
   }
@@ -75,7 +62,8 @@
   }
 
   /// Used to report an internal error encountered in the stack listener.
-  internalProblem(Message message, int charOffset, Uri uri) {
+  @override
+  Never internalProblem(Message message, int charOffset, Uri uri) {
     return problems.internalProblem(message, charOffset, uri);
   }
 
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 047d3c6..6f24626 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -22,6 +22,7 @@
 
 import '../identifiers.dart' as type;
 
+import '../kernel/body_builder.dart' as type show FormalParameters;
 import '../kernel/expression_generator.dart' as type;
 
 import '../modifier.dart' as type;
@@ -32,24 +33,37 @@
 
 import '../source/outline_builder.dart' as type;
 
+import '../constant_context.dart' as type;
+
 class ValueKinds {
+  static const ValueKind AnnotationList =
+      const SingleValueKind<List<type.Expression>>();
   static const ValueKind AnnotationListOrNull =
       const SingleValueKind<List<type.Expression>>(NullValue.Metadata);
   static const ValueKind Arguments = const SingleValueKind<type.Arguments>();
   static const ValueKind ArgumentsOrNull =
       const SingleValueKind<type.Arguments>(NullValue.Arguments);
+  static const ValueKind AsyncMarker =
+      const SingleValueKind<type.AsyncMarker>();
+  static const ValueKind Bool = const SingleValueKind<bool>();
+  static const ValueKind ConstantContext =
+      const SingleValueKind<type.ConstantContext>();
   static const ValueKind Expression = const SingleValueKind<type.Expression>();
   static const ValueKind ExpressionOrNull =
       const SingleValueKind<type.Expression>(NullValue.Expression);
+  static const ValueKind FieldInitializerOrNull =
+      const SingleValueKind<type.Expression>(NullValue.FieldInitializer);
   static const ValueKind Identifier = const SingleValueKind<type.Identifier>();
   static const ValueKind IdentifierOrNull =
       const SingleValueKind<type.Identifier>(NullValue.Identifier);
   static const ValueKind Integer = const SingleValueKind<int>();
   static const ValueKind AsyncModifier =
       const SingleValueKind<type.AsyncMarker>();
-  static const ValueKind Formals =
+  static const ValueKind FormalParameters =
+      const SingleValueKind<type.FormalParameters>();
+  static const ValueKind FormalList =
       const SingleValueKind<List<type.FormalParameterBuilder>>();
-  static const ValueKind FormalsOrNull =
+  static const ValueKind FormalListOrNull =
       const SingleValueKind<List<type.FormalParameterBuilder>>(
           NullValue.FormalParameters);
   static const ValueKind Generator = const SingleValueKind<type.Generator>();
@@ -79,10 +93,19 @@
       const SingleValueKind<type.ProblemBuilder>();
   static const ValueKind QualifiedName =
       const SingleValueKind<type.QualifiedName>();
+  static const ValueKind Scope = const SingleValueKind<type.Scope>();
+  static const ValueKind Selector =
+      const SingleValueKind<type.Selector>();
+  static const ValueKind SwitchScopeOrNull =
+      const SingleValueKind<type.Scope>(NullValue.SwitchScope);
   static const ValueKind Statement = const SingleValueKind<type.Statement>();
+  static const ValueKind StatementOrNull =
+      const SingleValueKind<type.Statement>(NullValue.Block);
   static const ValueKind Token = const SingleValueKind<type.Token>();
   static const ValueKind TokenOrNull =
       const SingleValueKind<type.Token>(NullValue.Token);
+  static const ValueKind TypeOrNull =
+      const SingleValueKind<type.UnresolvedType>(NullValue.Type);
   static const ValueKind TypeArguments =
       const SingleValueKind<List<type.UnresolvedType>>();
   static const ValueKind TypeArgumentsOrNull =
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 48929d9..6904eb1 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -113,6 +113,7 @@
 }
 
 class _SyncClosureContext implements ClosureContext {
+  @override
   bool get isAsync => false;
 
   /// The typing expectation for the subexpression of a `return` statement
@@ -462,6 +463,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _AsyncClosureContext implements ClosureContext {
+  @override
   bool get isAsync => true;
 
   /// The typing expectation for the subexpression of a `return` statement
@@ -496,6 +498,7 @@
   /// being inferred.
   List<DartType>? _returnExpressionTypes;
 
+  @override
   DartType? futureValueType;
 
   _AsyncClosureContext(this._returnContext, this._declaredReturnType,
@@ -870,6 +873,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _SyncStarClosureContext implements ClosureContext {
+  @override
   bool get isAsync => false;
 
   /// The typing expectation for the subexpression of a `return` or `yield`
@@ -1000,6 +1004,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _AsyncStarClosureContext implements ClosureContext {
+  @override
   bool get isAsync => true;
 
   /// The typing expectation for the subexpression of a `return` or `yield`
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
index e449a1e..e8e2c91 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
@@ -16,7 +16,9 @@
   set transformSetLiterals(bool value);
 
   Expression buildProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage>? context, bool suppressMessage = false});
+      {List<LocatedMessage>? context,
+      bool suppressMessage = false,
+      Expression? expression});
 
   LocatedMessage? checkArgumentsForType(
       FunctionType function, Arguments arguments, int offset,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index caf6767..ce53057 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -1096,6 +1096,7 @@
 
   _ProtoConstraint.upper(this.parameter, this.bound) : isUpper = true;
 
+  @override
   String toString() {
     return isUpper
         ? "${parameter.name} <: $bound"
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 5ba0cfa..884dfc4 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -312,6 +312,9 @@
   }
 
   @override
+  bool isTypeParameterType(DartType type) => type is TypeParameterType;
+
+  @override
   DartType tryPromoteToType(DartType to, DartType from) {
     if (isSubtypeOf(to, from)) {
       return to;
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 2bf3ff0..654c67a 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
@@ -179,9 +179,11 @@
 
   final TypeInferenceEngine engine;
 
+  @override
   final FlowAnalysis<TreeNode, Statement, Expression, VariableDeclaration,
       DartType> flowAnalysis;
 
+  @override
   final AssignedVariables<TreeNode, VariableDeclaration> assignedVariables;
 
   final InferenceDataForTesting? dataForTesting;
@@ -198,6 +200,7 @@
 
   final Instrumentation? instrumentation;
 
+  @override
   final TypeSchemaEnvironment typeSchemaEnvironment;
 
   final InterfaceType? thisType;
@@ -224,7 +227,9 @@
         flowAnalysis = library.isNonNullableByDefault
             ? new FlowAnalysis(
                 new TypeOperationsCfe(engine.typeSchemaEnvironment),
-                assignedVariables)
+                assignedVariables,
+                respectImplicitlyTypedVarInitializers:
+                    library.enableConstructorTearOffsInLibrary)
             : new FlowAnalysis.legacy(
                 new TypeOperationsCfe(engine.typeSchemaEnvironment),
                 assignedVariables) {}
@@ -1833,6 +1838,7 @@
   }
 
   /// Modifies a type as appropriate when inferring a declared variable's type.
+  @override
   DartType inferDeclarationType(DartType initializerType,
       {bool forSyntheticVariable: false}) {
     if (initializerType is NullType) {
@@ -1992,6 +1998,7 @@
     return result;
   }
 
+  @override
   ExpressionInferenceResult inferExpression(
       Expression expression, DartType typeContext, bool typeNeeded,
       {bool isVoidAllowed: false, bool forEffect: false}) {
@@ -2355,7 +2362,9 @@
     if (named.length == 2) {
       if (named[0].name == named[1].name) {
         String name = named[1].name;
-        Expression error = helper!.buildProblem(
+        Expression error = helper!.wrapInProblem(
+            _createDuplicateExpression(
+                named[0].fileOffset, named[0].value, named[1].value),
             templateDuplicatedNamedArgument.withArguments(name),
             named[1].fileOffset,
             name.length);
@@ -2373,7 +2382,9 @@
         if (seenNames.containsKey(name)) {
           hasProblem = true;
           NamedExpression prevNamedExpression = seenNames[name]!;
-          prevNamedExpression.value = helper!.buildProblem(
+          prevNamedExpression.value = helper!.wrapInProblem(
+              _createDuplicateExpression(prevNamedExpression.fileOffset,
+                  prevNamedExpression.value, expression.value),
               templateDuplicatedNamedArgument.withArguments(name),
               expression.fileOffset,
               name.length)
@@ -2498,7 +2509,8 @@
     bool hasImplicitReturnType = false;
     if (returnContext == null) {
       hasImplicitReturnType = true;
-      returnContext = const DynamicType();
+      returnContext =
+          isNonNullableByDefault ? const UnknownType() : const DynamicType();
     }
     if (!isTopLevel) {
       List<VariableDeclaration> positionalParameters =
@@ -3225,7 +3237,7 @@
 
     // TODO(johnniwinther): This is inconsistent with the handling below. Remove
     // this or add handling similar to [_inferMethodInvocation].
-    if (receiverType == const DynamicType() && getter is Procedure) {
+    if (receiverType == const DynamicType()) {
       FunctionNode signature = getter.function;
       if (arguments.positional.length < signature.requiredParameterCount ||
           arguments.positional.length > signature.positionalParameters.length) {
@@ -4178,11 +4190,60 @@
     }
   }
 
+  /// Creates an expression the represents the invalid invocation of [name] on
+  /// [receiver] with [arguments].
+  ///
+  /// This is used to ensure that subexpressions of invalid invocations are part
+  /// of the AST using `helper.wrapInProblem`.
+  Expression _createInvalidInvocation(
+      int fileOffset, Expression receiver, Name name, Arguments arguments) {
+    return new DynamicInvocation(
+        DynamicAccessKind.Unresolved, receiver, name, arguments)
+      ..fileOffset = fileOffset;
+  }
+
+  /// Creates an expression the represents the invalid get of [name] on
+  /// [receiver].
+  ///
+  /// This is used to ensure that subexpressions of invalid gets are part
+  /// of the AST using `helper.wrapInProblem`.
+  Expression _createInvalidGet(int fileOffset, Expression receiver, Name name) {
+    return new DynamicGet(DynamicAccessKind.Unresolved, receiver, name)
+      ..fileOffset = fileOffset;
+  }
+
+  /// Creates an expression the represents the invalid set of [name] on
+  /// [receiver] with [value].
+  ///
+  /// This is used to ensure that subexpressions of invalid gets are part
+  /// of the AST using `helper.wrapInProblem`.
+  Expression _createInvalidSet(
+      int fileOffset, Expression receiver, Name name, Expression value) {
+    return new DynamicSet(DynamicAccessKind.Unresolved, receiver, name, value)
+      ..fileOffset = fileOffset;
+  }
+
+  /// Creates an expression the represents a duplicate expression occurring
+  /// for instance as the [first] and [second] occurrence of named arguments
+  /// with the same name.
+  ///
+  /// This is used to ensure that subexpressions of duplicate expressions are
+  /// part of the AST using `helper.wrapInProblem`.
+  Expression _createDuplicateExpression(
+      int fileOffset, Expression first, Expression second) {
+    return new BlockExpression(
+        new Block([new ExpressionStatement(first)..fileOffset = fileOffset])
+          ..fileOffset = fileOffset,
+        second)
+      ..fileOffset = fileOffset;
+  }
+
   Expression _reportMissingOrAmbiguousMember(
       int fileOffset,
       int length,
       DartType receiverType,
       Name name,
+      Expression wrappedExpression,
       List<ExtensionAccessCandidate>? extensionAccessCandidates,
       Template<Message Function(String, DartType, bool)> missingTemplate,
       Template<Message Function(String, DartType, bool)> ambiguousTemplate) {
@@ -4199,7 +4260,8 @@
           .toList();
       template = ambiguousTemplate;
     }
-    return helper!.buildProblem(
+    return helper!.wrapInProblem(
+        wrappedExpression,
         template.withArguments(name.text, resolveTypeParameter(receiverType),
             isNonNullableByDefault),
         fileOffset,
@@ -4219,7 +4281,8 @@
           .createMethodInvocation(fileOffset, receiver, name, arguments);
     } else if (implicitInvocationPropertyName != null) {
       assert(extensionAccessCandidates == null);
-      return helper!.buildProblem(
+      return helper!.wrapInProblem(
+          _createInvalidInvocation(fileOffset, receiver, name, arguments),
           templateInvokeNonFunction
               .withArguments(implicitInvocationPropertyName.text),
           fileOffset,
@@ -4230,6 +4293,7 @@
           isExpressionInvocation ? noLength : name.text.length,
           receiverType,
           name,
+          _createInvalidInvocation(fileOffset, receiver, name, arguments),
           extensionAccessCandidates,
           receiverType is ExtensionType
               ? templateUndefinedExtensionMethod
@@ -4256,6 +4320,7 @@
           propertyName.text.length,
           receiverType,
           propertyName,
+          _createInvalidGet(fileOffset, receiver, propertyName),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionProperty);
@@ -4284,6 +4349,7 @@
           propertyName.text.length,
           receiverType,
           propertyName,
+          _createInvalidSet(fileOffset, receiver, propertyName, value),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionProperty);
@@ -4307,6 +4373,8 @@
           noLength,
           receiverType,
           indexGetName,
+          _createInvalidInvocation(fileOffset, receiver, indexGetName,
+              new Arguments([index])..fileOffset = fileOffset),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionOperator);
@@ -4334,6 +4402,8 @@
           noLength,
           receiverType,
           indexSetName,
+          _createInvalidInvocation(fileOffset, receiver, indexSetName,
+              new Arguments([index, value])..fileOffset = fileOffset),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionOperator);
@@ -4359,6 +4429,8 @@
           binaryName.text.length,
           leftType,
           binaryName,
+          _createInvalidInvocation(fileOffset, left, binaryName,
+              new Arguments([right])..fileOffset = fileOffset),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionOperator);
@@ -4383,6 +4455,8 @@
           unaryName == unaryMinusName ? 1 : unaryName.text.length,
           expressionType,
           unaryName,
+          _createInvalidInvocation(fileOffset, expression, unaryName,
+              new Arguments([])..fileOffset = fileOffset),
           extensionAccessCandidates,
           templateMissing,
           templateAmbiguousExtensionOperator);
@@ -4577,28 +4651,36 @@
 }
 
 class SingleStatementInferenceResult implements StatementInferenceResult {
+  @override
   final Statement statement;
 
   SingleStatementInferenceResult(this.statement);
 
+  @override
   bool get hasChanged => true;
 
+  @override
   int get statementCount => 1;
 
+  @override
   List<Statement> get statements =>
       throw new UnsupportedError('SingleStatementInferenceResult.statements');
 }
 
 class MultipleStatementInferenceResult implements StatementInferenceResult {
   final int fileOffset;
+  @override
   final List<Statement> statements;
 
   MultipleStatementInferenceResult(this.fileOffset, this.statements);
 
+  @override
   bool get hasChanged => true;
 
+  @override
   Statement get statement => new Block(statements)..fileOffset = fileOffset;
 
+  @override
   int get statementCount => statements.length;
 }
 
@@ -4707,6 +4789,7 @@
 
   ExpressionInferenceResult stopShorting() => this;
 
+  @override
   String toString() => 'ExpressionInferenceResult($inferredType,$expression)';
 }
 
@@ -4772,6 +4855,7 @@
       ..fileOffset = _nullAwareFileOffset;
   }
 
+  @override
   String toString() =>
       'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset,'
       '$_nullAwareEquals)';
@@ -4781,9 +4865,11 @@
 /// variable.
 class NullAwareExpressionInferenceResult implements ExpressionInferenceResult {
   /// The inferred type of the expression.
+  @override
   final DartType inferredType;
 
   /// The inferred type of the [nullAwareAction].
+  @override
   final DartType nullAwareActionType;
 
   @override
@@ -4798,12 +4884,14 @@
         // ignore: unnecessary_null_comparison
         assert(nullAwareAction != null);
 
+  @override
   Expression get expression {
     throw new UnsupportedError('Shorting must be explicitly stopped before'
         'accessing the expression result of a '
         'NullAwareExpressionInferenceResult');
   }
 
+  @override
   ExpressionInferenceResult stopShorting() {
     Expression expression = nullAwareAction;
     Link<NullAwareGuard> nullAwareGuard = nullAwareGuards;
@@ -4815,6 +4903,7 @@
     return new ExpressionInferenceResult(inferredType, expression);
   }
 
+  @override
   String toString() =>
       'NullAwareExpressionInferenceResult($inferredType,$nullAwareGuards,'
       '$nullAwareAction)';
@@ -5018,8 +5107,11 @@
 }
 
 class ExtensionAccessTarget extends ObjectAccessTarget {
+  @override
   final Member? tearoffTarget;
+  @override
   final ProcedureKind extensionMethodKind;
+  @override
   final List<DartType> inferredExtensionTypeArguments;
 
   ExtensionAccessTarget(Member member, this.tearoffTarget,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
index 9be3b48..acd6439 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
@@ -47,7 +47,7 @@
             annotator: annotator);
 
   @override
-  defaultDartType(covariant UnknownType node) {
+  void defaultDartType(covariant UnknownType node) {
     writeWord('?');
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index ea946df..3e3ff0b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -84,12 +84,14 @@
 
   TypeConstraint clone() => new TypeConstraint._(lower, upper);
 
+  @override
   String toString() =>
       '${typeSchemaToString(lower)} <: <type> <: ${typeSchemaToString(upper)}';
 }
 
 class TypeSchemaEnvironment extends HierarchyBasedTypeEnvironment
     with TypeSchemaStandardBounds {
+  @override
   final ClassHierarchy hierarchy;
 
   TypeSchemaEnvironment(CoreTypes coreTypes, this.hierarchy)
diff --git a/pkg/front_end/lib/src/fasta/util/bytes_sink.dart b/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
index d945e92..594c553 100644
--- a/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
+++ b/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
@@ -8,10 +8,12 @@
 class BytesSink implements Sink<List<int>> {
   final BytesBuilder builder = new BytesBuilder();
 
+  @override
   void add(List<int> data) {
     builder.add(data);
   }
 
+  @override
   void close() {
     // Nothing to do.
   }
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 d32f428..14d5e17 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
@@ -17,7 +17,9 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
-import 'package:front_end/src/fasta/util/direct_parser_ast_helper.dart';
+import '../source/diet_parser.dart';
+
+import 'direct_parser_ast_helper.dart';
 
 DirectParserASTContentCompilationUnitEnd getAST(List<int> rawBytes,
     {bool includeBody: true,
@@ -51,9 +53,11 @@
   DirectParserASTListener listener = new DirectParserASTListener();
   Parser parser;
   if (includeBody) {
-    parser = new Parser(listener);
+    parser = new Parser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
   } else {
-    parser = new ClassMemberParser(listener);
+    parser = new ClassMemberParser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
   }
   parser.parseUnit(firstToken);
   return listener.data.single as DirectParserASTContentCompilationUnitEnd;
@@ -1148,7 +1152,7 @@
   }
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   File f = new File(args[0]);
   Uint8List data = f.readAsBytesSync();
   DirectParserASTContent ast = getAST(data);
@@ -1181,6 +1185,7 @@
 }
 
 class DirectParserASTListener extends AbstractDirectParserASTListener {
+  @override
   void seen(DirectParserASTContent entry) {
     switch (entry.type) {
       case DirectParserASTType.BEGIN:
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 340943c..1b9883e 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
@@ -4,6 +4,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
@@ -38,6 +39,7 @@
 
   void seen(DirectParserASTContent entry);
 
+  @override
   void beginArguments(Token token) {
     DirectParserASTContentArgumentsBegin data =
         new DirectParserASTContentArgumentsBegin(DirectParserASTType.BEGIN,
@@ -45,6 +47,7 @@
     seen(data);
   }
 
+  @override
   void endArguments(int count, Token beginToken, Token endToken) {
     DirectParserASTContentArgumentsEnd data =
         new DirectParserASTContentArgumentsEnd(DirectParserASTType.END,
@@ -52,6 +55,7 @@
     seen(data);
   }
 
+  @override
   void handleAsyncModifier(Token? asyncToken, Token? starToken) {
     DirectParserASTContentAsyncModifierHandle data =
         new DirectParserASTContentAsyncModifierHandle(
@@ -61,6 +65,7 @@
     seen(data);
   }
 
+  @override
   void beginAwaitExpression(Token token) {
     DirectParserASTContentAwaitExpressionBegin data =
         new DirectParserASTContentAwaitExpressionBegin(
@@ -69,6 +74,7 @@
     seen(data);
   }
 
+  @override
   void endAwaitExpression(Token beginToken, Token endToken) {
     DirectParserASTContentAwaitExpressionEnd data =
         new DirectParserASTContentAwaitExpressionEnd(DirectParserASTType.END,
@@ -76,6 +82,7 @@
     seen(data);
   }
 
+  @override
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
     DirectParserASTContentInvalidAwaitExpressionEnd data =
@@ -87,6 +94,7 @@
     seen(data);
   }
 
+  @override
   void beginBlock(Token token, BlockKind blockKind) {
     DirectParserASTContentBlockBegin data =
         new DirectParserASTContentBlockBegin(DirectParserASTType.BEGIN,
@@ -94,6 +102,7 @@
     seen(data);
   }
 
+  @override
   void endBlock(
       int count, Token beginToken, Token endToken, BlockKind blockKind) {
     DirectParserASTContentBlockEnd data = new DirectParserASTContentBlockEnd(
@@ -105,6 +114,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     DirectParserASTContentInvalidTopLevelBlockHandle data =
         new DirectParserASTContentInvalidTopLevelBlockHandle(
@@ -113,6 +123,7 @@
     seen(data);
   }
 
+  @override
   void beginCascade(Token token) {
     DirectParserASTContentCascadeBegin data =
         new DirectParserASTContentCascadeBegin(DirectParserASTType.BEGIN,
@@ -120,12 +131,14 @@
     seen(data);
   }
 
+  @override
   void endCascade() {
     DirectParserASTContentCascadeEnd data =
         new DirectParserASTContentCascadeEnd(DirectParserASTType.END);
     seen(data);
   }
 
+  @override
   void beginCaseExpression(Token caseKeyword) {
     DirectParserASTContentCaseExpressionBegin data =
         new DirectParserASTContentCaseExpressionBegin(DirectParserASTType.BEGIN,
@@ -133,6 +146,7 @@
     seen(data);
   }
 
+  @override
   void endCaseExpression(Token colon) {
     DirectParserASTContentCaseExpressionEnd data =
         new DirectParserASTContentCaseExpressionEnd(DirectParserASTType.END,
@@ -140,6 +154,7 @@
     seen(data);
   }
 
+  @override
   void beginClassOrMixinBody(DeclarationKind kind, Token token) {
     DirectParserASTContentClassOrMixinBodyBegin data =
         new DirectParserASTContentClassOrMixinBodyBegin(
@@ -149,6 +164,7 @@
     seen(data);
   }
 
+  @override
   void endClassOrMixinBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     DirectParserASTContentClassOrMixinBodyEnd data =
@@ -160,6 +176,7 @@
     seen(data);
   }
 
+  @override
   void beginClassOrNamedMixinApplicationPrelude(Token token) {
     DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin data =
         new DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin(
@@ -168,6 +185,7 @@
     seen(data);
   }
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     DirectParserASTContentClassDeclarationBegin data =
         new DirectParserASTContentClassDeclarationBegin(
@@ -178,6 +196,7 @@
     seen(data);
   }
 
+  @override
   void handleClassExtends(Token? extendsKeyword, int typeCount) {
     DirectParserASTContentClassExtendsHandle data =
         new DirectParserASTContentClassExtendsHandle(DirectParserASTType.HANDLE,
@@ -185,6 +204,7 @@
     seen(data);
   }
 
+  @override
   void handleClassOrMixinImplements(
       Token? implementsKeyword, int interfacesCount) {
     DirectParserASTContentClassOrMixinImplementsHandle data =
@@ -195,6 +215,7 @@
     seen(data);
   }
 
+  @override
   void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
     DirectParserASTContentClassHeaderHandle data =
         new DirectParserASTContentClassHeaderHandle(DirectParserASTType.HANDLE,
@@ -202,6 +223,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverClassHeader() {
     DirectParserASTContentRecoverClassHeaderHandle data =
         new DirectParserASTContentRecoverClassHeaderHandle(
@@ -209,6 +231,7 @@
     seen(data);
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     DirectParserASTContentClassDeclarationEnd data =
         new DirectParserASTContentClassDeclarationEnd(DirectParserASTType.END,
@@ -216,6 +239,7 @@
     seen(data);
   }
 
+  @override
   void beginMixinDeclaration(Token mixinKeyword, Token name) {
     DirectParserASTContentMixinDeclarationBegin data =
         new DirectParserASTContentMixinDeclarationBegin(
@@ -225,6 +249,7 @@
     seen(data);
   }
 
+  @override
   void handleMixinOn(Token? onKeyword, int typeCount) {
     DirectParserASTContentMixinOnHandle data =
         new DirectParserASTContentMixinOnHandle(DirectParserASTType.HANDLE,
@@ -232,6 +257,7 @@
     seen(data);
   }
 
+  @override
   void handleMixinHeader(Token mixinKeyword) {
     DirectParserASTContentMixinHeaderHandle data =
         new DirectParserASTContentMixinHeaderHandle(DirectParserASTType.HANDLE,
@@ -239,6 +265,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverMixinHeader() {
     DirectParserASTContentRecoverMixinHeaderHandle data =
         new DirectParserASTContentRecoverMixinHeaderHandle(
@@ -246,6 +273,7 @@
     seen(data);
   }
 
+  @override
   void endMixinDeclaration(Token mixinKeyword, Token endToken) {
     DirectParserASTContentMixinDeclarationEnd data =
         new DirectParserASTContentMixinDeclarationEnd(DirectParserASTType.END,
@@ -253,6 +281,7 @@
     seen(data);
   }
 
+  @override
   void beginUncategorizedTopLevelDeclaration(Token token) {
     DirectParserASTContentUncategorizedTopLevelDeclarationBegin data =
         new DirectParserASTContentUncategorizedTopLevelDeclarationBegin(
@@ -261,6 +290,7 @@
     seen(data);
   }
 
+  @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     DirectParserASTContentExtensionDeclarationPreludeBegin data =
         new DirectParserASTContentExtensionDeclarationPreludeBegin(
@@ -269,6 +299,7 @@
     seen(data);
   }
 
+  @override
   void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
     DirectParserASTContentExtensionDeclarationBegin data =
         new DirectParserASTContentExtensionDeclarationBegin(
@@ -278,6 +309,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
       Token onKeyword, Token endToken) {
     DirectParserASTContentExtensionDeclarationEnd data =
@@ -290,6 +322,7 @@
     seen(data);
   }
 
+  @override
   void beginCombinators(Token token) {
     DirectParserASTContentCombinatorsBegin data =
         new DirectParserASTContentCombinatorsBegin(DirectParserASTType.BEGIN,
@@ -297,6 +330,7 @@
     seen(data);
   }
 
+  @override
   void endCombinators(int count) {
     DirectParserASTContentCombinatorsEnd data =
         new DirectParserASTContentCombinatorsEnd(DirectParserASTType.END,
@@ -304,6 +338,7 @@
     seen(data);
   }
 
+  @override
   void beginCompilationUnit(Token token) {
     DirectParserASTContentCompilationUnitBegin data =
         new DirectParserASTContentCompilationUnitBegin(
@@ -312,6 +347,7 @@
     seen(data);
   }
 
+  @override
   void handleDirectivesOnly() {
     DirectParserASTContentDirectivesOnlyHandle data =
         new DirectParserASTContentDirectivesOnlyHandle(
@@ -319,6 +355,7 @@
     seen(data);
   }
 
+  @override
   void endCompilationUnit(int count, Token token) {
     DirectParserASTContentCompilationUnitEnd data =
         new DirectParserASTContentCompilationUnitEnd(DirectParserASTType.END,
@@ -326,6 +363,7 @@
     seen(data);
   }
 
+  @override
   void beginConstLiteral(Token token) {
     DirectParserASTContentConstLiteralBegin data =
         new DirectParserASTContentConstLiteralBegin(DirectParserASTType.BEGIN,
@@ -333,6 +371,7 @@
     seen(data);
   }
 
+  @override
   void endConstLiteral(Token token) {
     DirectParserASTContentConstLiteralEnd data =
         new DirectParserASTContentConstLiteralEnd(DirectParserASTType.END,
@@ -340,6 +379,7 @@
     seen(data);
   }
 
+  @override
   void beginConstructorReference(Token start) {
     DirectParserASTContentConstructorReferenceBegin data =
         new DirectParserASTContentConstructorReferenceBegin(
@@ -348,17 +388,20 @@
     seen(data);
   }
 
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  @override
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     DirectParserASTContentConstructorReferenceEnd data =
         new DirectParserASTContentConstructorReferenceEnd(
             DirectParserASTType.END,
             start: start,
             periodBeforeName: periodBeforeName,
-            endToken: endToken);
+            endToken: endToken,
+            constructorReferenceContext: constructorReferenceContext);
     seen(data);
   }
 
+  @override
   void beginDoWhileStatement(Token token) {
     DirectParserASTContentDoWhileStatementBegin data =
         new DirectParserASTContentDoWhileStatementBegin(
@@ -367,6 +410,7 @@
     seen(data);
   }
 
+  @override
   void endDoWhileStatement(
       Token doKeyword, Token whileKeyword, Token endToken) {
     DirectParserASTContentDoWhileStatementEnd data =
@@ -377,6 +421,7 @@
     seen(data);
   }
 
+  @override
   void beginDoWhileStatementBody(Token token) {
     DirectParserASTContentDoWhileStatementBodyBegin data =
         new DirectParserASTContentDoWhileStatementBodyBegin(
@@ -385,6 +430,7 @@
     seen(data);
   }
 
+  @override
   void endDoWhileStatementBody(Token token) {
     DirectParserASTContentDoWhileStatementBodyEnd data =
         new DirectParserASTContentDoWhileStatementBodyEnd(
@@ -393,6 +439,7 @@
     seen(data);
   }
 
+  @override
   void beginWhileStatementBody(Token token) {
     DirectParserASTContentWhileStatementBodyBegin data =
         new DirectParserASTContentWhileStatementBodyBegin(
@@ -401,6 +448,7 @@
     seen(data);
   }
 
+  @override
   void endWhileStatementBody(Token token) {
     DirectParserASTContentWhileStatementBodyEnd data =
         new DirectParserASTContentWhileStatementBodyEnd(DirectParserASTType.END,
@@ -408,6 +456,7 @@
     seen(data);
   }
 
+  @override
   void beginEnum(Token enumKeyword) {
     DirectParserASTContentEnumBegin data = new DirectParserASTContentEnumBegin(
         DirectParserASTType.BEGIN,
@@ -415,6 +464,7 @@
     seen(data);
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     DirectParserASTContentEnumEnd data = new DirectParserASTContentEnumEnd(
         DirectParserASTType.END,
@@ -424,6 +474,7 @@
     seen(data);
   }
 
+  @override
   void beginExport(Token token) {
     DirectParserASTContentExportBegin data =
         new DirectParserASTContentExportBegin(DirectParserASTType.BEGIN,
@@ -431,6 +482,7 @@
     seen(data);
   }
 
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     DirectParserASTContentExportEnd data = new DirectParserASTContentExportEnd(
         DirectParserASTType.END,
@@ -439,6 +491,7 @@
     seen(data);
   }
 
+  @override
   void handleExtraneousExpression(Token token, Message message) {
     DirectParserASTContentExtraneousExpressionHandle data =
         new DirectParserASTContentExtraneousExpressionHandle(
@@ -448,6 +501,7 @@
     seen(data);
   }
 
+  @override
   void handleExpressionStatement(Token token) {
     DirectParserASTContentExpressionStatementHandle data =
         new DirectParserASTContentExpressionStatementHandle(
@@ -456,6 +510,7 @@
     seen(data);
   }
 
+  @override
   void beginFactoryMethod(
       Token lastConsumed, Token? externalToken, Token? constToken) {
     DirectParserASTContentFactoryMethodBegin data =
@@ -466,6 +521,7 @@
     seen(data);
   }
 
+  @override
   void endClassFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentClassFactoryMethodEnd data =
@@ -476,6 +532,7 @@
     seen(data);
   }
 
+  @override
   void endMixinFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentMixinFactoryMethodEnd data =
@@ -486,6 +543,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentExtensionFactoryMethodEnd data =
@@ -497,6 +555,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
       Token? covariantToken, Token? varFinalOrConst) {
     DirectParserASTContentFormalParameterBegin data =
@@ -510,6 +569,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
@@ -530,6 +590,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFormalParameters(Token token, MemberKind kind) {
     DirectParserASTContentNoFormalParametersHandle data =
         new DirectParserASTContentNoFormalParametersHandle(
@@ -539,6 +600,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     DirectParserASTContentFormalParametersBegin data =
         new DirectParserASTContentFormalParametersBegin(
@@ -548,6 +610,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     DirectParserASTContentFormalParametersEnd data =
@@ -559,6 +622,7 @@
     seen(data);
   }
 
+  @override
   void endClassFields(
       Token? abstractToken,
       Token? externalToken,
@@ -583,6 +647,7 @@
     seen(data);
   }
 
+  @override
   void endMixinFields(
       Token? abstractToken,
       Token? externalToken,
@@ -607,6 +672,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionFields(
       Token? abstractToken,
       Token? externalToken,
@@ -631,6 +697,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerEmptyStatement(Token token) {
     DirectParserASTContentForInitializerEmptyStatementHandle data =
         new DirectParserASTContentForInitializerEmptyStatementHandle(
@@ -639,6 +706,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerExpressionStatement(Token token, bool forIn) {
     DirectParserASTContentForInitializerExpressionStatementHandle data =
         new DirectParserASTContentForInitializerExpressionStatementHandle(
@@ -648,6 +716,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
     DirectParserASTContentForInitializerLocalVariableDeclarationHandle data =
         new DirectParserASTContentForInitializerLocalVariableDeclarationHandle(
@@ -657,6 +726,7 @@
     seen(data);
   }
 
+  @override
   void beginForStatement(Token token) {
     DirectParserASTContentForStatementBegin data =
         new DirectParserASTContentForStatementBegin(DirectParserASTType.BEGIN,
@@ -664,6 +734,7 @@
     seen(data);
   }
 
+  @override
   void handleForLoopParts(Token forKeyword, Token leftParen,
       Token leftSeparator, int updateExpressionCount) {
     DirectParserASTContentForLoopPartsHandle data =
@@ -675,6 +746,7 @@
     seen(data);
   }
 
+  @override
   void endForStatement(Token endToken) {
     DirectParserASTContentForStatementEnd data =
         new DirectParserASTContentForStatementEnd(DirectParserASTType.END,
@@ -682,6 +754,7 @@
     seen(data);
   }
 
+  @override
   void beginForStatementBody(Token token) {
     DirectParserASTContentForStatementBodyBegin data =
         new DirectParserASTContentForStatementBodyBegin(
@@ -690,6 +763,7 @@
     seen(data);
   }
 
+  @override
   void endForStatementBody(Token token) {
     DirectParserASTContentForStatementBodyEnd data =
         new DirectParserASTContentForStatementBodyEnd(DirectParserASTType.END,
@@ -697,6 +771,7 @@
     seen(data);
   }
 
+  @override
   void handleForInLoopParts(Token? awaitToken, Token forToken,
       Token leftParenthesis, Token inKeyword) {
     DirectParserASTContentForInLoopPartsHandle data =
@@ -709,6 +784,7 @@
     seen(data);
   }
 
+  @override
   void endForIn(Token endToken) {
     DirectParserASTContentForInEnd data = new DirectParserASTContentForInEnd(
         DirectParserASTType.END,
@@ -716,6 +792,7 @@
     seen(data);
   }
 
+  @override
   void beginForInExpression(Token token) {
     DirectParserASTContentForInExpressionBegin data =
         new DirectParserASTContentForInExpressionBegin(
@@ -724,6 +801,7 @@
     seen(data);
   }
 
+  @override
   void endForInExpression(Token token) {
     DirectParserASTContentForInExpressionEnd data =
         new DirectParserASTContentForInExpressionEnd(DirectParserASTType.END,
@@ -731,6 +809,7 @@
     seen(data);
   }
 
+  @override
   void beginForInBody(Token token) {
     DirectParserASTContentForInBodyBegin data =
         new DirectParserASTContentForInBodyBegin(DirectParserASTType.BEGIN,
@@ -738,6 +817,7 @@
     seen(data);
   }
 
+  @override
   void endForInBody(Token token) {
     DirectParserASTContentForInBodyEnd data =
         new DirectParserASTContentForInBodyEnd(DirectParserASTType.END,
@@ -745,6 +825,7 @@
     seen(data);
   }
 
+  @override
   void beginNamedFunctionExpression(Token token) {
     DirectParserASTContentNamedFunctionExpressionBegin data =
         new DirectParserASTContentNamedFunctionExpressionBegin(
@@ -753,6 +834,7 @@
     seen(data);
   }
 
+  @override
   void endNamedFunctionExpression(Token endToken) {
     DirectParserASTContentNamedFunctionExpressionEnd data =
         new DirectParserASTContentNamedFunctionExpressionEnd(
@@ -761,6 +843,7 @@
     seen(data);
   }
 
+  @override
   void beginLocalFunctionDeclaration(Token token) {
     DirectParserASTContentLocalFunctionDeclarationBegin data =
         new DirectParserASTContentLocalFunctionDeclarationBegin(
@@ -769,6 +852,7 @@
     seen(data);
   }
 
+  @override
   void endLocalFunctionDeclaration(Token endToken) {
     DirectParserASTContentLocalFunctionDeclarationEnd data =
         new DirectParserASTContentLocalFunctionDeclarationEnd(
@@ -777,6 +861,7 @@
     seen(data);
   }
 
+  @override
   void beginBlockFunctionBody(Token token) {
     DirectParserASTContentBlockFunctionBodyBegin data =
         new DirectParserASTContentBlockFunctionBodyBegin(
@@ -785,6 +870,7 @@
     seen(data);
   }
 
+  @override
   void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
     DirectParserASTContentBlockFunctionBodyEnd data =
         new DirectParserASTContentBlockFunctionBodyEnd(DirectParserASTType.END,
@@ -792,6 +878,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFunctionBody(Token token) {
     DirectParserASTContentNoFunctionBodyHandle data =
         new DirectParserASTContentNoFunctionBodyHandle(
@@ -800,6 +887,7 @@
     seen(data);
   }
 
+  @override
   void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
     DirectParserASTContentFunctionBodySkippedHandle data =
         new DirectParserASTContentFunctionBodySkippedHandle(
@@ -809,6 +897,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionName(Token token) {
     DirectParserASTContentFunctionNameBegin data =
         new DirectParserASTContentFunctionNameBegin(DirectParserASTType.BEGIN,
@@ -816,6 +905,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionName(Token beginToken, Token token) {
     DirectParserASTContentFunctionNameEnd data =
         new DirectParserASTContentFunctionNameEnd(DirectParserASTType.END,
@@ -823,6 +913,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionTypeAlias(Token token) {
     DirectParserASTContentFunctionTypeAliasBegin data =
         new DirectParserASTContentFunctionTypeAliasBegin(
@@ -831,6 +922,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     DirectParserASTContentFunctionTypeAliasEnd data =
@@ -839,6 +931,7 @@
     seen(data);
   }
 
+  @override
   void handleClassWithClause(Token withKeyword) {
     DirectParserASTContentClassWithClauseHandle data =
         new DirectParserASTContentClassWithClauseHandle(
@@ -847,6 +940,7 @@
     seen(data);
   }
 
+  @override
   void handleClassNoWithClause() {
     DirectParserASTContentClassNoWithClauseHandle data =
         new DirectParserASTContentClassNoWithClauseHandle(
@@ -854,6 +948,7 @@
     seen(data);
   }
 
+  @override
   void beginNamedMixinApplication(
       Token begin, Token? abstractToken, Token name) {
     DirectParserASTContentNamedMixinApplicationBegin data =
@@ -865,6 +960,7 @@
     seen(data);
   }
 
+  @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     DirectParserASTContentNamedMixinApplicationWithClauseHandle data =
         new DirectParserASTContentNamedMixinApplicationWithClauseHandle(
@@ -873,6 +969,7 @@
     seen(data);
   }
 
+  @override
   void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
       Token? implementsKeyword, Token endToken) {
     DirectParserASTContentNamedMixinApplicationEnd data =
@@ -886,6 +983,7 @@
     seen(data);
   }
 
+  @override
   void beginHide(Token hideKeyword) {
     DirectParserASTContentHideBegin data = new DirectParserASTContentHideBegin(
         DirectParserASTType.BEGIN,
@@ -893,6 +991,7 @@
     seen(data);
   }
 
+  @override
   void endHide(Token hideKeyword) {
     DirectParserASTContentHideEnd data = new DirectParserASTContentHideEnd(
         DirectParserASTType.END,
@@ -900,6 +999,7 @@
     seen(data);
   }
 
+  @override
   void handleIdentifierList(int count) {
     DirectParserASTContentIdentifierListHandle data =
         new DirectParserASTContentIdentifierListHandle(
@@ -908,6 +1008,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeList(Token token) {
     DirectParserASTContentTypeListBegin data =
         new DirectParserASTContentTypeListBegin(DirectParserASTType.BEGIN,
@@ -915,6 +1016,7 @@
     seen(data);
   }
 
+  @override
   void endTypeList(int count) {
     DirectParserASTContentTypeListEnd data =
         new DirectParserASTContentTypeListEnd(DirectParserASTType.END,
@@ -922,6 +1024,7 @@
     seen(data);
   }
 
+  @override
   void beginIfStatement(Token token) {
     DirectParserASTContentIfStatementBegin data =
         new DirectParserASTContentIfStatementBegin(DirectParserASTType.BEGIN,
@@ -929,6 +1032,7 @@
     seen(data);
   }
 
+  @override
   void endIfStatement(Token ifToken, Token? elseToken) {
     DirectParserASTContentIfStatementEnd data =
         new DirectParserASTContentIfStatementEnd(DirectParserASTType.END,
@@ -936,6 +1040,7 @@
     seen(data);
   }
 
+  @override
   void beginThenStatement(Token token) {
     DirectParserASTContentThenStatementBegin data =
         new DirectParserASTContentThenStatementBegin(DirectParserASTType.BEGIN,
@@ -943,6 +1048,7 @@
     seen(data);
   }
 
+  @override
   void endThenStatement(Token token) {
     DirectParserASTContentThenStatementEnd data =
         new DirectParserASTContentThenStatementEnd(DirectParserASTType.END,
@@ -950,6 +1056,7 @@
     seen(data);
   }
 
+  @override
   void beginElseStatement(Token token) {
     DirectParserASTContentElseStatementBegin data =
         new DirectParserASTContentElseStatementBegin(DirectParserASTType.BEGIN,
@@ -957,6 +1064,7 @@
     seen(data);
   }
 
+  @override
   void endElseStatement(Token token) {
     DirectParserASTContentElseStatementEnd data =
         new DirectParserASTContentElseStatementEnd(DirectParserASTType.END,
@@ -964,6 +1072,7 @@
     seen(data);
   }
 
+  @override
   void beginImport(Token importKeyword) {
     DirectParserASTContentImportBegin data =
         new DirectParserASTContentImportBegin(DirectParserASTType.BEGIN,
@@ -971,6 +1080,7 @@
     seen(data);
   }
 
+  @override
   void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
     DirectParserASTContentImportPrefixHandle data =
         new DirectParserASTContentImportPrefixHandle(DirectParserASTType.HANDLE,
@@ -978,6 +1088,7 @@
     seen(data);
   }
 
+  @override
   void endImport(Token importKeyword, Token? semicolon) {
     DirectParserASTContentImportEnd data = new DirectParserASTContentImportEnd(
         DirectParserASTType.END,
@@ -986,6 +1097,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverImport(Token? semicolon) {
     DirectParserASTContentRecoverImportHandle data =
         new DirectParserASTContentRecoverImportHandle(
@@ -994,6 +1106,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalUris(Token token) {
     DirectParserASTContentConditionalUrisBegin data =
         new DirectParserASTContentConditionalUrisBegin(
@@ -1002,6 +1115,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalUris(int count) {
     DirectParserASTContentConditionalUrisEnd data =
         new DirectParserASTContentConditionalUrisEnd(DirectParserASTType.END,
@@ -1009,6 +1123,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalUri(Token ifKeyword) {
     DirectParserASTContentConditionalUriBegin data =
         new DirectParserASTContentConditionalUriBegin(DirectParserASTType.BEGIN,
@@ -1016,6 +1131,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
     DirectParserASTContentConditionalUriEnd data =
         new DirectParserASTContentConditionalUriEnd(DirectParserASTType.END,
@@ -1023,6 +1139,7 @@
     seen(data);
   }
 
+  @override
   void handleDottedName(int count, Token firstIdentifier) {
     DirectParserASTContentDottedNameHandle data =
         new DirectParserASTContentDottedNameHandle(DirectParserASTType.HANDLE,
@@ -1030,6 +1147,7 @@
     seen(data);
   }
 
+  @override
   void beginImplicitCreationExpression(Token token) {
     DirectParserASTContentImplicitCreationExpressionBegin data =
         new DirectParserASTContentImplicitCreationExpressionBegin(
@@ -1038,6 +1156,7 @@
     seen(data);
   }
 
+  @override
   void endImplicitCreationExpression(Token token) {
     DirectParserASTContentImplicitCreationExpressionEnd data =
         new DirectParserASTContentImplicitCreationExpressionEnd(
@@ -1046,6 +1165,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializedIdentifier(Token token) {
     DirectParserASTContentInitializedIdentifierBegin data =
         new DirectParserASTContentInitializedIdentifierBegin(
@@ -1054,6 +1174,7 @@
     seen(data);
   }
 
+  @override
   void endInitializedIdentifier(Token nameToken) {
     DirectParserASTContentInitializedIdentifierEnd data =
         new DirectParserASTContentInitializedIdentifierEnd(
@@ -1062,6 +1183,7 @@
     seen(data);
   }
 
+  @override
   void beginFieldInitializer(Token token) {
     DirectParserASTContentFieldInitializerBegin data =
         new DirectParserASTContentFieldInitializerBegin(
@@ -1070,6 +1192,7 @@
     seen(data);
   }
 
+  @override
   void endFieldInitializer(Token assignment, Token token) {
     DirectParserASTContentFieldInitializerEnd data =
         new DirectParserASTContentFieldInitializerEnd(DirectParserASTType.END,
@@ -1077,6 +1200,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFieldInitializer(Token token) {
     DirectParserASTContentNoFieldInitializerHandle data =
         new DirectParserASTContentNoFieldInitializerHandle(
@@ -1085,6 +1209,7 @@
     seen(data);
   }
 
+  @override
   void beginVariableInitializer(Token token) {
     DirectParserASTContentVariableInitializerBegin data =
         new DirectParserASTContentVariableInitializerBegin(
@@ -1093,6 +1218,7 @@
     seen(data);
   }
 
+  @override
   void endVariableInitializer(Token assignmentOperator) {
     DirectParserASTContentVariableInitializerEnd data =
         new DirectParserASTContentVariableInitializerEnd(
@@ -1101,6 +1227,7 @@
     seen(data);
   }
 
+  @override
   void handleNoVariableInitializer(Token token) {
     DirectParserASTContentNoVariableInitializerHandle data =
         new DirectParserASTContentNoVariableInitializerHandle(
@@ -1109,6 +1236,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializer(Token token) {
     DirectParserASTContentInitializerBegin data =
         new DirectParserASTContentInitializerBegin(DirectParserASTType.BEGIN,
@@ -1116,6 +1244,7 @@
     seen(data);
   }
 
+  @override
   void endInitializer(Token token) {
     DirectParserASTContentInitializerEnd data =
         new DirectParserASTContentInitializerEnd(DirectParserASTType.END,
@@ -1123,6 +1252,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializers(Token token) {
     DirectParserASTContentInitializersBegin data =
         new DirectParserASTContentInitializersBegin(DirectParserASTType.BEGIN,
@@ -1130,6 +1260,7 @@
     seen(data);
   }
 
+  @override
   void endInitializers(int count, Token beginToken, Token endToken) {
     DirectParserASTContentInitializersEnd data =
         new DirectParserASTContentInitializersEnd(DirectParserASTType.END,
@@ -1137,6 +1268,7 @@
     seen(data);
   }
 
+  @override
   void handleNoInitializers() {
     DirectParserASTContentNoInitializersHandle data =
         new DirectParserASTContentNoInitializersHandle(
@@ -1144,6 +1276,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidExpression(Token token) {
     DirectParserASTContentInvalidExpressionHandle data =
         new DirectParserASTContentInvalidExpressionHandle(
@@ -1152,6 +1285,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidFunctionBody(Token token) {
     DirectParserASTContentInvalidFunctionBodyHandle data =
         new DirectParserASTContentInvalidFunctionBodyHandle(
@@ -1160,6 +1294,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTypeReference(Token token) {
     DirectParserASTContentInvalidTypeReferenceHandle data =
         new DirectParserASTContentInvalidTypeReferenceHandle(
@@ -1168,6 +1303,7 @@
     seen(data);
   }
 
+  @override
   void handleLabel(Token token) {
     DirectParserASTContentLabelHandle data =
         new DirectParserASTContentLabelHandle(DirectParserASTType.HANDLE,
@@ -1175,6 +1311,7 @@
     seen(data);
   }
 
+  @override
   void beginLabeledStatement(Token token, int labelCount) {
     DirectParserASTContentLabeledStatementBegin data =
         new DirectParserASTContentLabeledStatementBegin(
@@ -1184,6 +1321,7 @@
     seen(data);
   }
 
+  @override
   void endLabeledStatement(int labelCount) {
     DirectParserASTContentLabeledStatementEnd data =
         new DirectParserASTContentLabeledStatementEnd(DirectParserASTType.END,
@@ -1191,6 +1329,7 @@
     seen(data);
   }
 
+  @override
   void beginLibraryName(Token token) {
     DirectParserASTContentLibraryNameBegin data =
         new DirectParserASTContentLibraryNameBegin(DirectParserASTType.BEGIN,
@@ -1198,6 +1337,7 @@
     seen(data);
   }
 
+  @override
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     DirectParserASTContentLibraryNameEnd data =
         new DirectParserASTContentLibraryNameEnd(DirectParserASTType.END,
@@ -1205,6 +1345,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralMapEntry(Token colon, Token endToken) {
     DirectParserASTContentLiteralMapEntryHandle data =
         new DirectParserASTContentLiteralMapEntryHandle(
@@ -1214,6 +1355,7 @@
     seen(data);
   }
 
+  @override
   void beginLiteralString(Token token) {
     DirectParserASTContentLiteralStringBegin data =
         new DirectParserASTContentLiteralStringBegin(DirectParserASTType.BEGIN,
@@ -1221,6 +1363,7 @@
     seen(data);
   }
 
+  @override
   void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
     DirectParserASTContentInterpolationExpressionHandle data =
         new DirectParserASTContentInterpolationExpressionHandle(
@@ -1230,6 +1373,7 @@
     seen(data);
   }
 
+  @override
   void endLiteralString(int interpolationCount, Token endToken) {
     DirectParserASTContentLiteralStringEnd data =
         new DirectParserASTContentLiteralStringEnd(DirectParserASTType.END,
@@ -1237,6 +1381,7 @@
     seen(data);
   }
 
+  @override
   void handleStringJuxtaposition(Token startToken, int literalCount) {
     DirectParserASTContentStringJuxtapositionHandle data =
         new DirectParserASTContentStringJuxtapositionHandle(
@@ -1246,12 +1391,14 @@
     seen(data);
   }
 
+  @override
   void beginMember() {
     DirectParserASTContentMemberBegin data =
         new DirectParserASTContentMemberBegin(DirectParserASTType.BEGIN);
     seen(data);
   }
 
+  @override
   void handleInvalidMember(Token endToken) {
     DirectParserASTContentInvalidMemberHandle data =
         new DirectParserASTContentInvalidMemberHandle(
@@ -1260,12 +1407,14 @@
     seen(data);
   }
 
+  @override
   void endMember() {
     DirectParserASTContentMemberEnd data =
         new DirectParserASTContentMemberEnd(DirectParserASTType.END);
     seen(data);
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -1284,6 +1433,7 @@
     seen(data);
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentClassMethodEnd data =
@@ -1296,6 +1446,7 @@
     seen(data);
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentMixinMethodEnd data =
@@ -1308,6 +1459,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentExtensionMethodEnd data =
@@ -1320,6 +1472,7 @@
     seen(data);
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentClassConstructorEnd data =
@@ -1332,6 +1485,7 @@
     seen(data);
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentMixinConstructorEnd data =
@@ -1344,6 +1498,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     DirectParserASTContentExtensionConstructorEnd data =
@@ -1357,6 +1512,7 @@
     seen(data);
   }
 
+  @override
   void beginMetadataStar(Token token) {
     DirectParserASTContentMetadataStarBegin data =
         new DirectParserASTContentMetadataStarBegin(DirectParserASTType.BEGIN,
@@ -1364,6 +1520,7 @@
     seen(data);
   }
 
+  @override
   void endMetadataStar(int count) {
     DirectParserASTContentMetadataStarEnd data =
         new DirectParserASTContentMetadataStarEnd(DirectParserASTType.END,
@@ -1371,6 +1528,7 @@
     seen(data);
   }
 
+  @override
   void beginMetadata(Token token) {
     DirectParserASTContentMetadataBegin data =
         new DirectParserASTContentMetadataBegin(DirectParserASTType.BEGIN,
@@ -1378,6 +1536,7 @@
     seen(data);
   }
 
+  @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
     DirectParserASTContentMetadataEnd data =
         new DirectParserASTContentMetadataEnd(DirectParserASTType.END,
@@ -1387,6 +1546,7 @@
     seen(data);
   }
 
+  @override
   void beginOptionalFormalParameters(Token token) {
     DirectParserASTContentOptionalFormalParametersBegin data =
         new DirectParserASTContentOptionalFormalParametersBegin(
@@ -1395,6 +1555,7 @@
     seen(data);
   }
 
+  @override
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     DirectParserASTContentOptionalFormalParametersEnd data =
@@ -1406,6 +1567,7 @@
     seen(data);
   }
 
+  @override
   void beginPart(Token token) {
     DirectParserASTContentPartBegin data = new DirectParserASTContentPartBegin(
         DirectParserASTType.BEGIN,
@@ -1413,6 +1575,7 @@
     seen(data);
   }
 
+  @override
   void endPart(Token partKeyword, Token semicolon) {
     DirectParserASTContentPartEnd data = new DirectParserASTContentPartEnd(
         DirectParserASTType.END,
@@ -1421,6 +1584,7 @@
     seen(data);
   }
 
+  @override
   void beginPartOf(Token token) {
     DirectParserASTContentPartOfBegin data =
         new DirectParserASTContentPartOfBegin(DirectParserASTType.BEGIN,
@@ -1428,6 +1592,7 @@
     seen(data);
   }
 
+  @override
   void endPartOf(
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     DirectParserASTContentPartOfEnd data = new DirectParserASTContentPartOfEnd(
@@ -1439,6 +1604,7 @@
     seen(data);
   }
 
+  @override
   void beginRedirectingFactoryBody(Token token) {
     DirectParserASTContentRedirectingFactoryBodyBegin data =
         new DirectParserASTContentRedirectingFactoryBodyBegin(
@@ -1447,6 +1613,7 @@
     seen(data);
   }
 
+  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     DirectParserASTContentRedirectingFactoryBodyEnd data =
         new DirectParserASTContentRedirectingFactoryBodyEnd(
@@ -1456,6 +1623,7 @@
     seen(data);
   }
 
+  @override
   void beginReturnStatement(Token token) {
     DirectParserASTContentReturnStatementBegin data =
         new DirectParserASTContentReturnStatementBegin(
@@ -1464,6 +1632,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodyHandle data =
         new DirectParserASTContentNativeFunctionBodyHandle(
@@ -1473,6 +1642,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodyIgnoredHandle data =
         new DirectParserASTContentNativeFunctionBodyIgnoredHandle(
@@ -1482,6 +1652,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodySkippedHandle data =
         new DirectParserASTContentNativeFunctionBodySkippedHandle(
@@ -1491,6 +1662,7 @@
     seen(data);
   }
 
+  @override
   void handleEmptyFunctionBody(Token semicolon) {
     DirectParserASTContentEmptyFunctionBodyHandle data =
         new DirectParserASTContentEmptyFunctionBodyHandle(
@@ -1499,6 +1671,7 @@
     seen(data);
   }
 
+  @override
   void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
     DirectParserASTContentExpressionFunctionBodyHandle data =
         new DirectParserASTContentExpressionFunctionBodyHandle(
@@ -1508,6 +1681,7 @@
     seen(data);
   }
 
+  @override
   void endReturnStatement(
       bool hasExpression, Token beginToken, Token endToken) {
     DirectParserASTContentReturnStatementEnd data =
@@ -1518,6 +1692,7 @@
     seen(data);
   }
 
+  @override
   void handleSend(Token beginToken, Token endToken) {
     DirectParserASTContentSendHandle data =
         new DirectParserASTContentSendHandle(DirectParserASTType.HANDLE,
@@ -1525,6 +1700,7 @@
     seen(data);
   }
 
+  @override
   void beginShow(Token showKeyword) {
     DirectParserASTContentShowBegin data = new DirectParserASTContentShowBegin(
         DirectParserASTType.BEGIN,
@@ -1532,6 +1708,7 @@
     seen(data);
   }
 
+  @override
   void endShow(Token showKeyword) {
     DirectParserASTContentShowEnd data = new DirectParserASTContentShowEnd(
         DirectParserASTType.END,
@@ -1539,6 +1716,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchStatement(Token token) {
     DirectParserASTContentSwitchStatementBegin data =
         new DirectParserASTContentSwitchStatementBegin(
@@ -1547,6 +1725,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchStatement(Token switchKeyword, Token endToken) {
     DirectParserASTContentSwitchStatementEnd data =
         new DirectParserASTContentSwitchStatementEnd(DirectParserASTType.END,
@@ -1554,6 +1733,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchBlock(Token token) {
     DirectParserASTContentSwitchBlockBegin data =
         new DirectParserASTContentSwitchBlockBegin(DirectParserASTType.BEGIN,
@@ -1561,6 +1741,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
     DirectParserASTContentSwitchBlockEnd data =
         new DirectParserASTContentSwitchBlockEnd(DirectParserASTType.END,
@@ -1568,6 +1749,7 @@
     seen(data);
   }
 
+  @override
   void beginLiteralSymbol(Token token) {
     DirectParserASTContentLiteralSymbolBegin data =
         new DirectParserASTContentLiteralSymbolBegin(DirectParserASTType.BEGIN,
@@ -1575,6 +1757,7 @@
     seen(data);
   }
 
+  @override
   void endLiteralSymbol(Token hashToken, int identifierCount) {
     DirectParserASTContentLiteralSymbolEnd data =
         new DirectParserASTContentLiteralSymbolEnd(DirectParserASTType.END,
@@ -1582,6 +1765,7 @@
     seen(data);
   }
 
+  @override
   void handleThrowExpression(Token throwToken, Token endToken) {
     DirectParserASTContentThrowExpressionHandle data =
         new DirectParserASTContentThrowExpressionHandle(
@@ -1591,6 +1775,7 @@
     seen(data);
   }
 
+  @override
   void beginRethrowStatement(Token token) {
     DirectParserASTContentRethrowStatementBegin data =
         new DirectParserASTContentRethrowStatementBegin(
@@ -1599,6 +1784,7 @@
     seen(data);
   }
 
+  @override
   void endRethrowStatement(Token rethrowToken, Token endToken) {
     DirectParserASTContentRethrowStatementEnd data =
         new DirectParserASTContentRethrowStatementEnd(DirectParserASTType.END,
@@ -1606,6 +1792,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelDeclaration(Token nextToken) {
     DirectParserASTContentTopLevelDeclarationEnd data =
         new DirectParserASTContentTopLevelDeclarationEnd(
@@ -1614,6 +1801,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     DirectParserASTContentInvalidTopLevelDeclarationHandle data =
         new DirectParserASTContentInvalidTopLevelDeclarationHandle(
@@ -1622,6 +1810,7 @@
     seen(data);
   }
 
+  @override
   void beginTopLevelMember(Token token) {
     DirectParserASTContentTopLevelMemberBegin data =
         new DirectParserASTContentTopLevelMemberBegin(DirectParserASTType.BEGIN,
@@ -1629,6 +1818,7 @@
     seen(data);
   }
 
+  @override
   void beginFields(Token lastConsumed) {
     DirectParserASTContentFieldsBegin data =
         new DirectParserASTContentFieldsBegin(DirectParserASTType.BEGIN,
@@ -1636,6 +1826,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelFields(
       Token? externalToken,
       Token? staticToken,
@@ -1658,6 +1849,7 @@
     seen(data);
   }
 
+  @override
   void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
     DirectParserASTContentTopLevelMethodBegin data =
         new DirectParserASTContentTopLevelMethodBegin(DirectParserASTType.BEGIN,
@@ -1665,6 +1857,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
     DirectParserASTContentTopLevelMethodEnd data =
         new DirectParserASTContentTopLevelMethodEnd(DirectParserASTType.END,
@@ -1672,6 +1865,7 @@
     seen(data);
   }
 
+  @override
   void beginTryStatement(Token token) {
     DirectParserASTContentTryStatementBegin data =
         new DirectParserASTContentTryStatementBegin(DirectParserASTType.BEGIN,
@@ -1679,6 +1873,7 @@
     seen(data);
   }
 
+  @override
   void handleCaseMatch(Token caseKeyword, Token colon) {
     DirectParserASTContentCaseMatchHandle data =
         new DirectParserASTContentCaseMatchHandle(DirectParserASTType.HANDLE,
@@ -1686,6 +1881,7 @@
     seen(data);
   }
 
+  @override
   void beginCatchClause(Token token) {
     DirectParserASTContentCatchClauseBegin data =
         new DirectParserASTContentCatchClauseBegin(DirectParserASTType.BEGIN,
@@ -1693,6 +1889,7 @@
     seen(data);
   }
 
+  @override
   void endCatchClause(Token token) {
     DirectParserASTContentCatchClauseEnd data =
         new DirectParserASTContentCatchClauseEnd(DirectParserASTType.END,
@@ -1700,6 +1897,7 @@
     seen(data);
   }
 
+  @override
   void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
     DirectParserASTContentCatchBlockHandle data =
         new DirectParserASTContentCatchBlockHandle(DirectParserASTType.HANDLE,
@@ -1707,6 +1905,7 @@
     seen(data);
   }
 
+  @override
   void handleFinallyBlock(Token finallyKeyword) {
     DirectParserASTContentFinallyBlockHandle data =
         new DirectParserASTContentFinallyBlockHandle(DirectParserASTType.HANDLE,
@@ -1714,6 +1913,7 @@
     seen(data);
   }
 
+  @override
   void endTryStatement(
       int catchCount, Token tryKeyword, Token? finallyKeyword) {
     DirectParserASTContentTryStatementEnd data =
@@ -1724,6 +1924,7 @@
     seen(data);
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     DirectParserASTContentTypeHandle data =
         new DirectParserASTContentTypeHandle(DirectParserASTType.HANDLE,
@@ -1731,6 +1932,7 @@
     seen(data);
   }
 
+  @override
   void handleNonNullAssertExpression(Token bang) {
     DirectParserASTContentNonNullAssertExpressionHandle data =
         new DirectParserASTContentNonNullAssertExpressionHandle(
@@ -1739,6 +1941,7 @@
     seen(data);
   }
 
+  @override
   void handleNoName(Token token) {
     DirectParserASTContentNoNameHandle data =
         new DirectParserASTContentNoNameHandle(DirectParserASTType.HANDLE,
@@ -1746,6 +1949,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionType(Token beginToken) {
     DirectParserASTContentFunctionTypeBegin data =
         new DirectParserASTContentFunctionTypeBegin(DirectParserASTType.BEGIN,
@@ -1753,6 +1957,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionType(Token functionToken, Token? questionMark) {
     DirectParserASTContentFunctionTypeEnd data =
         new DirectParserASTContentFunctionTypeEnd(DirectParserASTType.END,
@@ -1760,6 +1965,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeArguments(Token token) {
     DirectParserASTContentTypeArgumentsBegin data =
         new DirectParserASTContentTypeArgumentsBegin(DirectParserASTType.BEGIN,
@@ -1767,6 +1973,7 @@
     seen(data);
   }
 
+  @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     DirectParserASTContentTypeArgumentsEnd data =
         new DirectParserASTContentTypeArgumentsEnd(DirectParserASTType.END,
@@ -1774,6 +1981,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTypeArguments(Token token) {
     DirectParserASTContentInvalidTypeArgumentsHandle data =
         new DirectParserASTContentInvalidTypeArgumentsHandle(
@@ -1782,6 +1990,7 @@
     seen(data);
   }
 
+  @override
   void handleNoTypeArguments(Token token) {
     DirectParserASTContentNoTypeArgumentsHandle data =
         new DirectParserASTContentNoTypeArgumentsHandle(
@@ -1790,6 +1999,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeVariable(Token token) {
     DirectParserASTContentTypeVariableBegin data =
         new DirectParserASTContentTypeVariableBegin(DirectParserASTType.BEGIN,
@@ -1797,6 +2007,7 @@
     seen(data);
   }
 
+  @override
   void handleTypeVariablesDefined(Token token, int count) {
     DirectParserASTContentTypeVariablesDefinedHandle data =
         new DirectParserASTContentTypeVariablesDefinedHandle(
@@ -1806,6 +2017,7 @@
     seen(data);
   }
 
+  @override
   void endTypeVariable(
       Token token, int index, Token? extendsOrSuper, Token? variance) {
     DirectParserASTContentTypeVariableEnd data =
@@ -1817,6 +2029,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeVariables(Token token) {
     DirectParserASTContentTypeVariablesBegin data =
         new DirectParserASTContentTypeVariablesBegin(DirectParserASTType.BEGIN,
@@ -1824,6 +2037,7 @@
     seen(data);
   }
 
+  @override
   void endTypeVariables(Token beginToken, Token endToken) {
     DirectParserASTContentTypeVariablesEnd data =
         new DirectParserASTContentTypeVariablesEnd(DirectParserASTType.END,
@@ -1831,6 +2045,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionExpression(Token token) {
     DirectParserASTContentFunctionExpressionBegin data =
         new DirectParserASTContentFunctionExpressionBegin(
@@ -1839,6 +2054,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionExpression(Token beginToken, Token token) {
     DirectParserASTContentFunctionExpressionEnd data =
         new DirectParserASTContentFunctionExpressionEnd(DirectParserASTType.END,
@@ -1846,6 +2062,7 @@
     seen(data);
   }
 
+  @override
   void beginVariablesDeclaration(
       Token token, Token? lateToken, Token? varFinalOrConst) {
     DirectParserASTContentVariablesDeclarationBegin data =
@@ -1857,6 +2074,7 @@
     seen(data);
   }
 
+  @override
   void endVariablesDeclaration(int count, Token? endToken) {
     DirectParserASTContentVariablesDeclarationEnd data =
         new DirectParserASTContentVariablesDeclarationEnd(
@@ -1866,6 +2084,7 @@
     seen(data);
   }
 
+  @override
   void beginWhileStatement(Token token) {
     DirectParserASTContentWhileStatementBegin data =
         new DirectParserASTContentWhileStatementBegin(DirectParserASTType.BEGIN,
@@ -1873,6 +2092,7 @@
     seen(data);
   }
 
+  @override
   void endWhileStatement(Token whileKeyword, Token endToken) {
     DirectParserASTContentWhileStatementEnd data =
         new DirectParserASTContentWhileStatementEnd(DirectParserASTType.END,
@@ -1880,6 +2100,7 @@
     seen(data);
   }
 
+  @override
   void beginAsOperatorType(Token operator) {
     DirectParserASTContentAsOperatorTypeBegin data =
         new DirectParserASTContentAsOperatorTypeBegin(DirectParserASTType.BEGIN,
@@ -1887,6 +2108,7 @@
     seen(data);
   }
 
+  @override
   void endAsOperatorType(Token operator) {
     DirectParserASTContentAsOperatorTypeEnd data =
         new DirectParserASTContentAsOperatorTypeEnd(DirectParserASTType.END,
@@ -1894,6 +2116,7 @@
     seen(data);
   }
 
+  @override
   void handleAsOperator(Token operator) {
     DirectParserASTContentAsOperatorHandle data =
         new DirectParserASTContentAsOperatorHandle(DirectParserASTType.HANDLE,
@@ -1901,6 +2124,7 @@
     seen(data);
   }
 
+  @override
   void handleAssignmentExpression(Token token) {
     DirectParserASTContentAssignmentExpressionHandle data =
         new DirectParserASTContentAssignmentExpressionHandle(
@@ -1909,6 +2133,7 @@
     seen(data);
   }
 
+  @override
   void beginBinaryExpression(Token token) {
     DirectParserASTContentBinaryExpressionBegin data =
         new DirectParserASTContentBinaryExpressionBegin(
@@ -1917,6 +2142,7 @@
     seen(data);
   }
 
+  @override
   void endBinaryExpression(Token token) {
     DirectParserASTContentBinaryExpressionEnd data =
         new DirectParserASTContentBinaryExpressionEnd(DirectParserASTType.END,
@@ -1924,6 +2150,7 @@
     seen(data);
   }
 
+  @override
   void handleEndingBinaryExpression(Token token) {
     DirectParserASTContentEndingBinaryExpressionHandle data =
         new DirectParserASTContentEndingBinaryExpressionHandle(
@@ -1932,6 +2159,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalExpression(Token question) {
     DirectParserASTContentConditionalExpressionBegin data =
         new DirectParserASTContentConditionalExpressionBegin(
@@ -1940,6 +2168,7 @@
     seen(data);
   }
 
+  @override
   void handleConditionalExpressionColon() {
     DirectParserASTContentConditionalExpressionColonHandle data =
         new DirectParserASTContentConditionalExpressionColonHandle(
@@ -1947,6 +2176,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalExpression(Token question, Token colon) {
     DirectParserASTContentConditionalExpressionEnd data =
         new DirectParserASTContentConditionalExpressionEnd(
@@ -1956,6 +2186,7 @@
     seen(data);
   }
 
+  @override
   void beginConstExpression(Token constKeyword) {
     DirectParserASTContentConstExpressionBegin data =
         new DirectParserASTContentConstExpressionBegin(
@@ -1964,6 +2195,7 @@
     seen(data);
   }
 
+  @override
   void endConstExpression(Token token) {
     DirectParserASTContentConstExpressionEnd data =
         new DirectParserASTContentConstExpressionEnd(DirectParserASTType.END,
@@ -1971,6 +2203,7 @@
     seen(data);
   }
 
+  @override
   void handleConstFactory(Token constKeyword) {
     DirectParserASTContentConstFactoryHandle data =
         new DirectParserASTContentConstFactoryHandle(DirectParserASTType.HANDLE,
@@ -1978,6 +2211,7 @@
     seen(data);
   }
 
+  @override
   void beginForControlFlow(Token? awaitToken, Token forToken) {
     DirectParserASTContentForControlFlowBegin data =
         new DirectParserASTContentForControlFlowBegin(DirectParserASTType.BEGIN,
@@ -1985,6 +2219,7 @@
     seen(data);
   }
 
+  @override
   void endForControlFlow(Token token) {
     DirectParserASTContentForControlFlowEnd data =
         new DirectParserASTContentForControlFlowEnd(DirectParserASTType.END,
@@ -1992,6 +2227,7 @@
     seen(data);
   }
 
+  @override
   void endForInControlFlow(Token token) {
     DirectParserASTContentForInControlFlowEnd data =
         new DirectParserASTContentForInControlFlowEnd(DirectParserASTType.END,
@@ -1999,6 +2235,7 @@
     seen(data);
   }
 
+  @override
   void beginIfControlFlow(Token ifToken) {
     DirectParserASTContentIfControlFlowBegin data =
         new DirectParserASTContentIfControlFlowBegin(DirectParserASTType.BEGIN,
@@ -2006,6 +2243,7 @@
     seen(data);
   }
 
+  @override
   void handleThenControlFlow(Token token) {
     DirectParserASTContentThenControlFlowHandle data =
         new DirectParserASTContentThenControlFlowHandle(
@@ -2014,6 +2252,7 @@
     seen(data);
   }
 
+  @override
   void handleElseControlFlow(Token elseToken) {
     DirectParserASTContentElseControlFlowHandle data =
         new DirectParserASTContentElseControlFlowHandle(
@@ -2022,6 +2261,7 @@
     seen(data);
   }
 
+  @override
   void endIfControlFlow(Token token) {
     DirectParserASTContentIfControlFlowEnd data =
         new DirectParserASTContentIfControlFlowEnd(DirectParserASTType.END,
@@ -2029,6 +2269,7 @@
     seen(data);
   }
 
+  @override
   void endIfElseControlFlow(Token token) {
     DirectParserASTContentIfElseControlFlowEnd data =
         new DirectParserASTContentIfElseControlFlowEnd(DirectParserASTType.END,
@@ -2036,6 +2277,7 @@
     seen(data);
   }
 
+  @override
   void handleSpreadExpression(Token spreadToken) {
     DirectParserASTContentSpreadExpressionHandle data =
         new DirectParserASTContentSpreadExpressionHandle(
@@ -2044,6 +2286,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionTypedFormalParameter(Token token) {
     DirectParserASTContentFunctionTypedFormalParameterBegin data =
         new DirectParserASTContentFunctionTypedFormalParameterBegin(
@@ -2052,6 +2295,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     DirectParserASTContentFunctionTypedFormalParameterEnd data =
         new DirectParserASTContentFunctionTypedFormalParameterEnd(
@@ -2061,6 +2305,7 @@
     seen(data);
   }
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     DirectParserASTContentIdentifierHandle data =
         new DirectParserASTContentIdentifierHandle(DirectParserASTType.HANDLE,
@@ -2068,6 +2313,7 @@
     seen(data);
   }
 
+  @override
   void handleIndexedExpression(
       Token? question, Token openSquareBracket, Token closeSquareBracket) {
     DirectParserASTContentIndexedExpressionHandle data =
@@ -2079,6 +2325,7 @@
     seen(data);
   }
 
+  @override
   void beginIsOperatorType(Token operator) {
     DirectParserASTContentIsOperatorTypeBegin data =
         new DirectParserASTContentIsOperatorTypeBegin(DirectParserASTType.BEGIN,
@@ -2086,6 +2333,7 @@
     seen(data);
   }
 
+  @override
   void endIsOperatorType(Token operator) {
     DirectParserASTContentIsOperatorTypeEnd data =
         new DirectParserASTContentIsOperatorTypeEnd(DirectParserASTType.END,
@@ -2093,6 +2341,7 @@
     seen(data);
   }
 
+  @override
   void handleIsOperator(Token isOperator, Token? not) {
     DirectParserASTContentIsOperatorHandle data =
         new DirectParserASTContentIsOperatorHandle(DirectParserASTType.HANDLE,
@@ -2100,6 +2349,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralBool(Token token) {
     DirectParserASTContentLiteralBoolHandle data =
         new DirectParserASTContentLiteralBoolHandle(DirectParserASTType.HANDLE,
@@ -2107,6 +2357,7 @@
     seen(data);
   }
 
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token endToken) {
     DirectParserASTContentBreakStatementHandle data =
@@ -2118,6 +2369,7 @@
     seen(data);
   }
 
+  @override
   void handleContinueStatement(
       bool hasTarget, Token continueKeyword, Token endToken) {
     DirectParserASTContentContinueStatementHandle data =
@@ -2129,6 +2381,7 @@
     seen(data);
   }
 
+  @override
   void handleEmptyStatement(Token token) {
     DirectParserASTContentEmptyStatementHandle data =
         new DirectParserASTContentEmptyStatementHandle(
@@ -2137,6 +2390,7 @@
     seen(data);
   }
 
+  @override
   void beginAssert(Token assertKeyword, Assert kind) {
     DirectParserASTContentAssertBegin data =
         new DirectParserASTContentAssertBegin(DirectParserASTType.BEGIN,
@@ -2144,6 +2398,7 @@
     seen(data);
   }
 
+  @override
   void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
       Token? commaToken, Token semicolonToken) {
     DirectParserASTContentAssertEnd data = new DirectParserASTContentAssertEnd(
@@ -2156,6 +2411,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralDouble(Token token) {
     DirectParserASTContentLiteralDoubleHandle data =
         new DirectParserASTContentLiteralDoubleHandle(
@@ -2164,6 +2420,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralInt(Token token) {
     DirectParserASTContentLiteralIntHandle data =
         new DirectParserASTContentLiteralIntHandle(DirectParserASTType.HANDLE,
@@ -2171,6 +2428,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralList(
       int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
     DirectParserASTContentLiteralListHandle data =
@@ -2182,6 +2440,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralSetOrMap(
     int count,
     Token leftBrace,
@@ -2200,6 +2459,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralNull(Token token) {
     DirectParserASTContentLiteralNullHandle data =
         new DirectParserASTContentLiteralNullHandle(DirectParserASTType.HANDLE,
@@ -2207,6 +2467,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeClause(Token nativeToken, bool hasName) {
     DirectParserASTContentNativeClauseHandle data =
         new DirectParserASTContentNativeClauseHandle(DirectParserASTType.HANDLE,
@@ -2214,6 +2475,7 @@
     seen(data);
   }
 
+  @override
   void handleNamedArgument(Token colon) {
     DirectParserASTContentNamedArgumentHandle data =
         new DirectParserASTContentNamedArgumentHandle(
@@ -2222,6 +2484,7 @@
     seen(data);
   }
 
+  @override
   void beginNewExpression(Token token) {
     DirectParserASTContentNewExpressionBegin data =
         new DirectParserASTContentNewExpressionBegin(DirectParserASTType.BEGIN,
@@ -2229,6 +2492,7 @@
     seen(data);
   }
 
+  @override
   void endNewExpression(Token token) {
     DirectParserASTContentNewExpressionEnd data =
         new DirectParserASTContentNewExpressionEnd(DirectParserASTType.END,
@@ -2236,6 +2500,7 @@
     seen(data);
   }
 
+  @override
   void handleNoArguments(Token token) {
     DirectParserASTContentNoArgumentsHandle data =
         new DirectParserASTContentNoArgumentsHandle(DirectParserASTType.HANDLE,
@@ -2243,6 +2508,7 @@
     seen(data);
   }
 
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     DirectParserASTContentNoConstructorReferenceContinuationAfterTypeArgumentsHandle
         data =
@@ -2252,6 +2518,7 @@
     seen(data);
   }
 
+  @override
   void handleNoType(Token lastConsumed) {
     DirectParserASTContentNoTypeHandle data =
         new DirectParserASTContentNoTypeHandle(DirectParserASTType.HANDLE,
@@ -2259,6 +2526,7 @@
     seen(data);
   }
 
+  @override
   void handleNoTypeVariables(Token token) {
     DirectParserASTContentNoTypeVariablesHandle data =
         new DirectParserASTContentNoTypeVariablesHandle(
@@ -2267,6 +2535,7 @@
     seen(data);
   }
 
+  @override
   void handleOperator(Token token) {
     DirectParserASTContentOperatorHandle data =
         new DirectParserASTContentOperatorHandle(DirectParserASTType.HANDLE,
@@ -2274,6 +2543,7 @@
     seen(data);
   }
 
+  @override
   void handleSymbolVoid(Token token) {
     DirectParserASTContentSymbolVoidHandle data =
         new DirectParserASTContentSymbolVoidHandle(DirectParserASTType.HANDLE,
@@ -2281,6 +2551,7 @@
     seen(data);
   }
 
+  @override
   void handleOperatorName(Token operatorKeyword, Token token) {
     DirectParserASTContentOperatorNameHandle data =
         new DirectParserASTContentOperatorNameHandle(DirectParserASTType.HANDLE,
@@ -2288,6 +2559,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidOperatorName(Token operatorKeyword, Token token) {
     DirectParserASTContentInvalidOperatorNameHandle data =
         new DirectParserASTContentInvalidOperatorNameHandle(
@@ -2297,6 +2569,7 @@
     seen(data);
   }
 
+  @override
   void handleParenthesizedCondition(Token token) {
     DirectParserASTContentParenthesizedConditionHandle data =
         new DirectParserASTContentParenthesizedConditionHandle(
@@ -2305,6 +2578,7 @@
     seen(data);
   }
 
+  @override
   void handleParenthesizedExpression(Token token) {
     DirectParserASTContentParenthesizedExpressionHandle data =
         new DirectParserASTContentParenthesizedExpressionHandle(
@@ -2313,6 +2587,7 @@
     seen(data);
   }
 
+  @override
   void handleQualified(Token period) {
     DirectParserASTContentQualifiedHandle data =
         new DirectParserASTContentQualifiedHandle(DirectParserASTType.HANDLE,
@@ -2320,6 +2595,7 @@
     seen(data);
   }
 
+  @override
   void handleStringPart(Token token) {
     DirectParserASTContentStringPartHandle data =
         new DirectParserASTContentStringPartHandle(DirectParserASTType.HANDLE,
@@ -2327,6 +2603,7 @@
     seen(data);
   }
 
+  @override
   void handleSuperExpression(Token token, IdentifierContext context) {
     DirectParserASTContentSuperExpressionHandle data =
         new DirectParserASTContentSuperExpressionHandle(
@@ -2336,6 +2613,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     DirectParserASTContentSwitchCaseBegin data =
         new DirectParserASTContentSwitchCaseBegin(DirectParserASTType.BEGIN,
@@ -2345,6 +2623,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchCase(
       int labelCount,
       int expressionCount,
@@ -2365,6 +2644,7 @@
     seen(data);
   }
 
+  @override
   void handleThisExpression(Token token, IdentifierContext context) {
     DirectParserASTContentThisExpressionHandle data =
         new DirectParserASTContentThisExpressionHandle(
@@ -2374,6 +2654,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     DirectParserASTContentUnaryPostfixAssignmentExpressionHandle data =
         new DirectParserASTContentUnaryPostfixAssignmentExpressionHandle(
@@ -2382,6 +2663,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPrefixExpression(Token token) {
     DirectParserASTContentUnaryPrefixExpressionHandle data =
         new DirectParserASTContentUnaryPrefixExpressionHandle(
@@ -2390,6 +2672,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     DirectParserASTContentUnaryPrefixAssignmentExpressionHandle data =
         new DirectParserASTContentUnaryPrefixAssignmentExpressionHandle(
@@ -2398,6 +2681,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameterDefaultValueExpression() {
     DirectParserASTContentFormalParameterDefaultValueExpressionBegin data =
         new DirectParserASTContentFormalParameterDefaultValueExpressionBegin(
@@ -2405,6 +2689,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameterDefaultValueExpression() {
     DirectParserASTContentFormalParameterDefaultValueExpressionEnd data =
         new DirectParserASTContentFormalParameterDefaultValueExpressionEnd(
@@ -2412,6 +2697,7 @@
     seen(data);
   }
 
+  @override
   void handleValuedFormalParameter(Token equals, Token token) {
     DirectParserASTContentValuedFormalParameterHandle data =
         new DirectParserASTContentValuedFormalParameterHandle(
@@ -2421,6 +2707,7 @@
     seen(data);
   }
 
+  @override
   void handleFormalParameterWithoutValue(Token token) {
     DirectParserASTContentFormalParameterWithoutValueHandle data =
         new DirectParserASTContentFormalParameterWithoutValueHandle(
@@ -2429,6 +2716,7 @@
     seen(data);
   }
 
+  @override
   void handleVoidKeyword(Token token) {
     DirectParserASTContentVoidKeywordHandle data =
         new DirectParserASTContentVoidKeywordHandle(DirectParserASTType.HANDLE,
@@ -2436,6 +2724,7 @@
     seen(data);
   }
 
+  @override
   void handleVoidKeywordWithTypeArguments(Token token) {
     DirectParserASTContentVoidKeywordWithTypeArgumentsHandle data =
         new DirectParserASTContentVoidKeywordWithTypeArgumentsHandle(
@@ -2444,6 +2733,7 @@
     seen(data);
   }
 
+  @override
   void beginYieldStatement(Token token) {
     DirectParserASTContentYieldStatementBegin data =
         new DirectParserASTContentYieldStatementBegin(DirectParserASTType.BEGIN,
@@ -2451,6 +2741,7 @@
     seen(data);
   }
 
+  @override
   void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
     DirectParserASTContentYieldStatementEnd data =
         new DirectParserASTContentYieldStatementEnd(DirectParserASTType.END,
@@ -2458,6 +2749,7 @@
     seen(data);
   }
 
+  @override
   void endInvalidYieldStatement(Token beginToken, Token? starToken,
       Token endToken, MessageCode errorCode) {
     DirectParserASTContentInvalidYieldStatementEnd data =
@@ -2470,6 +2762,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     DirectParserASTContentRecoverableErrorHandle data =
@@ -2481,6 +2774,7 @@
     seen(data);
   }
 
+  @override
   void handleErrorToken(ErrorToken token) {
     DirectParserASTContentErrorTokenHandle data =
         new DirectParserASTContentErrorTokenHandle(DirectParserASTType.HANDLE,
@@ -2488,6 +2782,7 @@
     seen(data);
   }
 
+  @override
   void handleUnescapeError(
       Message message, Token location, int stringOffset, int length) {
     DirectParserASTContentUnescapeErrorHandle data =
@@ -2500,6 +2795,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidStatement(Token token, Message message) {
     DirectParserASTContentInvalidStatementHandle data =
         new DirectParserASTContentInvalidStatementHandle(
@@ -2509,6 +2805,7 @@
     seen(data);
   }
 
+  @override
   void handleScript(Token token) {
     DirectParserASTContentScriptHandle data =
         new DirectParserASTContentScriptHandle(DirectParserASTType.HANDLE,
@@ -2516,6 +2813,7 @@
     seen(data);
   }
 
+  @override
   void handleCommentReferenceText(String referenceSource, int referenceOffset) {
     DirectParserASTContentCommentReferenceTextHandle data =
         new DirectParserASTContentCommentReferenceTextHandle(
@@ -2525,6 +2823,7 @@
     seen(data);
   }
 
+  @override
   void handleCommentReference(
       Token? newKeyword, Token? prefix, Token? period, Token token) {
     DirectParserASTContentCommentReferenceHandle data =
@@ -2537,6 +2836,7 @@
     seen(data);
   }
 
+  @override
   void handleNoCommentReference() {
     DirectParserASTContentNoCommentReferenceHandle data =
         new DirectParserASTContentNoCommentReferenceHandle(
@@ -2544,6 +2844,7 @@
     seen(data);
   }
 
+  @override
   void handleTypeArgumentApplication(Token openAngleBracket) {
     DirectParserASTContentTypeArgumentApplicationHandle data =
         new DirectParserASTContentTypeArgumentApplicationHandle(
@@ -2552,6 +2853,7 @@
     seen(data);
   }
 
+  @override
   void handleNewAsIdentifier(Token token) {
     DirectParserASTContentNewAsIdentifierHandle data =
         new DirectParserASTContentNewAsIdentifierHandle(
@@ -2568,6 +2870,7 @@
       {required this.token})
       : super("Arguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2582,6 +2885,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("Arguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -2597,6 +2901,7 @@
       {this.asyncToken, this.starToken})
       : super("AsyncModifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "asyncToken": asyncToken,
         "starToken": starToken,
@@ -2611,6 +2916,7 @@
       {required this.token})
       : super("AwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2624,6 +2930,7 @@
       {required this.beginToken, required this.endToken})
       : super("AwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2642,6 +2949,7 @@
       required this.errorCode})
       : super("InvalidAwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2657,6 +2965,7 @@
       {required this.token, required this.blockKind})
       : super("Block", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "blockKind": blockKind,
@@ -2676,6 +2985,7 @@
       required this.blockKind})
       : super("Block", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -2692,6 +3002,7 @@
       {required this.token})
       : super("InvalidTopLevelBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2704,6 +3015,7 @@
       {required this.token})
       : super("Cascade", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2713,6 +3025,7 @@
   DirectParserASTContentCascadeEnd(DirectParserASTType type)
       : super("Cascade", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2723,6 +3036,7 @@
       {required this.caseKeyword})
       : super("CaseExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseKeyword": caseKeyword,
       };
@@ -2735,6 +3049,7 @@
       {required this.colon})
       : super("CaseExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
       };
@@ -2749,6 +3064,7 @@
       {required this.kind, required this.token})
       : super("ClassOrMixinBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "kind": kind,
         "token": token,
@@ -2768,6 +3084,7 @@
       required this.endToken})
       : super("ClassOrMixinBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "kind": kind,
         "memberCount": memberCount,
@@ -2785,6 +3102,7 @@
       {required this.token})
       : super("ClassOrNamedMixinApplicationPrelude", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2800,6 +3118,7 @@
       {required this.begin, this.abstractToken, required this.name})
       : super("ClassDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
@@ -2815,6 +3134,7 @@
       {this.extendsKeyword, required this.typeCount})
       : super("ClassExtends", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extendsKeyword": extendsKeyword,
         "typeCount": typeCount,
@@ -2830,6 +3150,7 @@
       {this.implementsKeyword, required this.interfacesCount})
       : super("ClassOrMixinImplements", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "implementsKeyword": implementsKeyword,
         "interfacesCount": interfacesCount,
@@ -2845,6 +3166,7 @@
       {required this.begin, required this.classKeyword, this.nativeToken})
       : super("ClassHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "classKeyword": classKeyword,
@@ -2857,6 +3179,7 @@
   DirectParserASTContentRecoverClassHeaderHandle(DirectParserASTType type)
       : super("RecoverClassHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2868,6 +3191,7 @@
       {required this.beginToken, required this.endToken})
       : super("ClassDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2883,6 +3207,7 @@
       {required this.mixinKeyword, required this.name})
       : super("MixinDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
         "name": name,
@@ -2897,6 +3222,7 @@
       {this.onKeyword, required this.typeCount})
       : super("MixinOn", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "onKeyword": onKeyword,
         "typeCount": typeCount,
@@ -2910,6 +3236,7 @@
       {required this.mixinKeyword})
       : super("MixinHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
       };
@@ -2920,6 +3247,7 @@
   DirectParserASTContentRecoverMixinHeaderHandle(DirectParserASTType type)
       : super("RecoverMixinHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2931,6 +3259,7 @@
       {required this.mixinKeyword, required this.endToken})
       : super("MixinDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
         "endToken": endToken,
@@ -2946,6 +3275,7 @@
       {required this.token})
       : super("UncategorizedTopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2960,6 +3290,7 @@
       {required this.extensionKeyword})
       : super("ExtensionDeclarationPrelude", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
       };
@@ -2974,6 +3305,7 @@
       {required this.extensionKeyword, this.name})
       : super("ExtensionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
         "name": name,
@@ -2994,6 +3326,7 @@
       required this.endToken})
       : super("ExtensionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
         "typeKeyword": typeKeyword,
@@ -3009,6 +3342,7 @@
       {required this.token})
       : super("Combinators", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3021,6 +3355,7 @@
       {required this.count})
       : super("Combinators", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -3034,6 +3369,7 @@
       {required this.token})
       : super("CompilationUnit", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3044,6 +3380,7 @@
   DirectParserASTContentDirectivesOnlyHandle(DirectParserASTType type)
       : super("DirectivesOnly", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -3055,6 +3392,7 @@
       {required this.count, required this.token})
       : super("CompilationUnit", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "token": token,
@@ -3068,6 +3406,7 @@
       {required this.token})
       : super("ConstLiteral", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3080,6 +3419,7 @@
       {required this.token})
       : super("ConstLiteral", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3093,6 +3433,7 @@
       {required this.start})
       : super("ConstructorReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "start": start,
       };
@@ -3103,15 +3444,21 @@
   final Token start;
   final Token? periodBeforeName;
   final Token endToken;
+  final ConstructorReferenceContext constructorReferenceContext;
 
   DirectParserASTContentConstructorReferenceEnd(DirectParserASTType type,
-      {required this.start, this.periodBeforeName, required this.endToken})
+      {required this.start,
+      this.periodBeforeName,
+      required this.endToken,
+      required this.constructorReferenceContext})
       : super("ConstructorReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "start": start,
         "periodBeforeName": periodBeforeName,
         "endToken": endToken,
+        "constructorReferenceContext": constructorReferenceContext,
       };
 }
 
@@ -3123,6 +3470,7 @@
       {required this.token})
       : super("DoWhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3139,6 +3487,7 @@
       required this.endToken})
       : super("DoWhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "doKeyword": doKeyword,
         "whileKeyword": whileKeyword,
@@ -3154,6 +3503,7 @@
       {required this.token})
       : super("DoWhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3167,6 +3517,7 @@
       {required this.token})
       : super("DoWhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3180,6 +3531,7 @@
       {required this.token})
       : super("WhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3193,6 +3545,7 @@
       {required this.token})
       : super("WhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3205,6 +3558,7 @@
       {required this.enumKeyword})
       : super("Enum", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "enumKeyword": enumKeyword,
       };
@@ -3219,6 +3573,7 @@
       {required this.enumKeyword, required this.leftBrace, required this.count})
       : super("Enum", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "enumKeyword": enumKeyword,
         "leftBrace": leftBrace,
@@ -3233,6 +3588,7 @@
       {required this.token})
       : super("Export", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3246,6 +3602,7 @@
       {required this.exportKeyword, required this.semicolon})
       : super("Export", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "exportKeyword": exportKeyword,
         "semicolon": semicolon,
@@ -3261,6 +3618,7 @@
       {required this.token, required this.message})
       : super("ExtraneousExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "message": message,
@@ -3275,6 +3633,7 @@
       {required this.token})
       : super("ExpressionStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3289,6 +3648,7 @@
       {required this.lastConsumed, this.externalToken, this.constToken})
       : super("FactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
         "externalToken": externalToken,
@@ -3308,6 +3668,7 @@
       required this.endToken})
       : super("ClassFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3327,6 +3688,7 @@
       required this.endToken})
       : super("MixinFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3346,6 +3708,7 @@
       required this.endToken})
       : super("ExtensionFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3369,6 +3732,7 @@
       this.varFinalOrConst})
       : super("FormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3397,6 +3761,7 @@
       required this.memberKind})
       : super("FormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "thisKeyword": thisKeyword,
         "periodAfterThis": periodAfterThis,
@@ -3417,6 +3782,7 @@
       {required this.token, required this.kind})
       : super("NoFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3432,6 +3798,7 @@
       {required this.token, required this.kind})
       : super("FormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3451,6 +3818,7 @@
       required this.kind})
       : super("FormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -3482,6 +3850,7 @@
       required this.endToken})
       : super("ClassFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3518,6 +3887,7 @@
       required this.endToken})
       : super("MixinFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3554,6 +3924,7 @@
       required this.endToken})
       : super("ExtensionFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3576,6 +3947,7 @@
       {required this.token})
       : super("ForInitializerEmptyStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3592,6 +3964,7 @@
       required this.forIn})
       : super("ForInitializerExpressionStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "forIn": forIn,
@@ -3609,6 +3982,7 @@
       required this.forIn})
       : super("ForInitializerLocalVariableDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "forIn": forIn,
@@ -3622,6 +3996,7 @@
       {required this.token})
       : super("ForStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3640,6 +4015,7 @@
       required this.updateExpressionCount})
       : super("ForLoopParts", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "forKeyword": forKeyword,
         "leftParen": leftParen,
@@ -3655,6 +4031,7 @@
       {required this.endToken})
       : super("ForStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3668,6 +4045,7 @@
       {required this.token})
       : super("ForStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3680,6 +4058,7 @@
       {required this.token})
       : super("ForStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3699,6 +4078,7 @@
       required this.inKeyword})
       : super("ForInLoopParts", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "awaitToken": awaitToken,
         "forToken": forToken,
@@ -3714,6 +4094,7 @@
       {required this.endToken})
       : super("ForIn", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3727,6 +4108,7 @@
       {required this.token})
       : super("ForInExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3739,6 +4121,7 @@
       {required this.token})
       : super("ForInExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3751,6 +4134,7 @@
       {required this.token})
       : super("ForInBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3763,6 +4147,7 @@
       {required this.token})
       : super("ForInBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3776,6 +4161,7 @@
       {required this.token})
       : super("NamedFunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3789,6 +4175,7 @@
       {required this.endToken})
       : super("NamedFunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3802,6 +4189,7 @@
       {required this.token})
       : super("LocalFunctionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3815,6 +4203,7 @@
       {required this.endToken})
       : super("LocalFunctionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3828,6 +4217,7 @@
       {required this.token})
       : super("BlockFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3843,6 +4233,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("BlockFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -3858,6 +4249,7 @@
       {required this.token})
       : super("NoFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3872,6 +4264,7 @@
       {required this.token, required this.isExpressionBody})
       : super("FunctionBodySkipped", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "isExpressionBody": isExpressionBody,
@@ -3885,6 +4278,7 @@
       {required this.token})
       : super("FunctionName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3898,6 +4292,7 @@
       {required this.beginToken, required this.token})
       : super("FunctionName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "token": token,
@@ -3912,6 +4307,7 @@
       {required this.token})
       : super("FunctionTypeAlias", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3927,6 +4323,7 @@
       {required this.typedefKeyword, this.equals, required this.endToken})
       : super("FunctionTypeAlias", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "typedefKeyword": typedefKeyword,
         "equals": equals,
@@ -3942,6 +4339,7 @@
       {required this.withKeyword})
       : super("ClassWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "withKeyword": withKeyword,
       };
@@ -3952,6 +4350,7 @@
   DirectParserASTContentClassNoWithClauseHandle(DirectParserASTType type)
       : super("ClassNoWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -3965,6 +4364,7 @@
       {required this.begin, this.abstractToken, required this.name})
       : super("NamedMixinApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
@@ -3981,6 +4381,7 @@
       {required this.withKeyword})
       : super("NamedMixinApplicationWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "withKeyword": withKeyword,
       };
@@ -4002,6 +4403,7 @@
       required this.endToken})
       : super("NamedMixinApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "classKeyword": classKeyword,
@@ -4018,6 +4420,7 @@
       {required this.hideKeyword})
       : super("Hide", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hideKeyword": hideKeyword,
       };
@@ -4030,6 +4433,7 @@
       {required this.hideKeyword})
       : super("Hide", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hideKeyword": hideKeyword,
       };
@@ -4043,6 +4447,7 @@
       {required this.count})
       : super("IdentifierList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4055,6 +4460,7 @@
       {required this.token})
       : super("TypeList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4067,6 +4473,7 @@
       {required this.count})
       : super("TypeList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4079,6 +4486,7 @@
       {required this.token})
       : super("IfStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4092,6 +4500,7 @@
       {required this.ifToken, this.elseToken})
       : super("IfStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifToken": ifToken,
         "elseToken": elseToken,
@@ -4105,6 +4514,7 @@
       {required this.token})
       : super("ThenStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4117,6 +4527,7 @@
       {required this.token})
       : super("ThenStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4129,6 +4540,7 @@
       {required this.token})
       : super("ElseStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4141,6 +4553,7 @@
       {required this.token})
       : super("ElseStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4153,6 +4566,7 @@
       {required this.importKeyword})
       : super("Import", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "importKeyword": importKeyword,
       };
@@ -4166,6 +4580,7 @@
       {this.deferredKeyword, this.asKeyword})
       : super("ImportPrefix", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "deferredKeyword": deferredKeyword,
         "asKeyword": asKeyword,
@@ -4180,6 +4595,7 @@
       {required this.importKeyword, this.semicolon})
       : super("Import", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "importKeyword": importKeyword,
         "semicolon": semicolon,
@@ -4193,6 +4609,7 @@
       {this.semicolon})
       : super("RecoverImport", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "semicolon": semicolon,
       };
@@ -4206,6 +4623,7 @@
       {required this.token})
       : super("ConditionalUris", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4218,6 +4636,7 @@
       {required this.count})
       : super("ConditionalUris", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4230,6 +4649,7 @@
       {required this.ifKeyword})
       : super("ConditionalUri", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifKeyword": ifKeyword,
       };
@@ -4244,6 +4664,7 @@
       {required this.ifKeyword, required this.leftParen, this.equalSign})
       : super("ConditionalUri", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifKeyword": ifKeyword,
         "leftParen": leftParen,
@@ -4259,6 +4680,7 @@
       {required this.count, required this.firstIdentifier})
       : super("DottedName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "firstIdentifier": firstIdentifier,
@@ -4274,6 +4696,7 @@
       {required this.token})
       : super("ImplicitCreationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4287,6 +4710,7 @@
       {required this.token})
       : super("ImplicitCreationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4300,6 +4724,7 @@
       {required this.token})
       : super("InitializedIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4313,6 +4738,7 @@
       {required this.nameToken})
       : super("InitializedIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nameToken": nameToken,
       };
@@ -4326,6 +4752,7 @@
       {required this.token})
       : super("FieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4339,6 +4766,7 @@
       {required this.assignment, required this.token})
       : super("FieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assignment": assignment,
         "token": token,
@@ -4353,6 +4781,7 @@
       {required this.token})
       : super("NoFieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4366,6 +4795,7 @@
       {required this.token})
       : super("VariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4379,6 +4809,7 @@
       {required this.assignmentOperator})
       : super("VariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assignmentOperator": assignmentOperator,
       };
@@ -4392,6 +4823,7 @@
       {required this.token})
       : super("NoVariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4404,6 +4836,7 @@
       {required this.token})
       : super("Initializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4416,6 +4849,7 @@
       {required this.token})
       : super("Initializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4428,6 +4862,7 @@
       {required this.token})
       : super("Initializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4442,6 +4877,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("Initializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -4454,6 +4890,7 @@
   DirectParserASTContentNoInitializersHandle(DirectParserASTType type)
       : super("NoInitializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4465,6 +4902,7 @@
       {required this.token})
       : super("InvalidExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4478,6 +4916,7 @@
       {required this.token})
       : super("InvalidFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4491,6 +4930,7 @@
       {required this.token})
       : super("InvalidTypeReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4503,6 +4943,7 @@
       {required this.token})
       : super("Label", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4517,6 +4958,7 @@
       {required this.token, required this.labelCount})
       : super("LabeledStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "labelCount": labelCount,
@@ -4530,6 +4972,7 @@
       {required this.labelCount})
       : super("LabeledStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
       };
@@ -4542,6 +4985,7 @@
       {required this.token})
       : super("LibraryName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4555,6 +4999,7 @@
       {required this.libraryKeyword, required this.semicolon})
       : super("LibraryName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "libraryKeyword": libraryKeyword,
         "semicolon": semicolon,
@@ -4570,6 +5015,7 @@
       {required this.colon, required this.endToken})
       : super("LiteralMapEntry", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
         "endToken": endToken,
@@ -4583,6 +5029,7 @@
       {required this.token})
       : super("LiteralString", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4597,6 +5044,7 @@
       {required this.leftBracket, this.rightBracket})
       : super("InterpolationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "leftBracket": leftBracket,
         "rightBracket": rightBracket,
@@ -4611,6 +5059,7 @@
       {required this.interpolationCount, required this.endToken})
       : super("LiteralString", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "interpolationCount": interpolationCount,
         "endToken": endToken,
@@ -4626,6 +5075,7 @@
       {required this.startToken, required this.literalCount})
       : super("StringJuxtaposition", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "startToken": startToken,
         "literalCount": literalCount,
@@ -4636,6 +5086,7 @@
   DirectParserASTContentMemberBegin(DirectParserASTType type)
       : super("Member", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4646,6 +5097,7 @@
       {required this.endToken})
       : super("InvalidMember", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -4655,6 +5107,7 @@
   DirectParserASTContentMemberEnd(DirectParserASTType type)
       : super("Member", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4675,6 +5128,7 @@
       required this.name})
       : super("Method", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "externalToken": externalToken,
         "staticToken": staticToken,
@@ -4700,6 +5154,7 @@
       required this.endToken})
       : super("ClassMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4724,6 +5179,7 @@
       required this.endToken})
       : super("MixinMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4748,6 +5204,7 @@
       required this.endToken})
       : super("ExtensionMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4772,6 +5229,7 @@
       required this.endToken})
       : super("ClassConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4796,6 +5254,7 @@
       required this.endToken})
       : super("MixinConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4821,6 +5280,7 @@
       required this.endToken})
       : super("ExtensionConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4837,6 +5297,7 @@
       {required this.token})
       : super("MetadataStar", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4849,6 +5310,7 @@
       {required this.count})
       : super("MetadataStar", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4861,6 +5323,7 @@
       {required this.token})
       : super("Metadata", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4875,6 +5338,7 @@
       {required this.beginToken, this.periodBeforeName, required this.endToken})
       : super("Metadata", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "periodBeforeName": periodBeforeName,
@@ -4890,6 +5354,7 @@
       {required this.token})
       : super("OptionalFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4905,6 +5370,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("OptionalFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -4919,6 +5385,7 @@
       {required this.token})
       : super("Part", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4932,6 +5399,7 @@
       {required this.partKeyword, required this.semicolon})
       : super("Part", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "partKeyword": partKeyword,
         "semicolon": semicolon,
@@ -4945,6 +5413,7 @@
       {required this.token})
       : super("PartOf", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4963,6 +5432,7 @@
       required this.hasName})
       : super("PartOf", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "partKeyword": partKeyword,
         "ofKeyword": ofKeyword,
@@ -4979,6 +5449,7 @@
       {required this.token})
       : super("RedirectingFactoryBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4993,6 +5464,7 @@
       {required this.beginToken, required this.endToken})
       : super("RedirectingFactoryBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5007,6 +5479,7 @@
       {required this.token})
       : super("ReturnStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5021,6 +5494,7 @@
       {required this.nativeToken, required this.semicolon})
       : super("NativeFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5038,6 +5512,7 @@
       required this.semicolon})
       : super("NativeFunctionBodyIgnored", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5055,6 +5530,7 @@
       required this.semicolon})
       : super("NativeFunctionBodySkipped", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5069,6 +5545,7 @@
       {required this.semicolon})
       : super("EmptyFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "semicolon": semicolon,
       };
@@ -5083,6 +5560,7 @@
       {required this.arrowToken, this.endToken})
       : super("ExpressionFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "arrowToken": arrowToken,
         "endToken": endToken,
@@ -5100,6 +5578,7 @@
       required this.endToken})
       : super("ReturnStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasExpression": hasExpression,
         "beginToken": beginToken,
@@ -5115,6 +5594,7 @@
       {required this.beginToken, required this.endToken})
       : super("Send", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5128,6 +5608,7 @@
       {required this.showKeyword})
       : super("Show", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "showKeyword": showKeyword,
       };
@@ -5140,6 +5621,7 @@
       {required this.showKeyword})
       : super("Show", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "showKeyword": showKeyword,
       };
@@ -5153,6 +5635,7 @@
       {required this.token})
       : super("SwitchStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5166,6 +5649,7 @@
       {required this.switchKeyword, required this.endToken})
       : super("SwitchStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "switchKeyword": switchKeyword,
         "endToken": endToken,
@@ -5179,6 +5663,7 @@
       {required this.token})
       : super("SwitchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5195,6 +5680,7 @@
       required this.endToken})
       : super("SwitchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseCount": caseCount,
         "beginToken": beginToken,
@@ -5209,6 +5695,7 @@
       {required this.token})
       : super("LiteralSymbol", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5222,6 +5709,7 @@
       {required this.hashToken, required this.identifierCount})
       : super("LiteralSymbol", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hashToken": hashToken,
         "identifierCount": identifierCount,
@@ -5237,6 +5725,7 @@
       {required this.throwToken, required this.endToken})
       : super("ThrowExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "throwToken": throwToken,
         "endToken": endToken,
@@ -5251,6 +5740,7 @@
       {required this.token})
       : super("RethrowStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5264,6 +5754,7 @@
       {required this.rethrowToken, required this.endToken})
       : super("RethrowStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "rethrowToken": rethrowToken,
         "endToken": endToken,
@@ -5278,6 +5769,7 @@
       {required this.nextToken})
       : super("TopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nextToken": nextToken,
       };
@@ -5292,6 +5784,7 @@
       {required this.endToken})
       : super("InvalidTopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -5304,6 +5797,7 @@
       {required this.token})
       : super("TopLevelMember", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5316,6 +5810,7 @@
       {required this.lastConsumed})
       : super("Fields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
       };
@@ -5342,6 +5837,7 @@
       required this.endToken})
       : super("TopLevelFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "externalToken": externalToken,
         "staticToken": staticToken,
@@ -5362,6 +5858,7 @@
       {required this.lastConsumed, this.externalToken})
       : super("TopLevelMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
         "externalToken": externalToken,
@@ -5377,6 +5874,7 @@
       {required this.beginToken, this.getOrSet, required this.endToken})
       : super("TopLevelMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "getOrSet": getOrSet,
@@ -5391,6 +5889,7 @@
       {required this.token})
       : super("TryStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5404,6 +5903,7 @@
       {required this.caseKeyword, required this.colon})
       : super("CaseMatch", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseKeyword": caseKeyword,
         "colon": colon,
@@ -5417,6 +5917,7 @@
       {required this.token})
       : super("CatchClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5429,6 +5930,7 @@
       {required this.token})
       : super("CatchClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5443,6 +5945,7 @@
       {this.onKeyword, this.catchKeyword, this.comma})
       : super("CatchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "onKeyword": onKeyword,
         "catchKeyword": catchKeyword,
@@ -5457,6 +5960,7 @@
       {required this.finallyKeyword})
       : super("FinallyBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "finallyKeyword": finallyKeyword,
       };
@@ -5471,6 +5975,7 @@
       {required this.catchCount, required this.tryKeyword, this.finallyKeyword})
       : super("TryStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "catchCount": catchCount,
         "tryKeyword": tryKeyword,
@@ -5486,6 +5991,7 @@
       {required this.beginToken, this.questionMark})
       : super("Type", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "questionMark": questionMark,
@@ -5500,6 +6006,7 @@
       {required this.bang})
       : super("NonNullAssertExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "bang": bang,
       };
@@ -5512,6 +6019,7 @@
       {required this.token})
       : super("NoName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5524,6 +6032,7 @@
       {required this.beginToken})
       : super("FunctionType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
       };
@@ -5537,6 +6046,7 @@
       {required this.functionToken, this.questionMark})
       : super("FunctionType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "functionToken": functionToken,
         "questionMark": questionMark,
@@ -5550,6 +6060,7 @@
       {required this.token})
       : super("TypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5564,6 +6075,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("TypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -5579,6 +6091,7 @@
       {required this.token})
       : super("InvalidTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5592,6 +6105,7 @@
       {required this.token})
       : super("NoTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5604,6 +6118,7 @@
       {required this.token})
       : super("TypeVariable", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5618,6 +6133,7 @@
       {required this.token, required this.count})
       : super("TypeVariablesDefined", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "count": count,
@@ -5637,6 +6153,7 @@
       this.variance})
       : super("TypeVariable", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "index": index,
@@ -5652,6 +6169,7 @@
       {required this.token})
       : super("TypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5665,6 +6183,7 @@
       {required this.beginToken, required this.endToken})
       : super("TypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5679,6 +6198,7 @@
       {required this.token})
       : super("FunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5693,6 +6213,7 @@
       {required this.beginToken, required this.token})
       : super("FunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "token": token,
@@ -5709,6 +6230,7 @@
       {required this.token, this.lateToken, this.varFinalOrConst})
       : super("VariablesDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "lateToken": lateToken,
@@ -5725,6 +6247,7 @@
       {required this.count, this.endToken})
       : super("VariablesDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "endToken": endToken,
@@ -5738,6 +6261,7 @@
       {required this.token})
       : super("WhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5751,6 +6275,7 @@
       {required this.whileKeyword, required this.endToken})
       : super("WhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "whileKeyword": whileKeyword,
         "endToken": endToken,
@@ -5764,6 +6289,7 @@
       {required this.operator})
       : super("AsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5776,6 +6302,7 @@
       {required this.operator})
       : super("AsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5788,6 +6315,7 @@
       {required this.operator})
       : super("AsOperator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5801,6 +6329,7 @@
       {required this.token})
       : super("AssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5814,6 +6343,7 @@
       {required this.token})
       : super("BinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5826,6 +6356,7 @@
       {required this.token})
       : super("BinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5839,6 +6370,7 @@
       {required this.token})
       : super("EndingBinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5852,6 +6384,7 @@
       {required this.question})
       : super("ConditionalExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
       };
@@ -5863,6 +6396,7 @@
       DirectParserASTType type)
       : super("ConditionalExpressionColon", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -5875,6 +6409,7 @@
       {required this.question, required this.colon})
       : super("ConditionalExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
         "colon": colon,
@@ -5889,6 +6424,7 @@
       {required this.constKeyword})
       : super("ConstExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "constKeyword": constKeyword,
       };
@@ -5901,6 +6437,7 @@
       {required this.token})
       : super("ConstExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5913,6 +6450,7 @@
       {required this.constKeyword})
       : super("ConstFactory", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "constKeyword": constKeyword,
       };
@@ -5926,6 +6464,7 @@
       {this.awaitToken, required this.forToken})
       : super("ForControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "awaitToken": awaitToken,
         "forToken": forToken,
@@ -5939,6 +6478,7 @@
       {required this.token})
       : super("ForControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5951,6 +6491,7 @@
       {required this.token})
       : super("ForInControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5963,6 +6504,7 @@
       {required this.ifToken})
       : super("IfControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifToken": ifToken,
       };
@@ -5976,6 +6518,7 @@
       {required this.token})
       : super("ThenControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5989,6 +6532,7 @@
       {required this.elseToken})
       : super("ElseControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "elseToken": elseToken,
       };
@@ -6001,6 +6545,7 @@
       {required this.token})
       : super("IfControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6014,6 +6559,7 @@
       {required this.token})
       : super("IfElseControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6027,6 +6573,7 @@
       {required this.spreadToken})
       : super("SpreadExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "spreadToken": spreadToken,
       };
@@ -6041,6 +6588,7 @@
       {required this.token})
       : super("FunctionTypedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6057,6 +6605,7 @@
       this.question})
       : super("FunctionTypedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nameToken": nameToken,
         "question": question,
@@ -6071,6 +6620,7 @@
       {required this.token, required this.context})
       : super("Identifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6089,6 +6639,7 @@
       required this.closeSquareBracket})
       : super("IndexedExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
         "openSquareBracket": openSquareBracket,
@@ -6103,6 +6654,7 @@
       {required this.operator})
       : super("IsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -6115,6 +6667,7 @@
       {required this.operator})
       : super("IsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -6128,6 +6681,7 @@
       {required this.isOperator, this.not})
       : super("IsOperator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "isOperator": isOperator,
         "not": not,
@@ -6141,6 +6695,7 @@
       {required this.token})
       : super("LiteralBool", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6158,6 +6713,7 @@
       required this.endToken})
       : super("BreakStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasTarget": hasTarget,
         "breakKeyword": breakKeyword,
@@ -6177,6 +6733,7 @@
       required this.endToken})
       : super("ContinueStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasTarget": hasTarget,
         "continueKeyword": continueKeyword,
@@ -6192,6 +6749,7 @@
       {required this.token})
       : super("EmptyStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6205,6 +6763,7 @@
       {required this.assertKeyword, required this.kind})
       : super("Assert", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assertKeyword": assertKeyword,
         "kind": kind,
@@ -6226,6 +6785,7 @@
       required this.semicolonToken})
       : super("Assert", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assertKeyword": assertKeyword,
         "kind": kind,
@@ -6242,6 +6802,7 @@
       {required this.token})
       : super("LiteralDouble", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6254,6 +6815,7 @@
       {required this.token})
       : super("LiteralInt", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6272,6 +6834,7 @@
       required this.rightBracket})
       : super("LiteralList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "leftBracket": leftBracket,
@@ -6296,6 +6859,7 @@
       required this.hasSetEntry})
       : super("LiteralSetOrMap", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "leftBrace": leftBrace,
@@ -6312,6 +6876,7 @@
       {required this.token})
       : super("LiteralNull", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6325,6 +6890,7 @@
       {required this.nativeToken, required this.hasName})
       : super("NativeClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "hasName": hasName,
@@ -6338,6 +6904,7 @@
       {required this.colon})
       : super("NamedArgument", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
       };
@@ -6350,6 +6917,7 @@
       {required this.token})
       : super("NewExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6362,6 +6930,7 @@
       {required this.token})
       : super("NewExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6374,6 +6943,7 @@
       {required this.token})
       : super("NoArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6388,6 +6958,7 @@
       {required this.token})
       : super("NoConstructorReferenceContinuationAfterTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6400,6 +6971,7 @@
       {required this.lastConsumed})
       : super("NoType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
       };
@@ -6413,6 +6985,7 @@
       {required this.token})
       : super("NoTypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6425,6 +6998,7 @@
       {required this.token})
       : super("Operator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6437,6 +7011,7 @@
       {required this.token})
       : super("SymbolVoid", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6450,6 +7025,7 @@
       {required this.operatorKeyword, required this.token})
       : super("OperatorName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operatorKeyword": operatorKeyword,
         "token": token,
@@ -6465,6 +7041,7 @@
       {required this.operatorKeyword, required this.token})
       : super("InvalidOperatorName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operatorKeyword": operatorKeyword,
         "token": token,
@@ -6479,6 +7056,7 @@
       {required this.token})
       : super("ParenthesizedCondition", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6492,6 +7070,7 @@
       {required this.token})
       : super("ParenthesizedExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6504,6 +7083,7 @@
       {required this.period})
       : super("Qualified", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "period": period,
       };
@@ -6516,6 +7096,7 @@
       {required this.token})
       : super("StringPart", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6530,6 +7111,7 @@
       {required this.token, required this.context})
       : super("SuperExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6547,6 +7129,7 @@
       required this.firstToken})
       : super("SwitchCase", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
         "expressionCount": expressionCount,
@@ -6573,6 +7156,7 @@
       required this.endToken})
       : super("SwitchCase", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
         "expressionCount": expressionCount,
@@ -6593,6 +7177,7 @@
       {required this.token, required this.context})
       : super("ThisExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6608,6 +7193,7 @@
       {required this.token})
       : super("UnaryPostfixAssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6621,6 +7207,7 @@
       {required this.token})
       : super("UnaryPrefixExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6635,6 +7222,7 @@
       {required this.token})
       : super("UnaryPrefixAssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6646,6 +7234,7 @@
       DirectParserASTType type)
       : super("FormalParameterDefaultValueExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6655,6 +7244,7 @@
       DirectParserASTType type)
       : super("FormalParameterDefaultValueExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6667,6 +7257,7 @@
       {required this.equals, required this.token})
       : super("ValuedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "equals": equals,
         "token": token,
@@ -6682,6 +7273,7 @@
       {required this.token})
       : super("FormalParameterWithoutValue", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6694,6 +7286,7 @@
       {required this.token})
       : super("VoidKeyword", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6708,6 +7301,7 @@
       {required this.token})
       : super("VoidKeywordWithTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6720,6 +7314,7 @@
       {required this.token})
       : super("YieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6734,6 +7329,7 @@
       {required this.yieldToken, this.starToken, required this.endToken})
       : super("YieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "yieldToken": yieldToken,
         "starToken": starToken,
@@ -6755,6 +7351,7 @@
       required this.errorCode})
       : super("InvalidYieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "starToken": starToken,
@@ -6773,6 +7370,7 @@
       {required this.message, required this.startToken, required this.endToken})
       : super("RecoverableError", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "message": message,
         "startToken": startToken,
@@ -6787,6 +7385,7 @@
       {required this.token})
       : super("ErrorToken", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6805,6 +7404,7 @@
       required this.length})
       : super("UnescapeError", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "message": message,
         "location": location,
@@ -6822,6 +7422,7 @@
       {required this.token, required this.message})
       : super("InvalidStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "message": message,
@@ -6835,6 +7436,7 @@
       {required this.token})
       : super("Script", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6849,6 +7451,7 @@
       {required this.referenceSource, required this.referenceOffset})
       : super("CommentReferenceText", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "referenceSource": referenceSource,
         "referenceOffset": referenceOffset,
@@ -6866,6 +7469,7 @@
       {this.newKeyword, this.prefix, this.period, required this.token})
       : super("CommentReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "newKeyword": newKeyword,
         "prefix": prefix,
@@ -6879,6 +7483,7 @@
   DirectParserASTContentNoCommentReferenceHandle(DirectParserASTType type)
       : super("NoCommentReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6890,6 +7495,7 @@
       {required this.openAngleBracket})
       : super("TypeArgumentApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "openAngleBracket": openAngleBracket,
       };
@@ -6903,6 +7509,7 @@
       {required this.token})
       : super("NewAsIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
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 d8785df..fe35178 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -336,6 +336,7 @@
   _ProcedureEtcChunk(Token startToken, Token endToken)
       : super(startToken, endToken);
 
+  @override
   void _printOnWithoutHeaderAndMetadata(StringBuffer sb) {
     printTokenRange(startToken, endToken, sb,
         skipContentOnEndGroupUntilToToken: true);
@@ -393,6 +394,7 @@
       this.addMarkerForUnknownForTest, Token startToken, Token endToken)
       : super(startToken, endToken);
 
+  @override
   void _printOnWithoutHeaderAndMetadata(StringBuffer sb) {
     if (addMarkerForUnknownForTest) {
       sb.write("---- unknown chunk starts ----\n");
@@ -654,7 +656,7 @@
   _currentUnknown.interimEnd = null;
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   File f = new File(args[0]);
   Uint8List data = f.readAsBytesSync();
   ScannerConfiguration scannerConfiguration = new ScannerConfiguration();
@@ -750,12 +752,14 @@
         new _TopLevelFieldsChunk(beginToken, endToken);
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     elementStartToChunk[typedefKeyword] =
         new _FunctionTypeAliasChunk(typedefKeyword, endToken);
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     elementStartToChunk[enumKeyword] =
         new _EnumChunk(enumKeyword, leftBrace.endGroup!);
@@ -818,12 +822,12 @@
   List<String>? _combinatorNames;
 
   @override
-  beginExport(Token export) {
+  void beginExport(Token export) {
     _combinators = <_NamespaceCombinator>[];
   }
 
   @override
-  beginImport(Token import) {
+  void beginImport(Token import) {
     _combinators = <_NamespaceCombinator>[];
   }
 
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index b8b73a0..a95566c 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -185,23 +185,30 @@
 /// Result object of [generateKernel].
 class InternalCompilerResult implements CompilerResult {
   /// The generated summary bytes, if it was requested.
+  @override
   final List<int>? summary;
 
   /// The generated component, if it was requested.
+  @override
   final Component? component;
 
+  @override
   final Component? sdkComponent;
 
+  @override
   final List<Component> loadedComponents;
 
   /// Dependencies traversed by the compiler. Used only for generating
   /// dependency .GN files in the dart-sdk build system.
   /// Note this might be removed when we switch to compute dependencies without
   /// using the compiler itself.
+  @override
   final List<Uri> deps;
 
+  @override
   final ClassHierarchy? classHierarchy;
 
+  @override
   final CoreTypes? coreTypes;
 
   /// The [KernelTarget] used to generated the component.
diff --git a/pkg/front_end/lib/src/testing/id_extractor.dart b/pkg/front_end/lib/src/testing/id_extractor.dart
index 13229aa..0f7429d 100644
--- a/pkg/front_end/lib/src/testing/id_extractor.dart
+++ b/pkg/front_end/lib/src/testing/id_extractor.dart
@@ -167,19 +167,19 @@
   }
 
   @override
-  defaultNode(Node node) {
+  void defaultNode(Node node) {
     node.visitChildren(this);
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     // Avoid visiting annotations.
     node.function.accept(this);
     computeForMember(node);
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     // Avoid visiting annotations.
     visitList(node.initializers, this);
     node.function.accept(this);
@@ -187,13 +187,13 @@
   }
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     // Avoid visiting annotations.
     node.initializer?.accept(this);
     computeForMember(node);
   }
 
-  _visitInvocation(Expression node, Name name) {
+  void _visitInvocation(Expression node, Name name) {
     if (name.text == '[]') {
       computeForNode(node, computeDefaultNodeId(node));
     } else if (name.text == '[]=') {
@@ -208,31 +208,31 @@
   }
 
   @override
-  visitDynamicInvocation(DynamicInvocation node) {
+  void visitDynamicInvocation(DynamicInvocation node) {
     _visitInvocation(node, node.name);
     super.visitDynamicInvocation(node);
   }
 
   @override
-  visitFunctionInvocation(FunctionInvocation node) {
+  void visitFunctionInvocation(FunctionInvocation node) {
     _visitInvocation(node, node.name);
     super.visitFunctionInvocation(node);
   }
 
   @override
-  visitLocalFunctionInvocation(LocalFunctionInvocation node) {
+  void visitLocalFunctionInvocation(LocalFunctionInvocation node) {
     computeForNode(node, createInvokeId(node));
     super.visitLocalFunctionInvocation(node);
   }
 
   @override
-  visitEqualsCall(EqualsCall node) {
+  void visitEqualsCall(EqualsCall node) {
     _visitInvocation(node, Name.equalsName);
     super.visitEqualsCall(node);
   }
 
   @override
-  visitEqualsNull(EqualsNull node) {
+  void visitEqualsNull(EqualsNull node) {
     Expression receiver = node.expression;
     if (receiver is VariableGet && receiver.variable.name == null) {
       // This is a desugared `?.`.
@@ -243,48 +243,48 @@
   }
 
   @override
-  visitInstanceInvocation(InstanceInvocation node) {
+  void visitInstanceInvocation(InstanceInvocation node) {
     _visitInvocation(node, node.name);
     super.visitInstanceInvocation(node);
   }
 
   @override
-  visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+  void visitInstanceGetterInvocation(InstanceGetterInvocation node) {
     _visitInvocation(node, node.name);
     super.visitInstanceGetterInvocation(node);
   }
 
   @override
-  visitLoadLibrary(LoadLibrary node) {
+  void visitLoadLibrary(LoadLibrary node) {
     computeForNode(node, createInvokeId(node));
   }
 
   @override
-  visitDynamicGet(DynamicGet node) {
+  void visitDynamicGet(DynamicGet node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitDynamicGet(node);
   }
 
   @override
-  visitFunctionTearOff(FunctionTearOff node) {
+  void visitFunctionTearOff(FunctionTearOff node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitFunctionTearOff(node);
   }
 
   @override
-  visitInstanceGet(InstanceGet node) {
+  void visitInstanceGet(InstanceGet node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitInstanceGet(node);
   }
 
   @override
-  visitInstanceTearOff(InstanceTearOff node) {
+  void visitInstanceTearOff(InstanceTearOff node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitInstanceTearOff(node);
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     if (node.name != null && node.parent is! FunctionDeclaration) {
       // Skip synthetic variables and function declaration variables.
       computeForNode(node, computeDefaultNodeId(node));
@@ -294,7 +294,7 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     computeForNode(
         node,
         computeDefaultNodeId(node,
@@ -305,13 +305,13 @@
   }
 
   @override
-  visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(FunctionExpression node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitFunctionExpression(node);
   }
 
   @override
-  visitVariableGet(VariableGet node) {
+  void visitVariableGet(VariableGet node) {
     if (node.variable.name != null && !node.variable.isFieldFormal) {
       // Skip use of synthetic variables.
       computeForNode(node, computeDefaultNodeId(node));
@@ -320,19 +320,19 @@
   }
 
   @override
-  visitDynamicSet(DynamicSet node) {
+  void visitDynamicSet(DynamicSet node) {
     computeForNode(node, createUpdateId(node));
     super.visitDynamicSet(node);
   }
 
   @override
-  visitInstanceSet(InstanceSet node) {
+  void visitInstanceSet(InstanceSet node) {
     computeForNode(node, createUpdateId(node));
     super.visitInstanceSet(node);
   }
 
   @override
-  visitVariableSet(VariableSet node) {
+  void visitVariableSet(VariableSet node) {
     if (node.variable.name != null) {
       // Skip use of synthetic variables.
       computeForNode(node, createUpdateId(node));
@@ -341,43 +341,43 @@
   }
 
   @override
-  visitExpressionStatement(ExpressionStatement node) {
+  void visitExpressionStatement(ExpressionStatement node) {
     computeForNode(node, createExpressionStatementId(node));
     return super.visitExpressionStatement(node);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     computeForNode(node, computeDefaultNodeId(node));
     return super.visitIfStatement(node);
   }
 
   @override
-  visitTryCatch(TryCatch node) {
+  void visitTryCatch(TryCatch node) {
     computeForNode(node, computeDefaultNodeId(node));
     return super.visitTryCatch(node);
   }
 
   @override
-  visitTryFinally(TryFinally node) {
+  void visitTryFinally(TryFinally node) {
     computeForNode(node, computeDefaultNodeId(node));
     return super.visitTryFinally(node);
   }
 
   @override
-  visitDoStatement(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     computeForNode(node, createLoopId(node));
     super.visitDoStatement(node);
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     computeForNode(node, createLoopId(node));
     super.visitForStatement(node);
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  void visitForInStatement(ForInStatement node) {
     computeForNode(node, createLoopId(node));
     computeForNode(node, createIteratorId(node));
     computeForNode(node, createCurrentId(node));
@@ -386,32 +386,32 @@
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  void visitWhileStatement(WhileStatement node) {
     computeForNode(node, createLoopId(node));
     super.visitWhileStatement(node);
   }
 
   @override
-  visitLabeledStatement(LabeledStatement node) {
+  void visitLabeledStatement(LabeledStatement node) {
     // TODO(johnniwinther): Call computeForNode for label statements that are
     // not placeholders for loop and switch targets.
     super.visitLabeledStatement(node);
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {
+  void visitBreakStatement(BreakStatement node) {
     computeForNode(node, createGotoId(node));
     super.visitBreakStatement(node);
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     computeForNode(node, createSwitchId(node));
     super.visitSwitchStatement(node);
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
+  void visitSwitchCase(SwitchCase node) {
     if (node.expressionOffsets.isNotEmpty) {
       computeForNode(node, createSwitchCaseId(node));
     }
@@ -419,13 +419,13 @@
   }
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     computeForNode(node, createGotoId(node));
     super.visitContinueSwitchStatement(node);
   }
 
   @override
-  visitConstantExpression(ConstantExpression node) {
+  void visitConstantExpression(ConstantExpression node) {
     // Implicit constants (for instance omitted field initializers, implicit
     // default values) and synthetic constants (for instance in noSuchMethod
     // forwarders) have no offset.
@@ -435,7 +435,7 @@
   }
 
   @override
-  visitNullLiteral(NullLiteral node) {
+  void visitNullLiteral(NullLiteral node) {
     // Synthetic null literals, for instance in locals and fields without
     // initializers, have no offset.
     computeForNode(
@@ -444,13 +444,13 @@
   }
 
   @override
-  visitBoolLiteral(BoolLiteral node) {
+  void visitBoolLiteral(BoolLiteral node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitBoolLiteral(node);
   }
 
   @override
-  visitIntLiteral(IntLiteral node) {
+  void visitIntLiteral(IntLiteral node) {
     // Synthetic ints literals, for instance in enum fields, have no offset.
     computeForNode(
         node, computeDefaultNodeId(node, skipNodeWithNoOffset: true));
@@ -458,13 +458,13 @@
   }
 
   @override
-  visitDoubleLiteral(DoubleLiteral node) {
+  void visitDoubleLiteral(DoubleLiteral node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitDoubleLiteral(node);
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  void visitStringLiteral(StringLiteral node) {
     // Synthetic string literals, for instance in enum fields, have no offset.
     computeForNode(
         node, computeDefaultNodeId(node, skipNodeWithNoOffset: true));
@@ -472,7 +472,7 @@
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     // Synthetic list literals,for instance in noSuchMethod forwarders, have no
     // offset.
     computeForNode(
@@ -481,7 +481,7 @@
   }
 
   @override
-  visitMapLiteral(MapLiteral node) {
+  void visitMapLiteral(MapLiteral node) {
     // Synthetic map literals, for instance in noSuchMethod forwarders, have no
     // offset.
     computeForNode(
@@ -490,13 +490,13 @@
   }
 
   @override
-  visitSetLiteral(SetLiteral node) {
+  void visitSetLiteral(SetLiteral node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitSetLiteral(node);
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node) {
     TreeNode parent = node.parent!;
     if (node.fileOffset == TreeNode.noOffset ||
         (parent is InstanceGet ||
@@ -511,13 +511,13 @@
   }
 
   @override
-  visitAwaitExpression(AwaitExpression node) {
+  void visitAwaitExpression(AwaitExpression node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitAwaitExpression(node);
   }
 
   @override
-  visitConstructorInvocation(ConstructorInvocation node) {
+  void visitConstructorInvocation(ConstructorInvocation node) {
     // Skip synthetic constructor invocations like for enum constants.
     // TODO(johnniwinther): Can [skipNodeWithNoOffset] be removed when dart2js
     // no longer test with cfe constants?
@@ -527,43 +527,43 @@
   }
 
   @override
-  visitStaticGet(StaticGet node) {
+  void visitStaticGet(StaticGet node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitStaticGet(node);
   }
 
   @override
-  visitStaticTearOff(StaticTearOff node) {
+  void visitStaticTearOff(StaticTearOff node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitStaticTearOff(node);
   }
 
   @override
-  visitStaticSet(StaticSet node) {
+  void visitStaticSet(StaticSet node) {
     computeForNode(node, createUpdateId(node));
     super.visitStaticSet(node);
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     computeForNode(node, createInvokeId(node));
     super.visitStaticInvocation(node);
   }
 
   @override
-  visitThrow(Throw node) {
+  void visitThrow(Throw node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitThrow(node);
   }
 
   @override
-  visitRethrow(Rethrow node) {
+  void visitRethrow(Rethrow node) {
     computeForNode(node, computeDefaultNodeId(node));
     super.visitRethrow(node);
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     if (node.isTypeError) {
       computeForNode(node, createImplicitAsId(node));
     } else {
@@ -573,34 +573,37 @@
   }
 
   @override
-  visitArguments(Arguments node) {
+  void visitArguments(Arguments node) {
     computeForNode(
         node, computeDefaultNodeId(node, skipNodeWithNoOffset: true));
     return super.visitArguments(node);
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     computeForNode(
         node, computeDefaultNodeId(node, skipNodeWithNoOffset: true));
     return super.visitBlock(node);
   }
 
   @override
-  visitConditionalExpression(ConditionalExpression node) {
+  void visitConditionalExpression(ConditionalExpression node) {
     computeForNode(node, computeDefaultNodeId(node));
     return super.visitConditionalExpression(node);
   }
 
   @override
-  visitLogicalExpression(LogicalExpression node) {
+  void visitLogicalExpression(LogicalExpression node) {
     computeForNode(node, computeDefaultNodeId(node));
     return super.visitLogicalExpression(node);
   }
 
   @override
-  visitInvalidExpression(InvalidExpression node) {
-    computeForNode(node, computeDefaultNodeId(node));
+  void visitInvalidExpression(InvalidExpression node) {
+    // Invalid expressions produced in the constant evaluator don't have a
+    // file offset.
+    computeForNode(
+        node, computeDefaultNodeId(node, skipNodeWithNoOffset: true));
     return super.visitInvalidExpression(node);
   }
 }
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 084e8a7..dead4a2 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -55,7 +55,7 @@
   // TODO(johnniwinther): Tailor support to redefine selected platform
   // classes/members only.
   final bool compileSdk;
-  final TargetFlags targetFlags;
+  final TestTargetFlags targetFlags;
   final NnbdMode nnbdMode;
 
   const TestConfig(this.marker, this.name,
@@ -63,7 +63,7 @@
       this.allowedExperimentalFlags,
       this.librariesSpecificationUri,
       this.compileSdk: false,
-      this.targetFlags: const TargetFlags(),
+      this.targetFlags: const TestTargetFlags(),
       this.nnbdMode: NnbdMode.Weak});
 
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {}
@@ -307,7 +307,8 @@
     if (!succinct) printDiagnosticMessage(message, print);
   };
   options.debugDump = printCode;
-  options.target = new NoneTarget(config.targetFlags);
+  options.target = new TestTargetWrapper(
+      new NoneTarget(config.targetFlags), config.targetFlags);
   options.explicitExperimentalFlags.addAll(config.explicitExperimentalFlags);
   options.allowedExperimentalFlagsForTesting = config.allowedExperimentalFlags;
   options.nnbdMode = config.nnbdMode;
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 0067517..9aad4b2 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -330,33 +330,41 @@
     }
   }
 
+  @override
   void defaultConstant(Constant node) => throw new UnimplementedError(
       'Unexpected constant $node (${node.runtimeType})');
 
+  @override
   void visitNullConstant(NullConstant node) {
     sb.write('Null()');
   }
 
+  @override
   void visitBoolConstant(BoolConstant node) {
     sb.write('Bool(${node.value})');
   }
 
+  @override
   void visitIntConstant(IntConstant node) {
     sb.write('Int(${node.value})');
   }
 
+  @override
   void visitDoubleConstant(DoubleConstant node) {
     sb.write('Double(${node.value})');
   }
 
+  @override
   void visitStringConstant(StringConstant node) {
     sb.write('String(${node.value})');
   }
 
+  @override
   void visitSymbolConstant(SymbolConstant node) {
     sb.write('Symbol(${node.name})');
   }
 
+  @override
   void visitMapConstant(MapConstant node) {
     sb.write('Map<');
     typeToText.visit(node.keyType);
@@ -374,6 +382,7 @@
     sb.write(')');
   }
 
+  @override
   void visitListConstant(ListConstant node) {
     sb.write('List<');
     typeToText.visit(node.typeArgument);
@@ -382,6 +391,7 @@
     sb.write(')');
   }
 
+  @override
   void visitSetConstant(SetConstant node) {
     sb.write('Set<');
     typeToText.visit(node.typeArgument);
@@ -390,6 +400,7 @@
     sb.write(')');
   }
 
+  @override
   void visitInstanceConstant(InstanceConstant node) {
     sb.write('Instance(');
     sb.write(node.classNode.name);
@@ -413,6 +424,7 @@
     sb.write(')');
   }
 
+  @override
   void visitInstantiationConstant(InstantiationConstant node) {
     sb.write('Instantiation(');
     Constant tearOffConstant = node.tearOffConstant;
@@ -426,6 +438,7 @@
     sb.write('>)');
   }
 
+  @override
   void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     sb.write('TypedefTearOff(');
     sb.write(getMemberName(node.tearOffConstant.target));
@@ -454,18 +467,21 @@
     sb.write('>)');
   }
 
+  @override
   void visitStaticTearOffConstant(StaticTearOffConstant node) {
     sb.write('Function(');
     sb.write(getMemberName(node.target));
     sb.write(')');
   }
 
+  @override
   void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     sb.write('Constructor(');
     sb.write(getMemberName(node.target));
     sb.write(')');
   }
 
+  @override
   void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     sb.write('RedirectingFactory(');
@@ -473,12 +489,14 @@
     sb.write(')');
   }
 
+  @override
   void visitTypeLiteralConstant(TypeLiteralConstant node) {
     sb.write('TypeLiteral(');
     typeToText.visit(node.type);
     sb.write(')');
   }
 
+  @override
   void visitUnevaluatedConstant(UnevaluatedConstant node) {
     sb.write('Unevaluated()');
   }
@@ -509,21 +527,26 @@
     }
   }
 
+  @override
   void defaultDartType(DartType node) => throw new UnimplementedError(
       'Unexpected type $node (${node.runtimeType})');
 
+  @override
   void visitInvalidType(InvalidType node) {
     sb.write('<invalid>');
   }
 
+  @override
   void visitDynamicType(DynamicType node) {
     sb.write('dynamic');
   }
 
+  @override
   void visitVoidType(VoidType node) {
     sb.write('void');
   }
 
+  @override
   void visitNeverType(NeverType node) {
     sb.write('Never');
     if (node.nullability != Nullability.nonNullable) {
@@ -531,10 +554,12 @@
     }
   }
 
+  @override
   void visitNullType(NullType node) {
     sb.write('Null');
   }
 
+  @override
   void visitInterfaceType(InterfaceType node) {
     sb.write(node.classNode.name);
     if (node.typeArguments.isNotEmpty) {
@@ -547,6 +572,7 @@
     }
   }
 
+  @override
   void visitFutureOrType(FutureOrType node) {
     sb.write('FutureOr<');
     visit(node.typeArgument);
@@ -554,6 +580,7 @@
     sb.write(nullabilityToText(node.declaredNullability, typeRepresentation));
   }
 
+  @override
   void visitFunctionType(FunctionType node) {
     visit(node.returnType);
     sb.write(' Function');
@@ -610,6 +637,7 @@
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
   }
 
+  @override
   void visitTypeParameterType(TypeParameterType node) {
     sb.write(node.parameter.name);
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
@@ -619,6 +647,7 @@
     }
   }
 
+  @override
   void visitTypedefType(TypedefType node) {
     sb.write(node.typedefNode.name);
     if (node.typeArguments.isNotEmpty) {
@@ -629,6 +658,7 @@
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
   }
 
+  @override
   void visitExtensionType(ExtensionType node) {
     sb.write(node.extension.name);
     if (node.typeArguments.isNotEmpty) {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 8eb1f8d..9feaf38 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -102,6 +102,8 @@
 ConstEvalDuplicateElement/example: Fail
 ConstEvalDuplicateKey/example: Fail
 ConstEvalElementImplementsEqual/example: Fail
+ConstEvalError/analyzerCode: Fail
+ConstEvalError/example: Fail
 ConstEvalExtension/example: Fail
 ConstEvalExternalConstructor/analyzerCode: Fail
 ConstEvalExternalConstructor/example: Fail
@@ -150,6 +152,7 @@
 ConstFieldWithoutInitializer/example: Fail
 ConstructorNotFound/example: Fail
 ConstructorNotSync/example: Fail
+ConstructorTearOffWithTypeArguments/analyzerCode: Fail
 ContinueLabelNotTarget/example: Fail
 ContinueOutsideOfLoop/part_wrapped_script1: Fail
 ContinueOutsideOfLoop/script1: Fail
@@ -169,6 +172,8 @@
 CyclicClassHierarchy/part_wrapped_script2: Fail
 CyclicClassHierarchy/script1: Fail # We report an error for each class involved in the cycle.
 CyclicClassHierarchy/script2: Fail # We report an error for each class involved in the cycle.
+CyclicRedirectingFactoryConstructors/part_wrapped_script: Fail # Error is reported for each factory involved in the cycle.
+CyclicRedirectingFactoryConstructors/script: Fail # Error is reported for each factory involved in the cycle.
 CyclicTypedef/example: Fail
 DefaultListConstructorError/analyzerCode: Fail
 DefaultListConstructorError/example: Fail
@@ -179,8 +184,6 @@
 DeferredExtensionImport/part_wrapped_script: Fail
 DeferredPrefixDuplicated/example: Fail
 DeferredTypeAnnotation/example: Fail
-DeprecateDartExt/analyzerCode: Fail
-DeprecateDartExt/part_wrapped_script: Fail # Example uses import declaration.
 DillOutlineSummary/analyzerCode: Fail
 DillOutlineSummary/example: Fail
 DirectiveAfterDeclaration/part_wrapped_script1: Fail
@@ -559,6 +562,7 @@
 MainWrongParameterTypeExported/analyzerCode: Fail
 MainWrongParameterTypeExported/part_wrapped_script: Fail
 MapLiteralTypeArgumentMismatch/example: Fail
+MemberNotFound/example: Fail
 MetadataTypeArguments/example: Fail
 MethodNotFound/example: Fail
 MissingArgumentList/analyzerCode: Fail
@@ -587,6 +591,7 @@
 MultipleVarianceModifiers/example: Fail # All trigger multiple errors for variance experiment
 MultipleWith/part_wrapped_script: Fail
 MultipleWith/script: Fail
+NameNotFound/example: Fail
 NamedFunctionExpression/example: Fail
 NamedMixinOverride/analyzerCode: Fail
 NamedMixinOverride/example: Fail
@@ -751,6 +756,7 @@
 SpreadMapEntryTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
 SpreadTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
 StackOverflow/example: Fail
+StaticTearOffFromInstantiatedClass/analyzerCode: Fail
 StrongModeNNBDButOptOut/analyzerCode: Fail
 StrongModeNNBDButOptOut/example: Fail
 StrongModeNNBDPackageOptOut/analyzerCode: Fail
@@ -763,6 +769,7 @@
 SuperNullAware/example: Fail
 SuperclassHasNoDefaultConstructor/example: Fail
 SuperclassHasNoGetter/example: Fail
+SuperclassHasNoMember/example: Fail
 SuperclassHasNoMethod/example: Fail
 SuperclassHasNoSetter/example: Fail
 SuperclassMethodArgumentMismatch/analyzerCode: Fail
@@ -814,6 +821,8 @@
 UnmatchedToken/script3: Fail
 Unspecified/analyzerCode: Fail
 Unspecified/example: Fail
+UnsupportedDartExt/analyzerCode: Fail
+UnsupportedDartExt/part_wrapped_script: Fail # Example uses import declaration.
 UnterminatedString/part_wrapped_script2: Fail
 UnterminatedString/part_wrapped_script4: Fail
 UnterminatedString/part_wrapped_script5: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index e94eac1..043ae81 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -228,6 +228,9 @@
 ConstEvalUnevaluated:
   template: "Couldn't evaluate constant expression."
 
+ConstEvalError:
+  template: "Error evaluating constant expression: #string"
+
 ConstEvalUnhandledCoreException:
   template: "Unhandled core exception: #stringOKEmpty"
 
@@ -1625,8 +1628,8 @@
       }
 
 ConstructorWithTypeArguments:
-  template: "A constructor invocation can't have type arguments on the constructor name."
-  tip: "Try to place the type arguments on the class name."
+  template: "A constructor invocation can't have type arguments after the constructor name."
+  tip: "Try removing the type arguments or placing them after the class name."
   analyzerCode: WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   script:
     - "class C<X> { C.foo(); } bar() { new C.foo<int>(); }"
@@ -1685,6 +1688,14 @@
   template: "Can only use type variables in instance methods."
   analyzerCode: TYPE_PARAMETER_REFERENCED_BY_STATIC
 
+NameNotFound:
+  template: "Undefined name '#name'."
+  analyzerCode: UNDEFINED_NAME
+
+MemberNotFound:
+  template: "Member not found: '#name'."
+  analyzerCode: UNDEFINED_GETTER
+
 GetterNotFound:
   template: "Getter not found: '#name'."
   analyzerCode: UNDEFINED_GETTER
@@ -3257,6 +3268,10 @@
 SuperclassMethodArgumentMismatch:
   template: "Superclass doesn't have a method named '#name' with matching arguments."
 
+SuperclassHasNoMember:
+  template: "Superclass has no member named '#name'."
+  analyzerCode: UNDEFINED_SUPER_GETTER
+
 SuperclassHasNoGetter:
   template: "Superclass has no getter named '#name'."
   analyzerCode: UNDEFINED_SUPER_GETTER
@@ -5217,10 +5232,9 @@
     // @dart=2.9
     main() {}
 
-DeprecateDartExt:
-  template: "Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK."
+UnsupportedDartExt:
+  template: "Dart native extensions are no longer supported."
   tip: "Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)"
-  severity: INFO
   script: |
     import 'dart-ext:foo.dart';
 
@@ -5254,3 +5268,19 @@
   script: |
     abstract class Class {}
     main() => Class.new;
+
+StaticTearOffFromInstantiatedClass:
+  template: "Cannot access static member on an instantiated generic class."
+  tip: "Try removing the type arguments or placing them after the member name."
+  experiments: constructor-tearoffs
+  script: |
+    class A<X> { static f() {} }
+    main() => A<int>.f;
+
+
+ConstructorTearOffWithTypeArguments:
+  template: "A constructor tear-off can't have type arguments after the constructor name."
+  tip: "Try removing the type arguments or placing them after the class name."
+  experiments: constructor-tearoffs
+  script:
+    - "class C<X> { C.foo(); } bar() { C.foo<int>; }"
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
index e053cfc..9fea306 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
@@ -8,9 +8,9 @@
   {foo());}
         ^
 
-parser/error_recovery/bracket_mismatch_03:2:9: Expected ';' after this.
+parser/error_recovery/bracket_mismatch_03:2:8: Expected ';' after this.
   {foo());}
-        ^
+       ^
 
 parser/error_recovery/bracket_mismatch_03:2:9: Unexpected token ')'.
   {foo());}
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
index b4f350e..ffe546c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
@@ -82,7 +82,7 @@
                                       listener: handleNoArguments())
                                     listener: handleSend(, ))
                           ensureSemicolon()
-                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                               listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
                             rewriter()
                           listener: handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
index d4b6a44..e8d4816 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
@@ -8,9 +8,9 @@
   foo(() {bar());});
                ^
 
-parser/error_recovery/bracket_mismatch_04:2:16: Expected ';' after this.
+parser/error_recovery/bracket_mismatch_04:2:15: Expected ';' after this.
   foo(() {bar());});
-               ^
+              ^
 
 parser/error_recovery/bracket_mismatch_04:2:16: Unexpected token ';'.
   foo(() {bar());});
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
index 5dee028..b4a6f0d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
@@ -115,7 +115,7 @@
                                                                           listener: handleNoArguments())
                                                                         listener: handleSend(, ))
                                                               ensureSemicolon()
-                                                                reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                                                reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                                                                   listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
                                                                 rewriter()
                                                               listener: handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
index 38d9d89..2d94d81 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
@@ -25,7 +25,7 @@
           beginConstructorReference(C)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(C, null, ()
+          endConstructorReference(C, null, (, ConstructorReferenceContext.New)
           beginArguments(()
             handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
             handleIdentifier(, expression)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
index 1367408..e2d55ca 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
@@ -40,14 +40,14 @@
                             parseNewExpression({)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(C, constructorReference)
                                 listener: beginConstructorReference(C)
                                 parseQualifiedRestOpt(C, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(C, null, ()
+                                listener: endConstructorReference(C, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(C)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
index 0affd02..1b4fc95 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
@@ -4,17 +4,17 @@
   for () {}
        ^
 
-parser/error_recovery/empty_for:2:8: Expected ';' after this.
+parser/error_recovery/empty_for:2:7: Expected ';' after this.
   for () {}
-       ^
+      ^
 
 parser/error_recovery/empty_for:2:8: Expected an identifier, but got ')'.
   for () {}
        ^
 
-parser/error_recovery/empty_for:2:8: Expected ';' after this.
+parser/error_recovery/empty_for:2:7: Expected ';' after this.
   for () {}
-       ^
+      ^
 
 beginCompilationUnit(main)
   beginMetadataStar(main)
@@ -35,13 +35,13 @@
           handleNoArguments())
           handleSend(, ))
           handleForInitializerExpressionStatement(, false)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
           handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
           handleIdentifier(, expression)
           handleNoTypeArguments())
           handleNoArguments())
           handleSend(, ))
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
           handleExpressionStatement(;)
           handleForLoopParts(for, (, ;, 0)
           beginForStatementBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
index fb9fb95..d816a82 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
@@ -54,8 +54,8 @@
                 parseForRest(null, , for)
                   parseForLoopPartsRest(, for, null)
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                       rewriter()
                     parseExpressionStatement(;)
                       parseExpression(;)
@@ -74,8 +74,8 @@
                                   listener: handleNoArguments())
                                 listener: handleSend(, ))
                       ensureSemicolon()
-                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                        reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                         rewriter()
                       listener: handleExpressionStatement(;)
                     listener: handleForLoopParts(for, (, ;, 0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart
new file mode 100644
index 0000000..47a1097
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart
@@ -0,0 +1,12 @@
+extension E<T extends num> on List<T> {
+  bool a(int b, int c) {}
+  int get b => 0;
+  set c(int d) {}
+}
+void f(List<int> l) {
+  l.a /* the user is typing here */
+}
+void g(List<int> l) {
+  l.a /* the user is typing here */
+  print(l.b);
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..58a0949
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
@@ -0,0 +1,203 @@
+Problems reported:
+
+parser/error_recovery/extension_member_contributor_test_completion:7:5: Expected ';' after this.
+  l.a /* the user is typing here */
+    ^
+
+parser/error_recovery/extension_member_contributor_test_completion:11:3: Expected ';' after this.
+  print(l.b);
+  ^^^^^
+
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(num, 1)
+        handleIdentifier(num, typeReference)
+        handleNoTypeArguments(>)
+        handleType(num, null)
+      endTypeVariable(>, 0, extends, null)
+    endTypeVariables(<, >)
+    beginExtensionDeclaration(extension, E)
+      handleIdentifier(List, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(List, null)
+      beginClassOrMixinBody(DeclarationKind.Extension, {)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, a)
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(a)
+            handleType(bool, null)
+            handleIdentifier(a, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(b)
+                handleType(int, null)
+                handleIdentifier(b, formalParameterDeclaration)
+                handleFormalParameterWithoutValue(,)
+              endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(c)
+                handleType(int, null)
+                handleIdentifier(c, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+            endFormalParameters(2, (, ), MemberKind.ExtensionNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endExtensionMethod(null, bool, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, get, b)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(b, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.ExtensionNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endExtensionMethod(get, int, =>, null, ;)
+        endMember()
+        beginMetadataStar(set)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, set, c)
+            handleNoType(;)
+            handleIdentifier(c, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(d)
+                handleType(int, null)
+                handleIdentifier(d, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, d, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endExtensionMethod(set, set, (, null, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Extension, 3, {, })
+    endExtensionDeclaration(extension, null, on, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(l, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(l, expression)
+        handleNoTypeArguments(.)
+        handleNoArguments(.)
+        handleSend(l, .)
+        handleIdentifier(a, expressionContinuation)
+        handleNoTypeArguments(})
+        handleNoArguments(})
+        handleSend(a, })
+        handleEndingBinaryExpression(.)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], a, a)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(l, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(l)
+        endMetadataStar(0)
+        handleIdentifier(l, prefixedTypeReference)
+        handleIdentifier(a, typeReferenceContinuation)
+        handleQualified(.)
+        handleNoTypeArguments(print)
+        handleType(l, null)
+        beginVariablesDeclaration(print, null, null)
+          handleIdentifier(print, localVariableDeclaration)
+          beginInitializedIdentifier(print)
+            handleNoVariableInitializer(print)
+          endInitializedIdentifier(print)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], print, print)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(l, expression)
+        handleNoTypeArguments(.)
+        handleNoArguments(.)
+        handleSend(l, .)
+        handleIdentifier(b, expressionContinuation)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(b, ))
+        handleEndingBinaryExpression(.)
+        handleParenthesizedExpression(()
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
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
new file mode 100644
index 0000000..0a0206e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
@@ -0,0 +1,368 @@
+parseUnit(extension)
+  skipErrorTokens(extension)
+  listener: beginCompilationUnit(extension)
+  syntheticPreviousToken(extension)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, extension, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(, extension)
+      parseExtension(extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        listener: beginTypeVariables(<)
+        parseMetadataStar(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+        ensureIdentifier(<, typeVariableDeclaration)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(num, 1)
+        listener: handleIdentifier(num, typeReference)
+        listener: handleNoTypeArguments(>)
+        listener: handleType(num, null)
+        listener: endTypeVariable(>, 0, extends, null)
+        listener: endTypeVariables(<, >)
+        listener: beginExtensionDeclaration(extension, E)
+        listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        listener: handleIdentifier(T, typeReference)
+        listener: handleNoTypeArguments(>)
+        listener: handleType(T, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        parseClassOrMixinOrExtensionBody(>, DeclarationKind.Extension, E)
+          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          notEofOrValue(}, bool)
+          parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, E)
+            parseMetadataStar({)
+              listener: beginMetadataStar(bool)
+              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: handleIdentifier(bool, typeReference)
+              listener: handleNoTypeArguments(a)
+              listener: handleType(bool, null)
+              ensureIdentifierPotentiallyRecovered(bool, methodDeclaration, false)
+                listener: handleIdentifier(a, methodDeclaration)
+              parseQualifiedRestOpt(a, methodDeclarationContinuation)
+              parseMethodTypeVar(a)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(a, a, false, MemberKind.ExtensionNonStaticMethod)
+                parseFormalParameters(a, MemberKind.ExtensionNonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(int)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(b)
+                      listener: handleType(int, null)
+                      ensureIdentifier(int, formalParameterDeclaration)
+                        listener: handleIdentifier(b, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue(,)
+                      listener: endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      parseMetadataStar(,)
+                        listener: beginMetadataStar(int)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(c)
+                      listener: handleType(int, null)
+                      ensureIdentifier(int, formalParameterDeclaration)
+                        listener: handleIdentifier(c, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    listener: endFormalParameters(2, (, ), MemberKind.ExtensionNonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endExtensionMethod(null, bool, (, null, })
+            listener: endMember()
+          notEofOrValue(}, int)
+          parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Extension, E)
+            parseMetadataStar(})
+              listener: beginMetadataStar(int)
+              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: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(get)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                listener: handleIdentifier(b, methodDeclaration)
+              parseQualifiedRestOpt(b, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(=>)
+              parseGetterOrFormalParameters(b, b, true, MemberKind.ExtensionNonStaticMethod)
+                listener: handleNoFormalParameters(=>, MemberKind.ExtensionNonStaticMethod)
+              parseInitializersOpt(b)
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt(b)
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(b, false, true)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralInt(=>)
+                            listener: handleLiteralInt(0)
+                  ensureSemicolon(0)
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endExtensionMethod(get, int, =>, null, ;)
+            listener: endMember()
+          notEofOrValue(}, set)
+          parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Extension, E)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(set)
+              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: handleNoType(;)
+              ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                listener: handleIdentifier(c, methodDeclaration)
+              parseQualifiedRestOpt(c, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(c, c, false, MemberKind.ExtensionNonStaticMethod)
+                parseFormalParameters(c, MemberKind.ExtensionNonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(int)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(d)
+                      listener: handleType(int, null)
+                      ensureIdentifier(int, formalParameterDeclaration)
+                        listener: handleIdentifier(d, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, d, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endExtensionMethod(set, set, (, null, })
+            listener: endMember()
+          notEofOrValue(}, })
+          listener: endClassOrMixinBody(DeclarationKind.Extension, 3, {, })
+        listener: endExtensionDeclaration(extension, null, on, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(l, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, l)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(l)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(l, expression)
+                              listener: handleNoTypeArguments(.)
+                              parseArgumentsOpt(l)
+                                listener: handleNoArguments(.)
+                              listener: handleSend(l, .)
+                      parsePrimary(., expressionContinuation)
+                        parseSendOrFunctionLiteral(., expressionContinuation)
+                          parseSend(., expressionContinuation)
+                            isNextIdentifier(.)
+                            ensureIdentifier(., expressionContinuation)
+                              listener: handleIdentifier(a, expressionContinuation)
+                            listener: handleNoTypeArguments(})
+                            parseArgumentsOpt(a)
+                              listener: handleNoArguments(})
+                            listener: handleSend(a, })
+                      listener: handleEndingBinaryExpression(.)
+                  ensureSemicolon(a)
+                    reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], a, a)
+                    rewriter()
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(l, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, l)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                listener: beginMetadataStar(l)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(l, prefixedTypeReference)
+                listener: handleIdentifier(a, typeReferenceContinuation)
+                listener: handleQualified(.)
+                listener: handleNoTypeArguments(print)
+                listener: handleType(l, null)
+                listener: beginVariablesDeclaration(print, null, null)
+                parseVariablesDeclarationRest(a, true)
+                  parseOptionallyInitializedIdentifier(a)
+                    ensureIdentifier(a, localVariableDeclaration)
+                      listener: handleIdentifier(print, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(print)
+                    parseVariableInitializerOpt(print)
+                      listener: handleNoVariableInitializer(print)
+                    listener: endInitializedIdentifier(print)
+                  ensureSemicolon(print)
+                    reportRecoverableError(print, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], print, print)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(;)
+                              parseParenthesizedExpression(;)
+                                parseExpressionInParenthesis(;)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(l, expression)
+                                                listener: handleNoTypeArguments(.)
+                                                parseArgumentsOpt(l)
+                                                  listener: handleNoArguments(.)
+                                                listener: handleSend(l, .)
+                                        parsePrimary(., expressionContinuation)
+                                          parseSendOrFunctionLiteral(., expressionContinuation)
+                                            parseSend(., expressionContinuation)
+                                              isNextIdentifier(.)
+                                              ensureIdentifier(., expressionContinuation)
+                                                listener: handleIdentifier(b, expressionContinuation)
+                                              listener: handleNoTypeArguments())
+                                              parseArgumentsOpt(b)
+                                                listener: handleNoArguments())
+                                              listener: handleSend(b, ))
+                                        listener: handleEndingBinaryExpression(.)
+                                    ensureCloseParen(b, ()
+                                listener: handleParenthesizedExpression(()
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(extension)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.parser.expect
new file mode 100644
index 0000000..74b9c09
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.parser.expect
@@ -0,0 +1,27 @@
+NOTICE: Stream was rewritten by parser!
+
+extension E<T extends num> on List<T> {
+bool a(int b, int c) {}
+int get b => 0;
+set c(int d) {}
+}
+void f(List<int> l) {
+l.a
+;}
+void g(List<int> l) {
+l.a
+print;(l.b);
+}
+
+extension[KeywordToken] E[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] num[StringToken]>[SimpleToken] on[KeywordToken] List[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] {[BeginToken]
+bool[StringToken] a[StringToken]([BeginToken]int[StringToken] b[StringToken],[SimpleToken] int[StringToken] c[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+int[StringToken] get[KeywordToken] b[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+set[KeywordToken] c[StringToken]([BeginToken]int[StringToken] d[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+void[KeywordToken] f[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] l[StringToken])[SimpleToken] {[BeginToken]
+l[StringToken].[SimpleToken]a[StringToken]
+;[SyntheticToken]}[SimpleToken]
+void[KeywordToken] g[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] l[StringToken])[SimpleToken] {[BeginToken]
+l[StringToken].[SimpleToken]a[StringToken]
+print[StringToken];[SyntheticToken]([BeginToken]l[StringToken].[SimpleToken]b[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.scanner.expect
new file mode 100644
index 0000000..4b5241f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.scanner.expect
@@ -0,0 +1,25 @@
+extension E<T extends num> on List<T> {
+bool a(int b, int c) {}
+int get b => 0;
+set c(int d) {}
+}
+void f(List<int> l) {
+l.a
+}
+void g(List<int> l) {
+l.a
+print(l.b);
+}
+
+extension[KeywordToken] E[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] num[StringToken]>[SimpleToken] on[KeywordToken] List[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] {[BeginToken]
+bool[StringToken] a[StringToken]([BeginToken]int[StringToken] b[StringToken],[SimpleToken] int[StringToken] c[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+int[StringToken] get[KeywordToken] b[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+set[KeywordToken] c[StringToken]([BeginToken]int[StringToken] d[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+void[KeywordToken] f[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] l[StringToken])[SimpleToken] {[BeginToken]
+l[StringToken].[SimpleToken]a[StringToken]
+}[SimpleToken]
+void[KeywordToken] g[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] l[StringToken])[SimpleToken] {[BeginToken]
+l[StringToken].[SimpleToken]a[StringToken]
+print[StringToken]([BeginToken]l[StringToken].[SimpleToken]b[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart
new file mode 100644
index 0000000..5273c43
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart
@@ -0,0 +1,11 @@
+// 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.
+// @dart=2.9
+class C {
+  C<
+}
+
+main() {
+  C<
+}
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
new file mode 100644
index 0000000..0136c1d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -0,0 +1,84 @@
+Problems reported:
+
+parser/error_recovery/issue_000032:7:1: Expected a type, but got '}'.
+}
+^
+
+parser/error_recovery/issue_000032:7:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/issue_000032:6:4: Expected ';' after this.
+  C<
+   ^
+
+parser/error_recovery/issue_000032:11:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/issue_000032:10:4: Expected ';' after this.
+  C<
+   ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(C, typeReference)
+            beginTypeArguments(<)
+              handleRecoverableError(Message[ExpectedType, Expected a type, but got '}'., null, {lexeme: }}], }, })
+              handleIdentifier(, typeReference)
+              handleNoTypeArguments(})
+              handleType(, null)
+            endTypeArguments(1, <, >)
+            handleType(C, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
+          endClassFields(null, null, null, null, null, null, 1, C, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(C, expression)
+        handleNoTypeArguments(<)
+        handleNoArguments(<)
+        handleSend(C, <)
+        beginBinaryExpression(<)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+          handleIdentifier(, expression)
+          handleNoTypeArguments(})
+          handleNoArguments(})
+          handleSend(, })
+        endBinaryExpression(<)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..2733df1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -0,0 +1,136 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(C)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(C, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(}, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '}'., null, {lexeme: }}], }, })
+                  rewriter()
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(})
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(C, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                      rewriter()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, C)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, C, ;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, C)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(C)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(C, expression)
+                              listener: handleNoTypeArguments(<)
+                              parseArgumentsOpt(C)
+                                listener: handleNoArguments(<)
+                              listener: handleSend(C, <)
+                      listener: beginBinaryExpression(<)
+                      parsePrecedenceExpression(<, 9, true)
+                        parseUnaryExpression(<, true)
+                          parsePrimary(<, expression)
+                            parseSend(<, expression)
+                              isNextIdentifier(<)
+                              ensureIdentifier(<, expression)
+                                reportRecoverableErrorWithToken(}, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments(})
+                              parseArgumentsOpt()
+                                listener: handleNoArguments(})
+                              listener: handleSend(, })
+                      listener: endBinaryExpression(<)
+                  ensureSemicolon()
+                    reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
+                    rewriter()
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.parser.expect
new file mode 100644
index 0000000..ec9179f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.parser.expect
@@ -0,0 +1,19 @@
+NOTICE: Stream was rewritten by parser!
+
+class C {
+C<
+*synthetic*>*synthetic*;}
+
+main() {
+C<
+*synthetic*;}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]<[BeginToken]
+[SyntheticStringToken]>[SyntheticToken][SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+C[StringToken]<[BeginToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.scanner.expect
new file mode 100644
index 0000000..e08ff6f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.scanner.expect
@@ -0,0 +1,17 @@
+class C {
+C<
+}
+
+main() {
+C<
+}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]<[BeginToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+C[StringToken]<[BeginToken]
+}[SimpleToken]
+[SimpleToken]
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 6514ad1..23e29a3 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
@@ -124,7 +124,7 @@
                   handleType(C, null)
                 endTypeArguments(1, <, >)
                 handleNoConstructorReferenceContinuationAfterTypeArguments(()
-              endConstructorReference(A, null, ()
+              endConstructorReference(A, null, (, ConstructorReferenceContext.New)
               beginArguments(()
               endArguments(0, (, ))
             endNewExpression(new)
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 9dfd6b8..f79f784 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
@@ -203,7 +203,7 @@
                             parseNewExpression(=>)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(A, constructorReference)
                                 listener: beginConstructorReference(A)
@@ -218,7 +218,7 @@
                                 listener: handleType(C, null)
                                 listener: endTypeArguments(1, <, >)
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(A, null, ()
+                                listener: endConstructorReference(A, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(>)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
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 6b960ce..46f6afb 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
@@ -10,11 +10,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/error_recovery/issue_39033.crash:1:17: Expected ';' after this.
+parser/error_recovery/issue_39033.crash:1:16: Expected ';' after this.
 typedef F<Glib.=
-                ^...
-
-WARNING: Reporting at eof --- see below for details.
+               ^
 
 beginCompilationUnit(typedef)
   beginMetadataStar(typedef)
@@ -37,8 +35,7 @@
       handleIdentifier(, typeReference)
       handleNoTypeArguments()
       handleType(, null)
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
     endFunctionTypeAlias(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 c85f9e8..b2f18b7 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
@@ -34,9 +34,8 @@
         listener: handleNoTypeArguments()
         listener: handleType(, null)
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(=, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
           rewriter()
         listener: endFunctionTypeAlias(typedef, =, ;)
   listener: endTopLevelDeclaration()
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 43a90df..5bd3f47 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
@@ -26,11 +26,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/error_recovery/issue_39202.crash:1:25: Expected ';' after this.
+parser/error_recovery/issue_39202.crash:1:24: Expected ';' after this.
 () async => a b < c $? >
-                        ^...
-
-WARNING: Reporting at eof --- see below for details.
+                       ^
 
 beginCompilationUnit(()
   beginMetadataStar(()
@@ -80,8 +78,7 @@
       // WARNING: Reporting at eof for .
       handleIdentifier(, topLevelVariableDeclaration)
       handleNoFieldInitializer()
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
     endTopLevelFields(null, null, null, null, null, 1, b, ;)
   endTopLevelDeclaration()
 endCompilationUnit(4, )
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 f2fb1b9..7754b5d 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
@@ -98,9 +98,8 @@
         parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           rewriter()
         listener: endTopLevelFields(null, null, null, null, null, 1, b, ;)
   listener: endTopLevelDeclaration()
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 c04b45f..1a1a560 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
@@ -16,11 +16,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/error_recovery/issue_42229.crash:1:34: Expected ';' after this.
+parser/error_recovery/issue_42229.crash:1:14: Expected ';' after this.
 Stream<List<>> /* nothing here */
-                                 ^...
-
-WARNING: Reporting at eof --- see below for details.
+             ^
 
 beginCompilationUnit(Stream)
   beginMetadataStar(Stream)
@@ -45,8 +43,7 @@
       // WARNING: Reporting at eof for .
       handleIdentifier(, topLevelVariableDeclaration)
       handleNoFieldInitializer()
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
     endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
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 25548f5..02666ab 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
@@ -41,9 +41,8 @@
         parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           rewriter()
         listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   listener: endTopLevelDeclaration()
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 308e34f..8fca493 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
@@ -10,11 +10,9 @@
 Stream<List<> >
             ^
 
-parser/error_recovery/issue_42229_prime.crash:1:16: Expected ';' after this.
+parser/error_recovery/issue_42229_prime.crash:1:15: Expected ';' after this.
 Stream<List<> >
-               ^...
-
-WARNING: Reporting at eof --- see below for details.
+              ^
 
 beginCompilationUnit(Stream)
   beginMetadataStar(Stream)
@@ -37,8 +35,7 @@
       handleType(Stream, null)
       handleIdentifier(, topLevelVariableDeclaration)
       handleNoFieldInitializer()
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
     endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
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 3aface3..898699b 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
@@ -36,9 +36,8 @@
         parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           rewriter()
         listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   listener: endTopLevelDeclaration()
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 b9194da..77d9505 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
@@ -12,11 +12,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/error_recovery/issue_42229_prime_3.crash:1:17: Expected ';' after this.
+parser/error_recovery/issue_42229_prime_3.crash:1:15: Expected ';' after this.
 Stream<List<x>> 
-                ^...
-
-WARNING: Reporting at eof --- see below for details.
+              ^
 
 beginCompilationUnit(Stream)
   beginMetadataStar(Stream)
@@ -40,8 +38,7 @@
       // WARNING: Reporting at eof for .
       handleIdentifier(, topLevelVariableDeclaration)
       handleNoFieldInitializer()
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
     endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
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 69d438c..09c91a7 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
@@ -37,9 +37,8 @@
         parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           rewriter()
         listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   listener: endTopLevelDeclaration()
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 0291006..a6a2fda 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
@@ -154,7 +154,7 @@
                     handleType(List, null)
                   endTypeArguments(2, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Map, null, ()
+                endConstructorReference(Map, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
@@ -182,7 +182,7 @@
                 beginConstructorReference(Map)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Map, null, ()
+                endConstructorReference(Map, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
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 3d2e81d..dcf5d7e 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
@@ -191,7 +191,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
@@ -209,7 +209,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(2, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Map, null, ()
+                              listener: endConstructorReference(Map, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -247,14 +247,14 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
                               parseQualifiedRestOpt(Map, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Map, null, ()
+                              listener: endConstructorReference(Map, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(Map)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
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 0f278c9..50b89e2 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
@@ -133,7 +133,7 @@
                     handleType(List, null)
                   endTypeArguments(1, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(List, null, ()
+                endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
@@ -158,7 +158,7 @@
                 beginConstructorReference(List)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(List, null, ()
+                endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
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 84d3ed8..cce2e11 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
@@ -178,7 +178,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
@@ -193,7 +193,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(1, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(List, null, ()
+                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -227,14 +227,14 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
                               parseQualifiedRestOpt(List, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(List, null, ()
+                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(List)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
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 447db69..afbfdbd 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
@@ -140,7 +140,7 @@
                     handleType(List, null)
                   endTypeArguments(1, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(List, null, ()
+                endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -165,7 +165,7 @@
                 beginConstructorReference(List)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(List, null, ()
+                endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
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 a8ab4b7..a698701 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
@@ -181,7 +181,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
@@ -196,7 +196,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(1, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(List, null, ()
+                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -231,14 +231,14 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
                               parseQualifiedRestOpt(List, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(List, null, ()
+                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(List)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
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 c1b095d..2010b9a 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
@@ -161,7 +161,7 @@
                     handleType(List, null)
                   endTypeArguments(2, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Map, null, ()
+                endConstructorReference(Map, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -189,7 +189,7 @@
                 beginConstructorReference(Map)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Map, null, ()
+                endConstructorReference(Map, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
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 faa270d..61610fe1 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
@@ -194,7 +194,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
@@ -212,7 +212,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(2, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Map, null, ()
+                              listener: endConstructorReference(Map, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -251,14 +251,14 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
                               parseQualifiedRestOpt(Map, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Map, null, ()
+                              listener: endConstructorReference(Map, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(Map)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
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 7d01b7d5..4fa9c10 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
@@ -133,7 +133,7 @@
                     handleType(List, null)
                   endTypeArguments(1, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Set, null, ()
+                endConstructorReference(Set, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
@@ -158,7 +158,7 @@
                 beginConstructorReference(Set)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Set, null, ()
+                endConstructorReference(Set, null, (, ConstructorReferenceContext.Const)
                 beginArguments(()
                 endArguments(0, (, ))
               endConstExpression(const)
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 7f9a6a5..bce083f 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
@@ -169,7 +169,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
@@ -184,7 +184,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(1, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Set, null, ()
+                              listener: endConstructorReference(Set, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -218,14 +218,14 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
                               parseQualifiedRestOpt(Set, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Set, null, ()
+                              listener: endConstructorReference(Set, null, (, ConstructorReferenceContext.Const)
                             parseConstructorInvocationArguments(Set)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
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 1df0d1b..8259775 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
@@ -140,7 +140,7 @@
                     handleType(List, null)
                   endTypeArguments(1, <, >)
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Set, null, ()
+                endConstructorReference(Set, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -165,7 +165,7 @@
                 beginConstructorReference(Set)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(Set, null, ()
+                endConstructorReference(Set, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
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 264c4d0..ae71f89 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
@@ -172,7 +172,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'ComplexTypeParamOrArgInfo')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
@@ -187,7 +187,7 @@
                               listener: handleType(List, null)
                               listener: endTypeArguments(1, <, >)
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Set, null, ()
+                              listener: endConstructorReference(Set, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(>)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
@@ -222,14 +222,14 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, Instance of 'NoTypeParamOrArg')
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
                               parseQualifiedRestOpt(Set, constructorReferenceContinuation)
                               listener: handleNoTypeArguments(()
                               listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                              listener: endConstructorReference(Set, null, ()
+                              listener: endConstructorReference(Set, null, (, ConstructorReferenceContext.New)
                             parseConstructorInvocationArguments(Set)
                               parseArgumentsRest(()
                                 listener: beginArguments(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart
index a7c3e9c..3f047d3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart
@@ -1,3 +1,7 @@
 class A {
   Stream<List<>>
-}
\ No newline at end of file
+}
+
+class B {
+  List<>
+}
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 c0b7186..7467b87 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
@@ -1,17 +1,29 @@
 Problems reported:
 
-parser/error_recovery/issue_46505.crash:2:10: Expected '>' after this.
+parser/error_recovery/issue_46505.crash:2:15: Expected a type, but got '>>'.
   Stream<List<>>
-         ^^^^
+              ^^
 
-parser/error_recovery/issue_46505.crash:2:3: A method declaration needs an explicit list of parameters.
-  Stream<List<>>
-  ^^^^^^
-
-parser/error_recovery/issue_46505.crash:3:1: Expected a function body, but got '}'.
+parser/error_recovery/issue_46505.crash:3:1: Expected an identifier, but got '}'.
 }
 ^
 
+parser/error_recovery/issue_46505.crash:2:16: Expected ';' after this.
+  Stream<List<>>
+               ^
+
+parser/error_recovery/issue_46505.crash:6:8: Expected a type, but got '>'.
+  List<>
+       ^
+
+parser/error_recovery/issue_46505.crash:7:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/issue_46505.crash:6:8: Expected ';' after this.
+  List<>
+       ^
+
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
@@ -28,29 +40,59 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Stream)
-            handleNoType({)
-            handleIdentifier(Stream, methodDeclaration)
-            beginTypeVariables(<)
-              beginMetadataStar(List)
-              endMetadataStar(0)
-              handleIdentifier(List, typeVariableDeclaration)
-              beginTypeVariable(List)
-                handleTypeVariablesDefined(List, 1)
-                handleNoType(List)
-              endTypeVariable(<, 0, null, null)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-            endTypeVariables(<, >)
-            handleRecoverableError(MissingMethodParameters, Stream, Stream)
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-            handleNoInitializers()
-            handleAsyncModifier(null, null)
-            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-            handleInvalidFunctionBody({)
-          endClassMethod(null, Stream, (, null, })
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>'., null, {lexeme: >>}], >>, >>)
+                handleIdentifier(, typeReference)
+                handleNoTypeArguments(>>)
+                handleType(, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, B)
+      handleNoType(B)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(List, typeReference)
+            beginTypeArguments(<)
+              handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
+              handleIdentifier(, typeReference)
+              handleNoTypeArguments(>)
+              handleType(, null)
+            endTypeArguments(1, <, >)
+            handleType(List, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, List, ;)
         endMember()
       endClassOrMixinBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
-endCompilationUnit(1, )
+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 c4e4b6a..1354d2a 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
@@ -32,58 +32,104 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               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: handleNoType({)
-                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
-                  listener: handleIdentifier(Stream, methodDeclaration)
-                parseQualifiedRestOpt(Stream, methodDeclarationContinuation)
-                parseMethodTypeVar(Stream)
-                  listener: beginTypeVariables(<)
-                  parseMetadataStar(<)
-                    listener: beginMetadataStar(List)
-                    listener: endMetadataStar(0)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    listener: handleIdentifier(List, typeVariableDeclaration)
-                  listener: beginTypeVariable(List)
-                  listener: handleTypeVariablesDefined(List, 1)
-                  listener: handleNoType(List)
-                  listener: endTypeVariable(<, 0, null, null)
-                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    reportRecoverableErrorWithToken(>>, Instance of 'Template<(Token) => Message>')
-                    rewriter()
-                  listener: endTypeVariables(<, >)
-                parseGetterOrFormalParameters(>, Stream, false, MemberKind.NonStaticMethod)
-                  missingParameterMessage(MemberKind.NonStaticMethod)
-                  reportRecoverableError(Stream, MissingMethodParameters)
-                    listener: handleRecoverableError(MissingMethodParameters, Stream, Stream)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(Stream, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>'., null, {lexeme: >>}], >>, >>)
                   rewriter()
-                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
-                  inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
-                    reportRecoverableError(}, Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}])
-                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-                    insertBlock())
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Stream, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, B)
+        parseClass(B, class, class, B)
+          parseClassHeaderOpt(B, class, class)
+            parseClassExtendsOpt(B)
+              listener: handleNoType(B)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(B)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(B)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, List)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, B)
+              parseMetadataStar({)
+                listener: beginMetadataStar(List)
+                listener: endMetadataStar(0)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
+                  rewriter()
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
-                  listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, Stream, (, null, })
-              listener: endMember()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, List, ;)
+                listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
-  listener: endCompilationUnit(1, )
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.parser.expect
index 3630ae3..549b747 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.parser.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.parser.expect
@@ -2,8 +2,18 @@
 
 class A {
 Stream<List<*synthetic*>>
-(){}}
+*synthetic*;}
+
+class B {
+List<*synthetic*>
+*synthetic*;}
+
 
 class[KeywordToken] A[StringToken] {[BeginToken]
 Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]>[SimpleToken]
-([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]}[SimpleToken][SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+
+class[KeywordToken] B[StringToken] {[BeginToken]
+List[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.scanner.expect
index 54d49e5..fb64a7c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.scanner.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.scanner.expect
@@ -2,6 +2,16 @@
 Stream<List<>>
 }
 
+class B {
+List<>
+}
+
+
 class[KeywordToken] A[StringToken] {[BeginToken]
 Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]>>[SimpleToken]
-}[SimpleToken][SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] {[BeginToken]
+List[StringToken]<[BeginToken]>[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
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 27d5686..df6d7fe 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
@@ -1,17 +1,17 @@
 Problems reported:
 
-parser/error_recovery/issue_46505_prime_3.crash:2:10: Expected '>' after this.
+parser/error_recovery/issue_46505_prime_3.crash:2:19: Expected a type, but got '>>>'.
   Stream<List<Set<>>>
-         ^^^^
+                  ^^^
 
-parser/error_recovery/issue_46505_prime_3.crash:2:3: A method declaration needs an explicit list of parameters.
-  Stream<List<Set<>>>
-  ^^^^^^
-
-parser/error_recovery/issue_46505_prime_3.crash:3:1: Expected a function body, but got '}'.
+parser/error_recovery/issue_46505_prime_3.crash:3:1: Expected an identifier, but got '}'.
 }
 ^
 
+parser/error_recovery/issue_46505_prime_3.crash:2:21: Expected ';' after this.
+  Stream<List<Set<>>>
+                    ^
+
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
@@ -28,27 +28,28 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Stream)
-            handleNoType({)
-            handleIdentifier(Stream, methodDeclaration)
-            beginTypeVariables(<)
-              beginMetadataStar(List)
-              endMetadataStar(0)
-              handleIdentifier(List, typeVariableDeclaration)
-              beginTypeVariable(List)
-                handleTypeVariablesDefined(List, 1)
-                handleNoType(List)
-              endTypeVariable(<, 0, null, null)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-            endTypeVariables(<, >)
-            handleRecoverableError(MissingMethodParameters, Stream, Stream)
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-            handleNoInitializers()
-            handleAsyncModifier(null, null)
-            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-            handleInvalidFunctionBody({)
-          endClassMethod(null, Stream, (, null, })
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                  handleIdentifier(, typeReference)
+                  handleNoTypeArguments(>>>)
+                  handleType(, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 147afbd..c837519 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
@@ -32,57 +32,44 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              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: handleNoType({)
-                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
-                  listener: handleIdentifier(Stream, methodDeclaration)
-                parseQualifiedRestOpt(Stream, methodDeclarationContinuation)
-                parseMethodTypeVar(Stream)
-                  listener: beginTypeVariables(<)
-                  parseMetadataStar(<)
-                    listener: beginMetadataStar(List)
-                    listener: endMetadataStar(0)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    listener: handleIdentifier(List, typeVariableDeclaration)
-                  listener: beginTypeVariable(List)
-                  listener: handleTypeVariablesDefined(List, 1)
-                  listener: handleNoType(List)
-                  listener: endTypeVariable(<, 0, null, null)
-                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                  reportRecoverableError(Set, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
-                    rewriter()
-                  listener: endTypeVariables(<, >)
-                parseGetterOrFormalParameters(>, Stream, false, MemberKind.NonStaticMethod)
-                  missingParameterMessage(MemberKind.NonStaticMethod)
-                  reportRecoverableError(Stream, MissingMethodParameters)
-                    listener: handleRecoverableError(MissingMethodParameters, Stream, Stream)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(Stream, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(Set, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
                   rewriter()
-                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
-                  inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
-                    reportRecoverableError(}, Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}])
-                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-                    insertBlock())
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Set, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Stream, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
-                      rewriter()
-                  listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, Stream, (, null, })
-              listener: endMember()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.parser.expect
index d529abb..fb4a09d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.parser.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.parser.expect
@@ -2,8 +2,8 @@
 
 class A {
 Stream<List<Set<*synthetic*>>>
-(){}}
+*synthetic*;}
 
 class[KeywordToken] A[StringToken] {[BeginToken]
 Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
-([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]}[SimpleToken][SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken][SimpleToken]
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 1043bd8..1a032d2 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
@@ -1,17 +1,17 @@
 Problems reported:
 
-parser/error_recovery/issue_46505_prime_4.crash:2:10: Expected '>' after this.
+parser/error_recovery/issue_46505_prime_4.crash:2:24: Expected a type, but got '>>>'.
   Stream<List<Set<List<>>>>
-         ^^^^
+                       ^^^
 
-parser/error_recovery/issue_46505_prime_4.crash:2:3: A method declaration needs an explicit list of parameters.
-  Stream<List<Set<List<>>>>
-  ^^^^^^
-
-parser/error_recovery/issue_46505_prime_4.crash:3:1: Expected a function body, but got '}'.
+parser/error_recovery/issue_46505_prime_4.crash:3:1: Expected an identifier, but got '}'.
 }
 ^
 
+parser/error_recovery/issue_46505_prime_4.crash:2:27: Expected ';' after this.
+  Stream<List<Set<List<>>>>
+                          ^
+
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
@@ -28,27 +28,32 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Stream)
-            handleNoType({)
-            handleIdentifier(Stream, methodDeclaration)
-            beginTypeVariables(<)
-              beginMetadataStar(List)
-              endMetadataStar(0)
-              handleIdentifier(List, typeVariableDeclaration)
-              beginTypeVariable(List)
-                handleTypeVariablesDefined(List, 1)
-                handleNoType(List)
-              endTypeVariable(<, 0, null, null)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-            endTypeVariables(<, >)
-            handleRecoverableError(MissingMethodParameters, Stream, Stream)
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-            handleNoInitializers()
-            handleAsyncModifier(null, null)
-            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-            handleInvalidFunctionBody({)
-          endClassMethod(null, Stream, (, null, })
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                    handleIdentifier(, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 50f23d1..0f85986 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
@@ -32,60 +32,49 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              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: handleNoType({)
-                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
-                  listener: handleIdentifier(Stream, methodDeclaration)
-                parseQualifiedRestOpt(Stream, methodDeclarationContinuation)
-                parseMethodTypeVar(Stream)
-                  listener: beginTypeVariables(<)
-                  parseMetadataStar(<)
-                    listener: beginMetadataStar(List)
-                    listener: endMetadataStar(0)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    listener: handleIdentifier(List, typeVariableDeclaration)
-                  listener: beginTypeVariable(List)
-                  listener: handleTypeVariablesDefined(List, 1)
-                  listener: handleNoType(List)
-                  listener: endTypeVariable(<, 0, null, null)
-                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                  reportRecoverableError(Set, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
-                  parseMetadataStar(<)
-                  ensureIdentifier(<, typeVariableDeclaration)
-                    reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
-                    rewriter()
-                  listener: endTypeVariables(<, >)
-                parseGetterOrFormalParameters(>, Stream, false, MemberKind.NonStaticMethod)
-                  missingParameterMessage(MemberKind.NonStaticMethod)
-                  reportRecoverableError(Stream, MissingMethodParameters)
-                    listener: handleRecoverableError(MissingMethodParameters, Stream, Stream)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(Stream, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(Set, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
                   rewriter()
-                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
-                  inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
-                    reportRecoverableError(}, Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}])
-                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '}'., null, {lexeme: }}], }, })
-                    insertBlock())
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Set, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Stream, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
-                      rewriter()
-                  listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, Stream, (, null, })
-              listener: endMember()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.parser.expect
index e4f75a9..360df8f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.parser.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.parser.expect
@@ -2,8 +2,8 @@
 
 class A {
 Stream<List<Set<List<*synthetic*>>>>
-(){}}
+*synthetic*;}
 
 class[KeywordToken] A[StringToken] {[BeginToken]
 Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
-([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]}[SimpleToken][SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart
new file mode 100644
index 0000000..61c1383
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart
@@ -0,0 +1,32 @@
+class A {
+  // Option #1 --- like the other ones. No identifier after.
+  // The user is in the middle of adding the first field/method in a class.
+  Stream<List<Set<List</* user curser here*/>>>>
+}
+
+class B {
+  Stream<List<Set<List<String>>>> foo;
+  // Option #1 --- like the other ones. No identifier after.
+  // The user is in the middle of adding a field/method at the end of the class.
+  Stream<List<Set<List</* user curser here*/>>>>
+}
+
+class C {
+  Stream<List<Set<List<String>>>> foo;
+  // Option #2 --- there is an identifier after, because
+  // the user is in the middle of adding a field/method between other
+  //fields/methods.
+  Stream<List<Set<List</* user curser here*/>>>>
+  Stream<List<Set<List<String>>>> baz;
+}
+
+// Option #3 --- there is an identifier after, because
+// the user is in the middle of adding a field/method between other
+//fields/methods (top-level this time).
+Stream<List<Set<List</* user curser here*/>>>>
+Stream<List<Set<List<String>>>> baz;
+
+// Option #4 --- there is no identifier after, because
+// the user is in the middle of adding a field/method at the end of file.
+// This is issue #42229.
+Stream<List<Set<List</* user curser here*/>>>>
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
new file mode 100644
index 0000000..1b7755f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -0,0 +1,377 @@
+Problems reported:
+
+parser/error_recovery/issue_46505_prime_5.crash:4:45: Expected a type, but got '>>>'.
+  Stream<List<Set<List</* user curser here*/>>>>
+                                            ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:5:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/issue_46505_prime_5.crash:4:48: Expected ';' after this.
+  Stream<List<Set<List</* user curser here*/>>>>
+                                               ^
+
+parser/error_recovery/issue_46505_prime_5.crash:11:45: Expected a type, but got '>>>'.
+  Stream<List<Set<List</* user curser here*/>>>>
+                                            ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:12:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/issue_46505_prime_5.crash:11:48: Expected ';' after this.
+  Stream<List<Set<List</* user curser here*/>>>>
+                                               ^
+
+parser/error_recovery/issue_46505_prime_5.crash:19:45: Expected a type, but got '>>>'.
+  Stream<List<Set<List</* user curser here*/>>>>
+                                            ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:20:10: Expected '>' after this.
+  Stream<List<Set<List<String>>>> baz;
+         ^^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:20:3: A method declaration needs an explicit list of parameters.
+  Stream<List<Set<List<String>>>> baz;
+  ^^^^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:20:35: Expected a function body, but got 'baz'.
+  Stream<List<Set<List<String>>>> baz;
+                                  ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:20:35: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  Stream<List<Set<List<String>>>> baz;
+                                  ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:26:43: Expected a type, but got '>>>'.
+Stream<List<Set<List</* user curser here*/>>>>
+                                          ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:27:8: Expected '>' after this.
+Stream<List<Set<List<String>>>> baz;
+       ^^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:27:1: A function declaration needs an explicit list of parameters.
+Stream<List<Set<List<String>>>> baz;
+^^^^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:27:33: Expected a function body, but got 'baz'.
+Stream<List<Set<List<String>>>> baz;
+                                ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:27:33: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+Stream<List<Set<List<String>>>> baz;
+                                ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:33:1: Expected an identifier, but got ''.
+
+WARNING: Reporting at eof --- see below for details.
+
+parser/error_recovery/issue_46505_prime_5.crash:32:43: Expected a type, but got '>>>'.
+Stream<List<Set<List</* user curser here*/>>>>
+                                          ^^^
+
+parser/error_recovery/issue_46505_prime_5.crash:32:46: Expected ';' after this.
+Stream<List<Set<List</* user curser here*/>>>>
+                                             ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, A)
+      handleNoType(A)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(Stream)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                    handleIdentifier(, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, B)
+      handleNoType(B)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(Stream)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleIdentifier(String, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(String, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleIdentifier(foo, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+        endMember()
+        beginMetadataStar(Stream)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                    handleIdentifier(, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+            handleIdentifier(, fieldDeclaration)
+            handleNoFieldInitializer(})
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(Stream)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleIdentifier(String, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(String, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleIdentifier(foo, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+        endMember()
+        beginMetadataStar(Stream)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Stream)
+            handleIdentifier(Stream, typeReference)
+            beginTypeArguments(<)
+              handleIdentifier(List, typeReference)
+              beginTypeArguments(<)
+                handleIdentifier(Set, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(List, typeReference)
+                  beginTypeArguments(<)
+                    handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                    handleIdentifier(, typeReference)
+                    handleNoTypeArguments(>>>)
+                    handleType(, null)
+                  endTypeArguments(1, <, >)
+                  handleType(List, null)
+                endTypeArguments(1, <, >)
+                handleType(Set, null)
+              endTypeArguments(1, <, >)
+              handleType(List, null)
+            endTypeArguments(1, <, >)
+            handleType(Stream, null)
+            handleIdentifier(Stream, methodDeclaration)
+            beginTypeVariables(<)
+              beginMetadataStar(List)
+              endMetadataStar(0)
+              handleIdentifier(List, typeVariableDeclaration)
+              beginTypeVariable(List)
+                handleTypeVariablesDefined(List, 1)
+                handleNoType(List)
+              endTypeVariable(<, 0, null, null)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
+            endTypeVariables(<, >)
+            handleRecoverableError(MissingMethodParameters, Stream, Stream)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}], baz, baz)
+            handleInvalidFunctionBody({)
+          endClassMethod(null, Stream, (, null, })
+        endMember()
+        beginMetadataStar(baz)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(})
+            handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
+            handleNoType(})
+            handleIdentifier(baz, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, baz, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(Stream)
+  beginMetadataStar(Stream)
+  endMetadataStar(0)
+  beginTopLevelMember(Stream)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(Stream, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(List, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(Set, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(List, typeReference)
+            beginTypeArguments(<)
+              handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+              handleIdentifier(, typeReference)
+              handleNoTypeArguments(>>>)
+              handleType(, null)
+            endTypeArguments(1, <, >)
+            handleType(List, null)
+          endTypeArguments(1, <, >)
+          handleType(Set, null)
+        endTypeArguments(1, <, >)
+        handleType(List, null)
+      endTypeArguments(1, <, >)
+      handleType(Stream, null)
+      handleIdentifier(Stream, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        handleIdentifier(List, typeVariableDeclaration)
+        beginTypeVariable(List)
+          handleTypeVariablesDefined(List, 1)
+          handleNoType(List)
+        endTypeVariable(<, 0, null, null)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
+      endTypeVariables(<, >)
+      handleRecoverableError(MissingFunctionParameters, Stream, Stream)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}], baz, baz)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(Stream, null, })
+  endTopLevelDeclaration(baz)
+  beginMetadataStar(baz)
+  endMetadataStar(0)
+  beginTopLevelMember(baz)
+    beginFields(})
+      handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
+      handleNoType(})
+      handleIdentifier(baz, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, baz, ;)
+  endTopLevelDeclaration(Stream)
+  beginMetadataStar(Stream)
+  endMetadataStar(0)
+  beginTopLevelMember(Stream)
+    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+    // WARNING: Reporting at eof for .
+    beginFields(;)
+      handleIdentifier(Stream, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(List, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(Set, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(List, typeReference)
+            beginTypeArguments(<)
+              handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+              handleIdentifier(, typeReference)
+              handleNoTypeArguments(>>>)
+              handleType(, null)
+            endTypeArguments(1, <, >)
+            handleType(List, null)
+          endTypeArguments(1, <, >)
+          handleType(Set, null)
+        endTypeArguments(1, <, >)
+        handleType(List, null)
+      endTypeArguments(1, <, >)
+      handleType(Stream, null)
+      handleIdentifier(, topLevelVariableDeclaration)
+      handleNoFieldInitializer()
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+    endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
+  endTopLevelDeclaration()
+endCompilationUnit(6, )
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
new file mode 100644
index 0000000..a5f5174
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -0,0 +1,509 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(A, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, A)
+        parseClass(A, class, class, A)
+          parseClassHeaderOpt(A, class, class)
+            parseClassExtendsOpt(A)
+              listener: handleNoType(A)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(A)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, Stream)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
+              parseMetadataStar({)
+                listener: beginMetadataStar(Stream)
+                listener: endMetadataStar(0)
+              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({)
+                  ensureIdentifier({, typeReference)
+                    listener: handleIdentifier(Stream, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(Set, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                  rewriter()
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Set, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Stream, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                      rewriter()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, B)
+        parseClass(B, class, class, B)
+          parseClassHeaderOpt(B, class, class)
+            parseClassExtendsOpt(B)
+              listener: handleNoType(B)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(B)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(B)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, Stream)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, B)
+              parseMetadataStar({)
+                listener: beginMetadataStar(Stream)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, B, false)
+                listener: beginFields({)
+                ensureIdentifier({, typeReference)
+                  listener: handleIdentifier(Stream, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(Set, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(>>>)
+                listener: handleType(String, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Set, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Stream, null)
+                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                  listener: handleIdentifier(foo, fieldDeclaration)
+                parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.Class, B)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+              listener: endMember()
+            notEofOrValue(}, Stream)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, B)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(Stream)
+                listener: endMetadataStar(0)
+              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(;)
+                  ensureIdentifier(;, typeReference)
+                    listener: handleIdentifier(Stream, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(Set, typeReference)
+                  listener: beginTypeArguments(<)
+                  ensureIdentifier(<, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                  rewriter()
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Set, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(Stream, null)
+                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                      rewriter()
+                    listener: handleIdentifier(, fieldDeclaration)
+                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
+                    listener: handleNoFieldInitializer(})
+                  ensureSemicolon()
+                    reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(C)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, Stream)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(Stream)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, C, false)
+                listener: beginFields({)
+                ensureIdentifier({, typeReference)
+                  listener: handleIdentifier(Stream, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(Set, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(>>>)
+                listener: handleType(String, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Set, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Stream, null)
+                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
+                  listener: handleIdentifier(foo, fieldDeclaration)
+                parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.Class, C)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+              listener: endMember()
+            notEofOrValue(}, Stream)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(Stream)
+                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)
+                ensureIdentifier(;, typeReference)
+                  listener: handleIdentifier(Stream, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(Set, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+                rewriter()
+                listener: handleIdentifier(, typeReference)
+                listener: handleNoTypeArguments(>>>)
+                listener: handleType(, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Set, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(Stream, null)
+                ensureIdentifierPotentiallyRecovered(>, methodDeclaration, false)
+                  listener: handleIdentifier(Stream, methodDeclaration)
+                parseQualifiedRestOpt(Stream, methodDeclarationContinuation)
+                parseMethodTypeVar(Stream)
+                  listener: beginTypeVariables(<)
+                  parseMetadataStar(<)
+                    listener: beginMetadataStar(List)
+                    listener: endMetadataStar(0)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                    listener: handleIdentifier(List, typeVariableDeclaration)
+                  listener: beginTypeVariable(List)
+                  listener: handleTypeVariablesDefined(List, 1)
+                  listener: handleNoType(List)
+                  listener: endTypeVariable(<, 0, null, null)
+                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
+                  parseMetadataStar(<)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                  reportRecoverableError(Set, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+                  parseMetadataStar(<)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                  reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+                  parseMetadataStar(<)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                  listener: endTypeVariables(<, >)
+                parseGetterOrFormalParameters(>, Stream, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(Stream, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, Stream, Stream)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+                    reportRecoverableError(baz, Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}])
+                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}], baz, baz)
+                    insertBlock())
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endClassMethod(null, Stream, (, null, })
+              listener: endMember()
+            notEofOrValue(}, baz)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(baz)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(;)
+              parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.Class, C, false)
+                listener: beginFields(})
+                reportRecoverableError(baz, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(baz, fieldDeclaration)
+                parseFieldInitializerOpt(baz, baz, null, null, null, null, DeclarationKind.Class, C)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, 1, baz, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(Stream)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(Stream)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(Stream)
+      parseTopLevelMethod(}, null, }, Instance of 'ComplexTypeInfo', null, Stream, false)
+        listener: beginTopLevelMethod(}, null)
+        ensureIdentifier(}, typeReference)
+          listener: handleIdentifier(Stream, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(Set, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+          listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+        rewriter()
+        listener: handleIdentifier(, typeReference)
+        listener: handleNoTypeArguments(>>>)
+        listener: handleType(, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(Set, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(Stream, null)
+        ensureIdentifierPotentiallyRecovered(>, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Stream, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Stream)
+          listener: beginTypeVariables(<)
+          parseMetadataStar(<)
+            listener: beginMetadataStar(List)
+            listener: endMetadataStar(0)
+          ensureIdentifier(<, typeVariableDeclaration)
+            listener: handleIdentifier(List, typeVariableDeclaration)
+          listener: beginTypeVariable(List)
+          listener: handleTypeVariablesDefined(List, 1)
+          listener: handleNoType(List)
+          listener: endTypeVariable(<, 0, null, null)
+          reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], List, List)
+          parseMetadataStar(<)
+          ensureIdentifier(<, typeVariableDeclaration)
+          reportRecoverableError(Set, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+          parseMetadataStar(<)
+          ensureIdentifier(<, typeVariableDeclaration)
+          reportRecoverableError(List, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
+          parseMetadataStar(<)
+          ensureIdentifier(<, typeVariableDeclaration)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, Stream, false, MemberKind.TopLevelMethod)
+          missingParameterMessage(MemberKind.TopLevelMethod)
+          reportRecoverableError(Stream, MissingFunctionParameters)
+            listener: handleRecoverableError(MissingFunctionParameters, Stream, Stream)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.TopLevelMethod)
+            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+            reportRecoverableError(baz, Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}])
+              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'baz'., null, {lexeme: baz}], baz, baz)
+            insertBlock())
+              rewriter()
+              rewriter()
+          listener: handleInvalidFunctionBody({)
+        listener: endTopLevelMethod(Stream, null, })
+  listener: endTopLevelDeclaration(baz)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(baz)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(baz)
+      isReservedKeyword(;)
+      parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(})
+        reportRecoverableError(baz, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(baz, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(baz, baz, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, null, null, 1, baz, ;)
+  listener: endTopLevelDeclaration(Stream)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(Stream)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(Stream)
+      insertSyntheticIdentifier(>, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+          listener: // WARNING: Reporting at eof for .
+        rewriter()
+      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        ensureIdentifier(;, typeReference)
+          listener: handleIdentifier(Stream, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(Set, typeReference)
+        listener: beginTypeArguments(<)
+        ensureIdentifier(<, typeReference)
+          listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        reportRecoverableErrorWithToken(>>>, Instance of 'Template<(Token) => Message>')
+          listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>>'., null, {lexeme: >>>}], >>>, >>>)
+        rewriter()
+        listener: handleIdentifier(, typeReference)
+        listener: handleNoTypeArguments(>>>)
+        listener: handleType(, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(Set, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(Stream, null)
+        ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer()
+        ensureSemicolon()
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.parser.expect
new file mode 100644
index 0000000..6196a14
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.parser.expect
@@ -0,0 +1,69 @@
+NOTICE: Stream was rewritten by parser!
+
+class A {
+
+
+Stream<List<Set<List< *synthetic*>>>>
+*synthetic*;}
+
+class B {
+Stream<List<Set<List<String>>>> foo;
+
+
+Stream<List<Set<List< *synthetic*>>>>
+*synthetic*;}
+
+class C {
+Stream<List<Set<List<String>>>> foo;
+
+
+
+Stream<List<Set<List< *synthetic*>>>>
+Stream<List<Set<List<String>>>> (){}baz;
+}
+
+
+
+
+Stream<List<Set<List< *synthetic*>>>>
+Stream<List<Set<List<String>>>> (){}baz;
+
+
+
+
+Stream<List<Set<List< *synthetic*>>>>
+*synthetic*;
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] [SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+
+class[KeywordToken] B[StringToken] {[BeginToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken] foo[StringToken];[SimpleToken]
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] [SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
+[SyntheticStringToken];[SyntheticToken]}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken] foo[StringToken];[SimpleToken]
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] [SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]baz[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] [SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]baz[StringToken];[SimpleToken]
+
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] [SyntheticStringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]>[SimpleToken]
+[SyntheticStringToken];[SyntheticToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.scanner.expect
new file mode 100644
index 0000000..3081371
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.scanner.expect
@@ -0,0 +1,67 @@
+class A {
+
+
+Stream<List<Set<List< >>>>
+}
+
+class B {
+Stream<List<Set<List<String>>>> foo;
+
+
+Stream<List<Set<List< >>>>
+}
+
+class C {
+Stream<List<Set<List<String>>>> foo;
+
+
+
+Stream<List<Set<List< >>>>
+Stream<List<Set<List<String>>>> baz;
+}
+
+
+
+
+Stream<List<Set<List< >>>>
+Stream<List<Set<List<String>>>> baz;
+
+
+
+
+Stream<List<Set<List< >>>>
+
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] >>>[SimpleToken]>[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] {[BeginToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>>>[SimpleToken]>[SimpleToken] foo[StringToken];[SimpleToken]
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] >>>[SimpleToken]>[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>>>[SimpleToken]>[SimpleToken] foo[StringToken];[SimpleToken]
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] >>>[SimpleToken]>[SimpleToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>>>[SimpleToken]>[SimpleToken] baz[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] >>>[SimpleToken]>[SimpleToken]
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>>>[SimpleToken]>[SimpleToken] baz[StringToken];[SimpleToken]
+
+
+
+
+Stream[StringToken]<[BeginToken]List[StringToken]<[BeginToken]Set[StringToken]<[BeginToken]List[StringToken]<[BeginToken] >>>[SimpleToken]>[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart
new file mode 100644
index 0000000..b8fbaec
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart
@@ -0,0 +1,6 @@
+class A {
+  // These are names and no return types...
+  stream<T extends List<T>>(T foo) {}
+  stream2<T extends List<>>(T foo) {}
+  stream3<T>(T foo) {}
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..0c00214
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
@@ -0,0 +1,132 @@
+Problems reported:
+
+parser/error_recovery/issue_46505_prime_6.crash:4:26: Expected a type, but got '>>'.
+  stream2<T extends List<>>(T foo) {}
+                         ^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, A)
+      handleNoType(A)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(stream)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, stream)
+            handleNoType({)
+            handleIdentifier(stream, methodDeclaration)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(>, 1)
+                handleIdentifier(List, typeReference)
+                beginTypeArguments(<)
+                  handleIdentifier(T, typeReference)
+                  handleNoTypeArguments(>)
+                  handleType(T, null)
+                endTypeArguments(1, <, >)
+                handleType(List, null)
+              endTypeVariable(>, 0, extends, null)
+            endTypeVariables(<, >)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(T, typeReference)
+                handleNoTypeArguments(foo)
+                handleType(T, null)
+                handleIdentifier(foo, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, stream, (, null, })
+        endMember()
+        beginMetadataStar(stream2)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, stream2)
+            handleNoType(})
+            handleIdentifier(stream2, methodDeclaration)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(>, 1)
+                handleIdentifier(List, typeReference)
+                beginTypeArguments(<)
+                  handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>'., null, {lexeme: >>}], >>, >>)
+                  handleIdentifier(, typeReference)
+                  handleNoTypeArguments(>>)
+                  handleType(, null)
+                endTypeArguments(1, <, >)
+                handleType(List, null)
+              endTypeVariable(>, 0, extends, null)
+            endTypeVariables(<, >)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(T, typeReference)
+                handleNoTypeArguments(foo)
+                handleType(T, null)
+                handleIdentifier(foo, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, stream2, (, null, })
+        endMember()
+        beginMetadataStar(stream3)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, stream3)
+            handleNoType(})
+            handleIdentifier(stream3, methodDeclaration)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(T, typeReference)
+                handleNoTypeArguments(foo)
+                handleType(T, null)
+                handleIdentifier(foo, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, stream3, (, null, })
+        endMember()
+      endClassOrMixinBody(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
new file mode 100644
index 0000000..01b18e1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
@@ -0,0 +1,210 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(A, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, A)
+        parseClass(A, class, class, A)
+          parseClassHeaderOpt(A, class, class)
+            parseClassExtendsOpt(A)
+              listener: handleNoType(A)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(A)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, stream)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
+              parseMetadataStar({)
+                listener: beginMetadataStar(stream)
+                listener: endMetadataStar(0)
+              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: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(stream, methodDeclaration)
+                parseQualifiedRestOpt(stream, methodDeclarationContinuation)
+                parseMethodTypeVar(stream)
+                  listener: beginTypeVariables(<)
+                  parseMetadataStar(<)
+                    listener: beginMetadataStar(T)
+                    listener: endMetadataStar(0)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                    listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(>, 1)
+                  listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  listener: handleIdentifier(T, typeReference)
+                  listener: handleNoTypeArguments(>)
+                  listener: handleType(T, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeVariable(>, 0, extends, null)
+                  listener: endTypeVariables(<, >)
+                parseGetterOrFormalParameters(>, stream, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(T)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(T, typeReference)
+                        listener: handleNoTypeArguments(foo)
+                        listener: handleType(T, null)
+                        ensureIdentifier(T, formalParameterDeclaration)
+                          listener: handleIdentifier(foo, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, stream, (, null, })
+              listener: endMember()
+            notEofOrValue(}, stream2)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, A)
+              parseMetadataStar(})
+                listener: beginMetadataStar(stream2)
+                listener: endMetadataStar(0)
+              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: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
+                  listener: handleIdentifier(stream2, methodDeclaration)
+                parseQualifiedRestOpt(stream2, methodDeclarationContinuation)
+                parseMethodTypeVar(stream2)
+                  listener: beginTypeVariables(<)
+                  parseMetadataStar(<)
+                    listener: beginMetadataStar(T)
+                    listener: endMetadataStar(0)
+                  ensureIdentifier(<, typeVariableDeclaration)
+                    listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(>, 1)
+                  ensureIdentifier(extends, typeReference)
+                    listener: handleIdentifier(List, typeReference)
+                  listener: beginTypeArguments(<)
+                  reportRecoverableErrorWithToken(>>, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>>'., null, {lexeme: >>}], >>, >>)
+                  rewriter()
+                  listener: handleIdentifier(, typeReference)
+                  listener: handleNoTypeArguments(>>)
+                  listener: handleType(, null)
+                  listener: endTypeArguments(1, <, >)
+                  listener: handleType(List, null)
+                  listener: endTypeVariable(>, 0, extends, null)
+                  listener: endTypeVariables(<, >)
+                parseGetterOrFormalParameters(>, stream2, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(T)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(T, typeReference)
+                        listener: handleNoTypeArguments(foo)
+                        listener: handleType(T, null)
+                        ensureIdentifier(T, formalParameterDeclaration)
+                          listener: handleIdentifier(foo, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, stream2, (, null, })
+              listener: endMember()
+            notEofOrValue(}, stream3)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, A)
+              parseMetadataStar(})
+                listener: beginMetadataStar(stream3)
+                listener: endMetadataStar(0)
+              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: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
+                  listener: handleIdentifier(stream3, methodDeclaration)
+                parseQualifiedRestOpt(stream3, methodDeclarationContinuation)
+                parseMethodTypeVar(stream3)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                parseGetterOrFormalParameters(>, stream3, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(T)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(T, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(T, typeReference)
+                        listener: handleNoTypeArguments(foo)
+                        listener: handleType(T, null)
+                        ensureIdentifier(T, formalParameterDeclaration)
+                          listener: handleIdentifier(foo, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, stream3, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.parser.expect
new file mode 100644
index 0000000..4c1110d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.parser.expect
@@ -0,0 +1,15 @@
+NOTICE: Stream was rewritten by parser!
+
+class A {
+
+stream<T extends List<T>>(T foo) {}
+stream2<T extends List<*synthetic*>>(T foo) {}
+stream3<T>(T foo) {}
+}
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+
+stream[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+stream2[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+stream3[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.scanner.expect
new file mode 100644
index 0000000..737ebfe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.scanner.expect
@@ -0,0 +1,13 @@
+class A {
+
+stream<T extends List<T>>(T foo) {}
+stream2<T extends List<>>(T foo) {}
+stream3<T>(T foo) {}
+}
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+
+stream[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken]T[StringToken]>>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+stream2[StringToken]<[BeginToken]T[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken]>>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+stream3[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]T[StringToken] foo[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart
new file mode 100644
index 0000000..6fa39ee
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart
@@ -0,0 +1 @@
+void test(String default) { }
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect
new file mode 100644
index 0000000..afce261
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect
@@ -0,0 +1,32 @@
+Problems reported:
+
+parser/error_recovery/issue_46736:1:18: 'default' can't be used as an identifier because it's a keyword.
+void test(String default) { }
+                 ^^^^^^^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(default)
+          handleType(String, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect
new file mode 100644
index 0000000..e91c81f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect
@@ -0,0 +1,47 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(String)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(default)
+                listener: handleType(String, null)
+                ensureIdentifier(String, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(default, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.parser.expect
new file mode 100644
index 0000000..912f36d2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.parser.expect
@@ -0,0 +1,5 @@
+void test(String default) { }
+
+
+void[KeywordToken] test[StringToken]([BeginToken]String[StringToken] default[KeywordToken])[SimpleToken] {[BeginToken] }[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.scanner.expect
new file mode 100644
index 0000000..912f36d2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.scanner.expect
@@ -0,0 +1,5 @@
+void test(String default) { }
+
+
+void[KeywordToken] test[StringToken]([BeginToken]String[StringToken] default[KeywordToken])[SimpleToken] {[BeginToken] }[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_46736.equivalence_info
new file mode 100644
index 0000000..b560f65e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_46736.dart
+  - issue_46736_prime.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart
new file mode 100644
index 0000000..f10f9e9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart
@@ -0,0 +1 @@
+void test(String defaultX) {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect
new file mode 100644
index 0000000..ca8781c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect
@@ -0,0 +1,25 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(defaultX)
+          handleType(String, null)
+          handleIdentifier(defaultX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect
new file mode 100644
index 0000000..567a8fa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect
@@ -0,0 +1,45 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(String)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(defaultX)
+                listener: handleType(String, null)
+                ensureIdentifier(String, formalParameterDeclaration)
+                  listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.parser.expect
new file mode 100644
index 0000000..da90948
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.parser.expect
@@ -0,0 +1,5 @@
+void test(String defaultX) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]String[StringToken] defaultX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.scanner.expect
new file mode 100644
index 0000000..da90948
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.scanner.expect
@@ -0,0 +1,5 @@
+void test(String defaultX) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]String[StringToken] defaultX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
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 8fcefc7..502bede 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
@@ -16,9 +16,9 @@
     return break(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:29:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:29:5: Expected ';' after this.
     return break(x-1) + 1;
-           ^^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:29:12: A break statement can't be used outside of a loop or switch statement.
     return break(x-1) + 1;
@@ -68,9 +68,9 @@
     return continue(x-1) + 1;
            ^^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:54:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:54:5: Expected ';' after this.
     return continue(x-1) + 1;
-           ^^^^^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:54:12: A continue statement can't be used outside of a loop or switch statement.
     return continue(x-1) + 1;
@@ -96,9 +96,9 @@
     return do(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:74:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:74:5: Expected ';' after this.
     return do(x-1) + 1;
-           ^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:75:3: Expected 'while' before this.
   }
@@ -124,17 +124,17 @@
     return else(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
     return else(x-1) + 1;
-           ^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:84:12: Expected an identifier, but got 'else'.
     return else(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
     return else(x-1) + 1;
-           ^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:84:12: Unexpected token ';'.
     return else(x-1) + 1;
@@ -168,17 +168,17 @@
     return final(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:124:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:5: Expected ';' after this.
     return final(x-1) + 1;
-           ^^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:124:17: Expected an identifier, but got '('.
     return final(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_class_methods:124:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:17: Expected ';' after this.
     return final(x-1) + 1;
-                 ^
+                ^
 
 parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
     return final(x-1) + 1;
@@ -188,9 +188,9 @@
     return final(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:124:21: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
     return final(x-1) + 1;
-                    ^
+                   ^
 
 parser/error_recovery/keyword_named_class_methods:124:21: Unexpected token ';'.
     return final(x-1) + 1;
@@ -216,9 +216,9 @@
     return for(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:134:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:134:5: Expected ';' after this.
     return for(x-1) + 1;
-           ^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
     return for(x-1) + 1;
@@ -228,9 +228,9 @@
     return for(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:134:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
     return for(x-1) + 1;
-                  ^
+                 ^
 
 parser/error_recovery/keyword_named_class_methods:134:21: '+' is not a prefix operator.
     return for(x-1) + 1;
@@ -244,9 +244,9 @@
     return if(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:154:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:154:5: Expected ';' after this.
     return if(x-1) + 1;
-           ^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:154:20: '+' is not a prefix operator.
     return if(x-1) + 1;
@@ -272,9 +272,9 @@
     return is(x-1) + 1;
              ^
 
-parser/error_recovery/keyword_named_class_methods:184:14: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:184:12: Expected ';' after this.
     return is(x-1) + 1;
-             ^
+           ^^
 
 parser/error_recovery/keyword_named_class_methods:207:7: 'new' can't be used as an identifier because it's a keyword.
   int new(int x) {
@@ -316,9 +316,9 @@
     return switch(x-1) + 1;
            ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:289:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:289:5: Expected ';' after this.
     return switch(x-1) + 1;
-           ^^^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:289:22: A switch statement must have a body, even if it is empty.
     return switch(x-1) + 1;
@@ -356,9 +356,9 @@
     return try(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:314:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:314:5: Expected ';' after this.
     return try(x-1) + 1;
-           ^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:314:12: A try statement must have a body, even if it is empty.
     return try(x-1) + 1;
@@ -376,17 +376,17 @@
     return var(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:324:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:5: Expected ';' after this.
     return var(x-1) + 1;
-           ^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:324:15: Expected an identifier, but got '('.
     return var(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_class_methods:324:16: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:15: Expected ';' after this.
     return var(x-1) + 1;
-               ^
+              ^
 
 parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
     return var(x-1) + 1;
@@ -396,9 +396,9 @@
     return var(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:324:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
     return var(x-1) + 1;
-                  ^
+                 ^
 
 parser/error_recovery/keyword_named_class_methods:324:19: Unexpected token ';'.
     return var(x-1) + 1;
@@ -416,17 +416,17 @@
     return void(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:329:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:5: Expected ';' after this.
     return void(x-1) + 1;
-           ^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:329:16: Expected an identifier, but got '('.
     return void(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_class_methods:329:17: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:16: Expected ';' after this.
     return void(x-1) + 1;
-                ^
+               ^
 
 parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
     return void(x-1) + 1;
@@ -436,9 +436,9 @@
     return void(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:329:20: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
     return void(x-1) + 1;
-                   ^
+                  ^
 
 parser/error_recovery/keyword_named_class_methods:329:20: Unexpected token ';'.
     return void(x-1) + 1;
@@ -456,9 +456,9 @@
     return while(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:334:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:334:5: Expected ';' after this.
     return while(x-1) + 1;
-           ^^^^^
+    ^^^^^^
 
 parser/error_recovery/keyword_named_class_methods:334:23: '+' is not a prefix operator.
     return while(x-1) + 1;
@@ -819,7 +819,7 @@
                 handleNoTypeArguments(break)
                 handleNoArguments(break)
                 handleSend(, break)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               handleRecoverableError(BreakOutsideOfLoop, break, break)
               handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
@@ -1065,7 +1065,7 @@
                   beginConstructorReference()
                     handleNoTypeArguments(()
                     handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                  endConstructorReference(, null, ()
+                  endConstructorReference(, null, (, ConstructorReferenceContext.Const)
                   beginArguments(()
                     handleIdentifier(x, expression)
                     handleNoTypeArguments(-)
@@ -1128,7 +1128,7 @@
                 handleNoTypeArguments(continue)
                 handleNoArguments(continue)
                 handleSend(, continue)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
               handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
@@ -1369,7 +1369,7 @@
                 handleNoTypeArguments(do)
                 handleNoArguments(do)
                 handleSend(, do)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginDoWhileStatement(do)
                 beginDoWhileStatementBody(()
@@ -1502,14 +1502,14 @@
                 handleNoTypeArguments(else)
                 handleNoArguments(else)
                 handleSend(, else)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
               handleIdentifier(, expression)
               handleNoTypeArguments(else)
               handleNoArguments(else)
               handleSend(, else)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               handleExpressionStatement(;)
               handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], else, else)
               handleIdentifier(x, expression)
@@ -1983,7 +1983,7 @@
                 handleNoTypeArguments(final)
                 handleNoArguments(final)
                 handleSend(, final)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginMetadataStar(final)
               endMetadataStar(0)
@@ -1994,7 +1994,7 @@
                 beginInitializedIdentifier()
                   handleNoVariableInitializer()
                 endInitializedIdentifier()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
               endVariablesDeclaration(1, ;)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -2010,7 +2010,7 @@
               handleNoTypeArguments())
               handleNoArguments())
               handleSend(, ))
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
               handleExpressionStatement(;)
               handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
               handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -2130,7 +2130,7 @@
                 handleNoTypeArguments(for)
                 handleNoArguments(for)
                 handleSend(, for)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginForStatement(for)
                 handleIdentifier(x, expression)
@@ -2147,7 +2147,7 @@
                 handleNoTypeArguments())
                 handleNoArguments())
                 handleSend(, ))
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                 handleExpressionStatement(;)
                 handleForLoopParts(for, (, ;, 0)
                 beginForStatementBody(+)
@@ -2384,7 +2384,7 @@
                 handleNoTypeArguments(if)
                 handleNoArguments(if)
                 handleSend(, if)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginIfStatement(if)
                 handleIdentifier(x, expression)
@@ -2754,7 +2754,7 @@
                   handleType(, null)
                 endIsOperatorType(is)
                 handleIsOperator(is, null)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
               endReturnStatement(true, return, ;)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -3049,7 +3049,7 @@
                   beginConstructorReference()
                     handleNoTypeArguments(()
                     handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                  endConstructorReference(, null, ()
+                  endConstructorReference(, null, (, ConstructorReferenceContext.New)
                   beginArguments(()
                     handleIdentifier(x, expression)
                     handleNoTypeArguments(-)
@@ -3984,7 +3984,7 @@
                 handleNoTypeArguments(switch)
                 handleNoArguments(switch)
                 handleSend(, switch)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginSwitchStatement(switch)
                 handleIdentifier(x, expression)
@@ -4299,7 +4299,7 @@
                 handleNoTypeArguments(try)
                 handleNoArguments(try)
                 handleSend(, try)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginTryStatement(try)
                 handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
@@ -4425,7 +4425,7 @@
                 handleNoTypeArguments(var)
                 handleNoArguments(var)
                 handleSend(, var)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginMetadataStar(var)
               endMetadataStar(0)
@@ -4436,7 +4436,7 @@
                 beginInitializedIdentifier()
                   handleNoVariableInitializer()
                 endInitializedIdentifier()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
               endVariablesDeclaration(1, ;)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -4452,7 +4452,7 @@
               handleNoTypeArguments())
               handleNoArguments())
               handleSend(, ))
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
               handleExpressionStatement(;)
               handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
               handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4512,7 +4512,7 @@
                 handleNoTypeArguments(void)
                 handleNoArguments(void)
                 handleSend(, void)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginMetadataStar(void)
               endMetadataStar(0)
@@ -4523,7 +4523,7 @@
                 beginInitializedIdentifier()
                   handleNoVariableInitializer()
                 endInitializedIdentifier()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
               endVariablesDeclaration(1, ;)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -4539,7 +4539,7 @@
               handleNoTypeArguments())
               handleNoArguments())
               handleSend(, ))
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
               handleExpressionStatement(;)
               handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
               handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4599,7 +4599,7 @@
                 handleNoTypeArguments(while)
                 handleNoArguments(while)
                 handleSend(, while)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
               endReturnStatement(true, return, ;)
               beginWhileStatement(while)
                 handleIdentifier(x, expression)
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 25e2025..499b444 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
@@ -856,8 +856,8 @@
                                     listener: handleNoArguments(break)
                                   listener: handleSend(, break)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -1465,7 +1465,7 @@
                               parsePrimary(return, expression)
                                 parseConstExpression(return)
                                   listener: beginConstExpression(const)
-                                  parseConstructorReference(const, null)
+                                  parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                                     ensureIdentifier(const, constructorReference)
                                       insertSyntheticIdentifier(const, constructorReference, 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: (}])
@@ -1476,7 +1476,7 @@
                                     parseQualifiedRestOpt(, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(, null, ()
+                                    listener: endConstructorReference(, null, (, ConstructorReferenceContext.Const)
                                   parseConstructorInvocationArguments()
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -1628,8 +1628,8 @@
                                     listener: handleNoArguments(continue)
                                   listener: handleSend(, continue)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -2242,8 +2242,8 @@
                                     listener: handleNoArguments(do)
                                   listener: handleSend(, do)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -2325,7 +2325,7 @@
                             ensureCloseParen(, ()
                           listener: handleParenthesizedCondition(()
                         ensureSemicolon())
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                             listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
                           rewriter()
                         listener: endDoWhileStatement(do, while, ;)
@@ -2589,8 +2589,8 @@
                                     listener: handleNoArguments(else)
                                   listener: handleSend(, else)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -2618,8 +2618,8 @@
                                         listener: handleNoArguments(else)
                                       listener: handleSend(, else)
                             ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+                              reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                               rewriter()
                             listener: handleExpressionStatement(;)
                   reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -3798,8 +3798,8 @@
                                     listener: handleNoArguments(final)
                                   listener: handleSend(, final)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -3824,8 +3824,8 @@
                               listener: handleNoVariableInitializer()
                             listener: endInitializedIdentifier()
                           ensureSemicolon()
-                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                            reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                             rewriter()
                           listener: endVariablesDeclaration(1, ;)
                   notEofOrValue(}, x)
@@ -3882,8 +3882,8 @@
                                         listener: handleNoArguments())
                                       listener: handleSend(, ))
                             ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                               rewriter()
                             listener: handleExpressionStatement(;)
                   reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -4184,8 +4184,8 @@
                                     listener: handleNoArguments(for)
                                   listener: handleSend(, for)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -4242,8 +4242,8 @@
                                           listener: handleNoArguments())
                                         listener: handleSend(, ))
                               ensureSemicolon()
-                                reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                  listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                                reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                                 rewriter()
                               listener: handleExpressionStatement(;)
                             listener: handleForLoopParts(for, (, ;, 0)
@@ -4831,8 +4831,8 @@
                                     listener: handleNoArguments(if)
                                   listener: handleSend(, if)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -5751,8 +5751,8 @@
                               listener: handleIsOperator(is, null)
                               skipChainedAsIsOperators()
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+                          reportRecoverableError(is, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -6484,7 +6484,7 @@
                                 parseNewExpression(return)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       insertSyntheticIdentifier(new, constructorReference, 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: (}])
@@ -6495,7 +6495,7 @@
                                     parseQualifiedRestOpt(, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(, null, ()
+                                    listener: endConstructorReference(, null, (, ConstructorReferenceContext.New)
                                   parseConstructorInvocationArguments()
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -8807,8 +8807,8 @@
                                     listener: handleNoArguments(switch)
                                   listener: handleSend(, switch)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -9593,8 +9593,8 @@
                                     listener: handleNoArguments(try)
                                   listener: handleSend(, try)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -9922,8 +9922,8 @@
                                     listener: handleNoArguments(var)
                                   listener: handleSend(, var)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -9948,8 +9948,8 @@
                               listener: handleNoVariableInitializer()
                             listener: endInitializedIdentifier()
                           ensureSemicolon()
-                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                            reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                             rewriter()
                           listener: endVariablesDeclaration(1, ;)
                   notEofOrValue(}, x)
@@ -10006,8 +10006,8 @@
                                         listener: handleNoArguments())
                                       listener: handleSend(, ))
                             ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                               rewriter()
                             listener: handleExpressionStatement(;)
                   reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10161,8 +10161,8 @@
                                       listener: handleNoArguments(void)
                                     listener: handleSend(, void)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
@@ -10188,8 +10188,8 @@
                                 listener: handleNoVariableInitializer()
                               listener: endInitializedIdentifier()
                             ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                              reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                               rewriter()
                             listener: endVariablesDeclaration(1, ;)
                   notEofOrValue(}, x)
@@ -10246,8 +10246,8 @@
                                         listener: handleNoArguments())
                                       listener: handleSend(, ))
                             ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                               rewriter()
                             listener: handleExpressionStatement(;)
                   reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10401,8 +10401,8 @@
                                     listener: handleNoArguments(while)
                                   listener: handleSend(, while)
                         ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+                          reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                           rewriter()
                         listener: endReturnStatement(true, return, ;)
                         inGenerator()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart
new file mode 100644
index 0000000..e1f402f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart
@@ -0,0 +1,482 @@
+void test(int abstract) {}
+void test([int abstract]) {}
+void test([int abstract = 42]) {}
+void test({int abstract}) {}
+void test({int abstract: 42}) {}
+void test({int abstract = 42}) {}
+
+void test(int as) {}
+void test([int as]) {}
+void test([int as = 42]) {}
+void test({int as}) {}
+void test({int as: 42}) {}
+void test({int as = 42}) {}
+
+void test(int assert) {}
+void test([int assert]) {}
+void test([int assert = 42]) {}
+void test({int assert}) {}
+void test({int assert: 42}) {}
+void test({int assert = 42}) {}
+
+void test(int async) {}
+void test([int async]) {}
+void test([int async = 42]) {}
+void test({int async}) {}
+void test({int async: 42}) {}
+void test({int async = 42}) {}
+
+void test(int await) {}
+void test([int await]) {}
+void test([int await = 42]) {}
+void test({int await}) {}
+void test({int await: 42}) {}
+void test({int await = 42}) {}
+
+void test(int break) {}
+void test([int break]) {}
+void test([int break = 42]) {}
+void test({int break}) {}
+void test({int break: 42}) {}
+void test({int break = 42}) {}
+
+void test(int case) {}
+void test([int case]) {}
+void test([int case = 42]) {}
+void test({int case}) {}
+void test({int case: 42}) {}
+void test({int case = 42}) {}
+
+void test(int catch) {}
+void test([int catch]) {}
+void test([int catch = 42]) {}
+void test({int catch}) {}
+void test({int catch: 42}) {}
+void test({int catch = 42}) {}
+
+void test(int class) {}
+void test([int class]) {}
+void test([int class = 42]) {}
+void test({int class}) {}
+void test({int class: 42}) {}
+void test({int class = 42}) {}
+
+void test(int const) {}
+void test([int const]) {}
+void test([int const = 42]) {}
+void test({int const}) {}
+void test({int const: 42}) {}
+void test({int const = 42}) {}
+
+void test(int continue) {}
+void test([int continue]) {}
+void test([int continue = 42]) {}
+void test({int continue}) {}
+void test({int continue: 42}) {}
+void test({int continue = 42}) {}
+
+void test(int covariant) {}
+void test([int covariant]) {}
+void test([int covariant = 42]) {}
+void test({int covariant}) {}
+void test({int covariant: 42}) {}
+void test({int covariant = 42}) {}
+
+void test(int default) {}
+void test([int default]) {}
+void test([int default = 42]) {}
+void test({int default}) {}
+void test({int default: 42}) {}
+void test({int default = 42}) {}
+
+void test(int deferred) {}
+void test([int deferred]) {}
+void test([int deferred = 42]) {}
+void test({int deferred}) {}
+void test({int deferred: 42}) {}
+void test({int deferred = 42}) {}
+
+void test(int do) {}
+void test([int do]) {}
+void test([int do = 42]) {}
+void test({int do}) {}
+void test({int do: 42}) {}
+void test({int do = 42}) {}
+
+void test(int dynamic) {}
+void test([int dynamic]) {}
+void test([int dynamic = 42]) {}
+void test({int dynamic}) {}
+void test({int dynamic: 42}) {}
+void test({int dynamic = 42}) {}
+
+void test(int else) {}
+void test([int else]) {}
+void test([int else = 42]) {}
+void test({int else}) {}
+void test({int else: 42}) {}
+void test({int else = 42}) {}
+
+void test(int enum) {}
+void test([int enum]) {}
+void test([int enum = 42]) {}
+void test({int enum}) {}
+void test({int enum: 42}) {}
+void test({int enum = 42}) {}
+
+void test(int export) {}
+void test([int export]) {}
+void test([int export = 42]) {}
+void test({int export}) {}
+void test({int export: 42}) {}
+void test({int export = 42}) {}
+
+void test(int extends) {}
+void test([int extends]) {}
+void test([int extends = 42]) {}
+void test({int extends}) {}
+void test({int extends: 42}) {}
+void test({int extends = 42}) {}
+
+void test(int extension) {}
+void test([int extension]) {}
+void test([int extension = 42]) {}
+void test({int extension}) {}
+void test({int extension: 42}) {}
+void test({int extension = 42}) {}
+
+void test(int external) {}
+void test([int external]) {}
+void test([int external = 42]) {}
+void test({int external}) {}
+void test({int external: 42}) {}
+void test({int external = 42}) {}
+
+void test(int factory) {}
+void test([int factory]) {}
+void test([int factory = 42]) {}
+void test({int factory}) {}
+void test({int factory: 42}) {}
+void test({int factory = 42}) {}
+
+void test(int false) {}
+void test([int false]) {}
+void test([int false = 42]) {}
+void test({int false}) {}
+void test({int false: 42}) {}
+void test({int false = 42}) {}
+
+void test(int final) {}
+void test([int final]) {}
+void test([int final = 42]) {}
+void test({int final}) {}
+void test({int final: 42}) {}
+void test({int final = 42}) {}
+
+void test(int finally) {}
+void test([int finally]) {}
+void test([int finally = 42]) {}
+void test({int finally}) {}
+void test({int finally: 42}) {}
+void test({int finally = 42}) {}
+
+void test(int for) {}
+void test([int for]) {}
+void test([int for = 42]) {}
+void test({int for}) {}
+void test({int for: 42}) {}
+void test({int for = 42}) {}
+
+void test(int Function) {}
+void test([int Function]) {}
+void test([int Function = 42]) {}
+void test({int Function}) {}
+void test({int Function: 42}) {}
+void test({int Function = 42}) {}
+
+void test(int get) {}
+void test([int get]) {}
+void test([int get = 42]) {}
+void test({int get}) {}
+void test({int get: 42}) {}
+void test({int get = 42}) {}
+
+void test(int hide) {}
+void test([int hide]) {}
+void test([int hide = 42]) {}
+void test({int hide}) {}
+void test({int hide: 42}) {}
+void test({int hide = 42}) {}
+
+void test(int if) {}
+void test([int if]) {}
+void test([int if = 42]) {}
+void test({int if}) {}
+void test({int if: 42}) {}
+void test({int if = 42}) {}
+
+void test(int implements) {}
+void test([int implements]) {}
+void test([int implements = 42]) {}
+void test({int implements}) {}
+void test({int implements: 42}) {}
+void test({int implements = 42}) {}
+
+void test(int import) {}
+void test([int import]) {}
+void test([int import = 42]) {}
+void test({int import}) {}
+void test({int import: 42}) {}
+void test({int import = 42}) {}
+
+void test(int in) {}
+void test([int in]) {}
+void test([int in = 42]) {}
+void test({int in}) {}
+void test({int in: 42}) {}
+void test({int in = 42}) {}
+
+void test(int inout) {}
+void test([int inout]) {}
+void test([int inout = 42]) {}
+void test({int inout}) {}
+void test({int inout: 42}) {}
+void test({int inout = 42}) {}
+
+void test(int interface) {}
+void test([int interface]) {}
+void test([int interface = 42]) {}
+void test({int interface}) {}
+void test({int interface: 42}) {}
+void test({int interface = 42}) {}
+
+void test(int is) {}
+void test([int is]) {}
+void test([int is = 42]) {}
+void test({int is}) {}
+void test({int is: 42}) {}
+void test({int is = 42}) {}
+
+void test(int late) {}
+void test([int late]) {}
+void test([int late = 42]) {}
+void test({int late}) {}
+void test({int late: 42}) {}
+void test({int late = 42}) {}
+
+void test(int library) {}
+void test([int library]) {}
+void test([int library = 42]) {}
+void test({int library}) {}
+void test({int library: 42}) {}
+void test({int library = 42}) {}
+
+void test(int mixin) {}
+void test([int mixin]) {}
+void test([int mixin = 42]) {}
+void test({int mixin}) {}
+void test({int mixin: 42}) {}
+void test({int mixin = 42}) {}
+
+void test(int native) {}
+void test([int native]) {}
+void test([int native = 42]) {}
+void test({int native}) {}
+void test({int native: 42}) {}
+void test({int native = 42}) {}
+
+void test(int new) {}
+void test([int new]) {}
+void test([int new = 42]) {}
+void test({int new}) {}
+void test({int new: 42}) {}
+void test({int new = 42}) {}
+
+void test(int null) {}
+void test([int null]) {}
+void test([int null = 42]) {}
+void test({int null}) {}
+void test({int null: 42}) {}
+void test({int null = 42}) {}
+
+void test(int of) {}
+void test([int of]) {}
+void test([int of = 42]) {}
+void test({int of}) {}
+void test({int of: 42}) {}
+void test({int of = 42}) {}
+
+void test(int on) {}
+void test([int on]) {}
+void test([int on = 42]) {}
+void test({int on}) {}
+void test({int on: 42}) {}
+void test({int on = 42}) {}
+
+void test(int operator) {}
+void test([int operator]) {}
+void test([int operator = 42]) {}
+void test({int operator}) {}
+void test({int operator: 42}) {}
+void test({int operator = 42}) {}
+
+void test(int out) {}
+void test([int out]) {}
+void test([int out = 42]) {}
+void test({int out}) {}
+void test({int out: 42}) {}
+void test({int out = 42}) {}
+
+void test(int part) {}
+void test([int part]) {}
+void test([int part = 42]) {}
+void test({int part}) {}
+void test({int part: 42}) {}
+void test({int part = 42}) {}
+
+void test(int patch) {}
+void test([int patch]) {}
+void test([int patch = 42]) {}
+void test({int patch}) {}
+void test({int patch: 42}) {}
+void test({int patch = 42}) {}
+
+void test(int required) {}
+void test([int required]) {}
+void test([int required = 42]) {}
+void test({int required}) {}
+void test({int required: 42}) {}
+void test({int required = 42}) {}
+
+void test(int rethrow) {}
+void test([int rethrow]) {}
+void test([int rethrow = 42]) {}
+void test({int rethrow}) {}
+void test({int rethrow: 42}) {}
+void test({int rethrow = 42}) {}
+
+void test(int return) {}
+void test([int return]) {}
+void test([int return = 42]) {}
+void test({int return}) {}
+void test({int return: 42}) {}
+void test({int return = 42}) {}
+
+void test(int set) {}
+void test([int set]) {}
+void test([int set = 42]) {}
+void test({int set}) {}
+void test({int set: 42}) {}
+void test({int set = 42}) {}
+
+void test(int show) {}
+void test([int show]) {}
+void test([int show = 42]) {}
+void test({int show}) {}
+void test({int show: 42}) {}
+void test({int show = 42}) {}
+
+void test(int source) {}
+void test([int source]) {}
+void test([int source = 42]) {}
+void test({int source}) {}
+void test({int source: 42}) {}
+void test({int source = 42}) {}
+
+void test(int static) {}
+void test([int static]) {}
+void test([int static = 42]) {}
+void test({int static}) {}
+void test({int static: 42}) {}
+void test({int static = 42}) {}
+
+void test(int super) {}
+void test([int super]) {}
+void test([int super = 42]) {}
+void test({int super}) {}
+void test({int super: 42}) {}
+void test({int super = 42}) {}
+
+void test(int switch) {}
+void test([int switch]) {}
+void test([int switch = 42]) {}
+void test({int switch}) {}
+void test({int switch: 42}) {}
+void test({int switch = 42}) {}
+
+void test(int sync) {}
+void test([int sync]) {}
+void test([int sync = 42]) {}
+void test({int sync}) {}
+void test({int sync: 42}) {}
+void test({int sync = 42}) {}
+
+void test(int this) {}
+void test([int this]) {}
+void test([int this = 42]) {}
+void test({int this}) {}
+void test({int this: 42}) {}
+void test({int this = 42}) {}
+
+void test(int throw) {}
+void test([int throw]) {}
+void test([int throw = 42]) {}
+void test({int throw}) {}
+void test({int throw: 42}) {}
+void test({int throw = 42}) {}
+
+void test(int true) {}
+void test([int true]) {}
+void test([int true = 42]) {}
+void test({int true}) {}
+void test({int true: 42}) {}
+void test({int true = 42}) {}
+
+void test(int try) {}
+void test([int try]) {}
+void test([int try = 42]) {}
+void test({int try}) {}
+void test({int try: 42}) {}
+void test({int try = 42}) {}
+
+void test(int typedef) {}
+void test([int typedef]) {}
+void test([int typedef = 42]) {}
+void test({int typedef}) {}
+void test({int typedef: 42}) {}
+void test({int typedef = 42}) {}
+
+void test(int var) {}
+void test([int var]) {}
+void test([int var = 42]) {}
+void test({int var}) {}
+void test({int var: 42}) {}
+void test({int var = 42}) {}
+
+void test(int void) {}
+void test([int void]) {}
+void test([int void = 42]) {}
+void test({int void}) {}
+void test({int void: 42}) {}
+void test({int void = 42}) {}
+
+void test(int while) {}
+void test([int while]) {}
+void test([int while = 42]) {}
+void test({int while}) {}
+void test({int while: 42}) {}
+void test({int while = 42}) {}
+
+void test(int with) {}
+void test([int with]) {}
+void test([int with = 42]) {}
+void test({int with}) {}
+void test({int with: 42}) {}
+void test({int with = 42}) {}
+
+void test(int yield) {}
+void test([int yield]) {}
+void test([int yield = 42]) {}
+void test({int yield}) {}
+void test({int yield: 42}) {}
+void test({int yield = 42}) {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect
new file mode 100644
index 0000000..422ea99
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect
@@ -0,0 +1,11827 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_formal_parameter:15:15: 'assert' can't be used as an identifier because it's a keyword.
+void test(int assert) {}
+              ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:16:16: 'assert' can't be used as an identifier because it's a keyword.
+void test([int assert]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:17:16: 'assert' can't be used as an identifier because it's a keyword.
+void test([int assert = 42]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:18:16: 'assert' can't be used as an identifier because it's a keyword.
+void test({int assert}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:19:16: 'assert' can't be used as an identifier because it's a keyword.
+void test({int assert: 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:20:16: 'assert' can't be used as an identifier because it's a keyword.
+void test({int assert = 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:36:15: 'break' can't be used as an identifier because it's a keyword.
+void test(int break) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:37:16: 'break' can't be used as an identifier because it's a keyword.
+void test([int break]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:38:16: 'break' can't be used as an identifier because it's a keyword.
+void test([int break = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:39:16: 'break' can't be used as an identifier because it's a keyword.
+void test({int break}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:40:16: 'break' can't be used as an identifier because it's a keyword.
+void test({int break: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:41:16: 'break' can't be used as an identifier because it's a keyword.
+void test({int break = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:43:15: 'case' can't be used as an identifier because it's a keyword.
+void test(int case) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:44:16: 'case' can't be used as an identifier because it's a keyword.
+void test([int case]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:45:16: 'case' can't be used as an identifier because it's a keyword.
+void test([int case = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:46:16: 'case' can't be used as an identifier because it's a keyword.
+void test({int case}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:47:16: 'case' can't be used as an identifier because it's a keyword.
+void test({int case: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:48:16: 'case' can't be used as an identifier because it's a keyword.
+void test({int case = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:50:15: 'catch' can't be used as an identifier because it's a keyword.
+void test(int catch) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:51:16: 'catch' can't be used as an identifier because it's a keyword.
+void test([int catch]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:52:16: 'catch' can't be used as an identifier because it's a keyword.
+void test([int catch = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:53:16: 'catch' can't be used as an identifier because it's a keyword.
+void test({int catch}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:54:16: 'catch' can't be used as an identifier because it's a keyword.
+void test({int catch: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:55:16: 'catch' can't be used as an identifier because it's a keyword.
+void test({int catch = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:57:15: 'class' can't be used as an identifier because it's a keyword.
+void test(int class) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:58:16: 'class' can't be used as an identifier because it's a keyword.
+void test([int class]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:59:16: 'class' can't be used as an identifier because it's a keyword.
+void test([int class = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:60:16: 'class' can't be used as an identifier because it's a keyword.
+void test({int class}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:61:16: 'class' can't be used as an identifier because it's a keyword.
+void test({int class: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:62:16: 'class' can't be used as an identifier because it's a keyword.
+void test({int class = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:64:15: 'const' can't be used as an identifier because it's a keyword.
+void test(int const) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:65:16: 'const' can't be used as an identifier because it's a keyword.
+void test([int const]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:66:16: 'const' can't be used as an identifier because it's a keyword.
+void test([int const = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:67:16: 'const' can't be used as an identifier because it's a keyword.
+void test({int const}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:68:16: 'const' can't be used as an identifier because it's a keyword.
+void test({int const: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:69:16: 'const' can't be used as an identifier because it's a keyword.
+void test({int const = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:71:15: 'continue' can't be used as an identifier because it's a keyword.
+void test(int continue) {}
+              ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:72:16: 'continue' can't be used as an identifier because it's a keyword.
+void test([int continue]) {}
+               ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:73:16: 'continue' can't be used as an identifier because it's a keyword.
+void test([int continue = 42]) {}
+               ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:74:16: 'continue' can't be used as an identifier because it's a keyword.
+void test({int continue}) {}
+               ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:75:16: 'continue' can't be used as an identifier because it's a keyword.
+void test({int continue: 42}) {}
+               ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:76:16: 'continue' can't be used as an identifier because it's a keyword.
+void test({int continue = 42}) {}
+               ^^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:85:15: 'default' can't be used as an identifier because it's a keyword.
+void test(int default) {}
+              ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:86:16: 'default' can't be used as an identifier because it's a keyword.
+void test([int default]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:87:16: 'default' can't be used as an identifier because it's a keyword.
+void test([int default = 42]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:88:16: 'default' can't be used as an identifier because it's a keyword.
+void test({int default}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:89:16: 'default' can't be used as an identifier because it's a keyword.
+void test({int default: 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:90:16: 'default' can't be used as an identifier because it's a keyword.
+void test({int default = 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:99:15: 'do' can't be used as an identifier because it's a keyword.
+void test(int do) {}
+              ^^
+
+parser/error_recovery/keyword_named_formal_parameter:100:16: 'do' can't be used as an identifier because it's a keyword.
+void test([int do]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:101:16: 'do' can't be used as an identifier because it's a keyword.
+void test([int do = 42]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:102:16: 'do' can't be used as an identifier because it's a keyword.
+void test({int do}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:103:16: 'do' can't be used as an identifier because it's a keyword.
+void test({int do: 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:104:16: 'do' can't be used as an identifier because it's a keyword.
+void test({int do = 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:113:15: 'else' can't be used as an identifier because it's a keyword.
+void test(int else) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:114:16: 'else' can't be used as an identifier because it's a keyword.
+void test([int else]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:115:16: 'else' can't be used as an identifier because it's a keyword.
+void test([int else = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:116:16: 'else' can't be used as an identifier because it's a keyword.
+void test({int else}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:117:16: 'else' can't be used as an identifier because it's a keyword.
+void test({int else: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:118:16: 'else' can't be used as an identifier because it's a keyword.
+void test({int else = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:120:15: 'enum' can't be used as an identifier because it's a keyword.
+void test(int enum) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:121:16: 'enum' can't be used as an identifier because it's a keyword.
+void test([int enum]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:122:16: 'enum' can't be used as an identifier because it's a keyword.
+void test([int enum = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:123:16: 'enum' can't be used as an identifier because it's a keyword.
+void test({int enum}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:124:16: 'enum' can't be used as an identifier because it's a keyword.
+void test({int enum: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:125:16: 'enum' can't be used as an identifier because it's a keyword.
+void test({int enum = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:134:15: 'extends' can't be used as an identifier because it's a keyword.
+void test(int extends) {}
+              ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:135:16: 'extends' can't be used as an identifier because it's a keyword.
+void test([int extends]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:136:16: 'extends' can't be used as an identifier because it's a keyword.
+void test([int extends = 42]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:137:16: 'extends' can't be used as an identifier because it's a keyword.
+void test({int extends}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:138:16: 'extends' can't be used as an identifier because it's a keyword.
+void test({int extends: 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:139:16: 'extends' can't be used as an identifier because it's a keyword.
+void test({int extends = 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:162:15: 'false' can't be used as an identifier because it's a keyword.
+void test(int false) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:163:16: 'false' can't be used as an identifier because it's a keyword.
+void test([int false]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:164:16: 'false' can't be used as an identifier because it's a keyword.
+void test([int false = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:165:16: 'false' can't be used as an identifier because it's a keyword.
+void test({int false}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:166:16: 'false' can't be used as an identifier because it's a keyword.
+void test({int false: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:167:16: 'false' can't be used as an identifier because it's a keyword.
+void test({int false = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:169:15: 'final' can't be used as an identifier because it's a keyword.
+void test(int final) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:170:16: 'final' can't be used as an identifier because it's a keyword.
+void test([int final]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:171:16: 'final' can't be used as an identifier because it's a keyword.
+void test([int final = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:172:16: 'final' can't be used as an identifier because it's a keyword.
+void test({int final}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:173:16: 'final' can't be used as an identifier because it's a keyword.
+void test({int final: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:174:16: 'final' can't be used as an identifier because it's a keyword.
+void test({int final = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:176:15: 'finally' can't be used as an identifier because it's a keyword.
+void test(int finally) {}
+              ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:177:16: 'finally' can't be used as an identifier because it's a keyword.
+void test([int finally]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:178:16: 'finally' can't be used as an identifier because it's a keyword.
+void test([int finally = 42]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:179:16: 'finally' can't be used as an identifier because it's a keyword.
+void test({int finally}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:180:16: 'finally' can't be used as an identifier because it's a keyword.
+void test({int finally: 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:181:16: 'finally' can't be used as an identifier because it's a keyword.
+void test({int finally = 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:183:15: 'for' can't be used as an identifier because it's a keyword.
+void test(int for) {}
+              ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:184:16: 'for' can't be used as an identifier because it's a keyword.
+void test([int for]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:185:16: 'for' can't be used as an identifier because it's a keyword.
+void test([int for = 42]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:186:16: 'for' can't be used as an identifier because it's a keyword.
+void test({int for}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:187:16: 'for' can't be used as an identifier because it's a keyword.
+void test({int for: 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:188:16: 'for' can't be used as an identifier because it's a keyword.
+void test({int for = 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:211:15: 'if' can't be used as an identifier because it's a keyword.
+void test(int if) {}
+              ^^
+
+parser/error_recovery/keyword_named_formal_parameter:212:16: 'if' can't be used as an identifier because it's a keyword.
+void test([int if]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:213:16: 'if' can't be used as an identifier because it's a keyword.
+void test([int if = 42]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:214:16: 'if' can't be used as an identifier because it's a keyword.
+void test({int if}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:215:16: 'if' can't be used as an identifier because it's a keyword.
+void test({int if: 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:216:16: 'if' can't be used as an identifier because it's a keyword.
+void test({int if = 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:232:15: 'in' can't be used as an identifier because it's a keyword.
+void test(int in) {}
+              ^^
+
+parser/error_recovery/keyword_named_formal_parameter:233:16: 'in' can't be used as an identifier because it's a keyword.
+void test([int in]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:234:16: 'in' can't be used as an identifier because it's a keyword.
+void test([int in = 42]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:235:16: 'in' can't be used as an identifier because it's a keyword.
+void test({int in}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:236:16: 'in' can't be used as an identifier because it's a keyword.
+void test({int in: 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:237:16: 'in' can't be used as an identifier because it's a keyword.
+void test({int in = 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:253:15: 'is' can't be used as an identifier because it's a keyword.
+void test(int is) {}
+              ^^
+
+parser/error_recovery/keyword_named_formal_parameter:254:16: 'is' can't be used as an identifier because it's a keyword.
+void test([int is]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:255:16: 'is' can't be used as an identifier because it's a keyword.
+void test([int is = 42]) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:256:16: 'is' can't be used as an identifier because it's a keyword.
+void test({int is}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:257:16: 'is' can't be used as an identifier because it's a keyword.
+void test({int is: 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:258:16: 'is' can't be used as an identifier because it's a keyword.
+void test({int is = 42}) {}
+               ^^
+
+parser/error_recovery/keyword_named_formal_parameter:288:15: 'new' can't be used as an identifier because it's a keyword.
+void test(int new) {}
+              ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:289:16: 'new' can't be used as an identifier because it's a keyword.
+void test([int new]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:290:16: 'new' can't be used as an identifier because it's a keyword.
+void test([int new = 42]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:291:16: 'new' can't be used as an identifier because it's a keyword.
+void test({int new}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:292:16: 'new' can't be used as an identifier because it's a keyword.
+void test({int new: 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:293:16: 'new' can't be used as an identifier because it's a keyword.
+void test({int new = 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:295:15: 'null' can't be used as an identifier because it's a keyword.
+void test(int null) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:296:16: 'null' can't be used as an identifier because it's a keyword.
+void test([int null]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:297:16: 'null' can't be used as an identifier because it's a keyword.
+void test([int null = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:298:16: 'null' can't be used as an identifier because it's a keyword.
+void test({int null}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:299:16: 'null' can't be used as an identifier because it's a keyword.
+void test({int null: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:300:16: 'null' can't be used as an identifier because it's a keyword.
+void test({int null = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:351:15: 'rethrow' can't be used as an identifier because it's a keyword.
+void test(int rethrow) {}
+              ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:352:16: 'rethrow' can't be used as an identifier because it's a keyword.
+void test([int rethrow]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:353:16: 'rethrow' can't be used as an identifier because it's a keyword.
+void test([int rethrow = 42]) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:354:16: 'rethrow' can't be used as an identifier because it's a keyword.
+void test({int rethrow}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:355:16: 'rethrow' can't be used as an identifier because it's a keyword.
+void test({int rethrow: 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:356:16: 'rethrow' can't be used as an identifier because it's a keyword.
+void test({int rethrow = 42}) {}
+               ^^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:358:15: 'return' can't be used as an identifier because it's a keyword.
+void test(int return) {}
+              ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:359:16: 'return' can't be used as an identifier because it's a keyword.
+void test([int return]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:360:16: 'return' can't be used as an identifier because it's a keyword.
+void test([int return = 42]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:361:16: 'return' can't be used as an identifier because it's a keyword.
+void test({int return}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:362:16: 'return' can't be used as an identifier because it's a keyword.
+void test({int return: 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:363:16: 'return' can't be used as an identifier because it's a keyword.
+void test({int return = 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:393:15: 'super' can't be used as an identifier because it's a keyword.
+void test(int super) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:394:16: 'super' can't be used as an identifier because it's a keyword.
+void test([int super]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:395:16: 'super' can't be used as an identifier because it's a keyword.
+void test([int super = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:396:16: 'super' can't be used as an identifier because it's a keyword.
+void test({int super}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:397:16: 'super' can't be used as an identifier because it's a keyword.
+void test({int super: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:398:16: 'super' can't be used as an identifier because it's a keyword.
+void test({int super = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:400:15: 'switch' can't be used as an identifier because it's a keyword.
+void test(int switch) {}
+              ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:401:16: 'switch' can't be used as an identifier because it's a keyword.
+void test([int switch]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:402:16: 'switch' can't be used as an identifier because it's a keyword.
+void test([int switch = 42]) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:403:16: 'switch' can't be used as an identifier because it's a keyword.
+void test({int switch}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:404:16: 'switch' can't be used as an identifier because it's a keyword.
+void test({int switch: 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:405:16: 'switch' can't be used as an identifier because it's a keyword.
+void test({int switch = 42}) {}
+               ^^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:414:15: 'this' can't be used as an identifier because it's a keyword.
+void test(int this) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:415:16: 'this' can't be used as an identifier because it's a keyword.
+void test([int this]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:416:16: 'this' can't be used as an identifier because it's a keyword.
+void test([int this = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:417:16: 'this' can't be used as an identifier because it's a keyword.
+void test({int this}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:418:16: 'this' can't be used as an identifier because it's a keyword.
+void test({int this: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:419:16: 'this' can't be used as an identifier because it's a keyword.
+void test({int this = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:421:15: 'throw' can't be used as an identifier because it's a keyword.
+void test(int throw) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:422:16: 'throw' can't be used as an identifier because it's a keyword.
+void test([int throw]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:423:16: 'throw' can't be used as an identifier because it's a keyword.
+void test([int throw = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:424:16: 'throw' can't be used as an identifier because it's a keyword.
+void test({int throw}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:425:16: 'throw' can't be used as an identifier because it's a keyword.
+void test({int throw: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:426:16: 'throw' can't be used as an identifier because it's a keyword.
+void test({int throw = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:428:15: 'true' can't be used as an identifier because it's a keyword.
+void test(int true) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:429:16: 'true' can't be used as an identifier because it's a keyword.
+void test([int true]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:430:16: 'true' can't be used as an identifier because it's a keyword.
+void test([int true = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:431:16: 'true' can't be used as an identifier because it's a keyword.
+void test({int true}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:432:16: 'true' can't be used as an identifier because it's a keyword.
+void test({int true: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:433:16: 'true' can't be used as an identifier because it's a keyword.
+void test({int true = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:435:15: 'try' can't be used as an identifier because it's a keyword.
+void test(int try) {}
+              ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:436:16: 'try' can't be used as an identifier because it's a keyword.
+void test([int try]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:437:16: 'try' can't be used as an identifier because it's a keyword.
+void test([int try = 42]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:438:16: 'try' can't be used as an identifier because it's a keyword.
+void test({int try}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:439:16: 'try' can't be used as an identifier because it's a keyword.
+void test({int try: 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:440:16: 'try' can't be used as an identifier because it's a keyword.
+void test({int try = 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:449:15: 'var' can't be used as an identifier because it's a keyword.
+void test(int var) {}
+              ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:450:16: 'var' can't be used as an identifier because it's a keyword.
+void test([int var]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:451:16: 'var' can't be used as an identifier because it's a keyword.
+void test([int var = 42]) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:452:16: 'var' can't be used as an identifier because it's a keyword.
+void test({int var}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:453:16: 'var' can't be used as an identifier because it's a keyword.
+void test({int var: 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:454:16: 'var' can't be used as an identifier because it's a keyword.
+void test({int var = 42}) {}
+               ^^^
+
+parser/error_recovery/keyword_named_formal_parameter:456:15: 'void' can't be used as an identifier because it's a keyword.
+void test(int void) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:457:16: 'void' can't be used as an identifier because it's a keyword.
+void test([int void]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:458:16: 'void' can't be used as an identifier because it's a keyword.
+void test([int void = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:459:16: 'void' can't be used as an identifier because it's a keyword.
+void test({int void}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:460:16: 'void' can't be used as an identifier because it's a keyword.
+void test({int void: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:461:16: 'void' can't be used as an identifier because it's a keyword.
+void test({int void = 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:463:15: 'while' can't be used as an identifier because it's a keyword.
+void test(int while) {}
+              ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:464:16: 'while' can't be used as an identifier because it's a keyword.
+void test([int while]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:465:16: 'while' can't be used as an identifier because it's a keyword.
+void test([int while = 42]) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:466:16: 'while' can't be used as an identifier because it's a keyword.
+void test({int while}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:467:16: 'while' can't be used as an identifier because it's a keyword.
+void test({int while: 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:468:16: 'while' can't be used as an identifier because it's a keyword.
+void test({int while = 42}) {}
+               ^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:470:15: 'with' can't be used as an identifier because it's a keyword.
+void test(int with) {}
+              ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:471:16: 'with' can't be used as an identifier because it's a keyword.
+void test([int with]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:472:16: 'with' can't be used as an identifier because it's a keyword.
+void test([int with = 42]) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:473:16: 'with' can't be used as an identifier because it's a keyword.
+void test({int with}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:474:16: 'with' can't be used as an identifier because it's a keyword.
+void test({int with: 42}) {}
+               ^^^^
+
+parser/error_recovery/keyword_named_formal_parameter:475:16: 'with' can't be used as an identifier because it's a keyword.
+void test({int with = 42}) {}
+               ^^^^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(abstract)
+          handleType(int, null)
+          handleIdentifier(abstract, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, abstract, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, abstract, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, abstract, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(as)
+          handleType(int, null)
+          handleIdentifier(as, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, as, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, as, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, as, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(assert)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, assert, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, assert, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, assert, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(async)
+          handleType(int, null)
+          handleIdentifier(async, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, async, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, async, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, async, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(await)
+          handleType(int, null)
+          handleIdentifier(await, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, await, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, await, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, await, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(break)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, break, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, break, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, break, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(case)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, case, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, case, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, case, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(catch)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, catch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, catch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, catch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(class)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, class, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, class, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, class, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(const)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, const, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, const, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, const, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(continue)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, continue, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, continue, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, continue, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(covariant)
+          handleType(int, null)
+          handleIdentifier(covariant, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, covariant, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, covariant, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, covariant, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(default)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, default, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, default, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(deferred)
+          handleType(int, null)
+          handleIdentifier(deferred, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, deferred, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, deferred, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, deferred, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(do)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, do, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, do, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, do, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(dynamic)
+          handleType(int, null)
+          handleIdentifier(dynamic, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(else)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, else, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, else, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, else, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(enum)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, enum, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, enum, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, enum, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(export)
+          handleType(int, null)
+          handleIdentifier(export, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, export, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, export, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, export, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(extends)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, extends, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, extends, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, extends, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(extension)
+          handleType(int, null)
+          handleIdentifier(extension, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, extension, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, extension, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, extension, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(external)
+          handleType(int, null)
+          handleIdentifier(external, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, external, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, external, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, external, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(factory)
+          handleType(int, null)
+          handleIdentifier(factory, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, factory, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, factory, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, factory, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(false)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, false, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, false, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, false, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(final)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, final, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, final, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, final, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(finally)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, finally, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, finally, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, finally, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(for)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, for, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, for, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, for, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(Function)
+          handleType(int, null)
+          handleIdentifier(Function, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, Function, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, Function, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, Function, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(get)
+          handleType(int, null)
+          handleIdentifier(get, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, get, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, get, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, get, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(hide)
+          handleType(int, null)
+          handleIdentifier(hide, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, hide, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, hide, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, hide, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(if)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, if, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, if, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, if, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(implements)
+          handleType(int, null)
+          handleIdentifier(implements, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, implements, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, implements, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, implements, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(import)
+          handleType(int, null)
+          handleIdentifier(import, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, import, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, import, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, import, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(in)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, in, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, in, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, in, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(inout)
+          handleType(int, null)
+          handleIdentifier(inout, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, inout, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, inout, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, inout, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(interface)
+          handleType(int, null)
+          handleIdentifier(interface, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, interface, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, interface, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, interface, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(is)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, is, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, is, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, is, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(late)
+          handleType(int, null)
+          handleIdentifier(late, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, late, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, late, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, late, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(library)
+          handleType(int, null)
+          handleIdentifier(library, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, library, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, library, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, library, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(mixin)
+          handleType(int, null)
+          handleIdentifier(mixin, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, mixin, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, mixin, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, mixin, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(native)
+          handleType(int, null)
+          handleIdentifier(native, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, native, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, native, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, native, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(new)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, new, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, new, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, new, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(null)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, null, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, null, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(of)
+          handleType(int, null)
+          handleIdentifier(of, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, of, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, of, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, of, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(on)
+          handleType(int, null)
+          handleIdentifier(on, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, on, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, on, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(operator)
+          handleType(int, null)
+          handleIdentifier(operator, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, operator, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, operator, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, operator, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(out)
+          handleType(int, null)
+          handleIdentifier(out, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, out, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, out, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, out, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(part)
+          handleType(int, null)
+          handleIdentifier(part, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, part, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, part, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, part, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(patch)
+          handleType(int, null)
+          handleIdentifier(patch, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, patch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, patch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, patch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(required)
+          handleType(int, null)
+          handleIdentifier(required, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, required, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, required, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, required, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(rethrow)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(return)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, return, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, return, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, return, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(set)
+          handleType(int, null)
+          handleIdentifier(set, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, set, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, set, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, set, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(show)
+          handleType(int, null)
+          handleIdentifier(show, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, show, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, show, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, show, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(source)
+          handleType(int, null)
+          handleIdentifier(source, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, source, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, source, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, source, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(static)
+          handleType(int, null)
+          handleIdentifier(static, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, static, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, static, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, static, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(super)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, super, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, super, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, super, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(switch)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, switch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, switch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, switch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(sync)
+          handleType(int, null)
+          handleIdentifier(sync, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, sync, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, sync, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, sync, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(this)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, this, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, this, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, this, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(throw)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, throw, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, throw, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, throw, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(true)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, true, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, true, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, true, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(try)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, try, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, try, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, try, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(typedef)
+          handleType(int, null)
+          handleIdentifier(typedef, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, typedef, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, typedef, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, typedef, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(var)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, var, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, var, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, var, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(void)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, void, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, void, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, void, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(while)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, while, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, while, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, while, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(with)
+          handleType(int, null)
+          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, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, with, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, with, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, with, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            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, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(yield)
+          handleType(int, null)
+          handleIdentifier(yield, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, yield, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, yield, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, yield, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(414, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect
new file mode 100644
index 0000000..1412298
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect
@@ -0,0 +1,19800 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(abstract)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(abstract, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, abstract, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstract)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(abstract, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, abstract, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstract)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(abstract, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstract)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(abstract, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, abstract, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstract)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(abstract, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstract)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(abstract, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, abstract, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(as)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(as, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, as, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(as)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(as, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, as, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(as)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(as, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(as)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(as, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, as, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(as)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(as, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(as)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(as, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, as, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(assert)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(assert, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, assert, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assert)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(assert, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, assert, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assert)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(assert, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assert)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(assert, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, assert, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assert)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(assert, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assert)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(assert, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, assert, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(async)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(async, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, async, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(async)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(async, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, async, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(async)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(async, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(async)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(async, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, async, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(async)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(async, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(async)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(async, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, async, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(await)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(await, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, await, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(await)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(await, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, await, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(await)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(await, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(await)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(await, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, await, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(await)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(await, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(await)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(await, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, await, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(break)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(break, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, break, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(break)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(break, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, break, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(break)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(break, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(break)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(break, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, break, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(break)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(break, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(break)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(break, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, break, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(case)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(case, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, case, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(case)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(case, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, case, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(case)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(case, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(case)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(case, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, case, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(case)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(case, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(case)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(case, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, case, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(catch)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(catch, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, catch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(catch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, catch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(catch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(catch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, catch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(catch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(catch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, catch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(class)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(class, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, class, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(class)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(class, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, class, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(class)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(class, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(class)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(class, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, class, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(class)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(class, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(class)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(class, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, class, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(const)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(const, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, const, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(const)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(const, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, const, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(const)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(const, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(const)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(const, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, const, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(const)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(const, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(const)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(const, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, const, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(continue)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(continue, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, continue, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continue)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(continue, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, continue, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continue)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(continue, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continue)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(continue, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, continue, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continue)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(continue, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continue)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(continue, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, continue, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(covariant)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(covariant, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, covariant, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariant)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(covariant, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, covariant, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariant)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(covariant, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariant)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(covariant, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, covariant, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariant)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(covariant, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariant)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(covariant, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, covariant, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(default)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(default, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(default)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(default, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, default, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(default)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(default, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(default)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(default, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, default, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(default)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(default, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(default)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(default, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, default, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(deferred)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(deferred, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, deferred, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferred)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(deferred, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, deferred, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferred)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(deferred, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferred)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(deferred, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, deferred, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferred)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(deferred, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferred)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(deferred, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, deferred, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(do)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(do, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, do, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(do)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(do, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, do, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(do)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(do, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(do)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(do, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, do, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(do)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(do, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(do)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(do, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, do, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(dynamic)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamic)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamic)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamic)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamic)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamic)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(dynamic, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, dynamic, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(else)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(else, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, else, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(else)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(else, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, else, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(else)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(else, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(else)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(else, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, else, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(else)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(else, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(else)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(else, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, else, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(enum)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(enum, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, enum, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enum)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(enum, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, enum, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enum)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(enum, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enum)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(enum, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, enum, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enum)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(enum, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enum)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(enum, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, enum, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(export)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(export, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, export, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(export)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(export, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, export, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(export)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(export, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(export)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(export, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, export, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(export)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(export, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(export)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(export, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, export, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extends)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(extends, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, extends, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extends)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(extends, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, extends, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extends)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(extends, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extends)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(extends, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, extends, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extends)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(extends, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extends)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(extends, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, extends, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extension)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(extension, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, extension, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extension)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(extension, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, extension, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extension)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(extension, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extension)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(extension, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, extension, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extension)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(extension, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extension)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(extension, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, extension, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(external)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(external, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, external, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(external)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(external, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, external, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(external)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(external, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(external)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(external, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, external, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(external)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(external, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(external)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(external, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, external, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(factory)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(factory, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, factory, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factory)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(factory, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, factory, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factory)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(factory, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factory)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(factory, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, factory, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factory)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(factory, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factory)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(factory, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, factory, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(false)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(false, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, false, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(false)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(false, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, false, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(false)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(false, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(false)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(false, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, false, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(false)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(false, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(false)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(false, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, false, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(final)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(final, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, final, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(final)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(final, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, final, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(final)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(final, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(final)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(final, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, final, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(final)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(final, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(final)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(final, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, final, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finally)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(finally, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, finally, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finally)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(finally, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, finally, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finally)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(finally, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finally)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(finally, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, finally, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finally)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(finally, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finally)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(finally, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, finally, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(for)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(for, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, for, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(for)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(for, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, for, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(for)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(for, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(for)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(for, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, for, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(for)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(for, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(for)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(for, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, for, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(Function, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, Function, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(Function)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(Function, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, Function, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(Function)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(Function, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(Function)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(Function, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, Function, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(Function)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(Function, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(Function)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(Function, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, Function, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(get, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, get, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(get)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(get, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, get, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(get)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(get, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(get)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(get, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, get, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(get)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(get, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(get)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(get, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, get, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(hide)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(hide, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, hide, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hide)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(hide, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, hide, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hide)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(hide, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hide)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(hide, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, hide, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hide)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(hide, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hide)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(hide, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, hide, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(if)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(if, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, if, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(if)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(if, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, if, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(if)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(if, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(if)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(if, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, if, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(if)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(if, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(if)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(if, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, if, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(implements, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, implements, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implements)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(implements, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, implements, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implements)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(implements, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implements)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(implements, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, implements, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implements)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(implements, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implements)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(implements, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, implements, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(import)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(import, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, import, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(import)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(import, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, import, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(import)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(import, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(import)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(import, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, import, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(import)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(import, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(import)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(import, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, import, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(in)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(in, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, in, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(in)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(in, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, in, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(in)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(in, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(in)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(in, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, in, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(in)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(in, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(in)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(in, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, in, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inout)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(inout, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, inout, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inout)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(inout, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, inout, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inout)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(inout, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inout)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(inout, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, inout, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inout)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(inout, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inout)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(inout, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, inout, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(interface)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(interface, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, interface, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interface)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(interface, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, interface, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interface)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(interface, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interface)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(interface, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, interface, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interface)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(interface, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interface)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(interface, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, interface, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(is)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(is, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, is, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(is)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(is, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, is, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(is)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(is, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(is)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(is, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, is, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(is)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(is, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(is)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(is, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, is, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(late)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(late, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, late, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(late)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(late, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, late, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(late)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(late, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(late)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(late, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, late, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(late)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(late, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(late)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(late, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, late, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(library)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(library, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, library, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(library)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(library, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, library, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(library)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(library, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(library)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(library, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, library, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(library)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(library, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(library)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(library, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, library, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(mixin)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(mixin, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, mixin, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixin)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(mixin, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, mixin, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixin)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(mixin, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixin)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(mixin, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, mixin, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixin)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(mixin, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixin)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(mixin, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, mixin, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(native)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(native, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, native, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(native)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(native, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, native, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(native)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(native, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(native)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(native, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, native, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(native)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(native, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(native)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(native, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, native, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(new)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(new, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, new, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(new)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(new, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, new, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(new)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(new, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(new)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(new, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, new, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(new)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(new, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(new)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(new, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, new, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(null)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(null, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(null)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(null, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, null, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(null)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(null, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(null)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(null, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, null, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(null)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(null, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(null)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(null, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, null, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(of)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(of, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, of, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(of)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(of, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, of, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(of)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(of, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(of)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(of, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, of, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(of)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(of, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(of)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(of, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, of, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(on, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(on)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(on, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, on, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(on)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(on, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(on)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(on, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, on, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(on)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(on, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(on)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(on, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, on, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(operator, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, operator, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operator)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(operator, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, operator, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operator)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(operator, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operator)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(operator, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, operator, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operator)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(operator, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operator)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(operator, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, operator, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(out)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(out, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, out, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(out)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(out, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, out, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(out)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(out, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(out)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(out, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, out, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(out)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(out, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(out)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(out, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, out, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(part)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(part, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, part, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(part)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(part, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, part, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(part)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(part, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(part)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(part, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, part, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(part)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(part, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(part)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(part, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, part, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(patch)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(patch, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, patch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(patch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, patch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(patch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(patch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, patch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(patch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(patch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, patch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(required)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(required, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, required, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(required)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(required, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, required, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(required)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(required, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(required)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(required, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, required, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(required)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(required, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(required)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(required, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, required, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(rethrow)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrow)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrow)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrow)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, rethrow, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrow)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrow)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(rethrow, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, rethrow, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(return)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(return, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, return, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(return)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(return, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, return, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(return)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(return, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(return)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(return, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, return, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(return)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(return, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(return)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(return, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, return, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(set)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(set, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, set, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(set)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(set, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, set, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(set)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(set, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(set)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(set, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, set, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(set)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(set, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(set)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(set, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, set, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(show)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(show, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, show, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(show)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(show, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, show, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(show)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(show, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(show)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(show, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, show, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(show)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(show, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(show)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(show, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, show, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(source)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(source, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, source, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(source)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(source, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, source, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(source)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(source, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(source)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(source, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, source, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(source)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(source, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(source)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(source, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, source, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(static)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(static, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, static, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(static)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(static, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, static, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(static)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(static, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(static)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(static, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, static, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(static)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(static, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(static)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(static, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, static, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(super, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, super, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(super, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, super, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(super, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(super, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, super, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(super, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(super, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, super, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switch)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(switch, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, switch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(switch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, switch, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(switch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(switch, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, switch, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(switch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switch)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(switch, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, switch, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sync)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(sync, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, sync, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sync)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(sync, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, sync, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sync)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(sync, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sync)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(sync, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, sync, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sync)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(sync, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sync)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(sync, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, sync, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(this)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(this, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, this, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(this, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, this, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(this, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(this, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, this, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(this, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(this, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, this, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(throw)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(throw, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, throw, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throw)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(throw, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, throw, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throw)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(throw, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throw)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(throw, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, throw, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throw)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(throw, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throw)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(throw, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, throw, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(true)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(true, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, true, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(true)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(true, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, true, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(true)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(true, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(true)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(true, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, true, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(true)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(true, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(true)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(true, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, true, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(try)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(try, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, try, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(try)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(try, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, try, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(try)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(try, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(try)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(try, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, try, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(try)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(try, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(try)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(try, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, try, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(typedef)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(typedef, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, typedef, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedef)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(typedef, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, typedef, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedef)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(typedef, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedef)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(typedef, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, typedef, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedef)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(typedef, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedef)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(typedef, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, typedef, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(var)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(var, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, var, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(var)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(var, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, var, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(var)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(var, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(var)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(var, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, var, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(var)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(var, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(var)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(var, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, var, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(void)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(void, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, void, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(void)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(void, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, void, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(void)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(void, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(void)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(void, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, void, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(void)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(void, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(void)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(void, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, void, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(while)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(while, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, while, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(while)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(while, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, while, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(while)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(while, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(while)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(while, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, while, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(while)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(while, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(while)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(while, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, while, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  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)
+                  listener: handleIdentifier(with, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, with, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(with)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(with, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, with, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(with)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(with, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(with)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(with, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, with, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(with)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(with, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(with)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    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)
+                    listener: handleIdentifier(with, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, with, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(yield)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(yield, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, yield, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yield)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(yield, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, yield, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yield)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(yield, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yield)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(yield, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, yield, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yield)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(yield, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yield)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    inPlainSync()
+                    listener: handleIdentifier(yield, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, yield, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(414, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.parser.expect
new file mode 100644
index 0000000..41d27c9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.parser.expect
@@ -0,0 +1,967 @@
+void test(int abstract) {}
+void test([int abstract]) {}
+void test([int abstract = 42]) {}
+void test({int abstract}) {}
+void test({int abstract: 42}) {}
+void test({int abstract = 42}) {}
+
+void test(int as) {}
+void test([int as]) {}
+void test([int as = 42]) {}
+void test({int as}) {}
+void test({int as: 42}) {}
+void test({int as = 42}) {}
+
+void test(int assert) {}
+void test([int assert]) {}
+void test([int assert = 42]) {}
+void test({int assert}) {}
+void test({int assert: 42}) {}
+void test({int assert = 42}) {}
+
+void test(int async) {}
+void test([int async]) {}
+void test([int async = 42]) {}
+void test({int async}) {}
+void test({int async: 42}) {}
+void test({int async = 42}) {}
+
+void test(int await) {}
+void test([int await]) {}
+void test([int await = 42]) {}
+void test({int await}) {}
+void test({int await: 42}) {}
+void test({int await = 42}) {}
+
+void test(int break) {}
+void test([int break]) {}
+void test([int break = 42]) {}
+void test({int break}) {}
+void test({int break: 42}) {}
+void test({int break = 42}) {}
+
+void test(int case) {}
+void test([int case]) {}
+void test([int case = 42]) {}
+void test({int case}) {}
+void test({int case: 42}) {}
+void test({int case = 42}) {}
+
+void test(int catch) {}
+void test([int catch]) {}
+void test([int catch = 42]) {}
+void test({int catch}) {}
+void test({int catch: 42}) {}
+void test({int catch = 42}) {}
+
+void test(int class) {}
+void test([int class]) {}
+void test([int class = 42]) {}
+void test({int class}) {}
+void test({int class: 42}) {}
+void test({int class = 42}) {}
+
+void test(int const) {}
+void test([int const]) {}
+void test([int const = 42]) {}
+void test({int const}) {}
+void test({int const: 42}) {}
+void test({int const = 42}) {}
+
+void test(int continue) {}
+void test([int continue]) {}
+void test([int continue = 42]) {}
+void test({int continue}) {}
+void test({int continue: 42}) {}
+void test({int continue = 42}) {}
+
+void test(int covariant) {}
+void test([int covariant]) {}
+void test([int covariant = 42]) {}
+void test({int covariant}) {}
+void test({int covariant: 42}) {}
+void test({int covariant = 42}) {}
+
+void test(int default) {}
+void test([int default]) {}
+void test([int default = 42]) {}
+void test({int default}) {}
+void test({int default: 42}) {}
+void test({int default = 42}) {}
+
+void test(int deferred) {}
+void test([int deferred]) {}
+void test([int deferred = 42]) {}
+void test({int deferred}) {}
+void test({int deferred: 42}) {}
+void test({int deferred = 42}) {}
+
+void test(int do) {}
+void test([int do]) {}
+void test([int do = 42]) {}
+void test({int do}) {}
+void test({int do: 42}) {}
+void test({int do = 42}) {}
+
+void test(int dynamic) {}
+void test([int dynamic]) {}
+void test([int dynamic = 42]) {}
+void test({int dynamic}) {}
+void test({int dynamic: 42}) {}
+void test({int dynamic = 42}) {}
+
+void test(int else) {}
+void test([int else]) {}
+void test([int else = 42]) {}
+void test({int else}) {}
+void test({int else: 42}) {}
+void test({int else = 42}) {}
+
+void test(int enum) {}
+void test([int enum]) {}
+void test([int enum = 42]) {}
+void test({int enum}) {}
+void test({int enum: 42}) {}
+void test({int enum = 42}) {}
+
+void test(int export) {}
+void test([int export]) {}
+void test([int export = 42]) {}
+void test({int export}) {}
+void test({int export: 42}) {}
+void test({int export = 42}) {}
+
+void test(int extends) {}
+void test([int extends]) {}
+void test([int extends = 42]) {}
+void test({int extends}) {}
+void test({int extends: 42}) {}
+void test({int extends = 42}) {}
+
+void test(int extension) {}
+void test([int extension]) {}
+void test([int extension = 42]) {}
+void test({int extension}) {}
+void test({int extension: 42}) {}
+void test({int extension = 42}) {}
+
+void test(int external) {}
+void test([int external]) {}
+void test([int external = 42]) {}
+void test({int external}) {}
+void test({int external: 42}) {}
+void test({int external = 42}) {}
+
+void test(int factory) {}
+void test([int factory]) {}
+void test([int factory = 42]) {}
+void test({int factory}) {}
+void test({int factory: 42}) {}
+void test({int factory = 42}) {}
+
+void test(int false) {}
+void test([int false]) {}
+void test([int false = 42]) {}
+void test({int false}) {}
+void test({int false: 42}) {}
+void test({int false = 42}) {}
+
+void test(int final) {}
+void test([int final]) {}
+void test([int final = 42]) {}
+void test({int final}) {}
+void test({int final: 42}) {}
+void test({int final = 42}) {}
+
+void test(int finally) {}
+void test([int finally]) {}
+void test([int finally = 42]) {}
+void test({int finally}) {}
+void test({int finally: 42}) {}
+void test({int finally = 42}) {}
+
+void test(int for) {}
+void test([int for]) {}
+void test([int for = 42]) {}
+void test({int for}) {}
+void test({int for: 42}) {}
+void test({int for = 42}) {}
+
+void test(int Function) {}
+void test([int Function]) {}
+void test([int Function = 42]) {}
+void test({int Function}) {}
+void test({int Function: 42}) {}
+void test({int Function = 42}) {}
+
+void test(int get) {}
+void test([int get]) {}
+void test([int get = 42]) {}
+void test({int get}) {}
+void test({int get: 42}) {}
+void test({int get = 42}) {}
+
+void test(int hide) {}
+void test([int hide]) {}
+void test([int hide = 42]) {}
+void test({int hide}) {}
+void test({int hide: 42}) {}
+void test({int hide = 42}) {}
+
+void test(int if) {}
+void test([int if]) {}
+void test([int if = 42]) {}
+void test({int if}) {}
+void test({int if: 42}) {}
+void test({int if = 42}) {}
+
+void test(int implements) {}
+void test([int implements]) {}
+void test([int implements = 42]) {}
+void test({int implements}) {}
+void test({int implements: 42}) {}
+void test({int implements = 42}) {}
+
+void test(int import) {}
+void test([int import]) {}
+void test([int import = 42]) {}
+void test({int import}) {}
+void test({int import: 42}) {}
+void test({int import = 42}) {}
+
+void test(int in) {}
+void test([int in]) {}
+void test([int in = 42]) {}
+void test({int in}) {}
+void test({int in: 42}) {}
+void test({int in = 42}) {}
+
+void test(int inout) {}
+void test([int inout]) {}
+void test([int inout = 42]) {}
+void test({int inout}) {}
+void test({int inout: 42}) {}
+void test({int inout = 42}) {}
+
+void test(int interface) {}
+void test([int interface]) {}
+void test([int interface = 42]) {}
+void test({int interface}) {}
+void test({int interface: 42}) {}
+void test({int interface = 42}) {}
+
+void test(int is) {}
+void test([int is]) {}
+void test([int is = 42]) {}
+void test({int is}) {}
+void test({int is: 42}) {}
+void test({int is = 42}) {}
+
+void test(int late) {}
+void test([int late]) {}
+void test([int late = 42]) {}
+void test({int late}) {}
+void test({int late: 42}) {}
+void test({int late = 42}) {}
+
+void test(int library) {}
+void test([int library]) {}
+void test([int library = 42]) {}
+void test({int library}) {}
+void test({int library: 42}) {}
+void test({int library = 42}) {}
+
+void test(int mixin) {}
+void test([int mixin]) {}
+void test([int mixin = 42]) {}
+void test({int mixin}) {}
+void test({int mixin: 42}) {}
+void test({int mixin = 42}) {}
+
+void test(int native) {}
+void test([int native]) {}
+void test([int native = 42]) {}
+void test({int native}) {}
+void test({int native: 42}) {}
+void test({int native = 42}) {}
+
+void test(int new) {}
+void test([int new]) {}
+void test([int new = 42]) {}
+void test({int new}) {}
+void test({int new: 42}) {}
+void test({int new = 42}) {}
+
+void test(int null) {}
+void test([int null]) {}
+void test([int null = 42]) {}
+void test({int null}) {}
+void test({int null: 42}) {}
+void test({int null = 42}) {}
+
+void test(int of) {}
+void test([int of]) {}
+void test([int of = 42]) {}
+void test({int of}) {}
+void test({int of: 42}) {}
+void test({int of = 42}) {}
+
+void test(int on) {}
+void test([int on]) {}
+void test([int on = 42]) {}
+void test({int on}) {}
+void test({int on: 42}) {}
+void test({int on = 42}) {}
+
+void test(int operator) {}
+void test([int operator]) {}
+void test([int operator = 42]) {}
+void test({int operator}) {}
+void test({int operator: 42}) {}
+void test({int operator = 42}) {}
+
+void test(int out) {}
+void test([int out]) {}
+void test([int out = 42]) {}
+void test({int out}) {}
+void test({int out: 42}) {}
+void test({int out = 42}) {}
+
+void test(int part) {}
+void test([int part]) {}
+void test([int part = 42]) {}
+void test({int part}) {}
+void test({int part: 42}) {}
+void test({int part = 42}) {}
+
+void test(int patch) {}
+void test([int patch]) {}
+void test([int patch = 42]) {}
+void test({int patch}) {}
+void test({int patch: 42}) {}
+void test({int patch = 42}) {}
+
+void test(int required) {}
+void test([int required]) {}
+void test([int required = 42]) {}
+void test({int required}) {}
+void test({int required: 42}) {}
+void test({int required = 42}) {}
+
+void test(int rethrow) {}
+void test([int rethrow]) {}
+void test([int rethrow = 42]) {}
+void test({int rethrow}) {}
+void test({int rethrow: 42}) {}
+void test({int rethrow = 42}) {}
+
+void test(int return) {}
+void test([int return]) {}
+void test([int return = 42]) {}
+void test({int return}) {}
+void test({int return: 42}) {}
+void test({int return = 42}) {}
+
+void test(int set) {}
+void test([int set]) {}
+void test([int set = 42]) {}
+void test({int set}) {}
+void test({int set: 42}) {}
+void test({int set = 42}) {}
+
+void test(int show) {}
+void test([int show]) {}
+void test([int show = 42]) {}
+void test({int show}) {}
+void test({int show: 42}) {}
+void test({int show = 42}) {}
+
+void test(int source) {}
+void test([int source]) {}
+void test([int source = 42]) {}
+void test({int source}) {}
+void test({int source: 42}) {}
+void test({int source = 42}) {}
+
+void test(int static) {}
+void test([int static]) {}
+void test([int static = 42]) {}
+void test({int static}) {}
+void test({int static: 42}) {}
+void test({int static = 42}) {}
+
+void test(int super) {}
+void test([int super]) {}
+void test([int super = 42]) {}
+void test({int super}) {}
+void test({int super: 42}) {}
+void test({int super = 42}) {}
+
+void test(int switch) {}
+void test([int switch]) {}
+void test([int switch = 42]) {}
+void test({int switch}) {}
+void test({int switch: 42}) {}
+void test({int switch = 42}) {}
+
+void test(int sync) {}
+void test([int sync]) {}
+void test([int sync = 42]) {}
+void test({int sync}) {}
+void test({int sync: 42}) {}
+void test({int sync = 42}) {}
+
+void test(int this) {}
+void test([int this]) {}
+void test([int this = 42]) {}
+void test({int this}) {}
+void test({int this: 42}) {}
+void test({int this = 42}) {}
+
+void test(int throw) {}
+void test([int throw]) {}
+void test([int throw = 42]) {}
+void test({int throw}) {}
+void test({int throw: 42}) {}
+void test({int throw = 42}) {}
+
+void test(int true) {}
+void test([int true]) {}
+void test([int true = 42]) {}
+void test({int true}) {}
+void test({int true: 42}) {}
+void test({int true = 42}) {}
+
+void test(int try) {}
+void test([int try]) {}
+void test([int try = 42]) {}
+void test({int try}) {}
+void test({int try: 42}) {}
+void test({int try = 42}) {}
+
+void test(int typedef) {}
+void test([int typedef]) {}
+void test([int typedef = 42]) {}
+void test({int typedef}) {}
+void test({int typedef: 42}) {}
+void test({int typedef = 42}) {}
+
+void test(int var) {}
+void test([int var]) {}
+void test([int var = 42]) {}
+void test({int var}) {}
+void test({int var: 42}) {}
+void test({int var = 42}) {}
+
+void test(int void) {}
+void test([int void]) {}
+void test([int void = 42]) {}
+void test({int void}) {}
+void test({int void: 42}) {}
+void test({int void = 42}) {}
+
+void test(int while) {}
+void test([int while]) {}
+void test([int while = 42]) {}
+void test({int while}) {}
+void test({int while: 42}) {}
+void test({int while = 42}) {}
+
+void test(int with) {}
+void test([int with]) {}
+void test([int with = 42]) {}
+void test({int with}) {}
+void test({int with: 42}) {}
+void test({int with = 42}) {}
+
+void test(int yield) {}
+void test([int yield]) {}
+void test([int yield = 42]) {}
+void test({int yield}) {}
+void test({int yield: 42}) {}
+void test({int yield = 42}) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] abstract[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstract[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] as[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] as[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] assert[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assert[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] async[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] async[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] await[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] await[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] break[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] break[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] case[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] case[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] catch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] class[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] class[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] const[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] const[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] continue[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continue[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] covariant[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariant[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] default[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] default[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] deferred[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferred[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] do[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] do[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] dynamic[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamic[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] else[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] else[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] enum[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enum[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] export[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] export[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extends[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extends[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extension[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extension[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] external[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] external[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] factory[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factory[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] false[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] false[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] final[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] final[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finally[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finally[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] for[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] for[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] Function[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] Function[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] get[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] get[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] hide[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hide[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] if[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] if[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] implements[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implements[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] import[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] import[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] in[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] in[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inout[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inout[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] interface[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interface[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] is[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] is[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] late[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] late[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] library[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] library[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] mixin[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixin[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] native[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] native[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] new[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] new[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] null[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] null[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] of[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] of[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] on[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] operator[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operator[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] out[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] out[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] part[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] part[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] patch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] required[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] required[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] rethrow[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrow[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] return[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] return[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] set[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] set[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] show[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] show[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] source[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] source[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] static[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] static[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] super[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] super[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] switch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] sync[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sync[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] this[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] this[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] throw[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throw[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] true[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] true[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] try[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] try[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] typedef[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedef[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] var[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] var[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] void[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] void[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] while[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] while[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] with[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] with[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] yield[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yield[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.scanner.expect
new file mode 100644
index 0000000..41d27c9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.scanner.expect
@@ -0,0 +1,967 @@
+void test(int abstract) {}
+void test([int abstract]) {}
+void test([int abstract = 42]) {}
+void test({int abstract}) {}
+void test({int abstract: 42}) {}
+void test({int abstract = 42}) {}
+
+void test(int as) {}
+void test([int as]) {}
+void test([int as = 42]) {}
+void test({int as}) {}
+void test({int as: 42}) {}
+void test({int as = 42}) {}
+
+void test(int assert) {}
+void test([int assert]) {}
+void test([int assert = 42]) {}
+void test({int assert}) {}
+void test({int assert: 42}) {}
+void test({int assert = 42}) {}
+
+void test(int async) {}
+void test([int async]) {}
+void test([int async = 42]) {}
+void test({int async}) {}
+void test({int async: 42}) {}
+void test({int async = 42}) {}
+
+void test(int await) {}
+void test([int await]) {}
+void test([int await = 42]) {}
+void test({int await}) {}
+void test({int await: 42}) {}
+void test({int await = 42}) {}
+
+void test(int break) {}
+void test([int break]) {}
+void test([int break = 42]) {}
+void test({int break}) {}
+void test({int break: 42}) {}
+void test({int break = 42}) {}
+
+void test(int case) {}
+void test([int case]) {}
+void test([int case = 42]) {}
+void test({int case}) {}
+void test({int case: 42}) {}
+void test({int case = 42}) {}
+
+void test(int catch) {}
+void test([int catch]) {}
+void test([int catch = 42]) {}
+void test({int catch}) {}
+void test({int catch: 42}) {}
+void test({int catch = 42}) {}
+
+void test(int class) {}
+void test([int class]) {}
+void test([int class = 42]) {}
+void test({int class}) {}
+void test({int class: 42}) {}
+void test({int class = 42}) {}
+
+void test(int const) {}
+void test([int const]) {}
+void test([int const = 42]) {}
+void test({int const}) {}
+void test({int const: 42}) {}
+void test({int const = 42}) {}
+
+void test(int continue) {}
+void test([int continue]) {}
+void test([int continue = 42]) {}
+void test({int continue}) {}
+void test({int continue: 42}) {}
+void test({int continue = 42}) {}
+
+void test(int covariant) {}
+void test([int covariant]) {}
+void test([int covariant = 42]) {}
+void test({int covariant}) {}
+void test({int covariant: 42}) {}
+void test({int covariant = 42}) {}
+
+void test(int default) {}
+void test([int default]) {}
+void test([int default = 42]) {}
+void test({int default}) {}
+void test({int default: 42}) {}
+void test({int default = 42}) {}
+
+void test(int deferred) {}
+void test([int deferred]) {}
+void test([int deferred = 42]) {}
+void test({int deferred}) {}
+void test({int deferred: 42}) {}
+void test({int deferred = 42}) {}
+
+void test(int do) {}
+void test([int do]) {}
+void test([int do = 42]) {}
+void test({int do}) {}
+void test({int do: 42}) {}
+void test({int do = 42}) {}
+
+void test(int dynamic) {}
+void test([int dynamic]) {}
+void test([int dynamic = 42]) {}
+void test({int dynamic}) {}
+void test({int dynamic: 42}) {}
+void test({int dynamic = 42}) {}
+
+void test(int else) {}
+void test([int else]) {}
+void test([int else = 42]) {}
+void test({int else}) {}
+void test({int else: 42}) {}
+void test({int else = 42}) {}
+
+void test(int enum) {}
+void test([int enum]) {}
+void test([int enum = 42]) {}
+void test({int enum}) {}
+void test({int enum: 42}) {}
+void test({int enum = 42}) {}
+
+void test(int export) {}
+void test([int export]) {}
+void test([int export = 42]) {}
+void test({int export}) {}
+void test({int export: 42}) {}
+void test({int export = 42}) {}
+
+void test(int extends) {}
+void test([int extends]) {}
+void test([int extends = 42]) {}
+void test({int extends}) {}
+void test({int extends: 42}) {}
+void test({int extends = 42}) {}
+
+void test(int extension) {}
+void test([int extension]) {}
+void test([int extension = 42]) {}
+void test({int extension}) {}
+void test({int extension: 42}) {}
+void test({int extension = 42}) {}
+
+void test(int external) {}
+void test([int external]) {}
+void test([int external = 42]) {}
+void test({int external}) {}
+void test({int external: 42}) {}
+void test({int external = 42}) {}
+
+void test(int factory) {}
+void test([int factory]) {}
+void test([int factory = 42]) {}
+void test({int factory}) {}
+void test({int factory: 42}) {}
+void test({int factory = 42}) {}
+
+void test(int false) {}
+void test([int false]) {}
+void test([int false = 42]) {}
+void test({int false}) {}
+void test({int false: 42}) {}
+void test({int false = 42}) {}
+
+void test(int final) {}
+void test([int final]) {}
+void test([int final = 42]) {}
+void test({int final}) {}
+void test({int final: 42}) {}
+void test({int final = 42}) {}
+
+void test(int finally) {}
+void test([int finally]) {}
+void test([int finally = 42]) {}
+void test({int finally}) {}
+void test({int finally: 42}) {}
+void test({int finally = 42}) {}
+
+void test(int for) {}
+void test([int for]) {}
+void test([int for = 42]) {}
+void test({int for}) {}
+void test({int for: 42}) {}
+void test({int for = 42}) {}
+
+void test(int Function) {}
+void test([int Function]) {}
+void test([int Function = 42]) {}
+void test({int Function}) {}
+void test({int Function: 42}) {}
+void test({int Function = 42}) {}
+
+void test(int get) {}
+void test([int get]) {}
+void test([int get = 42]) {}
+void test({int get}) {}
+void test({int get: 42}) {}
+void test({int get = 42}) {}
+
+void test(int hide) {}
+void test([int hide]) {}
+void test([int hide = 42]) {}
+void test({int hide}) {}
+void test({int hide: 42}) {}
+void test({int hide = 42}) {}
+
+void test(int if) {}
+void test([int if]) {}
+void test([int if = 42]) {}
+void test({int if}) {}
+void test({int if: 42}) {}
+void test({int if = 42}) {}
+
+void test(int implements) {}
+void test([int implements]) {}
+void test([int implements = 42]) {}
+void test({int implements}) {}
+void test({int implements: 42}) {}
+void test({int implements = 42}) {}
+
+void test(int import) {}
+void test([int import]) {}
+void test([int import = 42]) {}
+void test({int import}) {}
+void test({int import: 42}) {}
+void test({int import = 42}) {}
+
+void test(int in) {}
+void test([int in]) {}
+void test([int in = 42]) {}
+void test({int in}) {}
+void test({int in: 42}) {}
+void test({int in = 42}) {}
+
+void test(int inout) {}
+void test([int inout]) {}
+void test([int inout = 42]) {}
+void test({int inout}) {}
+void test({int inout: 42}) {}
+void test({int inout = 42}) {}
+
+void test(int interface) {}
+void test([int interface]) {}
+void test([int interface = 42]) {}
+void test({int interface}) {}
+void test({int interface: 42}) {}
+void test({int interface = 42}) {}
+
+void test(int is) {}
+void test([int is]) {}
+void test([int is = 42]) {}
+void test({int is}) {}
+void test({int is: 42}) {}
+void test({int is = 42}) {}
+
+void test(int late) {}
+void test([int late]) {}
+void test([int late = 42]) {}
+void test({int late}) {}
+void test({int late: 42}) {}
+void test({int late = 42}) {}
+
+void test(int library) {}
+void test([int library]) {}
+void test([int library = 42]) {}
+void test({int library}) {}
+void test({int library: 42}) {}
+void test({int library = 42}) {}
+
+void test(int mixin) {}
+void test([int mixin]) {}
+void test([int mixin = 42]) {}
+void test({int mixin}) {}
+void test({int mixin: 42}) {}
+void test({int mixin = 42}) {}
+
+void test(int native) {}
+void test([int native]) {}
+void test([int native = 42]) {}
+void test({int native}) {}
+void test({int native: 42}) {}
+void test({int native = 42}) {}
+
+void test(int new) {}
+void test([int new]) {}
+void test([int new = 42]) {}
+void test({int new}) {}
+void test({int new: 42}) {}
+void test({int new = 42}) {}
+
+void test(int null) {}
+void test([int null]) {}
+void test([int null = 42]) {}
+void test({int null}) {}
+void test({int null: 42}) {}
+void test({int null = 42}) {}
+
+void test(int of) {}
+void test([int of]) {}
+void test([int of = 42]) {}
+void test({int of}) {}
+void test({int of: 42}) {}
+void test({int of = 42}) {}
+
+void test(int on) {}
+void test([int on]) {}
+void test([int on = 42]) {}
+void test({int on}) {}
+void test({int on: 42}) {}
+void test({int on = 42}) {}
+
+void test(int operator) {}
+void test([int operator]) {}
+void test([int operator = 42]) {}
+void test({int operator}) {}
+void test({int operator: 42}) {}
+void test({int operator = 42}) {}
+
+void test(int out) {}
+void test([int out]) {}
+void test([int out = 42]) {}
+void test({int out}) {}
+void test({int out: 42}) {}
+void test({int out = 42}) {}
+
+void test(int part) {}
+void test([int part]) {}
+void test([int part = 42]) {}
+void test({int part}) {}
+void test({int part: 42}) {}
+void test({int part = 42}) {}
+
+void test(int patch) {}
+void test([int patch]) {}
+void test([int patch = 42]) {}
+void test({int patch}) {}
+void test({int patch: 42}) {}
+void test({int patch = 42}) {}
+
+void test(int required) {}
+void test([int required]) {}
+void test([int required = 42]) {}
+void test({int required}) {}
+void test({int required: 42}) {}
+void test({int required = 42}) {}
+
+void test(int rethrow) {}
+void test([int rethrow]) {}
+void test([int rethrow = 42]) {}
+void test({int rethrow}) {}
+void test({int rethrow: 42}) {}
+void test({int rethrow = 42}) {}
+
+void test(int return) {}
+void test([int return]) {}
+void test([int return = 42]) {}
+void test({int return}) {}
+void test({int return: 42}) {}
+void test({int return = 42}) {}
+
+void test(int set) {}
+void test([int set]) {}
+void test([int set = 42]) {}
+void test({int set}) {}
+void test({int set: 42}) {}
+void test({int set = 42}) {}
+
+void test(int show) {}
+void test([int show]) {}
+void test([int show = 42]) {}
+void test({int show}) {}
+void test({int show: 42}) {}
+void test({int show = 42}) {}
+
+void test(int source) {}
+void test([int source]) {}
+void test([int source = 42]) {}
+void test({int source}) {}
+void test({int source: 42}) {}
+void test({int source = 42}) {}
+
+void test(int static) {}
+void test([int static]) {}
+void test([int static = 42]) {}
+void test({int static}) {}
+void test({int static: 42}) {}
+void test({int static = 42}) {}
+
+void test(int super) {}
+void test([int super]) {}
+void test([int super = 42]) {}
+void test({int super}) {}
+void test({int super: 42}) {}
+void test({int super = 42}) {}
+
+void test(int switch) {}
+void test([int switch]) {}
+void test([int switch = 42]) {}
+void test({int switch}) {}
+void test({int switch: 42}) {}
+void test({int switch = 42}) {}
+
+void test(int sync) {}
+void test([int sync]) {}
+void test([int sync = 42]) {}
+void test({int sync}) {}
+void test({int sync: 42}) {}
+void test({int sync = 42}) {}
+
+void test(int this) {}
+void test([int this]) {}
+void test([int this = 42]) {}
+void test({int this}) {}
+void test({int this: 42}) {}
+void test({int this = 42}) {}
+
+void test(int throw) {}
+void test([int throw]) {}
+void test([int throw = 42]) {}
+void test({int throw}) {}
+void test({int throw: 42}) {}
+void test({int throw = 42}) {}
+
+void test(int true) {}
+void test([int true]) {}
+void test([int true = 42]) {}
+void test({int true}) {}
+void test({int true: 42}) {}
+void test({int true = 42}) {}
+
+void test(int try) {}
+void test([int try]) {}
+void test([int try = 42]) {}
+void test({int try}) {}
+void test({int try: 42}) {}
+void test({int try = 42}) {}
+
+void test(int typedef) {}
+void test([int typedef]) {}
+void test([int typedef = 42]) {}
+void test({int typedef}) {}
+void test({int typedef: 42}) {}
+void test({int typedef = 42}) {}
+
+void test(int var) {}
+void test([int var]) {}
+void test([int var = 42]) {}
+void test({int var}) {}
+void test({int var: 42}) {}
+void test({int var = 42}) {}
+
+void test(int void) {}
+void test([int void]) {}
+void test([int void = 42]) {}
+void test({int void}) {}
+void test({int void: 42}) {}
+void test({int void = 42}) {}
+
+void test(int while) {}
+void test([int while]) {}
+void test([int while = 42]) {}
+void test({int while}) {}
+void test({int while: 42}) {}
+void test({int while = 42}) {}
+
+void test(int with) {}
+void test([int with]) {}
+void test([int with = 42]) {}
+void test({int with}) {}
+void test({int with: 42}) {}
+void test({int with = 42}) {}
+
+void test(int yield) {}
+void test([int yield]) {}
+void test([int yield = 42]) {}
+void test({int yield}) {}
+void test({int yield: 42}) {}
+void test({int yield = 42}) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] abstract[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstract[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] as[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] as[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] assert[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assert[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] async[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] async[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] await[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] await[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] break[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] break[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] case[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] case[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] catch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] class[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] class[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] const[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] const[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] continue[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continue[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] covariant[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariant[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] default[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] default[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] deferred[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferred[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] do[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] do[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] dynamic[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamic[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] else[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] else[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] enum[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enum[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] export[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] export[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extends[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extends[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extension[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extension[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] external[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] external[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] factory[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factory[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] false[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] false[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] final[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] final[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finally[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finally[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] for[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] for[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] Function[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] Function[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] get[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] get[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] hide[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hide[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] if[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] if[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] implements[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implements[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] import[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] import[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] in[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] in[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inout[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inout[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] interface[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interface[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] is[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] is[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] late[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] late[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] library[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] library[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] mixin[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixin[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] native[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] native[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] new[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] new[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] null[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] null[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] of[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] of[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] on[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] operator[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operator[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] out[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] out[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] part[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] part[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] patch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] required[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] required[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] rethrow[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrow[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] return[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] return[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] set[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] set[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] show[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] show[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] source[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] source[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] static[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] static[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] super[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] super[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] switch[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switch[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] sync[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sync[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] this[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] this[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] throw[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throw[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] true[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] true[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] try[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] try[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] typedef[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedef[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] var[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] var[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] void[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] void[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] while[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] while[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] with[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] with[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] yield[KeywordToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yield[KeywordToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.equivalence_info
new file mode 100644
index 0000000..8ecf915
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - keyword_named_formal_parameter.dart
+  - keyword_named_formal_parameter_prime.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart
new file mode 100644
index 0000000..b179738
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart
@@ -0,0 +1,482 @@
+void test(int abstractX) {}
+void test([int abstractX]) {}
+void test([int abstractX = 42]) {}
+void test({int abstractX}) {}
+void test({int abstractX: 42}) {}
+void test({int abstractX = 42}) {}
+
+void test(int asX) {}
+void test([int asX]) {}
+void test([int asX = 42]) {}
+void test({int asX}) {}
+void test({int asX: 42}) {}
+void test({int asX = 42}) {}
+
+void test(int assertX) {}
+void test([int assertX]) {}
+void test([int assertX = 42]) {}
+void test({int assertX}) {}
+void test({int assertX: 42}) {}
+void test({int assertX = 42}) {}
+
+void test(int asyncX) {}
+void test([int asyncX]) {}
+void test([int asyncX = 42]) {}
+void test({int asyncX}) {}
+void test({int asyncX: 42}) {}
+void test({int asyncX = 42}) {}
+
+void test(int awaitX) {}
+void test([int awaitX]) {}
+void test([int awaitX = 42]) {}
+void test({int awaitX}) {}
+void test({int awaitX: 42}) {}
+void test({int awaitX = 42}) {}
+
+void test(int breakX) {}
+void test([int breakX]) {}
+void test([int breakX = 42]) {}
+void test({int breakX}) {}
+void test({int breakX: 42}) {}
+void test({int breakX = 42}) {}
+
+void test(int caseX) {}
+void test([int caseX]) {}
+void test([int caseX = 42]) {}
+void test({int caseX}) {}
+void test({int caseX: 42}) {}
+void test({int caseX = 42}) {}
+
+void test(int catchX) {}
+void test([int catchX]) {}
+void test([int catchX = 42]) {}
+void test({int catchX}) {}
+void test({int catchX: 42}) {}
+void test({int catchX = 42}) {}
+
+void test(int classX) {}
+void test([int classX]) {}
+void test([int classX = 42]) {}
+void test({int classX}) {}
+void test({int classX: 42}) {}
+void test({int classX = 42}) {}
+
+void test(int constX) {}
+void test([int constX]) {}
+void test([int constX = 42]) {}
+void test({int constX}) {}
+void test({int constX: 42}) {}
+void test({int constX = 42}) {}
+
+void test(int continueX) {}
+void test([int continueX]) {}
+void test([int continueX = 42]) {}
+void test({int continueX}) {}
+void test({int continueX: 42}) {}
+void test({int continueX = 42}) {}
+
+void test(int covariantX) {}
+void test([int covariantX]) {}
+void test([int covariantX = 42]) {}
+void test({int covariantX}) {}
+void test({int covariantX: 42}) {}
+void test({int covariantX = 42}) {}
+
+void test(int defaultX) {}
+void test([int defaultX]) {}
+void test([int defaultX = 42]) {}
+void test({int defaultX}) {}
+void test({int defaultX: 42}) {}
+void test({int defaultX = 42}) {}
+
+void test(int deferredX) {}
+void test([int deferredX]) {}
+void test([int deferredX = 42]) {}
+void test({int deferredX}) {}
+void test({int deferredX: 42}) {}
+void test({int deferredX = 42}) {}
+
+void test(int doX) {}
+void test([int doX]) {}
+void test([int doX = 42]) {}
+void test({int doX}) {}
+void test({int doX: 42}) {}
+void test({int doX = 42}) {}
+
+void test(int dynamicX) {}
+void test([int dynamicX]) {}
+void test([int dynamicX = 42]) {}
+void test({int dynamicX}) {}
+void test({int dynamicX: 42}) {}
+void test({int dynamicX = 42}) {}
+
+void test(int elseX) {}
+void test([int elseX]) {}
+void test([int elseX = 42]) {}
+void test({int elseX}) {}
+void test({int elseX: 42}) {}
+void test({int elseX = 42}) {}
+
+void test(int enumX) {}
+void test([int enumX]) {}
+void test([int enumX = 42]) {}
+void test({int enumX}) {}
+void test({int enumX: 42}) {}
+void test({int enumX = 42}) {}
+
+void test(int exportX) {}
+void test([int exportX]) {}
+void test([int exportX = 42]) {}
+void test({int exportX}) {}
+void test({int exportX: 42}) {}
+void test({int exportX = 42}) {}
+
+void test(int extendsX) {}
+void test([int extendsX]) {}
+void test([int extendsX = 42]) {}
+void test({int extendsX}) {}
+void test({int extendsX: 42}) {}
+void test({int extendsX = 42}) {}
+
+void test(int extensionX) {}
+void test([int extensionX]) {}
+void test([int extensionX = 42]) {}
+void test({int extensionX}) {}
+void test({int extensionX: 42}) {}
+void test({int extensionX = 42}) {}
+
+void test(int externalX) {}
+void test([int externalX]) {}
+void test([int externalX = 42]) {}
+void test({int externalX}) {}
+void test({int externalX: 42}) {}
+void test({int externalX = 42}) {}
+
+void test(int factoryX) {}
+void test([int factoryX]) {}
+void test([int factoryX = 42]) {}
+void test({int factoryX}) {}
+void test({int factoryX: 42}) {}
+void test({int factoryX = 42}) {}
+
+void test(int falseX) {}
+void test([int falseX]) {}
+void test([int falseX = 42]) {}
+void test({int falseX}) {}
+void test({int falseX: 42}) {}
+void test({int falseX = 42}) {}
+
+void test(int finalX) {}
+void test([int finalX]) {}
+void test([int finalX = 42]) {}
+void test({int finalX}) {}
+void test({int finalX: 42}) {}
+void test({int finalX = 42}) {}
+
+void test(int finallyX) {}
+void test([int finallyX]) {}
+void test([int finallyX = 42]) {}
+void test({int finallyX}) {}
+void test({int finallyX: 42}) {}
+void test({int finallyX = 42}) {}
+
+void test(int forX) {}
+void test([int forX]) {}
+void test([int forX = 42]) {}
+void test({int forX}) {}
+void test({int forX: 42}) {}
+void test({int forX = 42}) {}
+
+void test(int FunctionX) {}
+void test([int FunctionX]) {}
+void test([int FunctionX = 42]) {}
+void test({int FunctionX}) {}
+void test({int FunctionX: 42}) {}
+void test({int FunctionX = 42}) {}
+
+void test(int getX) {}
+void test([int getX]) {}
+void test([int getX = 42]) {}
+void test({int getX}) {}
+void test({int getX: 42}) {}
+void test({int getX = 42}) {}
+
+void test(int hideX) {}
+void test([int hideX]) {}
+void test([int hideX = 42]) {}
+void test({int hideX}) {}
+void test({int hideX: 42}) {}
+void test({int hideX = 42}) {}
+
+void test(int ifX) {}
+void test([int ifX]) {}
+void test([int ifX = 42]) {}
+void test({int ifX}) {}
+void test({int ifX: 42}) {}
+void test({int ifX = 42}) {}
+
+void test(int implementsX) {}
+void test([int implementsX]) {}
+void test([int implementsX = 42]) {}
+void test({int implementsX}) {}
+void test({int implementsX: 42}) {}
+void test({int implementsX = 42}) {}
+
+void test(int importX) {}
+void test([int importX]) {}
+void test([int importX = 42]) {}
+void test({int importX}) {}
+void test({int importX: 42}) {}
+void test({int importX = 42}) {}
+
+void test(int inX) {}
+void test([int inX]) {}
+void test([int inX = 42]) {}
+void test({int inX}) {}
+void test({int inX: 42}) {}
+void test({int inX = 42}) {}
+
+void test(int inoutX) {}
+void test([int inoutX]) {}
+void test([int inoutX = 42]) {}
+void test({int inoutX}) {}
+void test({int inoutX: 42}) {}
+void test({int inoutX = 42}) {}
+
+void test(int interfaceX) {}
+void test([int interfaceX]) {}
+void test([int interfaceX = 42]) {}
+void test({int interfaceX}) {}
+void test({int interfaceX: 42}) {}
+void test({int interfaceX = 42}) {}
+
+void test(int isX) {}
+void test([int isX]) {}
+void test([int isX = 42]) {}
+void test({int isX}) {}
+void test({int isX: 42}) {}
+void test({int isX = 42}) {}
+
+void test(int lateX) {}
+void test([int lateX]) {}
+void test([int lateX = 42]) {}
+void test({int lateX}) {}
+void test({int lateX: 42}) {}
+void test({int lateX = 42}) {}
+
+void test(int libraryX) {}
+void test([int libraryX]) {}
+void test([int libraryX = 42]) {}
+void test({int libraryX}) {}
+void test({int libraryX: 42}) {}
+void test({int libraryX = 42}) {}
+
+void test(int mixinX) {}
+void test([int mixinX]) {}
+void test([int mixinX = 42]) {}
+void test({int mixinX}) {}
+void test({int mixinX: 42}) {}
+void test({int mixinX = 42}) {}
+
+void test(int nativeX) {}
+void test([int nativeX]) {}
+void test([int nativeX = 42]) {}
+void test({int nativeX}) {}
+void test({int nativeX: 42}) {}
+void test({int nativeX = 42}) {}
+
+void test(int newX) {}
+void test([int newX]) {}
+void test([int newX = 42]) {}
+void test({int newX}) {}
+void test({int newX: 42}) {}
+void test({int newX = 42}) {}
+
+void test(int nullX) {}
+void test([int nullX]) {}
+void test([int nullX = 42]) {}
+void test({int nullX}) {}
+void test({int nullX: 42}) {}
+void test({int nullX = 42}) {}
+
+void test(int ofX) {}
+void test([int ofX]) {}
+void test([int ofX = 42]) {}
+void test({int ofX}) {}
+void test({int ofX: 42}) {}
+void test({int ofX = 42}) {}
+
+void test(int onX) {}
+void test([int onX]) {}
+void test([int onX = 42]) {}
+void test({int onX}) {}
+void test({int onX: 42}) {}
+void test({int onX = 42}) {}
+
+void test(int operatorX) {}
+void test([int operatorX]) {}
+void test([int operatorX = 42]) {}
+void test({int operatorX}) {}
+void test({int operatorX: 42}) {}
+void test({int operatorX = 42}) {}
+
+void test(int outX) {}
+void test([int outX]) {}
+void test([int outX = 42]) {}
+void test({int outX}) {}
+void test({int outX: 42}) {}
+void test({int outX = 42}) {}
+
+void test(int partX) {}
+void test([int partX]) {}
+void test([int partX = 42]) {}
+void test({int partX}) {}
+void test({int partX: 42}) {}
+void test({int partX = 42}) {}
+
+void test(int patchX) {}
+void test([int patchX]) {}
+void test([int patchX = 42]) {}
+void test({int patchX}) {}
+void test({int patchX: 42}) {}
+void test({int patchX = 42}) {}
+
+void test(int requiredX) {}
+void test([int requiredX]) {}
+void test([int requiredX = 42]) {}
+void test({int requiredX}) {}
+void test({int requiredX: 42}) {}
+void test({int requiredX = 42}) {}
+
+void test(int rethrowX) {}
+void test([int rethrowX]) {}
+void test([int rethrowX = 42]) {}
+void test({int rethrowX}) {}
+void test({int rethrowX: 42}) {}
+void test({int rethrowX = 42}) {}
+
+void test(int returnX) {}
+void test([int returnX]) {}
+void test([int returnX = 42]) {}
+void test({int returnX}) {}
+void test({int returnX: 42}) {}
+void test({int returnX = 42}) {}
+
+void test(int setX) {}
+void test([int setX]) {}
+void test([int setX = 42]) {}
+void test({int setX}) {}
+void test({int setX: 42}) {}
+void test({int setX = 42}) {}
+
+void test(int showX) {}
+void test([int showX]) {}
+void test([int showX = 42]) {}
+void test({int showX}) {}
+void test({int showX: 42}) {}
+void test({int showX = 42}) {}
+
+void test(int sourceX) {}
+void test([int sourceX]) {}
+void test([int sourceX = 42]) {}
+void test({int sourceX}) {}
+void test({int sourceX: 42}) {}
+void test({int sourceX = 42}) {}
+
+void test(int staticX) {}
+void test([int staticX]) {}
+void test([int staticX = 42]) {}
+void test({int staticX}) {}
+void test({int staticX: 42}) {}
+void test({int staticX = 42}) {}
+
+void test(int superX) {}
+void test([int superX]) {}
+void test([int superX = 42]) {}
+void test({int superX}) {}
+void test({int superX: 42}) {}
+void test({int superX = 42}) {}
+
+void test(int switchX) {}
+void test([int switchX]) {}
+void test([int switchX = 42]) {}
+void test({int switchX}) {}
+void test({int switchX: 42}) {}
+void test({int switchX = 42}) {}
+
+void test(int syncX) {}
+void test([int syncX]) {}
+void test([int syncX = 42]) {}
+void test({int syncX}) {}
+void test({int syncX: 42}) {}
+void test({int syncX = 42}) {}
+
+void test(int thisX) {}
+void test([int thisX]) {}
+void test([int thisX = 42]) {}
+void test({int thisX}) {}
+void test({int thisX: 42}) {}
+void test({int thisX = 42}) {}
+
+void test(int throwX) {}
+void test([int throwX]) {}
+void test([int throwX = 42]) {}
+void test({int throwX}) {}
+void test({int throwX: 42}) {}
+void test({int throwX = 42}) {}
+
+void test(int trueX) {}
+void test([int trueX]) {}
+void test([int trueX = 42]) {}
+void test({int trueX}) {}
+void test({int trueX: 42}) {}
+void test({int trueX = 42}) {}
+
+void test(int tryX) {}
+void test([int tryX]) {}
+void test([int tryX = 42]) {}
+void test({int tryX}) {}
+void test({int tryX: 42}) {}
+void test({int tryX = 42}) {}
+
+void test(int typedefX) {}
+void test([int typedefX]) {}
+void test([int typedefX = 42]) {}
+void test({int typedefX}) {}
+void test({int typedefX: 42}) {}
+void test({int typedefX = 42}) {}
+
+void test(int varX) {}
+void test([int varX]) {}
+void test([int varX = 42]) {}
+void test({int varX}) {}
+void test({int varX: 42}) {}
+void test({int varX = 42}) {}
+
+void test(int voidX) {}
+void test([int voidX]) {}
+void test([int voidX = 42]) {}
+void test({int voidX}) {}
+void test({int voidX: 42}) {}
+void test({int voidX = 42}) {}
+
+void test(int whileX) {}
+void test([int whileX]) {}
+void test([int whileX = 42]) {}
+void test({int whileX}) {}
+void test({int whileX: 42}) {}
+void test({int whileX = 42}) {}
+
+void test(int withX) {}
+void test([int withX]) {}
+void test([int withX = 42]) {}
+void test({int withX}) {}
+void test({int withX: 42}) {}
+void test({int withX = 42}) {}
+
+void test(int yieldX) {}
+void test([int yieldX]) {}
+void test([int yieldX = 42]) {}
+void test({int yieldX}) {}
+void test({int yieldX: 42}) {}
+void test({int yieldX = 42}) {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect
new file mode 100644
index 0000000..4f09074
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect
@@ -0,0 +1,10835 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(abstractX)
+          handleType(int, null)
+          handleIdentifier(abstractX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstractX)
+            handleType(int, null)
+            handleIdentifier(abstractX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstractX)
+            handleType(int, null)
+            handleIdentifier(abstractX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstractX)
+            handleType(int, null)
+            handleIdentifier(abstractX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstractX)
+            handleType(int, null)
+            handleIdentifier(abstractX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstractX)
+            handleType(int, null)
+            handleIdentifier(abstractX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(asX)
+          handleType(int, null)
+          handleIdentifier(asX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, asX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asX)
+            handleType(int, null)
+            handleIdentifier(asX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, asX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asX)
+            handleType(int, null)
+            handleIdentifier(asX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asX)
+            handleType(int, null)
+            handleIdentifier(asX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, asX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asX)
+            handleType(int, null)
+            handleIdentifier(asX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asX)
+            handleType(int, null)
+            handleIdentifier(asX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(assertX)
+          handleType(int, null)
+          handleIdentifier(assertX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, assertX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assertX)
+            handleType(int, null)
+            handleIdentifier(assertX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, assertX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assertX)
+            handleType(int, null)
+            handleIdentifier(assertX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assertX)
+            handleType(int, null)
+            handleIdentifier(assertX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, assertX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assertX)
+            handleType(int, null)
+            handleIdentifier(assertX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assertX)
+            handleType(int, null)
+            handleIdentifier(assertX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(asyncX)
+          handleType(int, null)
+          handleIdentifier(asyncX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asyncX)
+            handleType(int, null)
+            handleIdentifier(asyncX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asyncX)
+            handleType(int, null)
+            handleIdentifier(asyncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asyncX)
+            handleType(int, null)
+            handleIdentifier(asyncX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asyncX)
+            handleType(int, null)
+            handleIdentifier(asyncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(asyncX)
+            handleType(int, null)
+            handleIdentifier(asyncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(awaitX)
+          handleType(int, null)
+          handleIdentifier(awaitX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(awaitX)
+            handleType(int, null)
+            handleIdentifier(awaitX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(awaitX)
+            handleType(int, null)
+            handleIdentifier(awaitX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(awaitX)
+            handleType(int, null)
+            handleIdentifier(awaitX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(awaitX)
+            handleType(int, null)
+            handleIdentifier(awaitX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(awaitX)
+            handleType(int, null)
+            handleIdentifier(awaitX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(breakX)
+          handleType(int, null)
+          handleIdentifier(breakX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, breakX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(breakX)
+            handleType(int, null)
+            handleIdentifier(breakX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, breakX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(breakX)
+            handleType(int, null)
+            handleIdentifier(breakX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(breakX)
+            handleType(int, null)
+            handleIdentifier(breakX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, breakX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(breakX)
+            handleType(int, null)
+            handleIdentifier(breakX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(breakX)
+            handleType(int, null)
+            handleIdentifier(breakX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(caseX)
+          handleType(int, null)
+          handleIdentifier(caseX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, caseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(caseX)
+            handleType(int, null)
+            handleIdentifier(caseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, caseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(caseX)
+            handleType(int, null)
+            handleIdentifier(caseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(caseX)
+            handleType(int, null)
+            handleIdentifier(caseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, caseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(caseX)
+            handleType(int, null)
+            handleIdentifier(caseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(caseX)
+            handleType(int, null)
+            handleIdentifier(caseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(catchX)
+          handleType(int, null)
+          handleIdentifier(catchX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, catchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catchX)
+            handleType(int, null)
+            handleIdentifier(catchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, catchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catchX)
+            handleType(int, null)
+            handleIdentifier(catchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catchX)
+            handleType(int, null)
+            handleIdentifier(catchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, catchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catchX)
+            handleType(int, null)
+            handleIdentifier(catchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catchX)
+            handleType(int, null)
+            handleIdentifier(catchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(classX)
+          handleType(int, null)
+          handleIdentifier(classX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, classX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(classX)
+            handleType(int, null)
+            handleIdentifier(classX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, classX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(classX)
+            handleType(int, null)
+            handleIdentifier(classX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(classX)
+            handleType(int, null)
+            handleIdentifier(classX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, classX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(classX)
+            handleType(int, null)
+            handleIdentifier(classX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(classX)
+            handleType(int, null)
+            handleIdentifier(classX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(constX)
+          handleType(int, null)
+          handleIdentifier(constX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, constX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(constX)
+            handleType(int, null)
+            handleIdentifier(constX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, constX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(constX)
+            handleType(int, null)
+            handleIdentifier(constX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(constX)
+            handleType(int, null)
+            handleIdentifier(constX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, constX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(constX)
+            handleType(int, null)
+            handleIdentifier(constX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(constX)
+            handleType(int, null)
+            handleIdentifier(constX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(continueX)
+          handleType(int, null)
+          handleIdentifier(continueX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, continueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continueX)
+            handleType(int, null)
+            handleIdentifier(continueX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, continueX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continueX)
+            handleType(int, null)
+            handleIdentifier(continueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continueX)
+            handleType(int, null)
+            handleIdentifier(continueX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, continueX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continueX)
+            handleType(int, null)
+            handleIdentifier(continueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continueX)
+            handleType(int, null)
+            handleIdentifier(continueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(covariantX)
+          handleType(int, null)
+          handleIdentifier(covariantX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariantX)
+            handleType(int, null)
+            handleIdentifier(covariantX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariantX)
+            handleType(int, null)
+            handleIdentifier(covariantX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariantX)
+            handleType(int, null)
+            handleIdentifier(covariantX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariantX)
+            handleType(int, null)
+            handleIdentifier(covariantX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariantX)
+            handleType(int, null)
+            handleIdentifier(covariantX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(defaultX)
+          handleType(int, null)
+          handleIdentifier(defaultX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(defaultX)
+            handleType(int, null)
+            handleIdentifier(defaultX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(defaultX)
+            handleType(int, null)
+            handleIdentifier(defaultX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(defaultX)
+            handleType(int, null)
+            handleIdentifier(defaultX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(defaultX)
+            handleType(int, null)
+            handleIdentifier(defaultX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(defaultX)
+            handleType(int, null)
+            handleIdentifier(defaultX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(deferredX)
+          handleType(int, null)
+          handleIdentifier(deferredX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferredX)
+            handleType(int, null)
+            handleIdentifier(deferredX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferredX)
+            handleType(int, null)
+            handleIdentifier(deferredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferredX)
+            handleType(int, null)
+            handleIdentifier(deferredX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferredX)
+            handleType(int, null)
+            handleIdentifier(deferredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferredX)
+            handleType(int, null)
+            handleIdentifier(deferredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(doX)
+          handleType(int, null)
+          handleIdentifier(doX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, doX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(doX)
+            handleType(int, null)
+            handleIdentifier(doX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, doX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(doX)
+            handleType(int, null)
+            handleIdentifier(doX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(doX)
+            handleType(int, null)
+            handleIdentifier(doX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, doX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(doX)
+            handleType(int, null)
+            handleIdentifier(doX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(doX)
+            handleType(int, null)
+            handleIdentifier(doX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(dynamicX)
+          handleType(int, null)
+          handleIdentifier(dynamicX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamicX)
+            handleType(int, null)
+            handleIdentifier(dynamicX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamicX)
+            handleType(int, null)
+            handleIdentifier(dynamicX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamicX)
+            handleType(int, null)
+            handleIdentifier(dynamicX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamicX)
+            handleType(int, null)
+            handleIdentifier(dynamicX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamicX)
+            handleType(int, null)
+            handleIdentifier(dynamicX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(elseX)
+          handleType(int, null)
+          handleIdentifier(elseX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, elseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(elseX)
+            handleType(int, null)
+            handleIdentifier(elseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, elseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(elseX)
+            handleType(int, null)
+            handleIdentifier(elseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(elseX)
+            handleType(int, null)
+            handleIdentifier(elseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, elseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(elseX)
+            handleType(int, null)
+            handleIdentifier(elseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(elseX)
+            handleType(int, null)
+            handleIdentifier(elseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(enumX)
+          handleType(int, null)
+          handleIdentifier(enumX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, enumX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enumX)
+            handleType(int, null)
+            handleIdentifier(enumX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, enumX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enumX)
+            handleType(int, null)
+            handleIdentifier(enumX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enumX)
+            handleType(int, null)
+            handleIdentifier(enumX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, enumX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enumX)
+            handleType(int, null)
+            handleIdentifier(enumX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enumX)
+            handleType(int, null)
+            handleIdentifier(enumX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(exportX)
+          handleType(int, null)
+          handleIdentifier(exportX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, exportX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(exportX)
+            handleType(int, null)
+            handleIdentifier(exportX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, exportX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(exportX)
+            handleType(int, null)
+            handleIdentifier(exportX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(exportX)
+            handleType(int, null)
+            handleIdentifier(exportX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, exportX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(exportX)
+            handleType(int, null)
+            handleIdentifier(exportX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(exportX)
+            handleType(int, null)
+            handleIdentifier(exportX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(extendsX)
+          handleType(int, null)
+          handleIdentifier(extendsX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extendsX)
+            handleType(int, null)
+            handleIdentifier(extendsX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extendsX)
+            handleType(int, null)
+            handleIdentifier(extendsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extendsX)
+            handleType(int, null)
+            handleIdentifier(extendsX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extendsX)
+            handleType(int, null)
+            handleIdentifier(extendsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extendsX)
+            handleType(int, null)
+            handleIdentifier(extendsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(extensionX)
+          handleType(int, null)
+          handleIdentifier(extensionX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extensionX)
+            handleType(int, null)
+            handleIdentifier(extensionX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extensionX)
+            handleType(int, null)
+            handleIdentifier(extensionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extensionX)
+            handleType(int, null)
+            handleIdentifier(extensionX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extensionX)
+            handleType(int, null)
+            handleIdentifier(extensionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extensionX)
+            handleType(int, null)
+            handleIdentifier(extensionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(externalX)
+          handleType(int, null)
+          handleIdentifier(externalX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, externalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(externalX)
+            handleType(int, null)
+            handleIdentifier(externalX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, externalX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(externalX)
+            handleType(int, null)
+            handleIdentifier(externalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(externalX)
+            handleType(int, null)
+            handleIdentifier(externalX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, externalX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(externalX)
+            handleType(int, null)
+            handleIdentifier(externalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(externalX)
+            handleType(int, null)
+            handleIdentifier(externalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(factoryX)
+          handleType(int, null)
+          handleIdentifier(factoryX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factoryX)
+            handleType(int, null)
+            handleIdentifier(factoryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factoryX)
+            handleType(int, null)
+            handleIdentifier(factoryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factoryX)
+            handleType(int, null)
+            handleIdentifier(factoryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factoryX)
+            handleType(int, null)
+            handleIdentifier(factoryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factoryX)
+            handleType(int, null)
+            handleIdentifier(factoryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(falseX)
+          handleType(int, null)
+          handleIdentifier(falseX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, falseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(falseX)
+            handleType(int, null)
+            handleIdentifier(falseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, falseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(falseX)
+            handleType(int, null)
+            handleIdentifier(falseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(falseX)
+            handleType(int, null)
+            handleIdentifier(falseX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, falseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(falseX)
+            handleType(int, null)
+            handleIdentifier(falseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(falseX)
+            handleType(int, null)
+            handleIdentifier(falseX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(finalX)
+          handleType(int, null)
+          handleIdentifier(finalX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, finalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finalX)
+            handleType(int, null)
+            handleIdentifier(finalX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, finalX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finalX)
+            handleType(int, null)
+            handleIdentifier(finalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finalX)
+            handleType(int, null)
+            handleIdentifier(finalX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, finalX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finalX)
+            handleType(int, null)
+            handleIdentifier(finalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finalX)
+            handleType(int, null)
+            handleIdentifier(finalX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(finallyX)
+          handleType(int, null)
+          handleIdentifier(finallyX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finallyX)
+            handleType(int, null)
+            handleIdentifier(finallyX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finallyX)
+            handleType(int, null)
+            handleIdentifier(finallyX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finallyX)
+            handleType(int, null)
+            handleIdentifier(finallyX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finallyX)
+            handleType(int, null)
+            handleIdentifier(finallyX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finallyX)
+            handleType(int, null)
+            handleIdentifier(finallyX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(forX)
+          handleType(int, null)
+          handleIdentifier(forX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, forX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(forX)
+            handleType(int, null)
+            handleIdentifier(forX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, forX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(forX)
+            handleType(int, null)
+            handleIdentifier(forX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(forX)
+            handleType(int, null)
+            handleIdentifier(forX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, forX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(forX)
+            handleType(int, null)
+            handleIdentifier(forX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(forX)
+            handleType(int, null)
+            handleIdentifier(forX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(FunctionX)
+          handleType(int, null)
+          handleIdentifier(FunctionX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(FunctionX)
+            handleType(int, null)
+            handleIdentifier(FunctionX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(FunctionX)
+            handleType(int, null)
+            handleIdentifier(FunctionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(FunctionX)
+            handleType(int, null)
+            handleIdentifier(FunctionX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(FunctionX)
+            handleType(int, null)
+            handleIdentifier(FunctionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(FunctionX)
+            handleType(int, null)
+            handleIdentifier(FunctionX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(getX)
+          handleType(int, null)
+          handleIdentifier(getX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, getX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(getX)
+            handleType(int, null)
+            handleIdentifier(getX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, getX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(getX)
+            handleType(int, null)
+            handleIdentifier(getX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(getX)
+            handleType(int, null)
+            handleIdentifier(getX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, getX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(getX)
+            handleType(int, null)
+            handleIdentifier(getX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(getX)
+            handleType(int, null)
+            handleIdentifier(getX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(hideX)
+          handleType(int, null)
+          handleIdentifier(hideX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, hideX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hideX)
+            handleType(int, null)
+            handleIdentifier(hideX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, hideX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hideX)
+            handleType(int, null)
+            handleIdentifier(hideX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hideX)
+            handleType(int, null)
+            handleIdentifier(hideX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, hideX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hideX)
+            handleType(int, null)
+            handleIdentifier(hideX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hideX)
+            handleType(int, null)
+            handleIdentifier(hideX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(ifX)
+          handleType(int, null)
+          handleIdentifier(ifX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, ifX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ifX)
+            handleType(int, null)
+            handleIdentifier(ifX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, ifX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ifX)
+            handleType(int, null)
+            handleIdentifier(ifX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ifX)
+            handleType(int, null)
+            handleIdentifier(ifX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, ifX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ifX)
+            handleType(int, null)
+            handleIdentifier(ifX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ifX)
+            handleType(int, null)
+            handleIdentifier(ifX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(implementsX)
+          handleType(int, null)
+          handleIdentifier(implementsX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implementsX)
+            handleType(int, null)
+            handleIdentifier(implementsX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implementsX)
+            handleType(int, null)
+            handleIdentifier(implementsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implementsX)
+            handleType(int, null)
+            handleIdentifier(implementsX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implementsX)
+            handleType(int, null)
+            handleIdentifier(implementsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implementsX)
+            handleType(int, null)
+            handleIdentifier(implementsX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(importX)
+          handleType(int, null)
+          handleIdentifier(importX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, importX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(importX)
+            handleType(int, null)
+            handleIdentifier(importX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, importX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(importX)
+            handleType(int, null)
+            handleIdentifier(importX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(importX)
+            handleType(int, null)
+            handleIdentifier(importX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, importX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(importX)
+            handleType(int, null)
+            handleIdentifier(importX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(importX)
+            handleType(int, null)
+            handleIdentifier(importX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(inX)
+          handleType(int, null)
+          handleIdentifier(inX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, inX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inX)
+            handleType(int, null)
+            handleIdentifier(inX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, inX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inX)
+            handleType(int, null)
+            handleIdentifier(inX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inX)
+            handleType(int, null)
+            handleIdentifier(inX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, inX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inX)
+            handleType(int, null)
+            handleIdentifier(inX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inX)
+            handleType(int, null)
+            handleIdentifier(inX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(inoutX)
+          handleType(int, null)
+          handleIdentifier(inoutX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inoutX)
+            handleType(int, null)
+            handleIdentifier(inoutX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inoutX)
+            handleType(int, null)
+            handleIdentifier(inoutX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inoutX)
+            handleType(int, null)
+            handleIdentifier(inoutX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inoutX)
+            handleType(int, null)
+            handleIdentifier(inoutX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inoutX)
+            handleType(int, null)
+            handleIdentifier(inoutX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(interfaceX)
+          handleType(int, null)
+          handleIdentifier(interfaceX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interfaceX)
+            handleType(int, null)
+            handleIdentifier(interfaceX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interfaceX)
+            handleType(int, null)
+            handleIdentifier(interfaceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interfaceX)
+            handleType(int, null)
+            handleIdentifier(interfaceX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interfaceX)
+            handleType(int, null)
+            handleIdentifier(interfaceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interfaceX)
+            handleType(int, null)
+            handleIdentifier(interfaceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(isX)
+          handleType(int, null)
+          handleIdentifier(isX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, isX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(isX)
+            handleType(int, null)
+            handleIdentifier(isX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, isX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(isX)
+            handleType(int, null)
+            handleIdentifier(isX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(isX)
+            handleType(int, null)
+            handleIdentifier(isX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, isX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(isX)
+            handleType(int, null)
+            handleIdentifier(isX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(isX)
+            handleType(int, null)
+            handleIdentifier(isX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(lateX)
+          handleType(int, null)
+          handleIdentifier(lateX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, lateX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(lateX)
+            handleType(int, null)
+            handleIdentifier(lateX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, lateX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(lateX)
+            handleType(int, null)
+            handleIdentifier(lateX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(lateX)
+            handleType(int, null)
+            handleIdentifier(lateX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, lateX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(lateX)
+            handleType(int, null)
+            handleIdentifier(lateX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(lateX)
+            handleType(int, null)
+            handleIdentifier(lateX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(libraryX)
+          handleType(int, null)
+          handleIdentifier(libraryX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(libraryX)
+            handleType(int, null)
+            handleIdentifier(libraryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(libraryX)
+            handleType(int, null)
+            handleIdentifier(libraryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(libraryX)
+            handleType(int, null)
+            handleIdentifier(libraryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(libraryX)
+            handleType(int, null)
+            handleIdentifier(libraryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(libraryX)
+            handleType(int, null)
+            handleIdentifier(libraryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(mixinX)
+          handleType(int, null)
+          handleIdentifier(mixinX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixinX)
+            handleType(int, null)
+            handleIdentifier(mixinX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixinX)
+            handleType(int, null)
+            handleIdentifier(mixinX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixinX)
+            handleType(int, null)
+            handleIdentifier(mixinX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixinX)
+            handleType(int, null)
+            handleIdentifier(mixinX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixinX)
+            handleType(int, null)
+            handleIdentifier(mixinX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(nativeX)
+          handleType(int, null)
+          handleIdentifier(nativeX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nativeX)
+            handleType(int, null)
+            handleIdentifier(nativeX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nativeX)
+            handleType(int, null)
+            handleIdentifier(nativeX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nativeX)
+            handleType(int, null)
+            handleIdentifier(nativeX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nativeX)
+            handleType(int, null)
+            handleIdentifier(nativeX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nativeX)
+            handleType(int, null)
+            handleIdentifier(nativeX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(newX)
+          handleType(int, null)
+          handleIdentifier(newX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, newX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(newX)
+            handleType(int, null)
+            handleIdentifier(newX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, newX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(newX)
+            handleType(int, null)
+            handleIdentifier(newX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(newX)
+            handleType(int, null)
+            handleIdentifier(newX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, newX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(newX)
+            handleType(int, null)
+            handleIdentifier(newX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(newX)
+            handleType(int, null)
+            handleIdentifier(newX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(nullX)
+          handleType(int, null)
+          handleIdentifier(nullX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, nullX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nullX)
+            handleType(int, null)
+            handleIdentifier(nullX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, nullX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nullX)
+            handleType(int, null)
+            handleIdentifier(nullX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nullX)
+            handleType(int, null)
+            handleIdentifier(nullX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, nullX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nullX)
+            handleType(int, null)
+            handleIdentifier(nullX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(nullX)
+            handleType(int, null)
+            handleIdentifier(nullX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(ofX)
+          handleType(int, null)
+          handleIdentifier(ofX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, ofX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ofX)
+            handleType(int, null)
+            handleIdentifier(ofX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, ofX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ofX)
+            handleType(int, null)
+            handleIdentifier(ofX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ofX)
+            handleType(int, null)
+            handleIdentifier(ofX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, ofX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ofX)
+            handleType(int, null)
+            handleIdentifier(ofX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(ofX)
+            handleType(int, null)
+            handleIdentifier(ofX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(onX)
+          handleType(int, null)
+          handleIdentifier(onX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(onX)
+            handleType(int, null)
+            handleIdentifier(onX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, onX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(onX)
+            handleType(int, null)
+            handleIdentifier(onX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(onX)
+            handleType(int, null)
+            handleIdentifier(onX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, onX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(onX)
+            handleType(int, null)
+            handleIdentifier(onX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(onX)
+            handleType(int, null)
+            handleIdentifier(onX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(operatorX)
+          handleType(int, null)
+          handleIdentifier(operatorX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operatorX)
+            handleType(int, null)
+            handleIdentifier(operatorX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operatorX)
+            handleType(int, null)
+            handleIdentifier(operatorX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operatorX)
+            handleType(int, null)
+            handleIdentifier(operatorX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operatorX)
+            handleType(int, null)
+            handleIdentifier(operatorX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operatorX)
+            handleType(int, null)
+            handleIdentifier(operatorX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(outX)
+          handleType(int, null)
+          handleIdentifier(outX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, outX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(outX)
+            handleType(int, null)
+            handleIdentifier(outX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, outX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(outX)
+            handleType(int, null)
+            handleIdentifier(outX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(outX)
+            handleType(int, null)
+            handleIdentifier(outX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, outX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(outX)
+            handleType(int, null)
+            handleIdentifier(outX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(outX)
+            handleType(int, null)
+            handleIdentifier(outX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(partX)
+          handleType(int, null)
+          handleIdentifier(partX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, partX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(partX)
+            handleType(int, null)
+            handleIdentifier(partX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, partX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(partX)
+            handleType(int, null)
+            handleIdentifier(partX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(partX)
+            handleType(int, null)
+            handleIdentifier(partX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, partX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(partX)
+            handleType(int, null)
+            handleIdentifier(partX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(partX)
+            handleType(int, null)
+            handleIdentifier(partX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(patchX)
+          handleType(int, null)
+          handleIdentifier(patchX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, patchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patchX)
+            handleType(int, null)
+            handleIdentifier(patchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, patchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patchX)
+            handleType(int, null)
+            handleIdentifier(patchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patchX)
+            handleType(int, null)
+            handleIdentifier(patchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, patchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patchX)
+            handleType(int, null)
+            handleIdentifier(patchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patchX)
+            handleType(int, null)
+            handleIdentifier(patchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(requiredX)
+          handleType(int, null)
+          handleIdentifier(requiredX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(requiredX)
+            handleType(int, null)
+            handleIdentifier(requiredX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(requiredX)
+            handleType(int, null)
+            handleIdentifier(requiredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(requiredX)
+            handleType(int, null)
+            handleIdentifier(requiredX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(requiredX)
+            handleType(int, null)
+            handleIdentifier(requiredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(requiredX)
+            handleType(int, null)
+            handleIdentifier(requiredX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(rethrowX)
+          handleType(int, null)
+          handleIdentifier(rethrowX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrowX)
+            handleType(int, null)
+            handleIdentifier(rethrowX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrowX)
+            handleType(int, null)
+            handleIdentifier(rethrowX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrowX)
+            handleType(int, null)
+            handleIdentifier(rethrowX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrowX)
+            handleType(int, null)
+            handleIdentifier(rethrowX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrowX)
+            handleType(int, null)
+            handleIdentifier(rethrowX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(returnX)
+          handleType(int, null)
+          handleIdentifier(returnX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, returnX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(returnX)
+            handleType(int, null)
+            handleIdentifier(returnX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, returnX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(returnX)
+            handleType(int, null)
+            handleIdentifier(returnX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(returnX)
+            handleType(int, null)
+            handleIdentifier(returnX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, returnX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(returnX)
+            handleType(int, null)
+            handleIdentifier(returnX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(returnX)
+            handleType(int, null)
+            handleIdentifier(returnX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(setX)
+          handleType(int, null)
+          handleIdentifier(setX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, setX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(setX)
+            handleType(int, null)
+            handleIdentifier(setX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, setX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(setX)
+            handleType(int, null)
+            handleIdentifier(setX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(setX)
+            handleType(int, null)
+            handleIdentifier(setX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, setX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(setX)
+            handleType(int, null)
+            handleIdentifier(setX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(setX)
+            handleType(int, null)
+            handleIdentifier(setX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(showX)
+          handleType(int, null)
+          handleIdentifier(showX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, showX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(showX)
+            handleType(int, null)
+            handleIdentifier(showX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, showX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(showX)
+            handleType(int, null)
+            handleIdentifier(showX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(showX)
+            handleType(int, null)
+            handleIdentifier(showX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, showX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(showX)
+            handleType(int, null)
+            handleIdentifier(showX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(showX)
+            handleType(int, null)
+            handleIdentifier(showX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(sourceX)
+          handleType(int, null)
+          handleIdentifier(sourceX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sourceX)
+            handleType(int, null)
+            handleIdentifier(sourceX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sourceX)
+            handleType(int, null)
+            handleIdentifier(sourceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sourceX)
+            handleType(int, null)
+            handleIdentifier(sourceX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sourceX)
+            handleType(int, null)
+            handleIdentifier(sourceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sourceX)
+            handleType(int, null)
+            handleIdentifier(sourceX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(staticX)
+          handleType(int, null)
+          handleIdentifier(staticX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, staticX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(staticX)
+            handleType(int, null)
+            handleIdentifier(staticX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, staticX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(staticX)
+            handleType(int, null)
+            handleIdentifier(staticX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(staticX)
+            handleType(int, null)
+            handleIdentifier(staticX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, staticX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(staticX)
+            handleType(int, null)
+            handleIdentifier(staticX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(staticX)
+            handleType(int, null)
+            handleIdentifier(staticX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(superX)
+          handleType(int, null)
+          handleIdentifier(superX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, superX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(superX)
+            handleType(int, null)
+            handleIdentifier(superX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, superX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(superX)
+            handleType(int, null)
+            handleIdentifier(superX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(superX)
+            handleType(int, null)
+            handleIdentifier(superX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, superX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(superX)
+            handleType(int, null)
+            handleIdentifier(superX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(superX)
+            handleType(int, null)
+            handleIdentifier(superX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(switchX)
+          handleType(int, null)
+          handleIdentifier(switchX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, switchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switchX)
+            handleType(int, null)
+            handleIdentifier(switchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, switchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switchX)
+            handleType(int, null)
+            handleIdentifier(switchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switchX)
+            handleType(int, null)
+            handleIdentifier(switchX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, switchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switchX)
+            handleType(int, null)
+            handleIdentifier(switchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switchX)
+            handleType(int, null)
+            handleIdentifier(switchX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(syncX)
+          handleType(int, null)
+          handleIdentifier(syncX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, syncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(syncX)
+            handleType(int, null)
+            handleIdentifier(syncX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, syncX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(syncX)
+            handleType(int, null)
+            handleIdentifier(syncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(syncX)
+            handleType(int, null)
+            handleIdentifier(syncX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, syncX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(syncX)
+            handleType(int, null)
+            handleIdentifier(syncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(syncX)
+            handleType(int, null)
+            handleIdentifier(syncX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(thisX)
+          handleType(int, null)
+          handleIdentifier(thisX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, thisX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(thisX)
+            handleType(int, null)
+            handleIdentifier(thisX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, thisX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(thisX)
+            handleType(int, null)
+            handleIdentifier(thisX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(thisX)
+            handleType(int, null)
+            handleIdentifier(thisX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, thisX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(thisX)
+            handleType(int, null)
+            handleIdentifier(thisX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(thisX)
+            handleType(int, null)
+            handleIdentifier(thisX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(throwX)
+          handleType(int, null)
+          handleIdentifier(throwX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, throwX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throwX)
+            handleType(int, null)
+            handleIdentifier(throwX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, throwX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throwX)
+            handleType(int, null)
+            handleIdentifier(throwX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throwX)
+            handleType(int, null)
+            handleIdentifier(throwX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, throwX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throwX)
+            handleType(int, null)
+            handleIdentifier(throwX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throwX)
+            handleType(int, null)
+            handleIdentifier(throwX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(trueX)
+          handleType(int, null)
+          handleIdentifier(trueX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, trueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(trueX)
+            handleType(int, null)
+            handleIdentifier(trueX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, trueX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(trueX)
+            handleType(int, null)
+            handleIdentifier(trueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(trueX)
+            handleType(int, null)
+            handleIdentifier(trueX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, trueX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(trueX)
+            handleType(int, null)
+            handleIdentifier(trueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(trueX)
+            handleType(int, null)
+            handleIdentifier(trueX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(tryX)
+          handleType(int, null)
+          handleIdentifier(tryX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, tryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(tryX)
+            handleType(int, null)
+            handleIdentifier(tryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, tryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(tryX)
+            handleType(int, null)
+            handleIdentifier(tryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(tryX)
+            handleType(int, null)
+            handleIdentifier(tryX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, tryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(tryX)
+            handleType(int, null)
+            handleIdentifier(tryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(tryX)
+            handleType(int, null)
+            handleIdentifier(tryX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(typedefX)
+          handleType(int, null)
+          handleIdentifier(typedefX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedefX)
+            handleType(int, null)
+            handleIdentifier(typedefX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedefX)
+            handleType(int, null)
+            handleIdentifier(typedefX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedefX)
+            handleType(int, null)
+            handleIdentifier(typedefX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedefX)
+            handleType(int, null)
+            handleIdentifier(typedefX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedefX)
+            handleType(int, null)
+            handleIdentifier(typedefX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(varX)
+          handleType(int, null)
+          handleIdentifier(varX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, varX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(varX)
+            handleType(int, null)
+            handleIdentifier(varX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, varX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(varX)
+            handleType(int, null)
+            handleIdentifier(varX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(varX)
+            handleType(int, null)
+            handleIdentifier(varX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, varX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(varX)
+            handleType(int, null)
+            handleIdentifier(varX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(varX)
+            handleType(int, null)
+            handleIdentifier(varX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(voidX)
+          handleType(int, null)
+          handleIdentifier(voidX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, voidX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(voidX)
+            handleType(int, null)
+            handleIdentifier(voidX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, voidX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(voidX)
+            handleType(int, null)
+            handleIdentifier(voidX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(voidX)
+            handleType(int, null)
+            handleIdentifier(voidX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, voidX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(voidX)
+            handleType(int, null)
+            handleIdentifier(voidX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(voidX)
+            handleType(int, null)
+            handleIdentifier(voidX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(whileX)
+          handleType(int, null)
+          handleIdentifier(whileX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, whileX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(whileX)
+            handleType(int, null)
+            handleIdentifier(whileX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, whileX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(whileX)
+            handleType(int, null)
+            handleIdentifier(whileX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(whileX)
+            handleType(int, null)
+            handleIdentifier(whileX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, whileX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(whileX)
+            handleType(int, null)
+            handleIdentifier(whileX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(whileX)
+            handleType(int, null)
+            handleIdentifier(whileX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(withX)
+          handleType(int, null)
+          handleIdentifier(withX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, withX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(withX)
+            handleType(int, null)
+            handleIdentifier(withX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, withX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(withX)
+            handleType(int, null)
+            handleIdentifier(withX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(withX)
+            handleType(int, null)
+            handleIdentifier(withX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, withX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(withX)
+            handleType(int, null)
+            handleIdentifier(withX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(withX)
+            handleType(int, null)
+            handleIdentifier(withX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(yieldX)
+          handleType(int, null)
+          handleIdentifier(yieldX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yieldX)
+            handleType(int, null)
+            handleIdentifier(yieldX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(])
+          endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters([)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yieldX)
+            handleType(int, null)
+            handleIdentifier(yieldX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, ])
+          endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, [, ])
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yieldX)
+            handleType(int, null)
+            handleIdentifier(yieldX, formalParameterDeclaration)
+            handleFormalParameterWithoutValue(})
+          endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yieldX)
+            handleType(int, null)
+            handleIdentifier(yieldX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(:, })
+          endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(test, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginOptionalFormalParameters({)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yieldX)
+            handleType(int, null)
+            handleIdentifier(yieldX, formalParameterDeclaration)
+            beginFormalParameterDefaultValueExpression()
+              handleLiteralInt(42)
+            endFormalParameterDefaultValueExpression()
+            handleValuedFormalParameter(=, })
+          endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+        endOptionalFormalParameters(1, {, })
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(414, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect
new file mode 100644
index 0000000..b1fa29a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect
@@ -0,0 +1,19188 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(abstractX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstractX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstractX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstractX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, abstractX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstractX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(abstractX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(abstractX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, abstractX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(asX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(asX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, asX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, asX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, asX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, asX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(assertX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(assertX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, assertX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assertX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(assertX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, assertX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assertX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(assertX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assertX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(assertX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, assertX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assertX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(assertX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(assertX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(assertX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, assertX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(asyncX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asyncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asyncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asyncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, asyncX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asyncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(asyncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(asyncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, asyncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(awaitX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(awaitX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(awaitX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(awaitX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, awaitX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(awaitX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(awaitX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(awaitX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, awaitX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(breakX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(breakX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, breakX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(breakX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(breakX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, breakX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(breakX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(breakX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(breakX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(breakX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, breakX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(breakX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(breakX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(breakX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(breakX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, breakX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(caseX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(caseX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, caseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(caseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(caseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, caseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(caseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(caseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(caseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(caseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, caseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(caseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(caseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(caseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(caseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, caseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(catchX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(catchX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, catchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(catchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, catchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(catchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(catchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, catchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(catchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(catchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(catchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, catchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(classX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(classX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, classX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(classX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(classX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, classX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(classX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(classX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(classX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(classX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, classX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(classX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(classX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(classX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(classX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, classX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(constX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(constX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, constX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(constX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(constX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, constX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(constX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(constX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(constX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(constX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, constX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(constX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(constX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(constX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(constX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, constX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(continueX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(continueX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, continueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(continueX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, continueX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(continueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(continueX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, continueX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(continueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(continueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(continueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, continueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(covariantX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariantX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariantX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariantX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, covariantX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariantX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(covariantX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(covariantX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, covariantX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(defaultX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(defaultX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(defaultX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(defaultX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, defaultX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(defaultX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(defaultX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(defaultX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, defaultX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(deferredX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, deferredX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(deferredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(deferredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, deferredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(doX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(doX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, doX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(doX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(doX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, doX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(doX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(doX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(doX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(doX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, doX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(doX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(doX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(doX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(doX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, doX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(dynamicX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamicX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamicX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamicX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, dynamicX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamicX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(dynamicX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(dynamicX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, dynamicX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(elseX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(elseX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, elseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(elseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(elseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, elseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(elseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(elseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(elseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(elseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, elseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(elseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(elseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(elseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(elseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, elseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(enumX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(enumX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, enumX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enumX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(enumX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, enumX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enumX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(enumX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enumX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(enumX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, enumX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enumX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(enumX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(enumX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(enumX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, enumX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(exportX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(exportX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, exportX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(exportX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(exportX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, exportX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(exportX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(exportX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(exportX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(exportX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, exportX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(exportX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(exportX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(exportX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(exportX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, exportX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extendsX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extendsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extendsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extendsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, extendsX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extendsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extendsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extendsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, extendsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extensionX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extensionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extensionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extensionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, extensionX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extensionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(extensionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(extensionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, extensionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(externalX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(externalX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, externalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(externalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(externalX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, externalX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(externalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(externalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(externalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(externalX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, externalX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(externalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(externalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(externalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(externalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, externalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(factoryX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factoryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factoryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factoryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, factoryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factoryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(factoryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(factoryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, factoryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(falseX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(falseX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, falseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(falseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(falseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, falseX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(falseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(falseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(falseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(falseX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, falseX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(falseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(falseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(falseX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(falseX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, falseX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finalX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(finalX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, finalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finalX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, finalX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finalX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, finalX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finalX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finalX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, finalX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finallyX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finallyX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finallyX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finallyX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, finallyX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finallyX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(finallyX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(finallyX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, finallyX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(forX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(forX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, forX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(forX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(forX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, forX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(forX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(forX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(forX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(forX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, forX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(forX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(forX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(forX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(forX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, forX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(FunctionX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(FunctionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(FunctionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(FunctionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, FunctionX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(FunctionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(FunctionX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(FunctionX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, FunctionX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(getX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(getX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, getX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(getX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(getX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, getX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(getX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(getX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(getX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(getX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, getX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(getX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(getX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(getX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(getX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, getX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(hideX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(hideX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, hideX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hideX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(hideX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, hideX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hideX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(hideX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hideX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(hideX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, hideX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hideX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(hideX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(hideX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(hideX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, hideX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(ifX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(ifX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, ifX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ifX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ifX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, ifX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ifX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ifX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ifX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ifX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, ifX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ifX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ifX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ifX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ifX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, ifX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(implementsX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implementsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implementsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implementsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, implementsX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implementsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(implementsX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(implementsX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, implementsX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(importX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(importX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, importX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(importX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(importX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, importX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(importX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(importX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(importX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(importX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, importX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(importX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(importX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(importX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(importX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, importX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(inX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, inX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, inX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, inX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, inX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inoutX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inoutX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inoutX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inoutX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, inoutX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inoutX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(inoutX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(inoutX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, inoutX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(interfaceX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interfaceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interfaceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interfaceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, interfaceX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interfaceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(interfaceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(interfaceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, interfaceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(isX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(isX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, isX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(isX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(isX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, isX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(isX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(isX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(isX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(isX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, isX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(isX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(isX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(isX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(isX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, isX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(lateX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(lateX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, lateX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(lateX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(lateX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, lateX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(lateX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(lateX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(lateX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(lateX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, lateX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(lateX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(lateX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(lateX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(lateX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, lateX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(libraryX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(libraryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(libraryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(libraryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, libraryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(libraryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(libraryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(libraryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, libraryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(mixinX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixinX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixinX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixinX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, mixinX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixinX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(mixinX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(mixinX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, mixinX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(nativeX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nativeX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nativeX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nativeX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, nativeX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nativeX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nativeX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nativeX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, nativeX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(newX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(newX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, newX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(newX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(newX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, newX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(newX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(newX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(newX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(newX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, newX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(newX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(newX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(newX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(newX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, newX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(nullX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(nullX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, nullX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nullX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nullX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, nullX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nullX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nullX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nullX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nullX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, nullX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nullX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nullX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(nullX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(nullX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, nullX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(ofX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(ofX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, ofX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ofX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ofX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, ofX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ofX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ofX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ofX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ofX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, ofX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ofX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ofX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(ofX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(ofX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, ofX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(onX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(onX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(onX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(onX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, onX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(onX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(onX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(onX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(onX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, onX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(onX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(onX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(onX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(onX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, onX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operatorX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operatorX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operatorX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operatorX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, operatorX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operatorX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(operatorX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(operatorX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, operatorX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(outX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(outX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, outX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(outX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(outX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, outX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(outX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(outX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(outX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(outX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, outX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(outX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(outX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(outX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(outX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, outX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(partX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(partX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, partX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(partX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(partX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, partX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(partX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(partX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(partX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(partX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, partX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(partX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(partX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(partX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(partX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, partX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(patchX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(patchX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, patchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(patchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, patchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(patchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(patchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, patchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(patchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(patchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(patchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, patchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(requiredX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(requiredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(requiredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(requiredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, requiredX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(requiredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(requiredX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(requiredX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, requiredX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(rethrowX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrowX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrowX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrowX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, rethrowX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrowX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(rethrowX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(rethrowX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, rethrowX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(returnX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(returnX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, returnX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(returnX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(returnX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, returnX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(returnX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(returnX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(returnX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(returnX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, returnX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(returnX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(returnX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(returnX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(returnX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, returnX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(setX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(setX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, setX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(setX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(setX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, setX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(setX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(setX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(setX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(setX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, setX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(setX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(setX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(setX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(setX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, setX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(showX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(showX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, showX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(showX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(showX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, showX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(showX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(showX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(showX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(showX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, showX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(showX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(showX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(showX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(showX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, showX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sourceX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sourceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sourceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sourceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, sourceX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sourceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(sourceX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(sourceX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, sourceX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(staticX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(staticX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, staticX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(staticX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(staticX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, staticX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(staticX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(staticX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(staticX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(staticX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, staticX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(staticX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(staticX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(staticX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(staticX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, staticX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(superX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(superX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, superX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(superX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(superX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, superX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(superX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(superX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(superX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(superX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, superX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(superX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(superX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(superX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(superX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, superX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switchX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(switchX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, switchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(switchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, switchX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(switchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(switchX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, switchX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(switchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(switchX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(switchX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, switchX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(syncX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(syncX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, syncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(syncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(syncX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, syncX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(syncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(syncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(syncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(syncX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, syncX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(syncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(syncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(syncX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(syncX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, syncX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(thisX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(thisX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, thisX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(thisX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(thisX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, thisX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(thisX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(thisX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(thisX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(thisX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, thisX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(thisX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(thisX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(thisX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(thisX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, thisX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(throwX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(throwX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, throwX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throwX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(throwX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, throwX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throwX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(throwX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throwX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(throwX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, throwX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throwX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(throwX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(throwX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(throwX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, throwX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(trueX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(trueX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, trueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(trueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(trueX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, trueX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(trueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(trueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(trueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(trueX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, trueX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(trueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(trueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(trueX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(trueX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, trueX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(tryX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(tryX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, tryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(tryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(tryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, tryX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(tryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(tryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(tryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(tryX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, tryX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(tryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(tryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(tryX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(tryX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, tryX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(typedefX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedefX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedefX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedefX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, typedefX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedefX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(typedefX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(typedefX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, typedefX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(varX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(varX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, varX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(varX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(varX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, varX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(varX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(varX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(varX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(varX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, varX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(varX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(varX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(varX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(varX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, varX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(voidX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(voidX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, voidX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(voidX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(voidX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, voidX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(voidX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(voidX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(voidX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(voidX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, voidX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(voidX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(voidX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(voidX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(voidX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, voidX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(whileX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(whileX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, whileX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(whileX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(whileX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, whileX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(whileX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(whileX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(whileX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(whileX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, whileX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(whileX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(whileX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(whileX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(whileX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, whileX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(withX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(withX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, withX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(withX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(withX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, withX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(withX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(withX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(withX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(withX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, withX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(withX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(withX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(withX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(withX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, withX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(yieldX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yieldX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(])
+                  listener: endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalPositionalParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters([)
+                parseFormalParameter([, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                  parseMetadataStar([)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yieldX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, ])
+                  listener: endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalPositional, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, [, ])
+              ensureCloseParen(], ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yieldX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue(})
+                  listener: endFormalParameter(null, null, yieldX, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yieldX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(:)
+                    parsePrecedenceExpression(:, 1, true)
+                      parseUnaryExpression(:, true)
+                        parsePrimary(:, expression)
+                          parseLiteralInt(:)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(:, })
+                  listener: endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseOptionalNamedParameters((, MemberKind.TopLevelMethod)
+                listener: beginOptionalFormalParameters({)
+                parseFormalParameter({, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  parseMetadataStar({)
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(yieldX)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(yieldX, formalParameterDeclaration)
+                  listener: beginFormalParameterDefaultValueExpression()
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFormalParameterDefaultValueExpression()
+                  listener: handleValuedFormalParameter(=, })
+                  listener: endFormalParameter(null, null, yieldX, 42, 42, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                listener: endOptionalFormalParameters(1, {, })
+              ensureCloseParen(}, ()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(414, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.parser.expect
new file mode 100644
index 0000000..575fc69
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.parser.expect
@@ -0,0 +1,967 @@
+void test(int abstractX) {}
+void test([int abstractX]) {}
+void test([int abstractX = 42]) {}
+void test({int abstractX}) {}
+void test({int abstractX: 42}) {}
+void test({int abstractX = 42}) {}
+
+void test(int asX) {}
+void test([int asX]) {}
+void test([int asX = 42]) {}
+void test({int asX}) {}
+void test({int asX: 42}) {}
+void test({int asX = 42}) {}
+
+void test(int assertX) {}
+void test([int assertX]) {}
+void test([int assertX = 42]) {}
+void test({int assertX}) {}
+void test({int assertX: 42}) {}
+void test({int assertX = 42}) {}
+
+void test(int asyncX) {}
+void test([int asyncX]) {}
+void test([int asyncX = 42]) {}
+void test({int asyncX}) {}
+void test({int asyncX: 42}) {}
+void test({int asyncX = 42}) {}
+
+void test(int awaitX) {}
+void test([int awaitX]) {}
+void test([int awaitX = 42]) {}
+void test({int awaitX}) {}
+void test({int awaitX: 42}) {}
+void test({int awaitX = 42}) {}
+
+void test(int breakX) {}
+void test([int breakX]) {}
+void test([int breakX = 42]) {}
+void test({int breakX}) {}
+void test({int breakX: 42}) {}
+void test({int breakX = 42}) {}
+
+void test(int caseX) {}
+void test([int caseX]) {}
+void test([int caseX = 42]) {}
+void test({int caseX}) {}
+void test({int caseX: 42}) {}
+void test({int caseX = 42}) {}
+
+void test(int catchX) {}
+void test([int catchX]) {}
+void test([int catchX = 42]) {}
+void test({int catchX}) {}
+void test({int catchX: 42}) {}
+void test({int catchX = 42}) {}
+
+void test(int classX) {}
+void test([int classX]) {}
+void test([int classX = 42]) {}
+void test({int classX}) {}
+void test({int classX: 42}) {}
+void test({int classX = 42}) {}
+
+void test(int constX) {}
+void test([int constX]) {}
+void test([int constX = 42]) {}
+void test({int constX}) {}
+void test({int constX: 42}) {}
+void test({int constX = 42}) {}
+
+void test(int continueX) {}
+void test([int continueX]) {}
+void test([int continueX = 42]) {}
+void test({int continueX}) {}
+void test({int continueX: 42}) {}
+void test({int continueX = 42}) {}
+
+void test(int covariantX) {}
+void test([int covariantX]) {}
+void test([int covariantX = 42]) {}
+void test({int covariantX}) {}
+void test({int covariantX: 42}) {}
+void test({int covariantX = 42}) {}
+
+void test(int defaultX) {}
+void test([int defaultX]) {}
+void test([int defaultX = 42]) {}
+void test({int defaultX}) {}
+void test({int defaultX: 42}) {}
+void test({int defaultX = 42}) {}
+
+void test(int deferredX) {}
+void test([int deferredX]) {}
+void test([int deferredX = 42]) {}
+void test({int deferredX}) {}
+void test({int deferredX: 42}) {}
+void test({int deferredX = 42}) {}
+
+void test(int doX) {}
+void test([int doX]) {}
+void test([int doX = 42]) {}
+void test({int doX}) {}
+void test({int doX: 42}) {}
+void test({int doX = 42}) {}
+
+void test(int dynamicX) {}
+void test([int dynamicX]) {}
+void test([int dynamicX = 42]) {}
+void test({int dynamicX}) {}
+void test({int dynamicX: 42}) {}
+void test({int dynamicX = 42}) {}
+
+void test(int elseX) {}
+void test([int elseX]) {}
+void test([int elseX = 42]) {}
+void test({int elseX}) {}
+void test({int elseX: 42}) {}
+void test({int elseX = 42}) {}
+
+void test(int enumX) {}
+void test([int enumX]) {}
+void test([int enumX = 42]) {}
+void test({int enumX}) {}
+void test({int enumX: 42}) {}
+void test({int enumX = 42}) {}
+
+void test(int exportX) {}
+void test([int exportX]) {}
+void test([int exportX = 42]) {}
+void test({int exportX}) {}
+void test({int exportX: 42}) {}
+void test({int exportX = 42}) {}
+
+void test(int extendsX) {}
+void test([int extendsX]) {}
+void test([int extendsX = 42]) {}
+void test({int extendsX}) {}
+void test({int extendsX: 42}) {}
+void test({int extendsX = 42}) {}
+
+void test(int extensionX) {}
+void test([int extensionX]) {}
+void test([int extensionX = 42]) {}
+void test({int extensionX}) {}
+void test({int extensionX: 42}) {}
+void test({int extensionX = 42}) {}
+
+void test(int externalX) {}
+void test([int externalX]) {}
+void test([int externalX = 42]) {}
+void test({int externalX}) {}
+void test({int externalX: 42}) {}
+void test({int externalX = 42}) {}
+
+void test(int factoryX) {}
+void test([int factoryX]) {}
+void test([int factoryX = 42]) {}
+void test({int factoryX}) {}
+void test({int factoryX: 42}) {}
+void test({int factoryX = 42}) {}
+
+void test(int falseX) {}
+void test([int falseX]) {}
+void test([int falseX = 42]) {}
+void test({int falseX}) {}
+void test({int falseX: 42}) {}
+void test({int falseX = 42}) {}
+
+void test(int finalX) {}
+void test([int finalX]) {}
+void test([int finalX = 42]) {}
+void test({int finalX}) {}
+void test({int finalX: 42}) {}
+void test({int finalX = 42}) {}
+
+void test(int finallyX) {}
+void test([int finallyX]) {}
+void test([int finallyX = 42]) {}
+void test({int finallyX}) {}
+void test({int finallyX: 42}) {}
+void test({int finallyX = 42}) {}
+
+void test(int forX) {}
+void test([int forX]) {}
+void test([int forX = 42]) {}
+void test({int forX}) {}
+void test({int forX: 42}) {}
+void test({int forX = 42}) {}
+
+void test(int FunctionX) {}
+void test([int FunctionX]) {}
+void test([int FunctionX = 42]) {}
+void test({int FunctionX}) {}
+void test({int FunctionX: 42}) {}
+void test({int FunctionX = 42}) {}
+
+void test(int getX) {}
+void test([int getX]) {}
+void test([int getX = 42]) {}
+void test({int getX}) {}
+void test({int getX: 42}) {}
+void test({int getX = 42}) {}
+
+void test(int hideX) {}
+void test([int hideX]) {}
+void test([int hideX = 42]) {}
+void test({int hideX}) {}
+void test({int hideX: 42}) {}
+void test({int hideX = 42}) {}
+
+void test(int ifX) {}
+void test([int ifX]) {}
+void test([int ifX = 42]) {}
+void test({int ifX}) {}
+void test({int ifX: 42}) {}
+void test({int ifX = 42}) {}
+
+void test(int implementsX) {}
+void test([int implementsX]) {}
+void test([int implementsX = 42]) {}
+void test({int implementsX}) {}
+void test({int implementsX: 42}) {}
+void test({int implementsX = 42}) {}
+
+void test(int importX) {}
+void test([int importX]) {}
+void test([int importX = 42]) {}
+void test({int importX}) {}
+void test({int importX: 42}) {}
+void test({int importX = 42}) {}
+
+void test(int inX) {}
+void test([int inX]) {}
+void test([int inX = 42]) {}
+void test({int inX}) {}
+void test({int inX: 42}) {}
+void test({int inX = 42}) {}
+
+void test(int inoutX) {}
+void test([int inoutX]) {}
+void test([int inoutX = 42]) {}
+void test({int inoutX}) {}
+void test({int inoutX: 42}) {}
+void test({int inoutX = 42}) {}
+
+void test(int interfaceX) {}
+void test([int interfaceX]) {}
+void test([int interfaceX = 42]) {}
+void test({int interfaceX}) {}
+void test({int interfaceX: 42}) {}
+void test({int interfaceX = 42}) {}
+
+void test(int isX) {}
+void test([int isX]) {}
+void test([int isX = 42]) {}
+void test({int isX}) {}
+void test({int isX: 42}) {}
+void test({int isX = 42}) {}
+
+void test(int lateX) {}
+void test([int lateX]) {}
+void test([int lateX = 42]) {}
+void test({int lateX}) {}
+void test({int lateX: 42}) {}
+void test({int lateX = 42}) {}
+
+void test(int libraryX) {}
+void test([int libraryX]) {}
+void test([int libraryX = 42]) {}
+void test({int libraryX}) {}
+void test({int libraryX: 42}) {}
+void test({int libraryX = 42}) {}
+
+void test(int mixinX) {}
+void test([int mixinX]) {}
+void test([int mixinX = 42]) {}
+void test({int mixinX}) {}
+void test({int mixinX: 42}) {}
+void test({int mixinX = 42}) {}
+
+void test(int nativeX) {}
+void test([int nativeX]) {}
+void test([int nativeX = 42]) {}
+void test({int nativeX}) {}
+void test({int nativeX: 42}) {}
+void test({int nativeX = 42}) {}
+
+void test(int newX) {}
+void test([int newX]) {}
+void test([int newX = 42]) {}
+void test({int newX}) {}
+void test({int newX: 42}) {}
+void test({int newX = 42}) {}
+
+void test(int nullX) {}
+void test([int nullX]) {}
+void test([int nullX = 42]) {}
+void test({int nullX}) {}
+void test({int nullX: 42}) {}
+void test({int nullX = 42}) {}
+
+void test(int ofX) {}
+void test([int ofX]) {}
+void test([int ofX = 42]) {}
+void test({int ofX}) {}
+void test({int ofX: 42}) {}
+void test({int ofX = 42}) {}
+
+void test(int onX) {}
+void test([int onX]) {}
+void test([int onX = 42]) {}
+void test({int onX}) {}
+void test({int onX: 42}) {}
+void test({int onX = 42}) {}
+
+void test(int operatorX) {}
+void test([int operatorX]) {}
+void test([int operatorX = 42]) {}
+void test({int operatorX}) {}
+void test({int operatorX: 42}) {}
+void test({int operatorX = 42}) {}
+
+void test(int outX) {}
+void test([int outX]) {}
+void test([int outX = 42]) {}
+void test({int outX}) {}
+void test({int outX: 42}) {}
+void test({int outX = 42}) {}
+
+void test(int partX) {}
+void test([int partX]) {}
+void test([int partX = 42]) {}
+void test({int partX}) {}
+void test({int partX: 42}) {}
+void test({int partX = 42}) {}
+
+void test(int patchX) {}
+void test([int patchX]) {}
+void test([int patchX = 42]) {}
+void test({int patchX}) {}
+void test({int patchX: 42}) {}
+void test({int patchX = 42}) {}
+
+void test(int requiredX) {}
+void test([int requiredX]) {}
+void test([int requiredX = 42]) {}
+void test({int requiredX}) {}
+void test({int requiredX: 42}) {}
+void test({int requiredX = 42}) {}
+
+void test(int rethrowX) {}
+void test([int rethrowX]) {}
+void test([int rethrowX = 42]) {}
+void test({int rethrowX}) {}
+void test({int rethrowX: 42}) {}
+void test({int rethrowX = 42}) {}
+
+void test(int returnX) {}
+void test([int returnX]) {}
+void test([int returnX = 42]) {}
+void test({int returnX}) {}
+void test({int returnX: 42}) {}
+void test({int returnX = 42}) {}
+
+void test(int setX) {}
+void test([int setX]) {}
+void test([int setX = 42]) {}
+void test({int setX}) {}
+void test({int setX: 42}) {}
+void test({int setX = 42}) {}
+
+void test(int showX) {}
+void test([int showX]) {}
+void test([int showX = 42]) {}
+void test({int showX}) {}
+void test({int showX: 42}) {}
+void test({int showX = 42}) {}
+
+void test(int sourceX) {}
+void test([int sourceX]) {}
+void test([int sourceX = 42]) {}
+void test({int sourceX}) {}
+void test({int sourceX: 42}) {}
+void test({int sourceX = 42}) {}
+
+void test(int staticX) {}
+void test([int staticX]) {}
+void test([int staticX = 42]) {}
+void test({int staticX}) {}
+void test({int staticX: 42}) {}
+void test({int staticX = 42}) {}
+
+void test(int superX) {}
+void test([int superX]) {}
+void test([int superX = 42]) {}
+void test({int superX}) {}
+void test({int superX: 42}) {}
+void test({int superX = 42}) {}
+
+void test(int switchX) {}
+void test([int switchX]) {}
+void test([int switchX = 42]) {}
+void test({int switchX}) {}
+void test({int switchX: 42}) {}
+void test({int switchX = 42}) {}
+
+void test(int syncX) {}
+void test([int syncX]) {}
+void test([int syncX = 42]) {}
+void test({int syncX}) {}
+void test({int syncX: 42}) {}
+void test({int syncX = 42}) {}
+
+void test(int thisX) {}
+void test([int thisX]) {}
+void test([int thisX = 42]) {}
+void test({int thisX}) {}
+void test({int thisX: 42}) {}
+void test({int thisX = 42}) {}
+
+void test(int throwX) {}
+void test([int throwX]) {}
+void test([int throwX = 42]) {}
+void test({int throwX}) {}
+void test({int throwX: 42}) {}
+void test({int throwX = 42}) {}
+
+void test(int trueX) {}
+void test([int trueX]) {}
+void test([int trueX = 42]) {}
+void test({int trueX}) {}
+void test({int trueX: 42}) {}
+void test({int trueX = 42}) {}
+
+void test(int tryX) {}
+void test([int tryX]) {}
+void test([int tryX = 42]) {}
+void test({int tryX}) {}
+void test({int tryX: 42}) {}
+void test({int tryX = 42}) {}
+
+void test(int typedefX) {}
+void test([int typedefX]) {}
+void test([int typedefX = 42]) {}
+void test({int typedefX}) {}
+void test({int typedefX: 42}) {}
+void test({int typedefX = 42}) {}
+
+void test(int varX) {}
+void test([int varX]) {}
+void test([int varX = 42]) {}
+void test({int varX}) {}
+void test({int varX: 42}) {}
+void test({int varX = 42}) {}
+
+void test(int voidX) {}
+void test([int voidX]) {}
+void test([int voidX = 42]) {}
+void test({int voidX}) {}
+void test({int voidX: 42}) {}
+void test({int voidX = 42}) {}
+
+void test(int whileX) {}
+void test([int whileX]) {}
+void test([int whileX = 42]) {}
+void test({int whileX}) {}
+void test({int whileX: 42}) {}
+void test({int whileX = 42}) {}
+
+void test(int withX) {}
+void test([int withX]) {}
+void test([int withX = 42]) {}
+void test({int withX}) {}
+void test({int withX: 42}) {}
+void test({int withX = 42}) {}
+
+void test(int yieldX) {}
+void test([int yieldX]) {}
+void test([int yieldX = 42]) {}
+void test({int yieldX}) {}
+void test({int yieldX: 42}) {}
+void test({int yieldX = 42}) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] abstractX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstractX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstractX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] asX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] assertX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assertX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assertX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] asyncX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asyncX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asyncX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] awaitX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] awaitX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] awaitX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] breakX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] breakX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] breakX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] caseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] caseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] caseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] catchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] classX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] classX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] classX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] constX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] constX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] constX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] continueX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continueX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continueX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] covariantX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariantX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariantX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] defaultX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] defaultX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] defaultX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] deferredX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferredX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferredX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] doX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] doX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] doX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] dynamicX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamicX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamicX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] elseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] elseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] elseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] enumX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enumX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enumX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] exportX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] exportX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] exportX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extendsX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extendsX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extendsX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extensionX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extensionX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extensionX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] externalX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] externalX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] externalX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] factoryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factoryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factoryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] falseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] falseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] falseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finalX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finalX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finalX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finallyX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finallyX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finallyX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] forX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] forX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] forX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] FunctionX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] FunctionX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] FunctionX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] getX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] getX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] getX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] hideX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hideX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hideX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] ifX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ifX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ifX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] implementsX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implementsX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implementsX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] importX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] importX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] importX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inoutX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inoutX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inoutX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] interfaceX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interfaceX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interfaceX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] isX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] isX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] isX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] lateX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] lateX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] lateX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] libraryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] libraryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] libraryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] mixinX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixinX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixinX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] nativeX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nativeX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nativeX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] newX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] newX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] newX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] nullX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nullX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nullX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] ofX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ofX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ofX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] onX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] onX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] operatorX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operatorX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operatorX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] outX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] outX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] outX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] partX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] partX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] partX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] patchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] requiredX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] requiredX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] requiredX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] rethrowX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrowX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrowX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] returnX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] returnX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] returnX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] setX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] setX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] setX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] showX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] showX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] showX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] sourceX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sourceX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sourceX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] staticX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] staticX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] staticX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] superX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] superX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] superX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] switchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] syncX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] syncX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] syncX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] thisX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] thisX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] thisX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] throwX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throwX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throwX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] trueX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] trueX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] trueX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] tryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] tryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] tryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] typedefX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedefX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedefX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] varX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] varX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] varX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] voidX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] voidX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] voidX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] whileX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] whileX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] whileX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] withX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] withX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] withX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] yieldX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yieldX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yieldX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.scanner.expect
new file mode 100644
index 0000000..575fc69
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.scanner.expect
@@ -0,0 +1,967 @@
+void test(int abstractX) {}
+void test([int abstractX]) {}
+void test([int abstractX = 42]) {}
+void test({int abstractX}) {}
+void test({int abstractX: 42}) {}
+void test({int abstractX = 42}) {}
+
+void test(int asX) {}
+void test([int asX]) {}
+void test([int asX = 42]) {}
+void test({int asX}) {}
+void test({int asX: 42}) {}
+void test({int asX = 42}) {}
+
+void test(int assertX) {}
+void test([int assertX]) {}
+void test([int assertX = 42]) {}
+void test({int assertX}) {}
+void test({int assertX: 42}) {}
+void test({int assertX = 42}) {}
+
+void test(int asyncX) {}
+void test([int asyncX]) {}
+void test([int asyncX = 42]) {}
+void test({int asyncX}) {}
+void test({int asyncX: 42}) {}
+void test({int asyncX = 42}) {}
+
+void test(int awaitX) {}
+void test([int awaitX]) {}
+void test([int awaitX = 42]) {}
+void test({int awaitX}) {}
+void test({int awaitX: 42}) {}
+void test({int awaitX = 42}) {}
+
+void test(int breakX) {}
+void test([int breakX]) {}
+void test([int breakX = 42]) {}
+void test({int breakX}) {}
+void test({int breakX: 42}) {}
+void test({int breakX = 42}) {}
+
+void test(int caseX) {}
+void test([int caseX]) {}
+void test([int caseX = 42]) {}
+void test({int caseX}) {}
+void test({int caseX: 42}) {}
+void test({int caseX = 42}) {}
+
+void test(int catchX) {}
+void test([int catchX]) {}
+void test([int catchX = 42]) {}
+void test({int catchX}) {}
+void test({int catchX: 42}) {}
+void test({int catchX = 42}) {}
+
+void test(int classX) {}
+void test([int classX]) {}
+void test([int classX = 42]) {}
+void test({int classX}) {}
+void test({int classX: 42}) {}
+void test({int classX = 42}) {}
+
+void test(int constX) {}
+void test([int constX]) {}
+void test([int constX = 42]) {}
+void test({int constX}) {}
+void test({int constX: 42}) {}
+void test({int constX = 42}) {}
+
+void test(int continueX) {}
+void test([int continueX]) {}
+void test([int continueX = 42]) {}
+void test({int continueX}) {}
+void test({int continueX: 42}) {}
+void test({int continueX = 42}) {}
+
+void test(int covariantX) {}
+void test([int covariantX]) {}
+void test([int covariantX = 42]) {}
+void test({int covariantX}) {}
+void test({int covariantX: 42}) {}
+void test({int covariantX = 42}) {}
+
+void test(int defaultX) {}
+void test([int defaultX]) {}
+void test([int defaultX = 42]) {}
+void test({int defaultX}) {}
+void test({int defaultX: 42}) {}
+void test({int defaultX = 42}) {}
+
+void test(int deferredX) {}
+void test([int deferredX]) {}
+void test([int deferredX = 42]) {}
+void test({int deferredX}) {}
+void test({int deferredX: 42}) {}
+void test({int deferredX = 42}) {}
+
+void test(int doX) {}
+void test([int doX]) {}
+void test([int doX = 42]) {}
+void test({int doX}) {}
+void test({int doX: 42}) {}
+void test({int doX = 42}) {}
+
+void test(int dynamicX) {}
+void test([int dynamicX]) {}
+void test([int dynamicX = 42]) {}
+void test({int dynamicX}) {}
+void test({int dynamicX: 42}) {}
+void test({int dynamicX = 42}) {}
+
+void test(int elseX) {}
+void test([int elseX]) {}
+void test([int elseX = 42]) {}
+void test({int elseX}) {}
+void test({int elseX: 42}) {}
+void test({int elseX = 42}) {}
+
+void test(int enumX) {}
+void test([int enumX]) {}
+void test([int enumX = 42]) {}
+void test({int enumX}) {}
+void test({int enumX: 42}) {}
+void test({int enumX = 42}) {}
+
+void test(int exportX) {}
+void test([int exportX]) {}
+void test([int exportX = 42]) {}
+void test({int exportX}) {}
+void test({int exportX: 42}) {}
+void test({int exportX = 42}) {}
+
+void test(int extendsX) {}
+void test([int extendsX]) {}
+void test([int extendsX = 42]) {}
+void test({int extendsX}) {}
+void test({int extendsX: 42}) {}
+void test({int extendsX = 42}) {}
+
+void test(int extensionX) {}
+void test([int extensionX]) {}
+void test([int extensionX = 42]) {}
+void test({int extensionX}) {}
+void test({int extensionX: 42}) {}
+void test({int extensionX = 42}) {}
+
+void test(int externalX) {}
+void test([int externalX]) {}
+void test([int externalX = 42]) {}
+void test({int externalX}) {}
+void test({int externalX: 42}) {}
+void test({int externalX = 42}) {}
+
+void test(int factoryX) {}
+void test([int factoryX]) {}
+void test([int factoryX = 42]) {}
+void test({int factoryX}) {}
+void test({int factoryX: 42}) {}
+void test({int factoryX = 42}) {}
+
+void test(int falseX) {}
+void test([int falseX]) {}
+void test([int falseX = 42]) {}
+void test({int falseX}) {}
+void test({int falseX: 42}) {}
+void test({int falseX = 42}) {}
+
+void test(int finalX) {}
+void test([int finalX]) {}
+void test([int finalX = 42]) {}
+void test({int finalX}) {}
+void test({int finalX: 42}) {}
+void test({int finalX = 42}) {}
+
+void test(int finallyX) {}
+void test([int finallyX]) {}
+void test([int finallyX = 42]) {}
+void test({int finallyX}) {}
+void test({int finallyX: 42}) {}
+void test({int finallyX = 42}) {}
+
+void test(int forX) {}
+void test([int forX]) {}
+void test([int forX = 42]) {}
+void test({int forX}) {}
+void test({int forX: 42}) {}
+void test({int forX = 42}) {}
+
+void test(int FunctionX) {}
+void test([int FunctionX]) {}
+void test([int FunctionX = 42]) {}
+void test({int FunctionX}) {}
+void test({int FunctionX: 42}) {}
+void test({int FunctionX = 42}) {}
+
+void test(int getX) {}
+void test([int getX]) {}
+void test([int getX = 42]) {}
+void test({int getX}) {}
+void test({int getX: 42}) {}
+void test({int getX = 42}) {}
+
+void test(int hideX) {}
+void test([int hideX]) {}
+void test([int hideX = 42]) {}
+void test({int hideX}) {}
+void test({int hideX: 42}) {}
+void test({int hideX = 42}) {}
+
+void test(int ifX) {}
+void test([int ifX]) {}
+void test([int ifX = 42]) {}
+void test({int ifX}) {}
+void test({int ifX: 42}) {}
+void test({int ifX = 42}) {}
+
+void test(int implementsX) {}
+void test([int implementsX]) {}
+void test([int implementsX = 42]) {}
+void test({int implementsX}) {}
+void test({int implementsX: 42}) {}
+void test({int implementsX = 42}) {}
+
+void test(int importX) {}
+void test([int importX]) {}
+void test([int importX = 42]) {}
+void test({int importX}) {}
+void test({int importX: 42}) {}
+void test({int importX = 42}) {}
+
+void test(int inX) {}
+void test([int inX]) {}
+void test([int inX = 42]) {}
+void test({int inX}) {}
+void test({int inX: 42}) {}
+void test({int inX = 42}) {}
+
+void test(int inoutX) {}
+void test([int inoutX]) {}
+void test([int inoutX = 42]) {}
+void test({int inoutX}) {}
+void test({int inoutX: 42}) {}
+void test({int inoutX = 42}) {}
+
+void test(int interfaceX) {}
+void test([int interfaceX]) {}
+void test([int interfaceX = 42]) {}
+void test({int interfaceX}) {}
+void test({int interfaceX: 42}) {}
+void test({int interfaceX = 42}) {}
+
+void test(int isX) {}
+void test([int isX]) {}
+void test([int isX = 42]) {}
+void test({int isX}) {}
+void test({int isX: 42}) {}
+void test({int isX = 42}) {}
+
+void test(int lateX) {}
+void test([int lateX]) {}
+void test([int lateX = 42]) {}
+void test({int lateX}) {}
+void test({int lateX: 42}) {}
+void test({int lateX = 42}) {}
+
+void test(int libraryX) {}
+void test([int libraryX]) {}
+void test([int libraryX = 42]) {}
+void test({int libraryX}) {}
+void test({int libraryX: 42}) {}
+void test({int libraryX = 42}) {}
+
+void test(int mixinX) {}
+void test([int mixinX]) {}
+void test([int mixinX = 42]) {}
+void test({int mixinX}) {}
+void test({int mixinX: 42}) {}
+void test({int mixinX = 42}) {}
+
+void test(int nativeX) {}
+void test([int nativeX]) {}
+void test([int nativeX = 42]) {}
+void test({int nativeX}) {}
+void test({int nativeX: 42}) {}
+void test({int nativeX = 42}) {}
+
+void test(int newX) {}
+void test([int newX]) {}
+void test([int newX = 42]) {}
+void test({int newX}) {}
+void test({int newX: 42}) {}
+void test({int newX = 42}) {}
+
+void test(int nullX) {}
+void test([int nullX]) {}
+void test([int nullX = 42]) {}
+void test({int nullX}) {}
+void test({int nullX: 42}) {}
+void test({int nullX = 42}) {}
+
+void test(int ofX) {}
+void test([int ofX]) {}
+void test([int ofX = 42]) {}
+void test({int ofX}) {}
+void test({int ofX: 42}) {}
+void test({int ofX = 42}) {}
+
+void test(int onX) {}
+void test([int onX]) {}
+void test([int onX = 42]) {}
+void test({int onX}) {}
+void test({int onX: 42}) {}
+void test({int onX = 42}) {}
+
+void test(int operatorX) {}
+void test([int operatorX]) {}
+void test([int operatorX = 42]) {}
+void test({int operatorX}) {}
+void test({int operatorX: 42}) {}
+void test({int operatorX = 42}) {}
+
+void test(int outX) {}
+void test([int outX]) {}
+void test([int outX = 42]) {}
+void test({int outX}) {}
+void test({int outX: 42}) {}
+void test({int outX = 42}) {}
+
+void test(int partX) {}
+void test([int partX]) {}
+void test([int partX = 42]) {}
+void test({int partX}) {}
+void test({int partX: 42}) {}
+void test({int partX = 42}) {}
+
+void test(int patchX) {}
+void test([int patchX]) {}
+void test([int patchX = 42]) {}
+void test({int patchX}) {}
+void test({int patchX: 42}) {}
+void test({int patchX = 42}) {}
+
+void test(int requiredX) {}
+void test([int requiredX]) {}
+void test([int requiredX = 42]) {}
+void test({int requiredX}) {}
+void test({int requiredX: 42}) {}
+void test({int requiredX = 42}) {}
+
+void test(int rethrowX) {}
+void test([int rethrowX]) {}
+void test([int rethrowX = 42]) {}
+void test({int rethrowX}) {}
+void test({int rethrowX: 42}) {}
+void test({int rethrowX = 42}) {}
+
+void test(int returnX) {}
+void test([int returnX]) {}
+void test([int returnX = 42]) {}
+void test({int returnX}) {}
+void test({int returnX: 42}) {}
+void test({int returnX = 42}) {}
+
+void test(int setX) {}
+void test([int setX]) {}
+void test([int setX = 42]) {}
+void test({int setX}) {}
+void test({int setX: 42}) {}
+void test({int setX = 42}) {}
+
+void test(int showX) {}
+void test([int showX]) {}
+void test([int showX = 42]) {}
+void test({int showX}) {}
+void test({int showX: 42}) {}
+void test({int showX = 42}) {}
+
+void test(int sourceX) {}
+void test([int sourceX]) {}
+void test([int sourceX = 42]) {}
+void test({int sourceX}) {}
+void test({int sourceX: 42}) {}
+void test({int sourceX = 42}) {}
+
+void test(int staticX) {}
+void test([int staticX]) {}
+void test([int staticX = 42]) {}
+void test({int staticX}) {}
+void test({int staticX: 42}) {}
+void test({int staticX = 42}) {}
+
+void test(int superX) {}
+void test([int superX]) {}
+void test([int superX = 42]) {}
+void test({int superX}) {}
+void test({int superX: 42}) {}
+void test({int superX = 42}) {}
+
+void test(int switchX) {}
+void test([int switchX]) {}
+void test([int switchX = 42]) {}
+void test({int switchX}) {}
+void test({int switchX: 42}) {}
+void test({int switchX = 42}) {}
+
+void test(int syncX) {}
+void test([int syncX]) {}
+void test([int syncX = 42]) {}
+void test({int syncX}) {}
+void test({int syncX: 42}) {}
+void test({int syncX = 42}) {}
+
+void test(int thisX) {}
+void test([int thisX]) {}
+void test([int thisX = 42]) {}
+void test({int thisX}) {}
+void test({int thisX: 42}) {}
+void test({int thisX = 42}) {}
+
+void test(int throwX) {}
+void test([int throwX]) {}
+void test([int throwX = 42]) {}
+void test({int throwX}) {}
+void test({int throwX: 42}) {}
+void test({int throwX = 42}) {}
+
+void test(int trueX) {}
+void test([int trueX]) {}
+void test([int trueX = 42]) {}
+void test({int trueX}) {}
+void test({int trueX: 42}) {}
+void test({int trueX = 42}) {}
+
+void test(int tryX) {}
+void test([int tryX]) {}
+void test([int tryX = 42]) {}
+void test({int tryX}) {}
+void test({int tryX: 42}) {}
+void test({int tryX = 42}) {}
+
+void test(int typedefX) {}
+void test([int typedefX]) {}
+void test([int typedefX = 42]) {}
+void test({int typedefX}) {}
+void test({int typedefX: 42}) {}
+void test({int typedefX = 42}) {}
+
+void test(int varX) {}
+void test([int varX]) {}
+void test([int varX = 42]) {}
+void test({int varX}) {}
+void test({int varX: 42}) {}
+void test({int varX = 42}) {}
+
+void test(int voidX) {}
+void test([int voidX]) {}
+void test([int voidX = 42]) {}
+void test({int voidX}) {}
+void test({int voidX: 42}) {}
+void test({int voidX = 42}) {}
+
+void test(int whileX) {}
+void test([int whileX]) {}
+void test([int whileX = 42]) {}
+void test({int whileX}) {}
+void test({int whileX: 42}) {}
+void test({int whileX = 42}) {}
+
+void test(int withX) {}
+void test([int withX]) {}
+void test([int withX = 42]) {}
+void test({int withX}) {}
+void test({int withX: 42}) {}
+void test({int withX = 42}) {}
+
+void test(int yieldX) {}
+void test([int yieldX]) {}
+void test([int yieldX = 42]) {}
+void test({int yieldX}) {}
+void test({int yieldX: 42}) {}
+void test({int yieldX = 42}) {}
+
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] abstractX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstractX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] abstractX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] abstractX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] asX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] assertX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assertX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] assertX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] assertX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] asyncX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asyncX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] asyncX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] asyncX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] awaitX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] awaitX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] awaitX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] awaitX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] breakX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] breakX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] breakX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] breakX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] caseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] caseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] caseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] caseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] catchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] catchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] catchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] classX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] classX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] classX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] classX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] constX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] constX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] constX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] constX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] continueX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continueX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] continueX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] continueX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] covariantX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariantX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] covariantX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] covariantX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] defaultX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] defaultX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] defaultX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] defaultX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] deferredX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferredX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] deferredX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] deferredX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] doX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] doX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] doX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] doX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] dynamicX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamicX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] dynamicX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] dynamicX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] elseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] elseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] elseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] elseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] enumX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enumX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] enumX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] enumX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] exportX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] exportX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] exportX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] exportX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extendsX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extendsX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extendsX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extendsX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] extensionX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extensionX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] extensionX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] extensionX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] externalX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] externalX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] externalX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] externalX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] factoryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factoryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] factoryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] factoryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] falseX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] falseX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] falseX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] falseX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finalX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finalX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finalX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finalX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] finallyX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finallyX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] finallyX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] finallyX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] forX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] forX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] forX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] forX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] FunctionX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] FunctionX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] FunctionX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] FunctionX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] getX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] getX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] getX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] getX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] hideX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hideX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] hideX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] hideX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] ifX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ifX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ifX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ifX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] implementsX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implementsX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] implementsX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] implementsX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] importX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] importX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] importX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] importX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] inoutX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inoutX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] inoutX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] inoutX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] interfaceX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interfaceX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] interfaceX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] interfaceX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] isX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] isX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] isX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] isX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] lateX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] lateX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] lateX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] lateX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] libraryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] libraryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] libraryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] libraryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] mixinX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixinX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] mixinX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] mixinX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] nativeX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nativeX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nativeX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nativeX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] newX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] newX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] newX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] newX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] nullX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nullX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] nullX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] nullX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] ofX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ofX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] ofX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] ofX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] onX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] onX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] onX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] operatorX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operatorX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] operatorX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] operatorX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] outX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] outX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] outX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] outX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] partX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] partX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] partX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] partX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] patchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] patchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] patchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] requiredX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] requiredX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] requiredX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] requiredX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] rethrowX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrowX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] rethrowX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] rethrowX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] returnX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] returnX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] returnX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] returnX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] setX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] setX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] setX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] setX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] showX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] showX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] showX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] showX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] sourceX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sourceX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] sourceX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] sourceX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] staticX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] staticX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] staticX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] staticX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] superX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] superX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] superX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] superX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] switchX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switchX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] switchX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] switchX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] syncX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] syncX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] syncX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] syncX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] thisX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] thisX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] thisX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] thisX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] throwX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throwX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] throwX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] throwX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] trueX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] trueX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] trueX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] trueX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] tryX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] tryX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] tryX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] tryX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] typedefX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedefX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] typedefX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] typedefX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] varX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] varX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] varX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] varX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] voidX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] voidX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] voidX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] voidX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] whileX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] whileX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] whileX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] whileX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] withX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] withX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] withX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] withX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] test[StringToken]([BeginToken]int[StringToken] yieldX[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yieldX[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken][[BeginToken]int[StringToken] yieldX[StringToken] =[SimpleToken] 42[StringToken]][SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken]:[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+void[KeywordToken] test[StringToken]([BeginToken]{[BeginToken]int[StringToken] yieldX[StringToken] =[SimpleToken] 42[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart
new file mode 100644
index 0000000..fc06480
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart
@@ -0,0 +1,2 @@
+f(x /* guess the user was typing here... */
+class C {}
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
new file mode 100644
index 0000000..ef7191f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
@@ -0,0 +1,50 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_formal_parameter_start_of_next_top_level:2:1: Expected a function body, but got 'class'.
+class C {}
+^^^^^
+
+parser/error_recovery/keyword_named_formal_parameter_start_of_next_top_level:1:2: Can't find ')' to match '('.
+f(x /* guess the user was typing here... */
+ ^
+
+beginCompilationUnit(f)
+  beginMetadataStar(f)
+  endMetadataStar(0)
+  beginTopLevelMember(f)
+    beginTopLevelMethod(UnmatchedToken((), null)
+      handleNoType(UnmatchedToken(())
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(x)
+        endMetadataStar(0)
+        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(class)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'class'., null, {lexeme: class}], class, class)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(f, null, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+  handleErrorToken(UnmatchedToken(())
+  handleRecoverableError(Message[UnmatchedToken, Can't find ')' to match '('., null, {string: ), lexeme: (}], UnmatchedToken((), UnmatchedToken(())
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..044cefa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
@@ -0,0 +1,79 @@
+parseUnit(UnmatchedToken(())
+  skipErrorTokens(UnmatchedToken(())
+  listener: beginCompilationUnit(f)
+  syntheticPreviousToken(f)
+  parseTopLevelDeclarationImpl(UnmatchedToken((), Instance of 'DirectiveContext')
+    parseMetadataStar(UnmatchedToken(())
+      listener: beginMetadataStar(f)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(UnmatchedToken(())
+      listener: beginTopLevelMember(f)
+      isReservedKeyword(()
+      parseTopLevelMethod(UnmatchedToken((), null, UnmatchedToken((), Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(UnmatchedToken((), null)
+        listener: handleNoType(UnmatchedToken(())
+        ensureIdentifierPotentiallyRecovered(UnmatchedToken((), topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(x)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(class)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              rewriter()
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+            reportRecoverableError(class, Message[ExpectedFunctionBody, Expected a function body, but got 'class'., null, {lexeme: class}])
+              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'class'., null, {lexeme: class}], class, class)
+            insertBlock())
+              rewriter()
+              rewriter()
+          listener: handleInvalidFunctionBody({)
+        listener: endTopLevelMethod(f, null, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(C)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(UnmatchedToken(())
+    listener: handleErrorToken(UnmatchedToken(())
+    listener: handleRecoverableError(Message[UnmatchedToken, Can't find ')' to match '('., null, {string: ), lexeme: (}], UnmatchedToken((), UnmatchedToken(())
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.parser.expect
new file mode 100644
index 0000000..2ce1661
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.parser.expect
@@ -0,0 +1,9 @@
+NOTICE: Stream was rewritten by parser!
+
+f(x
+){}class C {}
+
+
+[UnmatchedToken]f[StringToken]([BeginToken]x[StringToken]
+)[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]class[KeywordToken] C[StringToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.scanner.expect
new file mode 100644
index 0000000..ca0f491
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.scanner.expect
@@ -0,0 +1,7 @@
+f(x
+class C {}
+)
+
+[UnmatchedToken]f[StringToken]([BeginToken]x[StringToken]
+class[KeywordToken] C[StringToken] {[BeginToken]}[SimpleToken]
+)[SyntheticToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
index 0c446fc..076896b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
@@ -16,9 +16,9 @@
   return break(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:28:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:28:3: Expected ';' after this.
   return break(x-1) + 1;
-         ^^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:28:10: A break statement can't be used outside of a loop or switch statement.
   return break(x-1) + 1;
@@ -68,9 +68,9 @@
   return continue(x-1) + 1;
          ^^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:53:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:53:3: Expected ';' after this.
   return continue(x-1) + 1;
-         ^^^^^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:53:10: A continue statement can't be used outside of a loop or switch statement.
   return continue(x-1) + 1;
@@ -96,9 +96,9 @@
   return do(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:73:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:73:3: Expected ';' after this.
   return do(x-1) + 1;
-         ^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:74:1: Expected 'while' before this.
 }
@@ -124,17 +124,17 @@
   return else(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
   return else(x-1) + 1;
-         ^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:83:10: Expected an identifier, but got 'else'.
   return else(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
   return else(x-1) + 1;
-         ^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:83:10: Unexpected token ';'.
   return else(x-1) + 1;
@@ -168,17 +168,17 @@
   return final(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:123:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:3: Expected ';' after this.
   return final(x-1) + 1;
-         ^^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:123:15: Expected an identifier, but got '('.
   return final(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:15: Expected ';' after this.
   return final(x-1) + 1;
-               ^
+              ^
 
 parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
   return final(x-1) + 1;
@@ -188,9 +188,9 @@
   return final(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:19: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
   return final(x-1) + 1;
-                  ^
+                 ^
 
 parser/error_recovery/keyword_named_top_level_methods:123:19: Unexpected token ';'.
   return final(x-1) + 1;
@@ -216,9 +216,9 @@
   return for(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:133:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:133:3: Expected ';' after this.
   return for(x-1) + 1;
-         ^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
   return for(x-1) + 1;
@@ -228,9 +228,9 @@
   return for(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:133:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
   return for(x-1) + 1;
-                ^
+               ^
 
 parser/error_recovery/keyword_named_top_level_methods:133:19: '+' is not a prefix operator.
   return for(x-1) + 1;
@@ -244,9 +244,9 @@
   return if(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:153:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:153:3: Expected ';' after this.
   return if(x-1) + 1;
-         ^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:153:18: '+' is not a prefix operator.
   return if(x-1) + 1;
@@ -272,9 +272,9 @@
   return is(x-1) + 1;
            ^
 
-parser/error_recovery/keyword_named_top_level_methods:183:12: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:183:10: Expected ';' after this.
   return is(x-1) + 1;
-           ^
+         ^^
 
 parser/error_recovery/keyword_named_top_level_methods:206:5: 'new' can't be used as an identifier because it's a keyword.
 int new(int x) {
@@ -316,9 +316,9 @@
   return switch(x-1) + 1;
          ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:288:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:288:3: Expected ';' after this.
   return switch(x-1) + 1;
-         ^^^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:288:20: A switch statement must have a body, even if it is empty.
   return switch(x-1) + 1;
@@ -348,9 +348,9 @@
   return try(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:313:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:313:3: Expected ';' after this.
   return try(x-1) + 1;
-         ^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:313:10: A try statement must have a body, even if it is empty.
   return try(x-1) + 1;
@@ -368,17 +368,17 @@
   return var(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:323:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:3: Expected ';' after this.
   return var(x-1) + 1;
-         ^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:323:13: Expected an identifier, but got '('.
   return var(x-1) + 1;
             ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:14: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:13: Expected ';' after this.
   return var(x-1) + 1;
-             ^
+            ^
 
 parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
   return var(x-1) + 1;
@@ -388,9 +388,9 @@
   return var(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
   return var(x-1) + 1;
-                ^
+               ^
 
 parser/error_recovery/keyword_named_top_level_methods:323:17: Unexpected token ';'.
   return var(x-1) + 1;
@@ -408,17 +408,17 @@
   return void(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:328:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:3: Expected ';' after this.
   return void(x-1) + 1;
-         ^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:328:14: Expected an identifier, but got '('.
   return void(x-1) + 1;
              ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:15: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:14: Expected ';' after this.
   return void(x-1) + 1;
-              ^
+             ^
 
 parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
   return void(x-1) + 1;
@@ -428,9 +428,9 @@
   return void(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:18: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
   return void(x-1) + 1;
-                 ^
+                ^
 
 parser/error_recovery/keyword_named_top_level_methods:328:18: Unexpected token ';'.
   return void(x-1) + 1;
@@ -448,9 +448,9 @@
   return while(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:333:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:333:3: Expected ';' after this.
   return while(x-1) + 1;
-         ^^^^^
+  ^^^^^^
 
 parser/error_recovery/keyword_named_top_level_methods:333:21: '+' is not a prefix operator.
   return while(x-1) + 1;
@@ -793,7 +793,7 @@
           handleNoTypeArguments(break)
           handleNoArguments(break)
           handleSend(, break)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         handleRecoverableError(BreakOutsideOfLoop, break, break)
         handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
@@ -1035,7 +1035,7 @@
             beginConstructorReference()
               handleNoTypeArguments(()
               handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
+            endConstructorReference(, null, (, ConstructorReferenceContext.Const)
             beginArguments(()
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -1097,7 +1097,7 @@
           handleNoTypeArguments(continue)
           handleNoArguments(continue)
           handleSend(, continue)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
         handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
@@ -1334,7 +1334,7 @@
           handleNoTypeArguments(do)
           handleNoArguments(do)
           handleSend(, do)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginDoWhileStatement(do)
           beginDoWhileStatementBody(()
@@ -1465,14 +1465,14 @@
           handleNoTypeArguments(else)
           handleNoArguments(else)
           handleSend(, else)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
         handleIdentifier(, expression)
         handleNoTypeArguments(else)
         handleNoArguments(else)
         handleSend(, else)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         handleExpressionStatement(;)
         handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], else, else)
         handleIdentifier(x, expression)
@@ -1938,7 +1938,7 @@
           handleNoTypeArguments(final)
           handleNoArguments(final)
           handleSend(, final)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -1949,7 +1949,7 @@
           beginInitializedIdentifier()
             handleNoVariableInitializer()
           endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
         endVariablesDeclaration(1, ;)
         handleIdentifier(x, expression)
         handleNoTypeArguments(-)
@@ -1965,7 +1965,7 @@
         handleNoTypeArguments())
         handleNoArguments())
         handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
         handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
         handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -2083,7 +2083,7 @@
           handleNoTypeArguments(for)
           handleNoArguments(for)
           handleSend(, for)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginForStatement(for)
           handleIdentifier(x, expression)
@@ -2100,7 +2100,7 @@
           handleNoTypeArguments())
           handleNoArguments())
           handleSend(, ))
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
           handleExpressionStatement(;)
           handleForLoopParts(for, (, ;, 0)
           beginForStatementBody(+)
@@ -2333,7 +2333,7 @@
           handleNoTypeArguments(if)
           handleNoArguments(if)
           handleSend(, if)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginIfStatement(if)
           handleIdentifier(x, expression)
@@ -2697,7 +2697,7 @@
             handleType(, null)
           endIsOperatorType(is)
           handleIsOperator(is, null)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
         endReturnStatement(true, return, ;)
         handleIdentifier(x, expression)
         handleNoTypeArguments(-)
@@ -2987,7 +2987,7 @@
             beginConstructorReference()
               handleNoTypeArguments(()
               handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
+            endConstructorReference(, null, (, ConstructorReferenceContext.New)
             beginArguments(()
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
@@ -3906,7 +3906,7 @@
           handleNoTypeArguments(switch)
           handleNoArguments(switch)
           handleSend(, switch)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginSwitchStatement(switch)
           handleIdentifier(x, expression)
@@ -4205,7 +4205,7 @@
           handleNoTypeArguments(try)
           handleNoArguments(try)
           handleSend(, try)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginTryStatement(try)
           handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
@@ -4329,7 +4329,7 @@
           handleNoTypeArguments(var)
           handleNoArguments(var)
           handleSend(, var)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginMetadataStar(var)
         endMetadataStar(0)
@@ -4340,7 +4340,7 @@
           beginInitializedIdentifier()
             handleNoVariableInitializer()
           endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
         endVariablesDeclaration(1, ;)
         handleIdentifier(x, expression)
         handleNoTypeArguments(-)
@@ -4356,7 +4356,7 @@
         handleNoTypeArguments())
         handleNoArguments())
         handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
         handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
         handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4415,7 +4415,7 @@
           handleNoTypeArguments(void)
           handleNoArguments(void)
           handleSend(, void)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -4426,7 +4426,7 @@
           beginInitializedIdentifier()
             handleNoVariableInitializer()
           endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
         endVariablesDeclaration(1, ;)
         handleIdentifier(x, expression)
         handleNoTypeArguments(-)
@@ -4442,7 +4442,7 @@
         handleNoTypeArguments())
         handleNoArguments())
         handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
         handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
         handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4501,7 +4501,7 @@
           handleNoTypeArguments(while)
           handleNoArguments(while)
           handleSend(, while)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
         endReturnStatement(true, return, ;)
         beginWhileStatement(while)
           handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
index 3e3f317..9c70513 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
@@ -808,8 +808,8 @@
                             listener: handleNoArguments(break)
                           listener: handleSend(, break)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -1401,7 +1401,7 @@
                       parsePrimary(return, expression)
                         parseConstExpression(return)
                           listener: beginConstExpression(const)
-                          parseConstructorReference(const, null)
+                          parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                             ensureIdentifier(const, constructorReference)
                               insertSyntheticIdentifier(const, constructorReference, 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: (}])
@@ -1412,7 +1412,7 @@
                             parseQualifiedRestOpt(, constructorReferenceContinuation)
                             listener: handleNoTypeArguments(()
                             listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
+                            listener: endConstructorReference(, null, (, ConstructorReferenceContext.Const)
                           parseConstructorInvocationArguments()
                             parseArgumentsRest(()
                               listener: beginArguments(()
@@ -1560,8 +1560,8 @@
                             listener: handleNoArguments(continue)
                           listener: handleSend(, continue)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -2158,8 +2158,8 @@
                             listener: handleNoArguments(do)
                           listener: handleSend(, do)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -2241,7 +2241,7 @@
                     ensureCloseParen(, ()
                   listener: handleParenthesizedCondition(()
                 ensureSemicolon())
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                  reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
                   rewriter()
                 listener: endDoWhileStatement(do, while, ;)
@@ -2497,8 +2497,8 @@
                             listener: handleNoArguments(else)
                           listener: handleSend(, else)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -2526,8 +2526,8 @@
                                 listener: handleNoArguments(else)
                               listener: handleSend(, else)
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+                      reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                       rewriter()
                     listener: handleExpressionStatement(;)
           reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -3674,8 +3674,8 @@
                             listener: handleNoArguments(final)
                           listener: handleSend(, final)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -3700,8 +3700,8 @@
                       listener: handleNoVariableInitializer()
                     listener: endInitializedIdentifier()
                   ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                    reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                     rewriter()
                   listener: endVariablesDeclaration(1, ;)
           notEofOrValue(}, x)
@@ -3758,8 +3758,8 @@
                                 listener: handleNoArguments())
                               listener: handleSend(, ))
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                       rewriter()
                     listener: handleExpressionStatement(;)
           reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -4052,8 +4052,8 @@
                             listener: handleNoArguments(for)
                           listener: handleSend(, for)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -4110,8 +4110,8 @@
                                   listener: handleNoArguments())
                                 listener: handleSend(, ))
                       ensureSemicolon()
-                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                        reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                         rewriter()
                       listener: handleExpressionStatement(;)
                     listener: handleForLoopParts(for, (, ;, 0)
@@ -4682,8 +4682,8 @@
                             listener: handleNoArguments(if)
                           listener: handleSend(, if)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -5578,8 +5578,8 @@
                       listener: handleIsOperator(is, null)
                       skipChainedAsIsOperators()
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+                  reportRecoverableError(is, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -6291,7 +6291,7 @@
                         parseNewExpression(return)
                           isNextIdentifier(new)
                           listener: beginNewExpression(new)
-                          parseConstructorReference(new, null)
+                          parseConstructorReference(new, ConstructorReferenceContext.New, null)
                             ensureIdentifier(new, constructorReference)
                               insertSyntheticIdentifier(new, constructorReference, 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: (}])
@@ -6302,7 +6302,7 @@
                             parseQualifiedRestOpt(, constructorReferenceContinuation)
                             listener: handleNoTypeArguments(()
                             listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
+                            listener: endConstructorReference(, null, (, ConstructorReferenceContext.New)
                           parseConstructorInvocationArguments()
                             parseArgumentsRest(()
                               listener: beginArguments(()
@@ -8547,8 +8547,8 @@
                             listener: handleNoArguments(switch)
                           listener: handleSend(, switch)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -9288,8 +9288,8 @@
                             listener: handleNoArguments(try)
                           listener: handleSend(, try)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -9609,8 +9609,8 @@
                             listener: handleNoArguments(var)
                           listener: handleSend(, var)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -9635,8 +9635,8 @@
                       listener: handleNoVariableInitializer()
                     listener: endInitializedIdentifier()
                   ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                    reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                     rewriter()
                   listener: endVariablesDeclaration(1, ;)
           notEofOrValue(}, x)
@@ -9693,8 +9693,8 @@
                                 listener: handleNoArguments())
                               listener: handleSend(, ))
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                       rewriter()
                     listener: handleExpressionStatement(;)
           reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -9844,8 +9844,8 @@
                               listener: handleNoArguments(void)
                             listener: handleSend(, void)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
@@ -9871,8 +9871,8 @@
                         listener: handleNoVariableInitializer()
                       listener: endInitializedIdentifier()
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                      reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
                       rewriter()
                     listener: endVariablesDeclaration(1, ;)
           notEofOrValue(}, x)
@@ -9929,8 +9929,8 @@
                                 listener: handleNoArguments())
                               listener: handleSend(, ))
                     ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
                       rewriter()
                     listener: handleExpressionStatement(;)
           reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10080,8 +10080,8 @@
                             listener: handleNoArguments(while)
                           listener: handleSend(, while)
                 ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+                  reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
                   rewriter()
                 listener: endReturnStatement(true, return, ;)
                 inGenerator()
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 1d63845..a502ee7 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -68,7 +68,7 @@
           beginConstructorReference(A)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(A, null, ()
+          endConstructorReference(A, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
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 ac6be71..dc87b68 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
@@ -139,14 +139,14 @@
                                       parseNewExpression(()
                                         isNextIdentifier(new)
                                         listener: beginNewExpression(new)
-                                        parseConstructorReference(new, null)
+                                        parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                           ensureIdentifier(new, constructorReference)
                                             listener: handleIdentifier(A, constructorReference)
                                           listener: beginConstructorReference(A)
                                           parseQualifiedRestOpt(A, constructorReferenceContinuation)
                                           listener: handleNoTypeArguments(()
                                           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                          listener: endConstructorReference(A, null, ()
+                                          listener: endConstructorReference(A, null, (, ConstructorReferenceContext.New)
                                         parseConstructorInvocationArguments(A)
                                           parseArgumentsRest(()
                                             listener: beginArguments(()
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
index d426546..2f3c136 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
@@ -5,17 +5,8 @@
 // The test cases called `typeArgs_...` verify that `<` and `>` are treated as
 // delimiting type arguments when the `>` is followed by one of the tokens:
 //
-//     ( ) ] } : ; , . ? == != .. ?. ?? ?..
-//     & | ^ + * %  / ~/
-//
-// Unless otherwise noted, these test cases should not result in a parse error,
-// because they can be made into valid expressions through user-defined
-// operators.
+//     ( . == != ) ] } ; : ,
 
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
 var typeArgs_closeBrace = {f<a, b>};
 var typeArgs_closeBracket = [f<a, b>];
 var typeArgs_closeParen = g(f<a, b>);
@@ -28,41 +19,29 @@
 // parsed as a MethodInvocation rather than a GenericInstantiation.
 var typeArgs_openParen = f<a, b>();
 
-var typeArgs_percent = f<a, b> % 0;
-
 // This is a special case because `f<a, b>.methodName(...)` is parsed as an
 // InstanceCreationExpression.
 var typeArgs_period_methodInvocation = f<a, b>.toString();
 
 var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
 var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
 
-// Note: this could never be a valid expression because the thing to the left of
-// `?` is required to have type `bool`, and `f<a, b>` can only have type `Type`
-// or a function type.  But it is not the responsibility of the parser to report
-// an error here; that should be done by type analysis.
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
 var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
 
 // The test cases called `operators_...` verify that `<` and `>` are treated as
 // operators when the `>` is not followed by one of the tokens:
 //
-//     ( ) ] } : ; , . ? == != .. ?. ?? ?..
-//     & | ^ + * %  / ~/
+//     ( . == != ) ] } ; : ,
 //
-// Unless otherwise noted, these test cases should not result in a parse error,
-// because they can be made into valid expressions through user-defined
-// operators.
+// Except as noted, these test cases should result in parse errors.
+
+var operators_ampersand = f(a<b,c>&d);
+
+// Note: this should not be a parse error since it is allowed to have an
+// identifier called `as`.
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*d);
 
 // Note: this could never be a valid expression because the thing to the right
 // of `!` is required to have type `bool`, and the type of `[d]` will always be
@@ -70,15 +49,26 @@
 // error here; that should be done by type analysis.
 var operators_bang_openBracket = f(a<b,c>![d]);
 
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `bool`.
 var operators_bang_paren = f(a<b,c>!(d));
 
+var operators_bar = f(a<b,c>|d);
+var operators_caret = f(a<b,c>^d);
+var operators_is = f(a<b,c> is int);
+
 // Note: in principle we could parse this as a generic instantiation of a
 // generic instantiation, but since `<` is not one of the tokens that signals
 // `<` and `>` to be treated as type argument delimiters, the first pair of `<`
 // and `>` is treated as operators, and this results in a parse error.
 var operators_lessThan = f<a><b>;
 
+// Note: this should not be a parse error (indeed, this is valid if `a`, `b`,
+// `c`, and `d` are all of type `num`).
 var operators_minus = f(a<b,c>-d);
+
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `List`.
 var operators_openBracket = f(a<b,c>[d]);
 
 // Note: in principle we could parse `<b, c>` as type arguments, `[d]` as an
@@ -88,4 +78,18 @@
 // in a parse error.
 var operators_openBracket_error = f(a<b,c>[d]>e);
 
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `List`.
 var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
+
+var operators_percent = f(a<b,c>%d);
+var operators_period_period = f(a<b,c>..toString());
+var operators_plus = f(a<b,c>+d);
+var operators_question = f(a<b,c> ? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..toString());
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+var operators_question_question = f(a<b,c> ?? d);
+var operators_slash = f(a<b,c>/d);
+var operators_tilde_slash = f(a<b,c>~/d);
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 1acd3c2..eb3e565 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
@@ -1,127 +1,91 @@
 Problems reported:
 
-parser/general/function_reference_following_token:79:29: A comparison expression can't be an operand of another comparison expression.
+parser/general/function_reference_following_token:38:35: Expected an identifier, but got '&'.
+var operators_ampersand = f(a<b,c>&d);
+                                  ^
+
+parser/general/function_reference_following_token:44:34: Expected an identifier, but got '*'.
+var operators_asterisk = f(a<b,c>*d);
+                                 ^
+
+parser/general/function_reference_following_token:56:29: Expected an identifier, but got '|'.
+var operators_bar = f(a<b,c>|d);
+                            ^
+
+parser/general/function_reference_following_token:57:31: Expected an identifier, but got '^'.
+var operators_caret = f(a<b,c>^d);
+                              ^
+
+parser/general/function_reference_following_token:58:29: Expected an identifier, but got 'is'.
+var operators_is = f(a<b,c> is int);
+                            ^^
+
+parser/general/function_reference_following_token:64:29: A comparison expression can't be an operand of another comparison expression.
 var operators_lessThan = f<a><b>;
                             ^
 
-parser/general/function_reference_following_token:79:33: Expected '[' before this.
+parser/general/function_reference_following_token:64:33: Expected '[' before this.
 var operators_lessThan = f<a><b>;
                                 ^
 
-parser/general/function_reference_following_token:89:46: A comparison expression can't be an operand of another comparison expression.
+parser/general/function_reference_following_token:79:46: A comparison expression can't be an operand of another comparison expression.
 var operators_openBracket_error = f(a<b,c>[d]>e);
                                              ^
 
+parser/general/function_reference_following_token:85:33: Expected an identifier, but got '%'.
+var operators_percent = f(a<b,c>%d);
+                                ^
+
+parser/general/function_reference_following_token:86:39: Expected an identifier, but got '..'.
+var operators_period_period = f(a<b,c>..toString());
+                                      ^^
+
+parser/general/function_reference_following_token:87:30: '+' is not a prefix operator.
+var operators_plus = f(a<b,c>+d);
+                             ^
+
+parser/general/function_reference_following_token:88:35: Expected an identifier, but got '?'.
+var operators_question = f(a<b,c> ? null : null);
+                                  ^
+
+parser/general/function_reference_following_token:89:58: Expected an identifier, but got '?.'.
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+                                                         ^^
+
+parser/general/function_reference_following_token:90:66: Expected an identifier, but got '?.'.
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+                                                                 ^^
+
+parser/general/function_reference_following_token:91:48: Expected an identifier, but got '?..'.
+var operators_question_period_period = f(a<b,c>?..toString());
+                                               ^^^
+
+parser/general/function_reference_following_token:91:51: Expected ',' before this.
+var operators_question_period_period = f(a<b,c>?..toString());
+                                                  ^^^^^^^^
+
+parser/general/function_reference_following_token:92:56: Expected an identifier, but got '?.'.
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+                                                       ^^
+
+parser/general/function_reference_following_token:93:44: Expected an identifier, but got '??'.
+var operators_question_question = f(a<b,c> ?? d);
+                                           ^^
+
+parser/general/function_reference_following_token:94:31: Expected an identifier, but got '/'.
+var operators_slash = f(a<b,c>/d);
+                              ^
+
+parser/general/function_reference_following_token:95:37: Expected an identifier, but got '~/'.
+var operators_tilde_slash = f(a<b,c>~/d);
+                                    ^^
+
 beginCompilationUnit(var)
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
     beginFields()
       handleNoType(var)
-      handleIdentifier(typeArgs_ampersand, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(&)
-          handleLiteralInt(0)
-        endBinaryExpression(&)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_asterisk, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(*)
-          handleLiteralInt(0)
-        endBinaryExpression(*)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_bar, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(|)
-          handleLiteralInt(0)
-        endBinaryExpression(|)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_caret, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(^)
-          handleLiteralInt(0)
-        endBinaryExpression(^)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
       handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleNoTypeArguments({)
@@ -327,32 +291,6 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
-      handleIdentifier(typeArgs_percent, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(%)
-          handleLiteralInt(0)
-        endBinaryExpression(%)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
       handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         beginImplicitCreationExpression(=)
@@ -367,7 +305,7 @@
               handleType(b, null)
             endTypeArguments(2, <, >)
             handleIdentifier(toString, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(f, ., ()
+          endConstructorReference(f, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
         endImplicitCreationExpression(=)
@@ -412,37 +350,6 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
-      handleIdentifier(typeArgs_period_period, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginCascade(..)
-          handleIdentifier(toString, expressionContinuation)
-          handleNoTypeArguments(()
-          beginArguments(()
-          endArguments(0, (, ))
-          handleSend(toString, ;)
-          handleEndingBinaryExpression(..)
-        endCascade()
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
       handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleIdentifier(f, expression)
@@ -471,207 +378,6 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
-      handleIdentifier(typeArgs_plus, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(+)
-          handleLiteralInt(0)
-        endBinaryExpression(+)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginConditionalExpression(?)
-          handleLiteralNull(null)
-          handleConditionalExpressionColon()
-          handleLiteralNull(null)
-        endConditionalExpression(?, :)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question_period_methodInvocation, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        handleIdentifier(toString, expressionContinuation)
-        handleNoTypeArguments(()
-        beginArguments(()
-        endArguments(0, (, ))
-        handleSend(toString, ;)
-        handleEndingBinaryExpression(?.)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question_period_methodInvocation_generic, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        handleIdentifier(foo, expressionContinuation)
-        beginTypeArguments(<)
-          handleIdentifier(c, typeReference)
-          handleNoTypeArguments(>)
-          handleType(c, null)
-        endTypeArguments(1, <, >)
-        beginArguments(()
-        endArguments(0, (, ))
-        handleSend(foo, ;)
-        handleEndingBinaryExpression(?.)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question_period_period, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginCascade(?..)
-          handleIdentifier(toString, expressionContinuation)
-          handleNoTypeArguments(()
-          beginArguments(()
-          endArguments(0, (, ))
-          handleSend(toString, ;)
-          handleEndingBinaryExpression(?..)
-        endCascade()
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question_period_propertyAccess, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        handleIdentifier(hashCode, expressionContinuation)
-        handleNoTypeArguments(;)
-        handleNoArguments(;)
-        handleSend(hashCode, ;)
-        handleEndingBinaryExpression(?.)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
-      handleIdentifier(typeArgs_question_question, topLevelVariableDeclaration)
-      beginFieldInitializer(=)
-        handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
-          handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(??)
-          handleLiteralInt(0)
-        endBinaryExpression(??)
-      endFieldInitializer(=, ;)
-    endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  endTopLevelDeclaration(var)
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginTopLevelMember(var)
-    beginFields(;)
-      handleNoType(var)
       handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleIdentifier(f, expression)
@@ -695,24 +401,40 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
-      handleIdentifier(typeArgs_slash, topLevelVariableDeclaration)
+      handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
           handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(/)
-          handleLiteralInt(1)
-        endBinaryExpression(/)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '&'., Try inserting an identifier before '&'., {lexeme: &}], &, &)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(&)
+            handleNoArguments(&)
+            handleSend(, &)
+            beginBinaryExpression(&)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(&)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration(var)
@@ -721,24 +443,75 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
-      handleIdentifier(typeArgs_tilde_slash, topLevelVariableDeclaration)
+      handleIdentifier(operators_as, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleIdentifier(f, expression)
-        handleNoTypeArguments(<)
-        handleNoArguments(<)
-        handleSend(f, <)
-        beginTypeArguments(<)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(,)
-          handleType(a, null)
-          handleIdentifier(b, typeReference)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
           handleNoTypeArguments(>)
-          handleType(b, null)
-        endTypeArguments(2, <, >)
-        handleTypeArgumentApplication(<)
-        beginBinaryExpression(~/)
-          handleLiteralInt(1)
-        endBinaryExpression(~/)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleIdentifier(as, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(as, ))
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '*'., Try inserting an identifier before '*'., {lexeme: *}], *, *)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(*)
+            handleNoArguments(*)
+            handleSend(, *)
+            beginBinaryExpression(*)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(*)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration(var)
@@ -822,6 +595,132 @@
   beginTopLevelMember(var)
     beginFields(;)
       handleNoType(var)
+      handleIdentifier(operators_bar, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '|'., Try inserting an identifier before '|'., {lexeme: |}], |, |)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(|)
+            handleNoArguments(|)
+            handleSend(, |)
+            beginBinaryExpression(|)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(|)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_caret, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '^'., Try inserting an identifier before '^'., {lexeme: ^}], ^, ^)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(^)
+            handleNoArguments(^)
+            handleSend(, ^)
+            beginBinaryExpression(^)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(^)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_is, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(is)
+            handleNoArguments(is)
+            handleSend(, is)
+          endBinaryExpression(>)
+          beginIsOperatorType(is)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments())
+            handleType(int, null)
+          endIsOperatorType(is)
+          handleIsOperator(is, null)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
       handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
       beginFieldInitializer(=)
         handleIdentifier(f, expression)
@@ -1004,5 +903,471 @@
         handleSend(f, ;)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_percent, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '%'., Try inserting an identifier before '%'., {lexeme: %}], %, %)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(%)
+            handleNoArguments(%)
+            handleSend(, %)
+            beginBinaryExpression(%)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(%)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_period_period, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '..'., Try inserting an identifier before '..'., {lexeme: ..}], .., ..)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(..)
+            handleNoArguments(..)
+            handleSend(, ..)
+          endBinaryExpression(>)
+          beginCascade(..)
+            handleIdentifier(toString, expressionContinuation)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(toString, ))
+            handleEndingBinaryExpression(..)
+          endCascade()
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_plus, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(+)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?'., Try inserting an identifier before '?'., {lexeme: ?}], ?, ?)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(?)
+            handleNoArguments(?)
+            handleSend(, ?)
+          endBinaryExpression(>)
+          beginConditionalExpression(?)
+            handleLiteralNull(null)
+            handleConditionalExpressionColon()
+            handleLiteralNull(null)
+          endConditionalExpression(?, :)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(?.)
+            handleNoArguments(?.)
+            handleSend(, ?.)
+            handleIdentifier(toString, expressionContinuation)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(toString, ))
+            handleEndingBinaryExpression(?.)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(?.)
+            handleNoArguments(?.)
+            handleSend(, ?.)
+            handleIdentifier(foo, expressionContinuation)
+            beginTypeArguments(<)
+              handleIdentifier(c, typeReference)
+              handleNoTypeArguments(>)
+              handleType(c, null)
+            endTypeArguments(1, <, >)
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(foo, ))
+            handleEndingBinaryExpression(?.)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?..'., Try inserting an identifier before '?..'., {lexeme: ?..}], ?.., ?..)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(toString)
+            handleNoArguments(toString)
+            handleSend(, toString)
+          endBinaryExpression(>)
+          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], toString, toString)
+          handleIdentifier(toString, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(toString, ))
+        endArguments(3, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(?.)
+            handleNoArguments(?.)
+            handleSend(, ?.)
+            handleIdentifier(hashCode, expressionContinuation)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(hashCode, ))
+            handleEndingBinaryExpression(?.)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_question_question, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '??'., Try inserting an identifier before '??'., {lexeme: ??}], ??, ??)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(??)
+            handleNoArguments(??)
+            handleSend(, ??)
+          endBinaryExpression(>)
+          beginBinaryExpression(??)
+            handleIdentifier(d, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(d, ))
+          endBinaryExpression(??)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_slash, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '/'., Try inserting an identifier before '/'., {lexeme: /}], /, /)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(/)
+            handleNoArguments(/)
+            handleSend(, /)
+            beginBinaryExpression(/)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(/)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  endTopLevelDeclaration(var)
+  beginMetadataStar(var)
+  endMetadataStar(0)
+  beginTopLevelMember(var)
+    beginFields(;)
+      handleNoType(var)
+      handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(a, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(a, <)
+          beginBinaryExpression(<)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(b, ,)
+          endBinaryExpression(<)
+          handleIdentifier(c, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(c, >)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '~/'., Try inserting an identifier before '~/'., {lexeme: ~/}], ~/, ~/)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(~/)
+            handleNoArguments(~/)
+            handleSend(, ~/)
+            beginBinaryExpression(~/)
+              handleIdentifier(d, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(d, ))
+            endBinaryExpression(~/)
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration()
-endCompilationUnit(34, )
+endCompilationUnit(36, )
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 c8fe425..ffafde7 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
@@ -8,190 +8,10 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
-      parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_ampersand, DeclarationKind.TopLevel, null, false)
+      parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
         listener: beginFields()
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_ampersand, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_ampersand, typeArgs_ampersand, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(&)
-              parsePrecedenceExpression(&, 12, true)
-                parseUnaryExpression(&, true)
-                  parsePrimary(&, expression)
-                    parseLiteralInt(&)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(&)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_asterisk, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_asterisk, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_asterisk, typeArgs_asterisk, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(*)
-              parsePrecedenceExpression(*, 15, true)
-                parseUnaryExpression(*, true)
-                  parsePrimary(*, expression)
-                    parseLiteralInt(*)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(*)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_bar, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_bar, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_bar, typeArgs_bar, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(|)
-              parsePrecedenceExpression(|, 10, true)
-                parseUnaryExpression(|, true)
-                  parsePrimary(|, expression)
-                    parseLiteralInt(|)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(|)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_caret, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_caret, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_caret, typeArgs_caret, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(^)
-              parsePrecedenceExpression(^, 11, true)
-                parseUnaryExpression(^, true)
-                  parsePrimary(^, expression)
-                    parseLiteralInt(^)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(^)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
         parseFieldInitializerOpt(typeArgs_closeBrace, typeArgs_closeBrace, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
@@ -566,51 +386,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_percent, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_percent, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_percent, typeArgs_percent, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(%)
-              parsePrecedenceExpression(%, 15, true)
-                parseUnaryExpression(%, true)
-                  parsePrimary(%, expression)
-                    parseLiteralInt(%)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(%)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    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: handleNoType(var)
@@ -623,7 +398,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, Instance of 'ComplexTypeParamOrArgInfo')
                   listener: beginImplicitCreationExpression(=)
-                  parseConstructorReference(=, Instance of 'ComplexTypeParamOrArgInfo')
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'ComplexTypeParamOrArgInfo')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(f, constructorReference)
                     listener: beginConstructorReference(f)
@@ -638,7 +413,7 @@
                     listener: endTypeArguments(2, <, >)
                     ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
                       listener: handleIdentifier(toString, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(f, ., ()
+                    listener: endConstructorReference(f, ., (, ConstructorReferenceContext.Implicit)
                   parseConstructorInvocationArguments(toString)
                     parseArgumentsRest(()
                       listener: beginArguments(()
@@ -710,60 +485,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_period_period, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_period_period, typeArgs_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parseCascadeExpression(>)
-                listener: beginCascade(..)
-                parseSend(.., expressionContinuation)
-                  isNextIdentifier(..)
-                  ensureIdentifier(.., expressionContinuation)
-                    listener: handleIdentifier(toString, expressionContinuation)
-                  listener: handleNoTypeArguments(()
-                  parseArgumentsOpt(toString)
-                    parseArguments(toString)
-                      parseArgumentsRest(()
-                        listener: beginArguments(()
-                        listener: endArguments(0, (, ))
-                  listener: handleSend(toString, ;)
-                listener: handleEndingBinaryExpression(..)
-                parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
-                listener: endCascade()
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    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: handleNoType(var)
@@ -813,364 +534,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_plus, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_plus, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_plus, typeArgs_plus, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(+)
-              parsePrecedenceExpression(+, 14, true)
-                parseUnaryExpression(+, true)
-                  parsePrimary(+, expression)
-                    parseLiteralInt(+)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(+)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question, typeArgs_question, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parseConditionalExpressionRest(>)
-                listener: beginConditionalExpression(?)
-                parseExpressionWithoutCascade(?)
-                  parsePrecedenceExpression(?, 1, false)
-                    parseUnaryExpression(?, false)
-                      parsePrimary(?, expression)
-                        parseLiteralNull(?)
-                          listener: handleLiteralNull(null)
-                ensureColon(null)
-                listener: handleConditionalExpressionColon()
-                parseExpressionWithoutCascade(:)
-                  parsePrecedenceExpression(:, 1, false)
-                    parseUnaryExpression(:, false)
-                      parsePrimary(:, expression)
-                        parseLiteralNull(:)
-                          listener: handleLiteralNull(null)
-                listener: endConditionalExpression(?, :)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question_period_methodInvocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question_period_methodInvocation, typeArgs_question_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parsePrimary(?., expressionContinuation)
-                parseSendOrFunctionLiteral(?., expressionContinuation)
-                  looksLikeFunctionBody(;)
-                  parseSend(?., expressionContinuation)
-                    isNextIdentifier(?.)
-                    ensureIdentifier(?., expressionContinuation)
-                      listener: handleIdentifier(toString, expressionContinuation)
-                    listener: handleNoTypeArguments(()
-                    parseArgumentsOpt(toString)
-                      parseArguments(toString)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          listener: endArguments(0, (, ))
-                    listener: handleSend(toString, ;)
-              listener: handleEndingBinaryExpression(?.)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question_period_methodInvocation_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question_period_methodInvocation_generic, typeArgs_question_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parsePrimary(?., expressionContinuation)
-                parseSendOrFunctionLiteral(?., expressionContinuation)
-                  looksLikeFunctionBody(;)
-                  parseSend(?., expressionContinuation)
-                    isNextIdentifier(?.)
-                    ensureIdentifier(?., expressionContinuation)
-                      listener: handleIdentifier(foo, expressionContinuation)
-                    listener: beginTypeArguments(<)
-                    listener: handleIdentifier(c, typeReference)
-                    listener: handleNoTypeArguments(>)
-                    listener: handleType(c, null)
-                    listener: endTypeArguments(1, <, >)
-                    parseArgumentsOpt(>)
-                      parseArguments(>)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          listener: endArguments(0, (, ))
-                    listener: handleSend(foo, ;)
-              listener: handleEndingBinaryExpression(?.)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question_period_period, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question_period_period, typeArgs_question_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parseCascadeExpression(>)
-                listener: beginCascade(?..)
-                parseSend(?.., expressionContinuation)
-                  isNextIdentifier(?..)
-                  ensureIdentifier(?.., expressionContinuation)
-                    listener: handleIdentifier(toString, expressionContinuation)
-                  listener: handleNoTypeArguments(()
-                  parseArgumentsOpt(toString)
-                    parseArguments(toString)
-                      parseArgumentsRest(()
-                        listener: beginArguments(()
-                        listener: endArguments(0, (, ))
-                  listener: handleSend(toString, ;)
-                listener: handleEndingBinaryExpression(?..)
-                parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
-                listener: endCascade()
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question_period_propertyAccess, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question_period_propertyAccess, typeArgs_question_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              parsePrimary(?., expressionContinuation)
-                parseSendOrFunctionLiteral(?., expressionContinuation)
-                  parseSend(?., expressionContinuation)
-                    isNextIdentifier(?.)
-                    ensureIdentifier(?., expressionContinuation)
-                      listener: handleIdentifier(hashCode, expressionContinuation)
-                    listener: handleNoTypeArguments(;)
-                    parseArgumentsOpt(hashCode)
-                      listener: handleNoArguments(;)
-                    listener: handleSend(hashCode, ;)
-              listener: handleEndingBinaryExpression(?.)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
-        listener: handleNoType(var)
-        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_question_question, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_question_question, typeArgs_question_question, null, null, null, var, DeclarationKind.TopLevel, null)
-          listener: beginFieldInitializer(=)
-          parseExpression(=)
-            parsePrecedenceExpression(=, 1, true)
-              parseUnaryExpression(=, true)
-                parsePrimary(=, expression)
-                  parseSendOrFunctionLiteral(=, expression)
-                    parseSend(=, expression)
-                      isNextIdentifier(=)
-                      ensureIdentifier(=, expression)
-                        listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
-                      parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(??)
-              parsePrecedenceExpression(??, 5, true)
-                parseUnaryExpression(??, true)
-                  parsePrimary(??, expression)
-                    parseLiteralInt(??)
-                      listener: handleLiteralInt(0)
-              listener: endBinaryExpression(??)
-          listener: endFieldInitializer(=, ;)
-        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
-  listener: endTopLevelDeclaration(var)
-  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
-    parseMetadataStar(;)
-      listener: beginMetadataStar(var)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(;)
-      listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_semicolon, DeclarationKind.TopLevel, null, false)
         listener: beginFields(;)
         listener: handleNoType(var)
@@ -1209,42 +572,100 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_slash, DeclarationKind.TopLevel, null, false)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_ampersand, DeclarationKind.TopLevel, null, false)
         listener: beginFields(;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_slash, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_slash, typeArgs_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_ampersand, operators_ampersand, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
               parseUnaryExpression(=, true)
                 parsePrimary(=, expression)
                   parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
                     parseSend(=, expression)
                       isNextIdentifier(=)
                       ensureIdentifier(=, expression)
                         listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
+                      listener: handleNoTypeArguments(()
                       parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(/)
-              parsePrecedenceExpression(/, 15, true)
-                parseUnaryExpression(/, true)
-                  parsePrimary(/, expression)
-                    parseLiteralInt(/)
-                      listener: handleLiteralInt(1)
-              listener: endBinaryExpression(/)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(&, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '&'., Try inserting an identifier before '&'., {lexeme: &}], &, &)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(&)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(&)
+                                        listener: handleSend(, &)
+                                  listener: beginBinaryExpression(&)
+                                  parsePrecedenceExpression(&, 12, true)
+                                    parseUnaryExpression(&, true)
+                                      parsePrimary(&, expression)
+                                        parseSendOrFunctionLiteral(&, expression)
+                                          parseSend(&, expression)
+                                            isNextIdentifier(&)
+                                            ensureIdentifier(&, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(&)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(var)
@@ -1254,42 +675,189 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_tilde_slash, DeclarationKind.TopLevel, null, false)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_as, DeclarationKind.TopLevel, null, false)
         listener: beginFields(;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
-          listener: handleIdentifier(typeArgs_tilde_slash, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_tilde_slash, typeArgs_tilde_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: handleIdentifier(operators_as, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_as, operators_as, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
               parseUnaryExpression(=, true)
                 parsePrimary(=, expression)
                   parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
                     parseSend(=, expression)
                       isNextIdentifier(=)
                       ensureIdentifier(=, expression)
                         listener: handleIdentifier(f, expression)
-                      listener: handleNoTypeArguments(<)
+                      listener: handleNoTypeArguments(()
                       parseArgumentsOpt(f)
-                        listener: handleNoArguments(<)
-                      listener: handleSend(f, <)
-              listener: beginTypeArguments(<)
-              listener: handleIdentifier(a, typeReference)
-              listener: handleNoTypeArguments(,)
-              listener: handleType(a, null)
-              listener: handleIdentifier(b, typeReference)
-              listener: handleNoTypeArguments(>)
-              listener: handleType(b, null)
-              listener: endTypeArguments(2, <, >)
-              listener: handleTypeArgumentApplication(<)
-              listener: beginBinaryExpression(~/)
-              parsePrecedenceExpression(~/, 15, true)
-                parseUnaryExpression(~/, true)
-                  parsePrimary(~/, expression)
-                    parseLiteralInt(~/)
-                      listener: handleLiteralInt(1)
-              listener: endBinaryExpression(~/)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      inPlainSync()
+                                      parseSendOrFunctionLiteral(>, expression)
+                                        parseSend(>, expression)
+                                          isNextIdentifier(>)
+                                          ensureIdentifier(>, expression)
+                                            inPlainSync()
+                                            listener: handleIdentifier(as, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(as)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(as, ))
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_asterisk, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_asterisk, operators_asterisk, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(*, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '*'., Try inserting an identifier before '*'., {lexeme: *}], *, *)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(*)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(*)
+                                        listener: handleSend(, *)
+                                  listener: beginBinaryExpression(*)
+                                  parsePrecedenceExpression(*, 15, true)
+                                    parseUnaryExpression(*, true)
+                                      parsePrimary(*, expression)
+                                        parseSendOrFunctionLiteral(*, expression)
+                                          parseSend(*, expression)
+                                            isNextIdentifier(*)
+                                            ensureIdentifier(*, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(*)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(var)
@@ -1496,6 +1064,311 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bar, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_bar, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_bar, operators_bar, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(|, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '|'., Try inserting an identifier before '|'., {lexeme: |}], |, |)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(|)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(|)
+                                        listener: handleSend(, |)
+                                  listener: beginBinaryExpression(|)
+                                  parsePrecedenceExpression(|, 10, true)
+                                    parseUnaryExpression(|, true)
+                                      parsePrimary(|, expression)
+                                        parseSendOrFunctionLiteral(|, expression)
+                                          parseSend(|, expression)
+                                            isNextIdentifier(|)
+                                            ensureIdentifier(|, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(|)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_caret, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_caret, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_caret, operators_caret, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(^, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '^'., Try inserting an identifier before '^'., {lexeme: ^}], ^, ^)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(^)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(^)
+                                        listener: handleSend(, ^)
+                                  listener: beginBinaryExpression(^)
+                                  parsePrecedenceExpression(^, 11, true)
+                                    parseUnaryExpression(^, true)
+                                      parsePrimary(^, expression)
+                                        parseSendOrFunctionLiteral(^, expression)
+                                          parseSend(^, expression)
+                                            isNextIdentifier(^)
+                                            ensureIdentifier(^, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(^)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_is, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_is, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_is, operators_is, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      inPlainSync()
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(is)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(is)
+                                        listener: handleSend(, is)
+                                listener: endBinaryExpression(>)
+                                parseIsOperatorRest()
+                                  listener: beginIsOperatorType(is)
+                                  computeTypeAfterIsOrAs(is)
+                                  listener: handleIdentifier(int, typeReference)
+                                  listener: handleNoTypeArguments())
+                                  listener: handleType(int, null)
+                                  listener: endIsOperatorType(is)
+                                  listener: handleIsOperator(is, null)
+                                  skipChainedAsIsOperators(int)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_lessThan, DeclarationKind.TopLevel, null, false)
         listener: beginFields(;)
         listener: handleNoType(var)
@@ -1954,6 +1827,1156 @@
                       listener: handleSend(f, ;)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_percent, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_percent, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_percent, operators_percent, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(%, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '%'., Try inserting an identifier before '%'., {lexeme: %}], %, %)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(%)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(%)
+                                        listener: handleSend(, %)
+                                  listener: beginBinaryExpression(%)
+                                  parsePrecedenceExpression(%, 15, true)
+                                    parseUnaryExpression(%, true)
+                                      parsePrimary(%, expression)
+                                        parseSendOrFunctionLiteral(%, expression)
+                                          parseSend(%, expression)
+                                            isNextIdentifier(%)
+                                            ensureIdentifier(%, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(%)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_period_period, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_period_period, operators_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(.., Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '..'., Try inserting an identifier before '..'., {lexeme: ..}], .., ..)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(..)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(..)
+                                        listener: handleSend(, ..)
+                                listener: endBinaryExpression(>)
+                                parseCascadeExpression()
+                                  listener: beginCascade(..)
+                                  parseSend(.., expressionContinuation)
+                                    isNextIdentifier(..)
+                                    ensureIdentifier(.., expressionContinuation)
+                                      listener: handleIdentifier(toString, expressionContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(toString)
+                                      parseArguments(toString)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          listener: endArguments(0, (, ))
+                                    listener: handleSend(toString, ))
+                                  listener: handleEndingBinaryExpression(..)
+                                  parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
+                                  listener: endCascade()
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_plus, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_plus, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_plus, operators_plus, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    rewriteAndRecover(>, UnsupportedPrefixPlus, )
+                                      reportRecoverableError(+, UnsupportedPrefixPlus)
+                                        listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                      rewriter()
+                                    parsePrimary(>, expression)
+                                      parseSendOrFunctionLiteral(>, expression)
+                                        parseSend(>, expression)
+                                          isNextIdentifier(>)
+                                          ensureIdentifier(>, expression)
+                                            listener: handleIdentifier(, expression)
+                                          listener: handleNoTypeArguments(+)
+                                          parseArgumentsOpt()
+                                            listener: handleNoArguments(+)
+                                          listener: handleSend(, +)
+                                  listener: beginBinaryExpression(+)
+                                  parsePrecedenceExpression(+, 14, true)
+                                    parseUnaryExpression(+, true)
+                                      parsePrimary(+, expression)
+                                        parseSendOrFunctionLiteral(+, expression)
+                                          parseSend(+, expression)
+                                            isNextIdentifier(+)
+                                            ensureIdentifier(+, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(+)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question, operators_question, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(?, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?'., Try inserting an identifier before '?'., {lexeme: ?}], ?, ?)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(?)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(?)
+                                        listener: handleSend(, ?)
+                                listener: endBinaryExpression(>)
+                                parseConditionalExpressionRest()
+                                  listener: beginConditionalExpression(?)
+                                  parseExpressionWithoutCascade(?)
+                                    parsePrecedenceExpression(?, 1, false)
+                                      parseUnaryExpression(?, false)
+                                        parsePrimary(?, expression)
+                                          parseLiteralNull(?)
+                                            listener: handleLiteralNull(null)
+                                  ensureColon(null)
+                                  listener: handleConditionalExpressionColon()
+                                  parseExpressionWithoutCascade(:)
+                                    parsePrecedenceExpression(:, 1, false)
+                                      parseUnaryExpression(:, false)
+                                        parsePrimary(:, expression)
+                                          parseLiteralNull(:)
+                                            listener: handleLiteralNull(null)
+                                  listener: endConditionalExpression(?, :)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question_period_methodInvocation, operators_question_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(?.)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(?.)
+                                        listener: handleSend(, ?.)
+                                  parsePrimary(?., expressionContinuation)
+                                    parseSendOrFunctionLiteral(?., expressionContinuation)
+                                      looksLikeFunctionBody())
+                                      parseSend(?., expressionContinuation)
+                                        isNextIdentifier(?.)
+                                        ensureIdentifier(?., expressionContinuation)
+                                          listener: handleIdentifier(toString, expressionContinuation)
+                                        listener: handleNoTypeArguments(()
+                                        parseArgumentsOpt(toString)
+                                          parseArguments(toString)
+                                            parseArgumentsRest(()
+                                              listener: beginArguments(()
+                                              listener: endArguments(0, (, ))
+                                        listener: handleSend(toString, ))
+                                  listener: handleEndingBinaryExpression(?.)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question_period_methodInvocation_generic, operators_question_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(?.)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(?.)
+                                        listener: handleSend(, ?.)
+                                  parsePrimary(?., expressionContinuation)
+                                    parseSendOrFunctionLiteral(?., expressionContinuation)
+                                      looksLikeFunctionBody())
+                                      parseSend(?., expressionContinuation)
+                                        isNextIdentifier(?.)
+                                        ensureIdentifier(?., expressionContinuation)
+                                          listener: handleIdentifier(foo, expressionContinuation)
+                                        listener: beginTypeArguments(<)
+                                        listener: handleIdentifier(c, typeReference)
+                                        listener: handleNoTypeArguments(>)
+                                        listener: handleType(c, null)
+                                        listener: endTypeArguments(1, <, >)
+                                        parseArgumentsOpt(>)
+                                          parseArguments(>)
+                                            parseArgumentsRest(()
+                                              listener: beginArguments(()
+                                              listener: endArguments(0, (, ))
+                                        listener: handleSend(foo, ))
+                                  listener: handleEndingBinaryExpression(?.)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question_period_period, operators_question_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(?.., Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?..'., Try inserting an identifier before '?..'., {lexeme: ?..}], ?.., ?..)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(toString)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(toString)
+                                        listener: handleSend(, toString)
+                                listener: endBinaryExpression(>)
+                            rewriteAndRecover(, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+                              reportRecoverableError(toString, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+                                listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], toString, toString)
+                              rewriter()
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      looksLikeFunctionBody())
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(toString, expression)
+                                        listener: handleNoTypeArguments(()
+                                        parseArgumentsOpt(toString)
+                                          parseArguments(toString)
+                                            parseArgumentsRest(()
+                                              listener: beginArguments(()
+                                              listener: endArguments(0, (, ))
+                                        listener: handleSend(toString, ))
+                            listener: endArguments(3, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question_period_propertyAccess, operators_question_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(?.)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(?.)
+                                        listener: handleSend(, ?.)
+                                  parsePrimary(?., expressionContinuation)
+                                    parseSendOrFunctionLiteral(?., expressionContinuation)
+                                      parseSend(?., expressionContinuation)
+                                        isNextIdentifier(?.)
+                                        ensureIdentifier(?., expressionContinuation)
+                                          listener: handleIdentifier(hashCode, expressionContinuation)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(hashCode)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(hashCode, ))
+                                  listener: handleEndingBinaryExpression(?.)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_question_question, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_question_question, operators_question_question, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(??, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '??'., Try inserting an identifier before '??'., {lexeme: ??}], ??, ??)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(??)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(??)
+                                        listener: handleSend(, ??)
+                                listener: endBinaryExpression(>)
+                                listener: beginBinaryExpression(??)
+                                parsePrecedenceExpression(??, 5, true)
+                                  parseUnaryExpression(??, true)
+                                    parsePrimary(??, expression)
+                                      parseSendOrFunctionLiteral(??, expression)
+                                        parseSend(??, expression)
+                                          isNextIdentifier(??)
+                                          ensureIdentifier(??, expression)
+                                            listener: handleIdentifier(d, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(d)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(d, ))
+                                listener: endBinaryExpression(??)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_slash, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_slash, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_slash, operators_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(/, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '/'., Try inserting an identifier before '/'., {lexeme: /}], /, /)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(/)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(/)
+                                        listener: handleSend(, /)
+                                  listener: beginBinaryExpression(/)
+                                  parsePrecedenceExpression(/, 15, true)
+                                    parseUnaryExpression(/, true)
+                                      parsePrimary(/, expression)
+                                        parseSendOrFunctionLiteral(/, expression)
+                                          parseSend(/, expression)
+                                            isNextIdentifier(/)
+                                            ensureIdentifier(/, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(/)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    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: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operators_tilde_slash, operators_tilde_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      isNextIdentifier(=)
+                      ensureIdentifier(=, expression)
+                        listener: handleIdentifier(f, expression)
+                      listener: handleNoTypeArguments(()
+                      parseArgumentsOpt(f)
+                        parseArguments(f)
+                          parseArgumentsRest(()
+                            listener: beginArguments(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(a, expression)
+                                        listener: handleNoTypeArguments(<)
+                                        parseArgumentsOpt(a)
+                                          listener: handleNoArguments(<)
+                                        listener: handleSend(a, <)
+                                listener: beginBinaryExpression(<)
+                                parsePrecedenceExpression(<, 9, true)
+                                  parseUnaryExpression(<, true)
+                                    parsePrimary(<, expression)
+                                      parseSendOrFunctionLiteral(<, expression)
+                                        parseSend(<, expression)
+                                          isNextIdentifier(<)
+                                          ensureIdentifier(<, expression)
+                                            listener: handleIdentifier(b, expression)
+                                          listener: handleNoTypeArguments(,)
+                                          parseArgumentsOpt(b)
+                                            listener: handleNoArguments(,)
+                                          listener: handleSend(b, ,)
+                                listener: endBinaryExpression(<)
+                            parseExpression(,)
+                              parsePrecedenceExpression(,, 1, true)
+                                parseUnaryExpression(,, true)
+                                  parsePrimary(,, expression)
+                                    parseSendOrFunctionLiteral(,, expression)
+                                      parseSend(,, expression)
+                                        isNextIdentifier(,)
+                                        ensureIdentifier(,, expression)
+                                          listener: handleIdentifier(c, expression)
+                                        listener: handleNoTypeArguments(>)
+                                        parseArgumentsOpt(c)
+                                          listener: handleNoArguments(>)
+                                        listener: handleSend(c, >)
+                                listener: beginBinaryExpression(>)
+                                parsePrecedenceExpression(>, 9, true)
+                                  parseUnaryExpression(>, true)
+                                    parsePrimary(>, expression)
+                                      parseSend(>, expression)
+                                        isNextIdentifier(>)
+                                        ensureIdentifier(>, expression)
+                                          reportRecoverableErrorWithToken(~/, Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '~/'., Try inserting an identifier before '~/'., {lexeme: ~/}], ~/, ~/)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(~/)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(~/)
+                                        listener: handleSend(, ~/)
+                                  listener: beginBinaryExpression(~/)
+                                  parsePrecedenceExpression(~/, 15, true)
+                                    parseUnaryExpression(~/, true)
+                                      parsePrimary(~/, expression)
+                                        parseSendOrFunctionLiteral(~/, expression)
+                                          parseSend(~/, expression)
+                                            isNextIdentifier(~/)
+                                            ensureIdentifier(~/, expression)
+                                              listener: handleIdentifier(d, expression)
+                                            listener: handleNoTypeArguments())
+                                            parseArgumentsOpt(d)
+                                              listener: handleNoArguments())
+                                            listener: handleSend(d, ))
+                                  listener: endBinaryExpression(~/)
+                                listener: endBinaryExpression(>)
+                            listener: endArguments(2, (, ))
+                      listener: handleSend(f, ;)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(var)
-  listener: endCompilationUnit(34, )
+  listener: endCompilationUnit(36, )
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
index becf1b6..9318b29 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
@@ -1,9 +1,5 @@
 NOTICE: Stream was rewritten by parser!
 
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
 var typeArgs_closeBrace = {f<a, b>};
 var typeArgs_closeBracket = [f<a, b>];
 var typeArgs_closeParen = g(f<a, b>);
@@ -16,31 +12,14 @@
 
 var typeArgs_openParen = f<a, b>();
 
-var typeArgs_percent = f<a, b> % 0;
-
 
 
 var typeArgs_period_methodInvocation = f<a, b>.toString();
 
 var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
 var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
 
-
-
-
-
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
 var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
 
 
 
@@ -49,24 +28,40 @@
 
 
 
+var operators_ampersand = f(a<b,c>*synthetic*&d);
 
 
 
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*synthetic**d);
+
 
 
 
 
 var operators_bang_openBracket = f(a<b,c>![d]);
 
+
+
 var operators_bang_paren = f(a<b,c>!(d));
 
+var operators_bar = f(a<b,c>*synthetic*|d);
+var operators_caret = f(a<b,c>*synthetic*^d);
+var operators_is = f(a<b,c> *synthetic*is int);
+
 
 
 
 
 var operators_lessThan = f<a><b>[];
 
+
+
 var operators_minus = f(a<b,c>-d);
+
+
+
 var operators_openBracket = f(a<b,c>[d]);
 
 
@@ -76,13 +71,23 @@
 
 var operators_openBracket_error = f(a<b,c>[d]>e);
 
+
+
 var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
 
+var operators_percent = f(a<b,c>*synthetic*%d);
+var operators_period_period = f(a<b,c>*synthetic*..toString());
+var operators_plus = f(a<b,c>*synthetic*+d);
+var operators_question = f(a<b,c> *synthetic*? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>*synthetic*?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>*synthetic*?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..*synthetic*,toString());
+var operators_question_period_propertyAccess = f(a<b,c>*synthetic*?.hashCode);
+var operators_question_question = f(a<b,c> *synthetic*?? d);
+var operators_slash = f(a<b,c>*synthetic*/d);
+var operators_tilde_slash = f(a<b,c>*synthetic*~/d);
 
-var[KeywordToken] typeArgs_ampersand[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] &[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_asterisk[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] *[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_bar[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] |[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_caret[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ^[SimpleToken] 0[StringToken];[SimpleToken]
+
 var[KeywordToken] typeArgs_closeBrace[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]}[SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_closeBracket[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]][SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_closeParen[StringToken] =[SimpleToken] g[StringToken]([BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken])[SimpleToken];[SimpleToken]
@@ -95,31 +100,14 @@
 
 var[KeywordToken] typeArgs_openParen[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
 
-var[KeywordToken] typeArgs_percent[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] %[SimpleToken] 0[StringToken];[SimpleToken]
-
 
 
 var[KeywordToken] typeArgs_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
 
 var[KeywordToken] typeArgs_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_plus[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] +[SimpleToken] 0[StringToken];[SimpleToken]
 
-
-
-
-
-var[KeywordToken] typeArgs_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken];[SimpleToken]
-
-var[KeywordToken] typeArgs_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ??[SimpleToken] 0[StringToken];[SimpleToken]
 var[KeywordToken] typeArgs_semicolon[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] /[SimpleToken] 1[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_tilde_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ~/[SimpleToken] 1[StringToken];[SimpleToken]
 
 
 
@@ -128,24 +116,40 @@
 
 
 
+var[KeywordToken] operators_ampersand[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]&[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
 
 
 
+var[KeywordToken] operators_as[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]as[KeywordToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_asterisk[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]*[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
 
 
 
 
 var[KeywordToken] operators_bang_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_bang_paren[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken]([BeginToken]d[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
 
+var[KeywordToken] operators_bar[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]|[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_caret[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]^[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_is[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]is[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+
 
 
 
 
 var[KeywordToken] operators_lessThan[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken]>[SimpleToken]<[BeginToken]b[StringToken]>[SimpleToken][[SyntheticBeginToken]][SyntheticToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_minus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]-[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
+
+
 var[KeywordToken] operators_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
 
 
@@ -155,5 +159,19 @@
 
 var[KeywordToken] operators_openBracket_error[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken]>[SimpleToken]e[StringToken])[SimpleToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_openBracket_unambiguous[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken],[SimpleToken] e[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_percent[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]%[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_plus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]+[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?..[SimpleToken][SyntheticStringToken],[SyntheticToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]hashCode[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]??[SimpleToken] d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_tilde_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]~/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
 [SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
index 32ed486..401acc1 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
@@ -1,7 +1,3 @@
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
 var typeArgs_closeBrace = {f<a, b>};
 var typeArgs_closeBracket = [f<a, b>];
 var typeArgs_closeParen = g(f<a, b>);
@@ -14,31 +10,14 @@
 
 var typeArgs_openParen = f<a, b>();
 
-var typeArgs_percent = f<a, b> % 0;
-
 
 
 var typeArgs_period_methodInvocation = f<a, b>.toString();
 
 var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
 var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
 
-
-
-
-
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
 var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
 
 
 
@@ -47,24 +26,40 @@
 
 
 
+var operators_ampersand = f(a<b,c>&d);
 
 
 
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*d);
+
 
 
 
 
 var operators_bang_openBracket = f(a<b,c>![d]);
 
+
+
 var operators_bang_paren = f(a<b,c>!(d));
 
+var operators_bar = f(a<b,c>|d);
+var operators_caret = f(a<b,c>^d);
+var operators_is = f(a<b,c> is int);
+
 
 
 
 
 var operators_lessThan = f<a><b>;
 
+
+
 var operators_minus = f(a<b,c>-d);
+
+
+
 var operators_openBracket = f(a<b,c>[d]);
 
 
@@ -74,13 +69,23 @@
 
 var operators_openBracket_error = f(a<b,c>[d]>e);
 
+
+
 var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
 
+var operators_percent = f(a<b,c>%d);
+var operators_period_period = f(a<b,c>..toString());
+var operators_plus = f(a<b,c>+d);
+var operators_question = f(a<b,c> ? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..toString());
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+var operators_question_question = f(a<b,c> ?? d);
+var operators_slash = f(a<b,c>/d);
+var operators_tilde_slash = f(a<b,c>~/d);
 
-var[KeywordToken] typeArgs_ampersand[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] &[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_asterisk[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] *[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_bar[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] |[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_caret[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ^[SimpleToken] 0[StringToken];[SimpleToken]
+
 var[KeywordToken] typeArgs_closeBrace[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]}[SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_closeBracket[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]][SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_closeParen[StringToken] =[SimpleToken] g[StringToken]([BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken])[SimpleToken];[SimpleToken]
@@ -93,31 +98,14 @@
 
 var[KeywordToken] typeArgs_openParen[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
 
-var[KeywordToken] typeArgs_percent[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] %[SimpleToken] 0[StringToken];[SimpleToken]
-
 
 
 var[KeywordToken] typeArgs_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
 
 var[KeywordToken] typeArgs_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
 var[KeywordToken] typeArgs_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_plus[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] +[SimpleToken] 0[StringToken];[SimpleToken]
 
-
-
-
-
-var[KeywordToken] typeArgs_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken];[SimpleToken]
-
-var[KeywordToken] typeArgs_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ??[SimpleToken] 0[StringToken];[SimpleToken]
 var[KeywordToken] typeArgs_semicolon[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] /[SimpleToken] 1[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_tilde_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ~/[SimpleToken] 1[StringToken];[SimpleToken]
 
 
 
@@ -126,24 +114,40 @@
 
 
 
+var[KeywordToken] operators_ampersand[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]&[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
 
 
 
+var[KeywordToken] operators_as[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]as[KeywordToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_asterisk[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]*[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
 
 
 
 
 var[KeywordToken] operators_bang_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_bang_paren[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken]([BeginToken]d[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
 
+var[KeywordToken] operators_bar[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]|[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_caret[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]^[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_is[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] is[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+
 
 
 
 
 var[KeywordToken] operators_lessThan[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken]>[SimpleToken]<[BeginToken]b[StringToken]>[SimpleToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_minus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]-[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
+
+
 var[KeywordToken] operators_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
 
 
@@ -153,5 +157,19 @@
 
 var[KeywordToken] operators_openBracket_error[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken]>[SimpleToken]e[StringToken])[SimpleToken];[SimpleToken]
 
+
+
 var[KeywordToken] operators_openBracket_unambiguous[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken],[SimpleToken] e[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_percent[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]%[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_plus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]+[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] ??[SimpleToken] d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_tilde_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]~/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
 [SimpleToken]
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 da22a5b..f914b42 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
@@ -193,7 +193,7 @@
                 handleQualified(.)
                 handleNoTypeArguments(;)
                 handleNoConstructorReferenceContinuationAfterTypeArguments(;)
-              endConstructorReference(C, null, ;)
+              endConstructorReference(C, null, ;, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
           endClassFactoryMethod(factory, factory, ;)
         endMember()
@@ -218,7 +218,7 @@
                 endTypeArguments(1, <, >)
                 handleNewAsIdentifier(new)
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-              endConstructorReference(C, ., ;)
+              endConstructorReference(C, ., ;, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
           endClassFactoryMethod(factory, factory, ;)
         endMember()
@@ -241,7 +241,7 @@
                 handleNoTypeArguments(.)
                 handleNewAsIdentifier(new)
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-              endConstructorReference(prefix, ., ;)
+              endConstructorReference(prefix, ., ;, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
           endClassFactoryMethod(factory, factory, ;)
         endMember()
@@ -268,7 +268,7 @@
                 endTypeArguments(1, <, >)
                 handleNewAsIdentifier(new)
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-              endConstructorReference(prefix, ., ;)
+              endConstructorReference(prefix, ., ;, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
           endClassFactoryMethod(factory, factory, ;)
         endMember()
@@ -344,7 +344,7 @@
             handleQualified(.)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(C, null, ()
+          endConstructorReference(C, null, (, ConstructorReferenceContext.Const)
           beginArguments(()
           endArguments(0, (, ))
         endConstExpression(const)
@@ -368,7 +368,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(C, ., ()
+          endConstructorReference(C, ., (, ConstructorReferenceContext.Const)
           beginArguments(()
           endArguments(0, (, ))
         endConstExpression(const)
@@ -390,7 +390,7 @@
             handleNoTypeArguments(.)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(prefix, ., ()
+          endConstructorReference(prefix, ., (, ConstructorReferenceContext.Const)
           beginArguments(()
           endArguments(0, (, ))
         endConstExpression(const)
@@ -416,7 +416,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(prefix, ., ()
+          endConstructorReference(prefix, ., (, ConstructorReferenceContext.Const)
           beginArguments(()
           endArguments(0, (, ))
         endConstExpression(const)
@@ -438,7 +438,7 @@
             handleQualified(.)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(C, null, ()
+          endConstructorReference(C, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -462,7 +462,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(C, ., ()
+          endConstructorReference(C, ., (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -484,7 +484,7 @@
             handleNoTypeArguments(.)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(prefix, ., ()
+          endConstructorReference(prefix, ., (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -510,7 +510,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(prefix, ., ()
+          endConstructorReference(prefix, ., (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -555,7 +555,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(C, ., ()
+          endConstructorReference(C, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
         endImplicitCreationExpression(=)
@@ -607,7 +607,7 @@
             endTypeArguments(1, <, >)
             handleNewAsIdentifier(new)
             handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-          endConstructorReference(prefix, ., ()
+          endConstructorReference(prefix, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
         endImplicitCreationExpression(=)
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 318a32c..d88fc9d 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
@@ -331,7 +331,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, null)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -344,7 +344,7 @@
                         listener: handleQualified(.)
                     listener: handleNoTypeArguments(;)
                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(;)
-                    listener: endConstructorReference(C, null, ;)
+                    listener: endConstructorReference(C, null, ;, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
                 listener: endClassFactoryMethod(factory, factory, ;)
@@ -376,7 +376,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, null)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -390,7 +390,7 @@
                       rewriter()
                       listener: handleNewAsIdentifier(new)
                       listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(C, ., ;)
+                    listener: endConstructorReference(C, ., ;, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
                 listener: endClassFactoryMethod(factory, factory, ;)
@@ -422,7 +422,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, null)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
@@ -436,7 +436,7 @@
                       rewriter()
                       listener: handleNewAsIdentifier(new)
                       listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(prefix, ., ;)
+                    listener: endConstructorReference(prefix, ., ;, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
                 listener: endClassFactoryMethod(factory, factory, ;)
@@ -468,7 +468,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, null)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
@@ -486,7 +486,7 @@
                       rewriter()
                       listener: handleNewAsIdentifier(new)
                       listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(prefix, ., ;)
+                    listener: endConstructorReference(prefix, ., ;, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
                 listener: endClassFactoryMethod(factory, factory, ;)
@@ -639,7 +639,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, null)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -652,7 +652,7 @@
                           listener: handleQualified(.)
                       listener: handleNoTypeArguments(()
                       listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                      listener: endConstructorReference(C, null, ()
+                      listener: endConstructorReference(C, null, (, ConstructorReferenceContext.Const)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -680,7 +680,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, null)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -694,7 +694,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(C, ., ()
+                      listener: endConstructorReference(C, ., (, ConstructorReferenceContext.Const)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -722,7 +722,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, null)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -736,7 +736,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(prefix, ., ()
+                      listener: endConstructorReference(prefix, ., (, ConstructorReferenceContext.Const)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -764,7 +764,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, null)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -782,7 +782,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(prefix, ., ()
+                      listener: endConstructorReference(prefix, ., (, ConstructorReferenceContext.Const)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -811,7 +811,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, null)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -824,7 +824,7 @@
                           listener: handleQualified(.)
                       listener: handleNoTypeArguments(()
                       listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                      listener: endConstructorReference(C, null, ()
+                      listener: endConstructorReference(C, null, (, ConstructorReferenceContext.New)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -853,7 +853,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, null)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -867,7 +867,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(C, ., ()
+                      listener: endConstructorReference(C, ., (, ConstructorReferenceContext.New)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -896,7 +896,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, null)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -910,7 +910,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(prefix, ., ()
+                      listener: endConstructorReference(prefix, ., (, ConstructorReferenceContext.New)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -939,7 +939,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, null)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -957,7 +957,7 @@
                         rewriter()
                         listener: handleNewAsIdentifier(new)
                         listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                      listener: endConstructorReference(prefix, ., ()
+                      listener: endConstructorReference(prefix, ., (, ConstructorReferenceContext.New)
                     parseConstructorInvocationArguments(new)
                       parseArgumentsRest(()
                         listener: beginArguments(()
@@ -1030,7 +1030,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, Instance of 'SimpleTypeArgument1')
                   listener: beginImplicitCreationExpression(=)
-                  parseConstructorReference(=, Instance of 'SimpleTypeArgument1')
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -1044,7 +1044,7 @@
                       rewriter()
                       listener: handleNewAsIdentifier(new)
                       listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(C, ., ()
+                    listener: endConstructorReference(C, ., (, ConstructorReferenceContext.Implicit)
                   parseConstructorInvocationArguments(new)
                     parseArgumentsRest(()
                       listener: beginArguments(()
@@ -1128,7 +1128,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, Instance of 'SimpleTypeArgument1')
                   listener: beginImplicitCreationExpression(=)
-                  parseConstructorReference(=, Instance of 'SimpleTypeArgument1')
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
@@ -1146,7 +1146,7 @@
                       rewriter()
                       listener: handleNewAsIdentifier(new)
                       listener: handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
-                    listener: endConstructorReference(prefix, ., ()
+                    listener: endConstructorReference(prefix, ., (, ConstructorReferenceContext.Implicit)
                   parseConstructorInvocationArguments(new)
                     parseArgumentsRest(()
                       listener: beginArguments(()
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart b/pkg/front_end/parser_testcases/general/operator_01.dart
new file mode 100644
index 0000000..e9b9db48
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart
@@ -0,0 +1,21 @@
+class Foo {
+  bool operator <(int x) {
+    return true;
+  }
+
+  int operator <<(int x) {
+    return 42;
+  }
+
+  bool operator >(int x) {
+    return true;
+  }
+
+  int operator >>(int x) {
+    return 42;
+  }
+
+  int operator >>>(int x) {
+    return 42;
+  }
+}
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
new file mode 100644
index 0000000..88fbc2c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -0,0 +1,162 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Foo, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Foo)
+      handleNoType(Foo)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(bool, null)
+            handleOperatorName(operator, <)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleLiteralBool(true)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, bool, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleOperatorName(operator, <<)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleLiteralInt(42)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(bool, null)
+            handleOperatorName(operator, >)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleLiteralBool(true)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, bool, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleOperatorName(operator, >>)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleLiteralInt(42)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleOperatorName(operator, >>>)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleLiteralInt(42)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+      endClassOrMixinBody(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
new file mode 100644
index 0000000..d90a492
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
@@ -0,0 +1,324 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Foo, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, Foo)
+        parseClass(Foo, class, class, Foo)
+          parseClassHeaderOpt(Foo, class, class)
+            parseClassExtendsOpt(Foo)
+              listener: handleNoType(Foo)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(Foo)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(Foo)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, bool)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
+              parseMetadataStar({)
+                listener: beginMetadataStar(bool)
+                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: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(bool, null)
+                parseOperatorName(bool)
+                  listener: handleOperatorName(operator, <)
+                parseMethodTypeVar(<)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(<, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(<, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(x)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(x, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, return)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseReturnStatement({)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralBool(return)
+                                  listener: handleLiteralBool(true)
+                        ensureSemicolon(true)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, bool, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                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: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                parseOperatorName(int)
+                  listener: handleOperatorName(operator, <<)
+                parseMethodTypeVar(<<)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(<<, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(<<, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(x)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(x, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, return)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseReturnStatement({)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralInt(return)
+                                  listener: handleLiteralInt(42)
+                        ensureSemicolon(42)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, bool)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
+              parseMetadataStar(})
+                listener: beginMetadataStar(bool)
+                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: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(bool, null)
+                parseOperatorName(bool)
+                  listener: handleOperatorName(operator, >)
+                parseMethodTypeVar(>)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(>, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(x)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(x, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, return)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseReturnStatement({)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralBool(return)
+                                  listener: handleLiteralBool(true)
+                        ensureSemicolon(true)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, bool, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                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: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                parseOperatorName(int)
+                  listener: handleOperatorName(operator, >>)
+                parseMethodTypeVar(>>)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(>>, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(x)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(x, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, return)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseReturnStatement({)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralInt(return)
+                                  listener: handleLiteralInt(42)
+                        ensureSemicolon(42)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                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: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                parseOperatorName(int)
+                  listener: handleOperatorName(operator, >>>)
+                parseMethodTypeVar(>>>)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(>>>, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>>>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(x)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(x, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, return)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseReturnStatement({)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralInt(return)
+                                  listener: handleLiteralInt(42)
+                        ensureSemicolon(42)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.parser.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.parser.expect
new file mode 100644
index 0000000..6f599e9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.parser.expect
@@ -0,0 +1,45 @@
+class Foo {
+bool operator <(int x) {
+return true;
+}
+
+int operator <<(int x) {
+return 42;
+}
+
+bool operator >(int x) {
+return true;
+}
+
+int operator >>(int x) {
+return 42;
+}
+
+int operator >>>(int x) {
+return 42;
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+bool[StringToken] operator[KeywordToken] <[BeginToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] true[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] <<[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+bool[StringToken] operator[KeywordToken] >[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] true[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] >>[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] >>>[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.scanner.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.scanner.expect
new file mode 100644
index 0000000..6f599e9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.scanner.expect
@@ -0,0 +1,45 @@
+class Foo {
+bool operator <(int x) {
+return true;
+}
+
+int operator <<(int x) {
+return 42;
+}
+
+bool operator >(int x) {
+return true;
+}
+
+int operator >>(int x) {
+return 42;
+}
+
+int operator >>>(int x) {
+return 42;
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+bool[StringToken] operator[KeywordToken] <[BeginToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] true[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] <<[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+bool[StringToken] operator[KeywordToken] >[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] true[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] >>[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken] >>>[SimpleToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
index 9f72c57..c89447b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
@@ -16,9 +16,9 @@
 }
 ^
 
-parser/nnbd/issue_40267_method_call_with_type_arguments:6:1: Expected ';' after this.
-}
-^
+parser/nnbd/issue_40267_method_call_with_type_arguments:5:13: Expected ';' after this.
+  a?<Foo>(b);
+            ^
 
 beginCompilationUnit(f)
   beginMetadataStar(f)
@@ -101,7 +101,7 @@
           handleNoArguments(})
           handleSend(, })
         endConditionalExpression(?, :)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
         handleExpressionStatement(;)
       endBlockFunctionBody(3, {, })
     endTopLevelMethod(f, null, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
index 8a09850..e2d78b9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
@@ -191,8 +191,8 @@
                                   listener: handleSend(, })
                         listener: endConditionalExpression(?, :)
                   ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                    reportRecoverableError(;, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
                     rewriter()
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, })
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 311b6f8..a765a2f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
@@ -16,11 +16,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/nnbd/issue_44477:1:15: Expected ';' after this.
+parser/nnbd/issue_44477:1:14: Expected ';' after this.
 Future<List<>>
-              ^...
-
-WARNING: Reporting at eof --- see below for details.
+             ^
 
 beginCompilationUnit(Future)
   beginMetadataStar(Future)
@@ -45,8 +43,7 @@
       // WARNING: Reporting at eof for .
       handleIdentifier(, topLevelVariableDeclaration)
       handleNoFieldInitializer()
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-      // WARNING: Reporting at eof for .
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
     endTopLevelFields(null, null, null, null, null, 1, Future, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
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 e90884d..43fbe7a 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
@@ -41,9 +41,8 @@
         parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
-          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-            listener: // WARNING: Reporting at eof for .
+          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           rewriter()
         listener: endTopLevelFields(null, null, null, null, null, 1, Future, ;)
   listener: endTopLevelDeclaration()
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 4db9fb9..1295e65 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -24,7 +24,7 @@
                 beginConstructorReference(X)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(X, null, ()
+                endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -67,7 +67,7 @@
           beginConstructorReference(X)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(X, null, ()
+          endConstructorReference(X, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -83,7 +83,7 @@
           beginConstructorReference(Y)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(Y, null, ()
+          endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
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 b245255..e5b3775 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
@@ -52,14 +52,14 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
                                     parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(X, null, ()
+                                    listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                                   parseConstructorInvocationArguments(X)
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -182,14 +182,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
                                 parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(X, null, ()
+                                listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(X)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
@@ -228,14 +228,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
                                 parseQualifiedRestOpt(Y, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(Y, null, ()
+                                listener: endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(Y)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
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 d7696f5..e8b4997 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -24,7 +24,7 @@
                 beginConstructorReference(X)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(X, null, ()
+                endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -67,7 +67,7 @@
           beginConstructorReference(X)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(X, null, ()
+          endConstructorReference(X, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -83,7 +83,7 @@
           beginConstructorReference(Y)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(Y, null, ()
+          endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
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 43bc341..ef86be8 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
@@ -52,14 +52,14 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
                                     parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(X, null, ()
+                                    listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                                   parseConstructorInvocationArguments(X)
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -182,14 +182,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
                                 parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(X, null, ()
+                                listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(X)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
@@ -228,14 +228,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
                                 parseQualifiedRestOpt(Y, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(Y, null, ()
+                                listener: endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(Y)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
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 ec54bee..4e2dc09 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -24,7 +24,7 @@
                 beginConstructorReference(X)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(X, null, ()
+                endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -67,7 +67,7 @@
           beginConstructorReference(X)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(X, null, ()
+          endConstructorReference(X, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -83,7 +83,7 @@
           beginConstructorReference(Y)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(Y, null, ()
+          endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
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 0a4179e..b40afe0 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
@@ -52,14 +52,14 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
                                     parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(X, null, ()
+                                    listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                                   parseConstructorInvocationArguments(X)
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -182,14 +182,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
                                 parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(X, null, ()
+                                listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(X)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
@@ -228,14 +228,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
                                 parseQualifiedRestOpt(Y, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(Y, null, ()
+                                listener: endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(Y)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
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 7ef46c8..407ba51 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -24,7 +24,7 @@
                 beginConstructorReference(X)
                   handleNoTypeArguments(()
                   handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                endConstructorReference(X, null, ()
+                endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                 beginArguments(()
                 endArguments(0, (, ))
               endNewExpression(new)
@@ -67,7 +67,7 @@
           beginConstructorReference(X)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(X, null, ()
+          endConstructorReference(X, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
@@ -83,7 +83,7 @@
           beginConstructorReference(Y)
             handleNoTypeArguments(()
             handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(Y, null, ()
+          endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
           beginArguments(()
           endArguments(0, (, ))
         endNewExpression(new)
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 0fd59b4..5bab2cc 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
@@ -52,14 +52,14 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
                                     parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                     listener: handleNoTypeArguments(()
                                     listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(X, null, ()
+                                    listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                                   parseConstructorInvocationArguments(X)
                                     parseArgumentsRest(()
                                       listener: beginArguments(()
@@ -182,14 +182,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
                                 parseQualifiedRestOpt(X, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(X, null, ()
+                                listener: endConstructorReference(X, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(X)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
@@ -228,14 +228,14 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, null)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
                                 parseQualifiedRestOpt(Y, constructorReferenceContinuation)
                                 listener: handleNoTypeArguments(()
                                 listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                listener: endConstructorReference(Y, null, ()
+                                listener: endConstructorReference(Y, null, (, ConstructorReferenceContext.New)
                               parseConstructorInvocationArguments(Y)
                                 parseArgumentsRest(()
                                   listener: beginArguments(()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart
new file mode 100644
index 0000000..a0c220e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart
@@ -0,0 +1,13 @@
+class Foo {
+  Foo operator >>>(_) => this;
+}
+
+main() {
+  Foo foo = new Foo();
+  foo >>> 42;
+  print(foo >>> 42);
+  print(foo >>>= 42);
+  if ((foo >>>= 42) == foo) {
+    print("same");
+  }
+}
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
new file mode 100644
index 0000000..cc92f37
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
@@ -0,0 +1,164 @@
+Problems reported:
+
+parser/no-triple-shift/define_triple_shift_method:2:16: This requires the 'triple-shift' language feature to be enabled.
+  Foo operator >>>(_) => this;
+               ^^^
+
+parser/no-triple-shift/define_triple_shift_method:7:7: This requires the 'triple-shift' language feature to be enabled.
+  foo >>> 42;
+      ^^^
+
+parser/no-triple-shift/define_triple_shift_method:8:13: This requires the 'triple-shift' language feature to be enabled.
+  print(foo >>> 42);
+            ^^^
+
+parser/no-triple-shift/define_triple_shift_method:9:13: This requires the 'triple-shift' language feature to be enabled.
+  print(foo >>>= 42);
+            ^^^^
+
+parser/no-triple-shift/define_triple_shift_method:10:12: This requires the 'triple-shift' language feature to be enabled.
+  if ((foo >>>= 42) == foo) {
+           ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Foo, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Foo)
+      handleNoType(Foo)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(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)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(Foo, null)
+            handleOperatorName(operator, >>>)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(_)
+              endMetadataStar(0)
+              beginFormalParameter(_, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(_, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleThisExpression(this, expression)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(null, Foo, (, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        handleIdentifier(Foo, typeReference)
+        handleNoTypeArguments(foo)
+        handleType(Foo, null)
+        beginVariablesDeclaration(foo, null, null)
+          handleIdentifier(foo, localVariableDeclaration)
+          beginInitializedIdentifier(foo)
+            beginVariableInitializer(=)
+              beginNewExpression(new)
+                handleIdentifier(Foo, constructorReference)
+                beginConstructorReference(Foo)
+                  handleNoTypeArguments(()
+                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                endConstructorReference(Foo, null, (, ConstructorReferenceContext.New)
+                beginArguments(()
+                endArguments(0, (, ))
+              endNewExpression(new)
+            endVariableInitializer(=)
+          endInitializedIdentifier(foo)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(foo, expression)
+        handleNoTypeArguments(>>)
+        handleNoArguments(>>)
+        handleSend(foo, >>)
+        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}], >>, >)
+        beginBinaryExpression(>>>)
+          handleLiteralInt(42)
+        endBinaryExpression(>>>)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>)
+          handleNoArguments(>>)
+          handleSend(foo, >>)
+          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}], >>, >)
+          beginBinaryExpression(>>>)
+            handleLiteralInt(42)
+          endBinaryExpression(>>>)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>)
+          handleNoArguments(>>)
+          handleSend(foo, >>)
+          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}], >>, >=)
+          handleLiteralInt(42)
+          handleAssignmentExpression(>>>=)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginIfStatement(if)
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>)
+          handleNoArguments(>>)
+          handleSend(foo, >>)
+          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}], >>, >=)
+          handleLiteralInt(42)
+          handleAssignmentExpression(>>>=)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(==)
+            handleIdentifier(foo, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(foo, ))
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement({)
+            beginBlock({, BlockKind(statement))
+              handleIdentifier(print, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                beginLiteralString("same")
+                endLiteralString(0, ))
+              endArguments(1, (, ))
+              handleSend(print, ;)
+              handleExpressionStatement(;)
+            endBlock(1, {, }, BlockKind(statement))
+          endThenStatement(})
+        endIfStatement(if, null)
+      endBlockFunctionBody(5, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..c29f941
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
@@ -0,0 +1,380 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Foo, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, Foo)
+        parseClass(Foo, class, class, Foo)
+          parseClassHeaderOpt(Foo, class, class)
+            parseClassExtendsOpt(Foo)
+              listener: handleNoType(Foo)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(Foo)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(Foo)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, Foo)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
+              parseMetadataStar({)
+                listener: beginMetadataStar(Foo)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                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: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(Foo, null)
+                parseOperatorName(Foo)
+                  listener: handleOperatorName(operator, >>>)
+                parseMethodTypeVar(>>>)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(>>>, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>>>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(_)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(_, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(_, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseThisExpression(=>, expression)
+                              listener: handleThisExpression(this, expression)
+                    ensureSemicolon(this)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(null, Foo, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, Foo)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(foo)
+                listener: beginMetadataStar(Foo)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments(foo)
+                listener: handleType(Foo, null)
+                listener: beginVariablesDeclaration(foo, null, null)
+                parseVariablesDeclarationRest(Foo, true)
+                  parseOptionallyInitializedIdentifier(Foo)
+                    ensureIdentifier(Foo, localVariableDeclaration)
+                      listener: handleIdentifier(foo, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(foo)
+                    parseVariableInitializerOpt(foo)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseNewExpression(=)
+                                isNextIdentifier(new)
+                                listener: beginNewExpression(new)
+                                parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                                  ensureIdentifier(new, constructorReference)
+                                    listener: handleIdentifier(Foo, constructorReference)
+                                  listener: beginConstructorReference(Foo)
+                                  parseQualifiedRestOpt(Foo, constructorReferenceContinuation)
+                                  listener: handleNoTypeArguments(()
+                                  listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                                  listener: endConstructorReference(Foo, null, (, ConstructorReferenceContext.New)
+                                parseConstructorInvocationArguments(Foo)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                                listener: endNewExpression(new)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(foo)
+                  ensureSemicolon())
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, foo)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(foo)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(foo, expression)
+                              listener: handleNoTypeArguments(>>)
+                              parseArgumentsOpt(foo)
+                                listener: handleNoArguments(>>)
+                              listener: handleSend(foo, >>)
+                      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: beginBinaryExpression(>>>)
+                      parsePrecedenceExpression(>>>, 13, true)
+                        parseUnaryExpression(>>>, true)
+                          parsePrimary(>>>, expression)
+                            parseLiteralInt(>>>)
+                              listener: handleLiteralInt(42)
+                      listener: endBinaryExpression(>>>)
+                  ensureSemicolon(42)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>)
+                                                listener: handleSend(foo, >>)
+                                        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: beginBinaryExpression(>>>)
+                                        parsePrecedenceExpression(>>>, 13, true)
+                                          parseUnaryExpression(>>>, true)
+                                            parsePrimary(>>>, expression)
+                                              parseLiteralInt(>>>)
+                                                listener: handleLiteralInt(42)
+                                        listener: endBinaryExpression(>>>)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>)
+                                                listener: handleSend(foo, >>)
+                                        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()
+                                        parsePrecedenceExpression(>>>=, 1, true)
+                                          parseUnaryExpression(>>>=, true)
+                                            parsePrimary(>>>=, expression)
+                                              parseLiteralInt(>>>=)
+                                                listener: handleLiteralInt(42)
+                                        listener: handleAssignmentExpression(>>>=)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(()
+                              parseParenthesizedExpression(()
+                                parseExpressionInParenthesis(()
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>)
+                                                listener: handleSend(foo, >>)
+                                        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()
+                                        parsePrecedenceExpression(>>>=, 1, true)
+                                          parseUnaryExpression(>>>=, true)
+                                            parsePrimary(>>>=, expression)
+                                              parseLiteralInt(>>>=)
+                                                listener: handleLiteralInt(42)
+                                        listener: handleAssignmentExpression(>>>=)
+                                    ensureCloseParen(42, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseSendOrFunctionLiteral(==, expression)
+                                parseSend(==, expression)
+                                  isNextIdentifier(==)
+                                  ensureIdentifier(==, expression)
+                                    listener: handleIdentifier(foo, expression)
+                                  listener: handleNoTypeArguments())
+                                  parseArgumentsOpt(foo)
+                                    listener: handleNoArguments())
+                                  listener: handleSend(foo, ))
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(foo, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement({)
+                parseStatement())
+                  parseStatementX())
+                    parseBlock(), BlockKind(statement))
+                      ensureBlock(), null, null)
+                      listener: beginBlock({, BlockKind(statement))
+                      notEofOrValue(}, print)
+                      parseStatement({)
+                        parseStatementX({)
+                          parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                            looksLikeLocalFunction(print)
+                            parseExpressionStatement({)
+                              parseExpression({)
+                                parsePrecedenceExpression({, 1, true)
+                                  parseUnaryExpression({, true)
+                                    parsePrimary({, expression)
+                                      parseSendOrFunctionLiteral({, expression)
+                                        looksLikeFunctionBody(;)
+                                        parseSend({, expression)
+                                          isNextIdentifier({)
+                                          ensureIdentifier({, expression)
+                                            listener: handleIdentifier(print, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(print)
+                                            parseArguments(print)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true)
+                                                    parseUnaryExpression((, true)
+                                                      parsePrimary((, expression)
+                                                        parseLiteralString(()
+                                                          parseSingleLiteralString(()
+                                                            listener: beginLiteralString("same")
+                                                            listener: endLiteralString(0, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(print, ;)
+                              ensureSemicolon())
+                              listener: handleExpressionStatement(;)
+                      notEofOrValue(}, })
+                      listener: endBlock(1, {, }, BlockKind(statement))
+                listener: endThenStatement(})
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(5, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.parser.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.parser.expect
new file mode 100644
index 0000000..71e5cb1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.parser.expect
@@ -0,0 +1,31 @@
+NOTICE: Stream was rewritten by parser!
+
+class Foo {
+Foo operator >>> (_) => this;
+}
+
+main() {
+Foo foo = new Foo();
+foo >>> 42;
+print(foo >>> 42);
+print(foo >>>= 42);
+if ((foo >>>= 42) == foo) {
+print("same");
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+Foo[StringToken] operator[KeywordToken] >>>[ReplacementToken] ([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Foo[StringToken] foo[StringToken] =[SimpleToken] new[KeywordToken] Foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+foo[StringToken] >>>[ReplacementToken] 42[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>>[ReplacementToken] 42[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>>=[ReplacementToken] 42[StringToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]([BeginToken]foo[StringToken] >>>=[ReplacementToken] 42[StringToken])[SimpleToken] ==[SimpleToken] foo[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"same"[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.scanner.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.scanner.expect
new file mode 100644
index 0000000..e7c9bf6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.scanner.expect
@@ -0,0 +1,29 @@
+class Foo {
+Foo operator >>>(_) => this;
+}
+
+main() {
+Foo foo = new Foo();
+foo >>> 42;
+print(foo >>> 42);
+print(foo >>>= 42);
+if ((foo >>>= 42) == foo) {
+print("same");
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+Foo[StringToken] operator[KeywordToken] >>[SimpleToken]>[SimpleToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Foo[StringToken] foo[StringToken] =[SimpleToken] new[KeywordToken] Foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+foo[StringToken] >>[SimpleToken]>[SimpleToken] 42[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>[SimpleToken]>[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>[SimpleToken]>=[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]([BeginToken]foo[StringToken] >>[SimpleToken]>=[SimpleToken] 42[StringToken])[SimpleToken] ==[SimpleToken] foo[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"same"[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.equivalence_info b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.equivalence_info
new file mode 100644
index 0000000..ba86f89
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - define_triple_shift_method.dart
+  - define_triple_shift_method_prime.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart
new file mode 100644
index 0000000..c093e29
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart
@@ -0,0 +1,13 @@
+class Foo {
+  Foo operator >>(_) => this;
+}
+
+main() {
+  Foo foo = new Foo();
+  foo >> 42;
+  print(foo >> 42);
+  print(foo >>= 42);
+  if ((foo >>= 42) == foo) {
+    print("same");
+  }
+}
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
new file mode 100644
index 0000000..cd35af3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
@@ -0,0 +1,137 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Foo, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Foo)
+      handleNoType(Foo)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(Foo, null)
+            handleOperatorName(operator, >>)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(_)
+              endMetadataStar(0)
+              beginFormalParameter(_, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(_, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleThisExpression(this, expression)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(null, Foo, (, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        handleIdentifier(Foo, typeReference)
+        handleNoTypeArguments(foo)
+        handleType(Foo, null)
+        beginVariablesDeclaration(foo, null, null)
+          handleIdentifier(foo, localVariableDeclaration)
+          beginInitializedIdentifier(foo)
+            beginVariableInitializer(=)
+              beginNewExpression(new)
+                handleIdentifier(Foo, constructorReference)
+                beginConstructorReference(Foo)
+                  handleNoTypeArguments(()
+                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                endConstructorReference(Foo, null, (, ConstructorReferenceContext.New)
+                beginArguments(()
+                endArguments(0, (, ))
+              endNewExpression(new)
+            endVariableInitializer(=)
+          endInitializedIdentifier(foo)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(foo, expression)
+        handleNoTypeArguments(>>)
+        handleNoArguments(>>)
+        handleSend(foo, >>)
+        beginBinaryExpression(>>)
+          handleLiteralInt(42)
+        endBinaryExpression(>>)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>)
+          handleNoArguments(>>)
+          handleSend(foo, >>)
+          beginBinaryExpression(>>)
+            handleLiteralInt(42)
+          endBinaryExpression(>>)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>=)
+          handleNoArguments(>>=)
+          handleSend(foo, >>=)
+          handleLiteralInt(42)
+          handleAssignmentExpression(>>=)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginIfStatement(if)
+          handleIdentifier(foo, expression)
+          handleNoTypeArguments(>>=)
+          handleNoArguments(>>=)
+          handleSend(foo, >>=)
+          handleLiteralInt(42)
+          handleAssignmentExpression(>>=)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(==)
+            handleIdentifier(foo, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(foo, ))
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement({)
+            beginBlock({, BlockKind(statement))
+              handleIdentifier(print, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                beginLiteralString("same")
+                endLiteralString(0, ))
+              endArguments(1, (, ))
+              handleSend(print, ;)
+              handleExpressionStatement(;)
+            endBlock(1, {, }, BlockKind(statement))
+          endThenStatement(})
+        endIfStatement(if, null)
+      endBlockFunctionBody(5, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..675e626
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
@@ -0,0 +1,365 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Foo, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, Foo)
+        parseClass(Foo, class, class, Foo)
+          parseClassHeaderOpt(Foo, class, class)
+            parseClassExtendsOpt(Foo)
+              listener: handleNoType(Foo)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(Foo)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(Foo)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, Foo)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
+              parseMetadataStar({)
+                listener: beginMetadataStar(Foo)
+                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: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(Foo, null)
+                parseOperatorName(Foo)
+                  listener: handleOperatorName(operator, >>)
+                parseMethodTypeVar(>>)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(>>, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(>>, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(_)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(_, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(_, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseThisExpression(=>, expression)
+                              listener: handleThisExpression(this, expression)
+                    ensureSemicolon(this)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(null, Foo, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, Foo)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(foo)
+                listener: beginMetadataStar(Foo)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments(foo)
+                listener: handleType(Foo, null)
+                listener: beginVariablesDeclaration(foo, null, null)
+                parseVariablesDeclarationRest(Foo, true)
+                  parseOptionallyInitializedIdentifier(Foo)
+                    ensureIdentifier(Foo, localVariableDeclaration)
+                      listener: handleIdentifier(foo, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(foo)
+                    parseVariableInitializerOpt(foo)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseNewExpression(=)
+                                isNextIdentifier(new)
+                                listener: beginNewExpression(new)
+                                parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                                  ensureIdentifier(new, constructorReference)
+                                    listener: handleIdentifier(Foo, constructorReference)
+                                  listener: beginConstructorReference(Foo)
+                                  parseQualifiedRestOpt(Foo, constructorReferenceContinuation)
+                                  listener: handleNoTypeArguments(()
+                                  listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                                  listener: endConstructorReference(Foo, null, (, ConstructorReferenceContext.New)
+                                parseConstructorInvocationArguments(Foo)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                                listener: endNewExpression(new)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(foo)
+                  ensureSemicolon())
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, foo)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(foo)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(foo, expression)
+                              listener: handleNoTypeArguments(>>)
+                              parseArgumentsOpt(foo)
+                                listener: handleNoArguments(>>)
+                              listener: handleSend(foo, >>)
+                      listener: beginBinaryExpression(>>)
+                      parsePrecedenceExpression(>>, 13, true)
+                        parseUnaryExpression(>>, true)
+                          parsePrimary(>>, expression)
+                            parseLiteralInt(>>)
+                              listener: handleLiteralInt(42)
+                      listener: endBinaryExpression(>>)
+                  ensureSemicolon(42)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>)
+                                                listener: handleSend(foo, >>)
+                                        listener: beginBinaryExpression(>>)
+                                        parsePrecedenceExpression(>>, 13, true)
+                                          parseUnaryExpression(>>, true)
+                                            parsePrimary(>>, expression)
+                                              parseLiteralInt(>>)
+                                                listener: handleLiteralInt(42)
+                                        listener: endBinaryExpression(>>)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>=)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>=)
+                                                listener: handleSend(foo, >>=)
+                                        parsePrecedenceExpression(>>=, 1, true)
+                                          parseUnaryExpression(>>=, true)
+                                            parsePrimary(>>=, expression)
+                                              parseLiteralInt(>>=)
+                                                listener: handleLiteralInt(42)
+                                        listener: handleAssignmentExpression(>>=)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(()
+                              parseParenthesizedExpression(()
+                                parseExpressionInParenthesis(()
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(foo, expression)
+                                                listener: handleNoTypeArguments(>>=)
+                                                parseArgumentsOpt(foo)
+                                                  listener: handleNoArguments(>>=)
+                                                listener: handleSend(foo, >>=)
+                                        parsePrecedenceExpression(>>=, 1, true)
+                                          parseUnaryExpression(>>=, true)
+                                            parsePrimary(>>=, expression)
+                                              parseLiteralInt(>>=)
+                                                listener: handleLiteralInt(42)
+                                        listener: handleAssignmentExpression(>>=)
+                                    ensureCloseParen(42, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseSendOrFunctionLiteral(==, expression)
+                                parseSend(==, expression)
+                                  isNextIdentifier(==)
+                                  ensureIdentifier(==, expression)
+                                    listener: handleIdentifier(foo, expression)
+                                  listener: handleNoTypeArguments())
+                                  parseArgumentsOpt(foo)
+                                    listener: handleNoArguments())
+                                  listener: handleSend(foo, ))
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(foo, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement({)
+                parseStatement())
+                  parseStatementX())
+                    parseBlock(), BlockKind(statement))
+                      ensureBlock(), null, null)
+                      listener: beginBlock({, BlockKind(statement))
+                      notEofOrValue(}, print)
+                      parseStatement({)
+                        parseStatementX({)
+                          parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                            looksLikeLocalFunction(print)
+                            parseExpressionStatement({)
+                              parseExpression({)
+                                parsePrecedenceExpression({, 1, true)
+                                  parseUnaryExpression({, true)
+                                    parsePrimary({, expression)
+                                      parseSendOrFunctionLiteral({, expression)
+                                        looksLikeFunctionBody(;)
+                                        parseSend({, expression)
+                                          isNextIdentifier({)
+                                          ensureIdentifier({, expression)
+                                            listener: handleIdentifier(print, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(print)
+                                            parseArguments(print)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true)
+                                                    parseUnaryExpression((, true)
+                                                      parsePrimary((, expression)
+                                                        parseLiteralString(()
+                                                          parseSingleLiteralString(()
+                                                            listener: beginLiteralString("same")
+                                                            listener: endLiteralString(0, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(print, ;)
+                              ensureSemicolon())
+                              listener: handleExpressionStatement(;)
+                      notEofOrValue(}, })
+                      listener: endBlock(1, {, }, BlockKind(statement))
+                listener: endThenStatement(})
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(5, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.parser.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.parser.expect
new file mode 100644
index 0000000..4441541
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.parser.expect
@@ -0,0 +1,29 @@
+class Foo {
+Foo operator >>(_) => this;
+}
+
+main() {
+Foo foo = new Foo();
+foo >> 42;
+print(foo >> 42);
+print(foo >>= 42);
+if ((foo >>= 42) == foo) {
+print("same");
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+Foo[StringToken] operator[KeywordToken] >>[SimpleToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Foo[StringToken] foo[StringToken] =[SimpleToken] new[KeywordToken] Foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+foo[StringToken] >>[SimpleToken] 42[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>=[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]([BeginToken]foo[StringToken] >>=[SimpleToken] 42[StringToken])[SimpleToken] ==[SimpleToken] foo[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"same"[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.scanner.expect
new file mode 100644
index 0000000..4441541
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.scanner.expect
@@ -0,0 +1,29 @@
+class Foo {
+Foo operator >>(_) => this;
+}
+
+main() {
+Foo foo = new Foo();
+foo >> 42;
+print(foo >> 42);
+print(foo >>= 42);
+if ((foo >>= 42) == foo) {
+print("same");
+}
+}
+
+
+class[KeywordToken] Foo[StringToken] {[BeginToken]
+Foo[StringToken] operator[KeywordToken] >>[SimpleToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Foo[StringToken] foo[StringToken] =[SimpleToken] new[KeywordToken] Foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+foo[StringToken] >>[SimpleToken] 42[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]foo[StringToken] >>=[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]([BeginToken]foo[StringToken] >>=[SimpleToken] 42[StringToken])[SimpleToken] ==[SimpleToken] foo[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"same"[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart
new file mode 100644
index 0000000..5ca7d9e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart
@@ -0,0 +1,6 @@
+// From https://github.com/dart-lang/sdk/issues/46886
+
+void main(List<String> arguments) {
+  var x = 10 >>> 2;
+  print('x: $x');
+}
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect
new file mode 100644
index 0000000..c88d460
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect
@@ -0,0 +1,64 @@
+Problems reported:
+
+parser/no-triple-shift/simple_attempted_usage_of_triple_shift:4:14: This requires the 'triple-shift' language feature to be enabled.
+  var x = 10 >>> 2;
+             ^^^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(String, typeReference)
+            handleNoTypeArguments(>)
+            handleType(String, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(arguments, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, arguments, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration(x, null, var)
+          handleIdentifier(x, localVariableDeclaration)
+          beginInitializedIdentifier(x)
+            beginVariableInitializer(=)
+              handleLiteralInt(10)
+              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}], >>, >)
+              beginBinaryExpression(>>>)
+                handleLiteralInt(2)
+              endBinaryExpression(>>>)
+            endVariableInitializer(=)
+          endInitializedIdentifier(x)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('x: )
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(x, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(1, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect
new file mode 100644
index 0000000..6db3700
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect
@@ -0,0 +1,130 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(String, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(arguments, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, arguments, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, var)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, false)
+                looksLikeLocalFunction(x)
+                listener: beginMetadataStar(var)
+                listener: endMetadataStar(0)
+                listener: handleNoType(var)
+                listener: beginVariablesDeclaration(x, null, var)
+                parseVariablesDeclarationRest(var, true)
+                  parseOptionallyInitializedIdentifier(var)
+                    ensureIdentifier(var, localVariableDeclaration)
+                      listener: handleIdentifier(x, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(x)
+                    parseVariableInitializerOpt(x)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseLiteralInt(=)
+                                listener: handleLiteralInt(10)
+                          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: beginBinaryExpression(>>>)
+                          parsePrecedenceExpression(>>>, 13, true)
+                            parseUnaryExpression(>>>, true)
+                              parsePrimary(>>>, expression)
+                                parseLiteralInt(>>>)
+                                  listener: handleLiteralInt(2)
+                          listener: endBinaryExpression(>>>)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(x)
+                  ensureSemicolon(2)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('x: )
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    isNextIdentifier($)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(x, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(x)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(1, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.parser.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.parser.expect
new file mode 100644
index 0000000..7249fbc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.parser.expect
@@ -0,0 +1,13 @@
+NOTICE: Stream was rewritten by parser!
+
+void main(List<String> arguments) {
+var x = 10 >>> 2;
+print('x: $x');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken] arguments[StringToken])[SimpleToken] {[BeginToken]
+var[KeywordToken] x[StringToken] =[SimpleToken] 10[StringToken] >>>[ReplacementToken] 2[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'x: [StringToken]$[SimpleToken]x[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.scanner.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.scanner.expect
new file mode 100644
index 0000000..6f63e7e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.scanner.expect
@@ -0,0 +1,11 @@
+void main(List<String> arguments) {
+var x = 10 >>> 2;
+print('x: $x');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken] arguments[StringToken])[SimpleToken] {[BeginToken]
+var[KeywordToken] x[StringToken] =[SimpleToken] 10[StringToken] >>[SimpleToken]>[SimpleToken] 2[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'x: [StringToken]$[SimpleToken]x[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart
new file mode 100644
index 0000000..bb5247d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart
@@ -0,0 +1,11 @@
+// From https://github.com/dart-lang/sdk/issues/46886
+extension on Symbol {
+  String operator >(_) => "Greater Than used";
+  String call(_) => "Called";
+}
+
+void main() {
+  print(#>>>(2));
+}
+
+abstract class Foo extends List<List<List<String>>> {}
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
new file mode 100644
index 0000000..616d7b4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
@@ -0,0 +1,120 @@
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(on)
+    beginExtensionDeclaration(extension, null)
+      handleIdentifier(Symbol, typeReference)
+      handleNoTypeArguments({)
+      handleType(Symbol, null)
+      beginClassOrMixinBody(DeclarationKind.Extension, {)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, operator)
+            handleIdentifier(String, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(String, null)
+            handleOperatorName(operator, >)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+              beginMetadataStar(_)
+              endMetadataStar(0)
+              beginFormalParameter(_, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(_, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginLiteralString("Greater Than used")
+            endLiteralString(0, ;)
+            handleExpressionFunctionBody(=>, ;)
+          endExtensionMethod(null, String, (, null, ;)
+        endMember()
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, call)
+            handleIdentifier(String, typeReference)
+            handleNoTypeArguments(call)
+            handleType(String, null)
+            handleIdentifier(call, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+              beginMetadataStar(_)
+              endMetadataStar(0)
+              beginFormalParameter(_, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(_, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginLiteralString("Called")
+            endLiteralString(0, ;)
+            handleExpressionFunctionBody(=>, ;)
+          endExtensionMethod(null, String, (, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Extension, 2, {, })
+    endExtensionDeclaration(extension, null, on, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralSymbol(#)
+            handleOperator(>>)
+          endLiteralSymbol(#, 1)
+          beginBinaryExpression(>)
+            handleLiteralInt(2)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Foo, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(abstract, abstract, Foo)
+      handleIdentifier(List, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(List, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(String, typeReference)
+            handleNoTypeArguments(>)
+            handleType(String, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+        endTypeArguments(1, <, >)
+        handleType(List, null)
+      endTypeArguments(1, <, >)
+      handleType(List, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(abstract, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+      endClassOrMixinBody(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
new file mode 100644
index 0000000..aea9af2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
@@ -0,0 +1,251 @@
+parseUnit(extension)
+  skipErrorTokens(extension)
+  listener: beginCompilationUnit(extension)
+  syntheticPreviousToken(extension)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, extension, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(, extension)
+      parseExtension(extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        listener: handleNoTypeVariables(on)
+        listener: beginExtensionDeclaration(extension, null)
+        listener: handleIdentifier(Symbol, typeReference)
+        listener: handleNoTypeArguments({)
+        listener: handleType(Symbol, null)
+        parseClassOrMixinOrExtensionBody(Symbol, DeclarationKind.Extension, null)
+          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          notEofOrValue(}, String)
+          parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
+            parseMetadataStar({)
+              listener: beginMetadataStar(String)
+              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: handleIdentifier(String, typeReference)
+              listener: handleNoTypeArguments(operator)
+              listener: handleType(String, null)
+              parseOperatorName(String)
+                listener: handleOperatorName(operator, >)
+              parseMethodTypeVar(>)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(>, operator, false, MemberKind.ExtensionNonStaticMethod)
+                parseFormalParameters(>, MemberKind.ExtensionNonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(_)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(_, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(_, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralString(=>)
+                            parseSingleLiteralString(=>)
+                              listener: beginLiteralString("Greater Than used")
+                              listener: endLiteralString(0, ;)
+                  ensureSemicolon("Greater Than used")
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endExtensionMethod(null, String, (, null, ;)
+            listener: endMember()
+          notEofOrValue(}, String)
+          parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Extension, null)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(String)
+              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: handleIdentifier(String, typeReference)
+              listener: handleNoTypeArguments(call)
+              listener: handleType(String, null)
+              ensureIdentifierPotentiallyRecovered(String, methodDeclaration, false)
+                listener: handleIdentifier(call, methodDeclaration)
+              parseQualifiedRestOpt(call, methodDeclarationContinuation)
+              parseMethodTypeVar(call)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(call, call, false, MemberKind.ExtensionNonStaticMethod)
+                parseFormalParameters(call, MemberKind.ExtensionNonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(_)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(_, MemberKind.ExtensionNonStaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(_, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralString(=>)
+                            parseSingleLiteralString(=>)
+                              listener: beginLiteralString("Called")
+                              listener: endLiteralString(0, ;)
+                  ensureSemicolon("Called")
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endExtensionMethod(null, String, (, null, ;)
+            listener: endMember()
+          notEofOrValue(}, })
+          listener: endClassOrMixinBody(DeclarationKind.Extension, 2, {, })
+        listener: endExtensionDeclaration(extension, null, on, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralSymbol(()
+                                              listener: beginLiteralSymbol(#)
+                                              listener: handleOperator(>>)
+                                              listener: endLiteralSymbol(#, 1)
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(2)
+                                                      ensureCloseParen(2, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+        parseTopLevelKeywordModifiers(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Foo, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(abstract, abstract, Foo)
+        parseClass(Foo, abstract, class, Foo)
+          parseClassHeaderOpt(Foo, abstract, class)
+            parseClassExtendsOpt(Foo)
+              parseClassExtendsSeenExtendsClause(extends, Foo)
+                ensureIdentifier(extends, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                ensureIdentifier(<, typeReference)
+                  listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(String, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                listener: handleClassExtends(extends, 1)
+            parseWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(>)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(abstract, class, null)
+          parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, Foo)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(abstract, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(extension)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.parser.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.parser.expect
new file mode 100644
index 0000000..94cc726
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.parser.expect
@@ -0,0 +1,25 @@
+NOTICE: Stream was rewritten by parser!
+
+extension on Symbol {
+String operator >(_) => "Greater Than used";
+String call(_) => "Called";
+}
+
+void main() {
+print(#>>>(2));
+}
+
+abstract class Foo extends List<List<List<String>>> {}
+
+
+extension[KeywordToken] on[KeywordToken] Symbol[StringToken] {[BeginToken]
+String[StringToken] operator[KeywordToken] >[SimpleToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] "Greater Than used"[StringToken];[SimpleToken]
+String[StringToken] call[StringToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] "Called"[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]#[SimpleToken]>>[SimpleToken]>[SimpleToken]([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+abstract[KeywordToken] class[KeywordToken] Foo[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken]List[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>[SimpleToken]>[SimpleToken]>[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.scanner.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.scanner.expect
new file mode 100644
index 0000000..a0d2fdf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.scanner.expect
@@ -0,0 +1,23 @@
+extension on Symbol {
+String operator >(_) => "Greater Than used";
+String call(_) => "Called";
+}
+
+void main() {
+print(#>>>(2));
+}
+
+abstract class Foo extends List<List<List<String>>> {}
+
+
+extension[KeywordToken] on[KeywordToken] Symbol[StringToken] {[BeginToken]
+String[StringToken] operator[KeywordToken] >[SimpleToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] "Greater Than used"[StringToken];[SimpleToken]
+String[StringToken] call[StringToken]([BeginToken]_[StringToken])[SimpleToken] =>[SimpleToken] "Called"[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]#[SimpleToken]>>[SimpleToken]>[SimpleToken]([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+abstract[KeywordToken] class[KeywordToken] Foo[StringToken] extends[KeywordToken] List[StringToken]<[BeginToken]List[StringToken]<[BeginToken]List[StringToken]<[BeginToken]String[StringToken]>>[SimpleToken]>[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart
new file mode 100644
index 0000000..a2b84b0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart
@@ -0,0 +1,3 @@
+main() {
+  print(#>>>);
+}
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect
new file mode 100644
index 0000000..0b9ca1d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect
@@ -0,0 +1,38 @@
+Problems reported:
+
+parser/no-triple-shift/triple_shift_symbol:2:13: Expected an identifier, but got ')'.
+  print(#>>>);
+            ^
+
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralSymbol(#)
+            handleOperator(>>)
+          endLiteralSymbol(#, 1)
+          beginBinaryExpression(>)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+            handleIdentifier(, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(, ))
+          endBinaryExpression(>)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect
new file mode 100644
index 0000000..9a4f6ba
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect
@@ -0,0 +1,83 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralSymbol(()
+                                              listener: beginLiteralSymbol(#)
+                                              listener: handleOperator(>>)
+                                              listener: endLiteralSymbol(#, 1)
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseSend(>, expression)
+                                                isNextIdentifier(>)
+                                                ensureIdentifier(>, expression)
+                                                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                  rewriter()
+                                                  listener: handleIdentifier(, expression)
+                                                listener: handleNoTypeArguments())
+                                                parseArgumentsOpt()
+                                                  listener: handleNoArguments())
+                                                listener: handleSend(, ))
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.parser.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.parser.expect
new file mode 100644
index 0000000..b608049
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.parser.expect
@@ -0,0 +1,11 @@
+NOTICE: Stream was rewritten by parser!
+
+main() {
+print(#>>>*synthetic*);
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]#[SimpleToken]>>[SimpleToken]>[SimpleToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.scanner.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.scanner.expect
new file mode 100644
index 0000000..604d5d7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+print(#>>>);
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]#[SimpleToken]>>[SimpleToken]>[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml
index 6893010..9e67ea3 100644
--- a/pkg/front_end/pubspec.yaml
+++ b/pkg/front_end/pubspec.yaml
@@ -6,7 +6,7 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+  sdk: '>=2.13.0 <3.0.0'
 
 dependencies:
   _fe_analyzer_shared:
diff --git a/pkg/front_end/test/ast_nodes_has_to_string_test.dart b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
index 1750eab..705ed30 100644
--- a/pkg/front_end/test/ast_nodes_has_to_string_test.dart
+++ b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
@@ -2,8 +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.md file.
 
-// @dart = 2.9
-
 import 'dart:io' show File, Platform, stdin, exitCode;
 
 import 'package:front_end/src/api_prototype/compiler_options.dart';
@@ -12,7 +10,7 @@
 
 import 'incremental_suite.dart' as helper;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   exitCode = 1;
   Map<Uri, List<Class>> classMap = {};
   Map<Uri, List<Class>> classMapWithOne = {};
@@ -26,13 +24,10 @@
     Uri input = Platform.script.resolve("../tool/_fasta/compile.dart");
     CompilerOptions options = helper.getOptions();
     helper.TestIncrementalCompiler compiler =
-        new helper.TestIncrementalCompiler(
-            options,
-            input,
-            /*Uri initializeFrom*/ null,
-            /*bool outlineOnly*/ true);
+        new helper.TestIncrementalCompiler(options, input,
+            /*Uri initializeFrom*/ null, /*bool outlineOnly*/ true);
     c = await compiler.computeDelta();
-    classHierarchy = compiler.getClassHierarchy();
+    classHierarchy = compiler.getClassHierarchy()!;
     List<Library> libraries = c.libraries
         .where((Library lib) =>
             (lib.importUri.toString() == "package:kernel/ast.dart"))
@@ -63,13 +58,13 @@
           if (toStringList.length > 1) throw "What?";
           if (toStringList.length == 1) {
             classMapWithOne[c.fileUri] ??= <Class>[];
-            classMapWithOne[c.fileUri].add(c);
+            classMapWithOne[c.fileUri]!.add(c);
             continue;
           }
           toGo++;
 
           classMap[c.fileUri] ??= <Class>[];
-          classMap[c.fileUri].add(c);
+          classMap[c.fileUri]!.add(c);
         }
       }
     }
@@ -85,7 +80,7 @@
 
     if (args.length == 1 && args.single == "--interactive") {
       for (Uri uri in classMap.keys) {
-        List<Class> classes = classMap[uri];
+        List<Class> classes = classMap[uri]!;
         print("Would you like to update ${classes.length} classes in ${uri}?"
             " (y/n)");
         if (stdin.readLineSync() != "y") {
@@ -132,7 +127,7 @@
 
   if (args.length == 1 && args.single == "--interactive") {
     for (Uri uri in classMapWithOne.keys) {
-      List<Class> classes = classMapWithOne[uri];
+      List<Class> classes = classMapWithOne[uri]!;
       print("Would you like to update toString for ${classes.length} "
           "classes in ${uri}? (y/n)");
       if (stdin.readLineSync() != "y") {
diff --git a/pkg/front_end/test/binary_md_dill_reader.dart b/pkg/front_end/test/binary_md_dill_reader.dart
index f427697..1a02047 100644
--- a/pkg/front_end/test/binary_md_dill_reader.dart
+++ b/pkg/front_end/test/binary_md_dill_reader.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import "dart:math" as math;
 
 class BinaryMdDillReader {
@@ -13,20 +11,20 @@
   final List<int> _dillContent;
 
   String _currentlyUnparsed = "";
-  Map<String, List<String>> _readingInstructions;
-  Map<String, List<String>> _generics;
-  Map<int, String> tagToName;
-  Map<int, String> constantTagToName;
-  int version;
-  Map<String, String> _extends;
-  int _binaryMdNestingDepth;
-  String _binaryMdCurrentClass;
+  late Map<String, List<String>> _readingInstructions;
+  late Map<String, List<String>> _generics;
+  late Map<int, String> tagToName;
+  late Map<int, String> constantTagToName;
+  int? version;
+  late Map<String, String> _extends;
+  late int _binaryMdNestingDepth;
+  late String _binaryMdCurrentClass;
 
   /// The offset in the binary where we're supposed to read next.
-  int _binaryOffset;
+  late int _binaryOffset;
 
-  int _depth;
-  Map _dillStringsPointer;
+  late int _depth;
+  late Map _dillStringsPointer;
   int verboseLevel = 0;
   bool _ranSetup = false;
   List<String> readingStack = [];
@@ -100,16 +98,16 @@
     }
   }
 
-  int numLibs;
-  int binaryOffsetForSourceTable;
-  int binaryOffsetForConstantTable;
-  int binaryOffsetForConstantTableIndex;
-  int binaryOffsetForCanonicalNames;
-  int binaryOffsetForMetadataPayloads;
-  int binaryOffsetForMetadataMappings;
-  int binaryOffsetForStringTable;
-  int binaryOffsetForStartOfComponentIndex;
-  int mainMethodReference;
+  late int numLibs;
+  late int binaryOffsetForSourceTable;
+  late int binaryOffsetForConstantTable;
+  late int binaryOffsetForConstantTableIndex;
+  late int binaryOffsetForCanonicalNames;
+  late int binaryOffsetForMetadataPayloads;
+  late int binaryOffsetForMetadataMappings;
+  late int binaryOffsetForStringTable;
+  late int binaryOffsetForStartOfComponentIndex;
+  late int mainMethodReference;
 
   /// Read the dill file data, parsing it into a Map.
   Map _readDill() {
@@ -146,7 +144,7 @@
     /*int compilationMode = */ _peekUint32();
 
     _binaryOffset = binaryOffsetForStringTable;
-    var saved = _readingInstructions["ComponentFile"];
+    var saved = _readingInstructions["ComponentFile"]!;
     _readingInstructions["ComponentFile"] = ["StringTable strings;"];
     _readBinary("ComponentFile", "");
     _readingInstructions["ComponentFile"] = saved;
@@ -169,7 +167,7 @@
   /// Initial setup of a "class definition" in the binary.md file.
   /// This includes parsing the name, setting up any "extends"-relationship,
   /// generics etc.
-  _binaryMdHandlePossibleClassStart(String s) {
+  void _binaryMdHandlePossibleClassStart(String s) {
     if (s.startsWith("type Byte =")) return;
     if (s.startsWith("type UInt32 =")) return;
 
@@ -189,8 +187,8 @@
       name = name.substring("enum ".length);
       isEnum = true;
     }
-    String nameExtends = null;
-    Match extendsMatch = (new RegExp("extends (.+)[ \{]")).firstMatch(name);
+    String? nameExtends = null;
+    Match? extendsMatch = (new RegExp("extends (.+)[ \{]")).firstMatch(name);
     if (extendsMatch != null) {
       nameExtends = extendsMatch.group(1);
     }
@@ -221,7 +219,7 @@
   /// * "Byte tag = 97;" into "Byte"
   /// * "List<T> {" into "List<T>"
   String _getType(final String inputString) {
-    String cached = _typeCache[inputString];
+    String? cached = _typeCache[inputString];
     if (cached != null) return cached;
     int end = math.max(
         math.max(inputString.indexOf(" "), inputString.lastIndexOf(">") + 1),
@@ -402,14 +400,14 @@
       _currentlyUnparsed = "";
     }
 
-    _readingInstructions[_binaryMdCurrentClass].add(s.trim());
+    _readingInstructions[_binaryMdCurrentClass]!.add(s.trim());
   }
 
   /// Check the all types referenced by reading instructions are types we know
   /// about.
   void _binaryMdCheckHasAllTypes() {
     for (String key in _readingInstructions.keys) {
-      for (String s in _readingInstructions[key]) {
+      for (String s in _readingInstructions[key]!) {
         String type = _getType(s);
         if (!_isKnownType(type, key)) {
           throw "Unknown type: $type (used in $key)";
@@ -429,7 +427,7 @@
     }
 
     if (parent.contains("<")) {
-      Set<String> types = _generics[parent].toSet();
+      Set<String> types = _generics[parent]!.toSet();
       if (types.contains(type)) return true;
       if (type.contains("[") &&
           types.contains(type.substring(0, type.indexOf("[")))) return true;
@@ -493,7 +491,7 @@
     if (what.contains("<")) {
       types = _getGenerics(what);
       what = what.substring(0, what.indexOf("<")) + "<${types.length}>";
-      typeNames = _generics[what];
+      typeNames = _generics[what]!;
     }
 
     if (_readingInstructions[what] == null) {
@@ -508,7 +506,7 @@
       print("".padLeft(_depth * 2) + " -> $what ($orgWhat @ $orgPosition)");
     }
 
-    for (String instruction in _readingInstructions[what]) {
+    for (String instruction in _readingInstructions[what]!) {
       // Special-case a few things that aren't (easily) described in the
       // binary.md file.
       if (what == "Name" && instruction == "LibraryReference library;") {
@@ -694,7 +692,7 @@
   /// the binary.md file has been read in entirety (because the field isn't
   /// completely filled out yet).
   bool _isA(String what, String a) {
-    String parent = what;
+    String? parent = what;
     while (parent != null) {
       if (parent == a) return true;
       parent = _extends[parent];
@@ -715,7 +713,7 @@
 
     if (what == "Expression") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "Expression")) {
           throw "Expected Expression but found $what";
         }
@@ -725,7 +723,7 @@
     }
     if (what == "IntegerLiteral") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "IntegerLiteral")) {
           throw "Expected IntegerLiteral but found $what";
         }
@@ -735,7 +733,7 @@
     }
     if (what == "Statement") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "Statement")) {
           throw "Expected Statement but found $what";
         }
@@ -745,7 +743,7 @@
     }
     if (what == "Initializer") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "Initializer")) {
           throw "Expected Initializer but found $what";
         }
@@ -755,7 +753,7 @@
     }
     if (what == "DartType") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "DartType")) {
           throw "Expected DartType but found $what";
         }
@@ -766,13 +764,13 @@
     }
     if (what.startsWith("Option<")) {
       if (tagMap[_dillContent[_binaryOffset]] != null &&
-          tagMap[_dillContent[_binaryOffset]].startsWith("Something<")) {
+          tagMap[_dillContent[_binaryOffset]]!.startsWith("Something<")) {
         what = what.replaceFirst("Option<", "Something<");
       }
     }
     if (what == "Constant") {
       if (tagMap[_dillContent[_binaryOffset]] != null) {
-        what = tagMap[_dillContent[_binaryOffset]];
+        what = tagMap[_dillContent[_binaryOffset]]!;
         if (!_isA(what, "Constant")) {
           throw "Expected Constant but found $what";
         }
@@ -837,11 +835,11 @@
 }
 
 class DillComparer {
-  Map<int, String> tagToName;
-  StringBuffer outputTo;
+  Map<int, String>? tagToName;
+  StringBuffer? outputTo;
 
   bool compare(List<int> a, List<int> b, String binaryMd,
-      [StringBuffer outputTo]) {
+      [StringBuffer? outputTo]) {
     this.outputTo = outputTo;
     bool printOnExit = false;
     if (this.outputTo == null) {
@@ -865,10 +863,10 @@
   int outputLines = 0;
 
   void printDifference(String s) {
-    outputTo.writeln("----------");
-    outputTo.writeln(s);
-    outputTo.writeln("'Stacktrace':");
-    stack.forEach(outputTo.writeln);
+    outputTo!.writeln("----------");
+    outputTo!.writeln(s);
+    outputTo!.writeln("'Stacktrace':");
+    stack.forEach(outputTo!.writeln);
     outputLines += 3 + stack.length;
   }
 
@@ -937,8 +935,8 @@
     if (input is Map) {
       dynamic tag = input["tag"];
       if (tag != null) {
-        if (tagToName[tag] != null) {
-          return "(tag $tag, likely '${tagToName[tag]}')";
+        if (tagToName![tag] != null) {
+          return "(tag $tag, likely '${tagToName![tag]}')";
         }
         return "(tag $tag)";
       }
diff --git a/pkg/front_end/test/binary_md_vm_tags_and_version_git_test.dart b/pkg/front_end/test/binary_md_vm_tags_and_version_git_test.dart
index 1f8b12d..537c165 100644
--- a/pkg/front_end/test/binary_md_vm_tags_and_version_git_test.dart
+++ b/pkg/front_end/test/binary_md_vm_tags_and_version_git_test.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:io' show File, Platform;
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
@@ -31,7 +29,7 @@
 // Match stuff like "kNullConstant = 0,"
 final RegExp constantTagParser = new RegExp(r"k(\w*)\s*=\s*(\d+)");
 
-main() async {
+void main() async {
   File binaryMd = new File("$repoDir/pkg/kernel/binary.md");
   String binaryMdContent = binaryMd.readAsStringSync();
 
@@ -42,7 +40,7 @@
   File vmTagFile = new File("$repoDir/runtime/vm/kernel_binary.h");
   String vmTagContent = vmTagFile.readAsStringSync();
   List<String> vmTagLines = vmTagContent.split("\n");
-  int vmVersion;
+  int? vmVersion;
   Map<int, String> vmTagToName = {};
   Map<int, String> vmConstantTagToName = {};
   for (int i = 0; i < vmTagLines.length; i++) {
@@ -54,15 +52,15 @@
           .trim());
     } else if (line.startsWith("#define KERNEL_TAG_LIST(V)")) {
       while (true) {
-        RegExpMatch match = tagParser.firstMatch(line);
+        RegExpMatch? match = tagParser.firstMatch(line);
         if (match != null) {
-          int value = int.parse(match.group(2));
+          int value = int.parse(match.group(2)!);
           int end = value + 1;
-          if (uses8Tags(match.group(1))) {
+          if (uses8Tags(match.group(1)!)) {
             end = value + 8;
           }
           for (int j = value; j < end; j++) {
-            vmTagToName[j] = match.group(1);
+            vmTagToName[j] = match.group(1)!;
           }
         }
         if (!vmTagLines[i].trim().endsWith(r"\")) {
@@ -73,9 +71,9 @@
       }
     } else if (line.startsWith("enum ConstantTag {")) {
       while (true) {
-        RegExpMatch match = constantTagParser.firstMatch(line);
+        RegExpMatch? match = constantTagParser.firstMatch(line);
         if (match != null) {
-          vmConstantTagToName[int.parse(match.group(2))] = match.group(1);
+          vmConstantTagToName[int.parse(match.group(2)!)] = match.group(1)!;
         }
         if (vmTagLines[i].trim().startsWith("}")) {
           break;
@@ -102,7 +100,7 @@
   Class constantTagClass =
       tagLibrary.classes.firstWhere((c) => c.name == "ConstantTag");
 
-  int tagVersion;
+  int? tagVersion;
   for (TagCompare compareMe in [
     new TagCompare(binaryMdReader.tagToName, binaryMdReader.version,
         vmTagToName, vmVersion, tagClass),
@@ -116,8 +114,8 @@
       if (f.name.text.endsWith("HighBit")) continue;
       if (f.name.text.endsWith("Bias")) continue;
       if (f.name.text == "ComponentFile") continue;
-      ConstantExpression value = f.initializer;
-      IntConstant intConstant = value.constant;
+      ConstantExpression value = f.initializer as ConstantExpression;
+      IntConstant intConstant = value.constant as IntConstant;
       int intValue = intConstant.value;
       if (f.name.text == "BinaryFormatVersion") {
         tagVersion = intValue;
@@ -150,14 +148,14 @@
 
     // Kernels tag.dart vs binary.mds tags.
     for (int key in tagToNameMd.keys) {
-      String nameMd = tagToNameMd[key];
-      String name = tagToName[key];
+      String nameMd = tagToNameMd[key]!;
+      String name = tagToName[key]!;
       if (nameMd == name) continue;
       throw "$key: $nameMd vs $name";
     }
     for (int key in tagToName.keys) {
-      String nameMd = tagToNameMd[key];
-      String name = tagToName[key];
+      String nameMd = tagToNameMd[key]!;
+      String name = tagToName[key]!;
       if (nameMd == name) continue;
       throw "$key: $nameMd vs $name";
     }
@@ -169,8 +167,8 @@
     // Kernels tag.dart vs the VMs tags.
     // Here we only compare one way because the VM can have more (old) tags.
     for (int key in tagToName.keys) {
-      String nameVm = compareMe.vmTagToName[key];
-      String name = tagToName[key];
+      String nameVm = compareMe.vmTagToName[key]!;
+      String name = tagToName[key]!;
       if (nameVm == name) continue;
       throw "$key: $nameVm vs $name";
     }
@@ -195,9 +193,9 @@
 
 class TagCompare {
   final Map<int, String> mdTagToName;
-  final int mdVersion;
+  final int? mdVersion;
   final Map<int, String> vmTagToName;
-  final int vmVersion;
+  final int? vmVersion;
   final Class tagClass;
 
   TagCompare(this.mdTagToName, this.mdVersion, this.vmTagToName, this.vmVersion,
diff --git a/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
index 5fb09fd..cf9ece3 100644
--- a/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
+++ b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'dart:io' show Directory, Platform;
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:_fe_analyzer_shared/src/testing/id.dart';
@@ -15,7 +13,7 @@
 import 'package:front_end/src/testing/id_extractor.dart';
 import 'package:kernel/ast.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<Features>(dataDir,
       args: args,
@@ -31,12 +29,13 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
       Library library,
       Map<Id, ActualData<Features>> actualMap,
-      {bool verbose}) {
+      {bool? verbose}) {
     new InheritanceDataExtractor(compilerResult, actualMap)
         .computeForLibrary(library);
   }
@@ -47,7 +46,7 @@
       InternalCompilerResult compilerResult,
       Class cls,
       Map<Id, ActualData<Features>> actualMap,
-      {bool verbose}) {
+      {bool? verbose}) {
     new InheritanceDataExtractor(compilerResult, actualMap)
         .computeForClass(cls);
   }
@@ -56,7 +55,7 @@
   bool get supportsErrors => true;
 
   @override
-  Features computeErrorData(TestConfig config, InternalCompilerResult compiler,
+  Features? computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     return null; //errorsToText(errors, useCodes: true);
   }
@@ -97,19 +96,19 @@
       this._compilerResult, Map<Id, ActualData<Features>> actualMap)
       : super(_compilerResult, actualMap);
 
-  CoreTypes get _coreTypes => _compilerResult.coreTypes;
+  CoreTypes get _coreTypes => _compilerResult.coreTypes!;
 
   ClassHierarchyBuilder get _classHierarchyBuilder =>
-      _compilerResult.kernelTargetForTesting.loader.builderHierarchy;
+      _compilerResult.kernelTargetForTesting!.loader.builderHierarchy;
 
   @override
   void computeForClass(Class node) {
     super.computeForClass(node);
     ClassHierarchyNode classHierarchyNode =
         _classHierarchyBuilder.getNodeFromClass(node);
-    ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting;
+    ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting!;
     void addMember(ClassMember classMember,
-        {bool isSetter, bool isClassMember}) {
+        {required bool isSetter, required bool isClassMember}) {
       Member member = classMember.getMember(_classHierarchyBuilder);
       Member memberOrigin = member.memberSignatureOrigin ?? member;
       if (memberOrigin.enclosingClass == _coreTypes.objectClass) {
@@ -123,9 +122,9 @@
 
       TreeNode nodeWithOffset;
       if (member.enclosingClass == node) {
-        nodeWithOffset = computeTreeNodeWithOffset(member);
+        nodeWithOffset = computeTreeNodeWithOffset(member)!;
       } else {
-        nodeWithOffset = computeTreeNodeWithOffset(node);
+        nodeWithOffset = computeTreeNodeWithOffset(node)!;
       }
       if (classMember.isSourceDeclaration) {
         features.add(Tag.isSourceDeclaration);
@@ -144,7 +143,7 @@
       }
       features[Tag.classBuilder] = classMember.classBuilder.name;
 
-      Set<ClassMember> declaredOverrides =
+      Set<ClassMember>? declaredOverrides =
           data.declaredOverrides[data.aliasMap[classMember] ?? classMember];
       if (declaredOverrides != null) {
         for (ClassMember override in declaredOverrides) {
@@ -153,7 +152,7 @@
         }
       }
 
-      Set<ClassMember> mixinApplicationOverrides = data
+      Set<ClassMember>? mixinApplicationOverrides = data
           .mixinApplicationOverrides[data.aliasMap[classMember] ?? classMember];
       if (mixinApplicationOverrides != null) {
         for (ClassMember override in mixinApplicationOverrides) {
@@ -162,7 +161,7 @@
         }
       }
 
-      Set<ClassMember> inheritedImplements =
+      Set<ClassMember>? inheritedImplements =
           data.inheritedImplements[data.aliasMap[classMember] ?? classMember];
       if (inheritedImplements != null) {
         for (ClassMember implement in inheritedImplements) {
@@ -187,7 +186,7 @@
             features[Tag.type] = procedureType(member);
             features[Tag.covariance] =
                 classMember.getCovariance(_classHierarchyBuilder).toString();
-            features[Tag.stubTarget] = memberQualifiedName(member.stubTarget);
+            features[Tag.stubTarget] = memberQualifiedName(member.stubTarget!);
             break;
           case ProcedureStubKind.NoSuchMethodForwarder:
             // TODO: Handle this case.
@@ -203,21 +202,21 @@
             break;
           case ProcedureStubKind.ConcreteMixinStub:
             features.add(Tag.concreteMixinStub);
-            features[Tag.stubTarget] = memberQualifiedName(member.stubTarget);
+            features[Tag.stubTarget] = memberQualifiedName(member.stubTarget!);
             break;
         }
       }
 
-      registerValue(nodeWithOffset?.location?.file, nodeWithOffset?.fileOffset,
+      registerValue(nodeWithOffset.location!.file, nodeWithOffset.fileOffset,
           id, features, member);
     }
 
     classHierarchyNode.classMemberMap
-        ?.forEach((Name name, ClassMember classMember) {
+        .forEach((Name name, ClassMember classMember) {
       addMember(classMember, isSetter: false, isClassMember: true);
     });
     classHierarchyNode.classSetterMap
-        ?.forEach((Name name, ClassMember classMember) {
+        .forEach((Name name, ClassMember classMember) {
       addMember(classMember, isSetter: true, isClassMember: true);
     });
     classHierarchyNode.interfaceMemberMap
@@ -239,14 +238,14 @@
     Features features = new Features();
     ClassHierarchyNode classHierarchyNode =
         _classHierarchyBuilder.getNodeFromClass(node);
-    ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting;
+    ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting!;
     classHierarchyNode.superclasses.forEach((Supertype supertype) {
       features.addElement(Tag.superclasses, supertypeToText(supertype));
     });
     classHierarchyNode.interfaces.forEach((Supertype supertype) {
       features.addElement(Tag.interfaces, supertypeToText(supertype));
     });
-    if (data.abstractMembers != null) {
+    if (data.abstractMembers.isNotEmpty) {
       for (ClassMember abstractMember in data.abstractMembers) {
         features.addElement(
             Tag.abstractMembers, classMemberQualifiedName(abstractMember));
@@ -282,7 +281,7 @@
 }
 
 String memberQualifiedName(Member member) {
-  return '${member.enclosingClass.name}.${memberName(member)}';
+  return '${member.enclosingClass!.name}.${memberName(member)}';
 }
 
 String procedureType(Procedure procedure) {
diff --git a/pkg/front_end/test/comments_on_certain_arguments_tool.dart b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
index 4ad6562..ce02610 100644
--- a/pkg/front_end/test/comments_on_certain_arguments_tool.dart
+++ b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
@@ -112,15 +112,25 @@
         if (update != "y" && update != "yes") continue;
 
         List<Edit> theseEdits = edits[uri];
-        theseEdits.sort((a, b) => a.offset - b.offset);
+        theseEdits.sort();
         String content = utf8.decode(component.uriToSource[uri].source,
             allowMalformed: true);
         StringBuffer sb = new StringBuffer();
         int latest = 0;
         for (Edit edit in theseEdits) {
           sb.write(content.substring(latest, edit.offset));
-          sb.write(edit.insertData);
-          latest = edit.offset;
+          switch (edit.editType) {
+            case EditType.Insert:
+              print(edit);
+              sb.write(edit.insertData);
+              latest = edit.offset;
+              break;
+            case EditType.Delete:
+              print(edit);
+              // We "delete" by skipping...
+              latest = edit.offset + edit.length;
+              break;
+          }
         }
         sb.write(content.substring(latest, content.length));
         new File.fromUri(uri).writeAsStringSync(sb.toString());
@@ -129,7 +139,7 @@
     }
     if (editsPerformed.isNotEmpty) {
       print("\n\nYou should now probably run something like\n\n");
-      stdout.write(r"tools/sdks/dart-sdk/bin/dartfmt -w");
+      stdout.write("dart format");
       for (Uri uri in editsPerformed) {
         File f = new File.fromUri(uri);
         Directory relative = new Directory.fromUri(Uri.base.resolve("."));
@@ -176,21 +186,25 @@
 }
 
 class InvocationVisitor extends RecursiveVisitor {
+  @override
   void visitProcedure(Procedure node) {
     if (node.isNoSuchMethodForwarder) return;
     super.visitProcedure(node);
   }
 
+  @override
   void visitSuperMethodInvocation(SuperMethodInvocation node) {
     super.visitSuperMethodInvocation(node);
     note(node.interfaceTargetReference.node, node.arguments, node);
   }
 
+  @override
   void visitStaticInvocation(StaticInvocation node) {
     super.visitStaticInvocation(node);
     note(node.targetReference.node, node.arguments, node);
   }
 
+  @override
   void visitConstructorInvocation(ConstructorInvocation node) {
     super.visitConstructorInvocation(node);
     note(node.targetReference.node, node.arguments, node);
@@ -265,6 +279,7 @@
     }
   }
   bool foundComment = false;
+  List<CommentToken> badComments = [];
   CommentToken commentToken = token.precedingComments;
   while (commentToken != null) {
     if (commentToken.lexeme == expectedComment) {
@@ -272,14 +287,24 @@
       foundComment = true;
       break;
     }
-    if (commentToken.lexeme.replaceAll(" ", "") ==
-        expectedComment.replaceAll(" ", "")) {
-      // Close enough.
-      foundComment = true;
-      break;
+    if (commentToken.lexeme.startsWith("/*") &&
+        commentToken.lexeme.endsWith("= */")) {
+      badComments.add(commentToken);
     }
     commentToken = commentToken.next;
   }
+  if (badComments.isNotEmpty) {
+    for (CommentToken comment in badComments) {
+      Location calculatedLocation =
+          component.getLocation(location.file, comment.offset);
+      print("Please remove comment of length ${comment.lexeme.length} at "
+          "${comment.offset} => "
+          "${calculatedLocation}");
+      edits[location.file] ??= [];
+      edits[location.file]
+          .add(new Edit.delete(comment.offset, comment.lexeme.length));
+    }
+  }
   if (foundComment) {
     return;
   }
@@ -289,20 +314,43 @@
       "${token.offset} => "
       "${calculatedLocation}");
   edits[location.file] ??= [];
-  edits[location.file].add(new Edit(token.offset, expectedComment));
+  edits[location.file].add(new Edit.insert(token.offset, expectedComment));
 }
 
 Map<Uri, List<Edit>> edits = {};
 
-class Edit {
+enum EditType { Insert, Delete }
+
+class Edit implements Comparable<Edit> {
   final int offset;
+  final int length;
   final String insertData;
-  Edit(this.offset, this.insertData);
+  final EditType editType;
+  Edit.insert(this.offset, this.insertData)
+      : editType = EditType.Insert,
+        length = null;
+  Edit.delete(this.offset, this.length)
+      : editType = EditType.Delete,
+        insertData = null;
+
+  @override
+  int compareTo(Edit other) {
+    if (offset != other.offset) {
+      return offset - other.offset;
+    }
+    throw "Why did this happen?";
+  }
+
+  @override
+  String toString() {
+    return "Edit[$editType @ $offset]";
+  }
 }
 
 class TestIncrementalCompiler extends IncrementalCompiler {
   TestIncrementalCompiler(CompilerContext context) : super(context);
 
+  @override
   IncrementalKernelTarget createIncrementalKernelTarget(
       api.FileSystem fileSystem,
       bool includeComments,
@@ -318,9 +366,11 @@
       DillTarget dillTarget, UriTranslator uriTranslator)
       : super(fileSystem, includeComments, dillTarget, uriTranslator);
 
+  @override
   SourceLoader createLoader() =>
       new TestSourceLoader(fileSystem, includeComments, this);
 
+  @override
   void runBuildTransformations() {
     // Don't do any transformations!
   }
@@ -331,6 +381,7 @@
       api.FileSystem fileSystem, bool includeComments, KernelTarget target)
       : super(fileSystem, includeComments, target);
 
+  @override
   Future<Token> tokenize(SourceLibraryBuilder library,
       {bool suppressLexicalErrors: false}) async {
     Token result = await super
diff --git a/pkg/front_end/test/compile_benchmark.dart b/pkg/front_end/test/compile_benchmark.dart
index da61b76..2ad309a 100644
--- a/pkg/front_end/test/compile_benchmark.dart
+++ b/pkg/front_end/test/compile_benchmark.dart
@@ -22,7 +22,7 @@
 final Uri benchmarkHelper =
     Platform.script.resolve("compile_benchmark_helper.dart");
 
-main(List<String> args) {
+void main(List<String> args) {
   List<String> arguments;
   bool tryToAnnotate = false;
   bool tryToSlowDown = false;
@@ -234,6 +234,7 @@
 
   IntPair(this.key, this.value);
 
+  @override
   String toString() {
     return "IntPair[$key: $value]";
   }
@@ -361,14 +362,16 @@
   RegisterCallTransformer(this.registerCallProcedure);
   List<Procedure> procedures = [];
 
-  visitLibrary(Library node) {
+  @override
+  void visitLibrary(Library node) {
     if (node.importUri.scheme == "package" &&
         node.importUri.pathSegments.first == "front_end") {
       super.visitLibrary(node);
     }
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     if (node.function.body == null) return;
     int procedureNum = procedures.length;
     procedures.add(node);
@@ -391,14 +394,16 @@
 
   List<Procedure> procedures = [];
 
-  visitLibrary(Library node) {
+  @override
+  void visitLibrary(Library node) {
     if (node.importUri.scheme == "package" &&
         node.importUri.pathSegments.first == "front_end") {
       super.visitLibrary(node);
     }
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     if (node.function.body == null) return;
     if (node.function.dartAsyncMarker != AsyncMarker.Sync) return;
     int procedureNum = procedures.length;
diff --git a/pkg/front_end/test/compile_benchmark_helper.dart b/pkg/front_end/test/compile_benchmark_helper.dart
index 1b187e8..823a7bc 100644
--- a/pkg/front_end/test/compile_benchmark_helper.dart
+++ b/pkg/front_end/test/compile_benchmark_helper.dart
@@ -2,17 +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.
 
-// @dart=2.9
-
 import '../tool/_fasta/entry_points.dart' show compileEntryPoint;
 
-main(List<String> arguments) async {
+void main(List<String> arguments) async {
   await compileEntryPoint(arguments);
   if (numCalls.isNotEmpty) {
     print("[");
     bool printed = false;
     for (int i = 0; i < numCalls.length; i++) {
-      int value = numCalls[i];
+      int? value = numCalls[i];
       if (value != null && value > 0) {
         if (printed) print(",");
         print("$i, $value");
@@ -24,11 +22,11 @@
     print("[");
     bool printed = false;
     for (int i = 0; i < inCall.length; i++) {
-      int value = inCall[i];
+      int? value = inCall[i];
       if (value == null) continue;
       if (value != 0) throw "$i has value $value";
       if (printed) print(",");
-      int time = callTimes[i];
+      int? time = callTimes[i];
       print("$i, $time");
       printed = true;
     }
@@ -36,7 +34,7 @@
   }
 }
 
-List<int> numCalls = [];
+List<int?> numCalls = [];
 
 void registerCall(int procedureNum) {
   while (numCalls.length <= procedureNum) {
@@ -46,12 +44,12 @@
       numCalls.length *= 2;
     }
   }
-  numCalls[procedureNum] ??= 0;
-  numCalls[procedureNum]++;
+  int numCallsCount = numCalls[procedureNum] ??= 0;
+  numCalls[procedureNum] = numCallsCount + 1;
 }
 
-List<int> inCall = [];
-List<int> callTimes = [];
+List<int?> inCall = [];
+List<int?> callTimes = [];
 Stopwatch stopwatch = new Stopwatch()..start();
 
 void registerCallStart(int procedureNum) {
@@ -64,18 +62,22 @@
       callTimes.length *= 2;
     }
   }
-  inCall[procedureNum] ??= 0;
-  callTimes[procedureNum] ??= 0;
-  if (inCall[procedureNum]++ == 0) {
+  int inCallCount = inCall[procedureNum] ??= 0;
+  int callTimesCount = callTimes[procedureNum] ??= 0;
+  inCall[procedureNum] = inCallCount + 1;
+  if (inCallCount == 0) {
     // First --- start a timer-ish.
-    callTimes[procedureNum] -= stopwatch.elapsedMicroseconds;
+    callTimes[procedureNum] = callTimesCount - stopwatch.elapsedMicroseconds;
   }
 }
 
 void registerCallEnd(int procedureNum) {
-  if (inCall[procedureNum]-- == 1) {
+  int inCallCount = inCall[procedureNum]!;
+  inCall[procedureNum] = inCallCount - 1;
+  if (inCallCount == 1) {
     // Last --- stop the timer-ish.
-    callTimes[procedureNum] += stopwatch.elapsedMicroseconds;
+    callTimes[procedureNum] =
+        callTimes[procedureNum]! + stopwatch.elapsedMicroseconds;
   }
 }
 
diff --git a/pkg/front_end/test/compile_dart2js_with_no_sdk_test.dart b/pkg/front_end/test/compile_dart2js_with_no_sdk_test.dart
index 668ff0a..74bafaa 100644
--- a/pkg/front_end/test/compile_dart2js_with_no_sdk_test.dart
+++ b/pkg/front_end/test/compile_dart2js_with_no_sdk_test.dart
@@ -2,16 +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.
 
-// @dart = 2.9
-
 import 'package:front_end/src/api_prototype/compiler_options.dart';
 
 import 'incremental_suite.dart' show TestIncrementalCompiler, getOptions;
 
-main() async {
+void main() async {
   final Uri dart2jsUrl = Uri.base.resolve("pkg/compiler/bin/dart2js.dart");
   CompilerOptions options = getOptions();
-  options.sdkSummary = options.sdkSummary.resolve("nonexisting.dill");
+  options.sdkSummary = options.sdkSummary!.resolve("nonexisting.dill");
   options.librariesSpecificationUri = null;
   int diagnosticCount = 0;
   options.onDiagnostic = (DiagnosticMessage message) {
diff --git a/pkg/front_end/test/compile_with_no_sdk_test.dart b/pkg/front_end/test/compile_with_no_sdk_test.dart
index 1cbbd98..d8f45308 100644
--- a/pkg/front_end/test/compile_with_no_sdk_test.dart
+++ b/pkg/front_end/test/compile_with_no_sdk_test.dart
@@ -2,18 +2,16 @@
 // for 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/api_prototype/compiler_options.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
 
 import 'incremental_suite.dart' show TestIncrementalCompiler, getOptions;
 
-main() async {
+void main() async {
   await compile("import 'foo.dart' if (dart.library.bar) 'baz.dart';");
 }
 
-void compile(String data) async {
+Future<void> compile(String data) async {
   Uri base = Uri.parse("org-dartlang-test:///");
   Uri sdkSummary = base.resolve("nonexisting.dill");
   Uri mainFile = base.resolve("main.dart");
diff --git a/pkg/front_end/test/constant_evaluator_benchmark.dart b/pkg/front_end/test/constant_evaluator_benchmark.dart
index 4595cf8..11ff8c4 100644
--- a/pkg/front_end/test/constant_evaluator_benchmark.dart
+++ b/pkg/front_end/test/constant_evaluator_benchmark.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:io' show File;
 import 'dart:typed_data' show Uint8List;
 
@@ -45,21 +43,21 @@
 
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 
-bool tryWithNoEnvironment;
+bool? tryWithNoEnvironment;
 bool verbose = false;
 bool skipNonNullEnvironment = false;
 bool skipNullEnvironment = false;
 
 void benchmark(Component component, List<Library> libraries) {
   if (tryWithNoEnvironment == null) throw "tryWithNoEnvironment not set";
-  KernelTarget target = incrementalCompiler.userCode;
+  KernelTarget target = incrementalCompiler.userCode as KernelTarget;
   constants.EvaluationMode evaluationMode =
       target.getConstantEvaluationModeForTesting();
 
   Uint8List serializedComponent = serializeComponent(component);
 
   for (int k = 0; k < 3; k++) {
-    Map<String, String> environmentDefines = null;
+    Map<String, String>? environmentDefines = null;
     String environmentDefinesDescription = "null environment";
 
     for (int j = 0; j < 2; j++) {
@@ -67,7 +65,7 @@
       int iterations = 0;
       int sum = 0;
       for (int i = 0; i < 5; i++) {
-        if (!tryWithNoEnvironment && environmentDefines == null) continue;
+        if (!tryWithNoEnvironment! && environmentDefines == null) continue;
         if (skipNullEnvironment && environmentDefines == null) continue;
         if (skipNonNullEnvironment && environmentDefines != null) continue;
         stopwatch.reset();
@@ -125,25 +123,20 @@
 
 class SilentErrorReporter implements constants.ErrorReporter {
   @override
-  void report(LocatedMessage message, List<LocatedMessage> context) {
-    // ignore
-  }
-
-  @override
-  void reportInvalidExpression(InvalidExpression node) {
+  void report(LocatedMessage message, [List<LocatedMessage>? context]) {
     // ignore
   }
 }
 
-IncrementalCompiler incrementalCompiler;
+late IncrementalCompiler incrementalCompiler;
 
-main(List<String> arguments) async {
-  Uri platformUri;
+void main(List<String> arguments) async {
+  Uri? platformUri;
   Uri mainUri;
   bool nnbd = false;
   String targetString = "VM";
 
-  String filename;
+  String? filename;
   for (String arg in arguments) {
     if (arg.startsWith("--")) {
       if (arg == "--nnbd") {
@@ -242,13 +235,14 @@
 class HookInVmTarget extends VmTarget {
   HookInVmTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg),
-      ChangedStructureNotifier changedStructureNotifier}) {
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger, changedStructureNotifier: changedStructureNotifier);
@@ -259,13 +253,14 @@
 class HookInDart2jsTarget extends Dart2jsTarget {
   HookInDart2jsTarget(String name, TargetFlags flags) : super(name, flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg),
-      ChangedStructureNotifier changedStructureNotifier}) {
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger, changedStructureNotifier: changedStructureNotifier);
@@ -276,13 +271,14 @@
 class HookInDevCompilerTarget extends DevCompilerTarget {
   HookInDevCompilerTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg),
-      ChangedStructureNotifier changedStructureNotifier}) {
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger, changedStructureNotifier: changedStructureNotifier);
@@ -293,13 +289,14 @@
 class HookInFlutterTarget extends FlutterTarget {
   HookInFlutterTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg),
-      ChangedStructureNotifier changedStructureNotifier}) {
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger, changedStructureNotifier: changedStructureNotifier);
diff --git a/pkg/front_end/test/covariance_check/covariance_check_test.dart b/pkg/front_end/test/covariance_check/covariance_check_test.dart
index 622ebfa..eb7cc24 100644
--- a/pkg/front_end/test/covariance_check/covariance_check_test.dart
+++ b/pkg/front_end/test/covariance_check/covariance_check_test.dart
@@ -11,7 +11,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<String>(dataDir,
       args: args,
@@ -27,6 +27,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/crashing_test_case_minimizer.dart b/pkg/front_end/test/crashing_test_case_minimizer.dart
index 3460433..980721c 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer.dart
@@ -19,7 +19,7 @@
 // TODO(jensj): Add asserts or similar where - after each rewrite - we run the
 // parser on it and verifies that no syntax errors have been introduced.
 
-main(List<String> arguments) async {
+void main(List<String> arguments) async {
   String filename;
   Uri loadJson;
   for (String arg in arguments) {
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 a9cb6ad..d77e84e 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:async' show Future, StreamSubscription;
 
 import 'dart:convert' show JsonEncoder, jsonDecode, utf8;
@@ -47,6 +45,8 @@
 
 import 'package:front_end/src/fasta/kernel/utils.dart' show ByteSink;
 import 'package:front_end/src/fasta/messages.dart' show Message;
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    show useImplicitCreationExpressionInCfe;
 import 'package:front_end/src/fasta/util/direct_parser_ast.dart';
 import 'package:front_end/src/fasta/util/direct_parser_ast_helper.dart';
 
@@ -79,8 +79,8 @@
   }
 
   bool _useInitialFs = true;
-  Uri mainUri;
-  Uri platformUri;
+  Uri? mainUri;
+  Uri? platformUri;
   bool noPlatform = false;
   bool experimentalInvalidation = false;
   bool serialize = false;
@@ -94,7 +94,7 @@
   bool askAboutRedirectCrashTarget = false;
   bool autoUncoverAllCrashes = false;
   int stackTraceMatches = 1;
-  String lookForErrorErrorOnReload;
+  String? lookForErrorErrorOnReload;
   final Set<String> askedAboutRedirect = {};
   final List<Map<String, dynamic>> fileSystems = [];
   final Set<String> allAutoRedirects = {};
@@ -132,7 +132,7 @@
     };
   }
 
-  initializeFromJson(Map<String, dynamic> json) {
+  void initializeFromJson(Map<String, dynamic> json) {
     mainUri = Uri.parse(json["mainUri"]);
     platformUri = Uri.parse(json["platformUri"]);
     noPlatform = json["noPlatform"];
@@ -172,17 +172,17 @@
 class TestMinimizer {
   final TestMinimizerSettings _settings;
   _FakeFileSystem get _fs => _settings._fs;
-  Uri get _mainUri => _settings.mainUri;
-  String _expectedCrashLine;
+  Uri get _mainUri => _settings.mainUri!;
+  String? _expectedCrashLine;
   bool _quit = false;
   bool _skip = false;
   bool _check = false;
   int _currentFsNum = -1;
   bool _gotWantedError = false;
 
-  Component _latestComponent;
-  IncrementalCompiler _latestCrashingIncrementalCompiler;
-  StreamSubscription<List<int>> _stdinSubscription;
+  Component? _latestComponent;
+  IncrementalCompiler? _latestCrashingIncrementalCompiler;
+  StreamSubscription<List<int>>? _stdinSubscription;
 
   static const int _$LF = 10;
 
@@ -215,8 +215,8 @@
         int totalFiles = 0;
         int emptyFiles = 0;
         int combinedSize = 0;
-        for (Uri uri in _fs.data.keys) {
-          final Uint8List originalBytes = _fs.data[uri];
+        for (Uri? uri in _fs.data.keys) {
+          final Uint8List? originalBytes = _fs.data[uri];
           if (originalBytes == null) continue;
           totalFiles++;
           if (originalBytes.isEmpty) emptyFiles++;
@@ -263,13 +263,13 @@
       _currentFsNum++;
     }
 
-    await _stdinSubscription.cancel();
+    await _stdinSubscription!.cancel();
   }
 
   Future _tryToMinimizeImpl() async {
     // Set main to be basically empty up front.
     _settings._useInitialFs = true;
-    _fs.data[_mainUri] = utf8.encode("main() {}");
+    _fs.data[_mainUri] = utf8.encode("main() {}") as Uint8List;
     Component initialComponent = await _getInitialComponent();
     print("Compiled initially (without data)");
     // Remove fake cache.
@@ -288,21 +288,21 @@
     // For all dart files: Parse them as set their source as the parsed source
     // to "get around" any encoding issues when printing later.
     Map<Uri, Uint8List> copy = new Map.from(_fs.data);
-    for (Uri uri in _fs.data.keys) {
+    for (Uri? uri in _fs.data.keys) {
       if (await _shouldQuit()) break;
       String uriString = uri.toString();
       if (uriString.endsWith(".json") ||
           uriString.endsWith(".packages") ||
           uriString.endsWith(".dill") ||
           _fs.data[uri] == null ||
-          _fs.data[uri].isEmpty) {
+          _fs.data[uri]!.isEmpty) {
         // skip
       } else {
         try {
-          if (_knownByCompiler(uri)) {
+          if (_knownByCompiler(uri!)) {
             String parsedString =
-                _getFileAsStringContent(_fs.data[uri], _isUriNnbd(uri));
-            _fs.data[uri] = utf8.encode(parsedString);
+                _getFileAsStringContent(_fs.data[uri]!, _isUriNnbd(uri));
+            _fs.data[uri] = utf8.encode(parsedString) as Uint8List;
           }
         } catch (e) {
           // crash in scanner/parser --- keep original file. This crash might
@@ -329,10 +329,10 @@
         for (int i = 0; i < uris.length; i++) {
           if (await _shouldQuit()) break;
           Uri uri = uris[i];
-          if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+          if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
           print("About to work on file $i of ${uris.length}");
           await _deleteContent(uris, i, false, initialComponent);
-          if (_fs.data[uri] == null || _fs.data[uri].isEmpty) {
+          if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) {
             changedSome = true;
           }
         }
@@ -347,7 +347,7 @@
           for (int i = 0; i < uris.length; i++) {
             if (await _shouldQuit()) break;
             Uri uri = uris[i];
-            if (_fs.data[uri] == null || _fs.data[uri].isNotEmpty) continue;
+            if (_fs.data[uri] == null || _fs.data[uri]!.isNotEmpty) continue;
             print("About to work on file $i of ${uris.length}");
             await _deleteContent(uris, i, false, initialComponent,
                 deleteFile: true);
@@ -361,18 +361,18 @@
 
       int left = 0;
       for (Uri uri in uris) {
-        if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+        if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
         left++;
       }
       print("There's now $left files of ${_fs.data.length} files left");
 
       // Operate on one file at a time.
-      for (Uri uri in _fs.data.keys) {
-        if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+      for (Uri? uri in _fs.data.keys) {
+        if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
         if (await _shouldQuit()) break;
 
         if (await _tryRemoveIfNotKnownByCompiler(uri, initialComponent)) {
-          if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+          if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
           if (await _shouldQuit()) break;
         }
 
@@ -387,9 +387,9 @@
 
         print("Now working on $uri");
 
-        int prevLength = _fs.data[uri].length;
+        int prevLength = _fs.data[uri]!.length;
 
-        await _deleteBlocks(uri, initialComponent);
+        await _deleteBlocks(uri!, initialComponent);
         await _deleteEmptyLines(uri, initialComponent);
 
         if (_settings.oldBlockDelete) {
@@ -402,44 +402,44 @@
           await _deleteLines(uri, initialComponent);
         }
 
-        print("We're now at ${_fs.data[uri].length} bytes for $uri "
+        print("We're now at ${_fs.data[uri]!.length} bytes for $uri "
             "(was $prevLength).");
-        if (prevLength != _fs.data[uri].length) changedSome = true;
-        if (_fs.data[uri].isEmpty) continue;
+        if (prevLength != _fs.data[uri]!.length) changedSome = true;
+        if (_fs.data[uri]!.isEmpty) continue;
 
         if (_settings.byteDelete) {
           // Now try to delete 'arbitrarily' (for any given start offset do an
           // exponential binary search).
-          int prevLength = _fs.data[uri].length;
+          int prevLength = _fs.data[uri]!.length;
           while (true) {
             if (await _shouldQuit()) break;
             await _binarySearchDeleteData(uri, initialComponent);
 
-            if (_fs.data[uri].length == prevLength) {
+            if (_fs.data[uri]!.length == prevLength) {
               // No progress.
               break;
             } else {
-              print("We're now at ${_fs.data[uri].length} bytes");
-              prevLength = _fs.data[uri].length;
+              print("We're now at ${_fs.data[uri]!.length} bytes");
+              prevLength = _fs.data[uri]!.length;
               changedSome = true;
             }
           }
         }
       }
-      for (Uri uri in _fs.data.keys) {
-        if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+      for (Uri? uri in _fs.data.keys) {
+        if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
         if (await _shouldQuit()) break;
 
         if (await _tryRemoveIfNotKnownByCompiler(uri, initialComponent)) {
-          if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+          if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
           if (await _shouldQuit()) break;
         }
 
-        if (await _attemptInline(uri, initialComponent)) {
+        if (await _attemptInline(uri!, initialComponent)) {
           changedSome = true;
 
           if (await _tryRemoveIfNotKnownByCompiler(uri, initialComponent)) {
-            if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+            if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
             if (await _shouldQuit()) break;
           }
         }
@@ -469,11 +469,11 @@
       print("\n\n\n");
 
       for (Uri uri in uris) {
-        if (_fs.data[uri] == null || _fs.data[uri].isEmpty) continue;
+        if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) continue;
         print("Uri $uri has this content:");
 
         try {
-          String utfDecoded = utf8.decode(_fs.data[uri], allowMalformed: true);
+          String utfDecoded = utf8.decode(_fs.data[uri]!, allowMalformed: true);
           print(utfDecoded);
         } catch (e) {
           print(_fs.data[uri]);
@@ -496,7 +496,7 @@
     JsonEncoder jsonEncoder = new JsonEncoder.withIndent("  ");
     String json = jsonEncoder.convert(_settings);
     int i = 0;
-    Uri jsonOut;
+    Uri? jsonOut;
     while (jsonOut == null || new File.fromUri(jsonOut).existsSync()) {
       jsonOut = Uri.base.resolve("crash_minimizer_result_$i");
       i++;
@@ -513,7 +513,7 @@
     // Don't attempt to inline the main uri --- that's our entry!
     if (uri == _mainUri) return false;
 
-    Uint8List inlineData = _fs.data[uri];
+    Uint8List inlineData = _fs.data[uri]!;
     bool hasMultipleLines = false;
     for (int i = 0; i < inlineData.length; i++) {
       if (inlineData[i] == _$LF) {
@@ -531,16 +531,16 @@
     int compileTry = 0;
     bool changed = false;
 
-    for (Uri uri in _fs.data.keys) {
+    for (Uri? uri in _fs.data.keys) {
       if (!uri.toString().endsWith(".dart")) continue;
       if (inlinableUri == uri) continue;
-      final Uint8List originalBytes = _fs.data[uri];
+      final Uint8List? originalBytes = _fs.data[uri];
       if (originalBytes == null || originalBytes.isEmpty) continue;
       DirectParserASTContentCompilationUnitEnd ast = getAST(originalBytes,
           includeBody: false,
           includeComments: false,
           enableExtensionMethods: true,
-          enableNonNullable: _isUriNnbd(uri));
+          enableNonNullable: _isUriNnbd(uri!));
       // Find all imports/exports of this file (if any).
       // If finding any:
       // * remove all of them, then
@@ -550,15 +550,15 @@
       //   try converting that to an import instead.
       List<_Replacement> replacements = [];
       for (DirectParserASTContentImportEnd import in ast.getImports()) {
-        Token importUriToken = import.importKeyword.next;
+        Token importUriToken = import.importKeyword.next!;
         Uri importUri = _getUri(importUriToken, uri);
         if (inlinableUri == importUri) {
           replacements.add(new _Replacement(
-              import.importKeyword.offset - 1, import.semicolon.offset + 1));
+              import.importKeyword.offset - 1, import.semicolon!.offset + 1));
         }
       }
       for (DirectParserASTContentExportEnd export in ast.getExports()) {
-        Token exportUriToken = export.exportKeyword.next;
+        Token exportUriToken = export.exportKeyword.next!;
         Uri exportUri = _getUri(exportUriToken, uri);
         if (inlinableUri == exportUri) {
           replacements.add(new _Replacement(
@@ -583,7 +583,7 @@
           enableExtensionMethods: true,
           enableNonNullable: _isUriNnbd(uri));
       for (DirectParserASTContentImportEnd import in ast.getImports()) {
-        offsetOfLast = max(offsetOfLast, import.semicolon.offset + 1);
+        offsetOfLast = max(offsetOfLast, import.semicolon!.offset + 1);
       }
       for (DirectParserASTContentExportEnd export in ast.getExports()) {
         offsetOfLast = max(offsetOfLast, export.semicolon.offset + 1);
@@ -604,7 +604,8 @@
       for (int i = offsetOfLast; i < withoutInlineableString.length; i++) {
         builder.writeCharCode(withoutInlineableString.codeUnitAt(i));
       }
-      final Uint8List inlinedWithoutChange = utf8.encode(builder.toString());
+      final Uint8List inlinedWithoutChange =
+          utf8.encode(builder.toString()) as Uint8List;
 
       if (!_parsesWithoutError(inlinedWithoutChange, _isUriNnbd(uri))) {
         print("WARNING: Parser error after stuff at ${StackTrace.current}");
@@ -644,7 +645,8 @@
         for (int i = offsetOfLast; i < withoutInlineableString.length; i++) {
           builder.writeCharCode(withoutInlineableString.codeUnitAt(i));
         }
-        Uint8List inlinedWithChange = utf8.encode(builder.toString());
+        Uint8List inlinedWithChange =
+            utf8.encode(builder.toString()) as Uint8List;
 
         if (!_parsesWithoutError(inlinedWithChange, _isUriNnbd(uri))) {
           print("WARNING: Parser error after stuff at ${StackTrace.current}");
@@ -689,7 +691,7 @@
     List<_Replacement> replacements = [];
     for (DirectParserASTContentImportEnd import in ast.getImports()) {
       _rewriteImportsExportsToUriInternal(
-          import.importKeyword.next, oldUri, replacements, newUri);
+          import.importKeyword.next!, oldUri, replacements, newUri);
     }
     for (DirectParserASTContentExportEnd export in ast.getExports()) {
       if (convertExportToImport) {
@@ -700,7 +702,7 @@
         ));
       }
       _rewriteImportsExportsToUriInternal(
-          export.exportKeyword.next, oldUri, replacements, newUri);
+          export.exportKeyword.next!, oldUri, replacements, newUri);
     }
     if (replacements.isNotEmpty) {
       Uint8List candidate = _replaceRange(replacements, oldData);
@@ -711,8 +713,8 @@
 
   void _outputIncrementalCompilerYamlTest() {
     int dartFiles = 0;
-    for (MapEntry<Uri, Uint8List> entry in _fs.data.entries) {
-      if (entry.key.pathSegments.last.endsWith(".dart")) {
+    for (MapEntry<Uri?, Uint8List?> entry in _fs.data.entries) {
+      if (entry.key!.pathSegments.last.endsWith(".dart")) {
         if (entry.value != null) dartFiles++;
       }
     }
@@ -739,10 +741,10 @@
       print("    experiments: alternative-invalidation-strategy");
     }
     print("    sources:");
-    for (MapEntry<Uri, Uint8List> entry in _fs.data.entries) {
+    for (MapEntry<Uri?, Uint8List?> entry in _fs.data.entries) {
       if (entry.value == null) continue;
       print("      ${entry.key}: |");
-      String string = utf8.decode(entry.value);
+      String string = utf8.decode(entry.value!);
       List<String> lines = string.split("\n");
       for (String line in lines) {
         print("        $line");
@@ -799,8 +801,8 @@
     uriString = uriString.substring(1, uriString.length - 1);
     Uri uriTokenUri = uri.resolve(uriString);
     if (resolvePackage && uriTokenUri.scheme == "package") {
-      Package package = _latestCrashingIncrementalCompiler
-          .currentPackagesMap[uriTokenUri.pathSegments.first];
+      Package package = _latestCrashingIncrementalCompiler!
+          .currentPackagesMap![uriTokenUri.pathSegments.first]!;
       uriTokenUri = package.packageUriRoot
           .resolve(uriTokenUri.pathSegments.skip(1).join("/"));
     }
@@ -808,7 +810,7 @@
   }
 
   Uri _getImportUri(Uri uri) {
-    return _latestCrashingIncrementalCompiler.userCode
+    return _latestCrashingIncrementalCompiler!.userCode!
         .getEntryPointUri(uri, issueProblem: false);
   }
 
@@ -818,8 +820,9 @@
     return result;
   }
 
-  void _binarySearchDeleteData(Uri uri, Component initialComponent) async {
-    Uint8List latestCrashData = _fs.data[uri];
+  Future<void> _binarySearchDeleteData(
+      Uri uri, Component initialComponent) async {
+    Uint8List latestCrashData = _fs.data[uri]!;
     int offset = 0;
     while (offset < latestCrashData.length) {
       print("Working at offset $offset of ${latestCrashData.length}");
@@ -838,7 +841,7 @@
 
       // Find how long we can go.
       int crashingAt = 1;
-      int noLongerCrashingAt;
+      int? noLongerCrashingAt;
       while (true) {
         int deleteChars = 2 * crashingAt;
         if (offset + deleteChars > latestCrashData.length) {
@@ -865,7 +868,7 @@
       }
 
       // Binary search between [crashingAt] and [noLongerCrashingAt].
-      while (crashingAt < noLongerCrashingAt) {
+      while (crashingAt < noLongerCrashingAt!) {
         int mid = noLongerCrashingAt -
             ((noLongerCrashingAt - crashingAt) >>
                 1); // Get middle, rounding up.
@@ -899,20 +902,20 @@
     _fs.data[uri] = latestCrashData;
   }
 
-  void _tryToRemoveUnreferencedFileContent(Component initialComponent,
+  Future<void> _tryToRemoveUnreferencedFileContent(Component initialComponent,
       {bool deleteFile: false}) async {
     // Check if there now are any unused files.
     if (_latestComponent == null) return;
-    Set<Uri> neededUris = _latestComponent.uriToSource.keys.toSet();
+    Set<Uri> neededUris = _latestComponent!.uriToSource.keys.toSet();
     Map<Uri, Uint8List> copy = new Map.from(_fs.data);
     bool removedSome = false;
     if (await _shouldQuit()) return;
-    for (MapEntry<Uri, Uint8List> entry in _fs.data.entries) {
+    for (MapEntry<Uri?, Uint8List?> entry in _fs.data.entries) {
       if (entry.value == null) continue;
-      if (!deleteFile && entry.value.isEmpty) continue;
+      if (!deleteFile && entry.value!.isEmpty) continue;
       if (!entry.key.toString().endsWith(".dart")) continue;
       if (!neededUris.contains(entry.key) &&
-          (deleteFile || _fs.data[entry.key].length != 0)) {
+          (deleteFile || _fs.data[entry.key]!.length != 0)) {
         if (deleteFile) {
           _fs.data[entry.key] = null;
         } else {
@@ -933,7 +936,7 @@
     }
   }
 
-  void _deleteContent(
+  Future<void> _deleteContent(
       List<Uri> uris, int uriIndex, bool limitTo1, Component initialComponent,
       {bool deleteFile: false}) async {
     String extraMessageText = "all content of ";
@@ -968,7 +971,7 @@
 
     if (await _shouldQuit()) return;
     Uri uri = uris[uriIndex];
-    Uint8List data = _fs.data[uri];
+    Uint8List? data = _fs.data[uri];
     if (deleteFile) {
       _fs.data[uri] = null;
     } else {
@@ -982,16 +985,16 @@
       // For dart files we can't truncate completely try to "outline" them
       // instead.
       if (uri.toString().endsWith(".dart")) {
-        String textualOutlined =
-            textualOutline(data, _getScannerConfiguration(uri))
+        String? textualOutlined =
+            textualOutline(data!, _getScannerConfiguration(uri))
                 ?.replaceAll(RegExp(r'\n+'), "\n");
 
         bool outlined = false;
         if (textualOutlined != null) {
-          Uint8List candidate = utf8.encode(textualOutlined);
+          Uint8List candidate = utf8.encode(textualOutlined) as Uint8List;
           // Because textual outline doesn't do the right thing for nnbd, only
           // replace if it's syntactically valid.
-          if (candidate.length != _fs.data[uri].length &&
+          if (candidate.length != _fs.data[uri]!.length &&
               _parsesWithoutError(candidate, _isUriNnbd(uri))) {
             if (await _shouldQuit()) return;
             _fs.data[uri] = candidate;
@@ -1001,21 +1004,22 @@
             } else {
               outlined = true;
               print("Can outline the file $uri "
-                  "(now ${_fs.data[uri].length} bytes)");
+                  "(now ${_fs.data[uri]!.length} bytes)");
             }
           }
         }
         if (!outlined) {
           // We can probably at least remove all comments then...
           try {
-            List<String> strings = utf8.decode(_fs.data[uri]).split("\n");
+            List<String> strings = utf8.decode(_fs.data[uri]!).split("\n");
             List<String> stringsLeft = [];
             for (String string in strings) {
               if (!string.trim().startsWith("//")) stringsLeft.add(string);
             }
 
-            Uint8List candidate = utf8.encode(stringsLeft.join("\n"));
-            if (candidate.length != _fs.data[uri].length) {
+            Uint8List candidate =
+                utf8.encode(stringsLeft.join("\n")) as Uint8List;
+            if (candidate.length != _fs.data[uri]!.length) {
               if (await _shouldQuit()) return;
               _fs.data[uri] = candidate;
               if (!await _crashesOnCompile(initialComponent)) {
@@ -1038,7 +1042,7 @@
     }
   }
 
-  void _deleteBlocksOld(Uri uri, Component initialComponent) async {
+  Future<void> _deleteBlocksOld(Uri uri, Component initialComponent) async {
     if (uri.toString().endsWith(".json")) {
       // Try to find annoying
       //
@@ -1047,7 +1051,7 @@
       //    }
       //
       // part of json and remove it.
-      Uint8List data = _fs.data[uri];
+      Uint8List data = _fs.data[uri]!;
       String string = utf8.decode(data);
       List<String> lines = string.split("\n");
       for (int i = 0; i < lines.length - 2; i++) {
@@ -1060,7 +1064,7 @@
         }
       }
       string = lines.join("\n");
-      _fs.data[uri] = utf8.encode(string);
+      _fs.data[uri] = utf8.encode(string) as Uint8List;
       if (!await _crashesOnCompile(initialComponent)) {
         // For some reason that didn't work.
         _fs.data[uri] = data;
@@ -1068,7 +1072,7 @@
     }
     if (!uri.toString().endsWith(".dart")) return;
 
-    Uint8List data = _fs.data[uri];
+    Uint8List data = _fs.data[uri]!;
     Uint8List latestCrashData = data;
 
     List<int> lineStarts = [];
@@ -1078,13 +1082,14 @@
         _isUriNnbd(uri) ? _scannerConfiguration : _scannerConfigurationNonNNBD,
         lineStarts);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       print("Got null token from scanner for $uri");
       return;
     }
 
     int compileTry = 0;
-    Token token = firstToken;
+    Token? token = firstToken;
     while (token is ErrorToken) {
       token = token.next;
     }
@@ -1093,56 +1098,58 @@
       bool tryCompile = false;
       Token skipToToken = token;
       // Skip very small blocks (e.g. "{}" or "{\n}");
-      if (token.endGroup != null && token.offset + 3 < token.endGroup.offset) {
-        replacements.add(new _Replacement(token.offset, token.endGroup.offset));
+      if (token.endGroup != null && token.offset + 3 < token.endGroup!.offset) {
+        replacements
+            .add(new _Replacement(token.offset, token.endGroup!.offset));
         tryCompile = true;
-        skipToToken = token.endGroup;
+        skipToToken = token.endGroup!;
       } else if (token.lexeme == "@") {
-        if (token.next.next.endGroup != null) {
-          int end = token.next.next.endGroup.offset;
-          skipToToken = token.next.next.endGroup;
+        if (token.next!.next!.endGroup != null) {
+          int end = token.next!.next!.endGroup!.offset;
+          skipToToken = token.next!.next!.endGroup!;
           replacements.add(new _Replacement(token.offset - 1, end + 1));
           tryCompile = true;
         }
       } else if (token.lexeme == "assert") {
-        if (token.next.endGroup != null) {
-          int end = token.next.endGroup.offset;
-          skipToToken = token.next.endGroup;
-          if (token.next.endGroup.next.lexeme == ",") {
-            end = token.next.endGroup.next.offset;
-            skipToToken = token.next.endGroup.next;
+        if (token.next!.endGroup != null) {
+          int end = token.next!.endGroup!.offset;
+          skipToToken = token.next!.endGroup!;
+          if (token.next!.endGroup!.next!.lexeme == ",") {
+            end = token.next!.endGroup!.next!.offset;
+            skipToToken = token.next!.endGroup!.next!;
           }
           // +/- 1 to not include the start and the end character.
           replacements.add(new _Replacement(token.offset - 1, end + 1));
           tryCompile = true;
         }
-      } else if ((token.lexeme == "abstract" && token.next.lexeme == "class") ||
+      } else if ((token.lexeme == "abstract" &&
+              token.next!.lexeme == "class") ||
           token.lexeme == "class" ||
           token.lexeme == "enum" ||
           token.lexeme == "mixin" ||
           token.lexeme == "static" ||
-          token.next.lexeme == "get" ||
-          token.next.lexeme == "set" ||
-          token.next.next.lexeme == "(" ||
-          (token.next.lexeme == "<" &&
-              token.next.endGroup != null &&
-              token.next.endGroup.next.next.lexeme == "(")) {
+          token.next!.lexeme == "get" ||
+          token.next!.lexeme == "set" ||
+          token.next!.next!.lexeme == "(" ||
+          (token.next!.lexeme == "<" &&
+              token.next!.endGroup != null &&
+              token.next!.endGroup!.next!.next!.lexeme == "(")) {
         // Try to find and remove the entire class/enum/mixin/
         // static procedure/getter/setter/simple procedure.
         Token bracket = token;
         for (int i = 0; i < 20; i++) {
           // Find "{", but only go a maximum of 20 tokens to do that.
-          bracket = bracket.next;
+          bracket = bracket.next!;
           if (bracket.lexeme == "{" && bracket.endGroup != null) {
             break;
           } else if ((bracket.lexeme == "(" || bracket.lexeme == "<") &&
               bracket.endGroup != null) {
-            bracket = bracket.endGroup;
+            bracket = bracket.endGroup!;
           }
         }
         if (bracket.lexeme == "{" && bracket.endGroup != null) {
-          int end = bracket.endGroup.offset;
-          skipToToken = bracket.endGroup;
+          int end = bracket.endGroup!.offset;
+          skipToToken = bracket.endGroup!;
           // +/- 1 to not include the start and the end character.
           replacements.add(new _Replacement(token.offset - 1, end + 1));
           tryCompile = true;
@@ -1179,7 +1186,7 @@
     _fs.data[uri] = latestCrashData;
   }
 
-  void _deleteBlocks(final Uri uri, Component initialComponent) async {
+  Future<void> _deleteBlocks(final Uri uri, Component initialComponent) async {
     if (uri.toString().endsWith(".json")) {
       // Try to find annoying
       //
@@ -1188,7 +1195,7 @@
       //    }
       //
       // part of json and remove it.
-      Uint8List data = _fs.data[uri];
+      Uint8List data = _fs.data[uri]!;
       String string = utf8.decode(data);
       List<String> lines = string.split("\n");
       for (int i = 0; i < lines.length - 2; i++) {
@@ -1201,7 +1208,7 @@
         }
       }
       string = lines.join("\n");
-      Uint8List candidate = utf8.encode(string);
+      Uint8List candidate = utf8.encode(string) as Uint8List;
       if (candidate.length != data.length) {
         _fs.data[uri] = candidate;
         if (!await _crashesOnCompile(initialComponent)) {
@@ -1223,8 +1230,8 @@
         while (i < packagesModified.length) {
           var oldEntry = packagesModified.removeAt(i);
           String jsonString = jsonEncoder.convert(jsonModified);
-          candidate = utf8.encode(jsonString);
-          Uint8List previous = _fs.data[uri];
+          candidate = utf8.encode(jsonString) as Uint8List;
+          Uint8List? previous = _fs.data[uri];
           _fs.data[uri] = candidate;
           if (!await _crashesOnCompile(initialComponent)) {
             // Couldn't remove that part.
@@ -1243,7 +1250,7 @@
     }
     if (!uri.toString().endsWith(".dart")) return;
 
-    Uint8List data = _fs.data[uri];
+    Uint8List data = _fs.data[uri]!;
     DirectParserASTContentCompilationUnitEnd ast = getAST(data,
         includeBody: true,
         includeComments: false,
@@ -1253,7 +1260,7 @@
     _CompilationHelperClass helper = new _CompilationHelperClass(data);
 
     // Try to remove top level things one at a time.
-    for (DirectParserASTContent child in ast.children) {
+    for (DirectParserASTContent child in ast.children!) {
       bool shouldCompile = false;
       String what = "";
       if (child.isClass()) {
@@ -1298,7 +1305,7 @@
       } else if (child.isEnum()) {
         DirectParserASTContentEnumEnd decl = child.asEnum();
         helper.replacements.add(new _Replacement(
-            decl.enumKeyword.offset - 1, decl.leftBrace.endGroup.offset + 1));
+            decl.enumKeyword.offset - 1, decl.leftBrace.endGroup!.offset + 1));
         shouldCompile = true;
         what = "enum";
       } else if (child.isTypedef()) {
@@ -1321,7 +1328,7 @@
       } else if (child.isImport()) {
         DirectParserASTContentImportEnd decl = child.asImport();
         helper.replacements.add(new _Replacement(
-            decl.importKeyword.offset - 1, decl.semicolon.offset + 1));
+            decl.importKeyword.offset - 1, decl.semicolon!.offset + 1));
         shouldCompile = true;
         what = "import";
       } else if (child.isExport()) {
@@ -1377,7 +1384,7 @@
 
             if (!success) {
               // Also try to remove members one at a time.
-              for (DirectParserASTContent child in body.children) {
+              for (DirectParserASTContent child in body.children!) {
                 shouldCompile = false;
                 if (child is DirectParserASTContentMemberEnd) {
                   if (child.isClassConstructor()) {
@@ -1434,7 +1441,7 @@
                       helper, uri, initialComponent, what);
                   if (helper.shouldQuit) return;
                   if (!success) {
-                    DirectParserASTContentBlockFunctionBodyEnd decl;
+                    DirectParserASTContentBlockFunctionBodyEnd? decl;
                     if (child is DirectParserASTContentMemberEnd) {
                       if (child.isClassMethod()) {
                         decl = child.getClassMethod().getBlockFunctionBody();
@@ -1464,7 +1471,7 @@
             // we could try to remove "B, " or ", C" etc.
             if (decl.getClassExtends().extendsKeyword != null) {
               helper.replacements.add(new _Replacement(
-                  decl.getClassExtends().extendsKeyword.offset - 1,
+                  decl.getClassExtends().extendsKeyword!.offset - 1,
                   body.beginToken.offset));
               what = "class extends";
               success = await _tryReplaceAndCompile(
@@ -1473,7 +1480,7 @@
             }
             if (decl.getClassImplements().implementsKeyword != null) {
               helper.replacements.add(new _Replacement(
-                  decl.getClassImplements().implementsKeyword.offset - 1,
+                  decl.getClassImplements().implementsKeyword!.offset - 1,
                   body.beginToken.offset));
               what = "class implements";
               success = await _tryReplaceAndCompile(
@@ -1482,7 +1489,7 @@
             }
             if (decl.getClassWithClause() != null) {
               helper.replacements.add(new _Replacement(
-                  decl.getClassWithClause().withKeyword.offset - 1,
+                  decl.getClassWithClause()!.withKeyword.offset - 1,
                   body.beginToken.offset));
               what = "class with clause";
               success = await _tryReplaceAndCompile(
@@ -1506,7 +1513,7 @@
 
             if (!success) {
               // Also try to remove members one at a time.
-              for (DirectParserASTContent child in body.children) {
+              for (DirectParserASTContent child in body.children!) {
                 shouldCompile = false;
                 if (child is DirectParserASTContentMemberEnd) {
                   if (child.isMixinConstructor()) {
@@ -1563,7 +1570,7 @@
                       helper, uri, initialComponent, what);
                   if (helper.shouldQuit) return;
                   if (!success) {
-                    DirectParserASTContentBlockFunctionBodyEnd decl;
+                    DirectParserASTContentBlockFunctionBodyEnd? decl;
                     if (child is DirectParserASTContentMemberEnd) {
                       if (child.isClassMethod()) {
                         decl = child.getClassMethod().getBlockFunctionBody();
@@ -1626,8 +1633,8 @@
     }
   }
 
-  void _deleteEmptyLines(Uri uri, Component initialComponent) async {
-    Uint8List data = _fs.data[uri];
+  Future<void> _deleteEmptyLines(Uri uri, Component initialComponent) async {
+    Uint8List data = _fs.data[uri]!;
     List<Uint8List> lines = [];
     int start = 0;
     for (int i = 0; i < data.length; i++) {
@@ -1667,9 +1674,9 @@
     }
   }
 
-  void _deleteLines(Uri uri, Component initialComponent) async {
+  Future<void> _deleteLines(Uri uri, Component initialComponent) async {
     // Try to delete "lines".
-    Uint8List data = _fs.data[uri];
+    Uint8List data = _fs.data[uri]!;
     List<Uint8List> lines = [];
     int start = 0;
     for (int i = 0; i < data.length; i++) {
@@ -1741,15 +1748,16 @@
     _fs.data[uri] = latestCrashData;
   }
 
-  Future<bool> _tryRemoveIfNotKnownByCompiler(Uri uri, initialComponent) async {
-    if (_fs.data[uri] == null || _fs.data[uri].isEmpty) return false;
+  Future<bool> _tryRemoveIfNotKnownByCompiler(
+      Uri? uri, initialComponent) async {
+    if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) return false;
     if (!uri.toString().endsWith(".dart")) return false;
 
-    if (_knownByCompiler(uri)) return false;
+    if (_knownByCompiler(uri!)) return false;
 
     // Compiler might not know this. Can we delete it?
     await _deleteContent([uri], 0, true, initialComponent);
-    if (_fs.data[uri] == null || _fs.data[uri].isEmpty) {
+    if (_fs.data[uri] == null || _fs.data[uri]!.isEmpty) {
       await _deleteContent([uri], 0, true, initialComponent, deleteFile: true);
       return true;
     }
@@ -1758,8 +1766,8 @@
   }
 
   bool _knownByCompiler(Uri uri) {
-    LibraryBuilder libraryBuilder = _latestCrashingIncrementalCompiler
-        .userCode.loader.builders[_getImportUri(uri)];
+    LibraryBuilder? libraryBuilder = _latestCrashingIncrementalCompiler!
+        .userCode!.loader.builders[_getImportUri(uri)];
     if (libraryBuilder != null) {
       return true;
     }
@@ -1776,14 +1784,14 @@
 
   bool _isUriNnbd(Uri uri, {bool crashOnFail: true}) {
     Uri asImportUri = _getImportUri(uri);
-    LibraryBuilder libraryBuilder = _latestCrashingIncrementalCompiler
-        .userCode.loader.builders[asImportUri];
+    LibraryBuilder? libraryBuilder = _latestCrashingIncrementalCompiler!
+        .userCode!.loader.builders[asImportUri];
     if (libraryBuilder != null) {
       return libraryBuilder.isNonNullableByDefault;
     }
     print("Couldn't lookup $uri");
-    for (LibraryBuilder libraryBuilder
-        in _latestCrashingIncrementalCompiler.userCode.loader.builders.values) {
+    for (LibraryBuilder libraryBuilder in _latestCrashingIncrementalCompiler!
+        .userCode!.loader.builders.values) {
       if (libraryBuilder.importUri == uri) {
         print("Found $uri as ${libraryBuilder.importUri} (!= ${asImportUri})");
         return libraryBuilder.isNonNullableByDefault;
@@ -1822,7 +1830,7 @@
         // serialization.
         ByteSink sink = new ByteSink();
         BinaryPrinter printer = new BinaryPrinter(sink);
-        printer.writeComponentFile(_latestComponent);
+        printer.writeComponentFile(_latestComponent!);
       }
 
       if (_gotWantedError) didNotGetWantedErrorAfterFirstCompile = false;
@@ -1865,6 +1873,7 @@
           }
         }
       }
+      // ignore: unnecessary_null_comparison
       if (foundLine == null) throw "Unexpected crash without stacktrace: $e";
       if (_expectedCrashLine == null) {
         print("Got '$foundLine'");
@@ -1881,7 +1890,7 @@
           print(" ==> Adding to auto redirects!");
           // Add the current one too, so we don't rediscover that one once we
           // try minimizing the new ones.
-          _settings.allAutoRedirects.add(_expectedCrashLine);
+          _settings.allAutoRedirects.add(_expectedCrashLine!);
           _settings.allAutoRedirects.add(foundLine);
           _settings.fileSystems.add(_fs.toJson());
         } else if (_settings.askAboutRedirectCrashTarget &&
@@ -1890,11 +1899,11 @@
           while (true) {
             // Add the current one too, so we don't rediscover that again
             // and asks about going back to it.
-            _settings.askedAboutRedirect.add(_expectedCrashLine);
+            _settings.askedAboutRedirect.add(_expectedCrashLine!);
             _settings.askedAboutRedirect.add(foundLine);
             print(eWithSt);
             print("Should we redirect to searching for that? (y/n)");
-            String answer = stdin.readLineSync();
+            String answer = stdin.readLineSync()!;
             if (answer == "yes" || answer == "y") {
               _expectedCrashLine = foundLine;
               _latestCrashingIncrementalCompiler = incrementalCompiler;
@@ -1923,7 +1932,6 @@
     CompilerOptions options = getOptions();
 
     if (_settings.experimentalInvalidation) {
-      options.explicitExperimentalFlags ??= {};
       options.explicitExperimentalFlags[
           ExperimentalFlag.alternativeInvalidationStrategy] = true;
     }
@@ -1946,7 +1954,7 @@
         target = new Dart2jsTarget("dart2js", targetFlags);
         break;
       default:
-        throw "Unknown target '$target'";
+        throw "Unknown target '${_settings.targetString}'";
     }
     options.target = target;
     options.fileSystem = _fs;
@@ -1958,7 +1966,7 @@
       // Except if we're looking to trigger a specific error on reload.
       if (_settings.lookForErrorErrorOnReload != null &&
           message.ansiFormatted.first
-              .contains(_settings.lookForErrorErrorOnReload)) {
+              .contains(_settings.lookForErrorErrorOnReload!)) {
         _gotWantedError = true;
       }
     };
@@ -1979,12 +1987,14 @@
         nnbd ? _scannerConfiguration : _scannerConfigurationNonNNBD,
         lineStarts);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       throw "Got null token from scanner";
     }
 
     ParserTestListener parserTestListener = new ParserTestListener(false);
-    Parser parser = new Parser(parserTestListener);
+    Parser parser = new Parser(parserTestListener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     parser.parseUnit(firstToken);
     String parsedString =
         parser_suite.tokenStreamToString(firstToken, lineStarts).toString();
@@ -1995,12 +2005,14 @@
     Token firstToken = parser_suite.scanRawBytes(rawBytes,
         nnbd ? _scannerConfiguration : _scannerConfigurationNonNNBD, null);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       return false;
     }
 
     ParserErrorListener parserErrorListener = new ParserErrorListener();
-    Parser parser = new Parser(parserErrorListener);
+    Parser parser = new Parser(parserErrorListener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     parser.parseUnit(firstToken);
     return !parserErrorListener.gotError;
   }
@@ -2015,8 +2027,9 @@
       enableExtensionMethods: true,
       enableNonNullable: false);
 
-  List<int> _dataCache;
-  String _dataCacheString;
+  List<int>? _dataCache;
+  String? _dataCacheString;
+
   Uint8List _replaceRange(
       List<_Replacement> unsortedReplacements, Uint8List rawData) {
     // The offsets are character offsets, not byte offsets, so for non-ascii
@@ -2036,18 +2049,18 @@
     for (int i = 0; i < sortedReplacements.length; i++) {
       _Replacement replacement = sortedReplacements[i];
       for (int j = prev; j <= replacement.from; j++) {
-        builder.writeCharCode(_dataCacheString.codeUnitAt(j));
+        builder.writeCharCode(_dataCacheString!.codeUnitAt(j));
       }
       if (replacement.nullOrReplacement != null) {
         builder.write(replacement.nullOrReplacement);
       }
       prev = replacement.to;
     }
-    for (int j = prev; j < _dataCacheString.length; j++) {
-      builder.writeCharCode(_dataCacheString.codeUnitAt(j));
+    for (int j = prev; j < _dataCacheString!.length; j++) {
+      builder.writeCharCode(_dataCacheString!.codeUnitAt(j));
     }
 
-    Uint8List candidate = utf8.encode(builder.toString());
+    Uint8List candidate = utf8.encode(builder.toString()) as Uint8List;
     return candidate;
   }
 }
@@ -2055,6 +2068,7 @@
 class ParserErrorListener extends Listener {
   bool gotError = false;
   List<Message> messages = [];
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     gotError = true;
@@ -2075,7 +2089,7 @@
 class _Replacement implements Comparable<_Replacement> {
   final int from;
   final int to;
-  final String nullOrReplacement;
+  final String? nullOrReplacement;
 
   _Replacement(this.from, this.to, {this.nullOrReplacement});
 
@@ -2088,24 +2102,24 @@
 class _FakeFileSystem extends FileSystem {
   bool _redirectAndRecord = true;
   bool _initialized = false;
-  final Map<Uri, Uint8List> data = {};
+  final Map<Uri?, Uint8List?> data = {};
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
     return new _FakeFileSystemEntity(this, uri);
   }
 
-  initializeFromJson(Map<String, dynamic> json) {
+  void initializeFromJson(Map<String, dynamic> json) {
     _initialized = true;
     _redirectAndRecord = json['_redirectAndRecord'];
     data.clear();
     List tmp = json['data'];
     for (int i = 0; i < tmp.length; i += 2) {
-      Uri key = tmp[i] == null ? null : Uri.parse(tmp[i]);
+      Uri? key = tmp[i] == null ? null : Uri.parse(tmp[i]);
       if (tmp[i + 1] == null) {
         data[key] = null;
       } else if (tmp[i + 1] is String) {
-        data[key] = utf8.encode(tmp[i + 1]);
+        data[key] = utf8.encode(tmp[i + 1]) as Uint8List;
       } else {
         data[key] = Uint8List.fromList(new List<int>.from(tmp[i + 1]));
       }
@@ -2118,9 +2132,9 @@
       if (entry.value == null) continue;
       tmp.add(entry.key == null ? null : entry.key.toString());
       dynamic out = entry.value;
-      if (entry.value != null && entry.value.isNotEmpty) {
+      if (entry.value != null && entry.value!.isNotEmpty) {
         try {
-          String string = utf8.decode(entry.value);
+          String string = utf8.decode(entry.value!);
           out = string;
         } catch (e) {
           // not a string...
@@ -2137,6 +2151,7 @@
 
 class _FakeFileSystemEntity extends FileSystemEntity {
   final _FakeFileSystem fs;
+  @override
   final Uri uri;
   _FakeFileSystemEntity(this.fs, this.uri);
 
@@ -2157,7 +2172,7 @@
   @override
   Future<bool> exists() {
     _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) return Future.value(false);
     return Future.value(true);
   }
@@ -2168,7 +2183,7 @@
   @override
   Future<List<int>> readAsBytes() {
     _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) throw new FileSystemException(uri, "File doesn't exist.");
     return Future.value(data);
   }
@@ -2179,7 +2194,7 @@
   @override
   Future<String> readAsString() {
     _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) throw new FileSystemException(uri, "File doesn't exist.");
     return Future.value(utf8.decode(data));
   }
diff --git a/pkg/front_end/test/dartdoc_test_test.dart b/pkg/front_end/test/dartdoc_test_test.dart
index 4070676..a3570f1 100644
--- a/pkg/front_end/test/dartdoc_test_test.dart
+++ b/pkg/front_end/test/dartdoc_test_test.dart
@@ -9,7 +9,7 @@
 
 import "../tool/dart_doctest_impl.dart" as impl;
 
-main() async {
+void main() async {
   expectCategory = "comment extraction";
   testCommentExtraction();
 
diff --git a/pkg/front_end/test/dartdoctest_suite.dart b/pkg/front_end/test/dartdoctest_suite.dart
index b8fde00..447ab20 100644
--- a/pkg/front_end/test/dartdoctest_suite.dart
+++ b/pkg/front_end/test/dartdoctest_suite.dart
@@ -9,7 +9,7 @@
 
 import '../tool/dart_doctest_impl.dart';
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
@@ -22,6 +22,7 @@
 
   Context(this.suiteName);
 
+  @override
   final List<Step> steps = const <Step>[
     const DartDocTestStep(),
   ];
@@ -33,6 +34,7 @@
     return result;
   }
 
+  @override
   Stream<DartDocTestTestDescription> list(Chain suite) async* {
     await for (TestDescription entry in super.list(suite)) {
       List<Test> tests = await dartDocTest.extractTestsFromUri(entry.uri);
@@ -45,7 +47,9 @@
 }
 
 class DartDocTestTestDescription extends TestDescription {
+  @override
   final String shortName;
+  @override
   final Uri uri;
   final List<Test> tests;
 
@@ -56,8 +60,10 @@
     DartDocTestTestDescription, Context> {
   const DartDocTestStep();
 
+  @override
   String get name => "DartDocTest";
 
+  @override
   Future<Result<DartDocTestTestDescription>> run(
       DartDocTestTestDescription description, Context context) async {
     List<TestResult> result = await context.dartDocTest
diff --git a/pkg/front_end/test/desugar_test.dart b/pkg/front_end/test/desugar_test.dart
index f8078d1..5b7539b2 100644
--- a/pkg/front_end/test/desugar_test.dart
+++ b/pkg/front_end/test/desugar_test.dart
@@ -23,21 +23,22 @@
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
-main() async {
+void main() async {
   await asyncTest(() async {
     await testRedirectingFactoryDirect();
     await testRedirectingFactorySerialized();
     await testRedirectingFactoryPatchFile();
+    await testExtensionMemberKind();
   });
 }
 
-testRedirectingFactoryDirect() async {
+Future<void> testRedirectingFactoryDirect() async {
   var component = await compileUnit(['a.dart'], {'a.dart': aSource});
   checkIsRedirectingFactory(component, 'a.dart', 'A', 'foo');
   checkIsRedirectingFactory(component, 'core', 'Uri', 'file');
 }
 
-testRedirectingFactorySerialized() async {
+Future<void> testRedirectingFactorySerialized() async {
   var component = await compileUnit(['a.dart'], {'a.dart': aSource});
   var bytes = serializeComponent(component);
   component = new ir.Component();
@@ -48,7 +49,7 @@
 
 // regression test: redirecting factories from patch files don't have the
 // redirecting-factory flag stored in kernel.
-testRedirectingFactoryPatchFile() async {
+Future<void> testRedirectingFactoryPatchFile() async {
   var componentUri =
       computePlatformBinariesLocation().resolve('dart2js_platform.dill');
   var component = new ir.Component();
@@ -79,3 +80,97 @@
   _B(int x);
 }
 ''';
+
+Future<void> testExtensionMemberKind() async {
+  var component = await compileUnit(['e.dart'], {'e.dart': extensionSource});
+  var library = component.libraries
+      .firstWhere((l) => l.importUri.path.endsWith('e.dart'));
+  var descriptors =
+      library.extensions.expand((extension) => extension.members).toList();
+
+  // Check generated getters and setters for fields.
+  var fieldGetter =
+      findExtensionField(descriptors, 'field', ir.ExtensionMemberKind.Getter);
+  Expect.equals(
+      api.getExtensionMemberKind(fieldGetter), ir.ProcedureKind.Getter);
+  var fieldSetter =
+      findExtensionField(descriptors, 'field', ir.ExtensionMemberKind.Setter);
+  Expect.equals(
+      api.getExtensionMemberKind(fieldSetter), ir.ProcedureKind.Setter);
+  var staticFieldGetter = findExtensionField(
+      descriptors, 'staticField', ir.ExtensionMemberKind.Getter);
+  Expect.equals(
+      api.getExtensionMemberKind(staticFieldGetter), ir.ProcedureKind.Getter);
+  var staticFieldSetter = findExtensionField(
+      descriptors, 'staticField', ir.ExtensionMemberKind.Setter);
+  Expect.equals(
+      api.getExtensionMemberKind(staticFieldSetter), ir.ProcedureKind.Setter);
+
+  // Check getters and setters.
+  var getter = findExtensionMember(descriptors, 'getter');
+  Expect.equals(api.getExtensionMemberKind(getter), ir.ProcedureKind.Getter);
+  var setter = findExtensionMember(descriptors, 'setter');
+  Expect.equals(api.getExtensionMemberKind(setter), ir.ProcedureKind.Setter);
+  var staticGetter = findExtensionMember(descriptors, 'staticGetter');
+  Expect.equals(
+      api.getExtensionMemberKind(staticGetter), ir.ProcedureKind.Getter);
+  var staticSetter = findExtensionMember(descriptors, 'staticSetter');
+  Expect.equals(
+      api.getExtensionMemberKind(staticSetter), ir.ProcedureKind.Setter);
+
+  // Check methods.
+  var method = findExtensionMember(descriptors, 'method');
+  Expect.equals(api.getExtensionMemberKind(method), ir.ProcedureKind.Method);
+  var methodTearoff = findExtensionTearoff(descriptors, 'get#method');
+  Expect.equals(
+      api.getExtensionMemberKind(methodTearoff), ir.ProcedureKind.Getter);
+  var staticMethod = findExtensionMember(descriptors, 'staticMethod');
+  Expect.equals(
+      api.getExtensionMemberKind(staticMethod), ir.ProcedureKind.Method);
+
+  // Check operators.
+  var operator = findExtensionMember(descriptors, '+');
+  Expect.equals(api.getExtensionMemberKind(operator), ir.ProcedureKind.Method);
+}
+
+ir.Member findExtensionMember(
+    List<ir.ExtensionMemberDescriptor> descriptors, String memberName) {
+  return descriptors
+      .firstWhere((d) => d.name.text == memberName)
+      .member
+      .asMember;
+}
+
+ir.Member findExtensionField(List<ir.ExtensionMemberDescriptor> descriptors,
+    String fieldName, ir.ExtensionMemberKind kind) {
+  return descriptors
+      .firstWhere((d) => d.name.text == fieldName && d.kind == kind)
+      .member
+      .asMember;
+}
+
+ir.Member findExtensionTearoff(
+    List<ir.ExtensionMemberDescriptor> descriptors, String memberName) {
+  return descriptors
+      .map((d) => d.member.asMember)
+      .firstWhere((m) => m.name.text.contains(memberName));
+}
+
+const extensionSource = '''
+class Foo {}
+
+extension Ext on Foo {
+  external int field;
+  external static int staticField;
+
+  external get getter;
+  external set setter(_);
+  external static get staticGetter;
+  external static set staticSetter(_);
+
+  external int method();
+  external static int staticMethod();
+
+  external operator +(_);
+}
+''';
diff --git a/pkg/front_end/test/dijkstras_sssp_algorithm.dart b/pkg/front_end/test/dijkstras_sssp_algorithm.dart
index 0c93386..1c0a623 100644
--- a/pkg/front_end/test/dijkstras_sssp_algorithm.dart
+++ b/pkg/front_end/test/dijkstras_sssp_algorithm.dart
@@ -104,6 +104,7 @@
     }
   }
 
+  @override
   String toString() {
     return "GraphNode[$node]";
   }
diff --git a/pkg/front_end/test/dill_round_trip_test.dart b/pkg/front_end/test/dill_round_trip_test.dart
index 894d6d4..17bbe1d 100644
--- a/pkg/front_end/test/dill_round_trip_test.dart
+++ b/pkg/front_end/test/dill_round_trip_test.dart
@@ -15,7 +15,7 @@
 import 'incremental_suite.dart'
     show checkIsEqual, getOptions, normalCompilePlain;
 
-main() async {
+void main() async {
   final Uri dart2jsUrl = Uri.base.resolve("pkg/compiler/bin/dart2js.dart");
   Stopwatch stopwatch = new Stopwatch()..start();
   Component compiledComponent = await normalCompilePlain(dart2jsUrl,
diff --git a/pkg/front_end/test/enable_non_nullable/data/allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart b/pkg/front_end/test/enable_non_nullable/data/allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart
deleted file mode 100644
index a316359..0000000
--- a/pkg/front_end/test/enable_non_nullable/data/allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart
+++ /dev/null
@@ -1,18 +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.
-
-// Partial copy of tests/language_2/syntax/pre_nnbd_modifiers_test.dart.
-
-class late {
-  int get g => 1;
-}
-
-class required {
-  int get g => 2;
-}
-
-class C {
-  late l = late();
-  required r = required();
-}
diff --git a/pkg/front_end/test/enable_non_nullable/data/main.dart b/pkg/front_end/test/enable_non_nullable/data/main.dart
index 5744d19..cc333b0 100644
--- a/pkg/front_end/test/enable_non_nullable/data/main.dart
+++ b/pkg/front_end/test/enable_non_nullable/data/main.dart
@@ -7,13 +7,11 @@
 import 'package:allowed_package/versioned_2_9_lib.dart';
 import 'package:allowed_package/versioned_2_10_lib.dart';
 import 'package:allowed_package/versioned_2_11_lib.dart';
-import 'package:allowed_package/tests/language_2/implicitly_not_nnbd.dart';
 import 'package:not_allowed_package/unversioned_lib.dart';
 import 'package:not_allowed_package/versioned_2_8_lib.dart';
 import 'package:not_allowed_package/versioned_2_9_lib.dart';
 import 'package:not_allowed_package/versioned_2_10_lib.dart';
 import 'package:not_allowed_package/versioned_2_11_lib.dart';
-import 'package:not_allowed_package/tests/language_2/implicitly_not_nnbd.dart';
 import 'unversioned_lib.dart';
 import 'versioned_2_8_lib.dart';
 import 'versioned_2_9_lib.dart';
diff --git a/pkg/front_end/test/enable_non_nullable/data/not_allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart b/pkg/front_end/test/enable_non_nullable/data/not_allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart
deleted file mode 100644
index a316359..0000000
--- a/pkg/front_end/test/enable_non_nullable/data/not_allowed_package/lib/tests/language_2/implicitly_not_nnbd.dart
+++ /dev/null
@@ -1,18 +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.
-
-// Partial copy of tests/language_2/syntax/pre_nnbd_modifiers_test.dart.
-
-class late {
-  int get g => 1;
-}
-
-class required {
-  int get g => 2;
-}
-
-class C {
-  late l = late();
-  required r = required();
-}
diff --git a/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart b/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
index d95cf75..b15d91f 100644
--- a/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
+++ b/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
@@ -12,7 +12,6 @@
 import 'package:front_end/src/api_prototype/kernel_generator.dart';
 import 'package:front_end/src/api_prototype/language_version.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart';
-import 'package:front_end/src/fasta/source/source_library_builder.dart';
 import 'package:kernel/ast.dart';
 
 /// The version used in this test as the experiment release version.
@@ -21,7 +20,7 @@
 /// The version used in this test as the experiment enabled version.
 const Version experimentEnabledVersion = const Version(2, 10);
 
-main() async {
+void main() async {
   print('--------------------------------------------------------------------');
   print('Test off-by-default with command-line flag');
   print('--------------------------------------------------------------------');
@@ -59,7 +58,7 @@
       versionOptsInAllowed: experimentReleaseVersion);
 }
 
-test(
+void test(
     {bool enableNonNullableByDefault,
     bool enableNonNullableExplicitly,
     Version versionImpliesOptIn,
@@ -142,8 +141,7 @@
           " (package) uri=${versionAndPackageUri.packageUri}");
       Expect.isTrue(
           library.languageVersion < versionImpliesOptIn ||
-              library.isNonNullableByDefault ||
-              SourceLibraryBuilder.isOptOutTest(library.fileUri),
+              library.isNonNullableByDefault,
           "Expected library ${library.importUri} with version "
           "${library.languageVersion} to be opted in.");
       Expect.isTrue(
@@ -151,8 +149,7 @@
               !versionAndPackageUri.packageUri.path
                   .startsWith('allowed_package') ||
               library.languageVersion < versionOptsInAllowed ||
-              library.isNonNullableByDefault ||
-              SourceLibraryBuilder.isOptOutTest(library.fileUri),
+              library.isNonNullableByDefault,
           "Expected allowed library ${library.importUri} with version "
           "${library.languageVersion} to be opted in.");
     }
diff --git a/pkg/front_end/test/explicit_creation_git_test.dart b/pkg/front_end/test/explicit_creation_git_test.dart
index 0b6b6e0..287b605 100644
--- a/pkg/front_end/test/explicit_creation_git_test.dart
+++ b/pkg/front_end/test/explicit_creation_git_test.dart
@@ -24,12 +24,12 @@
 import 'package:front_end/src/fasta/fasta_codes.dart' as fasta;
 import 'package:front_end/src/fasta/kernel/body_builder.dart';
 import 'package:front_end/src/fasta/kernel/constness.dart';
+import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
 import 'package:front_end/src/fasta/kernel/kernel_target.dart';
 import 'package:front_end/src/fasta/scope.dart';
 import 'package:front_end/src/fasta/source/diet_listener.dart';
 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/source/stack_listener_impl.dart';
 import 'package:front_end/src/fasta/ticker.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
@@ -135,6 +135,7 @@
         library, hierarchy, coreTypes, typeInferenceEngine);
   }
 
+  @override
   BodyBuilder createBodyBuilderForOutlineExpression(
       SourceLibraryBuilder library,
       DeclarationBuilder declarationBuilder,
@@ -145,6 +146,7 @@
         library, declarationBuilder, member, scope, fileUri);
   }
 
+  @override
   BodyBuilder createBodyBuilderForField(
       FieldBuilder field, TypeInferrer typeInferrer) {
     return new BodyBuilderTest.forField(field, typeInferrer);
@@ -157,7 +159,7 @@
       : super(library, hierarchy, coreTypes, typeInferenceEngine);
 
   @override
-  StackListenerImpl createListenerInternal(
+  BodyBuilder createListenerInternal(
       ModifierBuilder builder,
       Scope memberScope,
       Scope formalParameterScope,
@@ -237,7 +239,8 @@
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
-      TypeDeclarationBuilder typeAliasBuilder}) {
+      TypeDeclarationBuilder typeAliasBuilder,
+      UnresolvedKind unresolvedKind}) {
     Token maybeNewOrConst = nameToken.previous;
     bool doReport = true;
     if (maybeNewOrConst is KeywordToken) {
@@ -270,7 +273,8 @@
     }
     return super.buildConstructorInvocation(type, nameToken, nameLastToken,
         arguments, name, typeArguments, charOffset, constness,
-        isTypeArgumentsInForest: isTypeArgumentsInForest);
+        isTypeArgumentsInForest: isTypeArgumentsInForest,
+        unresolvedKind: unresolvedKind);
   }
 }
 
diff --git a/pkg/front_end/test/extensions/data/prefix/main.dart b/pkg/front_end/test/extensions/data/prefix/main.dart
index db772d9..3d5a192 100644
--- a/pkg/front_end/test/extensions/data/prefix/main.dart
+++ b/pkg/front_end/test/extensions/data/prefix/main.dart
@@ -16,10 +16,10 @@
 
 main() {
   lib1.ShownExtension1.staticMethod();
-  lib1. /*error: errors=[Getter not found: 'HiddenExtension1'.]*/
+  lib1. /*error: errors=[Undefined name 'HiddenExtension1'.]*/
       HiddenExtension1.staticMethod();
   lib2.ShownExtension2.staticMethod();
-  lib2. /*error: errors=[Getter not found: 'HiddenExtension2'.]*/
+  lib2. /*error: errors=[Undefined name 'HiddenExtension2'.]*/
       HiddenExtension2.staticMethod();
   lib3.ShownExtension3.staticMethod();
 }
diff --git a/pkg/front_end/test/extensions/data/show_hide/main.dart b/pkg/front_end/test/extensions/data/show_hide/main.dart
index 60ba8f4..3846220 100644
--- a/pkg/front_end/test/extensions/data/show_hide/main.dart
+++ b/pkg/front_end/test/extensions/data/show_hide/main.dart
@@ -14,9 +14,9 @@
 
 main() {
   ShownExtension1.staticMethod();
-  /*error: errors=[Getter not found: 'HiddenExtension1'.]*/
+  /*error: errors=[Undefined name 'HiddenExtension1'.]*/
   HiddenExtension1.staticMethod();
   ShownExtension2.staticMethod();
-  /*error: errors=[Getter not found: 'HiddenExtension2'.]*/
+  /*error: errors=[Undefined name 'HiddenExtension2'.]*/
   HiddenExtension2.staticMethod();
 }
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index 5ccb1e8..c811201 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -23,7 +23,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<Features>(dataDir,
       args: args,
@@ -59,6 +59,7 @@
     new ExtensionsDataExtractor(compilerResult, actualMap).computeForClass(cls);
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/fasta/ambiguous_export_test.dart b/pkg/front_end/test/fasta/ambiguous_export_test.dart
index 6fa366c..579a3f8 100644
--- a/pkg/front_end/test/fasta/ambiguous_export_test.dart
+++ b/pkg/front_end/test/fasta/ambiguous_export_test.dart
@@ -20,7 +20,7 @@
 import 'package:kernel/ast.dart'
     show Field, Library, Name, Component, StringLiteral;
 
-main() async {
+void main() async {
   await asyncTest(() async {
     Uri uri = Uri.parse("org.dartlang.fasta:library");
     Library library = new Library(uri, fileUri: uri);
diff --git a/pkg/front_end/test/fasta/analyze_git_test.dart b/pkg/front_end/test/fasta/analyze_git_test.dart
index 684f469..7ccff17 100644
--- a/pkg/front_end/test/fasta/analyze_git_test.dart
+++ b/pkg/front_end/test/fasta/analyze_git_test.dart
@@ -8,7 +8,7 @@
 
 import "package:testing/src/run_tests.dart" as testing show main;
 
-main() async {
+void main() async {
   // This method is async, but keeps a port open to prevent the VM from exiting
   // prematurely.
   // Note: if you change this file, also change
diff --git a/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart b/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
index aba5e28..34ca1e2 100644
--- a/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
+++ b/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
@@ -8,7 +8,7 @@
 
 import "package:testing/src/run_tests.dart" as testing show main;
 
-main() async {
+void main() async {
   await testing.main(<String>[
     "--config=pkg/front_end/testing_with_lints.json",
     "--verbose",
diff --git a/pkg/front_end/test/fasta/assert_locations_test.dart b/pkg/front_end/test/fasta/assert_locations_test.dart
index 3ef159b..029196a 100644
--- a/pkg/front_end/test/fasta/assert_locations_test.dart
+++ b/pkg/front_end/test/fasta/assert_locations_test.dart
@@ -115,7 +115,7 @@
   VerifyingVisitor(this.test);
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     expectedSpan = test.spans[node.name.text];
     if (expectedSpan != null) {
       super.visitProcedure(node);
@@ -125,7 +125,7 @@
   }
 
   @override
-  visitAssertStatement(AssertStatement node) {
+  void visitAssertStatement(AssertStatement node) {
     Expect.equals(expectedSpan.startOffset, node.conditionStartOffset);
     Expect.equals(expectedSpan.endOffset, node.conditionEndOffset);
   }
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index bc75787..fd49f77 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -106,5 +106,6 @@
 
   ComparisonFailed(this.a, this.b);
 
-  toString() => "Error: $a is different from $b";
+  @override
+  String toString() => "Error: $a is different from $b";
 }
diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 4178a6f..94cef6e 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -60,6 +60,7 @@
   final CompilerContext compilerContext;
   final List<DiagnosticMessage> errors;
 
+  @override
   final List<Step> steps;
 
   Context(this.compilerContext, this.errors, bool updateExpectations)
@@ -154,6 +155,7 @@
       this.className,
       this.expression);
 
+  @override
   String toString() {
     return "TestCase("
         "$entryPoint, "
@@ -190,8 +192,10 @@
   const MatchProcedureExpectations(this.suffix,
       {this.updateExpectations: false});
 
+  @override
   String get name => "match expectations";
 
+  @override
   Future<Result<Null>> run(List<TestCase> tests, Context context) async {
     String actual = "";
     for (var test in tests) {
@@ -239,8 +243,10 @@
 class ReadTest extends Step<TestDescription, List<TestCase>, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<List<TestCase>>> run(
       TestDescription description, Context context) async {
     context.reset();
@@ -301,6 +307,7 @@
 class CompileExpression extends Step<List<TestCase>, List<TestCase>, Context> {
   const CompileExpression();
 
+  @override
   String get name => "compile expression";
 
   // Compile [test.expression], update [test.errors] with results.
@@ -335,6 +342,7 @@
     }
   }
 
+  @override
   Future<Result<List<TestCase>>> run(
       List<TestCase> tests, Context context) async {
     for (var test in tests) {
@@ -431,5 +439,5 @@
   return new Context(compilerContext, errors, updateExpectations);
 }
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../../testing.json");
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 506d663..f59c8c3 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -10,6 +10,7 @@
     show Token, scanString;
 
 import 'package:expect/expect.dart' show Expect;
+import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
 import 'package:front_end/src/fasta/scope.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
@@ -61,11 +62,11 @@
 import 'package:front_end/src/fasta/source/source_library_builder.dart'
     show ImplicitLanguageVersion, SourceLibraryBuilder;
 
-void check(String expected, Generator generator) {
+void check(String expected, Object generator) {
   Expect.stringEquals(expected, "$generator");
 }
 
-main() async {
+void main() async {
   await CompilerContext.runWithDefaultOptions((CompilerContext c) async {
     Token token = scanString("    myToken").tokens;
     Uri uri = Uri.parse("org-dartlang-test:my_library.dart");
@@ -197,10 +198,10 @@
         new ThisAccessGenerator(helper, token, false, false, false));
     check("IncompleteErrorGenerator(offset: 4, message: Unspecified)",
         new IncompleteErrorGenerator(helper, token, message));
-    check("SendAccessGenerator(offset: 4, name: bar, arguments: (\"arg\"))",
-        new SendAccessGenerator(helper, token, name, null, arguments));
-    check("IncompletePropertyAccessGenerator(offset: 4, name: bar)",
-        new IncompletePropertyAccessGenerator(helper, token, name));
+    check("InvocationSelector(offset: 4, name: bar, arguments: (\"arg\"))",
+        new InvocationSelector(helper, token, name, null, arguments));
+    check("PropertySelector(offset: 4, name: bar)",
+        new PropertySelector(helper, token, name));
     check(
         "DeferredAccessGenerator(offset: 4,"
         " prefixGenerator: PrefixUseGenerator("
@@ -222,8 +223,10 @@
         new ParenthesizedExpressionGenerator(helper, token, expression));
     check("TypeUseGenerator(offset: 4, declaration: T, plainNameForRead: foo)",
         new TypeUseGenerator(helper, token, declaration, "foo"));
-    check("UnresolvedNameGenerator(offset: 4, name: bar)",
-        new UnresolvedNameGenerator.internal(helper, token, name));
+    check(
+        "UnresolvedNameGenerator(offset: 4, name: bar)",
+        new UnresolvedNameGenerator.internal(
+            helper, token, name, UnresolvedKind.Unknown));
     check("PrefixUseGenerator(offset: 4, prefix: myPrefix, deferred: false)",
         prefixUseGenerator);
     check(
diff --git a/pkg/front_end/test/fasta/incremental_dartino_suite.dart b/pkg/front_end/test/fasta/incremental_dartino_suite.dart
index 0fc4330..f3b354e 100644
--- a/pkg/front_end/test/fasta/incremental_dartino_suite.dart
+++ b/pkg/front_end/test/fasta/incremental_dartino_suite.dart
@@ -60,6 +60,7 @@
   final CompilerContext compilerContext;
   final List<DiagnosticMessage> errors;
 
+  @override
   final List<Step> steps = const <Step>[
     const ReadTest(),
     const RunCompilations(),
@@ -92,8 +93,10 @@
 class ReadTest extends Step<TestDescription, TestCase, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<TestCase>> run(
       TestDescription description, Context context) async {
     context.reset();
@@ -125,8 +128,10 @@
 class RunCompilations extends Step<TestCase, TestCase, Context> {
   const RunCompilations();
 
+  @override
   String get name => "run compilations";
 
+  @override
   Future<Result<TestCase>> run(TestCase test, Context context) async {
     for (int edits = 0;; edits++) {
       bool foundSources = false;
@@ -177,6 +182,7 @@
 
   TestCase(this.description, this.sources, this.expectations);
 
+  @override
   String toString() {
     return "TestCase(${json.convert(sources)}, ${json.convert(expectations)})";
   }
@@ -238,5 +244,5 @@
   return new Context(new CompilerContext(options), errors);
 }
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../../testing.json");
diff --git a/pkg/front_end/test/fasta/incremental_expectations.dart b/pkg/front_end/test/fasta/incremental_expectations.dart
index 9839f4d..7e9a45c 100644
--- a/pkg/front_end/test/fasta/incremental_expectations.dart
+++ b/pkg/front_end/test/fasta/incremental_expectations.dart
@@ -41,7 +41,7 @@
         hasCompileTimeError: extractHasCompileTimeError(data));
   }
 
-  toJson() {
+  dynamic toJson() {
     if (!commitChangesShouldFail && !hasCompileTimeError) {
       return messages.length == 1 ? messages.first : messages;
     }
@@ -57,6 +57,7 @@
     return result;
   }
 
+  @override
   String toString() {
     return """
 IncrementalExpectation(
diff --git a/pkg/front_end/test/fasta/incremental_hello_test.dart b/pkg/front_end/test/fasta/incremental_hello_test.dart
index 4e10f32..33d7d3a 100644
--- a/pkg/front_end/test/fasta/incremental_hello_test.dart
+++ b/pkg/front_end/test/fasta/incremental_hello_test.dart
@@ -34,7 +34,7 @@
   throw "Unexpected message: ${message.plainTextFormatted.join('\n')}";
 }
 
-test({bool sdkFromSource}) async {
+Future<void> test({bool sdkFromSource}) async {
   final CompilerOptions optionBuilder = new CompilerOptions()
     ..packagesFileUri = Uri.base.resolve(".packages")
     ..target = new VmTarget(new TargetFlags())
diff --git a/pkg/front_end/test/fasta/link_test.dart b/pkg/front_end/test/fasta/link_test.dart
index a0b7b06..d1029eb 100644
--- a/pkg/front_end/test/fasta/link_test.dart
+++ b/pkg/front_end/test/fasta/link_test.dart
@@ -8,12 +8,14 @@
 
 import 'package:expect/expect.dart' show Expect;
 
-main() {
+void main() {
   Link<String> strings = const Link<String>().prepend("B").prepend("A");
   Expect.stringEquals("[ A, B ]", "${strings}");
   Expect.stringEquals("[ B, A ]", "${strings.reverse(const Link<String>())}");
 
-  strings = (new LinkBuilder<String>()..addLast("A")..addLast("B"))
+  strings = (new LinkBuilder<String>()
+        ..addLast("A")
+        ..addLast("B"))
       .toLink(const Link<String>());
 
   Expect.stringEquals("[ A, B ]", "${strings}");
@@ -34,7 +36,9 @@
   Expect.stringEquals("[ A, B ]", "${strings}");
   Expect.stringEquals("[ B, A ]", "${strings.reverse(const Link<String>())}");
 
-  strings = (new LinkBuilder<String>()..addLast("A")..addLast("B"))
+  strings = (new LinkBuilder<String>()
+        ..addLast("A")
+        ..addLast("B"))
       .toLink(const Link<String>());
 
   Expect.stringEquals("[ A, B ]", "${strings}");
diff --git a/pkg/front_end/test/fasta/messages_suite.dart b/pkg/front_end/test/fasta/messages_suite.dart
index 7530042..8e884da 100644
--- a/pkg/front_end/test/fasta/messages_suite.dart
+++ b/pkg/front_end/test/fasta/messages_suite.dart
@@ -93,6 +93,7 @@
 }
 
 class MessageTestSuite extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Validate(),
     const Compile(),
@@ -145,6 +146,7 @@
   /// problem that a message can have. This problem will then be reported as a
   /// failure by the [Validate] step that can be suppressed via the status
   /// file.
+  @override
   Stream<MessageTestDescription> list(Chain suite) async* {
     Uri uri = suite.uri.resolve("messages.yaml");
     File file = new File.fromUri(uri);
@@ -623,6 +625,7 @@
       : expression = node.value,
         super(name, code);
 
+  @override
   Map<String, Script> get scripts {
     return {
       mainFilename: new Script.fromSource("""
@@ -733,8 +736,10 @@
 class Validate extends Step<MessageTestDescription, Example, MessageTestSuite> {
   const Validate();
 
+  @override
   String get name => "validate";
 
+  @override
   Future<Result<Example>> run(
       MessageTestDescription description, MessageTestSuite suite) async {
     if (description.problem != null) {
@@ -748,8 +753,10 @@
 class Compile extends Step<Example, Null, MessageTestSuite> {
   const Compile();
 
+  @override
   String get name => "compile";
 
+  @override
   Future<Result<Null>> run(Example example, MessageTestSuite suite) async {
     if (example == null) return pass(null);
     String dir = "${example.expectedCode}/${example.name}";
@@ -869,5 +876,5 @@
   }
 }
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../../testing.json");
diff --git a/pkg/front_end/test/fasta/object_supertype_test.dart b/pkg/front_end/test/fasta/object_supertype_test.dart
index d6e0ae6..62b9210 100644
--- a/pkg/front_end/test/fasta/object_supertype_test.dart
+++ b/pkg/front_end/test/fasta/object_supertype_test.dart
@@ -75,12 +75,12 @@
   return messages;
 }
 
-test() async {
+Future<void> test() async {
   Set<String> normalErrors = (await outline("class Object {"))
       .map((DiagnosticMessage message) => getMessageCodeObject(message).name)
       .toSet();
 
-  check(String objectHeader, List<Code> expectedCodes) async {
+  void check(String objectHeader, List<Code> expectedCodes) async {
     List<DiagnosticMessage> messages = (await outline(objectHeader))
         .where((DiagnosticMessage message) =>
             !normalErrors.contains(getMessageCodeObject(message).name))
@@ -100,6 +100,6 @@
       <Code>[codeObjectExtends, codeObjectMixesIn]);
 }
 
-main() {
+void main() {
   asyncTest(test);
 }
diff --git a/pkg/front_end/test/fasta/outline_suite.dart b/pkg/front_end/test/fasta/outline_suite.dart
index 0c9fbfd..cb5f5a9 100644
--- a/pkg/front_end/test/fasta/outline_suite.dart
+++ b/pkg/front_end/test/fasta/outline_suite.dart
@@ -13,5 +13,5 @@
   return FastaContext.create(suite, environment);
 }
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../../testing.json");
diff --git a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
index 3dd5da0..c282670 100644
--- a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
@@ -8,10 +8,11 @@
 import 'package:_fe_analyzer_shared/src/parser/async_modifier.dart';
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart';
 import 'package:front_end/src/fasta/messages.dart';
+import 'package:front_end/src/fasta/source/diet_parser.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CollectionElementTest);
     defineReflectiveTests(MapElementTest);
@@ -20,7 +21,7 @@
 
 @reflectiveTest
 class CollectionElementTest {
-  test_closingBrace() {
+  void test_closingBrace() {
     parseEntry(
       '[ }',
       [
@@ -35,7 +36,7 @@
     );
   }
 
-  test_comma() {
+  void test_comma() {
     parseEntry(
       '[ ,',
       [
@@ -49,7 +50,7 @@
     );
   }
 
-  test_expression() {
+  void test_expression() {
     parseEntry(
       '[ x',
       [
@@ -62,7 +63,7 @@
     );
   }
 
-  test_for() {
+  void test_for() {
     parseEntry(
       '[ for (var i = 0; i < 10; ++i) 2',
       [
@@ -100,7 +101,7 @@
     );
   }
 
-  test_forForFor() {
+  void test_forForFor() {
     parseEntry(
       '[ for (var i = 0; i < 10; ++i) for (x in y) for (var a in [6]) 2',
       [
@@ -177,7 +178,7 @@
     );
   }
 
-  test_forIfForElse() {
+  void test_forIfForElse() {
     parseEntry(
       '[ await for (var x in y) if (a) for (b in c) 2 else 7',
       [
@@ -240,7 +241,7 @@
     );
   }
 
-  test_forIn() {
+  void test_forIn() {
     parseEntry(
       '[ await for (var x in y) 2',
       [
@@ -270,7 +271,7 @@
     );
   }
 
-  test_forInSpread() {
+  void test_forInSpread() {
     parseEntry(
       '[ for (var x in y) ...[2]',
       [
@@ -302,7 +303,7 @@
     );
   }
 
-  test_forSpreadQ() {
+  void test_forSpreadQ() {
     parseEntry(
       '[ for (i = 0; i < 10; ++i) ...[2]',
       [
@@ -338,7 +339,7 @@
     );
   }
 
-  test_if() {
+  void test_if() {
     parseEntry(
       '[ if (true) 2',
       [
@@ -353,7 +354,7 @@
     );
   }
 
-  test_ifElse() {
+  void test_ifElse() {
     parseEntry(
       '[ if (true) 2 else 5',
       [
@@ -370,7 +371,7 @@
     );
   }
 
-  test_ifFor() {
+  void test_ifFor() {
     parseEntry(
       '[ if (true) for (x in y) 2',
       [
@@ -404,7 +405,7 @@
     );
   }
 
-  test_ifForElseIfFor() {
+  void test_ifForElseIfFor() {
     parseEntry(
       '[ if (true) for (a in b) 2 else if (c) for (d in e) 5',
       [
@@ -468,7 +469,7 @@
     );
   }
 
-  test_ifSpreadQ() {
+  void test_ifSpreadQ() {
     parseEntry(
       '[ if (true) ...?[2]',
       [
@@ -486,7 +487,7 @@
     );
   }
 
-  test_ifElseSpreadQ() {
+  void test_ifElseSpreadQ() {
     parseEntry(
       '[ if (true) ...?[2] else ... const {5}',
       [
@@ -511,14 +512,14 @@
     );
   }
 
-  test_intLiteral() {
+  void test_intLiteral() {
     parseEntry('[ 1', [
       'handleLiteralInt 1',
       'handleLiteralList 1, [, null, ]',
     ]);
   }
 
-  test_spread() {
+  void test_spread() {
     parseEntry('[ ...[1]', [
       'handleNoTypeArguments [',
       'handleLiteralInt 1',
@@ -528,7 +529,7 @@
     ]);
   }
 
-  test_spreadQ() {
+  void test_spreadQ() {
     parseEntry('[ ...?[1]', [
       'handleNoTypeArguments [',
       'handleLiteralInt 1',
@@ -542,7 +543,8 @@
       {bool inAsync, List<ExpectedError> errors, String expectAfter}) {
     final start = scanString(source).tokens;
     final listener = new TestInfoListener();
-    final parser = new Parser(listener);
+    final parser = new Parser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (inAsync != null) parser.asyncState = AsyncModifier.Async;
     final lastConsumed = parser.parseLiteralListSuffix(start, null);
 
@@ -563,7 +565,7 @@
 
 @reflectiveTest
 class MapElementTest {
-  test_closingBrace() {
+  void test_closingBrace() {
     parseEntry(
       'before }',
       [
@@ -586,7 +588,7 @@
     );
   }
 
-  test_comma() {
+  void test_comma() {
     parseEntry(
       'before ,',
       [
@@ -609,7 +611,7 @@
     );
   }
 
-  test_expression() {
+  void test_expression() {
     parseEntry(
       'before x:y',
       [
@@ -626,7 +628,7 @@
     );
   }
 
-  test_for() {
+  void test_for() {
     parseEntry(
       'before for (var i = 0; i < 10; ++i) 2:3',
       [
@@ -665,7 +667,7 @@
     );
   }
 
-  test_forIn() {
+  void test_forIn() {
     parseEntry(
       'before await for (var x in y) 2:3',
       [
@@ -696,7 +698,7 @@
     );
   }
 
-  test_forInSpread() {
+  void test_forInSpread() {
     parseEntry(
       'before for (var x in y) ...{2:3}',
       [
@@ -729,7 +731,7 @@
     );
   }
 
-  test_forSpreadQ() {
+  void test_forSpreadQ() {
     parseEntry(
       'before for (i = 0; i < 10; ++i) ...?{2:7}',
       [
@@ -766,7 +768,7 @@
     );
   }
 
-  test_if() {
+  void test_if() {
     parseEntry(
       'before if (true) 2:3',
       [
@@ -782,7 +784,7 @@
     );
   }
 
-  test_ifSpread() {
+  void test_ifSpread() {
     parseEntry(
       'before if (true) ...{2:3}',
       [
@@ -801,7 +803,7 @@
     );
   }
 
-  test_intLiteral() {
+  void test_intLiteral() {
     parseEntry('before 1:2', [
       'handleLiteralInt 1',
       'handleLiteralInt 2',
@@ -809,7 +811,7 @@
     ]);
   }
 
-  test_spread() {
+  void test_spread() {
     parseEntry('before ...const {1:2}', [
       'beginConstLiteral {',
       'handleNoTypeArguments {',
@@ -822,7 +824,7 @@
     ]);
   }
 
-  test_spreadQ() {
+  void test_spreadQ() {
     parseEntry('before ...?const {1:3}', [
       'beginConstLiteral {',
       'handleNoTypeArguments {',
@@ -839,7 +841,8 @@
       {bool inAsync, List<ExpectedError> errors, String expectAfter}) {
     final start = scanString(source).tokens;
     final listener = new TestInfoListener();
-    final parser = new Parser(listener);
+    final parser = new Parser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (inAsync != null) parser.asyncState = AsyncModifier.Async;
     final lastConsumed = parser.parseMapLiteralEntry(start);
 
@@ -1097,7 +1100,8 @@
     calls.add('handleUnaryPrefixAssignmentExpression $token');
   }
 
-  noSuchMethod(Invocation invocation) {
+  @override
+  dynamic noSuchMethod(Invocation invocation) {
     throw '${invocation.memberName} should not be called.';
   }
 }
diff --git a/pkg/front_end/test/fasta/parser/parser_suite.dart b/pkg/front_end/test/fasta/parser/parser_suite.dart
index 9c9f13a..5a920de 100644
--- a/pkg/front_end/test/fasta/parser/parser_suite.dart
+++ b/pkg/front_end/test/fasta/parser/parser_suite.dart
@@ -2,10 +2,9 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
     show ParserError, parse;
+import 'package:front_end/src/fasta/source/diet_parser.dart';
 
 import 'package:testing/testing.dart'
     show Chain, ChainContext, Result, Step, runMe;
@@ -18,6 +17,7 @@
 }
 
 class ScannerContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Read(),
     const Scan(),
@@ -28,11 +28,14 @@
 class Parse extends Step<ScannedFile, Null, ChainContext> {
   const Parse();
 
+  @override
   String get name => "parse";
 
+  @override
   Future<Result<Null>> run(ScannedFile file, ChainContext context) async {
     try {
-      List<ParserError> errors = parse(file.result.tokens);
+      List<ParserError> errors = parse(file.result.tokens,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
       if (errors.isNotEmpty) {
         return fail(null, errors.join("\n"));
       }
@@ -43,5 +46,5 @@
   }
 }
 
-main(List<String> arguments) =>
+void main(List<String> arguments) =>
     runMe(arguments, createContext, configurationPath: "../../../testing.json");
diff --git a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
index 3d26339..24d01ca 100644
--- a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
+++ b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
@@ -13,7 +13,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TokenStreamRewriterTest_NoPrevious);
     defineReflectiveTests(TokenStreamRewriterTest_UsingPrevious);
@@ -207,6 +207,58 @@
     normalTestDone(rewriter, a);
   }
 
+  void test_replaceNextTokensWithSyntheticToken_1() {
+    Token a = _makeToken(0, 'a');
+    StringToken b = _makeToken(5, 'b');
+    b.precedingComments = new CommentToken.fromSubstring(
+        TokenType.SINGLE_LINE_COMMENT, "Test comment", 1, 9, 1,
+        canonicalize: true);
+    Token c = _makeToken(10, 'c');
+    Token d = _makeToken(11, 'd');
+    Token e = _makeToken(12, 'e');
+    _link([a, b, c, d, e]);
+    setupDone(a);
+
+    TokenStreamRewriter rewriter = getTokenStreamRewriter();
+    ReplacementToken replacement =
+        rewriter.replaceNextTokensWithSyntheticToken(a, 3, TokenType.AMPERSAND);
+    expect(b.offset, same(replacement.offset));
+    expect(b.precedingComments, same(replacement.precedingComments));
+    expect(replacement.replacedToken, same(b));
+    expect(replacement.replacedToken.next, same(c));
+    expect(replacement.replacedToken.next.next, same(d));
+
+    expect(a.next, same(replacement));
+    expect(replacement.next, same(e));
+    expect(e.next.isEof, true);
+
+    normalTestDone(rewriter, a);
+  }
+
+  void test_replaceNextTokensWithSyntheticToken_2() {
+    Token a = _makeToken(0, 'a');
+    StringToken b = _makeToken(5, 'b');
+    b.precedingComments = new CommentToken.fromSubstring(
+        TokenType.SINGLE_LINE_COMMENT, "Test comment", 1, 9, 1,
+        canonicalize: true);
+    Token c = _makeToken(10, 'c');
+    _link([a, b, c]);
+    setupDone(a);
+
+    TokenStreamRewriter rewriter = getTokenStreamRewriter();
+    ReplacementToken replacement =
+        rewriter.replaceNextTokensWithSyntheticToken(a, 2, TokenType.AMPERSAND);
+    expect(b.offset, same(replacement.offset));
+    expect(b.precedingComments, same(replacement.precedingComments));
+    expect(replacement.replacedToken, same(b));
+    expect(replacement.replacedToken.next, same(c));
+
+    expect(a.next, same(replacement));
+    expect(replacement.next.isEof, true);
+
+    normalTestDone(rewriter, a);
+  }
+
   void test_moveSynthetic() {
     ScannerResult scanResult = scanString('Foo(bar; baz=0;');
     expect(scanResult.hasErrors, isTrue);
@@ -302,6 +354,7 @@
   @override
   bool get setPrevious => false;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() => new TokenStreamRewriterImpl();
 }
 
@@ -316,6 +369,7 @@
   @override
   bool get setPrevious => true;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() => new TokenStreamRewriterImpl();
 }
 
@@ -326,11 +380,13 @@
   @override
   bool get setPrevious => true;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() =>
       new UndoableTokenStreamRewriter();
 
   List<CachedTokenSetup> setup;
 
+  @override
   void setupDone(Token first) {
     setup = [];
     Token token = first;
@@ -340,6 +396,7 @@
     }
   }
 
+  @override
   void normalTestDone(TokenStreamRewriter rewriter, Token first) {
     UndoableTokenStreamRewriter undoableTokenStreamRewriter = rewriter;
     undoableTokenStreamRewriter.undo();
@@ -372,6 +429,7 @@
         next = token.next,
         precedingComments = token.precedingComments;
 
+  @override
   bool operator ==(Object other) {
     if (other is! CachedTokenSetup) return false;
     CachedTokenSetup o = other;
@@ -381,6 +439,7 @@
         precedingComments == o.precedingComments;
   }
 
+  @override
   String toString() {
     return "CachedTokenSetup["
         "token = $token, "
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index a14f5e0..29f59e7 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -11,10 +11,11 @@
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as scanner;
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:front_end/src/fasta/messages.dart';
+import 'package:front_end/src/fasta/source/diet_parser.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NoTypeInfoTest);
     defineReflectiveTests(PrefixedTypeInfoTest);
@@ -67,6 +68,7 @@
     expectInfo(noType, 'C*', required: false);
     expectInfo(noType, 'C do', required: false);
 
+    expectInfo(noType, 'C.a', required: false);
     expectInfo(noType, 'C.a;', required: false);
     expectInfo(noType, 'C.a(', required: false);
     expectInfo(noType, 'C.a<', required: false);
@@ -74,6 +76,7 @@
     expectInfo(noType, 'C.a*', required: false);
     expectInfo(noType, 'C.a do', required: false);
 
+    expectInfo(noType, 'C<T>', required: false);
     expectInfo(noType, 'C<T>;', required: false);
     expectInfo(noType, 'C<T>(', required: false);
     expectInfo(noType, 'C<T> do', required: false);
@@ -96,6 +99,7 @@
     expectInfo(noType, 'C<T>>= operator', required: false);
     expectInfo(noType, 'C<T>>= Function', required: false);
 
+    expectInfo(noType, 'C.a<T>', required: false);
     expectInfo(noType, 'C<S,T>=', required: false);
     expectInfo(noType, 'C<S<T>>=', required: false);
     expectInfo(noType, 'C.a<T>=', required: false);
@@ -108,7 +112,12 @@
     final Token start = scanString('before ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noType.ensureTypeNotVoid(start, new Parser(listener)),
+    expect(
+        noType.ensureTypeNotVoid(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
         const TypeMatcher<SyntheticStringToken>());
     expect(listener.calls, [
       'handleIdentifier  typeReference',
@@ -122,7 +131,12 @@
     final Token start = scanString('before ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noType.ensureTypeOrVoid(start, new Parser(listener)),
+    expect(
+        noType.ensureTypeOrVoid(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
         const TypeMatcher<SyntheticStringToken>());
     expect(listener.calls, [
       'handleIdentifier  typeReference',
@@ -136,7 +150,13 @@
     final Token start = scanString('before ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noType.parseType(start, new Parser(listener)), start);
+    expect(
+        noType.parseType(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start);
     expect(listener.calls, ['handleNoType before']);
     expect(listener.errors, isNull);
   }
@@ -145,7 +165,13 @@
     final Token start = scanString('before ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noType.parseTypeNotVoid(start, new Parser(listener)), start);
+    expect(
+        noType.parseTypeNotVoid(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start);
     expect(listener.calls, ['handleNoType before']);
     expect(listener.errors, isNull);
   }
@@ -187,7 +213,13 @@
     final Token start = scanString('before void ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(voidType.ensureTypeNotVoid(start, new Parser(listener)), start.next);
+    expect(
+        voidType.ensureTypeNotVoid(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start.next);
     expect(listener.calls, [
       'handleIdentifier void typeReference',
       'handleNoTypeArguments ;',
@@ -200,7 +232,13 @@
     final Token start = scanString('before void ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(voidType.parseType(start, new Parser(listener)), start.next);
+    expect(
+        voidType.parseType(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start.next);
     expect(listener.calls, ['handleVoidKeyword void']);
     expect(listener.errors, isNull);
   }
@@ -209,7 +247,13 @@
     final Token start = scanString('before void ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(voidType.parseType(start, new Parser(listener)), start.next);
+    expect(
+        voidType.parseType(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start.next);
     expect(listener.calls, ['handleVoidKeyword void']);
     expect(listener.errors, isNull);
   }
@@ -218,7 +262,13 @@
     final Token start = scanString('before void ;').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(voidType.parseTypeNotVoid(start, new Parser(listener)), start.next);
+    expect(
+        voidType.parseTypeNotVoid(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start.next);
     expect(listener.calls, [
       'handleIdentifier void typeReference',
       'handleNoTypeArguments ;',
@@ -231,7 +281,7 @@
 @reflectiveTest
 class PrefixedTypeInfoTest {
   void test_compute() {
-    expectInfo(prefixedType, 'C.a', required: null /* i.e. both */);
+    expectInfo(prefixedType, 'C.a', required: true);
     expectInfo(prefixedType, 'C.a;', required: true);
     expectInfo(prefixedType, 'C.a(', required: true);
     expectInfo(prefixedType, 'C.a<', required: true);
@@ -254,7 +304,7 @@
     expect(prefixedType.couldBeExpression, isTrue);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd, expectedEnd);
       expect(listener.calls, [
         'handleIdentifier C prefixedTypeReference',
@@ -267,16 +317,32 @@
     }
 
     listener = new TypeInfoListener();
-    assertResult(prefixedType.ensureTypeNotVoid(start, new Parser(listener)));
+    assertResult(prefixedType.ensureTypeNotVoid(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression:
+                useImplicitCreationExpressionInCfe)));
 
     listener = new TypeInfoListener();
-    assertResult(prefixedType.ensureTypeOrVoid(start, new Parser(listener)));
+    assertResult(prefixedType.ensureTypeOrVoid(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression:
+                useImplicitCreationExpressionInCfe)));
 
     listener = new TypeInfoListener();
-    assertResult(prefixedType.parseTypeNotVoid(start, new Parser(listener)));
+    assertResult(prefixedType.parseTypeNotVoid(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression:
+                useImplicitCreationExpressionInCfe)));
 
     listener = new TypeInfoListener();
-    assertResult(prefixedType.parseType(start, new Parser(listener)));
+    assertResult(prefixedType.parseType(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression:
+                useImplicitCreationExpressionInCfe)));
   }
 }
 
@@ -314,7 +380,7 @@
     expect(simpleNullableType.couldBeExpression, isTrue);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd, expectedEnd);
       expect(listener.calls, [
         'handleIdentifier C typeReference',
@@ -365,7 +431,7 @@
     expect(simpleNullableTypeWith1Argument.couldBeExpression, isFalse);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd, expectedEnd);
       expect(listener.calls, [
         'handleIdentifier C typeReference',
@@ -435,7 +501,7 @@
     expect(simpleType.couldBeExpression, isTrue);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd, expectedEnd);
       expect(listener.calls, [
         'handleIdentifier C typeReference',
@@ -462,7 +528,7 @@
 @reflectiveTest
 class SimpleTypeWith1ArgumentTest {
   void test_compute_gt() {
-    expectInfo(simpleTypeWith1Argument, 'C<T>', required: null /* i.e. both */);
+    expectInfo(simpleTypeWith1Argument, 'C<T>', required: true);
     expectInfo(simpleTypeWith1Argument, 'C<T>;', required: true);
     expectInfo(simpleTypeWith1Argument, 'C<T>(', required: true);
     expectInfo(simpleTypeWith1Argument, 'C<T> do', required: true);
@@ -509,7 +575,7 @@
     expect(simpleTypeWith1Argument.couldBeExpression, isFalse);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd, expectedEnd);
       expect(listener.calls, [
         'handleIdentifier C typeReference',
@@ -553,7 +619,7 @@
     expect(simpleTypeWith1ArgumentGtEq.couldBeExpression, isFalse);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd.lexeme, '>');
       expect(actualEnd.next.lexeme, '=');
       expect(actualEnd.next.next, semicolon);
@@ -598,7 +664,7 @@
     expect(simpleTypeWith1ArgumentGtGt.couldBeExpression, isFalse);
 
     TypeInfoListener listener;
-    assertResult(Token actualEnd) {
+    void assertResult(Token actualEnd) {
       expect(actualEnd.lexeme, '>');
       expect(actualEnd.next.lexeme, '>');
       expect(actualEnd.next.next, semicolon);
@@ -1340,7 +1406,7 @@
   }
 
   void test_computeType_prefixedTypeArg() {
-    expectComplexInfo('C.a<T>', required: null /* i.e. both */, expectedCalls: [
+    expectComplexInfo('C.a<T>', required: true, expectedCalls: [
       'handleIdentifier C prefixedTypeReference',
       'handleIdentifier a typeReferenceContinuation',
       'handleQualified .',
@@ -1489,7 +1555,13 @@
     final Token start = scanString('before after').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noTypeParamOrArg.parseArguments(start, new Parser(listener)), start);
+    expect(
+        noTypeParamOrArg.parseArguments(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start);
     validateTokens(start);
     expect(listener.calls, ['handleNoTypeArguments after']);
     expect(listener.errors, isNull);
@@ -1499,7 +1571,13 @@
     final Token start = scanString('before after').tokens;
     final TypeInfoListener listener = new TypeInfoListener();
 
-    expect(noTypeParamOrArg.parseVariables(start, new Parser(listener)), start);
+    expect(
+        noTypeParamOrArg.parseVariables(
+            start,
+            new Parser(listener,
+                useImplicitCreationExpression:
+                    useImplicitCreationExpressionInCfe)),
+        start);
     validateTokens(start);
     expect(listener.calls, ['handleNoTypeVariables after']);
     expect(listener.errors, isNull);
@@ -1582,7 +1660,10 @@
     expect(after.lexeme, 'after');
     final TypeInfoListener listener = new TypeInfoListener();
 
-    var token = typeArg.parseArguments(start, new Parser(listener));
+    var token = typeArg.parseArguments(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe));
     validateTokens(start);
     expect(token.lexeme, '>');
     token = token.next;
@@ -1620,7 +1701,10 @@
     expect(after.lexeme, 'after');
     final TypeInfoListener listener = new TypeInfoListener();
 
-    Token token = typeParam.parseVariables(start, new Parser(listener));
+    Token token = typeParam.parseVariables(
+        start,
+        new Parser(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe));
     validateTokens(start);
     expect(token.lexeme, '>');
     token = token.next;
@@ -2573,7 +2657,10 @@
       reason: 'TypeInfo.skipType should not modify the token stream');
 
   TypeInfoListener listener = new TypeInfoListener();
-  Token actualEnd = typeInfo.parseType(start, new Parser(listener));
+  Token actualEnd = typeInfo.parseType(
+      start,
+      new Parser(listener,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe));
 
   expectEnd(expectedAfter, actualEnd);
   if (expectedCalls != null) {
@@ -2606,7 +2693,8 @@
   expect(typeVarInfo.typeArgumentCount, typeArgumentCount);
 
   TypeInfoListener listener = new TypeInfoListener();
-  Parser parser = new Parser(listener);
+  Parser parser = new Parser(listener,
+      useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
   Token actualEnd = typeVarInfo.parseArguments(start, parser);
   validateTokens(start);
   expectEnd(expectedAfter, actualEnd);
@@ -2641,7 +2729,8 @@
 
   TypeInfoListener listener =
       new TypeInfoListener(firstToken: start, metadataAllowed: true);
-  Parser parser = new Parser(listener);
+  Parser parser = new Parser(listener,
+      useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
   Token actualEnd = typeVarInfo.parseVariables(start, parser);
   validateTokens(start);
   expectEnd(expectedAfter, actualEnd);
@@ -2929,11 +3018,12 @@
     calls.add('handleVoidKeywordWithTypeArguments $token');
   }
 
-  noSuchMethod(Invocation invocation) {
+  @override
+  dynamic noSuchMethod(Invocation invocation) {
     throw '${invocation.memberName} should not be called.';
   }
 
-  assertTokenInStream(Token match) {
+  void assertTokenInStream(Token match) {
     if (firstToken != null && match != null && !match.isEof) {
       Token token = firstToken;
       while (!token.isEof) {
diff --git a/pkg/front_end/test/fasta/reexport_test.dart b/pkg/front_end/test/fasta/reexport_test.dart
index c754291..5972e6a 100644
--- a/pkg/front_end/test/fasta/reexport_test.dart
+++ b/pkg/front_end/test/fasta/reexport_test.dart
@@ -11,7 +11,7 @@
 import "package:front_end/src/api_prototype/front_end.dart"
     show CompilerOptions;
 
-main() {
+void main() {
   asyncTest(() async {
     var sources = <String, dynamic>{
       "a.dart": """
diff --git a/pkg/front_end/test/fasta/scanner/scanner_suite.dart b/pkg/front_end/test/fasta/scanner/scanner_suite.dart
index 7039a40..7b89a9e 100644
--- a/pkg/front_end/test/fasta/scanner/scanner_suite.dart
+++ b/pkg/front_end/test/fasta/scanner/scanner_suite.dart
@@ -14,11 +14,12 @@
 }
 
 class ScannerContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Read(),
     const Scan(),
   ];
 }
 
-main(List<String> arguments) =>
+void main(List<String> arguments) =>
     runMe(arguments, createContext, configurationPath: "../../../testing.json");
diff --git a/pkg/front_end/test/fasta/sdk_test.dart b/pkg/front_end/test/fasta/sdk_test.dart
index 00d03a6..0ca3cd5 100644
--- a/pkg/front_end/test/fasta/sdk_test.dart
+++ b/pkg/front_end/test/fasta/sdk_test.dart
@@ -17,4 +17,5 @@
   return FastaContext.create(suite, environment);
 }
 
-main([List<String> arguments = const []]) => runMe(arguments, createContext);
+void main([List<String> arguments = const []]) =>
+    runMe(arguments, createContext);
diff --git a/pkg/front_end/test/fasta/strong_suite.dart b/pkg/front_end/test/fasta/strong_suite.dart
index 2d9b9a2..468ed23 100644
--- a/pkg/front_end/test/fasta/strong_suite.dart
+++ b/pkg/front_end/test/fasta/strong_suite.dart
@@ -15,11 +15,11 @@
   return FastaContext.create(suite, environment);
 }
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   internalMain(arguments: arguments);
 }
 
-internalMain(
+void internalMain(
     {List<String> arguments = const [], int shards = 1, int shard = 0}) {
   runMe(arguments, createContext,
       configurationPath: "../../testing.json", shards: shards, shard: shard);
diff --git a/pkg/front_end/test/fasta/super_mixins_test.dart b/pkg/front_end/test/fasta/super_mixins_test.dart
index ecfe1c9..8f97ec7 100644
--- a/pkg/front_end/test/fasta/super_mixins_test.dart
+++ b/pkg/front_end/test/fasta/super_mixins_test.dart
@@ -90,7 +90,7 @@
 /// Check that by default an error is reported for all unresolved super
 /// invocations: independently of weather they target abstract super members
 /// or nonexistent targets.
-testDisabledSuperMixins() async {
+Future<void> testDisabledSuperMixins() async {
   var missingSuperMethodNames = new Set<String>();
   var options = new CompilerOptions()
     ..onDiagnostic = _makeDiagnosticMessageHandler(missingSuperMethodNames);
@@ -103,7 +103,7 @@
 /// super-invocation that targets an non-existent method, a super-invocation
 /// that targets an abstract member of the super-class should not be reported.
 /// In non-abstract class we should report both cases as an error.
-testEnabledSuperMixins() async {
+Future<void> testEnabledSuperMixins() async {
   var missingSuperMethodNames = new Set<String>();
   var options = new CompilerOptions()
     ..onDiagnostic = _makeDiagnosticMessageHandler(missingSuperMethodNames)
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index e8d1ece..f38eaff 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -2,8 +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.md file.
 
-// @dart = 2.9
-
 library fasta.testing.suite;
 
 import 'dart:convert' show jsonDecode, utf8;
@@ -16,8 +14,9 @@
     show LanguageVersionToken, Token;
 
 import 'package:_fe_analyzer_shared/src/util/colors.dart' as colors;
+import 'package:_fe_analyzer_shared/src/util/options.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
-import 'package:dev_compiler/dev_compiler.dart';
+import 'package:dev_compiler/src/kernel/target.dart';
 
 import 'package:front_end/src/api_prototype/compiler_options.dart'
     show
@@ -51,7 +50,7 @@
 import 'package:front_end/src/compute_platform_binaries_location.dart'
     show computePlatformBinariesLocation, computePlatformDillName;
 
-import 'package:front_end/src/base/command_line_options.dart' show Flags;
+import 'package:front_end/src/base/command_line_options.dart';
 
 import 'package:front_end/src/base/nnbd_mode.dart' show NnbdMode;
 
@@ -124,14 +123,14 @@
 import 'package:kernel/target/targets.dart'
     show
         ConstantsBackend,
-        ConstructorTearOffLowering,
         DiagnosticReporter,
-        LateLowering,
-        NumberSemantics,
         NoneConstantsBackend,
         NoneTarget,
+        NumberSemantics,
         Target,
-        TargetFlags;
+        TestTargetFlags,
+        TestTargetMixin,
+        TestTargetWrapper;
 
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, TypeEnvironment;
@@ -148,8 +147,6 @@
         StdioProcess;
 
 import 'package:vm/target/vm.dart' show VmTarget;
-import 'package:vm/transformations/type_flow/transformer.dart' as type_flow;
-import 'package:vm/transformations/pragma.dart' as type_flow;
 
 import '../../testing_utils.dart' show checkEnvironment;
 
@@ -223,8 +220,35 @@
 final Expectation runtimeError = ExpectationSet.Default["RuntimeError"];
 
 const String experimentalFlagOptions = '--enable-experiment=';
-const String overwriteCurrentSdkVersion = '--overwrite-current-sdk-version=';
-const String noVerifyCmd = '--no-verify';
+const Option<String> overwriteCurrentSdkVersion =
+    const Option('--overwrite-current-sdk-version', const StringValue());
+const Option<bool> noVerifyCmd =
+    const Option('--no-verify', const BoolValue(false));
+
+const List<Option> folderOptionsSpecification = [
+  Options.enableExperiment,
+  Options.forceLateLoweringSentinel,
+  overwriteCurrentSdkVersion,
+  Options.forceLateLowering,
+  Options.forceStaticFieldLowering,
+  Options.forceNoExplicitGetterCalls,
+  Options.forceConstructorTearOffLowering,
+  Options.nnbdAgnosticMode,
+  Options.noDefines,
+  noVerifyCmd,
+  Options.target,
+  Options.defines,
+];
+
+const Option<bool> fixNnbdReleaseVersion =
+    const Option('--fix-nnbd-release-version', const BoolValue(false));
+
+const List<Option> testOptionsSpecification = [
+  Options.nnbdAgnosticMode,
+  Options.nnbdStrongMode,
+  Options.nnbdWeakMode,
+  fixNnbdReleaseVersion,
+];
 
 final ExpectationSet staticExpectationSet =
     new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
@@ -237,39 +261,38 @@
 /// test folders.
 class FolderOptions {
   final Map<ExperimentalFlag, bool> _explicitExperimentalFlags;
-  final int forceLateLowerings;
-  final bool forceLateLoweringSentinel;
-  final bool forceStaticFieldLowering;
-  final bool forceNoExplicitGetterCalls;
-  final int forceConstructorTearOffLowering;
+  final int? forceLateLowerings;
+  final bool? forceLateLoweringSentinel;
+  final bool? forceStaticFieldLowering;
+  final bool? forceNoExplicitGetterCalls;
+  final int? forceConstructorTearOffLowering;
   final bool nnbdAgnosticMode;
-  final Map<String, String> defines;
+  final Map<String, String>? defines;
   final bool noVerify;
   final String target;
-  final String overwriteCurrentSdkVersion;
+  final String? overwriteCurrentSdkVersion;
 
   FolderOptions(this._explicitExperimentalFlags,
-      {this.forceLateLowerings: LateLowering.none,
-      this.forceLateLoweringSentinel: false,
-      this.forceStaticFieldLowering: false,
-      this.forceNoExplicitGetterCalls: false,
-      this.forceConstructorTearOffLowering: ConstructorTearOffLowering.none,
+      {this.forceLateLowerings,
+      this.forceLateLoweringSentinel,
+      this.forceStaticFieldLowering,
+      this.forceNoExplicitGetterCalls,
+      this.forceConstructorTearOffLowering,
       this.nnbdAgnosticMode: false,
       this.defines: const {},
       this.noVerify: false,
       this.target: "vm",
       // can be null
       this.overwriteCurrentSdkVersion})
-      : assert(forceLateLowerings != null),
-        assert(forceLateLoweringSentinel != null),
-        assert(forceStaticFieldLowering != null),
-        assert(forceNoExplicitGetterCalls != null),
-        assert(nnbdAgnosticMode != null),
+      // ignore: unnecessary_null_comparison
+      : assert(nnbdAgnosticMode != null),
         assert(
             // no this doesn't make any sense but left to underline
             // that this is allowed to be null!
             defines != null || defines == null),
+        // ignore: unnecessary_null_comparison
         assert(noVerify != null),
+        // ignore: unnecessary_null_comparison
         assert(target != null);
 
   Map<ExperimentalFlag, bool> computeExplicitExperimentalFlags(
@@ -287,23 +310,25 @@
 /// setting up custom experimental flag defaults for a single test.
 class TestOptions {
   final Set<Uri> linkDependencies;
-  final NnbdMode nnbdMode;
-  final AllowedExperimentalFlags allowedExperimentalFlags;
-  final Map<ExperimentalFlag, Version> experimentEnabledVersion;
-  final Map<ExperimentalFlag, Version> experimentReleasedVersion;
-  Component component;
-  List<Iterable<String>> errors;
+  final NnbdMode? nnbdMode;
+  final AllowedExperimentalFlags? allowedExperimentalFlags;
+  final Map<ExperimentalFlag, Version>? experimentEnabledVersion;
+  final Map<ExperimentalFlag, Version>? experimentReleasedVersion;
+  Component? component;
+  List<Iterable<String>>? errors;
 
   TestOptions(this.linkDependencies,
-      {this.nnbdMode,
-      this.allowedExperimentalFlags,
-      this.experimentEnabledVersion,
-      this.experimentReleasedVersion})
+      {required this.nnbdMode,
+      required this.allowedExperimentalFlags,
+      required this.experimentEnabledVersion,
+      required this.experimentReleasedVersion})
+      // ignore: unnecessary_null_comparison
       : assert(linkDependencies != null);
 }
 
 class FastaContext extends ChainContext with MatchContext {
   final Uri baseUri;
+  @override
   final List<Step> steps;
   final Uri vm;
   final bool onlyCrashes;
@@ -316,7 +341,7 @@
   final Map<UriConfiguration, UriTranslator> _uriTranslators = {};
   final Map<Uri, FolderOptions> _folderOptions = {};
   final Map<Uri, TestOptions> _testOptions = {};
-  final Map<Uri, Uri> _librariesJson = {};
+  final Map<Uri, Uri?> _librariesJson = {};
 
   @override
   final bool updateExpectations;
@@ -414,16 +439,16 @@
   }
 
   FolderOptions _computeFolderOptions(Directory directory) {
-    FolderOptions folderOptions = _folderOptions[directory.uri];
+    FolderOptions? folderOptions = _folderOptions[directory.uri];
     if (folderOptions == null) {
-      int forceLateLowering = LateLowering.none;
-      bool forceLateLoweringSentinel = false;
-      bool forceStaticFieldLowering = false;
-      bool forceNoExplicitGetterCalls = false;
-      int forceConstructorTearOffLowering = ConstructorTearOffLowering.none;
+      int? forceLateLowering;
+      bool? forceLateLoweringSentinel;
+      bool? forceStaticFieldLowering;
+      bool? forceNoExplicitGetterCalls;
+      int? forceConstructorTearOffLowering;
       bool nnbdAgnosticMode = false;
       bool noVerify = false;
-      Map<String, String> defines = {};
+      Map<String, String>? defines = {};
       String target = "vm";
       if (directory.uri == baseUri) {
         folderOptions = new FolderOptions({},
@@ -440,74 +465,34 @@
         File optionsFile =
             new File.fromUri(directory.uri.resolve('folder.options'));
         if (optionsFile.existsSync()) {
-          List<String> experimentalFlagsArguments = [];
-          String overwriteCurrentSdkVersionArgument = null;
-          for (String line in optionsFile.readAsStringSync().split('\n')) {
-            line = line.trim();
-            if (line.startsWith(experimentalFlagOptions)) {
-              experimentalFlagsArguments =
-                  line.substring(experimentalFlagOptions.length).split(',');
-            } else if (line.startsWith(overwriteCurrentSdkVersion)) {
-              overwriteCurrentSdkVersionArgument =
-                  line.substring(overwriteCurrentSdkVersion.length);
-            } else if (line.startsWith(Flags.forceLateLoweringSentinel)) {
-              forceLateLoweringSentinel = true;
-            } else if (line.startsWith('${Flags.forceLateLowering}=')) {
-              int mask = int.parse(
-                  line.substring('${Flags.forceLateLowering}='.length));
-              forceLateLowering = mask;
-            } else if (line.startsWith(Flags.forceLateLowering)) {
-              forceLateLowering = LateLowering.all;
-            } else if (line.startsWith(Flags.forceStaticFieldLowering)) {
-              forceStaticFieldLowering = true;
-            } else if (line.startsWith(Flags.forceNoExplicitGetterCalls)) {
-              forceNoExplicitGetterCalls = true;
-            } else if (line.startsWith(Flags.forceNoExplicitGetterCalls)) {
-              forceNoExplicitGetterCalls = true;
-            } else if (line.startsWith(Flags.forceConstructorTearOffLowering)) {
-              forceConstructorTearOffLowering = ConstructorTearOffLowering.all;
-            } else if (line.startsWith(Flags.nnbdAgnosticMode)) {
-              nnbdAgnosticMode = true;
-            } else if (line.startsWith(Flags.noDefines)) {
-              if (defines == null) {
-                throw "Specifying ${Flags.noDefines} several times "
-                    "is unsupported.";
-              }
-              if (defines.isNotEmpty) {
-                throw "Can't have no defines and specific defines "
-                    "at the same time.";
-              }
-              defines = null;
-            } else if (line.startsWith("-D")) {
-              if (defines == null) {
-                throw "Can't have no defines and specific defines "
-                    "at the same time.";
-              }
-              String define = line.substring(2); // removes "-D".
-              int index = define.indexOf('=');
-              String name;
-              String expression;
-              if (index != -1) {
-                name = define.substring(0, index);
-                expression = define.substring(index + 1);
-              } else {
-                name = define;
-                expression = define;
-              }
-              if (defines.containsKey(name)) {
-                throw "Defining '$name' several times is unsupported.";
-              }
-              defines[name] = expression;
-            } else if (line.startsWith(noVerifyCmd)) {
-              noVerify = true;
-            } else if (line.startsWith(Flags.target) &&
-                line.indexOf('=') == Flags.target.length) {
-              target = line.substring(Flags.target.length + 1);
-            } else if (line.isNotEmpty) {
-              throw new UnsupportedError("Unsupported test option '$line'");
+          List<String> arguments =
+              ParsedOptions.readOptionsFile(optionsFile.readAsStringSync());
+          ParsedOptions parsedOptions =
+              ParsedOptions.parse(arguments, folderOptionsSpecification);
+          List<String> experimentalFlagsArguments =
+              Options.enableExperiment.read(parsedOptions) ?? <String>[];
+          String overwriteCurrentSdkVersionArgument =
+              overwriteCurrentSdkVersion.read(parsedOptions);
+          forceLateLoweringSentinel =
+              Options.forceLateLoweringSentinel.read(parsedOptions);
+          forceLateLowering = Options.forceLateLowering.read(parsedOptions);
+          forceStaticFieldLowering =
+              Options.forceStaticFieldLowering.read(parsedOptions);
+          forceNoExplicitGetterCalls =
+              Options.forceNoExplicitGetterCalls.read(parsedOptions);
+          forceConstructorTearOffLowering =
+              Options.forceConstructorTearOffLowering.read(parsedOptions);
+          nnbdAgnosticMode = Options.nnbdAgnosticMode.read(parsedOptions);
+          defines = parsedOptions.defines;
+          if (Options.noDefines.read(parsedOptions)) {
+            if (defines.isNotEmpty) {
+              throw "Can't have no defines and specific defines "
+                  "at the same time.";
             }
+            defines = null;
           }
-
+          noVerify = noVerifyCmd.read(parsedOptions);
+          target = Options.target.read(parsedOptions);
           folderOptions = new FolderOptions(
               parseExperimentalFlags(
                   parseExperimentalArguments(experimentalFlagsArguments),
@@ -545,7 +530,7 @@
   Future<UriTranslator> computeUriTranslator(
       TestDescription description) async {
     UriConfiguration uriConfiguration = computeUriConfiguration(description);
-    UriTranslator uriTranslator = _uriTranslators[uriConfiguration];
+    UriTranslator? uriTranslator = _uriTranslators[uriConfiguration];
     if (uriTranslator == null) {
       Uri sdk = Uri.base.resolve("sdk/");
       Uri packages = Uri.base.resolve(".packages");
@@ -568,7 +553,7 @@
             uriConfiguration.librariesSpecificationUri;
       if (folderOptions.overwriteCurrentSdkVersion != null) {
         compilerOptions.currentSdkVersion =
-            folderOptions.overwriteCurrentSdkVersion;
+            folderOptions.overwriteCurrentSdkVersion!;
       }
       ProcessedOptions options = new ProcessedOptions(options: compilerOptions);
       uriTranslator = await options.getUriTranslator();
@@ -580,66 +565,66 @@
   /// Computes the test for [description].
   TestOptions computeTestOptions(TestDescription description) {
     Directory directory = new File.fromUri(description.uri).parent;
-    TestOptions testOptions = _testOptions[directory.uri];
+    TestOptions? testOptions = _testOptions[directory.uri];
     if (testOptions == null) {
       File optionsFile =
           new File.fromUri(directory.uri.resolve('test.options'));
       Set<Uri> linkDependencies = new Set<Uri>();
-      NnbdMode nnbdMode;
-      AllowedExperimentalFlags allowedExperimentalFlags;
-      Map<ExperimentalFlag, Version> experimentEnabledVersion;
-      Map<ExperimentalFlag, Version> experimentReleasedVersion;
+      NnbdMode? nnbdMode;
+      AllowedExperimentalFlags? allowedExperimentalFlags;
+      Map<ExperimentalFlag, Version>? experimentEnabledVersion;
+      Map<ExperimentalFlag, Version>? experimentReleasedVersion;
       if (optionsFile.existsSync()) {
-        for (String line in optionsFile.readAsStringSync().split('\n')) {
-          line = line.trim();
-          if (line.isEmpty) continue;
-          if (line.startsWith(Flags.nnbdAgnosticMode)) {
-            if (nnbdMode != null) {
-              throw new UnsupportedError(
-                  'Nnbd mode $nnbdMode already specified.');
-            }
-            nnbdMode = NnbdMode.Agnostic;
-          } else if (line.startsWith(Flags.nnbdStrongMode)) {
-            if (nnbdMode != null) {
-              throw new UnsupportedError(
-                  'Nnbd mode $nnbdMode already specified.');
-            }
-            nnbdMode = NnbdMode.Strong;
-          } else if (line.startsWith(Flags.nnbdWeakMode)) {
-            if (nnbdMode != null) {
-              throw new UnsupportedError(
-                  'Nnbd mode $nnbdMode already specified.');
-            }
-            nnbdMode = NnbdMode.Weak;
-          } else if (line == '--fix-nnbd-release-version') {
-            // Allow package:allowed_package to use nnbd features from version
-            // 2.9.
-            allowedExperimentalFlags = new AllowedExperimentalFlags(
-                sdkDefaultExperiments:
-                    defaultAllowedExperimentalFlags.sdkDefaultExperiments,
-                sdkLibraryExperiments:
-                    defaultAllowedExperimentalFlags.sdkLibraryExperiments,
-                packageExperiments: {
-                  ...defaultAllowedExperimentalFlags.packageExperiments,
-                  'allowed_package': {ExperimentalFlag.nonNullable}
-                });
-            experimentEnabledVersion = const {
-              ExperimentalFlag.nonNullable: const Version(2, 10)
-            };
-            experimentReleasedVersion = const {
-              ExperimentalFlag.nonNullable: const Version(2, 9)
-            };
-          } else {
-            Uri uri = description.uri.resolve(line);
-            if (uri.scheme != 'package') {
-              File f = new File.fromUri(uri);
-              if (!f.existsSync()) {
-                throw new UnsupportedError("No file found: $f ($line)");
-              }
-              uri = f.uri;
-            }
-            linkDependencies.add(uri);
+        List<String> arguments =
+            ParsedOptions.readOptionsFile(optionsFile.readAsStringSync());
+        ParsedOptions parsedOptions =
+            ParsedOptions.parse(arguments, testOptionsSpecification);
+        if (Options.nnbdAgnosticMode.read(parsedOptions)) {
+          nnbdMode = NnbdMode.Agnostic;
+        }
+        if (Options.nnbdStrongMode.read(parsedOptions)) {
+          if (nnbdMode != null) {
+            throw new UnsupportedError(
+                'Nnbd mode $nnbdMode already specified.');
           }
+          nnbdMode = NnbdMode.Strong;
+        }
+        if (Options.nnbdWeakMode.read(parsedOptions)) {
+          if (nnbdMode != null) {
+            throw new UnsupportedError(
+                'Nnbd mode $nnbdMode already specified.');
+          }
+          nnbdMode = NnbdMode.Weak;
+        }
+        if (fixNnbdReleaseVersion.read(parsedOptions)) {
+          // Allow package:allowed_package to use nnbd features from version
+          // 2.9.
+          allowedExperimentalFlags = new AllowedExperimentalFlags(
+              sdkDefaultExperiments:
+                  defaultAllowedExperimentalFlags.sdkDefaultExperiments,
+              sdkLibraryExperiments:
+                  defaultAllowedExperimentalFlags.sdkLibraryExperiments,
+              packageExperiments: {
+                ...defaultAllowedExperimentalFlags.packageExperiments,
+                'allowed_package': {ExperimentalFlag.nonNullable}
+              });
+          experimentEnabledVersion = const {
+            ExperimentalFlag.nonNullable: const Version(2, 10)
+          };
+          experimentReleasedVersion = const {
+            ExperimentalFlag.nonNullable: const Version(2, 9)
+          };
+        }
+        for (String argument in parsedOptions.arguments) {
+          Uri uri = description.uri.resolve(argument);
+          if (uri.scheme != 'package') {
+            File f = new File.fromUri(uri);
+            if (!f.existsSync()) {
+              throw new UnsupportedError("No file found: $f ($argument)");
+            }
+            uri = f.uri;
+          }
+          linkDependencies.add(uri);
         }
       }
       testOptions = new TestOptions(linkDependencies,
@@ -653,12 +638,12 @@
   }
 
   /// Libraries json for [description].
-  Uri computeLibrariesSpecificationUri(TestDescription description) {
+  Uri? computeLibrariesSpecificationUri(TestDescription description) {
     Directory directory = new File.fromUri(description.uri).parent;
     if (_librariesJson.containsKey(directory.uri)) {
       return _librariesJson[directory.uri];
     } else {
-      Uri librariesJson;
+      Uri? librariesJson;
       File jsonFile = new File.fromUri(directory.uri.resolve('libraries.json'));
       if (jsonFile.existsSync()) {
         librariesJson = jsonFile.uri;
@@ -668,16 +653,16 @@
   }
 
   /// Custom package config used for [description].
-  Uri computePackageConfigUri(TestDescription description) {
+  Uri? computePackageConfigUri(TestDescription description) {
     Uri packageConfig =
         description.uri.resolve(".dart_tool/package_config.json");
     return new File.fromUri(packageConfig).existsSync() ? packageConfig : null;
   }
 
   UriConfiguration computeUriConfiguration(TestDescription description) {
-    Uri librariesSpecificationUri =
+    Uri? librariesSpecificationUri =
         computeLibrariesSpecificationUri(description);
-    Uri packageConfigUri = computePackageConfigUri(description);
+    Uri? packageConfigUri = computePackageConfigUri(description);
     return new UriConfiguration(librariesSpecificationUri, packageConfigUri);
   }
 
@@ -688,7 +673,7 @@
         target,
         nnbdMode,
         () => throw new UnsupportedError(
-            "No platform dill for target '${target.name}' with $nnbdMode."));
+            "No platform dill for target '${target.name}' with $nnbdMode."))!;
     return platformBinaries.resolve(fileName);
   }
 
@@ -722,7 +707,7 @@
       Set<Expectation> outcomes, TestDescription description) {
     // Remove outcomes related to phases not currently in effect.
 
-    Set<Expectation> result;
+    Set<Expectation>? result;
 
     // If skipping VM we can't get a runtime error.
     if (skipVm && outcomes.contains(runtimeError)) {
@@ -796,7 +781,7 @@
     bool verify = environment["verify"] != "false";
     bool kernelTextSerialization =
         environment.containsKey(KERNEL_TEXT_SERIALIZATION);
-    String platformBinaries = environment["platformBinaries"];
+    String? platformBinaries = environment["platformBinaries"];
     if (platformBinaries != null && !platformBinaries.endsWith('/')) {
       platformBinaries = '$platformBinaries/';
     }
@@ -823,11 +808,14 @@
 class Run extends Step<ComponentResult, ComponentResult, FastaContext> {
   const Run();
 
+  @override
   String get name => "run";
 
   /// WARNING: Every subsequent step in this test will run async as well!
+  @override
   bool get isAsync => true;
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     FolderOptions folderOptions =
@@ -839,7 +827,7 @@
         if (context._platforms.isEmpty) {
           throw "Executed `Run` step before initializing the context.";
         }
-        File generated = new File.fromUri(result.outputUri);
+        File generated = new File.fromUri(result.outputUri!);
         StdioProcess process;
         try {
           var args = <String>[];
@@ -868,11 +856,10 @@
         }
         return new Result<ComponentResult>(
             result, runResult.outcome, runResult.error);
-      case "aot":
       case "none":
       case "dart2js":
       case "dartdevc":
-        // TODO(johnniwinther): Support running vm aot, dart2js and/or dartdevc.
+        // TODO(johnniwinther): Support running dart2js and/or dartdevc.
         return pass(result);
       default:
         throw new ArgumentError(
@@ -885,8 +872,10 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const StressConstantEvaluatorStep();
 
+  @override
   String get name => "stress constant evaluator";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     KernelTarget target = result.sourceTarget;
@@ -920,15 +909,15 @@
 
 class StressConstantEvaluatorVisitor extends RecursiveResultVisitor<Node>
     implements ErrorReporter {
-  ConstantEvaluator constantEvaluator;
-  ConstantEvaluator constantEvaluatorWithEmptyEnvironment;
+  late ConstantEvaluator constantEvaluator;
+  late ConstantEvaluator constantEvaluatorWithEmptyEnvironment;
   int tries = 0;
   int success = 0;
   List<String> output = [];
 
   StressConstantEvaluatorVisitor(
       ConstantsBackend backend,
-      Map<String, String> environmentDefines,
+      Map<String, String>? environmentDefines,
       bool enableTripleShift,
       TypeEnvironment typeEnvironment,
       bool desugarSets,
@@ -946,7 +935,9 @@
         evaluationMode: evaluationMode);
   }
 
-  Library currentLibrary;
+  Library? currentLibrary;
+
+  @override
   Library visitLibrary(Library node) {
     currentLibrary = node;
     node.visitChildren(this);
@@ -954,24 +945,26 @@
     return node;
   }
 
-  Member currentMember;
+  Member? currentMember;
 
+  @override
   Node defaultMember(Member node) {
-    Member prevCurrentMember = currentMember;
+    Member? prevCurrentMember = currentMember;
     currentMember = node;
     node.visitChildren(this);
     currentMember = prevCurrentMember;
     return node;
   }
 
+  @override
   Node defaultExpression(Expression node) {
     if (node is BasicLiteral) return node;
     if (node is InvalidExpression) return node;
     if (node is ConstantExpression) {
       bool evaluate = false;
-      if (node.constant is UnevaluatedConstant) {
-        UnevaluatedConstant unevaluatedConstant = node.constant;
-        if (unevaluatedConstant.expression is! InvalidExpression) {
+      Constant constant = node.constant;
+      if (constant is UnevaluatedConstant) {
+        if (constant.expression is! InvalidExpression) {
           evaluate = true;
         }
       }
@@ -987,10 +980,10 @@
     StaticTypeContext staticTypeContext;
     if (currentMember == null) {
       staticTypeContext = new StaticTypeContext.forAnnotations(
-          currentLibrary, constantEvaluator.typeEnvironment);
+          currentLibrary!, constantEvaluator.typeEnvironment);
     } else {
       staticTypeContext = new StaticTypeContext(
-          currentMember, constantEvaluator.typeEnvironment);
+          currentMember!, constantEvaluator.typeEnvironment);
     }
     Constant x = constantEvaluator.evaluate(staticTypeContext, node);
     bool evaluatedWithEmptyEnvironment = false;
@@ -1002,7 +995,7 @@
       }
       x = constantEvaluatorWithEmptyEnvironment.evaluate(
           new StaticTypeContext(
-              currentMember, constantEvaluator.typeEnvironment),
+              currentMember!, constantEvaluator.typeEnvironment),
           new ConstantExpression(x));
       evaluatedWithEmptyEnvironment = true;
     }
@@ -1034,23 +1027,18 @@
     try {
       return node.location.toString();
     } catch (e) {
-      TreeNode n = node;
+      TreeNode? n = node;
       while (n != null && n is! FileUriNode) {
         n = n.parent;
       }
       if (n == null) return "(unknown location)";
-      FileUriNode fileUriNode = n;
+      FileUriNode fileUriNode = n as FileUriNode;
       return ("(unknown position in ${fileUriNode.fileUri})");
     }
   }
 
   @override
-  void report(LocatedMessage message, List<LocatedMessage> context) {
-    // ignored.
-  }
-
-  @override
-  void reportInvalidExpression(InvalidExpression node) {
+  void report(LocatedMessage message, [List<LocatedMessage>? context]) {
     // ignored.
   }
 }
@@ -1063,9 +1051,9 @@
   final List<Iterable<String>> errors;
   final CompilerOptions Function(
           NnbdMode nnbdMode,
-          AllowedExperimentalFlags allowedExperimentalFlags,
-          Map<ExperimentalFlag, Version> experimentEnabledVersion,
-          Map<ExperimentalFlag, Version> experimentReleasedVersion)
+          AllowedExperimentalFlags? allowedExperimentalFlags,
+          Map<ExperimentalFlag, Version>? experimentEnabledVersion,
+          Map<ExperimentalFlag, Version>? experimentReleasedVersion)
       createCompilerOptions;
 
   final ProcessedOptions Function(CompilerOptions compilerOptions)
@@ -1085,7 +1073,7 @@
     TestDescription description, FastaContext context) {
   List<Iterable<String>> errors = <Iterable<String>>[];
 
-  Uri librariesSpecificationUri =
+  Uri? librariesSpecificationUri =
       context.computeLibrariesSpecificationUri(description);
   TestOptions testOptions = context.computeTestOptions(description);
   FolderOptions folderOptions = context.computeFolderOptions(description);
@@ -1100,9 +1088,9 @@
 
   CompilerOptions createCompilerOptions(
       NnbdMode nnbdMode,
-      AllowedExperimentalFlags allowedExperimentalFlags,
-      Map<ExperimentalFlag, Version> experimentEnabledVersion,
-      Map<ExperimentalFlag, Version> experimentReleasedVersion) {
+      AllowedExperimentalFlags? allowedExperimentalFlags,
+      Map<ExperimentalFlag, Version>? experimentEnabledVersion,
+      Map<ExperimentalFlag, Version>? experimentReleasedVersion) {
     CompilerOptions compilerOptions = new CompilerOptions()
       ..onDiagnostic = (DiagnosticMessage message) {
         errors.add(message.plainTextFormatted);
@@ -1118,7 +1106,7 @@
       ..target = createTarget(folderOptions, context);
     if (folderOptions.overwriteCurrentSdkVersion != null) {
       compilerOptions.currentSdkVersion =
-          folderOptions.overwriteCurrentSdkVersion;
+          folderOptions.overwriteCurrentSdkVersion!;
     }
     return compilerOptions;
   }
@@ -1145,13 +1133,15 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const FuzzCompiles();
 
+  @override
   String get name {
     return "semifuzz";
   }
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
-    bool originalFlag = context.explicitExperimentalFlags[
+    bool? originalFlag = context.explicitExperimentalFlags[
         ExperimentalFlag.alternativeInvalidationStrategy];
     context.explicitExperimentalFlags[
         ExperimentalFlag.alternativeInvalidationStrategy] = true;
@@ -1171,7 +1161,7 @@
 
     Component platform = await context.loadPlatform(
         backendTarget, compilationSetup.options.nnbdMode);
-    Result<ComponentResult> passResult = await performFileInvalidation(
+    Result<ComponentResult>? passResult = await performFileInvalidation(
         compilationSetup,
         platform,
         uriTranslator,
@@ -1191,13 +1181,13 @@
   /// one at a time, and the code recompiled after each invalidation.
   /// Verifies that either it's an error in all cases or in no cases.
   /// Verifies that the same libraries comes out as a result.
-  Future<Result<ComponentResult>> performFileInvalidation(
+  Future<Result<ComponentResult>?> performFileInvalidation(
       CompilationSetup compilationSetup,
       Component platform,
       UriTranslator uriTranslator,
       ComponentResult result,
       FastaContext context,
-      bool originalFlag) async {
+      bool? originalFlag) async {
     compilationSetup.errors.clear();
     IncrementalCompiler incrementalCompiler =
         new IncrementalCompiler.fromComponent(
@@ -1273,8 +1263,13 @@
       }
     }
 
-    context.explicitExperimentalFlags[
-        ExperimentalFlag.alternativeInvalidationStrategy] = originalFlag;
+    if (originalFlag != null) {
+      context.explicitExperimentalFlags[
+          ExperimentalFlag.alternativeInvalidationStrategy] = originalFlag;
+    } else {
+      context.explicitExperimentalFlags
+          .remove(ExperimentalFlag.alternativeInvalidationStrategy);
+    }
 
     return null;
   }
@@ -1284,13 +1279,13 @@
   /// etc are sorted).
   /// Verifies that either it's an error in all cases or in no cases.
   /// Verifies that the same libraries comes out as a result.
-  Future<Result<ComponentResult>> performChunkReordering(
+  Future<Result<ComponentResult>?> performChunkReordering(
       CompilationSetup compilationSetup,
       Component platform,
       UriTranslator uriTranslator,
       ComponentResult result,
       FastaContext context,
-      bool originalFlag) async {
+      bool? originalFlag) async {
     compilationSetup.errors.clear();
 
     FileSystem orgFileSystem = compilationSetup.options.fileSystem;
@@ -1310,14 +1305,14 @@
     // 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.builders.values) {
       if (builder.importUri.scheme == "dart" && !builder.isSynthetic) continue;
       builders[builder.fileUri] = builder;
       for (LibraryPart part in builder.library.parts) {
         Uri thisPartUri = builder.importUri.resolve(part.partUri);
         if (thisPartUri.scheme == "package") {
-          thisPartUri =
-              incrementalCompiler.userCode.uriTranslator.translate(thisPartUri);
+          thisPartUri = incrementalCompiler.userCode!.uriTranslator
+              .translate(thisPartUri)!;
         }
         builders[thisPartUri] = builder;
       }
@@ -1325,12 +1320,12 @@
 
     for (Uri uri in fs.data.keys) {
       print("Work on $uri");
-      LibraryBuilder builder = builders[uri];
+      LibraryBuilder? builder = builders[uri];
       if (builder == null) {
         print("Skipping $uri -- couldn't find builder for it.");
         continue;
       }
-      Uint8List orgData = fs.data[uri];
+      Uint8List orgData = fs.data[uri] as Uint8List;
       FuzzAstVisitorSorter fuzzAstVisitorSorter;
       try {
         fuzzAstVisitorSorter =
@@ -1354,7 +1349,7 @@
         for (FuzzAstVisitorSorterChunk chunk in fuzzAstVisitorSorter.chunks) {
           sb.writeln(chunk.getSource());
         }
-        Uint8List sortedData = utf8.encode(sb.toString());
+        Uint8List sortedData = utf8.encode(sb.toString()) as Uint8List;
         fs.data[uri] = sortedData;
         incrementalCompiler = new IncrementalCompiler.fromComponent(
             new CompilerContext(compilationSetup.options), platform);
@@ -1408,11 +1403,12 @@
 
 class FuzzAstVisitorSorterChunk {
   final String data;
-  final String metadataAndComments;
+  final String? metadataAndComments;
   final int layer;
 
   FuzzAstVisitorSorterChunk(this.data, this.metadataAndComments, this.layer);
 
+  @override
   String toString() {
     return "FuzzAstVisitorSorterChunk[${getSource()}]";
   }
@@ -1441,7 +1437,7 @@
     accept(ast);
     if (metadataStart != null) {
       String metadata = asString.substring(
-          metadataStart.charOffset, metadataEndInclusive.charEnd);
+          metadataStart!.charOffset, metadataEndInclusive!.charEnd);
       layer++;
       chunks.add(new FuzzAstVisitorSorterChunk(
         "",
@@ -1475,25 +1471,25 @@
   }
 
   List<FuzzAstVisitorSorterChunk> chunks = [];
-  Token metadataStart;
-  Token metadataEndInclusive;
+  Token? metadataStart;
+  Token? metadataEndInclusive;
   int layer = 0;
-  FuzzSorterState state = null;
+  FuzzSorterState? state = null;
 
   /// If there's any LanguageVersionToken in the comment preceding the given
   /// token add it as a separate chunk to keep it in place.
   void _chunkOutLanguageVersionComment(Token fromToken) {
-    Token comment = fromToken.precedingComments;
+    Token comment = fromToken.precedingComments!;
     bool hasLanguageVersion = comment is LanguageVersionToken;
     while (comment.next != null) {
-      comment = comment.next;
+      comment = comment.next!;
       hasLanguageVersion |= comment is LanguageVersionToken;
     }
     if (hasLanguageVersion) {
       layer++;
       chunks.add(new FuzzAstVisitorSorterChunk(
         asString.substring(
-            fromToken.precedingComments.charOffset, comment.charEnd),
+            fromToken.precedingComments!.charOffset, comment.charEnd),
         null,
         layer,
       ));
@@ -1518,19 +1514,19 @@
     // anyway, so possibly allowing it to be sorted (and put in another place)
     // won't make it more or less illegal.
     if (metadataStart != null &&
-        metadataStart.precedingComments != null &&
+        metadataStart!.precedingComments != null &&
         chunks.isEmpty) {
-      _chunkOutLanguageVersionComment(metadataStart);
+      _chunkOutLanguageVersionComment(metadataStart!);
     } else if (metadataStart == null &&
         startInclusive.precedingComments != null &&
         chunks.isEmpty) {
       _chunkOutLanguageVersionComment(startInclusive);
     }
 
-    String metadata;
+    String? metadata;
     if (metadataStart != null || metadataEndInclusive != null) {
       metadata = asString.substring(
-          metadataStart.charOffset, metadataEndInclusive.charEnd);
+          metadataStart!.charOffset, metadataEndInclusive!.charEnd);
     }
     chunks.add(new FuzzAstVisitorSorterChunk(
       asString.substring(startInclusive.charOffset, endInclusive.charEnd),
@@ -1550,9 +1546,9 @@
 
   @override
   void visitImport(DirectParserASTContentImportEnd node, Token startInclusive,
-      Token endInclusive) {
+      Token? endInclusive) {
     handleData(
-        FuzzSorterState.importExportSortable, startInclusive, endInclusive);
+        FuzzSorterState.importExportSortable, startInclusive, endInclusive!);
   }
 
   @override
@@ -1639,7 +1635,7 @@
 
 class _FakeFileSystem extends FileSystem {
   bool redirectAndRecord = true;
-  final Map<Uri, Uint8List> data = {};
+  final Map<Uri, Uint8List?> data = {};
   final FileSystem fs;
   _FakeFileSystem(this.fs);
 
@@ -1651,6 +1647,7 @@
 
 class _FakeFileSystemEntity extends FileSystemEntity {
   final _FakeFileSystem fs;
+  @override
   final Uri uri;
   _FakeFileSystemEntity(this.fs, this.uri);
 
@@ -1665,13 +1662,13 @@
       fs.data[uri] = null;
       return;
     }
-    fs.data[uri] = await f.readAsBytes();
+    fs.data[uri] = (await f.readAsBytes()) as Uint8List;
   }
 
   @override
   Future<bool> exists() async {
     await _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) return false;
     return true;
   }
@@ -1682,7 +1679,7 @@
   @override
   Future<List<int>> readAsBytes() async {
     await _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) throw new FileSystemException(uri, "File doesn't exist.");
     return data;
   }
@@ -1693,14 +1690,14 @@
   @override
   Future<String> readAsString() async {
     await _ensureCachedIfOk();
-    Uint8List data = fs.data[uri];
+    Uint8List? data = fs.data[uri];
     if (data == null) throw new FileSystemException(uri, "File doesn't exist.");
     return utf8.decode(data);
   }
 }
 
 Target createTarget(FolderOptions folderOptions, FastaContext context) {
-  TargetFlags targetFlags = new TargetFlags(
+  TestTargetFlags targetFlags = new TestTargetFlags(
     forceLateLoweringsForTesting: folderOptions.forceLateLowerings,
     forceLateLoweringSentinelForTesting:
         folderOptions.forceLateLoweringSentinel,
@@ -1716,11 +1713,8 @@
     case "vm":
       target = new TestVmTarget(targetFlags);
       break;
-    case "aot":
-      target = new TestVmAotTarget(targetFlags);
-      break;
     case "none":
-      target = new NoneTarget(targetFlags);
+      target = new TestTargetWrapper(new NoneTarget(targetFlags), targetFlags);
       break;
     case "dart2js":
       target = new TestDart2jsTarget('dart2js', targetFlags);
@@ -1763,12 +1757,14 @@
 
   final bool updateComments;
 
+  @override
   String get name {
     return fullCompile ? "compile" : "outline";
   }
 
   bool get isCompiler => fullCompile;
 
+  @override
   Future<Result<ComponentResult>> run(
       TestDescription description, FastaContext context) async {
     CompilationSetup compilationSetup =
@@ -1781,7 +1777,7 @@
       if (compilationSetup.testOptions.nnbdMode != null) {
         linkOptions = compilationSetup.createProcessedOptions(
             compilationSetup.createCompilerOptions(
-                compilationSetup.testOptions.nnbdMode,
+                compilationSetup.testOptions.nnbdMode!,
                 compilationSetup.testOptions.allowedExperimentalFlags,
                 compilationSetup.testOptions.experimentEnabledVersion,
                 compilationSetup.testOptions.experimentReleasedVersion));
@@ -1793,14 +1789,14 @@
             linkOptions,
             compilationSetup.testOptions.linkDependencies.toList());
         if (compilationSetup.testOptions.errors != null) {
-          compilationSetup.errors.addAll(compilationSetup.testOptions.errors);
+          compilationSetup.errors.addAll(compilationSetup.testOptions.errors!);
         }
-        Component p = await sourceTarget.buildOutlines();
+        Component p = (await sourceTarget.buildOutlines())!;
         if (fullCompile) {
-          p = await sourceTarget.buildComponent(
+          p = (await sourceTarget.buildComponent(
               verify: compilationSetup.folderOptions.noVerify
                   ? false
-                  : context.verify);
+                  : context.verify))!;
         }
 
         // To avoid possible crash in mixin transformation in the transformation
@@ -1811,6 +1807,7 @@
           backendTarget.performModularTransformations = true;
         }
         try {
+          // ignore: unnecessary_null_comparison
           if (sourceTarget.loader.coreTypes != null) {
             sourceTarget.runBuildTransformations();
           }
@@ -1837,7 +1834,7 @@
 
     return await CompilerContext.runWithOptions(compilationSetup.options,
         (_) async {
-      Component alsoAppend = compilationSetup.testOptions.component;
+      Component? alsoAppend = compilationSetup.testOptions.component;
       if (description.uri.pathSegments.last.endsWith(".no_link.dart")) {
         alsoAppend = null;
       }
@@ -1848,14 +1845,14 @@
           new ValidatingInstrumentation();
       await instrumentation.loadExpectations(description.uri);
       sourceTarget.loader.instrumentation = instrumentation;
-      Component p = await sourceTarget.buildOutlines();
+      Component p = (await sourceTarget.buildOutlines())!;
       Set<Uri> userLibraries =
           createUserLibrariesImportUriSet(p, sourceTarget.uriTranslator);
       if (fullCompile) {
-        p = await sourceTarget.buildComponent(
+        p = (await sourceTarget.buildComponent(
             verify: compilationSetup.folderOptions.noVerify
                 ? false
-                : context.verify);
+                : context.verify))!;
         instrumentation.finish();
         if (instrumentation.hasProblems) {
           if (updateComments) {
@@ -1881,7 +1878,7 @@
       TestDescription description,
       ProcessedOptions options,
       List<Uri> entryPoints,
-      {Component alsoAppend}) async {
+      {Component? alsoAppend}) async {
     Component platform =
         await context.loadPlatform(options.target, options.nnbdMode);
     Ticker ticker = new Ticker();
@@ -1908,8 +1905,10 @@
 class Transform extends Step<ComponentResult, ComponentResult, FastaContext> {
   const Transform();
 
+  @override
   String get name => "transform component";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     return await CompilerContext.runWithOptions(result.options, (_) async {
@@ -1920,6 +1919,7 @@
         backendTarget.performModularTransformations = true;
       }
       try {
+        // ignore: unnecessary_null_comparison
         if (sourceTarget.loader.coreTypes != null) {
           sourceTarget.runBuildTransformations();
         }
@@ -1956,8 +1956,10 @@
 
   const Verify(this.fullCompile);
 
+  @override
   String get name => "verify";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     FolderOptions folderOptions =
@@ -2031,11 +2033,11 @@
       CoreTypes coreTypes,
       ClassHierarchy hierarchy,
       List<Library> libraries,
-      Map<String, String> environmentDefines,
+      Map<String, String>? environmentDefines,
       DiagnosticReporter diagnosticReporter,
-      ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg),
-      ChangedStructureNotifier changedStructureNotifier}) {
+      ReferenceFromIndex? referenceFromIndex,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
     if (performModularTransformations) {
       super.performModularTransformationsOnLibraries(
           component,
@@ -2056,32 +2058,21 @@
       component;
 }
 
-class TestVmTarget extends VmTarget with TestTarget {
-  TestVmTarget(TargetFlags flags) : super(flags);
-}
-
-class TestVmAotTarget extends TestVmTarget {
-  TestVmAotTarget(TargetFlags flags) : super(flags);
-
+class TestVmTarget extends VmTarget with TestTarget, TestTargetMixin {
   @override
-  bool get hasGlobalTransformation => true;
+  final TestTargetFlags flags;
 
-  @override
-  Component performGlobalTransformations(
-      KernelTarget kernelTarget, Component component) {
-    return type_flow.transformComponent(
-        this, kernelTarget.loader.coreTypes, component,
-        matcher: new type_flow.ConstantPragmaAnnotationParser(
-            kernelTarget.loader.coreTypes));
-  }
+  TestVmTarget(this.flags) : super(flags);
 }
 
 class EnsureNoErrors
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const EnsureNoErrors();
 
+  @override
   String get name => "check errors";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     List<Iterable<String>> errors = result.compilationSetup.errors;
@@ -2098,13 +2089,15 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const MatchHierarchy();
 
+  @override
   String get name => "check hierarchy";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     Component component = result.component;
     Uri uri =
-        component.uriToSource.keys.firstWhere((uri) => uri?.scheme == "file");
+        component.uriToSource.keys.firstWhere((uri) => uri.scheme == "file");
     KernelTarget target = result.sourceTarget;
     ClassHierarchyBuilder hierarchy = target.loader.builderHierarchy;
     StringBuffer sb = new StringBuffer();
@@ -2117,8 +2110,8 @@
 }
 
 class UriConfiguration {
-  final Uri librariesSpecificationUri;
-  final Uri packageConfigUri;
+  final Uri? librariesSpecificationUri;
+  final Uri? packageConfigUri;
 
   UriConfiguration(this.librariesSpecificationUri, this.packageConfigUri);
 
@@ -2136,17 +2129,24 @@
 }
 
 class NoneConstantsBackendWithJs extends NoneConstantsBackend {
-  const NoneConstantsBackendWithJs({bool supportsUnevaluatedConstants})
+  const NoneConstantsBackendWithJs({required bool supportsUnevaluatedConstants})
       : super(supportsUnevaluatedConstants: supportsUnevaluatedConstants);
 
   @override
   NumberSemantics get numberSemantics => NumberSemantics.js;
 }
 
-class TestDart2jsTarget extends Dart2jsTarget with TestTarget {
-  TestDart2jsTarget(String name, TargetFlags flags) : super(name, flags);
+class TestDart2jsTarget extends Dart2jsTarget with TestTarget, TestTargetMixin {
+  @override
+  final TestTargetFlags flags;
+
+  TestDart2jsTarget(String name, this.flags) : super(name, flags);
 }
 
-class TestDevCompilerTarget extends DevCompilerTarget with TestTarget {
-  TestDevCompilerTarget(TargetFlags flags) : super(flags);
+class TestDevCompilerTarget extends DevCompilerTarget
+    with TestTarget, TestTargetMixin {
+  @override
+  final TestTargetFlags flags;
+
+  TestDevCompilerTarget(this.flags) : super(flags);
 }
diff --git a/pkg/front_end/test/fasta/text_serialization_suite.dart b/pkg/front_end/test/fasta/text_serialization_suite.dart
index a7018eb..eaeb88a 100644
--- a/pkg/front_end/test/fasta/text_serialization_suite.dart
+++ b/pkg/front_end/test/fasta/text_serialization_suite.dart
@@ -15,11 +15,11 @@
   return FastaContext.create(suite, environment);
 }
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   internalMain(arguments: arguments);
 }
 
-internalMain(
+void internalMain(
     {List<String> arguments = const [], int shards = 1, int shard = 0}) {
   runMe(arguments, createContext,
       configurationPath: "../../testing.json", shards: shards, shard: shard);
diff --git a/pkg/front_end/test/fasta/textual_outline_suite.dart b/pkg/front_end/test/fasta/textual_outline_suite.dart
index 0a88cd1..09f3387 100644
--- a/pkg/front_end/test/fasta/textual_outline_suite.dart
+++ b/pkg/front_end/test/fasta/textual_outline_suite.dart
@@ -52,10 +52,11 @@
   return new Context(environment["updateExpectations"] == "true");
 }
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../../testing.json");
 
 class Context extends ChainContext with MatchContext {
+  @override
   final bool updateExpectations;
 
   @override
@@ -66,10 +67,12 @@
 
   Context(this.updateExpectations);
 
+  @override
   final List<Step> steps = const <Step>[
     const TextualOutline(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(EXPECTATIONS);
 }
@@ -77,8 +80,10 @@
 class TextualOutline extends Step<TestDescription, TestDescription, Context> {
   const TextualOutline();
 
+  @override
   String get name => "TextualOutline";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) async {
     List<int> bytes = new File.fromUri(description.uri).readAsBytesSync();
diff --git a/pkg/front_end/test/fasta/tool_git_test.dart b/pkg/front_end/test/fasta/tool_git_test.dart
index 6f77ade..fde2e4e 100644
--- a/pkg/front_end/test/fasta/tool_git_test.dart
+++ b/pkg/front_end/test/fasta/tool_git_test.dart
@@ -47,7 +47,7 @@
   "testing",
 ];
 
-main() {
+void main() {
   if (!Platform.isMacOS && !Platform.isLinux) {
     // The tool is a shell script and only works on Mac and Linux.
     return;
diff --git a/pkg/front_end/test/fasta/type_inference/factor_type_test.dart b/pkg/front_end/test/fasta/type_inference/factor_type_test.dart
index aec0ef1..65243ed 100644
--- a/pkg/front_end/test/fasta/type_inference/factor_type_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/factor_type_test.dart
@@ -102,7 +102,7 @@
       typeToText(type, TypeRepresentation.analyzerNonNullableByDefault);
 }
 
-main() async {
+void main() async {
   CompilerOptions options = new CompilerOptions()
     ..explicitExperimentalFlags[ExperimentalFlag.nonNullable] = true;
   InternalCompilerResult result = await compileScript('',
diff --git a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
index 889f6c6..7bf3df7 100644
--- a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
@@ -14,7 +14,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeConstraintGathererTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
index ec32ecf..16df20d 100644
--- a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
@@ -14,7 +14,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeConstraintGathererTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart b/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
index 83ba5fd..0588e94 100644
--- a/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IncludesTypeParametersCovariantlyTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_nnbd_test.dart
index d50b5c6..dc5b7cb 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_nnbd_test.dart
@@ -12,7 +12,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeSchemaEliminationTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
index 55e7235..36f0c1a 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
@@ -12,7 +12,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeSchemaEliminationTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
index a1448b7..20d575a 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
@@ -13,7 +13,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeSchemaEnvironmentTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
index 027bac2..6945778 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
@@ -13,7 +13,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeSchemaEnvironmentTest);
   });
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
index 5aa934b..eff2502 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UnknownTypeTest);
   });
diff --git a/pkg/front_end/test/fasta/types/dart2js_benchmark.dart b/pkg/front_end/test/fasta/types/dart2js_benchmark.dart
index 7ef67e3..b302938 100644
--- a/pkg/front_end/test/fasta/types/dart2js_benchmark.dart
+++ b/pkg/front_end/test/fasta/types/dart2js_benchmark.dart
@@ -8,5 +8,5 @@
 
 import "subtypes_benchmark.dart" show run;
 
-main() =>
+void main() =>
     run(Platform.script.resolve("benchmark_data/dart2js.json.gz"), "Dart2js");
diff --git a/pkg/front_end/test/fasta/types/dart2js_benchmark_test.dart b/pkg/front_end/test/fasta/types/dart2js_benchmark_test.dart
index b3084ea..590937d 100644
--- a/pkg/front_end/test/fasta/types/dart2js_benchmark_test.dart
+++ b/pkg/front_end/test/fasta/types/dart2js_benchmark_test.dart
@@ -6,4 +6,4 @@
 
 import "dart2js_benchmark.dart" as bench show main;
 
-main() => bench.main();
+void main() => bench.main();
diff --git a/pkg/front_end/test/fasta/types/dill_hierachy_test.dart b/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
index a5bd0e4..fb95755 100644
--- a/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
+++ b/pkg/front_end/test/fasta/types/dill_hierachy_test.dart
@@ -14,7 +14,8 @@
 
 import "package:kernel/target/targets.dart" show NoneTarget, TargetFlags;
 
-import 'package:kernel/testing/type_parser_environment.dart' show parseComponent;
+import 'package:kernel/testing/type_parser_environment.dart'
+    show parseComponent;
 
 import "package:front_end/src/api_prototype/compiler_options.dart"
     show CompilerOptions;
@@ -100,7 +101,7 @@
   interfaceSetters:
 """;
 
-main() {
+void main() {
   final Ticker ticker = new Ticker(isVerbose: false);
   final Component component = parseComponent("""
 class A;
diff --git a/pkg/front_end/test/fasta/types/fasta_legacy_upper_bound_test.dart b/pkg/front_end/test/fasta/types/fasta_legacy_upper_bound_test.dart
index 653a912..2852925 100644
--- a/pkg/front_end/test/fasta/types/fasta_legacy_upper_bound_test.dart
+++ b/pkg/front_end/test/fasta/types/fasta_legacy_upper_bound_test.dart
@@ -63,7 +63,7 @@
   }
 }
 
-main() {
+void main() {
   final Ticker ticker = new Ticker();
   final CompilerContext context = new CompilerContext(new ProcessedOptions(
       options: new CompilerOptions()
diff --git a/pkg/front_end/test/fasta/types/fasta_types_test.dart b/pkg/front_end/test/fasta/types/fasta_types_test.dart
index 25778ab..c5be9a4 100644
--- a/pkg/front_end/test/fasta/types/fasta_types_test.dart
+++ b/pkg/front_end/test/fasta/types/fasta_types_test.dart
@@ -40,7 +40,7 @@
 
 import "shared_type_tests.dart" show SubtypeTest;
 
-main() {
+void main() {
   final Ticker ticker = new Ticker(isVerbose: false);
   final CompilerContext context = new CompilerContext(new ProcessedOptions(
       options: new CompilerOptions()
@@ -73,15 +73,18 @@
 
   FastaTypesTest(this.hierarchy, this.environment);
 
+  @override
   DartType toType(String text, TypeParserEnvironment environment) {
     return environment.parseType(text);
   }
 
+  @override
   IsSubtypeOf isSubtypeImpl(DartType subtype, DartType supertype) {
     return hierarchy.types
         .performNullabilityAwareSubtypeCheck(subtype, supertype);
   }
 
+  @override
   TypeParserEnvironment extend(String typeParameters) {
     return environment.extendWithTypeParameters(typeParameters);
   }
diff --git a/pkg/front_end/test/fasta/types/hashcode_test.dart b/pkg/front_end/test/fasta/types/hashcode_test.dart
index e27c2fe..0c1fbfe 100644
--- a/pkg/front_end/test/fasta/types/hashcode_test.dart
+++ b/pkg/front_end/test/fasta/types/hashcode_test.dart
@@ -21,7 +21,7 @@
       typeParameters: [T]);
 }
 
-test1() {
+void test1() {
   DartType voidToR1 = createVoidToR();
   DartType voidToR2 = createVoidToR();
   DartType voidToR3 = createTTo_VoidToR().returnType;
@@ -48,7 +48,7 @@
       typeParameters: [R]);
 }
 
-test2() {
+void test2() {
   FunctionType outer1 = createVoidTo_VoidToR();
   FunctionType outer2 = createVoidTo_VoidToR();
   DartType voidToR1 = outer1.returnType;
@@ -61,6 +61,6 @@
       "Hash code mismatch for outer1 vs outer2."); // false, on no!
 }
 
-main() {
+void main() {
   test2();
 }
diff --git a/pkg/front_end/test/fasta/types/kernel_legacy_upper_bound_test.dart b/pkg/front_end/test/fasta/types/kernel_legacy_upper_bound_test.dart
index cddafb7..aeffa98 100644
--- a/pkg/front_end/test/fasta/types/kernel_legacy_upper_bound_test.dart
+++ b/pkg/front_end/test/fasta/types/kernel_legacy_upper_bound_test.dart
@@ -30,6 +30,6 @@
   }
 }
 
-main() {
+void main() {
   new KernelLegacyUpperBoundTest().test();
 }
diff --git a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
index e9d5c00..edae38a 100644
--- a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
+++ b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
@@ -114,7 +114,7 @@
   return new Component(libraries: <Library>[library]);
 }
 
-main() {
+void main() {
   Uri uri = Uri.parse("dart:core");
   TypeParserEnvironment environment = new TypeParserEnvironment(uri, uri);
   Component component = parseSdk(uri, environment);
@@ -135,15 +135,18 @@
   @override
   bool get skipFutureOrPromotion => true;
 
+  @override
   DartType toType(String text, TypeParserEnvironment environment) {
     return environment.parseType(text);
   }
 
+  @override
   IsSubtypeOf isSubtypeImpl(DartType subtype, DartType supertype) {
     return new TypeEnvironment(coreTypes, hierarchy)
         .performNullabilityAwareSubtypeCheck(subtype, supertype);
   }
 
+  @override
   TypeParserEnvironment extend(String typeParameters) {
     return environment.extendWithTypeParameters(typeParameters);
   }
diff --git a/pkg/front_end/test/fasta/types/large_app_benchmark.dart b/pkg/front_end/test/fasta/types/large_app_benchmark.dart
index 45e9417..28c653f 100644
--- a/pkg/front_end/test/fasta/types/large_app_benchmark.dart
+++ b/pkg/front_end/test/fasta/types/large_app_benchmark.dart
@@ -8,5 +8,5 @@
 
 import "subtypes_benchmark.dart" show run;
 
-main() => run(
+void main() => run(
     Platform.script.resolve("benchmark_data/large_app.json.gz"), "LargeApp");
diff --git a/pkg/front_end/test/fasta/types/large_app_benchmark_test.dart b/pkg/front_end/test/fasta/types/large_app_benchmark_test.dart
index 4dc83be..3037003 100644
--- a/pkg/front_end/test/fasta/types/large_app_benchmark_test.dart
+++ b/pkg/front_end/test/fasta/types/large_app_benchmark_test.dart
@@ -6,4 +6,4 @@
 
 import "large_app_benchmark.dart" as bench show main;
 
-main() => bench.main();
+void main() => bench.main();
diff --git a/pkg/front_end/test/fasta/types/subtypes_benchmark.dart b/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
index ef6dfb0..aa23ed4 100644
--- a/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
+++ b/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
@@ -55,6 +55,7 @@
 
   SubtypeCheck(this.s, this.t, this.isSubtype);
 
+  @override
   String toString() {
     return (new StringBuffer()
           ..write(s)
@@ -177,4 +178,4 @@
       "${fastaWatch.elapsedMilliseconds / runs} ms");
 }
 
-main() => run(Uri.base.resolve("type_checks.json"), "***");
+void main() => run(Uri.base.resolve("type_checks.json"), "***");
diff --git a/pkg/front_end/test/fasta/uri_translator_test.dart b/pkg/front_end/test/fasta/uri_translator_test.dart
index 15733f8..d186bea 100644
--- a/pkg/front_end/test/fasta/uri_translator_test.dart
+++ b/pkg/front_end/test/fasta/uri_translator_test.dart
@@ -10,7 +10,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UriTranslatorImplTest);
   });
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 c50e360..a393a6d 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
@@ -12,7 +12,7 @@
 
 Uri base;
 
-main(List<String> args) {
+void main(List<String> args) {
   File script = new File.fromUri(Platform.script);
   base = script.parent.uri;
 
diff --git a/pkg/front_end/test/fasta/weak_suite.dart b/pkg/front_end/test/fasta/weak_suite.dart
index 4fb7c3a..384baab 100644
--- a/pkg/front_end/test/fasta/weak_suite.dart
+++ b/pkg/front_end/test/fasta/weak_suite.dart
@@ -14,11 +14,11 @@
   return FastaContext.create(suite, environment);
 }
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   internalMain(arguments: arguments);
 }
 
-internalMain(
+void internalMain(
         {List<String> arguments = const [], int shards = 1, int shard = 0}) =>
     runMe(arguments, createContext,
         configurationPath: "../../testing.json", shard: shard, shards: shards);
diff --git a/pkg/front_end/test/ffi_test.dart b/pkg/front_end/test/ffi_test.dart
index b617fa0..02cc7fbf 100644
--- a/pkg/front_end/test/ffi_test.dart
+++ b/pkg/front_end/test/ffi_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:expect/expect.dart';
 
-main() {
+void main() {
   // TODO(dacoharkes): implement dart:ffi tests
   Expect.isTrue(true);
 }
diff --git a/pkg/front_end/test/flutter_gallery_leak_tester.dart b/pkg/front_end/test/flutter_gallery_leak_tester.dart
index 1e25c00..1b5e46b 100644
--- a/pkg/front_end/test/flutter_gallery_leak_tester.dart
+++ b/pkg/front_end/test/flutter_gallery_leak_tester.dart
@@ -26,7 +26,7 @@
 // but assumes that flutter has been setup as by the script
 // `tools/bots/flutter/compile_flutter.sh`.
 
-main(List<String> args) async {
+void main(List<String> args) async {
   if (Platform.isWindows) {
     throw "This script cannot run on Windows as it uses non-Windows "
         "assumptions both for the placement of pub packages and the presence "
diff --git a/pkg/front_end/test/generated_files_up_to_date_git_test.dart b/pkg/front_end/test/generated_files_up_to_date_git_test.dart
index 0800570..17773be 100644
--- a/pkg/front_end/test/generated_files_up_to_date_git_test.dart
+++ b/pkg/front_end/test/generated_files_up_to_date_git_test.dart
@@ -13,18 +13,22 @@
     as generateDirectParserAstHelper;
 import "parser_test_listener_creator.dart" as generateParserTestListener;
 import "parser_test_parser_creator.dart" as generateParserTestParser;
+import '../tool/ast_model.dart';
 import '../tool/generate_ast_equivalence.dart' as generateAstEquivalence;
+import '../tool/generate_ast_coverage.dart' as generateAstCoverage;
 import 'utils/io_utils.dart' show computeRepoDirUri;
 
 final Uri repoDir = computeRepoDirUri();
 
-main() async {
+void main() async {
   messages();
   experimentalFlags();
   directParserAstHelper();
   parserTestListener();
   parserTestParser();
-  await astEquivalence();
+  AstModel astModel = await deriveAstModel(repoDir);
+  await astEquivalence(astModel);
+  await astCoverage(astModel);
 }
 
 void parserTestParser() {
@@ -50,14 +54,22 @@
       "dart pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart");
 }
 
-Future<void> astEquivalence() async {
+Future<void> astEquivalence(AstModel astModel) async {
   Uri generatedFile = generateAstEquivalence.computeEquivalenceUri(repoDir);
   String generated =
-      await generateAstEquivalence.generateAstEquivalence(repoDir);
+      await generateAstEquivalence.generateAstEquivalence(repoDir, astModel);
   check(generated, generatedFile,
       "dart pkg/front_end/tool/generate_ast_equivalence.dart");
 }
 
+Future<void> astCoverage(AstModel astModel) async {
+  Uri generatedFile = generateAstCoverage.computeCoverageUri(repoDir);
+  String generated =
+      await generateAstCoverage.generateAstCoverage(repoDir, astModel);
+  check(generated, generatedFile,
+      "dart pkg/front_end/tool/generate_ast_coverage.dart");
+}
+
 void experimentalFlags() {
   {
     Uri generatedFile =
diff --git a/pkg/front_end/test/hot_reload_e2e_test.dart b/pkg/front_end/test/hot_reload_e2e_test.dart
index 419354b..9a2a0b9 100644
--- a/pkg/front_end/test/hot_reload_e2e_test.dart
+++ b/pkg/front_end/test/hot_reload_e2e_test.dart
@@ -66,7 +66,7 @@
     }
   }
 
-  setUp() async {
+  Future<void> setUp() async {
     outDir = Directory.systemTemp.createTempSync('hotreload_test');
     outputUri = outDir.uri.resolve('test.dill');
     var root = Uri.parse('org-dartlang-test:///');
@@ -81,7 +81,7 @@
     await rebuild(compiler, outputUri); // this is a full compile.
   }
 
-  tearDown() async {
+  Future<void> tearDown() async {
     outDir.deleteSync(recursive: true);
     lines = null;
   }
@@ -102,7 +102,7 @@
 
   /// Start the VM with the first version of the program compiled by the
   /// incremental compiler.
-  startProgram(int reloadCount) async {
+  Future<void> startProgram(int reloadCount) async {
     var vmArgs = [
       '--enable-vm-service=0', // Note: use 0 to avoid port collisions.
       '--pause_isolates_on_start',
@@ -289,7 +289,7 @@
   }
 }
 
-main() {
+void main() {
   asyncTest(() async {
     await new InitialProgramIsValid().test();
     await new ReloadAfterLeafLibraryModification().test();
diff --git a/pkg/front_end/test/id_testing/id_testing_test.dart b/pkg/front_end/test/id_testing/id_testing_test.dart
index 590515a..c7c8b83 100644
--- a/pkg/front_end/test/id_testing/id_testing_test.dart
+++ b/pkg/front_end/test/id_testing/id_testing_test.dart
@@ -30,7 +30,7 @@
         Library,
         TreeNode;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<String>(dataDir,
       args: args,
@@ -62,6 +62,7 @@
     new IdTestingDataExtractor(compilerResult, actualMap).computeForClass(cls);
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -75,6 +76,7 @@
   @override
   bool get supportsErrors => true;
 
+  @override
   String computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     return errorsToText(errors);
diff --git a/pkg/front_end/test/id_tests/assigned_variables_test.dart b/pkg/front_end/test/id_tests/assigned_variables_test.dart
index c74e39b..8a54a08 100644
--- a/pkg/front_end/test/id_tests/assigned_variables_test.dart
+++ b/pkg/front_end/test/id_tests/assigned_variables_test.dart
@@ -19,7 +19,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve(
       '../../../_fe_analyzer_shared/test/flow_analysis/assigned_variables/'
       'data'));
@@ -41,6 +41,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/constant_test.dart b/pkg/front_end/test/id_tests/constant_test.dart
index d01fd1e..0b2db7e 100644
--- a/pkg/front_end/test/id_tests/constant_test.dart
+++ b/pkg/front_end/test/id_tests/constant_test.dart
@@ -23,7 +23,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script
       .resolve('../../../_fe_analyzer_shared/test/constants/data'));
   await runTests<String>(dataDir,
@@ -60,6 +60,7 @@
   bool get supportsErrors => true;
 
   /// Returns data corresponding to [error].
+  @override
   String computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     return errorsToText(errors);
diff --git a/pkg/front_end/test/id_tests/definite_assignment_test.dart b/pkg/front_end/test/id_tests/definite_assignment_test.dart
index a5e19c3..09b7584 100644
--- a/pkg/front_end/test/id_tests/definite_assignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_assignment_test.dart
@@ -14,7 +14,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve(
       '../../../_fe_analyzer_shared/test/flow_analysis/definite_assignment/'
       'data'));
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/definite_unassignment_test.dart b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
index 23291f8..2d25641 100644
--- a/pkg/front_end/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
@@ -14,7 +14,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve(
       '../../../_fe_analyzer_shared/test/flow_analysis/definite_unassignment/'
       'data'));
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
index 58473d5..0670441 100644
--- a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
@@ -15,7 +15,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(
       Platform.script.resolve('../../../_fe_analyzer_shared/test/'
           'inference/inferred_type_arguments/data'));
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
index ab812ed..8403ae5 100644
--- a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
@@ -15,7 +15,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(
       Platform.script.resolve('../../../_fe_analyzer_shared/test/'
           'inference/inferred_variable_types/data'));
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inheritance_test.dart b/pkg/front_end/test/id_tests/inheritance_test.dart
index 261efa6..40a5ae9 100644
--- a/pkg/front_end/test/id_tests/inheritance_test.dart
+++ b/pkg/front_end/test/id_tests/inheritance_test.dart
@@ -18,7 +18,7 @@
 
 const String cfeFromBuilderMarker = 'cfe:builder';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script
       .resolve('../../../_fe_analyzer_shared/test/inheritance/data'));
   await runTests<String>(dataDir,
@@ -47,6 +47,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/nullability_test.dart b/pkg/front_end/test/id_tests/nullability_test.dart
index c485ef9..de14982 100644
--- a/pkg/front_end/test/id_tests/nullability_test.dart
+++ b/pkg/front_end/test/id_tests/nullability_test.dart
@@ -10,7 +10,7 @@
 import 'package:front_end/src/testing/id_testing_helper.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve(
       '../../../_fe_analyzer_shared/test/flow_analysis/nullability/data'));
   await runTests<String>(dataDir,
@@ -30,6 +30,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/reachability_test.dart b/pkg/front_end/test/id_tests/reachability_test.dart
index cf37a57..7cd2ab7 100644
--- a/pkg/front_end/test/id_tests/reachability_test.dart
+++ b/pkg/front_end/test/id_tests/reachability_test.dart
@@ -16,7 +16,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve(
       '../../../_fe_analyzer_shared/test/flow_analysis/reachability/data'));
   await runTests<Set<_ReachabilityAssertion>>(dataDir,
@@ -38,6 +38,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/type_promotion_test.dart b/pkg/front_end/test/id_tests/type_promotion_test.dart
index 1ac5fb3..87d3d38 100644
--- a/pkg/front_end/test/id_tests/type_promotion_test.dart
+++ b/pkg/front_end/test/id_tests/type_promotion_test.dart
@@ -13,7 +13,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script
       .resolve('../../../_fe_analyzer_shared/test/flow_analysis/type_promotion/'
           'data'));
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/why_not_promoted_test.dart b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
index d339adc..603cd8c 100644
--- a/pkg/front_end/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
@@ -16,7 +16,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance, MapLiteralEntry;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(
       Platform.script.resolve('../../../_fe_analyzer_shared/test/flow_analysis/'
           'why_not_promoted/data'));
@@ -43,6 +43,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/incremental_bulk_compiler_full.dart b/pkg/front_end/test/incremental_bulk_compiler_full.dart
index b067117..61b3899 100644
--- a/pkg/front_end/test/incremental_bulk_compiler_full.dart
+++ b/pkg/front_end/test/incremental_bulk_compiler_full.dart
@@ -28,7 +28,7 @@
 
 import 'incremental_utils.dart' as util;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
@@ -37,6 +37,7 @@
 }
 
 class Context extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const RunTest(),
   ];
@@ -67,8 +68,10 @@
 class RunTest extends Step<TestDescription, TestDescription, Context> {
   const RunTest();
 
+  @override
   String get name => "run test";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) async {
     Uri uri = description.uri;
diff --git a/pkg/front_end/test/incremental_bulk_compiler_smoke_suite.dart b/pkg/front_end/test/incremental_bulk_compiler_smoke_suite.dart
index 98f1f3b..03993a7 100644
--- a/pkg/front_end/test/incremental_bulk_compiler_smoke_suite.dart
+++ b/pkg/front_end/test/incremental_bulk_compiler_smoke_suite.dart
@@ -8,7 +8,7 @@
 
 import 'incremental_bulk_compiler_full.dart' show Context;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
diff --git a/pkg/front_end/test/incremental_compiler_leak_test.dart b/pkg/front_end/test/incremental_compiler_leak_test.dart
index 922866f..675bee9 100644
--- a/pkg/front_end/test/incremental_compiler_leak_test.dart
+++ b/pkg/front_end/test/incremental_compiler_leak_test.dart
@@ -12,7 +12,7 @@
 
 const int limit = 10;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   LeakFinder heapHelper = new LeakFinder();
 
   heapHelper.start([
@@ -167,6 +167,7 @@
   }
 
   Completer<String> cProcessExited = new Completer();
+  @override
   void processExited(int exitCode) {
     cProcessExited.complete("Exit");
   }
diff --git a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
index 4320981..d335bf9 100644
--- a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
@@ -22,7 +22,7 @@
 
 Directory outDir;
 
-main() async {
+void main() async {
   outDir =
       Directory.systemTemp.createTempSync("incremental_load_from_dill_test");
   try {
diff --git a/pkg/front_end/test/incremental_dart2js_test.dart b/pkg/front_end/test/incremental_dart2js_test.dart
index 5fef9dc..be9f6f5 100644
--- a/pkg/front_end/test/incremental_dart2js_test.dart
+++ b/pkg/front_end/test/incremental_dart2js_test.dart
@@ -6,7 +6,7 @@
 
 import "incremental_dart2js_tester.dart";
 
-main(List<String> args) async {
+void main(List<String> args) async {
   bool fast = true;
   bool useExperimentalInvalidation = true;
   bool addDebugBreaks = false;
diff --git a/pkg/front_end/test/incremental_dart2js_tester.dart b/pkg/front_end/test/incremental_dart2js_tester.dart
index 11f7783..8837c39 100644
--- a/pkg/front_end/test/incremental_dart2js_tester.dart
+++ b/pkg/front_end/test/incremental_dart2js_tester.dart
@@ -18,7 +18,7 @@
 
 import "incremental_utils.dart" as util;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   bool fast = false;
   bool useExperimentalInvalidation = false;
   bool addDebugBreaks = false;
diff --git a/pkg/front_end/test/incremental_flutter_tester.dart b/pkg/front_end/test/incremental_flutter_tester.dart
index d0dec4c..5ebaf9a 100644
--- a/pkg/front_end/test/incremental_flutter_tester.dart
+++ b/pkg/front_end/test/incremental_flutter_tester.dart
@@ -46,7 +46,7 @@
   exit(1);
 }
 
-main(List<String> args) async {
+void main(List<String> args) async {
   bool fast = false;
   bool useExperimentalInvalidation = false;
   File inputFile;
@@ -298,6 +298,7 @@
             annotator: annotator,
             metadata: metadata);
 
+  @override
   PrinterPrime createInner(ImportTable importTable,
       Map<String, MetadataRepository<Object>> metadata) {
     return new PrinterPrime(sink,
@@ -309,6 +310,7 @@
         showMetadata: showMetadata);
   }
 
+  @override
   void writeInterfaceTarget(Name name, Reference target) {
     // Skipped!
   }
diff --git a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
index 4cbd8e7..5fd461d 100644
--- a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
@@ -124,7 +124,7 @@
     return component;
   }
 
-  initialize() async {
+  Future<void> initialize() async {
     sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
     base = Uri.parse("org-dartlang-test:///");
     sdkSummary = base.resolve("vm_platform.dill");
@@ -305,6 +305,7 @@
       [Uri initializeFromDillUri])
       : super(context, initializeFromDillUri);
 
+  @override
   void recordTemporaryFileForTesting(Uri uri) {
     File f = new File.fromUri(uri);
     if (f.existsSync()) f.deleteSync();
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index a562b6b9..51801fd 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:developer' show debugger;
 
 import 'dart:io' show Directory, File;
@@ -61,7 +59,13 @@
     show ClassHierarchy, ClosedWorldClassHierarchy, ForTestingClassInfo;
 
 import 'package:kernel/target/targets.dart'
-    show NoneTarget, LateLowering, Target, TargetFlags;
+    show
+        LateLowering,
+        NoneTarget,
+        Target,
+        TargetFlags,
+        TestTargetFlags,
+        TestTargetWrapper;
 
 import 'package:kernel/text/ast_to_text.dart'
     show NameSystem, Printer, componentToString;
@@ -79,7 +83,7 @@
 
 import 'utils/io_utils.dart' show computeRepoDir;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 const Expectation ExpectationFileMismatch =
@@ -130,6 +134,7 @@
 }
 
 class Context extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const ReadTest(),
     const RunCompilations(),
@@ -149,29 +154,32 @@
     cleanupHelper?.outDir = null;
   }
 
-  TestData cleanupHelper;
+  TestData? cleanupHelper;
 }
 
 class TestData {
   YamlMap map;
-  Directory outDir;
+  Directory? outDir;
   Uri loadedFrom;
+
+  TestData(this.map, this.outDir, this.loadedFrom);
 }
 
 class ReadTest extends Step<TestDescription, TestData, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<TestData>> run(
       TestDescription description, Context context) async {
     Uri uri = description.uri;
     String contents = await new File.fromUri(uri).readAsString();
-    TestData data = new TestData();
-    data.loadedFrom = uri;
-    data.map = loadYamlNode(contents, sourceUrl: uri);
-    data.outDir =
-        Directory.systemTemp.createTempSync("incremental_load_from_dill_test");
+    TestData data = new TestData(
+        loadYamlNode(contents, sourceUrl: uri) as YamlMap,
+        Directory.systemTemp.createTempSync("incremental_load_from_dill_test"),
+        uri);
     context.cleanupHelper = data;
     return pass(data);
   }
@@ -180,10 +188,12 @@
 class RunCompilations extends Step<TestData, TestData, Context> {
   const RunCompilations();
 
+  @override
   String get name => "run compilations";
 
+  @override
   Future<Result<TestData>> run(TestData data, Context context) async {
-    Result<TestData> result;
+    Result<TestData>? result;
     YamlMap map = data.map;
     Set<String> keys = new Set<String>.from(map.keys.cast<String>());
     keys.remove("type");
@@ -194,7 +204,7 @@
           map["sources"],
           map["entry"],
           map["invalidate"],
-          data.outDir,
+          data.outDir!,
         );
         break;
       case "newworld":
@@ -231,12 +241,12 @@
 }
 
 Future<Null> basicTest(YamlMap sourceFiles, String entryPoint,
-    YamlList invalidate, Directory outDir) async {
+    YamlList? invalidate, Directory outDir) async {
   Uri entryPointUri = outDir.uri.resolve(entryPoint);
   Set<String> invalidateFilenames =
       invalidate == null ? new Set<String>() : new Set<String>.from(invalidate);
   List<Uri> invalidateUris = <Uri>[];
-  Uri packagesUri;
+  Uri? packagesUri;
   for (String filename in sourceFiles.keys) {
     Uri uri = outDir.uri.resolve(filename);
     if (invalidateFilenames.contains(filename)) {
@@ -313,7 +323,7 @@
 
   for (String moduleName in module.keys) {
     List<Uri> moduleSources = <Uri>[];
-    Uri packagesUri;
+    Uri? packagesUri;
     for (String filename in module[moduleName].keys) {
       Uri uri = base.resolve(filename);
       if (uri.pathSegments.last == ".packages") {
@@ -361,15 +371,15 @@
 class NewWorldTest {
   // These are fields in a class to make it easier to track down memory leaks
   // via the leak detector test.
-  Component newestWholeComponent;
-  Component sdk;
-  Component component;
-  Component component2;
-  Component component3;
+  Component? newestWholeComponent;
+  Component? sdk;
+  Component? component;
+  Component? component2;
+  Component? component3;
 
   String doStringReplacements(String input) {
     Version enableNonNullableVersion =
-        experimentEnabledVersion[ExperimentalFlag.nonNullable];
+        experimentEnabledVersion[ExperimentalFlag.nonNullable]!;
     String output = input.replaceAll("%NNBD_VERSION_MARKER%",
         "${enableNonNullableVersion.major}.${enableNonNullableVersion.minor}");
     return output;
@@ -379,18 +389,18 @@
       TestData data,
       Context context,
       List worlds,
-      Map modules,
-      bool omitPlatform,
-      String targetName,
+      Map? modules,
+      bool? omitPlatform,
+      String? targetName,
       bool forceLateLoweringForTesting,
       bool trackWidgetCreation,
-      bool incrementalSerialization,
+      bool? incrementalSerialization,
       NnbdMode nnbdMode) async {
     final Uri sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
 
-    TargetFlags targetFlags = new TargetFlags(
+    TestTargetFlags targetFlags = new TestTargetFlags(
         forceLateLoweringsForTesting:
-            forceLateLoweringForTesting ? LateLowering.all : LateLowering.none,
+            forceLateLoweringForTesting ? LateLowering.all : null,
         trackWidgetCreation: trackWidgetCreation);
     Target target = new VmTarget(targetFlags);
     if (targetName != null) {
@@ -406,12 +416,13 @@
         throw "Unknown target name '$targetName'";
       }
     }
+    target = new TestTargetWrapper(target, targetFlags);
 
     String sdkSummary = computePlatformDillName(
         target,
         nnbdMode,
         () => throw new UnsupportedError(
-            "No platform dill for target '${targetName}' with $nnbdMode."));
+            "No platform dill for target '${targetName}' with $nnbdMode."))!;
 
     final Uri base = Uri.parse("org-dartlang-test:///");
     final Uri sdkSummaryUri = base.resolve(sdkSummary);
@@ -420,15 +431,15 @@
     final List<int> sdkSummaryData =
         await new File.fromUri(platformUri).readAsBytes();
 
-    List<int> newestWholeComponentData;
-    MemoryFileSystem fs;
-    Map<String, String> sourceFiles;
-    CompilerOptions options;
-    TestIncrementalCompiler compiler;
-    IncrementalSerializer incrementalSerializer;
+    List<int>? newestWholeComponentData;
+    MemoryFileSystem? fs;
+    Map<String, String?>? sourceFiles;
+    CompilerOptions? options;
+    TestIncrementalCompiler? compiler;
+    IncrementalSerializer? incrementalSerializer;
 
-    Map<String, List<int>> moduleData;
-    Map<String, Component> moduleComponents;
+    Map<String, List<int>>? moduleData;
+    Map<String, Component>? moduleComponents;
 
     if (modules != null) {
       moduleData =
@@ -436,7 +447,7 @@
       sdk = newestWholeComponent = new Component();
       new BinaryBuilder(sdkSummaryData,
               filename: null, disableLazyReading: false)
-          .readComponent(newestWholeComponent);
+          .readComponent(newestWholeComponent!);
     }
 
     int worldNum = 0;
@@ -447,27 +458,27 @@
       print("----------------");
       print("World #$worldNum");
       print("----------------");
-      List<Component> modulesToUse;
+      List<Component>? modulesToUse;
       if (world["modules"] != null) {
         moduleComponents ??= new Map<String, Component>();
 
-        sdk.adoptChildren();
+        sdk!.adoptChildren();
         for (Component c in moduleComponents.values) {
           c.adoptChildren();
         }
 
         modulesToUse = <Component>[];
         for (String moduleName in world["modules"]) {
-          Component moduleComponent = moduleComponents[moduleName];
+          Component? moduleComponent = moduleComponents[moduleName];
           if (moduleComponent != null) {
             modulesToUse.add(moduleComponent);
           }
         }
         for (String moduleName in world["modules"]) {
-          Component moduleComponent = moduleComponents[moduleName];
+          Component? moduleComponent = moduleComponents[moduleName];
           if (moduleComponent == null) {
-            moduleComponent = new Component(nameRoot: sdk.root);
-            new BinaryBuilder(moduleData[moduleName],
+            moduleComponent = new Component(nameRoot: sdk!.root);
+            new BinaryBuilder(moduleData![moduleName]!,
                     filename: null,
                     disableLazyReading: false,
                     alwaysCreateNewNamedNodes: true)
@@ -490,7 +501,7 @@
       if (brandNewWorld) {
         fs = new MemoryFileSystem(base);
       }
-      fs.entityForUri(sdkSummaryUri).writeAsBytesSync(sdkSummaryData);
+      fs!.entityForUri(sdkSummaryUri).writeAsBytesSync(sdkSummaryData);
       bool expectInitializeFromDill = false;
       if (newestWholeComponentData != null &&
           newestWholeComponentData.isNotEmpty) {
@@ -503,12 +514,12 @@
         expectInitializeFromDill = world["expectInitializeFromDill"];
       }
       if (brandNewWorld) {
-        sourceFiles = new Map<String, String>.from(world["sources"]);
+        sourceFiles = new Map<String, String?>.from(world["sources"]);
       } else {
-        sourceFiles.addAll(new Map<String, String>.from(
-            world["sources"] ?? <String, String>{}));
+        sourceFiles!.addAll(new Map<String, String?>.from(
+            world["sources"] ?? <String, String?>{}));
       }
-      Uri packagesUri;
+      Uri? packagesUri;
       for (String filename in sourceFiles.keys) {
         String data = sourceFiles[filename] ?? "";
         Uri uri = base.resolve(filename);
@@ -541,17 +552,13 @@
               parseExperimentalArguments([world["experiments"]]);
           // Ensure that we run with non-nullable turned off even when the
           // flag is on by default.
-          // TODO(johnniwinther,jensj): Update tests to explicitly opt out.
-          flagsFromOptions['non-nullable'] ??= false;
           Map<ExperimentalFlag, bool> explicitExperimentalFlags =
               parseExperimentalFlags(flagsFromOptions,
                   onError: (e) =>
                       throw "Error on parsing experiments flags: $e");
           options.explicitExperimentalFlags = explicitExperimentalFlags;
         } else {
-          options.explicitExperimentalFlags = {
-            ExperimentalFlag.nonNullable: false
-          };
+          options.explicitExperimentalFlags = {};
         }
         // A separate "world" can also change nnbd mode ---
         // notice that the platform is not updated though!
@@ -567,7 +574,7 @@
         }
       }
       if (packagesUri != null) {
-        options.packagesFileUri = packagesUri;
+        options!.packagesFileUri = packagesUri;
       }
       bool gotError = false;
       final Set<String> formattedErrors = Set<String>();
@@ -575,8 +582,8 @@
       final Set<String> formattedWarnings = Set<String>();
       final Set<String> seenDiagnosticCodes = Set<String>();
 
-      options.onDiagnostic = (DiagnosticMessage message) {
-        String code = getMessageCodeObject(message)?.name;
+      options!.onDiagnostic = (DiagnosticMessage message) {
+        String? code = getMessageCodeObject(message)?.name;
         if (code != null) seenDiagnosticCodes.add(code);
 
         String stringId = message.ansiFormatted.join("\n");
@@ -637,24 +644,24 @@
         for (String filename in world["invalidate"]) {
           Uri uri = base.resolve(filename);
           invalidated.add(uri);
-          compiler.invalidate(uri);
+          compiler!.invalidate(uri);
         }
       }
 
       if (modulesToUse != null) {
-        compiler.setModulesToLoadOnNextComputeDelta(modulesToUse);
+        compiler!.setModulesToLoadOnNextComputeDelta(modulesToUse);
         compiler.invalidateAllSources();
         compiler.trackNeededDillLibraries = true;
       }
 
       Stopwatch stopwatch = new Stopwatch()..start();
-      component = await compiler.computeDelta(
+      component = await compiler!.computeDelta(
           entryPoints: entries,
           fullComponent:
               brandNewWorld ? false : (noFullComponent ? false : true),
           simulateTransformer: world["simulateTransformer"]);
       if (outlineOnly && !skipOutlineBodyCheck) {
-        for (Library lib in component.libraries) {
+        for (Library lib in component!.libraries) {
           for (Class c in lib.classes) {
             for (Procedure p in c.procedures) {
               if (p.function.body != null &&
@@ -670,7 +677,7 @@
           }
         }
       }
-      Result<TestData> result = performErrorAndWarningCheck(world, data,
+      Result<TestData>? result = performErrorAndWarningCheck(world, data,
           gotError, formattedErrors, gotWarning, formattedWarnings);
       if (result != null) return result;
       if (world["expectInitializationError"] != null) {
@@ -698,59 +705,59 @@
               "${world["expectInitializationError"]}";
         }
       }
-      util.throwOnEmptyMixinBodies(component);
-      await util.throwOnInsufficientUriToSource(component,
+      util.throwOnEmptyMixinBodies(component!);
+      await util.throwOnInsufficientUriToSource(component!,
           fileSystem: gotError ? null : fs);
       print("Compile took ${stopwatch.elapsedMilliseconds} ms");
 
-      Result contentResult = checkExpectedContent(world, component);
+      Result? contentResult = checkExpectedContent(world, component!);
       if (contentResult != null) return contentResult.copyWithOutput(data);
       result = checkNeededDillLibraries(
           world, data, compiler.neededDillLibraries, base);
       if (result != null) return result;
 
-      Result nnbdCheck = checkNNBDSettings(component);
+      Result? nnbdCheck = checkNNBDSettings(component!);
       if (nnbdCheck != null) return nnbdCheck.copyWithOutput(data);
 
       if (!noFullComponent) {
         Set<Library> allLibraries = new Set<Library>();
-        for (Library lib in component.libraries) {
+        for (Library lib in component!.libraries) {
           computeAllReachableLibrariesFor(lib, allLibraries);
         }
-        if (allLibraries.length != component.libraries.length) {
+        if (allLibraries.length != component!.libraries.length) {
           return new Result<TestData>(
               data,
               ReachableLibrariesError,
               "Expected for the reachable stuff to be equal to "
-              "${component.libraries} but it was $allLibraries");
+              "${component!.libraries} but it was $allLibraries");
         }
         Set<Library> tooMany = allLibraries.toSet()
-          ..removeAll(component.libraries);
+          ..removeAll(component!.libraries);
         if (tooMany.isNotEmpty) {
           return new Result<TestData>(
               data,
               ReachableLibrariesError,
               "Expected for the reachable stuff to be equal to "
-              "${component.libraries} but these were there too: $tooMany "
+              "${component!.libraries} but these were there too: $tooMany "
               "(and others were missing)");
         }
       }
 
-      newestWholeComponentData = util.postProcess(component);
+      newestWholeComponentData = util.postProcess(component!);
       newestWholeComponent = component;
-      String actualSerialized = componentToStringSdkFiltered(component);
+      String actualSerialized = componentToStringSdkFiltered(component!);
       print("*****\n\ncomponent:\n"
           "${actualSerialized}\n\n\n");
 
       if (world["uriToSourcesDoesntInclude"] != null) {
         for (String filename in world["uriToSourcesDoesntInclude"]) {
           Uri uri = base.resolve(filename);
-          if (component.uriToSource[uri] != null) {
+          if (component!.uriToSource[uri] != null) {
             return new Result<TestData>(
                 data,
                 UriToSourceError,
                 "Expected no uriToSource for $uri but found "
-                "${component.uriToSource[uri]}");
+                "${component!.uriToSource[uri]}");
           }
         }
       }
@@ -760,16 +767,17 @@
           Uri uri = base.resolve(filename);
           allowed.add(uri);
         }
-        for (Uri uri in component.uriToSource.keys) {
+        for (Uri uri in component!.uriToSource.keys) {
           // null is always there, so allow it implicitly.
           // Dart scheme uris too.
+          // ignore: unnecessary_null_comparison
           if (uri == null || uri.scheme == "org-dartlang-sdk") continue;
           if (!allowed.contains(uri)) {
             return new Result<TestData>(
                 data,
                 UriToSourceError,
                 "Expected no uriToSource for $uri but found "
-                "${component.uriToSource[uri]}");
+                "${component!.uriToSource[uri]}");
           }
         }
       }
@@ -778,14 +786,14 @@
       if (result != null) return result;
       if (world["skipClassHierarchyTest"] != true) {
         result =
-            checkClassHierarchy(compiler, component, data, worldNum, context);
+            checkClassHierarchy(compiler, component!, data, worldNum, context);
         if (result != null) return result;
       }
 
-      int nonSyntheticLibraries = countNonSyntheticLibraries(component);
+      int nonSyntheticLibraries = countNonSyntheticLibraries(component!);
       int nonSyntheticPlatformLibraries =
-          countNonSyntheticPlatformLibraries(component);
-      int syntheticLibraries = countSyntheticLibraries(component);
+          countNonSyntheticPlatformLibraries(component!);
+      int syntheticLibraries = countSyntheticLibraries(component!);
       if (world["expectsPlatform"] == true) {
         if (nonSyntheticPlatformLibraries < 5) {
           return new Result<TestData>(
@@ -827,7 +835,7 @@
       }
 
       if (world["expectsRebuildBodiesOnly"] != null) {
-        bool didRebuildBodiesOnly = compiler.rebuildBodiesCount > 0;
+        bool didRebuildBodiesOnly = compiler.rebuildBodiesCount! > 0;
         if (world["expectsRebuildBodiesOnly"] != didRebuildBodiesOnly) {
           return new Result<TestData>(
               data,
@@ -840,7 +848,7 @@
 
       if (!noFullComponent) {
         if (world["checkEntries"] != false) {
-          List<Library> entryLib = component.libraries
+          List<Library> entryLib = component!.libraries
               .where((Library lib) =>
                   entries.contains(lib.importUri) ||
                   entries.contains(lib.fileUri))
@@ -871,27 +879,27 @@
       }
 
       if (world["checkInvalidatedFiles"] != false) {
-        Set<Uri> filteredInvalidated =
+        Set<Uri>? filteredInvalidated =
             compiler.getFilteredInvalidatedImportUrisForTesting(invalidated);
         if (world["invalidate"] != null) {
           Expect.equals(
               world["invalidate"].length, filteredInvalidated?.length ?? 0);
-          List expectedInvalidatedUri = world["expectedInvalidatedUri"];
+          List? expectedInvalidatedUri = world["expectedInvalidatedUri"];
           if (expectedInvalidatedUri != null) {
             Expect.setEquals(expectedInvalidatedUri.map((s) => base.resolve(s)),
-                filteredInvalidated);
+                filteredInvalidated!);
           }
         } else {
           Expect.isNull(filteredInvalidated);
           Expect.isNull(world["expectedInvalidatedUri"]);
         }
       }
-      Result<List<int>> serializationResult = checkIncrementalSerialization(
-          incrementalSerialization, component, incrementalSerializer, world);
+      Result<List<int>?> serializationResult = checkIncrementalSerialization(
+          incrementalSerialization, component!, incrementalSerializer, world);
       if (!serializationResult.isPass) {
         return serializationResult.copyWithOutput(data);
       }
-      List<int> incrementalSerializationBytes = serializationResult.output;
+      List<int>? incrementalSerializationBytes = serializationResult.output;
 
       worldErrors.add(formattedErrors.toSet());
       assert(worldErrors.length == worldNum);
@@ -908,7 +916,7 @@
       Set<String> prevFormattedErrors = formattedErrors.toSet();
       Set<String> prevFormattedWarnings = formattedWarnings.toSet();
 
-      clearPrevErrorsEtc() {
+      void clearPrevErrorsEtc() {
         gotError = false;
         formattedErrors.clear();
         gotWarning = false;
@@ -921,23 +929,26 @@
             entryPoints: entries,
             fullComponent: true,
             simulateTransformer: world["simulateTransformer"]);
-        Result<TestData> result = performErrorAndWarningCheck(world, data,
+        Result<TestData>? result = performErrorAndWarningCheck(world, data,
             gotError, formattedErrors, gotWarning, formattedWarnings);
         if (result != null) return result;
-        List<int> thisWholeComponent = util.postProcess(component2);
+        List<int> thisWholeComponent = util.postProcess(component2!);
         print("*****\n\ncomponent2:\n"
-            "${componentToStringSdkFiltered(component2)}\n\n\n");
+            "${componentToStringSdkFiltered(component2!)}\n\n\n");
         checkIsEqual(newestWholeComponentData, thisWholeComponent);
         checkErrorsAndWarnings(prevFormattedErrors, formattedErrors,
             prevFormattedWarnings, formattedWarnings);
         newestWholeComponent = component2;
 
-        Result<List<int>> serializationResult = checkIncrementalSerialization(
-            incrementalSerialization, component2, incrementalSerializer, world);
+        Result<List<int>?> serializationResult = checkIncrementalSerialization(
+            incrementalSerialization,
+            component2!,
+            incrementalSerializer,
+            world);
         if (!serializationResult.isPass) {
           return serializationResult.copyWithOutput(data);
         }
-        List<int> incrementalSerializationBytes2 = serializationResult.output;
+        List<int>? incrementalSerializationBytes2 = serializationResult.output;
 
         if ((incrementalSerializationBytes == null &&
                 incrementalSerializationBytes2 != null) ||
@@ -952,7 +963,7 @@
 
         if (incrementalSerializationBytes != null) {
           checkIsEqual(
-              incrementalSerializationBytes, incrementalSerializationBytes2);
+              incrementalSerializationBytes, incrementalSerializationBytes2!);
         }
       }
 
@@ -971,8 +982,8 @@
           bool expectWarnings = compilation["warnings"] ?? false;
           Uri uri = base.resolve(compilation["uri"]);
           String expression = compilation["expression"];
-          Procedure procedure = await compiler.compileExpression(
-              expression, {}, [], "debugExpr", uri);
+          Procedure procedure = (await compiler.compileExpression(
+              expression, {}, [], "debugExpr", uri))!;
           if (gotError && !expectErrors) {
             return new Result<TestData>(data, UnexpectedErrors,
                 "Got error(s) on expression compilation: ${formattedErrors}.");
@@ -990,7 +1001,7 @@
             return new Result<TestData>(
                 data, MissingWarnings, "Didn't get any warnings.");
           }
-          Result<TestData> result = checkExpectFile(
+          Result<TestData>? result = checkExpectFile(
               data,
               worldNum,
               ".expression.$expressionCompilationNum",
@@ -1005,9 +1016,9 @@
               world["compareWithFromScratch"] == true)) {
         // Do compile from scratch and compare.
         clearPrevErrorsEtc();
-        TestIncrementalCompiler compilerFromScratch;
+        TestIncrementalCompiler? compilerFromScratch;
 
-        IncrementalSerializer incrementalSerializer2;
+        IncrementalSerializer? incrementalSerializer2;
         if (incrementalSerialization == true) {
           incrementalSerializer2 = new IncrementalSerializer();
         }
@@ -1031,31 +1042,31 @@
             entryPoints: entries,
             simulateTransformer: world["simulateTransformer"]);
         compilerFromScratch = null;
-        Result<TestData> result = performErrorAndWarningCheck(world, data,
+        Result<TestData>? result = performErrorAndWarningCheck(world, data,
             gotError, formattedErrors, gotWarning, formattedWarnings);
         if (result != null) return result;
-        util.throwOnEmptyMixinBodies(component3);
-        await util.throwOnInsufficientUriToSource(component3);
+        util.throwOnEmptyMixinBodies(component3!);
+        await util.throwOnInsufficientUriToSource(component3!);
         print("Compile took ${stopwatch.elapsedMilliseconds} ms");
 
-        List<int> thisWholeComponent = util.postProcess(component3);
+        List<int> thisWholeComponent = util.postProcess(component3!);
         print("*****\n\ncomponent3:\n"
-            "${componentToStringSdkFiltered(component3)}\n\n\n");
+            "${componentToStringSdkFiltered(component3!)}\n\n\n");
         if (world["compareWithFromScratch"] == true) {
           checkIsEqual(newestWholeComponentData, thisWholeComponent);
         }
         checkErrorsAndWarnings(prevFormattedErrors, formattedErrors,
             prevFormattedWarnings, formattedWarnings);
 
-        Result<List<int>> serializationResult = checkIncrementalSerialization(
+        Result<List<int>?> serializationResult = checkIncrementalSerialization(
             incrementalSerialization,
-            component3,
+            component3!,
             incrementalSerializer2,
             world);
         if (!serializationResult.isPass) {
           return serializationResult.copyWithOutput(data);
         }
-        List<int> incrementalSerializationBytes3 = serializationResult.output;
+        List<int>? incrementalSerializationBytes3 = serializationResult.output;
 
         if ((incrementalSerializationBytes == null &&
                 incrementalSerializationBytes3 != null) ||
@@ -1074,7 +1085,7 @@
             // (e.g. when the old one contains more, and the new one doesn't).
           } else {
             checkIsEqual(
-                incrementalSerializationBytes, incrementalSerializationBytes3);
+                incrementalSerializationBytes, incrementalSerializationBytes3!);
           }
           newestWholeComponentData = incrementalSerializationBytes;
         }
@@ -1098,7 +1109,7 @@
   }
 }
 
-Result checkNNBDSettings(Component component) {
+Result? checkNNBDSettings(Component component) {
   NonNullableByDefaultCompiledMode mode = component.mode;
   if (mode == NonNullableByDefaultCompiledMode.Invalid) return null;
   for (Library lib in component.libraries) {
@@ -1131,11 +1142,11 @@
   return null;
 }
 
-Result<TestData> checkExpectFile(TestData data, int worldNum,
+Result<TestData>? checkExpectFile(TestData data, int worldNum,
     String extraUriString, Context context, String actualSerialized) {
   Uri uri = data.loadedFrom.resolve(data.loadedFrom.pathSegments.last +
       ".world.$worldNum${extraUriString}.expect");
-  String expected;
+  String? expected;
   File file = new File.fromUri(uri);
   if (file.existsSync()) {
     expected = file.readAsStringSync();
@@ -1163,10 +1174,10 @@
 ///
 /// This has the option to do expect files, but it's disabled by default
 /// while we're trying to figure out if it's useful or not.
-Result<TestData> checkClassHierarchy(TestIncrementalCompiler compiler,
+Result<TestData>? checkClassHierarchy(TestIncrementalCompiler compiler,
     Component component, TestData data, int worldNum, Context context,
     {bool checkExpectFile: false}) {
-  ClassHierarchy classHierarchy = compiler.getClassHierarchy();
+  ClassHierarchy? classHierarchy = compiler.getClassHierarchy();
   if (classHierarchy is! ClosedWorldClassHierarchy) {
     return new Result<TestData>(
         data,
@@ -1175,7 +1186,7 @@
         "but it wasn't. It was ${classHierarchy.runtimeType}");
   }
   List<ForTestingClassInfo> classHierarchyData =
-      (classHierarchy as ClosedWorldClassHierarchy).getTestingClassInfo();
+      classHierarchy.getTestingClassInfo();
   Map<Class, ForTestingClassInfo> classHierarchyMap =
       new Map<Class, ForTestingClassInfo>();
   for (ForTestingClassInfo info in classHierarchyData) {
@@ -1194,17 +1205,17 @@
       sb.writeln("  - Class ${c.name}");
 
       Set<Class> checkedSupertypes = <Class>{};
-      Result<TestData> checkSupertype(Supertype supertype) {
+      Result<TestData>? checkSupertype(Supertype? supertype) {
         if (supertype == null) return null;
         Class superclass = supertype.classNode;
         if (checkedSupertypes.add(superclass)) {
-          Supertype asSuperClass =
+          Supertype? asSuperClass =
               classHierarchy.getClassAsInstanceOf(c, superclass);
           if (asSuperClass == null) {
             return new Result<TestData>(data, ClassHierarchyError,
                 "${superclass} not found as a superclass of $c");
           }
-          Result<TestData> result = checkSupertype(superclass.supertype);
+          Result<TestData>? result = checkSupertype(superclass.supertype);
           if (result != null) return result;
           result = checkSupertype(superclass.mixedInType);
           if (result != null) return result;
@@ -1216,10 +1227,10 @@
         return null;
       }
 
-      Result<TestData> result = checkSupertype(c.asThisSupertype);
+      Result<TestData>? result = checkSupertype(c.asThisSupertype);
       if (result != null) return result;
 
-      ForTestingClassInfo info = classHierarchyMap[c];
+      ForTestingClassInfo? info = classHierarchyMap[c];
       if (info == null) {
         return new Result<TestData>(data, ClassHierarchyError,
             "Didn't find any class hierarchy info for $c");
@@ -1227,12 +1238,12 @@
 
       if (info.lazyDeclaredGettersAndCalls != null) {
         sb.writeln("    - lazyDeclaredGettersAndCalls:");
-        for (Member member in info.lazyDeclaredGettersAndCalls) {
+        for (Member member in info.lazyDeclaredGettersAndCalls!) {
           sb.writeln("      - ${member.name.text}");
         }
 
         // Expect these to be the same as in the class.
-        Set<Member> members = info.lazyDeclaredGettersAndCalls.toSet();
+        Set<Member> members = info.lazyDeclaredGettersAndCalls!.toSet();
         for (Field f in c.fields) {
           if (f.isStatic) continue;
           if (!members.remove(f)) {
@@ -1264,12 +1275,12 @@
       }
       if (info.lazyDeclaredSetters != null) {
         sb.writeln("    - lazyDeclaredSetters:");
-        for (Member member in info.lazyDeclaredSetters) {
+        for (Member member in info.lazyDeclaredSetters!) {
           sb.writeln("      - ${member.name.text}");
         }
 
         // Expect these to be the same as in the class.
-        Set<Member> members = info.lazyDeclaredSetters.toSet();
+        Set<Member> members = info.lazyDeclaredSetters!.toSet();
         for (Field f in c.fields) {
           if (f.isStatic) continue;
           if (!f.hasSetter) continue;
@@ -1296,25 +1307,25 @@
       }
       if (info.lazyImplementedGettersAndCalls != null) {
         sb.writeln("    - lazyImplementedGettersAndCalls:");
-        for (Member member in info.lazyImplementedGettersAndCalls) {
+        for (Member member in info.lazyImplementedGettersAndCalls!) {
           sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyImplementedSetters != null) {
         sb.writeln("    - lazyImplementedSetters:");
-        for (Member member in info.lazyImplementedSetters) {
+        for (Member member in info.lazyImplementedSetters!) {
           sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyInterfaceGettersAndCalls != null) {
         sb.writeln("    - lazyInterfaceGettersAndCalls:");
-        for (Member member in info.lazyInterfaceGettersAndCalls) {
+        for (Member member in info.lazyInterfaceGettersAndCalls!) {
           sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyInterfaceSetters != null) {
         sb.writeln("    - lazyInterfaceSetters:");
-        for (Member member in info.lazyInterfaceSetters) {
+        for (Member member in info.lazyInterfaceSetters!) {
           sb.writeln("      - ${member.name.text}");
         }
       }
@@ -1324,7 +1335,7 @@
     String actualClassHierarchy = sb.toString();
     Uri uri = data.loadedFrom.resolve(data.loadedFrom.pathSegments.last +
         ".world.$worldNum.class_hierarchy.expect");
-    String expected;
+    String? expected;
     File file = new File.fromUri(uri);
     if (file.existsSync()) {
       expected = file.readAsStringSync();
@@ -1376,10 +1387,10 @@
   }
 }
 
-Result<List<int>> checkIncrementalSerialization(
-    bool incrementalSerialization,
+Result<List<int>?> checkIncrementalSerialization(
+    bool? incrementalSerialization,
     Component component,
-    IncrementalSerializer incrementalSerializer,
+    IncrementalSerializer? incrementalSerializer,
     YamlMap world) {
   if (incrementalSerialization == true) {
     Component c = new Component(nameRoot: component.root)
@@ -1389,7 +1400,7 @@
     Map<String, Set<String>> originalContent = buildMapOfContent(c);
     ByteSink sink = new ByteSink();
     int librariesBefore = c.libraries.length;
-    incrementalSerializer.writePackagesToSinkAndTrimComponent(c, sink);
+    incrementalSerializer!.writePackagesToSinkAndTrimComponent(c, sink);
     int librariesAfter = c.libraries.length;
     if (librariesAfter > librariesBefore) {
       return new Result<List<int>>(null, IncrementalSerializationError,
@@ -1451,20 +1462,20 @@
       for (String key in newKeys) {
         afterContent.remove(key);
       }
-      Result result = checkExpectedContentData(afterContent, originalContent);
-      if (result != null) return result.copyWithOutput<List<int>>(null);
+      Result? result = checkExpectedContentData(afterContent, originalContent);
+      if (result != null) return result.copyWithOutput<List<int>?>(null);
 
       // Check that the result is self-contained.
       result = checkSelfContained(loadedComponent);
-      if (result != null) return result.copyWithOutput<List<int>>(null);
+      if (result != null) return result.copyWithOutput<List<int>?>(null);
 
       return new Result<List<int>>.pass(bytes);
     }
   }
-  return new Result<List<int>>.pass(null);
+  return new Result<List<int>?>.pass(null);
 }
 
-Result checkSelfContained(Component component) {
+Result? checkSelfContained(Component component) {
   Set<Library> got = new Set<Library>.from(component.libraries);
   for (Library lib in component.libraries) {
     for (LibraryDependency dependency in lib.dependencies) {
@@ -1504,7 +1515,7 @@
   }
 }
 
-Result checkExpectedContent(YamlMap world, Component component) {
+Result? checkExpectedContent(YamlMap world, Component component) {
   if (world["expectedContent"] != null) {
     Map<String, Set<String>> actualContent = buildMapOfContent(component);
     Map expectedContent = world["expectedContent"];
@@ -1513,7 +1524,7 @@
   return null;
 }
 
-Result checkExpectedContentData(
+Result? checkExpectedContentData(
     Map<String, Set<String>> actualContent, Map expectedContent) {
   Result<TestData> createFailureResult() {
     return new Result(
@@ -1534,7 +1545,7 @@
   }
   for (String key in expectedContent.keys) {
     Set<String> expected = new Set<String>.from(expectedContent[key]);
-    Set<String> actual = actualContent[key].toSet();
+    Set<String> actual = actualContent[key]!.toSet();
     if (expected.length != actual.length) {
       return createFailureResult();
     }
@@ -1564,11 +1575,11 @@
   return actualContent;
 }
 
-Result<TestData> checkNeededDillLibraries(
-    YamlMap world, TestData data, Set<Library> neededDillLibraries, Uri base) {
+Result<TestData>? checkNeededDillLibraries(
+    YamlMap world, TestData data, Set<Library>? neededDillLibraries, Uri base) {
   if (world["neededDillLibraries"] != null) {
     List<Uri> actualContent = <Uri>[];
-    for (Library lib in neededDillLibraries) {
+    for (Library lib in neededDillLibraries!) {
       if (lib.importUri.scheme == "dart") continue;
       actualContent.add(lib.importUri);
     }
@@ -1661,7 +1672,7 @@
   return result;
 }
 
-Result<TestData> performErrorAndWarningCheck(
+Result<TestData>? performErrorAndWarningCheck(
     YamlMap world,
     TestData data,
     bool gotError,
@@ -1715,7 +1726,7 @@
   Expect.equals(a.length, b.length);
 }
 
-CompilerOptions getOptions({Target target, String sdkSummary}) {
+CompilerOptions getOptions({Target? target, String? sdkSummary}) {
   target ??= new VmTarget(new TargetFlags());
   sdkSummary ??= 'vm_platform_strong.dill';
   final Uri sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
@@ -1737,7 +1748,7 @@
 }
 
 Future<bool> normalCompile(Uri input, Uri output,
-    {CompilerOptions options}) async {
+    {CompilerOptions? options}) async {
   options ??= getOptions();
   TestIncrementalCompiler compiler =
       new TestIncrementalCompiler(options, input);
@@ -1748,14 +1759,14 @@
 }
 
 Future<List<int>> normalCompileToBytes(Uri input,
-    {CompilerOptions options, IncrementalCompiler compiler}) async {
+    {CompilerOptions? options, IncrementalCompiler? compiler}) async {
   Component component = await normalCompileToComponent(input,
       options: options, compiler: compiler);
   return util.postProcess(component);
 }
 
 Future<Component> normalCompileToComponent(Uri input,
-    {CompilerOptions options, IncrementalCompiler compiler}) async {
+    {CompilerOptions? options, IncrementalCompiler? compiler}) async {
   Component component =
       await normalCompilePlain(input, options: options, compiler: compiler);
   util.throwOnEmptyMixinBodies(component);
@@ -1764,7 +1775,7 @@
 }
 
 Future<Component> normalCompilePlain(Uri input,
-    {CompilerOptions options, IncrementalCompiler compiler}) async {
+    {CompilerOptions? options, IncrementalCompiler? compiler}) async {
   options ??= getOptions();
   compiler ??= new TestIncrementalCompiler(options, input);
   return await compiler.computeDelta();
@@ -1772,7 +1783,7 @@
 
 Future<bool> initializedCompile(
     Uri input, Uri output, Uri initializeWith, List<Uri> invalidateUris,
-    {CompilerOptions options}) async {
+    {CompilerOptions? options}) async {
   options ??= getOptions();
   TestIncrementalCompiler compiler =
       new TestIncrementalCompiler(options, input, initializeWith);
@@ -1840,8 +1851,8 @@
 }
 
 class TestIncrementalCompiler extends IncrementalCompiler {
-  Set<Uri> invalidatedImportUrisForTesting;
-  int rebuildBodiesCount;
+  Set<Uri>? invalidatedImportUrisForTesting;
+  int? rebuildBodiesCount;
   final Uri entryPoint;
 
   /// Filter out the automatically added entryPoint, unless it's explicitly
@@ -1849,14 +1860,14 @@
   /// Also filter out uris with "nonexisting.dart" in the name as synthetic
   /// libraries are invalidated automatically too.
   /// This is not perfect, but works for what it's currently used for.
-  Set<Uri> getFilteredInvalidatedImportUrisForTesting(
+  Set<Uri>? getFilteredInvalidatedImportUrisForTesting(
       List<Uri> invalidatedUris) {
     if (invalidatedImportUrisForTesting == null) return null;
 
     Set<String> invalidatedFilenames =
         invalidatedUris.map((uri) => uri.pathSegments.last).toSet();
     Set<Uri> result = new Set<Uri>();
-    for (Uri uri in invalidatedImportUrisForTesting) {
+    for (Uri uri in invalidatedImportUrisForTesting!) {
       if (uri.pathSegments.isNotEmpty &&
           uri.pathSegments.last == "nonexisting.dart") {
         continue;
@@ -1871,9 +1882,9 @@
   }
 
   TestIncrementalCompiler(CompilerOptions options, this.entryPoint,
-      [Uri initializeFrom,
-      bool outlineOnly,
-      IncrementalSerializer incrementalSerializer])
+      [Uri? initializeFrom,
+      bool? outlineOnly,
+      IncrementalSerializer? incrementalSerializer])
       : super(
             new CompilerContext(
                 new ProcessedOptions(options: options, inputs: [entryPoint])),
@@ -1882,8 +1893,8 @@
             incrementalSerializer);
 
   TestIncrementalCompiler.fromComponent(CompilerOptions options,
-      this.entryPoint, Component componentToInitializeFrom,
-      [bool outlineOnly, IncrementalSerializer incrementalSerializer])
+      this.entryPoint, Component? componentToInitializeFrom,
+      [bool? outlineOnly, IncrementalSerializer? incrementalSerializer])
       : super.fromComponent(
             new CompilerContext(
                 new ProcessedOptions(options: options, inputs: [entryPoint])),
@@ -1914,14 +1925,14 @@
 
   @override
   Future<Component> computeDelta(
-      {List<Uri> entryPoints,
+      {List<Uri>? entryPoints,
       bool fullComponent = false,
-      bool simulateTransformer}) async {
+      bool? simulateTransformer}) async {
     Component result = await super
         .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.builders.keys
         .map((uri) => uri.toString())
         .contains("dart:core")) {
       throw "Loaders builder should contain the sdk, "
@@ -1934,6 +1945,7 @@
     return result;
   }
 
+  @override
   void recordTemporaryFileForTesting(Uri uri) {
     File f = new File.fromUri(uri);
     if (f.existsSync()) f.deleteSync();
@@ -1951,7 +1963,7 @@
         isFinal: true,
         getterReference: lib.reference.canonicalName
             ?.getChildFromFieldWithName(fieldName)
-            ?.reference,
+            .reference,
         fileUri: lib.fileUri);
     lib.addField(field);
     for (Class c in lib.classes) {
@@ -1964,7 +1976,7 @@
           isFinal: true,
           getterReference: c.reference.canonicalName
               ?.getChildFromFieldWithName(fieldName)
-              ?.reference,
+              .reference,
           fileUri: c.fileUri);
       c.addField(field);
     }
diff --git a/pkg/front_end/test/incremental_utils.dart b/pkg/front_end/test/incremental_utils.dart
index 0d7251b..8a46cd6 100644
--- a/pkg/front_end/test/incremental_utils.dart
+++ b/pkg/front_end/test/incremental_utils.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:convert' show utf8;
 
 import "package:front_end/src/api_prototype/file_system.dart" show FileSystem;
@@ -64,7 +62,7 @@
 }
 
 Future<void> throwOnInsufficientUriToSource(Component component,
-    {FileSystem fileSystem}) async {
+    {FileSystem? fileSystem}) async {
   UriFinder uriFinder = new UriFinder();
   component.accept(uriFinder);
   Set<Uri> uris = uriFinder.seenUris.toSet();
@@ -77,13 +75,14 @@
   if (fileSystem != null) {
     uris = uriFinder.seenUris.toSet();
     for (Uri uri in uris) {
+      // ignore: unnecessary_null_comparison
       if (uri == null) continue;
       if (uri.scheme != "org-dartlang-test") continue;
       // The file system doesn't have the sources for any modules.
       // For now assume that that is always what's going on.
       if (!await fileSystem.entityForUri(uri).exists()) continue;
       List<int> expected = await fileSystem.entityForUri(uri).readAsBytes();
-      List<int> actual = component.uriToSource[uri].source;
+      List<int> actual = component.uriToSource[uri]!.source;
       bool fail = false;
       if (expected.length != actual.length) {
         fail = true;
@@ -110,7 +109,8 @@
 
 class UriFinder extends RecursiveVisitor {
   Set<Uri> seenUris = new Set<Uri>();
-  defaultNode(Node node) {
+  @override
+  void defaultNode(Node node) {
     super.defaultNode(node);
     if (node is FileUriNode) {
       seenUris.add(node.fileUri);
diff --git a/pkg/front_end/test/issue_34856_test.dart b/pkg/front_end/test/issue_34856_test.dart
index 396a0bb..d291270 100644
--- a/pkg/front_end/test/issue_34856_test.dart
+++ b/pkg/front_end/test/issue_34856_test.dart
@@ -106,6 +106,6 @@
   }
 }
 
-main() {
+void main() {
   asyncTest(test);
 }
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index 209e853..cf8ce12 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -34,7 +34,7 @@
         invalidCoreLibsSpecUri,
         isDartCoreLibrary;
 
-main() {
+void main() {
   group('kernelForProgram', () {
     test('compiler fails if it cannot find sdk sources', () async {
       var errors = [];
diff --git a/pkg/front_end/test/language_versioning/language_versioning_test.dart b/pkg/front_end/test/language_versioning/language_versioning_test.dart
index 72dc28e..c1a9f1c 100644
--- a/pkg/front_end/test/language_versioning/language_versioning_test.dart
+++ b/pkg/front_end/test/language_versioning/language_versioning_test.dart
@@ -26,7 +26,7 @@
 
 import 'package:kernel/ast.dart' show Component, Library, Version;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   // Fix default/max major and minor version so we can test it.
   // This config sets it to 2.8.
   TestConfigWithLanguageVersion cfeConfig =
@@ -83,6 +83,7 @@
 class LanguageVersioningDataComputer extends DataComputer<Features> {
   const LanguageVersioningDataComputer();
 
+  @override
   Future<void> inspectComponent(Component component) async {
     for (Library library in component.libraries) {
       if (library.importUri.scheme == "dart") continue;
@@ -103,6 +104,7 @@
     }
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -116,6 +118,7 @@
   @override
   bool get supportsErrors => true;
 
+  @override
   Features computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     Features features = new Features();
diff --git a/pkg/front_end/test/language_versioning/language_versioning_up_to_date_git_test.dart b/pkg/front_end/test/language_versioning/language_versioning_up_to_date_git_test.dart
index d79b1fd..09ddce5 100644
--- a/pkg/front_end/test/language_versioning/language_versioning_up_to_date_git_test.dart
+++ b/pkg/front_end/test/language_versioning/language_versioning_up_to_date_git_test.dart
@@ -16,7 +16,7 @@
 
 String get dartVm => Platform.executable;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   ProcessResult result = await Process.run(
       "python3", ["tools/make_version.py", "--no_git", "-q"],
       workingDirectory: repoDir);
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index d5b0da7..8e11c97 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -22,6 +22,8 @@
 
 import 'package:front_end/src/fasta/command_line_reporting.dart'
     as command_line_reporting;
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    show useImplicitCreationExpressionInCfe;
 
 import 'package:kernel/kernel.dart';
 
@@ -32,7 +34,7 @@
 
 import 'testing_utils.dart' show checkEnvironment, getGitFiles;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
@@ -45,7 +47,9 @@
 }
 
 class LintTestDescription extends TestDescription {
+  @override
   final String shortName;
+  @override
   final Uri uri;
   final LintTestCache cache;
   final LintListener listener;
@@ -79,6 +83,7 @@
   final bool onlyInGit;
   Context({this.onlyInGit});
 
+  @override
   final List<Step> steps = const <Step>[
     const LintStep(),
   ];
@@ -90,6 +95,7 @@
     return result;
   }
 
+  @override
   Stream<LintTestDescription> list(Chain suite) async* {
     Set<Uri> gitFiles;
     if (onlyInGit) {
@@ -146,8 +152,10 @@
 class LintStep extends Step<LintTestDescription, LintTestDescription, Context> {
   const LintStep();
 
+  @override
   String get name => "lint";
 
+  @override
   Future<Result<LintTestDescription>> run(
       LintTestDescription description, Context context) async {
     if (description.cache.rawBytes == null) {
@@ -185,7 +193,8 @@
       return crash(description, StackTrace.current);
     }
 
-    Parser parser = new Parser(description.listener);
+    Parser parser = new Parser(description.listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     parser.parseUnit(description.cache.firstToken);
 
     if (description.listener.problems.isEmpty) {
@@ -198,9 +207,10 @@
 class LintListener extends Listener {
   List<String> problems = <String>[];
   LintTestDescription description;
+  @override
   Uri uri;
 
-  onProblem(int offset, int squigglyLength, String message) {
+  void onProblem(int offset, int squigglyLength, String message) {
     problems.add(description.getErrorMessage(offset, squigglyLength, message));
   }
 }
@@ -232,6 +242,7 @@
     _latestTypes.add(new LatestType(functionToken, true));
   }
 
+  @override
   void endTopLevelFields(
       Token externalToken,
       Token staticToken,
@@ -247,6 +258,7 @@
     _latestTypes.removeLast();
   }
 
+  @override
   void endClassFields(
       Token abstractToken,
       Token externalToken,
@@ -264,6 +276,7 @@
     _latestTypes.removeLast();
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
@@ -286,6 +299,7 @@
 class ImportsTwiceLintListener extends LintListener {
   Set<Uri> seenImports = new Set<Uri>();
 
+  @override
   void endImport(Token importKeyword, Token semicolon) {
     Token importUriToken = importKeyword.next;
     String importUri = importUriToken.lexeme;
@@ -308,6 +322,7 @@
 }
 
 class ExportsLintListener extends LintListener {
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     Token exportUriToken = exportKeyword.next;
     String exportUri = exportUriToken.lexeme;
diff --git a/pkg/front_end/test/lint_test.status b/pkg/front_end/test/lint_test.status
index 25fc133..83361a2 100644
--- a/pkg/front_end/test/lint_test.status
+++ b/pkg/front_end/test/lint_test.status
@@ -33,7 +33,6 @@
 front_end/lib/src/fasta/scanner/token/ImportsTwice: Fail
 front_end/lib/src/fasta/scanner/utf8_bytes_scanner/ImportsTwice: Fail
 front_end/lib/src/fasta/source/scope_listener/Exports: Fail
-front_end/lib/src/fasta/source/source_class_builder/ImportsTwice: Fail
 front_end/lib/src/fasta/source/value_kinds/ImportsTwice: Fail
 front_end/lib/src/testing/id_testing_helper/Exports: Fail
 kernel/lib/ast/Exports: Fail
diff --git a/pkg/front_end/test/member_covariance_test.dart b/pkg/front_end/test/member_covariance_test.dart
index aadc962..93ff6e4 100644
--- a/pkg/front_end/test/member_covariance_test.dart
+++ b/pkg/front_end/test/member_covariance_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/ast.dart';
 import 'package:front_end/src/fasta/kernel/member_covariance.dart';
 
-main() {
+void main() {
   void checkEquals(Covariance a, Covariance b) {
     Expect.equals(a, b);
     Expect.equals(a.hashCode, b.hashCode);
diff --git a/pkg/front_end/test/memory_file_system_test.dart b/pkg/front_end/test/memory_file_system_test.dart
index 802eace7..c5a743f 100644
--- a/pkg/front_end/test/memory_file_system_test.dart
+++ b/pkg/front_end/test/memory_file_system_test.dart
@@ -18,7 +18,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MemoryFileSystemTestNative);
     defineReflectiveTests(MemoryFileSystemTestPosix);
@@ -35,108 +35,108 @@
   String path;
   MemoryFileSystemEntity file;
 
-  setUp() {
+  void setUp() {
     _baseSetUp();
     path = join(tempPath, 'file.txt');
     file = entityForPath(path);
   }
 
-  test_createDirectory_doesNotExist() async {
+  void test_createDirectory_doesNotExist() async {
     file.createDirectory();
     expect(await file.exists(), true);
   }
 
-  test_createDirectory_exists_asDirectory() async {
+  void test_createDirectory_exists_asDirectory() async {
     file.createDirectory();
     file.createDirectory();
     expect(await file.exists(), true);
   }
 
-  test_createDirectory_exists_asFile() async {
+  void test_createDirectory_exists_asFile() async {
     file.writeAsStringSync('');
     expect(() => file.createDirectory(), _throwsFileSystemException);
   }
 
-  test_equals_differentPaths() {
+  void test_equals_differentPaths() {
     expect(file == entityForPath(join(tempPath, 'file2.txt')), isFalse);
   }
 
-  test_equals_samePath() {
+  void test_equals_samePath() {
     expect(file == entityForPath(join(tempPath, 'file.txt')), isTrue);
   }
 
-  test_exists_directory_exists() async {
+  void test_exists_directory_exists() async {
     file.createDirectory();
     expect(await file.exists(), true);
   }
 
-  test_exists_doesNotExist() async {
+  void test_exists_doesNotExist() async {
     expect(await file.exists(), false);
   }
 
-  test_exists_file_exists() async {
+  void test_exists_file_exists() async {
     file.writeAsStringSync('x');
     expect(await file.exists(), true);
   }
 
-  test_hashCode_samePath() {
+  void test_hashCode_samePath() {
     expect(file.hashCode, entityForPath(join(tempPath, 'file.txt')).hashCode);
   }
 
-  test_path() {
+  void test_path() {
     expect(file.uri, context.toUri(path));
   }
 
-  test_readAsBytes_badUtf8() async {
+  void test_readAsBytes_badUtf8() async {
     // A file containing invalid UTF-8 can still be read as raw bytes.
     List<int> bytes = [0xc0, 0x40]; // Invalid UTF-8
     file.writeAsBytesSync(bytes);
     expect(await file.readAsBytes(), bytes);
   }
 
-  test_readAsBytes_doesNotExist() {
+  void test_readAsBytes_doesNotExist() {
     expect(file.readAsBytes(), _throwsFileSystemException);
   }
 
-  test_readAsBytes_exists() async {
+  void test_readAsBytes_exists() async {
     var s = 'contents';
     file.writeAsStringSync(s);
     expect(await file.readAsBytes(), utf8.encode(s));
   }
 
-  test_readAsString_badUtf8() {
+  void test_readAsString_badUtf8() {
     file.writeAsBytesSync([0xc0, 0x40]); // Invalid UTF-8
     expect(file.readAsString(), _throwsFileSystemException);
   }
 
-  test_readAsString_doesNotExist() {
+  void test_readAsString_doesNotExist() {
     expect(file.readAsString(), _throwsFileSystemException);
   }
 
-  test_readAsString_exists() async {
+  void test_readAsString_exists() async {
     var s = 'contents';
     file.writeAsStringSync(s);
     expect(await file.readAsString(), s);
   }
 
-  test_readAsString_utf8() async {
+  void test_readAsString_utf8() async {
     file.writeAsBytesSync([0xe2, 0x82, 0xac]); // Unicode € symbol, in UTF-8
     expect(await file.readAsString(), '\u20ac');
   }
 
-  test_writeAsBytesSync_directory() async {
+  void test_writeAsBytesSync_directory() async {
     file.createDirectory();
     expect(() => file.writeAsBytesSync([0]), _throwsFileSystemException);
   }
 
-  test_writeAsBytesSync_modifyAfterRead() async {
+  void test_writeAsBytesSync_modifyAfterRead() async {
     // For efficiency we do not make defensive copies.
     file.writeAsBytesSync([1]);
     (await file.readAsBytes())[0] = 2;
     expect(await file.readAsBytes(), [2]);
   }
 
-  test_writeAsBytesSync_modifyAfterWrite_Uint8List() async {
+  void test_writeAsBytesSync_modifyAfterWrite_Uint8List() async {
     // For efficiency we do not make defensive copies.
     var bytes = new Uint8List.fromList([1]);
     file.writeAsBytesSync(bytes);
@@ -144,7 +144,7 @@
     expect(await file.readAsBytes(), [2]);
   }
 
-  test_writeAsBytesSync_modifyAfterWrite() async {
+  void test_writeAsBytesSync_modifyAfterWrite() async {
     // For efficiency we generally do not make defensive copies, but on the
     // other hrand we keep everything as `Uint8List`s internally, so in this
     // case a copy is actually made.
@@ -154,24 +154,24 @@
     expect(await file.readAsBytes(), [1]);
   }
 
-  test_writeAsBytesSync_overwrite() async {
+  void test_writeAsBytesSync_overwrite() async {
     file.writeAsBytesSync([1]);
     file.writeAsBytesSync([2]);
     expect(await file.readAsBytes(), [2]);
   }
 
-  test_writeAsStringSync_directory() async {
+  void test_writeAsStringSync_directory() async {
     file.createDirectory();
     expect(() => file.writeAsStringSync(''), _throwsFileSystemException);
   }
 
-  test_writeAsStringSync_overwrite() async {
+  void test_writeAsStringSync_overwrite() async {
     file.writeAsStringSync('first');
     file.writeAsStringSync('second');
     expect(await file.readAsString(), 'second');
   }
 
-  test_writeAsStringSync_utf8() async {
+  void test_writeAsStringSync_utf8() async {
     file.writeAsStringSync('\u20ac'); // Unicode € symbol
     expect(await file.readAsBytes(), [0xe2, 0x82, 0xac]);
   }
@@ -180,12 +180,12 @@
 abstract class MemoryFileSystemTestMixin implements _BaseTest {
   Uri tempUri;
 
-  setUp() {
+  void setUp() {
     _baseSetUp();
     tempUri = context.toUri(tempPath);
   }
 
-  test_currentDirectory_trailingSlash() {
+  void test_currentDirectory_trailingSlash() {
     // The currentDirectory should already end in a trailing slash.
     expect(fileSystem.currentDirectory.path, endsWith('/'));
     // A trailing slash should automatically be appended when creating a
@@ -201,27 +201,27 @@
         fileSystem.currentDirectory);
   }
 
-  test_entityForPath_absolutize() {
+  void test_entityForPath_absolutize() {
     expect(entityForPath('file.txt').uri,
         fileSystem.currentDirectory.resolve('file.txt'));
   }
 
-  test_entityForPath_normalize_dot() {
+  void test_entityForPath_normalize_dot() {
     expect(entityForPath(join(tempPath, '.', 'file.txt')).uri,
         Uri.parse('$tempUri/file.txt'));
   }
 
-  test_entityForPath_normalize_dotDot() {
+  void test_entityForPath_normalize_dotDot() {
     expect(entityForPath(join(tempPath, 'foo', '..', 'file.txt')).uri,
         Uri.parse('$tempUri/file.txt'));
   }
 
-  test_entityForUri() {
+  void test_entityForUri() {
     expect(fileSystem.entityForUri(Uri.parse('$tempUri/file.txt')).uri,
         Uri.parse('$tempUri/file.txt'));
   }
 
-  test_entityForUri_fileUri_relative() {
+  void test_entityForUri_fileUri_relative() {
     // A weird quirk of the Uri class is that it doesn't seem possible to create
     // a `file:` uri with a relative path, no matter how many slashes you use or
     // if you populate the fields directly.  But just to be certain, try to do
@@ -240,17 +240,17 @@
     }
   }
 
-  test_entityForUri_nonFileUri() {
+  void test_entityForUri_nonFileUri() {
     var uri = Uri.parse('package:foo/bar.dart');
     expect(fileSystem.entityForUri(uri).uri, uri);
   }
 
-  test_entityForUri_normalize_dot() {
+  void test_entityForUri_normalize_dot() {
     expect(fileSystem.entityForUri(Uri.parse('$tempUri/./file.txt')).uri,
         Uri.parse('$tempUri/file.txt'));
   }
 
-  test_entityForUri_normalize_dotDot() {
+  void test_entityForUri_normalize_dotDot() {
     expect(fileSystem.entityForUri(Uri.parse('$tempUri/foo/../file.txt')).uri,
         Uri.parse('$tempUri/file.txt'));
   }
@@ -283,27 +283,37 @@
 }
 
 class _BaseTestNative extends _BaseTest {
+  @override
   final pathos.Context context = pathos.context;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.join(path1, path2, path3, path4);
 
-  _baseSetUp() {
+  @override
+  void _baseSetUp() {
     tempPath = pathos.join(io.Directory.systemTemp.path, 'test_file_system');
     fileSystem = new MemoryFileSystem(pathos.toUri(io.Directory.current.path));
   }
 }
 
 class _BaseTestPosix extends _BaseTest {
+  @override
   final pathos.Context context = pathos.posix;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.posix.join(path1, path2, path3, path4);
 
+  @override
   void _baseSetUp() {
     tempPath = '/test_file_system';
     fileSystem = new MemoryFileSystem(Uri.parse('file:///cwd'));
@@ -311,13 +321,18 @@
 }
 
 class _BaseTestWindows extends _BaseTest {
+  @override
   final pathos.Context context = pathos.windows;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.windows.join(path1, path2, path3, path4);
 
+  @override
   void _baseSetUp() {
     tempPath = r'c:\test_file_system';
     fileSystem = new MemoryFileSystem(Uri.parse('file:///c:/cwd'));
diff --git a/pkg/front_end/test/messages_json_test.dart b/pkg/front_end/test/messages_json_test.dart
index 7f87ca4..dff07bd 100644
--- a/pkg/front_end/test/messages_json_test.dart
+++ b/pkg/front_end/test/messages_json_test.dart
@@ -19,7 +19,7 @@
 
 /// Test that turning a message into json and back again retains the wanted
 /// information.
-main() {
+void main() {
   for (int i = 0; i < Severity.values.length; i++) {
     Severity severity = Severity.values[i];
     Code code = new Code("MyCodeName");
diff --git a/pkg/front_end/test/mixin_export_test.dart b/pkg/front_end/test/mixin_export_test.dart
index 6b75f19..ff1f579 100644
--- a/pkg/front_end/test/mixin_export_test.dart
+++ b/pkg/front_end/test/mixin_export_test.dart
@@ -9,7 +9,7 @@
 import 'package:front_end/src/testing/compiler_common.dart';
 import 'package:front_end/src/api_prototype/front_end.dart';
 
-main() {
+void main() {
   asyncTest(() async {
     var sources = <String, dynamic>{
       'a.dart': 'class A extends Object with M {}  class M {}',
diff --git a/pkg/front_end/test/multiple_simultaneous_compiles_test.dart b/pkg/front_end/test/multiple_simultaneous_compiles_test.dart
index 3e5d055..e09aae3 100644
--- a/pkg/front_end/test/multiple_simultaneous_compiles_test.dart
+++ b/pkg/front_end/test/multiple_simultaneous_compiles_test.dart
@@ -18,7 +18,7 @@
 
 import 'incremental_suite.dart' show getOptions;
 
-main() async {
+void main() async {
   Uri compileTarget = Platform.script.resolve("binary_md_dill_reader.dart");
   if (!(new File.fromUri(compileTarget)).existsSync()) {
     throw "$compileTarget doesn't exist";
diff --git a/pkg/front_end/test/packages_format_error_test.dart b/pkg/front_end/test/packages_format_error_test.dart
index 7514228..a9fa5f3 100644
--- a/pkg/front_end/test/packages_format_error_test.dart
+++ b/pkg/front_end/test/packages_format_error_test.dart
@@ -25,7 +25,7 @@
 import 'package:front_end/src/fasta/messages.dart'
     show codeCantReadFile, codePackagesFileFormat;
 
-main() {
+void main() {
   Uri root = Uri.parse("org-dartlang-test:///");
   MemoryFileSystem fs = new MemoryFileSystem(root);
   Uri packages = root.resolve(".packages");
diff --git a/pkg/front_end/test/parser_all_suite.dart b/pkg/front_end/test/parser_all_suite.dart
index 837567f..9aab3a5 100644
--- a/pkg/front_end/test/parser_all_suite.dart
+++ b/pkg/front_end/test/parser_all_suite.dart
@@ -8,7 +8,7 @@
 
 import 'parser_suite.dart';
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<ChainContext> createContext(
diff --git a/pkg/front_end/test/parser_equivalence_suite.dart b/pkg/front_end/test/parser_equivalence_suite.dart
index 0e473f3..5e4d772 100644
--- a/pkg/front_end/test/parser_equivalence_suite.dart
+++ b/pkg/front_end/test/parser_equivalence_suite.dart
@@ -16,7 +16,7 @@
 import 'parser_suite.dart'
     show ListenerStep, ParserTestListenerWithMessageFormatting;
 
-main([List<String> arguments = const []]) => runMe(
+void main([List<String> arguments = const []]) => runMe(
       arguments,
       createContext,
       configurationPath: "../testing.json",
@@ -35,6 +35,7 @@
 
   Context(this.suiteName);
 
+  @override
   final List<Step> steps = const <Step>[
     const ListenerCompareStep(),
   ];
@@ -44,8 +45,10 @@
     extends Step<TestDescription, TestDescription, Context> {
   const ListenerCompareStep();
 
+  @override
   String get name => "listenerCompare";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index f415263..cdb9645 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:convert' show jsonDecode;
 
 import 'dart:io' show File;
@@ -14,6 +12,8 @@
     as command_line_reporting;
 
 import 'package:front_end/src/fasta/messages.dart' show Message;
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    show useImplicitCreationExpressionInCfe;
 
 import 'package:front_end/src/fasta/util/direct_parser_ast.dart' show getAST;
 
@@ -66,7 +66,7 @@
 ]
 ''';
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
@@ -95,7 +95,14 @@
     enableExtensionMethods: true,
     enableNonNullable: false);
 
+ScannerConfiguration scannerConfigurationNonTripleShift =
+    new ScannerConfiguration(
+        enableTripleShift: false,
+        enableExtensionMethods: true,
+        enableNonNullable: true);
+
 class Context extends ChainContext with MatchContext {
+  @override
   final bool updateExpectations;
 
   @override
@@ -111,6 +118,7 @@
   Context(this.suiteName, this.updateExpectations, this.addTrace,
       this.annotateLines);
 
+  @override
   final List<Step> steps = const <Step>[
     const TokenStep(true, ".scanner.expect"),
     const TokenStep(false, ".parser.expect"),
@@ -118,6 +126,7 @@
     const IntertwinedStep(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
 
@@ -132,11 +141,13 @@
 class ContextChecksOnly extends Context {
   ContextChecksOnly(String suiteName) : super(suiteName, false, false, false);
 
+  @override
   final List<Step> steps = const <Step>[
     const ListenerStep(false),
     const DirectParserASTStep(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
 
@@ -151,7 +162,9 @@
 class DirectParserASTStep
     extends Step<TestDescription, TestDescription, Context> {
   const DirectParserASTStep();
+  @override
   String get name => "DirectParserAST";
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
@@ -170,17 +183,19 @@
   final bool doExpects;
   const ListenerStep(this.doExpects);
 
+  @override
   String get name => "listener";
 
   /// Scans the uri, parses it with the test listener and returns it.
   ///
   /// Returns null if scanner doesn't return any Token.
-  static ParserTestListenerWithMessageFormatting doListenerParsing(
+  static ParserTestListenerWithMessageFormatting? doListenerParsing(
       Uri uri, String suiteName, String shortName,
       {bool addTrace: false, bool annotateLines: false}) {
     List<int> lineStarts = <int>[];
     Token firstToken = scanUri(uri, shortName, lineStarts: lineStarts);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       return null;
     }
@@ -192,16 +207,18 @@
     ParserTestListenerWithMessageFormatting parserTestListener =
         new ParserTestListenerWithMessageFormatting(
             addTrace, annotateLines, source, shortNameId);
-    Parser parser = new Parser(parserTestListener);
+    Parser parser = new Parser(parserTestListener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     parser.parseUnit(firstToken);
     return parserTestListener;
   }
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
 
-    ParserTestListenerWithMessageFormatting parserTestListener =
+    ParserTestListenerWithMessageFormatting? parserTestListener =
         doListenerParsing(
       uri,
       context.suiteName,
@@ -231,14 +248,17 @@
 class IntertwinedStep extends Step<TestDescription, TestDescription, Context> {
   const IntertwinedStep();
 
+  @override
   String get name => "intertwined";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     List<int> lineStarts = <int>[];
     Token firstToken =
         scanUri(description.uri, description.shortName, lineStarts: lineStarts);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       return Future.value(crash(description, StackTrace.current));
     }
@@ -267,14 +287,17 @@
 
   const TokenStep(this.onlyScanner, this.suffix);
 
+  @override
   String get name => "token";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     List<int> lineStarts = <int>[];
     Token firstToken =
         scanUri(description.uri, description.shortName, lineStarts: lineStarts);
 
+    // ignore: unnecessary_null_comparison
     if (firstToken == null) {
       return Future.value(crash(description, StackTrace.current));
     }
@@ -292,10 +315,11 @@
 
     ParserTestListener parserTestListener =
         new ParserTestListener(context.addTrace);
-    Parser parser = new Parser(parserTestListener);
+    Parser parser = new Parser(parserTestListener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     bool parserCrashed = false;
     dynamic parserCrashedE;
-    StackTrace parserCrashedSt;
+    StackTrace? parserCrashedSt;
     try {
       parser.parseUnit(firstToken);
     } catch (e, st) {
@@ -320,7 +344,7 @@
         description);
     return result.then((result) {
       if (parserCrashed) {
-        return crash("Parser crashed: $parserCrashedE", parserCrashedSt);
+        return crash("Parser crashed: $parserCrashedE", parserCrashedSt!);
       } else {
         return result;
       }
@@ -331,9 +355,9 @@
 StringBuffer tokenStreamToString(Token firstToken, List<int> lineStarts,
     {bool addTypes: false}) {
   StringBuffer sb = new StringBuffer();
-  Token token = firstToken;
+  Token? token = firstToken;
 
-  Token process(Token token, bool errorTokens) {
+  Token? process(Token? token, bool errorTokens) {
     bool printed = false;
     int endOfLast = -1;
     int lineStartsIteratorLine = 1;
@@ -379,13 +403,13 @@
       endOfLast = token.end;
       if (token == token.next) break;
       token = token.next;
-      if (!seenTokens.add(token)) {
+      if (!seenTokens.add(token!)) {
         // Loop in tokens: Print error and break to avoid infinite loop.
         sb.write("\n\nERROR: Loop in tokens: $token "
             "(${token.runtimeType}, ${token.type}, ${token.offset})) "
             "was seen before "
             "(linking to ${token.next}, ${token.next.runtimeType}, "
-            "${token.next.type}, ${token.next.offset})!\n\n");
+            "${token.next!.type}, ${token.next!.offset})!\n\n");
         break;
       }
     }
@@ -401,12 +425,14 @@
   return sb;
 }
 
-Token scanUri(Uri uri, String shortName, {List<int> lineStarts}) {
+Token scanUri(Uri uri, String shortName, {List<int>? lineStarts}) {
   ScannerConfiguration config;
 
   String firstDir = shortName.split("/")[0];
   if (firstDir == "non-nnbd") {
     config = scannerConfigurationNonNNBD;
+  } else if (firstDir == "no-triple-shift") {
+    config = scannerConfigurationNonTripleShift;
   } else {
     config = scannerConfiguration;
   }
@@ -418,7 +444,7 @@
 }
 
 Token scanRawBytes(
-    List<int> rawBytes, ScannerConfiguration config, List<int> lineStarts) {
+    List<int> rawBytes, ScannerConfiguration config, List<int>? lineStarts) {
   Uint8List bytes = new Uint8List(rawBytes.length + 1);
   bytes.setRange(0, rawBytes.length, rawBytes);
 
@@ -433,15 +459,16 @@
 
 class ParserTestListenerWithMessageFormatting extends ParserTestListener {
   final bool annotateLines;
-  final Source source;
-  final String shortName;
+  final Source? source;
+  final String? shortName;
   final List<String> errors = <String>[];
-  Location latestSeenLocation;
+  Location? latestSeenLocation;
 
   ParserTestListenerWithMessageFormatting(
       bool trace, this.annotateLines, this.source, this.shortName)
       : super(trace);
 
+  @override
   void doPrint(String s) {
     super.doPrint(s);
     if (!annotateLines) {
@@ -460,21 +487,24 @@
     }
   }
 
-  void seen(Token token) {
+  @override
+  void seen(Token? token) {
     if (!annotateLines) return;
     if (token == null) return;
     if (source == null) return;
     if (offsetForToken(token) < 0) return;
     Location location =
-        source.getLocation(source.fileUri, offsetForToken(token));
-    if (latestSeenLocation == null || location.line > latestSeenLocation.line) {
+        source!.getLocation(source!.fileUri!, offsetForToken(token));
+    if (latestSeenLocation == null ||
+        location.line > latestSeenLocation!.line) {
       latestSeenLocation = location;
-      String sourceLine = source.getTextLine(location.line);
+      String? sourceLine = source!.getTextLine(location.line);
       doPrint("");
       doPrint("// Line ${location.line}: $sourceLine");
     }
   }
 
+  @override
   bool checkEof(Token token) {
     bool result = super.checkEof(token);
     if (result) {
@@ -483,15 +513,16 @@
     return result;
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     if (source != null) {
       Location location =
-          source.getLocation(source.fileUri, offsetForToken(startToken));
+          source!.getLocation(source!.fileUri!, offsetForToken(startToken));
       int length = lengthOfSpan(startToken, endToken);
       if (length <= 0) length = 1;
       errors.add(command_line_reporting.formatErrorMessage(
-          source.getTextLine(location.line),
+          source!.getTextLine(location.line),
           location,
           length,
           shortName,
@@ -506,12 +537,13 @@
 
 class ParserTestListenerForIntertwined
     extends ParserTestListenerWithMessageFormatting {
-  TestParser parser;
+  late TestParser parser;
 
   ParserTestListenerForIntertwined(
       bool trace, bool annotateLines, Source source)
       : super(trace, annotateLines, source, null);
 
+  @override
   void doPrint(String s) {
     int prevIndent = super.indent;
     super.indent = parser.indent;
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index cb76069..1a797be 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -4,6 +4,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
@@ -64,18 +65,22 @@
 
   void seen(Token? token) {}
 
+  @override
   Uri? get uri => null;
 
+  @override
   void logEvent(String name) {
     doPrint('logEvent(' '$name)');
   }
 
+  @override
   void beginArguments(Token token) {
     seen(token);
     doPrint('beginArguments(' '$token)');
     indent++;
   }
 
+  @override
   void endArguments(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -83,18 +88,21 @@
     doPrint('endArguments(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleAsyncModifier(Token? asyncToken, Token? starToken) {
     seen(asyncToken);
     seen(starToken);
     doPrint('handleAsyncModifier(' '$asyncToken, ' '$starToken)');
   }
 
+  @override
   void beginAwaitExpression(Token token) {
     seen(token);
     doPrint('beginAwaitExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endAwaitExpression(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -102,6 +110,7 @@
     doPrint('endAwaitExpression(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
     indent--;
@@ -113,12 +122,14 @@
         '$errorCode)');
   }
 
+  @override
   void beginBlock(Token token, BlockKind blockKind) {
     seen(token);
     doPrint('beginBlock(' '$token, ' '$blockKind)');
     indent++;
   }
 
+  @override
   void endBlock(
       int count, Token beginToken, Token endToken, BlockKind blockKind) {
     indent--;
@@ -127,40 +138,47 @@
     doPrint('endBlock(' '$count, ' '$beginToken, ' '$endToken, ' '$blockKind)');
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     seen(token);
     doPrint('handleInvalidTopLevelBlock(' '$token)');
   }
 
+  @override
   void beginCascade(Token token) {
     seen(token);
     doPrint('beginCascade(' '$token)');
     indent++;
   }
 
+  @override
   void endCascade() {
     indent--;
     doPrint('endCascade()');
   }
 
+  @override
   void beginCaseExpression(Token caseKeyword) {
     seen(caseKeyword);
     doPrint('beginCaseExpression(' '$caseKeyword)');
     indent++;
   }
 
+  @override
   void endCaseExpression(Token colon) {
     indent--;
     seen(colon);
     doPrint('endCaseExpression(' '$colon)');
   }
 
+  @override
   void beginClassOrMixinBody(DeclarationKind kind, Token token) {
     seen(token);
     doPrint('beginClassOrMixinBody(' '$kind, ' '$token)');
     indent++;
   }
 
+  @override
   void endClassOrMixinBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     indent--;
@@ -173,12 +191,14 @@
         '$endToken)');
   }
 
+  @override
   void beginClassOrNamedMixinApplicationPrelude(Token token) {
     seen(token);
     doPrint('beginClassOrNamedMixinApplicationPrelude(' '$token)');
     indent++;
   }
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     seen(begin);
     seen(abstractToken);
@@ -187,11 +207,13 @@
     indent++;
   }
 
+  @override
   void handleClassExtends(Token? extendsKeyword, int typeCount) {
     seen(extendsKeyword);
     doPrint('handleClassExtends(' '$extendsKeyword, ' '$typeCount)');
   }
 
+  @override
   void handleClassOrMixinImplements(
       Token? implementsKeyword, int interfacesCount) {
     seen(implementsKeyword);
@@ -200,6 +222,7 @@
         '$interfacesCount)');
   }
 
+  @override
   void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
     seen(begin);
     seen(classKeyword);
@@ -207,10 +230,12 @@
     doPrint('handleClassHeader(' '$begin, ' '$classKeyword, ' '$nativeToken)');
   }
 
+  @override
   void handleRecoverClassHeader() {
     doPrint('handleRecoverClassHeader()');
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -218,6 +243,7 @@
     doPrint('endClassDeclaration(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginMixinDeclaration(Token mixinKeyword, Token name) {
     seen(mixinKeyword);
     seen(name);
@@ -225,20 +251,24 @@
     indent++;
   }
 
+  @override
   void handleMixinOn(Token? onKeyword, int typeCount) {
     seen(onKeyword);
     doPrint('handleMixinOn(' '$onKeyword, ' '$typeCount)');
   }
 
+  @override
   void handleMixinHeader(Token mixinKeyword) {
     seen(mixinKeyword);
     doPrint('handleMixinHeader(' '$mixinKeyword)');
   }
 
+  @override
   void handleRecoverMixinHeader() {
     doPrint('handleRecoverMixinHeader()');
   }
 
+  @override
   void endMixinDeclaration(Token mixinKeyword, Token endToken) {
     indent--;
     seen(mixinKeyword);
@@ -246,18 +276,21 @@
     doPrint('endMixinDeclaration(' '$mixinKeyword, ' '$endToken)');
   }
 
+  @override
   void beginUncategorizedTopLevelDeclaration(Token token) {
     seen(token);
     doPrint('beginUncategorizedTopLevelDeclaration(' '$token)');
     indent++;
   }
 
+  @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     seen(extensionKeyword);
     doPrint('beginExtensionDeclarationPrelude(' '$extensionKeyword)');
     indent++;
   }
 
+  @override
   void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
     seen(extensionKeyword);
     seen(name);
@@ -265,6 +298,7 @@
     indent++;
   }
 
+  @override
   void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
       Token onKeyword, Token endToken) {
     indent--;
@@ -279,53 +313,62 @@
         '$endToken)');
   }
 
+  @override
   void beginCombinators(Token token) {
     seen(token);
     doPrint('beginCombinators(' '$token)');
     indent++;
   }
 
+  @override
   void endCombinators(int count) {
     indent--;
     doPrint('endCombinators(' '$count)');
   }
 
+  @override
   void beginCompilationUnit(Token token) {
     seen(token);
     doPrint('beginCompilationUnit(' '$token)');
     indent++;
   }
 
+  @override
   void handleDirectivesOnly() {
     doPrint('handleDirectivesOnly()');
   }
 
+  @override
   void endCompilationUnit(int count, Token token) {
     indent--;
     seen(token);
     doPrint('endCompilationUnit(' '$count, ' '$token)');
   }
 
+  @override
   void beginConstLiteral(Token token) {
     seen(token);
     doPrint('beginConstLiteral(' '$token)');
     indent++;
   }
 
+  @override
   void endConstLiteral(Token token) {
     indent--;
     seen(token);
     doPrint('endConstLiteral(' '$token)');
   }
 
+  @override
   void beginConstructorReference(Token start) {
     seen(start);
     doPrint('beginConstructorReference(' '$start)');
     indent++;
   }
 
-  void endConstructorReference(
-      Token start, Token? periodBeforeName, Token endToken) {
+  @override
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     indent--;
     seen(start);
     seen(periodBeforeName);
@@ -333,15 +376,18 @@
     doPrint('endConstructorReference('
         '$start, '
         '$periodBeforeName, '
-        '$endToken)');
+        '$endToken, '
+        '$constructorReferenceContext)');
   }
 
+  @override
   void beginDoWhileStatement(Token token) {
     seen(token);
     doPrint('beginDoWhileStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endDoWhileStatement(
       Token doKeyword, Token whileKeyword, Token endToken) {
     indent--;
@@ -352,36 +398,42 @@
         'endDoWhileStatement(' '$doKeyword, ' '$whileKeyword, ' '$endToken)');
   }
 
+  @override
   void beginDoWhileStatementBody(Token token) {
     seen(token);
     doPrint('beginDoWhileStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endDoWhileStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endDoWhileStatementBody(' '$token)');
   }
 
+  @override
   void beginWhileStatementBody(Token token) {
     seen(token);
     doPrint('beginWhileStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endWhileStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endWhileStatementBody(' '$token)');
   }
 
+  @override
   void beginEnum(Token enumKeyword) {
     seen(enumKeyword);
     doPrint('beginEnum(' '$enumKeyword)');
     indent++;
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     indent--;
     seen(enumKeyword);
@@ -389,12 +441,14 @@
     doPrint('endEnum(' '$enumKeyword, ' '$leftBrace, ' '$count)');
   }
 
+  @override
   void beginExport(Token token) {
     seen(token);
     doPrint('beginExport(' '$token)');
     indent++;
   }
 
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     indent--;
     seen(exportKeyword);
@@ -402,16 +456,19 @@
     doPrint('endExport(' '$exportKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleExtraneousExpression(Token token, Message message) {
     seen(token);
     doPrint('handleExtraneousExpression(' '$token, ' '$message)');
   }
 
+  @override
   void handleExpressionStatement(Token token) {
     seen(token);
     doPrint('handleExpressionStatement(' '$token)');
   }
 
+  @override
   void beginFactoryMethod(
       Token lastConsumed, Token? externalToken, Token? constToken) {
     seen(lastConsumed);
@@ -424,6 +481,7 @@
     indent++;
   }
 
+  @override
   void endClassFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -436,6 +494,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -448,6 +507,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -460,6 +520,7 @@
         '$endToken)');
   }
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
       Token? covariantToken, Token? varFinalOrConst) {
     seen(token);
@@ -475,6 +536,7 @@
     indent++;
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
@@ -499,17 +561,20 @@
         '$memberKind)');
   }
 
+  @override
   void handleNoFormalParameters(Token token, MemberKind kind) {
     seen(token);
     doPrint('handleNoFormalParameters(' '$token, ' '$kind)');
   }
 
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     seen(token);
     doPrint('beginFormalParameters(' '$token, ' '$kind)');
     indent++;
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     indent--;
@@ -522,6 +587,7 @@
         '$kind)');
   }
 
+  @override
   void endClassFields(
       Token? abstractToken,
       Token? externalToken,
@@ -553,6 +619,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinFields(
       Token? abstractToken,
       Token? externalToken,
@@ -584,6 +651,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionFields(
       Token? abstractToken,
       Token? externalToken,
@@ -615,28 +683,33 @@
         '$endToken)');
   }
 
+  @override
   void handleForInitializerEmptyStatement(Token token) {
     seen(token);
     doPrint('handleForInitializerEmptyStatement(' '$token)');
   }
 
+  @override
   void handleForInitializerExpressionStatement(Token token, bool forIn) {
     seen(token);
     doPrint('handleForInitializerExpressionStatement(' '$token, ' '$forIn)');
   }
 
+  @override
   void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
     seen(token);
     doPrint(
         'handleForInitializerLocalVariableDeclaration(' '$token, ' '$forIn)');
   }
 
+  @override
   void beginForStatement(Token token) {
     seen(token);
     doPrint('beginForStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleForLoopParts(Token forKeyword, Token leftParen,
       Token leftSeparator, int updateExpressionCount) {
     seen(forKeyword);
@@ -649,24 +722,28 @@
         '$updateExpressionCount)');
   }
 
+  @override
   void endForStatement(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endForStatement(' '$endToken)');
   }
 
+  @override
   void beginForStatementBody(Token token) {
     seen(token);
     doPrint('beginForStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endForStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endForStatementBody(' '$token)');
   }
 
+  @override
   void handleForInLoopParts(Token? awaitToken, Token forToken,
       Token leftParenthesis, Token inKeyword) {
     seen(awaitToken);
@@ -680,66 +757,77 @@
         '$inKeyword)');
   }
 
+  @override
   void endForIn(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endForIn(' '$endToken)');
   }
 
+  @override
   void beginForInExpression(Token token) {
     seen(token);
     doPrint('beginForInExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endForInExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endForInExpression(' '$token)');
   }
 
+  @override
   void beginForInBody(Token token) {
     seen(token);
     doPrint('beginForInBody(' '$token)');
     indent++;
   }
 
+  @override
   void endForInBody(Token token) {
     indent--;
     seen(token);
     doPrint('endForInBody(' '$token)');
   }
 
+  @override
   void beginNamedFunctionExpression(Token token) {
     seen(token);
     doPrint('beginNamedFunctionExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endNamedFunctionExpression(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endNamedFunctionExpression(' '$endToken)');
   }
 
+  @override
   void beginLocalFunctionDeclaration(Token token) {
     seen(token);
     doPrint('beginLocalFunctionDeclaration(' '$token)');
     indent++;
   }
 
+  @override
   void endLocalFunctionDeclaration(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endLocalFunctionDeclaration(' '$endToken)');
   }
 
+  @override
   void beginBlockFunctionBody(Token token) {
     seen(token);
     doPrint('beginBlockFunctionBody(' '$token)');
     indent++;
   }
 
+  @override
   void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -747,22 +835,26 @@
     doPrint('endBlockFunctionBody(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleNoFunctionBody(Token token) {
     seen(token);
     doPrint('handleNoFunctionBody(' '$token)');
   }
 
+  @override
   void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
     seen(token);
     doPrint('handleFunctionBodySkipped(' '$token, ' '$isExpressionBody)');
   }
 
+  @override
   void beginFunctionName(Token token) {
     seen(token);
     doPrint('beginFunctionName(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionName(Token beginToken, Token token) {
     indent--;
     seen(beginToken);
@@ -770,12 +862,14 @@
     doPrint('endFunctionName(' '$beginToken, ' '$token)');
   }
 
+  @override
   void beginFunctionTypeAlias(Token token) {
     seen(token);
     doPrint('beginFunctionTypeAlias(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     indent--;
@@ -786,15 +880,18 @@
         'endFunctionTypeAlias(' '$typedefKeyword, ' '$equals, ' '$endToken)');
   }
 
+  @override
   void handleClassWithClause(Token withKeyword) {
     seen(withKeyword);
     doPrint('handleClassWithClause(' '$withKeyword)');
   }
 
+  @override
   void handleClassNoWithClause() {
     doPrint('handleClassNoWithClause()');
   }
 
+  @override
   void beginNamedMixinApplication(
       Token begin, Token? abstractToken, Token name) {
     seen(begin);
@@ -805,11 +902,13 @@
     indent++;
   }
 
+  @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     seen(withKeyword);
     doPrint('handleNamedMixinApplicationWithClause(' '$withKeyword)');
   }
 
+  @override
   void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
       Token? implementsKeyword, Token endToken) {
     indent--;
@@ -826,39 +925,46 @@
         '$endToken)');
   }
 
+  @override
   void beginHide(Token hideKeyword) {
     seen(hideKeyword);
     doPrint('beginHide(' '$hideKeyword)');
     indent++;
   }
 
+  @override
   void endHide(Token hideKeyword) {
     indent--;
     seen(hideKeyword);
     doPrint('endHide(' '$hideKeyword)');
   }
 
+  @override
   void handleIdentifierList(int count) {
     doPrint('handleIdentifierList(' '$count)');
   }
 
+  @override
   void beginTypeList(Token token) {
     seen(token);
     doPrint('beginTypeList(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeList(int count) {
     indent--;
     doPrint('endTypeList(' '$count)');
   }
 
+  @override
   void beginIfStatement(Token token) {
     seen(token);
     doPrint('beginIfStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endIfStatement(Token ifToken, Token? elseToken) {
     indent--;
     seen(ifToken);
@@ -866,42 +972,49 @@
     doPrint('endIfStatement(' '$ifToken, ' '$elseToken)');
   }
 
+  @override
   void beginThenStatement(Token token) {
     seen(token);
     doPrint('beginThenStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endThenStatement(Token token) {
     indent--;
     seen(token);
     doPrint('endThenStatement(' '$token)');
   }
 
+  @override
   void beginElseStatement(Token token) {
     seen(token);
     doPrint('beginElseStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endElseStatement(Token token) {
     indent--;
     seen(token);
     doPrint('endElseStatement(' '$token)');
   }
 
+  @override
   void beginImport(Token importKeyword) {
     seen(importKeyword);
     doPrint('beginImport(' '$importKeyword)');
     indent++;
   }
 
+  @override
   void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
     seen(deferredKeyword);
     seen(asKeyword);
     doPrint('handleImportPrefix(' '$deferredKeyword, ' '$asKeyword)');
   }
 
+  @override
   void endImport(Token importKeyword, Token? semicolon) {
     indent--;
     seen(importKeyword);
@@ -909,28 +1022,33 @@
     doPrint('endImport(' '$importKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleRecoverImport(Token? semicolon) {
     seen(semicolon);
     doPrint('handleRecoverImport(' '$semicolon)');
   }
 
+  @override
   void beginConditionalUris(Token token) {
     seen(token);
     doPrint('beginConditionalUris(' '$token)');
     indent++;
   }
 
+  @override
   void endConditionalUris(int count) {
     indent--;
     doPrint('endConditionalUris(' '$count)');
   }
 
+  @override
   void beginConditionalUri(Token ifKeyword) {
     seen(ifKeyword);
     doPrint('beginConditionalUri(' '$ifKeyword)');
     indent++;
   }
 
+  @override
   void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
     indent--;
     seen(ifKeyword);
@@ -939,41 +1057,48 @@
     doPrint('endConditionalUri(' '$ifKeyword, ' '$leftParen, ' '$equalSign)');
   }
 
+  @override
   void handleDottedName(int count, Token firstIdentifier) {
     seen(firstIdentifier);
     doPrint('handleDottedName(' '$count, ' '$firstIdentifier)');
   }
 
+  @override
   void beginImplicitCreationExpression(Token token) {
     seen(token);
     doPrint('beginImplicitCreationExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endImplicitCreationExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endImplicitCreationExpression(' '$token)');
   }
 
+  @override
   void beginInitializedIdentifier(Token token) {
     seen(token);
     doPrint('beginInitializedIdentifier(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializedIdentifier(Token nameToken) {
     indent--;
     seen(nameToken);
     doPrint('endInitializedIdentifier(' '$nameToken)');
   }
 
+  @override
   void beginFieldInitializer(Token token) {
     seen(token);
     doPrint('beginFieldInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endFieldInitializer(Token assignment, Token token) {
     indent--;
     seen(assignment);
@@ -981,46 +1106,54 @@
     doPrint('endFieldInitializer(' '$assignment, ' '$token)');
   }
 
+  @override
   void handleNoFieldInitializer(Token token) {
     seen(token);
     doPrint('handleNoFieldInitializer(' '$token)');
   }
 
+  @override
   void beginVariableInitializer(Token token) {
     seen(token);
     doPrint('beginVariableInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endVariableInitializer(Token assignmentOperator) {
     indent--;
     seen(assignmentOperator);
     doPrint('endVariableInitializer(' '$assignmentOperator)');
   }
 
+  @override
   void handleNoVariableInitializer(Token token) {
     seen(token);
     doPrint('handleNoVariableInitializer(' '$token)');
   }
 
+  @override
   void beginInitializer(Token token) {
     seen(token);
     doPrint('beginInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializer(Token token) {
     indent--;
     seen(token);
     doPrint('endInitializer(' '$token)');
   }
 
+  @override
   void beginInitializers(Token token) {
     seen(token);
     doPrint('beginInitializers(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializers(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1028,47 +1161,56 @@
     doPrint('endInitializers(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleNoInitializers() {
     doPrint('handleNoInitializers()');
   }
 
+  @override
   void handleInvalidExpression(Token token) {
     seen(token);
     doPrint('handleInvalidExpression(' '$token)');
   }
 
+  @override
   void handleInvalidFunctionBody(Token token) {
     seen(token);
     doPrint('handleInvalidFunctionBody(' '$token)');
   }
 
+  @override
   void handleInvalidTypeReference(Token token) {
     seen(token);
     doPrint('handleInvalidTypeReference(' '$token)');
   }
 
+  @override
   void handleLabel(Token token) {
     seen(token);
     doPrint('handleLabel(' '$token)');
   }
 
+  @override
   void beginLabeledStatement(Token token, int labelCount) {
     seen(token);
     doPrint('beginLabeledStatement(' '$token, ' '$labelCount)');
     indent++;
   }
 
+  @override
   void endLabeledStatement(int labelCount) {
     indent--;
     doPrint('endLabeledStatement(' '$labelCount)');
   }
 
+  @override
   void beginLibraryName(Token token) {
     seen(token);
     doPrint('beginLibraryName(' '$token)');
     indent++;
   }
 
+  @override
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     indent--;
     seen(libraryKeyword);
@@ -1076,50 +1218,59 @@
     doPrint('endLibraryName(' '$libraryKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleLiteralMapEntry(Token colon, Token endToken) {
     seen(colon);
     seen(endToken);
     doPrint('handleLiteralMapEntry(' '$colon, ' '$endToken)');
   }
 
+  @override
   void beginLiteralString(Token token) {
     seen(token);
     doPrint('beginLiteralString(' '$token)');
     indent++;
   }
 
+  @override
   void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
     seen(leftBracket);
     seen(rightBracket);
     doPrint('handleInterpolationExpression(' '$leftBracket, ' '$rightBracket)');
   }
 
+  @override
   void endLiteralString(int interpolationCount, Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endLiteralString(' '$interpolationCount, ' '$endToken)');
   }
 
+  @override
   void handleStringJuxtaposition(Token startToken, int literalCount) {
     seen(startToken);
     doPrint('handleStringJuxtaposition(' '$startToken, ' '$literalCount)');
   }
 
+  @override
   void beginMember() {
     doPrint('beginMember()');
     indent++;
   }
 
+  @override
   void handleInvalidMember(Token endToken) {
     seen(endToken);
     doPrint('handleInvalidMember(' '$endToken)');
   }
 
+  @override
   void endMember() {
     indent--;
     doPrint('endMember()');
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -1143,6 +1294,7 @@
     indent++;
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1159,6 +1311,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1175,6 +1328,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1191,6 +1345,7 @@
         '$endToken)');
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1207,6 +1362,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1223,6 +1379,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     indent--;
@@ -1239,23 +1396,27 @@
         '$endToken)');
   }
 
+  @override
   void beginMetadataStar(Token token) {
     seen(token);
     doPrint('beginMetadataStar(' '$token)');
     indent++;
   }
 
+  @override
   void endMetadataStar(int count) {
     indent--;
     doPrint('endMetadataStar(' '$count)');
   }
 
+  @override
   void beginMetadata(Token token) {
     seen(token);
     doPrint('beginMetadata(' '$token)');
     indent++;
   }
 
+  @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1264,12 +1425,14 @@
     doPrint('endMetadata(' '$beginToken, ' '$periodBeforeName, ' '$endToken)');
   }
 
+  @override
   void beginOptionalFormalParameters(Token token) {
     seen(token);
     doPrint('beginOptionalFormalParameters(' '$token)');
     indent++;
   }
 
+  @override
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     indent--;
@@ -1279,12 +1442,14 @@
         'endOptionalFormalParameters(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginPart(Token token) {
     seen(token);
     doPrint('beginPart(' '$token)');
     indent++;
   }
 
+  @override
   void endPart(Token partKeyword, Token semicolon) {
     indent--;
     seen(partKeyword);
@@ -1292,12 +1457,14 @@
     doPrint('endPart(' '$partKeyword, ' '$semicolon)');
   }
 
+  @override
   void beginPartOf(Token token) {
     seen(token);
     doPrint('beginPartOf(' '$token)');
     indent++;
   }
 
+  @override
   void endPartOf(
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     indent--;
@@ -1311,12 +1478,14 @@
         '$hasName)');
   }
 
+  @override
   void beginRedirectingFactoryBody(Token token) {
     seen(token);
     doPrint('beginRedirectingFactoryBody(' '$token)');
     indent++;
   }
 
+  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1324,41 +1493,48 @@
     doPrint('endRedirectingFactoryBody(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginReturnStatement(Token token) {
     seen(token);
     doPrint('beginReturnStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBody(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBodyIgnored(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBodySkipped(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleEmptyFunctionBody(Token semicolon) {
     seen(semicolon);
     doPrint('handleEmptyFunctionBody(' '$semicolon)');
   }
 
+  @override
   void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
     seen(arrowToken);
     seen(endToken);
     doPrint('handleExpressionFunctionBody(' '$arrowToken, ' '$endToken)');
   }
 
+  @override
   void endReturnStatement(
       bool hasExpression, Token beginToken, Token endToken) {
     indent--;
@@ -1368,30 +1544,35 @@
         'endReturnStatement(' '$hasExpression, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleSend(Token beginToken, Token endToken) {
     seen(beginToken);
     seen(endToken);
     doPrint('handleSend(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginShow(Token showKeyword) {
     seen(showKeyword);
     doPrint('beginShow(' '$showKeyword)');
     indent++;
   }
 
+  @override
   void endShow(Token showKeyword) {
     indent--;
     seen(showKeyword);
     doPrint('endShow(' '$showKeyword)');
   }
 
+  @override
   void beginSwitchStatement(Token token) {
     seen(token);
     doPrint('beginSwitchStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endSwitchStatement(Token switchKeyword, Token endToken) {
     indent--;
     seen(switchKeyword);
@@ -1399,12 +1580,14 @@
     doPrint('endSwitchStatement(' '$switchKeyword, ' '$endToken)');
   }
 
+  @override
   void beginSwitchBlock(Token token) {
     seen(token);
     doPrint('beginSwitchBlock(' '$token)');
     indent++;
   }
 
+  @override
   void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1412,30 +1595,35 @@
     doPrint('endSwitchBlock(' '$caseCount, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginLiteralSymbol(Token token) {
     seen(token);
     doPrint('beginLiteralSymbol(' '$token)');
     indent++;
   }
 
+  @override
   void endLiteralSymbol(Token hashToken, int identifierCount) {
     indent--;
     seen(hashToken);
     doPrint('endLiteralSymbol(' '$hashToken, ' '$identifierCount)');
   }
 
+  @override
   void handleThrowExpression(Token throwToken, Token endToken) {
     seen(throwToken);
     seen(endToken);
     doPrint('handleThrowExpression(' '$throwToken, ' '$endToken)');
   }
 
+  @override
   void beginRethrowStatement(Token token) {
     seen(token);
     doPrint('beginRethrowStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endRethrowStatement(Token rethrowToken, Token endToken) {
     indent--;
     seen(rethrowToken);
@@ -1443,29 +1631,34 @@
     doPrint('endRethrowStatement(' '$rethrowToken, ' '$endToken)');
   }
 
+  @override
   void endTopLevelDeclaration(Token nextToken) {
     indent--;
     seen(nextToken);
     doPrint('endTopLevelDeclaration(' '$nextToken)');
   }
 
+  @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     seen(endToken);
     doPrint('handleInvalidTopLevelDeclaration(' '$endToken)');
   }
 
+  @override
   void beginTopLevelMember(Token token) {
     seen(token);
     doPrint('beginTopLevelMember(' '$token)');
     indent++;
   }
 
+  @override
   void beginFields(Token lastConsumed) {
     seen(lastConsumed);
     doPrint('beginFields(' '$lastConsumed)');
     indent++;
   }
 
+  @override
   void endTopLevelFields(
       Token? externalToken,
       Token? staticToken,
@@ -1494,6 +1687,7 @@
         '$endToken)');
   }
 
+  @override
   void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
     seen(lastConsumed);
     seen(externalToken);
@@ -1501,6 +1695,7 @@
     indent++;
   }
 
+  @override
   void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1509,30 +1704,35 @@
     doPrint('endTopLevelMethod(' '$beginToken, ' '$getOrSet, ' '$endToken)');
   }
 
+  @override
   void beginTryStatement(Token token) {
     seen(token);
     doPrint('beginTryStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleCaseMatch(Token caseKeyword, Token colon) {
     seen(caseKeyword);
     seen(colon);
     doPrint('handleCaseMatch(' '$caseKeyword, ' '$colon)');
   }
 
+  @override
   void beginCatchClause(Token token) {
     seen(token);
     doPrint('beginCatchClause(' '$token)');
     indent++;
   }
 
+  @override
   void endCatchClause(Token token) {
     indent--;
     seen(token);
     doPrint('endCatchClause(' '$token)');
   }
 
+  @override
   void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
     seen(onKeyword);
     seen(catchKeyword);
@@ -1540,11 +1740,13 @@
     doPrint('handleCatchBlock(' '$onKeyword, ' '$catchKeyword, ' '$comma)');
   }
 
+  @override
   void handleFinallyBlock(Token finallyKeyword) {
     seen(finallyKeyword);
     doPrint('handleFinallyBlock(' '$finallyKeyword)');
   }
 
+  @override
   void endTryStatement(
       int catchCount, Token tryKeyword, Token? finallyKeyword) {
     indent--;
@@ -1554,28 +1756,33 @@
         'endTryStatement(' '$catchCount, ' '$tryKeyword, ' '$finallyKeyword)');
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     seen(beginToken);
     seen(questionMark);
     doPrint('handleType(' '$beginToken, ' '$questionMark)');
   }
 
+  @override
   void handleNonNullAssertExpression(Token bang) {
     seen(bang);
     doPrint('handleNonNullAssertExpression(' '$bang)');
   }
 
+  @override
   void handleNoName(Token token) {
     seen(token);
     doPrint('handleNoName(' '$token)');
   }
 
+  @override
   void beginFunctionType(Token beginToken) {
     seen(beginToken);
     doPrint('beginFunctionType(' '$beginToken)');
     indent++;
   }
 
+  @override
   void endFunctionType(Token functionToken, Token? questionMark) {
     indent--;
     seen(functionToken);
@@ -1583,12 +1790,14 @@
     doPrint('endFunctionType(' '$functionToken, ' '$questionMark)');
   }
 
+  @override
   void beginTypeArguments(Token token) {
     seen(token);
     doPrint('beginTypeArguments(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1596,27 +1805,32 @@
     doPrint('endTypeArguments(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleInvalidTypeArguments(Token token) {
     seen(token);
     doPrint('handleInvalidTypeArguments(' '$token)');
   }
 
+  @override
   void handleNoTypeArguments(Token token) {
     seen(token);
     doPrint('handleNoTypeArguments(' '$token)');
   }
 
+  @override
   void beginTypeVariable(Token token) {
     seen(token);
     doPrint('beginTypeVariable(' '$token)');
     indent++;
   }
 
+  @override
   void handleTypeVariablesDefined(Token token, int count) {
     seen(token);
     doPrint('handleTypeVariablesDefined(' '$token, ' '$count)');
   }
 
+  @override
   void endTypeVariable(
       Token token, int index, Token? extendsOrSuper, Token? variance) {
     indent--;
@@ -1630,12 +1844,14 @@
         '$variance)');
   }
 
+  @override
   void beginTypeVariables(Token token) {
     seen(token);
     doPrint('beginTypeVariables(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeVariables(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1643,17 +1859,20 @@
     doPrint('endTypeVariables(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void reportVarianceModifierNotEnabled(Token? variance) {
     seen(variance);
     doPrint('reportVarianceModifierNotEnabled(' '$variance)');
   }
 
+  @override
   void beginFunctionExpression(Token token) {
     seen(token);
     doPrint('beginFunctionExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionExpression(Token beginToken, Token token) {
     indent--;
     seen(beginToken);
@@ -1661,6 +1880,7 @@
     doPrint('endFunctionExpression(' '$beginToken, ' '$token)');
   }
 
+  @override
   void beginVariablesDeclaration(
       Token token, Token? lateToken, Token? varFinalOrConst) {
     seen(token);
@@ -1673,18 +1893,21 @@
     indent++;
   }
 
+  @override
   void endVariablesDeclaration(int count, Token? endToken) {
     indent--;
     seen(endToken);
     doPrint('endVariablesDeclaration(' '$count, ' '$endToken)');
   }
 
+  @override
   void beginWhileStatement(Token token) {
     seen(token);
     doPrint('beginWhileStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endWhileStatement(Token whileKeyword, Token endToken) {
     indent--;
     seen(whileKeyword);
@@ -1692,55 +1915,65 @@
     doPrint('endWhileStatement(' '$whileKeyword, ' '$endToken)');
   }
 
+  @override
   void beginAsOperatorType(Token operator) {
     seen(operator);
     doPrint('beginAsOperatorType(' '$operator)');
     indent++;
   }
 
+  @override
   void endAsOperatorType(Token operator) {
     indent--;
     seen(operator);
     doPrint('endAsOperatorType(' '$operator)');
   }
 
+  @override
   void handleAsOperator(Token operator) {
     seen(operator);
     doPrint('handleAsOperator(' '$operator)');
   }
 
+  @override
   void handleAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleAssignmentExpression(' '$token)');
   }
 
+  @override
   void beginBinaryExpression(Token token) {
     seen(token);
     doPrint('beginBinaryExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endBinaryExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endBinaryExpression(' '$token)');
   }
 
+  @override
   void handleEndingBinaryExpression(Token token) {
     seen(token);
     doPrint('handleEndingBinaryExpression(' '$token)');
   }
 
+  @override
   void beginConditionalExpression(Token question) {
     seen(question);
     doPrint('beginConditionalExpression(' '$question)');
     indent++;
   }
 
+  @override
   void handleConditionalExpressionColon() {
     doPrint('handleConditionalExpressionColon()');
   }
 
+  @override
   void endConditionalExpression(Token question, Token colon) {
     indent--;
     seen(question);
@@ -1748,23 +1981,27 @@
     doPrint('endConditionalExpression(' '$question, ' '$colon)');
   }
 
+  @override
   void beginConstExpression(Token constKeyword) {
     seen(constKeyword);
     doPrint('beginConstExpression(' '$constKeyword)');
     indent++;
   }
 
+  @override
   void endConstExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endConstExpression(' '$token)');
   }
 
+  @override
   void handleConstFactory(Token constKeyword) {
     seen(constKeyword);
     doPrint('handleConstFactory(' '$constKeyword)');
   }
 
+  @override
   void beginForControlFlow(Token? awaitToken, Token forToken) {
     seen(awaitToken);
     seen(forToken);
@@ -1772,57 +2009,67 @@
     indent++;
   }
 
+  @override
   void endForControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endForControlFlow(' '$token)');
   }
 
+  @override
   void endForInControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endForInControlFlow(' '$token)');
   }
 
+  @override
   void beginIfControlFlow(Token ifToken) {
     seen(ifToken);
     doPrint('beginIfControlFlow(' '$ifToken)');
     indent++;
   }
 
+  @override
   void handleThenControlFlow(Token token) {
     seen(token);
     doPrint('handleThenControlFlow(' '$token)');
   }
 
+  @override
   void handleElseControlFlow(Token elseToken) {
     seen(elseToken);
     doPrint('handleElseControlFlow(' '$elseToken)');
   }
 
+  @override
   void endIfControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endIfControlFlow(' '$token)');
   }
 
+  @override
   void endIfElseControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endIfElseControlFlow(' '$token)');
   }
 
+  @override
   void handleSpreadExpression(Token spreadToken) {
     seen(spreadToken);
     doPrint('handleSpreadExpression(' '$spreadToken)');
   }
 
+  @override
   void beginFunctionTypedFormalParameter(Token token) {
     seen(token);
     doPrint('beginFunctionTypedFormalParameter(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     indent--;
     seen(nameToken);
@@ -1830,11 +2077,13 @@
     doPrint('endFunctionTypedFormalParameter(' '$nameToken, ' '$question)');
   }
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleIdentifier(' '$token, ' '$context)');
   }
 
+  @override
   void handleIndexedExpression(
       Token? question, Token openSquareBracket, Token closeSquareBracket) {
     seen(question);
@@ -1846,29 +2095,34 @@
         '$closeSquareBracket)');
   }
 
+  @override
   void beginIsOperatorType(Token operator) {
     seen(operator);
     doPrint('beginIsOperatorType(' '$operator)');
     indent++;
   }
 
+  @override
   void endIsOperatorType(Token operator) {
     indent--;
     seen(operator);
     doPrint('endIsOperatorType(' '$operator)');
   }
 
+  @override
   void handleIsOperator(Token isOperator, Token? not) {
     seen(isOperator);
     seen(not);
     doPrint('handleIsOperator(' '$isOperator, ' '$not)');
   }
 
+  @override
   void handleLiteralBool(Token token) {
     seen(token);
     doPrint('handleLiteralBool(' '$token)');
   }
 
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token endToken) {
     seen(breakKeyword);
@@ -1877,6 +2131,7 @@
         'handleBreakStatement(' '$hasTarget, ' '$breakKeyword, ' '$endToken)');
   }
 
+  @override
   void handleContinueStatement(
       bool hasTarget, Token continueKeyword, Token endToken) {
     seen(continueKeyword);
@@ -1887,17 +2142,20 @@
         '$endToken)');
   }
 
+  @override
   void handleEmptyStatement(Token token) {
     seen(token);
     doPrint('handleEmptyStatement(' '$token)');
   }
 
+  @override
   void beginAssert(Token assertKeyword, Assert kind) {
     seen(assertKeyword);
     doPrint('beginAssert(' '$assertKeyword, ' '$kind)');
     indent++;
   }
 
+  @override
   void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
       Token? commaToken, Token semicolonToken) {
     indent--;
@@ -1913,16 +2171,19 @@
         '$semicolonToken)');
   }
 
+  @override
   void handleLiteralDouble(Token token) {
     seen(token);
     doPrint('handleLiteralDouble(' '$token)');
   }
 
+  @override
   void handleLiteralInt(Token token) {
     seen(token);
     doPrint('handleLiteralInt(' '$token)');
   }
 
+  @override
   void handleLiteralList(
       int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
     seen(leftBracket);
@@ -1935,6 +2196,7 @@
         '$rightBracket)');
   }
 
+  @override
   void handleLiteralSetOrMap(
     int count,
     Token leftBrace,
@@ -1953,101 +2215,120 @@
         '$hasSetEntry)');
   }
 
+  @override
   void handleLiteralNull(Token token) {
     seen(token);
     doPrint('handleLiteralNull(' '$token)');
   }
 
+  @override
   void handleNativeClause(Token nativeToken, bool hasName) {
     seen(nativeToken);
     doPrint('handleNativeClause(' '$nativeToken, ' '$hasName)');
   }
 
+  @override
   void handleNamedArgument(Token colon) {
     seen(colon);
     doPrint('handleNamedArgument(' '$colon)');
   }
 
+  @override
   void beginNewExpression(Token token) {
     seen(token);
     doPrint('beginNewExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endNewExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endNewExpression(' '$token)');
   }
 
+  @override
   void handleNoArguments(Token token) {
     seen(token);
     doPrint('handleNoArguments(' '$token)');
   }
 
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     seen(token);
     doPrint('handleNoConstructorReferenceContinuationAfterTypeArguments('
         '$token)');
   }
 
+  @override
   void handleNoType(Token lastConsumed) {
     seen(lastConsumed);
     doPrint('handleNoType(' '$lastConsumed)');
   }
 
+  @override
   void handleNoTypeVariables(Token token) {
     seen(token);
     doPrint('handleNoTypeVariables(' '$token)');
   }
 
+  @override
   void handleOperator(Token token) {
     seen(token);
     doPrint('handleOperator(' '$token)');
   }
 
+  @override
   void handleSymbolVoid(Token token) {
     seen(token);
     doPrint('handleSymbolVoid(' '$token)');
   }
 
+  @override
   void handleOperatorName(Token operatorKeyword, Token token) {
     seen(operatorKeyword);
     seen(token);
     doPrint('handleOperatorName(' '$operatorKeyword, ' '$token)');
   }
 
+  @override
   void handleInvalidOperatorName(Token operatorKeyword, Token token) {
     seen(operatorKeyword);
     seen(token);
     doPrint('handleInvalidOperatorName(' '$operatorKeyword, ' '$token)');
   }
 
+  @override
   void handleParenthesizedCondition(Token token) {
     seen(token);
     doPrint('handleParenthesizedCondition(' '$token)');
   }
 
+  @override
   void handleParenthesizedExpression(Token token) {
     seen(token);
     doPrint('handleParenthesizedExpression(' '$token)');
   }
 
+  @override
   void handleQualified(Token period) {
     seen(period);
     doPrint('handleQualified(' '$period)');
   }
 
+  @override
   void handleStringPart(Token token) {
     seen(token);
     doPrint('handleStringPart(' '$token)');
   }
 
+  @override
   void handleSuperExpression(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleSuperExpression(' '$token, ' '$context)');
   }
 
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     seen(firstToken);
     doPrint(
@@ -2055,6 +2336,7 @@
     indent++;
   }
 
+  @override
   void endSwitchCase(
       int labelCount,
       int expressionCount,
@@ -2078,63 +2360,75 @@
         '$endToken)');
   }
 
+  @override
   void handleThisExpression(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleThisExpression(' '$token, ' '$context)');
   }
 
+  @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPostfixAssignmentExpression(' '$token)');
   }
 
+  @override
   void handleUnaryPrefixExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPrefixExpression(' '$token)');
   }
 
+  @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPrefixAssignmentExpression(' '$token)');
   }
 
+  @override
   void beginFormalParameterDefaultValueExpression() {
     doPrint('beginFormalParameterDefaultValueExpression()');
     indent++;
   }
 
+  @override
   void endFormalParameterDefaultValueExpression() {
     indent--;
     doPrint('endFormalParameterDefaultValueExpression()');
   }
 
+  @override
   void handleValuedFormalParameter(Token equals, Token token) {
     seen(equals);
     seen(token);
     doPrint('handleValuedFormalParameter(' '$equals, ' '$token)');
   }
 
+  @override
   void handleFormalParameterWithoutValue(Token token) {
     seen(token);
     doPrint('handleFormalParameterWithoutValue(' '$token)');
   }
 
+  @override
   void handleVoidKeyword(Token token) {
     seen(token);
     doPrint('handleVoidKeyword(' '$token)');
   }
 
+  @override
   void handleVoidKeywordWithTypeArguments(Token token) {
     seen(token);
     doPrint('handleVoidKeywordWithTypeArguments(' '$token)');
   }
 
+  @override
   void beginYieldStatement(Token token) {
     seen(token);
     doPrint('beginYieldStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
     indent--;
     seen(yieldToken);
@@ -2143,6 +2437,7 @@
     doPrint('endYieldStatement(' '$yieldToken, ' '$starToken, ' '$endToken)');
   }
 
+  @override
   void endInvalidYieldStatement(Token beginToken, Token? starToken,
       Token endToken, MessageCode errorCode) {
     indent--;
@@ -2156,6 +2451,7 @@
         '$errorCode)');
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     seen(startToken);
@@ -2165,11 +2461,13 @@
     checkEof(endToken);
   }
 
+  @override
   void handleErrorToken(ErrorToken token) {
     doPrint('handleErrorToken(' '$token)');
     handleRecoverableError(token.assertionMessage, token, token);
   }
 
+  @override
   void handleUnescapeError(
       Message message, Token location, int stringOffset, int length) {
     seen(location);
@@ -2180,21 +2478,25 @@
         '$length)');
   }
 
+  @override
   void handleInvalidStatement(Token token, Message message) {
     seen(token);
     doPrint('handleInvalidStatement(' '$token, ' '$message)');
   }
 
+  @override
   void handleScript(Token token) {
     seen(token);
     doPrint('handleScript(' '$token)');
   }
 
+  @override
   void handleCommentReferenceText(String referenceSource, int referenceOffset) {
     doPrint(
         'handleCommentReferenceText(' '$referenceSource, ' '$referenceOffset)');
   }
 
+  @override
   void handleCommentReference(
       Token? newKeyword, Token? prefix, Token? period, Token token) {
     seen(newKeyword);
@@ -2208,15 +2510,18 @@
         '$token)');
   }
 
+  @override
   void handleNoCommentReference() {
     doPrint('handleNoCommentReference()');
   }
 
+  @override
   void handleTypeArgumentApplication(Token openAngleBracket) {
     seen(openAngleBracket);
     doPrint('handleTypeArgumentApplication(' '$openAngleBracket)');
   }
 
+  @override
   void handleNewAsIdentifier(Token token) {
     seen(token);
     doPrint('handleNewAsIdentifier(' '$token)');
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index b4f5fc9..508e479 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -15,7 +15,7 @@
 
 import 'utils/io_utils.dart' show computeRepoDirUri;
 
-main(List<String> args) {
+void main(List<String> args) {
   final Uri repoDir = computeRepoDirUri();
   String generated = generateTestListener(repoDir);
   new File.fromUri(computeTestListenerUri(repoDir))
@@ -45,6 +45,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
@@ -126,22 +127,27 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideListenerClass = false;
   }
 
+  @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
       Token varFinalOrConst, Token getOrSet, Token name) {
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     if (insideListenerClass) {
+      out.writeln("  @override");
       out.write("  ");
       Token token = beginToken;
       Token latestToken;
@@ -211,10 +217,12 @@
     latestSeenParameterTypeToken = null;
   }
 
+  @override
   void handleType(Token beginToken, Token questionMark) {
     latestSeenParameterTypeToken = beginToken.lexeme;
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 1e84578..3ea2b0c 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -4,6 +4,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/directive_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
@@ -15,6 +16,8 @@
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart' as codes;
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    show useImplicitCreationExpressionInCfe;
 
 // THIS FILE IS AUTO GENERATED BY 'test/parser_test_parser_creator.dart'
 // Run this command to update it:
@@ -25,7 +28,9 @@
   StringBuffer sb = new StringBuffer();
   final bool trace;
 
-  TestParser(Listener listener, this.trace) : super(listener);
+  TestParser(Listener listener, this.trace)
+      : super(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
 
   String createTrace() {
     List<String> traceLines = StackTrace.current.toString().split("\n");
@@ -47,6 +52,7 @@
     sb.writeln(("  " * indent) + s + traceString);
   }
 
+  @override
   Uri? get uri {
     doPrint('uri()');
     indent++;
@@ -55,6 +61,7 @@
     return result;
   }
 
+  @override
   TokenStreamRewriter get rewriter {
     doPrint('rewriter()');
     indent++;
@@ -63,6 +70,7 @@
     return result;
   }
 
+  @override
   bool get inGenerator {
     doPrint('inGenerator()');
     indent++;
@@ -71,6 +79,7 @@
     return result;
   }
 
+  @override
   bool get inAsync {
     doPrint('inAsync()');
     indent++;
@@ -79,6 +88,7 @@
     return result;
   }
 
+  @override
   bool get inPlainSync {
     doPrint('inPlainSync()');
     indent++;
@@ -87,6 +97,7 @@
     return result;
   }
 
+  @override
   bool get isBreakAllowed {
     doPrint('isBreakAllowed()');
     indent++;
@@ -95,6 +106,7 @@
     return result;
   }
 
+  @override
   bool get isContinueAllowed {
     doPrint('isContinueAllowed()');
     indent++;
@@ -103,6 +115,7 @@
     return result;
   }
 
+  @override
   bool get isContinueWithLabelAllowed {
     doPrint('isContinueWithLabelAllowed()');
     indent++;
@@ -111,6 +124,7 @@
     return result;
   }
 
+  @override
   Token parseUnit(Token token) {
     doPrint('parseUnit(' '$token)');
     indent++;
@@ -119,6 +133,7 @@
     return result;
   }
 
+  @override
   Token parseDirectives(Token token) {
     doPrint('parseDirectives(' '$token)');
     indent++;
@@ -127,6 +142,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelDeclaration(Token token) {
     doPrint('parseTopLevelDeclaration(' '$token)');
     indent++;
@@ -135,6 +151,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelDeclarationImpl(
       Token token, DirectiveContext? directiveState) {
     doPrint('parseTopLevelDeclarationImpl(' '$token, ' '$directiveState)');
@@ -144,6 +161,7 @@
     return result;
   }
 
+  @override
   Token? parseClassDeclarationModifiers(Token start, Token keyword) {
     doPrint('parseClassDeclarationModifiers(' '$start, ' '$keyword)');
     indent++;
@@ -152,6 +170,7 @@
     return result;
   }
 
+  @override
   void parseTopLevelKeywordModifiers(Token start, Token keyword) {
     doPrint('parseTopLevelKeywordModifiers(' '$start, ' '$keyword)');
     indent++;
@@ -160,6 +179,7 @@
     return result;
   }
 
+  @override
   void reportTopLevelModifierError(Token modifier, Token afterModifiers) {
     doPrint('reportTopLevelModifierError(' '$modifier, ' '$afterModifiers)');
     indent++;
@@ -168,6 +188,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelKeywordDeclaration(
       Token start, Token keyword, DirectiveContext? directiveState) {
     doPrint('parseTopLevelKeywordDeclaration('
@@ -181,6 +202,7 @@
     return result;
   }
 
+  @override
   Token parseLibraryName(Token libraryKeyword) {
     doPrint('parseLibraryName(' '$libraryKeyword)');
     indent++;
@@ -189,6 +211,7 @@
     return result;
   }
 
+  @override
   Token parseImportPrefixOpt(Token token) {
     doPrint('parseImportPrefixOpt(' '$token)');
     indent++;
@@ -197,6 +220,7 @@
     return result;
   }
 
+  @override
   Token parseImport(Token importKeyword) {
     doPrint('parseImport(' '$importKeyword)');
     indent++;
@@ -205,6 +229,7 @@
     return result;
   }
 
+  @override
   Token parseImportRecovery(Token token) {
     doPrint('parseImportRecovery(' '$token)');
     indent++;
@@ -213,6 +238,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalUriStar(Token token) {
     doPrint('parseConditionalUriStar(' '$token)');
     indent++;
@@ -221,6 +247,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalUri(Token token) {
     doPrint('parseConditionalUri(' '$token)');
     indent++;
@@ -229,6 +256,7 @@
     return result;
   }
 
+  @override
   Token parseDottedName(Token token) {
     doPrint('parseDottedName(' '$token)');
     indent++;
@@ -237,6 +265,7 @@
     return result;
   }
 
+  @override
   Token parseExport(Token exportKeyword) {
     doPrint('parseExport(' '$exportKeyword)');
     indent++;
@@ -245,6 +274,7 @@
     return result;
   }
 
+  @override
   Token parseCombinatorStar(Token token) {
     doPrint('parseCombinatorStar(' '$token)');
     indent++;
@@ -253,6 +283,7 @@
     return result;
   }
 
+  @override
   Token parseHide(Token token) {
     doPrint('parseHide(' '$token)');
     indent++;
@@ -261,6 +292,7 @@
     return result;
   }
 
+  @override
   Token parseShow(Token token) {
     doPrint('parseShow(' '$token)');
     indent++;
@@ -269,6 +301,7 @@
     return result;
   }
 
+  @override
   Token parseIdentifierList(Token token) {
     doPrint('parseIdentifierList(' '$token)');
     indent++;
@@ -277,6 +310,7 @@
     return result;
   }
 
+  @override
   Token parseTypeList(Token token) {
     doPrint('parseTypeList(' '$token)');
     indent++;
@@ -285,6 +319,7 @@
     return result;
   }
 
+  @override
   Token parsePartOrPartOf(Token partKeyword, DirectiveContext? directiveState) {
     doPrint('parsePartOrPartOf(' '$partKeyword, ' '$directiveState)');
     indent++;
@@ -293,6 +328,7 @@
     return result;
   }
 
+  @override
   Token parsePart(Token partKeyword) {
     doPrint('parsePart(' '$partKeyword)');
     indent++;
@@ -301,6 +337,7 @@
     return result;
   }
 
+  @override
   Token parsePartOf(Token partKeyword) {
     doPrint('parsePartOf(' '$partKeyword)');
     indent++;
@@ -309,6 +346,7 @@
     return result;
   }
 
+  @override
   Token parseMetadataStar(Token token) {
     doPrint('parseMetadataStar(' '$token)');
     indent++;
@@ -317,6 +355,7 @@
     return result;
   }
 
+  @override
   Token parseMetadata(Token token) {
     doPrint('parseMetadata(' '$token)');
     indent++;
@@ -325,6 +364,7 @@
     return result;
   }
 
+  @override
   Token parseScript(Token token) {
     doPrint('parseScript(' '$token)');
     indent++;
@@ -333,6 +373,7 @@
     return result;
   }
 
+  @override
   Token parseTypedef(Token typedefKeyword) {
     doPrint('parseTypedef(' '$typedefKeyword)');
     indent++;
@@ -341,6 +382,7 @@
     return result;
   }
 
+  @override
   Token parseMixinApplicationRest(Token token) {
     doPrint('parseMixinApplicationRest(' '$token)');
     indent++;
@@ -349,6 +391,7 @@
     return result;
   }
 
+  @override
   Token parseWithClauseOpt(Token token) {
     doPrint('parseWithClauseOpt(' '$token)');
     indent++;
@@ -357,6 +400,7 @@
     return result;
   }
 
+  @override
   Token parseGetterOrFormalParameters(
       Token token, Token name, bool isGetter, MemberKind kind) {
     doPrint('parseGetterOrFormalParameters('
@@ -371,6 +415,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersOpt(Token token, MemberKind kind) {
     doPrint('parseFormalParametersOpt(' '$token, ' '$kind)');
     indent++;
@@ -379,6 +424,7 @@
     return result;
   }
 
+  @override
   Token skipFormalParameters(Token token, MemberKind kind) {
     doPrint('skipFormalParameters(' '$token, ' '$kind)');
     indent++;
@@ -387,6 +433,7 @@
     return result;
   }
 
+  @override
   Token skipFormalParametersRest(Token token, MemberKind kind) {
     doPrint('skipFormalParametersRest(' '$token, ' '$kind)');
     indent++;
@@ -395,6 +442,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersRequiredOpt(Token token, MemberKind kind) {
     doPrint('parseFormalParametersRequiredOpt(' '$token, ' '$kind)');
     indent++;
@@ -403,6 +451,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParameters(Token token, MemberKind kind) {
     doPrint('parseFormalParameters(' '$token, ' '$kind)');
     indent++;
@@ -411,6 +460,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersRest(Token token, MemberKind kind) {
     doPrint('parseFormalParametersRest(' '$token, ' '$kind)');
     indent++;
@@ -419,6 +469,7 @@
     return result;
   }
 
+  @override
   codes.Message missingParameterMessage(MemberKind kind) {
     doPrint('missingParameterMessage(' '$kind)');
     indent++;
@@ -427,6 +478,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParameter(
       Token token, FormalParameterKind parameterKind, MemberKind memberKind) {
     doPrint(
@@ -437,6 +489,7 @@
     return result;
   }
 
+  @override
   Token parseOptionalPositionalParameters(Token token, MemberKind kind) {
     doPrint('parseOptionalPositionalParameters(' '$token, ' '$kind)');
     indent++;
@@ -445,6 +498,7 @@
     return result;
   }
 
+  @override
   Token parseOptionalNamedParameters(Token token, MemberKind kind) {
     doPrint('parseOptionalNamedParameters(' '$token, ' '$kind)');
     indent++;
@@ -453,6 +507,7 @@
     return result;
   }
 
+  @override
   Token parseQualified(Token token, IdentifierContext context,
       IdentifierContext continuationContext) {
     doPrint('parseQualified(' '$token, ' '$context, ' '$continuationContext)');
@@ -462,6 +517,7 @@
     return result;
   }
 
+  @override
   Token parseQualifiedRestOpt(
       Token token, IdentifierContext continuationContext) {
     doPrint('parseQualifiedRestOpt(' '$token, ' '$continuationContext)');
@@ -471,6 +527,7 @@
     return result;
   }
 
+  @override
   Token parseQualifiedRest(Token token, IdentifierContext context) {
     doPrint('parseQualifiedRest(' '$token, ' '$context)');
     indent++;
@@ -479,6 +536,7 @@
     return result;
   }
 
+  @override
   Token skipBlock(Token token) {
     doPrint('skipBlock(' '$token)');
     indent++;
@@ -487,6 +545,7 @@
     return result;
   }
 
+  @override
   Token parseEnum(Token enumKeyword) {
     doPrint('parseEnum(' '$enumKeyword)');
     indent++;
@@ -495,6 +554,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrNamedMixinApplication(
       Token? abstractToken, Token classKeyword) {
     doPrint('parseClassOrNamedMixinApplication('
@@ -507,6 +567,7 @@
     return result;
   }
 
+  @override
   Token parseNamedMixinApplication(
       Token token, Token begin, Token classKeyword) {
     doPrint(
@@ -517,6 +578,7 @@
     return result;
   }
 
+  @override
   Token parseClass(
       Token token, Token begin, Token classKeyword, String className) {
     doPrint(
@@ -527,6 +589,7 @@
     return result;
   }
 
+  @override
   Token parseClassHeaderOpt(Token token, Token begin, Token classKeyword) {
     doPrint('parseClassHeaderOpt(' '$token, ' '$begin, ' '$classKeyword)');
     indent++;
@@ -535,6 +598,7 @@
     return result;
   }
 
+  @override
   Token parseClassHeaderRecovery(Token token, Token begin, Token classKeyword) {
     doPrint('parseClassHeaderRecovery(' '$token, ' '$begin, ' '$classKeyword)');
     indent++;
@@ -543,6 +607,7 @@
     return result;
   }
 
+  @override
   Token parseClassExtendsOpt(Token token) {
     doPrint('parseClassExtendsOpt(' '$token)');
     indent++;
@@ -551,6 +616,7 @@
     return result;
   }
 
+  @override
   Token parseClassExtendsSeenExtendsClause(Token extendsKeyword, Token token) {
     doPrint(
         'parseClassExtendsSeenExtendsClause(' '$extendsKeyword, ' '$token)');
@@ -561,6 +627,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinImplementsOpt(Token token) {
     doPrint('parseClassOrMixinImplementsOpt(' '$token)');
     indent++;
@@ -569,6 +636,7 @@
     return result;
   }
 
+  @override
   Token parseMixin(Token mixinKeyword) {
     doPrint('parseMixin(' '$mixinKeyword)');
     indent++;
@@ -577,6 +645,7 @@
     return result;
   }
 
+  @override
   Token parseMixinHeaderOpt(Token token, Token mixinKeyword) {
     doPrint('parseMixinHeaderOpt(' '$token, ' '$mixinKeyword)');
     indent++;
@@ -585,6 +654,7 @@
     return result;
   }
 
+  @override
   Token parseMixinHeaderRecovery(
       Token token, Token mixinKeyword, Token headerStart) {
     doPrint('parseMixinHeaderRecovery('
@@ -598,6 +668,7 @@
     return result;
   }
 
+  @override
   Token parseMixinOnOpt(Token token) {
     doPrint('parseMixinOnOpt(' '$token)');
     indent++;
@@ -606,6 +677,7 @@
     return result;
   }
 
+  @override
   Token parseMixinOn(Token token) {
     doPrint('parseMixinOn(' '$token)');
     indent++;
@@ -614,6 +686,7 @@
     return result;
   }
 
+  @override
   Token parseExtension(Token extensionKeyword) {
     doPrint('parseExtension(' '$extensionKeyword)');
     indent++;
@@ -622,6 +695,7 @@
     return result;
   }
 
+  @override
   Token parseStringPart(Token token) {
     doPrint('parseStringPart(' '$token)');
     indent++;
@@ -630,6 +704,7 @@
     return result;
   }
 
+  @override
   Token insertSyntheticIdentifier(Token token, IdentifierContext context,
       {codes.Message? message, Token? messageOnToken}) {
     doPrint('insertSyntheticIdentifier('
@@ -644,6 +719,7 @@
     return result;
   }
 
+  @override
   Token ensureIdentifier(Token token, IdentifierContext context) {
     doPrint('ensureIdentifier(' '$token, ' '$context)');
     indent++;
@@ -652,6 +728,7 @@
     return result;
   }
 
+  @override
   bool isNextIdentifier(Token token) {
     doPrint('isNextIdentifier(' '$token)');
     indent++;
@@ -660,6 +737,7 @@
     return result;
   }
 
+  @override
   Token ensureIdentifierPotentiallyRecovered(
       Token token, IdentifierContext context, bool isRecovered) {
     doPrint('ensureIdentifierPotentiallyRecovered('
@@ -673,6 +751,7 @@
     return result;
   }
 
+  @override
   bool notEofOrValue(String value, Token token) {
     doPrint('notEofOrValue(' '$value, ' '$token)');
     indent++;
@@ -681,6 +760,7 @@
     return result;
   }
 
+  @override
   Token parseTypeVariablesOpt(Token token) {
     doPrint('parseTypeVariablesOpt(' '$token)');
     indent++;
@@ -689,6 +769,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMember(Token token) {
     doPrint('parseTopLevelMember(' '$token)');
     indent++;
@@ -697,6 +778,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMemberImpl(Token token) {
     doPrint('parseTopLevelMemberImpl(' '$token)');
     indent++;
@@ -705,6 +787,7 @@
     return result;
   }
 
+  @override
   Token parseFields(
       Token beforeStart,
       Token? abstractToken,
@@ -752,6 +835,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMethod(
       Token beforeStart,
       Token? externalToken,
@@ -775,6 +859,7 @@
     return result;
   }
 
+  @override
   Token parseMethodTypeVar(Token name) {
     doPrint('parseMethodTypeVar(' '$name)');
     indent++;
@@ -783,6 +868,7 @@
     return result;
   }
 
+  @override
   Token parseFieldInitializerOpt(
       Token token,
       Token name,
@@ -815,6 +901,7 @@
     return result;
   }
 
+  @override
   Token parseVariableInitializerOpt(Token token) {
     doPrint('parseVariableInitializerOpt(' '$token)');
     indent++;
@@ -823,6 +910,7 @@
     return result;
   }
 
+  @override
   Token parseInitializersOpt(Token token) {
     doPrint('parseInitializersOpt(' '$token)');
     indent++;
@@ -831,6 +919,7 @@
     return result;
   }
 
+  @override
   Token parseInitializers(Token token) {
     doPrint('parseInitializers(' '$token)');
     indent++;
@@ -839,6 +928,7 @@
     return result;
   }
 
+  @override
   Token parseInitializer(Token token) {
     doPrint('parseInitializer(' '$token)');
     indent++;
@@ -847,6 +937,7 @@
     return result;
   }
 
+  @override
   Token parseSuperInitializerExpression(final Token start) {
     doPrint('parseSuperInitializerExpression(' '$start)');
     indent++;
@@ -855,6 +946,7 @@
     return result;
   }
 
+  @override
   Token parseInitializerExpressionRest(Token token) {
     doPrint('parseInitializerExpressionRest(' '$token)');
     indent++;
@@ -863,6 +955,7 @@
     return result;
   }
 
+  @override
   Token ensureBlock(
       Token token,
       codes.Template<codes.Message Function(Token token)>? template,
@@ -874,6 +967,7 @@
     return result;
   }
 
+  @override
   Token insertBlock(Token token) {
     doPrint('insertBlock(' '$token)');
     indent++;
@@ -882,6 +976,7 @@
     return result;
   }
 
+  @override
   Token ensureCloseParen(Token token, Token openParen) {
     doPrint('ensureCloseParen(' '$token, ' '$openParen)');
     indent++;
@@ -890,6 +985,7 @@
     return result;
   }
 
+  @override
   Token ensureColon(Token token) {
     doPrint('ensureColon(' '$token)');
     indent++;
@@ -898,6 +994,7 @@
     return result;
   }
 
+  @override
   Token ensureLiteralString(Token token) {
     doPrint('ensureLiteralString(' '$token)');
     indent++;
@@ -906,6 +1003,7 @@
     return result;
   }
 
+  @override
   Token ensureSemicolon(Token token) {
     doPrint('ensureSemicolon(' '$token)');
     indent++;
@@ -914,6 +1012,7 @@
     return result;
   }
 
+  @override
   Token rewriteAndRecover(Token token, codes.Message message, Token newToken) {
     doPrint('rewriteAndRecover(' '$token, ' '$message, ' '$newToken)');
     indent++;
@@ -922,6 +1021,7 @@
     return result;
   }
 
+  @override
   Token rewriteSquareBrackets(Token token) {
     doPrint('rewriteSquareBrackets(' '$token)');
     indent++;
@@ -930,6 +1030,7 @@
     return result;
   }
 
+  @override
   Token skipUnexpectedTokenOpt(Token token, List<String> expectedNext) {
     doPrint('skipUnexpectedTokenOpt(' '$token, ' '$expectedNext)');
     indent++;
@@ -938,6 +1039,7 @@
     return result;
   }
 
+  @override
   Token parseNativeClause(Token token) {
     doPrint('parseNativeClause(' '$token)');
     indent++;
@@ -946,6 +1048,7 @@
     return result;
   }
 
+  @override
   Token skipClassOrMixinOrExtensionBody(Token token) {
     doPrint('skipClassOrMixinOrExtensionBody(' '$token)');
     indent++;
@@ -954,6 +1057,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinOrExtensionBody(
       Token token, DeclarationKind kind, String? enclosingDeclarationName) {
     doPrint('parseClassOrMixinOrExtensionBody('
@@ -967,6 +1071,7 @@
     return result;
   }
 
+  @override
   bool isUnaryMinus(Token token) {
     doPrint('isUnaryMinus(' '$token)');
     indent++;
@@ -975,6 +1080,7 @@
     return result;
   }
 
+  @override
   Token parseClassMember(Token token, String? className) {
     doPrint('parseClassMember(' '$token, ' '$className)');
     indent++;
@@ -983,6 +1089,7 @@
     return result;
   }
 
+  @override
   Token parseMixinMember(Token token, String mixinName) {
     doPrint('parseMixinMember(' '$token, ' '$mixinName)');
     indent++;
@@ -991,6 +1098,7 @@
     return result;
   }
 
+  @override
   Token parseExtensionMember(Token token, String extensionName) {
     doPrint('parseExtensionMember(' '$token, ' '$extensionName)');
     indent++;
@@ -999,6 +1107,7 @@
     return result;
   }
 
+  @override
   bool isReservedKeyword(Token token) {
     doPrint('isReservedKeyword(' '$token)');
     indent++;
@@ -1007,6 +1116,7 @@
     return result;
   }
 
+  @override
   bool indicatesMethodOrField(Token token) {
     doPrint('indicatesMethodOrField(' '$token)');
     indent++;
@@ -1015,6 +1125,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinOrExtensionMemberImpl(
       Token token, DeclarationKind kind, String? enclosingDeclarationName) {
     doPrint('parseClassOrMixinOrExtensionMemberImpl('
@@ -1028,6 +1139,7 @@
     return result;
   }
 
+  @override
   Token parseMethod(
       Token beforeStart,
       Token? abstractToken,
@@ -1078,6 +1190,7 @@
     return result;
   }
 
+  @override
   Token parseFactoryMethod(Token token, DeclarationKind kind, Token beforeStart,
       Token? externalToken, Token? staticOrCovariant, Token? varFinalOrConst) {
     doPrint('parseFactoryMethod('
@@ -1094,6 +1207,7 @@
     return result;
   }
 
+  @override
   Token parseOperatorName(Token token) {
     doPrint('parseOperatorName(' '$token)');
     indent++;
@@ -1102,6 +1216,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionExpression(Token token) {
     doPrint('parseFunctionExpression(' '$token)');
     indent++;
@@ -1110,6 +1225,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionLiteral(
       Token start,
       Token beforeName,
@@ -1131,6 +1247,7 @@
     return result;
   }
 
+  @override
   Token parseNamedFunctionRest(
       Token beforeName, Token begin, Token formals, bool isFunctionExpression) {
     doPrint('parseNamedFunctionRest('
@@ -1145,6 +1262,7 @@
     return result;
   }
 
+  @override
   Token parseAsyncOptBody(
       Token token, bool ofFunctionExpression, bool allowAbstract) {
     doPrint('parseAsyncOptBody('
@@ -1158,14 +1276,22 @@
     return result;
   }
 
-  Token parseConstructorReference(Token token, [TypeParamOrArgInfo? typeArg]) {
-    doPrint('parseConstructorReference(' '$token, ' '$typeArg)');
+  @override
+  Token parseConstructorReference(
+      Token token, ConstructorReferenceContext constructorReferenceContext,
+      [TypeParamOrArgInfo? typeArg]) {
+    doPrint('parseConstructorReference('
+        '$token, '
+        '$constructorReferenceContext, '
+        '$typeArg)');
     indent++;
-    var result = super.parseConstructorReference(token, typeArg);
+    var result = super
+        .parseConstructorReference(token, constructorReferenceContext, typeArg);
     indent--;
     return result;
   }
 
+  @override
   Token parseRedirectingFactoryBody(Token token) {
     doPrint('parseRedirectingFactoryBody(' '$token)');
     indent++;
@@ -1174,6 +1300,7 @@
     return result;
   }
 
+  @override
   Token skipFunctionBody(Token token, bool isExpression, bool allowAbstract) {
     doPrint('skipFunctionBody(' '$token, ' '$isExpression, ' '$allowAbstract)');
     indent++;
@@ -1182,6 +1309,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionBody(
       Token token, bool ofFunctionExpression, bool allowAbstract) {
     doPrint('parseFunctionBody('
@@ -1195,6 +1323,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionFunctionBody(Token token, bool ofFunctionExpression) {
     doPrint('parseExpressionFunctionBody(' '$token, ' '$ofFunctionExpression)');
     indent++;
@@ -1203,6 +1332,7 @@
     return result;
   }
 
+  @override
   Token skipAsyncModifier(Token token) {
     doPrint('skipAsyncModifier(' '$token)');
     indent++;
@@ -1211,6 +1341,7 @@
     return result;
   }
 
+  @override
   Token parseAsyncModifierOpt(Token token) {
     doPrint('parseAsyncModifierOpt(' '$token)');
     indent++;
@@ -1219,6 +1350,7 @@
     return result;
   }
 
+  @override
   Token parseStatement(Token token) {
     doPrint('parseStatement(' '$token)');
     indent++;
@@ -1227,6 +1359,7 @@
     return result;
   }
 
+  @override
   Token parseStatementX(Token token) {
     doPrint('parseStatementX(' '$token)');
     indent++;
@@ -1235,6 +1368,7 @@
     return result;
   }
 
+  @override
   Token parseYieldStatement(Token token) {
     doPrint('parseYieldStatement(' '$token)');
     indent++;
@@ -1243,6 +1377,7 @@
     return result;
   }
 
+  @override
   Token parseReturnStatement(Token token) {
     doPrint('parseReturnStatement(' '$token)');
     indent++;
@@ -1251,6 +1386,7 @@
     return result;
   }
 
+  @override
   Token parseLabel(Token token) {
     doPrint('parseLabel(' '$token)');
     indent++;
@@ -1259,6 +1395,7 @@
     return result;
   }
 
+  @override
   Token parseLabeledStatement(Token token) {
     doPrint('parseLabeledStatement(' '$token)');
     indent++;
@@ -1267,6 +1404,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatement(Token token) {
     doPrint('parseExpressionStatement(' '$token)');
     indent++;
@@ -1275,6 +1413,7 @@
     return result;
   }
 
+  @override
   Token parseExpression(Token token) {
     doPrint('parseExpression(' '$token)');
     indent++;
@@ -1283,6 +1422,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionWithoutCascade(Token token) {
     doPrint('parseExpressionWithoutCascade(' '$token)');
     indent++;
@@ -1291,6 +1431,7 @@
     return result;
   }
 
+  @override
   bool canParseAsConditional(Token question) {
     doPrint('canParseAsConditional(' '$question)');
     indent++;
@@ -1299,6 +1440,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalExpressionRest(Token token) {
     doPrint('parseConditionalExpressionRest(' '$token)');
     indent++;
@@ -1307,6 +1449,7 @@
     return result;
   }
 
+  @override
   Token parsePrecedenceExpression(
       Token token, int precedence, bool allowCascades) {
     doPrint('parsePrecedenceExpression('
@@ -1320,6 +1463,7 @@
     return result;
   }
 
+  @override
   Token parseCascadeExpression(Token token) {
     doPrint('parseCascadeExpression(' '$token)');
     indent++;
@@ -1328,6 +1472,7 @@
     return result;
   }
 
+  @override
   Token parseUnaryExpression(Token token, bool allowCascades) {
     doPrint('parseUnaryExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1336,6 +1481,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentOrIndexStar(
       Token token, TypeParamOrArgInfo typeArg, bool checkedNullAware) {
     doPrint('parseArgumentOrIndexStar('
@@ -1349,6 +1495,7 @@
     return result;
   }
 
+  @override
   Token parsePrimary(Token token, IdentifierContext context) {
     doPrint('parsePrimary(' '$token, ' '$context)');
     indent++;
@@ -1357,6 +1504,7 @@
     return result;
   }
 
+  @override
   Token parseParenthesizedExpressionOrFunctionLiteral(Token token) {
     doPrint('parseParenthesizedExpressionOrFunctionLiteral(' '$token)');
     indent++;
@@ -1365,6 +1513,7 @@
     return result;
   }
 
+  @override
   Token ensureParenthesizedCondition(Token token) {
     doPrint('ensureParenthesizedCondition(' '$token)');
     indent++;
@@ -1373,6 +1522,7 @@
     return result;
   }
 
+  @override
   Token parseParenthesizedExpression(Token token) {
     doPrint('parseParenthesizedExpression(' '$token)');
     indent++;
@@ -1381,6 +1531,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionInParenthesis(Token token) {
     doPrint('parseExpressionInParenthesis(' '$token)');
     indent++;
@@ -1389,6 +1540,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionInParenthesisRest(Token token) {
     doPrint('parseExpressionInParenthesisRest(' '$token)');
     indent++;
@@ -1397,6 +1549,7 @@
     return result;
   }
 
+  @override
   Token parseThisExpression(Token token, IdentifierContext context) {
     doPrint('parseThisExpression(' '$token, ' '$context)');
     indent++;
@@ -1405,6 +1558,7 @@
     return result;
   }
 
+  @override
   Token parseSuperExpression(Token token, IdentifierContext context) {
     doPrint('parseSuperExpression(' '$token, ' '$context)');
     indent++;
@@ -1413,6 +1567,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralListSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralListSuffix(' '$token, ' '$constKeyword)');
     indent++;
@@ -1421,6 +1576,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralSetOrMapSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralSetOrMapSuffix(' '$token, ' '$constKeyword)');
     indent++;
@@ -1429,6 +1585,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralFunctionSuffix(Token token) {
     doPrint('parseLiteralFunctionSuffix(' '$token)');
     indent++;
@@ -1437,6 +1594,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralListSetMapOrFunction(
       final Token start, Token? constKeyword) {
     doPrint('parseLiteralListSetMapOrFunction(' '$start, ' '$constKeyword)');
@@ -1446,6 +1604,7 @@
     return result;
   }
 
+  @override
   Token parseMapLiteralEntry(Token token) {
     doPrint('parseMapLiteralEntry(' '$token)');
     indent++;
@@ -1454,6 +1613,7 @@
     return result;
   }
 
+  @override
   Token parseSendOrFunctionLiteral(Token token, IdentifierContext context) {
     doPrint('parseSendOrFunctionLiteral(' '$token, ' '$context)');
     indent++;
@@ -1462,6 +1622,7 @@
     return result;
   }
 
+  @override
   Token ensureArguments(Token token) {
     doPrint('ensureArguments(' '$token)');
     indent++;
@@ -1470,6 +1631,7 @@
     return result;
   }
 
+  @override
   Token parseConstructorInvocationArguments(Token token) {
     doPrint('parseConstructorInvocationArguments(' '$token)');
     indent++;
@@ -1478,6 +1640,7 @@
     return result;
   }
 
+  @override
   Token parseNewExpression(Token token) {
     doPrint('parseNewExpression(' '$token)');
     indent++;
@@ -1486,6 +1649,7 @@
     return result;
   }
 
+  @override
   Token parseImplicitCreationExpression(
       Token token, TypeParamOrArgInfo typeArg) {
     doPrint('parseImplicitCreationExpression(' '$token, ' '$typeArg)');
@@ -1495,6 +1659,7 @@
     return result;
   }
 
+  @override
   Token parseConstExpression(Token token) {
     doPrint('parseConstExpression(' '$token)');
     indent++;
@@ -1503,6 +1668,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralInt(Token token) {
     doPrint('parseLiteralInt(' '$token)');
     indent++;
@@ -1511,6 +1677,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralDouble(Token token) {
     doPrint('parseLiteralDouble(' '$token)');
     indent++;
@@ -1519,6 +1686,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralString(Token token) {
     doPrint('parseLiteralString(' '$token)');
     indent++;
@@ -1527,6 +1695,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralSymbol(Token token) {
     doPrint('parseLiteralSymbol(' '$token)');
     indent++;
@@ -1535,6 +1704,7 @@
     return result;
   }
 
+  @override
   Token parseSingleLiteralString(Token token) {
     doPrint('parseSingleLiteralString(' '$token)');
     indent++;
@@ -1543,6 +1713,7 @@
     return result;
   }
 
+  @override
   Token parseIdentifierExpression(Token token) {
     doPrint('parseIdentifierExpression(' '$token)');
     indent++;
@@ -1551,6 +1722,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralBool(Token token) {
     doPrint('parseLiteralBool(' '$token)');
     indent++;
@@ -1559,6 +1731,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralNull(Token token) {
     doPrint('parseLiteralNull(' '$token)');
     indent++;
@@ -1567,6 +1740,7 @@
     return result;
   }
 
+  @override
   Token parseSend(Token token, IdentifierContext context) {
     doPrint('parseSend(' '$token, ' '$context)');
     indent++;
@@ -1575,6 +1749,7 @@
     return result;
   }
 
+  @override
   Token skipArgumentsOpt(Token token) {
     doPrint('skipArgumentsOpt(' '$token)');
     indent++;
@@ -1583,6 +1758,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentsOpt(Token token) {
     doPrint('parseArgumentsOpt(' '$token)');
     indent++;
@@ -1591,6 +1767,7 @@
     return result;
   }
 
+  @override
   Token parseArguments(Token token) {
     doPrint('parseArguments(' '$token)');
     indent++;
@@ -1599,6 +1776,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentsRest(Token token) {
     doPrint('parseArgumentsRest(' '$token)');
     indent++;
@@ -1607,6 +1785,7 @@
     return result;
   }
 
+  @override
   Token parseIsOperatorRest(Token token) {
     doPrint('parseIsOperatorRest(' '$token)');
     indent++;
@@ -1615,6 +1794,7 @@
     return result;
   }
 
+  @override
   TypeInfo computeTypeAfterIsOrAs(Token token) {
     doPrint('computeTypeAfterIsOrAs(' '$token)');
     indent++;
@@ -1623,6 +1803,7 @@
     return result;
   }
 
+  @override
   Token parseAsOperatorRest(Token token) {
     doPrint('parseAsOperatorRest(' '$token)');
     indent++;
@@ -1631,6 +1812,7 @@
     return result;
   }
 
+  @override
   Token skipChainedAsIsOperators(Token token) {
     doPrint('skipChainedAsIsOperators(' '$token)');
     indent++;
@@ -1639,6 +1821,7 @@
     return result;
   }
 
+  @override
   bool looksLikeLocalFunction(Token token) {
     doPrint('looksLikeLocalFunction(' '$token)');
     indent++;
@@ -1647,6 +1830,7 @@
     return result;
   }
 
+  @override
   bool looksLikeFunctionBody(Token token) {
     doPrint('looksLikeFunctionBody(' '$token)');
     indent++;
@@ -1655,6 +1839,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrConstDeclaration(final Token start) {
     doPrint('parseExpressionStatementOrConstDeclaration(' '$start)');
     indent++;
@@ -1663,6 +1848,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrDeclaration(final Token start,
       [bool onlyParseVariableDeclarationStart = false]) {
     doPrint('parseExpressionStatementOrDeclaration('
@@ -1675,6 +1861,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrDeclarationAfterModifiers(
       Token beforeType,
       Token start,
@@ -1701,6 +1888,7 @@
     return result;
   }
 
+  @override
   Token parseVariablesDeclarationRest(Token token, bool endWithSemicolon) {
     doPrint('parseVariablesDeclarationRest(' '$token, ' '$endWithSemicolon)');
     indent++;
@@ -1709,6 +1897,7 @@
     return result;
   }
 
+  @override
   Token parseOptionallyInitializedIdentifier(Token token) {
     doPrint('parseOptionallyInitializedIdentifier(' '$token)');
     indent++;
@@ -1717,6 +1906,7 @@
     return result;
   }
 
+  @override
   Token parseIfStatement(Token token) {
     doPrint('parseIfStatement(' '$token)');
     indent++;
@@ -1725,6 +1915,7 @@
     return result;
   }
 
+  @override
   Token parseForStatement(Token token, Token? awaitToken) {
     doPrint('parseForStatement(' '$token, ' '$awaitToken)');
     indent++;
@@ -1733,6 +1924,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsStart(Token? awaitToken, Token forToken) {
     doPrint('parseForLoopPartsStart(' '$awaitToken, ' '$forToken)');
     indent++;
@@ -1741,6 +1933,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsMid(Token token, Token? awaitToken, Token forToken) {
     doPrint('parseForLoopPartsMid(' '$token, ' '$awaitToken, ' '$forToken)');
     indent++;
@@ -1749,6 +1942,7 @@
     return result;
   }
 
+  @override
   Token parseForRest(Token? awaitToken, Token token, Token forToken) {
     doPrint('parseForRest(' '$awaitToken, ' '$token, ' '$forToken)');
     indent++;
@@ -1757,6 +1951,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsRest(Token token, Token forToken, Token? awaitToken) {
     doPrint('parseForLoopPartsRest(' '$token, ' '$forToken, ' '$awaitToken)');
     indent++;
@@ -1765,6 +1960,7 @@
     return result;
   }
 
+  @override
   Token parseForInRest(
       Token token, Token? awaitToken, Token forToken, Token identifier) {
     doPrint('parseForInRest('
@@ -1778,6 +1974,7 @@
     return result;
   }
 
+  @override
   Token parseForInLoopPartsRest(
       Token token, Token? awaitToken, Token forToken, Token identifier) {
     doPrint('parseForInLoopPartsRest('
@@ -1792,6 +1989,7 @@
     return result;
   }
 
+  @override
   Token parseWhileStatement(Token token) {
     doPrint('parseWhileStatement(' '$token)');
     indent++;
@@ -1800,6 +1998,7 @@
     return result;
   }
 
+  @override
   Token parseDoWhileStatement(Token token) {
     doPrint('parseDoWhileStatement(' '$token)');
     indent++;
@@ -1808,6 +2007,7 @@
     return result;
   }
 
+  @override
   Token parseBlock(Token token, BlockKind blockKind) {
     doPrint('parseBlock(' '$token, ' '$blockKind)');
     indent++;
@@ -1816,6 +2016,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidBlock(Token token) {
     doPrint('parseInvalidBlock(' '$token)');
     indent++;
@@ -1824,6 +2025,7 @@
     return result;
   }
 
+  @override
   bool looksLikeExpression(Token token) {
     doPrint('looksLikeExpression(' '$token)');
     indent++;
@@ -1832,6 +2034,7 @@
     return result;
   }
 
+  @override
   bool looksLikeAwaitExpression(Token token) {
     doPrint('looksLikeAwaitExpression(' '$token)');
     indent++;
@@ -1840,6 +2043,7 @@
     return result;
   }
 
+  @override
   bool looksLikeYieldStatement(Token token) {
     doPrint('looksLikeYieldStatement(' '$token)');
     indent++;
@@ -1848,6 +2052,7 @@
     return result;
   }
 
+  @override
   Token parseAwaitExpression(Token token, bool allowCascades) {
     doPrint('parseAwaitExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1856,6 +2061,7 @@
     return result;
   }
 
+  @override
   Token parseThrowExpression(Token token, bool allowCascades) {
     doPrint('parseThrowExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1864,6 +2070,7 @@
     return result;
   }
 
+  @override
   Token parseRethrowStatement(Token token) {
     doPrint('parseRethrowStatement(' '$token)');
     indent++;
@@ -1872,6 +2079,7 @@
     return result;
   }
 
+  @override
   Token parseTryStatement(Token token) {
     doPrint('parseTryStatement(' '$token)');
     indent++;
@@ -1880,6 +2088,7 @@
     return result;
   }
 
+  @override
   Token parseSwitchStatement(Token token) {
     doPrint('parseSwitchStatement(' '$token)');
     indent++;
@@ -1888,6 +2097,7 @@
     return result;
   }
 
+  @override
   Token parseSwitchBlock(Token token) {
     doPrint('parseSwitchBlock(' '$token)');
     indent++;
@@ -1896,6 +2106,7 @@
     return result;
   }
 
+  @override
   Token peekPastLabels(Token token) {
     doPrint('peekPastLabels(' '$token)');
     indent++;
@@ -1904,6 +2115,7 @@
     return result;
   }
 
+  @override
   Token parseStatementsInSwitchCase(
       Token token,
       Token peek,
@@ -1927,6 +2139,7 @@
     return result;
   }
 
+  @override
   Token parseBreakStatement(Token token) {
     doPrint('parseBreakStatement(' '$token)');
     indent++;
@@ -1935,6 +2148,7 @@
     return result;
   }
 
+  @override
   Token parseAssert(Token token, Assert kind) {
     doPrint('parseAssert(' '$token, ' '$kind)');
     indent++;
@@ -1943,6 +2157,7 @@
     return result;
   }
 
+  @override
   Token parseAssertStatement(Token token) {
     doPrint('parseAssertStatement(' '$token)');
     indent++;
@@ -1951,6 +2166,7 @@
     return result;
   }
 
+  @override
   Token parseContinueStatement(Token token) {
     doPrint('parseContinueStatement(' '$token)');
     indent++;
@@ -1959,6 +2175,7 @@
     return result;
   }
 
+  @override
   Token parseEmptyStatement(Token token) {
     doPrint('parseEmptyStatement(' '$token)');
     indent++;
@@ -1967,6 +2184,7 @@
     return result;
   }
 
+  @override
   Token previousToken(Token beforeToken, Token token) {
     doPrint('previousToken(' '$beforeToken, ' '$token)');
     indent++;
@@ -1975,6 +2193,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidOperatorDeclaration(
       Token beforeStart,
       Token? abstractToken,
@@ -2013,6 +2232,7 @@
     return result;
   }
 
+  @override
   Token recoverFromInvalidMember(
       Token token,
       Token beforeStart,
@@ -2060,6 +2280,7 @@
     return result;
   }
 
+  @override
   Token recoverFromStackOverflow(Token token) {
     doPrint('recoverFromStackOverflow(' '$token)');
     indent++;
@@ -2068,6 +2289,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableError(Token token, codes.Message message) {
     doPrint('reportRecoverableError(' '$token, ' '$message)');
     indent++;
@@ -2076,6 +2298,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableErrorWithEnd(
       Token startToken, Token endToken, codes.Message message) {
     doPrint('reportRecoverableErrorWithEnd('
@@ -2089,6 +2312,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableErrorWithToken(Token token, dynamic template) {
     doPrint('reportRecoverableErrorWithToken(' '$token, ' '$template)');
     indent++;
@@ -2097,6 +2321,7 @@
     return result;
   }
 
+  @override
   Token reportAllErrorTokens(Token token) {
     doPrint('reportAllErrorTokens(' '$token)');
     indent++;
@@ -2105,6 +2330,7 @@
     return result;
   }
 
+  @override
   Token skipErrorTokens(Token token) {
     doPrint('skipErrorTokens(' '$token)');
     indent++;
@@ -2113,6 +2339,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidTopLevelDeclaration(Token token) {
     doPrint('parseInvalidTopLevelDeclaration(' '$token)');
     indent++;
@@ -2121,6 +2348,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipClassInClass(Token token) {
     doPrint('reportAndSkipClassInClass(' '$token)');
     indent++;
@@ -2129,6 +2357,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipEnumInClass(Token token) {
     doPrint('reportAndSkipEnumInClass(' '$token)');
     indent++;
@@ -2137,6 +2366,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipTypedefInClass(Token token) {
     doPrint('reportAndSkipTypedefInClass(' '$token)');
     indent++;
@@ -2145,6 +2375,7 @@
     return result;
   }
 
+  @override
   Token link(BeginToken beginToken, Token endToken) {
     doPrint('link(' '$beginToken, ' '$endToken)');
     indent++;
@@ -2153,6 +2384,7 @@
     return result;
   }
 
+  @override
   Token syntheticPreviousToken(Token token) {
     doPrint('syntheticPreviousToken(' '$token)');
     indent++;
@@ -2161,6 +2393,7 @@
     return result;
   }
 
+  @override
   Token? findDartDoc(Token token) {
     doPrint('findDartDoc(' '$token)');
     indent++;
@@ -2169,6 +2402,7 @@
     return result;
   }
 
+  @override
   int parseCommentReferences(Token dartdoc) {
     doPrint('parseCommentReferences(' '$dartdoc)');
     indent++;
@@ -2177,6 +2411,7 @@
     return result;
   }
 
+  @override
   int parseReferencesInMultiLineComment(Token multiLineDoc) {
     doPrint('parseReferencesInMultiLineComment(' '$multiLineDoc)');
     indent++;
@@ -2185,6 +2420,7 @@
     return result;
   }
 
+  @override
   int parseReferencesInSingleLineComments(Token? token) {
     doPrint('parseReferencesInSingleLineComments(' '$token)');
     indent++;
@@ -2193,6 +2429,7 @@
     return result;
   }
 
+  @override
   int parseCommentReferencesInText(Token commentToken, int start, int end) {
     doPrint(
         'parseCommentReferencesInText(' '$commentToken, ' '$start, ' '$end)');
@@ -2202,6 +2439,7 @@
     return result;
   }
 
+  @override
   int findReferenceEnd(String comment, int index, int end) {
     doPrint('findReferenceEnd(' '$comment, ' '$index, ' '$end)');
     indent++;
@@ -2210,6 +2448,7 @@
     return result;
   }
 
+  @override
   bool parseOneCommentReference(Token token, int referenceOffset) {
     doPrint('parseOneCommentReference(' '$token, ' '$referenceOffset)');
     indent++;
@@ -2218,6 +2457,7 @@
     return result;
   }
 
+  @override
   void parseOneCommentReferenceRest(
       Token begin,
       int referenceOffset,
@@ -2239,6 +2479,7 @@
     return result;
   }
 
+  @override
   bool isLinkText(String comment, int rightIndex) {
     doPrint('isLinkText(' '$comment, ' '$rightIndex)');
     indent++;
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 0a69b8b..ccc24c3 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -14,7 +14,7 @@
 
 import 'utils/io_utils.dart' show computeRepoDirUri;
 
-main(List<String> args) {
+void main(List<String> args) {
   final Uri repoDir = computeRepoDirUri();
   String generated = generateTestParser(repoDir);
   new File.fromUri(computeTestParserUri(repoDir))
@@ -44,6 +44,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/directive_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
@@ -55,6 +56,8 @@
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:front_end/src/fasta/fasta_codes.dart' as codes;
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    show useImplicitCreationExpressionInCfe;
 
 // THIS FILE IS AUTO GENERATED BY 'test/parser_test_parser_creator.dart'
 // Run this command to update it:
@@ -65,7 +68,9 @@
   StringBuffer sb = new StringBuffer();
   final bool trace;
 
-  TestParser(Listener listener, this.trace) : super(listener);
+  TestParser(Listener listener, this.trace)
+      : super(listener,
+            useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
 
   String createTrace() {
     List<String> traceLines = StackTrace.current.toString().split("\n");
@@ -107,19 +112,23 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
     if (name.lexeme == "Parser") insideParserClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideParserClass = false;
   }
 
+  @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
       Token varFinalOrConst, Token getOrSet, Token name) {
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassConstructor(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     parameters.clear();
@@ -127,11 +136,13 @@
     currentMethodName = null;
   }
 
+  @override
   void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     if (insideParserClass && !currentMethodName.startsWith("_")) {
       Token token = beginToken;
       Token latestToken;
+      out.writeln("  @override");
       out.write("  ");
       while (true) {
         if (troubleParameterTokens.containsKey(token)) {
@@ -216,10 +227,12 @@
   }
 
   int formalParametersNestLevel = 0;
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     formalParametersNestLevel++;
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     formalParametersNestLevel--;
@@ -227,6 +240,7 @@
 
   Token currentFormalParameterToken;
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token requiredToken,
       Token covariantToken, Token varFinalOrConst) {
     if (formalParametersNestLevel == 1) {
@@ -236,12 +250,14 @@
 
   Map<Token, Token> troubleParameterTokens = {};
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     if (formalParametersNestLevel > 0 && token.lexeme.startsWith("_")) {
       troubleParameterTokens[currentFormalParameterToken] = null;
     }
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 3389f04..8ad7d4e 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -19,7 +19,7 @@
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<Features>(dataDir,
       args: args,
diff --git a/pkg/front_end/test/precedence_info_test.dart b/pkg/front_end/test/precedence_info_test.dart
index fd88c3e..cce5241 100644
--- a/pkg/front_end/test/precedence_info_test.dart
+++ b/pkg/front_end/test/precedence_info_test.dart
@@ -12,7 +12,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PrecedenceInfoTest);
   });
diff --git a/pkg/front_end/test/predicates/predicate_test.dart b/pkg/front_end/test/predicates/predicate_test.dart
index 5d98cff..98ed0cb 100644
--- a/pkg/front_end/test/predicates/predicate_test.dart
+++ b/pkg/front_end/test/predicates/predicate_test.dart
@@ -23,7 +23,7 @@
 const String isNullMarker = 'is-null';
 const String sentinelMarker = 'sentinel';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<Features>(dataDir,
       args: args,
@@ -34,7 +34,7 @@
             explicitExperimentalFlags: const {
               ExperimentalFlag.nonNullable: true
             },
-            targetFlags: const TargetFlags(
+            targetFlags: const TestTargetFlags(
                 forceLateLoweringsForTesting: LateLowering.all,
                 forceLateLoweringSentinelForTesting: false),
             nnbdMode: NnbdMode.Strong),
@@ -42,7 +42,7 @@
             explicitExperimentalFlags: const {
               ExperimentalFlag.nonNullable: true
             },
-            targetFlags: const TargetFlags(
+            targetFlags: const TestTargetFlags(
                 forceLateLoweringsForTesting: LateLowering.all,
                 forceLateLoweringSentinelForTesting: true),
             nnbdMode: NnbdMode.Strong)
@@ -72,6 +72,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -160,6 +161,7 @@
     return null;
   }
 
+  @override
   void visitProcedure(Procedure node) {
     super.visitProcedure(node);
     nodeIdMap.forEach((String name, NodeId id) {
@@ -174,6 +176,7 @@
     featureMap.clear();
   }
 
+  @override
   void visitVariableDeclaration(VariableDeclaration node) {
     String name;
     String tag;
diff --git a/pkg/front_end/test/read_dill_from_binary_md_git_test.dart b/pkg/front_end/test/read_dill_from_binary_md_git_test.dart
index fb6ccaf..7d2da16 100644
--- a/pkg/front_end/test/read_dill_from_binary_md_git_test.dart
+++ b/pkg/front_end/test/read_dill_from_binary_md_git_test.dart
@@ -14,7 +14,7 @@
 
 import 'utils/io_utils.dart' show computeRepoDir;
 
-main() async {
+void main() async {
   await testDart2jsCompile();
 }
 
diff --git a/pkg/front_end/test/relativize_test.dart b/pkg/front_end/test/relativize_test.dart
index 28c4acc..c42fac6 100644
--- a/pkg/front_end/test/relativize_test.dart
+++ b/pkg/front_end/test/relativize_test.dart
@@ -16,7 +16,7 @@
         return;
       }
 
-      test(Uri base, Uri uri) {
+      void test(Uri base, Uri uri) {
         String r = relativizeUri(base, uri, isWindows);
         Uri resolved = base.resolve(r);
         expect(resolved.scheme.toLowerCase(), uri.scheme.toLowerCase());
diff --git a/pkg/front_end/test/resolve_input_uri_test.dart b/pkg/front_end/test/resolve_input_uri_test.dart
deleted file mode 100644
index 3705440..0000000
--- a/pkg/front_end/test/resolve_input_uri_test.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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:_fe_analyzer_shared/src/util/relativize.dart';
-import 'package:expect/expect.dart' show Expect;
-import 'package:front_end/src/fasta/resolve_input_uri.dart';
-
-test() {
-  // data URI scheme is supported by default'.
-  Expect.stringEquals('data', resolveInputUri('data:,foo').scheme);
-
-  // Custom Dart schemes are recognized by default.
-  Expect.stringEquals('dart', resolveInputUri('dart:foo').scheme);
-  Expect.stringEquals('package', resolveInputUri('package:foo').scheme);
-
-  // Unknown schemes are recognized by default.
-  Expect.stringEquals(
-      isWindows ? 'file' : 'c', resolveInputUri('c:/foo').scheme);
-  Expect.stringEquals('test', resolveInputUri('test:foo').scheme);
-  Expect.stringEquals(
-      'org-dartlang-foo', resolveInputUri('org-dartlang-foo:bar').scheme);
-  Expect.stringEquals('test', resolveInputUri('test:/foo').scheme);
-  Expect.stringEquals(
-      'org-dartlang-foo', resolveInputUri('org-dartlang-foo:/bar').scheme);
-  Expect.stringEquals(
-      "${Uri.base.resolve('file.txt')}", "${resolveInputUri('file:file.txt')}");
-}
-
-main() {
-  // Test platform default.
-  test();
-  // Test non-Windows behavior.
-  isWindows = false;
-  test();
-  // Test Windows behavior.
-  isWindows = true;
-  test();
-}
diff --git a/pkg/front_end/test/scanner_fasta_test.dart b/pkg/front_end/test/scanner_fasta_test.dart
index 7b59523..b5c55b5 100644
--- a/pkg/front_end/test/scanner_fasta_test.dart
+++ b/pkg/front_end/test/scanner_fasta_test.dart
@@ -20,7 +20,7 @@
 
 import 'scanner_test.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ScannerTest_Fasta);
     defineReflectiveTests(ScannerTest_Fasta_FuzzTestAPI);
@@ -32,7 +32,7 @@
 
 @reflectiveTest
 class ScannerTest_Fasta_FuzzTestAPI {
-  test_API() {
+  void test_API() {
     // These two API are used when fuzz testing the scanner.
     String source = 'class A { }';
 
@@ -76,8 +76,8 @@
     return token;
   }
 
-  test_invalid_utf8() {
-    printBytes(List<int> bytes) {
+  void test_invalid_utf8() {
+    void printBytes(List<int> bytes) {
       var hex = bytes.map((b) => '0x${b.toRadixString(16).toUpperCase()}');
       print('$bytes\n[${hex.join(', ')}]');
       try {
@@ -88,7 +88,7 @@
       }
     }
 
-    scanBytes(List<int> bytes) {
+    ScannerResult scanBytes(List<int> bytes) {
       try {
         return usedForFuzzTesting.scan(bytes);
       } catch (e) {
@@ -373,7 +373,7 @@
 abstract class ScannerTest_Fasta_Base {
   Token scan(String source);
 
-  expectToken(Token token, TokenType type, int offset, int length,
+  void expectToken(Token token, TokenType type, int offset, int length,
       {bool isSynthetic: false, String lexeme}) {
     String description = '${token.type} $token';
     expect(token.type, type, reason: description);
@@ -742,6 +742,7 @@
 /// Scanner tests that exercise the Fasta scanner directly.
 @reflectiveTest
 class ScannerTest_Fasta_Direct_UTF8 extends ScannerTest_Fasta_Direct {
+  @override
   ScannerResult scanSource(source, {includeComments: true}) {
     List<int> encoded = utf8.encode(source).toList(growable: true);
     encoded.add(0); // Ensure 0 terminated bytes for UTF8 scanner
diff --git a/pkg/front_end/test/scanner_replacement_test.dart b/pkg/front_end/test/scanner_replacement_test.dart
index 0e90322..dff9d26 100644
--- a/pkg/front_end/test/scanner_replacement_test.dart
+++ b/pkg/front_end/test/scanner_replacement_test.dart
@@ -14,7 +14,7 @@
 
 import 'scanner_test.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ScannerTest_Replacement);
   });
@@ -89,6 +89,7 @@
     expect(error.offset, source.length - 1);
   }
 
+  @override
   void test_lt() {
     // fasta does not automatically insert a closer for '<'
     // because it could be part of an expression rather than an opener
@@ -110,6 +111,7 @@
     _assertOpenClosePair('{ }');
   }
 
+  @override
   void test_open_paren() {
     _assertOpenOnly('(', ')');
   }
@@ -118,6 +120,7 @@
     _assertOpenClosePair('( )');
   }
 
+  @override
   void test_open_square_bracket() {
     _assertOpenOnly('[', ']');
   }
diff --git a/pkg/front_end/test/scanner_test.dart b/pkg/front_end/test/scanner_test.dart
index 4a62db4..cbf28bc 100644
--- a/pkg/front_end/test/scanner_test.dart
+++ b/pkg/front_end/test/scanner_test.dart
@@ -13,7 +13,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CharSequenceReaderTest);
     defineReflectiveTests(TokenTypeTest);
@@ -1544,7 +1544,7 @@
   TestError(this.offset, this.errorCode, this.arguments);
 
   @override
-  get hashCode {
+  int get hashCode {
     int h = combineHash(combineHash(0, offset), errorCode.hashCode);
     if (arguments != null) {
       for (Object argument in arguments) {
@@ -1555,7 +1555,7 @@
   }
 
   @override
-  operator ==(Object other) {
+  bool operator ==(Object other) {
     if (other is TestError &&
         offset == other.offset &&
         errorCode == other.errorCode) {
@@ -1571,7 +1571,7 @@
   }
 
   @override
-  toString() {
+  String toString() {
     var argString = arguments == null ? '' : '(${arguments.join(', ')})';
     return 'Error($offset, $errorCode$argString)';
   }
diff --git a/pkg/front_end/test/scheme_based_file_system_test.dart b/pkg/front_end/test/scheme_based_file_system_test.dart
index f5c018e..2cbe46e 100644
--- a/pkg/front_end/test/scheme_based_file_system_test.dart
+++ b/pkg/front_end/test/scheme_based_file_system_test.dart
@@ -9,7 +9,7 @@
 
 import 'package:test/test.dart';
 
-main() {
+void main() {
   test('lookup of registered schemes is handled', () {
     var fs1 = new MockFileSystem('scheme1');
     var fs2 = new MockFileSystem('scheme2');
@@ -44,9 +44,11 @@
 }
 
 class MockFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
   final FileSystem fileSystem;
   MockFileSystemEntity(this.uri, this.fileSystem);
 
-  noSuchMethod(m) => super.noSuchMethod(m);
+  @override
+  dynamic noSuchMethod(m) => super.noSuchMethod(m);
 }
diff --git a/pkg/front_end/test/severity_index_test.dart b/pkg/front_end/test/severity_index_test.dart
index 8dc6f14..105e46b 100644
--- a/pkg/front_end/test/severity_index_test.dart
+++ b/pkg/front_end/test/severity_index_test.dart
@@ -8,7 +8,7 @@
 
 /// Test that Severity has the expected indexes. Note that this is important
 /// and shouldn't be changed lightly because we use it in serialization!
-main() {
+void main() {
   expect(Severity.context.index, 0);
   expect(Severity.error.index, 1);
   expect(Severity.internalProblem.index, 3);
diff --git a/pkg/front_end/test/simple_stats.dart b/pkg/front_end/test/simple_stats.dart
index 6ffd5c5..6a94bbe 100644
--- a/pkg/front_end/test/simple_stats.dart
+++ b/pkg/front_end/test/simple_stats.dart
@@ -105,6 +105,7 @@
   TTestResult(this.significant, this.percentDiff, this.percentDiffConfidence,
       this.diff, this.confidence);
 
+  @override
   String toString() {
     if (significant) {
       double leastConfidentChange;
diff --git a/pkg/front_end/test/spell_checking_cleanup_lists.dart b/pkg/front_end/test/spell_checking_cleanup_lists.dart
index 6f38991..ea44732 100644
--- a/pkg/front_end/test/spell_checking_cleanup_lists.dart
+++ b/pkg/front_end/test/spell_checking_cleanup_lists.dart
@@ -8,7 +8,7 @@
 
 import 'spell_checking_utils.dart' as spell;
 
-main() {
+void main() {
   {
     spell.ensureDictionariesLoaded([spell.Dictionaries.common]);
     Set<String> commonWords =
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 7cc2003..fe6e872 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -90,6 +90,7 @@
 b2i
 b2m
 b2n
+backlog
 backping
 backstop
 badly
@@ -142,6 +143,7 @@
 bsd
 bslash
 buffered
+buggy
 builder`s
 bulk
 bump
@@ -262,6 +264,7 @@
 coverage
 cr
 creator
+creators
 criterion
 cross
 cruft
@@ -286,6 +289,7 @@
 dartdoc
 dartfix
 dartlang
+dashes
 dc
 ddc
 ddk
@@ -390,8 +394,8 @@
 enforced
 enforces
 enforcing
-enters
 engineered
+enters
 enumerates
 env
 eof
@@ -456,6 +460,7 @@
 firsts
 fishy
 fishythefish
+fits
 fixnum
 fleshed
 float32
@@ -556,6 +561,7 @@
 i2b
 ic
 id
+ideal
 identifies
 identifying
 ideographic
@@ -577,6 +583,7 @@
 inc
 incomparable
 inconsistency
+increased
 incremented
 independently
 indexer
@@ -692,6 +699,7 @@
 llub
 lm
 locationd
+logged
 logically
 lots
 lp
@@ -894,6 +902,7 @@
 physically
 pi
 picking
+pipe
 pkg
 play
 player
@@ -909,6 +918,7 @@
 pos
 possibility
 postfix
+pound
 pow
 pragma
 pre
@@ -1073,7 +1083,7 @@
 rs
 runnable
 s
-sand
+sandboxed
 sanitizing
 saw
 say
@@ -1254,6 +1264,7 @@
 tflite
 th
 therein
+they'll
 thought
 ti
 tick
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 0b93c1a..73be42a 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -1866,6 +1866,8 @@
 metadata
 method
 methods
+metric
+metrics
 microseconds
 microtask
 mid
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 808f9f1..5d363a0 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -59,6 +59,7 @@
 outdated
 part(s)
 patch(es)
+placing
 pubspec.yaml
 re
 sdksummary
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 150c716..398070d 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -38,6 +38,7 @@
 anon
 aoo
 aot
+applier
 approval
 approximation
 arbitrarily
@@ -144,6 +145,8 @@
 c7a
 c8a
 c8b
+c8c
+c8d
 ca
 cafebabe
 calloc
@@ -207,6 +210,7 @@
 consecutive
 considering
 consist
+constr
 constrains
 consts
 contract
@@ -386,6 +390,7 @@
 f6b
 f7a
 f8a
+f8b
 fac
 faking
 falling
@@ -451,6 +456,7 @@
 frozen
 fulfill
 func
+futu
 futures
 fuzz
 fuzzing
@@ -545,6 +551,7 @@
 insufficient
 intdiv
 interactive
+interchangeable
 interested
 internet
 interpolate
@@ -708,6 +715,7 @@
 outlined
 overhead
 overlay
+overly
 ox
 pack
 paging
@@ -816,7 +824,7 @@
 rows
 runtimes
 rv
-sand
+sandboxed
 saves
 scans
 scheduler
@@ -843,6 +851,7 @@
 shipped
 shortest
 shot
+sidebar
 sigint
 signaling
 signalled
diff --git a/pkg/front_end/test/spelling_test_base.dart b/pkg/front_end/test/spelling_test_base.dart
index a7dd236..fd1c94a 100644
--- a/pkg/front_end/test/spelling_test_base.dart
+++ b/pkg/front_end/test/spelling_test_base.dart
@@ -29,6 +29,7 @@
 import 'testing_utils.dart' show filterList;
 
 abstract class SpellContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const SpellTest(),
   ];
@@ -81,8 +82,10 @@
 class SpellTest extends Step<TestDescription, TestDescription, SpellContext> {
   const SpellTest();
 
+  @override
   String get name => "spell test";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, SpellContext context) async {
     File f = new File.fromUri(description.uri);
diff --git a/pkg/front_end/test/spelling_test_external_targets.dart b/pkg/front_end/test/spelling_test_external_targets.dart
index 9bae907..952f4b3 100644
--- a/pkg/front_end/test/spelling_test_external_targets.dart
+++ b/pkg/front_end/test/spelling_test_external_targets.dart
@@ -15,7 +15,7 @@
 
 import 'testing_utils.dart' show checkEnvironment;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
@@ -43,6 +43,7 @@
   String get repoRelativeSuitePath =>
       "pkg/front_end/test/spelling_test_external_targets.dart";
 
+  @override
   Stream<TestDescription> list(Chain suite) async* {
     for (String subdir in const ["pkg/", "sdk/"]) {
       Directory testRoot = new Directory.fromUri(suite.uri.resolve(subdir));
diff --git a/pkg/front_end/test/spelling_test_not_src_suite.dart b/pkg/front_end/test/spelling_test_not_src_suite.dart
index 6504052..9eb9921e 100644
--- a/pkg/front_end/test/spelling_test_not_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_not_src_suite.dart
@@ -12,7 +12,7 @@
 
 import 'testing_utils.dart' show checkEnvironment;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
diff --git a/pkg/front_end/test/spelling_test_src_suite.dart b/pkg/front_end/test/spelling_test_src_suite.dart
index 4ea5bb0..f77e918 100644
--- a/pkg/front_end/test/spelling_test_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_src_suite.dart
@@ -12,7 +12,7 @@
 
 import 'testing_utils.dart' show checkEnvironment;
 
-main([List<String> arguments = const []]) =>
+void main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
diff --git a/pkg/front_end/test/split_dill_test.dart b/pkg/front_end/test/split_dill_test.dart
index 59d1d91..f4ebb71 100644
--- a/pkg/front_end/test/split_dill_test.dart
+++ b/pkg/front_end/test/split_dill_test.dart
@@ -22,7 +22,7 @@
 
 import 'utils/io_utils.dart' show computeRepoDir;
 
-main() async {
+void main() async {
   final Uri dart2jsUrl = Uri.base.resolve("pkg/compiler/bin/dart2js.dart");
   Stopwatch stopwatch = new Stopwatch()..start();
   Component component = await normalCompileToComponent(dart2jsUrl,
diff --git a/pkg/front_end/test/src/base/libraries_specification_test.dart b/pkg/front_end/test/src/base/libraries_specification_test.dart
index 14cbae1..033a877 100644
--- a/pkg/front_end/test/src/base/libraries_specification_test.dart
+++ b/pkg/front_end/test/src/base/libraries_specification_test.dart
@@ -7,7 +7,7 @@
 import 'package:front_end/src/base/libraries_specification.dart';
 import 'package:test/test.dart';
 
-main() {
+void main() {
   group('parse', () {
     test('top-level must be a map', () async {
       var jsonString = '[]';
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 9da4fd3..529e56b 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -22,7 +22,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   CompilerContext.runWithDefaultOptions((_) {
     defineReflectiveSuite(() {
       defineReflectiveTests(ProcessedOptionsTest);
@@ -45,7 +45,7 @@
         ..setMainMethodAndMode(
             null, false, NonNullableByDefaultCompiledMode.Weak);
 
-  test_compileSdk_false() {
+  void test_compileSdk_false() {
     for (var value in [false, true]) {
       var raw = new CompilerOptions()..compileSdk = value;
       var processed = new ProcessedOptions(options: raw);
@@ -53,7 +53,7 @@
     }
   }
 
-  test_sdk_summary_inferred() {
+  void test_sdk_summary_inferred() {
     // The sdk-summary is inferred by default form sdk-root, when compile-sdk is
     // false
     var raw = new CompilerOptions()
@@ -69,7 +69,7 @@
     expect(new ProcessedOptions(options: raw).sdkSummary, null);
   }
 
-  test_fileSystem_noBazelRoots() {
+  void test_fileSystem_noBazelRoots() {
     // When no bazel roots are specified, the filesystem should be passed
     // through unmodified.
     var raw = new CompilerOptions()..fileSystem = fileSystem;
@@ -77,7 +77,7 @@
     expect(processed.fileSystem, same(fileSystem));
   }
 
-  test_getSdkSummaryBytes_summaryLocationProvided() async {
+  void test_getSdkSummaryBytes_summaryLocationProvided() async {
     var uri = Uri.parse('org-dartlang-test:///sdkSummary');
 
     writeMockSummaryTo(uri);
@@ -95,7 +95,7 @@
         mockSummary.libraries.single.importUri);
   }
 
-  test_getSdkSummary_summaryLocationProvided() async {
+  void test_getSdkSummary_summaryLocationProvided() async {
     var uri = Uri.parse('org-dartlang-test:///sdkSummary');
     writeMockSummaryTo(uri);
     await checkMockSummary(new CompilerOptions()
@@ -116,7 +116,7 @@
         mockSummary.libraries.single.importUri);
   }
 
-  test_getUriTranslator_explicitLibrariesSpec() async {
+  void test_getUriTranslator_explicitLibrariesSpec() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
         .writeAsStringSync('');
@@ -134,7 +134,7 @@
         '/bar.dart');
   }
 
-  test_getUriTranslator_inferredLibrariesSpec() async {
+  void test_getUriTranslator_inferredLibrariesSpec() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
         .writeAsStringSync('');
@@ -153,7 +153,7 @@
         '/mysdk/lib/bar.dart');
   }
 
-  test_getUriTranslator_notInferredLibrariesSpec() async {
+  void test_getUriTranslator_notInferredLibrariesSpec() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
         .writeAsStringSync('');
@@ -171,14 +171,14 @@
     expect(uriTranslator.dartLibraries.libraryInfoFor('foo'), isNull);
   }
 
-  checkPackageExpansion(
+  void checkPackageExpansion(
       String packageName, String packageDir, PackageConfig packages) {
     var input = Uri.parse('package:$packageName/a.dart');
     var expected = Uri.parse('org-dartlang-test:///$packageDir/a.dart');
     expect(packages.resolve(input), expected);
   }
 
-  test_getUriTranslator_explicitPackagesFile() async {
+  void test_getUriTranslator_explicitPackagesFile() async {
     // This .packages file should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
@@ -195,7 +195,7 @@
     checkPackageExpansion('foo', 'baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_explicitPackagesFile_withBaseLocation() async {
+  void test_getUriTranslator_explicitPackagesFile_withBaseLocation() async {
     // This .packages file should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
@@ -214,7 +214,7 @@
     checkPackageExpansion('foo', 'base/location/baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_implicitPackagesFile_ambiguous() async {
+  void test_getUriTranslator_implicitPackagesFile_ambiguous() async {
     // This .packages file should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
@@ -231,7 +231,7 @@
     checkPackageExpansion('foo', 'baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_implicitPackagesFile_nextToScript() async {
+  void test_getUriTranslator_implicitPackagesFile_nextToScript() async {
     // Create the base directory.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/'))
@@ -256,7 +256,7 @@
     checkPackageExpansion('foo', 'base/location/baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_implicitPackagesFile_searchAbove() async {
+  void test_getUriTranslator_implicitPackagesFile_searchAbove() async {
     // Create the base directory.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/'))
@@ -277,7 +277,7 @@
     checkPackageExpansion('foo', 'base/baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_implicitPackagesFile_packagesDirectory() async {
+  void test_getUriTranslator_implicitPackagesFile_packagesDirectory() async {
     // Create the base directory.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/'))
@@ -302,7 +302,7 @@
     checkPackageExpansion('foo', 'base/baz', uriTranslator.packages);
   }
 
-  test_getUriTranslator_implicitPackagesFile_noPackages() async {
+  void test_getUriTranslator_implicitPackagesFile_noPackages() async {
     // Create the base directory.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/'))
@@ -320,7 +320,7 @@
     expect(uriTranslator.packages.packages, isEmpty);
   }
 
-  test_getUriTranslator_noPackages() async {
+  void test_getUriTranslator_noPackages() async {
     var errors = [];
     // .packages file should be ignored.
     fileSystem
@@ -337,7 +337,7 @@
         startsWith(_stringPrefixOf(templateCantReadFile)));
   }
 
-  test_validateOptions_noInputs() async {
+  void test_validateOptions_noInputs() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
@@ -351,7 +351,7 @@
     expect(result, isFalse);
   }
 
-  test_validateOptions_input_doesnt_exist() async {
+  void test_validateOptions_input_doesnt_exist() async {
     var errors = [];
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
@@ -363,7 +363,7 @@
     expect(result, isTrue);
   }
 
-  test_validateOptions_root_exists() async {
+  void test_validateOptions_root_exists() async {
     var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root/');
     fileSystem
         // Note: this test is a bit hackish because the memory file system
@@ -390,7 +390,7 @@
     expect(result, isTrue);
   }
 
-  test_validateOptions_root_doesnt_exists() async {
+  void test_validateOptions_root_doesnt_exists() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
@@ -407,7 +407,7 @@
         startsWith(_stringPrefixOf(templateSdkRootNotFound)));
   }
 
-  test_validateOptions_summary_exists() async {
+  void test_validateOptions_summary_exists() async {
     var sdkSummary = Uri.parse('org-dartlang-test:///sdk/root/outline.dill');
     fileSystem.entityForUri(sdkSummary).writeAsStringSync('\n');
     fileSystem
@@ -426,7 +426,7 @@
     expect(result, isTrue);
   }
 
-  test_validateOptions_summary_doesnt_exists() async {
+  void test_validateOptions_summary_doesnt_exists() async {
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
@@ -443,7 +443,7 @@
         startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
   }
 
-  test_validateOptions_inferred_summary_exists() async {
+  void test_validateOptions_inferred_summary_exists() async {
     var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root/');
     var sdkSummary =
         Uri.parse('org-dartlang-test:///sdk/root/vm_platform_strong.dill');
@@ -465,7 +465,7 @@
     expect(result, isTrue);
   }
 
-  test_validateOptions_inferred_summary_doesnt_exists() async {
+  void test_validateOptions_inferred_summary_doesnt_exists() async {
     var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root/');
     var sdkSummary = Uri.parse('org-dartlang-test:///sdk/root/outline.dill');
     fileSystem.entityForUri(sdkRoot).writeAsStringSync('\n');
@@ -486,7 +486,7 @@
 
   /// Returns the longest prefix of the text in a message template that doesn't
   /// mention a template argument.
-  _stringPrefixOf(Template template) {
+  String _stringPrefixOf(Template template) {
     var messageTemplate = template.messageTemplate;
     var index = messageTemplate.indexOf('#');
     var prefix = messageTemplate.substring(0, index - 1);
diff --git a/pkg/front_end/test/standard_file_system_test.dart b/pkg/front_end/test/standard_file_system_test.dart
index a7becd7..dce6675 100644
--- a/pkg/front_end/test/standard_file_system_test.dart
+++ b/pkg/front_end/test/standard_file_system_test.dart
@@ -17,7 +17,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StandardFileSystemTest);
     defineReflectiveTests(FileTest);
@@ -34,35 +34,36 @@
   String path;
   FileSystemEntity dir;
 
-  setUp() {
+  @override
+  void setUp() {
     super.setUp();
     path = p.join(tempPath, 'dir');
     dir = StandardFileSystem.instance.entityForUri(p.toUri(path));
   }
 
-  test_equals_differentPaths() {
+  void test_equals_differentPaths() {
     expect(dir == entityForPath(p.join(tempPath, 'dir2')), isFalse);
   }
 
-  test_equals_samePath() {
+  void test_equals_samePath() {
     expect(dir == entityForPath(p.join(tempPath, 'dir')), isTrue);
   }
 
-  test_exists_directoryExists() async {
+  void test_exists_directoryExists() async {
     await new io.Directory(path).create();
     expect(await dir.exists(), isTrue);
   }
 
-  test_exists_doesNotExist() async {
+  void test_exists_doesNotExist() async {
     expect(await dir.exists(), isFalse);
   }
 
-  test_readAsBytes() async {
+  void test_readAsBytes() async {
     await new io.Directory(path).create();
     expect(dir.readAsBytes(), _throwsFileSystemException);
   }
 
-  test_uri() {
+  void test_uri() {
     expect(dir.uri, p.toUri(path));
   }
 }
@@ -72,72 +73,73 @@
   String path;
   FileSystemEntity file;
 
-  setUp() {
+  @override
+  void setUp() {
     super.setUp();
     path = p.join(tempPath, 'file.txt');
     file = StandardFileSystem.instance.entityForUri(p.toUri(path));
   }
 
-  test_equals_differentPaths() {
+  void test_equals_differentPaths() {
     expect(file == entityForPath(p.join(tempPath, 'file2.txt')), isFalse);
   }
 
-  test_equals_samePath() {
+  void test_equals_samePath() {
     expect(file == entityForPath(p.join(tempPath, 'file.txt')), isTrue);
   }
 
-  test_exists_doesNotExist() async {
+  void test_exists_doesNotExist() async {
     expect(await file.exists(), isFalse);
   }
 
-  test_exists_fileExists() async {
+  void test_exists_fileExists() async {
     new io.File(path).writeAsStringSync('contents');
     expect(await file.exists(), isTrue);
   }
 
-  test_hashCode_samePath() {
+  void test_hashCode_samePath() {
     expect(file.hashCode, entityForPath(p.join(tempPath, 'file.txt')).hashCode);
   }
 
-  test_readAsBytes_badUtf8() async {
+  void test_readAsBytes_badUtf8() async {
     // A file containing invalid UTF-8 can still be read as raw bytes.
     List<int> bytes = [0xc0, 0x40]; // Invalid UTF-8
     new io.File(path).writeAsBytesSync(bytes);
     expect(await file.readAsBytes(), bytes);
   }
 
-  test_readAsBytes_doesNotExist() {
+  void test_readAsBytes_doesNotExist() {
     expect(file.readAsBytes(), _throwsFileSystemException);
   }
 
-  test_readAsBytes_exists() async {
+  void test_readAsBytes_exists() async {
     var s = 'contents';
     new io.File(path).writeAsStringSync(s);
     expect(await file.readAsBytes(), utf8.encode(s));
   }
 
-  test_readAsString_badUtf8() {
+  void test_readAsString_badUtf8() {
     new io.File(path).writeAsBytesSync([0xc0, 0x40]); // Invalid UTF-8
     expect(file.readAsString(), _throwsFileSystemException);
   }
 
-  test_readAsString_doesNotExist() {
+  void test_readAsString_doesNotExist() {
     expect(file.readAsString(), _throwsFileSystemException);
   }
 
-  test_readAsString_exists() async {
+  void test_readAsString_exists() async {
     var s = 'contents';
     new io.File(path).writeAsStringSync(s);
     expect(await file.readAsString(), s);
   }
 
-  test_readAsString_utf8() async {
+  void test_readAsString_utf8() async {
     var bytes = [0xe2, 0x82, 0xac]; // Unicode € symbol (in UTF-8)
     new io.File(path).writeAsBytesSync(bytes);
     expect(await file.readAsString(), '\u20ac');
   }
 
-  test_uri() {
+  void test_uri() {
     expect(file.uri, p.toUri(path));
   }
 }
@@ -146,32 +148,33 @@
 class StandardFileSystemTest extends _BaseTest {
   Uri tempUri;
 
-  setUp() {
+  @override
+  void setUp() {
     super.setUp();
     tempUri = new Uri.directory(tempPath);
   }
 
-  test_entityForPath() {
+  void test_entityForPath() {
     var path = p.join(tempPath, 'file.txt');
     expect(entityForPath(path).uri, p.toUri(path));
   }
 
-  test_entityForPath_absolutize() {
+  void test_entityForPath_absolutize() {
     expect(entityForPath('file.txt').uri,
         p.toUri(new io.File('file.txt').absolute.path));
   }
 
-  test_entityForPath_normalize_dot() {
+  void test_entityForPath_normalize_dot() {
     expect(entityForPath(p.join(tempPath, '.', 'file.txt')).uri,
         p.toUri(p.join(tempPath, 'file.txt')));
   }
 
-  test_entityForPath_normalize_dotDot() {
+  void test_entityForPath_normalize_dotDot() {
     expect(entityForPath(p.join(tempPath, 'foo', '..', 'file.txt')).uri,
         p.toUri(p.join(tempPath, 'file.txt')));
   }
 
-  test_entityForUri() {
+  void test_entityForUri() {
     expect(
         StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}file.txt'))
@@ -179,12 +182,12 @@
         p.toUri(p.join(tempPath, 'file.txt')));
   }
 
-  test_entityForUri_bareUri_absolute() {
+  void test_entityForUri_bareUri_absolute() {
     expect(StandardFileSystem.instance.entityForUri(Uri.parse('/file.txt')).uri,
         Uri.parse('file:///file.txt'));
   }
 
-  test_entityForUri_fileUri_relative() {
+  void test_entityForUri_fileUri_relative() {
     // A weird quirk of the Uri class is that it doesn't seem possible to create
     // a `file:` uri with a relative path, no matter how many slashes you use or
     // if you populate the fields directly.  But just to be certain, try to do
@@ -203,14 +206,14 @@
     }
   }
 
-  test_entityForUri_nonFileUri() {
+  void test_entityForUri_nonFileUri() {
     expect(
         () => StandardFileSystem.instance
             .entityForUri(Uri.parse('package:foo/bar.dart')),
         _throwsFileSystemException);
   }
 
-  test_entityForUri_normalize_dot() {
+  void test_entityForUri_normalize_dot() {
     expect(
         StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}./file.txt'))
@@ -218,7 +221,7 @@
         p.toUri(p.join(tempPath, 'file.txt')));
   }
 
-  test_entityForUri_normalize_dotDot() {
+  void test_entityForUri_normalize_dotDot() {
     expect(
         StandardFileSystem.instance
             .entityForUri(Uri.parse('${tempUri}foo/../file.txt'))
@@ -234,12 +237,12 @@
   FileSystemEntity entityForPath(String path) =>
       StandardFileSystem.instance.entityForUri(p.toUri(path));
 
-  setUp() {
+  void setUp() {
     tempDirectory = io.Directory.systemTemp.createTempSync('test_file_system');
     tempPath = tempDirectory.absolute.path;
   }
 
-  tearDown() async {
+  void tearDown() async {
     try {
       tempDirectory.deleteSync(recursive: true);
     } on io.FileSystemException {
@@ -254,7 +257,7 @@
 
 @reflectiveTest
 class DataTest {
-  test_Data_URIs() async {
+  void test_Data_URIs() async {
     String string = "<{[DART]}>";
     Uri string_uri = new Uri.dataFromString(string, base64: false);
     Uri string_uri_base64 = new Uri.dataFromString(string, base64: true);
diff --git a/pkg/front_end/test/static_types/analysis_helper.dart b/pkg/front_end/test/static_types/analysis_helper.dart
index 2091112..6b41b38 100644
--- a/pkg/front_end/test/static_types/analysis_helper.dart
+++ b/pkg/front_end/test/static_types/analysis_helper.dart
@@ -22,7 +22,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/type_environment.dart';
 
-run(Uri entryPoint, String allowedListPath,
+void run(Uri entryPoint, String allowedListPath,
     {bool verbose = false,
     bool generate = false,
     bool analyzedUrisFilter(Uri uri)}) async {
diff --git a/pkg/front_end/test/static_types/cfe_dynamic_test.dart b/pkg/front_end/test/static_types/cfe_dynamic_test.dart
index 672ff9d..cda9ff6 100644
--- a/pkg/front_end/test/static_types/cfe_dynamic_test.dart
+++ b/pkg/front_end/test/static_types/cfe_dynamic_test.dart
@@ -21,7 +21,7 @@
   return false;
 }
 
-main(List<String> args) async {
+void main(List<String> args) async {
   await run(Uri.base.resolve('pkg/front_end/tool/_fasta/compile.dart'),
       'pkg/front_end/test/static_types/cfe_allowed.json',
       analyzedUrisFilter: cfeOnly,
diff --git a/pkg/front_end/test/static_types/static_type_test.dart b/pkg/front_end/test/static_types/static_type_test.dart
index 9e35c25..7c2d21e 100644
--- a/pkg/front_end/test/static_types/static_type_test.dart
+++ b/pkg/front_end/test/static_types/static_type_test.dart
@@ -12,7 +12,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_environment.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<String>(dataDir,
       args: args,
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -75,21 +76,21 @@
         super(compilerResult, actualMap);
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     _staticTypeContext = new StaticTypeContext(node, _environment);
     super.visitField(node);
     _staticTypeContext = null;
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     _staticTypeContext = new StaticTypeContext(node, _environment);
     super.visitConstructor(node);
     _staticTypeContext = null;
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     _staticTypeContext = new StaticTypeContext(node, _environment);
     super.visitProcedure(node);
     _staticTypeContext = null;
@@ -169,6 +170,7 @@
       isNewReachabilityErrorArgument(object) ||
       isNewReachabilityError(object);
 
+  @override
   ActualData<String> mergeData(
       ActualData<String> value1, ActualData<String> value2) {
     if (value1.object is NullLiteral && value2.object is! NullLiteral) {
diff --git a/pkg/front_end/test/summary_generator_test.dart b/pkg/front_end/test/summary_generator_test.dart
index 5a66026..f3178d6 100644
--- a/pkg/front_end/test/summary_generator_test.dart
+++ b/pkg/front_end/test/summary_generator_test.dart
@@ -10,7 +10,7 @@
 
 import 'package:test/test.dart';
 
-main() {
+void main() {
   test('summary has no source-info by default', () async {
     var summary = await summarize(['a.dart'], allSources);
     var component = loadComponentFromBytes(summary);
@@ -114,7 +114,7 @@
 };
 
 /// Helper function to check that some expectations from the summary of D.
-checkDSummary(List<int> summary) {
+void checkDSummary(List<int> summary) {
   var component = loadComponentFromBytes(summary);
   var aLib = findLibrary(component, 'a.dart');
   var bLib = findLibrary(component, 'b.dart');
diff --git a/pkg/front_end/test/test_generator_test.dart b/pkg/front_end/test/test_generator_test.dart
index e08987a..f873a70 100644
--- a/pkg/front_end/test/test_generator_test.dart
+++ b/pkg/front_end/test/test_generator_test.dart
@@ -17,7 +17,7 @@
 
 import 'incremental_suite.dart' as helper;
 
-main() async {
+void main() async {
   CompilerAndOptions compilerAndOptions = TestCompiler.initialize();
   TestCompiler compiler = compilerAndOptions.compiler;
   bool hasNewline = true;
diff --git a/pkg/front_end/test/testing_utils.dart b/pkg/front_end/test/testing_utils.dart
index 502ac99..f4f88d1 100644
--- a/pkg/front_end/test/testing_utils.dart
+++ b/pkg/front_end/test/testing_utils.dart
@@ -2,20 +2,18 @@
 // for 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' show Directory, Process, ProcessResult;
 
 import 'package:testing/testing.dart' show Chain, TestDescription;
 
 Stream<TestDescription> filterList(
     Chain suite, bool onlyInGit, Stream<TestDescription> base) async* {
-  Set<Uri> gitFiles;
+  Set<Uri>? gitFiles;
   if (onlyInGit) {
     gitFiles = await getGitFiles(suite.uri);
   }
   await for (TestDescription description in base) {
-    if (onlyInGit && !gitFiles.contains(description.uri)) {
+    if (onlyInGit && !gitFiles!.contains(description.uri)) {
       continue;
     }
     yield description;
diff --git a/pkg/front_end/test/text_representation/empty_reference_test.dart b/pkg/front_end/test/text_representation/empty_reference_test.dart
index 0e36da8..bd30c00 100644
--- a/pkg/front_end/test/text_representation/empty_reference_test.dart
+++ b/pkg/front_end/test/text_representation/empty_reference_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/ast.dart';
 import 'text_representation_test.dart';
 
-testExpression(Expression node, String normal,
+void testExpression(Expression node, String normal,
     {String verbose, String limited}) {
   Expect.stringEquals(normal, node.toText(normalStrategy),
       "Unexpected normal strategy text for ${node.runtimeType}");
@@ -18,7 +18,7 @@
       "Unexpected limited strategy text for ${node.runtimeType}");
 }
 
-testType(DartType node, String normal, {String verbose, String limited}) {
+void testType(DartType node, String normal, {String verbose, String limited}) {
   Expect.stringEquals(normal, node.toText(normalStrategy),
       "Unexpected normal strategy text for ${node.runtimeType}");
   Expect.stringEquals(verbose ?? normal, node.toText(verboseStrategy),
@@ -27,7 +27,7 @@
       "Unexpected limited strategy text for ${node.runtimeType}");
 }
 
-main() {
+void main() {
   testTypes();
   testMembers();
 }
diff --git a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
index e483c41..3355ebf 100644
--- a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
@@ -11,7 +11,8 @@
 import 'package:kernel/ast.dart';
 import 'text_representation_test.dart';
 
-testStatement(Statement node, String normal, {String verbose, String limited}) {
+void testStatement(Statement node, String normal,
+    {String verbose, String limited}) {
   Expect.stringEquals(normal, node.toText(normalStrategy),
       "Unexpected normal strategy text for ${node.runtimeType}");
   Expect.stringEquals(verbose ?? normal, node.toText(verboseStrategy),
@@ -20,7 +21,7 @@
       "Unexpected limited strategy text for ${node.runtimeType}");
 }
 
-testExpression(Expression node, String normal,
+void testExpression(Expression node, String normal,
     {String verbose, String limited}) {
   Expect.stringEquals(normal, node.toText(normalStrategy),
       "Unexpected normal strategy text for ${node.runtimeType}");
@@ -32,7 +33,7 @@
 
 final Uri dummyUri = Uri.parse('test:dummy');
 
-main() {
+void main() {
   _testVariableDeclarations();
   _testTryStatement();
   _testForInStatementWithSynthesizedVariable();
@@ -325,7 +326,7 @@
   cls.addProcedure(factoryConstructor);
 
   testExpression(
-      new FactoryConstructorInvocationJudgment(
+      new FactoryConstructorInvocation(
           factoryConstructor, new ArgumentsImpl([])),
       '''
 new Class()''',
@@ -333,7 +334,7 @@
 new library test:dummy::Class()''');
 
   testExpression(
-      new FactoryConstructorInvocationJudgment(
+      new FactoryConstructorInvocation(
           factoryConstructor,
           new ArgumentsImpl([new IntLiteral(0)],
               types: [const VoidType()],
@@ -345,7 +346,7 @@
 
   factoryConstructor.name = new Name('foo');
   testExpression(
-      new FactoryConstructorInvocationJudgment(
+      new FactoryConstructorInvocation(
           factoryConstructor,
           new ArgumentsImpl([new IntLiteral(0)],
               types: [const VoidType()],
@@ -399,15 +400,13 @@
 }
 
 void _testInternalPropertyGet() {
-  testExpression(
-      new PropertyGet(new IntLiteral(0), new Name('boz')), '''
+  testExpression(new PropertyGet(new IntLiteral(0), new Name('boz')), '''
 0.boz''');
 }
 
 void _testInternalPropertySet() {
   testExpression(
-      new PropertySet(
-          new IntLiteral(0), new Name('boz'), new IntLiteral(1),
+      new PropertySet(new IntLiteral(0), new Name('boz'), new IntLiteral(1),
           forEffect: false, readOnlyReceiver: false),
       '''
 0.boz = 1''');
@@ -657,9 +656,18 @@
 
 void _testSuperPostIncDec() {}
 
-void _testIndexGet() {}
+void _testIndexGet() {
+  testExpression(new IndexGet(new IntLiteral(0), new IntLiteral(1)), '''
+0[1]''');
+}
 
-void _testIndexSet() {}
+void _testIndexSet() {
+  testExpression(
+      new IndexSet(new IntLiteral(0), new IntLiteral(1), new IntLiteral(2),
+          forEffect: false),
+      '''
+0[1] = 2''');
+}
 
 void _testSuperIndexSet() {}
 
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index 8b188e7..ba24ec6 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -64,7 +64,7 @@
   throw new UnsupportedError("Unexpected marker '${marker}'.");
 }
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
   await runTests<String>(dataDir,
       args: args,
@@ -86,6 +86,7 @@
             },
             nnbdMode: NnbdMode.Strong);
 
+  @override
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {
     if (testData.name.endsWith('_opt_out.dart')) {
       options.nnbdMode = NnbdMode.Weak;
@@ -96,6 +97,7 @@
 class TextRepresentationDataComputer extends DataComputer<String> {
   const TextRepresentationDataComputer();
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -135,7 +137,7 @@
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     if (!node.name.text.startsWith(expressionMarker) &&
         !node.name.text.startsWith(statementMarker)) {
       node.function.accept(this);
@@ -144,7 +146,7 @@
   }
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     if (!node.name.text.startsWith(expressionMarker) &&
         !node.name.text.startsWith(statementMarker)) {
       node.initializer?.accept(this);
diff --git a/pkg/front_end/test/textual_outline_test.dart b/pkg/front_end/test/textual_outline_test.dart
index 345fa42..4a2af05 100644
--- a/pkg/front_end/test/textual_outline_test.dart
+++ b/pkg/front_end/test/textual_outline_test.dart
@@ -15,7 +15,7 @@
 const ScannerConfiguration scannerConfiguration =
     const ScannerConfiguration(enableExtensionMethods: true);
 
-main() {
+void main() {
   // Doesn't sort if not asked to perform modelling.
   String result = textualOutline(utf8.encode("""
 b() { print("hello"); }
diff --git a/pkg/front_end/test/token_test.dart b/pkg/front_end/test/token_test.dart
index 4a1249c..9cf8377 100644
--- a/pkg/front_end/test/token_test.dart
+++ b/pkg/front_end/test/token_test.dart
@@ -10,7 +10,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TokenTest);
   });
diff --git a/pkg/front_end/test/tool/reload.dart b/pkg/front_end/test/tool/reload.dart
index 6d86a82..7b783bc 100644
--- a/pkg/front_end/test/tool/reload.dart
+++ b/pkg/front_end/test/tool/reload.dart
@@ -107,7 +107,7 @@
 /// launched with `--observe` to enable the service protocol.
 ///
 // TODO(sigmund): provide flags to configure the vm-service port.
-main(List<String> args) async {
+void main(List<String> args) async {
   if (args.length == 0) {
     print('usage: reload <entry-uri>');
     return;
diff --git a/pkg/front_end/test/type_labeler_test.dart b/pkg/front_end/test/type_labeler_test.dart
index cde0695..8681a9f 100644
--- a/pkg/front_end/test/type_labeler_test.dart
+++ b/pkg/front_end/test/type_labeler_test.dart
@@ -10,7 +10,7 @@
 
 import 'package:expect/expect.dart';
 
-main() {
+void main() {
   void check(Map<Node, String> expectations, int bulletCount) {
     TypeLabeler labeler = new TypeLabeler(false);
     Map<Node, List<Object>> conversions = {};
diff --git a/pkg/front_end/test/unit_test_suites.dart b/pkg/front_end/test/unit_test_suites.dart
index aafc70c..4ccc389 100644
--- a/pkg/front_end/test/unit_test_suites.dart
+++ b/pkg/front_end/test/unit_test_suites.dart
@@ -15,6 +15,6 @@
 /// TODO(paulberry): once #45192 is fixed, we can switch the `import` directive
 /// above to an `export` and remove this method, and this file will still be
 /// considered by the analysis server to be runnable.
-main(List<String> args) {
+void main(List<String> args) {
   impl.main(args);
 }
diff --git a/pkg/front_end/test/unit_test_suites_impl.dart b/pkg/front_end/test/unit_test_suites_impl.dart
index 5c6ccff..bd7f75f 100644
--- a/pkg/front_end/test/unit_test_suites_impl.dart
+++ b/pkg/front_end/test/unit_test_suites_impl.dart
@@ -101,37 +101,37 @@
       ..addFlag("onlyTestsThatRequireGit",
           help: "Whether to only run tests that require git",
           defaultsTo: false);
-    var parsedArguments = parser.parse(args);
-    String outputPath = parsedArguments["output-directory"] ?? ".";
+    var parsedOptions = parser.parse(args);
+    String outputPath = parsedOptions["output-directory"] ?? ".";
     Uri outputDirectory = Uri.base.resolveUri(Uri.directory(outputPath));
 
-    bool verbose = parsedArguments["verbose"];
+    bool verbose = parsedOptions["verbose"];
 
     String? filter;
-    if (parsedArguments.rest.length == 1) {
-      filter = parsedArguments.rest.single;
+    if (parsedOptions.rest.length == 1) {
+      filter = parsedOptions.rest.single;
       if (filter.startsWith("$suiteNamePrefix/")) {
         filter = filter.substring(suiteNamePrefix.length + 1);
       }
     }
-    String tasksString = parsedArguments["tasks"];
+    String tasksString = parsedOptions["tasks"];
     int? tasks = int.tryParse(tasksString);
     if (tasks == null || tasks < 1) {
       throw "--tasks (-j) has to be an integer >= 1";
     }
 
-    String shardsString = parsedArguments["shards"];
+    String shardsString = parsedOptions["shards"];
     int? shardCount = int.tryParse(shardsString);
     if (shardCount == null || shardCount < 1) {
       throw "--shards has to be an integer >= 1";
     }
-    String shardString = parsedArguments["shard"];
+    String shardString = parsedOptions["shard"];
     int? shard = int.tryParse(shardString);
     if (shard == null || shard < 1 || shard > shardCount) {
       throw "--shard has to be an integer >= 1 (and <= --shards)";
     }
-    bool skipTestsThatRequireGit = parsedArguments["skipTestsThatRequireGit"];
-    bool onlyTestsThatRequireGit = parsedArguments["onlyTestsThatRequireGit"];
+    bool skipTestsThatRequireGit = parsedOptions["skipTestsThatRequireGit"];
+    bool onlyTestsThatRequireGit = parsedOptions["onlyTestsThatRequireGit"];
     if (skipTestsThatRequireGit && onlyTestsThatRequireGit) {
       throw "Only one of --skipTestsThatRequireGit and "
           "--onlyTestsThatRequireGit can be provided.";
@@ -139,12 +139,12 @@
 
     if (verbose) {
       print("NOTE: Created with options\n  "
-          "${parsedArguments["named-configuration"]},\n  "
+          "${parsedOptions["named-configuration"]},\n  "
           "${verbose},\n  "
-          "${parsedArguments["print"]},\n  "
+          "${parsedOptions["print"]},\n  "
           "${outputDirectory},\n  "
           "${filter},\n  "
-          "${parsedArguments['environment']},\n  "
+          "${parsedOptions['environment']},\n  "
           "shardCount: ${shardCount},\n  "
           "shard: ${shard - 1 /* make it 0-indexed */},\n  "
           "onlyTestsThatRequireGit: ${onlyTestsThatRequireGit},\n  "
@@ -153,12 +153,12 @@
     }
 
     return Options(
-      parsedArguments["named-configuration"],
+      parsedOptions["named-configuration"],
       verbose,
-      parsedArguments["print"],
+      parsedOptions["print"],
       outputDirectory,
       filter,
-      parsedArguments['environment'],
+      parsedOptions['environment'],
       shardCount: shardCount,
       shard: shard - 1 /* make it 0-indexed */,
       onlyTestsThatRequireGit: onlyTestsThatRequireGit,
@@ -209,7 +209,7 @@
   @override
   void logSuiteComplete(testing.Suite suite) {}
 
-  handleTestResult(
+  void handleTestResult(
       testing.Suite suite,
       TestDescription testDescription,
       Result result,
@@ -295,6 +295,7 @@
     }
   }
 
+  @override
   void logTestStart(int completed, int failed, int total, testing.Suite suite,
       TestDescription description) {
     String name = getTestName(description);
@@ -308,6 +309,7 @@
   @override
   void logUncaughtError(error, StackTrace stackTrace) {}
 
+  @override
   void logExpectedResult(testing.Suite suite, TestDescription description,
       Result result, Set<Expectation> expectedOutcomes) {
     handleTestResult(
@@ -529,7 +531,7 @@
   await File.fromUri(uri).writeAsString(lines.map((line) => "$line\n").join());
 }
 
-main([List<String> arguments = const <String>[]]) async {
+void main([List<String> arguments = const <String>[]]) async {
   Stopwatch totalRuntime = new Stopwatch()..start();
 
   List<String> results = [];
diff --git a/pkg/front_end/test/utils/io_utils.dart b/pkg/front_end/test/utils/io_utils.dart
index 6c22a65..8851f27 100644
--- a/pkg/front_end/test/utils/io_utils.dart
+++ b/pkg/front_end/test/utils/io_utils.dart
@@ -4,11 +4,28 @@
 
 import 'dart:io' show Directory, File, Platform, Process, ProcessResult;
 
+import 'package:_fe_analyzer_shared/src/util/filenames.dart';
+
 String computeRepoDir() {
+  Uri uri;
+  if (Platform.script.hasAbsolutePath) {
+    uri = Platform.script;
+  } else if (Platform.packageConfig != null) {
+    String packageConfig = Platform.packageConfig!;
+    final String prefix = "file://";
+    if (packageConfig.startsWith(prefix)) {
+      uri = Uri.parse(packageConfig);
+    } else {
+      uri = Uri.base.resolve(nativeToUriPath(packageConfig));
+    }
+  } else {
+    throw "Can't obtain the path to the SDK either via "
+        "Platform.script or Platform.packageConfig";
+  }
+  String path = new File.fromUri(uri).parent.path;
   ProcessResult result = Process.runSync(
       'git', ['rev-parse', '--show-toplevel'],
-      runInShell: true,
-      workingDirectory: new File.fromUri(Platform.script).parent.path);
+      runInShell: true, workingDirectory: path);
   if (result.exitCode != 0) {
     throw "Git returned non-zero error code (${result.exitCode}):\n\n"
         "stdout: ${result.stdout}\n\n"
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index f3d539c..a7c055b 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -2,8 +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.md file.
 
-// @dart = 2.9
-
 library fasta.testing.kernel_chain;
 
 import 'dart:io' show Directory, File, IOSink, Platform;
@@ -72,6 +70,7 @@
 
   bool get canBeFixWithUpdateExpectations;
 
+  @override
   ExpectationSet get expectationSet;
 
   Expectation get expectationFileMismatch =>
@@ -84,7 +83,7 @@
       expectationSet["ExpectationFileMissing"];
 
   Future<Result<O>> match<O>(String suffix, String actual, Uri uri, O output,
-      {Expectation onMismatch, bool overwriteUpdateExpectationsWith}) async {
+      {Expectation? onMismatch, bool? overwriteUpdateExpectationsWith}) async {
     bool updateExpectations =
         overwriteUpdateExpectationsWith ?? this.updateExpectations;
     actual = actual.trim();
@@ -145,8 +144,10 @@
 class Print extends Step<ComponentResult, ComponentResult, ChainContext> {
   const Print();
 
+  @override
   String get name => "print";
 
+  @override
   Future<Result<ComponentResult>> run(ComponentResult result, _) async {
     Component component = result.component;
 
@@ -170,8 +171,10 @@
 class TypeCheck extends Step<ComponentResult, ComponentResult, ChainContext> {
   const TypeCheck();
 
+  @override
   String get name => "typeCheck";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, ChainContext context) async {
     Component component = result.component;
@@ -203,11 +206,14 @@
   /// be serialized, deserialized, and the textual representation of that is
   /// compared. It is still the original component that is returned though.
   const MatchExpectation(this.suffix,
-      {this.serializeFirst: false, this.isLastMatchStep})
+      {this.serializeFirst: false, required this.isLastMatchStep})
+      // ignore: unnecessary_null_comparison
       : assert(isLastMatchStep != null);
 
+  @override
   String get name => "match expectations";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, MatchContext context) {
     Component component = result.component;
@@ -225,7 +231,7 @@
       writeMe.uriToSource.addAll(component.uriToSource);
       if (component.problemsAsJson != null) {
         writeMe.problemsAsJson =
-            new List<String>.from(component.problemsAsJson);
+            new List<String>.from(component.problemsAsJson!);
       }
       BinaryPrinter binaryPrinter = new BinaryPrinter(sink);
       binaryPrinter.writeComponentFile(writeMe);
@@ -251,7 +257,7 @@
       reportedErrors.add(message.join('\n'));
     }
     Set<String> problemsAsJson = <String>{};
-    void addProblemsAsJson(List<String> problems) {
+    void addProblemsAsJson(List<String>? problems) {
       if (problems != null) {
         for (String jsonString in problems) {
           DiagnosticMessage message =
@@ -308,7 +314,7 @@
       if (!result.isUserLibraryImportUri(source.importUri)) continue;
 
       if (source.constantCoverageConstructors != null &&
-          source.constantCoverageConstructors.isNotEmpty) {
+          source.constantCoverageConstructors!.isNotEmpty) {
         if (!printedConstantCoverageHeader) {
           buffer.writeln("");
           buffer.writeln("");
@@ -316,9 +322,9 @@
           printedConstantCoverageHeader = true;
         }
         buffer.writeln("${source.fileUri}:");
-        for (Reference reference in source.constantCoverageConstructors) {
-          buffer
-              .writeln("- ${reference.node} (from ${reference.node.location})");
+        for (Reference reference in source.constantCoverageConstructors!) {
+          buffer.writeln(
+              "- ${reference.node} (from ${reference.node?.location})");
         }
         buffer.writeln("");
       }
@@ -355,8 +361,10 @@
 
   const KernelTextSerialization();
 
+  @override
   String get name => "kernel text serialization";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, ChainContext context) async {
     Component component = result.component;
@@ -386,13 +394,13 @@
       for (RoundTripStatus failure in failures) {
         LocatedMessage message = templateUnspecified
             .withArguments("\n${failure}")
-            .withLocation(failure.uri, failure.offset, 1);
+            .withLocation(failure.uri!, failure.offset, 1);
         options.report(message, message.code.severity);
       }
 
       if (writeRoundTripStatus) {
         Uri uri = component.uriToSource.keys
-            .firstWhere((uri) => uri?.scheme == "file");
+            .firstWhere((uri) => uri.scheme == "file");
         String filename = "${uri.toFilePath()}${suffix}";
         uri = new File(filename).uri;
         StringBuffer buffer = new StringBuffer();
@@ -416,8 +424,10 @@
 class WriteDill extends Step<ComponentResult, ComponentResult, ChainContext> {
   const WriteDill();
 
+  @override
   String get name => "write .dill";
 
+  @override
   Future<Result<ComponentResult>> run(ComponentResult result, _) async {
     Component component = result.component;
     Directory tmp = await Directory.systemTemp.createTemp();
@@ -446,8 +456,10 @@
 class ReadDill extends Step<Uri, Uri, ChainContext> {
   const ReadDill();
 
+  @override
   String get name => "read .dill";
 
+  @override
   Future<Result<Uri>> run(Uri uri, _) async {
     try {
       loadComponentFromBinary(uri.toFilePath());
@@ -463,6 +475,7 @@
 
   int length = 0;
 
+  @override
   void add(List<int> data) {
     lists.add(data);
     length += data.length;
@@ -479,6 +492,7 @@
     return result;
   }
 
+  @override
   void close() {}
 }
 
@@ -525,7 +539,7 @@
   final TestDescription description;
   final Component component;
   final Set<Uri> userLibraries;
-  final Uri outputUri;
+  final Uri? outputUri;
   final CompilationSetup compilationSetup;
   final KernelTarget sourceTarget;
   final List<String> extraConstantStrings = [];
@@ -538,7 +552,7 @@
     return isUserLibraryImportUri(library.importUri);
   }
 
-  bool isUserLibraryImportUri(Uri importUri) {
+  bool isUserLibraryImportUri(Uri? importUri) {
     return userLibraries.contains(importUri);
   }
 
diff --git a/pkg/front_end/test/utils/scanner_chain.dart b/pkg/front_end/test/utils/scanner_chain.dart
index 635ef6d..c312851 100644
--- a/pkg/front_end/test/utils/scanner_chain.dart
+++ b/pkg/front_end/test/utils/scanner_chain.dart
@@ -2,8 +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.md file.
 
-// @dart = 2.9
-
 library fasta.testing.scanner_chain;
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
@@ -33,8 +31,10 @@
 class Read extends Step<TestDescription, ReadFile, ChainContext> {
   const Read();
 
+  @override
   String get name => "read";
 
+  @override
   Future<Result<ReadFile>> run(
       TestDescription input, ChainContext context) async {
     return pass(new ReadFile(input.uri, await readBytesFromFile(input.uri)));
@@ -44,8 +44,10 @@
 class Scan extends Step<ReadFile, ScannedFile, ChainContext> {
   const Scan();
 
+  @override
   String get name => "scan";
 
+  @override
   Future<Result<ScannedFile>> run(ReadFile file, ChainContext context) async {
     return pass(new ScannedFile(file, scan(file.bytes)));
   }
diff --git a/pkg/front_end/test/utils/validating_instrumentation.dart b/pkg/front_end/test/utils/validating_instrumentation.dart
index 1c1af83..ed9b70b 100644
--- a/pkg/front_end/test/utils/validating_instrumentation.dart
+++ b/pkg/front_end/test/utils/validating_instrumentation.dart
@@ -2,8 +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.md file.
 
-// @dart = 2.9
-
 import 'dart:convert' show utf8;
 
 import 'dart:io' show File;
@@ -101,7 +99,7 @@
   /// pairs that were observed.
   Future<Null> fixSource(Uri uri, bool offsetsCountCharacters) async {
     uri = Uri.base.resolveUri(uri);
-    List<_Fix> fixes = _fixes[uri];
+    List<_Fix>? fixes = _fixes[uri];
     if (fixes == null) return;
     File file = new File.fromUri(uri);
     List<int> bytes = (await file.readAsBytes()).toList();
@@ -135,9 +133,9 @@
         _testedFeaturesState.putIfAbsent(uri, () => {});
     List<int> tokenOffsets = _tokenOffsets.putIfAbsent(uri, () => []);
     ScannerResult result = scan(bytes, includeComments: true);
-    for (Token token = result.tokens; !token.isEof; token = token.next) {
+    for (Token token = result.tokens; !token.isEof; token = token.next!) {
       tokenOffsets.add(token.offset);
-      for (analyzer.Token commentToken = token.precedingComments;
+      for (analyzer.Token? commentToken = token.precedingComments;
           commentToken != null;
           commentToken = commentToken.next) {
         String lexeme = commentToken.lexeme;
@@ -153,7 +151,7 @@
             property = expectation.substring(0, equals);
             value = expectation
                 .substring(equals + 1)
-                .replaceAllMapped(_ESCAPE_SEQUENCE, (m) => m.group(1));
+                .replaceAllMapped(_ESCAPE_SEQUENCE, (m) => m.group(1)!);
           }
           property = property.trim();
           value = value.trim();
@@ -185,11 +183,11 @@
     if (offset == -1) {
       throw _formatProblem(uri, 0, 'No offset for $property=$value', null);
     }
-    Map<int, List<_Expectation>> expectationsForUri =
+    Map<int, List<_Expectation>>? expectationsForUri =
         _unsatisfiedExpectations[uri];
     if (expectationsForUri == null) return;
-    offset = _normalizeOffset(offset, _tokenOffsets[uri]);
-    List<_Expectation> expectationsAtOffset = expectationsForUri[offset];
+    offset = _normalizeOffset(offset, _tokenOffsets[uri]!);
+    List<_Expectation>? expectationsAtOffset = expectationsForUri[offset];
     if (expectationsAtOffset != null) {
       for (int i = 0; i < expectationsAtOffset.length; i++) {
         _Expectation expectation = expectationsAtOffset[i];
@@ -227,7 +225,7 @@
   }
 
   String _formatProblem(
-      Uri uri, int offset, String desc, StackTrace stackTrace) {
+      Uri uri, int offset, String desc, StackTrace? stackTrace) {
     return CompilerContext.current
         .format(
             templateUnspecified
@@ -285,11 +283,12 @@
 
   bool _shouldCheck(String property, Uri uri, int offset) {
     bool state = false;
-    Map<int, Set<String>> testedFeaturesStateForUri = _testedFeaturesState[uri];
+    Map<int, Set<String>>? testedFeaturesStateForUri =
+        _testedFeaturesState[uri];
     if (testedFeaturesStateForUri == null) return false;
     for (int i in testedFeaturesStateForUri.keys) {
       if (i > offset) break;
-      Set<String> testedFeaturesStateAtOffset = testedFeaturesStateForUri[i];
+      Set<String> testedFeaturesStateAtOffset = testedFeaturesStateForUri[i]!;
       state = testedFeaturesStateAtOffset.contains(property);
     }
     return state;
diff --git a/pkg/front_end/test/vm_service_coverage.dart b/pkg/front_end/test/vm_service_coverage.dart
index f5fd805..31e61fe 100644
--- a/pkg/front_end/test/vm_service_coverage.dart
+++ b/pkg/front_end/test/vm_service_coverage.dart
@@ -8,7 +8,7 @@
 
 import 'vm_service_helper.dart' as vmService;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   CoverageHelper coverageHelper = new CoverageHelper();
 
   List<String> allArgs = <String>[];
@@ -108,6 +108,7 @@
   }
 
   Completer<String> cProcessExited = new Completer();
+  @override
   void processExited(int exitCode) {
     cProcessExited.complete("Exit");
   }
@@ -137,6 +138,7 @@
 
   StartEndPair(this.startPos, this.endPos);
 
+  @override
   String toString() => "[$startPos - $endPos]";
 
   @override
diff --git a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
index 5ea2bd0..1fed414 100644
--- a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
+++ b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
@@ -6,7 +6,7 @@
 
 import 'vm_service_coverage.dart' as helper;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   CoverageHelper coverageHelper = new CoverageHelper();
 
   List<String> allArgs = <String>[];
@@ -23,6 +23,7 @@
 class CoverageHelper extends helper.CoverageHelper {
   CoverageHelper() : super(printHits: false);
 
+  @override
   bool includeCoverageFor(Uri uri) {
     if (uri.scheme != "package") return false;
     if (uri.path.startsWith("front_end/src/fasta/kernel/constant_")) {
diff --git a/pkg/front_end/test/vm_service_for_leak_detection.dart b/pkg/front_end/test/vm_service_for_leak_detection.dart
index 4329036..bae1839 100644
--- a/pkg/front_end/test/vm_service_for_leak_detection.dart
+++ b/pkg/front_end/test/vm_service_for_leak_detection.dart
@@ -8,7 +8,7 @@
 
 import "vm_service_heap_helper.dart" as helper;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   List<helper.Interest> interests = <helper.Interest>[];
   interests.add(new helper.Interest(
     Uri.parse("package:front_end/src/fasta/source/source_library_builder.dart"),
diff --git a/pkg/front_end/test/vm_service_heap_finder.dart b/pkg/front_end/test/vm_service_heap_finder.dart
index 6fb49d91..13f18fc 100644
--- a/pkg/front_end/test/vm_service_heap_finder.dart
+++ b/pkg/front_end/test/vm_service_heap_finder.dart
@@ -15,7 +15,7 @@
   Foo(this.x, this.y);
 }
 
-main(List<String> args) async {
+void main(List<String> args) async {
   String connectTo;
   String classToFind;
   String whatToDo;
diff --git a/pkg/front_end/test/vm_service_heap_helper_test.dart b/pkg/front_end/test/vm_service_heap_helper_test.dart
index d72a28d..470e114 100644
--- a/pkg/front_end/test/vm_service_heap_helper_test.dart
+++ b/pkg/front_end/test/vm_service_heap_helper_test.dart
@@ -139,6 +139,7 @@
 
 class LeakFinderTest extends helper.VMServiceHeapHelperSpecificExactLeakFinder {
   List<String> leakData = [];
+  @override
   int iterationNumber = -1;
   Completer<List<String>> completer = new Completer<List<String>>();
 
@@ -151,21 +152,25 @@
             prettyPrints: prettyPrints,
             throwOnPossibleLeak: throwOnPossibleLeak);
 
+  @override
   void processExited(int exitCode) {
     print("Process exited!");
     leakData.sort();
     completer.complete(leakData);
   }
 
+  @override
   void leakDetected(String duplicate, int count, List<String> prettyPrints) {
     prettyPrints.sort();
     leakData.add("$iterationNumber: $count: $prettyPrints");
   }
 
+  @override
   void noLeakDetected() {
     leakData.add("$iterationNumber: no leak");
   }
 
+  @override
   bool shouldDoAnotherIteration(int iterationNumber) {
     this.iterationNumber = iterationNumber;
     return iterationNumber <= 6;
diff --git a/pkg/front_end/test/weekly_tester.dart b/pkg/front_end/test/weekly_tester.dart
index ab01773..6cdd65a 100644
--- a/pkg/front_end/test/weekly_tester.dart
+++ b/pkg/front_end/test/weekly_tester.dart
@@ -6,7 +6,7 @@
 import 'dart:convert' show LineSplitter, utf8;
 import 'dart:io' show File, Platform, Process, exitCode;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   // General idea: Launch - in separate processes - whatever we want to run
   // concurrently, capturing the stdout and stderr, printing it with some
   // prepended identification.
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart
deleted file mode 100644
index d2ee09c..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart
+++ /dev/null
@@ -1,12 +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 'main_lib.dart';
-
-main() {
-  List list = [];
-  if (list.isNotEmpty) {
-    new Class().method(null as dynamic);
-  }
-}
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect
deleted file mode 100644
index a52e3ca..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect
+++ /dev/null
@@ -1,49 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-static method main() → dynamic {
-  core::List<dynamic> list = <dynamic>[];
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum){(mai::Enum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<mai::Enum> values = #C4;
-  static const field mai::Enum a = #C3;
-  const constructor •(core::int index, core::String _name) → mai::Enum
-    : mai::Enum::index = index, mai::Enum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{mai::Enum::_name}{core::String};
-}
-class Class extends core::Object {
-  synthetic constructor •() → mai::Class
-    : super core::Object::•()
-    ;
-  method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index}{core::int};
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "Enum.a"
-  #C3 = mai::Enum {index:#C1, _name:#C2}
-  #C4 = <mai::Enum>[#C3]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Enum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect
deleted file mode 100644
index a821c4b..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect
+++ /dev/null
@@ -1,35 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-import "dart:_internal" as _in;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-static method main() → dynamic {
-  core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    block {
-      new mai::Class::•();
-      _in::unsafeCast<dynamic>(null) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum;
-    } =>throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class Enum extends core::Object implements core::Enum {
-}
-class Class extends core::Object {
-  synthetic constructor •() → mai::Class
-    : super core::Object::•()
-    ;
-}
-
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline.expect
deleted file mode 100644
index 82be6bb..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline.expect
+++ /dev/null
@@ -1,3 +0,0 @@
-import 'main_lib.dart';
-
-main() {}
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline_modelled.expect
deleted file mode 100644
index 82be6bb..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,3 +0,0 @@
-import 'main_lib.dart';
-
-main() {}
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect
deleted file mode 100644
index c05364c..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect
+++ /dev/null
@@ -1,49 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-static method main() → dynamic {
-  core::List<dynamic> list = <dynamic>[];
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum){(mai::Enum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<mai::Enum> values = #C4;
-  static const field mai::Enum a = #C3;
-  const constructor •(core::int index, core::String _name) → mai::Enum
-    : mai::Enum::index = index, mai::Enum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{mai::Enum::_name}{core::String};
-}
-class Class extends core::Object {
-  synthetic constructor •() → mai::Class
-    : super core::Object::•()
-    ;
-  method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index}{core::int};
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "Enum.a"
-  #C3 = mai::Enum {index:#C1, _name:#C2}
-  #C4 = <mai::Enum*>[#C3]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Enum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect
deleted file mode 100644
index 1dd0498..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect
+++ /dev/null
@@ -1,42 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-static method main() → dynamic
-  ;
-
-library /*isNonNullableByDefault*/;
-import self as self2;
-import "dart:core" as core;
-
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self2::Enum> values = #C4;
-  static const field self2::Enum a = #C3;
-  const constructor •(core::int index, core::String _name) → self2::Enum
-    : self2::Enum::index = index, self2::Enum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self2::Enum::_name}{core::String};
-}
-class Class extends core::Object {
-  synthetic constructor •() → self2::Class
-    ;
-  method method(self2::Enum e) → core::int
-    ;
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "Enum.a"
-  #C3 = self2::Enum {index:#C1, _name:#C2}
-  #C4 = <self2::Enum*>[#C3]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Enum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect
deleted file mode 100644
index 33ef7bc..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect
+++ /dev/null
@@ -1,35 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-import "dart:_internal" as _in;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-static method main() → dynamic {
-  core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::Class::•().{mai::Class::method}(_in::unsafeCast<mai::Enum>(_in::unsafeCast<dynamic>(null))){(mai::Enum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class Enum extends core::Object implements core::Enum {
-  abstract get /*isLegacy*/ index() → core::int;
-}
-class Class extends core::Object {
-  synthetic constructor •() → mai::Class
-    : super core::Object::•()
-    ;
-  method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index}{core::int};
-}
-
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main_lib.dart b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main_lib.dart
deleted file mode 100644
index e5600e4..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main_lib.dart
+++ /dev/null
@@ -1,9 +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.
-
-enum Enum { a }
-
-class Class {
-  int method(Enum e) => e.index;
-}
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/test.options b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/test.options
deleted file mode 100644
index bfe6dc8..0000000
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/test.options
+++ /dev/null
@@ -1 +0,0 @@
-main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/aot/folder.options b/pkg/front_end/testcases/aot/folder.options
deleted file mode 100644
index a8a8650..0000000
--- a/pkg/front_end/testcases/aot/folder.options
+++ /dev/null
@@ -1 +0,0 @@
---target=aot
\ No newline at end of file
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart b/pkg/front_end/testcases/aot/tree_shake/main.dart
deleted file mode 100644
index 8958414..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart
+++ /dev/null
@@ -1,40 +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 'main_lib.dart';
-
-enum UnusedEnum { a, b }
-enum UsedEnum {
-  unusedValue,
-  usedValue,
-}
-
-usedMethod(UnusedInterface c) {
-  c.usedInterfaceField = c.usedInterfaceField;
-}
-
-unusedMethod() {}
-
-class UnusedInterface {
-  int? usedInterfaceField;
-
-  UnusedInterface(this.usedInterfaceField);
-}
-
-class UsedClass implements UnusedInterface {
-  int? unusedField;
-  int? usedField;
-  int? usedInterfaceField;
-}
-
-class UnusedClass {}
-
-main() {
-  usedMethod(new UsedClass()..usedField);
-  UsedEnum.usedValue;
-  List<UnusedEnum> list = [];
-  if (list.isNotEmpty) {
-    new ConstClass().method(null as dynamic);
-  }
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect
deleted file mode 100644
index 961f514..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect
+++ /dev/null
@@ -1,116 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class UnusedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UnusedEnum> values = #C7;
-  static const field self::UnusedEnum a = #C3;
-  static const field self::UnusedEnum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::UnusedEnum
-    : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UnusedEnum::_name}{core::String};
-}
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UsedEnum> values = #C12;
-  static const field self::UsedEnum unusedValue = #C9;
-  static const field self::UsedEnum usedValue = #C11;
-  const constructor •(core::int index, core::String _name) → self::UsedEnum
-    : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UsedEnum::_name}{core::String};
-}
-class UnusedInterface extends core::Object {
-  field core::int? usedInterfaceField;
-  constructor •(core::int? usedInterfaceField) → self::UnusedInterface
-    : self::UnusedInterface::usedInterfaceField = usedInterfaceField, super core::Object::•()
-    ;
-}
-class UsedClass extends core::Object implements self::UnusedInterface {
-  field core::int? unusedField = null;
-  field core::int? usedField = null;
-  field core::int? usedInterfaceField = null;
-  synthetic constructor •() → self::UsedClass
-    : super core::Object::•()
-    ;
-}
-class UnusedClass extends core::Object {
-  synthetic constructor •() → self::UnusedClass
-    : super core::Object::•()
-    ;
-}
-static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
-}
-static method unusedMethod() → dynamic {}
-static method main() → dynamic {
-  self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField}{core::int?};
-  } =>#t1);
-  #C11;
-  core::List<self::UnusedEnum> list = <self::UnusedEnum>[];
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum){(mai::ConstEnum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class ConstEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<mai::ConstEnum> values = #C15;
-  static const field mai::ConstEnum value = #C14;
-  const constructor •(core::int index, core::String _name) → mai::ConstEnum
-    : mai::ConstEnum::index = index, mai::ConstEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{mai::ConstEnum::_name}{core::String};
-}
-class ConstClass extends core::Object {
-  synthetic constructor •() → mai::ConstClass
-    : super core::Object::•()
-    ;
-  method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index}{core::int};
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "UnusedEnum.a"
-  #C3 = self::UnusedEnum {index:#C1, _name:#C2}
-  #C4 = 1
-  #C5 = "UnusedEnum.b"
-  #C6 = self::UnusedEnum {index:#C4, _name:#C5}
-  #C7 = <self::UnusedEnum>[#C3, #C6]
-  #C8 = "UsedEnum.unusedValue"
-  #C9 = self::UsedEnum {index:#C1, _name:#C8}
-  #C10 = "UsedEnum.usedValue"
-  #C11 = self::UsedEnum {index:#C4, _name:#C10}
-  #C12 = <self::UsedEnum>[#C9, #C11]
-  #C13 = "ConstEnum.value"
-  #C14 = mai::ConstEnum {index:#C1, _name:#C13}
-  #C15 = <mai::ConstEnum>[#C14]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- ConstEnum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-
-org-dartlang-testcase:///main.dart:
-- UnusedEnum. (from org-dartlang-testcase:///main.dart:7:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- UsedEnum. (from org-dartlang-testcase:///main.dart:8:6)
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect
deleted file mode 100644
index 0aaa3a0..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect
+++ /dev/null
@@ -1,69 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-import "dart:_internal" as _in;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-abstract class UnusedEnum extends core::Object implements core::Enum {
-}
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  method toString() → core::String
-    return this.{self::UsedEnum::_name}{core::String};
-}
-abstract class UnusedInterface extends core::Object {
-  abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
-  abstract set /*isLegacy*/ usedInterfaceField(core::int? value) → void;
-}
-class UsedClass extends core::Object implements self::UnusedInterface {
-  field core::int? usedField = null;
-  field core::int? usedInterfaceField = null;
-  synthetic constructor •() → self::UsedClass
-    : super core::Object::•()
-    ;
-}
-static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
-}
-static method main() → dynamic {
-  self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField}{core::int?};
-  } =>#t1);
-  #C3;
-  core::List<self::UnusedEnum> list = core::_GrowableList::•<self::UnusedEnum>(0);
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    block {
-      new mai::ConstClass::•();
-      _in::unsafeCast<dynamic>(null) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum;
-    } =>throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class ConstEnum extends core::Object implements core::Enum {
-}
-class ConstClass extends core::Object {
-  synthetic constructor •() → mai::ConstClass
-    : super core::Object::•()
-    ;
-}
-
-constants  {
-  #C1 = 1
-  #C2 = "UsedEnum.usedValue"
-  #C3 = self::UsedEnum {index:#C1, _name:#C2}
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-
-org-dartlang-testcase:///main.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline.expect
deleted file mode 100644
index 97f788b..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline.expect
+++ /dev/null
@@ -1,24 +0,0 @@
-import 'main_lib.dart';
-
-enum UnusedEnum { a, b }
-enum UsedEnum {
-  unusedValue,
-  usedValue,
-}
-usedMethod(UnusedInterface c) {}
-unusedMethod() {}
-
-class UnusedInterface {
-  int? usedInterfaceField;
-  UnusedInterface(this.usedInterfaceField);
-}
-
-class UsedClass implements UnusedInterface {
-  int? unusedField;
-  int? usedField;
-  int? usedInterfaceField;
-}
-
-class UnusedClass {}
-
-main() {}
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline_modelled.expect
deleted file mode 100644
index a10c6f3..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,23 +0,0 @@
-import 'main_lib.dart';
-
-class UnusedClass {}
-
-class UnusedInterface {
-  UnusedInterface(this.usedInterfaceField);
-  int? usedInterfaceField;
-}
-
-class UsedClass implements UnusedInterface {
-  int? unusedField;
-  int? usedField;
-  int? usedInterfaceField;
-}
-
-enum UnusedEnum { a, b }
-enum UsedEnum {
-  unusedValue,
-  usedValue,
-}
-main() {}
-unusedMethod() {}
-usedMethod(UnusedInterface c) {}
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect
deleted file mode 100644
index cd3c2b4..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect
+++ /dev/null
@@ -1,116 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class UnusedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UnusedEnum> values = #C7;
-  static const field self::UnusedEnum a = #C3;
-  static const field self::UnusedEnum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::UnusedEnum
-    : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UnusedEnum::_name}{core::String};
-}
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UsedEnum> values = #C12;
-  static const field self::UsedEnum unusedValue = #C9;
-  static const field self::UsedEnum usedValue = #C11;
-  const constructor •(core::int index, core::String _name) → self::UsedEnum
-    : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UsedEnum::_name}{core::String};
-}
-class UnusedInterface extends core::Object {
-  field core::int? usedInterfaceField;
-  constructor •(core::int? usedInterfaceField) → self::UnusedInterface
-    : self::UnusedInterface::usedInterfaceField = usedInterfaceField, super core::Object::•()
-    ;
-}
-class UsedClass extends core::Object implements self::UnusedInterface {
-  field core::int? unusedField = null;
-  field core::int? usedField = null;
-  field core::int? usedInterfaceField = null;
-  synthetic constructor •() → self::UsedClass
-    : super core::Object::•()
-    ;
-}
-class UnusedClass extends core::Object {
-  synthetic constructor •() → self::UnusedClass
-    : super core::Object::•()
-    ;
-}
-static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
-}
-static method unusedMethod() → dynamic {}
-static method main() → dynamic {
-  self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField}{core::int?};
-  } =>#t1);
-  #C11;
-  core::List<self::UnusedEnum> list = <self::UnusedEnum>[];
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum){(mai::ConstEnum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class ConstEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<mai::ConstEnum> values = #C15;
-  static const field mai::ConstEnum value = #C14;
-  const constructor •(core::int index, core::String _name) → mai::ConstEnum
-    : mai::ConstEnum::index = index, mai::ConstEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{mai::ConstEnum::_name}{core::String};
-}
-class ConstClass extends core::Object {
-  synthetic constructor •() → mai::ConstClass
-    : super core::Object::•()
-    ;
-  method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index}{core::int};
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "UnusedEnum.a"
-  #C3 = self::UnusedEnum {index:#C1, _name:#C2}
-  #C4 = 1
-  #C5 = "UnusedEnum.b"
-  #C6 = self::UnusedEnum {index:#C4, _name:#C5}
-  #C7 = <self::UnusedEnum*>[#C3, #C6]
-  #C8 = "UsedEnum.unusedValue"
-  #C9 = self::UsedEnum {index:#C1, _name:#C8}
-  #C10 = "UsedEnum.usedValue"
-  #C11 = self::UsedEnum {index:#C4, _name:#C10}
-  #C12 = <self::UsedEnum*>[#C9, #C11]
-  #C13 = "ConstEnum.value"
-  #C14 = mai::ConstEnum {index:#C1, _name:#C13}
-  #C15 = <mai::ConstEnum*>[#C14]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- ConstEnum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-
-org-dartlang-testcase:///main.dart:
-- UnusedEnum. (from org-dartlang-testcase:///main.dart:7:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- UsedEnum. (from org-dartlang-testcase:///main.dart:8:6)
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect
deleted file mode 100644
index a041682..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect
+++ /dev/null
@@ -1,96 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class UnusedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UnusedEnum> values = const <self::UnusedEnum>[self::UnusedEnum::a, self::UnusedEnum::b];
-  static const field self::UnusedEnum a = const self::UnusedEnum::•(0, "UnusedEnum.a");
-  static const field self::UnusedEnum b = const self::UnusedEnum::•(1, "UnusedEnum.b");
-  const constructor •(core::int index, core::String _name) → self::UnusedEnum
-    : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UnusedEnum::_name}{core::String};
-}
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self::UsedEnum> values = const <self::UsedEnum>[self::UsedEnum::unusedValue, self::UsedEnum::usedValue];
-  static const field self::UsedEnum unusedValue = const self::UsedEnum::•(0, "UsedEnum.unusedValue");
-  static const field self::UsedEnum usedValue = const self::UsedEnum::•(1, "UsedEnum.usedValue");
-  const constructor •(core::int index, core::String _name) → self::UsedEnum
-    : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self::UsedEnum::_name}{core::String};
-}
-class UnusedInterface extends core::Object {
-  field core::int? usedInterfaceField;
-  constructor •(core::int? usedInterfaceField) → self::UnusedInterface
-    ;
-}
-class UsedClass extends core::Object implements self::UnusedInterface {
-  field core::int? unusedField;
-  field core::int? usedField;
-  field core::int? usedInterfaceField;
-  synthetic constructor •() → self::UsedClass
-    ;
-}
-class UnusedClass extends core::Object {
-  synthetic constructor •() → self::UnusedClass
-    ;
-}
-static method usedMethod(self::UnusedInterface c) → dynamic
-  ;
-static method unusedMethod() → dynamic
-  ;
-static method main() → dynamic
-  ;
-
-library /*isNonNullableByDefault*/;
-import self as self2;
-import "dart:core" as core;
-
-class ConstEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  static const field core::List<self2::ConstEnum> values = #C4;
-  static const field self2::ConstEnum value = #C3;
-  const constructor •(core::int index, core::String _name) → self2::ConstEnum
-    : self2::ConstEnum::index = index, self2::ConstEnum::_name = _name, super core::Object::•()
-    ;
-  method toString() → core::String
-    return this.{self2::ConstEnum::_name}{core::String};
-}
-class ConstClass extends core::Object {
-  synthetic constructor •() → self2::ConstClass
-    ;
-  method method(self2::ConstEnum e) → core::int
-    ;
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "ConstEnum.value"
-  #C3 = self2::ConstEnum {index:#C1, _name:#C2}
-  #C4 = <self2::ConstEnum*>[#C3]
-}
-
-Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:7:6 -> ListConstant(const <UnusedEnum*>[const UnusedEnum{UnusedEnum.index: 0, UnusedEnum._name: "UnusedEnum.a"}, const UnusedEnum{UnusedEnum.index: 1, UnusedEnum._name: "UnusedEnum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:19 -> InstanceConstant(const UnusedEnum{UnusedEnum.index: 0, UnusedEnum._name: "UnusedEnum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:22 -> InstanceConstant(const UnusedEnum{UnusedEnum.index: 1, UnusedEnum._name: "UnusedEnum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:8:6 -> ListConstant(const <UsedEnum*>[const UsedEnum{UsedEnum.index: 0, UsedEnum._name: "UsedEnum.unusedValue"}, const UsedEnum{UsedEnum.index: 1, UsedEnum._name: "UsedEnum.usedValue"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:9:3 -> InstanceConstant(const UsedEnum{UsedEnum.index: 0, UsedEnum._name: "UsedEnum.unusedValue"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:10:3 -> InstanceConstant(const UsedEnum{UsedEnum.index: 1, UsedEnum._name: "UsedEnum.usedValue"})
-Extra constant evaluation: evaluated: 18, effectively constant: 6
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- ConstEnum. (from org-dartlang-testcase:///main_lib.dart:5:6)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect
deleted file mode 100644
index 9382897..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect
+++ /dev/null
@@ -1,69 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-import "dart:_internal" as _in;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-abstract class UnusedEnum extends core::Object implements core::Enum {
-}
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
-  method toString() → core::String
-    return this.{self::UsedEnum::_name}{core::String};
-}
-abstract class UnusedInterface extends core::Object {
-  abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
-  abstract set /*isLegacy*/ usedInterfaceField(core::int? value) → void;
-}
-class UsedClass extends core::Object implements self::UnusedInterface {
-  field core::int? usedField = null;
-  field core::int? usedInterfaceField = null;
-  synthetic constructor •() → self::UsedClass
-    : super core::Object::•()
-    ;
-}
-static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
-}
-static method main() → dynamic {
-  self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField}{core::int?};
-  } =>#t1);
-  #C3;
-  core::List<self::UnusedEnum> list = core::_GrowableList::•<self::UnusedEnum>(0);
-  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}(_in::unsafeCast<mai::ConstEnum>(_in::unsafeCast<dynamic>(null))){(mai::ConstEnum) → core::int};
-  }
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class ConstEnum extends core::Object implements core::Enum {
-  abstract get /*isLegacy*/ index() → core::int;
-}
-class ConstClass extends core::Object {
-  synthetic constructor •() → mai::ConstClass
-    : super core::Object::•()
-    ;
-  method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index}{core::int};
-}
-
-constants  {
-  #C1 = 1
-  #C2 = "UsedEnum.usedValue"
-  #C3 = self::UsedEnum {index:#C1, _name:#C2}
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///main_lib.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-
-org-dartlang-testcase:///main.dart:
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/aot/tree_shake/main_lib.dart b/pkg/front_end/testcases/aot/tree_shake/main_lib.dart
deleted file mode 100644
index bc873dc..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/main_lib.dart
+++ /dev/null
@@ -1,9 +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.
-
-enum ConstEnum { value }
-
-class ConstClass {
-  int method(ConstEnum e) => e.index;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake/test.options b/pkg/front_end/testcases/aot/tree_shake/test.options
deleted file mode 100644
index bfe6dc8..0000000
--- a/pkg/front_end/testcases/aot/tree_shake/test.options
+++ /dev/null
@@ -1 +0,0 @@
-main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart
deleted file mode 100644
index 53ab22e..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart
+++ /dev/null
@@ -1,20 +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 'main_lib.dart';
-
-class Class implements Interface {
-  int? field1;
-  int? field2;
-  int? field3;
-}
-
-void method(Interface i) {
-  i.field2 = i.field1;
-  i.field3 = i.field3;
-}
-
-main() {
-  method(new Class());
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect
deleted file mode 100644
index b5c21df..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect
+++ /dev/null
@@ -1,35 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class Class extends core::Object implements mai::Interface {
-  field core::int? field1 = null;
-  field core::int? field2 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-}
-static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
-}
-static method main() → dynamic {
-  self::method(new self::Class::•());
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class Interface extends core::Object {
-  field core::int? field1 = null;
-  field core::int? field2 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → mai::Interface
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect
deleted file mode 100644
index 4f86a02..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect
+++ /dev/null
@@ -1,33 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class Class extends core::Object implements mai::Interface {
-  field core::int? field1 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-  set /*isLegacy*/ field2(core::int? value) → void;
-}
-static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
-}
-static method main() → dynamic {
-  self::method(new self::Class::•());
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class Interface extends core::Object {
-  abstract get /*isLegacy*/ field1() → core::int?;
-  abstract set /*isLegacy*/ field2(core::int? value) → void;
-  abstract get /*isLegacy*/ field3() → core::int?;
-  abstract set /*isLegacy*/ field3(core::int? value) → void;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline.expect
deleted file mode 100644
index 433a1aa..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline.expect
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'main_lib.dart';
-
-class Class implements Interface {
-  int? field1;
-  int? field2;
-  int? field3;
-}
-
-void method(Interface i) {}
-main() {}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline_modelled.expect
deleted file mode 100644
index 60b9b0d..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'main_lib.dart';
-
-class Class implements Interface {
-  int? field1;
-  int? field2;
-  int? field3;
-}
-
-main() {}
-void method(Interface i) {}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect
deleted file mode 100644
index b5c21df..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect
+++ /dev/null
@@ -1,35 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class Class extends core::Object implements mai::Interface {
-  field core::int? field1 = null;
-  field core::int? field2 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-}
-static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
-}
-static method main() → dynamic {
-  self::method(new self::Class::•());
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class Interface extends core::Object {
-  field core::int? field1 = null;
-  field core::int? field2 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → mai::Interface
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.outline.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.outline.expect
deleted file mode 100644
index 7018a21..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.outline.expect
+++ /dev/null
@@ -1,30 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class Class extends core::Object implements mai::Interface {
-  field core::int? field1;
-  field core::int? field2;
-  field core::int? field3;
-  synthetic constructor •() → self::Class
-    ;
-}
-static method method(mai::Interface i) → void
-  ;
-static method main() → dynamic
-  ;
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-class Interface extends core::Object {
-  field core::int? field1;
-  field core::int? field2;
-  field core::int? field3;
-  synthetic constructor •() → mai::Interface
-    ;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect
deleted file mode 100644
index 4f86a02..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect
+++ /dev/null
@@ -1,33 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "main_lib.dart" as mai;
-
-import "org-dartlang-testcase:///main_lib.dart";
-
-class Class extends core::Object implements mai::Interface {
-  field core::int? field1 = null;
-  field core::int? field3 = null;
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-  set /*isLegacy*/ field2(core::int? value) → void;
-}
-static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
-}
-static method main() → dynamic {
-  self::method(new self::Class::•());
-}
-
-library /*isNonNullableByDefault*/;
-import self as mai;
-import "dart:core" as core;
-
-abstract class Interface extends core::Object {
-  abstract get /*isLegacy*/ field1() → core::int?;
-  abstract set /*isLegacy*/ field2(core::int? value) → void;
-  abstract get /*isLegacy*/ field3() → core::int?;
-  abstract set /*isLegacy*/ field3(core::int? value) → void;
-}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/test.options b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/test.options
deleted file mode 100644
index bfe6dc8..0000000
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/test.options
+++ /dev/null
@@ -1 +0,0 @@
-main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
index 539ee45..aff37fe 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
@@ -78,7 +78,7 @@
     return Simple2(this.name);
     ^";
 static const field self::B var3 = invalid-expression "This assertion failed.";
-static const field dynamic var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const var4 = C();
              ^";
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
index 1fd70dc..3b12ad15 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
@@ -78,7 +78,7 @@
     return Simple2(this.name);
     ^";
 static const field self::B var3 = invalid-expression "This assertion failed.";
-static const field dynamic var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const var4 = C();
              ^";
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
index 539ee45..aff37fe 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
@@ -78,7 +78,7 @@
     return Simple2(this.name);
     ^";
 static const field self::B var3 = invalid-expression "This assertion failed.";
-static const field dynamic var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const var4 = C();
              ^";
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.outline.expect
index f6cf6a09a..67ae15b 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.outline.expect
@@ -43,7 +43,7 @@
 static const field self::Simple var1 = const self::Simple::•(self::printString);
 static const field self::Simple2 var2 = const self::Simple2::•(self::printString);
 static const field self::B var3 = const self::B::•();
-static const field dynamic var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const var4 = C();
              ^";
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
index 1fd70dc..3b12ad15 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
@@ -78,7 +78,7 @@
     return Simple2(this.name);
     ^";
 static const field self::B var3 = invalid-expression "This assertion failed.";
-static const field dynamic var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const var4 = C();
              ^";
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
index f4af2aa..3694dc3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
@@ -98,7 +98,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
   return x.invalidProperty;
-           ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+           ^^^^^^^^^^^^^^^" in (#C4){<unresolved>}.invalidProperty as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method getWithIndexExceptionFn() → core::int {
   return (#C5).{core::List::[]}(1){(core::int) → core::int};
@@ -107,7 +107,7 @@
   return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
-  return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C5).{core::List::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
            ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
index 6afdb33..f28eea4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
@@ -98,7 +98,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
   return x.invalidProperty;
-           ^^^^^^^^^^^^^^^";
+           ^^^^^^^^^^^^^^^" in (#C4){<unresolved>}.invalidProperty;
 }
 static method getWithIndexExceptionFn() → core::int {
   return (#C5).{core::List::[]}(1){(core::int) → core::int};
@@ -107,7 +107,7 @@
   return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
-  return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C5).{core::List::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
            ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
@@ -127,4 +127,4 @@
 
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 11, effectively constant: 1
+Extra constant evaluation: evaluated: 9, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
index 4accbb0..c19e6d1 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
@@ -98,7 +98,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
   return x.invalidProperty;
-           ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+           ^^^^^^^^^^^^^^^" in (#C4){<unresolved>}.invalidProperty as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method getWithIndexExceptionFn() → core::int {
   return (#C5).{core::List::[]}(1){(core::int) → core::int};
@@ -107,7 +107,7 @@
   return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
-  return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C5).{core::List::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
            ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
index 670f5fc..30a7368 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
@@ -98,7 +98,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
   return x.invalidProperty;
-           ^^^^^^^^^^^^^^^";
+           ^^^^^^^^^^^^^^^" in (#C4){<unresolved>}.invalidProperty;
 }
 static method getWithIndexExceptionFn() → core::int {
   return (#C5).{core::List::[]}(1){(core::int) → core::int};
@@ -107,7 +107,7 @@
   return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
-  return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C5).{core::List::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
            ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
@@ -127,4 +127,4 @@
 
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 11, effectively constant: 1
+Extra constant evaluation: evaluated: 9, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
index 7511ee3..6074624 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
@@ -57,7 +57,7 @@
 }
 static method fn3() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C1).{core::String::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
              ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
index 04e045d..9cd6e70 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
@@ -57,7 +57,7 @@
 }
 static method fn3() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C1).{core::String::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
              ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
@@ -69,4 +69,4 @@
 
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
index 7511ee3..6074624 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
@@ -57,7 +57,7 @@
 }
 static method fn3() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C1).{core::String::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
              ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
index 04e045d..9cd6e70 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
 }
 static method fn3() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return (#C1).{core::String::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
              ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
@@ -69,4 +69,4 @@
 
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart b/pkg/front_end/testcases/const_functions/non_function_invocation.dart
new file mode 100644
index 0000000..a23de2a
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart
@@ -0,0 +1,8 @@
+// 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.
+
+const dynamic a = null;
+const dynamic b = a();
+
+main() {}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.expect
new file mode 100644
index 0000000..a98efbd
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Error: Constant evaluation error:
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Context: Null value during constant evaluation.
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:15: Context: While analyzing:
+// const dynamic b = a();
+//               ^
+//
+import self as self;
+
+static const field dynamic a = #C1;
+static const field dynamic b = invalid-expression "Null value during constant evaluation.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..a98efbd
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.strong.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Error: Constant evaluation error:
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Context: Null value during constant evaluation.
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:15: Context: While analyzing:
+// const dynamic b = a();
+//               ^
+//
+import self as self;
+
+static const field dynamic a = #C1;
+static const field dynamic b = invalid-expression "Null value during constant evaluation.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..ce635b7
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+const dynamic a = null;
+const dynamic b = a();
+main() {}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ce635b7
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+const dynamic a = null;
+const dynamic b = a();
+main() {}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.expect
new file mode 100644
index 0000000..a98efbd
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Error: Constant evaluation error:
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Context: Null value during constant evaluation.
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:15: Context: While analyzing:
+// const dynamic b = a();
+//               ^
+//
+import self as self;
+
+static const field dynamic a = #C1;
+static const field dynamic b = invalid-expression "Null value during constant evaluation.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..bb40270
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.outline.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static const field dynamic a = null;
+static const field dynamic b = self::a{dynamic}.call();
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///non_function_invocation.dart:6:19 -> NullConstant(null)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..a98efbd
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Error: Constant evaluation error:
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Context: Null value during constant evaluation.
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:15: Context: While analyzing:
+// const dynamic b = a();
+//               ^
+//
+import self as self;
+
+static const field dynamic a = #C1;
+static const field dynamic b = invalid-expression "Null value during constant evaluation.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.expect
index 7435151..98579c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.expect
@@ -6,7 +6,7 @@
 //   AbstractClass.new; // error
 //                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
 //   Mixin.new; // error
 //         ^^^
 //
@@ -14,7 +14,7 @@
 //   AbstractNamedMixinApplication.new; // error
 //                                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
 //   Extension.new; // error
 //             ^^^
 //
@@ -50,14 +50,14 @@
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
   AbstractClass.new; // error
                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
   Mixin.new; // error
         ^^^";
   #C2;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
   AbstractNamedMixinApplication.new; // error
                                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
   Extension.new; // error
             ^^^";
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.transformed.expect
index 2b7289e..0d16a80 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 //   AbstractClass.new; // error
 //                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
 //   Mixin.new; // error
 //         ^^^
 //
@@ -14,7 +14,7 @@
 //   AbstractNamedMixinApplication.new; // error
 //                                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
 //   Extension.new; // error
 //             ^^^
 //
@@ -50,14 +50,14 @@
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
   AbstractClass.new; // error
                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
   Mixin.new; // error
         ^^^";
   #C2;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
   AbstractNamedMixinApplication.new; // error
                                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
   Extension.new; // error
             ^^^";
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.expect
index 7435151..98579c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.expect
@@ -6,7 +6,7 @@
 //   AbstractClass.new; // error
 //                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
 //   Mixin.new; // error
 //         ^^^
 //
@@ -14,7 +14,7 @@
 //   AbstractNamedMixinApplication.new; // error
 //                                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
 //   Extension.new; // error
 //             ^^^
 //
@@ -50,14 +50,14 @@
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
   AbstractClass.new; // error
                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
   Mixin.new; // error
         ^^^";
   #C2;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
   AbstractNamedMixinApplication.new; // error
                                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
   Extension.new; // error
             ^^^";
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.transformed.expect
index 2b7289e..0d16a80 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 //   AbstractClass.new; // error
 //                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
 //   Mixin.new; // error
 //         ^^^
 //
@@ -14,7 +14,7 @@
 //   AbstractNamedMixinApplication.new; // error
 //                                 ^^^
 //
-// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
 //   Extension.new; // error
 //             ^^^
 //
@@ -50,14 +50,14 @@
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
   AbstractClass.new; // error
                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
   Mixin.new; // error
         ^^^";
   #C2;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
   AbstractNamedMixinApplication.new; // error
                                 ^^^";
-  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Getter not found: 'new'.
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
   Extension.new; // error
             ^^^";
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart
new file mode 100644
index 0000000..a5c95ac
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.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 C<T extends num> {}
+
+test() => C<Object>;
+
+test2([Type t = C<Object>]) {}
+
+var test3 = (() => C<Object>)();
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.expect
new file mode 100644
index 0000000..28d6f05
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:7:11: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test() => C<Object>;
+//           ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:9:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test2([Type t = C<Object>]) {}
+//                 ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+static field core::Type test3 = (() → core::Type => #C1)(){() → core::Type};
+static method test() → dynamic
+  return #C1;
+static method test2([core::Type t = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<core::Object>)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.transformed.expect
new file mode 100644
index 0000000..28d6f05
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.strong.transformed.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:7:11: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test() => C<Object>;
+//           ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:9:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test2([Type t = C<Object>]) {}
+//                 ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+static field core::Type test3 = (() → core::Type => #C1)(){() → core::Type};
+static method test() → dynamic
+  return #C1;
+static method test2([core::Type t = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<core::Object>)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline.expect
new file mode 100644
index 0000000..c95931c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+class C<T extends num> {}
+
+test() => C<Object>;
+test2([Type t = C<Object>]) {}
+var test3 = (() => C<Object>)();
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3256518
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class C<T extends num> {}
+
+main() {}
+test() => C<Object>;
+test2([Type t = C<Object>]) {}
+var test3 = (() => C<Object>)();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.expect
new file mode 100644
index 0000000..0494323
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:7:11: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test() => C<Object>;
+//           ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:9:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test2([Type t = C<Object>]) {}
+//                 ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+static field core::Type test3 = (() → core::Type => #C1)(){() → core::Type};
+static method test() → dynamic
+  return #C1;
+static method test2([core::Type t = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<core::Object*>*)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect
new file mode 100644
index 0000000..337fe9c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    ;
+}
+static field core::Type test3;
+static method test() → dynamic
+  ;
+static method test2([core::Type t]) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.transformed.expect
new file mode 100644
index 0000000..0494323
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.transformed.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:7:11: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test() => C<Object>;
+//           ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:9:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test2([Type t = C<Object>]) {}
+//                 ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+static field core::Type test3 = (() → core::Type => #C1)(){() → core::Type};
+static method test() → dynamic
+  return #C1;
+static method test2([core::Type t = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<core::Object*>*)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.expect
index fe25279..edfaeac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static field <T extends core::Object? = dynamic>(T%) → T% funcValue = #C1;
-static field (core::int) → core::int f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+static field (core::int) → core::int f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 int Function(int) f = funcValue.call; // Disallowed!
                                 ^" in self::funcValue.call as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
 static field (core::int) → core::int g = self::funcValue.call<core::int>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.transformed.expect
index bdc66d1..4c7d363 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 static field <T extends core::Object? = dynamic>(T%) → T% funcValue = #C1;
-static field (core::int) → core::int f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+static field (core::int) → core::int f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 int Function(int) f = funcValue.call; // Disallowed!
                                 ^" in self::funcValue.call as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
 static method func<T extends core::Object? = dynamic>(self::func::T% value) → self::func::T%
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.textual_outline_modelled.expect
index fa69e2d..3d25c7a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.textual_outline_modelled.expect
@@ -1,4 +1,6 @@
 T func<T>(T value) => value;
 int Function(int) f = funcValue.call;
+int Function(int) g = funcValue.call<int>;
 main() {}
+test(Function f) {}
 var funcValue = func;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.expect
index fe25279..edfaeac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static field <T extends core::Object? = dynamic>(T%) → T% funcValue = #C1;
-static field (core::int) → core::int f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+static field (core::int) → core::int f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 int Function(int) f = funcValue.call; // Disallowed!
                                 ^" in self::funcValue.call as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
 static field (core::int) → core::int g = self::funcValue.call<core::int>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.transformed.expect
index bdc66d1..4c7d363 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 static field <T extends core::Object? = dynamic>(T%) → T% funcValue = #C1;
-static field (core::int) → core::int f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+static field (core::int) → core::int f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:7:33: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 int Function(int) f = funcValue.call; // Disallowed!
                                 ^" in self::funcValue.call as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
 static method func<T extends core::Object? = dynamic>(self::func::T% value) → self::func::T%
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 cfec78a..f506785 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
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    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;
@@ -52,6 +52,12 @@
   <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
   () → self::A<core::int> r = #C6;
 }
+static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::redirect<core::int>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -60,7 +66,7 @@
   #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>)
+  #C7 = static-tearoff self::_#C#new#tearOff
+  #C8 = static-tearoff self::_#C#fact#tearOff
+  #C9 = static-tearoff self::_#C#redirect#tearOff
 }
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 d84286f..f506785 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
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    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;
@@ -52,6 +52,12 @@
   <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
   () → self::A<core::int> r = #C6;
 }
+static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::redirect<core::int>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -60,7 +66,7 @@
   #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>)
+  #C7 = static-tearoff self::_#C#new#tearOff
+  #C8 = static-tearoff self::_#C#fact#tearOff
+  #C9 = static-tearoff self::_#C#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline.expect
index a4b6c13..7fa3351 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline.expect
@@ -3,6 +3,7 @@
   factory A.fact() => new A();
   factory A.redirect() = A;
 }
+
 typedef B<T> = A<T>;
 typedef C<T> = A<int>;
 const a = A.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..34b33d7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+class A<T> {
+  A();
+  factory A.fact() => new A();
+  factory A.redirect() = A;
+}
+
+const a = A.new;
+const b = A<int>.new;
+const c = A.fact;
+const d = A<int>.fact;
+const e = A.redirect;
+const f = A<int>.redirect;
+const g = B.new;
+const h = B<int>.new;
+const i = B.fact;
+const j = B<int>.fact;
+const k = B.redirect;
+const l = B<int>.redirect;
+const m = C.new;
+const n = C<int>.new;
+const o = C.fact;
+const p = C<int>.fact;
+const q = C.redirect;
+const r = C<int>.redirect;
+main() {}
+typedef B<T> = A<T>;
+typedef C<T> = A<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 7412c43..baeca6e 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
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    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;
@@ -52,6 +52,12 @@
   <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
   () → self::A<core::int> r = #C6;
 }
+static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::redirect<core::int>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -60,7 +66,7 @@
   #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>)
+  #C7 = static-tearoff self::_#C#new#tearOff
+  #C8 = static-tearoff self::_#C#fact#tearOff
+  #C9 = static-tearoff self::_#C#redirect#tearOff
 }
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 b93adae..ddd2364 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
@@ -11,7 +11,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     ;
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = self::A::•;
 static const field () → self::A<core::int> b = self::A::•<core::int>;
@@ -25,14 +25,20 @@
 static const field () → self::A<core::int> j = self::A::fact<core::int>;
 static const field <T extends core::Object? = dynamic>() → self::A<T%> k = self::A::redirect;
 static const field () → self::A<core::int> l = self::A::redirect<core::int>;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = <unrelated T extends core::Object? = dynamic>.(self::A::•<core::int>);
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = self::_#C#new#tearOff;
 static const field () → self::A<core::int> n = self::A::•<core::int>;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = <unrelated T extends core::Object? = dynamic>.(self::A::fact<core::int>);
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = self::_#C#fact#tearOff;
 static const field () → self::A<core::int> p = self::A::fact<core::int>;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = <unrelated T extends core::Object? = dynamic>.(self::A::redirect<core::int>);
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = self::_#C#redirect#tearOff;
 static const field () → self::A<core::int> r = self::A::redirect<core::int>;
 static method main() → dynamic
   ;
+static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::redirect<core::int>();
 
 
 Extra constant evaluation status:
@@ -48,10 +54,10 @@
 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*>)
-Evaluated: TypedefTearOff @ org-dartlang-testcase:///const_tear_off.dart:26:11 -> TypedefTearOffConstant(<T>A.<int>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:26:11 -> StaticTearOffConstant(_#C#new#tearOff)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:27:11 -> InstantiationConstant(A.<int*>)
-Evaluated: TypedefTearOff @ org-dartlang-testcase:///const_tear_off.dart:28:11 -> TypedefTearOffConstant(<T>A.fact<int>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:28:11 -> StaticTearOffConstant(_#C#fact#tearOff)
 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: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:30:11 -> StaticTearOffConstant(_#C#redirect#tearOff)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:31:11 -> InstantiationConstant(A.redirect<int*>)
-Extra constant evaluation: evaluated: 23, effectively constant: 18
+Extra constant evaluation: evaluated: 24, effectively constant: 18
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 0a0394c..baeca6e 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
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    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;
@@ -52,6 +52,12 @@
   <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
   () → self::A<core::int> r = #C6;
 }
+static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::redirect<core::int>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -60,7 +66,7 @@
   #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>)
+  #C7 = static-tearoff self::_#C#new#tearOff
+  #C8 = static-tearoff self::_#C#fact#tearOff
+  #C9 = static-tearoff self::_#C#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart
new file mode 100644
index 0000000..620e4da
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.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 Class<T> {
+  Class();
+  Class.named();
+}
+
+test() {
+  Class<int>;
+  Class<int>();
+  Class<int><int>;
+  Class<int><int>();
+  Class<int>.named;
+  Class<int>.named();
+  Class<int>.named<int>;
+  Class<int>.named<int>();
+  Class<int><int>.named;
+  Class<int><int>.named();
+  Class<int><int>.named<int>;
+  Class<int><int>.named<int>();
+  Class<int><int>.named<int><int>;
+  Class<int><int>.named<int><int>();
+}
+
+main() {}
\ No newline at end of file
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
new file mode 100644
index 0000000..9ba9e7d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  #C5;
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  Class<int>.named<int>;
+                  ^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+  Class<int><int>.named<int>;
+                       ^");
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<core::int>)
+  #C2 = TypeLiteralConstant(self::Class<dynamic>)
+  #C3 = TypeLiteralConstant(core::int)
+  #C4 = constructor-tearoff self::Class::named
+  #C5 = instantiation self::Class::named <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
new file mode 100644
index 0000000..4ca72c7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  #C5;
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  Class<int>.named<int>;
+                  ^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+  Class<int><int>.named<int>;
+                       ^");
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<core::int>)
+  #C2 = TypeLiteralConstant(self::Class<dynamic>)
+  #C3 = TypeLiteralConstant(core::int)
+  #C4 = constructor-tearoff self::Class::named
+  #C5 = instantiation self::Class::named <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline.expect
new file mode 100644
index 0000000..8a30727
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class Class<T> {
+  Class();
+  Class.named();
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f75818
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class Class<T> {
+  Class();
+  Class.named();
+}
+
+main() {}
+test() {}
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
new file mode 100644
index 0000000..3c1d2af
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  #C5;
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  Class<int>.named<int>;
+                  ^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+  Class<int><int>.named<int>;
+                       ^");
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<core::int*>*)
+  #C2 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C3 = TypeLiteralConstant(core::int*)
+  #C4 = constructor-tearoff self::Class::named
+  #C5 = instantiation self::Class::named <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.outline.expect
new file mode 100644
index 0000000..9207474
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..5cdc315
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  #C5;
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  Class<int>.named<int>;
+                  ^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: 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.
+  Class<int><int>.named<int>;
+                       ^");
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C2){<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<core::int*>*)
+  #C2 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C3 = TypeLiteralConstant(core::int*)
+  #C4 = constructor-tearoff self::Class::named
+  #C5 = instantiation self::Class::named <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1225dc9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+main() {}
+test1(dynamic x) => x.foo<int>;
+test2(Never x) => x.foo<int>;
+test3(dynamic x) => x.toString<int>;
+test4(Never x) => x.toString<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 ceaf4af..1ecd540 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
@@ -90,6 +90,20 @@
   core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
   core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
 }
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+  return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+  return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+  return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+  return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+  return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+  return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+  return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
 
 constants  {
   #C1 = static-tearoff self::C::stat
@@ -100,4 +114,7 @@
   #C6 = instantiation self::Ext|estat <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
+  #C9 = null
+  #C10 = false
+  #C11 = true
 }
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 aa394b3..4176e23 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
@@ -98,6 +98,20 @@
   core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
   core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
 }
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+  return core::_List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+  return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+  return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+  return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+  return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+  return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+  return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
 
 constants  {
   #C1 = static-tearoff self::C::stat
@@ -108,4 +122,7 @@
   #C6 = instantiation self::Ext|estat <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
+  #C9 = null
+  #C10 = false
+  #C11 = true
 }
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 ea4ceb1..10969f4 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
@@ -90,6 +90,20 @@
   core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
   core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
 }
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+  return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+  return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+  return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+  return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+  return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+  return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+  return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
 
 constants  {
   #C1 = static-tearoff self::C::stat
@@ -100,4 +114,7 @@
   #C6 = instantiation self::Ext|estat <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
+  #C9 = null
+  #C10 = false
+  #C11 = true
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
index 6476dce..0db844e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
@@ -57,3 +57,17 @@
   return () → void => self::Ext|emethod(#this);
 static method main() → void
   ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+  return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+  return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+  return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+  return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+  return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+  return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+  return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
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 fc6c975..f3202b5 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
@@ -98,6 +98,20 @@
   core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
   core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
 }
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+  return core::_List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+  return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+  return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+  return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+  return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+  return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+  return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
 
 constants  {
   #C1 = static-tearoff self::C::stat
@@ -108,4 +122,7 @@
   #C6 = instantiation self::Ext|estat <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
+  #C9 = null
+  #C10 = false
+  #C11 = true
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0e3fd34
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+X boundedMethod<X extends num>(X x) => x;
+X id<X>(X x) => x;
+main() {}
+test() {}
+var a = id;
+var b = a<int>;
+var c = id<int>;
+var d = id<int, String>;
+var e = method<int>;
+var f = 0<int>;
+var g = main<int>;
+var h = boundedMethod<String>;
+void method<X, Y>() {}
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 331bcc5..8954e19 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
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
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 fdbc0b6..8954e19 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
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let Never #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline.expect
index d6ac347..1c70682 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline.expect
@@ -1,35 +1,43 @@
 class A {
   A.new();
 }
+
 class B {
   B();
 }
+
 class C {
   C();
   C.new();
 }
+
 class D {
   D.new();
   D();
 }
+
 class E1 {
   E1._();
   E1();
   factory E1.new() => E1._();
 }
+
 class E2 {
   E2._();
   factory E2.new() => E2._();
   E2();
 }
+
 class E3 {
   E3._();
   E3();
   factory E3.new() = E3._;
 }
+
 class E4 {
   E4._();
   factory E4.new() = E4._;
   E4();
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fd6763c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.textual_outline_modelled.expect
@@ -0,0 +1,43 @@
+class A {
+  A.new();
+}
+
+class B {
+  B();
+}
+
+class C {
+  C();
+  C.new();
+}
+
+class D {
+  D();
+  D.new();
+}
+
+class E1 {
+  E1();
+  E1._();
+  factory E1.new() => E1._();
+}
+
+class E2 {
+  E2();
+  E2._();
+  factory E2.new() => E2._();
+}
+
+class E3 {
+  E3();
+  E3._();
+  factory E3.new() = E3._;
+}
+
+class E4 {
+  E4();
+  E4._();
+  factory E4.new() = E4._;
+}
+
+main() {}
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 331bcc5..8954e19 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
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
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 34ae47c..d7f841c 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
@@ -86,7 +86,7 @@
   constructor _() → self::E4
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic
   ;
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 fdbc0b6..8954e19 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
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let Never #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
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 fdd4fb7..4382007 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
@@ -70,21 +70,21 @@
 static method test1() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
   return #C1;
 static method test2() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test2() => A.foo2; // Error.
                                ^" in (#C2) as{TypeError,ForNonNullableByDefault} Never;
 static method test3() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test3() => A.new; // Error.
                                ^" in (#C3) as{TypeError,ForNonNullableByDefault} Never;
 static method test4() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test4() => A<int>.new; // Error.
                                ^" in (#C4) as{TypeError,ForNonNullableByDefault} Never;
@@ -94,7 +94,7 @@
 A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
                                ^";
 static method test6() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
                                ^" in (#C5) as{TypeError,ForNonNullableByDefault} Never;
@@ -104,7 +104,7 @@
 A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
                                ^";
 static method test8() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
                                ^" in (#C6) as{TypeError,ForNonNullableByDefault} Never;
@@ -116,7 +116,7 @@
 static method test10() → <X extends core::Object? = dynamic>() → self::A<X%>
   return #C7;
 static method test11() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
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 fdd4fb7..4382007 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
@@ -70,21 +70,21 @@
 static method test1() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
   return #C1;
 static method test2() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test2() => A.foo2; // Error.
                                ^" in (#C2) as{TypeError,ForNonNullableByDefault} Never;
 static method test3() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test3() => A.new; // Error.
                                ^" in (#C3) as{TypeError,ForNonNullableByDefault} Never;
 static method test4() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test4() => A<int>.new; // Error.
                                ^" in (#C4) as{TypeError,ForNonNullableByDefault} Never;
@@ -94,7 +94,7 @@
 A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
                                ^";
 static method test6() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
                                ^" in (#C5) as{TypeError,ForNonNullableByDefault} Never;
@@ -104,7 +104,7 @@
 A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
                                ^";
 static method test8() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
                                ^" in (#C6) as{TypeError,ForNonNullableByDefault} Never;
@@ -116,7 +116,7 @@
 static method test10() → <X extends core::Object? = dynamic>() → self::A<X%>
   return #C7;
 static method test11() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline.expect
index 89a5de5..556ac62 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline.expect
@@ -4,6 +4,7 @@
   A();
   factory A.bar1() => new A();
 }
+
 A<X> Function<X>(X) test1() => A.foo1;
 A<X> Function<X>(X) test2() => A.foo2;
 A<X> Function<X>(X) test3() => A.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline_modelled.expect
index 5110c82..fce295c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.textual_outline_modelled.expect
@@ -1,9 +1,22 @@
-A<X> Function<X>(X) bar1() => A.foo1;
-A<X> Function<X>(X) bar2() => A.foo2;
+A<X> Function<X>() test10() => A.bar1;
+A<X> Function<X>(X) test1() => A.foo1;
+A<X> Function<X>(X) test11() => A.bar1;
+A<X> Function<X>(X) test2() => A.foo2;
+A<X> Function<X>(X) test3() => A.new;
+A<X> Function<X>(X) test4() => A<int>.new;
+A<X> Function<X>(X) test5() => A<int, String>.new;
+A<X> Function<X>(X) test6() => A<int>.foo1;
+A<X> Function<X>(X) test7() => A<int, String>.foo1;
+A<X> Function<X>(X) test8() => A<int>.foo2;
+A<X> Function<X>(X) test9() => A<int, String>.foo2;
+A<int> Function() test12() => A<int>.bar1;
+A<int> Function() test13() => A.bar1;
 
 class A<X> {
+  A();
   A.foo1(X x) {}
   A.foo2(X x, int y) {}
+  factory A.bar1() => new A();
 }
 
 main() {}
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 b0da904..1b4c49e 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
@@ -70,21 +70,21 @@
 static method test1() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
   return #C1;
 static method test2() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test2() => A.foo2; // Error.
                                ^" in (#C2) as{TypeError,ForNonNullableByDefault} Never;
 static method test3() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test3() => A.new; // Error.
                                ^" in (#C3) as{TypeError,ForNonNullableByDefault} Never;
 static method test4() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test4() => A<int>.new; // Error.
                                ^" in (#C4) as{TypeError,ForNonNullableByDefault} Never;
@@ -94,7 +94,7 @@
 A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
                                ^";
 static method test6() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
                                ^" in (#C5) as{TypeError,ForNonNullableByDefault} Never;
@@ -104,7 +104,7 @@
 A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
                                ^";
 static method test8() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
                                ^" in (#C6) as{TypeError,ForNonNullableByDefault} Never;
@@ -116,7 +116,7 @@
 static method test10() → <X extends core::Object? = dynamic>() → self::A<X%>
   return #C7;
 static method test11() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
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 b0da904..1b4c49e 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
@@ -70,21 +70,21 @@
 static method test1() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
   return #C1;
 static method test2() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test2() => A.foo2; // Error.
                                ^" in (#C2) as{TypeError,ForNonNullableByDefault} Never;
 static method test3() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
 A<X> Function<X>(X) test3() => A.new; // Error.
                                ^" in (#C3) as{TypeError,ForNonNullableByDefault} Never;
 static method test4() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test4() => A<int>.new; // Error.
                                ^" in (#C4) as{TypeError,ForNonNullableByDefault} Never;
@@ -94,7 +94,7 @@
 A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
                                ^";
 static method test6() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
                                ^" in (#C5) as{TypeError,ForNonNullableByDefault} Never;
@@ -104,7 +104,7 @@
 A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
                                ^";
 static method test8() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
 A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
                                ^" in (#C6) as{TypeError,ForNonNullableByDefault} Never;
@@ -116,7 +116,7 @@
 static method test10() → <X extends core::Object? = dynamic>() → self::A<X%>
   return #C7;
 static method test11() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
  - 'X/*1*/' is from 'unknown'.
  - 'X/*2*/' is from 'unknown'.
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline.expect
index a5d04bf..16c7e62 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline.expect
@@ -3,6 +3,7 @@
   A() {}
   factory A.bar() => new A<X>();
 }
+
 testFoo() => A.foo;
 testFooArgs() => A<int>.foo;
 testNew() => A.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline_modelled.expect
index bd45e3c..bb92a38 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.textual_outline_modelled.expect
@@ -1,7 +1,17 @@
-bar() => A.foo;
-
 class A<X> {
+  A() {}
   A.foo() {}
+  factory A.bar() => new A<X>();
 }
 
 main() {}
+method() {}
+testBar() => A.bar;
+testBarArgs() => A<int>.bar;
+testBarExtraArgs() => A<int, String>.bar;
+testFoo() => A.foo;
+testFooArgs() => A<int>.foo;
+testFooExtraArgs() => A<int, String>.foo;
+testNew() => A.new;
+testNewArgs() => A<int>.new;
+testNewExtraArgs() => A<int, String>.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d650780
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+T Function(T) create<T>() => id<T>;
+T id<T>(T t) => t;
+const explicitConstInstantiation = id<int>;
+const int Function(int) implicitConstInstantiation = id;
+expect(expected, actual) {}
+int Function(int) implicitInstantiation = id;
+main() {}
+var explicitInstantiation = id<int>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect
index e2692d7..5857e8c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.expect
@@ -45,7 +45,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -59,7 +59,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect
index 6a6db60..2438c7c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.strong.transformed.expect
@@ -45,7 +45,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -59,7 +59,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect
index 94115d1..f48ab14 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline.expect
@@ -1,16 +1,20 @@
 final bool inSoundMode = <int?>[] is! List<int>;
 main() {}
+
 class Class1 {
   int field;
   Class1(this.field);
 }
+
 abstract class Interface2 {
   int get field;
 }
+
 class Class2 implements Interface2 {
   final field;
   Class2(this.field);
 }
+
 var Class1_new = Class1.new;
 var Class2_new = Class2.new;
 testInferred() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..99d1f46
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+abstract class Interface2 {
+  int get field;
+}
+
+class Class1 {
+  Class1(this.field);
+  int field;
+}
+
+class Class2 implements Interface2 {
+  Class2(this.field);
+  final field;
+}
+
+expect(expected, actual) {}
+final bool inSoundMode = <int?>[] is! List<int>;
+main() {}
+testInferred() {}
+throws(Function() f, {bool inSoundModeOnly: false}) {}
+var Class1_new = Class1.new;
+var Class2_new = Class2.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect
index e2692d7..5857e8c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.expect
@@ -45,7 +45,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -59,7 +59,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect
index 6a6db60..2438c7c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -59,7 +59,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
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..ba4c564 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
@@ -49,6 +49,12 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
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..966f2f6 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
@@ -49,6 +49,12 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -62,4 +68,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:34:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:35:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 33, effectively constant: 6
+Extra constant evaluation: evaluated: 36, effectively constant: 6
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline.expect
index 71dbef8..b8acf78 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline.expect
@@ -1,5 +1,7 @@
 final bool inSoundMode = <int?>[] is! List<int>;
+
 class A<T> {}
+
 typedef F<X extends num> = A<X>;
 typedef G<Y> = A<int>;
 typedef H<X, Y> = A<X>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5bf6db5
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class A<T> {}
+
+const A<int> Function() f1c = F.new;
+const A<int> Function() g1c = G.new;
+const A<int> Function() h1c = H.new;
+const f1a = A<int>.new;
+const f1b = F<int>.new;
+const g1a = A<int>.new;
+const g1b = G<String>.new;
+const h1a = A<int>.new;
+const h1b = H<int, String>.new;
+expect(expected, actual) {}
+final bool inSoundMode = <int?>[] is! List<int>;
+main() {}
+test<T extends num>() {}
+typedef F<X extends num> = A<X>;
+typedef G<Y> = A<int>;
+typedef H<X, Y> = A<X>;
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 7f08054..379376e 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
@@ -16,7 +16,7 @@
 static const field () → self::A<core::int> f1c = #C2;
 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 = #C3;
+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;
@@ -25,7 +25,7 @@
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C2, #C2);
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
 }
@@ -35,7 +35,7 @@
   () → self::A<self::test::T> f2c = #C1<self::test::T>;
   () → self::A<core::int> g2a = #C2;
   () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C3;
+  () → 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>;
@@ -49,9 +49,14 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
   #C2 = instantiation self::A::• <core::int*>
-  #C3 = instantiation self::A::• <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 54daed1..6063fc6 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,19 +12,25 @@
 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::_#F#new#tearOff<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::_#G#new#tearOff<dynamic>;
 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::_#H#new#tearOff<core::int, dynamic>;
 static method main() → dynamic
   ;
 static method test<T extends core::num>() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
 
 
 Extra constant evaluation status:
@@ -33,8 +39,8 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:15:31 -> InstantiationConstant(A.<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:17:13 -> InstantiationConstant(A.<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:18:13 -> InstantiationConstant(A.<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:31 -> InstantiationConstant(A.<int>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:31 -> InstantiationConstant(A.<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:21:13 -> InstantiationConstant(A.<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:22:13 -> InstantiationConstant(A.<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:23:31 -> InstantiationConstant(A.<int*>)
-Extra constant evaluation: evaluated: 9, effectively constant: 9
+Extra constant evaluation: evaluated: 12, effectively constant: 9
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 4b8f00e..be2d1f5 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
@@ -16,7 +16,7 @@
 static const field () → self::A<core::int> f1c = #C2;
 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 = #C3;
+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;
@@ -25,7 +25,7 @@
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C2, #C2);
   core::identical(#C2, #C2);
   core::identical(#C2, #C2);
 }
@@ -35,7 +35,7 @@
   () → self::A<self::test::T> f2c = #C1<self::test::T>;
   () → self::A<core::int> g2a = #C2;
   () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C3;
+  () → 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>;
@@ -49,18 +49,23 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
   #C2 = instantiation self::A::• <core::int*>
-  #C3 = instantiation self::A::• <core::int>
 }
 
 Extra constant evaluation status:
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:28:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:29:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:31:3 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:3 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:34:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:35:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 33, effectively constant: 6
+Extra constant evaluation: evaluated: 36, effectively constant: 6
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline.expect
index 53e6fd0..e1a475c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline.expect
@@ -3,6 +3,7 @@
   A(X x) {}
   factory A.bar(X x) => new A<X>(x);
 }
+
 A<num> Function(num) test1() => A.foo;
 A<int> Function(int) test2() => A.foo;
 A<num> Function(num) test3() => A.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline_modelled.expect
index 88026bf..2ea13b4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.textual_outline_modelled.expect
@@ -1,9 +1,20 @@
-A<dynamic> Function(String) bar3() => A.foo;
-A<int> Function(int) bar2() => A.foo;
-A<num> Function(num) bar1() => A.foo;
+A<dynamic> Function(String) test11() => A.bar;
+A<dynamic> Function(String) test5() => A.foo;
+A<dynamic> Function(String) test6() => A.new;
+A<dynamic> Function(num) test12() => A.bar;
+A<dynamic> Function(num) test7() => A<num>.foo;
+A<dynamic> Function(num) test8() => A<num>.new;
+A<int> Function(int) test10() => A.bar;
+A<int> Function(int) test2() => A.foo;
+A<int> Function(int) test4() => A.new;
+A<num> Function(num) test1() => A.foo;
+A<num> Function(num) test3() => A.new;
+A<num> Function(num) test9() => A.bar;
 
 class A<X extends num> {
+  A(X x) {}
   A.foo(X x) {}
+  factory A.bar(X x) => new A<X>(x);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart
new file mode 100644
index 0000000..efe748f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.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.
+
+import 'issue46719.dart' as self;
+
+class A<T> {
+  A();
+  A.named();
+
+  List<X> m<X>(X x) => [x];
+
+  static List<X> n<X>(X x) => [x];
+}
+
+List<X> m<X>(X x) => [x];
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {
+  A.named<int>.toString();
+}
+
+void main() {
+  var a = A();
+  a.m<int>.applyAndPrint([2]);
+  a.m<String>.applyAndPrint(['three']);
+  A.n<int>.applyAndPrint([2]);
+  A.n<String>.applyAndPrint(['three']);
+  self.m<int>.applyAndPrint([2]);
+  self.m<String>.applyAndPrint(['three']);
+  self.A.n<int>.applyAndPrint([2]);
+  self.A.n<String>.applyAndPrint(['three']);
+  A.named.toString();
+  A<int>.named.toString();
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
new file mode 100644
index 0000000..2c377ec
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return <self::A::m::X%>[x];
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return <self::A::n::X%>[x];
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return <self::m::X%>[x];
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+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(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C10, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  (#C3).{core::Object::toString}(){() → core::String};
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol, dynamic> {_kvPairs:#C1}
+  #C3 = constructor-tearoff self::A::named
+  #C4 = instantiation self::A::named <core::int>
+  #C5 = static-tearoff self::A::n
+  #C6 = instantiation self::A::n <core::int>
+  #C7 = instantiation self::A::n <core::String>
+  #C8 = static-tearoff self::m
+  #C9 = instantiation self::m <core::int>
+  #C10 = instantiation self::m <core::String>
+}
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
new file mode 100644
index 0000000..67fea71
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return core::_GrowableList::_literal1<self::A::m::X%>(x);
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return core::_GrowableList::_literal1<self::A::n::X%>(x);
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return core::_GrowableList::_literal1<self::m::X%>(x);
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+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(#C6, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C10, 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"));
+  (#C3).{core::Object::toString}(){() → core::String};
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol, dynamic> {_kvPairs:#C1}
+  #C3 = constructor-tearoff self::A::named
+  #C4 = instantiation self::A::named <core::int>
+  #C5 = static-tearoff self::A::n
+  #C6 = instantiation self::A::n <core::int>
+  #C7 = instantiation self::A::n <core::String>
+  #C8 = static-tearoff self::m
+  #C9 = instantiation self::m <core::int>
+  #C10 = instantiation self::m <core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline.expect
new file mode 100644
index 0000000..9bf5384
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+import 'issue46719.dart' as self;
+
+class A<T> {
+  A();
+  A.named();
+  List<X> m<X>(X x) => [x];
+  static List<X> n<X>(X x) => [x];
+}
+
+List<X> m<X>(X x) => [x];
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {}
+void main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7d3a93d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+import 'issue46719.dart' as self;
+
+List<X> m<X>(X x) => [x];
+
+class A<T> {
+  A();
+  A.named();
+  List<X> m<X>(X x) => [x];
+  static List<X> n<X>(X x) => [x];
+}
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {}
+void main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
new file mode 100644
index 0000000..a112778
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return <self::A::m::X%>[x];
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return <self::A::n::X%>[x];
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return <self::m::X%>[x];
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+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(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C10, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  (#C3).{core::Object::toString}(){() → core::String};
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
+  #C3 = constructor-tearoff self::A::named
+  #C4 = instantiation self::A::named <core::int*>
+  #C5 = static-tearoff self::A::n
+  #C6 = instantiation self::A::n <core::int*>
+  #C7 = instantiation self::A::n <core::String*>
+  #C8 = static-tearoff self::m
+  #C9 = instantiation self::m <core::int*>
+  #C10 = instantiation self::m <core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.outline.expect
new file mode 100644
index 0000000..3e96d18
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    ;
+  constructor named() → self::A<self::A::T%>
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    ;
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    ;
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  ;
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  ;
+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
+  ;
+static method main() → void
+  ;
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
new file mode 100644
index 0000000..ca0d633
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return core::_GrowableList::_literal1<self::A::m::X%>(x);
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return core::_GrowableList::_literal1<self::A::n::X%>(x);
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return core::_GrowableList::_literal1<self::m::X%>(x);
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+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(#C6, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C10, 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"));
+  (#C3).{core::Object::toString}(){() → core::String};
+  (#C4).{core::Object::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
+  #C3 = constructor-tearoff self::A::named
+  #C4 = instantiation self::A::named <core::int*>
+  #C5 = static-tearoff self::A::n
+  #C6 = instantiation self::A::n <core::int*>
+  #C7 = instantiation self::A::n <core::String*>
+  #C8 = static-tearoff self::m
+  #C9 = instantiation self::m <core::int*>
+  #C10 = instantiation self::m <core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart
new file mode 100644
index 0000000..35367c0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.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.
+
+String f(a, [b]) => "$a, $b";
+
+String a<T1, T2>(int x) {
+  return "a<$T1, $T2>($x)";
+}
+
+typedef b = int;
+typedef c = String;
+
+main() {
+  expect("${a<b, c>}, null", f(a<b, c>.toString()));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
new file mode 100644
index 0000000..1c0eeb1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b = #C1]) → core::String
+  return "${a}, ${b}";
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String {
+  return "a<${self::a::T1%}, ${self::a::T2%}>(${x})";
+}
+static method main() → dynamic {
+  self::expect("${#C3}, null", self::f((#C3).{core::Object::toString}(){() → core::String}));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::a
+  #C3 = instantiation self::a <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
new file mode 100644
index 0000000..1c0eeb1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b = #C1]) → core::String
+  return "${a}, ${b}";
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String {
+  return "a<${self::a::T1%}, ${self::a::T2%}>(${x})";
+}
+static method main() → dynamic {
+  self::expect("${#C3}, null", self::f((#C3).{core::Object::toString}(){() → core::String}));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::a
+  #C3 = instantiation self::a <core::int, core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline.expect
new file mode 100644
index 0000000..322b20b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+String f(a, [b]) => "$a, $b";
+String a<T1, T2>(int x) {}
+typedef b = int;
+typedef c = String;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..72b49f6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+String a<T1, T2>(int x) {}
+String f(a, [b]) => "$a, $b";
+expect(expected, actual) {}
+main() {}
+typedef b = int;
+typedef c = 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
new file mode 100644
index 0000000..19cc640
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b = #C1]) → core::String
+  return "${a}, ${b}";
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String {
+  return "a<${self::a::T1%}, ${self::a::T2%}>(${x})";
+}
+static method main() → dynamic {
+  self::expect("${#C3}, null", self::f((#C3).{core::Object::toString}(){() → core::String}));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::a
+  #C3 = instantiation self::a <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.outline.expect
new file mode 100644
index 0000000..fe18f37
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b]) → core::String
+  ;
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String
+  ;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
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
new file mode 100644
index 0000000..19cc640
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b = #C1]) → core::String
+  return "${a}, ${b}";
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String {
+  return "a<${self::a::T1%}, ${self::a::T2%}>(${x})";
+}
+static method main() → dynamic {
+  self::expect("${#C3}, null", self::f((#C3).{core::Object::toString}(){() → core::String}));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::a
+  #C3 = instantiation self::a <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart
new file mode 100644
index 0000000..7a71462
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.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.
+
+class A<X> {
+  A.foo() {}
+  factory A.bar() => new A.foo();
+  factory A.baz() = A.bar;
+}
+
+test() {
+  List.filled; // Ok.
+  A.foo; // Ok.
+  A.bar; // Ok.
+  A.baz; // Ok.
+
+  List<int>.filled; // Ok.
+  A<int>.foo; // Ok.
+  A<int>.bar; // Ok.
+  A<int>.baz; // Ok.
+
+  List.filled<int>; // Error.
+  A.foo<int>; // Error.
+  A.bar<int>; // Error.
+  A.baz<int>; // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
new file mode 100644
index 0000000..837ac1a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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.
+//              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+//        ^
+//
+import self as self;
+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*/;
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::foo<self::A::bar::X%>();
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  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.
+             ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+       ^";
+}
+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>
+}
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
new file mode 100644
index 0000000..837ac1a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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.
+//              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+//        ^
+//
+import self as self;
+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*/;
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::foo<self::A::bar::X%>();
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  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.
+             ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+       ^";
+}
+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>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline.expect
new file mode 100644
index 0000000..97889d6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  A.foo() {}
+  factory A.bar() => new A.foo();
+  factory A.baz() = A.bar;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dd5c918
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  A.foo() {}
+  factory A.bar() => new A.foo();
+  factory A.baz() = A.bar;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
new file mode 100644
index 0000000..1d39c74
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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.
+//              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+//        ^
+//
+import self as self;
+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*/;
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::foo<self::A::bar::X%>();
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  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.
+             ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+       ^";
+}
+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*>
+}
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
new file mode 100644
index 0000000..e724719
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+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*/;
+  constructor foo() → self::A<self::A::X%>
+    ;
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    ;
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..1d39c74
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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.
+//              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+//        ^
+//
+import self as self;
+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*/;
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::foo<self::A::bar::X%>();
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic {
+  #C1;
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  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.
+             ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: 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.foo<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: 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.bar<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: 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.baz<int>; // Error.
+       ^";
+}
+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*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart
new file mode 100644
index 0000000..016df79
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart
@@ -0,0 +1,26 @@
+// 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 MyClass<T> {
+  final a;
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+}
+
+test() {
+  const v1 = MyClass<String>.new;
+  const v2 = MyClass<int>.constr;
+  const v3 = MyClass<int>.new;
+  const v4 = MyClass<String>.constr;
+
+  const c1 = v1(3, 14);
+  const c2 = v1(3, 14);
+  const c3 = v2();
+  const c4 = v2();
+  const c5 = v3(3, 14);
+  const c6 = v4();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.expect
new file mode 100644
index 0000000..9c76f69
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:18:16: Error: Function invocation is not a constant expression.
+//   const c1 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:19:16: Error: Function invocation is not a constant expression.
+//   const c2 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:20:16: Error: Function invocation is not a constant expression.
+//   const c3 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:21:16: Error: Function invocation is not a constant expression.
+//   const c4 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:22:16: Error: Function invocation is not a constant expression.
+//   const c5 = v3(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:23:16: Error: Function invocation is not a constant expression.
+//   const c6 = v4();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const self::MyClass<core::String> c1 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c2 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c3 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c4 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c5 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c6 = invalid-expression "Function invocation is not a constant expression.";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.transformed.expect
new file mode 100644
index 0000000..9c76f69
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.strong.transformed.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:18:16: Error: Function invocation is not a constant expression.
+//   const c1 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:19:16: Error: Function invocation is not a constant expression.
+//   const c2 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:20:16: Error: Function invocation is not a constant expression.
+//   const c3 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:21:16: Error: Function invocation is not a constant expression.
+//   const c4 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:22:16: Error: Function invocation is not a constant expression.
+//   const c5 = v3(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:23:16: Error: Function invocation is not a constant expression.
+//   const c6 = v4();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const self::MyClass<core::String> c1 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c2 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c3 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c4 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c5 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c6 = invalid-expression "Function invocation is not a constant expression.";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline.expect
new file mode 100644
index 0000000..62af4b8
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class MyClass<T> {
+  final a;
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..831b458
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class MyClass<T> {
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+  final a;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.expect
new file mode 100644
index 0000000..9c76f69
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:18:16: Error: Function invocation is not a constant expression.
+//   const c1 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:19:16: Error: Function invocation is not a constant expression.
+//   const c2 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:20:16: Error: Function invocation is not a constant expression.
+//   const c3 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:21:16: Error: Function invocation is not a constant expression.
+//   const c4 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:22:16: Error: Function invocation is not a constant expression.
+//   const c5 = v3(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:23:16: Error: Function invocation is not a constant expression.
+//   const c6 = v4();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const self::MyClass<core::String> c1 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c2 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c3 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c4 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c5 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c6 = invalid-expression "Function invocation is not a constant expression.";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.outline.expect
new file mode 100644
index 0000000..e701b2d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.transformed.expect
new file mode 100644
index 0000000..9c76f69
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.transformed.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:18:16: Error: Function invocation is not a constant expression.
+//   const c1 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:19:16: Error: Function invocation is not a constant expression.
+//   const c2 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:20:16: Error: Function invocation is not a constant expression.
+//   const c3 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:21:16: Error: Function invocation is not a constant expression.
+//   const c4 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:22:16: Error: Function invocation is not a constant expression.
+//   const c5 = v3(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:23:16: Error: Function invocation is not a constant expression.
+//   const c6 = v4();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const self::MyClass<core::String> c1 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c2 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c3 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c4 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c5 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c6 = invalid-expression "Function invocation is not a constant expression.";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart
new file mode 100644
index 0000000..881008a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.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.
+
+func() {}
+
+@func()
+test() {
+  const func();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.expect
new file mode 100644
index 0000000..9f3e10b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+//   const func();
+//         ^^^^
+//
+import self as self;
+
+static method func() → dynamic {}
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+  const func();
+        ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.transformed.expect
new file mode 100644
index 0000000..9f3e10b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+//   const func();
+//         ^^^^
+//
+import self as self;
+
+static method func() → dynamic {}
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+  const func();
+        ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline.expect
new file mode 100644
index 0000000..c834951
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+func() {}
+@func()
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1490572
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+func() {}
+main() {}
+@func()
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.expect
new file mode 100644
index 0000000..9f3e10b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+//   const func();
+//         ^^^^
+//
+import self as self;
+
+static method func() → dynamic {}
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+  const func();
+        ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.outline.expect
new file mode 100644
index 0000000..7e82e3f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+import self as self;
+
+static method func() → dynamic
+  ;
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.transformed.expect
new file mode 100644
index 0000000..9f3e10b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+//   const func();
+//         ^^^^
+//
+import self as self;
+
+static method func() → dynamic {}
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+  const func();
+        ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart
new file mode 100644
index 0000000..254f9e5
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart
@@ -0,0 +1,11 @@
+// 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.
+
+dynamic a;
+
+test() {
+  new a();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.expect
new file mode 100644
index 0000000..a4ce712
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+//   new a();
+//       ^
+//
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+  new a();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.transformed.expect
new file mode 100644
index 0000000..a4ce712
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.strong.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+//   new a();
+//       ^
+//
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+  new a();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline.expect
new file mode 100644
index 0000000..fd7d469
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+dynamic a;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fa0c4f9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+dynamic a;
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.expect
new file mode 100644
index 0000000..a4ce712
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+//   new a();
+//       ^
+//
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+  new a();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.outline.expect
new file mode 100644
index 0000000..5e8c51e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.transformed.expect
new file mode 100644
index 0000000..a4ce712
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+//   new a();
+//       ^
+//
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+  new a();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart
new file mode 100644
index 0000000..379a8de
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.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.
+
+class C {
+  int new = 42;
+}
+
+test() {
+  new C().new is int;
+  dynamic foo;
+  foo.new;
+  foo.new();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect
new file mode 100644
index 0000000..fe92bd1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6: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;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int} is{ForNonNullableByDefault} core::int;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..fe92bd1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6: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;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int} is{ForNonNullableByDefault} core::int;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.textual_outline.expect
new file mode 100644
index 0000000..cd96c673
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+class C {
+  int new = 42;
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect
new file mode 100644
index 0000000..fe92bd1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6: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;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int} is{ForNonNullableByDefault} core::int;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.outline.expect
new file mode 100644
index 0000000..807085d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6: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;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new;
+  synthetic constructor •() → self::C
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..fe92bd1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6: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;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int} is{ForNonNullableByDefault} core::int;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart
new file mode 100644
index 0000000..a93920b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.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.
+
+test() {
+  new A();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.expect
new file mode 100644
index 0000000..17917a9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+//   new A();
+//       ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+  new A();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.transformed.expect
new file mode 100644
index 0000000..17917a9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.strong.transformed.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+//   new A();
+//       ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+  new A();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline.expect
new file mode 100644
index 0000000..ec6b9e0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f67dbb0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.expect
new file mode 100644
index 0000000..17917a9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+//   new A();
+//       ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+  new A();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.outline.expect
new file mode 100644
index 0000000..64923de
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.transformed.expect
new file mode 100644
index 0000000..17917a9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.transformed.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+//   new A();
+//       ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+  new A();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart
new file mode 100644
index 0000000..19d9464
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart
@@ -0,0 +1,31 @@
+// 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 redirecting factory invocations in default values are handled for
+// tear off parameters.
+
+class Class {
+  final List<Const> constants;
+
+  Class(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
+}
+
+typedef Alias = Const;
+
+abstract class Const {
+  const factory Const.impl() = _ConstImpl;
+}
+
+typedef ImplAlias<T extends num> = _ConstImpl<T>;
+
+class _ConstImpl<T> implements Const {
+  const _ConstImpl();
+}
+
+main() {}
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
new file mode 100644
index 0000000..c0c195f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::•(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
+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>();
+
+constants  {
+  #C1 = self::_ConstImpl<dynamic> {}
+  #C2 = self::_ConstImpl<core::String> {}
+  #C3 = <self::Const>[#C1, #C1, #C2]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect.dart:
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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
new file mode 100644
index 0000000..c0c195f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::•(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
+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>();
+
+constants  {
+  #C1 = self::_ConstImpl<dynamic> {}
+  #C2 = self::_ConstImpl<core::String> {}
+  #C3 = <self::Const>[#C1, #C1, #C2]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect.dart:
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect
new file mode 100644
index 0000000..2453b30
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+class Class {
+  final List<Const> constants;
+  Class(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
+}
+
+typedef Alias = Const;
+
+abstract class Const {
+  const factory Const.impl() = _ConstImpl;
+}
+
+typedef ImplAlias<T extends num> = _ConstImpl<T>;
+
+class _ConstImpl<T> implements Const {
+  const _ConstImpl();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..615c4c2
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+abstract class Const {
+  const factory Const.impl() = _ConstImpl;
+}
+
+class Class {
+  Class(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
+  final List<Const> constants;
+}
+
+class _ConstImpl<T> implements Const {
+  const _ConstImpl();
+}
+
+main() {}
+typedef Alias = Const;
+typedef ImplAlias<T extends num> = _ConstImpl<T>;
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
new file mode 100644
index 0000000..94ca00a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::•(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
+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>();
+
+constants  {
+  #C1 = self::_ConstImpl<dynamic> {}
+  #C2 = self::_ConstImpl<core::String*> {}
+  #C3 = <self::Const*>[#C1, #C1, #C2]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect.dart:
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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
new file mode 100644
index 0000000..f2eca4d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants}) → self::Class
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants}) → self::Class
+    return new self::Class::•(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic
+  ;
+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>();
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
new file mode 100644
index 0000000..94ca00a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::•(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
+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>();
+
+constants  {
+  #C1 = self::_ConstImpl<dynamic> {}
+  #C2 = self::_ConstImpl<core::String*> {}
+  #C3 = <self::Const*>[#C1, #C1, #C2]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect.dart:
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.expect
index 2dac5ed..678c59b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.expect
@@ -121,10 +121,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -140,7 +140,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -155,10 +155,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -172,17 +172,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.transformed.expect
index 67d30a7..0637a6f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.strong.transformed.expect
@@ -121,10 +121,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -140,7 +140,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -155,10 +155,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -172,17 +172,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.expect
index 2dac5ed..678c59b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.expect
@@ -121,10 +121,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -140,7 +140,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -155,10 +155,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -172,17 +172,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.transformed.expect
index 67d30a7..0637a6f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.transformed.expect
@@ -121,10 +121,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -140,7 +140,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -155,10 +155,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -172,17 +172,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.expect
index 066aa724..9db8c5f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.expect
@@ -43,7 +43,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -60,7 +60,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.transformed.expect
index c76d239..6d3c102 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.strong.transformed.expect
@@ -43,7 +43,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -60,7 +60,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.expect
index 066aa724..9db8c5f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.expect
@@ -43,7 +43,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -60,7 +60,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.transformed.expect
index c76d239..6d3c102 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -60,7 +60,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.expect
index 007285e..9957901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.expect
@@ -20,7 +20,7 @@
 }
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///constructor_tear_off_uri_part.dart */ test() → dynamic {
-  (core::int) → self::Class f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+  (core::int) → self::Class f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
   Class Function(int) f = Class.new;
                           ^" in (#C1) as{TypeError,ForNonNullableByDefault} (core::int) → self::Class;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.transformed.expect
index 007285e..9957901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
 }
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///constructor_tear_off_uri_part.dart */ test() → dynamic {
-  (core::int) → self::Class f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+  (core::int) → self::Class f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
   Class Function(int) f = Class.new;
                           ^" in (#C1) as{TypeError,ForNonNullableByDefault} (core::int) → self::Class;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.expect
index 007285e..9957901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.expect
@@ -20,7 +20,7 @@
 }
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///constructor_tear_off_uri_part.dart */ test() → dynamic {
-  (core::int) → self::Class f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+  (core::int) → self::Class f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
   Class Function(int) f = Class.new;
                           ^" in (#C1) as{TypeError,ForNonNullableByDefault} (core::int) → self::Class;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.transformed.expect
index 007285e..9957901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
 }
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///constructor_tear_off_uri_part.dart */ test() → dynamic {
-  (core::int) → self::Class f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+  (core::int) → self::Class f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
   Class Function(int) f = Class.new;
                           ^" in (#C1) as{TypeError,ForNonNullableByDefault} (core::int) → self::Class;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart
new file mode 100644
index 0000000..78a304a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.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.
+
+// From co19/Language/Types/Type_Aliases/scope_t02
+
+class A {}
+
+class C<T> {}
+
+typedef AAlias = A;
+typedef CAlias<T> = C<T>;
+
+typedef AAlias = A; //  error
+typedef AAlias = C<String>; // error
+typedef CAlias<T> = C<T>; //  error
+typedef CAlias = C<String>; //  error
+typedef CAlias<T1, T2> = C<T1>; //  error
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.expect
new file mode 100644
index 0000000..a612cdc
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.transformed.expect
new file mode 100644
index 0000000..a612cdc
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.strong.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline.expect
new file mode 100644
index 0000000..43abe4c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+class A {}
+
+class C<T> {}
+
+typedef AAlias = A;
+typedef CAlias<T> = C<T>;
+typedef AAlias = A;
+typedef AAlias = C<String>;
+typedef CAlias<T> = C<T>;
+typedef CAlias = C<String>;
+typedef CAlias<T1, T2> = C<T1>;
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..213093e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class A {}
+
+class C<T> {}
+
+main() {}
+typedef AAlias = A;
+typedef AAlias = A;
+typedef AAlias = C<String>;
+typedef CAlias<T> = C<T>;
+typedef CAlias<T> = C<T>;
+typedef CAlias<T1, T2> = C<T1>;
+typedef CAlias = C<String>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.expect
new file mode 100644
index 0000000..a612cdc
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.outline.expect
new file mode 100644
index 0000000..47b5558
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.transformed.expect
new file mode 100644
index 0000000..a612cdc
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.expect
index 7c14634..68c70e1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.expect
@@ -145,10 +145,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -164,7 +164,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -179,10 +179,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -196,17 +196,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.transformed.expect
index ebe5432..ae147ff 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.strong.transformed.expect
@@ -145,10 +145,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -164,7 +164,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -179,10 +179,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -196,17 +196,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.expect
index 7c14634..68c70e1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.expect
@@ -145,10 +145,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -164,7 +164,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -179,10 +179,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -196,17 +196,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.transformed.expect
index ebe5432..ae147ff 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.transformed.expect
@@ -145,10 +145,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -164,7 +164,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -179,10 +179,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -196,17 +196,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.expect
index bcc5942..6ef9f15 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.expect
@@ -51,7 +51,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -68,7 +68,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.transformed.expect
index db9b0fa..2c3136a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.strong.transformed.expect
@@ -51,7 +51,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -68,7 +68,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.expect
index bcc5942..6ef9f15 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.expect
@@ -51,7 +51,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -68,7 +68,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.transformed.expect
index db9b0fa..2c3136a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -68,7 +68,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
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 1806fdc..287832b 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
@@ -69,10 +69,10 @@
   mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
   self::expect(42, c3a.{mai::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -90,7 +90,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
     f4a<int, String>(); // error
        ^" in f4a{<inapplicable>}.<core::int, core::String>();
   };
@@ -99,7 +99,7 @@
   self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
     f4b<int>(); // error
        ^" in f4b{<inapplicable>}.<core::int>();
   };
@@ -116,7 +116,7 @@
   self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
     f4d<int, String>(); // error
        ^" in f4d{<inapplicable>}.<core::int, core::String>();
   };
@@ -125,7 +125,7 @@
   self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
     f4e<int>(); // error
        ^" in f4e{<inapplicable>}.<core::int>();
   };
@@ -143,7 +143,7 @@
   self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
   () → Null {
     f5a<core::String>(){() → mai::Class5<core::String>};
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
     f5a<int, String>(); // error
        ^" in f5a{<inapplicable>}.<core::int, core::String>();
   };
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let dynamic #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let dynamic #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
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 9edd33a..bcf1164 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
@@ -69,10 +69,10 @@
   mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
   self::expect(42, c3a.{mai::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -90,7 +90,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
     f4a<int, String>(); // error
        ^" in f4a{<inapplicable>}.<core::int, core::String>();
   };
@@ -99,7 +99,7 @@
   self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
     f4b<int>(); // error
        ^" in f4b{<inapplicable>}.<core::int>();
   };
@@ -116,7 +116,7 @@
   self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
     f4d<int, String>(); // error
        ^" in f4d{<inapplicable>}.<core::int, core::String>();
   };
@@ -125,7 +125,7 @@
   self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
     f4e<int>(); // error
        ^" in f4e{<inapplicable>}.<core::int>();
   };
@@ -143,7 +143,7 @@
   self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
   () → Null {
     f5a<core::String>(){() → mai::Class5<core::String>};
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
     f5a<int, String>(); // error
        ^" in f5a{<inapplicable>}.<core::int, core::String>();
   };
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let Never #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let Never #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
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 1806fdc..287832b 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
@@ -69,10 +69,10 @@
   mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
   self::expect(42, c3a.{mai::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -90,7 +90,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
     f4a<int, String>(); // error
        ^" in f4a{<inapplicable>}.<core::int, core::String>();
   };
@@ -99,7 +99,7 @@
   self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
     f4b<int>(); // error
        ^" in f4b{<inapplicable>}.<core::int>();
   };
@@ -116,7 +116,7 @@
   self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
     f4d<int, String>(); // error
        ^" in f4d{<inapplicable>}.<core::int, core::String>();
   };
@@ -125,7 +125,7 @@
   self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
     f4e<int>(); // error
        ^" in f4e{<inapplicable>}.<core::int>();
   };
@@ -143,7 +143,7 @@
   self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
   () → Null {
     f5a<core::String>(){() → mai::Class5<core::String>};
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
     f5a<int, String>(); // error
        ^" in f5a{<inapplicable>}.<core::int, core::String>();
   };
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let dynamic #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let dynamic #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
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 a682b15..f714802 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
@@ -29,7 +29,7 @@
   static method _#named#tearOff() → self2::Class2
     return new self2::Class2::named();
   static factory redirect() → self2::Class2
-    let dynamic #redirecting_factory = self2::Class2::named in invalid-expression;
+    return new self2::Class2::named();
   static method _#redirect#tearOff() → self2::Class2
     return new self2::Class2::named();
 }
@@ -51,7 +51,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#new#tearOff::T%>
     return self2::Class4::•<self2::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#redirect#tearOff::T%>
     return new self2::Class4::_<self2::Class4::_#redirect#tearOff::T%>();
 }
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 9edd33a..bcf1164 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
@@ -69,10 +69,10 @@
   mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
   self::expect(42, c3a.{mai::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -90,7 +90,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
     f4a<int, String>(); // error
        ^" in f4a{<inapplicable>}.<core::int, core::String>();
   };
@@ -99,7 +99,7 @@
   self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
     f4b<int>(); // error
        ^" in f4b{<inapplicable>}.<core::int>();
   };
@@ -116,7 +116,7 @@
   self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
     f4d<int, String>(); // error
        ^" in f4d{<inapplicable>}.<core::int, core::String>();
   };
@@ -125,7 +125,7 @@
   self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>);
   self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>);
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
     f4e<int>(); // error
        ^" in f4e{<inapplicable>}.<core::int>();
   };
@@ -143,7 +143,7 @@
   self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
   () → Null {
     f5a<core::String>(){() → mai::Class5<core::String>};
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
     f5a<int, String>(); // error
        ^" in f5a{<inapplicable>}.<core::int, core::String>();
   };
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let Never #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let Never #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.expect
index 1802229..7cca76e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.expect
@@ -84,7 +84,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -93,7 +93,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -113,7 +113,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.transformed.expect
index d13da4b..bc46c71 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -93,7 +93,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -113,7 +113,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.expect
index 1802229..7cca76e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.expect
@@ -84,7 +84,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -93,7 +93,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -113,7 +113,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.transformed.expect
index d13da4b..bc46c71 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -93,7 +93,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -113,7 +113,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.expect
index eae54df..2addbc7 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.expect
@@ -104,7 +104,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -113,7 +113,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -133,7 +133,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.transformed.expect
index 552fe7e..11d7673 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.strong.transformed.expect
@@ -104,7 +104,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -113,7 +113,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -133,7 +133,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.expect
index eae54df..2addbc7 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.expect
@@ -104,7 +104,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -113,7 +113,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -133,7 +133,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.transformed.expect
index 552fe7e..11d7673 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.transformed.expect
@@ -104,7 +104,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -113,7 +113,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -133,7 +133,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
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 14303b7..31fe515 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
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
@@ -109,7 +109,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -118,7 +118,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -138,7 +138,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
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 2ede93c..2b61e14 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
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let Never #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let Never #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let Never #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let Never #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let Never #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
@@ -109,7 +109,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -118,7 +118,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -138,7 +138,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
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 14303b7..31fe515 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
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
@@ -109,7 +109,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -118,7 +118,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -138,7 +138,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
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 26553e6..f1a60c8 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
@@ -9,7 +9,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -20,7 +20,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -31,7 +31,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
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 2ede93c..2b61e14 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
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let Never #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let Never #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let Never #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let Never #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let Never #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
@@ -109,7 +109,7 @@
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
     f1a<int, String>(); // error
        ^" in f1a{<inapplicable>}.<core::int, core::String>();
   };
@@ -118,7 +118,7 @@
   self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
   self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
@@ -138,7 +138,7 @@
   self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
   () → Null {
     f2a<core::String>(){() → self::Class2<core::String>};
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect
index fa85f71..da67936 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.expect
@@ -49,7 +49,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -63,7 +63,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect
index 2664cf0..8897cd5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -63,7 +63,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect
index 94115d1..f48ab14 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline.expect
@@ -1,16 +1,20 @@
 final bool inSoundMode = <int?>[] is! List<int>;
 main() {}
+
 class Class1 {
   int field;
   Class1(this.field);
 }
+
 abstract class Interface2 {
   int get field;
 }
+
 class Class2 implements Interface2 {
   final field;
   Class2(this.field);
 }
+
 var Class1_new = Class1.new;
 var Class2_new = Class2.new;
 testInferred() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline_modelled.expect
index 8944ae7..99d1f46 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.textual_outline_modelled.expect
@@ -17,3 +17,5 @@
 main() {}
 testInferred() {}
 throws(Function() f, {bool inSoundModeOnly: false}) {}
+var Class1_new = Class1.new;
+var Class2_new = Class2.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect
index fa85f71..da67936 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.expect
@@ -49,7 +49,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -63,7 +63,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect
index 2664cf0..8897cd5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
   self::Class1 c1a = f1a(0){(core::int) → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
   () → Null {
-    f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f1a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
   };
@@ -63,7 +63,7 @@
   self::Class2 c2a = f2a(0){(core::int) → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
   () → Null {
-    f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
     f2a(''); // error
         ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
   };
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 9277874..abfa7c0 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
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
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 bfa45c0..e5c1801 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
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
@@ -115,4 +115,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: 61, effectively constant: 10
+Extra constant evaluation: evaluated: 59, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline.expect
index 8731bf4..7efc9f8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline.expect
@@ -1,9 +1,11 @@
 final bool inSoundMode = <int?>[] is! List<int>;
+
 class A<T> {
   A();
   factory A.fact() => new A<T>();
   factory A.redirect() = A<T>;
 }
+
 typedef F<X extends num> = A<X>;
 typedef G<Y> = A<int>;
 typedef H<X, Y> = A<X>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ebc6c89
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+class A<T> {
+  A();
+  factory A.fact() => new A<T>();
+  factory A.redirect() = A<T>;
+}
+
+const A<int> Function() f1c = F.new;
+const A<int> Function() f1f = F.fact;
+const A<int> Function() f1i = F.redirect;
+const A<int> Function() g1c = G.new;
+const A<int> Function() h1c = H.new;
+const f1a = A<int>.new;
+const f1b = F<int>.new;
+const f1d = A<int>.fact;
+const f1e = F<int>.fact;
+const f1g = A<int>.redirect;
+const f1h = F<int>.redirect;
+const g1a = A<int>.new;
+const g1b = G<String>.new;
+const h1a = A<int>.new;
+const h1b = H<int, String>.new;
+expect(expected, actual) {}
+final bool inSoundMode = <int?>[] is! List<int>;
+main() {}
+test<T extends num>() {}
+typedef F<X extends num> = A<X>;
+typedef G<Y> = A<int>;
+typedef H<X, Y> = A<X>;
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 8e0844f..942bbe6 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
@@ -17,52 +17,52 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     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 = #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 = #C6;
-static const field () → self::A<core::int> f1g = #C8;
-static const field () → self::A<core::int> f1h = #C8;
-static const field () → self::A<core::int> f1i = #C9;
+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 = #C3;
+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 = #C3;
+static const field () → self::A<core::int> h1c = #C2;
 static method main() → dynamic {
   self::test<core::int>();
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
-  core::identical(#C5, #C5);
-  core::identical(#C5, #C6);
-  core::identical(#C8, #C8);
-  core::identical(#C8, #C9);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C4, #C4);
+  core::identical(#C4, #C4);
+  core::identical(#C6, #C6);
+  core::identical(#C6, #C6);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
 }
 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 = #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 = #C7<self::test::T>;
-  () → self::A<self::test::T> f2h = #C7<self::test::T>;
-  () → self::A<self::test::T> f2i = #C7<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 = #C3;
+  () → 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>;
@@ -98,11 +98,8 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = instantiation self::A::_#new#tearOff <core::int>
-  #C4 = static-tearoff self::A::_#fact#tearOff
-  #C5 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C6 = instantiation self::A::_#fact#tearOff <core::int>
-  #C7 = static-tearoff self::A::_#redirect#tearOff
-  #C8 = instantiation self::A::_#redirect#tearOff <core::int*>
-  #C9 = instantiation self::A::_#redirect#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*>
 }
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 e433d37..feba408 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
@@ -16,7 +16,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
@@ -65,17 +65,17 @@
 Extra constant evaluation status:
 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:31 -> 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:31 -> 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:31 -> 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:31 -> 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: 32, effectively constant: 15
+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
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 0b3ac45..3d86e63 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
@@ -17,52 +17,52 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     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 = #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 = #C6;
-static const field () → self::A<core::int> f1g = #C8;
-static const field () → self::A<core::int> f1h = #C8;
-static const field () → self::A<core::int> f1i = #C9;
+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 = #C3;
+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 = #C3;
+static const field () → self::A<core::int> h1c = #C2;
 static method main() → dynamic {
   self::test<core::int>();
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
-  core::identical(#C5, #C5);
-  core::identical(#C5, #C6);
-  core::identical(#C8, #C8);
-  core::identical(#C8, #C9);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C4, #C4);
+  core::identical(#C4, #C4);
+  core::identical(#C6, #C6);
+  core::identical(#C6, #C6);
   core::identical(#C2, #C2);
-  core::identical(#C2, #C3);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
 }
 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 = #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 = #C7<self::test::T>;
-  () → self::A<self::test::T> f2h = #C7<self::test::T>;
-  () → self::A<self::test::T> f2i = #C7<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 = #C3;
+  () → 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>;
@@ -98,24 +98,21 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = instantiation self::A::_#new#tearOff <core::int>
-  #C4 = static-tearoff self::A::_#fact#tearOff
-  #C5 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C6 = instantiation self::A::_#fact#tearOff <core::int>
-  #C7 = static-tearoff self::A::_#redirect#tearOff
-  #C8 = instantiation self::A::_#redirect#tearOff <core::int*>
-  #C9 = instantiation self::A::_#redirect#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*>
 }
 
 Extra constant evaluation status:
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:38:3 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:39:3 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:39:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:41:3 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:42:3 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:42:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:44:3 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:45:3 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:45:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:47:3 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(false)
+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(false)
-Extra constant evaluation: evaluated: 61, effectively constant: 10
+Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 59, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline.expect
index 12bef00..c125e6f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline.expect
@@ -2,17 +2,20 @@
 var B_new = B.new;
 var F_new = F.new;
 var G_new = G.new;
+
 class A {
   int field1 = 0;
   A(this.field1);
   A.named(this.field1);
 }
+
 class B<T> implements A {
   var field1;
   T field2;
   B(this.field1, this.field2);
   B.named(this.field1, this.field2);
 }
+
 typedef F<T> = A;
 typedef G<T extends num> = B;
 var A_named = A.named;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b23c6e8
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+class A {
+  A(this.field1);
+  A.named(this.field1);
+  int field1 = 0;
+}
+
+class B<T> implements A {
+  B(this.field1, this.field2);
+  B.named(this.field1, this.field2);
+  T field2;
+  var field1;
+}
+
+main() {}
+typedef F<T> = A;
+typedef G<T extends num> = B;
+var A_named = A.named;
+var A_new = A.new;
+var B_named = B<int>.named;
+var B_new = B.new;
+var F_named = F.named;
+var F_new = F.new;
+var G_named = G<int>.named;
+var G_new = G.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart
new file mode 100644
index 0000000..6b12c8a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for 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 Link<T> {
+  factory Link.create1() = LinkFactory<T>.create;
+  factory Link.create2() = LinkFactory<T, T>.create;
+  factory Link.create3(int i) = LinkFactory.create;
+  factory Link.create4({int i}) = LinkFactory.create;
+}
+
+class LinkFactory {
+  factory Link.create() {
+    return null;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.expect
new file mode 100644
index 0000000..165ec42
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:11:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory Link.create() {
+//           ^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:10:7: Context: The name of the enclosing class is 'LinkFactory'.
+// class LinkFactory {
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+//   factory Link.create2() = LinkFactory<T, T>.create;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+//  - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+//     return null;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Link<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Link::create, self::Link::create2]/*isLegacy*/;
+  static factory create<T extends core::Object? = dynamic>() → self::Link<self::Link::create::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+  factory Link.create() = LinkFactory<T>.create;
+                          ^";
+  static method _#create#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create#tearOff::T%>
+    return self::LinkFactory::create();
+  static factory create2<T extends core::Object? = dynamic>() → self::Link<self::Link::create2::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+  factory Link.create2() = LinkFactory<T, T>.create;
+                           ^";
+  static method _#create2#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create2#tearOff::T%>
+    return self::LinkFactory::create();
+}
+class LinkFactory extends core::Object {
+  static factory create() → self::LinkFactory {
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+ - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+    return null;
+           ^" in null as{TypeError,ForNonNullableByDefault} self::LinkFactory;
+  }
+  static method _#create#tearOff() → self::LinkFactory
+    return self::LinkFactory::create();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.transformed.expect
new file mode 100644
index 0000000..b814114
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.strong.transformed.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:11: Error: 'Link.create' is already declared in this scope.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//           ^^^^^^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:11: Context: Previous declaration of 'Link.create'.
+//   factory Link.create() = LinkFactory<T>.create;
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:11:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory Link.create() {
+//           ^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:10:7: Context: The name of the enclosing class is 'LinkFactory'.
+// class LinkFactory {
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:42: Error: Type 'S' not found.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//                                          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+//  - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+//     return null;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Link<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Link::create]/*isLegacy*/;
+  static factory create<T extends core::Object? = dynamic>() → self::Link<self::Link::create::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+  factory Link.create() = LinkFactory<T>.create;
+                          ^";
+  static method _#create#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create#tearOff::T%>;
+}
+class LinkFactory extends core::Object {
+  static factory create() → self::LinkFactory {
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+ - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+    return null;
+           ^" in let Null #t1 = null in #t1 == null ?{self::LinkFactory} #t1 as{TypeError,ForNonNullableByDefault} self::LinkFactory : #t1{self::LinkFactory};
+  }
+  static method _#create#tearOff() → self::LinkFactory
+    return self::LinkFactory::create();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline.expect
new file mode 100644
index 0000000..fcd783b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+abstract class Link<T> {
+  factory Link.create1() = LinkFactory<T>.create;
+  factory Link.create2() = LinkFactory<T, T>.create;
+  factory Link.create3(int i) = LinkFactory.create;
+  factory Link.create4({int i}) = LinkFactory.create;
+}
+
+class LinkFactory {
+  factory Link.create() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fcd783b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+abstract class Link<T> {
+  factory Link.create1() = LinkFactory<T>.create;
+  factory Link.create2() = LinkFactory<T, T>.create;
+  factory Link.create3(int i) = LinkFactory.create;
+  factory Link.create4({int i}) = LinkFactory.create;
+}
+
+class LinkFactory {
+  factory Link.create() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.expect
new file mode 100644
index 0000000..165ec42
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:11:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory Link.create() {
+//           ^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:10:7: Context: The name of the enclosing class is 'LinkFactory'.
+// class LinkFactory {
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+//   factory Link.create2() = LinkFactory<T, T>.create;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+//  - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+//     return null;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Link<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Link::create, self::Link::create2]/*isLegacy*/;
+  static factory create<T extends core::Object? = dynamic>() → self::Link<self::Link::create::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+  factory Link.create() = LinkFactory<T>.create;
+                          ^";
+  static method _#create#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create#tearOff::T%>
+    return self::LinkFactory::create();
+  static factory create2<T extends core::Object? = dynamic>() → self::Link<self::Link::create2::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+  factory Link.create2() = LinkFactory<T, T>.create;
+                           ^";
+  static method _#create2#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create2#tearOff::T%>
+    return self::LinkFactory::create();
+}
+class LinkFactory extends core::Object {
+  static factory create() → self::LinkFactory {
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+ - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+    return null;
+           ^" in null as{TypeError,ForNonNullableByDefault} self::LinkFactory;
+  }
+  static method _#create#tearOff() → self::LinkFactory
+    return self::LinkFactory::create();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect
new file mode 100644
index 0000000..3de7ee2
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:11:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory Link.create() {
+//           ^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:10:7: Context: The name of the enclosing class is 'LinkFactory'.
+// class LinkFactory {
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+//   factory Link.create2() = LinkFactory<T, T>.create;
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Link<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Link::create, self::Link::create2]/*isLegacy*/;
+  static factory create<T extends core::Object? = dynamic>() → self::Link<self::Link::create::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+  factory Link.create() = LinkFactory<T>.create;
+                          ^";
+  static method _#create#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create#tearOff::T%>
+    return self::LinkFactory::create();
+  static factory create2<T extends core::Object? = dynamic>() → self::Link<self::Link::create2::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:28: Error: Expected 0 type arguments.
+  factory Link.create2() = LinkFactory<T, T>.create;
+                           ^";
+  static method _#create2#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create2#tearOff::T%>
+    return self::LinkFactory::create();
+}
+class LinkFactory extends core::Object {
+  static factory create() → self::LinkFactory
+    ;
+  static method _#create#tearOff() → self::LinkFactory
+    return self::LinkFactory::create();
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.transformed.expect
new file mode 100644
index 0000000..e14fbed
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.transformed.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:11: Error: 'Link.create' is already declared in this scope.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//           ^^^^^^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:11: Context: Previous declaration of 'Link.create'.
+//   factory Link.create() = LinkFactory<T>.create;
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:11:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory Link.create() {
+//           ^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:10:7: Context: The name of the enclosing class is 'LinkFactory'.
+// class LinkFactory {
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:42: Error: Type 'S' not found.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//                                          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:7:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T, S>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+//   factory Link.create() = LinkFactory<T>.create;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+//  - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+//     return null;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Link<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Link::create]/*isLegacy*/;
+  static factory create<T extends core::Object? = dynamic>() → self::Link<self::Link::create::T%>
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:6:27: Error: Expected 0 type arguments.
+  factory Link.create() = LinkFactory<T>.create;
+                          ^";
+  static method _#create#tearOff<T extends core::Object? = dynamic>() → self::Link<self::Link::_#create#tearOff::T%>;
+}
+class LinkFactory extends core::Object {
+  static factory create() → self::LinkFactory {
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:12:12: Error: The value 'null' can't be returned from a function with return type 'LinkFactory' because 'LinkFactory' is not nullable.
+ - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'.
+    return null;
+           ^" in null;
+  }
+  static method _#create#tearOff() → self::LinkFactory
+    return self::LinkFactory::create();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart
new file mode 100644
index 0000000..9c53ca0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.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.
+
+class A<T> {
+  A();
+  A.named();
+  factory A.fact() => new A();
+  factory A.redirect() = A;
+}
+
+typedef B<T extends num> = A<T>;
+
+test() {
+  A.new<int>;
+  A.named<int>;
+  A.fact<int>;
+  A.redirect<int>;
+  B.new<int>;
+  B.named<int>;
+  B.fact<int>;
+  B.redirect<int>;
+}
+
+main() {}
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
new file mode 100644
index 0000000..1970258
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+//   B.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+//   B.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+//   B.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+//   B.redirect<int>;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+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*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+            ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+  B.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+  B.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+  B.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+  B.redirect<int>;
+            ^";
+}
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  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>();
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
new file mode 100644
index 0000000..1970258
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+//   B.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+//   B.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+//   B.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+//   B.redirect<int>;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+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*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+            ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+  B.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+  B.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+  B.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+  B.redirect<int>;
+            ^";
+}
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  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>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline.expect
new file mode 100644
index 0000000..a06e869
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A<T> {
+  A();
+  A.named();
+  factory A.fact() => new A();
+  factory A.redirect() = A;
+}
+
+typedef B<T extends num> = A<T>;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fe289bf
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A<T> {
+  A();
+  A.named();
+  factory A.fact() => new A();
+  factory A.redirect() = A;
+}
+
+main() {}
+test() {}
+typedef B<T extends num> = A<T>;
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
new file mode 100644
index 0000000..1970258
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+//   B.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+//   B.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+//   B.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+//   B.redirect<int>;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+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*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+            ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+  B.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+  B.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+  B.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+  B.redirect<int>;
+            ^";
+}
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  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>();
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
new file mode 100644
index 0000000..ae23513
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+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*/;
+  constructor •() → self::A<self::A::T%>
+    ;
+  constructor named() → self::A<self::A::T%>
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    ;
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  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>();
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
new file mode 100644
index 0000000..1970258
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+//   B.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+//   B.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+//   B.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+//   B.redirect<int>;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+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*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: 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.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16: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>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: 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.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: 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.redirect<int>;
+            ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: 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.
+  B.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20: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.
+  B.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: 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.
+  B.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: 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.
+  B.redirect<int>;
+            ^";
+}
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  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>();
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 d55e231..cd54bc8 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
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
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 fe5e039..cd54bc8 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
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let core::String* #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let core::String* #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
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 d55e231..cd54bc8 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
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
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 7a6886a..173ec34 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
@@ -23,10 +23,14 @@
   static method constructor() → self::Class
     ;
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic
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 fe5e039..cd54bc8 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
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let core::String* #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let core::String* #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart
new file mode 100644
index 0000000..a9b94ff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.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 "dart:async";
+
+typedef S1<T> = dynamic;
+typedef S2<T> = Null;
+typedef S3<T> = void;
+typedef S4<T> = FutureOr;
+typedef S5<T> = FutureOr<T>;
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.expect
new file mode 100644
index 0000000..715328b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.transformed.expect
new file mode 100644
index 0000000..715328b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.strong.transformed.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline.expect
new file mode 100644
index 0000000..2114f5f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+import "dart:async";
+
+typedef S1<T> = dynamic;
+typedef S2<T> = Null;
+typedef S3<T> = void;
+typedef S4<T> = FutureOr;
+typedef S5<T> = FutureOr<T>;
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..392a9cf
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+import "dart:async";
+
+main() {}
+typedef S1<T> = dynamic;
+typedef S2<T> = Null;
+typedef S3<T> = void;
+typedef S4<T> = FutureOr;
+typedef S5<T> = FutureOr<T>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.expect
new file mode 100644
index 0000000..715328b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.outline.expect
new file mode 100644
index 0000000..ddea941
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.outline.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.transformed.expect
new file mode 100644
index 0000000..715328b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.transformed.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart
index 765da64..bb04095 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart
@@ -85,10 +85,12 @@
 
 class Class8a<T> implements Class8b<T> {
   Class8a();
+  factory Class8a.fact() => new Class8a();
 }
 
 class Class8b<T> {
   factory Class8b() = Class8a<T>;
+  factory Class8b.fact() = Class8a<T>.fact;
 }
 
 testArgs() {
@@ -174,6 +176,15 @@
   expect(true, c8b is Class8a<int>);
   expect(true, c8b is Class8b<int>);
   expect(false, c8b is Class8b<String>);
+
+  var f8b = Class8b.fact;
+  var c8c = f8b();
+  expect(true, c8c is Class8a);
+  expect(true, c8c is Class8b);
+  var c8d = f8b<int>();
+  expect(true, c8d is Class8a<int>);
+  expect(true, c8d is Class8b<int>);
+  expect(false, c8d is Class8b<String>);
 }
 
 expect(expected, actual) {
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 a115126..c74b167 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
@@ -2,43 +2,43 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f3a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f3a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f4a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f5a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 // Try removing the extra positional arguments.
 //     f5a(42, 87, 123); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
 //     f6a(42); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f6a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(field1: 87, field2: 87); // error
 //        ^
 //
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → 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
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    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
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -148,13 +148,21 @@
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    return new self::Class8a::•<self::Class8a::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    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::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -183,10 +191,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -202,7 +210,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -217,10 +225,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -234,17 +242,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
@@ -273,12 +281,20 @@
   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;
+  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>);
+  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<core::String>);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   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 = #C11}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -302,5 +318,6 @@
   #C7 = static-tearoff self::Class6::_#new#tearOff
   #C8 = static-tearoff self::Class7b::_#new#tearOff
   #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = false
+  #C10 = static-tearoff self::Class8b::_#fact#tearOff
+  #C11 = 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 02a4614..46d6ccc 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
@@ -2,43 +2,43 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f3a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f3a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f4a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f5a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 // Try removing the extra positional arguments.
 //     f5a(42, 87, 123); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
 //     f6a(42); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f6a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(field1: 87, field2: 87); // error
 //        ^
 //
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → 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
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    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
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -148,13 +148,21 @@
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    return new self::Class8a::•<self::Class8a::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    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::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -183,10 +191,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -202,7 +210,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -217,10 +225,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -234,17 +242,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
@@ -273,12 +281,20 @@
   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;
+  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>);
+  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<core::String>);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   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 = #C11}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -302,5 +318,6 @@
   #C7 = static-tearoff self::Class6::_#new#tearOff
   #C8 = static-tearoff self::Class7b::_#new#tearOff
   #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = false
+  #C10 = static-tearoff self::Class8b::_#fact#tearOff
+  #C11 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline.expect
index 2fa25d6..7cf5cb1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline.expect
@@ -51,10 +51,12 @@
 
 class Class8a<T> implements Class8b<T> {
   Class8a();
+  factory Class8a.fact() => new Class8a();
 }
 
 class Class8b<T> {
   factory Class8b() = Class8a<T>;
+  factory Class8b.fact() = Class8a<T>.fact;
 }
 
 testArgs() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline_modelled.expect
index 0500e74..e522b6c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.textual_outline_modelled.expect
@@ -46,10 +46,12 @@
 
 class Class8a<T> implements Class8b<T> {
   Class8a();
+  factory Class8a.fact() => new Class8a();
 }
 
 class Class8b<T> {
   factory Class8b() = Class8a<T>;
+  factory Class8b.fact() = Class8a<T>.fact;
 }
 
 expect(expected, actual) {}
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 a115126..c74b167 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
@@ -2,43 +2,43 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f3a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f3a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f4a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f5a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 // Try removing the extra positional arguments.
 //     f5a(42, 87, 123); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
 //     f6a(42); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f6a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(field1: 87, field2: 87); // error
 //        ^
 //
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → 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
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    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
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -148,13 +148,21 @@
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    return new self::Class8a::•<self::Class8a::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    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::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -183,10 +191,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -202,7 +210,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -217,10 +225,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -234,17 +242,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
@@ -273,12 +281,20 @@
   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;
+  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>);
+  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<core::String>);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   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 = #C11}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -302,5 +318,6 @@
   #C7 = static-tearoff self::Class6::_#new#tearOff
   #C8 = static-tearoff self::Class7b::_#new#tearOff
   #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = false
+  #C10 = static-tearoff self::Class8b::_#fact#tearOff
+  #C11 = 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 0067daa..a5fb580 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
@@ -9,7 +9,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -24,7 +24,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -36,7 +36,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -48,7 +48,7 @@
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -61,7 +61,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -75,7 +75,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -88,7 +88,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -97,13 +97,21 @@
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    ;
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    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::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
 }
 static final field core::bool inSoundMode;
 static method main() → dynamic
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 02a4614..46d6ccc 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
@@ -2,43 +2,43 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f3a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f3a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f4a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f5a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 // Try removing the extra positional arguments.
 //     f5a(42, 87, 123); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
 //     f6a(42); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //     f6a(42, 87); // error
 //        ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
 //     f6a(field1: 87, field2: 87); // error
 //        ^
 //
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → 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
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    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
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -148,13 +148,21 @@
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    return new self::Class8a::•<self::Class8a::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    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::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -183,10 +191,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -202,7 +210,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -217,10 +225,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -234,17 +242,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
@@ -273,12 +281,20 @@
   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;
+  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>);
+  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<core::String>);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   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 = #C11}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -302,5 +318,6 @@
   #C7 = static-tearoff self::Class6::_#new#tearOff
   #C8 = static-tearoff self::Class7b::_#new#tearOff
   #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = false
+  #C10 = static-tearoff self::Class8b::_#fact#tearOff
+  #C11 = 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 873e7a9..c7984a5 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
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
@@ -53,7 +53,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -70,7 +70,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
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 fe92fac..9f46561 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
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let Never #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
@@ -53,7 +53,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -70,7 +70,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
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 873e7a9..c7984a5 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
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
@@ -53,7 +53,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -70,7 +70,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
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 e6fbbd5..1cd9ef2 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
@@ -10,7 +10,7 @@
   static method _#_#tearOff([core::int field]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -22,7 +22,7 @@
   static method _#_#tearOff({core::int field}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field}) → self::Class2
     return new self::Class2::_(field: field);
 }
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 fe92fac..9f46561 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
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let Never #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
@@ -53,7 +53,7 @@
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
   self::expect(87, c1b.{self::Class1::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
@@ -70,7 +70,7 @@
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
   self::expect(87, c2b.{self::Class2::field}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
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 6d9d205..c019108 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
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    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
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
@@ -111,7 +111,7 @@
   self::expect(42, c1e.{self::Class1::field1}{core::int});
   self::expect(2, c1e.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
@@ -121,11 +121,11 @@
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1c(42); // error
        ^" in f1c{<inapplicable>}.(42);
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
@@ -170,7 +170,7 @@
   self::expect(42, c4b.{self::Class1::field1}{core::int});
   self::expect(2, c4b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -182,7 +182,7 @@
   self::expect(1, c5b.{self::Class1::field1}{core::int});
   self::expect(87, c5b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -191,13 +191,13 @@
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
     f2e(field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field2: 87);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42, field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42, field2: 87);
   };
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 ae52285..ffa443b 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
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    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
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
@@ -111,7 +111,7 @@
   self::expect(42, c1e.{self::Class1::field1}{core::int});
   self::expect(2, c1e.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
@@ -121,11 +121,11 @@
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1c(42); // error
        ^" in f1c{<inapplicable>}.(42);
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
@@ -170,7 +170,7 @@
   self::expect(42, c4b.{self::Class1::field1}{core::int});
   self::expect(2, c4b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -182,7 +182,7 @@
   self::expect(1, c5b.{self::Class1::field1}{core::int});
   self::expect(87, c5b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -191,13 +191,13 @@
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
     f2e(field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field2: 87);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42, field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42, field2: 87);
   };
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 6d9d205..c019108 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
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    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
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
@@ -111,7 +111,7 @@
   self::expect(42, c1e.{self::Class1::field1}{core::int});
   self::expect(2, c1e.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
@@ -121,11 +121,11 @@
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1c(42); // error
        ^" in f1c{<inapplicable>}.(42);
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
@@ -170,7 +170,7 @@
   self::expect(42, c4b.{self::Class1::field1}{core::int});
   self::expect(2, c4b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -182,7 +182,7 @@
   self::expect(1, c5b.{self::Class1::field1}{core::int});
   self::expect(87, c5b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -191,13 +191,13 @@
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
     f2e(field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field2: 87);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42, field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42, field2: 87);
   };
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 9ef35eb..c33110b 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
@@ -13,37 +13,37 @@
   static method _#positional#tearOff([core::int field1, core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1, core::int field2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1, core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1, core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1, core::int field2}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1, core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2, core::int field1}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2, core::int field1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
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 ae52285..ffa443b 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
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    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
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
@@ -111,7 +111,7 @@
   self::expect(42, c1e.{self::Class1::field1}{core::int});
   self::expect(2, c1e.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
@@ -121,11 +121,11 @@
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1c(42); // error
        ^" in f1c{<inapplicable>}.(42);
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
@@ -170,7 +170,7 @@
   self::expect(42, c4b.{self::Class1::field1}{core::int});
   self::expect(2, c4b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -182,7 +182,7 @@
   self::expect(1, c5b.{self::Class1::field1}{core::int});
   self::expect(87, c5b.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
@@ -191,13 +191,13 @@
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
     f2e(field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field2: 87);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
     f2e(field1: 42, field2: 87); // error
         ^^^^^^" in f2e{<inapplicable>}.(field1: 42, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart
new file mode 100644
index 0000000..6dd9ff1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.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 'typedef_from_lib.dart';
+
+part 'typedef_from_part.dart';
+
+main() {
+  var aNew = A.new;
+  var aNamed = A.named;
+  var aFact = A.fact;
+  var aRedirect = A.redirect;
+
+  aNew('', '');
+  aNew(0, '');
+  aNamed('');
+  aNamed(0, '');
+  aNamed('', '', 87);
+  aFact(0);
+  aFact('', b: '');
+  aFact(0, c: 87);
+  aFact('', c: 87, b: '');
+  aRedirect('');
+  aRedirect(0);
+
+  var aNewInst = aNew<bool>;
+  var aNamedInst = aNamed<bool>;
+  var aFactInst = aFact<bool>;
+  var aRedirectInst = aRedirect<bool>;
+
+  aNewInst(true, '');
+  aNamedInst(false);
+  aNamedInst(true, '');
+  aNamedInst(false, '', 87);
+  aFactInst(true);
+  aFactInst(false, b: '');
+  aFactInst(true, c: 87);
+  aFactInst(false, c: 87, b: '');
+  aRedirectInst(true);
+  
+  var bNew = B.new;
+  var bNamed = B.named;
+  var bFact = B.fact;
+  var bRedirect = B.redirect;
+
+  bNew('', 0);
+  bNew(0, 0);
+  bNamed('');
+  bNamed(0, 0);
+  bNamed('', 0, 87);
+  bFact(0);
+  bFact('', b: 0);
+  bFact(0, c: 87);
+  bFact('', c: 87, b: 0);
+  bRedirect('');
+  bRedirect(0);
+
+  var bNewInst = bNew<bool>;
+  var bNamedInst = bNamed<bool>;
+  var bFactInst = bFact<bool>;
+  var bRedirectInst = bRedirect<bool>;
+
+  bNewInst(true, 0);
+  bNamedInst(false);
+  bNamedInst(true, 0);
+  bNamedInst(false, 0, 87);
+  bFactInst(true);
+  bFactInst(false, b: 0);
+  bFactInst(true, c: 87);
+  bFactInst(false, c: 87, b: 0);
+  bRedirectInst(true);
+}
+
+class Class<S, T> {
+  Class(S a, T b);
+  Class.named(S a, [T? b, int c = 42]);
+  factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+  factory Class.redirect(S a) = Class.named;
+}
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
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+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*/;
+  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%>
+    : 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%>
+    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%>
+    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%>
+    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);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    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;
+  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>};
+  aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+  aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+  aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+  (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+  (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+  (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+  aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+  aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  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;
+  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>};
+  bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+  bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+  bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+  (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+  (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+  (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+  bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+  bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+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>
+  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>
+  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);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+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>
+  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>
+  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
+}
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
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+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*/;
+  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%>
+    : 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%>
+    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%>
+    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%>
+    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);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    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;
+  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>};
+  aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+  aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+  aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+  (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+  (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+  (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+  aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+  aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  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;
+  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>};
+  bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+  bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+  bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+  (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+  (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+  (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+  bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+  bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+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>
+  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>
+  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);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+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>
+  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>
+  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
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect
new file mode 100644
index 0000000..d0244db
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+import 'typedef_from_lib.dart';
+part 'typedef_from_part.dart';
+
+main() {}
+
+class Class<S, T> {
+  Class(S a, T b);
+  Class.named(S a, [T? b, int c = 42]);
+  factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+  factory Class.redirect(S a) = Class.named;
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..704e8ee
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+import 'typedef_from_lib.dart';
+part 'typedef_from_part.dart';
+
+class Class<S, T> {
+  Class(S a, T b);
+  Class.named(S a, [T? b, int c = 42]);
+  factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+  factory Class.redirect(S a) = Class.named;
+}
+
+main() {}
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
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+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*/;
+  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%>
+    : 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%>
+    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%>
+    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%>
+    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);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    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;
+  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>};
+  aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+  aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+  aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+  (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+  (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+  (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+  aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+  aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  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;
+  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>};
+  bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+  bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+  bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+  (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+  (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+  (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+  bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+  bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+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>
+  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>
+  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);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+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>
+  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>
+  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
+}
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
new file mode 100644
index 0000000..d0d9059
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+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*/;
+  constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+    ;
+  constructor named(self::Class::S% a, [self::Class::T? b, core::int c]) → self::Class<self::Class::S%, self::Class::T%>
+    ;
+  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, core::int c]) → 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, core::int c}) → self::Class<self::Class::fact::S%, self::Class::fact::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, core::int c}) → 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);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic
+  ;
+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, core::int c]) → 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, core::int c}) → 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);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+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, core::int c]) → 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, core::int c}) → 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);
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
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+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*/;
+  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%>
+    : 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%>
+    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%>
+    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%>
+    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);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    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;
+  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>};
+  aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+  aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+  aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+  (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+  (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+  (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+  aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+  aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  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;
+  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>};
+  bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+  bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+  bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+  (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+  (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+  (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+  bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+  bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+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>
+  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>
+  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);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+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>
+  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>
+  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
+}
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 2dc1f69..90eb13b 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
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 a5b6962..90eb13b 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let Never #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline.expect
index 4d2dfc1..a676ddd 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline.expect
@@ -1,4 +1,5 @@
 import 'main_lib.dart';
+
 typedef H<X, Y> = A<Y>;
 dynamic H_new = H.new;
 dynamic H_named = H.named;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ea3a97b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+import 'main_lib.dart';
+
+dynamic F_fact = F.fact;
+dynamic F_named = F.named;
+dynamic F_new = F.new;
+dynamic F_redirect = F.redirect;
+dynamic H_fact = H.fact;
+dynamic H_named = H.named;
+dynamic H_new = H.new;
+dynamic H_redirect = H.redirect;
+expect(expected, actual) {}
+main() {}
+typedef H<X, Y> = A<Y>;
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 2dc1f69..90eb13b 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
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 f1af048..0e4f276 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
@@ -18,13 +18,13 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 library /*isNonNullableByDefault*/;
@@ -48,7 +48,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
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 a5b6962..90eb13b 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let Never #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart
new file mode 100644
index 0000000..ff58b28
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart
@@ -0,0 +1,7 @@
+// 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 'typedef_from.dart';
+
+typedef A<T> = Class<T, String>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart
new file mode 100644
index 0000000..5710fab
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart
@@ -0,0 +1,7 @@
+// 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.
+
+part of 'typedef_from.dart';
+
+typedef B<S> = Class<S, int>;
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 3e82a43..81462df 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
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 f7eae91..81462df 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let Never #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline.expect
index 8ca6604..10356c5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline.expect
@@ -1,4 +1,5 @@
 import 'typedef_identical_lib.dart';
+
 typedef H<X, Y> = A<Y>;
 var H_new = H.new;
 var H_named = H.named;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a3e22a5
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+import 'typedef_identical_lib.dart';
+
+expect(expected, actual) {}
+main() {}
+typedef H<X, Y> = A<Y>;
+var F_fact = F.fact;
+var F_named = F.named;
+var F_new = F.new;
+var F_redirect = F.redirect;
+var H_fact = H.fact;
+var H_named = H.named;
+var H_new = H.new;
+var H_redirect = H.redirect;
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 3e82a43..81462df 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
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 feafdc3..b6ebfa4 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
@@ -18,13 +18,13 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 
 library /*isNonNullableByDefault*/;
@@ -48,7 +48,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
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 f7eae91..81462df 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
@@ -68,13 +68,13 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 
 library /*isNonNullableByDefault*/;
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let Never #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
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 848dbdd..2e24a01 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
@@ -124,7 +124,7 @@
   self::A c1a = f1a(){() → self::A};
   self::expect(true, c1a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1a(0); // error
        ^" in f1a{<inapplicable>}.(0);
@@ -137,7 +137,7 @@
   self::A c2a = f2a<core::num>(){() → self::A};
   self::expect(true, c2a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(0); // error
        ^" in f2a{<inapplicable>}.<core::num>(0);
@@ -157,11 +157,11 @@
   self::expect(0, c3a.{self::B::field1}{core::int});
   self::expect("", c3a.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f3a(0); // error
        ^" in f3a{<inapplicable>}.(0);
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
     f3a<String>(); // error
        ^" in f3a{<inapplicable>}.<core::String>();
   };
@@ -180,14 +180,14 @@
   self::expect(42, c3c.{self::B::field1}{core::int});
   self::expect("", c3c.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
     f3c(); // error
        ^" in f3c{<inapplicable>}.();
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3c(0, 0); // error
        ^" in f3c{<inapplicable>}.(0, 0);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
     f3c<String>(0); // error
        ^" in f3c{<inapplicable>}.<core::String>(0);
   };
@@ -207,13 +207,13 @@
   self::expect(42, c3e.{self::B::field1}{core::int});
   self::expect("foo", c3e.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
     f3e(); // error
        ^" in f3e{<inapplicable>}.();
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
     f3e(0); // error
        ^" in f3e{<inapplicable>}.(0);
-    let final Never #t10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
     f3e<String>(0, ''); // error
        ^" in f3e{<inapplicable>}.<core::String>(0, "");
   };
@@ -234,7 +234,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f4a(0); // error
        ^" in f4a{<inapplicable>}.<core::num>(0);
@@ -257,11 +257,11 @@
   self::expect(true, c5b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c5b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f5a(0); // error
        ^" in f5a{<inapplicable>}.<core::num, core::String>(0);
-    let final Never #t13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
     f5a<String>(); // error
        ^" in f5a{<inapplicable>}.<core::String>();
     f5a<core::String, core::String>(){() → self::B<core::String>};
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 7c8571b..64496be 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
@@ -124,7 +124,7 @@
   self::A c1a = f1a(){() → self::A};
   self::expect(true, c1a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1a(0); // error
        ^" in f1a{<inapplicable>}.(0);
@@ -137,7 +137,7 @@
   self::A c2a = f2a<core::num>(){() → self::A};
   self::expect(true, c2a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(0); // error
        ^" in f2a{<inapplicable>}.<core::num>(0);
@@ -157,11 +157,11 @@
   self::expect(0, c3a.{self::B::field1}{core::int});
   self::expect("", c3a.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f3a(0); // error
        ^" in f3a{<inapplicable>}.(0);
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
     f3a<String>(); // error
        ^" in f3a{<inapplicable>}.<core::String>();
   };
@@ -180,14 +180,14 @@
   self::expect(42, c3c.{self::B::field1}{core::int});
   self::expect("", c3c.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
     f3c(); // error
        ^" in f3c{<inapplicable>}.();
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3c(0, 0); // error
        ^" in f3c{<inapplicable>}.(0, 0);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
     f3c<String>(0); // error
        ^" in f3c{<inapplicable>}.<core::String>(0);
   };
@@ -207,13 +207,13 @@
   self::expect(42, c3e.{self::B::field1}{core::int});
   self::expect("foo", c3e.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
     f3e(); // error
        ^" in f3e{<inapplicable>}.();
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
     f3e(0); // error
        ^" in f3e{<inapplicable>}.(0);
-    let final Never #t10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
     f3e<String>(0, ''); // error
        ^" in f3e{<inapplicable>}.<core::String>(0, "");
   };
@@ -234,7 +234,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f4a(0); // error
        ^" in f4a{<inapplicable>}.<core::num>(0);
@@ -257,11 +257,11 @@
   self::expect(true, c5b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c5b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f5a(0); // error
        ^" in f5a{<inapplicable>}.<core::num, core::String>(0);
-    let final Never #t13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
     f5a<String>(); // error
        ^" in f5a{<inapplicable>}.<core::String>();
     f5a<core::String, core::String>(){() → self::B<core::String>};
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 f4e5e89..b0722a9 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
@@ -124,7 +124,7 @@
   self::A c1a = f1a(){() → self::A};
   self::expect(true, c1a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1a(0); // error
        ^" in f1a{<inapplicable>}.(0);
@@ -137,7 +137,7 @@
   self::A c2a = f2a<core::num>(){() → self::A};
   self::expect(true, c2a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(0); // error
        ^" in f2a{<inapplicable>}.<core::num>(0);
@@ -157,11 +157,11 @@
   self::expect(0, c3a.{self::B::field1}{core::int});
   self::expect("", c3a.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f3a(0); // error
        ^" in f3a{<inapplicable>}.(0);
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
     f3a<String>(); // error
        ^" in f3a{<inapplicable>}.<core::String>();
   };
@@ -180,14 +180,14 @@
   self::expect(42, c3c.{self::B::field1}{core::int});
   self::expect("", c3c.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
     f3c(); // error
        ^" in f3c{<inapplicable>}.();
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3c(0, 0); // error
        ^" in f3c{<inapplicable>}.(0, 0);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
     f3c<String>(0); // error
        ^" in f3c{<inapplicable>}.<core::String>(0);
   };
@@ -207,13 +207,13 @@
   self::expect(42, c3e.{self::B::field1}{core::int});
   self::expect("foo", c3e.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
     f3e(); // error
        ^" in f3e{<inapplicable>}.();
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
     f3e(0); // error
        ^" in f3e{<inapplicable>}.(0);
-    let final Never #t10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
     f3e<String>(0, ''); // error
        ^" in f3e{<inapplicable>}.<core::String>(0, "");
   };
@@ -234,7 +234,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f4a(0); // error
        ^" in f4a{<inapplicable>}.<core::num>(0);
@@ -257,11 +257,11 @@
   self::expect(true, c5b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c5b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f5a(0); // error
        ^" in f5a{<inapplicable>}.<core::num, core::String>(0);
-    let final Never #t13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
     f5a<String>(); // error
        ^" in f5a{<inapplicable>}.<core::String>();
     f5a<core::String, core::String>(){() → self::B<core::String>};
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 12bd083..3242407 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
@@ -124,7 +124,7 @@
   self::A c1a = f1a(){() → self::A};
   self::expect(true, c1a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f1a(0); // error
        ^" in f1a{<inapplicable>}.(0);
@@ -137,7 +137,7 @@
   self::A c2a = f2a<core::num>(){() → self::A};
   self::expect(true, c2a is{ForNonNullableByDefault} self::A);
   () → Null {
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f2a(0); // error
        ^" in f2a{<inapplicable>}.<core::num>(0);
@@ -157,11 +157,11 @@
   self::expect(0, c3a.{self::B::field1}{core::int});
   self::expect("", c3a.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f3a(0); // error
        ^" in f3a{<inapplicable>}.(0);
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
     f3a<String>(); // error
        ^" in f3a{<inapplicable>}.<core::String>();
   };
@@ -180,14 +180,14 @@
   self::expect(42, c3c.{self::B::field1}{core::int});
   self::expect("", c3c.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
     f3c(); // error
        ^" in f3c{<inapplicable>}.();
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3c(0, 0); // error
        ^" in f3c{<inapplicable>}.(0, 0);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
     f3c<String>(0); // error
        ^" in f3c{<inapplicable>}.<core::String>(0);
   };
@@ -207,13 +207,13 @@
   self::expect(42, c3e.{self::B::field1}{core::int});
   self::expect("foo", c3e.{self::B::field2}{core::String});
   () → Null {
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
     f3e(); // error
        ^" in f3e{<inapplicable>}.();
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
     f3e(0); // error
        ^" in f3e{<inapplicable>}.(0);
-    let final Never #t10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
     f3e<String>(0, ''); // error
        ^" in f3e{<inapplicable>}.<core::String>(0, "");
   };
@@ -234,7 +234,7 @@
   self::expect(true, c4b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c4b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f4a(0); // error
        ^" in f4a{<inapplicable>}.<core::num>(0);
@@ -257,11 +257,11 @@
   self::expect(true, c5b is{ForNonNullableByDefault} self::B<core::int>);
   self::expect(false, c5b is{ForNonNullableByDefault} self::B<core::double>);
   () → Null {
-    let final Never #t12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     f5a(0); // error
        ^" in f5a{<inapplicable>}.<core::num, core::String>(0);
-    let final Never #t13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
     f5a<String>(); // error
        ^" in f5a{<inapplicable>}.<core::String>();
     f5a<core::String, core::String>(){() → self::B<core::String>};
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 7292491..dfb83e1 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
@@ -33,21 +33,21 @@
 static method test1() → () → self::A
   return #C1;
 static method test2() → () → self::A
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function() test2() => A.foo2; // Error.
                         ^" in (#C2) as{TypeError,ForNonNullableByDefault} () → self::A;
 static method test3() → () → self::A
   return #C3;
 static method test4() → (core::int) → self::A
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test4() => A.new; // Error.
                            ^" in (#C3) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
 static method test5() → () → self::A
   return #C4;
 static method test6() → (core::int) → self::A
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test6() => A.bar1; // Error.
                            ^" in (#C4) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
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 7292491..dfb83e1 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
@@ -33,21 +33,21 @@
 static method test1() → () → self::A
   return #C1;
 static method test2() → () → self::A
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function() test2() => A.foo2; // Error.
                         ^" in (#C2) as{TypeError,ForNonNullableByDefault} () → self::A;
 static method test3() → () → self::A
   return #C3;
 static method test4() → (core::int) → self::A
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test4() => A.new; // Error.
                            ^" in (#C3) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
 static method test5() → () → self::A
   return #C4;
 static method test6() → (core::int) → self::A
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test6() => A.bar1; // Error.
                            ^" in (#C4) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline.expect
index 8667cb7..69dd551 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline.expect
@@ -4,6 +4,7 @@
   A() {}
   factory A.bar1() => new A();
 }
+
 A Function() test1() => A.foo1;
 A Function() test2() => A.foo2;
 A Function() test3() => A.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline_modelled.expect
index c7ab6c9..16a7e1c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.textual_outline_modelled.expect
@@ -1,9 +1,15 @@
-A Function() bar1() => A.foo1;
-A Function() bar2() => A.foo2;
+A Function() test1() => A.foo1;
+A Function() test2() => A.foo2;
+A Function() test3() => A.new;
+A Function() test5() => A.bar1;
+A Function(int) test4() => A.new;
+A Function(int) test6() => A.bar1;
 
 class A {
+  A() {}
   A.foo1() {}
   A.foo2(int x) {}
+  factory A.bar1() => new A();
 }
 
 main() {}
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 7292491..dfb83e1 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
@@ -33,21 +33,21 @@
 static method test1() → () → self::A
   return #C1;
 static method test2() → () → self::A
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function() test2() => A.foo2; // Error.
                         ^" in (#C2) as{TypeError,ForNonNullableByDefault} () → self::A;
 static method test3() → () → self::A
   return #C3;
 static method test4() → (core::int) → self::A
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test4() => A.new; // Error.
                            ^" in (#C3) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
 static method test5() → () → self::A
   return #C4;
 static method test6() → (core::int) → self::A
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test6() => A.bar1; // Error.
                            ^" in (#C4) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
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 7292491..dfb83e1 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
@@ -33,21 +33,21 @@
 static method test1() → () → self::A
   return #C1;
 static method test2() → () → self::A
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function() test2() => A.foo2; // Error.
                         ^" in (#C2) as{TypeError,ForNonNullableByDefault} () → self::A;
 static method test3() → () → self::A
   return #C3;
 static method test4() → (core::int) → self::A
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test4() => A.new; // Error.
                            ^" in (#C3) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
 static method test5() → () → self::A
   return #C4;
 static method test6() → (core::int) → self::A
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
 A Function(int) test6() => A.bar1; // Error.
                            ^" in (#C4) as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline.expect
index 7cdb5cd..17d1d98 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline.expect
@@ -3,6 +3,7 @@
   A() {}
   factory A.bar() => new A();
 }
+
 testFoo() => A.foo;
 testNew() => A.new;
 testBar() => A.bar;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline_modelled.expect
index 28ca878..b485543 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.textual_outline_modelled.expect
@@ -1,7 +1,13 @@
-bar() => A.foo;
-
 class A {
+  A() {}
   A.foo() {}
+  factory A.bar() => new A();
 }
 
 main() {}
+testBar() => A.bar;
+testBarExtraArgs() => A<int>.bar;
+testFoo() => A.foo;
+testFooExtraArgs() => A<int>.foo;
+testNew() => A.new;
+testNewExtraArgs() => A<int>.new;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart
new file mode 100644
index 0000000..d964c26
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart
@@ -0,0 +1,66 @@
+// 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 for expression that could be unresolved constructor invocations but
+// are actually valid instantiation expressions.
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+
+  static unresolvedConstructor() {}
+}
+
+UnresolvedClass<T>() {}
+
+extension Extension on Function {
+  unresolvedConstructor() {}
+}
+
+class unresolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+class resolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+main() {
+  UnresolvedClass();
+
+  UnresolvedClass.unresolvedConstructor();
+  UnresolvedClass/**/ .unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass();
+  unresolved_prefix. /**/ UnresolvedClass();
+
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  unresolved_prefix/**/ .UnresolvedClass.unresolvedConstructor();
+
+  UnresolvedClass<int>();
+  UnresolvedClass /**/ <int>();
+
+  UnresolvedClass<int>.unresolvedConstructor();
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass<int>();
+  unresolved_prefix/**/ .UnresolvedClass<int>();
+
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  unresolved_prefix/**/ .UnresolvedClass<int>.unresolvedConstructor();
+
+  ResolvedClass.unresolvedConstructor();
+  ResolvedClass/**/ .unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass();
+  resolved_prefix. /**/ UnresolvedClass();
+
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  resolved_prefix/**/ .UnresolvedClass.unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass<int>();
+  resolved_prefix. /**/ UnresolvedClass<int>();
+
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  resolved_prefix/**/ .UnresolvedClass<int>.unresolvedConstructor();
+}
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
new file mode 100644
index 0000000..ce55163
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+  static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+  self::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C1);
+  self::Extension|unresolvedConstructor(#C1);
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C2);
+  self::Extension|unresolvedConstructor(#C2);
+  self::UnresolvedClass<core::int>();
+  self::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C3);
+  self::Extension|unresolvedConstructor(#C3);
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C4);
+  self::Extension|unresolvedConstructor(#C4);
+  self::ResolvedClass::unresolvedConstructor();
+  self::ResolvedClass::unresolvedConstructor();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C5);
+  self::Extension|unresolvedConstructor(#C5);
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C6);
+  self::Extension|unresolvedConstructor(#C6);
+}
+
+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>
+  #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+  #C6 = instantiation self::resolved_prefix::UnresolvedClass <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
new file mode 100644
index 0000000..ce55163
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+  static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+  self::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C1);
+  self::Extension|unresolvedConstructor(#C1);
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C2);
+  self::Extension|unresolvedConstructor(#C2);
+  self::UnresolvedClass<core::int>();
+  self::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C3);
+  self::Extension|unresolvedConstructor(#C3);
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C4);
+  self::Extension|unresolvedConstructor(#C4);
+  self::ResolvedClass::unresolvedConstructor();
+  self::ResolvedClass::unresolvedConstructor();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C5);
+  self::Extension|unresolvedConstructor(#C5);
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C6);
+  self::Extension|unresolvedConstructor(#C6);
+}
+
+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>
+  #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..0b1fe2c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+class ResolvedClass<T> {
+  ResolvedClass.named();
+  static unresolvedConstructor() {}
+}
+
+UnresolvedClass<T>() {}
+
+extension Extension on Function {
+  unresolvedConstructor() {}
+}
+
+class unresolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+class resolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0810247
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+UnresolvedClass<T>() {}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+  static unresolvedConstructor() {}
+}
+
+class resolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+class unresolved_prefix {
+  static UnresolvedClass<T>() {}
+}
+
+extension Extension on Function {
+  unresolvedConstructor() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..07ba725
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+  static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+  self::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C1);
+  self::Extension|unresolvedConstructor(#C1);
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C2);
+  self::Extension|unresolvedConstructor(#C2);
+  self::UnresolvedClass<core::int>();
+  self::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C3);
+  self::Extension|unresolvedConstructor(#C3);
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C4);
+  self::Extension|unresolvedConstructor(#C4);
+  self::ResolvedClass::unresolvedConstructor();
+  self::ResolvedClass::unresolvedConstructor();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C5);
+  self::Extension|unresolvedConstructor(#C5);
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C6);
+  self::Extension|unresolvedConstructor(#C6);
+}
+
+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*>
+  #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..dc17d8d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    ;
+  static method unresolvedConstructor() → dynamic
+    ;
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+    ;
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+    ;
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+  ;
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic
+  ;
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..07ba725
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+  static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+  self::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C1);
+  self::Extension|unresolvedConstructor(#C1);
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C2);
+  self::Extension|unresolvedConstructor(#C2);
+  self::UnresolvedClass<core::int>();
+  self::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C3);
+  self::Extension|unresolvedConstructor(#C3);
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C4);
+  self::Extension|unresolvedConstructor(#C4);
+  self::ResolvedClass::unresolvedConstructor();
+  self::ResolvedClass::unresolvedConstructor();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C5);
+  self::Extension|unresolvedConstructor(#C5);
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C6);
+  self::Extension|unresolvedConstructor(#C6);
+}
+
+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*>
+  #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+  #C6 = instantiation self::resolved_prefix::UnresolvedClass <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 b589af6..0ed236c 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
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 a3c5d1d..0ed236c 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
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
index 1e775a7..bae4d9c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
@@ -4,6 +4,8 @@
   factory A.redirectingFactoryChild() = B.new;
   factory A.redirectingTwice() = A.redirectingFactory;
 }
+
 class B extends A {}
+
 test() {}
 main() => test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..de66759
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+class A {
+  A.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+  factory A.redirectingTwice() = A.redirectingFactory;
+}
+
+class B extends A {}
+
+main() => test();
+test() {}
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 b589af6..0ed236c 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
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 e80d672..0b5088f 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
@@ -7,11 +7,11 @@
   constructor •() → self::A
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 a3c5d1d..0ed236c 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
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 ce07a22..1ff3758 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
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : 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
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -149,10 +149,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -168,7 +168,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -183,10 +183,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -200,17 +200,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
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 872ae36..83c7798 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
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : 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
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -149,10 +149,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -168,7 +168,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -183,10 +183,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -200,17 +200,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
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 ce07a22..1ff3758 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
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : 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
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -149,10 +149,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -168,7 +168,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -183,10 +183,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -200,17 +200,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
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 d972b38..3714e57 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
@@ -7,7 +7,7 @@
   constructor _() → self::Class1
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -16,7 +16,7 @@
   static factory _() → self::Class2
     ;
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -24,7 +24,7 @@
   constructor _(core::int field) → self::Class3
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -32,7 +32,7 @@
   constructor _([core::int? field]) → self::Class4
     ;
   static factory •([core::int? field]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -41,7 +41,7 @@
   constructor _(core::int field1, [core::int? field2]) → self::Class5
     ;
   static factory •(core::int field1, [core::int? field2]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -51,7 +51,7 @@
   constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     ;
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -60,7 +60,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -69,7 +69,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode;
 static method main() → dynamic
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 872ae36..83c7798 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
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : 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
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
@@ -149,10 +149,10 @@
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
     f3a(); // error
        ^" in f3a{<inapplicable>}.();
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
@@ -168,7 +168,7 @@
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
   self::expect(42, c4b.{self::Class4::field}{core::int?});
   () → Null {
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
@@ -183,10 +183,10 @@
   self::expect(87, c5b.{self::Class5::field1}{core::int});
   self::expect(42, c5b.{self::Class5::field2}{core::int?});
   () → Null {
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
     f5a(); // error
        ^" in f5a{<inapplicable>}.();
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
 Try removing the extra positional arguments.
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
@@ -200,17 +200,17 @@
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
   self::expect(87, c6a.{self::Class6::field3}{core::int});
   () → Null {
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(); // error
        ^" in f6a{<inapplicable>}.();
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
     f6a(42); // error
        ^" in f6a{<inapplicable>}.(42);
-    let final Never #t8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     f6a(42, 87); // error
        ^" in f6a{<inapplicable>}.(42, 87);
-    let final Never #t9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
     f6a(field1: 87, field2: 87); // error
        ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
   };
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..caada6b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+bar() {}
+foo() => List<int>;
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.expect
index 2949323..6f4cc26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.expect
@@ -65,6 +65,10 @@
 static method test5() → dynamic
   return invalid-expression "This assertion failed.";
 static method main() → dynamic {}
+static method _#B4#new#tearOff<T extends core::int>() → self::A4<self::_#B4#new#tearOff::T>
+  return new self::A4::•<self::_#B4#new#tearOff::T>();
+static method _#B5#new#tearOff<unrelated T extends core::List<core::Object?>, unrelated S extends Null>() → self::A5<core::List<dynamic>, Never?>
+  return new self::A5::•<core::List<dynamic>, Never?>();
 
 constants  {
   #C1 = self::StaticIdentityTest {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.transformed.expect
index 2949323..6f4cc26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.strong.transformed.expect
@@ -65,6 +65,10 @@
 static method test5() → dynamic
   return invalid-expression "This assertion failed.";
 static method main() → dynamic {}
+static method _#B4#new#tearOff<T extends core::int>() → self::A4<self::_#B4#new#tearOff::T>
+  return new self::A4::•<self::_#B4#new#tearOff::T>();
+static method _#B5#new#tearOff<unrelated T extends core::List<core::Object?>, unrelated S extends Null>() → self::A5<core::List<dynamic>, Never?>
+  return new self::A5::•<core::List<dynamic>, Never?>();
 
 constants  {
   #C1 = self::StaticIdentityTest {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline.expect
index 77787a1..3023dc3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline.expect
@@ -1,16 +1,27 @@
 class A1<T> {}
+
 typedef B1<T> = A1<T>;
+
 class A2<T extends num> {}
+
 typedef B2<T extends num> = A2<T>;
+
 class A3<T extends List<dynamic>, S extends Never?> {}
+
 typedef B3<T extends List<Object?>, S extends Null> = A3<T, S>;
+
 class A4<T extends num> {}
+
 typedef B4<T extends int> = A4<T>;
+
 class A5<T extends List<dynamic>, S extends Never?> {}
+
 typedef B5<T extends List<Object?>, S extends Null> = A5;
+
 class StaticIdentityTest {
   const StaticIdentityTest(a, b) : assert(identical(a, b));
 }
+
 test1() => const StaticIdentityTest(A1.new, B1.new);
 test2() => const StaticIdentityTest(A2.new, B2.new);
 test3() => const StaticIdentityTest(A3.new, B3.new);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3167ee0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+class A1<T> {}
+
+class A2<T extends num> {}
+
+class A3<T extends List<dynamic>, S extends Never?> {}
+
+class A4<T extends num> {}
+
+class A5<T extends List<dynamic>, S extends Never?> {}
+
+class StaticIdentityTest {
+  const StaticIdentityTest(a, b) : assert(identical(a, b));
+}
+
+main() {}
+test1() => const StaticIdentityTest(A1.new, B1.new);
+test2() => const StaticIdentityTest(A2.new, B2.new);
+test3() => const StaticIdentityTest(A3.new, B3.new);
+test4() => const StaticIdentityTest(A4.new, B4.new);
+test5() => const StaticIdentityTest(A5.new, B5.new);
+typedef B1<T> = A1<T>;
+typedef B2<T extends num> = A2<T>;
+typedef B3<T extends List<Object?>, S extends Null> = A3<T, S>;
+typedef B4<T extends int> = A4<T>;
+typedef B5<T extends List<Object?>, S extends Null> = A5;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.expect
index 2949323..6f4cc26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.expect
@@ -65,6 +65,10 @@
 static method test5() → dynamic
   return invalid-expression "This assertion failed.";
 static method main() → dynamic {}
+static method _#B4#new#tearOff<T extends core::int>() → self::A4<self::_#B4#new#tearOff::T>
+  return new self::A4::•<self::_#B4#new#tearOff::T>();
+static method _#B5#new#tearOff<unrelated T extends core::List<core::Object?>, unrelated S extends Null>() → self::A5<core::List<dynamic>, Never?>
+  return new self::A5::•<core::List<dynamic>, Never?>();
 
 constants  {
   #C1 = self::StaticIdentityTest {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.outline.expect
index fd75da2..13089c3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.outline.expect
@@ -44,3 +44,7 @@
   ;
 static method main() → dynamic
   ;
+static method _#B4#new#tearOff<T extends core::int>() → self::A4<self::_#B4#new#tearOff::T>
+  return new self::A4::•<self::_#B4#new#tearOff::T>();
+static method _#B5#new#tearOff<unrelated T extends core::List<core::Object?>, unrelated S extends Null>() → self::A5<core::List<dynamic>, Never?>
+  return new self::A5::•<core::List<dynamic>, Never?>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.transformed.expect
index 2949323..6f4cc26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.transformed.expect
@@ -65,6 +65,10 @@
 static method test5() → dynamic
   return invalid-expression "This assertion failed.";
 static method main() → dynamic {}
+static method _#B4#new#tearOff<T extends core::int>() → self::A4<self::_#B4#new#tearOff::T>
+  return new self::A4::•<self::_#B4#new#tearOff::T>();
+static method _#B5#new#tearOff<unrelated T extends core::List<core::Object?>, unrelated S extends Null>() → self::A5<core::List<dynamic>, Never?>
+  return new self::A5::•<core::List<dynamic>, Never?>();
 
 constants  {
   #C1 = self::StaticIdentityTest {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart
new file mode 100644
index 0000000..80c48ab
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart
@@ -0,0 +1,32 @@
+// 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> {
+  static X foo<X>(X x) => x;
+}
+
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
+
+test() {
+  Y Function<Y>(Y) f1 = A.foo; // Ok.
+  int Function(int) f2 = A.foo; // Ok.
+  int Function(int) f3 = A.foo<int>; // Ok.
+  int Function(int) f4 = A<int>.foo; // Error.
+  var f5 = A<int>.foo; // Error.
+
+  Y Function<Y>(Y) g1 = D1.foo; // Ok.
+  int Function(int) g2 = D1.foo; // Ok.
+  int Function(int) g3 = D1.foo<int>; // Ok.
+  int Function(int) g4 = D1<int>.foo; // Error.
+  var g5 = D1<int>.foo; // Error.
+
+  Y Function<Y>(Y) h1 = D2.foo; // Ok.
+  int Function(int) h2 = D2.foo; // Ok.
+  int Function(int) h3 = D2.foo<int>; // Ok.
+  int Function(int) h4 = D2<int>.foo; // Error.
+  var h5 = D2<int>.foo; // Error.
+}
+
+main() {}
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
new file mode 100644
index 0000000..f018785e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <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
new file mode 100644
index 0000000..f018785e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect
new file mode 100644
index 0000000..a3fb204
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  static X foo<X>(X x) => x;
+}
+
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..37de545
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  static X foo<X>(X x) => x;
+}
+
+main() {}
+test() {}
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
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
new file mode 100644
index 0000000..67dd644
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect
new file mode 100644
index 0000000..07e6b54
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
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
new file mode 100644
index 0000000..67dd644
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <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 b69871d..ae2f0d4 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
@@ -15,21 +15,11 @@
 // B<num> Function() test9() => DB1.new; // Error.
 //                              ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y>() test17() => DB2.new; // Error.
-//                                ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y>() test17() => DB2.new; // Error.
 //                                ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-//                                   ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
@@ -75,7 +65,7 @@
 static method test8() → () → self::B<core::String>
   return #C4;
 static method test9() → () → self::B<core::num>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<num> Function() test9() => DB1.new; // Error.
                              ^" in (#C4) as{TypeError,ForNonNullableByDefault} () → self::B<core::num>;
@@ -94,13 +84,10 @@
 static method test16() → <Y extends core::num = dynamic>() → self::B<Y>
   return #C12;
 static method test17() → <Y extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in (let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
+                               ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
 static method test18() → () → self::B<core::num>
   return #C9;
 static method test19() → () → self::B<core::num>
@@ -112,16 +99,27 @@
 static method test22() → <Y extends core::num = dynamic, Z extends core::String = dynamic>() → self::B<Y>
   return #C13;
 static method test23() → <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
+                                  ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
 static method test24() → () → self::B<core::String>
   return #C14;
 static method main() → dynamic {}
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>() → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>();
+static method _#DB2#bar#tearOff<X extends core::num>() → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>();
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>();
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -135,7 +133,7 @@
   #C9 = instantiation self::B::• <core::num>
   #C10 = instantiation self::B::foo <core::num>
   #C11 = instantiation self::B::bar <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>)
+  #C12 = static-tearoff self::_#DB2#new#tearOff
+  #C13 = static-tearoff self::_#DB3#new#tearOff
   #C14 = instantiation self::B::• <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 382b745..ae2f0d4 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
@@ -15,21 +15,11 @@
 // B<num> Function() test9() => DB1.new; // Error.
 //                              ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y>() test17() => DB2.new; // Error.
-//                                ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y>() test17() => DB2.new; // Error.
 //                                ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-//                                   ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
@@ -75,7 +65,7 @@
 static method test8() → () → self::B<core::String>
   return #C4;
 static method test9() → () → self::B<core::num>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<num> Function() test9() => DB1.new; // Error.
                              ^" in (#C4) as{TypeError,ForNonNullableByDefault} () → self::B<core::num>;
@@ -94,10 +84,7 @@
 static method test16() → <Y extends core::num = dynamic>() → self::B<Y>
   return #C12;
 static method test17() → <Y extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y>() test17() => DB2.new; // Error.
                                ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
@@ -112,16 +99,27 @@
 static method test22() → <Y extends core::num = dynamic, Z extends core::String = dynamic>() → self::B<Y>
   return #C13;
 static method test23() → <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
                                   ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
 static method test24() → () → self::B<core::String>
   return #C14;
 static method main() → dynamic {}
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>() → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>();
+static method _#DB2#bar#tearOff<X extends core::num>() → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>();
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>();
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -135,7 +133,7 @@
   #C9 = instantiation self::B::• <core::num>
   #C10 = instantiation self::B::foo <core::num>
   #C11 = instantiation self::B::bar <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>)
+  #C12 = static-tearoff self::_#DB2#new#tearOff
+  #C13 = static-tearoff self::_#DB3#new#tearOff
   #C14 = instantiation self::B::• <Never>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline.expect
index c3a7ab9..b8e1aba 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline.expect
@@ -1,9 +1,11 @@
 class A {}
+
 class B<X> {
   B();
   B.foo();
   factory B.bar() => new B<X>();
 }
+
 typedef DA1 = A;
 typedef DA2<X extends num> = A;
 typedef DB1 = B<String>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..43ab7d6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.textual_outline_modelled.expect
@@ -0,0 +1,39 @@
+A Function() test2() => DA1.new;
+A Function() test4() => DA2.new;
+A Function() test5() => DA2<String>.new;
+A Function() test6() => DA2<int>.new;
+B<String> Function() test10() => DB1.foo;
+B<String> Function() test11() => DB1.bar;
+B<String> Function() test24() => DB2.new;
+B<String> Function() test8() => DB1.new;
+B<Y> Function<Y, Z>() test23() => DB3.new;
+B<Y> Function<Y>() test17() => DB2.new;
+B<Y> Function<Y extends num, Z extends String>() test22() => DB3.new;
+B<Y> Function<Y extends num>() test16() => DB2.new;
+B<num> Function() test12() => DB2<num>.new;
+B<num> Function() test13() => DB2<num>.foo;
+B<num> Function() test14() => DB2<num>.bar;
+B<num> Function() test15() => DB2.new;
+B<num> Function() test18() => DB3<num, String>.new;
+B<num> Function() test19() => DB3<num, String>.foo;
+B<num> Function() test20() => DB3<num, String>.bar;
+B<num> Function() test21() => DB3.new;
+B<num> Function() test9() => DB1.new;
+DA1 Function() test1() => DA1.new;
+DA2<num> Function() test3() => DA2.new;
+DB1 Function() test7() => DB1.new;
+
+class A {}
+
+class B<X> {
+  B();
+  B.foo();
+  factory B.bar() => new B<X>();
+}
+
+main() {}
+typedef DA1 = A;
+typedef DA2<X extends num> = A;
+typedef DB1 = B<String>;
+typedef DB2<X extends num> = B<X>;
+typedef DB3<X extends num, Y extends String> = B<X>;
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 10912e2..a1d6e2f 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
@@ -15,21 +15,11 @@
 // B<num> Function() test9() => DB1.new; // Error.
 //                              ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y>() test17() => DB2.new; // Error.
-//                                ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y>() test17() => DB2.new; // Error.
 //                                ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-//                                   ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
@@ -75,7 +65,7 @@
 static method test8() → () → self::B<core::String>
   return #C4;
 static method test9() → () → self::B<core::num>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<num> Function() test9() => DB1.new; // Error.
                              ^" in (#C4) as{TypeError,ForNonNullableByDefault} () → self::B<core::num>;
@@ -94,13 +84,10 @@
 static method test16() → <Y extends core::num = dynamic>() → self::B<Y>
   return #C12;
 static method test17() → <Y extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in (let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
+                               ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
 static method test18() → () → self::B<core::num>
   return #C9;
 static method test19() → () → self::B<core::num>
@@ -112,16 +99,27 @@
 static method test22() → <Y extends core::num = dynamic, Z extends core::String = dynamic>() → self::B<Y>
   return #C13;
 static method test23() → <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
+                                  ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
 static method test24() → () → self::B<core::String>
   return #C14;
 static method main() → dynamic {}
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>() → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>();
+static method _#DB2#bar#tearOff<X extends core::num>() → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>();
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>();
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -135,7 +133,7 @@
   #C9 = instantiation self::B::• <core::num*>
   #C10 = instantiation self::B::foo <core::num*>
   #C11 = instantiation self::B::bar <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>)
+  #C12 = static-tearoff self::_#DB2#new#tearOff
+  #C13 = static-tearoff self::_#DB3#new#tearOff
   #C14 = instantiation self::B::• <Never*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.outline.expect
index fda6d4f..7a1ba29 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.outline.expect
@@ -69,3 +69,17 @@
   ;
 static method main() → dynamic
   ;
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>() → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>();
+static method _#DB2#bar#tearOff<X extends core::num>() → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>();
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>();
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>();
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 86a1666..a1d6e2f 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
@@ -15,21 +15,11 @@
 // B<num> Function() test9() => DB1.new; // Error.
 //                              ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y>() test17() => DB2.new; // Error.
-//                                ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y>() test17() => DB2.new; // Error.
 //                                ^
 //
-// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
-//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-//                                   ^
-//
 // pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
 //  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 // B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
@@ -75,7 +65,7 @@
 static method test8() → () → self::B<core::String>
   return #C4;
 static method test9() → () → self::B<core::num>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<num> Function() test9() => DB1.new; // Error.
                              ^" in (#C4) as{TypeError,ForNonNullableByDefault} () → self::B<core::num>;
@@ -94,10 +84,7 @@
 static method test16() → <Y extends core::num = dynamic>() → self::B<Y>
   return #C12;
 static method test17() → <Y extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y>() test17() => DB2.new; // Error.
-                               ^" in let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y>() test17() => DB2.new; // Error.
                                ^" in (#C12) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
@@ -112,16 +99,27 @@
 static method test22() → <Y extends core::num = dynamic, Z extends core::String = dynamic>() → self::B<Y>
   return #C13;
 static method test23() → <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
- - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
-B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
-                                  ^" in let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
 B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
                                   ^" in (#C13) as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
 static method test24() → () → self::B<core::String>
   return #C14;
 static method main() → dynamic {}
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>() → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>();
+static method _#DB2#bar#tearOff<X extends core::num>() → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>();
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>();
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>();
 
 constants  {
   #C1 = constructor-tearoff self::A::•
@@ -135,7 +133,7 @@
   #C9 = instantiation self::B::• <core::num*>
   #C10 = instantiation self::B::foo <core::num*>
   #C11 = instantiation self::B::bar <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>)
+  #C12 = static-tearoff self::_#DB2#new#tearOff
+  #C13 = static-tearoff self::_#DB3#new#tearOff
   #C14 = instantiation self::B::• <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 50ef75f8..87df92f 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
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 44b6f22..87df92f 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
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
index 3e34a96..f161d57 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
@@ -4,13 +4,17 @@
   factory A.redirectingFactoryChild() = B.new;
   A.redirecting() : this.new();
 }
+
 class B extends A {}
+
 class C {
   final int x;
   const C.new(this.x);
 }
+
 class D extends C {
   D(int x) : super.new(x * 2);
 }
+
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..00d195c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+class A {
+  A.new();
+  A.redirecting() : this.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+}
+
+class B extends A {}
+
+class C {
+  const C.new(this.x);
+  final int x;
+}
+
+class D extends C {
+  D(int x) : super.new(x * 2);
+}
+
+main() {}
+test() {}
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 50ef75f8..87df92f 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
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 b0b2882..0041523 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
@@ -9,9 +9,9 @@
   constructor redirecting() → self::A
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
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 44b6f22..87df92f 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
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart
new file mode 100644
index 0000000..96a42a8
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart
@@ -0,0 +1,159 @@
+// 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 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Super {
+  Super.named();
+}
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+test() {
+  UnresolvedClass();
+  new UnresolvedClass();
+  const UnresolvedClass();
+
+  UnresolvedClass.unresolvedConstructor();
+  new UnresolvedClass.unresolvedConstructor();
+  const UnresolvedClass.unresolvedConstructor();
+  UnresolvedClass /**/ .unresolvedConstructor();
+  new UnresolvedClass. /**/ unresolvedConstructor();
+  const UnresolvedClass /**/ .unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass();
+  new unresolved_prefix.UnresolvedClass();
+  const unresolved_prefix.UnresolvedClass();
+  unresolved_prefix. /**/ UnresolvedClass();
+  new unresolved_prefix /**/ .UnresolvedClass();
+  const unresolved_prefix. /**/ UnresolvedClass();
+
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+
+  UnresolvedClass<int>();
+  new UnresolvedClass<int>();
+  const UnresolvedClass<int>();
+  UnresolvedClass /**/ <int>();
+  new UnresolvedClass<int> /**/ ();
+  const UnresolvedClass /**/ <int>();
+
+  UnresolvedClass<int>.unresolvedConstructor();
+  new UnresolvedClass<int>.unresolvedConstructor();
+  const UnresolvedClass<int>.unresolvedConstructor();
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass<int>();
+  new unresolved_prefix.UnresolvedClass<int>();
+  const unresolved_prefix.UnresolvedClass<int>();
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  ResolvedClass();
+  new ResolvedClass();
+  const ResolvedClass();
+
+  ResolvedClass.unresolvedConstructor();
+  new ResolvedClass.unresolvedConstructor();
+  const ResolvedClass.unresolvedConstructor();
+  ResolvedClass /**/ .unresolvedConstructor();
+  new ResolvedClass. /**/ unresolvedConstructor();
+  const ResolvedClass /**/ .unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass();
+  new resolved_prefix.UnresolvedClass();
+  const resolved_prefix.UnresolvedClass();
+  resolved_prefix. /**/ UnresolvedClass();
+  new resolved_prefix /**/ .UnresolvedClass();
+  const resolved_prefix. /**/ UnresolvedClass();
+
+  resolved_prefix.ResolvedClass();
+  new resolved_prefix.ResolvedClass();
+  const resolved_prefix.ResolvedClass();
+  resolved_prefix. /**/ ResolvedClass();
+  new resolved_prefix /**/ .ResolvedClass();
+  const resolved_prefix. /**/ ResolvedClass();
+
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+
+  ResolvedClass<int>();
+  new ResolvedClass<int>();
+  const ResolvedClass<int>();
+  ResolvedClass /**/ <int>();
+  new ResolvedClass /**/ <int>();
+  const ResolvedClass /**/ <int>();
+
+  ResolvedClass<int>.unresolvedConstructor();
+  new ResolvedClass<int>.unresolvedConstructor();
+  const ResolvedClass<int>.unresolvedConstructor();
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass<int>();
+  new resolved_prefix.UnresolvedClass<int>();
+  const resolved_prefix.UnresolvedClass<int>();
+  resolved_prefix. /**/ UnresolvedClass<int>();
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+
+  resolved_prefix.ResolvedClass<int>();
+  new resolved_prefix.ResolvedClass<int>();
+  const resolved_prefix.ResolvedClass<int>();
+  resolved_prefix. /**/ ResolvedClass<int>();
+  new resolved_prefix.ResolvedClass /**/ <int>();
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+  const resolved_prefix
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect
new file mode 100644
index 0000000..920c962
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect
@@ -0,0 +1,858 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..920c962
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -0,0 +1,858 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..1981b9a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+import 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Super {
+  Super.named();
+}
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a8ffa5d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+import 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+class Super {
+  Super.named();
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.expect
new file mode 100644
index 0000000..920c962
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.expect
@@ -0,0 +1,858 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..1532807
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    ;
+  constructor constructor2() → self::Class
+    ;
+  constructor constructor3() → self::Class
+    ;
+  constructor constructor4() → self::Class
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..920c962
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -0,0 +1,858 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect
index d463dc9..d249938 100644
--- a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect
index 977003e..e06ef9e 100644
--- a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -28,4 +30,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
-Extra constant evaluation: evaluated: 20, effectively constant: 3
+Extra constant evaluation: evaluated: 21, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect
index d463dc9..d249938 100644
--- a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect
index 85f75fa..41de7ee 100644
--- a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect
@@ -9,6 +9,8 @@
     ;
   get dynFunction() → dynamic
     ;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   ;
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect
index 977003e..e06ef9e 100644
--- a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -28,4 +30,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
-Extra constant evaluation: evaluated: 20, effectively constant: 3
+Extra constant evaluation: evaluated: 21, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.strong.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.strong.expect
index 0c0fa5a..02d73bd 100644
--- a/pkg/front_end/testcases/dart2js/late_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.strong.expect
@@ -28,6 +28,8 @@
     this.{self::C::_#C#c} = #t6;
   get d() → core::int
     return let final core::int? #t7 = this.{self::C::_#C#d}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = 1.{core::int::unary-}(){() → core::int} in this.{self::C::_#C#d}{core::int?} == null ?{core::int} this.{self::C::_#C#d} = #t8 : throw new _in::LateError::fieldADI("d") : #t7{core::int};
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
 }
 static field self::C c = new self::C::•();
 static method main() → void {
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.strong.transformed.expect
index e162d20..bf9c284 100644
--- a/pkg/front_end/testcases/dart2js/late_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.strong.transformed.expect
@@ -28,6 +28,8 @@
     this.{self::C::_#C#c} = #t6;
   get d() → core::int
     return let final core::int? #t7 = this.{self::C::_#C#d}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = 1.{core::int::unary-}(){() → core::int} in this.{self::C::_#C#d}{core::int?} == null ?{core::int} this.{self::C::_#C#d} = #t8 : throw new _in::LateError::fieldADI("d") : #t7{core::int};
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
 }
 static field self::C c = new self::C::•();
 static method main() → void {
@@ -60,4 +62,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_fields.dart:15:16 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_fields.dart:16:22 -> DoubleConstant(-1.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///late_fields.dart:16:18 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 92, effectively constant: 3
+Extra constant evaluation: evaluated: 93, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.expect
index ca585bf..95a7e38 100644
--- a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.expect
@@ -28,6 +28,8 @@
     this.{self::C::_#C#c} = #t6;
   get d() → core::int
     return let final core::int #t7 = this.{self::C::_#C#d}{core::int?} in _in::isSentinel(#t7) ?{core::int} let final core::int #t8 = 1.{core::int::unary-}(){() → core::int} in _in::isSentinel(this.{self::C::_#C#d}{core::int?}) ?{core::int} this.{self::C::_#C#d} = #t8 : throw new _in::LateError::fieldADI("d") : #t7;
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
 }
 static field self::C c = new self::C::•();
 static method main() → void {
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.outline.expect
index 09228574..57eb7ff 100644
--- a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.outline.expect
@@ -16,6 +16,8 @@
   get c() → core::int;
   set c(core::int #t3) → void;
   get d() → core::int;
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
 }
 static field self::C c;
 static method main() → void
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.transformed.expect
index 06e4c45..15df6e5 100644
--- a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.transformed.expect
@@ -28,6 +28,8 @@
     this.{self::C::_#C#c} = #t6;
   get d() → core::int
     return let final core::int #t7 = this.{self::C::_#C#d}{core::int?} in _in::isSentinel(#t7) ?{core::int} let final core::int #t8 = 1.{core::int::unary-}(){() → core::int} in _in::isSentinel(this.{self::C::_#C#d}{core::int?}) ?{core::int} this.{self::C::_#C#d} = #t8 : throw new _in::LateError::fieldADI("d") : #t7;
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
 }
 static field self::C c = new self::C::•();
 static method main() → void {
@@ -60,4 +62,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_fields.dart:15:16 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_fields.dart:16:22 -> DoubleConstant(-1.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///late_fields.dart:16:18 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 96, effectively constant: 3
+Extra constant evaluation: evaluated: 97, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.expect
index 766e7f1..c2128f7 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.expect
@@ -21,6 +21,8 @@
   synthetic constructor •() → self::Statics
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
index 39d75e1..209cdb6 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
@@ -20,6 +20,8 @@
   synthetic constructor •() → self::Statics
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
@@ -84,4 +86,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:23:29 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 62, effectively constant: 4
+Extra constant evaluation: evaluated: 63, effectively constant: 4
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.expect
index 766e7f1..c2128f7 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.expect
@@ -21,6 +21,8 @@
   synthetic constructor •() → self::Statics
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.outline.expect
index 76913dc..2b97609 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.outline.expect
@@ -20,6 +20,8 @@
   late static final field core::int d;
   synthetic constructor •() → self::Statics
     ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
index 39d75e1..209cdb6 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
@@ -20,6 +20,8 @@
   synthetic constructor •() → self::Statics
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
@@ -84,4 +86,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:23:29 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 62, effectively constant: 4
+Extra constant evaluation: evaluated: 63, effectively constant: 4
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
index 203b0cf..3eaf932 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
@@ -24,9 +24,15 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
+  static method _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::fact(defaultValue: defaultValue);
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  static method _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue = #C2}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
index 203b0cf..3eaf932 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
@@ -24,9 +24,15 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
+  static method _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::fact(defaultValue: defaultValue);
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  static method _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue = #C2}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
index 203b0cf..3eaf932 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
@@ -24,9 +24,15 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
+  static method _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::fact(defaultValue: defaultValue);
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  static method _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue = #C2}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
index fe1495b..5ab22e6 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
@@ -21,8 +21,14 @@
     ;
   @_js::patch
   external static factory fact({core::bool defaultValue}) → self2::Class;
+  static method _#fact#tearOff({core::bool defaultValue}) → self2::Class
+    return self2::Class::fact(defaultValue: defaultValue);
   @_js::patch
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
+  static method _#constFact#tearOff({core::bool defaultValue}) → self2::Class
+    return self2::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue}) → self2::Class
+    return new self2::Class::_internal(defaultValue: defaultValue);
 }
 
 
@@ -30,4 +36,4 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:50 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:28 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 4, effectively constant: 3
+Extra constant evaluation: evaluated: 10, effectively constant: 3
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.transformed.expect
index 203b0cf..3eaf932 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.transformed.expect
@@ -24,9 +24,15 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
+  static method _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::fact(defaultValue: defaultValue);
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  static method _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue = #C2}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect
index d463dc9..d249938 100644
--- a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect
index 977003e..e06ef9e 100644
--- a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -28,4 +30,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
-Extra constant evaluation: evaluated: 20, effectively constant: 3
+Extra constant evaluation: evaluated: 21, effectively constant: 3
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect
index d463dc9..d249938 100644
--- a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect
index 85f75fa..41de7ee 100644
--- a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect
@@ -9,6 +9,8 @@
     ;
   get dynFunction() → dynamic
     ;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   ;
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect
index 977003e..e06ef9e 100644
--- a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect
@@ -10,6 +10,8 @@
     return #C1;
   get dynFunction() → dynamic
     return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -28,4 +30,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
-Extra constant evaluation: evaluated: 20, effectively constant: 3
+Extra constant evaluation: evaluated: 21, effectively constant: 3
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
index 3fed750..d99381b 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
@@ -7,6 +7,8 @@
     : super core::Object::•()
     ;
   method _privateMethod(covariant core::int i) → dynamic {}
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method main() → dynamic {
   new self::Class::•().{self::Class::_privateMethod}(0){(core::int) → dynamic};
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.transformed.expect
index 965d2e1..0941b67 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.transformed.expect
@@ -7,6 +7,8 @@
     : super core::Object::•()
     ;
   method _privateMethod(core::int i) → dynamic {}
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method main() → dynamic {
   new self::Class::•().{self::Class::_privateMethod}(0){(core::int) → dynamic};
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
index 3fed750..d99381b 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
@@ -7,6 +7,8 @@
     : super core::Object::•()
     ;
   method _privateMethod(covariant core::int i) → dynamic {}
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method main() → dynamic {
   new self::Class::•().{self::Class::_privateMethod}(0){(core::int) → dynamic};
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
index 3a09c94..7c99f9e 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
@@ -7,6 +7,8 @@
     ;
   method _privateMethod(covariant core::int i) → dynamic
     ;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.transformed.expect
index 965d2e1..0941b67 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.transformed.expect
@@ -7,6 +7,8 @@
     : super core::Object::•()
     ;
   method _privateMethod(core::int i) → dynamic {}
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
 }
 static method main() → dynamic {
   new self::Class::•().{self::Class::_privateMethod}(0){(core::int) → dynamic};
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
index 330d032..6638921 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
@@ -1,12 +1,12 @@
 Errors: {
-  org-dartlang-debug:synthetic_debug_expression:1:17: Error: Getter not found: 'y'.
+  org-dartlang-debug:synthetic_debug_expression:1:17: Error: Undefined name 'y'.
   () { return x + y; }
                   ^
-  org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'x'.
+  org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'x'.
   () { return x + y; }
               ^
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → dynamic {
-    return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'x'.\n() { return x + y; }\n            ^"{dynamic}.+(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:17: Error: Getter not found: 'y'.\n() { return x + y; }\n                ^");
+  return () → invalid-type {
+    return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'x'.\n() { return x + y; }\n            ^"{<invalid>}.+(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:17: Error: Undefined name 'y'.\n() { return x + y; }\n                ^");
   };
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml.expect b/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml.expect
index 76636ce..074e981 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
-  org-dartlang-debug:synthetic_debug_expression:1:1: Error: Getter not found: 'z'.
+  org-dartlang-debug:synthetic_debug_expression:1:1: Error: Undefined name 'z'.
   z
   ^
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: Getter not found: 'z'.\nz\n^";
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: Undefined name 'z'.\nz\n^";
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index 18654e51..b682d78 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -1,10 +1,10 @@
 Errors: {
-  org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.
+  org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.
   globalVar + staticVar + 5
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num*) →* dart.core::num*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::num*};
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num*) →* dart.core::num*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::num*};
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
diff --git a/pkg/front_end/testcases/expression/invalid.expression.yaml.expect b/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
index 9e16ada..de38a65 100644
--- a/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
@@ -11,4 +11,4 @@
    ^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: This couldn't be parsed.\n*foo(3,\n^"{dynamic}.*(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Method not found: 'foo'.\n*foo(3,\n ^^^");
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: This couldn't be parsed.\n*foo(3,\n^"{<invalid>}.*(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Method not found: 'foo'.\n*foo(3,\n ^^^");
diff --git a/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml.expect
index aa22db0..9000160 100644
--- a/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
-  org-dartlang-debug:synthetic_debug_expression:1:5: Error: Method not found: 'Random'.
+  org-dartlang-debug:synthetic_debug_expression:1:5: Error: Couldn't find constructor 'Random'.
   new Random()
       ^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:5: Error: Method not found: 'Random'.\nnew Random()\n    ^^^^^^";
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:5: Error: Couldn't find constructor 'Random'.\nnew Random()\n    ^^^^^^";
diff --git a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
index e7333cd..d8025303 100644
--- a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
-  org-dartlang-debug:synthetic_debug_expression:1:5: Error: Method not found: 'Directory'.
+  org-dartlang-debug:synthetic_debug_expression:1:5: Error: Couldn't find constructor 'Directory'.
   new Directory("test")
       ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:5: Error: Method not found: 'Directory'.\nnew Directory(\"test\")\n    ^^^^^^^^^";
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:5: Error: Couldn't find constructor 'Directory'.\nnew Directory(\"test\")\n    ^^^^^^^^^";
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
index 6e6bd3b..4b7f9b0 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
@@ -6,5 +6,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    main::A::debugExpr::T* k = let final Never* #t1 = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError} Never;
+    main::A::debugExpr::T* k = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError} Never;
   };
diff --git a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
index b0091c5..b762cd5 100644
--- a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
@@ -55,24 +55,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_getter_resolution.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
   a.baz; // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:22:5: Error: The getter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
   e.foo; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo;
   self::E|get#bar(e);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:24:5: Error: The getter 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
   e.baz; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.baz;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:26:6: Error: The getter 'foo' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
   et.foo; // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.foo;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:27:6: Error: The getter 'bar' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   et.bar; // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.bar;
   self::ET|get#baz(et);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
index b0091c5..b762cd5 100644
--- a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
@@ -55,24 +55,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_getter_resolution.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
   a.baz; // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:22:5: Error: The getter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
   e.foo; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo;
   self::E|get#bar(e);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:24:5: Error: The getter 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
   e.baz; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.baz;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:26:6: Error: The getter 'foo' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
   et.foo; // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.foo;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:27:6: Error: The getter 'bar' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   et.bar; // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.bar;
   self::ET|get#baz(et);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
index d468a09..ae7cf69 100644
--- a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
@@ -60,24 +60,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_method_resolution.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'baz'.
   a.baz(); // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:22:5: Error: The method 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
   e.foo(); // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo();
   self::E|bar(e);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:24:5: Error: The method 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'baz'.
   e.baz(); // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.baz();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:26:6: Error: The method 'foo' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
   et.foo(); // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:27:6: Error: The method 'bar' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing method, or defining a method name 'bar'.
   et.bar(); // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.bar();
   self::ET|baz(et);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
index d468a09..ae7cf69 100644
--- a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
@@ -60,24 +60,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_method_resolution.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'baz'.
   a.baz(); // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:22:5: Error: The method 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
   e.foo(); // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo();
   self::E|bar(e);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:24:5: Error: The method 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'baz'.
   e.baz(); // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.baz();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:26:6: Error: The method 'foo' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
   et.foo(); // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:27:6: Error: The method 'bar' isn't defined for the extension 'ET'.
 Try correcting the name to the name of an existing method, or defining a method name 'bar'.
   et.bar(); // Error.
-     ^^^";
+     ^^^" in et{<unresolved>}.bar();
   self::ET|baz(et);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
index 743deb8..8a58ea2 100644
--- a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
@@ -93,48 +93,48 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_operator_resolution.dart'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   a ~/ \"foobar\"; // Error.
-    ^^";
+    ^^" in a{<unresolved>}.~/("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:28:5: Error: The operator '*' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   e * \"foobar\"; // Error.
-    ^";
+    ^" in e{<unresolved>}.*("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:29:4: Error: The operator '[]' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   e[0]; // Error.
-   ^";
+   ^" in e{<unresolved>}.[](0);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:30:4: Error: The operator '[]=' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   e[0] = \"foobar\"; // Error.
-   ^";
+   ^" in e{<unresolved>}.[]=(0, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:31:3: Error: The operator 'unary-' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -e; // Error.
-  ^";
+  ^" in e{<unresolved>}.unary-();
   self::E|+(e, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:33:5: Error: The operator '~/' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   e ~/ \"foobar\"; // Error.
-    ^^";
+    ^^" in e{<unresolved>}.~/("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:35:6: Error: The operator '*' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   et * \"foobar\"; // Error.
-     ^";
+     ^" in et{<unresolved>}.*("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:36:5: Error: The operator '[]' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   et[0]; // Error.
-    ^";
+    ^" in et{<unresolved>}.[](0);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:37:5: Error: The operator '[]=' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   et[0] = \"foobar\"; // Error.
-    ^";
+    ^" in et{<unresolved>}.[]=(0, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:38:3: Error: The operator 'unary-' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -et; // Error.
-  ^";
+  ^" in et{<unresolved>}.unary-();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:39:6: Error: The operator '+' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   et + \"foobar\"; // Error.
-     ^";
+     ^" in et{<unresolved>}.+("foobar");
   self::ET|~/(et, "foobar");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
index 743deb8..8a58ea2 100644
--- a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
@@ -93,48 +93,48 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_operator_resolution.dart'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   a ~/ \"foobar\"; // Error.
-    ^^";
+    ^^" in a{<unresolved>}.~/("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:28:5: Error: The operator '*' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   e * \"foobar\"; // Error.
-    ^";
+    ^" in e{<unresolved>}.*("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:29:4: Error: The operator '[]' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   e[0]; // Error.
-   ^";
+   ^" in e{<unresolved>}.[](0);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:30:4: Error: The operator '[]=' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   e[0] = \"foobar\"; // Error.
-   ^";
+   ^" in e{<unresolved>}.[]=(0, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:31:3: Error: The operator 'unary-' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -e; // Error.
-  ^";
+  ^" in e{<unresolved>}.unary-();
   self::E|+(e, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:33:5: Error: The operator '~/' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   e ~/ \"foobar\"; // Error.
-    ^^";
+    ^^" in e{<unresolved>}.~/("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:35:6: Error: The operator '*' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   et * \"foobar\"; // Error.
-     ^";
+     ^" in et{<unresolved>}.*("foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:36:5: Error: The operator '[]' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   et[0]; // Error.
-    ^";
+    ^" in et{<unresolved>}.[](0);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:37:5: Error: The operator '[]=' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   et[0] = \"foobar\"; // Error.
-    ^";
+    ^" in et{<unresolved>}.[]=(0, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:38:3: Error: The operator 'unary-' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -et; // Error.
-  ^";
+  ^" in et{<unresolved>}.unary-();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:39:6: Error: The operator '+' isn't defined for the extension 'ET'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   et + \"foobar\"; // Error.
-     ^";
+     ^" in et{<unresolved>}.+("foobar");
   self::ET|~/(et, "foobar");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.strong.expect
index 1ce4b82..c9c618e 100644
--- a/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.strong.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
 //   et.foo = 42; // Error.
 //   ^^
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
 //   et.bar = 42; // Error.
 //   ^^
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
 //   et.baz = 42; // Ok.
 //   ^^
 //
@@ -54,24 +54,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_setter_resolution.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   a.baz = 42; // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:22:5: Error: The setter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
   e.foo = 42; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo = 42;
   self::E|set#bar(e, 42);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:24:5: Error: The setter 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   e.baz = 42; // Error.
-    ^^^";
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Getter not found: 'et'.
+    ^^^" in e{<unresolved>}.baz = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
   et.foo = 42; // Error.
-  ^^"{dynamic}.foo = 42;
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Getter not found: 'et'.
+  ^^"{<invalid>}.foo = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
   et.bar = 42; // Error.
-  ^^"{dynamic}.bar = 42;
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Getter not found: 'et'.
+  ^^"{<invalid>}.bar = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
   et.baz = 42; // Ok.
-  ^^"{dynamic}.baz = 42;
+  ^^"{<invalid>}.baz = 42;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.expect
index 1ce4b82..c9c618e 100644
--- a/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
 //   et.foo = 42; // Error.
 //   ^^
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
 //   et.bar = 42; // Error.
 //   ^^
 //
-// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Getter not found: 'et'.
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
 //   et.baz = 42; // Ok.
 //   ^^
 //
@@ -54,24 +54,24 @@
  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_setter_resolution.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   a.baz = 42; // Error.
-    ^^^";
+    ^^^" in a{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:22:5: Error: The setter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
   e.foo = 42; // Error.
-    ^^^";
+    ^^^" in e{<unresolved>}.foo = 42;
   self::E|set#bar(e, 42);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:24:5: Error: The setter 'baz' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   e.baz = 42; // Error.
-    ^^^";
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Getter not found: 'et'.
+    ^^^" in e{<unresolved>}.baz = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
   et.foo = 42; // Error.
-  ^^"{dynamic}.foo = 42;
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Getter not found: 'et'.
+  ^^"{<invalid>}.foo = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
   et.bar = 42; // Error.
-  ^^"{dynamic}.bar = 42;
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Getter not found: 'et'.
+  ^^"{<invalid>}.bar = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
   et.baz = 42; // Ok.
-  ^^"{dynamic}.baz = 42;
+  ^^"{<invalid>}.baz = 42;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect
index d246aca..cfd32eb 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect
@@ -95,7 +95,7 @@
 // extension type MyInt on int show num, isEven hide floor {
 //                                              ^^^^
 //
-// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
 //   e2.floor(); // Ok.
 //   ^^
 //
@@ -191,66 +191,66 @@
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   e1.ceil(); // Ok.
-     ^^^^";
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+     ^^^^" in e1{<unresolved>}.ceil();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
   e2.floor(); // Ok.
   ^^"{dynamic}.floor();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e1.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e1{<unresolved>}.isEven;
 }
 static method ceil() → invalid-type {}
 static method test2(self::E2 e2) → dynamic {
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   e2.ceil(); // Error.
-     ^^^^";
+     ^^^^" in e2{<unresolved>}.ceil();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing method, or defining a method name 'floor'.
   e2.floor(); // Ok.
-     ^^^^^";
+     ^^^^^" in e2{<unresolved>}.floor();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e2.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e2{<unresolved>}.isEven;
 }
 static method isEven() → invalid-type {}
 static method test3(self::E3 e3) → dynamic {
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
   e3.isOdd; // Ok.
-     ^^^^^";
+     ^^^^^" in e3{<unresolved>}.isOdd;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e3.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e3{<unresolved>}.isEven;
 }
 static method floor() → invalid-type {
   core::int get;
-  function twice() → core::num
+  function twice() → core::double
     return 2.{core::num::*}(invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
   int get twice => 2 * this;
-                       ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+                       ^^^^"){(core::num) → core::double};
 }
 static method test() → dynamic {
   self::MyInt m = 42;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
   m.twice; // OK, in the extension type.
-    ^^^^^";
+    ^^^^^" in m{<unresolved>}.twice;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   m.isEven; // OK, a shown instance member.
-    ^^^^^^";
+    ^^^^^^" in m{<unresolved>}.isEven;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   m.ceil(); // OK, a shown instance member.
-    ^^^^";
+    ^^^^" in m{<unresolved>}.ceil();
   m.{core::Object::toString}(){() → core::String};
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing method, or defining a method name 'floor'.
   m.floor(); // Error, hidden.
-    ^^^^^";
+    ^^^^^" in m{<unresolved>}.floor();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect
index d246aca..cfd32eb 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect
@@ -95,7 +95,7 @@
 // extension type MyInt on int show num, isEven hide floor {
 //                                              ^^^^
 //
-// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
 //   e2.floor(); // Ok.
 //   ^^
 //
@@ -191,66 +191,66 @@
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   e1.ceil(); // Ok.
-     ^^^^";
-  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+     ^^^^" in e1{<unresolved>}.ceil();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
   e2.floor(); // Ok.
   ^^"{dynamic}.floor();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e1.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e1{<unresolved>}.isEven;
 }
 static method ceil() → invalid-type {}
 static method test2(self::E2 e2) → dynamic {
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   e2.ceil(); // Error.
-     ^^^^";
+     ^^^^" in e2{<unresolved>}.ceil();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing method, or defining a method name 'floor'.
   e2.floor(); // Ok.
-     ^^^^^";
+     ^^^^^" in e2{<unresolved>}.floor();
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e2.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e2{<unresolved>}.isEven;
 }
 static method isEven() → invalid-type {}
 static method test3(self::E3 e3) → dynamic {
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
   e3.isOdd; // Ok.
-     ^^^^^";
+     ^^^^^" in e3{<unresolved>}.isOdd;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   e3.isEven; // Error.
-     ^^^^^^";
+     ^^^^^^" in e3{<unresolved>}.isEven;
 }
 static method floor() → invalid-type {
   core::int get;
-  function twice() → core::num
+  function twice() → core::double
     return 2.{core::num::*}(invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
   int get twice => 2 * this;
-                       ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+                       ^^^^"){(core::num) → core::double};
 }
 static method test() → dynamic {
   self::MyInt m = 42;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
   m.twice; // OK, in the extension type.
-    ^^^^^";
+    ^^^^^" in m{<unresolved>}.twice;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
   m.isEven; // OK, a shown instance member.
-    ^^^^^^";
+    ^^^^^^" in m{<unresolved>}.isEven;
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
   m.ceil(); // OK, a shown instance member.
-    ^^^^";
+    ^^^^" in m{<unresolved>}.ceil();
   m.{core::Object::toString}(){() → core::String};
   invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
 Try correcting the name to the name of an existing method, or defining a method name 'floor'.
   m.floor(); // Error, hidden.
-    ^^^^^";
+    ^^^^^" in m{<unresolved>}.floor();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect
index 6d68160..b62bef7 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect
@@ -111,19 +111,19 @@
 }
 static method num() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Error.
   ^" in null;
   }
 }
 static method ceil() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Ok.
   ^" in null;
   }
   function floor() → core::int {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int floor() {} // Error.
   ^" in null;
   }
@@ -134,7 +134,7 @@
     return throw 42;
   core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
   bool get isEven => throw 42; // Ok.
-       ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+       ^^^";
   function isEven() → Never
     return throw 42;
 }
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect
index 9fe722e..b62bef7 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect
@@ -111,19 +111,19 @@
 }
 static method num() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Error.
   ^" in null;
   }
 }
 static method ceil() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Ok.
   ^" in null;
   }
   function floor() → core::int {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int floor() {} // Error.
   ^" in null;
   }
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect
index 6d68160..b62bef7 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect
@@ -111,19 +111,19 @@
 }
 static method num() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Error.
   ^" in null;
   }
 }
 static method ceil() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Ok.
   ^" in null;
   }
   function floor() → core::int {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int floor() {} // Error.
   ^" in null;
   }
@@ -134,7 +134,7 @@
     return throw 42;
   core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
   bool get isEven => throw 42; // Ok.
-       ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+       ^^^";
   function isEven() → Never
     return throw 42;
 }
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect
index 9fe722e..b62bef7 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect
@@ -111,19 +111,19 @@
 }
 static method num() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Error.
   ^" in null;
   }
 }
 static method ceil() → invalid-type {
   function ceil() → core::int {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int ceil() {} // Ok.
   ^" in null;
   }
   function floor() → core::int {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int floor() {} // Error.
   ^" in null;
   }
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
index 3797b04..1dca435 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
@@ -215,61 +215,61 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.method();
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.method;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.method;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.getter;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.setter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.getter = 42;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.getter = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.setter = 42;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.property;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.property = 42;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c + 0;
-    ^";
+    ^" in c{<unresolved>}.+(0);
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   -c;
-  ^";
+  ^" in c{<unresolved>}.unary-();
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c[42];
-   ^";
+   ^" in c{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c[42] = 0;
-   ^";
+   ^" in c{<unresolved>}.[]=(42, 0);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
index 3797b04..1dca435 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
@@ -215,61 +215,61 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.method();
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.method;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.method;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.getter;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.setter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.getter = 42;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.getter = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.setter = 42;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.property;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.property = 42;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property = 42;
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c + 0;
-    ^";
+    ^" in c{<unresolved>}.+(0);
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   -c;
-  ^";
+  ^" in c{<unresolved>}.unary-();
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c[42];
-   ^";
+   ^" in c{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c[42] = 0;
-   ^";
+   ^" in c{<unresolved>}.[]=(42, 0);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
index 6f3ad1d..9fbb059 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
@@ -138,19 +138,19 @@
 extension _extension#2 on core::String* {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-static field core::String* topLevel2 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-static field core::String* topLevel3 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-static field core::String* topLevel4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
@@ -176,19 +176,19 @@
   self::_extension#2|get#call("")(){() →* core::String*};
 }
 static method errors() → dynamic {
-  let final Never* #t5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(10);
    ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-  let final Never* #t6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(\"10\");
    ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-  let final Never* #t7 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(10);
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-  let final Never* #t8 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(\"10\");
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
index 55e391b..f07583d 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
@@ -138,19 +138,19 @@
 extension _extension#2 on core::String* {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-static field core::String* topLevel2 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-static field core::String* topLevel3 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-static field core::String* topLevel4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
@@ -176,19 +176,19 @@
   self::_extension#2|get#call("")(){() →* core::String*};
 }
 static method errors() → dynamic {
-  let final Never* #t5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(10);
    ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-  let final Never* #t6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(\"10\");
    ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-  let final Never* #t7 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(10);
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-  let final Never* #t8 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(\"10\");
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
index cef7b3b..0e8aa01 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
@@ -855,7 +855,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
 final field1 = classA.method(); // Expect method not found.
-                      ^^^^^^";
+                      ^^^^^^" in self::classA{<unresolved>}.method();
 static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
 static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
 static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
@@ -900,7 +900,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method(); // Expect method not found.
-         ^^^^^^";
+         ^^^^^^" in classA{<unresolved>}.method();
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
@@ -939,7 +939,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method();
-         ^^^^^^";
+         ^^^^^^" in classA{<unresolved>}.method();
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
index cef7b3b..0e8aa01 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
@@ -855,7 +855,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
 final field1 = classA.method(); // Expect method not found.
-                      ^^^^^^";
+                      ^^^^^^" in self::classA{<unresolved>}.method();
 static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
 static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
 static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
@@ -900,7 +900,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method(); // Expect method not found.
-         ^^^^^^";
+         ^^^^^^" in classA{<unresolved>}.method();
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
@@ -939,7 +939,7 @@
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method();
-         ^^^^^^";
+         ^^^^^^" in classA{<unresolved>}.method();
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::A*>(classA);
   self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
index 96b1de2..101c651 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
@@ -71,15 +71,15 @@
 }
 static method errors() → dynamic {
   core::int* value;
-  value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
              ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
-     ^^^^^^^^";
-  value = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
+     ^^^^^^^^" in ""{<unresolved>}.hashCode = 42;
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
              ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
index 5c1250b..bfce2e3 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
@@ -71,15 +71,15 @@
 }
 static method errors() → dynamic {
   core::int* value;
-  value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
              ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
-     ^^^^^^^^";
-  value = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
+     ^^^^^^^^" in ""{<unresolved>}.hashCode = 42;
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
              ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
@@ -93,4 +93,4 @@
 
 Extra constant evaluation status:
 Evaluated: EqualsCall @ org-dartlang-testcase:///conflict_with_object.dart:21:19 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 37, effectively constant: 1
+Extra constant evaluation: evaluated: 31, effectively constant: 1
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
index a6fe24f..3373345 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
@@ -86,5 +86,5 @@
  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
   c2.uniqueMethod2();
-     ^^^^^^^^^^^^^";
+     ^^^^^^^^^^^^^" in c2{<unresolved>}.uniqueMethod2();
 }
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
index a6fe24f..3373345 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
@@ -86,5 +86,5 @@
  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
   c2.uniqueMethod2();
-     ^^^^^^^^^^^^^";
+     ^^^^^^^^^^^^^" in c2{<unresolved>}.uniqueMethod2();
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
index 9f115ce..9811ed6 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
@@ -31,10 +31,10 @@
 static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method error() → dynamic {
   self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
-  self::expect(null, let final self::GenericClass<core::int*>* #t1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
+  self::expect(null, let final self::GenericClass<core::int*>* #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
   expect(null, GenericExtension<double>(genericClass).setter = null);
-                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t3 = null in let final void #t4 = self::GenericExtension|set#setter<core::double*>(#t1, #t3) in #t3);
+                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
diff --git a/pkg/front_end/testcases/extensions/folder.options b/pkg/front_end/testcases/extensions/folder.options
deleted file mode 100644
index 85bbbb6..0000000
--- a/pkg/front_end/testcases/extensions/folder.options
+++ /dev/null
@@ -1 +0,0 @@
---enable-experiment=extension-methods
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
index 9ae037b..6666d8f 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
@@ -113,32 +113,32 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
   expect(0, c.m2);
-              ^^");
+              ^^" in c{<unresolved>}.m2);
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:31:5: Error: The setter 'm1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
   c.m1 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m1 = 2;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3;
-    ^^";
+    ^^" in c{<unresolved>}.m3;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m3 = 2;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4;
-    ^^";
+    ^^" in c{<unresolved>}.m4;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m4 = 2;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
index 9ae037b..6666d8f 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
@@ -113,32 +113,32 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
   expect(0, c.m2);
-              ^^");
+              ^^" in c{<unresolved>}.m2);
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:31:5: Error: The setter 'm1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
   c.m1 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m1 = 2;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3;
-    ^^";
+    ^^" in c{<unresolved>}.m3;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m3 = 2;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4;
-    ^^";
+    ^^" in c{<unresolved>}.m4;
   invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4 = 2;
-    ^^";
+    ^^" in c{<unresolved>}.m4 = 2;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
index 42cf217..1dadbb1 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
@@ -79,30 +79,30 @@
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
   c.staticMethod();
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
   c.staticMethod;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
   c.staticProperty;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
   c.staticProperty = 42;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
   c.staticField;
-    ^^^^^^^^^^^";
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
   c.staticField = 42;
-    ^^^^^^^^^^^";
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField = 42;
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
index 42cf217..1dadbb1 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
@@ -79,30 +79,30 @@
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
   c.staticMethod();
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
   c.staticMethod;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
   c.staticProperty;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
   c.staticProperty = 42;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
   c.staticField;
-    ^^^^^^^^^^^";
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField;
   invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
   c.staticField = 42;
-    ^^^^^^^^^^^";
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField = 42;
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
index b85efb2..0dd6942 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
@@ -22,7 +22,7 @@
 //   Extension<int>(c1).method(null);
 //   ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Getter not found: 'foo'.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
 //   Extension(c1).foo;
 //                 ^^^
 //
@@ -186,11 +186,11 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
   Extension<int>(c1).method(null);
   ^^^^^^^^^"{dynamic}.method(null);
-  self::Extension|method(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
+  self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
             ^" in s as{TypeError} self::Class*, null);
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Getter not found: 'foo'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
   Extension(c1).foo;
                 ^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:30:17: Error: Setter not found: 'foo'.
@@ -243,11 +243,11 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
   GenericExtension<int, String>(c2).method();
   ^^^^^^^^^^^^^^^^"{dynamic}.method();
-  self::GenericExtension|method<dynamic>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
+  self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
                    ^" in s as{TypeError} self::GenericClass<dynamic>*);
-  self::GenericExtension|method<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension<int>(s).method();
                         ^" in s as{TypeError} self::GenericClass<core::int*>*);
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
index b85efb2..0dd6942 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
 //   Extension<int>(c1).method(null);
 //   ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Getter not found: 'foo'.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
 //   Extension(c1).foo;
 //                 ^^^
 //
@@ -186,11 +186,11 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
   Extension<int>(c1).method(null);
   ^^^^^^^^^"{dynamic}.method(null);
-  self::Extension|method(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
+  self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
             ^" in s as{TypeError} self::Class*, null);
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Getter not found: 'foo'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
   Extension(c1).foo;
                 ^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:30:17: Error: Setter not found: 'foo'.
@@ -243,11 +243,11 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
   GenericExtension<int, String>(c2).method();
   ^^^^^^^^^^^^^^^^"{dynamic}.method();
-  self::GenericExtension|method<dynamic>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
+  self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
                    ^" in s as{TypeError} self::GenericClass<dynamic>*);
-  self::GenericExtension|method<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension<int>(s).method();
                         ^" in s as{TypeError} self::GenericClass<core::int*>*);
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
index 6317f7b..94d05b9 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
@@ -6,7 +6,7 @@
 //   Extension(s).method();
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Getter not found: 'method'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
 //   Extension(s).method;
 //                ^^^^^^
 //
@@ -14,7 +14,7 @@
 //   Extension(s).method = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Getter not found: 'getter'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
 //   Extension(s).getter;
 //                ^^^^^^
 //
@@ -22,7 +22,7 @@
 //   Extension(s).getter = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Getter not found: 'setter'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
 //   Extension(s).setter;
 //                ^^^^^^
 //
@@ -30,7 +30,7 @@
 //   Extension(s).setter = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
 //   Extension(s).property;
 //                ^^^^^^^^
 //
@@ -38,7 +38,7 @@
 //   Extension(s).property = 42;
 //                ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
 //   Extension(s).field;
 //                ^^^^^
 //
@@ -71,31 +71,31 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
   Extension(s).method();
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Getter not found: 'method'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
   Extension(s).method;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
   Extension(s).method = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Getter not found: 'getter'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
   Extension(s).getter;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
   Extension(s).getter = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Getter not found: 'setter'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
   Extension(s).setter;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
   Extension(s).setter = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Getter not found: 'property'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
   Extension(s).property;
                ^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
   Extension(s).property = 42;
                ^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Getter not found: 'field'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
   Extension(s).field;
                ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
index 6317f7b..94d05b9 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 //   Extension(s).method();
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Getter not found: 'method'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
 //   Extension(s).method;
 //                ^^^^^^
 //
@@ -14,7 +14,7 @@
 //   Extension(s).method = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Getter not found: 'getter'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
 //   Extension(s).getter;
 //                ^^^^^^
 //
@@ -22,7 +22,7 @@
 //   Extension(s).getter = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Getter not found: 'setter'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
 //   Extension(s).setter;
 //                ^^^^^^
 //
@@ -30,7 +30,7 @@
 //   Extension(s).setter = 42;
 //                ^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
 //   Extension(s).property;
 //                ^^^^^^^^
 //
@@ -38,7 +38,7 @@
 //   Extension(s).property = 42;
 //                ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
 //   Extension(s).field;
 //                ^^^^^
 //
@@ -71,31 +71,31 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
   Extension(s).method();
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Getter not found: 'method'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
   Extension(s).method;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
   Extension(s).method = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Getter not found: 'getter'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
   Extension(s).getter;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
   Extension(s).getter = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Getter not found: 'setter'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
   Extension(s).setter;
                ^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
   Extension(s).setter = 42;
                ^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Getter not found: 'property'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
   Extension(s).property;
                ^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
   Extension(s).property = 42;
                ^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Getter not found: 'field'.
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
   Extension(s).field;
                ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
index 13017ea..aa7f4d8 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
@@ -25,7 +25,7 @@
 //   final int property2 = 42;
 //             ^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
 //     field;
 //     ^^^^^
 //
@@ -37,7 +37,7 @@
 //     property;
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Getter not found: 'property2'.
+// pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
 //     property2;
 //     ^^^^^^^^^
 //
@@ -45,7 +45,7 @@
 //     property2 = 23;
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
 //   ext(c).field;
 //          ^^^^^
 //
@@ -57,7 +57,7 @@
 //   ext(c).property;
 //          ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Getter not found: 'property2'.
+// pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
 //   ext(c).property2;
 //          ^^^^^^^^^
 //
@@ -128,7 +128,7 @@
 static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
 static set ext|property2(core::int* value) → void {}
 static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
     field;
     ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:21:5: Error: Setter not found: 'field'.
@@ -138,7 +138,7 @@
     property;
     ^^^^^^^^";
   self::ext|set#property<self::ext|method::T*>(#this, 23);
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Getter not found: 'property2'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
     property2;
     ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:25:5: Error: Setter not found: 'property2'.
@@ -154,29 +154,29 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
   c.field;
-    ^^^^^";
+    ^^^^^" in c{<unresolved>}.field;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:35:5: Error: The setter 'field' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'field'.
   c.field = 23;
-    ^^^^^";
+    ^^^^^" in c{<unresolved>}.field = 23;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:36:5: Error: The getter 'property' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   c.property;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property;
   self::ext|set#property<core::int*>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
   c.property2;
-    ^^^^^^^^^";
+    ^^^^^^^^^" in c{<unresolved>}.property2;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:39:5: Error: The setter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property2'.
   c.property2 = 23;
-    ^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Getter not found: 'field'.
+    ^^^^^^^^^" in c{<unresolved>}.property2 = 23;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
   ext(c).field;
          ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:41:10: Error: Setter not found: 'field'.
@@ -186,7 +186,7 @@
   ext(c).property;
          ^^^^^^^^";
   self::ext|set#property<core::int*>(c, 23);
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Getter not found: 'property2'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
   ext(c).property2;
          ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
index 13017ea..aa7f4d8 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
 //   final int property2 = 42;
 //             ^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
 //     field;
 //     ^^^^^
 //
@@ -37,7 +37,7 @@
 //     property;
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Getter not found: 'property2'.
+// pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
 //     property2;
 //     ^^^^^^^^^
 //
@@ -45,7 +45,7 @@
 //     property2 = 23;
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Getter not found: 'field'.
+// pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
 //   ext(c).field;
 //          ^^^^^
 //
@@ -57,7 +57,7 @@
 //   ext(c).property;
 //          ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Getter not found: 'property2'.
+// pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
 //   ext(c).property2;
 //          ^^^^^^^^^
 //
@@ -128,7 +128,7 @@
 static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
 static set ext|property2(core::int* value) → void {}
 static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
     field;
     ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:21:5: Error: Setter not found: 'field'.
@@ -138,7 +138,7 @@
     property;
     ^^^^^^^^";
   self::ext|set#property<self::ext|method::T*>(#this, 23);
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Getter not found: 'property2'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
     property2;
     ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:25:5: Error: Setter not found: 'property2'.
@@ -154,29 +154,29 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
   c.field;
-    ^^^^^";
+    ^^^^^" in c{<unresolved>}.field;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:35:5: Error: The setter 'field' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'field'.
   c.field = 23;
-    ^^^^^";
+    ^^^^^" in c{<unresolved>}.field = 23;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:36:5: Error: The getter 'property' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   c.property;
-    ^^^^^^^^";
+    ^^^^^^^^" in c{<unresolved>}.property;
   self::ext|set#property<core::int*>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
   c.property2;
-    ^^^^^^^^^";
+    ^^^^^^^^^" in c{<unresolved>}.property2;
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:39:5: Error: The setter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property2'.
   c.property2 = 23;
-    ^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Getter not found: 'field'.
+    ^^^^^^^^^" in c{<unresolved>}.property2 = 23;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
   ext(c).field;
          ^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:41:10: Error: Setter not found: 'field'.
@@ -186,7 +186,7 @@
   ext(c).property;
          ^^^^^^^^";
   self::ext|set#property<core::int*>(c, 23);
-  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Getter not found: 'property2'.
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
   ext(c).property2;
          ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
index 1a16509..4dbcce1 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
+// pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
 //   C._staticFoo();
 //     ^^^^^^^^^^
 //
@@ -31,8 +31,8 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_foo'.
   c._foo();
-    ^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
+    ^^^^" in c{<unresolved>}._foo();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
   c.{iss::C::foo}(){() →* dynamic};
@@ -41,7 +41,7 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
   c._bar();
-    ^^^^";
+    ^^^^" in c{<unresolved>}._bar();
 }
 
 library;
@@ -114,5 +114,5 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
   c._bar();
-    ^^^^";
+    ^^^^" in c{<unresolved>}._bar();
 }
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
index 1a16509..4dbcce1 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
+// pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
 //   C._staticFoo();
 //     ^^^^^^^^^^
 //
@@ -31,8 +31,8 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_foo'.
   c._foo();
-    ^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
+    ^^^^" in c{<unresolved>}._foo();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
   c.{iss::C::foo}(){() →* dynamic};
@@ -41,7 +41,7 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
   c._bar();
-    ^^^^";
+    ^^^^" in c{<unresolved>}._bar();
 }
 
 library;
@@ -114,5 +114,5 @@
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
   c._bar();
-    ^^^^";
+    ^^^^" in c{<unresolved>}._bar();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
index 5609379..568f207 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
@@ -30,9 +30,9 @@
   final core::List<core::Object*>* list = <core::Object*>[];
   invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
   list.safeFirst();
-       ^^^^^^^^^";
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
   final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
                  ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
index 4627c59..7dc278b 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
@@ -30,9 +30,9 @@
   final core::List<core::Object*>* list = core::_GrowableList::•<core::Object*>(0);
   invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
   list.safeFirst();
-       ^^^^^^^^^";
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
   final core::List<(core::int*) →* void>* list2 = core::_GrowableList::•<(core::int*) →* void>(0);
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
                  ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
index 26ad712..8f03ff9 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
@@ -43,6 +43,6 @@
   let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
   Ext(c).id++;
-         ^^";
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
index 26ad712..8f03ff9 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
@@ -43,6 +43,6 @@
   let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
   Ext(c).id++;
-         ^^";
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
index 00f8324..a8d4f63 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
@@ -27,7 +27,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   args.foo('1', 2);
-       ^^^";
+       ^^^" in args{<unresolved>}.foo("1", 2);
 }
 static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
   core::print(1);
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
index 00f8324..a8d4f63 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   args.foo('1', 2);
-       ^^^";
+       ^^^" in args{<unresolved>}.foo("1", 2);
 }
 static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
   core::print(1);
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
index b967f55..1a705d7 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
@@ -25,6 +25,6 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   3.foo();
-    ^^^";
+    ^^^" in 3{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
index b967f55..1a705d7 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
@@ -25,6 +25,6 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   3.foo();
-    ^^^";
+    ^^^" in 3{<unresolved>}.foo();
 }
 static method main() → dynamic {}
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 b657553..b9fb9f7 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
@@ -14,7 +14,7 @@
     : super core::Object::•()
     ;
   method test1(generic-covariant-impl self::Foo::S* x) → void {
-    (self::Foo::S*) →* self::Foo::S* f = let final Never* #t1 = 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:11: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 b657553..b9fb9f7 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
@@ -14,7 +14,7 @@
     : super core::Object::•()
     ;
   method test1(generic-covariant-impl self::Foo::S* x) → void {
-    (self::Foo::S*) →* self::Foo::S* f = let final Never* #t1 = 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:11: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/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
index e492265..6d6179a 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
@@ -34,6 +34,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^"{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
index d71c075..29bae48 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
@@ -34,6 +34,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^"{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
index 4fa3d96..ea9e928 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
@@ -120,25 +120,29 @@
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   nonStruct.method();
-            ^^^^^^";
+            ^^^^^^" in nonStruct{<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   nonStruct.property = nonStruct.property;
-            ^^^^^^^^";
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property;
+                                 ^^^^^^^^" in nonStruct{<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   new NonStruct().method();
-                  ^^^^^^";
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   new NonStruct().property;
-                  ^^^^^^^^";
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   new NonStruct().property = null;
-                  ^^^^^^^^";
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
 }
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
index 4fa3d96..ea9e928 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
@@ -120,25 +120,29 @@
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   nonStruct.method();
-            ^^^^^^";
+            ^^^^^^" in nonStruct{<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   nonStruct.property = nonStruct.property;
-            ^^^^^^^^";
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property;
+                                 ^^^^^^^^" in nonStruct{<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   new NonStruct().method();
-                  ^^^^^^";
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   new NonStruct().property;
-                  ^^^^^^^^";
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
   invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   new NonStruct().property = null;
-                  ^^^^^^^^";
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
 }
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
index 4a003d0..1e4a440 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
@@ -14,15 +14,15 @@
 //   expect(237, PublicExtension("")._privateMethod2());
 //                                   ^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
+// pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
 //   expect(24, _PrivateExtension.publicStaticMethod1());
 //              ^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
+// pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
 //   expect(78, _PrivateExtension._privateStaticMethod1());
 //              ^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
+// pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
 //   expect(732, PublicExtension._privateStaticMethod2());
 //                               ^^^^^^^^^^^^^^^^^^^^^
 //
@@ -66,23 +66,23 @@
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:17:17: Error: The method 'publicMethod1' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named 'publicMethod1'.
   expect(42, \"\".publicMethod1());
-                ^^^^^^^^^^^^^");
+                ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod1());
   pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:18:17: Error: The method '_privateMethod1' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod1'.
   expect(87, \"\"._privateMethod1());
-                ^^^^^^^^^^^^^^^");
+                ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod1());
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:19:18: Error: The method '_privateMethod2' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod2'.
   expect(237, \"\"._privateMethod2());
-                 ^^^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod2());
   pri::expect(473, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:20:18: Error: The method 'publicMethod3' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named 'publicMethod3'.
   expect(473, \"\".publicMethod3());
-                 ^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod3());
   pri::expect(586, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:21:18: Error: The method '_privateMethod3' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod3'.
   expect(586, \"\"._privateMethod3());
-                 ^^^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod3());
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
   expect(42, _PrivateExtension(\"\").publicMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}.publicMethod1());
@@ -92,13 +92,13 @@
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
   expect(237, PublicExtension(\"\")._privateMethod2());
                                   ^^^^^^^^^^^^^^^");
-  pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
+  pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
   expect(24, _PrivateExtension.publicStaticMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}.publicStaticMethod1());
-  pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
+  pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
   expect(78, _PrivateExtension._privateStaticMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}._privateStaticMethod1());
-  pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
+  pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
   expect(732, PublicExtension._privateStaticMethod2());
                               ^^^^^^^^^^^^^^^^^^^^^");
 }
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
index 4a003d0..1e4a440 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
@@ -14,15 +14,15 @@
 //   expect(237, PublicExtension("")._privateMethod2());
 //                                   ^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
+// pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
 //   expect(24, _PrivateExtension.publicStaticMethod1());
 //              ^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
+// pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
 //   expect(78, _PrivateExtension._privateStaticMethod1());
 //              ^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
+// pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
 //   expect(732, PublicExtension._privateStaticMethod2());
 //                               ^^^^^^^^^^^^^^^^^^^^^
 //
@@ -66,23 +66,23 @@
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:17:17: Error: The method 'publicMethod1' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named 'publicMethod1'.
   expect(42, \"\".publicMethod1());
-                ^^^^^^^^^^^^^");
+                ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod1());
   pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:18:17: Error: The method '_privateMethod1' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod1'.
   expect(87, \"\"._privateMethod1());
-                ^^^^^^^^^^^^^^^");
+                ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod1());
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:19:18: Error: The method '_privateMethod2' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod2'.
   expect(237, \"\"._privateMethod2());
-                 ^^^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod2());
   pri::expect(473, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:20:18: Error: The method 'publicMethod3' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named 'publicMethod3'.
   expect(473, \"\".publicMethod3());
-                 ^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod3());
   pri::expect(586, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:21:18: Error: The method '_privateMethod3' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing method, or defining a method named '_privateMethod3'.
   expect(586, \"\"._privateMethod3());
-                 ^^^^^^^^^^^^^^^");
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod3());
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
   expect(42, _PrivateExtension(\"\").publicMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}.publicMethod1());
@@ -92,13 +92,13 @@
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
   expect(237, PublicExtension(\"\")._privateMethod2());
                                   ^^^^^^^^^^^^^^^");
-  pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
+  pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
   expect(24, _PrivateExtension.publicStaticMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}.publicStaticMethod1());
-  pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
+  pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
   expect(78, _PrivateExtension._privateStaticMethod1());
              ^^^^^^^^^^^^^^^^^"{dynamic}._privateStaticMethod1());
-  pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
+  pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
   expect(732, PublicExtension._privateStaticMethod2());
                               ^^^^^^^^^^^^^^^^^^^^^");
 }
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
index 09b420f..b6e0e94 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
 //   Extension.instanceMethod();
 //             ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Getter not found: 'instanceMethod'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
 //   Extension.instanceMethod;
 //             ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Getter not found: 'instanceProperty'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
 //   Extension.instanceProperty;
 //             ^^^^^^^^^^^^^^^^
 //
@@ -49,13 +49,13 @@
   return 42;
 static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
             ^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Getter not found: 'instanceMethod'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
   Extension.instanceMethod;
             ^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Getter not found: 'instanceProperty'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
   Extension.instanceProperty;
             ^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:17:13: Error: Setter not found: 'instanceProperty'.
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
index 09b420f..b6e0e94 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
 //   Extension.instanceMethod();
 //             ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Getter not found: 'instanceMethod'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
 //   Extension.instanceMethod;
 //             ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Getter not found: 'instanceProperty'.
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
 //   Extension.instanceProperty;
 //             ^^^^^^^^^^^^^^^^
 //
@@ -49,13 +49,13 @@
   return 42;
 static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
             ^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Getter not found: 'instanceMethod'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
   Extension.instanceMethod;
             ^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Getter not found: 'instanceProperty'.
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
   Extension.instanceProperty;
             ^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:17:13: Error: Setter not found: 'instanceProperty'.
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
index 3899ae5..d56bc4b 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
@@ -53,7 +53,7 @@
 static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method Extension|errors(lowered final self::Class* #this) → dynamic {
-  (core::int*) →* core::int* intId = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
     int Function(int) intId = getter;
                               ^" in self::Extension|get#getter(#this) as{TypeError} (core::int*) →* core::int*;
 }
@@ -66,10 +66,10 @@
 }
 static method errors() → dynamic {
   self::Class* c = new self::Class::•();
-  (core::num*) →* core::num* numId = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
   num Function(num) numId = c.getter;
                               ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
-  (core::bool*) →* core::bool* boolId = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
   bool Function(bool) boolId = Extension(c).getter;
                                             ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
 }
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
index 3899ae5..d56bc4b 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
 static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method Extension|errors(lowered final self::Class* #this) → dynamic {
-  (core::int*) →* core::int* intId = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
     int Function(int) intId = getter;
                               ^" in self::Extension|get#getter(#this) as{TypeError} (core::int*) →* core::int*;
 }
@@ -66,10 +66,10 @@
 }
 static method errors() → dynamic {
   self::Class* c = new self::Class::•();
-  (core::num*) →* core::num* numId = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
   num Function(num) numId = c.getter;
                               ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
-  (core::bool*) →* core::bool* boolId = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
   bool Function(bool) boolId = Extension(c).getter;
                                             ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
 }
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart b/pkg/front_end/testcases/general/abstract_instantiation.dart
new file mode 100644
index 0000000..9aea66f
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 A {}
+
+abstract class B implements A {
+  factory B() = A;
+}
+
+test() {
+  new A();
+  new B();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline.expect
new file mode 100644
index 0000000..ab0aa6b
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+abstract class A {}
+
+abstract class B implements A {
+  factory B() = A;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..561a10b
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+abstract class A {}
+
+abstract class B implements A {
+  factory B() = A;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
new file mode 100644
index 0000000..36647b1
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
+// 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'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+//   factory B() = A;
+//                 ^
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:12:7: Error: The class 'A' is abstract and can't be instantiated.
+//   new A();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object implements self::A {
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*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'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method test() → dynamic {
+  throw new core::AbstractClassInstantiationError::•("A");
+  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'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..ff08754
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
+// 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'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+//   factory B() = A;
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+abstract class B extends core::Object implements self::A {
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*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'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..36647b1
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
+// 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'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+//   factory B() = A;
+//                 ^
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:12:7: Error: The class 'A' is abstract and can't be instantiated.
+//   new A();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object implements self::A {
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*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'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method test() → dynamic {
+  throw new core::AbstractClassInstantiationError::•("A");
+  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'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_members.dart b/pkg/front_end/testcases/general/abstract_members.dart
index 967a96e..656f193 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart
+++ b/pkg/front_end/testcases/general/abstract_members.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for 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 Interface1 {
   void interfaceMethod1() {}
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
index b4b8531..67d0267 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
@@ -2,37 +2,37 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/abstract_members.dart:19:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
 // abstract class A implements Interface1, Interface2, Interface3 {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
 // abstract class B extends A {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property3=
@@ -48,59 +48,59 @@
 //
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
 // class MyMock1 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
 // class MyMock2 extends MyMock1 {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property2=
@@ -117,68 +117,68 @@
 //
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:12: Context: 'A.property2=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
 //   void set property2(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:64:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
 // abstract class D extends C implements Interface2 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:59:8: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
 //   void interfaceMethod1(_) {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:72:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
 // abstract class F extends E implements Interface1 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:67:12: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
 //   void set interfaceMethod1(_) {}
 //            ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:84:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
 // abstract class H extends G implements Foo {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:75:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
 //   void foo() {}
 //        ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:79:14: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
 //   Object get foo => null;
 //              ^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:96:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
 // abstract class J extends I implements Bar {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:87:14: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
 //   Object get foo => null;
 //              ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:91:10: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
 //   Object foo() {}
 //          ^^^
 //
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
index e5153b7..49ba0ba 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
@@ -2,37 +2,37 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/abstract_members.dart:19:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
 // abstract class A implements Interface1, Interface2, Interface3 {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
 // abstract class B extends A {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property3=
@@ -48,59 +48,59 @@
 //
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
 // class MyMock1 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
 // class MyMock2 extends MyMock1 {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property2=
@@ -117,68 +117,68 @@
 //
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:12: Context: 'A.property2=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
 //   void set property2(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:64:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
 // abstract class D extends C implements Interface2 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:59:8: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
 //   void interfaceMethod1(_) {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:72:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
 // abstract class F extends E implements Interface1 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:67:12: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
 //   void set interfaceMethod1(_) {}
 //            ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:84:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
 // abstract class H extends G implements Foo {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:75:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
 //   void foo() {}
 //        ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:79:14: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
 //   Object get foo => null;
 //              ^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:96:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
 // abstract class J extends I implements Bar {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:87:14: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
 //   Object get foo => null;
 //              ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:91:10: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
 //   Object foo() {}
 //          ^^^
 //
@@ -425,32 +425,32 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> SymbolConstant(#interfaceMethod2)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> SymbolConstant(#abstractMethod)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> SymbolConstant(#interfaceMethod1)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> SymbolConstant(#interfaceMethod3)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> SymbolConstant(#property3=)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> SymbolConstant(#interfaceMethod2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> SymbolConstant(#abstractMethod)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> SymbolConstant(#interfaceMethod1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> SymbolConstant(#interfaceMethod3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> SymbolConstant(#property3=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> SymbolConstant(#interfaceMethod1=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> SymbolConstant(#property1=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> ListConstant(const <Type*>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> SymbolConstant(#interfaceMethod1=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> SymbolConstant(#property1=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> SymbolConstant(#property2=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> SymbolConstant(#property2=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
 Extra constant evaluation: evaluated: 73, effectively constant: 28
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.expect b/pkg/front_end/testcases/general/accessors.dart.weak.expect
index b57abd58..d09f07b 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.expect
@@ -34,7 +34,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
       print(onlySetter);
-            ^^^^^^^^^^");
+            ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
       throw "No error thrown";
     }
     on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
@@ -47,7 +47,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
     print(onlySetter);
-          ^^^^^^^^^^");
+          ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
     this.{self::C::onlySetter} = "hest";
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
index b57abd58..d09f07b 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
       print(onlySetter);
-            ^^^^^^^^^^");
+            ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
       throw "No error thrown";
     }
     on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
@@ -47,7 +47,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
     print(onlySetter);
-          ^^^^^^^^^^");
+          ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
     this.{self::C::onlySetter} = "hest";
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.expect
index cf6e3f3..2b37371 100644
--- a/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.expect
@@ -23,7 +23,7 @@
 static method test() → dynamic {
   function bounded<X extends core::num>(X x) → X
     return x;
-  core::String a = let final Never #t1 = bounded<Never>(let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:7:22: Error: The argument type 'String' can't be assigned to the parameter type 'Never'.
+  core::String a = let final Never #t1 = bounded<Never>(invalid-expression "pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:7:22: Error: The argument type 'String' can't be assigned to the parameter type 'Never'.
   String a = bounded('');
                      ^" in "" as{TypeError,ForNonNullableByDefault} Never){(Never) → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::String b = bounded<core::String>(""){(core::String) → core::String};
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
index 0fce68f..d46ee72 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
@@ -30,18 +30,18 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x();
-   ^";
+   ^" in x{<unresolved>}.call();
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
-   ^";
+   ^" in x{<unresolved>}.call(3);
   f(5, 2);
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
-    ^^^^";
+    ^^^^" in x{<unresolved>}.call();
   f.call;
   f(5, 2);
 }
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
index 0fce68f..d46ee72 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
@@ -30,18 +30,18 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x();
-   ^";
+   ^" in x{<unresolved>}.call();
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
-   ^";
+   ^" in x{<unresolved>}.call(3);
   f(5, 2);
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
-    ^^^^";
+    ^^^^" in x{<unresolved>}.call();
   f.call;
   f(5, 2);
 }
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
index a688e6b..8f4896c 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
@@ -12,7 +12,7 @@
 static method test() → void {
   dynamic a = 5;
   core::String* b = a.{core::Object::toString}(){() →* core::String*};
-  b = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
       ^" in 42 as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
index a688e6b..8f4896c 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 static method test() → void {
   dynamic a = 5;
   core::String* b = a.{core::Object::toString}(){() →* core::String*};
-  b = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
       ^" in 42 as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
index 7b0256f..48c5ec01a 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
@@ -30,8 +30,8 @@
 }
 static method foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
 static method test() → void {
-  self::foo<core::String*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t2 = new self::A::•() in #t2 == null ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
index 7b0256f..48c5ec01a 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
@@ -30,8 +30,8 @@
 }
 static method foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
 static method test() → void {
-  self::foo<core::String*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t2 = new self::A::•() in #t2 == null ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
index 06e4055..397db9f 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
@@ -69,8 +69,8 @@
   core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
   core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
-  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in (let final self::C* #t4 = c in #t4 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
+                                           ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
index 8558dba..8f7030e 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
@@ -69,8 +69,8 @@
   core::List<core::String*>* list4 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
   core::List<core::String*>* list5 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
-  core::List<core::String*>* list6 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<dynamic>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  core::List<core::String*>* list6 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in (let final self::C* #t4 = c in #t4 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
+                                           ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/call.dart.weak.expect b/pkg/front_end/testcases/general/call.dart.weak.expect
index bb3fe1b..c717175 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.expect
@@ -147,28 +147,28 @@
 static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
 static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
 static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
-static field dynamic nothing1 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
 var nothing1 = closure();
                       ^" in self::closure{<inapplicable>}.();
-static field dynamic nothing2 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
 var nothing2 = closure.call();
                            ^" in self::closure{<inapplicable>}.();
-static field dynamic nothing3 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
 var nothing3 = closure.call.call();
                                 ^" in self::closure.call{<inapplicable>}.();
-static field dynamic nothing4 = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
 var nothing4 = closure.call.call.call();
                                      ^" in self::closure.call.call{<inapplicable>}.();
-static field dynamic nothing5 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
 var nothing5 = callable();
                        ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
-static field dynamic nothing6 = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
 var nothing6 = callable.call();
                             ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
-static field dynamic nothing7 = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
 var nothing7 = callable.call.call();
                                  ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
-static field dynamic nothing8 = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
+static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
                                       ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
 static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
@@ -196,31 +196,31 @@
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
                               ^";
-  dynamic string6 = let final self::CallableGetter* #t11 = callableGetter in let final core::int* #t12 = 1 in #t11.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t12);
+  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
   dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
   dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
-  invalid-type nothing1 = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = closure();
                         ^" in closure{<inapplicable>}.();
-  invalid-type nothing2 = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
   var nothing2 = closure.call();
                              ^" in closure{<inapplicable>}.();
-  invalid-type nothing3 = let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = closure.call.call();
                                   ^" in closure.call{<inapplicable>}.();
-  invalid-type nothing4 = let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
   var nothing4 = closure.call.call.call();
                                        ^" in closure.call.call{<inapplicable>}.();
-  invalid-type nothing5 = let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
   var nothing5 = callable();
                          ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
-  invalid-type nothing6 = let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
   var nothing6 = callable.call();
                               ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
-  invalid-type nothing7 = let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
   var nothing7 = callable.call.call();
                                    ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
-  invalid-type nothing8 = let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
                                         ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
   dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
diff --git a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
new file mode 100644
index 0000000..5d9b478
--- /dev/null
+++ b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
@@ -0,0 +1,240 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   var string5 = callableGetter(1);
+//                               ^
+//
+// pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing1 = closure();
+//                         ^
+//
+// pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing2 = closure.call();
+//                              ^
+//
+// pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing3 = closure.call.call();
+//                                   ^
+//
+// pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing4 = closure.call.call.call();
+//                                        ^
+//
+// pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing5 = callable();
+//                          ^
+//
+// pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing6 = callable.call();
+//                               ^
+//
+// pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing7 = callable.call.call();
+//                                    ^
+//
+// pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing8 = callable.call.call.call();
+//                                         ^
+//
+// pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   var nothing9 = callableGetter();
+//                                ^
+//
+// pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var string5 = callableGetter(1);
+//                             ^
+//
+// pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing1 = closure();
+//                       ^
+//
+// pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing2 = closure.call();
+//                            ^
+//
+// pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing3 = closure.call.call();
+//                                 ^
+//
+// pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing4 = closure.call.call.call();
+//                                      ^
+//
+// pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing5 = callable();
+//                        ^
+//
+// pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing6 = callable.call();
+//                             ^
+//
+// pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing7 = callable.call.call();
+//                                  ^
+//
+// pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing8 = callable.call.call.call();
+//                                       ^
+//
+// pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var nothing9 = callableGetter();
+//                              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Callable extends core::Object {
+  synthetic constructor •() → self::Callable*
+    : super core::Object::•()
+    ;
+  method call(dynamic x) → dynamic {
+    return "string";
+  }
+  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 CallableGetter extends core::Object {
+  synthetic constructor •() → self::CallableGetter*
+    : super core::Object::•()
+    ;
+  get call() → dynamic
+    return new self::Callable::•();
+  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 field (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
+static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
+static field self::Callable* callable = new self::Callable::•();
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
+static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
+static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var string5 = callableGetter(1);
+                            ^";
+static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
+static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
+var nothing1 = closure();
+                      ^" in self::closure{<inapplicable>}.();
+static field dynamic nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
+var nothing2 = closure.call();
+                           ^" in self::closure{<inapplicable>}.();
+static field dynamic nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
+var nothing3 = closure.call.call();
+                                ^" in self::closure.call{<inapplicable>}.();
+static field dynamic nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
+var nothing4 = closure.call.call.call();
+                                     ^" in self::closure.call.call{<inapplicable>}.();
+static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
+var nothing5 = callable();
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
+var nothing6 = callable.call();
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
+var nothing7 = callable.call.call();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
+var nothing8 = callable.call.call.call();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var nothing9 = callableGetter();
+                             ^";
+static field dynamic nothing10 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
+static method main() → dynamic {
+  (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
+  dynamic int1 = closure(1){(dynamic) →* dynamic};
+  dynamic int2 = closure(1){(dynamic) →* dynamic};
+  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
+  self::Callable* callable = new self::Callable::•();
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
+  self::CallableGetter* callableGetter = new self::CallableGetter::•();
+  dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  var string5 = callableGetter(1);
+                              ^";
+  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
+  dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+  dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing1 = closure();
+                        ^" in closure{<inapplicable>}.();
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing2 = closure.call();
+                             ^" in closure{<inapplicable>}.();
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing3 = closure.call.call();
+                                  ^" in closure.call{<inapplicable>}.();
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing4 = closure.call.call.call();
+                                       ^" in closure.call.call{<inapplicable>}.();
+  invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing5 = callable();
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing6 = callable.call();
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing7 = callable.call.call();
+                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+  invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing8 = callable.call.call.call();
+                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+  dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  var nothing9 = callableGetter();
+                               ^";
+  dynamic nothing10 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing11 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing12 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///call.dart:30:37 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///call.dart:64:35 -> IntConstant(1)
+Extra constant evaluation: evaluated: 101, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
index f7d01d7..59e805d 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
@@ -42,12 +42,12 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    invalid-type v1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
                   ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t3){(core::int*) →* core::String*};
+    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
     self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
-    invalid-type v4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
                        ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
     core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
index cd3a7b7..f740b10 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
@@ -42,12 +42,12 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    invalid-type v1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
                   ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t3){(core::int*) →* core::String*};
+    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
     self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
-    invalid-type v4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
+    invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
                        ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
     core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
@@ -69,4 +69,4 @@
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///callable_type_variable.dart:12:20 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///callable_type_variable.dart:26:20 -> IntConstant(0)
-Extra constant evaluation: evaluated: 38, effectively constant: 2
+Extra constant evaluation: evaluated: 30, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
index b1e197c..a8817a7 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
@@ -78,7 +78,7 @@
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:20:20: Error: Too few positional arguments: 1 required, 0 given.
   Fisk.staticMethod();
                    ^";
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
   (null as Fisk).method();
                        ^" in (null as self::Fisk*).{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
 }
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect
new file mode 100644
index 0000000..66c13e5
--- /dev/null
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
+//   new Fisk();
+//           ^
+// pkg/front_end/testcases/general/candidate_found.dart:6:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk(int x) {}
+//   ^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:17:17: Error: Too few positional arguments: 1 required, 0 given.
+//   new Fisk.named();
+//                 ^
+// pkg/front_end/testcases/general/candidate_found.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk.named(int x) {}
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:18:7: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk();
+//       ^
+// pkg/front_end/testcases/general/candidate_found.dart:6:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk(int x) {}
+//   ^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:19:13: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk.named();
+//             ^
+// pkg/front_end/testcases/general/candidate_found.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk.named(int x) {}
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:20:20: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk.staticMethod();
+//                    ^
+// pkg/front_end/testcases/general/candidate_found.dart:12:15: Context: Found this candidate, but the arguments don't match.
+//   static void staticMethod(int x) {}
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
+//   (null as Fisk).method();
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Fisk extends core::Object {
+  constructor •(core::int* x) → self::Fisk*
+    : super core::Object::•() {}
+  constructor named(core::int* x) → self::Fisk*
+    : super core::Object::•() {}
+  method method(core::int* x) → void {}
+  static method staticMethod(core::int* x) → void {}
+  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 test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
+  new Fisk();
+          ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:17:17: Error: Too few positional arguments: 1 required, 0 given.
+  new Fisk.named();
+                ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:18:7: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk();
+      ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:19:13: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk.named();
+            ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:20:20: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk.staticMethod();
+                   ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
+  (null as Fisk).method();
+                       ^" in null.{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.expect b/pkg/front_end/testcases/general/cascade.dart.weak.expect
index bfd70cc..3d4d8ca 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.expect
@@ -44,22 +44,22 @@
     #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(list);
-  list = let final core::List<core::int*>* #t4 = <core::int*>[let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  list = let final core::List<core::int*>* #t4 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
     [1]
     ^" in <core::int*>[1] as{TypeError} core::int*] in block {
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}(){() →* core::String*};
+            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^".{core::Object::toString}(){() →* core::String*};
+           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^".{core::Object::toString}(){() →* core::String*};
+          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
index 5ae4b4c..b2dbc37 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
@@ -44,22 +44,22 @@
     #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(list);
-  list = let final core::List<core::int*>* #t4 = core::_GrowableList::_literal1<core::int*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  list = let final core::List<core::int*>* #t4 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
     [1]
     ^" in core::_GrowableList::_literal1<core::int*>(1) as{TypeError} core::int*) in block {
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}(){() →* core::String*};
+            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^".{core::Object::toString}(){() →* core::String*};
+           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^".{core::Object::toString}(){() →* core::String*};
+          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart
index 89c77a6..3549030 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart
@@ -1,7 +1,7 @@
 // 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 {
   const A() : this.bad();
 
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline.expect
index c7cfcc7..8d81665e 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A() : this.bad();
   A.bad() {}
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline_modelled.expect
index d07c96d..bee691e 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A.bad() {}
   const A() : this.bad();
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.expect
index 94978d1..38baae2 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.expect
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,30 +14,20 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : this self::A::bad()
     ;
-  constructor bad() → self::A*
+  constructor bad() → self::A
     : 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 B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : super self::A::bad()
     ;
 }
 static method test() → dynamic {
-  core::print(invalid-expression "Non-const constructor invocation.");
-  core::print(invalid-expression "Non-const constructor invocation.");
+  core::print(invalid-expression "A constant constructor can't call a non-constant constructor.");
+  core::print(invalid-expression "A constant constructor can't call a non-constant super constructor.");
 }
 static method main() → dynamic {
   core::print(new self::A::•());
@@ -49,5 +39,4 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect_to_nonconst.dart:
 - A. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:6:9)
-- A.bad (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:8:3)
 - B. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:12:9)
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.outline.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.outline.expect
index 13e7c43..ed9eb74 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,24 +10,14 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : this self::A::bad()
     ;
-  constructor bad() → self::A*
+  constructor bad() → self::A
     ;
-  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 B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : super self::A::bad()
     ;
 }
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.transformed.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.transformed.expect
index 94978d1..38baae2 100644
--- a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,30 +14,20 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : this self::A::bad()
     ;
-  constructor bad() → self::A*
+  constructor bad() → self::A
     : 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 B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : super self::A::bad()
     ;
 }
 static method test() → dynamic {
-  core::print(invalid-expression "Non-const constructor invocation.");
-  core::print(invalid-expression "Non-const constructor invocation.");
+  core::print(invalid-expression "A constant constructor can't call a non-constant constructor.");
+  core::print(invalid-expression "A constant constructor can't call a non-constant super constructor.");
 }
 static method main() → dynamic {
   core::print(new self::A::•());
@@ -49,5 +39,4 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect_to_nonconst.dart:
 - A. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:6:9)
-- A.bad (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:8:3)
 - B. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:12:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
index 606314d..05feed8 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
@@ -136,7 +136,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
index 001ad6a..d767009 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
@@ -26,7 +26,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -91,7 +91,7 @@
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
 Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:19:21 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:21:22 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:19:21 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:21:22 -> NullConstant(null)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:31:24 -> InstanceConstant(const Foo{Foo.x: 1})
-Extra constant evaluation: evaluated: 48, effectively constant: 7
+Extra constant evaluation: evaluated: 45, effectively constant: 7
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
index 4dd3ed9..01b5185 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
@@ -136,7 +136,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -210,7 +210,7 @@
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
 Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
-Extra constant evaluation: evaluated: 34, effectively constant: 4
+Extra constant evaluation: evaluated: 31, effectively constant: 4
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index 71909ac..3ab56c9 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -253,7 +253,7 @@
                                      ^";
 static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = self::baz + const self::CustomIterable::•();
 static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = self::baz + const self::CustomIterable::•();
-static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = self::baz + const <core::String*>{let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = self::baz + const <core::String*>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
                                                           ^" in self::customIterable as{TypeError} core::String*};
@@ -342,7 +342,6 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:47:54 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:47:62 -> InstanceConstant(const CustomIterable{})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:48:54 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:48:59 -> InstanceConstant(const CustomIterable{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:49:55 -> InstanceConstant(const WithEquals{WithEquals.i: 42})
 Evaluated: MapLiteral @ org-dartlang-testcase:///const_collections.dart:53:34 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world"]})
 Evaluated: MapConcatenation @ org-dartlang-testcase:///const_collections.dart:55:27 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world", "!", "bye!"]})
@@ -354,4 +353,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:63:45 -> InstanceConstant(const CustomMap{})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:64:51 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:66:9 -> InstanceConstant(const WithEquals{WithEquals.i: 42})
-Extra constant evaluation: evaluated: 90, effectively constant: 59
+Extra constant evaluation: evaluated: 87, effectively constant: 58
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart b/pkg/front_end/testcases/general/constants/function_invocation.dart
new file mode 100644
index 0000000..903e305
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.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.
+
+method() {}
+const tearOff = method;
+const invocation = tearOff();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..a69fea2
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+method() {}
+const tearOff = method;
+const invocation = tearOff();
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..502cda9
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+const invocation = tearOff();
+const tearOff = method;
+main() {}
+method() {}
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.expect
new file mode 100644
index 0000000..ade1d05
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+// const invocation = tearOff();
+//                    ^^^^^^^
+//
+import self as self;
+
+static const field () → dynamic tearOff = #C1;
+static const field invalid-type invocation = invalid-expression "pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+const invocation = tearOff();
+                   ^^^^^^^";
+static method method() → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::method
+}
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..e9cad48
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+// const invocation = tearOff();
+//                    ^^^^^^^
+//
+import self as self;
+
+static const field () → dynamic tearOff = self::method;
+static const field invalid-type invocation = invalid-expression "pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+const invocation = tearOff();
+                   ^^^^^^^";
+static method method() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticTearOff @ org-dartlang-testcase:///function_invocation.dart:6:17 -> StaticTearOffConstant(method)
+Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..ade1d05
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.transformed.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+// const invocation = tearOff();
+//                    ^^^^^^^
+//
+import self as self;
+
+static const field () → dynamic tearOff = #C1;
+static const field invalid-type invocation = invalid-expression "pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+const invocation = tearOff();
+                   ^^^^^^^";
+static method method() → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::method
+}
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart b/pkg/front_end/testcases/general/constants/issue46925.dart
new file mode 100644
index 0000000..af8e940
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.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.
+
+// @dart=2.14
+
+class MyClass<T> {
+  final a;
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+}
+
+test() {
+  const v1 = MyClass<String>.new;
+  const v2 = MyClass<int>.constr;
+  const v3 = MyClass<int>.new;
+  const v4 = MyClass<String>.constr;
+
+  const c1 = v1(3, 14);
+  const c2 = v1(3, 14);
+  const c3 = v2();
+  const c4 = v2();
+  const c5 = v3(3, 14);
+  const c6 = v4();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline.expect
new file mode 100644
index 0000000..97c1b4b
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+// @dart = 2.14
+class MyClass<T> {
+  final a;
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3ca9c50
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+// @dart = 2.14
+class MyClass<T> {
+  const MyClass(int i, int j) : a = (i + j);
+  const MyClass.constr() : a = 0;
+  final a;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect
new file mode 100644
index 0000000..86587cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: 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'.
+//   const v1 = MyClass<String>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: 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'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: 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'.
+//   const v2 = MyClass<int>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+//   const v2 = MyClass<int>.constr;
+//                           ^^^^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: 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'.
+//   const v3 = MyClass<int>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: 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'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: 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'.
+//   const v4 = MyClass<String>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+//   const v4 = MyClass<String>.constr;
+//                              ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const invalid-type v2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const invalid-type v3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+  const dynamic c1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c5 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const dynamic c6 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.outline.expect
new file mode 100644
index 0000000..e701b2d
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect
new file mode 100644
index 0000000..86587cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: 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'.
+//   const v1 = MyClass<String>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: 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'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: 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'.
+//   const v2 = MyClass<int>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+//   const v2 = MyClass<int>.constr;
+//                           ^^^^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: 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'.
+//   const v3 = MyClass<int>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: 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'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: 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'.
+//   const v4 = MyClass<String>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+//   const v4 = MyClass<String>.constr;
+//                              ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const invalid-type v2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const invalid-type v3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+  const dynamic c1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c5 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const dynamic c6 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart b/pkg/front_end/testcases/general/constants/issue_43431.dart
index a0b0bc2..45b056c 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart
+++ b/pkg/front_end/testcases/general/constants/issue_43431.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 Foo {
   const Foo({bool x: true});
   const x = Foo();
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
index b8bb029..65e909f 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
 // Try inserting 'const'.
 //   const x = Foo();
 //             ^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:6:9: Error: Constructor is marked 'const' so all fields must be final.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
 //   const Foo({bool x: true});
 //         ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:9: Context: Field isn't final, but constructor is 'const'.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
 //   const x = Foo();
 //         ^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
 //   const x = Foo();
 //             ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
 //   const x = Foo();
 //             ^
 //
@@ -54,4 +54,4 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_43431.dart:
-- Foo. (from org-dartlang-testcase:///issue_43431.dart:6:9)
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
index 1854d2a..c1256e5 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
index b8bb029..65e909f 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
 // Try inserting 'const'.
 //   const x = Foo();
 //             ^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:6:9: Error: Constructor is marked 'const' so all fields must be final.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
 //   const Foo({bool x: true});
 //         ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:9: Context: Field isn't final, but constructor is 'const'.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
 //   const x = Foo();
 //         ^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
 //   const x = Foo();
 //             ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
 //   const x = Foo();
 //             ^
 //
@@ -54,4 +54,4 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_43431.dart:
-- Foo. (from org-dartlang-testcase:///issue_43431.dart:6:9)
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.expect
index bdbea12..966e5dd 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.expect
@@ -8,6 +8,8 @@
   const constructor •(dynamic i1, dynamic i2) → self::MyClass
     : self::MyClass::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, self::MyClass::b = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#new#tearOff(dynamic i1, dynamic i2) → self::MyClass
+    return new self::MyClass::•(i1, i2);
 }
 static method test() → dynamic {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.outline.expect
index dcdb486..58a7c1f 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.outline.expect
@@ -8,6 +8,8 @@
   const constructor •(dynamic i1, dynamic i2) → self::MyClass
     : self::MyClass::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, self::MyClass::b = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#new#tearOff(dynamic i1, dynamic i2) → self::MyClass
+    return new self::MyClass::•(i1, i2);
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.transformed.expect
index bdbea12..966e5dd 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.transformed.expect
@@ -8,6 +8,8 @@
   const constructor •(dynamic i1, dynamic i2) → self::MyClass
     : self::MyClass::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, self::MyClass::b = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#new#tearOff(dynamic i1, dynamic i2) → self::MyClass
+    return new self::MyClass::•(i1, i2);
 }
 static method test() → dynamic {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect
index c1c307d..c62f518 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect
@@ -19,6 +19,8 @@
 @#C3
 class ParallaxOptions extends core::Object {
   external static factory •() → self::ParallaxOptions;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return self::ParallaxOptions::•();
 }
 static method test() → dynamic
   return invalid-expression "External factory constructors can't be evaluated in constant expressions.";
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect
index d5602f8..d79fbe5 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect
@@ -9,6 +9,8 @@
 @js::anonymous
 class ParallaxOptions extends core::Object {
   external static factory •() → self::ParallaxOptions;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return self::ParallaxOptions::•();
 }
 static method test() → dynamic
   ;
@@ -19,4 +21,4 @@
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue46123.dart:7:2 -> InstanceConstant(const JS{JS.name: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///issue46123.dart:8:2 -> InstanceConstant(const _Anonymous{})
-Extra constant evaluation: evaluated: 2, effectively constant: 2
+Extra constant evaluation: evaluated: 3, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect
index c1c307d..c62f518 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect
@@ -19,6 +19,8 @@
 @#C3
 class ParallaxOptions extends core::Object {
   external static factory •() → self::ParallaxOptions;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return self::ParallaxOptions::•();
 }
 static method test() → dynamic
   return invalid-expression "External factory constructors can't be evaluated in constant expressions.";
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect
index 29f09a1..215e011 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect
@@ -21,6 +21,8 @@
   external const constructor •() → self::ParallaxOptions
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return new self::ParallaxOptions::•();
 }
 static method test() → dynamic
   return invalid-expression "External constructors can't be evaluated in constant expressions.";
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect
index 78273bc..5576ed1 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect
@@ -11,6 +11,8 @@
   external const constructor •() → self::ParallaxOptions
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return new self::ParallaxOptions::•();
 }
 static method test() → dynamic
   ;
@@ -21,4 +23,4 @@
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue46123b.dart:7:2 -> InstanceConstant(const JS{JS.name: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///issue46123b.dart:8:2 -> InstanceConstant(const _Anonymous{})
-Extra constant evaluation: evaluated: 2, effectively constant: 2
+Extra constant evaluation: evaluated: 3, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect
index 29f09a1..215e011 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect
@@ -21,6 +21,8 @@
   external const constructor •() → self::ParallaxOptions
     : super core::Object::•()
     ;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return new self::ParallaxOptions::•();
 }
 static method test() → dynamic
   return invalid-expression "External constructors can't be evaluated in constant expressions.";
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.outline.expect
index 2aa115c..513f6c7 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.outline.expect
@@ -18,7 +18,7 @@
 static const field core::int shiftNegative2 = 2.{core::int::>>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 static const field core::int shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 static const field core::int modZero = 2.{core::num::%}(0){(core::num) → core::int};
-static const field core::int divZero = let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+static const field core::int divZero = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
                       ^" in 2.{core::num::/}(0){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
 static const field core::int intdivZero = 2.{core::num::~/}(0){(core::num) → core::int};
@@ -26,7 +26,7 @@
 static const field core::int unaryTilde = 2.{core::int::~}(){() → core::int};
 static const field core::int unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:13:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^"{dynamic}.+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+                      ^"{<invalid>}.+(2);
 static const field core::int binaryPlus = 40.{core::num::+}(2){(core::num) → core::int};
 static const field core::int binaryMinus = 44.{core::num::-}(2){(core::num) → core::int};
 static const field core::int binaryTimes = 21.{core::num::*}(2){(core::num) → core::int};
@@ -60,7 +60,6 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:5:33 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:6:34 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:7:33 -> DoubleConstant(-1.0)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:9:23 -> DoubleConstant(Infinity)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:11:24 -> DoubleConstant(-2.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:12:24 -> DoubleConstant(4294967293.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:15:27 -> DoubleConstant(42.0)
@@ -85,4 +84,4 @@
 Evaluated: AsExpression @ org-dartlang-testcase:///number_folds.dart:39:43 -> NullConstant(null)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:40:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds.dart:41:42 -> DoubleConstant(NaN)
-Extra constant evaluation: evaluated: 40, effectively constant: 28
+Extra constant evaluation: evaluated: 36, effectively constant: 27
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.outline.expect
index 92d8300..d03c3a1 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 static const field core::int* shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
 static const field core::int* shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
 static const field core::int* modZero = 2.{core::num::%}(0){(core::num*) →* core::int*};
-static const field core::int* divZero = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+static const field core::int* divZero = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
                       ^" in 2.{core::num::/}(0){(core::num*) →* core::double*} as{TypeError} core::int*;
 static const field core::int* intdivZero = 2.{core::num::~/}(0){(core::num*) →* core::int*};
@@ -25,7 +25,7 @@
 static const field core::int* unaryTilde = 2.{core::int::~}(){() →* core::int*};
 static const field core::int* unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:14:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^"{dynamic}.+(2) as{TypeError,ForDynamic} core::int*;
+                      ^"{<invalid>}.+(2);
 static const field core::int* binaryPlus = 40.{core::num::+}(2){(core::num*) →* core::int*};
 static const field core::int* binaryMinus = 44.{core::num::-}(2){(core::num*) →* core::int*};
 static const field core::int* binaryTimes = 21.{core::num::*}(2){(core::num*) →* core::int*};
@@ -55,7 +55,6 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:7:33 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:8:33 -> DoubleConstant(-1.0)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:10:23 -> DoubleConstant(Infinity)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:12:24 -> DoubleConstant(-2.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:13:24 -> DoubleConstant(4294967293.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:16:27 -> DoubleConstant(42.0)
@@ -77,4 +76,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:34:36 -> DoubleConstant(42.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:37:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds_opt_out.dart:38:42 -> DoubleConstant(NaN)
-Extra constant evaluation: evaluated: 35, effectively constant: 24
+Extra constant evaluation: evaluated: 31, effectively constant: 23
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.expect
index 2573a35..03c80f1 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.expect
@@ -113,6 +113,10 @@
   const constructor tripleShift(dynamic i1, dynamic i2) → self::Class
     : self::Class::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#doubleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::doubleShift(i1, i2);
+  static method _#tripleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::tripleShift(i1, i2);
 }
 static const field dynamic a = #C1;
 static const field dynamic b = #C2;
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.outline.expect
index c94c041..fcbc46f 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.outline.expect
@@ -10,6 +10,10 @@
   const constructor tripleShift(dynamic i1, dynamic i2) → self::Class
     : self::Class::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#doubleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::doubleShift(i1, i2);
+  static method _#tripleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::tripleShift(i1, i2);
 }
 static const field dynamic a = 1.0;
 static const field dynamic b = 1.5;
@@ -34,4 +38,4 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///on_double.dart:14:25 -> DoubleConstant(1.5)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///on_double.dart:15:22 -> DoubleConstant(0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///on_double.dart:16:26 -> DoubleConstant(1.5)
-Extra constant evaluation: evaluated: 22, effectively constant: 8
+Extra constant evaluation: evaluated: 28, effectively constant: 8
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.transformed.expect
index 2573a35..03c80f1 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.transformed.expect
@@ -113,6 +113,10 @@
   const constructor tripleShift(dynamic i1, dynamic i2) → self::Class
     : self::Class::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
+  static method _#doubleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::doubleShift(i1, i2);
+  static method _#tripleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::tripleShift(i1, i2);
 }
 static const field dynamic a = #C1;
 static const field dynamic b = #C2;
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart b/pkg/front_end/testcases/general/constants/non_const_constructor.dart
new file mode 100644
index 0000000..60819d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.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.
+
+class Class {
+  Class();
+
+  const Class.named() {
+    1;
+  }
+}
+
+const a = const Class();
+const b = const Class.named();
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..69dda5b
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class Class {
+  Class();
+  const Class.named() {}
+}
+const a = const Class();
+const b = const Class.named();
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.expect b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.expect
new file mode 100644
index 0000000..378710d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const Class.named() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const a = const Class();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const b = const Class.named();
+//                 ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class
+    : super core::Object::•() {
+    1;
+  }
+}
+static const field invalid-type a = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const a = const Class();
+                ^^^^^";
+static const field invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const b = const Class.named();
+                ^^^^^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..8d7f5da
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.outline.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const Class.named() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const a = const Class();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const b = const Class.named();
+//                 ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    ;
+  constructor named() → self::Class
+    ;
+}
+static const field invalid-type a = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const a = const Class();
+                ^^^^^";
+static const field invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const b = const Class.named();
+                ^^^^^";
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..378710d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.transformed.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const Class.named() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const a = const Class();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const b = const Class.named();
+//                 ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class
+    : super core::Object::•() {
+    1;
+  }
+}
+static const field invalid-type a = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const a = const Class();
+                ^^^^^";
+static const field invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const b = const Class.named();
+                ^^^^^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart b/pkg/front_end/testcases/general/constants/non_const_variable.dart
new file mode 100644
index 0000000..3f932dc
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.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.
+
+method() {
+  var a = 0;
+  const b = a;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline.expect
new file mode 100644
index 0000000..b169126
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+method() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..49b9b34
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+method() {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.expect
new file mode 100644
index 0000000..a600694
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+//   const b = a;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method method() → dynamic {
+  core::int a = 0;
+  const invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+  const b = a;
+            ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.outline.expect
new file mode 100644
index 0000000..6519787
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method method() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.transformed.expect
new file mode 100644
index 0000000..a600694
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+//   const b = a;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method method() → dynamic {
+  core::int a = 0;
+  const invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+  const b = a;
+            ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
index 5840a2f..5407b2e 100644
--- a/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
@@ -18,7 +18,7 @@
 static const field core::int shiftNegative2 = 2.{core::int::>>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 static const field core::int shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 static const field core::int modZero = 2.{core::num::%}(0){(core::num) → core::int};
-static const field core::int divZero = let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+static const field core::int divZero = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
                       ^" in 2.{core::num::/}(0){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
 static const field core::int intdivZero = 2.{core::num::~/}(0){(core::num) → core::int};
@@ -26,7 +26,7 @@
 static const field core::int unaryTilde = 2.{core::int::~}(){() → core::int};
 static const field core::int unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:13:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^"{dynamic}.+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+                      ^"{<invalid>}.+(2);
 static const field core::int binaryPlus = 40.{core::num::+}(2){(core::num) → core::int};
 static const field core::int binaryMinus = 44.{core::num::-}(2){(core::num) → core::int};
 static const field core::int binaryTimes = 21.{core::num::*}(2){(core::num) → core::int};
@@ -58,7 +58,6 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:5:33 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:6:34 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:7:33 -> IntConstant(-1)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:9:23 -> DoubleConstant(Infinity)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:11:24 -> IntConstant(-2)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:12:24 -> IntConstant(-3)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:15:27 -> IntConstant(42)
@@ -82,4 +81,4 @@
 Evaluated: AsExpression @ org-dartlang-testcase:///number_folds.dart:38:43 -> NullConstant(null)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:39:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds.dart:40:42 -> DoubleConstant(NaN)
-Extra constant evaluation: evaluated: 39, effectively constant: 27
+Extra constant evaluation: evaluated: 35, effectively constant: 26
diff --git a/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
index d84f48c..ccf0ec3 100644
--- a/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 static const field core::int* shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
 static const field core::int* shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
 static const field core::int* modZero = 2.{core::num::%}(0){(core::num*) →* core::int*};
-static const field core::int* divZero = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+static const field core::int* divZero = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
                       ^" in 2.{core::num::/}(0){(core::num*) →* core::double*} as{TypeError} core::int*;
 static const field core::int* intdivZero = 2.{core::num::~/}(0){(core::num*) →* core::int*};
@@ -25,7 +25,7 @@
 static const field core::int* unaryTilde = 2.{core::int::~}(){() →* core::int*};
 static const field core::int* unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:14:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^"{dynamic}.+(2) as{TypeError,ForDynamic} core::int*;
+                      ^"{<invalid>}.+(2);
 static const field core::int* binaryPlus = 40.{core::num::+}(2){(core::num*) →* core::int*};
 static const field core::int* binaryMinus = 44.{core::num::-}(2){(core::num*) →* core::int*};
 static const field core::int* binaryTimes = 21.{core::num::*}(2){(core::num*) →* core::int*};
@@ -53,7 +53,6 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:7:33 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:8:33 -> IntConstant(-1)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:10:23 -> DoubleConstant(Infinity)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:12:24 -> IntConstant(-2)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:13:24 -> IntConstant(-3)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:16:27 -> IntConstant(42)
@@ -74,4 +73,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:33:36 -> IntConstant(42)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:36:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds_opt_out.dart:37:42 -> DoubleConstant(NaN)
-Extra constant evaluation: evaluated: 34, effectively constant: 23
+Extra constant evaluation: evaluated: 30, effectively constant: 22
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 1cde25c..62853b9 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
@@ -100,6 +100,14 @@
 // class ExtendsFoo1 extends Foo {
 //       ^
 //
+// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
 // pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
@@ -341,9 +349,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotAbstractClass extends core::Object {
-  @invalid-expression "Constant evaluation has no support for Throw!"
+  @invalid-expression "Not a constant expression."
   field core::Object* foo = null;
-  @invalid-expression "Constant evaluation has no support for Throw!"
+  @invalid-expression "Not a constant expression."
   field core::Object* bar = null;
   synthetic constructor •() → self::NotAbstractClass*
     : super core::Object::•()
@@ -452,7 +460,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
@@ -518,15 +526,15 @@
 static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
 static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
 static field core::int* x = 1;
-static const field core::int* x1 = invalid-expression "Constant evaluation has no support for StaticSet!";
-static const field core::int* x2 = invalid-expression "Constant evaluation has no support for StaticSet!";
+static const field core::int* x1 = invalid-expression "Not a constant expression.";
+static const field core::int* x2 = invalid-expression "Not a constant expression.";
 static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* y = #C12;
-static const field dynamic y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field dynamic y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
 static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
@@ -559,7 +567,7 @@
 static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
-static const field dynamic function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var = () → Null {};
@@ -570,7 +578,7 @@
 static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const ClassWithNonEmptyConstConstructor();
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic} self::ClassWithNonEmptyConstConstructor*;
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
 static field self::ConstClassWithFinalFields2* constClassWithFinalFields = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::bool* zeroPointZeroIdentical = #C3;
 static const field core::bool* zeroPointZeroIdenticalToZero = #C1;
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
index 1023df5..7b7e406 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
@@ -230,7 +230,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
@@ -301,23 +301,23 @@
 static const field core::int* x3 = let final core::int* #t4 = self::x in let final core::int* #t5 = self::x = #t4.{core::num::-}(1){(core::num*) →* core::int*} in #t4;
 static const field core::int* x4 = let final core::int* #t6 = self::x in let final core::int* #t7 = self::x = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
 static const field core::int* y = 1;
-static const field dynamic y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field dynamic y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
-static const field core::int* y3 = let final core::int* #t8 = self::y in let final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+static const field core::int* y3 = let final core::int* #t8 = self::y in let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
 const y3 = y--;
            ^" in #t8;
-static const field core::int* y4 = let final core::int* #t10 = self::y in let final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+static const field core::int* y4 = let final core::int* #t10 = self::y in let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
 const y4 = y++;
            ^" in #t10;
 static field self::AbstractClassWithConstructor* abstractClassWithConstructor;
 static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
-                                      ^^^^^^^^^^^" as{TypeError,ForDynamic} self::ExtendsFoo1*;
+                                      ^^^^^^^^^^^";
 static const field self::ExtendsFoo2* extendsFoo2 = const self::ExtendsFoo2::•();
 static const field self::Foo* foo1 = const self::Foo::•(42);
 static const field self::Foo* foo2 = const self::Foo::•(42);
@@ -331,7 +331,7 @@
 static const field core::int* circularity2 = self::circularity3;
 static const field core::int* circularity3 = self::circularity4;
 static const field core::int* circularity4 = self::circularity1;
-static const field dynamic function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var;
@@ -370,9 +370,9 @@
 
 Extra constant evaluation status:
 Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:6:31 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:7:30 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:9:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:6:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:7:30 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:9:11 -> NullConstant(null)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:10:35 -> NullConstant(null)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:11:32 -> NullConstant(null)
 Evaluated: Let @ org-dartlang-testcase:///various.dart:12:51 -> BoolConstant(true)
@@ -385,24 +385,24 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:19:24 -> NullConstant(null)
 Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:20:29 -> BoolConstant(true)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:21:33 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:23:39 -> StringConstant("")
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:25:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:27:11 -> StringConstant("hello")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:23:39 -> StringConstant("")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:25:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:27:11 -> StringConstant("hello")
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:29:34 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:31:35 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:33:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:35:11 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:31:35 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:33:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:35:11 -> BoolConstant(true)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:36:57 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:38:33 -> IntConstant(0)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:40:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:42:11 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:38:33 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:40:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:42:11 -> IntConstant(42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:43:54 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:46:31 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:47:30 -> BoolConstant(true)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:48:35 -> IntConstant(42)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:49:41 -> StringConstant("42")
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:53:35 -> BoolConstant(true)
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:54:36 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:46:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:47:30 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:48:35 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:49:41 -> StringConstant("42")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:53:35 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:54:36 -> BoolConstant(false)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:58:41 -> BoolConstant(true)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:59:45 -> BoolConstant(false)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:60:39 -> BoolConstant(true)
@@ -453,4 +453,4 @@
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:213:40 -> BoolConstant(false)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:214:25 -> NullConstant(null)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:215:40 -> BoolConstant(false)
-Extra constant evaluation: evaluated: 136, effectively constant: 84
+Extra constant evaluation: evaluated: 135, effectively constant: 84
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 f39f9ab..9d9530c 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
@@ -100,6 +100,14 @@
 // class ExtendsFoo1 extends Foo {
 //       ^
 //
+// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
 // pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
@@ -341,9 +349,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotAbstractClass extends core::Object {
-  @invalid-expression "Constant evaluation has no support for Throw!"
+  @invalid-expression "Not a constant expression."
   field core::Object* foo = null;
-  @invalid-expression "Constant evaluation has no support for Throw!"
+  @invalid-expression "Not a constant expression."
   field core::Object* bar = null;
   synthetic constructor •() → self::NotAbstractClass*
     : super core::Object::•()
@@ -452,7 +460,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
@@ -518,15 +526,15 @@
 static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
 static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
 static field core::int* x = 1;
-static const field core::int* x1 = invalid-expression "Constant evaluation has no support for StaticSet!";
-static const field core::int* x2 = invalid-expression "Constant evaluation has no support for StaticSet!";
+static const field core::int* x1 = invalid-expression "Not a constant expression.";
+static const field core::int* x2 = invalid-expression "Not a constant expression.";
 static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* y = #C12;
-static const field dynamic y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field dynamic y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
 static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
@@ -559,7 +567,7 @@
 static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
-static const field dynamic function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var = () → Null {};
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.expect
index a331c77..1569bc7 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.expect
@@ -81,7 +81,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int x) → self::Foo
-    : self::Foo::x = x, assert(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.outline.expect
index 300a4fa..3b295c8 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.outline.expect
@@ -21,7 +21,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int x) → self::Foo
-    : self::Foo::x = x, assert(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
     ;
@@ -50,12 +50,12 @@
 
 Extra constant evaluation status:
 Evaluated with empty environment: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:10:50 -> BoolConstant(true)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:10:22 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:10:22 -> BoolConstant(false)
 Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:11:59 -> StringConstant("foo was false")
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:11:30 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:11:30 -> BoolConstant(false)
 Evaluated with empty environment: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:12:50 -> BoolConstant(true)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:12:22 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:12:22 -> BoolConstant(false)
 Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:14:73 -> StringConstant("btw foo was false")
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:14:44 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:14:44 -> BoolConstant(false)
 Evaluated with empty environment: ConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
-Extra constant evaluation: evaluated: 39, effectively constant: 9
+Extra constant evaluation: evaluated: 36, effectively constant: 9
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.transformed.expect
index 3f365fd..a5d5b58 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.transformed.expect
@@ -81,7 +81,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int x) → self::Foo
-    : self::Foo::x = x, assert(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
     ;
@@ -137,7 +137,7 @@
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:14:44 -> BoolConstant(false)
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
-Extra constant evaluation: evaluated: 34, effectively constant: 10
+Extra constant evaluation: evaluated: 31, effectively constant: 10
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
index c2729313..d08ca5a 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
@@ -24,21 +24,21 @@
 
 Extra constant evaluation status:
 Evaluated with empty environment: ListLiteral @ org-dartlang-testcase:///const_collections.dart:5:40 -> ListConstant(const <bool*>[false, false, true])
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:6:8 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:7:8 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:6:8 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:7:8 -> BoolConstant(false)
 Evaluated with empty environment: ListConcatenation @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true, false, false, true, false])
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true])
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///const_collections.dart:12:6 -> ListConstant(const <bool*>[false, false, true])
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[false])
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:17:8 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:18:8 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:17:8 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:18:8 -> BoolConstant(false)
 Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:21:44 -> SetConstant(const <bool*>{true})
 Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:21:44 -> SetConstant(const <bool*>{false})
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:23:16 -> ListConstant(const <int*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:24:17 -> ListConstant(const <int?>[])
 Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:25:26 -> SetConstant(const <List<int?>*>{const <int*>[], const <int?>[]})
 Evaluated with empty environment: MapLiteral @ org-dartlang-testcase:///const_collections.dart:27:38 -> MapConstant(const <bool*, bool*>{false: false})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:28:8 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections.dart:28:37 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:28:8 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:28:37 -> BoolConstant(false)
 Evaluated: MapLiteral @ org-dartlang-testcase:///const_collections.dart:31:26 -> MapConstant(const <List<int?>*, int*>{const <int*>[]: 0, const <int?>[]: 1})
 Extra constant evaluation: evaluated: 21, effectively constant: 18
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.outline.expect
index 9a289e2..0913c95 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.outline.expect
@@ -12,17 +12,17 @@
 
 Extra constant evaluation status:
 Evaluated with empty environment: ListLiteral @ org-dartlang-testcase:///const_collections_2.dart:5:58 -> ListConstant(const <String*>["", "", "hello", "world"])
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:6:10 -> StringConstant("")
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:7:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:6:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:7:10 -> StringConstant("")
 Evaluated with empty environment: ListLiteral @ org-dartlang-testcase:///const_collections_2.dart:12:59 -> ListConstant(const <String*>["A", "few", "strings", "", "", "hello", "world", "and", "more"])
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:16:10 -> StringConstant("")
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:17:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:16:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:17:10 -> StringConstant("")
 Evaluated with empty environment: SetLiteral @ org-dartlang-testcase:///const_collections_2.dart:24:56 -> SetConstant(const <String*>{"", "hello", "world"})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:27:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:27:10 -> StringConstant("")
 Evaluated with empty environment: SetLiteral @ org-dartlang-testcase:///const_collections_2.dart:32:57 -> SetConstant(const <String*>{"A", "few", "strings", "", "hello", "world", "and", "more"})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:38:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:38:10 -> StringConstant("")
 Evaluated with empty environment: MapLiteral @ org-dartlang-testcase:///const_collections_2.dart:45:61 -> MapConstant(const <String*, int*>{"": 42, "hello": 42, "world": 42})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:48:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:48:10 -> StringConstant("")
 Evaluated with empty environment: MapLiteral @ org-dartlang-testcase:///const_collections_2.dart:53:62 -> MapConstant(const <String*, int*>{"A": 42, "few": 42, "strings": 42, "": 42, "hello": 42, "world": 42, "and": 42, "more": 42})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_collections_2.dart:59:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///const_collections_2.dart:59:10 -> StringConstant("")
 Extra constant evaluation: evaluated: 14, effectively constant: 14
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.outline.expect
index 8ea780a..9bd98d9 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.outline.expect
@@ -57,7 +57,7 @@
 
 Extra constant evaluation status:
 Evaluated with empty environment: ListLiteral @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:1:18 -> ListConstant(const <String*>["lots", "of", "strings", "", "that", "are", "already", "constants"])
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:5:10 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:5:10 -> StringConstant("")
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:11:15 -> ListConstant(const <String*>["lots", "of", "strings", "", "that", "are", "already", "constants"])
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:12:15 -> ListConstant(const <String*>["lots", "of", "strings", "", "that", "are", "already", "constants"])
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///many_fields_pointing_to_previous_field.dart:13:15 -> ListConstant(const <String*>["lots", "of", "strings", "", "that", "are", "already", "constants"])
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.outline.expect
index a4388e8..e236e5c 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.outline.expect
@@ -15,7 +15,7 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:5:20 -> IntConstant(1764)
 Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///rudimentary_test_01.dart:6:18 -> StringConstant("hello world!")
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///rudimentary_test_01.dart:7:27 -> StringConstant("world")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:7:27 -> StringConstant("world")
 Evaluated: LogicalExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:8:50 -> BoolConstant(true)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///rudimentary_test_01.dart:9:19 -> SymbolConstant(#_x)
 Extra constant evaluation: evaluated: 5, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
index ce2a935..dffcd85 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
@@ -91,7 +91,7 @@
     : this self::Class::•(t as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class::T)
     ;
   const constructor method(self::Class::T t) → self::Class<self::Class::T>
-    : this self::Class::•(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^" in t.{self::A::unary-}(){() → self::A} as{TypeError,ForNonNullableByDefault} Never)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
index f9aaa93..aecdca6 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
@@ -73,7 +73,7 @@
     : this self::Class::•(t as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class::T)
     ;
   const constructor method(self::Class::T t) → self::Class<self::Class::T>
-    : this self::Class::•(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^" in t.{self::A::unary-}(){() → self::A} as{TypeError,ForNonNullableByDefault} Never)
@@ -96,14 +96,14 @@
 static const field core::bool barFromEnvOrNull = const core::bool::fromEnvironment("bar", defaultValue: self::barFromEnvOrNull0!);
 static const field core::bool notBarFromEnvOrNull = !self::barFromEnvOrNull;
 static const field core::bool conditionalOnNull = self::barFromEnvOrNull ?{core::bool} true : false;
-static const field core::bool nullAwareOnNull = let final core::bool #t2 = self::barFromEnvOrNull in #t2 == null ?{core::bool} true : #t2;
+static const field core::bool nullAwareOnNull = let final core::bool #t1 = self::barFromEnvOrNull in #t1 == null ?{core::bool} true : #t1;
 static const field core::bool andOnNull = self::barFromEnvOrNull && true;
 static const field core::bool andOnNull2 = true && self::barFromEnvOrNull;
 static const field core::bool orOnNull = self::barFromEnvOrNull || true;
 static const field core::bool orOnNull2 = self::barFromEnvOrNull || false;
 static const field core::bool orOnNull3 = true || self::barFromEnvOrNull;
 static const field core::bool orOnNull4 = false || self::barFromEnvOrNull;
-static const field core::int fromDeferredLib = let final dynamic #t3 = CheckLibraryIsLoaded(lib) in var::x;
+static const field core::int fromDeferredLib = let final dynamic #t2 = CheckLibraryIsLoaded(lib) in var::x;
 static const field self::Foo<core::int> x = const self::Foo::•<core::int>(42);
 static const field core::bool? y = true;
 static const field core::bool z = !self::y!;
@@ -159,21 +159,21 @@
 
 
 Extra constant evaluation status:
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:32:27 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:32:27 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:32:69 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:33:21 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:33:21 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:33:63 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:7:31 -> BoolConstant(false)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:8:30 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:7:31 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:8:30 -> BoolConstant(false)
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:9:67 -> NullConstant(null)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:9:39 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:9:39 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:11:53 -> NullConstant(null)
 Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:19:29 -> BoolConstant(true)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:22:29 -> IntConstant(42)
 Evaluated with empty environment: ConstructorInvocation @ org-dartlang-testcase:///various.dart:37:17 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: null, Foo.value: 42})
 Evaluated: Not @ org-dartlang-testcase:///various.dart:40:16 -> BoolConstant(false)
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:42:46 -> BoolConstant(true)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:42:23 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:42:23 -> BoolConstant(false)
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:43:38 -> BoolConstant(false)
 Evaluated with empty environment: IsExpression @ org-dartlang-testcase:///various.dart:43:31 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:43:22 -> BoolConstant(true)
@@ -199,33 +199,33 @@
 Evaluated: IsExpression @ org-dartlang-testcase:///various.dart:72:46 -> BoolConstant(true)
 Evaluated: IsExpression @ org-dartlang-testcase:///various.dart:73:46 -> BoolConstant(true)
 Evaluated with empty environment: ConstructorInvocation @ org-dartlang-testcase:///various.dart:76:11 -> SymbolConstant(#)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:76:25 -> StringConstant("")
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:76:25 -> StringConstant("")
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:77:44 -> SymbolConstant(#42)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:107:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:107:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:107:71 -> InstanceConstant(const C{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:108:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:108:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:108:69 -> InstanceConstant(const A{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:109:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:109:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:109:65 -> InstanceConstant(const C{})
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:110:38 -> InstanceConstant(const Class<A*>{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:110:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:110:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:110:53 -> InstanceConstant(const Class<A*>{})
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:111:38 -> InstanceConstant(const Class<B*>{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:111:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:111:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:111:53 -> InstanceConstant(const Class<B*>{})
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:112:38 -> InstanceConstant(const Subclass<A*>{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:112:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:112:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:112:53 -> InstanceConstant(const Subclass<A*>{})
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:113:38 -> InstanceConstant(const Subclass<B*>{})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:113:17 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:113:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:113:53 -> InstanceConstant(const Subclass<B*>{})
 Evaluated: TypeLiteral @ org-dartlang-testcase:///various.dart:116:11 -> TypeLiteralConstant(int* Function(int*, {named: int*})*)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:125:48 -> InstanceConstant(const ConstClassWithF{ConstClassWithF.foo: procedure})
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:127:35 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:127:35 -> BoolConstant(false)
 Evaluated with empty environment: Not @ org-dartlang-testcase:///various.dart:128:33 -> BoolConstant(true)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:128:34 -> BoolConstant(false)
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various.dart:130:33 -> NullConstant(null)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:130:10 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:130:10 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:130:35 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:131:37 -> NullConstant(null)
-Extra constant evaluation: evaluated: 112, effectively constant: 69
+Extra constant evaluation: evaluated: 108, effectively constant: 69
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
index fef7a55..e35282c 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
@@ -91,7 +91,7 @@
     : this self::Class::•(t as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class::T)
     ;
   const constructor method(self::Class::T t) → self::Class<self::Class::T>
-    : this self::Class::•(let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^" in t.{self::A::unary-}(){() → self::A} as{TypeError,ForNonNullableByDefault} Never)
@@ -272,7 +272,7 @@
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:127:35 -> BoolConstant(false)
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:128:33 -> BoolConstant(true)
 Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:130:33 -> NullConstant(null)
-Extra constant evaluation: evaluated: 66, effectively constant: 24
+Extra constant evaluation: evaluated: 62, effectively constant: 24
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
index 373d6b4..b505038 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
@@ -112,7 +112,7 @@
 Evaluated: TypeLiteral @ org-dartlang-testcase:///various_2_lib.dart:17:27 -> TypeLiteralConstant(Object*)
 Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:18:12 -> StaticTearOffConstant(identical)
 Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> InstantiationConstant(id2<int*>)
-Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various_2_lib.dart:20:11 -> BoolConstant(false)
+Evaluated with empty environment: FactoryConstructorInvocation @ org-dartlang-testcase:///various_2_lib.dart:20:11 -> BoolConstant(false)
 Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> InstantiationConstant(id1<int*>)
 Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> StaticTearOffConstant(id1)
 Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:47 -> InstantiationConstant(id2<int*>)
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
index 79f1595..69f8ec9 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
@@ -46,7 +46,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
+                          ^", 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
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
index d9400d1..cbaacd1 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
@@ -33,13 +33,13 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
   lib(new C().missing());
-  ^^^" in let final core::Object* #t2 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missing'.
   lib(new C().missing());
-              ^^^^^^^" in null;
+              ^^^^^^^" in new self::C::•(){<unresolved>}.missing() in null;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
index d9400d1..cbaacd1 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
@@ -33,13 +33,13 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
   lib(new C().missing());
-  ^^^" in let final core::Object* #t2 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missing'.
   lib(new C().missing());
-              ^^^^^^^" in null;
+              ^^^^^^^" in new self::C::•(){<unresolved>}.missing() in null;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
index 2a12c98..2ebf6f7 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
@@ -950,67 +950,67 @@
   block {
     final core::List<core::int*>* #t99 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
-    final core::Set<core::int*>* #t101 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t100 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Set::add}{Invariant}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
-    #t101.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t101;
+    #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t100;
   block {
-    final core::Map<core::String*, core::int*>* #t103 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Map::[]=}{Invariant}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
-    #t103.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t103;
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t101;
   block {
-    final core::List<core::int*>* #t105 = <core::int*>[];
+    final core::List<core::int*>* #t102 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t105.{core::List::addAll}{Invariant}(<core::int*>[let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
-  } =>#t105;
+  } =>#t102;
   block {
-    final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t103 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::addAll}{Invariant}(<core::int*>[let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
-    #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t107;
+    #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t103;
   block {
-    final core::Map<core::String*, core::int*>* #t109 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t110 in <core::String*, core::int*>{"bar": let final Never* #t111 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-        #t109.{core::Map::[]=}{Invariant}(#t110.{core::MapEntry::key}{core::String*}, #t110.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-    #t109.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t109;
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t104;
   block {
-    final core::List<core::int*>* #t112 = <core::int*>[];
+    final core::List<core::int*>* #t106 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
                               ^"){(core::int*) →* void};
-  } =>#t112;
+  } =>#t106;
   block {
-    final core::Set<core::int*>* #t113 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t113.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int*) →* core::bool*};
-    #t113.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t113;
+    #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t107;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
@@ -1019,61 +1019,61 @@
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
   block {
-    final core::List<core::String*>* #t114 = <core::String*>[];
+    final core::List<core::String*>* #t108 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::List::add}{Invariant}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t114.{core::List::add}{Invariant}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
-  } =>#t114;
+  } =>#t108;
   block {
-    final core::Set<core::String*>* #t117 = col::LinkedHashSet::•<core::String*>();
+    final core::Set<core::String*>* #t109 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t117.{core::Set::add}{Invariant}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t117.{core::Set::add}{Invariant}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
-    #t117.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
-  } =>#t117;
+    #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t109;
   block {
-    final core::Map<core::String*, core::String*>* #t120 = <core::String*, core::String*>{};
+    final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-    #t120.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
-  } =>#t120;
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t110;
   block {
-    final core::List<core::int*>* #t123 = <core::int*>[];
+    final core::List<core::int*>* #t111 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t123.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
                               ^"){(core::int*) →* void};
     else
-      #t123.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t123;
+      #t111.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t111;
   block {
-    final core::Set<core::int*>* #t124 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t112 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t124.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
     else
-      #t124.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t124.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t124;
+      #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t112;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
@@ -1082,26 +1082,26 @@
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
   block {
-    final core::List<core::int*>* #t125 = <core::int*>[];
+    final core::List<core::int*>* #t113 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t125.{core::List::add}{Invariant}(42){(core::int*) →* void};
+      #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
     else
-      #t125.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
                                       ^"){(core::int*) →* void};
-  } =>#t125;
+  } =>#t113;
   block {
-    final core::Set<core::int*>* #t126 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t114 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t126.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
     else
-      #t126.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t126.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t126;
+      #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t114;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
@@ -1121,716 +1121,716 @@
   core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
   Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                      ^": null};
-  core::Map<dynamic, Null>* map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
   var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                   ^": null};
-  core::Map<dynamic, Null>* map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
   var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                    ^": null};
   core::List<core::int*>* list20 = block {
-    final core::List<core::int*>* #t127 = <core::int*>[];
-    if(let final Never* #t128 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::List<core::int*>* #t115 = <core::int*>[];
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
-      #t127.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t127;
+      #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t115;
   core::Set<core::int*>* set20 = block {
-    final core::Set<core::int*>* #t129 = col::LinkedHashSet::•<core::int*>();
-    if(let final Never* #t130 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::Set<core::int*>* #t116 = col::LinkedHashSet::•<core::int*>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
-      #t129.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t129;
+      #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t116;
   core::Map<core::int*, core::int*>* map30 = block {
-    final core::Map<core::int*, core::int*>* #t131 = <core::int*, core::int*>{};
-    if(let final Never* #t132 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
-      #t131.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
-  } =>#t131;
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
+  } =>#t117;
   core::List<core::String*>* list40 = block {
-    final core::List<core::String*>* #t133 = <core::String*>[];
+    final core::List<core::String*>* #t118 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t133.{core::List::add}{Invariant}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t133.{core::List::add}{Invariant}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
-  } =>#t133;
+  } =>#t118;
   core::Set<core::String*>* set40 = block {
-    final core::Set<core::String*>* #t136 = col::LinkedHashSet::•<core::String*>();
+    final core::Set<core::String*>* #t119 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t136.{core::Set::add}{Invariant}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t136.{core::Set::add}{Invariant}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
-  } =>#t136;
+  } =>#t119;
   core::Map<core::String*, core::int*>* map40 = block {
-    final core::Map<core::String*, core::int*>* #t139 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                           ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
-  } =>#t139;
+  } =>#t120;
   core::Map<core::int*, core::String*>* map41 = block {
-    final core::Map<core::int*, core::String*>* #t142 = <core::int*, core::String*>{};
+    final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                               ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  } =>#t142;
+  } =>#t121;
 }
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
-    final core::List<core::int*>* #t145 = <core::int*>[];
+    final core::List<core::int*>* #t122 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t145.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t145;
+      #t122.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t122;
   core::Set<core::int*>* set10 = block {
-    final core::Set<core::int*>* #t146 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t123 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t146.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t146.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t146;
+      #t123.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t123.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t123;
   core::Map<core::String*, core::int*>* map10 = block {
-    final core::Map<core::String*, core::int*>* #t147 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t124 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t147.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-    #t147.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t147;
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t124;
   core::List<dynamic>* list11 = block {
-    final core::List<dynamic>* #t148 = <dynamic>[];
+    final core::List<dynamic>* #t125 = <dynamic>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t148.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
-  } =>#t148;
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
+  } =>#t125;
   core::Set<dynamic>* set11 = block {
-    final core::Set<dynamic>* #t149 = col::LinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t126 = col::LinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t149.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
-    #t149.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t149;
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t126;
   core::Map<core::String*, dynamic>* map11 = block {
-    final core::Map<core::String*, dynamic>* #t150 = <core::String*, dynamic>{};
+    final core::Map<core::String*, dynamic>* #t127 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t150.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
-    #t150.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t150;
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t127;
   core::List<core::List<core::int*>*>* list12 = block {
+    final core::List<core::List<core::int*>*>* #t128 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t128.{core::List::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* void};
+  } =>#t128;
+  core::Set<core::List<core::int*>*>* set12 = block {
+    final core::Set<core::List<core::int*>*>* #t129 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t129.{core::Set::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t129;
+  core::Map<core::String*, core::List<core::int*>*>* map12 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t130 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t130.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t130;
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t131 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t131.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t131;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t132 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t132.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t132;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String*}, #t134.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t133;
+  core::List<dynamic>* list21 = block {
+    final core::List<dynamic>* #t135 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t135.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t135;
+  core::Set<dynamic>* set21 = block {
+    final core::Set<dynamic>* #t136 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t136.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t136;
+  core::Map<core::String*, dynamic>* map21 = block {
+    final core::Map<core::String*, dynamic>* #t137 = <core::String*, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String*}, #t138.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t137;
+  core::List<core::List<core::int*>*>* list22 = block {
+    final core::List<core::List<core::int*>*>* #t139 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t139.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t139;
+  core::Set<core::List<core::int*>*>* set22 = block {
+    final core::Set<core::List<core::int*>*>* #t140 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t140.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t140;
+  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t141 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String*}, #t142.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t141;
+  core::List<core::int*>* list30 = block {
+    final core::List<core::int*>* #t143 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t143.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t143;
+  core::Set<core::int*>* set30 = block {
+    final core::Set<core::int*>* #t144 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t144.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t144;
+  core::Map<core::String*, core::int*>* map30 = block {
+    final core::Map<core::String*, core::int*>* #t145 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String*}, #t146.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t145;
+  core::List<dynamic>* list31 = block {
+    final core::List<dynamic>* #t147 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t147.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t147;
+  core::Set<dynamic>* set31 = block {
+    final core::Set<dynamic>* #t148 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t148.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t148;
+  core::Map<core::String*, dynamic>* map31 = block {
+    final core::Map<core::String*, dynamic>* #t149 = <core::String*, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String*}, #t150.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t149;
+  core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t151 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t151.{core::List::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* void};
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t151.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t151;
-  core::Set<core::List<core::int*>*>* set12 = block {
+  core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t152 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t152.{core::Set::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t152.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
     #t152.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t152;
-  core::Map<core::String*, core::List<core::int*>*>* map12 = block {
+  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t153.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String*}, #t154.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t153;
-  core::List<core::int*>* list20 = block {
-    final core::List<core::int*>* #t154 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t154.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
-  } =>#t154;
-  core::Set<core::int*>* set20 = block {
-    final core::Set<core::int*>* #t155 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t155.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
-    #t155.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t155;
-  core::Map<core::String*, core::int*>* map20 = block {
-    final core::Map<core::String*, core::int*>* #t156 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t157 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-        #t156.{core::Map::[]=}{Invariant}(#t157.{core::MapEntry::key}{core::String*}, #t157.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-    #t156.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t156;
-  core::List<dynamic>* list21 = block {
-    final core::List<dynamic>* #t158 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t158.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
-  } =>#t158;
-  core::Set<dynamic>* set21 = block {
-    final core::Set<dynamic>* #t159 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t159.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
-    #t159.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t159;
-  core::Map<core::String*, dynamic>* map21 = block {
-    final core::Map<core::String*, dynamic>* #t160 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, dynamic>* #t161 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
-        #t160.{core::Map::[]=}{Invariant}(#t161.{core::MapEntry::key}{core::String*}, #t161.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
-    #t160.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t160;
-  core::List<core::List<core::int*>*>* list22 = block {
-    final core::List<core::List<core::int*>*>* #t162 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t162.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t162;
-  core::Set<core::List<core::int*>*>* set22 = block {
-    final core::Set<core::List<core::int*>*>* #t163 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t163.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t163.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t163;
-  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t164 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t165 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-        #t164.{core::Map::[]=}{Invariant}(#t165.{core::MapEntry::key}{core::String*}, #t165.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t164.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t164;
-  core::List<core::int*>* list30 = block {
-    final core::List<core::int*>* #t166 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t166.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
-  } =>#t166;
-  core::Set<core::int*>* set30 = block {
-    final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t167.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
-    #t167.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t167;
-  core::Map<core::String*, core::int*>* map30 = block {
-    final core::Map<core::String*, core::int*>* #t168 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t169 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-          #t168.{core::Map::[]=}{Invariant}(#t169.{core::MapEntry::key}{core::String*}, #t169.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-    #t168.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t168;
-  core::List<dynamic>* list31 = block {
-    final core::List<dynamic>* #t170 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t170.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
-  } =>#t170;
-  core::Set<dynamic>* set31 = block {
-    final core::Set<dynamic>* #t171 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t171.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
-    #t171.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t171;
-  core::Map<core::String*, dynamic>* map31 = block {
-    final core::Map<core::String*, dynamic>* #t172 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t173 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
-          #t172.{core::Map::[]=}{Invariant}(#t173.{core::MapEntry::key}{core::String*}, #t173.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
-    #t172.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t172;
-  core::List<core::List<core::int*>*>* list33 = block {
-    final core::List<core::List<core::int*>*>* #t174 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t174.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t174;
-  core::Set<core::List<core::int*>*>* set33 = block {
-    final core::Set<core::List<core::int*>*>* #t175 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t175.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t175.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t175;
-  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t176 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t177 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-          #t176.{core::Map::[]=}{Invariant}(#t177.{core::MapEntry::key}{core::String*}, #t177.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t176.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t176;
   core::List<core::List<core::int*>*>* list40 = block {
-    final core::List<core::List<core::int*>*>* #t178 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t155 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t178.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t178;
+      #t155.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t155;
   core::Set<core::List<core::int*>*>* set40 = block {
-    final core::Set<core::List<core::int*>*>* #t179 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t156 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t179.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t179.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t179;
+      #t156.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t156;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t180 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t157 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t181 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-        #t180.{core::Map::[]=}{Invariant}(#t181.{core::MapEntry::key}{core::String*}, #t181.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t180.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t180;
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String*}, #t158.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t157;
   core::List<core::List<core::int*>*>* list41 = block {
-    final core::List<core::List<core::int*>*>* #t182 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t159 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t182.{core::List::addAll}{Invariant}( block {
-        final core::Set<core::List<core::int*>*>* #t183 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t183.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
-      } =>#t183){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t182;
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t160 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t160.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t160){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t159;
   core::Set<core::List<core::int*>*>* set41 = block {
-    final core::Set<core::List<core::int*>*>* #t184 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t161 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t184.{core::Set::addAll}{Invariant}( block {
-        final core::Set<core::List<core::int*>*>* #t185 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t185.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
-      } =>#t185){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t184.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t184;
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t162 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t162.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t162){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t161;
   core::List<core::List<core::int*>*>* list42 = block {
-    final core::List<core::List<core::int*>*>* #t186 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t163 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t186.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t186;
+        #t163.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t163;
   core::Set<core::List<core::int*>*>* set42 = block {
-    final core::Set<core::List<core::int*>*>* #t187 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t164 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t187.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t187.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t187;
+        #t164.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t164;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t188 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t165 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t189 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-          #t188.{core::Map::[]=}{Invariant}(#t189.{core::MapEntry::key}{core::String*}, #t189.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t188.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t188;
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String*}, #t166.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t165;
   core::List<core::int*>* list50 = block {
-    final core::List<core::int*>* #t190 = <core::int*>[];
+    final core::List<core::int*>* #t167 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t190.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
-  } =>#t190;
+      #t167.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t167;
   core::Set<core::int*>* set50 = block {
-    final core::Set<core::int*>* #t191 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t168 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t191.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
-    #t191.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t191;
+      #t168.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t168;
   core::Map<core::String*, core::int*>* map50 = block {
-    final core::Map<core::String*, core::int*>* #t192 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t169 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t193 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-        #t192.{core::Map::[]=}{Invariant}(#t193.{core::MapEntry::key}{core::String*}, #t193.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-    #t192.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t192;
+      for (final core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String*}, #t170.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t169;
   core::List<core::int*>* list51 = block {
-    final core::List<core::int*>* #t194 = <core::int*>[];
+    final core::List<core::int*>* #t171 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t194.{core::List::addAll}{Invariant}( block {
-        final core::Set<core::int*>* #t195 = col::LinkedHashSet::•<core::int*>();
-      } =>#t195){(core::Iterable<core::int*>*) →* void};
-  } =>#t194;
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t172 = col::LinkedHashSet::•<core::int*>();
+      } =>#t172){(core::Iterable<core::int*>*) →* void};
+  } =>#t171;
   core::Set<core::int*>* set51 = block {
-    final core::Set<core::int*>* #t196 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t173 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t196.{core::Set::addAll}{Invariant}( block {
-        final core::Set<core::int*>* #t197 = col::LinkedHashSet::•<core::int*>();
-      } =>#t197){(core::Iterable<core::int*>*) →* void};
-    #t196.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t196;
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t174 = col::LinkedHashSet::•<core::int*>();
+      } =>#t174){(core::Iterable<core::int*>*) →* void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t173;
   core::List<core::int*>* list52 = block {
-    final core::List<core::int*>* #t198 = <core::int*>[];
+    final core::List<core::int*>* #t175 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t198.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
-  } =>#t198;
+        #t175.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t175;
   core::Set<core::int*>* set52 = block {
-    final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t176 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t199.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
-    #t199.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t199;
+        #t176.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t176;
   core::List<core::List<core::int*>*>* list60 = block {
-    final core::List<core::List<core::int*>*>* #t200 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t177 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t200.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t200;
+      #t177.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t177;
   core::Set<core::List<core::int*>*>* set60 = block {
-    final core::Set<core::List<core::int*>*>* #t201 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t178 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t201.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t201.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t201;
+      #t178.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t178;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t202 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t179 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t203 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-        #t202.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{core::String*}, #t203.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t202.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t202;
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String*}, #t180.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t179;
   core::List<core::List<core::int*>*>* list61 = block {
-    final core::List<core::List<core::int*>*>* #t204 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t181 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t204.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t204;
+        #t181.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t181;
   core::Set<core::List<core::int*>*>* set61 = block {
-    final core::Set<core::List<core::int*>*>* #t205 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t182 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t205.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t205.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t205;
+        #t182.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t182;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t206 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t183 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t207 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
-          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
-    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t206;
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String*}, #t184.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t183;
   core::List<core::List<core::int*>*>* list70 = block {
-    final core::List<core::List<core::int*>*>* #t208 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t185 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t208.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
-  } =>#t208;
+      #t185.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t185;
   core::Set<core::List<core::int*>*>* set70 = block {
-    final core::Set<core::List<core::int*>*>* #t209 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t186 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t209.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
-    #t209.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t209;
+      #t186.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t186;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t210 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t187 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t210.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
-    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t210;
+      #t187.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t187;
   core::List<core::List<core::int*>*>* list71 = block {
-    final core::List<core::List<core::int*>*>* #t211 = <core::List<core::int*>*>[];
+    final core::List<core::List<core::int*>*>* #t188 = <core::List<core::int*>*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t211.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
-  } =>#t211;
+        #t188.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t188;
   core::Set<core::List<core::int*>*>* set71 = block {
-    final core::Set<core::List<core::int*>*>* #t212 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t189 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t212.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
-    #t212.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t212;
+        #t189.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t189;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t190 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t213.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
-    #t213.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t213;
+        #t190.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t190;
   core::List<core::num*>* list80 = block {
-    final core::List<core::num*>* #t214 = <core::num*>[];
+    final core::List<core::num*>* #t191 = <core::num*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t214.{core::List::add}{Invariant}(42){(core::num*) →* void};
+        #t191.{core::List::add}{Invariant}(42){(core::num*) →* void};
       else
-        #t214.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
-  } =>#t214;
+        #t191.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
+  } =>#t191;
   core::Set<core::num*>* set80 = block {
-    final core::Set<core::num*>* #t215 = col::LinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t192 = col::LinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t215.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
+        #t192.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
       else
-        #t215.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
-    #t215.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t215;
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t192.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t192;
   core::Map<core::String*, core::num*>* map80 = block {
-    final core::Map<core::String*, core::num*>* #t216 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t193 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t216.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
       else
-        #t216.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
-    #t216.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t216;
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t193;
   core::List<core::num*>* list81 = block {
-    final core::List<core::num*>* #t217 = <core::num*>[];
+    final core::List<core::num*>* #t194 = <core::num*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t217.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t217.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-  } =>#t217;
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t194;
   core::Set<core::num*>* set81 = block {
-    final core::Set<core::num*>* #t218 = col::LinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t195 = col::LinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t218.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t218.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-    #t218.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t218;
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t195;
   core::Map<core::String*, core::num*>* map81 = block {
-    final core::Map<core::String*, core::num*>* #t219 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t196 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t220 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
-          #t219.{core::Map::[]=}{Invariant}(#t220.{core::MapEntry::key}{core::String*}, #t220.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+        for (final core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String*}, #t197.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        for (final core::MapEntry<core::String*, core::num*>* #t221 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
-          #t219.{core::Map::[]=}{Invariant}(#t221.{core::MapEntry::key}{core::String*}, #t221.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
-    #t219.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t219;
+        for (final core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String*}, #t198.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t196;
   core::List<dynamic>* list82 = block {
-    final core::List<dynamic>* #t222 = <dynamic>[];
+    final core::List<dynamic>* #t199 = <dynamic>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t222.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t222.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
-  } =>#t222;
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+  } =>#t199;
   core::Set<dynamic>* set82 = block {
-    final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t200 = col::LinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t223.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t223.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
-    #t223.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t223;
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t200;
   core::Map<dynamic, dynamic>* map82 = block {
-    final core::Map<dynamic, dynamic>* #t224 = <dynamic, dynamic>{};
+    final core::Map<dynamic, dynamic>* #t201 = <dynamic, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<dynamic, dynamic>* #t225 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-          #t224.{core::Map::[]=}{Invariant}(#t225.{core::MapEntry::key}{dynamic}, #t225.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+        for (final core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t226 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-          #t224.{core::Map::[]=}{Invariant}(#t226.{core::MapEntry::key}{dynamic}, #t226.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
-    #t224.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
-  } =>#t224;
+        for (final core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
+  } =>#t201;
   core::List<core::num*>* list83 = block {
-    final core::List<core::num*>* #t227 = <core::num*>[];
+    final core::List<core::num*>* #t204 = <core::num*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t227.{core::List::add}{Invariant}(42){(core::num*) →* void};
+        #t204.{core::List::add}{Invariant}(42){(core::num*) →* void};
       else
-        #t227.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-  } =>#t227;
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t204;
   core::Set<core::num*>* set83 = block {
-    final core::Set<core::num*>* #t228 = col::LinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t205 = col::LinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t228.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t228.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
-    #t228.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t228;
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t205.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t205;
   core::Map<core::String*, core::num*>* map83 = block {
-    final core::Map<core::String*, core::num*>* #t229 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t206 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t230 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
-          #t229.{core::Map::[]=}{Invariant}(#t230.{core::MapEntry::key}{core::String*}, #t230.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+        for (final core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        #t229.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
-    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t229;
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t206;
   core::List<core::int*>* list90 = block {
-    final core::List<core::int*>* #t231 = <core::int*>[];
+    final core::List<core::int*>* #t208 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t231.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-  } =>#t231;
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t208;
   core::Set<core::int*>* set90 = block {
-    final core::Set<core::int*>* #t232 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t209 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t232.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
-    #t232.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t232;
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t209.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t209;
   core::Map<core::String*, core::int*>* map90 = block {
-    final core::Map<core::String*, core::int*>* #t233 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t210 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t233.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
-    #t233.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t233;
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t210;
   core::List<core::int*>* list91 = block {
-    final core::List<core::int*>* #t234 = <core::int*>[];
+    final core::List<core::int*>* #t211 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t235 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-        final core::int* #t236 = #t235 as{TypeError} core::int*;
-        #t234.{core::List::add}{Invariant}(#t236){(core::int*) →* void};
+      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t213 = #t212 as{TypeError} core::int*;
+        #t211.{core::List::add}{Invariant}(#t213){(core::int*) →* void};
       }
-  } =>#t234;
+  } =>#t211;
   core::Set<core::int*>* set91 = block {
-    final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t214 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t238 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-        final core::int* #t239 = #t238 as{TypeError} core::int*;
-        #t237.{core::Set::add}{Invariant}(#t239){(core::int*) →* core::bool*};
+      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t216 = #t215 as{TypeError} core::int*;
+        #t214.{core::Set::add}{Invariant}(#t216){(core::int*) →* core::bool*};
       }
-    #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t237;
+    #t214.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t214;
   core::Map<core::String*, core::int*>* map91 = block {
-    final core::Map<core::String*, core::int*>* #t240 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t217 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, dynamic>* #t241 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
-        final core::String* #t242 = #t241.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
-        final core::int* #t243 = #t241.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-        #t240.{core::Map::[]=}{Invariant}(#t242, #t243){(core::String*, core::int*) →* void};
+      for (final core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+        final core::String* #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+        final core::int* #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String*, core::int*) →* void};
       }
-    #t240.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t240;
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t217;
   core::List<core::int*>* list100 = block {
-    final core::List<core::int*>* #t244 = <core::int*>[];
-    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t244.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t244;
+    final core::List<core::int*>* #t221 = <core::int*>[];
+    for (final core::int* #t222 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t221.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t221;
   core::Set<core::int*>* set100 = block {
-    final core::Set<core::int*>* #t246 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t246.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t246;
+    final core::Set<core::int*>* #t223 = col::LinkedHashSet::•<core::int*>();
+    for (final core::int* #t224 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t223.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t223;
   core::Map<core::String*, core::int*>* map100 = block {
-    final core::Map<core::String*, core::int*>* #t248 = <core::String*, core::int*>{};
-    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t248.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-  } =>#t248;
+    final core::Map<core::String*, core::int*>* #t225 = <core::String*, core::int*>{};
+    for (final core::int* #t226 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+  } =>#t225;
   core::List<core::int*>* list110 = block {
-    final core::List<core::int*>* #t250 = <core::int*>[];
+    final core::List<core::int*>* #t227 = <core::int*>[];
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t250.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t250;
+      #t227.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t227;
   core::Set<core::int*>* set110 = block {
-    final core::Set<core::int*>* #t251 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t228 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t251.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t251;
+      #t228.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t228.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t228;
   core::Map<core::String*, core::int*>* map110 = block {
-    final core::Map<core::String*, core::int*>* #t252 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t229 = <core::String*, core::int*>{};
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t252.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-    #t252.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t252;
+      #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t229;
   core::List<core::int*>* list120 = block {
-    final core::List<core::int*>* #t253 = <core::int*>[];
+    final core::List<core::int*>* #t230 = <core::int*>[];
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t253.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-  } =>#t253;
+      #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t230;
   core::Set<core::int*>* set120 = block {
-    final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t231 = col::LinkedHashSet::•<core::int*>();
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t254.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
-    #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t254;
+      #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t231.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t231;
   core::Map<core::String*, core::int*>* map120 = block {
-    final core::Map<core::String*, core::int*>* #t255 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t232 = <core::String*, core::int*>{};
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t255.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
-    #t255.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t255;
+      #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t232;
   core::List<core::int*>* list130 = block {
-    final core::List<core::int*>* #t256 = <core::int*>[];
+    final core::List<core::int*>* #t233 = <core::int*>[];
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t256.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t256;
+      #t233.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t233;
   core::Set<core::int*>* set130 = block {
-    final core::Set<core::int*>* #t257 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t234 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t257.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-  } =>#t257;
+      #t234.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t234;
   core::Map<core::int*, core::int*>* map130 = block {
-    final core::Map<core::int*, core::int*>* #t258 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t235 = <core::int*, core::int*>{};
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t258.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-  } =>#t258;
+      #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+  } =>#t235;
 }
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
   block {
-    final core::List<core::int*>* #t259 = <core::int*>[];
+    final core::List<core::int*>* #t236 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t259.{core::List::add}{Invariant}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
-  } =>#t259;
+  } =>#t236;
   block {
-    final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t261.{core::Set::add}{Invariant}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
-    #t261.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t261;
+    #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t237;
   block {
-    final core::Map<core::int*, core::int*>* #t263 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t238 = <core::int*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t263.{core::Map::[]=}{Invariant}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                 ^" in "bar" as{TypeError} core::int*, let final Never* #t265 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-    #t263.{core::Map::[]=}{Invariant}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-  } =>#t263;
+  } =>#t238;
   block {
-    final core::List<core::int*>* #t267 = <core::int*>[];
+    final core::List<core::int*>* #t239 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t267.{core::List::addAll}{Invariant}(<core::int*>[let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
-  } =>#t267;
+  } =>#t239;
   block {
-    final core::Set<core::int*>* #t269 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t240 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t269.{core::Set::addAll}{Invariant}(<core::int*>[let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
-    #t269.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t269;
+    #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t240;
   block {
-    final core::Map<core::int*, core::int*>* #t271 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::int*, core::int*>* #t272 in <core::int*, core::int*>{let final Never* #t273 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                     ^" in "bar" as{TypeError} core::int*: let final Never* #t274 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-        #t271.{core::Map::[]=}{Invariant}(#t272.{core::MapEntry::key}{core::int*}, #t272.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-    #t271.{core::Map::[]=}{Invariant}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-  } =>#t271;
+  } =>#t241;
   block {
-    final core::List<core::int*>* #t276 = <core::int*>[];
+    final core::List<core::int*>* #t243 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t276.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
-  } =>#t276;
+  } =>#t243;
   block {
-    final core::Set<core::int*>* #t277 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t244 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t277.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
-    #t277.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t277;
+    #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t244;
   <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
@@ -1839,66 +1839,66 @@
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
   block {
-    final core::List<core::String*>* #t278 = <core::String*>[];
+    final core::List<core::String*>* #t245 = <core::String*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t278.{core::List::add}{Invariant}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
       else
-        #t278.{core::List::add}{Invariant}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
-  } =>#t278;
+  } =>#t245;
   block {
-    final core::Set<core::String*>* #t281 = col::LinkedHashSet::•<core::String*>();
+    final core::Set<core::String*>* #t246 = col::LinkedHashSet::•<core::String*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t281.{core::Set::add}{Invariant}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
       else
-        #t281.{core::Set::add}{Invariant}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
-    #t281.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
-  } =>#t281;
+    #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t246;
   block {
-    final core::Map<core::String*, core::String*>* #t284 = <core::String*, core::String*>{};
+    final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
       else
-        #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-    #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
-  } =>#t284;
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t247;
   block {
-    final core::List<core::int*>* #t287 = <core::int*>[];
+    final core::List<core::int*>* #t248 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t287.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
       else
-        #t287.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t287;
+        #t248.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t248;
   block {
-    final core::Set<core::int*>* #t288 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t249 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t288.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
       else
-        #t288.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t288.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t288;
+        #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t249;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
@@ -1907,28 +1907,28 @@
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
   block {
-    final core::List<core::int*>* #t289 = <core::int*>[];
+    final core::List<core::int*>* #t250 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t289.{core::List::add}{Invariant}(42){(core::int*) →* void};
+        #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
       else
-        #t289.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
-  } =>#t289;
+  } =>#t250;
   block {
-    final core::Set<core::int*>* #t290 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t251 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t290.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+        #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
       else
-        #t290.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
-    #t290.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t290;
+    #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t251;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
@@ -1938,218 +1938,218 @@
                                                                                     ^": null};
   final core::int* i = 0;
   block {
-    final core::List<core::int*>* #t291 = <core::int*>[];
-    for (final core::int* #t292 in <core::int*>[1]) {
+    final core::List<core::int*>* #t252 = <core::int*>[];
+    for (final core::int* #t253 in <core::int*>[1]) {
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-      #t291.{core::List::add}{Invariant}(i){(core::int*) →* void};
+      #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
     }
-  } =>#t291;
+  } =>#t252;
   block {
-    final core::Set<core::int*>* #t293 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t294 in <core::int*>[1]) {
+    final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
+    for (final core::int* #t255 in <core::int*>[1]) {
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
-      #t293.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+      #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
     }
-    #t293.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t293;
+    #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t254;
   block {
-    final core::Map<core::String*, core::int*>* #t295 = <core::String*, core::int*>{};
-    for (final core::int* #t296 in <core::int*>[1]) {
+    final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
+    for (final core::int* #t257 in <core::int*>[1]) {
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
-      #t295.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+      #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
     }
-    #t295.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t295;
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t256;
   core::List<dynamic>* list10 = block {
-    final core::List<dynamic>* #t297 = <dynamic>[];
-    for (dynamic i in let final Never* #t298 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::List<dynamic>* #t258 = <dynamic>[];
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t297.{core::List::add}{Invariant}(i){(dynamic) →* void};
-  } =>#t297;
+      #t258.{core::List::add}{Invariant}(i){(dynamic) →* void};
+  } =>#t258;
   core::Set<dynamic>* set10 = block {
-    final core::Set<dynamic>* #t299 = col::LinkedHashSet::•<dynamic>();
-    for (dynamic i in let final Never* #t300 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::Set<dynamic>* #t259 = col::LinkedHashSet::•<dynamic>();
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t299.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
-    #t299.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t299;
+      #t259.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t259;
   core::Map<core::String*, dynamic>* map10 = block {
-    final core::Map<core::String*, dynamic>* #t301 = <core::String*, dynamic>{};
-    for (dynamic i in let final Never* #t302 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t301.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
-    #t301.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t301;
+      #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t260;
   core::List<core::int*>* list20 = block {
-    final core::List<core::int*>* #t303 = <core::int*>[];
-    for (core::int* i in <core::int*>[let final Never* #t304 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::List<core::int*>* #t261 = <core::int*>[];
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
-                               ^" in "not" as{TypeError} core::int*, let final Never* #t305 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*])
-      #t303.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t303;
+      #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t261;
   core::Set<core::int*>* set20 = block {
-    final core::Set<core::int*>* #t306 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i in <core::int*>[let final Never* #t307 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
-                              ^" in "not" as{TypeError} core::int*, let final Never* #t308 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*])
-      #t306.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    #t306.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t306;
+      #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t262.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t262;
   core::Map<core::String*, core::int*>* map20 = block {
-    final core::Map<core::String*, core::int*>* #t309 = <core::String*, core::int*>{};
-    for (core::int* i in <core::int*>[let final Never* #t310 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
-                              ^" in "not" as{TypeError} core::int*, let final Never* #t311 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*])
-      #t309.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-    #t309.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t309;
+      #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t263;
   core::List<dynamic>* list30 = block {
-    final core::List<dynamic>* #t312 = <dynamic>[];
-    await for (dynamic i in let final Never* #t313 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    final core::List<dynamic>* #t264 = <dynamic>[];
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t312.{core::List::add}{Invariant}(i){(dynamic) →* void};
-  } =>#t312;
+      #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
+  } =>#t264;
   core::Set<dynamic>* set30 = block {
-    final core::Set<dynamic>* #t314 = col::LinkedHashSet::•<dynamic>();
-    await for (dynamic i in let final Never* #t315 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    final core::Set<dynamic>* #t265 = col::LinkedHashSet::•<dynamic>();
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t314.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
-    #t314.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t314;
+      #t265.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+    #t265.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t265;
   core::Map<core::String*, dynamic>* map30 = block {
-    final core::Map<core::String*, dynamic>* #t316 = <core::String*, dynamic>{};
-    await for (dynamic i in let final Never* #t317 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    final core::Map<core::String*, dynamic>* #t266 = <core::String*, dynamic>{};
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t316.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
-    #t316.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t316;
+      #t266.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+    #t266.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t266;
   core::List<core::int*>* list40 = block {
-    final core::List<core::int*>* #t318 = <core::int*>[];
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final Never* #t319 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::List<core::int*>* #t267 = <core::int*>[];
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
-                                                         ^" in "not" as{TypeError} core::int*, let final Never* #t320 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*]))
-      #t318.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t318;
+      #t267.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t267;
   core::Set<core::int*>* set40 = block {
-    final core::Set<core::int*>* #t321 = col::LinkedHashSet::•<core::int*>();
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final Never* #t322 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int*>* #t268 = col::LinkedHashSet::•<core::int*>();
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
-                                                        ^" in "not" as{TypeError} core::int*, let final Never* #t323 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*]))
-      #t321.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    #t321.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t321;
+      #t268.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t268.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t268;
   core::Map<core::String*, core::int*>* map40 = block {
-    final core::Map<core::String*, core::int*>* #t324 = <core::String*, core::int*>{};
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final Never* #t325 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    final core::Map<core::String*, core::int*>* #t269 = <core::String*, core::int*>{};
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
-                                                        ^" in "not" as{TypeError} core::int*, let final Never* #t326 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*]))
-      #t324.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-    #t324.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t324;
+      #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t269.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t269;
   core::List<core::int*>* list50 = block {
-    final core::List<core::int*>* #t327 = <core::int*>[];
+    final core::List<core::int*>* #t270 = <core::int*>[];
     for (; ; )
-      #t327.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t327;
+      #t270.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t270;
   core::Set<core::int*>* set50 = block {
-    final core::Set<core::int*>* #t328 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t271 = col::LinkedHashSet::•<core::int*>();
     for (; ; )
-      #t328.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t328.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t328;
+      #t271.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t271.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t271;
   core::Map<core::String*, core::int*>* map50 = block {
-    final core::Map<core::String*, core::int*>* #t329 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t272 = <core::String*, core::int*>{};
     for (; ; )
-      #t329.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-    #t329.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t329;
+      #t272.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t272;
   core::List<core::int*>* list60 = block {
-    final core::List<core::int*>* #t330 = <core::int*>[];
-    for (; let final Never* #t331 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    final core::List<core::int*>* #t273 = <core::int*>[];
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
-      #t330.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t330;
+      #t273.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t273;
   core::Set<core::int*>* set60 = block {
-    final core::Set<core::int*>* #t332 = col::LinkedHashSet::•<core::int*>();
-    for (; let final Never* #t333 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    final core::Set<core::int*>* #t274 = col::LinkedHashSet::•<core::int*>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-      #t332.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t332.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t332;
+      #t274.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t274.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t274;
   core::Map<core::String*, core::int*>* map60 = block {
-    final core::Map<core::String*, core::int*>* #t334 = <core::String*, core::int*>{};
-    for (; let final Never* #t335 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    final core::Map<core::String*, core::int*>* #t275 = <core::String*, core::int*>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-      #t334.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-    #t334.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t334;
+      #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t275.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t275;
 }
 static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
   block {
-    final core::List<core::int*>* #t336 = <core::int*>[];
+    final core::List<core::int*>* #t276 = <core::int*>[];
     await for (core::int* i in stream)
-      #t336.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t336;
+      #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t276;
   block {
-    final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t277 = col::LinkedHashSet::•<core::int*>();
     await for (core::int* i in stream)
-      #t337.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-  } =>#t337;
+      #t277.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t277;
   block {
-    final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t278 = <core::String*, core::int*>{};
     await for (core::int* i in stream)
-      #t338.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-  } =>#t338;
+      #t278.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+  } =>#t278;
 }
 static method testPromotion(self::A* a) → dynamic {
   core::List<core::int*>* list10 = block {
-    final core::List<core::int*>* #t339 = <core::int*>[];
+    final core::List<core::int*>* #t279 = <core::int*>[];
     if(a is self::B*)
-      #t339.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
-  } =>#t339;
+      #t279.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
+  } =>#t279;
   core::Set<core::int*>* set10 = block {
-    final core::Set<core::int*>* #t340 = col::LinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t280 = col::LinkedHashSet::•<core::int*>();
     if(a is self::B*)
-      #t340.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
-  } =>#t340;
+      #t280.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
+  } =>#t280;
   core::Map<core::int*, core::int*>* map10 = block {
-    final core::Map<core::int*, core::int*>* #t341 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t281 = <core::int*, core::int*>{};
     if(a is self::B*)
-      #t341.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
-  } =>#t341;
+      #t281.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
+  } =>#t281;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
index 03f6ecb..59854bd 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
@@ -1022,71 +1022,71 @@
   block {
     final core::List<core::int*>* #t99 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
-    final core::Set<core::int*>* #t101 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t100 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Set::add}{Invariant}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
-    #t101.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t101;
+    #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t100;
   block {
-    final core::Map<core::String*, core::int*>* #t103 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Map::[]=}{Invariant}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
-    #t103.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t103;
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t101;
   block {
-    final core::List<core::int*>* #t105 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t102 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t105.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t102.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-  } =>#t105;
+  } =>#t102;
   block {
-    final core::Set<core::int*>* #t107 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t103 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-    #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t107;
+    #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t103;
   block {
-    final core::Map<core::String*, core::int*>* #t109 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": let final Never* #t110 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t111 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t109.{core::Map::[]=}{Invariant}(#t111.{core::MapEntry::key}{core::String*}, #t111.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t105 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t109.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t109;
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t104;
   block {
-    final core::List<core::int*>* #t112 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t106 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
                               ^"){(core::int*) →* void};
-  } =>#t112;
+  } =>#t106;
   block {
-    final core::Set<core::int*>* #t113 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t107 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t113.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int*) →* core::bool*};
-    #t113.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t113;
+    #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t107;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
@@ -1095,61 +1095,61 @@
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
   block {
-    final core::List<core::String*>* #t114 = core::_GrowableList::•<core::String*>(0);
+    final core::List<core::String*>* #t108 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::List::add}{Invariant}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t114.{core::List::add}{Invariant}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
-  } =>#t114;
+  } =>#t108;
   block {
-    final core::Set<core::String*>* #t117 = new col::_CompactLinkedHashSet::•<core::String*>();
+    final core::Set<core::String*>* #t109 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t117.{core::Set::add}{Invariant}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t117.{core::Set::add}{Invariant}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
-    #t117.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
-  } =>#t117;
+    #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t109;
   block {
-    final core::Map<core::String*, core::String*>* #t120 = <core::String*, core::String*>{};
+    final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-    #t120.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
-  } =>#t120;
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t110;
   block {
-    final core::List<core::int*>* #t123 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t111 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t123.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
                               ^"){(core::int*) →* void};
     else
-      #t123.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t123;
+      #t111.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t111;
   block {
-    final core::Set<core::int*>* #t124 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t112 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t124.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
     else
-      #t124.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t124.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t124;
+      #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t112;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
@@ -1158,26 +1158,26 @@
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
   block {
-    final core::List<core::int*>* #t125 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t113 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t125.{core::List::add}{Invariant}(42){(core::int*) →* void};
+      #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
     else
-      #t125.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
                                       ^"){(core::int*) →* void};
-  } =>#t125;
+  } =>#t113;
   block {
-    final core::Set<core::int*>* #t126 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t114 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t126.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
     else
-      #t126.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t126.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t126;
+      #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t114;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
@@ -1197,751 +1197,751 @@
   core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
   Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                      ^": null};
-  core::Map<dynamic, Null>* map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
   var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                   ^": null};
-  core::Map<dynamic, Null>* map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
   var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                    ^": null};
   core::List<core::int*>* list20 = block {
-    final core::List<core::int*>* #t127 = core::_GrowableList::•<core::int*>(0);
-    if(let final Never* #t128 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::List<core::int*>* #t115 = core::_GrowableList::•<core::int*>(0);
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
-      #t127.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t127;
+      #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t115;
   core::Set<core::int*>* set20 = block {
-    final core::Set<core::int*>* #t129 = new col::_CompactLinkedHashSet::•<core::int*>();
-    if(let final Never* #t130 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::Set<core::int*>* #t116 = new col::_CompactLinkedHashSet::•<core::int*>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
-      #t129.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t129;
+      #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t116;
   core::Map<core::int*, core::int*>* map30 = block {
-    final core::Map<core::int*, core::int*>* #t131 = <core::int*, core::int*>{};
-    if(let final Never* #t132 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
-      #t131.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
-  } =>#t131;
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
+  } =>#t117;
   core::List<core::String*>* list40 = block {
-    final core::List<core::String*>* #t133 = core::_GrowableList::•<core::String*>(0);
+    final core::List<core::String*>* #t118 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t133.{core::List::add}{Invariant}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t133.{core::List::add}{Invariant}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
-  } =>#t133;
+  } =>#t118;
   core::Set<core::String*>* set40 = block {
-    final core::Set<core::String*>* #t136 = new col::_CompactLinkedHashSet::•<core::String*>();
+    final core::Set<core::String*>* #t119 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t136.{core::Set::add}{Invariant}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t136.{core::Set::add}{Invariant}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
-  } =>#t136;
+  } =>#t119;
   core::Map<core::String*, core::int*>* map40 = block {
-    final core::Map<core::String*, core::int*>* #t139 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                           ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
-  } =>#t139;
+  } =>#t120;
   core::Map<core::int*, core::String*>* map41 = block {
-    final core::Map<core::int*, core::String*>* #t142 = <core::int*, core::String*>{};
+    final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                               ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  } =>#t142;
+  } =>#t121;
 }
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
-    final core::List<core::int*>* #t145 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t122 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t145.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t145;
+      #t122.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t122;
   core::Set<core::int*>* set10 = block {
-    final core::Set<core::int*>* #t146 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t123 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t146.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-    #t146.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t146;
+      #t123.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t123.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t123;
   core::Map<core::String*, core::int*>* map10 = block {
-    final core::Map<core::String*, core::int*>* #t147 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t124 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t147.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-    #t147.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t147;
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t124;
   core::List<dynamic>* list11 = block {
-    final core::List<dynamic>* #t148 = core::_GrowableList::•<dynamic>(0);
+    final core::List<dynamic>* #t125 = core::_GrowableList::•<dynamic>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t148.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
-  } =>#t148;
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
+  } =>#t125;
   core::Set<dynamic>* set11 = block {
-    final core::Set<dynamic>* #t149 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t126 = new col::_CompactLinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t149.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
-    #t149.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t149;
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t126;
   core::Map<core::String*, dynamic>* map11 = block {
-    final core::Map<core::String*, dynamic>* #t150 = <core::String*, dynamic>{};
+    final core::Map<core::String*, dynamic>* #t127 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t150.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
-    #t150.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t150;
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t127;
   core::List<core::List<core::int*>*>* list12 = block {
-    final core::List<core::List<core::int*>*>* #t151 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t128 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t151.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* void};
-  } =>#t151;
+      #t128.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* void};
+  } =>#t128;
   core::Set<core::List<core::int*>*>* set12 = block {
-    final core::Set<core::List<core::int*>*>* #t152 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t129 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t152.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* core::bool*};
-    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t152;
+      #t129.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* core::bool*};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t129;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t130 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t153.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int*>(42)){(core::String*, core::List<core::int*>*) →* void};
-    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t153;
+      #t130.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int*>(42)){(core::String*, core::List<core::int*>*) →* void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t130;
   core::List<core::int*>* list20 = block {
-    final core::List<core::int*>* #t154 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t131 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t154.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
-  } =>#t154;
+      #t131.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+  } =>#t131;
   core::Set<core::int*>* set20 = block {
-    final core::Set<core::int*>* #t155 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t132 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t155.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
-    #t155.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t155;
+      #t132.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t132;
   core::Map<core::String*, core::int*>* map20 = block {
-    final core::Map<core::String*, core::int*>* #t156 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t157 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t156.{core::Map::[]=}{Invariant}(#t157.{core::MapEntry::key}{core::String*}, #t157.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t134 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String*}, #t134.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t156.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t156;
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t133;
   core::List<dynamic>* list21 = block {
-    final core::List<dynamic>* #t158 = core::_GrowableList::•<dynamic>(0);
+    final core::List<dynamic>* #t135 = core::_GrowableList::•<dynamic>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t158.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
-  } =>#t158;
+      #t135.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+  } =>#t135;
   core::Set<dynamic>* set21 = block {
-    final core::Set<dynamic>* #t159 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t136 = new col::_CompactLinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t159.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
-    #t159.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t159;
+      #t136.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t136;
   core::Map<core::String*, dynamic>* map21 = block {
-    final core::Map<core::String*, dynamic>* #t160 = <core::String*, dynamic>{};
+    final core::Map<core::String*, dynamic>* #t137 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, dynamic>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, dynamic>* #t161 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, dynamic>};
-        #t160.{core::Map::[]=}{Invariant}(#t161.{core::MapEntry::key}{core::String*}, #t161.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+        final core::MapEntry<core::String*, dynamic>* #t138 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, dynamic>};
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String*}, #t138.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
       }
     }
-    #t160.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t160;
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t137;
   core::List<core::List<core::int*>*>* list22 = block {
-    final core::List<core::List<core::int*>*>* #t162 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t139 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t162.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t162;
+      #t139.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t139;
   core::Set<core::List<core::int*>*>* set22 = block {
-    final core::Set<core::List<core::int*>*>* #t163 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t140 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t163.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t163.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t163;
+      #t140.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t140;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t164 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t141 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::List<core::int*>*>* #t165 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-        #t164.{core::Map::[]=}{Invariant}(#t165.{core::MapEntry::key}{core::String*}, #t165.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+        final core::MapEntry<core::String*, core::List<core::int*>*>* #t142 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String*}, #t142.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t164.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t164;
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t141;
   core::List<core::int*>* list30 = block {
-    final core::List<core::int*>* #t166 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t143 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t166.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
-  } =>#t166;
+        #t143.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+  } =>#t143;
   core::Set<core::int*>* set30 = block {
-    final core::Set<core::int*>* #t167 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t144 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t167.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
-    #t167.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t167;
+        #t144.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t144;
   core::Map<core::String*, core::int*>* map30 = block {
-    final core::Map<core::String*, core::int*>* #t168 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t145 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::int*>* #t169 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-          #t168.{core::Map::[]=}{Invariant}(#t169.{core::MapEntry::key}{core::String*}, #t169.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+          final core::MapEntry<core::String*, core::int*>* #t146 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String*}, #t146.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
         }
       }
-    #t168.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t168;
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t145;
   core::List<dynamic>* list31 = block {
-    final core::List<dynamic>* #t170 = core::_GrowableList::•<dynamic>(0);
+    final core::List<dynamic>* #t147 = core::_GrowableList::•<dynamic>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t170.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
-  } =>#t170;
+        #t147.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+  } =>#t147;
   core::Set<dynamic>* set31 = block {
-    final core::Set<dynamic>* #t171 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t148 = new col::_CompactLinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t171.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
-    #t171.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t171;
+        #t148.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t148;
   core::Map<core::String*, dynamic>* map31 = block {
-    final core::Map<core::String*, dynamic>* #t172 = <core::String*, dynamic>{};
+    final core::Map<core::String*, dynamic>* #t149 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, dynamic>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, dynamic>* #t173 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, dynamic>};
-          #t172.{core::Map::[]=}{Invariant}(#t173.{core::MapEntry::key}{core::String*}, #t173.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+          final core::MapEntry<core::String*, dynamic>* #t150 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, dynamic>};
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String*}, #t150.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
         }
       }
-    #t172.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-  } =>#t172;
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t149;
   core::List<core::List<core::int*>*>* list33 = block {
-    final core::List<core::List<core::int*>*>* #t174 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t151 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t174.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t174;
+        #t151.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t151;
   core::Set<core::List<core::int*>*>* set33 = block {
-    final core::Set<core::List<core::int*>*>* #t175 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t152 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t175.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t175.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t175;
+        #t152.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t152;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t176 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::List<core::int*>*>* #t177 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-          #t176.{core::Map::[]=}{Invariant}(#t177.{core::MapEntry::key}{core::String*}, #t177.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+          final core::MapEntry<core::String*, core::List<core::int*>*>* #t154 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String*}, #t154.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t176.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t176;
+    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t153;
   core::List<core::List<core::int*>*>* list40 = block {
-    final core::List<core::List<core::int*>*>* #t178 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t155 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t178.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t178;
+      #t155.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t155;
   core::Set<core::List<core::int*>*>* set40 = block {
-    final core::Set<core::List<core::int*>*>* #t179 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t156 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t179.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t179.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t179;
+      #t156.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t156;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t180 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t157 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::List<core::int*>*>* #t181 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-        #t180.{core::Map::[]=}{Invariant}(#t181.{core::MapEntry::key}{core::String*}, #t181.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+        final core::MapEntry<core::String*, core::List<core::int*>*>* #t158 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String*}, #t158.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t180.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t180;
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t157;
   core::List<core::List<core::int*>*>* list41 = block {
-    final core::List<core::List<core::int*>*>* #t182 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t159 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t182.{core::List::addAll}{Invariant}( block {
-        final core::Set<core::List<core::int*>*>* #t183 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t183.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
-      } =>#t183){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t182;
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t160 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+        #t160.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t160){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t159;
   core::Set<core::List<core::int*>*>* set41 = block {
-    final core::Set<core::List<core::int*>*>* #t184 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t161 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t184.{core::Set::addAll}{Invariant}( block {
-        final core::Set<core::List<core::int*>*>* #t185 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t185.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
-      } =>#t185){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t184.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t184;
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t162 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+        #t162.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t162){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t161;
   core::List<core::List<core::int*>*>* list42 = block {
-    final core::List<core::List<core::int*>*>* #t186 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t163 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t186.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t186;
+        #t163.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t163;
   core::Set<core::List<core::int*>*>* set42 = block {
-    final core::Set<core::List<core::int*>*>* #t187 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t164 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t187.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t187.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t187;
+        #t164.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t164;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t188 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t165 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::List<core::int*>*>* #t189 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-          #t188.{core::Map::[]=}{Invariant}(#t189.{core::MapEntry::key}{core::String*}, #t189.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+          final core::MapEntry<core::String*, core::List<core::int*>*>* #t166 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String*}, #t166.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t188.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t188;
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t165;
   core::List<core::int*>* list50 = block {
-    final core::List<core::int*>* #t190 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t167 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t190.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
-  } =>#t190;
+      #t167.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+  } =>#t167;
   core::Set<core::int*>* set50 = block {
-    final core::Set<core::int*>* #t191 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t168 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t191.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
-    #t191.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t191;
+      #t168.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t168;
   core::Map<core::String*, core::int*>* map50 = block {
-    final core::Map<core::String*, core::int*>* #t192 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t169 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t193 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t192.{core::Map::[]=}{Invariant}(#t193.{core::MapEntry::key}{core::String*}, #t193.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t170 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String*}, #t170.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t192.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t192;
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t169;
   core::List<core::int*>* list51 = block {
-    final core::List<core::int*>* #t194 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t171 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t194.{core::List::addAll}{Invariant}( block {
-        final core::Set<core::int*>* #t195 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t195){(core::Iterable<core::int*>*) →* void};
-  } =>#t194;
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t172 = new col::_CompactLinkedHashSet::•<core::int*>();
+      } =>#t172){(core::Iterable<core::int*>*) →* void};
+  } =>#t171;
   core::Set<core::int*>* set51 = block {
-    final core::Set<core::int*>* #t196 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t173 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t196.{core::Set::addAll}{Invariant}( block {
-        final core::Set<core::int*>* #t197 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t197){(core::Iterable<core::int*>*) →* void};
-    #t196.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t196;
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t174 = new col::_CompactLinkedHashSet::•<core::int*>();
+      } =>#t174){(core::Iterable<core::int*>*) →* void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t173;
   core::List<core::int*>* list52 = block {
-    final core::List<core::int*>* #t198 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t175 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t198.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
-  } =>#t198;
+        #t175.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+  } =>#t175;
   core::Set<core::int*>* set52 = block {
-    final core::Set<core::int*>* #t199 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t176 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t199.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
-    #t199.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t199;
+        #t176.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t176;
   core::List<core::List<core::int*>*>* list60 = block {
-    final core::List<core::List<core::int*>*>* #t200 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t177 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t200.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t200;
+      #t177.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t177;
   core::Set<core::List<core::int*>*>* set60 = block {
-    final core::Set<core::List<core::int*>*>* #t201 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t178 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t201.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t201.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t201;
+      #t178.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t178;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t202 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t179 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::List<core::int*>*>* #t203 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-        #t202.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{core::String*}, #t203.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+        final core::MapEntry<core::String*, core::List<core::int*>*>* #t180 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String*}, #t180.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t202.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t202;
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t179;
   core::List<core::List<core::int*>*>* list61 = block {
-    final core::List<core::List<core::int*>*>* #t204 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t181 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t204.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-  } =>#t204;
+        #t181.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t181;
   core::Set<core::List<core::int*>*>* set61 = block {
-    final core::Set<core::List<core::int*>*>* #t205 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t182 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t205.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
-    #t205.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t205;
+        #t182.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t182;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t206 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t183 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::List<core::int*>*>* #t207 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
-          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+          final core::MapEntry<core::String*, core::List<core::int*>*>* #t184 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::List<core::int*>*>};
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String*}, #t184.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t206;
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t183;
   core::List<core::List<core::int*>*>* list70 = block {
-    final core::List<core::List<core::int*>*>* #t208 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t185 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t208.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
-  } =>#t208;
+      #t185.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
+  } =>#t185;
   core::Set<core::List<core::int*>*>* set70 = block {
-    final core::Set<core::List<core::int*>*>* #t209 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t186 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t209.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
-    #t209.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t209;
+      #t186.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t186;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t210 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t187 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t210.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
-    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t210;
+      #t187.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t187;
   core::List<core::List<core::int*>*>* list71 = block {
-    final core::List<core::List<core::int*>*>* #t211 = core::_GrowableList::•<core::List<core::int*>*>(0);
+    final core::List<core::List<core::int*>*>* #t188 = core::_GrowableList::•<core::List<core::int*>*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t211.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
-  } =>#t211;
+        #t188.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
+  } =>#t188;
   core::Set<core::List<core::int*>*>* set71 = block {
-    final core::Set<core::List<core::int*>*>* #t212 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
+    final core::Set<core::List<core::int*>*>* #t189 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t212.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
-    #t212.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
-  } =>#t212;
+        #t189.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t189;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
-    final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
+    final core::Map<core::String*, core::List<core::int*>*>* #t190 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t213.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
-    #t213.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
-  } =>#t213;
+        #t190.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t190;
   core::List<core::num*>* list80 = block {
-    final core::List<core::num*>* #t214 = core::_GrowableList::•<core::num*>(0);
+    final core::List<core::num*>* #t191 = core::_GrowableList::•<core::num*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t214.{core::List::add}{Invariant}(42){(core::num*) →* void};
+        #t191.{core::List::add}{Invariant}(42){(core::num*) →* void};
       else
-        #t214.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
-  } =>#t214;
+        #t191.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
+  } =>#t191;
   core::Set<core::num*>* set80 = block {
-    final core::Set<core::num*>* #t215 = new col::_CompactLinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t192 = new col::_CompactLinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t215.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
+        #t192.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
       else
-        #t215.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
-    #t215.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t215;
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t192.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t192;
   core::Map<core::String*, core::num*>* map80 = block {
-    final core::Map<core::String*, core::num*>* #t216 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t193 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t216.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
       else
-        #t216.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
-    #t216.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t216;
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t193;
   core::List<core::num*>* list81 = block {
-    final core::List<core::num*>* #t217 = core::_GrowableList::•<core::num*>(0);
+    final core::List<core::num*>* #t194 = core::_GrowableList::•<core::num*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t217.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t217.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-  } =>#t217;
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t194;
   core::Set<core::num*>* set81 = block {
-    final core::Set<core::num*>* #t218 = new col::_CompactLinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t195 = new col::_CompactLinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t218.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t218.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-    #t218.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t218;
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t195;
   core::Map<core::String*, core::num*>* map81 = block {
-    final core::Map<core::String*, core::num*>* #t219 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t196 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::num*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::num*>* #t220 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
-          #t219.{core::Map::[]=}{Invariant}(#t220.{core::MapEntry::key}{core::String*}, #t220.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+          final core::MapEntry<core::String*, core::num*>* #t197 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String*}, #t197.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
       else {
         core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::num*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::num*>* #t221 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
-          #t219.{core::Map::[]=}{Invariant}(#t221.{core::MapEntry::key}{core::String*}, #t221.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+          final core::MapEntry<core::String*, core::num*>* #t198 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String*}, #t198.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
-    #t219.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t219;
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t196;
   core::List<dynamic>* list82 = block {
-    final core::List<dynamic>* #t222 = core::_GrowableList::•<dynamic>(0);
+    final core::List<dynamic>* #t199 = core::_GrowableList::•<dynamic>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t222.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t222.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
-  } =>#t222;
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+  } =>#t199;
   core::Set<dynamic>* set82 = block {
-    final core::Set<dynamic>* #t223 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Set<dynamic>* #t200 = new col::_CompactLinkedHashSet::•<dynamic>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t223.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t223.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
-    #t223.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-  } =>#t223;
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t200;
   core::Map<dynamic, dynamic>* map82 = block {
-    final core::Map<dynamic, dynamic>* #t224 = <dynamic, dynamic>{};
+    final core::Map<dynamic, dynamic>* #t201 = <dynamic, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<dynamic, dynamic>* #t225 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-          #t224.{core::Map::[]=}{Invariant}(#t225.{core::MapEntry::key}{dynamic}, #t225.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+          final core::MapEntry<dynamic, dynamic>* #t202 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
         }
       }
       else {
         core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<dynamic, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-          #t224.{core::Map::[]=}{Invariant}(#t226.{core::MapEntry::key}{dynamic}, #t226.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+          final core::MapEntry<dynamic, dynamic>* #t203 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
         }
       }
-    #t224.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
-  } =>#t224;
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
+  } =>#t201;
   core::List<core::num*>* list83 = block {
-    final core::List<core::num*>* #t227 = core::_GrowableList::•<core::num*>(0);
+    final core::List<core::num*>* #t204 = core::_GrowableList::•<core::num*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t227.{core::List::add}{Invariant}(42){(core::num*) →* void};
+        #t204.{core::List::add}{Invariant}(42){(core::num*) →* void};
       else
-        #t227.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
-  } =>#t227;
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t204;
   core::Set<core::num*>* set83 = block {
-    final core::Set<core::num*>* #t228 = new col::_CompactLinkedHashSet::•<core::num*>();
+    final core::Set<core::num*>* #t205 = new col::_CompactLinkedHashSet::•<core::num*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t228.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t228.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
-    #t228.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
-  } =>#t228;
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t205.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t205;
   core::Map<core::String*, core::num*>* map83 = block {
-    final core::Map<core::String*, core::num*>* #t229 = <core::String*, core::num*>{};
+    final core::Map<core::String*, core::num*>* #t206 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::num*>>*};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<core::String*, core::num*>* #t230 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
-          #t229.{core::Map::[]=}{Invariant}(#t230.{core::MapEntry::key}{core::String*}, #t230.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+          final core::MapEntry<core::String*, core::num*>* #t207 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::num*>};
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
       else
-        #t229.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
-    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
-  } =>#t229;
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t206;
   core::List<core::int*>* list90 = block {
-    final core::List<core::int*>* #t231 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t208 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t231.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-  } =>#t231;
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t208;
   core::Set<core::int*>* set90 = block {
-    final core::Set<core::int*>* #t232 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t209 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t232.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
-    #t232.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t232;
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t209.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t209;
   core::Map<core::String*, core::int*>* map90 = block {
-    final core::Map<core::String*, core::int*>* #t233 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t210 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t233.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
-    #t233.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t233;
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t210;
   core::List<core::int*>* list91 = block {
-    final core::List<core::int*>* #t234 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t211 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t235 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t212 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final core::int* #t236 = #t235 as{TypeError} core::int*;
-          #t234.{core::List::add}{Invariant}(#t236){(core::int*) →* void};
+          final core::int* #t213 = #t212 as{TypeError} core::int*;
+          #t211.{core::List::add}{Invariant}(#t213){(core::int*) →* void};
         }
       }
     }
-  } =>#t234;
+  } =>#t211;
   core::Set<core::int*>* set91 = block {
-    final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t214 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t238 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t215 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final core::int* #t239 = #t238 as{TypeError} core::int*;
-          #t237.{core::Set::add}{Invariant}(#t239){(core::int*) →* core::bool*};
+          final core::int* #t216 = #t215 as{TypeError} core::int*;
+          #t214.{core::Set::add}{Invariant}(#t216){(core::int*) →* core::bool*};
         }
       }
     }
-    #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t237;
+    #t214.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t214;
   core::Map<core::String*, core::int*>* map91 = block {
-    final core::Map<core::String*, core::int*>* #t240 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t217 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, dynamic>* #t241 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        final core::MapEntry<dynamic, dynamic>* #t218 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
         {
-          final core::String* #t242 = #t241.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
-          final core::int* #t243 = #t241.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-          #t240.{core::Map::[]=}{Invariant}(#t242, #t243){(core::String*, core::int*) →* void};
+          final core::String* #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+          final core::int* #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String*, core::int*) →* void};
         }
       }
     }
-    #t240.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t240;
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t217;
   core::List<core::int*>* list100 = block {
-    final core::List<core::int*>* #t244 = core::_GrowableList::•<core::int*>(0);
-    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t244.{core::List::add}{Invariant}(42){(core::int*) →* void};
-  } =>#t244;
+    final core::List<core::int*>* #t221 = core::_GrowableList::•<core::int*>(0);
+    for (final core::int* #t222 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t221.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t221;
   core::Set<core::int*>* set100 = block {
-    final core::Set<core::int*>* #t246 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t246.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t246;
+    final core::Set<core::int*>* #t223 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (final core::int* #t224 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t223.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t223;
   core::Map<core::String*, core::int*>* map100 = block {
-    final core::Map<core::String*, core::int*>* #t248 = <core::String*, core::int*>{};
-    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
-      #t248.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-  } =>#t248;
+    final core::Map<core::String*, core::int*>* #t225 = <core::String*, core::int*>{};
+    for (final core::int* #t226 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+  } =>#t225;
   core::List<core::int*>* list110 = block {
-    final core::List<core::int*>* #t250 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t227 = core::_GrowableList::•<core::int*>(0);
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-        #t250.{core::List::add}{Invariant}(i){(core::int*) →* void};
+        #t227.{core::List::add}{Invariant}(i){(core::int*) →* void};
       }
     }
-  } =>#t250;
+  } =>#t227;
   core::Set<core::int*>* set110 = block {
-    final core::Set<core::int*>* #t251 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t228 = new col::_CompactLinkedHashSet::•<core::int*>();
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-        #t251.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+        #t228.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
       }
     }
-    #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t251;
+    #t228.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t228;
   core::Map<core::String*, core::int*>* map110 = block {
-    final core::Map<core::String*, core::int*>* #t252 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t229 = <core::String*, core::int*>{};
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-        #t252.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+        #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
       }
     }
-    #t252.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t252;
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t229;
   core::List<core::int*>* list120 = block {
-    final core::List<core::int*>* #t253 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t230 = core::_GrowableList::•<core::int*>(0);
     {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t253.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+        #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
       }
     }
-  } =>#t253;
+  } =>#t230;
   core::Set<core::int*>* set120 = block {
-    final core::Set<core::int*>* #t254 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t231 = new col::_CompactLinkedHashSet::•<core::int*>();
     {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t254.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+        #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
       }
     }
-    #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-  } =>#t254;
+    #t231.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t231;
   core::Map<core::String*, core::int*>* map120 = block {
-    final core::Map<core::String*, core::int*>* #t255 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t232 = <core::String*, core::int*>{};
     {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t255.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+        #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
       }
     }
-    #t255.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-  } =>#t255;
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t232;
   core::List<core::int*>* list130 = block {
-    final core::List<core::int*>* #t256 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t233 = core::_GrowableList::•<core::int*>(0);
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t256.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t256;
+      #t233.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t233;
   core::Set<core::int*>* set130 = block {
-    final core::Set<core::int*>* #t257 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t234 = new col::_CompactLinkedHashSet::•<core::int*>();
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t257.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-  } =>#t257;
+      #t234.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t234;
   core::Map<core::int*, core::int*>* map130 = block {
-    final core::Map<core::int*, core::int*>* #t258 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t235 = <core::int*, core::int*>{};
     for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t258.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-  } =>#t258;
+      #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+  } =>#t235;
 }
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
@@ -1960,81 +1960,81 @@
       #L1:
       {
         block {
-          final core::List<core::int*>* #t259 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t236 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t259.{core::List::add}{Invariant}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
-        } =>#t259;
+        } =>#t236;
         block {
-          final core::Set<core::int*>* #t261 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t261.{core::Set::add}{Invariant}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
-          #t261.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t261;
+          #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t237;
         block {
-          final core::Map<core::int*, core::int*>* #t263 = <core::int*, core::int*>{};
+          final core::Map<core::int*, core::int*>* #t238 = <core::int*, core::int*>{};
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t263.{core::Map::[]=}{Invariant}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                 ^" in "bar" as{TypeError} core::int*, let final Never* #t265 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-          #t263.{core::Map::[]=}{Invariant}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-        } =>#t263;
+        } =>#t238;
         block {
-          final core::List<core::int*>* #t267 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t239 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t267.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-        } =>#t267;
+        } =>#t239;
         block {
-          final core::Set<core::int*>* #t269 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t240 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t269.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-          #t269.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t269;
+          #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t240;
         block {
-          final core::Map<core::int*, core::int*>* #t271 = <core::int*, core::int*>{};
+          final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-            core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{let final Never* #t272 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                     ^" in "bar" as{TypeError} core::int*: let final Never* #t273 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::MapEntry<core::int*, core::int*>* #t274 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
-              #t271.{core::Map::[]=}{Invariant}(#t274.{core::MapEntry::key}{core::int*}, #t274.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+              final core::MapEntry<core::int*, core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
+              #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
             }
           }
-          #t271.{core::Map::[]=}{Invariant}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-        } =>#t271;
+        } =>#t241;
         block {
-          final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t243 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t276.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
-        } =>#t276;
+        } =>#t243;
         block {
-          final core::Set<core::int*>* #t277 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t244 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t277.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
-          #t277.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t277;
+          #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t244;
         <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
@@ -2043,66 +2043,66 @@
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
         block {
-          final core::List<core::String*>* #t278 = core::_GrowableList::•<core::String*>(0);
+          final core::List<core::String*>* #t245 = core::_GrowableList::•<core::String*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t278.{core::List::add}{Invariant}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
             else
-              #t278.{core::List::add}{Invariant}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
-        } =>#t278;
+        } =>#t245;
         block {
-          final core::Set<core::String*>* #t281 = new col::_CompactLinkedHashSet::•<core::String*>();
+          final core::Set<core::String*>* #t246 = new col::_CompactLinkedHashSet::•<core::String*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t281.{core::Set::add}{Invariant}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
             else
-              #t281.{core::Set::add}{Invariant}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
-          #t281.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
-        } =>#t281;
+          #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+        } =>#t246;
         block {
-          final core::Map<core::String*, core::String*>* #t284 = <core::String*, core::String*>{};
+          final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
             else
-              #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
-        } =>#t284;
+          #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+        } =>#t247;
         block {
-          final core::List<core::int*>* #t287 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t248 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t287.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
             else
-              #t287.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t287;
+              #t248.{core::List::add}{Invariant}(42){(core::int*) →* void};
+        } =>#t248;
         block {
-          final core::Set<core::int*>* #t288 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t249 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t288.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
             else
-              #t288.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t288.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t288;
+              #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+          #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t249;
         <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
@@ -2111,28 +2111,28 @@
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
         block {
-          final core::List<core::int*>* #t289 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t250 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t289.{core::List::add}{Invariant}(42){(core::int*) →* void};
+              #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
             else
-              #t289.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
-        } =>#t289;
+        } =>#t250;
         block {
-          final core::Set<core::int*>* #t290 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t251 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t290.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+              #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
             else
-              #t290.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
-          #t290.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t290;
+          #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t251;
         <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
@@ -2142,140 +2142,140 @@
                                                                                     ^": null};
         final core::int* i = 0;
         block {
-          final core::List<core::int*>* #t291 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t252 = core::_GrowableList::•<core::int*>(0);
           {
             core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t292 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+              final core::int* #t253 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-                #t291.{core::List::add}{Invariant}(i){(core::int*) →* void};
+                #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
               }
             }
           }
-        } =>#t291;
+        } =>#t252;
         block {
-          final core::Set<core::int*>* #t293 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t254 = new col::_CompactLinkedHashSet::•<core::int*>();
           {
             core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t294 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+              final core::int* #t255 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
-                #t293.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+                #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
               }
             }
           }
-          #t293.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t293;
+          #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t254;
         block {
-          final core::Map<core::String*, core::int*>* #t295 = <core::String*, core::int*>{};
+          final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
           {
             core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t296 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+              final core::int* #t257 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
-                #t295.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+                #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
               }
             }
           }
-          #t295.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t295;
+          #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+        } =>#t256;
         core::List<dynamic>* list10 = block {
-          final core::List<dynamic>* #t297 = core::_GrowableList::•<dynamic>(0);
+          final core::List<dynamic>* #t258 = core::_GrowableList::•<dynamic>(0);
           {
-            core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t298 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
-                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-              #t297.{core::List::add}{Invariant}(i){(dynamic) →* void};
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t258.{core::List::add}{Invariant}(i){(dynamic) →* void};
             }
           }
-        } =>#t297;
+        } =>#t258;
         core::Set<dynamic>* set10 = block {
-          final core::Set<dynamic>* #t299 = new col::_CompactLinkedHashSet::•<dynamic>();
+          final core::Set<dynamic>* #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
           {
-            core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t300 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
-                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-              #t299.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t259.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
             }
           }
-          #t299.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-        } =>#t299;
+          #t259.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+        } =>#t259;
         core::Map<core::String*, dynamic>* map10 = block {
-          final core::Map<core::String*, dynamic>* #t301 = <core::String*, dynamic>{};
+          final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
           {
-            core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t302 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
-                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
-              #t301.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
             }
           }
-          #t301.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-        } =>#t301;
+          #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+        } =>#t260;
         core::List<core::int*>* list20 = block {
-          final core::List<core::int*>* #t303 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t261 = core::_GrowableList::•<core::int*>(0);
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(let final Never* #t304 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
-                               ^" in "not" as{TypeError} core::int*, let final Never* #t305 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t303.{core::List::add}{Invariant}(i){(core::int*) →* void};
+              #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
             }
           }
-        } =>#t303;
+        } =>#t261;
         core::Set<core::int*>* set20 = block {
-          final core::Set<core::int*>* #t306 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t262 = new col::_CompactLinkedHashSet::•<core::int*>();
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(let final Never* #t307 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
-                              ^" in "not" as{TypeError} core::int*, let final Never* #t308 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t306.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+              #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
             }
           }
-          #t306.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t306;
+          #t262.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t262;
         core::Map<core::String*, core::int*>* map20 = block {
-          final core::Map<core::String*, core::int*>* #t309 = <core::String*, core::int*>{};
+          final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(let final Never* #t310 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
-                              ^" in "not" as{TypeError} core::int*, let final Never* #t311 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t309.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+              #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
             }
           }
-          #t309.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t309;
-        final core::List<dynamic>* #t312 = core::_GrowableList::•<dynamic>(0);
+          #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+        } =>#t263;
+        final core::List<dynamic>* #t264 = core::_GrowableList::•<dynamic>(0);
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t313 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2283,25 +2283,25 @@
           try
             #L2:
             while (true) {
-              dynamic #t314 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t315 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t312.{core::List::add}{Invariant}(i){(dynamic) →* void};
+                #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
               }
               else
                 break #L2;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t316 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
-        core::List<dynamic>* list30 = block {} =>#t312;
-        final core::Set<dynamic>* #t317 = new col::_CompactLinkedHashSet::•<dynamic>();
+        core::List<dynamic>* list30 = block {} =>#t264;
+        final core::Set<dynamic>* #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t318 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2309,27 +2309,27 @@
           try
             #L3:
             while (true) {
-              dynamic #t319 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t320 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t317.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+                #t268.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
               }
               else
                 break #L3;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t321 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::Set<dynamic>* set30 = block {
-          #t317.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-        } =>#t317;
-        final core::Map<core::String*, dynamic>* #t322 = <core::String*, dynamic>{};
+          #t268.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+        } =>#t268;
+        final core::Map<core::String*, dynamic>* #t272 = <core::String*, dynamic>{};
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t323 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2337,149 +2337,149 @@
           try
             #L4:
             while (true) {
-              dynamic #t324 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t325 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t322.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+                #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
               }
               else
                 break #L4;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t326 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::Map<core::String*, dynamic>* map30 = block {
-          #t322.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-        } =>#t322;
-        final core::List<core::int*>* #t327 = core::_GrowableList::•<core::int*>(0);
+          #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+        } =>#t272;
+        final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(let final Never* #t328 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
-                                                         ^" in "not" as{TypeError} core::int*, let final Never* #t329 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
           try
             #L5:
             while (true) {
-              dynamic #t330 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t331 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t327.{core::List::add}{Invariant}(i){(core::int*) →* void};
+                #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
               }
               else
                 break #L5;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t332 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
-        core::List<core::int*>* list40 = block {} =>#t327;
-        final core::Set<core::int*>* #t333 = new col::_CompactLinkedHashSet::•<core::int*>();
+        core::List<core::int*>* list40 = block {} =>#t276;
+        final core::Set<core::int*>* #t280 = new col::_CompactLinkedHashSet::•<core::int*>();
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(let final Never* #t334 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
-                                                        ^" in "not" as{TypeError} core::int*, let final Never* #t335 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
           try
             #L6:
             while (true) {
-              dynamic #t336 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t337 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t333.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+                #t280.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
               }
               else
                 break #L6;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t338 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::Set<core::int*>* set40 = block {
-          #t333.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t333;
-        final core::Map<core::String*, core::int*>* #t339 = <core::String*, core::int*>{};
+          #t280.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t280;
+        final core::Map<core::String*, core::int*>* #t284 = <core::String*, core::int*>{};
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(let final Never* #t340 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
-                                                        ^" in "not" as{TypeError} core::int*, let final Never* #t341 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
           try
             #L7:
             while (true) {
-              dynamic #t342 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t343 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t339.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+                #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
               }
               else
                 break #L7;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t344 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::Map<core::String*, core::int*>* map40 = block {
-          #t339.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t339;
+          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+        } =>#t284;
         core::List<core::int*>* list50 = block {
-          final core::List<core::int*>* #t345 = core::_GrowableList::•<core::int*>(0);
+          final core::List<core::int*>* #t288 = core::_GrowableList::•<core::int*>(0);
           for (; ; )
-            #t345.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t345;
+            #t288.{core::List::add}{Invariant}(42){(core::int*) →* void};
+        } =>#t288;
         core::Set<core::int*>* set50 = block {
-          final core::Set<core::int*>* #t346 = new col::_CompactLinkedHashSet::•<core::int*>();
+          final core::Set<core::int*>* #t289 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (; ; )
-            #t346.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t346.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t346;
+            #t289.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+          #t289.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t289;
         core::Map<core::String*, core::int*>* map50 = block {
-          final core::Map<core::String*, core::int*>* #t347 = <core::String*, core::int*>{};
+          final core::Map<core::String*, core::int*>* #t290 = <core::String*, core::int*>{};
           for (; ; )
-            #t347.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-          #t347.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t347;
+            #t290.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+          #t290.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+        } =>#t290;
         core::List<core::int*>* list60 = block {
-          final core::List<core::int*>* #t348 = core::_GrowableList::•<core::int*>(0);
-          for (; let final Never* #t349 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          final core::List<core::int*>* #t291 = core::_GrowableList::•<core::int*>(0);
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
-            #t348.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t348;
+            #t291.{core::List::add}{Invariant}(42){(core::int*) →* void};
+        } =>#t291;
         core::Set<core::int*>* set60 = block {
-          final core::Set<core::int*>* #t350 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (; let final Never* #t351 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          final core::Set<core::int*>* #t292 = new col::_CompactLinkedHashSet::•<core::int*>();
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t350.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t350.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t350;
+            #t292.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+          #t292.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+        } =>#t292;
         core::Map<core::String*, core::int*>* map60 = block {
-          final core::Map<core::String*, core::int*>* #t352 = <core::String*, core::int*>{};
-          for (; let final Never* #t353 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          final core::Map<core::String*, core::int*>* #t293 = <core::String*, core::int*>{};
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t352.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-          #t352.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t352;
+            #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+          #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+        } =>#t293;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -2495,37 +2495,37 @@
 }
 static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
   block {
-    final core::List<core::int*>* #t354 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t294 = core::_GrowableList::•<core::int*>(0);
     await for (core::int* i in stream)
-      #t354.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t354;
+      #t294.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t294;
   block {
-    final core::Set<core::int*>* #t355 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t295 = new col::_CompactLinkedHashSet::•<core::int*>();
     await for (core::int* i in stream)
-      #t355.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-  } =>#t355;
+      #t295.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t295;
   block {
-    final core::Map<core::String*, core::int*>* #t356 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t296 = <core::String*, core::int*>{};
     await for (core::int* i in stream)
-      #t356.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-  } =>#t356;
+      #t296.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+  } =>#t296;
 }
 static method testPromotion(self::A* a) → dynamic {
   core::List<core::int*>* list10 = block {
-    final core::List<core::int*>* #t357 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t297 = core::_GrowableList::•<core::int*>(0);
     if(a is self::B*)
-      #t357.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
-  } =>#t357;
+      #t297.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
+  } =>#t297;
   core::Set<core::int*>* set10 = block {
-    final core::Set<core::int*>* #t358 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t298 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(a is self::B*)
-      #t358.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
-  } =>#t358;
+      #t298.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
+  } =>#t298;
   core::Map<core::int*, core::int*>* map10 = block {
-    final core::Map<core::int*, core::int*>* #t359 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t299 = <core::int*, core::int*>{};
     if(a is self::B*)
-      #t359.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
-  } =>#t359;
+      #t299.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
+  } =>#t299;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
index bded27c..2e6ac11 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
@@ -170,115 +170,115 @@
 static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
   a =={self::A::==}{(self::A*) →* core::bool*} a;
   a =={self::A::==}{(self::A*) →* core::bool*} b;
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError} self::A*);
+       ^" in d as{TypeError} self::A*;
   b =={self::B::==}{(self::A*) →* core::bool*} a;
   b =={self::B::==}{(self::A*) →* core::bool*} b;
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError} self::A*);
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+       ^" in d as{TypeError} self::A*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError} self::C<dynamic>*);
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+               ^" in a as{TypeError} self::C<dynamic>*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError} self::C<dynamic>*);
+               ^" in b as{TypeError} self::C<dynamic>*;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError} self::C<core::int*>*);
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+           ^" in a as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError} self::C<core::int*>*);
+           ^" in b as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError} self::C<core::int*>*);
+           ^" in c_string as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError} self::C<core::String*>*);
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+              ^" in a as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError} self::C<core::String*>*);
+              ^" in b as{TypeError} self::C<core::String*>*;
   c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError} self::C<core::String*>*);
+              ^" in c_int as{TypeError} self::C<core::String*>*;
   c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError} self::C<core::String*>*);
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+              ^" in d as{TypeError} self::C<core::String*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError} self::C<core::int*>*);
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+       ^" in a as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError} self::C<core::int*>*);
+       ^" in b as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError} self::C<core::int*>*);
+       ^" in c_string as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
index bded27c..2e6ac11 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
@@ -170,115 +170,115 @@
 static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
   a =={self::A::==}{(self::A*) →* core::bool*} a;
   a =={self::A::==}{(self::A*) →* core::bool*} b;
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError} self::A*);
-  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError} self::A*);
+       ^" in d as{TypeError} self::A*;
   b =={self::B::==}{(self::A*) →* core::bool*} a;
   b =={self::B::==}{(self::A*) →* core::bool*} b;
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError} self::A*);
-  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError} self::A*);
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+       ^" in d as{TypeError} self::A*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError} self::C<dynamic>*);
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+               ^" in a as{TypeError} self::C<dynamic>*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError} self::C<dynamic>*);
+               ^" in b as{TypeError} self::C<dynamic>*;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError} self::C<core::int*>*);
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+           ^" in a as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError} self::C<core::int*>*);
+           ^" in b as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError} self::C<core::int*>*);
+           ^" in c_string as{TypeError} self::C<core::int*>*;
   c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError} self::C<core::String*>*);
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+              ^" in a as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError} self::C<core::String*>*);
+              ^" in b as{TypeError} self::C<core::String*>*;
   c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError} self::C<core::String*>*);
+              ^" in c_int as{TypeError} self::C<core::String*>*;
   c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError} self::C<core::String*>*);
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+              ^" in d as{TypeError} self::C<core::String*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError} self::C<core::int*>*);
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+       ^" in a as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError} self::C<core::int*>*);
+       ^" in b as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError} self::C<core::int*>*);
+       ^" in c_string as{TypeError} self::C<core::int*>*;
   d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
 }
diff --git a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
index 3789d00..923fadf 100644
--- a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
@@ -47,11 +47,11 @@
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" in this{<unresolved>}._hitTestBehavior =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.PlatformViewHitTestBehavior{dynamic}.transparent);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
index f8c5132..ada067d 100644
--- a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
@@ -38,11 +38,11 @@
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" in this{<unresolved>}._hitTestBehavior =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.PlatformViewHitTestBehavior{dynamic}.transparent);
 }
 class PlatformViewRenderBox extends self::_PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin {
   synthetic constructor •() → self::PlatformViewRenderBox
@@ -55,11 +55,11 @@
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" in this{<unresolved>}._hitTestBehavior =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.PlatformViewHitTestBehavior{dynamic}.transparent);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
index 6128ffd0..f789104 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
   if(a is core::String*) {
     () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
-    core::String* s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
   }
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
index 6128ffd0..f789104 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
   if(a is core::String*) {
     () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
-    core::String* s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
   }
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart b/pkg/front_end/testcases/general/duplicate_instantiation.dart
new file mode 100644
index 0000000..1885509
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart
@@ -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.
+
+// @dart=2.14
+
+class Class<T> {
+  Class();
+  Class.named();
+}
+
+test() {
+  Class<int>;
+  Class<int>();
+  Class<int><int>;
+  Class<int><int>();
+  Class<int>.named;
+  Class<int>.named();
+  Class<int>.named<int>;
+  Class<int>.named<int>();
+  Class<int><int>.named;
+  Class<int><int>.named();
+  Class<int><int>.named<int>;
+  Class<int><int>.named<int>();
+  Class<int><int>.named<int><int>;
+  Class<int><int>.named<int><int>();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline.expect
new file mode 100644
index 0000000..ba7ddd4
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+// @dart = 2.14
+class Class<T> {
+  Class();
+  Class.named();
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e241e25
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+// @dart = 2.14
+class Class<T> {
+  Class();
+  Class.named();
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect
new file mode 100644
index 0000000..c27f245
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect
@@ -0,0 +1,346 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13: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'.
+//   Class<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17: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'.
+//   Class<int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+//   Class<int>.named;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19: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'.
+//   Class<int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: 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'.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+//   Class<int>.named<int>;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20: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'.
+//   Class<int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: 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'.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+  Class<int>.named;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+  Class<int>.named<int>;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.outline.expect
new file mode 100644
index 0000000..9207474
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect
new file mode 100644
index 0000000..04b2fa3
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect
@@ -0,0 +1,346 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13: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'.
+//   Class<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17: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'.
+//   Class<int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+//   Class<int>.named;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19: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'.
+//   Class<int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: 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'.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+//   Class<int>.named<int>;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20: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'.
+//   Class<int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: 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'.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+  Class<int>.named;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+  Class<int>.named<int>;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int>;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(core::_GrowableList::•<core::int>(0));
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in (#C1){<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in core::_GrowableList::•<core::int>(0){<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart b/pkg/front_end/testcases/general/duplicated_declarations.dart
index 489b1ab..9862e6f 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart
@@ -34,6 +34,8 @@
   main();
   print(field);
   C.s();
+  C.this();
+  C.();
 }
 
 class C {
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index ce50dfd..e32bbfb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -45,84 +45,84 @@
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:75:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:74:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:91:3: Error: '_name' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
 //   _name,
 //   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of '_name' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:92:3: Error: 'index' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
 //   index,
 //   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'index' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
 //   values,
 //   ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
@@ -157,14 +157,14 @@
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
@@ -299,10 +299,10 @@
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
 // class Sub extends C {
 //                   ^
 //
@@ -318,32 +318,46 @@
 //   C.s();
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:62:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+//   C.this();
+//     ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:6: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   C.();
+//      ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   C.();
+//     ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
 //   static f() => s;
 //                 ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:66:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   Sub() : super(null);
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:16: Error: Superclass has no method named 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:16: Error: Superclass has no method named 'm'.
 //   m() => super.m();
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:102:38: Error: Can't use '_name' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
 //     "AnotherEnum._name": AnotherEnum._name,
 //                                      ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:103:38: Error: Can't use 'index' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
 //     "AnotherEnum.index": AnotherEnum.index,
 //                                      ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:104:41: Error: Can't use 'toString' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
 //     "AnotherEnum.toString": AnotherEnum.toString,
 //                                         ^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:105:39: Error: Can't use 'values' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
 //     "AnotherEnum.values": AnotherEnum.values,
 //                                       ^^^^^^
 //
@@ -447,7 +461,7 @@
     "1st";
   }
   static method f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:62:17: Error: Can't use 's' because it is declared more than once.
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
   static f() => s;
                 ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -463,7 +477,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:66:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   Sub() : super(null);
                ^"
@@ -625,15 +639,22 @@
   invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
   C.s();
   ^"{dynamic}.s();
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+  C.this();
+    ^^^^";
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  C.();
+    ^";
 }
 static method useAnotherEnum() → dynamic {
-  <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:102:38: Error: Can't use '_name' because it is declared more than once.
+  <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
     \"AnotherEnum._name\": AnotherEnum._name,
-                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:103:38: Error: Can't use 'index' because it is declared more than once.
+                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
     \"AnotherEnum.index\": AnotherEnum.index,
-                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:104:41: Error: Can't use 'toString' because it is declared more than once.
+                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
     \"AnotherEnum.toString\": AnotherEnum.toString,
-                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:105:39: Error: Can't use 'values' because it is declared more than once.
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
     \"AnotherEnum.values\": AnotherEnum.values,
                                       ^^^^^^"};
 }
@@ -680,7 +701,7 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
-- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:81:6)
+- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:74:6)
-- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:87:6)
+- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
+- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index 1113a3a..287add3 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -45,84 +45,84 @@
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:75:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:74:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:91:3: Error: '_name' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
 //   _name,
 //   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of '_name' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:92:3: Error: 'index' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
 //   index,
 //   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'index' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
 //   values,
 //   ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
@@ -157,14 +157,14 @@
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
@@ -299,10 +299,10 @@
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
 // class Sub extends C {
 //                   ^
 //
@@ -573,16 +573,16 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:74:3 -> InstanceConstant(const Enum#2{Enum#2.index: 0, Enum#2._name: "Enum.Enum"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:3 -> InstanceConstant(const Enum#2{Enum#2.index: 1, Enum#2._name: "Enum.a"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{Enum#2.index: 2, Enum#2._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:81:6 -> ListConstant(const <Enum#1*>[const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"}, const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"}, const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:82:3 -> InstanceConstant(const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:83:3 -> InstanceConstant(const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:74:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.Enum"}, const Enum{Enum.index: 1, Enum._name: "Enum.a"}, const Enum{Enum.index: 2, Enum._name: "Enum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:75:3 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:76:3 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{Enum.index: 2, Enum._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:87:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"}, const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"}, const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:88:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:89:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:83:6 -> ListConstant(const <Enum#1*>[const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"}, const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"}, const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:85:3 -> InstanceConstant(const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:76:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.Enum"}, const Enum{Enum.index: 1, Enum._name: "Enum.a"}, const Enum{Enum.index: 2, Enum._name: "Enum.b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:77:3 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{Enum.index: 2, Enum._name: "Enum.b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:89:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"}, const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"}, const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:91:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"})
 Extra constant evaluation: evaluated: 46, effectively constant: 22
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
index 5e552de..d6d8288 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
@@ -32,7 +32,13 @@
 static method test() → void {
   self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
   C.m(a: 1, a: 2, a: 3);
-                  ^");
+                  ^" in block {
+    invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+            ^" in block {
+      1;
+    } =>2;
+  } =>3);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
index 5e552de..d6d8288 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
@@ -32,7 +32,13 @@
 static method test() → void {
   self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
   C.m(a: 1, a: 2, a: 3);
-                  ^");
+                  ^" in block {
+    invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+            ^" in block {
+      1;
+    } =>2;
+  } =>3);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
index 0c8c749..ef2f7e9 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
@@ -12,12 +12,11 @@
 //              ^
 //
 import self as self;
-import "dart:async" as asy;
 
 static method main() → dynamic async {
   await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
   await for () {}
-             ^" as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+             ^") {
     invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
   await for () {}
              ^";
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
index 9b308ef..d223493 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
       #L1:
       {
         {
-          asy::Stream<dynamic>* :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
   await for () {}
              ^";
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
index d2e6031..35aa6ca 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
@@ -7,18 +7,17 @@
 //   for () {}
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
 //   for () {}
-//        ^
+//       ^
 //
 import self as self;
-import "dart:core" as core;
 
 static method main() → dynamic {
-  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
   for () {}
        ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
   for () {}
-       ^" as{TypeError,ForDynamic} core::bool*; ) {
+       ^"; ) {
   }
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
index e4b1c32..35aa6ca 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
@@ -7,14 +7,14 @@
 //   for () {}
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
 //   for () {}
-//        ^
+//       ^
 //
 import self as self;
 
 static method main() → dynamic {
-  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
   for () {}
        ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
   for () {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
index 090d771..75defa5 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
@@ -30,7 +30,7 @@
 // f() { m(T<R(<Z
 //           ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:9: Error: Getter not found: 'T'.
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:9: Error: Undefined name 'T'.
 // f() { m(T<R(<Z
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
index 090d771..75defa5 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
@@ -30,7 +30,7 @@
 // f() { m(T<R(<Z
 //           ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:9: Error: Getter not found: 'T'.
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:9: Error: Undefined name 'T'.
 // f() { m(T<R(<Z
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
@@ -10,9 +10,9 @@
 // typedef F<Glib.=
 //                 ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
 // typedef F<Glib.=
-//                 ^...
+//                ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
 // typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
index f95db15..e1e7c23 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
@@ -24,9 +24,9 @@
 // () async => a b < c $? >
 //                         ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
 // () async => a b < c $? >
-//                         ^...
+//                        ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
 // () async => a b < c $? >
@@ -44,7 +44,7 @@
 // () async => a b < c $? >
 //             ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Getter not found: 'a'.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
 // () async => a b < c $? >
 //             ^
 //
@@ -55,6 +55,6 @@
 import self as self;
 
 static method async() → dynamic
-  return invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Getter not found: 'a'.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
 () async => a b < c \$? >
             ^";
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
index df89136..468caf0 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
@@ -24,9 +24,9 @@
 // () async => a b < c $? >
 //                         ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
 // () async => a b < c $? >
-//                         ^...
+//                        ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
 // () async => a b < c $? >
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
index f95db15..e1e7c23 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
@@ -24,9 +24,9 @@
 // () async => a b < c $? >
 //                         ^...
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
 // () async => a b < c $? >
-//                         ^...
+//                        ^
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
 // () async => a b < c $? >
@@ -44,7 +44,7 @@
 // () async => a b < c $? >
 //             ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Getter not found: 'a'.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
 // () async => a b < c $? >
 //             ^
 //
@@ -55,6 +55,6 @@
 import self as self;
 
 static method async() → dynamic
-  return invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Getter not found: 'a'.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
 () async => a b < c \$? >
             ^";
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
index 0b43dbd..c923736 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
@@ -21,7 +21,7 @@
   invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
   yield f();
   ^";
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
  - 'List' is from 'dart:core'.
 List<int> g() {
           ^" in null;
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
index 0b43dbd..c923736 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
   yield f();
   ^";
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
  - 'List' is from 'dart:core'.
 List<int> g() {
           ^" in null;
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
index 14f7d5b..e55b3b5 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
index 6a94860..a219bab 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
index 14f7d5b..e55b3b5 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.expect b/pkg/front_end/testcases/general/external_import.dart.weak.expect
index b4adba8..0d7662f 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.expect
@@ -5,17 +5,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
index 046113e..2556da5 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
@@ -5,17 +5,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
index b4adba8..0d7662f 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
@@ -5,17 +5,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
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 3cddf53..d0e5d30 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
@@ -38,7 +38,7 @@
     return throw "unsupported";
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
-    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
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 62a00f1..8534e61 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
@@ -26,7 +26,7 @@
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = true}) → self2::Class
-    let dynamic #redirecting_factory = self2::Class::_internal in invalid-expression;
+    return new self2::Class::_internal(defaultValue: defaultValue);
 }
 
 
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 3cddf53..d0e5d30 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
@@ -38,7 +38,7 @@
     return throw "unsupported";
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
-    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
index 714a3fd..6307537 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* dynamic f = () → dynamic => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
   var f = () => x; // error
                 ^";
   field dynamic x = null;
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
index baf707f..94b2880 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* dynamic f;
+  field () →* invalid-type f;
   field dynamic x;
   synthetic constructor •() → self::Class*
     ;
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
index 714a3fd..6307537 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* dynamic f = () → dynamic => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
   var f = () => x; // error
                 ^";
   field dynamic x = null;
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
index 3360167..ba021d0 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
@@ -139,6 +139,10 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
     for (unresolved in []) {}
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (unresolved in []) {}
          ^^^^^^^^^^";
     }
     for (final dynamic #t14 in <dynamic>[]) {
@@ -146,13 +150,17 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
     for (unresolved.foo in []) {}
-         ^^^^^^^^^^"{dynamic}.foo = #t14;
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved{<invalid>}.foo = #t14;
     }
     for (final dynamic #t15 in <dynamic>[]) {
       invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
     for (c.unresolved in []) {}
+           ^^^^^^^^^^" in c{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (c.unresolved in []) {}
            ^^^^^^^^^^";
     }
     {
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
index 7825f8f..88f02cf 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
@@ -215,6 +215,10 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
     for (unresolved in []) {}
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (unresolved in []) {}
          ^^^^^^^^^^";
         }
       }
@@ -228,7 +232,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
     for (unresolved.foo in []) {}
-         ^^^^^^^^^^"{dynamic}.foo = #t14;
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved{<invalid>}.foo = #t14;
         }
       }
     }
@@ -241,6 +245,10 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
     for (c.unresolved in []) {}
+           ^^^^^^^^^^" in c{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (c.unresolved in []) {}
            ^^^^^^^^^^";
         }
       }
diff --git a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
index 530685e..c7ced86 100644
--- a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
@@ -41,7 +41,7 @@
   local<core::String>(throw ""){(core::String) → core::String};
   local<core::int>(0){(core::int) → core::int};
   local<core::int>(throw ""){(core::int) → core::int};
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
   local<int, String>(throw '');
        ^" in local{<inapplicable>}.<core::int, core::String>(throw "");
   <T extends core::num>(T) → T f = local;
@@ -49,7 +49,7 @@
   f<core::String>(throw ""){(core::String) → core::String};
   f<core::int>(0){(core::int) → core::int};
   f<core::int>(throw ""){(core::int) → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
   f<int, String>(throw '');
    ^" in f{<inapplicable>}.<core::int, core::String>(throw "");
 }
diff --git a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
index 530685e..c7ced86 100644
--- a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
   local<core::String>(throw ""){(core::String) → core::String};
   local<core::int>(0){(core::int) → core::int};
   local<core::int>(throw ""){(core::int) → core::int};
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
   local<int, String>(throw '');
        ^" in local{<inapplicable>}.<core::int, core::String>(throw "");
   <T extends core::num>(T) → T f = local;
@@ -49,7 +49,7 @@
   f<core::String>(throw ""){(core::String) → core::String};
   f<core::int>(0){(core::int) → core::int};
   f<core::int>(throw ""){(core::int) → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
   f<int, String>(throw '');
    ^" in f{<inapplicable>}.<core::int, core::String>(throw "");
 }
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
index cc24e09..e5dcef1 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
@@ -19,14 +19,14 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
 String x = identity; // No bound
            ^" in (#C1) as{TypeError} core::String*;
-static field core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
  - 'Object' is from 'dart:core'.
 String y = identityObject; // Object bound
            ^" in (#C2) as{TypeError} core::String*;
-static field core::String* z = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
  - 'List' is from 'dart:core'.
 String z = identityList; // List<T> bound
            ^" in (#C3) as{TypeError} core::String*;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
index cc24e09..e5dcef1 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
@@ -19,14 +19,14 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
 String x = identity; // No bound
            ^" in (#C1) as{TypeError} core::String*;
-static field core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
  - 'Object' is from 'dart:core'.
 String y = identityObject; // Object bound
            ^" in (#C2) as{TypeError} core::String*;
-static field core::String* z = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
  - 'List' is from 'dart:core'.
 String z = identityList; // List<T> bound
            ^" in (#C3) as{TypeError} core::String*;
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
index c406e1e..8515449 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
@@ -12,7 +12,7 @@
 static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
   return a.{core::num::+}(b){(core::num*) →* core::num*};
 static method test() → dynamic {
-  core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
           ^" in (#C1) as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
index c406e1e..8515449 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
   return a.{core::num::+}(b){(core::num*) →* core::num*};
 static method test() → dynamic {
-  core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
           ^" in (#C1) as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
index 5d0cc59..1208d2b 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
@@ -391,17 +391,17 @@
   return "";
 static method Extension|set#property3<T extends core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
 static method Extension|get#property4<T extends core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
-  return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError} Never;
 static method Extension|set#property4<T extends core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void {}
 static method Extension|get#property5a<T extends core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
-  return let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property5a => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5a<T extends core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void {}
 static method Extension|get#property5b<T extends core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
-  return let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
   T get property5b => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5b<T extends core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void {}
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
index 955feff..f60235a 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
@@ -2,15 +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.
 
-// @dart=2.13
-
-// This test is similar to
-//
-//   constructor_tearoffs/identical_instantiated_function_tearoffs.dart
-//
-// but verifies that before the constructor-tearoffs experiment was enabled,
-// instantiations in non-constant context were not canonicalized.
-
 T id<T>(T t) => t;
 
 int Function(int) implicitInstantiation = id;
@@ -20,10 +11,10 @@
 
 main() {
   expect(true, identical(implicitInstantiation, implicitInstantiation));
-  expect(false, identical(implicitInstantiation, implicitConstInstantiation));
+  expect(true, identical(implicitInstantiation, implicitConstInstantiation));
   expect(false, identical(implicitInstantiation, create<int>()));
 
-  expect(false, identical(implicitConstInstantiation, implicitInstantiation));
+  expect(true, identical(implicitConstInstantiation, implicitInstantiation));
   expect(
       true, identical(implicitConstInstantiation, implicitConstInstantiation));
   expect(false, identical(implicitConstInstantiation, create<int>()));
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
index 90e26eb..42d4b37 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.13
 T id<T>(T t) => t;
 int Function(int) implicitInstantiation = id;
 const int Function(int) implicitConstInstantiation = id;
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
index a0e9251..9a6b746 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.13
 T Function(T) create<T>() => id;
 T id<T>(T t) => t;
 const int Function(int) implicitConstInstantiation = id;
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 db34700..1f6296f 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
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field (core::int) → core::int implicitInstantiation = #C1<core::int>;
+static field (core::int) → core::int implicitInstantiation = #C2;
 static const field (core::int) → core::int implicitConstInstantiation = #C2;
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -10,9 +10,9 @@
   return #C1<self::create::T%>;
 static method main() → dynamic {
   self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
-  self::expect(false, core::identical(self::implicitInstantiation, #C2));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
   self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
-  self::expect(false, core::identical(#C2, self::implicitInstantiation));
+  self::expect(true, core::identical(#C2, self::implicitInstantiation));
   self::expect(true, core::identical(#C2, #C2));
   self::expect(false, core::identical(#C2, self::create<core::int>()));
 }
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
index 9e4506e..bf07e2b 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
@@ -15,5 +15,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:17:54 -> InstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:8:54 -> InstantiationConstant(id<int*>)
 Extra constant evaluation: evaluated: 1, effectively constant: 1
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 acbe826..6aa6e81 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
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field (core::int) → core::int implicitInstantiation = #C1<core::int>;
+static field (core::int) → core::int implicitInstantiation = #C2;
 static const field (core::int) → core::int implicitConstInstantiation = #C2;
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
   return t;
@@ -10,9 +10,9 @@
   return #C1<self::create::T%>;
 static method main() → dynamic {
   self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
-  self::expect(false, core::identical(self::implicitInstantiation, #C2));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
   self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
-  self::expect(false, core::identical(#C2, self::implicitInstantiation));
+  self::expect(true, core::identical(#C2, self::implicitInstantiation));
   self::expect(true, core::identical(#C2, #C2));
   self::expect(false, core::identical(#C2, self::create<core::int>()));
 }
@@ -27,6 +27,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: StaticInvocation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:28:13 -> BoolConstant(true)
-Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:16:43 -> InstantiationConstant(id<int*>)
-Extra constant evaluation: evaluated: 30, effectively constant: 2
+Evaluated: StaticInvocation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:19:13 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 29, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
index aa138c7..908fc59 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
 //   var y = prefix.Bar();
 //                  ^^^
 //
-// pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
 //   prefix.Bar();
 //          ^^^
 //
@@ -68,10 +68,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method testNSM() → dynamic {
-  dynamic y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+  invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
   var y = prefix.Bar();
                  ^^^";
-  invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+  invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
   prefix.Bar();
          ^^^";
 }
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
index 8007f6e..3e77916 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
 //   var y = prefix.Bar();
 //                  ^^^
 //
-// pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
 //   prefix.Bar();
 //          ^^^
 //
@@ -68,10 +68,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method testNSM() → dynamic {
-  dynamic y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+  invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
   var y = prefix.Bar();
                  ^^^";
-  invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+  invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
   prefix.Bar();
          ^^^";
 }
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart b/pkg/front_end/testcases/general/implicit_new2.dart
new file mode 100644
index 0000000..4693379
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart
@@ -0,0 +1,51 @@
+// 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';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<FutureOr<void>> test1() {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<FutureOr<void>> test2() {
+  return Future<void>.value(0);
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<FutureOr<void>> test3() {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied function may return Futu``re<void>
+FutureOr<FutureOr<void>> test4() {
+  return Future<Future<void>>.value(Future<void>.value(null));
+}
+
+// Testing that a block bodied function may return non-void values
+FutureOr<FutureOr<void>> test5() {
+  return 42;
+}
+
+// Testing that a block bodied function may return non-void Future values
+FutureOr<FutureOr<void>> test6() {
+  return new Future.value(42);
+}
+
+// Testing that a block bodied function may return overly nested Future
+// values, because `Future` is a subtype of `void`.
+FutureOr<FutureOr<void>> test() {
+  return Future<Future<Future<void>>>.value(
+      Future<Future<void>>.value(Future<void>.value(null)));
+}
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline.expect
new file mode 100644
index 0000000..9d731c3
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+import 'dart:async';
+
+void voidValue = null;
+void main() {}
+FutureOr<FutureOr<void>> test1() {}
+FutureOr<FutureOr<void>> test2() {}
+FutureOr<FutureOr<void>> test3() {}
+FutureOr<FutureOr<void>> test4() {}
+FutureOr<FutureOr<void>> test5() {}
+FutureOr<FutureOr<void>> test6() {}
+FutureOr<FutureOr<void>> test() {}
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a271d02
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+import 'dart:async';
+
+FutureOr<FutureOr<void>> test() {}
+FutureOr<FutureOr<void>> test1() {}
+FutureOr<FutureOr<void>> test2() {}
+FutureOr<FutureOr<void>> test3() {}
+FutureOr<FutureOr<void>> test4() {}
+FutureOr<FutureOr<void>> test5() {}
+FutureOr<FutureOr<void>> test6() {}
+void main() {}
+void voidValue = null;
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect
new file mode 100644
index 0000000..a487595
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field void voidValue = null;
+static method main() → void {
+  self::test1();
+  self::test2();
+  self::test3();
+  self::test4();
+  self::test5();
+  self::test6();
+}
+static method test1() → FutureOr<FutureOr<void>> {}
+static method test2() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<void>(0);
+}
+static method test3() → FutureOr<FutureOr<void>> {
+  return null as{ForNonNullableByDefault} FutureOr<void>;
+}
+static method test4() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null));
+}
+static method test5() → FutureOr<FutureOr<void>> {
+  return 42;
+}
+static method test6() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<FutureOr<void>?>(42);
+}
+static method test() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
+}
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.outline.expect
new file mode 100644
index 0000000..9cf43ff
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+
+static field void voidValue;
+static method main() → void
+  ;
+static method test1() → FutureOr<FutureOr<void>>
+  ;
+static method test2() → FutureOr<FutureOr<void>>
+  ;
+static method test3() → FutureOr<FutureOr<void>>
+  ;
+static method test4() → FutureOr<FutureOr<void>>
+  ;
+static method test5() → FutureOr<FutureOr<void>>
+  ;
+static method test6() → FutureOr<FutureOr<void>>
+  ;
+static method test() → FutureOr<FutureOr<void>>
+  ;
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3d5fcf9
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field void voidValue = null;
+static method main() → void {
+  self::test1();
+  self::test2();
+  self::test3();
+  self::test4();
+  self::test5();
+  self::test6();
+}
+static method test1() → FutureOr<FutureOr<void>> {}
+static method test2() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<void>(0);
+}
+static method test3() → FutureOr<FutureOr<void>> {
+  return null;
+}
+static method test4() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null));
+}
+static method test5() → FutureOr<FutureOr<void>> {
+  return 42;
+}
+static method test6() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<FutureOr<void>?>(42);
+}
+static method test() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
+}
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
index 00f5ffc..2795d4c 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
@@ -1,7 +1,7 @@
 // @dart = 2.9
 class C {
-  C.a(this.);
+  C.a(this);
   C.b(this.);
-  C.c(this., p);
+  C.c(this, p);
   C.d(this., p);
 }
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
index ec23930..2967d68 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
@@ -2,28 +2,20 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:7: Error: '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.
 //   C.a(this);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected an identifier, but got ')'.
-// Try inserting an identifier before ')'.
-//   C.a(this);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   C.b(this.);
 //            ^
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:7: Error: '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.
 //   C.c(this, p);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected an identifier, but got ','.
-// Try inserting an identifier before ','.
-//   C.c(this, p);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
 // Try inserting an identifier before ','.
@@ -34,13 +26,13 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a() → self::C*
+  constructor a(dynamic this) → self::C*
     : super core::Object::•()
     ;
   constructor b() → self::C*
     : super core::Object::•()
     ;
-  constructor c() → self::C*
+  constructor c(dynamic this, dynamic p) → self::C*
     : super core::Object::•()
     ;
   constructor d() → self::C*
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
index 39fdd1f..c23e2de 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
@@ -2,28 +2,20 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:7: Error: '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.
 //   C.a(this);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected an identifier, but got ')'.
-// Try inserting an identifier before ')'.
-//   C.a(this);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   C.b(this.);
 //            ^
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:7: Error: '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.
 //   C.c(this, p);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected an identifier, but got ','.
-// Try inserting an identifier before ','.
-//   C.c(this, p);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
 // Try inserting an identifier before ','.
@@ -34,11 +26,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a() → self::C*
+  constructor a(dynamic this) → self::C*
     ;
   constructor b() → self::C*
     ;
-  constructor c() → self::C*
+  constructor c(dynamic this, dynamic p) → self::C*
     ;
   constructor d() → self::C*
     ;
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
index ec23930..2967d68 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
@@ -2,28 +2,20 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:7: Error: '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.
 //   C.a(this);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected an identifier, but got ')'.
-// Try inserting an identifier before ')'.
-//   C.a(this);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   C.b(this.);
 //            ^
 //
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected '.' before this.
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:7: Error: '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.
 //   C.c(this, p);
-//           ^
-//
-// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected an identifier, but got ','.
-// Try inserting an identifier before ','.
-//   C.c(this, p);
-//           ^
+//       ^^^^
 //
 // pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
 // Try inserting an identifier before ','.
@@ -34,13 +26,13 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a() → self::C*
+  constructor a(dynamic this) → self::C*
     : super core::Object::•()
     ;
   constructor b() → self::C*
     : super core::Object::•()
     ;
-  constructor c() → self::C*
+  constructor c(dynamic this, dynamic p) → self::C*
     : super core::Object::•()
     ;
   constructor d() → self::C*
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
index ff52ce6..4574621 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
@@ -44,56 +44,56 @@
 typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
 static method test1() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(S a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test2() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
   <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
-  d = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = f;
       ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3a() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3b() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => b;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test4() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test5() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a, b, c) => a;
       ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test6() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a) => a;
       ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test7() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b, c) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test8() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
index ff52ce6..4574621 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
@@ -44,56 +44,56 @@
 typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
 static method test1() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(S a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test2() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
   <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
-  d = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = f;
       ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3a() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3b() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => b;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test4() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test5() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a, b, c) => a;
       ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test6() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a) => a;
       ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test7() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b, c) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test8() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
index c8d06c3..a16acb5 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
@@ -37,15 +37,15 @@
 }
 static method test(core::int* i, core::String* s, self::A* a) → dynamic {
   i = 1;
-  i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = s;
       ^" in s as{TypeError} core::int*;
   i == null ?{core::int*} i = 1 : null;
-  i == null ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i ??= s;
         ^" in s as{TypeError} core::int* : null;
   a = new self::A::•();
-  a = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
     ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
index c8d06c3..a16acb5 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
@@ -37,15 +37,15 @@
 }
 static method test(core::int* i, core::String* s, self::A* a) → dynamic {
   i = 1;
-  i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = s;
       ^" in s as{TypeError} core::int*;
   i == null ?{core::int*} i = 1 : null;
-  i == null ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i ??= s;
         ^" in s as{TypeError} core::int* : null;
   a = new self::A::•();
-  a = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
     ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
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 e123159..a73f4c5 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
@@ -78,7 +78,7 @@
   static factory fact() → self::C*
     return null;
   static factory fact2() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void {}
   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
@@ -99,54 +99,54 @@
 static method topLevelFunction(core::int* i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int* i) → void {}
-  core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+  core::List<core::int*>* a = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object>[];
                         ^" in <core::Object*>[];
-  core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+  core::Map<core::int*, core::String*>* b = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String>{};
                                        ^" in <core::Object*, core::String*>{};
-  core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+  core::Map<core::int*, core::String*>* c = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object>{};
                                     ^" in <core::int*, core::Object*>{};
-  (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+  (core::Object*) →* core::int* d = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = (int i) => i;
                            ^" in (core::int* i) → core::int* => i;
   self::D* e = self::C::fact() as{TypeError} self::D*;
   self::D* f = new self::D::•() as{TypeError} self::D*;
-  self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+  self::D* g = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new C.nonFact();
             ^" in new self::C::nonFact();
-  self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+  self::D* h = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new C.nonFact2();
             ^" in new self::C::nonFact2();
-  (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+  (core::Object*) →* void i = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - '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;
-  (core::Object*) →* void j = let final Never* #t8 = 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)'.
+  (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;
-  (core::Object*) →* void k = let final Never* #t9 = 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)'.
+  (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.
   void Function(Object) k = localFunction;
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 c096df0..6da6ddb 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
@@ -13,7 +13,7 @@
   static factory fact() → self::C*
     ;
   static factory fact2() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
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 c4466eb..7ea1c1e 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
@@ -78,7 +78,7 @@
   static factory fact() → self::C*
     return null;
   static factory fact2() → self::C*
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void {}
   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
@@ -99,54 +99,54 @@
 static method topLevelFunction(core::int* i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int* i) → void {}
-  core::List<core::int*>* a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+  core::List<core::int*>* a = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object>[];
                         ^" in core::_GrowableList::•<core::Object*>(0);
-  core::Map<core::int*, core::String*>* b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+  core::Map<core::int*, core::String*>* b = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String>{};
                                        ^" in <core::Object*, core::String*>{};
-  core::Map<core::int*, core::String*>* c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+  core::Map<core::int*, core::String*>* c = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object>{};
                                     ^" in <core::int*, core::Object*>{};
-  (core::Object*) →* core::int* d = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+  (core::Object*) →* core::int* d = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = (int i) => i;
                            ^" in (core::int* i) → core::int* => i;
   self::D* e = self::C::fact() as{TypeError} self::D*;
   self::D* f = new self::D::•();
-  self::D* g = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+  self::D* g = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new C.nonFact();
             ^" in new self::C::nonFact();
-  self::D* h = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+  self::D* h = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new C.nonFact2();
             ^" in new self::C::nonFact2();
-  (core::Object*) →* void i = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+  (core::Object*) →* void i = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - '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;
-  (core::Object*) →* void j = let final Never* #t8 = 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)'.
+  (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;
-  (core::Object*) →* void k = let final Never* #t9 = 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)'.
+  (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.
   void Function(Object) k = localFunction;
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect
index b53be81..bf9baa8 100644
--- a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.expect
@@ -35,13 +35,13 @@
   for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   for (var v in takesNoArg(0)) {}
-                          ^" as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+                          ^") {
   }
-  for (dynamic v in let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
   for (var v in returnVoid()) {}
                 ^" in self::returnVoid()) {
   }
-  for (dynamic v in let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (var v in returnInt()) {}
                 ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*) {
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect
index cf9dd5c..d86bd0c 100644
--- a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.transformed.expect
@@ -33,31 +33,31 @@
   return 0;
 static method test() → dynamic {
   {
-    core::Iterator<dynamic>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   for (var v in takesNoArg(0)) {}
-                          ^".{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                          ^".{core::Iterable::iterator}{core::Iterator<Never>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic v = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
       {}
     }
   }
   {
-    core::Iterator<invalid-type>* :sync-for-iterator = (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
   for (var v in returnVoid()) {}
-                ^" in self::returnVoid()).{core::Iterable::iterator}{core::Iterator<invalid-type>*};
+                ^" in self::returnVoid().{core::Iterable::iterator}{core::Iterator<Never>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic v = :sync-for-iterator.{core::Iterator::current}{invalid-type};
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
       {}
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (var v in returnInt()) {}
-                ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic v = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
       {}
     }
   }
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.expect
index d8ef127..09921df 100644
--- a/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.expect
@@ -21,7 +21,7 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
+    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super()?.foo() {}
        ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.transformed.expect
index d8ef127..09921df 100644
--- a/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
+    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super()?.foo() {}
        ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
index 0dce077..5bf84b6 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
@@ -43,6 +43,6 @@
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
-       ^^^";
+       ^^^" in null{<unresolved>}.bar();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
index dae40b0..a120ded 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
-       ^^^";
+       ^^^" in null{<unresolved>}.bar();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.expect b/pkg/front_end/testcases/general/invocations.dart.weak.expect
index f041994..64be843 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.expect
@@ -6,15 +6,15 @@
 //   z("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
+// pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
 //   z.print("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
+// pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
 //   y.z.print("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
 //   x.y.z.print("Hello, World!");
 //   ^
 //
@@ -22,15 +22,15 @@
 //       z("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+// pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
 //       z.print("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+// pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
 //       y.z.print("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
 //       x.y.z.print("Hello, World!");
 //       ^
 //
@@ -46,24 +46,24 @@
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:7:3: Error: Method not found: 'z'.
   z(\"Hello, World!\");
   ^";
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
   z.print(\"Hello, World!\");
   ^"{dynamic}.print("Hello, World!");
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
   y.z.print(\"Hello, World!\");
-  ^"{dynamic}.z{dynamic}.print("Hello, World!");
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
+  ^"{<invalid>}.z{dynamic}.print("Hello, World!");
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
   x.y.z.print(\"Hello, World!\");
-  ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!");
-  1.{core::num::+}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
+  ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!");
+  1.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
       z.print(\"Hello, World!\") +
-      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
       y.z.print(\"Hello, World!\") +
-      ^"{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
index 0ba8884..64be843 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
@@ -6,15 +6,15 @@
 //   z("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
+// pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
 //   z.print("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
+// pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
 //   y.z.print("Hello, World!");
 //   ^
 //
-// pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
 //   x.y.z.print("Hello, World!");
 //   ^
 //
@@ -22,15 +22,15 @@
 //       z("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+// pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
 //       z.print("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+// pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
 //       y.z.print("Hello, World!") +
 //       ^
 //
-// pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
 //       x.y.z.print("Hello, World!");
 //       ^
 //
@@ -46,24 +46,24 @@
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:7:3: Error: Method not found: 'z'.
   z(\"Hello, World!\");
   ^";
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
   z.print(\"Hello, World!\");
   ^"{dynamic}.print("Hello, World!");
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
   y.z.print(\"Hello, World!\");
-  ^"{dynamic}.z{dynamic}.print("Hello, World!");
-  invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
+  ^"{<invalid>}.z{dynamic}.print("Hello, World!");
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
   x.y.z.print(\"Hello, World!\");
-  ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!");
-  1.{core::num::+}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
+  ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!");
+  1.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
       z.print(\"Hello, World!\") +
-      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
       y.z.print(\"Hello, World!\") +
-      ^"{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
index e023b92..bf4d0eb 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   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
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 7d7ca21..04afde7 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   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
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 485cd83..bf4d0eb 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let Never #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   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
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.expect
index 4e2c5cc..7840a4b 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.expect
@@ -9,7 +9,7 @@
 // class X {
 //       ^
 //
-// pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Method not found: 'X.foo'.
+// pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
 //   const X.foo();
 //         ^^^
 //
@@ -47,7 +47,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Method not found: 'X.foo'.
+  invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
   const X.foo();
         ^^^";
 }
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
index 4e2c5cc..7840a4b 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
 // class X {
 //       ^
 //
-// pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Method not found: 'X.foo'.
+// pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
 //   const X.foo();
 //         ^^^
 //
@@ -47,7 +47,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Method not found: 'X.foo'.
+  invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
   const X.foo();
         ^^^";
 }
diff --git a/pkg/front_end/testcases/general/issue38253.dart.weak.expect b/pkg/front_end/testcases/general/issue38253.dart.weak.expect
index 1a33eb7..293f3f6 100644
--- a/pkg/front_end/testcases/general/issue38253.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38253.dart.weak.expect
@@ -18,7 +18,7 @@
 
 static field () → Null a = () → Null {
   function f() → invalid-type {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
     return;
     ^" in null;
   }
diff --git a/pkg/front_end/testcases/general/issue38253.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253.dart.weak.transformed.expect
index 1a33eb7..293f3f6 100644
--- a/pkg/front_end/testcases/general/issue38253.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 
 static field () → Null a = () → Null {
   function f() → invalid-type {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
     return;
     ^" in null;
   }
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
index 413a243..3d3ebd1 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
@@ -22,12 +22,12 @@
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
     return;
     ^" in null;
   }
   function f2() → invalid-type async {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
     return;
     ^" in null;
   }
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
index 6f29e79..9bfa6ab6 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
     return;
     ^" in null;
   }
@@ -40,7 +40,7 @@
       try {
         #L1:
         {
-          :return_value = let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
+          :return_value = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
     return;
     ^" in null;
           break #L1;
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
index cd01b2b..2de98d4 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
@@ -26,12 +26,12 @@
   function f1() → invalid-type {}
   function f2() → invalid-type async {}
   function f3() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int f3() {}
   ^" in null;
   }
   function f4() → asy::Future<core::int> async {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   Future<int> f4() async {}
   ^" in null;
   }
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
index 193bfdf..b9327a2 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
     return :async_future;
   }
   function f3() → core::int {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int f3() {}
   ^" in null;
   }
@@ -65,7 +65,7 @@
       try {
         #L2:
         {
-          :return_value = let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+          :return_value = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   Future<int> f4() async {}
   ^" in null;
           break #L2;
@@ -96,7 +96,7 @@
     try {
       #L3:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(f, :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error, :async_op) in null;
         :return_value = :result;
         break #L3;
       }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
index d3e641b..1c006fb 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
@@ -44,7 +44,7 @@
   method method1a(generic-covariant-impl self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
-      self::xs = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
+      self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xs = ys;
@@ -54,7 +54,7 @@
   method method1b(generic-covariant-impl self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
-      self::xss = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
+      self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xss = yss;
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
index c78819b8..eecd076 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
@@ -44,7 +44,7 @@
   method method1a(generic-covariant-impl self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */});
-      self::xs = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
+      self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xs = ys;
@@ -54,7 +54,7 @@
   method method1b(generic-covariant-impl self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = core::_GrowableList::_literal1<core::List<self::Class::T*>*>(core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */}));
-      self::xss = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
+      self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xss = yss;
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.expect
index 7334c86..d89d308 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.expect
@@ -75,10 +75,10 @@
   new self::NamedMixin2::•("");
 }
 static method errors() → dynamic {
-  new self::NamedMixin1::•(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin1(0);
                   ^" in 0 as{TypeError} core::String*);
-  new self::NamedMixin2::•(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin2(0);
                   ^" in 0 as{TypeError} core::String*);
 }
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
index 17296f9..5bc89f5 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
@@ -75,10 +75,10 @@
   new self::NamedMixin2::•("");
 }
 static method errors() → dynamic {
-  new self::NamedMixin1::•(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin1(0);
                   ^" in 0 as{TypeError} core::String*);
-  new self::NamedMixin2::•(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin2(0);
                   ^" in 0 as{TypeError} core::String*);
 }
diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.expect
index 2d3e1e5..6d313f3 100644
--- a/pkg/front_end/testcases/general/issue41252.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41252.dart.weak.expect
@@ -20,7 +20,7 @@
   static final field core::int X = null;
   static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once.
   static final int foo = X + 1;
-                         ^"{dynamic}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+                         ^"{<invalid>}.+(1);
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect
index 2d3e1e5..6d313f3 100644
--- a/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   static final field core::int X = null;
   static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once.
   static final int foo = X + 1;
-                         ^"{dynamic}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+                         ^"{<invalid>}.+(1);
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
index be9d427..44db974 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
@@ -32,18 +32,18 @@
 
 static method test() → void {
   #C1;
-  final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final x;
         ^";
-  const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const y;
         ^";
   final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final int z;
-            ^" as{TypeError,ForDynamic} core::int*;
+            ^";
   const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const int w;
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
index 78cba42..44db974 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
@@ -32,11 +32,11 @@
 
 static method test() → void {
   #C1;
-  final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final x;
         ^";
-  const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const y;
         ^";
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
index 9b90959..8e7c300 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
@@ -27,10 +27,6 @@
 //     for (PropertyState<Object, Object>> state in _states) ;
 //                              ^
 //
-// pkg/front_end/testcases/general/issue42997.dart:12:30: Error: Expected ';' after this.
-//     for (PropertyState<Object, Object>> state in _states) ;
-//                              ^
-//
 // pkg/front_end/testcases/general/issue42997.dart:12:47: Error: Unexpected token 'in'.
 //     for (PropertyState<Object, Object>> state in _states) ;
 //                                               ^^
@@ -55,17 +51,21 @@
     : super core::Object::•()
     ;
   method dispose() → void {
-    for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
+    for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
     for (PropertyState<Object, Object>> state in _states) ;
-         ^"{dynamic}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+         ^"{<invalid>}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
-                             ^" as{TypeError,ForDynamic} core::bool*; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+                             ^"; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
                              ^", invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:38: Error: The operator '>>' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '>>' operator.
     for (PropertyState<Object, Object>> state in _states) ;
-                                     ^^")
+                                     ^^" in (#C1){<unresolved>}.>>(invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:41: Error: The getter 'state' isn't defined for the class 'PropertyState#1<I, O>'.
+ - 'PropertyState#1' is from 'pkg/front_end/testcases/general/issue42997.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'state'.
+    for (PropertyState<Object, Object>> state in _states) ;
+                                        ^^^^^" in this{<unresolved>}.state))
       ;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
index 0d39294..8e7c300 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
@@ -27,10 +27,6 @@
 //     for (PropertyState<Object, Object>> state in _states) ;
 //                              ^
 //
-// pkg/front_end/testcases/general/issue42997.dart:12:30: Error: Expected ';' after this.
-//     for (PropertyState<Object, Object>> state in _states) ;
-//                              ^
-//
 // pkg/front_end/testcases/general/issue42997.dart:12:47: Error: Unexpected token 'in'.
 //     for (PropertyState<Object, Object>> state in _states) ;
 //                                               ^^
@@ -55,9 +51,9 @@
     : super core::Object::•()
     ;
   method dispose() → void {
-    for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
+    for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
     for (PropertyState<Object, Object>> state in _states) ;
-         ^"{dynamic}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+         ^"{<invalid>}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
                              ^"; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
@@ -65,7 +61,11 @@
  - 'Type' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '>>' operator.
     for (PropertyState<Object, Object>> state in _states) ;
-                                     ^^")
+                                     ^^" in (#C1){<unresolved>}.>>(invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:41: Error: The getter 'state' isn't defined for the class 'PropertyState#1<I, O>'.
+ - 'PropertyState#1' is from 'pkg/front_end/testcases/general/issue42997.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'state'.
+    for (PropertyState<Object, Object>> state in _states) ;
+                                        ^^^^^" in this{<unresolved>}.state))
       ;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.expect
index fc179e1..0fce86b 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   Set<int>.();
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
index fc179e1..0fce86b 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   Set<int>.();
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/issue44733.dart.weak.expect b/pkg/front_end/testcases/general/issue44733.dart.weak.expect
index 186db3f..0b3bd97 100644
--- a/pkg/front_end/testcases/general/issue44733.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44733.dart.weak.expect
@@ -55,7 +55,7 @@
     : super core::Object::•()
     ;
   get y() → self::E {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
  - 'E' is from 'pkg/front_end/testcases/general/issue44733.dart'.
   E get y {}
         ^" in null;
@@ -71,7 +71,7 @@
 static get x() → self::B
   return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:9:12: Error: Expected identifier, but got 'super'.
 B get x => super.x;
-           ^^^^^"{dynamic}.x as{TypeError,ForDynamic,ForNonNullableByDefault} self::B;
+           ^^^^^"{<invalid>}.x;
 static method f() → void {
   switch(self::x.{self::A::y}{invalid-type}{<invalid>}.z) {
   }
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 ed97aea..56f882f 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let dynamic #redirecting_factory = bar::Bar::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
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 e71f7a0..db7011d 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
@@ -25,7 +25,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let dynamic #redirecting_factory = bar::Bar::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
@@ -44,4 +44,4 @@
 
 Extra constant evaluation status:
 Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> InstanceConstant(const _UnmodifiableSet<Foo*>{_UnmodifiableSet._map: const _ImmutableMap<Foo*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const Bar<dynamic>{}, null]}})
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
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 f7ed607..56f882f 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
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let Never #redirecting_factory = bar::Bar::• in let Null #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
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 05d8566..dcbf1e1 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let dynamic #redirecting_factory = self::B::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
 
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 25cabc79..a916713 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
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let dynamic #redirecting_factory = self::B::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic
   ;
@@ -26,4 +26,4 @@
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
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 862829d..dcbf1e1 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
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let Never #redirecting_factory = self::B::• in let Null #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
 
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 16d5138..651a6e4 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -34,7 +34,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   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
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 68f366e..7c8d05d 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
@@ -35,7 +35,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   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
@@ -53,4 +53,4 @@
 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: 9, effectively constant: 3
+Extra constant evaluation: evaluated: 8, effectively constant: 3
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 16d5138..651a6e4 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
@@ -34,7 +34,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   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
diff --git a/pkg/front_end/testcases/general/issue45204.dart.weak.expect b/pkg/front_end/testcases/general/issue45204.dart.weak.expect
index 6488985..29d551e 100644
--- a/pkg/front_end/testcases/general/issue45204.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45204.dart.weak.expect
@@ -141,38 +141,38 @@
 static method S2|get#test3<X extends core::Object? = dynamic>(lowered final core::int #this) → <Y extends core::Object? = dynamic>(Y%) → void
   return <Y extends core::Object? = dynamic>(Y% y) → void => self::S2|test3<self::S2|get#test3::X%, Y%>(#this, y);
 static method foo() → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
   3.test();
         ^" in self::S|test(3);
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
   4.test(5, 6);
         ^" in self::S|test(4, 5, 6);
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
   5.test<int>(6);
     ^" in self::S|test<core::int>(5, 6);
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
   3.test2();
          ^" in self::S2|test2<dynamic>(3);
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
   4.test2(5, 6);
          ^" in self::S2|test2<dynamic>(4, 5, 6);
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
   5.test2<int>(6);
     ^" in self::S2|test2<dynamic, core::int>(5, 6);
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
   3.test3();
          ^" in self::S2|test3<dynamic, dynamic>(3);
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
   4.test3(5, 6);
          ^" in self::S2|test3<dynamic, core::int>(4, 5, 6);
   self::S2|test3<dynamic, core::int>(5, 6);
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
   6.test3<int, int>(7);
     ^" in self::S2|test3<dynamic, core::int, core::int>(6, 7);
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
   7.test3<int, int, int>(8);
     ^" in self::S2|test3<dynamic, core::int, core::int, core::int>(7, 8);
   invalid-expression "pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
diff --git a/pkg/front_end/testcases/general/issue45204.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45204.dart.weak.transformed.expect
new file mode 100644
index 0000000..29d551e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.weak.transformed.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+//   S(3).test();
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S(4).test(5, 6);
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+//   S(5).test<int>(6);
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+//   S2(3).test2();
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S2(4).test2(5, 6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+//   S2(5).test2<int>(6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+//   S2(3).test3();
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S2(4).test3(5, 6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+//   S2(6).test3<int, int>(7);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+//   S2(7).test3<int, int, int>(8);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test();
+//         ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test(5, 6);
+//         ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+//   5.test<int>(6);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test2();
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test2(5, 6);
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+//   5.test2<int>(6);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test3();
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test3(5, 6);
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+//   6.test3<int, int>(7);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+//   7.test3<int, int, int>(8);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension S on core::int {
+  method test = self::S|test;
+  tearoff test = self::S|get#test;
+}
+extension S2<X extends core::Object? = dynamic> on core::int {
+  method test2 = self::S2|test2;
+  tearoff test2 = self::S2|get#test2;
+  method test3 = self::S2|test3;
+  tearoff test3 = self::S2|get#test3;
+}
+static method S|test(lowered final core::int #this, core::int x) → void {}
+static method S|get#test(lowered final core::int #this) → (core::int) → void
+  return (core::int x) → void => self::S|test(#this, x);
+static method S2|test2<X extends core::Object? = dynamic>(lowered final core::int #this, core::int x) → void {}
+static method S2|get#test2<X extends core::Object? = dynamic>(lowered final core::int #this) → (core::int) → void
+  return (core::int x) → void => self::S2|test2<self::S2|get#test2::X%>(#this, x);
+static method S2|test3<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(lowered final core::int #this, self::S2|test3::Y% y) → void {}
+static method S2|get#test3<X extends core::Object? = dynamic>(lowered final core::int #this) → <Y extends core::Object? = dynamic>(Y%) → void
+  return <Y extends core::Object? = dynamic>(Y% y) → void => self::S2|test3<self::S2|get#test3::X%, Y%>(#this, y);
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+  3.test();
+        ^" in self::S|test(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test(5, 6);
+        ^" in self::S|test(4, 5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+  5.test<int>(6);
+    ^" in self::S|test<core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+  3.test2();
+         ^" in self::S2|test2<dynamic>(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test2(5, 6);
+         ^" in self::S2|test2<dynamic>(4, 5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+  5.test2<int>(6);
+    ^" in self::S2|test2<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+  3.test3();
+         ^" in self::S2|test3<dynamic, dynamic>(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test3(5, 6);
+         ^" in self::S2|test3<dynamic, core::int>(4, 5, 6);
+  self::S2|test3<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+  6.test3<int, int>(7);
+    ^" in self::S2|test3<dynamic, core::int, core::int>(6, 7);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+  7.test3<int, int, int>(8);
+    ^" in self::S2|test3<dynamic, core::int, core::int, core::int>(7, 8);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+  S(3).test();
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S(4).test(5, 6);
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+  S(5).test<int>(6);
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+  S2(3).test2();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S2(4).test2(5, 6);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+  S2(5).test2<int>(6);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+  S2(3).test3();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S2(4).test3(5, 6);
+        ^";
+  self::S2|test3<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+  S2(6).test3<int, int>(7);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+  S2(7).test3<int, int, int>(8);
+        ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart b/pkg/front_end/testcases/general/issue46334.dart
new file mode 100644
index 0000000..d84c9a6
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.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.
+
+class C {
+  factory C() = C;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue46334.dart.textual_outline.expect
new file mode 100644
index 0000000..0474482
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+class C {
+  factory C() = C;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue46334.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0474482
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+class C {
+  factory C() = C;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
new file mode 100644
index 0000000..2fd5dea
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
+//   factory C() = C;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*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 {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
new file mode 100644
index 0000000..2ac4318
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
+//   factory C() = C;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*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
+  ;
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
new file mode 100644
index 0000000..2fd5dea
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
+//   factory C() = C;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*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 {}
diff --git a/pkg/front_end/testcases/general/issue46719.dart b/pkg/front_end/testcases/general/issue46719.dart
new file mode 100644
index 0000000..46191fa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.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.
+
+// @dart=2.14
+
+import 'issue46719.dart' as self;
+
+class A<T> {
+  A();
+  A.named();
+
+  List<X> m<X>(X x) => [x];
+
+  static List<X> n<X>(X x) => [x];
+}
+
+List<X> m<X>(X x) => [x];
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {
+  var a = A();
+  a.m<int>.applyAndPrint([2]);
+  a.m<String>.applyAndPrint(['three']);
+  A.n<int>.applyAndPrint([2]);
+  A.n<String>.applyAndPrint(['three']);
+  self.m<int>.applyAndPrint([2]);
+  self.m<String>.applyAndPrint(['three']);
+  self.A.n<int>.applyAndPrint([2]);
+  self.A.n<String>.applyAndPrint(['three']);
+  A.named.toString();
+  A<int>.named.toString();
+  A.named<int>.toString();
+}
+
+void main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue46719.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue46719.dart.textual_outline.expect
new file mode 100644
index 0000000..8a49170
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+// @dart = 2.14
+import 'issue46719.dart' as self;
+
+class A<T> {
+  A();
+  A.named();
+  List<X> m<X>(X x) => [x];
+  static List<X> n<X>(X x) => [x];
+}
+
+List<X> m<X>(X x) => [x];
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {}
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue46719.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue46719.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6054b5e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+// @dart = 2.14
+import 'issue46719.dart' as self;
+
+List<X> m<X>(X x) => [x];
+
+class A<T> {
+  A();
+  A.named();
+  List<X> m<X>(X x) => [x];
+  static List<X> n<X>(X x) => [x];
+}
+
+extension FunctionApplier on Function {
+  void applyAndPrint(List<Object?> positionalArguments) =>
+      print(Function.apply(this, positionalArguments, const {}));
+}
+
+test() {}
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
new file mode 100644
index 0000000..17813ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<int>.applyAndPrint([2]);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<String>.applyAndPrint(['three']);
+//                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:33: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'.
+//   self.A.n<int>.applyAndPrint([2]);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:34: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'.
+//   self.A.n<String>.applyAndPrint(['three']);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+//   A.named.toString();
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:4: 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'.
+//   A<int>.named.toString();
+//    ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+//   A<int>.named.toString();
+//          ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+//   A.named<int>.toString();
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return <self::A::m::X%>[x];
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return <self::A::n::X%>[x];
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return <self::m::X%>[x];
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  self::A<dynamic> a = new self::A::•<dynamic>();
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<int>.applyAndPrint([2]);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<String>.applyAndPrint(['three']);
+                 ^^^^^^^^^^^^^";
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>["three"]);
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+  A.named.toString();
+    ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+  A<int>.named.toString();
+         ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+  A.named<int>.toString();
+    ^^^^^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
+  #C3 = static-tearoff self::A::n
+}
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.outline.expect
new file mode 100644
index 0000000..3e96d18
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    ;
+  constructor named() → self::A<self::A::T%>
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    ;
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    ;
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  ;
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  ;
+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
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
new file mode 100644
index 0000000..c09f829
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<int>.applyAndPrint([2]);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<String>.applyAndPrint(['three']);
+//                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:33: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'.
+//   self.A.n<int>.applyAndPrint([2]);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:34: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'.
+//   self.A.n<String>.applyAndPrint(['three']);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+//   A.named.toString();
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:4: 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'.
+//   A<int>.named.toString();
+//    ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+//   A<int>.named.toString();
+//          ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+//   A.named<int>.toString();
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return core::_GrowableList::_literal1<self::A::m::X%>(x);
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return core::_GrowableList::_literal1<self::A::n::X%>(x);
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return core::_GrowableList::_literal1<self::m::X%>(x);
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+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 {
+  self::A<dynamic> a = new self::A::•<dynamic>();
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<int>.applyAndPrint([2]);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<String>.applyAndPrint(['three']);
+                 ^^^^^^^^^^^^^";
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>("three"));
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+  A.named.toString();
+    ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+  A<int>.named.toString();
+         ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+  A.named<int>.toString();
+    ^^^^^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = <dynamic>[]
+  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
+  #C3 = static-tearoff self::A::n
+}
diff --git a/pkg/front_end/testcases/general/issue46863.dart b/pkg/front_end/testcases/general/issue46863.dart
new file mode 100644
index 0000000..7fac3cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.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.
+
+final foo = [() => const [], () => bar()];
+
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect
new file mode 100644
index 0000000..43f504e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+final foo = [() => const [], () => bar()];
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..43f504e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+final foo = [() => const [], () => bar()];
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.expect
new file mode 100644
index 0000000..20ac68c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo = <() → invalid-type>[() → core::List<dynamic> => #C1, () → invalid-type => invalid-expression "pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+final foo = [() => const [], () => bar()];
+                                   ^^^"];
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2 = <(invalid-type) → core::List<dynamic>>[(dynamic x) → core::List<dynamic> => #C1, (invalid-type x) → core::List<dynamic> => #C1];
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3 = <(core::List<dynamic>) → core::List<dynamic>>[(core::List<dynamic> x) → core::List<dynamic> => #C1, (core::List<invalid-type> x) → core::List<dynamic> => #C1];
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4 = <((invalid-type) → dynamic) → core::List<dynamic>>[((dynamic) → dynamic x) → core::List<dynamic> => #C1, ((invalid-type) → dynamic x) → core::List<dynamic> => #C1];
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect
new file mode 100644
index 0000000..29337e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo;
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2;
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3;
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect
new file mode 100644
index 0000000..2b1b44d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo = core::_GrowableList::_literal2<() → invalid-type>(() → core::List<dynamic> => #C1, () → invalid-type => invalid-expression "pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+final foo = [() => const [], () => bar()];
+                                   ^^^");
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2 = core::_GrowableList::_literal2<(invalid-type) → core::List<dynamic>>((dynamic x) → core::List<dynamic> => #C1, (invalid-type x) → core::List<dynamic> => #C1);
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3 = core::_GrowableList::_literal2<(core::List<dynamic>) → core::List<dynamic>>((core::List<dynamic> x) → core::List<dynamic> => #C1, (core::List<invalid-type> x) → core::List<dynamic> => #C1);
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4 = core::_GrowableList::_literal2<((invalid-type) → dynamic) → core::List<dynamic>>(((dynamic) → dynamic x) → core::List<dynamic> => #C1, ((invalid-type) → dynamic x) → core::List<dynamic> => #C1);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/general/issue46956.dart b/pkg/front_end/testcases/general/issue46956.dart
new file mode 100644
index 0000000..4211b23
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.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.
+
+import 'dart:async';
+
+class A<X> {}
+
+Future<X?> foo<X extends Object?>(A<X> x) => throw 42;
+
+bar(String? y) {}
+
+test(A<String> a) async {
+  final x = await () async {
+    return foo(a);
+  }();
+  bar(x); // Ok.
+}
+
+test2(A<String> a) async {
+  return /*@typeArgs=String*/ foo(a);
+}
+
+test3(A<String> a) {
+  return /*@typeArgs=String*/ foo(a);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46956.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue46956.dart.textual_outline.expect
new file mode 100644
index 0000000..c1dd88b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+import 'dart:async';
+
+class A<X> {}
+
+Future<X?> foo<X extends Object?>(A<X> x) => throw 42;
+bar(String? y) {}
+test(A<String> a) async {}
+test2(A<String> a) async {}
+test3(A<String> a) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46956.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue46956.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1c9542b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+import 'dart:async';
+
+Future<X?> foo<X extends Object?>(A<X> x) => throw 42;
+bar(String? y) {}
+
+class A<X> {}
+
+main() {}
+test(A<String> a) async {}
+test2(A<String> a) async {}
+test3(A<String> a) {}
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.expect
new file mode 100644
index 0000000..eb4a9a3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
+  return throw 42;
+static method bar(core::String? y) → dynamic {}
+static method test(self::A<core::String> a) → dynamic async {
+  final core::String? x = await(() → asy::Future<core::String?> async {
+    return self::foo<core::String>(a);
+  })(){() → asy::Future<core::String?>};
+  self::bar(x);
+}
+static method test2(self::A<core::String> a) → dynamic async {
+  return self::foo<core::String>(a);
+}
+static method test3(self::A<core::String> a) → dynamic {
+  return self::foo<core::String>(a);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.outline.expect
new file mode 100644
index 0000000..8c2c744
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+}
+static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
+  ;
+static method bar(core::String? y) → dynamic
+  ;
+static method test(self::A<core::String> a) → dynamic async 
+  ;
+static method test2(self::A<core::String> a) → dynamic async 
+  ;
+static method test3(self::A<core::String> a) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
new file mode 100644
index 0000000..ba98fca
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
@@ -0,0 +1,102 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
+  return throw 42;
+static method bar(core::String? y) → dynamic {}
+static method test(self::A<core::String> a) → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper((() → asy::Future<core::String?> /* originally async */ {
+          final asy::_Future<core::String?> :async_future = new asy::_Future::•<core::String?>();
+          core::bool* :is_sync = false;
+          FutureOr<core::String?>? :return_value;
+          (dynamic) → dynamic :async_op_then;
+          (core::Object, core::StackTrace) → dynamic :async_op_error;
+          core::int :await_jump_var = 0;
+          dynamic :await_ctx_var;
+          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            try {
+              #L2:
+              {
+                :return_value = self::foo<core::String>(a);
+                break #L2;
+              }
+              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              return;
+            }
+            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+            }
+          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+          :async_op(){() → dynamic};
+          :is_sync = true;
+          return :async_future;
+        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error, :async_op) in null;
+        final core::String? x = _in::unsafeCast<core::String?>(:result);
+        self::bar(x);
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method test2(self::A<core::String> a) → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L3:
+      {
+        :return_value = self::foo<core::String>(a);
+        break #L3;
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method test3(self::A<core::String> a) → dynamic {
+  return self::foo<core::String>(a);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart b/pkg/front_end/testcases/general/issue47036.dart
new file mode 100644
index 0000000..392b72d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.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.
+
+class Default {
+  const Default(this.defaultValue);
+
+  final Object? defaultValue;
+}
+
+class Settings {
+  const factory Settings({
+    @Default(Sidebar()) Sidebar sidebar,
+  }) = _SSettings;
+}
+
+class Sidebar {
+  const factory Sidebar() = _SSidebar;
+}
+
+abstract class _SSettings implements Settings {
+  const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+class _$_SSettings implements _SSettings {
+  const _$_SSettings({this.sidebar = const Sidebar()});
+
+  final Sidebar sidebar;
+}
+
+abstract class _SSidebar implements Sidebar {
+  const factory _SSidebar() = _$_SSidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+  const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect
new file mode 100644
index 0000000..7f1cc2a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect
@@ -0,0 +1,33 @@
+class Default {
+  const Default(this.defaultValue);
+  final Object? defaultValue;
+}
+
+class Settings {
+  const factory Settings({
+    @Default(Sidebar()) Sidebar sidebar,
+  }) = _SSettings;
+}
+
+class Sidebar {
+  const factory Sidebar() = _SSidebar;
+}
+
+abstract class _SSettings implements Settings {
+  const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+class _$_SSettings implements _SSettings {
+  const _$_SSettings({this.sidebar = const Sidebar()});
+  final Sidebar sidebar;
+}
+
+abstract class _SSidebar implements Sidebar {
+  const factory _SSidebar() = _$_SSidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+  const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0554393
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect
@@ -0,0 +1,33 @@
+abstract class _SSettings implements Settings {
+  const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+abstract class _SSidebar implements Sidebar {
+  const factory _SSidebar() = _$_SSidebar;
+}
+
+class Default {
+  const Default(this.defaultValue);
+  final Object? defaultValue;
+}
+
+class Settings {
+  const factory Settings({
+    @Default(Sidebar()) Sidebar sidebar,
+  }) = _SSettings;
+}
+
+class Sidebar {
+  const factory Sidebar() = _SSidebar;
+}
+
+class _$_SSettings implements _SSettings {
+  const _$_SSettings({this.sidebar = const Sidebar()});
+  final Sidebar sidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+  const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
new file mode 100644
index 0000000..e755d5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/  {
+  final field core::Object? defaultValue;
+  const constructor •(core::Object? defaultValue) → self::Default
+    : self::Default::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+class Settings extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+    return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*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
+    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
+    : 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 factory •() → self::_SSidebar
+    return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
+  const constructor •() → self::_$_SSidebar
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = self::_$_SSidebar {}
+  #C2 = self::Default {defaultValue:#C1}
+  #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47036.dart:
+- _$_SSidebar. (from org-dartlang-testcase:///issue47036.dart:36:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Default. (from org-dartlang-testcase:///issue47036.dart:6:9)
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
new file mode 100644
index 0000000..ebe57b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/  {
+  final field core::Object? defaultValue;
+  const constructor •(core::Object? defaultValue) → self::Default
+    : self::Default::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+class Settings extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar}) → self::Settings
+    return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*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}) → 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 = const self::_$_SSidebar::•()}) → 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 factory •() → self::_SSidebar
+    return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
+  const constructor •() → self::_$_SSidebar
+    : super core::Object::•()
+    ;
+}
+static method main() → void
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
+Extra constant evaluation: evaluated: 17, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
new file mode 100644
index 0000000..e755d5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/  {
+  final field core::Object? defaultValue;
+  const constructor •(core::Object? defaultValue) → self::Default
+    : self::Default::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+class Settings extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+    return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*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
+    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
+    : 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 factory •() → self::_SSidebar
+    return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
+  const constructor •() → self::_$_SSidebar
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = self::_$_SSidebar {}
+  #C2 = self::Default {defaultValue:#C1}
+  #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47036.dart:
+- _$_SSidebar. (from org-dartlang-testcase:///issue47036.dart:36:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Default. (from org-dartlang-testcase:///issue47036.dart:6:9)
diff --git a/pkg/front_end/testcases/general/issue_46886.dart b/pkg/front_end/testcases/general/issue_46886.dart
new file mode 100644
index 0000000..16425ef
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart
@@ -0,0 +1,32 @@
+// 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.13
+
+class Foo {
+  Foo operator >>>(_) => this;
+}
+
+extension on Symbol {
+  String operator >(_) => "Greater Than used";
+  String call(_) => "Called";
+}
+
+abstract class Bar implements List<List<List<String>>> {}
+
+main() {
+  Foo foo = new Foo();
+  foo >>> 42;
+  print(foo >>> 42);
+  print(foo >>>= 42);
+  if ((foo >>>= 42) == foo) {
+    print("same");
+  }
+
+  print(#>>>(2));
+  print(#>>>);
+
+  var x = 10 >>> 2;
+  print('x: $x');
+}
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_46886.dart.textual_outline.expect
new file mode 100644
index 0000000..8d133e3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+// @dart = 2.13
+class Foo {
+  Foo operator >>>(_) => this;
+}
+
+extension on Symbol {
+  String operator >(_) => "Greater Than used";
+  String call(_) => "Called";
+}
+
+abstract class Bar implements List<List<List<String>>> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_46886.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dab65d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+// @dart = 2.13
+abstract class Bar implements List<List<List<String>>> {}
+
+class Foo {
+  Foo operator >>>(_) => this;
+}
+
+extension on Symbol {
+  String call(_) => "Called";
+  String operator >(_) => "Greater Than used";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.weak.expect b/pkg/front_end/testcases/general/issue_46886.dart.weak.expect
new file mode 100644
index 0000000..e64cce5
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.weak.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue_46886.dart:8:16: Error: 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'.
+//   Foo operator >>>(_) => this;
+//                ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:20:7: Error: 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'.
+//   foo >>> 42;
+//       ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:21:13: Error: 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'.
+//   print(foo >>> 42);
+//             ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:22:13: Error: 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'.
+//   print(foo >>>= 42);
+//             ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:23:12: Error: 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'.
+//   if ((foo >>>= 42) == foo) {
+//            ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   print(#>>>);
+//             ^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:30:14: Error: 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'.
+//   var x = 10 >>> 2;
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic _) → self::Foo
+    return this;
+}
+abstract class Bar extends core::Object implements core::List<core::List<core::List<core::String>>> {
+  synthetic constructor •() → self::Bar
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on core::Symbol {
+  operator > = self::_extension#0|>;
+  method call = self::_extension#0|call;
+  tearoff call = self::_extension#0|get#call;
+}
+static method _extension#0|>(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Greater Than used";
+static method _extension#0|call(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Called";
+static method _extension#0|get#call(lowered final core::Symbol #this) → (dynamic) → core::String
+  return (dynamic _) → core::String => self::_extension#0|call(#this, _);
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::Foo::>>>}(42){(dynamic) → self::Foo};
+  core::print(foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  core::print(foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  if((foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo}) =={core::Object::==}{(core::Object) → core::bool} foo) {
+    core::print("same");
+  }
+  core::print(self::_extension#0|>(#C1, 2));
+  core::print(self::_extension#0|>(#C1, invalid-expression "pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: This couldn't be parsed.
+  print(#>>>);
+            ^"));
+  core::int x = 10.{core::int::>>>}(2){(core::int) → core::int};
+  core::print("x: ${x}");
+}
+
+constants  {
+  #C1 = #>>
+}
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_46886.dart.weak.outline.expect
new file mode 100644
index 0000000..73a7e48
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.weak.outline.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue_46886.dart:8:16: Error: 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'.
+//   Foo operator >>>(_) => this;
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    ;
+  operator >>>(dynamic _) → self::Foo
+    ;
+}
+abstract class Bar extends core::Object implements core::List<core::List<core::List<core::String>>> {
+  synthetic constructor •() → self::Bar
+    ;
+}
+extension _extension#0 on core::Symbol {
+  operator > = self::_extension#0|>;
+  method call = self::_extension#0|call;
+  tearoff call = self::_extension#0|get#call;
+}
+static method _extension#0|>(lowered final core::Symbol #this, dynamic _) → core::String
+  ;
+static method _extension#0|call(lowered final core::Symbol #this, dynamic _) → core::String
+  ;
+static method _extension#0|get#call(lowered final core::Symbol #this) → (dynamic) → core::String
+  return (dynamic _) → core::String => self::_extension#0|call(#this, _);
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_46886.dart.weak.transformed.expect
new file mode 100644
index 0000000..ab49a67
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.weak.transformed.expect
@@ -0,0 +1,88 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue_46886.dart:8:16: Error: 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'.
+//   Foo operator >>>(_) => this;
+//                ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:20:7: Error: 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'.
+//   foo >>> 42;
+//       ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:21:13: Error: 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'.
+//   print(foo >>> 42);
+//             ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:22:13: Error: 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'.
+//   print(foo >>>= 42);
+//             ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:23:12: Error: 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'.
+//   if ((foo >>>= 42) == foo) {
+//            ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   print(#>>>);
+//             ^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:30:14: Error: 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'.
+//   var x = 10 >>> 2;
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic _) → self::Foo
+    return this;
+}
+abstract class Bar extends core::Object implements core::List<core::List<core::List<core::String>>> {
+  synthetic constructor •() → self::Bar
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on core::Symbol {
+  operator > = self::_extension#0|>;
+  method call = self::_extension#0|call;
+  tearoff call = self::_extension#0|get#call;
+}
+static method _extension#0|>(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Greater Than used";
+static method _extension#0|call(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Called";
+static method _extension#0|get#call(lowered final core::Symbol #this) → (dynamic) → core::String
+  return (dynamic _) → core::String => self::_extension#0|call(#this, _);
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::Foo::>>>}(42){(dynamic) → self::Foo};
+  core::print(foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  core::print(foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  if((foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo}) =={core::Object::==}{(core::Object) → core::bool} foo) {
+    core::print("same");
+  }
+  core::print(self::_extension#0|>(#C1, 2));
+  core::print(self::_extension#0|>(#C1, invalid-expression "pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: This couldn't be parsed.
+  print(#>>>);
+            ^"));
+  core::int x = 10.{core::int::>>>}(2){(core::int) → core::int};
+  core::print("x: ${x}");
+}
+
+constants  {
+  #C1 = #>>
+}
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue_46886.dart:30:14 -> IntConstant(2)
+Extra constant evaluation: evaluated: 29, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.expect
index 191ed7b..60dcd8b 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.expect
@@ -22,6 +22,10 @@
 //   const NotConstant();
 //         ^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/magic_const.dart:15:39: Error: Non-constant list literal is not a constant expression.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//                                       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -55,7 +59,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal"}) → dynamic {}
+static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
index 7e7a8a4..e6298bf 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
@@ -22,6 +22,10 @@
 //   const NotConstant();
 //         ^^^^^^^^^^^
 //
+// pkg/front_end/testcases/general/magic_const.dart:15:39: Error: Non-constant list literal is not a constant expression.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//                                       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -55,7 +59,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal"}) → dynamic {}
+static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
@@ -71,7 +75,7 @@
 }
 
 Extra constant evaluation status:
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///magic_const.dart:21:8 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///magic_const.dart:21:8 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 2, effectively constant: 1
 
 
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
index 6de22e5..48ce15f 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
@@ -139,6 +139,6 @@
  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
   (new C()?.b ??= new B()).b;
-                           ^";
+                           ^" in (let final self::C* #t3 = new self::C::•() in #t3 == null ?{self::B*} null : let final self::B* #t4 = #t3.{self::C::b}{self::B*} in #t4 == null ?{self::B*} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
index 6de22e5..48ce15f 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
@@ -139,6 +139,6 @@
  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
   (new C()?.b ??= new B()).b;
-                           ^";
+                           ^" in (let final self::C* #t3 = new self::C::•() in #t3 == null ?{self::B*} null : let final self::B* #t4 = #t3.{self::C::b}{self::B*} in #t4 == null ?{self::B*} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart
new file mode 100644
index 0000000..8d1ca89
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.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<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {
+  try {
+    f();
+  } catch (e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+
+main() {
+  A<num> a = new A<int>();
+  expectThrows(() {
+    void Function<Y extends num>(Y) f = a.f;
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline.expect
new file mode 100644
index 0000000..cf5cf7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+class A<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cf5cf7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class A<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect
new file mode 100644
index 0000000..b5abc6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void {}
+}
+static method expectThrows(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num> a = new self::A::•<core::int>();
+  self::expectThrows(() → void {
+    <Y extends core::num>(Y) → void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <generic-covariant-impl Y extends core::num>(Y) → void;
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect
new file mode 100644
index 0000000..18ac6fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    ;
+  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void
+    ;
+}
+static method expectThrows(() → void f) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect
new file mode 100644
index 0000000..b5abc6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void {}
+}
+static method expectThrows(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num> a = new self::A::•<core::int>();
+  self::expectThrows(() → void {
+    <Y extends core::num>(Y) → void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <generic-covariant-impl Y extends core::num>(Y) → void;
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart
new file mode 100644
index 0000000..60aebf5
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart
@@ -0,0 +1,26 @@
+// 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.6
+
+class A<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {
+  try {
+    f();
+  } catch (e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+
+main() {
+  A<num> a = new A<int>();
+  void Function<Y extends num>(Y) f = a.f;
+  expectThrows(() {
+    f(3.14);
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect
new file mode 100644
index 0000000..29b47f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+// @dart = 2.6
+class A<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..29b47f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+// @dart = 2.6
+class A<X extends num> {
+  void f<Y extends X>(Y y) {}
+}
+
+expectThrows(void Function() f) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect
new file mode 100644
index 0000000..9be07d6
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void {}
+  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 expectThrows(() →* void f) → dynamic {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::A::•<core::int*>();
+  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num*>(Y*) →* void};
+  self::expectThrows(() → Null {
+    f<core::double*>(3.14){(core::double*) →* void};
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect
new file mode 100644
index 0000000..50b76a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    ;
+  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void
+    ;
+  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 expectThrows(() →* void f) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect
new file mode 100644
index 0000000..9be07d6
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void {}
+  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 expectThrows(() →* void f) → dynamic {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::A::•<core::int*>();
+  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num*>(Y*) →* void};
+  self::expectThrows(() → Null {
+    f<core::double*>(3.14){(core::double*) →* void};
+  });
+}
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
index fe0c5d0..e4cac82 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
@@ -107,25 +107,25 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2) as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
 static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
-                                       ^" in #t10 : #t9;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 var missingPropertyGet = emptyClass.property;
-                                    ^^^^^^^^";
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
 static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 var missingPropertySet = emptyClass.property = 42;
-                                    ^^^^^^^^";
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property = 42;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
index 2ddf977..92a8aa8 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
@@ -107,27 +107,27 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
-                                               ^";
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2);
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final invalid-type #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
 static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
-                                       ^" in #t10 : #t9;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 var missingPropertyGet = emptyClass.property;
-                                    ^^^^^^^^";
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
 static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 var missingPropertySet = emptyClass.property = 42;
-                                    ^^^^^^^^";
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property = 42;
 static method main() → dynamic {}
 
 
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
index 3b6915e..c6579d8 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
@@ -49,7 +49,7 @@
   new self::Class::•(0);
 }
 static method error() → dynamic {
-  new self::Class::•(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   new Class('');
             ^" in "" as{TypeError} core::int*);
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
index d22f3ed..f060c5f 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
   new self::Class::•(0);
 }
 static method error() → dynamic {
-  new self::Class::•(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   new Class('');
             ^" in "" as{TypeError} core::int*);
 }
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
index 208ee13..8ae3c40 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
@@ -129,28 +129,28 @@
   }
   {
     self::V* v;
-    dynamic V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
     var V;
         ^";
   }
   {
     self::V* v;
-    dynamic V = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
     var V = null;
         ^" in null;
   }
   {
-    () →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () →* Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
               ^" in let final () →* Null T = () → Null {} in T;
   }
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError,ForDynamic} self::V*;
+      ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
             ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
   }
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
index 803643c7..c14d8e6 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
@@ -129,18 +129,18 @@
   }
   {
     self::V* v;
-    dynamic V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
     var V;
         ^";
   }
   {
     self::V* v;
-    dynamic V = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
     var V = null;
         ^" in null;
   }
   {
-    () →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () →* Null x = let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
               ^" in let final () →* Null T = () → Null {} in T;
   }
@@ -150,7 +150,7 @@
       ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object* = dynamic>() →* Null x = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
             ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
   }
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
index ab987d2..2c8cde5 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
@@ -56,5 +56,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///nested_implicit_const_with_env_var.dart:5:23 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///nested_implicit_const_with_env_var.dart:5:23 -> IntConstant(0)
 Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart b/pkg/front_end/testcases/general/null_aware_super.dart
new file mode 100644
index 0000000..106fd43
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.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 Super {
+  Super.named();
+}
+
+class Class extends Super {
+  Class() : super?.named();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart.textual_outline.expect b/pkg/front_end/testcases/general/null_aware_super.dart.textual_outline.expect
new file mode 100644
index 0000000..903b3d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class Super {
+  Super.named();
+}
+class Class extends Super {
+  Class() : super?.named();
+}
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_super.dart.weak.expect
new file mode 100644
index 0000000..2e47743
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.dart.weak.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: The operator '?.' cannot be used with 'super' because 'super' cannot be null.
+// Try replacing '?.' with '.'
+//   Class() : super?.named();
+//                  ^^
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: Cannot use '?.' here.
+// Try using '.'.
+//   Class() : super?.named();
+//                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor •() → self::Class
+    : super self::Super::named()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_aware_super.dart.weak.outline.expect
new file mode 100644
index 0000000..a9cb459
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: The operator '?.' cannot be used with 'super' because 'super' cannot be null.
+// Try replacing '?.' with '.'
+//   Class() : super?.named();
+//                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    ;
+}
+class Class extends self::Super {
+  constructor •() → self::Class
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_super.dart.weak.transformed.expect
new file mode 100644
index 0000000..2e47743
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: The operator '?.' cannot be used with 'super' because 'super' cannot be null.
+// Try replacing '?.' with '.'
+//   Class() : super?.named();
+//                  ^^
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: Cannot use '?.' here.
+// Try using '.'.
+//   Class() : super?.named();
+//                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor •() → self::Class
+    : super self::Super::named()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
index 882b6d8..eb609ae 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
@@ -226,141 +226,141 @@
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
-            ^");
+            ^" in foo{<unresolved>}.<(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
-            ^");
+            ^" in foo{<unresolved>}.>(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
-            ^^");
+            ^^" in foo{<unresolved>}.<=(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
-            ^^");
+            ^^" in foo{<unresolved>}.>=(2));
   core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
-            ^");
+            ^" in foo{<unresolved>}.-(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
-            ^");
+            ^" in foo{<unresolved>}.+(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
-            ^");
+            ^" in foo{<unresolved>}./(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
-            ^^");
+            ^^" in foo{<unresolved>}.~/(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
-            ^");
+            ^" in foo{<unresolved>}.*(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
-            ^");
+            ^" in foo{<unresolved>}.%(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
-            ^");
+            ^" in foo{<unresolved>}.|(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
-            ^");
+            ^" in foo{<unresolved>}.^(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
-            ^");
+            ^" in foo{<unresolved>}.&(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
-            ^^");
+            ^^" in foo{<unresolved>}.<<(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
-            ^^");
+            ^^" in foo{<unresolved>}.>>(2));
   core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
-           ^" in #t3);
+           ^" in #t1{<unresolved>}.[]=(#t2, #t3) in #t3);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
-           ^");
+           ^" in foo{<unresolved>}.[](2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
-        ^");
+        ^" in foo{<unresolved>}.~());
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
-        ^");
+        ^" in foo{<unresolved>}.unary-());
   core::print(<invalid-type>[]);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
   print(>foo);
-        ^"{dynamic}.>(foo));
+        ^"{<invalid>}.>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
   print(<=foo);
-        ^"{dynamic}.<=(foo));
+        ^"{<invalid>}.<=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
   print(>=foo);
-        ^"{dynamic}.>=(foo));
+        ^"{<invalid>}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
         ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
-        ^"{dynamic}.+(foo));
+        ^"{<invalid>}.+(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
   print(/foo);
-        ^"{dynamic}./(foo));
+        ^"{<invalid>}./(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
   print(~/foo);
-        ^"{dynamic}.~/(foo));
+        ^"{<invalid>}.~/(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
   print(*foo);
-        ^"{dynamic}.*(foo));
+        ^"{<invalid>}.*(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
   print(%foo);
-        ^"{dynamic}.%(foo));
+        ^"{<invalid>}.%(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
   print(|foo);
-        ^"{dynamic}.|(foo));
+        ^"{<invalid>}.|(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
   print(^foo);
-        ^"{dynamic}.^(foo));
+        ^"{<invalid>}.^(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
   print(&foo);
-        ^"{dynamic}.&(foo));
+        ^"{<invalid>}.&(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
   print(<<foo);
-        ^"{dynamic}.<<(foo));
+        ^"{<invalid>}.<<(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
   print(>>foo);
-        ^"{dynamic}.>>(foo));
+        ^"{<invalid>}.>>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
   print(foo ~ 2);
             ^");
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
index 6908374..13d310d 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
@@ -226,141 +226,141 @@
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
-            ^");
+            ^" in foo{<unresolved>}.<(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
-            ^");
+            ^" in foo{<unresolved>}.>(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
-            ^^");
+            ^^" in foo{<unresolved>}.<=(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
-            ^^");
+            ^^" in foo{<unresolved>}.>=(2));
   core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
-            ^");
+            ^" in foo{<unresolved>}.-(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
-            ^");
+            ^" in foo{<unresolved>}.+(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
-            ^");
+            ^" in foo{<unresolved>}./(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
-            ^^");
+            ^^" in foo{<unresolved>}.~/(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
-            ^");
+            ^" in foo{<unresolved>}.*(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
-            ^");
+            ^" in foo{<unresolved>}.%(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
-            ^");
+            ^" in foo{<unresolved>}.|(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
-            ^");
+            ^" in foo{<unresolved>}.^(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
-            ^");
+            ^" in foo{<unresolved>}.&(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
-            ^^");
+            ^^" in foo{<unresolved>}.<<(2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
-            ^^");
+            ^^" in foo{<unresolved>}.>>(2));
   core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
-           ^" in #t3);
+           ^" in #t1{<unresolved>}.[]=(#t2, #t3) in #t3);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
-           ^");
+           ^" in foo{<unresolved>}.[](2));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
-        ^");
+        ^" in foo{<unresolved>}.~());
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
-        ^");
+        ^" in foo{<unresolved>}.unary-());
   core::print(core::_GrowableList::•<invalid-type>(0));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
   print(>foo);
-        ^"{dynamic}.>(foo));
+        ^"{<invalid>}.>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
   print(<=foo);
-        ^"{dynamic}.<=(foo));
+        ^"{<invalid>}.<=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
   print(>=foo);
-        ^"{dynamic}.>=(foo));
+        ^"{<invalid>}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
         ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
-        ^"{dynamic}.+(foo));
+        ^"{<invalid>}.+(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
   print(/foo);
-        ^"{dynamic}./(foo));
+        ^"{<invalid>}./(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
   print(~/foo);
-        ^"{dynamic}.~/(foo));
+        ^"{<invalid>}.~/(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
   print(*foo);
-        ^"{dynamic}.*(foo));
+        ^"{<invalid>}.*(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
   print(%foo);
-        ^"{dynamic}.%(foo));
+        ^"{<invalid>}.%(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
   print(|foo);
-        ^"{dynamic}.|(foo));
+        ^"{<invalid>}.|(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
   print(^foo);
-        ^"{dynamic}.^(foo));
+        ^"{<invalid>}.^(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
   print(&foo);
-        ^"{dynamic}.&(foo));
+        ^"{<invalid>}.&(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
   print(<<foo);
-        ^"{dynamic}.<<(foo));
+        ^"{<invalid>}.<<(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
   print(>>foo);
-        ^"{dynamic}.>>(foo));
+        ^"{<invalid>}.>>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
   print(foo ~ 2);
             ^");
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.expect b/pkg/front_end/testcases/general/optional.dart.weak.expect
index 0c2ea45..6ca451d 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.expect
@@ -120,22 +120,22 @@
   core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
   extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
   extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
-  extern.{self::External::listen}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
+  extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
   extern.listen(new InvalidListener());
                     ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
-  invalid-type nothing1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = foo.method();
                            ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
-  invalid-type nothing2 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing2 = foo.method(1, 2, 3, 4);
                            ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
-  invalid-type nothing3 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = extern.externalMethod();
                                       ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
-  invalid-type nothing4 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing4 = extern.externalMethod(1, 2, 3, 4);
                                       ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect b/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect
new file mode 100644
index 0000000..6ca451d
--- /dev/null
+++ b/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect
@@ -0,0 +1,146 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
+//  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
+//  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
+//   extern.listen(new InvalidListener());
+//                     ^
+//
+// pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing1 = foo.method();
+//                            ^
+//
+// pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   var nothing2 = foo.method(1, 2, 3, 4);
+//                            ^
+//
+// pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing3 = extern.externalMethod();
+//                                       ^
+//
+// pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   var nothing4 = extern.externalMethod(1, 2, 3, 4);
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method method(dynamic x, [dynamic y = #C1, dynamic z = #C1]) → dynamic {
+    return "string";
+  }
+  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 class External extends core::Object {
+  synthetic constructor •() → self::External*
+    : super core::Object::•()
+    ;
+  abstract method externalMethod(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → core::String*;
+  abstract method listen(self::Listener* listener) → void;
+  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 class Listener extends core::Object {
+  synthetic constructor •() → self::Listener*
+    : super core::Object::•()
+    ;
+  abstract method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void;
+  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 TestListener extends self::Listener {
+  synthetic constructor •() → self::TestListener*
+    : super self::Listener::•()
+    ;
+  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void {}
+}
+class ExtendedListener extends self::Listener {
+  synthetic constructor •() → self::ExtendedListener*
+    : super self::Listener::•()
+    ;
+  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1, dynamic z = #C1]) → void {}
+}
+class InvalidListener extends core::Object {
+  synthetic constructor •() → self::InvalidListener*
+    : super core::Object::•()
+    ;
+  method event(dynamic input, [dynamic x = #C1]) → void {}
+  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
+}
+external static method createExternal() → self::External*;
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
+  self::External* extern = self::createExternal();
+  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
+  extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
+ - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
+ - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
+  extern.listen(new InvalidListener());
+                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing1 = foo.method();
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  var nothing2 = foo.method(1, 2, 3, 4);
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing3 = extern.externalMethod();
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  var nothing4 = extern.externalMethod(1, 2, 3, 4);
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+}
+
+constants  {
+  #C1 = null
+}
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 7320fdc..bf194cb 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void {}
   get _privateGetter() → core::int
     return 42;
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 f9f6839..fdc9a0e 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
@@ -16,7 +16,7 @@
   constructor _privateConstructor() → self::_Class
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void
     ;
   get _privateGetter() → core::int
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 fd8fbf9..bf194cb 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
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let Never #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void {}
   get _privateGetter() → core::int
     return 42;
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 6bf765c..4deccd1 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -81,7 +81,7 @@
     : super core::Object::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   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
@@ -122,7 +122,7 @@
     : super self::C::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
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 2102d04..7528cb9 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -79,7 +79,7 @@
   constructor a() → self::C<self::C::T*>*
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   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
@@ -109,7 +109,7 @@
   constructor a() → lib::C<lib::C::T*>*
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
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 ea5014d..a982723 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -82,7 +82,7 @@
     : super core::Object::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let <T extends core::Object* = dynamic>() →* lib::C<T*>* #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   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
@@ -123,7 +123,7 @@
     : super self::C::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let Never #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
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 7443e13..0173839 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory fisk() → self::A*
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   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
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 6128d70..94296d3 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
@@ -7,7 +7,7 @@
   constructor •() → self::A*
     ;
   static factory fisk() → self::A*
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   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
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 c381d2d..0173839 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
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory fisk() → self::A*
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   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
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 aa4bbfe..6155d9d 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   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
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   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
@@ -64,7 +68,11 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    return new self::Bar::•<core::String*, self::Builder::X*>(4);
+    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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   }
   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
@@ -80,7 +88,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   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
@@ -95,7 +103,7 @@
 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 factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   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
@@ -158,7 +166,11 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
+  core::print(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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^".{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
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 9a9214d..611e0cc 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
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   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
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   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
@@ -76,7 +80,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   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
@@ -91,7 +95,7 @@
 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 factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   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
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 e22b2b0..0f768e15 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
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let <T extends core::Object* = dynamic>(core::int*) →* self::Foo<T*>* #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   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
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let Never #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   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
@@ -64,7 +68,11 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    return new self::Bar::•<core::String*, self::Builder::X*>(4);
+    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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   }
   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
@@ -80,7 +88,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let <Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() →* self::SimpleCaseImpl<Ai*, Bi*>* #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   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
@@ -95,7 +103,7 @@
 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 factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let Never #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   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
@@ -158,7 +166,11 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
+  core::print(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)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^".{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
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 88615ec..16a9cdc 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
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   static factory first() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let dynamic #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   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
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 7df5d5f..3f90310 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
@@ -7,9 +7,9 @@
   constructor •() → self::A*
     ;
   static factory first() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let dynamic #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   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
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 35892f43..16a9cdc 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
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   static factory first() → self::A*
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let () →* self::A* #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   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
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 3841bc7..f2aaee2 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
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   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
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 23d11ab..aed68b9 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
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   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
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 ce397b6..f2aaee2 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
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let Never #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   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
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 1e7a7cc4..f1030db 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
@@ -17,7 +17,7 @@
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic {
   self::expect(42, new self::A::•().{self::A::field}{core::int});
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 352e5d1..c031d22 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
@@ -8,7 +8,7 @@
   constructor •([core::int field]) → self::A
     ;
   static factory redirect([core::int field]) → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic
   ;
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 6b1dd68..f1030db 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
@@ -17,7 +17,7 @@
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic {
   self::expect(42, new self::A::•().{self::A::field}{core::int});
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 232d5ac..27d959b 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
@@ -106,7 +106,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   get getter() → core::int
     return 0;
 }
@@ -118,58 +118,66 @@
  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
     -new Class1();
-    ^";
+    ^" in new self::Class1::_(){<unresolved>}.unary-();
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:22:15: Error: The operator '-' isn't defined for the class 'String'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     ('' + '') - new Class1();
-              ^";
+              ^" in "".{core::String::+}(""){(core::String) → core::String}{<unresolved>}.-(new self::Class1::_());
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:24:12: Error: The operator '[]=' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
     (0 + 1)[0] = new Class1();
-           ^";
+           ^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.[]=(0, new self::Class1::_());
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:25:8: Error: The operator '[]=' isn't defined for the class 'Class2'.
  - 'Class2' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
     _c2[0] = new Class1();
-       ^";
+       ^" in this.{self::Class2::_c2}{self::Class2}{<unresolved>}.[]=(0, new self::Class1::_());
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:27:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     (0 + 1)[new Class1()];
-           ^";
+           ^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.[](new self::Class1::_());
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:29:18: Error: The getter 'foo' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
     new Class1().foo;
-                 ^^^";
+                 ^^^" in new self::Class1::_(){<unresolved>}.foo;
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:31:13: Error: The setter 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
     (0 + 1).foo = new Class1();
-            ^^^";
+            ^^^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.foo = new self::Class1::_();
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:33:18: Error: The method 'foo' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
     new Class1().foo();
-                 ^^^";
+                 ^^^" in new self::Class1::_(){<unresolved>}.foo();
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:35:17: Error: The method 'call' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     new Class1()();
-                ^";
+                ^" in new self::Class1::_(){<unresolved>}.call();
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:37:23: Error: 'field' isn't a function or method and can't be invoked.
     new Class1().field();
-                      ^^^^...";
+                      ^^^^..." in new self::Class1::_().{self::Class1::field}{core::int}{<unresolved>}.call();
     invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:39:24: Error: 'getter' isn't a function or method and can't be invoked.
     new Class1().getter();
-                       ^^^^...";
+                       ^^^^..." in new self::Class1::_().{self::Class1::getter}{core::int}{<unresolved>}.call();
     let final self::Class2 #t1 = this.{self::Class2::_c2}{self::Class2} in let final self::Class1 #t2 = new self::Class1::_() in invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:41:8: Error: 'call' isn't a function or method and can't be invoked.
     _c2(new Class1());
-       ^^^^";
+       ^^^^" in #t1.{self::Class2::call}{core::int}{<unresolved>}.call(#t2);
     this.{self::Class2::method}(a: invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:43:18: Error: Duplicated named argument 'a'.
     method(a: 0, a: new Class1());
-                 ^"){({a: dynamic}) → dynamic};
+                 ^" in block {
+      0;
+    } =>new self::Class1::_()){({a: dynamic}) → dynamic};
     this.{self::Class2::method}(a: invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:24: Error: Duplicated named argument 'a'.
     method(a: 0, a: 1, a: new Class1());
-                       ^"){({a: dynamic}) → dynamic};
+                       ^" in block {
+      invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:18: Error: Duplicated named argument 'a'.
+    method(a: 0, a: 1, a: new Class1());
+                 ^" in block {
+        0;
+      } =>1;
+    } =>new self::Class1::_()){({a: dynamic}) → dynamic};
     super.[](new self::Class1::_());
     super.[]=(0, new self::Class1::_());
     super.foo = new self::Class1::_();
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 83aea2e..8977ba1 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
@@ -8,7 +8,7 @@
   constructor _() → self::Class1
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   get getter() → core::int
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart
new file mode 100644
index 0000000..a51dd5e
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.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.
+
+@Const()
+library name;
+
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+@Const()
+class Const {
+  const Const.internal();
+  const factory Const() = Const.internal;
+}
+
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+  @Const()
+  var l1;
+
+  @Const()
+  l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
+
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+  @Const()
+  var l1;
+
+  @Const()
+  l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+}
+
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+  <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+}
+
+class Class<@Const() T> {
+  @Const()
+  var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+    @Const()
+    var l1;
+
+    @Const()
+    l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+  };
+
+  @Const()
+  Class();
+
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+    @Const()
+    var l1;
+
+    @Const()
+    l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  }
+
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+    <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+  }
+}
+
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+    [@Const() Class]);
+
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+    {@Const() Class o2});
+
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+  @Const()
+  static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+    @Const()
+    var l1;
+
+    @Const()
+    l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  };
+
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+    @Const()
+    var l1;
+
+    @Const()
+    l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  }
+
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+    <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect
new file mode 100644
index 0000000..269a7f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect
@@ -0,0 +1,71 @@
+@Const()
+library name;
+
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+@Const()
+class Const {
+  const Const.internal();
+  const factory Const() = Const.internal;
+}
+
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+  @Const()
+  var l1;
+  @Const()
+  l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+
+class Class<@Const() T> {
+  @Const()
+  var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+    @Const()
+    var l1;
+    @Const()
+    l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+  };
+  @Const()
+  Class();
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+}
+
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+    [@Const() Class]);
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+    {@Const() Class o2});
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+  @Const()
+  static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+    @Const()
+    var l1;
+    @Const()
+    l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  };
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4fd86e8
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect
@@ -0,0 +1,69 @@
+@Const()
+library name;
+
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+class Class<@Const() T> {
+  @Const()
+  Class();
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+  @Const()
+  var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+    @Const()
+    var l1;
+    @Const()
+    l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+  };
+}
+
+@Const()
+class Const {
+  const Const.internal();
+  const factory Const() = Const.internal;
+}
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+  @Const()
+  method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  @Const()
+  method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+  @Const()
+  static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+    @Const()
+    var l1;
+    @Const()
+    l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+  };
+}
+
+main() {}
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+    [@Const() Class]);
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+    {@Const() Class o2});
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+  @Const()
+  var l1;
+  @Const()
+  l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
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
new file mode 100644
index 0000000..39405c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
@@ -0,0 +1,105 @@
+@#C1
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+@#C1
+part redirecting_factory_invocation_metadata_lib.dart;
+@#C1
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+@#C1
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+@#C1
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+@#C1
+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*/;
+  const constructor internal() → self::Const
+    : super core::Object::•()
+    ;
+  static factory •() → self::Const
+    return new self::Const::internal();
+}
+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 {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → 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 {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {};
+  }
+}
+@#C1
+extension Extension<@#C1 T extends core::Object? = dynamic> on self::Class<T%> {
+  static field field = self::Extension|field;
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {};
+}
+@#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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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);
+@#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|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);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Const {}
+  #C2 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:
+- Const.internal (from org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:19:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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
new file mode 100644
index 0000000..777c550
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -0,0 +1,101 @@
+@name::Const::internal()
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+part redirecting_factory_invocation_metadata_lib.dart;
+@self::Const::internal()
+typedef Typedef1<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
+@self::Const::internal()
+typedef Typedef2<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
+@self::Const::internal()
+typedef Typedef3<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
+@self::Const::internal()
+typedef Typedef4<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
+@self::Const::internal()
+class Const extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+  const constructor internal() → self::Const
+    : super core::Object::•()
+    ;
+  static factory •() → self::Const
+    return new self::Const::internal();
+}
+class Class<@self::Const::internal() T extends core::Object? = dynamic> extends core::Object {
+  @self::Const::internal()
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field;
+  @self::Const::internal()
+  constructor •() → self::Class<self::Class::T%>
+    ;
+  @self::Const::internal()
+  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+    ;
+  @self::Const::internal()
+  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+    ;
+}
+@self::Const::internal()
+extension Extension<@self::Const::internal() T extends core::Object? = dynamic> on self::Class<T%> {
+  static field field = self::Extension|field;
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  tearoff method2 = self::Extension|get#method2;
+}
+@self::Const::internal()
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field;
+@self::Const::internal()
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field;
+@self::Const::internal()
+static method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+  ;
+@self::Const::internal()
+static method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+  ;
+@self::Const::internal()
+static method Extension|method1<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, dynamic o1, [dynamic o2]) → dynamic
+  ;
+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]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+@self::Const::internal()
+static method Extension|method2<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, dynamic o1, {dynamic o2}) → dynamic
+  ;
+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}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:5:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:74:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:75:19 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:78:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:79:19 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:82:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:83:24 -> InstanceConstant(const Const{})
+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: 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{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:60:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:68:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:69:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:47:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:89:22 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:32:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:33:10 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:41:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:42:10 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:99:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:100:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:108:4 -> InstanceConstant(const Const{})
+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
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
new file mode 100644
index 0000000..39405c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
@@ -0,0 +1,105 @@
+@#C1
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+@#C1
+part redirecting_factory_invocation_metadata_lib.dart;
+@#C1
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+@#C1
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+@#C1
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+@#C1
+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*/;
+  const constructor internal() → self::Const
+    : super core::Object::•()
+    ;
+  static factory •() → self::Const
+    return new self::Const::internal();
+}
+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 {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → 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 {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {};
+  }
+}
+@#C1
+extension Extension<@#C1 T extends core::Object? = dynamic> on self::Class<T%> {
+  static field field = self::Extension|field;
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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 {};
+}
+@#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 {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → 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);
+@#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|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);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Const {}
+  #C2 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:
+- Const.internal (from org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:19:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart
new file mode 100644
index 0000000..62e121c
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart
@@ -0,0 +1,6 @@
+// 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.
+
+@Const()
+part of 'redirecting_factory_invocation_metadata.dart';
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 5da2827..9cea1c8 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
@@ -9,7 +9,7 @@
     ;
   @#C1
   static factory •(@#C2 @#C3 dynamic p) → self::Foo*
-    let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
+    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
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
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 a83d25d..f807177 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
@@ -8,7 +8,7 @@
     ;
   @self::forFactoryItself
   static factory •(dynamic p) → self::Foo*
-    let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
+    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
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
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 f7a4f91..9cea1c8 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
@@ -9,7 +9,7 @@
     ;
   @#C1
   static factory •(@#C2 @#C3 dynamic p) → self::Foo*
-    let Never #redirecting_factory = self::Foo::named in invalid-expression;
+    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
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
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 de93fd8..ca460af 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
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   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
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 43d5697..8549d41 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
@@ -7,7 +7,7 @@
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   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
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 e4b7dde..ca460af 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
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   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
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 05a7185..b3ec99a 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
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   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
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 3cc1659..fedbec2 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
@@ -25,7 +25,7 @@
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   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
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 5fac4ba..b3ec99a 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
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let Never #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   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
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 19f5ced..d5fafac 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
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
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 edba967..3bf6457 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
@@ -7,7 +7,7 @@
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
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 aab753d..d5fafac 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
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let Never #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
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 521ea4e..6b9f76b 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
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
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 2551eab..522c0dc 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
@@ -25,7 +25,7 @@
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
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 a07765d..6b9f76b 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
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let Never #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, 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
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
index 8a1fe83..0375d90 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
@@ -12,7 +12,7 @@
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T* x;
   constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
-    : this self::Foo::_internal(x: let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
                                              ^" in _init as{TypeError} Never)
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
index 8a1fe83..0375d90 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T* x;
   constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
-    : this self::Foo::_internal(x: let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
                                              ^" in _init as{TypeError} Never)
     ;
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 e9d6519..45971e6 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 abc8779..97f2aa7 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
@@ -9,7 +9,7 @@
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -26,7 +26,7 @@
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 44022ca..45971e6 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let <U extends core::Object* = dynamic, W extends core::Object* = dynamic>() →* self::B<U*, W*>* #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let Never #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 8f23e49..21aa750 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 9e95322..fc699bb 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
@@ -9,7 +9,7 @@
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -26,7 +26,7 @@
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 7d52b3b..21aa750 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let <U extends core::Object* = dynamic, W extends core::Object* = dynamic>() →* self::B<U*, W*>* #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let Never #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
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 ed8ef82..e858e7d 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
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 ca134d1..0d1b358 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
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
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 c1c3aa5..e858e7d 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
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let Never #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   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
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
index 45b2b8f..470fbda 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
@@ -204,55 +204,55 @@
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
                            ^";
-  core::int* lhs30 = let final Never* #t34 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
   int lhs30 = /*@ typeArgs=int* */ [...spread];
                                    ^" in ( block {
-    final core::List<core::int*>* #t35 = core::List::of<core::int*>(spread);
-  } =>#t35) as{TypeError} core::int*;
-  core::int* set30 = let final Never* #t36 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
+  } =>#t34) as{TypeError} core::int*;
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
   int set30 = /*@ typeArgs=int* */ {...spread, 42};
                                    ^" in ( block {
-    final core::Set<core::int*>* #t37 = col::LinkedHashSet::of<core::int*>(spread);
-    #t37.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t37) as{TypeError} core::int*;
-  core::int* set30ambiguous = let final Never* #t38 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t35) as{TypeError} core::int*;
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
       {...spread};
       ^" in ( block {
-    final core::Set<core::int*>* #t39 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t40 in spread) {
-      final core::int* #t41 = #t40 as{TypeError} core::int*;
-      #t39.{core::Set::add}{Invariant}(#t41){(core::int*) →* core::bool*};
+    final core::Set<core::int*>* #t36 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t37 in spread) {
+      final core::int* #t38 = #t37 as{TypeError} core::int*;
+      #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
     }
-  } =>#t39) as{TypeError} core::int*;
-  core::int* map30 = let final Never* #t42 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  } =>#t36) as{TypeError} core::int*;
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
-    final core::Map<core::String*, core::int*>* #t43 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t44 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-      #t43.{core::Map::[]=}{Invariant}(#t44.{core::MapEntry::key}{core::String*}, #t44.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-    #t43.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
-  } =>#t43) as{TypeError} core::int*;
-  core::int* map30ambiguous = let final Never* #t45 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+    final core::Map<core::String*, core::int*>* #t39 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
+  } =>#t39) as{TypeError} core::int*;
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
-    final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t47 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-      #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-  } =>#t46) as{TypeError} core::int*;
+    final core::Map<core::String*, core::int*>* #t41 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t41) as{TypeError} core::int*;
   core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^"];
   core::Set<dynamic>* set40 = block {
-    final core::Set<dynamic>* #t48 = col::LinkedHashSet::•<dynamic>();
-    #t48.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Set<dynamic>* #t43 = col::LinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                     ^"){(dynamic) →* core::bool*};
-  } =>#t48;
+  } =>#t43;
   core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                       ^": null};
@@ -260,11 +260,11 @@
   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                      ^"];
   core::Set<dynamic>* set50 = block {
-    final core::Set<dynamic>* #t49 = col::LinkedHashSet::•<dynamic>();
-    #t49.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Set<dynamic>* #t44 = col::LinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                     ^"){(dynamic) →* core::bool*};
-  } =>#t49;
+  } =>#t44;
   core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                       ^": null};
@@ -272,11 +272,11 @@
   List<String> lhs60 = <String>[...spread];
                                    ^"];
   core::Set<core::String*>* set60 = block {
-    final core::Set<core::String*>* #t50 = col::LinkedHashSet::•<core::String*>();
-    #t50.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    final core::Set<core::String*>* #t45 = col::LinkedHashSet::•<core::String*>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
                                   ^"){(core::String*) →* core::bool*};
-  } =>#t50;
+  } =>#t45;
   core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
                                       ^": null};
@@ -287,90 +287,90 @@
   List<int> lhs70 = <int>[...null];
                              ^"];
   core::Set<core::int*>* set70 = block {
-    final core::Set<core::int*>* #t51 = col::LinkedHashSet::•<core::int*>();
-    #t51.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    final core::Set<core::int*>* #t46 = col::LinkedHashSet::•<core::int*>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
                             ^"){(core::int*) →* core::bool*};
-  } =>#t51;
+  } =>#t46;
   core::Set<dynamic>* set71ambiguous = block {
-    final core::Set<dynamic>* #t52 = col::LinkedHashSet::•<dynamic>();
-    #t52.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    final core::Set<dynamic>* #t47 = col::LinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
-    for (final dynamic #t53 in <dynamic>[]) {
-      final dynamic #t54 = #t53 as{TypeError} dynamic;
-      #t52.{core::Set::add}{Invariant}(#t54){(dynamic) →* core::bool*};
+    for (final dynamic #t48 in <dynamic>[]) {
+      final dynamic #t49 = #t48 as{TypeError} dynamic;
+      #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
     }
-  } =>#t52;
+  } =>#t47;
   core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
   Map<String, int> map70 = <String, int>{...null};
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
-    final core::List<core::int*>* #t55 = <core::int*>[];
-    final core::Iterable<core::int*>* #t56 = null;
-    if(!(#t56 == null))
-      #t55.{core::List::addAll}{Invariant}(#t56){(core::Iterable<core::int*>*) →* void};
-  } =>#t55;
+    final core::List<core::int*>* #t50 = <core::int*>[];
+    final core::Iterable<core::int*>* #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
+  } =>#t50;
   core::Set<core::int*>* set80 = block {
-    final core::Set<core::int*>* #t57 = col::LinkedHashSet::•<core::int*>();
-    final core::Iterable<core::int*>* #t58 = null;
-    if(!(#t58 == null))
-      #t57.{core::Set::addAll}{Invariant}(#t58){(core::Iterable<core::int*>*) →* void};
-  } =>#t57;
+    final core::Set<core::int*>* #t52 = col::LinkedHashSet::•<core::int*>();
+    final core::Iterable<core::int*>* #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
+  } =>#t52;
   core::Set<dynamic>* set81ambiguous = block {
-    final core::Set<dynamic>* #t59 = col::LinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>* #t60 = null;
-    if(!(#t60 == null))
-      for (final dynamic #t61 in #t60) {
-        final dynamic #t62 = #t61 as{TypeError} dynamic;
-        #t59.{core::Set::add}{Invariant}(#t62){(dynamic) →* core::bool*};
+    final core::Set<dynamic>* #t54 = col::LinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>* #t55 = null;
+    if(!(#t55 == null))
+      for (final dynamic #t56 in #t55) {
+        final dynamic #t57 = #t56 as{TypeError} dynamic;
+        #t54.{core::Set::add}{Invariant}(#t57){(dynamic) →* core::bool*};
       }
-    for (final dynamic #t63 in <dynamic>[]) {
-      final dynamic #t64 = #t63 as{TypeError} dynamic;
-      #t59.{core::Set::add}{Invariant}(#t64){(dynamic) →* core::bool*};
+    for (final dynamic #t58 in <dynamic>[]) {
+      final dynamic #t59 = #t58 as{TypeError} dynamic;
+      #t54.{core::Set::add}{Invariant}(#t59){(dynamic) →* core::bool*};
     }
-  } =>#t59;
+  } =>#t54;
   core::Map<core::String*, core::int*>* map80 = block {
-    final core::Map<core::String*, core::int*>* #t65 = <core::String*, core::int*>{};
-    final core::Map<core::String*, core::int*>* #t66 = null;
-    if(!(#t66 == null))
-      for (final core::MapEntry<core::String*, core::int*>* #t67 in #t66.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-        #t65.{core::Map::[]=}{Invariant}(#t67.{core::MapEntry::key}{core::String*}, #t67.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-  } =>#t65;
+    final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t61 = null;
+    if(!(#t61 == null))
+      for (final core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String*}, #t62.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t60;
   core::Map<core::String*, core::int*>* map90 = block {
-    final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t69 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
-      #t68.{core::Map::[]=}{Invariant}(#t69.{core::MapEntry::key}{core::String*}, #t69.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
-  } =>#t68;
+    final core::Map<core::String*, core::int*>* #t63 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String*}, #t64.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t63;
   core::List<core::int*>* list100 = block {
-    final core::List<core::int*>* #t70 = <core::int*>[];
-    for (final dynamic #t71 in listNum) {
-      final core::int* #t72 = #t71 as{TypeError} core::int*;
-      #t70.{core::List::add}{Invariant}(#t72){(core::int*) →* void};
+    final core::List<core::int*>* #t65 = <core::int*>[];
+    for (final dynamic #t66 in listNum) {
+      final core::int* #t67 = #t66 as{TypeError} core::int*;
+      #t65.{core::List::add}{Invariant}(#t67){(core::int*) →* void};
     }
-  } =>#t70;
+  } =>#t65;
   core::Map<core::num*, core::int*>* map100 = block {
-    final core::Map<core::num*, core::int*>* #t73 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t74 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
-      final core::num* #t75 = #t74.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
-      final core::int* #t76 = #t74.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-      #t73.{core::Map::[]=}{Invariant}(#t75, #t76){(core::num*, core::int*) →* void};
+    final core::Map<core::num*, core::int*>* #t68 = <core::num*, core::int*>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num*, core::int*) →* void};
     }
-  } =>#t73;
+  } =>#t68;
   core::List<core::int*>* list110 = block {
-    final core::List<core::int*>* #t77 = <core::int*>[];
-    for (final dynamic #t78 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-      final core::int* #t79 = #t78 as{TypeError} core::int*;
-      #t77.{core::List::add}{Invariant}(#t79){(core::int*) →* void};
+    final core::List<core::int*>* #t72 = <core::int*>[];
+    for (final dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t74 = #t73 as{TypeError} core::int*;
+      #t72.{core::List::add}{Invariant}(#t74){(core::int*) →* void};
     }
-  } =>#t77;
+  } =>#t72;
   core::Map<core::num*, core::int*>* map110 = block {
-    final core::Map<core::num*, core::int*>* #t80 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t81 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
-      final core::num* #t82 = #t81.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
-      final core::int* #t83 = #t81.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-      #t80.{core::Map::[]=}{Invariant}(#t82, #t83){(core::num*, core::int*) →* void};
+    final core::Map<core::num*, core::int*>* #t75 = <core::num*, core::int*>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t77 = #t76.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t78 = #t76.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t75.{core::Map::[]=}{Invariant}(#t77, #t78){(core::num*, core::int*) →* void};
     }
-  } =>#t80;
+  } =>#t75;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
index 05add98..a1ed2c2 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
@@ -257,71 +257,71 @@
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
                            ^";
-  core::int* lhs30 = let final Never* #t34 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
   int lhs30 = /*@ typeArgs=int* */ [...spread];
                                    ^" in ( block {
-    final core::List<core::int*>* #t35 = core::List::of<core::int*>(spread);
-  } =>#t35) as{TypeError} core::int*;
-  core::int* set30 = let final Never* #t36 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
+  } =>#t34) as{TypeError} core::int*;
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
   int set30 = /*@ typeArgs=int* */ {...spread, 42};
                                    ^" in ( block {
-    final core::Set<core::int*>* #t37 = col::LinkedHashSet::of<core::int*>(spread);
-    #t37.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-  } =>#t37) as{TypeError} core::int*;
-  core::int* set30ambiguous = let final Never* #t38 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t35) as{TypeError} core::int*;
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
       {...spread};
       ^" in ( block {
-    final core::Set<core::int*>* #t39 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t36 = new col::_CompactLinkedHashSet::•<core::int*>();
     {
       core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator}{core::Iterator<core::int*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t40 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        final dynamic #t37 = :sync-for-iterator.{core::Iterator::current}{core::int*};
         {
-          final core::int* #t41 = #t40 as{TypeError} core::int*;
-          #t39.{core::Set::add}{Invariant}(#t41){(core::int*) →* core::bool*};
+          final core::int* #t38 = #t37 as{TypeError} core::int*;
+          #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
         }
       }
     }
-  } =>#t39) as{TypeError} core::int*;
-  core::int* map30 = let final Never* #t42 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  } =>#t36) as{TypeError} core::int*;
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
-    final core::Map<core::String*, core::int*>* #t43 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t39 = <core::String*, core::int*>{};
     {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t44 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t43.{core::Map::[]=}{Invariant}(#t44.{core::MapEntry::key}{core::String*}, #t44.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t40 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t43.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
-  } =>#t43) as{TypeError} core::int*;
-  core::int* map30ambiguous = let final Never* #t45 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
+  } =>#t39) as{TypeError} core::int*;
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
-    final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t41 = <core::String*, core::int*>{};
     {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t42 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-  } =>#t46) as{TypeError} core::int*;
+  } =>#t41) as{TypeError} core::int*;
   core::List<dynamic>* lhs40 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^");
   core::Set<dynamic>* set40 = block {
-    final core::Set<dynamic>* #t48 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t48.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Set<dynamic>* #t43 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                     ^"){(dynamic) →* core::bool*};
-  } =>#t48;
+  } =>#t43;
   core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                       ^": null};
@@ -329,11 +329,11 @@
   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                      ^");
   core::Set<dynamic>* set50 = block {
-    final core::Set<dynamic>* #t49 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t49.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Set<dynamic>* #t44 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                     ^"){(dynamic) →* core::bool*};
-  } =>#t49;
+  } =>#t44;
   core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                       ^": null};
@@ -341,11 +341,11 @@
   List<String> lhs60 = <String>[...spread];
                                    ^");
   core::Set<core::String*>* set60 = block {
-    final core::Set<core::String*>* #t50 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t50.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    final core::Set<core::String*>* #t45 = new col::_CompactLinkedHashSet::•<core::String*>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
                                   ^"){(core::String*) →* core::bool*};
-  } =>#t50;
+  } =>#t45;
   core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
                                       ^": null};
@@ -356,140 +356,140 @@
   List<int> lhs70 = <int>[...null];
                              ^");
   core::Set<core::int*>* set70 = block {
-    final core::Set<core::int*>* #t51 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t51.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    final core::Set<core::int*>* #t46 = new col::_CompactLinkedHashSet::•<core::int*>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
                             ^"){(core::int*) →* core::bool*};
-  } =>#t51;
+  } =>#t46;
   core::Set<dynamic>* set71ambiguous = block {
-    final core::Set<dynamic>* #t52 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t52.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    final core::Set<dynamic>* #t47 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
     {
       core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t53 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t48 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final dynamic #t54 = #t53 as{TypeError} dynamic;
-          #t52.{core::Set::add}{Invariant}(#t54){(dynamic) →* core::bool*};
+          final dynamic #t49 = #t48 as{TypeError} dynamic;
+          #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
         }
       }
     }
-  } =>#t52;
+  } =>#t47;
   core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
   Map<String, int> map70 = <String, int>{...null};
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
-    final core::List<core::int*>* #t55 = core::_GrowableList::•<core::int*>(0);
-    final core::Iterable<core::int*>* #t56 = null;
-    if(!(#t56 == null))
-      #t55.{core::List::addAll}{Invariant}(#t56){(core::Iterable<core::int*>*) →* void};
-  } =>#t55;
+    final core::List<core::int*>* #t50 = core::_GrowableList::•<core::int*>(0);
+    final core::Iterable<core::int*>* #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
+  } =>#t50;
   core::Set<core::int*>* set80 = block {
-    final core::Set<core::int*>* #t57 = new col::_CompactLinkedHashSet::•<core::int*>();
-    final core::Iterable<core::int*>* #t58 = null;
-    if(!(#t58 == null))
-      #t57.{core::Set::addAll}{Invariant}(#t58){(core::Iterable<core::int*>*) →* void};
-  } =>#t57;
+    final core::Set<core::int*>* #t52 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Iterable<core::int*>* #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
+  } =>#t52;
   core::Set<dynamic>* set81ambiguous = block {
-    final core::Set<dynamic>* #t59 = new col::_CompactLinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>* #t60 = null;
-    if(!(#t60 == null)) {
-      core::Iterator<dynamic>* :sync-for-iterator = #t60.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    final core::Set<dynamic>* #t54 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>* #t55 = null;
+    if(!(#t55 == null)) {
+      core::Iterator<dynamic>* :sync-for-iterator = #t55.{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t61 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t56 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final dynamic #t62 = #t61 as{TypeError} dynamic;
-          #t59.{core::Set::add}{Invariant}(#t62){(dynamic) →* core::bool*};
+          final dynamic #t57 = #t56 as{TypeError} dynamic;
+          #t54.{core::Set::add}{Invariant}(#t57){(dynamic) →* core::bool*};
         }
       }
     }
     {
       core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t63 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t58 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final dynamic #t64 = #t63 as{TypeError} dynamic;
-          #t59.{core::Set::add}{Invariant}(#t64){(dynamic) →* core::bool*};
+          final dynamic #t59 = #t58 as{TypeError} dynamic;
+          #t54.{core::Set::add}{Invariant}(#t59){(dynamic) →* core::bool*};
         }
       }
     }
-  } =>#t59;
+  } =>#t54;
   core::Map<core::String*, core::int*>* map80 = block {
-    final core::Map<core::String*, core::int*>* #t65 = <core::String*, core::int*>{};
-    final core::Map<core::String*, core::int*>* #t66 = null;
-    if(!(#t66 == null)) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t66.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
+    final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t61 = null;
+    if(!(#t61 == null)) {
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t67 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t65.{core::Map::[]=}{Invariant}(#t67.{core::MapEntry::key}{core::String*}, #t67.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t62 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String*}, #t62.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-  } =>#t65;
+  } =>#t60;
   core::Map<core::String*, core::int*>* map90 = block {
-    final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t63 = <core::String*, core::int*>{};
     {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
-        #t68.{core::Map::[]=}{Invariant}(#t69.{core::MapEntry::key}{core::String*}, #t69.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+        final core::MapEntry<core::String*, core::int*>* #t64 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String*, core::int*>};
+        #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String*}, #t64.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-  } =>#t68;
+  } =>#t63;
   core::List<core::int*>* list100 = block {
-    final core::List<core::int*>* #t70 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t65 = core::_GrowableList::•<core::int*>(0);
     {
       core::Iterator<core::num*>* :sync-for-iterator = listNum.{core::Iterable::iterator}{core::Iterator<core::num*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t71 = :sync-for-iterator.{core::Iterator::current}{core::num*};
+        final dynamic #t66 = :sync-for-iterator.{core::Iterator::current}{core::num*};
         {
-          final core::int* #t72 = #t71 as{TypeError} core::int*;
-          #t70.{core::List::add}{Invariant}(#t72){(core::int*) →* void};
+          final core::int* #t67 = #t66 as{TypeError} core::int*;
+          #t65.{core::List::add}{Invariant}(#t67){(core::int*) →* void};
         }
       }
     }
-  } =>#t70;
+  } =>#t65;
   core::Map<core::num*, core::int*>* map100 = block {
-    final core::Map<core::num*, core::int*>* #t73 = <core::num*, core::int*>{};
+    final core::Map<core::num*, core::int*>* #t68 = <core::num*, core::int*>{};
     {
       core::Iterator<core::MapEntry<core::num*, core::int*>>* :sync-for-iterator = mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::num*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, dynamic>* #t74 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num*, core::int*>};
+        final core::MapEntry<dynamic, dynamic>* #t69 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num*, core::int*>};
         {
-          final core::num* #t75 = #t74.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
-          final core::int* #t76 = #t74.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-          #t73.{core::Map::[]=}{Invariant}(#t75, #t76){(core::num*, core::int*) →* void};
+          final core::num* #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+          final core::int* #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num*, core::int*) →* void};
         }
       }
     }
-  } =>#t73;
+  } =>#t68;
   core::List<core::int*>* list110 = block {
-    final core::List<core::int*>* #t77 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t72 = core::_GrowableList::•<core::int*>(0);
     {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t78 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t73 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final core::int* #t79 = #t78 as{TypeError} core::int*;
-          #t77.{core::List::add}{Invariant}(#t79){(core::int*) →* void};
+          final core::int* #t74 = #t73 as{TypeError} core::int*;
+          #t72.{core::List::add}{Invariant}(#t74){(core::int*) →* void};
         }
       }
     }
-  } =>#t77;
+  } =>#t72;
   core::Map<core::num*, core::int*>* map110 = block {
-    final core::Map<core::num*, core::int*>* #t80 = <core::num*, core::int*>{};
+    final core::Map<core::num*, core::int*>* #t75 = <core::num*, core::int*>{};
     {
       core::Iterator<core::MapEntry<core::num*, core::int*>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::num*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, dynamic>* #t81 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num*, core::int*>};
+        final core::MapEntry<dynamic, dynamic>* #t76 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num*, core::int*>};
         {
-          final core::num* #t82 = #t81.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
-          final core::int* #t83 = #t81.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-          #t80.{core::Map::[]=}{Invariant}(#t82, #t83){(core::num*, core::int*) →* void};
+          final core::num* #t77 = #t76.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+          final core::int* #t78 = #t76.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t75.{core::Map::[]=}{Invariant}(#t77, #t78){(core::num*, core::int*) →* void};
         }
       }
     }
-  } =>#t80;
+  } =>#t75;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.expect
index cfe7b00..2914b7b 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.expect
@@ -38,7 +38,7 @@
 static method returnFutureClass() → asy::Future<self::Class*>* async 
   return new self::Class::•();
 static method error() → asy::Stream<FutureOr<self::Class*>*>* async* {
-  yield let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
+  yield invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
index ae0443b..f6ea477 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
@@ -102,7 +102,7 @@
       try {
         #L3:
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
+          if(:controller.{asy::_AsyncStarStreamController::add}(invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
@@ -188,8 +188,8 @@
           try
             #L6:
             while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 FutureOr<self::Class*>* cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class*>*};
                 {
@@ -201,7 +201,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class*>*>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
index 690c624..651a9c4 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
 //       : assert(property),
 //                ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
 //         this.field = property,
 //                      ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
 //         super(property);
 //               ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
 //   Class.redirect() : this(property);
 //                           ^^^^^^^^
 //
@@ -41,18 +41,18 @@
 class Class extends self::Super {
   field core::bool* field;
   constructor •(core::bool* value) → self::Class*
-    : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+    : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
       : assert(property),
-               ^^^^^^^^" as{TypeError,ForDynamic} core::bool*), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+               ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
         this.field = property,
-                     ^^^^^^^^" as{TypeError,ForDynamic} core::bool*, super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+                     ^^^^^^^^", super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
         super(property);
-              ^^^^^^^^" as{TypeError,ForDynamic} core::bool*)
+              ^^^^^^^^")
     ;
   constructor redirect() → self::Class*
-    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
   Class.redirect() : this(property);
-                          ^^^^^^^^" as{TypeError,ForDynamic} core::bool*)
+                          ^^^^^^^^")
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
index 57f7ead..651a9c4 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
 //       : assert(property),
 //                ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
 //         this.field = property,
 //                      ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
 //         super(property);
 //               ^^^^^^^^
 //
-// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
 //   Class.redirect() : this(property);
 //                           ^^^^^^^^
 //
@@ -41,16 +41,16 @@
 class Class extends self::Super {
   field core::bool* field;
   constructor •(core::bool* value) → self::Class*
-    : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+    : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
       : assert(property),
-               ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+               ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
         this.field = property,
-                     ^^^^^^^^", super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+                     ^^^^^^^^", super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
         super(property);
               ^^^^^^^^")
     ;
   constructor redirect() → self::Class*
-    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
   Class.redirect() : this(property);
                           ^^^^^^^^")
     ;
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 29d979a..6c726a4 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.expect
@@ -37,7 +37,7 @@
     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);
-           ^" as{TypeError,ForDynamic} core::int*;
+           ^";
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
index d6283eb..096efc9 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
@@ -36,7 +36,7 @@
     : super self::Class::•()
     ;
   set setter(core::Object* o) → void {
-    super.{self::SuperClass::setter} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15: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*;
   }
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
index d6283eb..096efc9 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     : super self::Class::•()
     ;
   set setter(core::Object* o) → void {
-    super.{self::SuperClass::setter} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15: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*;
   }
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 2bcb96a..be8f096 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
@@ -37,7 +37,7 @@
     : super self::Class::•()
     ;
   set setter(covariant core::int* o) → void {
-    super.{self::Class::setter} = let final Never* #t1 = 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.{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*;
   }
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 2bcb96a..be8f096 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
@@ -37,7 +37,7 @@
     : super self::Class::•()
     ;
   set setter(covariant core::int* o) → void {
-    super.{self::Class::setter} = let final Never* #t1 = 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.{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*;
   }
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.expect b/pkg/front_end/testcases/general/tabs.dart.weak.expect
index 217aa32..c69fb6b 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/tabs.dart:9:9: Error: Getter not found: 'one'.
+// pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
 //   print(one);
 //         ^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:10:9: Error: Getter not found: 'two'.
+// pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
 //   print(two);
 //         ^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:11:9: Error: Getter not found: 'three'.
+// pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
 //   print(three);
 //         ^^^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:12:9: Error: Getter not found: 'four'.
+// pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
 //   print(four);
 //         ^^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:13:9: Error: Getter not found: 'five'.
+// pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
 //   print(five);
 //         ^^^^
 //
@@ -26,19 +26,19 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:9:9: Error: Getter not found: 'one'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
   print(one);
         ^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:10:9: Error: Getter not found: 'two'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
   print(two);
         ^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:11:9: Error: Getter not found: 'three'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
   print(three);
         ^^^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:12:9: Error: Getter not found: 'four'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
   print(four);
         ^^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:13:9: Error: Getter not found: 'five'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
   print(five);
         ^^^^");
 }
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
index 217aa32..c69fb6b 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/tabs.dart:9:9: Error: Getter not found: 'one'.
+// pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
 //   print(one);
 //         ^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:10:9: Error: Getter not found: 'two'.
+// pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
 //   print(two);
 //         ^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:11:9: Error: Getter not found: 'three'.
+// pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
 //   print(three);
 //         ^^^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:12:9: Error: Getter not found: 'four'.
+// pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
 //   print(four);
 //         ^^^^
 //
-// pkg/front_end/testcases/general/tabs.dart:13:9: Error: Getter not found: 'five'.
+// pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
 //   print(five);
 //         ^^^^
 //
@@ -26,19 +26,19 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:9:9: Error: Getter not found: 'one'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
   print(one);
         ^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:10:9: Error: Getter not found: 'two'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
   print(two);
         ^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:11:9: Error: Getter not found: 'three'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
   print(three);
         ^^^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:12:9: Error: Getter not found: 'four'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
   print(four);
         ^^^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:13:9: Error: Getter not found: 'five'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
   print(five);
         ^^^^");
 }
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
index f1d030d..49f26e6 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
@@ -24,7 +24,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-@let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: 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.
+@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: 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.
 @A
  ^" in self::A*
 class B extends core::Object {
@@ -43,8 +43,3 @@
 }
 static method main() → dynamic
   ;
-
-
-Extra constant evaluation status:
-Evaluated: TypeLiteral @ org-dartlang-testcase:///type_literal_as_metadata.dart:9:2 -> TypeLiteralConstant(A*)
-Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
index b61c54e..ea169b3 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
@@ -35,7 +35,7 @@
     : super core::Object::•()
     ;
   method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
-    this.{self::Bar::list} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
+    this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
  - 'List' is from 'dart:core'.
  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
  - 'int/*2*/' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
index b61c54e..ea169b3 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
     : super core::Object::•()
     ;
   method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
-    this.{self::Bar::list} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
+    this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
  - 'List' is from 'dart:core'.
  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
  - 'int/*2*/' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
index 13976c1..9c945b5 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
@@ -41,7 +41,7 @@
     return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   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
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
index 6ed0eeb..ec59314 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
     return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^"){(core::num*) →* core::num*};
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length){(core::num*) →* core::num*};
   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
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.expect b/pkg/front_end/testcases/general/undefined.dart.weak.expect
index dd04769..0c68639 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.expect
@@ -46,18 +46,18 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
-    ^";
+    ^" in c{<unresolved>}.y;
   c.{self::C::f}(){() →* void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
   c.g();
-    ^";
+    ^" in c{<unresolved>}.g();
   c.{self::C::x} = null;
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:16:5: Error: The setter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
   c.y = null;
-    ^";
+    ^" in c{<unresolved>}.y = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
index dd04769..0c68639 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
@@ -46,18 +46,18 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
-    ^";
+    ^" in c{<unresolved>}.y;
   c.{self::C::f}(){() →* void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
   c.g();
-    ^";
+    ^" in c{<unresolved>}.g();
   c.{self::C::x} = null;
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:16:5: Error: The setter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
   c.y = null;
-    ^";
+    ^" in c{<unresolved>}.y = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
index 99c4726..fdcdf1e 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
@@ -39,11 +39,11 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
-    ^"{dynamic}.+(1);
+    ^" in #t1{<unresolved>}.x{dynamic}.+(1);
   let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
-    ^" == null ?{dynamic} #t2.{self::C::x} = 1 : null;
+    ^" in #t2{<unresolved>}.x == null ?{dynamic} #t2.{self::C::x} = 1 : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
index 99c4726..fdcdf1e 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
@@ -39,11 +39,11 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
-    ^"{dynamic}.+(1);
+    ^" in #t1{<unresolved>}.x{dynamic}.+(1);
   let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
-    ^" == null ?{dynamic} #t2.{self::C::x} = 1 : null;
+    ^" in #t2{<unresolved>}.x == null ?{dynamic} #t2.{self::C::x} = 1 : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart
new file mode 100644
index 0000000..462ecf1
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart
@@ -0,0 +1,161 @@
+// 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 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Super {
+  Super.named();
+}
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+test() {
+  UnresolvedClass();
+  new UnresolvedClass();
+  const UnresolvedClass();
+
+  UnresolvedClass.unresolvedConstructor();
+  new UnresolvedClass.unresolvedConstructor();
+  const UnresolvedClass.unresolvedConstructor();
+  UnresolvedClass /**/ .unresolvedConstructor();
+  new UnresolvedClass. /**/ unresolvedConstructor();
+  const UnresolvedClass /**/ .unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass();
+  new unresolved_prefix.UnresolvedClass();
+  const unresolved_prefix.UnresolvedClass();
+  unresolved_prefix. /**/ UnresolvedClass();
+  new unresolved_prefix /**/ .UnresolvedClass();
+  const unresolved_prefix. /**/ UnresolvedClass();
+
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+
+  UnresolvedClass<int>();
+  new UnresolvedClass<int>();
+  const UnresolvedClass<int>();
+  UnresolvedClass /**/ <int>();
+  new UnresolvedClass<int> /**/ ();
+  const UnresolvedClass /**/ <int>();
+
+  UnresolvedClass<int>.unresolvedConstructor();
+  new UnresolvedClass<int>.unresolvedConstructor();
+  const UnresolvedClass<int>.unresolvedConstructor();
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  unresolved_prefix.UnresolvedClass<int>();
+  new unresolved_prefix.UnresolvedClass<int>();
+  const unresolved_prefix.UnresolvedClass<int>();
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  ResolvedClass();
+  new ResolvedClass();
+  const ResolvedClass();
+
+  ResolvedClass.unresolvedConstructor();
+  new ResolvedClass.unresolvedConstructor();
+  const ResolvedClass.unresolvedConstructor();
+  ResolvedClass /**/ .unresolvedConstructor();
+  new ResolvedClass. /**/ unresolvedConstructor();
+  const ResolvedClass /**/ .unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass();
+  new resolved_prefix.UnresolvedClass();
+  const resolved_prefix.UnresolvedClass();
+  resolved_prefix. /**/ UnresolvedClass();
+  new resolved_prefix /**/ .UnresolvedClass();
+  const resolved_prefix. /**/ UnresolvedClass();
+
+  resolved_prefix.ResolvedClass();
+  new resolved_prefix.ResolvedClass();
+  const resolved_prefix.ResolvedClass();
+  resolved_prefix. /**/ ResolvedClass();
+  new resolved_prefix /**/ .ResolvedClass();
+  const resolved_prefix. /**/ ResolvedClass();
+
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+
+  ResolvedClass<int>();
+  new ResolvedClass<int>();
+  const ResolvedClass<int>();
+  ResolvedClass /**/ <int>();
+  new ResolvedClass /**/ <int>();
+  const ResolvedClass /**/ <int>();
+
+  ResolvedClass<int>.unresolvedConstructor();
+  new ResolvedClass<int>.unresolvedConstructor();
+  const ResolvedClass<int>.unresolvedConstructor();
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+
+  resolved_prefix.UnresolvedClass<int>();
+  new resolved_prefix.UnresolvedClass<int>();
+  const resolved_prefix.UnresolvedClass<int>();
+  resolved_prefix. /**/ UnresolvedClass<int>();
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+
+  resolved_prefix.ResolvedClass<int>();
+  new resolved_prefix.ResolvedClass<int>();
+  const resolved_prefix.ResolvedClass<int>();
+  resolved_prefix. /**/ ResolvedClass<int>();
+  new resolved_prefix.ResolvedClass /**/ <int>();
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+  const resolved_prefix
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..a9af555
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+// @dart = 2.14
+import 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Super {
+  Super.named();
+}
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1eea9fc
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+// @dart = 2.14
+import 'unresolved_constructor_invocation.dart' as resolved_prefix;
+
+class Class extends Super {
+  Class.constructor1() : super();
+  Class.constructor2() : super.unresolved();
+  Class.constructor3() : this();
+  Class.constructor4() : this.unresolved();
+}
+
+class ResolvedClass<T> {
+  ResolvedClass.named();
+}
+
+class Super {
+  Super.named();
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.expect
new file mode 100644
index 0000000..63b12b9
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.expect
@@ -0,0 +1,866 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..1532807
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    ;
+  constructor constructor2() → self::Class
+    ;
+  constructor constructor3() → self::Class
+    ;
+  constructor constructor4() → self::Class
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..63b12b9
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -0,0 +1,866 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart b/pkg/front_end/testcases/general/unresolved_prefix_access.dart
new file mode 100644
index 0000000..6eb26e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.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.
+
+import 'unresolved_prefix_access.dart' as prefix;
+
+test() {
+  prefix.unresolved();
+  prefix?.test();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline.expect
new file mode 100644
index 0000000..5078146
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import 'unresolved_prefix_access.dart' as prefix;
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4ef7465a
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import 'unresolved_prefix_access.dart' as prefix;
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.expect
new file mode 100644
index 0000000..a7f4e10
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+//   prefix.unresolved();
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+// Try replacing '?.' with '.'
+//   prefix?.test();
+//   ^^^^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///unresolved_prefix_access.dart" as prefix;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+  prefix.unresolved();
+         ^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+Try replacing '?.' with '.'
+  prefix?.test();
+  ^^^^^^" in self::test();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.outline.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.outline.expect
new file mode 100644
index 0000000..6beeea3
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///unresolved_prefix_access.dart" as prefix;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..a7f4e10
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+//   prefix.unresolved();
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+// Try replacing '?.' with '.'
+//   prefix?.test();
+//   ^^^^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///unresolved_prefix_access.dart" as prefix;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+  prefix.unresolved();
+         ^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+Try replacing '?.' with '.'
+  prefix?.test();
+  ^^^^^^" in self::test();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
index aa48737..300333f2 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
@@ -98,32 +98,32 @@
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
     this.missingField;
-         ^^^^^^^^^^^^";
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:49:10: Error: The setter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
     this.missingField = 0;
-         ^^^^^^^^^^^^";
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:50:10: Error: The method 'missingMethod' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
     this.missingMethod();
-         ^^^^^^^^^^^^^";
+         ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:52:5: Error: The getter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
     missingField;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:53:5: Error: The setter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
     missingField = 0;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:54:5: Error: The method 'missingMethod' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
     missingMethod();
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
   }
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
index aa48737..300333f2 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
@@ -98,32 +98,32 @@
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
     this.missingField;
-         ^^^^^^^^^^^^";
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:49:10: Error: The setter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
     this.missingField = 0;
-         ^^^^^^^^^^^^";
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:50:10: Error: The method 'missingMethod' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
     this.missingMethod();
-         ^^^^^^^^^^^^^";
+         ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:52:5: Error: The getter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
     missingField;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:53:5: Error: The setter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
     missingField = 0;
-    ^^^^^^^^^^^^";
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:54:5: Error: The method 'missingMethod' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
     missingMethod();
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
   }
 }
 class E extends self::D {
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
index b1470cf..a408b7e 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
 //   Bar<int> x = new Bar<int>();
 //                    ^^^
 //
@@ -12,7 +12,7 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method main() → dynamic {
-  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Method not found: 'Bar'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
   Bar<int> x = new Bar<int>();
                    ^^^";
   core::print(x);
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
index b1470cf..a408b7e 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Method not found: 'Bar'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
 //   Bar<int> x = new Bar<int>();
 //                    ^^^
 //
@@ -12,7 +12,7 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method main() → dynamic {
-  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Method not found: 'Bar'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
   Bar<int> x = new Bar<int>();
                    ^^^";
   core::print(x);
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
index 89ab050..6ce7aaa 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Method not found: 'F'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
 //   F();
 //   ^
 //
@@ -11,7 +11,7 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Method not found: 'F'.
+  invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
   F();
   ^";
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
index 89ab050..6ce7aaa 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Method not found: 'F'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
 //   F();
 //   ^
 //
@@ -11,7 +11,7 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Method not found: 'F'.
+  invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
   F();
   ^";
 }
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
index afed71c..1c24c9e 100644
--- a/pkg/front_end/testcases/incremental.status
+++ b/pkg/front_end/testcases/incremental.status
@@ -5,4 +5,4 @@
 # Status file for the test suite ../test/incremental_suite.dart.
 
 # http://dartbug.com/41812#issuecomment-684825703
-strongmode_mixins_2: Crash
+#strongmode_mixins_2: Crash
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
index 6e1730d..06c5f68 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
@@ -10,6 +10,7 @@
     warnings: false
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           foo();
         }
@@ -25,6 +26,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           await foo();
         }
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
index 0e7c789..1e5883c 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
@@ -3,13 +3,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+// org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.
 //   await foo();
 //   ^^^^^
 //
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n  await foo();\n  ^^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n  await foo();\n  ^^^^^";
   }
   static method foo() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
index 2e729f2..f6870cd 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
@@ -9,9 +9,11 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
+        // @dart=2.9
         class B {
           void bMethod() {}
         }
@@ -23,9 +25,11 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
+        // @dart=2.9
         class B {
           void bMethod() {}
         }
@@ -49,9 +53,11 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
+        // @dart=2.9
         class B {
           void bMethod() {}
         }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
index 7ecccb5..69312e6 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
@@ -6,6 +6,7 @@
       : super #lib1::Object::•()
       ;
     method bMethod() → void {}
+    abstract member-signature operator ==(dynamic dynamic) → #lib1::bool*; -> #lib1::Object::==
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
index f884677..a414ca1 100644
--- a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
+++ b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
@@ -11,10 +11,12 @@
   - a.dart
 sources:
   a.dart: |
+    // @dart=2.9
     import 'b.dart';
 
     class A {
       void foo(B cls) {}
     }
   b.dart: |
+    // @dart=2.9
     abstract class B<T extends String> {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml b/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
index b877600..852223a 100644
--- a/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
+++ b/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
@@ -9,7 +9,6 @@
 nnbdMode: strong
 worlds:
   - entry: package:baz/main.dart
-    experiments: non-nullable
     errors: true
     sources:
       .dart_tool/package_config.json: |
@@ -53,7 +52,6 @@
 
   # Update "nothing" so we still want the error.
   - entry: package:baz/main.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     errors: true
@@ -74,7 +72,6 @@
 
   # Update ONE package to be strong.
   - entry: package:baz/main.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     errors: true
@@ -111,7 +108,6 @@
 
   # Update the last package to be strong.
   - entry: package:baz/main.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     errors: false
diff --git a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
index a1cc178..6c6a9bd 100644
--- a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           libMethod();
@@ -20,7 +21,6 @@
     expectedLibraryCount: 2
 
   - entry: main.dart
-    experiments: non-nullable
     nnbdMode: strong
     expectInitializeFromDill: false # loading the dill should fail because of mismatching NNBD settings
     checkInvalidatedFiles: false
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
index 4141487..a4648e6 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
 
         main() {
@@ -18,6 +19,7 @@
           print(c);
         }
       lib.dart: |
+        // @dart=2.9
         class A {
           const A();
         }
@@ -39,5 +41,6 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/changing_modules.yaml b/pkg/front_end/testcases/incremental/changing_modules.yaml
index 47752b2..534a0f4 100644
--- a/pkg/front_end/testcases/incremental/changing_modules.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules.yaml
@@ -9,6 +9,7 @@
 modules:
   example_0.1.0:
     example_0.1.0/a.dart: |
+      // @dart=2.9
       a() {
         la1();
       }
@@ -16,6 +17,7 @@
         print("Hello from v0.1.0");
       }
     example_0.1.0/b.dart: |
+      // @dart=2.9
       import "a.dart";
       b() {
         a();
@@ -24,6 +26,7 @@
       example:.
   example_0.1.1:
     example_0.1.1/b.dart: |
+      // @dart=2.9
       b() {
         print("Hello from v0.1.1");
       }
@@ -32,6 +35,7 @@
       example:.
   foo_1:
     foo_1/foo.dart: |
+      // @dart=2.9
       import "package:example/b.dart";
       foo() {
         print("Hello from foo");
@@ -43,6 +47,7 @@
       example:../example_0.1.0
   foo_2:
     foo_2/foo.dart: |
+      // @dart=2.9
       import "package:example/b.dart";
       import "bar.dart";
       import "baz.dart";
@@ -54,10 +59,12 @@
       }
       bool foo2 = true;
     foo_2/bar.dart: |
+      // @dart=2.9
       bar() {
         print("hello from bar");
       }
     foo_2/baz.dart: |
+      // @dart=2.9
       baz() {
         print("hello from baz");
       }
@@ -69,6 +76,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
@@ -94,6 +102,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print("hello");
@@ -124,6 +133,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print("hello");
diff --git a/pkg/front_end/testcases/incremental/changing_modules_10.yaml b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
index c500317..1cdaafd 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_10.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
@@ -10,11 +10,13 @@
 modules:
   module:
     module/a.dart: |
+      // @dart=2.9
       import 'package:module/b.dart';
 
       class A extends A2<B> { }
       class A2<T> { }
     module/b.dart: |
+      // @dart=2.9
       class B { }
     module/.packages: |
       module:.
@@ -23,6 +25,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         import 'package:module/a.dart';
         class Foo extends A {}
       .packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_11.yaml b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
index e6d89f4..aedd5d0 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_11.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
@@ -10,11 +10,13 @@
 modules:
   module:
     module/a.dart: |
+      // @dart=2.9
       import 'package:module/b.dart';
 
       class A implements A2<B> { }
       class A2<T> { }
     module/b.dart: |
+      // @dart=2.9
       class B { }
     module/.packages: |
       module:.
@@ -23,6 +25,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         import 'package:module/a.dart';
         class Foo extends A {}
       .packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_12.yaml b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
index 21b9ec1..c8f1cae 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_12.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
@@ -9,15 +9,19 @@
 modules:
   module:
     module/a.dart: |
+      // @dart=2.9
       import 'package:module/b.dart';
       class A { }
     module/b.dart: |
+      // @dart=2.9
       export 'package:module/a.dart';
       class B { }
     module/c.dart: |
+      // @dart=2.9
       export 'package:module/d.dart';
       class C { }
     module/d.dart: |
+      // @dart=2.9
       import 'package:module/c.dart';
       class D { }
     module/.packages: |
@@ -27,6 +31,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {}
       .packages: |
         module:module
diff --git a/pkg/front_end/testcases/incremental/changing_modules_13.yaml b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
index bd3bc06..5d042e9 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_13.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
@@ -9,6 +9,7 @@
 modules:
   module:
     module/a.dart: |
+      // @dart=2.9
       class A { }
       class B { }
       class C { }
@@ -20,6 +21,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:module/a.dart";
         class ABC = AB with C;
       .packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_2.yaml b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
index 201d9c0..b8db340 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_2.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
@@ -9,12 +9,14 @@
 modules:
   example_1:
     example_1/a.dart: |
+      // @dart=2.9
       a() {}
       var example = true;
     example_1/.packages: |
       example:.
   example_2:
     example_2/a.dart: |
+      // @dart=2.9
       a() {}
       var example = true;
     example_2/.packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
index 16093f7..fdfb2a6 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
@@ -9,11 +9,13 @@
 modules:
   foo:
     foo/foo.dart: |
+      // @dart=2.9
       var foo = true;
     foo/.packages: |
       foo:.
   foo2:
     foo2/foo.dart: |
+      // @dart=2.9
       var foo2 = true;
     foo2/.packages: |
       foo:.
@@ -23,6 +25,7 @@
     simulateTransformer: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print(foo);
@@ -47,6 +50,7 @@
     simulateTransformer: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print(foo2);
diff --git a/pkg/front_end/testcases/incremental/changing_modules_4.yaml b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
index d19784b..98ba2fa 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_4.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
@@ -10,6 +10,7 @@
 modules:
   moduleB:
     moduleB/b.dart: |
+      // @dart=2.9
       import 'package:moduleC/c.dart';
       export 'package:moduleC/c.dart' show baz;
 
@@ -24,6 +25,7 @@
       moduleD:../moduleD
   moduleC:
     moduleC/c.dart: |
+      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -37,6 +39,7 @@
       moduleD:../moduleD
   moduleD:
     moduleD/d.dart: |
+      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.packages: |
       moduleD:.
@@ -45,6 +48,7 @@
     fromComponent: true
     sources:
       a.dart: |
+        // @dart=2.9
         import "package:moduleB/b.dart";
 
         String foo = baz;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_5.yaml b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
index 02e89d3..b044f03 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_5.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
@@ -10,6 +10,7 @@
 modules:
   moduleB:
     moduleB/b.dart: |
+      // @dart=2.9
       import 'package:moduleC/c.dart';
 
       var bVar = 42;
@@ -25,6 +26,7 @@
       moduleD:../moduleD
   moduleC:
     moduleC/c.dart: |
+      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -38,6 +40,7 @@
       moduleD:../moduleD
   moduleD:
     moduleD/d.dart: |
+      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.packages: |
       moduleD:.
@@ -46,6 +49,7 @@
     fromComponent: true
     sources:
       a.dart: |
+        // @dart=2.9
         import "package:moduleB/b.dart";
 
         var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_6.yaml b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
index 84cb4d7..c66ca3b 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_6.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
@@ -10,6 +10,7 @@
 modules:
   moduleB:
     moduleB/b.dart: |
+      // @dart=2.9
       import 'package:moduleC/c.dart';
 
       var bVar = 42;
@@ -25,6 +26,7 @@
       moduleD:../moduleD
   moduleC:
     moduleC/c.dart: |
+      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -38,6 +40,7 @@
       moduleD:../moduleD
   moduleD:
     moduleD/d.dart: |
+      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.packages: |
       moduleD:.
@@ -46,6 +49,7 @@
     fromComponent: true
     sources:
       a.dart: |
+        // @dart=2.9
         import "package:moduleB/b.dart";
 
         var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
index ed58e9d..f718f14 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
@@ -10,12 +10,14 @@
 modules:
   module:
     module/lib1.dart: |
+      // @dart=2.9
       import 'lib3.dart';
 
       class Class1 {
         Class3a get c3a {}
       }
     module/lib2.dart: |
+      // @dart=2.9
       import 'lib4.dart';
 
       class Class2 {
@@ -25,6 +27,7 @@
         }
       }
     module/lib3.dart: |
+      // @dart=2.9
       class Class3a {
         Class3b get c3b {}
       }
@@ -41,6 +44,7 @@
     fromComponent: true
     sources:
       compileme.dart: |
+        // @dart=2.9
         import 'package:module/lib1.dart';
         import 'package:module/lib2.dart';
 
@@ -85,6 +89,7 @@
     skipOutlineBodyCheck: true
     sources:
       compileme.dart: |
+        // @dart=2.9
         import 'package:module/lib1.dart';
         import 'package:module/lib2.dart';
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
index 2e2d653..42de9b4 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
@@ -10,12 +10,14 @@
 modules:
   module:
     module/lib1.dart: |
+      // @dart=2.9
       import 'lib2.dart';
 
       abstract class XSet {
         factory XSet.identity() = XLinkedHashSet.identity;
       }
     module/lib2.dart: |
+      // @dart=2.9
       import 'lib1.dart';
       import 'lib3.dart';
 
@@ -23,6 +25,7 @@
         factory XLinkedHashSet.identity() = XIdentityHashSet;
       }
     module/lib3.dart: |
+      // @dart=2.9
       import 'lib2.dart';
 
       class XIdentityHashSet implements XLinkedHashSet {
@@ -35,6 +38,7 @@
     fromComponent: true
     sources:
       compileme.dart: |
+        // @dart=2.9
         import 'package:module/lib1.dart';
 
         main() {
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 cde35c2..39507e3 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
@@ -14,7 +14,7 @@
   abstract class XSet extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
     static factory identity() → lib1::XSet*
-      let dynamic #redirecting_factory = lib2::XLinkedHashSet::identity in invalid-expression;
+      return lib2::XLinkedHashSet::identity();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -35,7 +35,7 @@
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
     static final field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
     static factory identity() → lib2::XLinkedHashSet*
-      let dynamic #redirecting_factory = lib3::XIdentityHashSet::• in invalid-expression;
+      return new lib3::XIdentityHashSet::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/changing_modules_9.yaml b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
index c810617..85ef80a 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_9.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
@@ -10,6 +10,7 @@
 modules:
   moduleA:
     moduleA/a.dart: |
+      // @dart=2.9
       export 'package:moduleB/b.dart';
 
       class A { }
@@ -18,6 +19,7 @@
       moduleB:../moduleB
   moduleB:
     moduleB/b.dart: |
+      // @dart=2.9
       class B {
         int foo = 42;
       }
@@ -28,6 +30,7 @@
     fromComponent: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:moduleA/a.dart";
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
index e8a3d25..57c1a4c 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
@@ -11,14 +11,17 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() { b(); }
       b.dart: |
+        // @dart=2.9
         part 'c.dart';
         b() {
           c();
         }
       c.dart: |
+        // @dart=2.9
         part of 'b.dart';
         c() {}
     expectedLibraryCount: 2
@@ -29,6 +32,7 @@
     expectInitializeFromDill: false
     sources:
       b.dart: |
+        // @dart=2.9
         b() {}
     expectedLibraryCount: 2
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
index 7d5d86d..ba49b68 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
@@ -11,14 +11,17 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() { b(); }
       b.dart: |
+        // @dart=2.9
         part 'c.dart';
         b() {
           c();
         }
       c.dart: |
+        // @dart=2.9
         part of 'b.dart';
         c() {}
     expectedLibraryCount: 2
@@ -29,6 +32,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
@@ -41,6 +45,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
index adee8ad..4e07d25 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
@@ -13,9 +13,11 @@
     sources:
       .packages: example:pkg/example
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() { b(); }
       pkg/example/b.dart: |
+        // @dart=2.9
         b() {}
     expectedLibraryCount: 2
   - entry: main.dart
@@ -27,6 +29,7 @@
     sources:
       .packages: 
       main.dart: |
+        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
index ae08c58..fe79e16 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
@@ -11,16 +11,19 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports");
         }
       lib1.dart: |
+        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
+        // @dart=2.9
         x() {
           print("lib2.x!");
         }
@@ -32,16 +35,19 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports!");
         }
       lib1.dart: |
+        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
+        // @dart=2.9
         x() {
           print("lib2.x!");
         }
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
index 1e025c7..d263cde3 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
@@ -15,7 +15,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
 // export "lib2.dart" show x;
 // ^
 //
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
index 79292ff..f84cb36 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
@@ -15,7 +15,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
 // export "lib2.dart" show x;
 // ^
 //
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
index d8ddd8d..b58f969 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
@@ -9,6 +9,7 @@
   - entry: "main.dart"
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         const Set<String> foo = {};
@@ -17,6 +18,7 @@
           print(bar);
         }
       lib.dart: |
+        // @dart=2.9
         const Set<String> bar = {"hello", "world"};
     expectedLibraryCount: 2
   - entry: "main.dart"
@@ -26,5 +28,6 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         const Set<int> bar = {42};
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/crash_01.yaml b/pkg/front_end/testcases/incremental/crash_01.yaml
index d8c9c08..9663d9a 100644
--- a/pkg/front_end/testcases/incremental/crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/crash_01.yaml
@@ -22,6 +22,7 @@
           ]
         }
       app/main.dart: |
+        // @dart=2.9
         import "package:flutter/src/cupertino/interface_level.dart";
       flutter/src/widgets/framework.dart: |
         abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_01.yaml.world.1.expect
index 137fbff..6951e96 100644
--- a/pkg/front_end/testcases/incremental/crash_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_01.yaml.world.1.expect
@@ -12,6 +12,8 @@
     synthetic constructor •() → int::CupertinoUserInterfaceLevel
       : super fra::InheritedWidget::•()
       ;
+    static method _#new#tearOff() → int::CupertinoUserInterfaceLevel
+      return new int::CupertinoUserInterfaceLevel::•();
   }
 }
 library from "package:flutter/src/widgets/framework.dart" as fra {
diff --git a/pkg/front_end/testcases/incremental/crash_02.yaml b/pkg/front_end/testcases/incremental/crash_02.yaml
index 7a10c94..38115cb 100644
--- a/pkg/front_end/testcases/incremental/crash_02.yaml
+++ b/pkg/front_end/testcases/incremental/crash_02.yaml
@@ -22,6 +22,7 @@
           ]
         }
       app/main.dart: |
+        // @dart=2.9
         import "package:flutter/src/widgets/framework.dart";
       flutter/src/widgets/framework.dart: |
         import "package:flutter/src/widgets/widget_inspector.dart";
diff --git a/pkg/front_end/testcases/incremental/crash_03.yaml b/pkg/front_end/testcases/incremental/crash_03.yaml
index 4d1be72..7e1e066 100644
--- a/pkg/front_end/testcases/incremental/crash_03.yaml
+++ b/pkg/front_end/testcases/incremental/crash_03.yaml
@@ -22,6 +22,7 @@
           ]
         }
       app/main.dart: |
+        // @dart=2.9
         import "package:flutter/src/widgets/framework.dart";
       flutter/src/widgets/framework.dart: |
         abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml b/pkg/front_end/testcases/incremental/crash_05.yaml
index 58d324b..2af2d9b 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml
@@ -7,7 +7,6 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         import 'dart:ffi';
@@ -24,7 +23,6 @@
     expectedLibraryCount: 2
 
   - entry: main.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/crash_06.yaml b/pkg/front_end/testcases/incremental/crash_06.yaml
index 1c46cb0..fa5751e 100644
--- a/pkg/front_end/testcases/incremental/crash_06.yaml
+++ b/pkg/front_end/testcases/incremental/crash_06.yaml
@@ -8,7 +8,6 @@
 worlds:
   - entry: structs.dart
     errors: true
-    experiments: non-nullable
     sources:
       structs.dart: |
         import 'dart:ffi';
@@ -22,7 +21,6 @@
 
   - entry: structs.dart
     errors: true
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml b/pkg/front_end/testcases/incremental/crash_07.yaml
index ed141b7..cfb8245 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml
@@ -10,10 +10,12 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'nonexistingfile.dart';
         class A implements B {}
       lib.dart: |
+        // @dart=2.9
         class B implements C<NonExistingClass> {}
         class C<E> {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
index 9464e91..299f150 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:1:22: Error: Type 'NonExistingClass' not found.
+// org-dartlang-test:///lib.dart:2:22: Error: Type 'NonExistingClass' not found.
 // class B implements C<NonExistingClass> {}
 //                      ^^^^^^^^^^^^^^^^
 //
@@ -64,7 +64,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
+// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
 // import 'nonexistingfile.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml b/pkg/front_end/testcases/incremental/crash_test_1.yaml
index 1b66228..5a7785c 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml
@@ -9,11 +9,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         void main() {
           var c = new C.e4();
         }
       lib.dart: |
+        // @dart=2.9
         class C {
           C();
           factory C.e4() async = C;
@@ -25,12 +27,14 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         void main() {
           var c = new C.e4();
           print(c);
         }
       lib.dart: |
+        // @dart=2.9
         class C {
           C();
           factory C.e4() async = C;
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 3b0a7e5..938df3f 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
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
 //   factory C.e4() async = C;
 //                  ^^^^^
 //
@@ -14,7 +14,7 @@
       : super dart.core::Object::•()
       ;
     static factory e4() → lib::C*
-      let dynamic #redirecting_factory = lib::C::• in invalid-expression;
+      return new lib::C::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
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 bec03e7..991ad94 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
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
 //   factory C.e4() async = C;
 //                  ^^^^^
 //
@@ -14,7 +14,7 @@
       : super dart.core::Object::•()
       ;
     static factory e4() → lib::C*
-      let dynamic #redirecting_factory = lib::C::• in invalid-expression;
+      return new lib::C::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml b/pkg/front_end/testcases/incremental/dart2js_late.yaml
index d7d761c..c596da3 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml
@@ -9,7 +9,6 @@
 target: dart2js
 worlds:
   - entry: late_statics.dart
-    experiments: non-nullable
     sources:
       late_statics.dart: |
         import 'late_statics_lib.dart' as lib;
@@ -25,7 +24,6 @@
   - entry: late_statics.dart
     worldType: updated
     errors: true # (currently?) dart2js changes the interface and doesn't have the setter anymore. dartbug.com/45854
-    experiments: non-nullable
     expectInitializeFromDill: false
     invalidate:
       - late_statics.dart
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml b/pkg/front_end/testcases/incremental/deleting_file.yaml
index dea1937..bafc4b3 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml
@@ -11,12 +11,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 0");
           b();
         }
       b.dart: |
+        // @dart=2.9
         b() {
           print("b");
         }
@@ -27,6 +29,7 @@
       - b.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 0");
@@ -41,6 +44,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 1");
@@ -55,6 +59,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 1");
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
index 65c08c4c..a1988d3 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 0");
-    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
index 2fff4ef..8e795d4 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 1");
-    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
index 2fff4ef..8e795d4 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 1");
-    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/disappearing_library.yaml b/pkg/front_end/testcases/incremental/disappearing_library.yaml
index 75a951b..c04715d 100644
--- a/pkg/front_end/testcases/incremental/disappearing_library.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_library.yaml
@@ -12,6 +12,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         library mainLibrary;
         import "b.dart" as b;
 
@@ -19,6 +20,7 @@
           b.foo();
         }
       b.dart: |
+        // @dart=2.9
         library bLibrary;
 
         foo() {
@@ -31,6 +33,7 @@
       - b.dart
     sources:
       b.dart: |
+        // @dart=2.9
         library bLibrary;
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/disappearing_package.yaml b/pkg/front_end/testcases/incremental/disappearing_package.yaml
index 4790a02..fe8d157 100644
--- a/pkg/front_end/testcases/incremental/disappearing_package.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_package.yaml
@@ -12,12 +12,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
+        // @dart=2.9
         b() {
           print("b");
         }
@@ -31,6 +33,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello");
         }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
index f5ac43a..7fd5bb5 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
         }
       .packages: untitled:/
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
index 828f103..230ec11 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           asdf;
         }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
index 2c0a19b..055bb06 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
@@ -8,12 +8,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:3: Error: Getter not found: 'asdf'.
+// org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.
 //   asdf;
 //   ^^^^
 //
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:2:3: Error: Getter not found: 'asdf'.\n  asdf;\n  ^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.\n  asdf;\n  ^^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
index fd5d0d5..e6e0487 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         notMain() {}
       .packages: untitled:/
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
index d97a711..6557fc6 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
@@ -19,6 +19,7 @@
           ]
         }
       main.dart: |
+        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib.dart';
         
@@ -31,6 +32,7 @@
           }
         }
       lib.dart: |
+        // @dart=2.9
         import 'package:flutter/object.dart';
         mixin LibMixin on RenderObject {}
       flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
index 87f87b1..6e0e5c8 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
@@ -19,6 +19,7 @@
           ]
         }
       main.dart: |
+        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib1.dart';
 
@@ -29,10 +30,12 @@
           }
         }
       lib1.dart: |
+        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib2.dart';
         abstract class Adaptor extends RenderFoo with LibMixin {}
       lib2.dart: |
+        // @dart=2.9
         import 'package:flutter/object.dart';
         mixin LibMixin on RenderObject {}
       flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
index 7b083ef..df964e7 100644
--- a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
+++ b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
@@ -8,7 +8,7 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: triple-shift,non-nullable
+    experiments: triple-shift
     sources:
       main.dart: |
         main() {
diff --git a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
index 51073a5..9576219 100644
--- a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
@@ -13,6 +13,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello");
         }
diff --git a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
index 13a6a2e..0ecdf8e 100644
--- a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
+++ b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
index 21d2963..62cacea 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
@@ -14,6 +14,7 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart" as p;
         main() {
@@ -21,10 +22,12 @@
           o.onObject;
         }
       lib1.dart: |
+        // @dart=2.9
         extension OnObject on Object {
           String get onObject => "object #1";
         }
       lib2.dart: |
+        // @dart=2.9
         extension AlsoOnObject on Object {
           String get onObject => "object #2";
         }
@@ -37,6 +40,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as p;
         main() {
@@ -53,6 +57,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart" as p;
         main() {
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
index fa77b0e..d04e859 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
@@ -19,15 +19,15 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
 //  - 'Object' is from 'dart:core'.
 // Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   o.onObject;
 //     ^^^^^^^^
-// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
 //   String get onObject => "object #1";
 //              ^^^^^^^^
-// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
 //   String get onObject => "object #2";
 //              ^^^^^^^^
 //
@@ -37,6 +37,6 @@
 
   static method main() → dynamic {
     dart.core::Object* o = 1;
-    invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
index fa77b0e..d04e859 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
@@ -19,15 +19,15 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
 //  - 'Object' is from 'dart:core'.
 // Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   o.onObject;
 //     ^^^^^^^^
-// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
 //   String get onObject => "object #1";
 //              ^^^^^^^^
-// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
 //   String get onObject => "object #2";
 //              ^^^^^^^^
 //
@@ -37,6 +37,6 @@
 
   static method main() → dynamic {
     dart.core::Object* o = 1;
-    invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
index fb17878..78a3218 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -18,18 +19,21 @@
           "42".fooMe2();
         }
       lib1.dart: |
+        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
           }
         }
       lib2.dart: |
+        // @dart=2.9
         extension DuplicateName on String {
           String fooMe1() {
             return "Foo1";
           }
         }
       lib3.dart: |
+        // @dart=2.9
         extension DuplicateName on String {
           String fooMe2() {
             return "Foo2";
@@ -54,6 +58,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -63,18 +68,21 @@
           "42".fooMe2();
         }
       lib1.dart: |
+        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
           }
         }
       lib2.dart: |
+        // @dart=2.9
         extension DuplicateName on String {
           String fooMe1() {
             return "Foo1";
           }
         }
       lib3.dart: |
+        // @dart=2.9
         extension DuplicateName on String {
           String fooMe2() {
             return "Foo2";
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.2.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.2.expect
index a4440be..c8eb81d 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.2.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.2.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^");
+  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^" in "1234"{<unresolved>}.parseInt());
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.3.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.3.expect
index a4440be..c8eb81d 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.3.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expression.3.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^");
+  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^" in "1234"{<unresolved>}.parseInt());
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.2.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.2.expect
index a4440be..c8eb81d 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.2.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.2.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^");
+  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^" in "1234"{<unresolved>}.parseInt());
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.3.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.3.expect
index a4440be..c8eb81d 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.3.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expression.3.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^");
+  return dart.core::print(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:14: Error: The method 'parseInt' isn't defined for the class 'String'.\nTry correcting the name to the name of an existing method, or defining a method named 'parseInt'.\nprint(\"1234\".parseInt())\n             ^^^^^^^^" in "1234"{<unresolved>}.parseInt());
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml b/pkg/front_end/testcases/incremental/ffi_01.yaml
index 601d153..2c40646 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -18,6 +19,7 @@
           print(coordinate.next);
         }
       lib.dart: |
+        // @dart=2.9
         import 'dart:ffi';
 
         class Coordinate extends Struct {
@@ -41,6 +43,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml b/pkg/front_end/testcases/incremental/ffi_02.yaml
index be678ed..19d30a0 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         Coordinate coordinate;
@@ -21,6 +22,7 @@
           print(coordinate.next);
         }
       lib.dart: |
+        // @dart=2.9
         import 'dart:ffi';
 
         class Coordinate extends Struct {
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
index 60fdac4..6df844e 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
@@ -13,6 +13,7 @@
     skipClassHierarchyTest: true
     sources:
       main.dart: |
+        // @dart=2.9
         import 'package:flutter/framework.dart';
         import 'after_layout.dart';
         class _HotReloadIssueState extends State<HotReloadIssue>
@@ -22,7 +23,8 @@
         }
         class HotReloadIssue extends StatefulWidget {}
 
-      after_layout.dart:
+      after_layout.dart: |
+        // @dart=2.9
         import 'package:flutter/framework.dart';
         mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {}
 
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
index 596001e..15ee75b 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
@@ -37,21 +37,29 @@
     synthetic constructor •() → fra::State2
       : super fra::State::•()
       ;
+    static method _#new#tearOff() → fra::State2
+      return new fra::State2::•();
   }
   class StatefulWidget extends dart.core::Object {
     synthetic constructor •() → fra::StatefulWidget
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::StatefulWidget
+      return new fra::StatefulWidget::•();
   }
   class Widget extends dart.core::Object {
     synthetic constructor •() → fra::Widget
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::Widget
+      return new fra::Widget::•();
   }
   class BuildContext extends dart.core::Object {
     synthetic constructor •() → fra::BuildContext
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::BuildContext
+      return new fra::BuildContext::•();
   }
   static final field fra::State<fra::StatefulWidget> state = new fra::State2::•();
   static method foo() → void {
@@ -81,11 +89,15 @@
       ;
     method build(fra::BuildContext* context) → fra::Widget* {}
     method afterFirstLayout(fra::BuildContext* context) → void {}
+    static method _#new#tearOff() → main::_HotReloadIssueState*
+      return new main::_HotReloadIssueState::•();
   }
   class HotReloadIssue extends fra::StatefulWidget {
     synthetic constructor •() → main::HotReloadIssue*
       : super fra::StatefulWidget::•()
       ;
+    static method _#new#tearOff() → main::HotReloadIssue*
+      return new main::HotReloadIssue::•();
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
index f1cc6fa..4ba21fd 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
@@ -37,21 +37,29 @@
     synthetic constructor •() → fra::State2
       : super fra::State::•()
       ;
+    static method _#new#tearOff() → fra::State2
+      return new fra::State2::•();
   }
   class StatefulWidget extends dart.core::Object {
     synthetic constructor •() → fra::StatefulWidget
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::StatefulWidget
+      return new fra::StatefulWidget::•();
   }
   class Widget extends dart.core::Object {
     synthetic constructor •() → fra::Widget
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::Widget
+      return new fra::Widget::•();
   }
   class BuildContext extends dart.core::Object {
     synthetic constructor •() → fra::BuildContext
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → fra::BuildContext
+      return new fra::BuildContext::•();
   }
   static final field fra::State<fra::StatefulWidget> state = new fra::State2::•();
   static method foo() → void {
@@ -81,11 +89,15 @@
       ;
     method build(fra::BuildContext* context) → fra::Widget* {}
     method afterFirstLayout(fra::BuildContext* context) → void {}
+    static method _#new#tearOff() → main::_HotReloadIssueState*
+      return new main::_HotReloadIssueState::•();
   }
   class HotReloadIssue extends fra::StatefulWidget {
     synthetic constructor •() → main::HotReloadIssue*
       : super fra::StatefulWidget::•()
       ;
+    static method _#new#tearOff() → main::HotReloadIssue*
+      return new main::HotReloadIssue::•();
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
index 1e22f39..3ee21e2 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         class Test extends Test2 {
@@ -19,6 +20,7 @@
           Baz world();
         }
       lib.dart: |
+        // @dart=2.9
         class FooEntry {}
 
         class BarEntry extends FooEntry {}
@@ -46,6 +48,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         class Test extends Test2 {
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
index 3e3b988..0072fcb 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
@@ -9,15 +9,18 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'package:flutter/src/widgets/framework.dart';
         import 'package:flutter/src/widgets/widget_inspector.dart';
 
         class Foo extends Widget {}
       flutter/lib/src/widgets/framework.dart: |
+        // @dart=2.9
         abstract class Bar {}
 
         abstract class Widget extends Bar {}
       flutter/lib/src/widgets/widget_inspector.dart: |
+        // @dart=2.9
         abstract class _HasCreationLocation {
           _Location get _location;
         }
@@ -58,6 +61,7 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import 'package:flutter/src/widgets/framework.dart';
         import 'package:flutter/src/widgets/widget_inspector.dart';
 
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
index aaba95f..4000948 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
@@ -40,6 +40,8 @@
     const constructor •({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
@@ -56,8 +58,15 @@
     synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo*
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff() → main::Foo*
+      return new main::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 constants  {
   #C1 = null
+  #C2 = "org-dartlang-test:///main.dart"
+  #C3 = 5.0
+  #C4 = 7.0
+  #C5 = "Foo"
+  #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
index aaba95f..4000948 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
@@ -40,6 +40,8 @@
     const constructor •({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
@@ -56,8 +58,15 @@
     synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo*
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff() → main::Foo*
+      return new main::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 constants  {
   #C1 = null
+  #C2 = "org-dartlang-test:///main.dart"
+  #C3 = 5.0
+  #C4 = 7.0
+  #C5 = "Foo"
+  #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
index a583a95..95b124a 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
@@ -7,7 +7,6 @@
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         import 'foo.dart';
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 7d948ed..41475f6 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
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -43,6 +45,10 @@
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       return #C7;
+    static method _#new#tearOff() → foo::Foo
+      return foo::Foo::•($creationLocationd_0dea112b090073317d4: #C9);
+    static method _#_#tearOff() → foo::Foo
+      return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
@@ -50,7 +56,11 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
+    static method _#new#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+    static method _#_#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -58,9 +68,15 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C11;
+      return #C22;
+    static method _#new#tearOff() → foo::Baz
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      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);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -71,21 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C16;
+        return #C32;
       }
     }
+    static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+    static method _#_#tearOff() → foo::Boz
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C19);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C22);
-  static field foo::Bar constBar = #C26;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C28);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C29);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C32);
+  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);
 }
 constants  {
   #C1 = null
@@ -95,29 +115,43 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
   #C7 = foo::Foo {_location:#C6}
-  #C8 = 6.0
-  #C9 = "Baz"
-  #C10 = wid::_Location {file:#C2, line:#C8, column:#C4, name:#C9, parameterLocations:#C1}
-  #C11 = foo::Baz {_location:#C10}
-  #C12 = 9.0
-  #C13 = 128.0
-  #C14 = "Boz"
-  #C15 = wid::_Location {file:#C2, line:#C12, column:#C13, name:#C14, parameterLocations:#C1}
-  #C16 = foo::Boz {_location:#C15}
-  #C17 = "org-dartlang-test:///main.dart"
-  #C18 = 18.0
-  #C19 = wid::_Location {file:#C17, line:#C3, column:#C18, name:#C5, parameterLocations:#C1}
-  #C20 = 3.0
-  #C21 = "Bar"
-  #C22 = wid::_Location {file:#C17, line:#C20, column:#C18, name:#C21, parameterLocations:#C1}
-  #C23 = 4.0
-  #C24 = 22.0
-  #C25 = wid::_Location {file:#C17, line:#C23, column:#C24, name:#C21, parameterLocations:#C1}
-  #C26 = foo::Bar {_location:#C25}
-  #C27 = 5.0
-  #C28 = wid::_Location {file:#C17, line:#C27, column:#C18, name:#C9, parameterLocations:#C1}
-  #C29 = wid::_Location {file:#C17, line:#C8, column:#C18, name:#C14, parameterLocations:#C1}
-  #C30 = 7.0
-  #C31 = 20.0
-  #C32 = wid::_Location {file:#C17, line:#C30, column:#C31, name:#C14, parameterLocations:#C1}
+  #C8 = 36.0
+  #C9 = wid::_Location {file:#C2, line:#C3, column:#C8, name:#C5, parameterLocations:#C1}
+  #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}
 }
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 b101e36..6f610b2 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
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -43,6 +45,10 @@
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       return #C7;
+    static method _#new#tearOff() → foo::Foo
+      return foo::Foo::•($creationLocationd_0dea112b090073317d4: #C9);
+    static method _#_#tearOff() → foo::Foo
+      return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
@@ -50,7 +56,11 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
+    static method _#new#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+    static method _#_#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -58,9 +68,15 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C11;
+      return #C22;
+    static method _#new#tearOff() → foo::Baz
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      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);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -71,9 +87,13 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C16;
+        return #C32;
       }
     }
+    static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+    static method _#_#tearOff() → foo::Boz
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -89,13 +109,32 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
   #C7 = foo::Foo {_location:#C6}
-  #C8 = 6.0
-  #C9 = "Baz"
-  #C10 = wid::_Location {file:#C2, line:#C8, column:#C4, name:#C9, parameterLocations:#C1}
-  #C11 = foo::Baz {_location:#C10}
-  #C12 = 9.0
-  #C13 = 128.0
-  #C14 = "Boz"
-  #C15 = wid::_Location {file:#C2, line:#C12, column:#C13, name:#C14, parameterLocations:#C1}
-  #C16 = foo::Boz {_location:#C15}
+  #C8 = 36.0
+  #C9 = wid::_Location {file:#C2, line:#C3, column:#C8, name:#C5, parameterLocations:#C1}
+  #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}
 }
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 7d948ed..41475f6 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
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -43,6 +45,10 @@
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       return #C7;
+    static method _#new#tearOff() → foo::Foo
+      return foo::Foo::•($creationLocationd_0dea112b090073317d4: #C9);
+    static method _#_#tearOff() → foo::Foo
+      return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
@@ -50,7 +56,11 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
+    static method _#new#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+    static method _#_#tearOff() → foo::Bar
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -58,9 +68,15 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C11;
+      return #C22;
+    static method _#new#tearOff() → foo::Baz
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      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);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -71,21 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C16;
+        return #C32;
       }
     }
+    static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+    static method _#_#tearOff() → foo::Boz
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C19);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C22);
-  static field foo::Bar constBar = #C26;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C28);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C29);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C32);
+  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);
 }
 constants  {
   #C1 = null
@@ -95,29 +115,43 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
   #C7 = foo::Foo {_location:#C6}
-  #C8 = 6.0
-  #C9 = "Baz"
-  #C10 = wid::_Location {file:#C2, line:#C8, column:#C4, name:#C9, parameterLocations:#C1}
-  #C11 = foo::Baz {_location:#C10}
-  #C12 = 9.0
-  #C13 = 128.0
-  #C14 = "Boz"
-  #C15 = wid::_Location {file:#C2, line:#C12, column:#C13, name:#C14, parameterLocations:#C1}
-  #C16 = foo::Boz {_location:#C15}
-  #C17 = "org-dartlang-test:///main.dart"
-  #C18 = 18.0
-  #C19 = wid::_Location {file:#C17, line:#C3, column:#C18, name:#C5, parameterLocations:#C1}
-  #C20 = 3.0
-  #C21 = "Bar"
-  #C22 = wid::_Location {file:#C17, line:#C20, column:#C18, name:#C21, parameterLocations:#C1}
-  #C23 = 4.0
-  #C24 = 22.0
-  #C25 = wid::_Location {file:#C17, line:#C23, column:#C24, name:#C21, parameterLocations:#C1}
-  #C26 = foo::Bar {_location:#C25}
-  #C27 = 5.0
-  #C28 = wid::_Location {file:#C17, line:#C27, column:#C18, name:#C9, parameterLocations:#C1}
-  #C29 = wid::_Location {file:#C17, line:#C8, column:#C18, name:#C14, parameterLocations:#C1}
-  #C30 = 7.0
-  #C31 = 20.0
-  #C32 = wid::_Location {file:#C17, line:#C30, column:#C31, name:#C14, parameterLocations:#C1}
+  #C8 = 36.0
+  #C9 = wid::_Location {file:#C2, line:#C3, column:#C8, name:#C5, parameterLocations:#C1}
+  #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}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
index ccf7702..6bb2b2b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
@@ -7,7 +7,6 @@
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         import 'foo.dart';
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
index bf659ac..f4d0275 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -41,6 +43,8 @@
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff() → foo::Foo
+      return new foo::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -50,4 +54,9 @@
 }
 constants  {
   #C1 = null
+  #C2 = "org-dartlang-test:///foo.dart"
+  #C3 = 2.0
+  #C4 = 34.0
+  #C5 = "Foo"
+  #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
index 178186e..3fdfb87 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -41,20 +43,26 @@
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff() → foo::Foo
+      return new foo::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo foo = #C7;
+  static field foo::Foo foo = #C11;
 }
 constants  {
   #C1 = null
-  #C2 = "org-dartlang-test:///main.dart"
-  #C3 = 3.0
-  #C4 = 17.0
+  #C2 = "org-dartlang-test:///foo.dart"
+  #C3 = 2.0
+  #C4 = 34.0
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
-  #C7 = foo::Foo {_location:#C6}
+  #C7 = "org-dartlang-test:///main.dart"
+  #C8 = 3.0
+  #C9 = 17.0
+  #C10 = wid::_Location {file:#C7, line:#C8, column:#C9, name:#C5, parameterLocations:#C1}
+  #C11 = foo::Foo {_location:#C10}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
index 0813f0a..1853f91 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
@@ -7,7 +7,6 @@
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         // @dart=2.8
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
index 2c443b6..6704d7b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
@@ -36,6 +36,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -47,6 +49,8 @@
     const constructor •([dart.core::Object* key = #C1]) → foo::Foo*
       : super fra::StatelessWidget::•(key: key)
       ;
+    static method _#new#tearOff([dart.core::Object* key = #C1]) → foo::Foo*
+      return new foo::Foo::•(key);
     abstract member-signature get key() → dart.core::Object*; -> fra::Widget::key
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
index a13a232..64a1fbd 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
@@ -36,6 +36,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -47,6 +49,8 @@
     const constructor •([dart.core::Object* key = #C1]) → foo::Foo*
       : super fra::StatelessWidget::•(key: key)
       ;
+    static method _#new#tearOff([dart.core::Object* key = #C1]) → foo::Foo*
+      return new foo::Foo::•(key);
     abstract member-signature get key() → dart.core::Object*; -> fra::Widget::key
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
index 4f4309f..0c8de3b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
@@ -7,7 +7,6 @@
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         import 'foo.dart';
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
index 67d2066..a6fb1d9 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -42,6 +44,8 @@
     constructor •({required dart.core::String name = #C1, wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       : foo::Foo::name = name, super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff({required dart.core::String name = #C1}) → foo::Foo
+      return new foo::Foo::•(name: name, $creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -51,4 +55,9 @@
 }
 constants  {
   #C1 = null
+  #C2 = "org-dartlang-test:///foo.dart"
+  #C3 = 3.0
+  #C4 = 1.0
+  #C5 = "Foo"
+  #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
index 8d1b8cf..e6b030d 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
@@ -30,6 +30,8 @@
     const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
+      return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
   }
 }
 library from "org-dartlang-test:///foo.dart" as foo {
@@ -42,19 +44,25 @@
     constructor •({required dart.core::String name = #C1, wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Foo
       : foo::Foo::name = name, super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
+    static method _#new#tearOff({required dart.core::String name = #C1}) → foo::Foo
+      return new foo::Foo::•(name: name, $creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo foo = new foo::Foo::•(name: "foo", $creationLocationd_0dea112b090073317d4: #C6);
+  static field foo::Foo foo = new foo::Foo::•(name: "foo", $creationLocationd_0dea112b090073317d4: #C10);
 }
 constants  {
   #C1 = null
-  #C2 = "org-dartlang-test:///main.dart"
-  #C3 = 2.0
-  #C4 = 15.0
+  #C2 = "org-dartlang-test:///foo.dart"
+  #C3 = 3.0
+  #C4 = 1.0
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
+  #C7 = "org-dartlang-test:///main.dart"
+  #C8 = 2.0
+  #C9 = 15.0
+  #C10 = wid::_Location {file:#C7, line:#C8, column:#C9, name:#C5, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
index 6c859f5..fa1166f 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "dart:core";
         import "package:package2/lib2.dart";
         import "package:package2/lib3.dart";
@@ -17,15 +18,18 @@
           lib2();
           lib3();
         }
-      package1/lib1.dart:
+      package1/lib1.dart: |
+        // @dart=2.9
         lib1() {
           return 42;
         }
-      package2/lib2.dart:
+      package2/lib2.dart: |
+        // @dart=2.9
         lib2() {
           return 42;
         }
-      package2/lib3.dart:
+      package2/lib3.dart: |
+        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib1();
@@ -42,6 +46,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:package1/lib1.dart";
         main() {
           lib1();
@@ -59,6 +64,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:package2/lib2.dart";
         main() {
           lib2();
@@ -74,11 +80,13 @@
       - package:package1/lib1.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:package2/lib2.dart";
         main() {
           lib2();
         }
-      package1/lib1.dart:
+      package1/lib1.dart: |
+        // @dart=2.9
         lib1_1() {
           return 42;
         }
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
index 9a0feaf..997b737 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
@@ -10,7 +10,8 @@
 worlds:
   - entry: main.dart
     sources:
-      main.dart:
+      main.dart: |
+        // @dart=2.9
         import "package:package1/lib1.dart";
         import "package:package1/lib2.dart";
         import "package:package1/lib3.dart";
@@ -19,15 +20,18 @@
           lib2();
           lib3();
         }
-      package1/lib1.dart:
+      package1/lib1.dart: |
+        // @dart=2.9
         lib1() {
           return 42;
         }
-      package1/lib2.dart:
+      package1/lib2.dart: |
+        // @dart=2.9
         lib2() {
           return 42;
         }
-      package1/lib3.dart:
+      package1/lib3.dart: |
+        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib1();
@@ -42,7 +46,8 @@
     invalidate:
       - package:package1/lib3.dart
     sources:
-      package1/lib3.dart:
+      package1/lib3.dart: |
+        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib3_1();
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
index 7801796..775b322 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
@@ -13,18 +13,21 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "dart:core";
         import "package:package1/lib1_a.dart";
         main() {
           lib1();
         }
-      package1/lib1_a.dart:
+      package1/lib1_a.dart: |
+        // @dart=2.9
         import "package:package3/lib3.dart" as lib3;
         export "lib1_b.dart";
         lib1a() {
           lib3.lib3();
         }
-      package1/lib1_b.dart:
+      package1/lib1_b.dart: |
+        // @dart=2.9
         import "package:package2/lib2.dart" as lib2;
         lib1() {
           return la(null);
@@ -32,12 +35,14 @@
         la(lib2.Foo f) {
           return 42;
         }
-      package2/lib2.dart:
+      package2/lib2.dart: |
+        // @dart=2.9
         int f = 42;
         class Foo {
           static int y = 42;
         }
-      package3/lib3.dart:
+      package3/lib3.dart: |
+        // @dart=2.9
         lib3() {
           print("lib3");
         }
@@ -51,18 +56,21 @@
     expectInitializeFromDill: true
     sources:
       main.dart: |
+        // @dart=2.9
         import "dart:core";
         import "package:package1/lib1_a.dart";
         main() {
           lib1();
         }
-      package1/lib1_a.dart:
+      package1/lib1_a.dart: |
+        // @dart=2.9
         import "package:package3/lib3.dart" as lib3;
         export "lib1_b.dart";
         lib1a() {
           lib3.lib3();
         }
-      package1/lib1_b.dart:
+      package1/lib1_b.dart: |
+        // @dart=2.9
         import "package:package2/lib2.dart" as lib2;
         lib1() {
           return la(null);
@@ -70,12 +78,14 @@
         la(lib2.Foo f) {
           return 42;
         }
-      package2/lib2.dart:
+      package2/lib2.dart: |
+        // @dart=2.9
         int f = 42;
         class Foo {
           static int y = 42;
         }
-      package3/lib3.dart:
+      package3/lib3.dart: |
+        // @dart=2.9
         lib3() {
           print("lib3");
         }
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
index 5f87a50..a9c75d5 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
@@ -13,13 +13,15 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:package1/p1.dart";
         import "package:package2/p2.dart";
         main() {
           p1();
           p2();
         }
-      package1/p1.dart:
+      package1/p1.dart: |
+        // @dart=2.9
         p1() {
           print("Package 1");
           p1_v1_Only();
@@ -27,7 +29,8 @@
         p1_v1_Only() {
           print("Package 1 v1 only!");
         }
-      package1v2/p1.dart:
+      package1v2/p1.dart: |
+        // @dart=2.9
         p1() {
           print("Package 1 v2");
           p1_v2_Only();
@@ -35,7 +38,8 @@
         p1_v2_Only() {
           print("Package 1 v2 only!");
         }
-      package2/p2.dart:
+      package2/p2.dart: |
+        // @dart=2.9
         import "package:package1/p1.dart";
         p2() {
           p1();
@@ -50,13 +54,15 @@
     expectInitializeFromDill: false # .packages changed
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:package1/p1.dart";
         import "package:package2/p2.dart";
         main() {
           p1();
           p2();
         }
-      package1/p1.dart:
+      package1/p1.dart: |
+        // @dart=2.9
         p1() {
           print("Package 1");
           p1_v1_Only();
@@ -64,7 +70,8 @@
         p1_v1_Only() {
           print("Package 1 v1 only!");
         }
-      package1v2/p1.dart:
+      package1v2/p1.dart: |
+        // @dart=2.9
         p1() {
           print("Package 1 v2");
           p1_v2_Only();
@@ -72,7 +79,8 @@
         p1_v2_Only() {
           print("Package 1 v2 only!");
         }
-      package2/p2.dart:
+      package2/p2.dart: |
+        // @dart=2.9
         import "package:package1/p1.dart";
         p2() {
           p1();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
index 2efee99..f2414e8 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
@@ -13,12 +13,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "foo.dart";
         main() {
           Foo foo = new Foo();
           foo.foo();
         }
       foo.dart: |
+        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -30,10 +32,12 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello from main");
         }
       foo.dart: |
+        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -47,6 +51,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "foo.dart";
         main() {
           Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
index e34eff2..6460d79 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
@@ -14,12 +14,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/foo.dart";
         main() {
           Foo foo = new Foo();
           foo.foo();
         }
       mypackage/foo.dart: |
+        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -32,10 +34,12 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello from main");
         }
       mypackage/foo.dart: |
+        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -50,6 +54,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/foo.dart";
         main() {
           Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
index 2620942c..fd9154f 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         // The space makes the scheme invalid -- this causes Uri.parse to throw.
         part ' package:foo/bar.dart';
     expectedLibraryCount: 1
@@ -21,6 +22,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {}
     expectInitializeFromDill: false
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
index 8763205..2b1004b 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:3:6: Error: Expected a URI.
 // part ' package:foo/bar.dart';
 //      ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:7: Error: Couldn't parse URI ' package:foo/bar.dart':
+// org-dartlang-test:///main.dart:3:7: Error: Couldn't parse URI ' package:foo/bar.dart':
 //   Scheme not starting with alphabetic character.
 // part ' package:foo/bar.dart';
 //       ^
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
index a77a588..0ee68fc 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
@@ -8,6 +8,7 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         part '$foo';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
index 144eef3..1184909 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
@@ -1,9 +1,9 @@
 main = main::main;
-library from "org-dartlang-malformed-uri:bad5" as bad5 {
+library from "org-dartlang-malformed-uri:bad18" as bad {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
 // part '$foo';
 //      ^
 //
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
 //       ^
 //
 
-  part org-dartlang-malformed-uri:bad5;
+  part org-dartlang-malformed-uri:bad18;
   static method main() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
index 144eef3..1184909 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
@@ -1,9 +1,9 @@
 main = main::main;
-library from "org-dartlang-malformed-uri:bad5" as bad5 {
+library from "org-dartlang-malformed-uri:bad18" as bad {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
 // part '$foo';
 //      ^
 //
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
 //       ^
 //
 
-  part org-dartlang-malformed-uri:bad5;
+  part org-dartlang-malformed-uri:bad18;
   static method main() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
index 768fd3c..eee5b6c 100644
--- a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
@@ -10,6 +10,8 @@
   - a.dart
 sources:
   a.dart: |
+    // @dart=2.9
     export 'b.dart';
   b.dart: |
+    // @dart=2.9
     main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
index da20971..7fee6d0 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
@@ -10,12 +10,14 @@
   - entry: "package:example/main.dart"
     sources:
       pkg/example/main.dart: |
+        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b1");
@@ -29,12 +31,14 @@
       - "package:example/b.dart"
     sources:
       pkg/example/main.dart: |
+        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b2");
@@ -48,12 +52,14 @@
       - "package:example/b.dart"
     sources:
       pkg/example/main.dart: |
+        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
index 47a379d..2e63311 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
@@ -9,12 +9,14 @@
   - entry: "package:example/main.dart"
     sources:
       pkg/example/main.dart: |
+        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b1");
@@ -30,6 +32,7 @@
       - "package:example/b.dart"
     sources:
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b2");
@@ -45,6 +48,7 @@
       - "package:example/b.dart"
     sources:
       pkg/example/b.dart: |
+        // @dart=2.9
         part of "main.dart";
         b() {
           print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
index 60327f4..4e2cd4d 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
@@ -10,12 +10,14 @@
   - pkg/example/b.dart
 sources:
   pkg/example/main.dart: |
+    // @dart=2.9
     part "b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
+    // @dart=2.9
     part of "main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
index ccbe383..68e2d37 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
@@ -10,12 +10,14 @@
   - "package:example/b.dart"
 sources:
   pkg/example/main.dart: |
+    // @dart=2.9
     part "b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
+    // @dart=2.9
     part of "main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
index 15d82ee..ee36914 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
@@ -11,12 +11,14 @@
   - pkg/example/b.dart
 sources:
   pkg/example/main.dart: |
+    // @dart=2.9
     part "package:example/b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
+    // @dart=2.9
     part of "package:example/main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
index 2bb9c88..5af601b 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
@@ -11,12 +11,14 @@
   - "package:example/b.dart"
 sources:
   pkg/example/main.dart: |
+    // @dart=2.9
     part "package:example/b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
+    // @dart=2.9
     part of "package:example/main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
index 2313785..ec752c6 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
@@ -15,16 +15,19 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
           b();
         }
       b.dart: |
+        // @dart=2.9
         b() {
           print("hello from b");
         }
       c.dart: |
+        // @dart=2.9
         c() {
           print("hello from c");
         }
@@ -38,6 +41,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         import "nonexisting.dart";
         main() {
@@ -45,6 +49,7 @@
           b();
         }
       b.dart: |
+        // @dart=2.9
         import "c.dart";
         b() {
           print("hello from b");
@@ -60,6 +65,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
index 8f72034..00a49d0 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
@@ -28,7 +28,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml b/pkg/front_end/testcases/incremental/issue_32366.yaml
index c049a7d..595813f 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml
@@ -8,6 +8,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class AIterator extends Iterator {
         }
         class Foo {
@@ -25,6 +26,7 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class BIterator extends Iterator {
         }
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
index e82a2d4..65cc6dc 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
@@ -3,29 +3,29 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:11: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:11: Error: Expected ';' after this.
 //   final a kjsdf ksjdf ;
 //           ^^^^^
 //
-// org-dartlang-test:///main.dart:4:11: Error: Final field 'kjsdf' is not initialized.
+// org-dartlang-test:///main.dart:5:11: Error: Final field 'kjsdf' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
 //   final a kjsdf ksjdf ;
 //           ^^^^^
 //
-// org-dartlang-test:///main.dart:4:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///main.dart:5:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 //   final a kjsdf ksjdf ;
 //                 ^^^^^
 //
-// org-dartlang-test:///main.dart:4:9: Error: 'a' isn't a type.
+// org-dartlang-test:///main.dart:5:9: Error: 'a' isn't a type.
 //   final a kjsdf ksjdf ;
 //         ^
 //
-// org-dartlang-test:///main.dart:4:9: Error: Type 'a' not found.
+// org-dartlang-test:///main.dart:5:9: Error: Type 'a' not found.
 //   final a kjsdf ksjdf ;
 //         ^
 //
-// org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.
+// org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.
 //   Foo(this.a);
 //            ^
 //
@@ -50,7 +50,7 @@
     final field invalid-type kjsdf = null;
     field dynamic ksjdf = null;
     constructor •(dynamic a) → main::Foo*
-      : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
+      : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml b/pkg/front_end/testcases/incremental/issue_41976.yaml
index d8e31e8..ed856be 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml
@@ -9,6 +9,7 @@
   - entry: foo.dart
     sources:
       foo.dart: |
+        // @dart=2.9
         abstract class Key {
           const factory Key(String value) = ValueKey;
           const Key.empty();
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 d9b1730..008ff7a 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
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory •(dart.core::String* value) → foo::Key*
-      let dynamic #redirecting_factory = foo::ValueKey::• in invalid-expression;
+      return new foo::ValueKey::•(value);
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/issue_42323.yaml b/pkg/front_end/testcases/incremental/issue_42323.yaml
index 747acd6..e731873 100644
--- a/pkg/front_end/testcases/incremental/issue_42323.yaml
+++ b/pkg/front_end/testcases/incremental/issue_42323.yaml
@@ -12,7 +12,6 @@
 nnbdMode: strong
 worlds:
   - entry: bin/runMe.dart
-    experiments: non-nullable
     enableStringReplacement: true
     sources:
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/issue_42323_prime.yaml b/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
index 97d90ab..ce29481 100644
--- a/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
+++ b/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
@@ -12,7 +12,6 @@
 nnbdMode: strong
 worlds:
   - entry: bin/runMe.dart
-    experiments: non-nullable
     errors: true
     sources:
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/issue_44523.yaml b/pkg/front_end/testcases/incremental/issue_44523.yaml
index 63f5ae4..d7d4906 100644
--- a/pkg/front_end/testcases/incremental/issue_44523.yaml
+++ b/pkg/front_end/testcases/incremental/issue_44523.yaml
@@ -21,6 +21,7 @@
           ]
         }
       app/main.dart: |
+        // @dart=2.9
         import "package:flutter/lib1.dart";
         class _Bar extends RestorableProperty {}
       flutter/lib1.dart: |
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml b/pkg/front_end/testcases/incremental/issue_46666.yaml
index 0ac3970..794df0d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml
@@ -7,7 +7,6 @@
 type: newworld
 worlds:
   - entry: b.dart
-    experiments: non-nullable
     sources:
       a.dart: |
         import 'dart:ffi';
@@ -45,7 +44,6 @@
     expectedLibraryCount: 2
 
   - entry: b.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
index 6b88d9a..c2c104f 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
@@ -17,12 +17,14 @@
     warnings: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
 
         main() {
           useString("hello");
         }
       b.dart: |
+        // @dart=2.9
         import "dart:core";
 
         void useString(String s) {
@@ -39,12 +41,14 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
 
         main() {
           useString("hello");
         }
       b.dart: |
+        // @dart=2.9
         import "dart:core";
 
         void useString(String s) {
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
index 81b1aa1..ac99df2 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
@@ -9,6 +9,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main_lib1.dart: |
+        // @dart=2.9
         class SuperClass {
           void method(covariant int i) {}
         }
@@ -19,12 +20,14 @@
 
         class Class extends SuperClass with Mixin {}
       main_lib2.dart: |
+        // @dart=2.9
         import 'main_lib1.dart';
 
         class SubClass extends Class {}
 
         method() => new SubClass().method(0);
       main.dart: |
+        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
@@ -39,6 +42,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
@@ -55,6 +59,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
index 51be325..3e68b28 100644
--- a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
@@ -12,6 +12,7 @@
   - a.dart
 sources:
   a.dart: |
+    // @dart=2.9
     import 'dart:collection';
 
     class Foo extends Object with ListMixin<int> {
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
index e760b10..c830e1c 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class A<T> {}
         mixin M<T> on A<T> {}
         class C extends Object with M {}
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
index 09119c7..3ff776a 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
@@ -3,14 +3,14 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
+// org-dartlang-test:///main.dart:4:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'org-dartlang-test:///main.dart'.
 //  - 'M' is from 'org-dartlang-test:///main.dart'.
 // class C extends Object with M {}
 //       ^
 //
-// org-dartlang-test:///main.dart:3:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
+// org-dartlang-test:///main.dart:4:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
 //  - 'A' is from 'org-dartlang-test:///main.dart'.
 // class C extends Object with M {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
index 0577118..6f4c9d8 100644
--- a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
+++ b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
@@ -12,14 +12,17 @@
       - b.dart
     sources:
       a.dart: |
+        // @dart=2.9
         a() {
           print("hello a");
         }
       b.dart: |
+        // @dart=2.9
         b() {
           print("hello b");
         }
       c.dart: |
+        // @dart=2.9
         b() {
           print("hello c (I'm not included!)");
         }
diff --git a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
index 5f3ac3c..5172413 100644
--- a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
@@ -10,6 +10,8 @@
 invalidate:
 sources:
   a.dart: |
+    // @dart=2.9
     export 'b.dart';
   b.dart: |
+    // @dart=2.9
     main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
index 563d16c..378608c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
@@ -10,11 +10,13 @@
     experiments: alternative-invalidation-strategy
     sources:
       actualMain.dart: |
+        // @dart=2.9
         import 'main.dart' as m;
         main() {
           m.main();
         }
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         main() {
@@ -22,6 +24,7 @@
         }
         mainHello() {}
       libA.dart: |
+        // @dart=2.9
         import 'main.dart';
         import 'libB.dart';
         class Foo {}
@@ -30,6 +33,7 @@
           mainHello();
         }
       libB.dart: |
+        // @dart=2.9
         import 'libA.dart';
         class Bar {
           Foo foo;
@@ -44,6 +48,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
index 10f6a6e..97dacaf 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -20,12 +21,14 @@
           lib3Method(foo);
         }
       lib1.dart: |
+        // @dart=2.9
         class Foo {
           void fooMethod() {
             // Not filled out.
           }
         }
       lib2.dart: |
+        // @dart=2.9
         import "lib1.dart";
         class Bar extends Foo {
           void barMethod() {
@@ -33,6 +36,7 @@
           }
         }
       lib3.dart: |
+       // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         void lib3Method(Foo foo) {
@@ -49,6 +53,7 @@
       - lib1.dart
     sources:
       lib1.dart: |
+        // @dart=2.9
         class Foo {
           void fooMethod() {
             print("fooMethod");
@@ -64,6 +69,7 @@
       - lib3.dart
     sources:
       lib3.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         void lib3Method(Foo foo) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
index e06e7d3..8d38adc 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
@@ -11,11 +11,13 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         main() {
           libMethod();
         }
       lib1.dart: |
+        // @dart=2.9
         import "lib2.dart";
         class Foo {
           factory Foo() = Bar;
@@ -25,6 +27,7 @@
           Bar bar = new Bar();
         }
       lib2.dart: |
+        // @dart=2.9
         import "lib1.dart";
         class Bar implements Foo {
           Bar();
@@ -38,6 +41,7 @@
       - lib1.dart
     sources:
       lib1.dart: |
+        // @dart=2.9
         import "lib2.dart";
         class Foo {
           factory Foo() = Bar;
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 5157f4f..02964ab 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
@@ -6,7 +6,7 @@
   class Foo extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
-      let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
+      return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
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 e289c2a..14d998a 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
@@ -6,7 +6,7 @@
   class Foo extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
-      let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
+      return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
index 24ee095..7249224 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
@@ -11,12 +11,14 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib2.dart" show Bar;
         import "lib1.dart" show Bar;
         main() {
           Bar bar = new Bar();
         }
       lib1.dart: |
+        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -24,6 +26,7 @@
           }
         }
       lib2.dart: |
+        // @dart=2.9
         class Bar {
           Bar() {
 
@@ -38,6 +41,7 @@
       - lib1.dart
     sources:
       lib1.dart: |
+        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -54,6 +58,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         class Bar {
           Bar() {
             print("Bar!");
@@ -69,6 +74,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib2.dart" show Bar;
         import "lib1.dart" show Bar;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
index 10b1083..bcdc011 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
@@ -12,14 +12,17 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart" as prefix;
         main() {
           print(prefix.Foo.BAR);
         }
       lib1.dart: |
+        // @dart=2.9
         export "lib2.dart" show Foo;
         import "main.dart";
       lib2.dart: |
+        // @dart=2.9
         class Foo {
           static const Foo BAR = const Foo("BAR");
           const Foo(String x);
@@ -33,6 +36,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart" as prefix;
         main() {
           print(prefix.Foo.BAR);
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
index a33699a..cbce88b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
@@ -11,16 +11,19 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         abstract class Foo implements Bar {
           @override
           Foo get x;
         }
       lib1.dart: |
+        // @dart=2.9
         import "lib2.dart";
         abstract class Bar implements Baz {
         }
       lib2.dart: |
+        // @dart=2.9
         abstract class Baz {
           Baz get x;
         }
@@ -33,6 +36,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         abstract class Baz {
           Baz get x;
         }
@@ -46,6 +50,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         abstract class Foo implements Bar {
           @override
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
index 1ec3e65..fb7b2f9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
@@ -11,12 +11,14 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         abstract class C extends B implements A<int> {}
         main() {
           print("#1");
         }
       lib1.dart: |
+        // @dart=2.9
         class A<T> {
           foo(T t) {
             print("foo T $t");
@@ -37,6 +39,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         abstract class C extends B implements A<int> {}
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
index 856ce6a..202a3e0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         class Foo1 extends Bar {
           noSuchMethod(Invocation msg) {
@@ -23,6 +24,7 @@
           }
         }
       lib1.dart: |
+        // @dart=2.9
         abstract class Bar {
           void method();
           bool get getter;
@@ -38,6 +40,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         class Foo1 extends Bar {
           noSuchMethod(Invocation msg) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
index c2fe2c1..1648959 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
@@ -11,12 +11,14 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart" deferred as foo;
         main() {
           var f = foo.loadLibrary;
           f();
         }
       lib.dart: |
+        // @dart=2.9
         foo() {
           print("foo!");
         }
@@ -29,6 +31,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart" deferred as foo;
         main() {
           var f = foo.loadLibrary;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
index dd099b7..ace7dba 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
@@ -12,16 +12,19 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports")
         }
       lib1.dart: |
+        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
+        // @dart=2.9
         x() {
           print("lib2.x!");
         }
@@ -35,6 +38,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
index bc3a9bc..92cbad1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
@@ -15,11 +15,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
 // export "lib2.dart" show x;
 // ^
 //
-// org-dartlang-test:///main.dart:4:18: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:18: Error: Expected ';' after this.
 //   print("exports")
 //                  ^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
index 2387ec3..458ee49 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
@@ -15,11 +15,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
 // export "lib2.dart" show x;
 // ^
 //
-// org-dartlang-test:///main.dart:4:19: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:19: Error: Expected ';' after this.
 //   print("exports!")
 //                   ^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
index f9251d2..8fd792f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {}
 
         extension A2 on A1 {
@@ -36,6 +37,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {}
 
         extension A2 on A1 {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
index 861576b..13340c8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
@@ -10,6 +10,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -28,6 +29,7 @@
 
         enum CompilationStrategy { direct, toKernel, toData, fromData }
       libA.dart: |
+        // @dart=2.9
         import 'main.dart';
         whatever(Foo foo) {
           print(foo);
@@ -41,6 +43,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
index f92ccb9..f94ccd0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {}
 
         extension on A1 {
@@ -34,6 +35,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {}
 
         extension on A1 {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
index 23a30cf..e6f6805 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
@@ -13,6 +13,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {
           A1.foo1(){}
           A1.foo1(){}
@@ -31,6 +32,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {
           A1.foo1(){}
           A1.foo1(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
index 9ba9d65..ae0225e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
@@ -3,24 +3,24 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
 //   A1.foo1(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
 //   A1.foo1(){}
 //   ^^^^^^^
 //
-// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
 // class A1 {
 //       ^^
-// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
 // class A1 {
 //       ^^
 //
-// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
 //   A1.foo2(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
 //   A1.foo2(){}
 //   ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
index 9ba9d65..ae0225e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
@@ -3,24 +3,24 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
 //   A1.foo1(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
 //   A1.foo1(){}
 //   ^^^^^^^
 //
-// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
 // class A1 {
 //       ^^
-// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
 // class A1 {
 //       ^^
 //
-// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
 //   A1.foo2(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
 //   A1.foo2(){}
 //   ^^^^^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
index 244a23c..ff2b2b8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'dart:collection' show ListMixin;
         class WithListMixin extends Object with ListMixin<int> {
           int length = 2;
@@ -26,6 +27,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'dart:collection' show ListMixin;
         class WithListMixin extends Object with ListMixin<int> {
           int length = 2;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
index d6a452a..e32d117 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
@@ -304,7 +304,7 @@
     operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}(other){(dart.core::Iterable<dart.core::int*>) → void};
+        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
       } =>#t5;
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
       dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
index d6a452a..e32d117 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
@@ -304,7 +304,7 @@
     operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}(other){(dart.core::Iterable<dart.core::int*>) → void};
+        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
       } =>#t5;
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
       dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
index 30b121e..17f8538 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class A extends Object with B {
           foo() {}
         }
@@ -26,6 +27,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class A extends Object with B {
           foo() {}
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
index a68ba95..3ddee3f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
@@ -13,6 +13,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         void foo() {}
         void foo() {}
     expectedLibraryCount: 1
@@ -25,6 +26,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         void foo() {}
         void foo() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
index c62e3af..69cda08 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
@@ -3,10 +3,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
 // void foo() {}
 //      ^^^
-// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
 // void foo() {}
 //      ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
index c62e3af..69cda08 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
@@ -3,10 +3,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
 // void foo() {}
 //      ^^^
-// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
 // void foo() {}
 //      ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
index e364005..8db1940 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
@@ -15,6 +15,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           void bar() {
             print("bar 1");
@@ -36,6 +37,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           void bar() {
             print("bar 1");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
index 7e300e4..3d25246 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
@@ -3,17 +3,17 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
-//   void bar() {
-//        ^^^
-// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
-//   void bar() {
-//        ^^^
-//
-// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
 //     bar();
 //     ^
 //
+// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
+//   void bar() {
+//        ^^^
+// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
+//   void bar() {
+//        ^^^
+//
 
   class Foo extends dart.core::Object {
     synthetic constructor •() → main::Foo*
@@ -23,7 +23,7 @@
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
+      invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
index 7e300e4..3d25246 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
@@ -3,17 +3,17 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
-//   void bar() {
-//        ^^^
-// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
-//   void bar() {
-//        ^^^
-//
-// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
 //     bar();
 //     ^
 //
+// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
+//   void bar() {
+//        ^^^
+// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
+//   void bar() {
+//        ^^^
+//
 
   class Foo extends dart.core::Object {
     synthetic constructor •() → main::Foo*
@@ -23,7 +23,7 @@
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
+      invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
index 6fe95fa..cbfff15 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
@@ -15,6 +15,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {
           A1.foo(){}
           A1.foo(){}
@@ -32,6 +33,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class A1 {
           A1.foo(){}
           A1.foo(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
index 22db75d..df38521 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
@@ -3,14 +3,14 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
 //   A1.foo(){}
 //   ^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
 //   A1.foo(){}
 //   ^^^^^^
 //
-// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
 //   new A1.foo();
 //       ^
 //
@@ -30,6 +30,6 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
+    invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
index 22db75d..df38521 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
@@ -3,14 +3,14 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
 //   A1.foo(){}
 //   ^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
 //   A1.foo(){}
 //   ^^^^^^
 //
-// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
 //   new A1.foo();
 //       ^
 //
@@ -30,6 +30,6 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
+    invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
index 933c328..ca31b68 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
@@ -12,11 +12,13 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           libMethod();
         }
       lib.dart: |
+        // @dart=2.9
         libMethod() {
           print("Hello from lib!");
         }
@@ -32,6 +34,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           libMethod();
@@ -48,6 +51,7 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         libMethod() {
           print("Hello from lib!!");
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
index 091f7c5..ead8930 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class A {
           a() {
             print("Class A method a");
@@ -52,6 +53,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class A {
           a() {
             print("Class A method a!");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
index 937e2cf..ba86755 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         late int? field1 = 42;
@@ -32,7 +32,7 @@
         }
     expectedLibraryCount: 1
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
index 278e445..7e1bfa9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
@@ -10,6 +10,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -23,6 +24,7 @@
           print(const Foo());
         }
       libA.dart: |
+        // @dart=2.9
         whatever() async {
           await null;
           return "hello";
@@ -36,6 +38,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_30.yaml b/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
index 8927356..93f336e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: false
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         late int? field1 = 42;
@@ -32,7 +32,7 @@
         }
     expectedLibraryCount: 1
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_31.yaml b/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
index 3405708..0d0e7ab 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         late int? field1 = 42;
@@ -29,7 +29,7 @@
         }
     expectedLibraryCount: 1
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_32.yaml b/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
index a863872..f4bbb81 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: false
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         late int? field1 = 42;
@@ -29,7 +29,7 @@
         }
     expectedLibraryCount: 1
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
index c8fa4c6..1f532f7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib2.dart" show getter, setter, method, Bar;
         import "lib1.dart" show getter, setter, method, Bar;
         main() {
@@ -20,6 +21,7 @@
           setter = 42;
         }
       lib1.dart: |
+        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -27,6 +29,7 @@
           }
         }
       lib2.dart: |
+        // @dart=2.9
         String get getter => "hello";
         void set setter(int i) {}
         void method() {}
@@ -44,6 +47,7 @@
       - lib1.dart
     sources:
       lib1.dart: |
+        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -60,6 +64,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         String get getter => "hello";
         void set setter(int i) {}
         void method() {}
@@ -78,6 +83,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib2.dart" show getter, setter, method, Bar;
         import "lib1.dart" show getter, setter, method, Bar;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
index 2f11a3e..7bca389 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         import "lib2.dart";
@@ -26,6 +27,7 @@
           lib1();
         }
       lib1.dart: |
+        // @dart=2.9
         export "main.dart";
         import "main.dart";
         import "main.dart" as m;
@@ -38,6 +40,7 @@
           a.method2();
         }
       lib2.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         extension Extension3 on Class {
@@ -57,6 +60,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         import "lib2.dart";
@@ -82,6 +86,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         extension Extension3 on Class {
@@ -103,6 +108,7 @@
       - lib1.dart
     sources:
       lib1.dart: |
+        // @dart=2.9
         export "main.dart";
         import "main.dart";
         import "main.dart" as m;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
index e422ff5..41c5896 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
@@ -12,6 +12,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -21,6 +22,7 @@
           print(coordinate.next);
         }
       lib.dart: |
+        // @dart=2.9
         import 'dart:ffi';
         class Coordinate extends Struct {
           @Double()
@@ -44,6 +46,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -63,6 +66,7 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         import 'dart:ffi';
         class Coordinate extends Struct {
           @Double()
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
index 9022597..3b6cb72 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
@@ -10,16 +10,19 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'file1.dart';
 
         class Class1 extends Class2 {}
       file1.dart: |
+        // @dart=2.9
         import 'file2.dart';
 
         class Class2 extends Class3 {
           Class3 foo;
         }
       file2.dart: |
+        // @dart=2.9
         abstract class Class3 {
           Class3 foo;
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
index a52319c..359626d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
@@ -10,13 +10,16 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'file2.dart';
         class A extends B implements C {}
       file1.dart: |
+        // @dart=2.9
         class D {
           D parent;
         }
       file2.dart: |
+        // @dart=2.9
         import 'file1.dart';
         abstract class C implements D {}
         class B extends D {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
index 90f929f..4c85485 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
@@ -10,12 +10,14 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class X {}
         int foo(X x) {
           return x is Y ? x.foo : null;
         }
       lib.dart: |
+        // @dart=2.9
         import 'main.dart';
         class Y implements X {
           int get foo => 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
index 0a99343..ebaefa2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
@@ -10,6 +10,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A {
           int a() {
@@ -20,6 +21,7 @@
           }
         }
       lib.dart: |
+        // @dart=2.9
         class B {
           int a() {
             return 42;
@@ -46,6 +48,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A {
           int b() {
@@ -66,6 +69,7 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         class C {
           int b() {
             return 1;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
index fbab308..5aaff13 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -19,6 +20,7 @@
           }
         }
       libA.dart: |
+        // @dart=2.9
         import 'main.dart';
 
         class Bar extends Object with Foo {
@@ -35,6 +37,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
index 3d630a8..6033b0e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
@@ -11,11 +11,13 @@
     experiments: alternative-invalidation-strategy
     sources:
       lib1.dart: |
+        // @dart=2.9
         import 'main.dart';
         extension Extension1 on A {
           baz() => 42;
         }
       lib2.dart: |
+        // @dart=2.9
         import 'main.dart';
         import 'lib1.dart';
         export 'main.dart';
@@ -25,6 +27,7 @@
           a.boz();
         }
       main.dart: |
+        // @dart=2.9
         import 'lib1.dart';
         import 'lib2.dart';
         class A {
@@ -45,6 +48,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'main.dart';
         import 'lib1.dart';
         export 'main.dart';
@@ -64,6 +68,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib1.dart';
         import 'lib2.dart';
         class A {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_41.yaml b/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
index 48225c0..2b10dac 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       lib1.dart: |
         late int field;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_42.yaml b/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
index cd88790..9f8d58e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
@@ -9,7 +9,7 @@
 forceLateLoweringForTesting: true
 worlds:
   - entry: main.dart
-    experiments: non-nullable,alternative-invalidation-strategy
+    experiments: alternative-invalidation-strategy
     sources:
       lib1.dart: |
         void set property(int value) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
index 8fb3d4f..a8ddc64 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
@@ -14,15 +14,18 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libExporter.dart';
         void foo() {
           int value = libField;
           libField = value+1;
         }
       libExporter.dart: |
+        // @dart=2.9
         export "lib.dart";
         String fromLibExporter = "hello";
       lib.dart: |
+        // @dart=2.9
         import "libExporter.dart";
         int libField = 42;
         void requireStuffFromLibExporter() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
index 394b66f..b92e29e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
@@ -21,6 +21,8 @@
     synthetic constructor •() → wid::_Location
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → wid::_Location
+      return new wid::_Location::•();
   }
 }
 library from "org-dartlang-test:///flutter_gallery/lib/main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
index 394b66f..b92e29e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
@@ -21,6 +21,8 @@
     synthetic constructor •() → wid::_Location
       : super dart.core::Object::•()
       ;
+    static method _#new#tearOff() → wid::_Location
+      return new wid::_Location::•();
   }
 }
 library from "org-dartlang-test:///flutter_gallery/lib/main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
index 7ce01e9f..d1aab0e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
@@ -12,6 +12,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           factory Foo.bar() {
             return null;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
index 8b31333..6569ace 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
@@ -12,6 +12,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           Foo();
           factory Foo.bar() = Baz;
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 47fdc2b..8cde08e 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
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory bar() → main::Foo*
-      let dynamic #redirecting_factory = main::Baz::• in invalid-expression;
+      return new main::Baz::•();
     method bar() → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
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 47fdc2b..8cde08e 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
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory bar() → main::Foo*
-      let dynamic #redirecting_factory = main::Baz::• in invalid-expression;
+      return new main::Baz::•();
     method bar() → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
index 6f8b85b..0a162fe 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
@@ -8,7 +8,7 @@
 target: VM
 worlds:
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         class Foo {
@@ -17,7 +17,7 @@
     expectedLibraryCount: 1
 
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_47.yaml b/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
index 03f5018..acf60e7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
@@ -7,7 +7,7 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         late final int x = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
index 03f9511a..1004210 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
@@ -8,7 +8,7 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         import "dart:ffi";
@@ -32,7 +32,7 @@
     expectedLibraryCount: 2
 
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
index 7f7cdad..d9cd713 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
@@ -9,7 +9,7 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         import "dart:ffi";
@@ -33,7 +33,7 @@
     expectedLibraryCount: 2
 
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     expectInitializeFromDill: true
     invalidate:
       - lib.dart
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
index d7d7a6a..b75e11c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         part 'myPart.dart';
 
         class Foo {
@@ -24,6 +25,7 @@
           print(const Foo());
         }
       myPart.dart: |
+        // @dart=2.9
         part of 'main.dart';
         whatever() async {
           await null;
@@ -38,6 +40,7 @@
       - myPart.dart
     sources:
       myPart.dart: |
+        // @dart=2.9
         part of 'main.dart';
         whatever() async {
           await null;
@@ -53,6 +56,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         part 'myPart.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
index 025fb00..53a1505 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
@@ -8,7 +8,7 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
         import "dart:ffi";
@@ -36,7 +36,7 @@
     expectedLibraryCount: 4
 
   - entry: main.dart
-    experiments: alternative-invalidation-strategy,non-nullable
+    experiments: alternative-invalidation-strategy
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
index 4e74fed..b6497de 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
@@ -11,6 +11,7 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -29,6 +30,7 @@
 
         enum CompilationStrategy { direct, toKernel, toData, fromData }
       libA.dart: |
+        // @dart=2.9
         import 'main.dart';
         whatever(Foo foo) {
           print(foo);
@@ -43,6 +45,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -70,6 +73,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index 46a055a..ec42b23 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -11,7 +11,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
 //   toString() { return '$message' } // missing ;
 //                                ^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index f17b4d8..4b4156c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -11,7 +11,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
 //   toString() { return '$message!!!' } // missing ; still
 //                                ^^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
index 3dd8187..91c67e4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
@@ -10,6 +10,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         const String useMeAsAnnotation = "hello";
@@ -43,6 +44,7 @@
         @useMeAsAnnotation
         enum CompilationStrategy { @useMeAsAnnotation direct, @useMeAsAnnotation toKernel, @useMeAsAnnotation toData, @useMeAsAnnotation fromData }
       libA.dart: |
+        // @dart=2.9
         import 'main.dart';
         @useMeAsAnnotation
         whatever(Foo foo) {
@@ -57,6 +59,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'libA.dart';
 
         const String useMeAsAnnotation = "hello";
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
index 5cbb862..fc35f07 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           String get x { return "x #1"; }
           void set x(String x) {}
@@ -30,6 +31,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         class Foo {
           String get x { return "x #2"; }
           void set x(String x) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
index 7310cd4..37edf3e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
@@ -11,6 +11,7 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
 
         main() {
@@ -18,12 +19,14 @@
           libPartMethod();
         }
       lib.dart: |
+        // @dart=2.9
         part "libpart.dart";
 
         libMethod() {
           print("libMethod");
         }
       libpart.dart: |
+        // @dart=2.9
         part of "lib.dart";
 
         libPartMethod() {
@@ -38,6 +41,7 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         part "libpart.dart";
 
         libMethod() {
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
index 8d884a3..ad799bd 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -20,6 +21,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("Hello world!");
         }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
index 071eacd..88e85bd 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -20,6 +21,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("Hello world!");
         }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
index 2a6583b..c0f25a0 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
@@ -12,6 +12,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -25,11 +26,13 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib());
         }
       lib.dart: |
+        // @dart=2.9
         lib() {
           return "hello";
         }
@@ -43,6 +46,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib() + "!");
@@ -57,6 +61,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib());
@@ -70,11 +75,13 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib() + "!!");
         }
       lib.dart: |
+        // @dart=2.9
         lib() {
           return "hello";
         }
diff --git a/pkg/front_end/testcases/incremental/outline_only.yaml b/pkg/front_end/testcases/incremental/outline_only.yaml
index 59a9e45..bb3d5af 100644
--- a/pkg/front_end/testcases/incremental/outline_only.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only.yaml
@@ -9,6 +9,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello");
           b();
diff --git a/pkg/front_end/testcases/incremental/outline_only_2.yaml b/pkg/front_end/testcases/incremental/outline_only_2.yaml
index 94b1a83..2ec0997 100644
--- a/pkg/front_end/testcases/incremental/outline_only_2.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only_2.yaml
@@ -10,6 +10,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         abstract class Foo {
           int get foo;
         }
diff --git a/pkg/front_end/testcases/incremental/part_as_entry.yaml b/pkg/front_end/testcases/incremental/part_as_entry.yaml
index aba97dff..266e687 100644
--- a/pkg/front_end/testcases/incremental/part_as_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_entry.yaml
@@ -8,9 +8,11 @@
     checkEntries: false
     sources:
       main.dart: |
+        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
+        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
index e599398..9aed0c2 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
@@ -10,9 +10,11 @@
       .packages: |
         foo:.
       main.dart: |
+        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
+        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
index 3d91b09..ce316cc 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
@@ -11,9 +11,11 @@
       .packages: |
         foo:.
       main.dart: |
+        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
+        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
index 4343977..83a3567 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
@@ -8,9 +8,11 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
index eacf043..9110606 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
@@ -10,9 +10,11 @@
       .packages: |
         foo:.
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
index a5edd21..0a6eab0 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
@@ -9,9 +9,11 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
index e9c5703..e0d7502 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
@@ -8,9 +8,11 @@
     errors: true
     sources:
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
@@ -20,9 +22,11 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
@@ -32,8 +36,10 @@
       - lib.dart
     sources:
       main.dart: |
+        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
+        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml b/pkg/front_end/testcases/incremental/regress_35215.yaml
index b906cba..05e0f1a 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml
@@ -11,11 +11,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           b(42);
         }
       b.dart: |
+        // @dart=2.9
         b({int named}) {
           print("b");
         }
@@ -27,11 +29,13 @@
       - b.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           b(42);
         }
       b.dart: |
+        // @dart=2.9
         // lots of comments
         // forcing offsets down
         // and also adding more lines
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
index a4a6372..8e1d7f3 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
@@ -9,11 +9,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   b(42);
 //    ^
-// org-dartlang-test:///b.dart:1:1: Context: Found this candidate, but the arguments don't match.
+// org-dartlang-test:///b.dart:2:1: Context: Found this candidate, but the arguments don't match.
 // b({int named}) {
 // ^
 //
@@ -21,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
index 355f0aa..21bd097 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
@@ -9,11 +9,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   b(42);
 //    ^
-// org-dartlang-test:///b.dart:5:1: Context: Found this candidate, but the arguments don't match.
+// org-dartlang-test:///b.dart:6:1: Context: Found this candidate, but the arguments don't match.
 // b({int named}) {
 // ^
 //
@@ -21,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml b/pkg/front_end/testcases/incremental/regress_46004.yaml
index 115477f..da390ae3 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml
@@ -5,7 +5,6 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     sources:
       main.dart: |
         import 'dart:ffi';
@@ -26,7 +25,6 @@
     expectedLibraryCount: 2
 
   - entry: main.dart
-    experiments: non-nullable
     worldType: updated
     expectInitializeFromDill: false
     invalidate:
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
index fb57969..0ab8b96 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
@@ -11,8 +11,10 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
       b.dart: |
+        // @dart=2.9
         asdf
     expectedLibraryCount: 2
     errors: true
@@ -24,8 +26,10 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
       b.dart: |
+        // @dart=2.9
         asdf
     expectedLibraryCount: 2
     errors: true
@@ -42,6 +46,7 @@
       - b.dart
     sources:
       b.dart: |
+        // @dart=2.9
         asdf;
     expectedLibraryCount: 2
   - entry: main.dart
@@ -51,5 +56,6 @@
       - b.dart
     sources:
       b.dart: |
+        // @dart=2.9
         asdf() {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
index a44b5dc..1771593 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf;
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
index 3a869c5..7230d12 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
@@ -14,11 +14,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
+        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -34,6 +36,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         import 'lib3.dart';
@@ -42,9 +45,11 @@
           print(fooField2);
         }
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(0);
     expectInitializeFromDill: false
@@ -56,6 +61,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
     expectInitializeFromDill: false
@@ -68,9 +74,11 @@
       - lib3.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(1);
     expectInitializeFromDill: false
@@ -83,9 +91,11 @@
       - lib3.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
       lib3.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(1);
     expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
index b7a31e0..dfaa047 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
@@ -24,13 +24,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
@@ -43,13 +43,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
 // const fooField2 = const Foo(0);
 //                         ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
 // const fooField2 = const Foo(0);
 //       ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
index 63b9159..cde8746 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
@@ -30,13 +30,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
 // const fooField2 = const Foo(0);
 //                         ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
 // const fooField2 = const Foo(0);
 //       ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
index a127102..d0d6582 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
@@ -24,13 +24,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
index 76e71de..e481eaa 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
@@ -12,11 +12,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
+        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -32,6 +34,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
@@ -39,6 +42,7 @@
           bar();
         }
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class Bar {
           final Foo x;
@@ -54,6 +58,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class Bar {
           final Foo x;
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
index e13f758..3cac950 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
@@ -24,10 +24,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:4:27: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:5:27: Error: Constant evaluation error:
 //   const Bar() : x = const Foo(0);
 //                           ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
index 91ce7a3..b3e673f 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
@@ -11,10 +11,12 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
 
         class A extends B {}
       b.dart: |
+        // @dart=2.9
         import "nonexisting.dart";
 
         class B extends A {}
@@ -28,10 +30,12 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
 
         class A extends B {}
       b.dart: |
+        // @dart=2.9
         import "nonexisting.dart";
 
         class B extends A {}
@@ -50,6 +54,7 @@
       - b.dart
     sources:
       b.dart: |
+        // @dart=2.9
         import "main.dart";
 
         class B extends A {}
@@ -61,5 +66,6 @@
       - b.dart
     sources:
       b.dart: |
+        // @dart=2.9
         class B extends Object {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -40,7 +40,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -40,7 +40,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -40,7 +40,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -40,7 +40,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
index 149ccb1..0b8a54d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:3:7: Error: 'B' is a supertype of itself.
+// org-dartlang-test:///b.dart:4:7: Error: 'B' is a supertype of itself.
 // class B extends A {}
 //       ^
 //
@@ -30,7 +30,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:7: Error: 'A' is a supertype of itself.
+// org-dartlang-test:///main.dart:4:7: Error: 'A' is a supertype of itself.
 // class A extends B {}
 //       ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
index 1c74c07..b93e15d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
@@ -12,13 +12,16 @@
     sources:
       .packages: mypackage:mypackage
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -33,13 +36,16 @@
     sources:
       .packages: mypackage:mypackage
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -58,6 +64,7 @@
       - mypackage/b.dart
     sources:
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
index 8342cbd..47f9788 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
@@ -12,16 +12,20 @@
     sources:
       .packages: mypackage:mypackage
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
+        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -36,16 +40,20 @@
     sources:
       .packages: mypackage:mypackage
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
+        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -64,9 +72,11 @@
       - mypackage/c.dart
     sources:
       mypackage/b.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
+        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
index 65f2282..36e8361 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
@@ -12,18 +12,21 @@
     sources:
       .packages: mypackage:mypackage
       main.dart: |
+        // @dart=2.9
         import "package:mypackage/a.dart" as a;
 
         main() {
           a.main();
         }
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         main() {
           foo();
         }
       mypackage/b.dart: |
+        // @dart=2.9
         foo() {
           bar();
         }
@@ -41,6 +44,7 @@
       - package:mypackage/a.dart
     sources:
       mypackage/a.dart: |
+        // @dart=2.9
         import "package:mypackage/b.dart";
 
         main() {
@@ -56,6 +60,7 @@
       - package:mypackage/a.dart
     sources:
       mypackage/a.dart: |
+        // @dart=2.9
         main() {
           foo();
           foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
index 8c28bf9..4aad801 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
@@ -19,12 +19,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
index 8c28bf9..4aad801 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
@@ -19,12 +19,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
index 3cd7e09..38fff53 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
@@ -20,12 +20,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
index 309b436..65569db 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
@@ -11,9 +11,11 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class Foo<X extends Bar> {}
       lib.dart: |
+        // @dart=2.9
         // The error is here: Foo is unknown
         // (although it might give some other error instead)
         class Bar<X extends Foo<Null>> {}
@@ -26,6 +28,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class Foo {}
     expectInitializeFromDill: false
@@ -38,9 +41,11 @@
       - lib.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class Foo<X extends Bar> {}
       lib.dart: |
+        // @dart=2.9
         import 'main.dart';
         class Bar<X extends Foo<Null>> {}
     expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
index 3d2f012..4fb5295 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:3:21: Error: Expected 0 type arguments.
+// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
 // class Bar<X extends Foo<Null>> {}
 //                     ^
 //
-// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
 // class Bar<X extends Foo<Null>> {}
 //                     ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
index 4033273..5a65282 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:3:21: Error: Expected 0 type arguments.
+// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
 // class Bar<X extends Foo<Null>> {}
 //                     ^
 //
-// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
 // class Bar<X extends Foo<Null>> {}
 //                     ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
index 20ae3a1..c316a64 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
@@ -11,11 +11,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
+        // @dart=2.9
         import 'nonexisting.dart';
         foo() {}
     expectedLibraryCount: 2
@@ -27,6 +29,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
@@ -41,6 +44,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
@@ -48,6 +52,7 @@
           bar();
         }
       lib2.dart: |
+        // @dart=2.9
         bar() {
           print("hello");
         }
@@ -60,6 +65,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         bar() {
           print("hello2");
         }
@@ -73,6 +79,7 @@
       - lib.dart
     sources:
       lib.dart: |
+        // @dart=2.9
         foo() {}
     expectInitializeFromDill: false
     expectedLibraryCount: 3
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
index 2e97886..4639701 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
@@ -17,7 +17,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
index 65648e6..912f55c 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
@@ -18,7 +18,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
index 061945a..4066f1b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
@@ -25,7 +25,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
index 48606d6..c9821f8 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
@@ -25,7 +25,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
index 3eb0124..0835d55 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
@@ -12,11 +12,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
+        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -32,12 +34,14 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
           foo();
         }
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         bar() {
           const Foo(0);
@@ -51,6 +55,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
index 72d51f4..15f54b2 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
@@ -24,10 +24,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:3:9: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:4:9: Error: Constant evaluation error:
 //   const Foo(0);
 //         ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
index 308cc60..ca1a5f1 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
@@ -13,11 +13,13 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
+        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -33,6 +35,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         import 'lib3.dart';
@@ -41,9 +44,11 @@
           print(fooField2);
         }
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
+        // @dart=2.9
         import 'lib2.dart';
         const fooField2 = fooField;
     expectInitializeFromDill: false
@@ -55,6 +60,7 @@
       - lib2.dart
     sources:
       lib2.dart: |
+        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
     expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
index 0fd2abb..1ba9798 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
@@ -24,13 +24,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
@@ -43,13 +43,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:2:19: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:19: Error: Constant evaluation error:
 // const fooField2 = fooField;
 //                   ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
 // const fooField2 = fooField;
 //       ^
 //
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
index 5965f18..2451af9 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
@@ -13,6 +13,7 @@
     warnings: false
     sources:
       main.dart: |
+        // @dart=2.9
         library mainLibrary;
         import "b.dart" as b;
 
@@ -20,6 +21,7 @@
           b.foo();
         }
       b.dart: |
+        // @dart=2.9
         library bLibrary;
 
         foo() {
@@ -43,12 +45,14 @@
     warnings: false
     sources:
       main.dart: |
+        // @dart=2.9
         library mainLibrary;
 
         main() {
           print("hello");
         }
       b.dart: |
+        // @dart=2.9
         library bLibrary;
 
         foo() {
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
index 4f98801..542be09 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///b.dart:14:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
+// org-dartlang-test:///b.dart:15:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
 //  - 'I' is from 'org-dartlang-test:///b.dart'.
 // class C extends A implements B {}
 //       ^
diff --git a/pkg/front_end/testcases/incremental/remove_language_version.yaml b/pkg/front_end/testcases/incremental/remove_language_version.yaml
index fc000e4..dcd410c 100644
--- a/pkg/front_end/testcases/incremental/remove_language_version.yaml
+++ b/pkg/front_end/testcases/incremental/remove_language_version.yaml
@@ -10,7 +10,6 @@
 type: newworld
 worlds:
   - entry: main.dart
-    experiments: non-nullable
     errors: true
     warnings: false
     sources:
@@ -21,7 +20,6 @@
         }
     expectedLibraryCount: 1
   - entry: main.dart
-    experiments: non-nullable
     invalidate:
       - main.dart
     errors: false
diff --git a/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect b/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
index 033ad48..32f26ec 100644
--- a/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
@@ -4,7 +4,7 @@
 // Problems in library:
 //
 // org-dartlang-test:///main.dart:3:6: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 //   int? i;
 //      ^
 // org-dartlang-test:///main.dart:1:1: Context: This is the annotation that opts out this library from null safety features.
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
index f644133..ee75714 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
@@ -12,8 +12,10 @@
   - a.dart
 sources:
   a.dart: |
+    // @dart=2.9
     import 'b.dart';
     class A extends Object with B<Object>, C {}
   b.dart: |
+    // @dart=2.9
     abstract class C<T extends Object> extends Object with B<T> {}
     abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
index 9238c66..19f8ea2 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
@@ -10,9 +10,11 @@
   - a.dart
 sources:
   a.dart: |
+    // @dart=2.9
     import 'b.dart';
     class A extends Object with B<C>, D {}
   b.dart: |
+    // @dart=2.9
     mixin B<ChildType extends Object> {
       ChildType get child => null;
       set child(ChildType value) {}
diff --git a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
index 40aae93..c41e41a 100644
--- a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
+++ b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
@@ -25,6 +25,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import 'lib.dart';
         class A extends B with C, D {
             A(E parameter) : super.named(parameter);
@@ -32,6 +33,7 @@
         mixin C { }
         mixin D { }
       lib.dart: |
+        // @dart=2.9
         class E {}
         abstract class B {
           final E _field;
diff --git a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
index ca9f7f1..44cbeeb 100644
--- a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
@@ -10,9 +10,11 @@
     errors: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         typedef G<T> = Function(F<T>);
       lib.dart: |
+        // @dart=2.9
         typedef F<T> = Function();
     expectedLibraryCount: 2
   - entry: main.dart
@@ -22,6 +24,7 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "lib.dart";
         typedef G<T> = Function(F<T>);
         main() {
diff --git a/pkg/front_end/testcases/incremental/unused_file.yaml b/pkg/front_end/testcases/incremental/unused_file.yaml
index 1282d0d..c2569c1 100644
--- a/pkg/front_end/testcases/incremental/unused_file.yaml
+++ b/pkg/front_end/testcases/incremental/unused_file.yaml
@@ -12,12 +12,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
           b();
         }
       b.dart: |
+        // @dart=2.9
         b() {
           print("b");
         }
@@ -27,10 +29,12 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         main() {
           print("hello");
         }
       b.dart: |
+        // @dart=2.9
         b() {
           print("b");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_1.yaml b/pkg/front_end/testcases/incremental/updated_package_1.yaml
index 0a24fa7..6950f98 100644
--- a/pkg/front_end/testcases/incremental/updated_package_1.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_1.yaml
@@ -12,12 +12,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -25,6 +27,7 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -39,12 +42,14 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -52,11 +57,13 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
         }
       package_0.1.1/b.dart: |
+        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_2.yaml b/pkg/front_end/testcases/incremental/updated_package_2.yaml
index ad7756f..34110ba 100644
--- a/pkg/front_end/testcases/incremental/updated_package_2.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_2.yaml
@@ -12,12 +12,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -25,6 +27,7 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -38,12 +41,14 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -51,11 +56,13 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
         }
       package_0.1.1/b.dart: |
+        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_3.yaml b/pkg/front_end/testcases/incremental/updated_package_3.yaml
index ed1f6ab..faf431e 100644
--- a/pkg/front_end/testcases/incremental/updated_package_3.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_3.yaml
@@ -12,12 +12,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -25,6 +27,7 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -39,6 +42,7 @@
       - .packages
     sources:
       package_0.1.1/b.dart: |
+        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml b/pkg/front_end/testcases/incremental/updated_package_4.yaml
index 5cb7d9c..4d2fd14 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml
@@ -11,12 +11,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package/b.dart: |
+        // @dart=2.9
         b() {
           print("hello from package");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
index 8607a05..3dd8e8b 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -12,14 +12,14 @@
 
   static method main() → dynamic {
     dart.core::print("hello");
-    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
 library from "package:example/b.dart" as b {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:example/b.dart'
+// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:example/b.dart'
 // import "package:example/b.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/updated_package_uri.yaml b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
index f716e96..f8e7ad9 100644
--- a/pkg/front_end/testcases/incremental/updated_package_uri.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
@@ -11,12 +11,14 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
+        // @dart=2.9
         a() {
           la1();
         }
@@ -24,6 +26,7 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
+        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -35,6 +38,7 @@
     expectInitializeFromDill: false
     sources:
       package_0.1.1/b.dart: |
+        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
index 22c9d3b..eabf11d 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
@@ -9,6 +9,7 @@
   - entry: set-Uint8List.dart
     sources:
       set-Uint8List.dart: |
+        // @dart=2.9
         import 'dart:typed_data';
         void setUint8List(Uint8List list, int index, int value) {
           list[index] = value;
@@ -22,6 +23,7 @@
       - set-Int8List.dart
     sources:
       set-Int8List.dart: |
+        // @dart=2.9
         import 'dart:typed_data';
         void setInt8List(Int8List list, int index, int value) {
           list[index] = value;
@@ -35,6 +37,7 @@
       - set-Uint8List.dart
     sources:
       set-Uint8List.dart: |
+        // @dart=2.9
         import 'dart:typed_data';
         void setUint8List(Uint8List list, int index, int value) {
           list[index] = value;
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
index 9f3b66a..0d6af65 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
@@ -11,8 +11,10 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
       b.dart: |
+        // @dart=2.9
         import "nonexisting.dart";
     expectedLibraryCount: 2
     expectedSyntheticLibraryCount: 1
@@ -22,8 +24,10 @@
       - main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "b.dart";
       b.dart: |
+        // @dart=2.9
         import "nonexisting.dart";
     expectedLibraryCount: 2
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
index 3e591c7..a861bfe 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
index 3e591c7..a861bfe 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
index 50f16a6..bb4a675 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "dart:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
index 6d8eb3f..48439c7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         part "dart:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
index 34996e7..95c6981 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
 // part "dart:foo/nonexisting.dart";
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
index 1af29a8..5822b85 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
@@ -12,6 +12,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         part "package:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
index 76e7779..8b98f2c 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
 // part "package:foo/nonexisting.dart";
 //      ^
 //
@@ -14,7 +14,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:6: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:2:6: Error: Not found: 'package:foo/nonexisting.dart'
 // part "package:foo/nonexisting.dart";
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
index 9aa7ede..7be194b 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
@@ -11,6 +11,7 @@
   - entry: main.dart
     sources:
       main.dart: |
+        // @dart=2.9
         import "package:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
index 2ba0d73..48013d7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
@@ -8,7 +8,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:foo/nonexisting.dart'
 // import "package:foo/nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
index 0c14788..e90018d 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
@@ -14,7 +14,7 @@
     return null;
   () →* core::String* g = f;
   g = () → core::String* {
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
                                             ^" in 1 as{TypeError} core::String*;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
index 0c14788..e90018d 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
     return null;
   () →* core::String* g = f;
   g = () → core::String* {
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
                                             ^" in 1 as{TypeError} core::String*;
   };
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
index d5508f0..fb5b0b4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
@@ -34,7 +34,7 @@
     #t1.{self::C::t} = 1.0;
   } =>#t1;
   self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                       ^" in "hello" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
index d5508f0..fb5b0b4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
     #t1.{self::C::t} = 1.0;
   } =>#t1;
   self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                       ^" in "hello" as{TypeError} core::int*;
 }
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 d10efba..e347a7d 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   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
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 024beff..1056c97 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   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
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 39e8848..e347a7d 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let Never #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   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
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 ac3f37a..2f9257b 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   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
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 9f89adf..6eaaeb2 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   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
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 9bae319..2f9257b 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
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let <T extends core::Object* = dynamic>(T*) →* self::CImpl<T*>* #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   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
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
index e66f399..4e6dac5 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
@@ -8,7 +8,7 @@
 class A<T> {}
 
 test() {
-  var /*@type=dynamic*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+  var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
index eb01065..63ca562 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
@@ -2,10 +2,10 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:72: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
-//   var /*@type=dynamic*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
-//                                                                        ^
+//   var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+//                                                                             ^
 // pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:8:7: Context: The class 'A' has a constructor that takes no arguments.
 // class A<T> {}
 //       ^
@@ -29,9 +29,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  dynamic a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:72: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
-  var /*@type=dynamic*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
-                                                                       ^";
+  var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+                                                                            ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
index eb01065..63ca562 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
@@ -2,10 +2,10 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:72: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
-//   var /*@type=dynamic*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
-//                                                                        ^
+//   var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+//                                                                             ^
 // pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:8:7: Context: The class 'A' has a constructor that takes no arguments.
 // class A<T> {}
 //       ^
@@ -29,9 +29,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  dynamic a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:72: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
-  var /*@type=dynamic*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
-                                                                       ^";
+  var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+                                                                            ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
index 4fceb25..c16d9c4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method test() → void {
   core::List<core::int*>* l;
-  l = <core::int*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
                                                                        ^" in "hello" as{TypeError} core::int*];
   l = l = <core::int*>[1];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
index 4eebe69..4f1b279 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test() → void {
   core::List<core::int*>* l;
-  l = core::_GrowableList::_literal1<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
                                                                        ^" in "hello" as{TypeError} core::int*);
   l = l = core::_GrowableList::_literal1<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
index dd43a5b..3550c19 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
@@ -118,42 +118,42 @@
 static method test() → void {
   new self::F0::•(<core::int*>[]);
   new self::F0::•(<core::int*>[3]);
-  new self::F0::•(<core::int*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•(<core::int*>[let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F1::•(a: <core::int*>[]);
   new self::F1::•(a: <core::int*>[3]);
-  new self::F1::•(a: <core::int*>[let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•(a: <core::int*>[let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F2::•(<core::int*>[]);
   new self::F2::•(<core::int*>[3]);
-  new self::F2::•(<core::int*>[let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•(<core::int*>[let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F3::•(<core::Iterable<core::int*>*>[]);
   new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
   new self::F4::•(a: <core::Iterable<core::int*>*>[]);
   new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
index 3b3617b..e7bd5e3 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
@@ -118,42 +118,42 @@
 static method test() → void {
   new self::F0::•(core::_GrowableList::•<core::int*>(0));
   new self::F0::•(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F0::•(core::_GrowableList::_literal1<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*));
-  new self::F0::•(core::_GrowableList::_literal2<core::int*>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F1::•(a: core::_GrowableList::•<core::int*>(0));
   new self::F1::•(a: core::_GrowableList::_literal1<core::int*>(3));
-  new self::F1::•(a: core::_GrowableList::_literal1<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in "hello" as{TypeError} core::int*));
-  new self::F1::•(a: core::_GrowableList::_literal2<core::int*>(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F2::•(core::_GrowableList::•<core::int*>(0));
   new self::F2::•(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F2::•(core::_GrowableList::_literal1<core::int*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*));
-  new self::F2::•(core::_GrowableList::_literal2<core::int*>(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F3::•(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  new self::F3::•(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
   new self::F4::•(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  new self::F4::•(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
index ecefbb2..5fd719d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
@@ -53,42 +53,42 @@
 static method test() → void {
   self::f0(<core::int*>[]);
   self::f0(<core::int*>[3]);
-  self::f0(<core::int*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in "hello" as{TypeError} core::int*]);
-  self::f0(<core::int*>[let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                       ^" in "hello" as{TypeError} core::int*, 3]);
   self::f1(a: <core::int*>[]);
   self::f1(a: <core::int*>[3]);
-  self::f1(a: <core::int*>[let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                          ^" in "hello" as{TypeError} core::int*]);
-  self::f1(a: <core::int*>[let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   self::f2(<core::int*>[]);
   self::f2(<core::int*>[3]);
-  self::f2(<core::int*>[let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in "hello" as{TypeError} core::int*]);
-  self::f2(<core::int*>[let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                       ^" in "hello" as{TypeError} core::int*, 3]);
   self::f3(<core::Iterable<core::int*>*>[]);
   self::f3(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
   self::f4(a: <core::Iterable<core::int*>*>[]);
   self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
index 2c0dec1..8b9a883 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
@@ -53,42 +53,42 @@
 static method test() → void {
   self::f0(core::_GrowableList::•<core::int*>(0));
   self::f0(core::_GrowableList::_literal1<core::int*>(3));
-  self::f0(core::_GrowableList::_literal1<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in "hello" as{TypeError} core::int*));
-  self::f0(core::_GrowableList::_literal2<core::int*>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                       ^" in "hello" as{TypeError} core::int*, 3));
   self::f1(a: core::_GrowableList::•<core::int*>(0));
   self::f1(a: core::_GrowableList::_literal1<core::int*>(3));
-  self::f1(a: core::_GrowableList::_literal1<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f1(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                          ^" in "hello" as{TypeError} core::int*));
-  self::f1(a: core::_GrowableList::_literal2<core::int*>(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f1(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   self::f2(core::_GrowableList::•<core::int*>(0));
   self::f2(core::_GrowableList::_literal1<core::int*>(3));
-  self::f2(core::_GrowableList::_literal1<core::int*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f2(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in "hello" as{TypeError} core::int*));
-  self::f2(core::_GrowableList::_literal2<core::int*>(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f2(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                       ^" in "hello" as{TypeError} core::int*, 3));
   self::f3(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   self::f3(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  self::f3(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f3(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
   self::f4(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  self::f4(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f4(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
index 750de9c..f4f3e7f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
@@ -56,14 +56,14 @@
   {
     (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
                                                                     ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
                                                                                ^" in 3 as{TypeError} core::String*;
     (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
@@ -71,16 +71,16 @@
   {
     (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             3;
             ^" in 3 as{TypeError} core::String*;
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
-      return let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
     (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in x as{TypeError} core::String*;
     };
@@ -88,15 +88,15 @@
   {
     (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    (core::int*) →* core::List<core::String*>* l2 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
  - 'List' is from 'dart:core'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
                                                                            ^" in ((core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} (core::int*) →* core::List<core::String*>*;
-    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => <core::String*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                          ^" in 3 as{TypeError} core::String*];
     (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
-      return <core::String*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in 3 as{TypeError} core::String*];
     };
@@ -104,13 +104,13 @@
   {
     (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
     (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             x;
             ^" in x as{TypeError} core::String*;
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
+             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
index 6529a86..35a455f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
@@ -56,14 +56,14 @@
   {
     (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
                                                                     ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
                                                                                ^" in 3 as{TypeError} core::String*;
     (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
@@ -71,16 +71,16 @@
   {
     (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             3;
             ^" in 3 as{TypeError} core::String*;
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
-      return let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
     (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in x as{TypeError} core::String*;
     };
@@ -88,15 +88,15 @@
   {
     (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
     (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello");
-    (core::int*) →* core::List<core::String*>* l2 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
  - 'List' is from 'dart:core'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
                                                                            ^" in ((core::String* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello")) as{TypeError} (core::int*) →* core::List<core::String*>*;
-    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                          ^" in 3 as{TypeError} core::String*);
     (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
-      return core::_GrowableList::_literal1<core::String*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in 3 as{TypeError} core::String*);
     };
@@ -104,13 +104,13 @@
   {
     (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
     (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             x;
             ^" in x as{TypeError} core::String*;
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^";
+             ^^^^^^^^^" in x{<unresolved>}.substring(3);
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
index 57ffcde..6d35ee8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
@@ -118,42 +118,42 @@
 static method test() → void {
   new self::F0::•<core::int*>(<core::int*>[]);
   new self::F0::•<core::int*>(<core::int*>[3]);
-  new self::F0::•<core::int*>(<core::int*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•<core::int*>(<core::int*>[let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F1::•<core::int*>(a: <core::int*>[]);
   new self::F1::•<core::int*>(a: <core::int*>[3]);
-  new self::F1::•<core::int*>(a: <core::int*>[let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•<core::int*>(a: <core::int*>[let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F2::•<core::int*>(<core::int*>[]);
   new self::F2::•<core::int*>(<core::int*>[3]);
-  new self::F2::•<core::int*>(<core::int*>[let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•<core::int*>(<core::int*>[let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3]);
   new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[]);
   new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
   new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[]);
   new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
   new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
index 0546231..49e4a19 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
@@ -118,42 +118,42 @@
 static method test() → void {
   new self::F0::•<core::int*>(core::_GrowableList::•<core::int*>(0));
   new self::F0::•<core::int*>(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F0::•<core::int*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*));
-  new self::F0::•<core::int*>(core::_GrowableList::_literal2<core::int*>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F1::•<core::int*>(a: core::_GrowableList::•<core::int*>(0));
   new self::F1::•<core::int*>(a: core::_GrowableList::_literal1<core::int*>(3));
-  new self::F1::•<core::int*>(a: core::_GrowableList::_literal1<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•<core::int*>(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in "hello" as{TypeError} core::int*));
-  new self::F1::•<core::int*>(a: core::_GrowableList::_literal2<core::int*>(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F1::•<core::int*>(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F2::•<core::int*>(core::_GrowableList::•<core::int*>(0));
   new self::F2::•<core::int*>(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F2::•<core::int*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•<core::int*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                        ^" in "hello" as{TypeError} core::int*));
-  new self::F2::•<core::int*>(core::_GrowableList::_literal2<core::int*>(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F2::•<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in "hello" as{TypeError} core::int*, 3));
   new self::F3::•<core::int*>(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  new self::F3::•<core::int*>(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F3::•<core::int*>(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
   new self::F4::•<core::int*>(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
   new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                      ^" in "hello" as{TypeError} core::int*)));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F4::•<core::int*>(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                      ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
   new self::F3::•<dynamic>(core::_GrowableList::•<core::Iterable<dynamic>*>(0));
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
index efa8da0..9dc00c4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
@@ -58,14 +58,14 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
                                                                    ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
                                                                               ^" in 3 as{TypeError} core::String*;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
@@ -76,16 +76,16 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         3;
         ^" in 3 as{TypeError} core::String*;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in x as{TypeError} core::String*;
     };
@@ -96,15 +96,15 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    v = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
  - 'List' is from 'dart:core'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
                                                                           ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in 3 as{TypeError} core::String*];
     v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
-      return <core::String*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in 3 as{TypeError} core::String*];
     };
@@ -120,13 +120,13 @@
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
-    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         x;
         ^" in x as{TypeError} core::String*;
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
+         ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
index a4b85cb..b14ba4c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
@@ -58,14 +58,14 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
                                                                    ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
                                                                               ^" in 3 as{TypeError} core::String*;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
@@ -76,16 +76,16 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         3;
         ^" in 3 as{TypeError} core::String*;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in 3 as{TypeError} core::String*;
     };
     v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in x as{TypeError} core::String*;
     };
@@ -96,15 +96,15 @@
     <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
     v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
     v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello");
-    v = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
  - 'List' is from 'dart:core'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
                                                                           ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello")) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in 3 as{TypeError} core::String*);
     v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
-      return core::_GrowableList::_literal1<core::String*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in 3 as{TypeError} core::String*);
     };
@@ -120,13 +120,13 @@
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
-    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         x;
         ^" in x as{TypeError} core::String*;
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^";
+         ^^^^^^^^^" in x{<unresolved>}.substring(3);
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
index 7e912c8..f92f047 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
@@ -184,26 +184,26 @@
     self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
     self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
     self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
                                                  ^" in new self::A::•<core::int*, dynamic>(3, "hello");
-    self::A<core::int*, core::String*>* a5 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
                                                  ^" in new self::A::named<dynamic, dynamic>(3, "hello");
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
   }
@@ -212,26 +212,26 @@
     self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
     self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
     self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a4 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
                                               ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
                                               ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
@@ -240,22 +240,22 @@
     self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
     self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
     self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a4 = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
                                                       ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
-    self::A<core::int*, core::int*>* a5 = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
                                                       ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(let final Never* #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(let final Never* #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
@@ -264,22 +264,22 @@
     self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
     self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
     self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a4 = let final Never* #t17 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
                                               ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = let final Never* #t18 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
                                               ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(let final Never* #t19 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(let final Never* #t20 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
   }
@@ -288,19 +288,19 @@
   }
   {
     self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[3], b: <core::String*>["hello"]);
-    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[let final Never* #t21 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in "hello" as{TypeError} core::int*], b: <core::String*>[let final Never* #t22 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in "hello" as{TypeError} core::int*], b: <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in 3 as{TypeError} core::String*]);
     self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
     self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", let final Never* #t23 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t24 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", let final Never* #t25 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
index 72e9445..4e5791d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
@@ -184,26 +184,26 @@
     self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
     self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
     self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
                                                  ^" in new self::A::•<core::int*, dynamic>(3, "hello");
-    self::A<core::int*, core::String*>* a5 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
                                                  ^" in new self::A::named<dynamic, dynamic>(3, "hello");
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
   }
@@ -212,26 +212,26 @@
     self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
     self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
     self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a4 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
                                               ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
                                               ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
@@ -240,22 +240,22 @@
     self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
     self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
     self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a4 = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
                                                       ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
-    self::A<core::int*, core::int*>* a5 = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
                                                       ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(let final Never* #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(let final Never* #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
@@ -264,22 +264,22 @@
     self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
     self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
     self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a4 = let final Never* #t17 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
                                               ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = let final Never* #t18 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
                                               ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(let final Never* #t19 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(let final Never* #t20 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
   }
@@ -288,19 +288,19 @@
   }
   {
     self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: core::_GrowableList::_literal1<core::int*>(3), b: core::_GrowableList::_literal1<core::String*>("hello"));
-    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: core::_GrowableList::_literal1<core::int*>(let final Never* #t21 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in "hello" as{TypeError} core::int*), b: core::_GrowableList::_literal1<core::String*>(let final Never* #t22 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in "hello" as{TypeError} core::int*), b: core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in 3 as{TypeError} core::String*));
     self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
     self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", let final Never* #t23 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, let final Never* #t24 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", let final Never* #t25 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in "hello" as{TypeError} core::int*);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
index c4d983a..871e6e1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
@@ -72,10 +72,10 @@
   {
     core::List<core::int*>* l0 = <core::int*>[];
     core::List<core::int*>* l1 = <core::int*>[3];
-    core::List<core::int*>* l2 = <core::int*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::List<core::int*>* l3 = <core::int*>[let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
@@ -86,38 +86,38 @@
     core::List<dynamic>* l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int*>* l0 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in <core::num*>[];
-    core::List<core::int*>* l1 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in <core::num*>[3];
-    core::List<core::int*>* l2 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::num*];
-    core::List<core::int*>* l3 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::num*, 3];
   }
   {
     core::Iterable<core::int*>* i0 = <core::int*>[];
     core::Iterable<core::int*>* i1 = <core::int*>[3];
-    core::Iterable<core::int*>* i2 = <core::int*>[let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::Iterable<core::int*>* i3 = <core::int*>[let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
index 27af9ab..4a236be 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
@@ -72,10 +72,10 @@
   {
     core::List<core::int*>* l0 = core::_GrowableList::•<core::int*>(0);
     core::List<core::int*>* l1 = core::_GrowableList::_literal1<core::int*>(3);
-    core::List<core::int*>* l2 = core::_GrowableList::_literal1<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*);
-    core::List<core::int*>* l3 = core::_GrowableList::_literal2<core::int*>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3);
   }
@@ -86,38 +86,38 @@
     core::List<dynamic>* l3 = core::_GrowableList::_literal2<dynamic>("hello", 3);
   }
   {
-    core::List<core::int*>* l0 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in core::_GrowableList::•<core::num*>(0);
-    core::List<core::int*>* l1 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in core::_GrowableList::_literal1<core::num*>(3);
-    core::List<core::int*>* l2 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in core::_GrowableList::_literal1<core::num*>(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in core::_GrowableList::_literal1<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::num*);
-    core::List<core::int*>* l3 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in core::_GrowableList::_literal2<core::num*>(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in core::_GrowableList::_literal2<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::num*, 3);
   }
   {
     core::Iterable<core::int*>* i0 = core::_GrowableList::•<core::int*>(0);
     core::Iterable<core::int*>* i1 = core::_GrowableList::_literal1<core::int*>(3);
-    core::Iterable<core::int*>* i2 = core::_GrowableList::_literal1<core::int*>(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*);
-    core::Iterable<core::int*>* i3 = core::_GrowableList::_literal2<core::int*>(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
index aae9c8c..2126542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
@@ -82,15 +82,15 @@
   {
     core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
     core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
-    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
-    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in "hello" as{TypeError} core::int*: let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String*};
   }
@@ -105,36 +105,36 @@
     core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
     core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
     core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
-    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in 3 as{TypeError} core::String*};
   }
   {
     core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
     core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
-    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
     core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
-    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in "hello" as{TypeError} core::int*: 3};
   }
   {
-    core::Map<core::int*, core::String*>* l0 = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in <core::num*, dynamic>{};
-    core::Map<core::int*, core::String*>* l1 = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: "hello"};
-    core::Map<core::int*, core::String*>* l3 = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
index aae9c8c..2126542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
@@ -82,15 +82,15 @@
   {
     core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
     core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
-    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
-    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in "hello" as{TypeError} core::int*: let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String*};
   }
@@ -105,36 +105,36 @@
     core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
     core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
     core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
-    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in 3 as{TypeError} core::String*};
   }
   {
     core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
     core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
-    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
     core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
-    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in "hello" as{TypeError} core::int*: 3};
   }
   {
-    core::Map<core::int*, core::String*>* l0 = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in <core::num*, dynamic>{};
-    core::Map<core::int*, core::String*>* l1 = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: "hello"};
-    core::Map<core::int*, core::String*>* l3 = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
index f763ed9..6c7b42a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
@@ -85,12 +85,12 @@
 }
 static method foo() → asy::Stream<core::List<core::int*>*>* async* {
   yield<core::int*>[];
-  yield let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
+  yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
                                                                     ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
-  yield* let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
+  yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
@@ -99,12 +99,12 @@
 }
 static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* {
   yield core::Map::•<core::int*, core::int*>();
-  yield let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
+  yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
  - 'List' is from 'dart:core'.
  - 'Map' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
                                                               ^" in <dynamic>[] as{TypeError} core::Map<core::int*, core::int*>*;
-  yield* let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
+  yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
  - 'Map' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index 0a1fd1f..da9eb92 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -101,7 +101,7 @@
             return null;
           else
             [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
+          if(:controller.{asy::_AsyncStarStreamController::add}(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
@@ -109,7 +109,7 @@
             return null;
           else
             [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::addStream}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
@@ -147,7 +147,7 @@
           [yield] true;
         }
         {
-          :iterator.{core::_SyncIterator::_current} = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
+          :iterator.{core::_SyncIterator::_current} = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
  - 'List' is from 'dart:core'.
  - 'Map' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
@@ -155,7 +155,7 @@
           [yield] true;
         }
         {
-          :iterator.{core::_SyncIterator::_yieldEachIterable} = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
+          :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
  - 'Map' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
index d86a1ff..3cc9299 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
@@ -31,7 +31,7 @@
   core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
-                                             ^^^^...";
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
   core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
   dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
   dynamic call_foo0 = d{dynamic}.foo();
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
index d86a1ff..3cc9299 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
   core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
-                                             ^^^^...";
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
   core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
   dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
   dynamic call_foo0 = d{dynamic}.foo();
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
index 354eb47..668e6c8 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
@@ -22,12 +22,12 @@
 
 static method m1() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
                                                                                                   ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
-  asy::Future<core::List<core::int*>*>* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
   Future<List<int>> y = x;
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
index 008d899..7fb1fa7 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
@@ -22,12 +22,12 @@
 
 static method m1() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
                                                                                                   ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
-  asy::Future<core::List<core::int*>*>* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
   Future<List<int>> y = x;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
index 9d407d0..b63576e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
@@ -43,7 +43,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
index 9e8fc77..8b4ba4e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
index b6b8c88..0804da7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
@@ -42,7 +42,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  self::MyFuture<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
index 2811c31..88d7620 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  self::MyFuture<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
index ca5d863..4fe0984 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
@@ -42,7 +42,7 @@
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
-  asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
index 5cff642..9fc4067 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
-  asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index 2ac9820..93b6668 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -40,7 +40,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 41fdde4..ad8c05c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index ec1e7dc..f9bf75b 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -40,7 +40,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index b46703a..0aabd95 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
index 0a651ec..9c23381 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
@@ -37,17 +37,17 @@
   self::printDouble(math::min<core::double*>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
   self::printInt(self::myMax(1, 2) as core::int*);
-  self::printInt(math::max<core::int*>(1, let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
       /*@ typeArgs=int* */ max(1, 2.0));
                                   ^" in 2.0 as{TypeError} core::int*));
-  self::printInt(math::min<core::int*>(1, let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
       /*@ typeArgs=int* */ min(1, 2.0));
                                   ^" in 2.0 as{TypeError} core::int*));
   self::printDouble(math::max<core::double*>(1.0, 2.0));
   self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(math::min<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                    ^" in "hi" as{TypeError} core::int*, let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
                                           ^" in "there" as{TypeError} core::int*));
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
index 0a651ec..9c23381 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
@@ -37,17 +37,17 @@
   self::printDouble(math::min<core::double*>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
   self::printInt(self::myMax(1, 2) as core::int*);
-  self::printInt(math::max<core::int*>(1, let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
       /*@ typeArgs=int* */ max(1, 2.0));
                                   ^" in 2.0 as{TypeError} core::int*));
-  self::printInt(math::min<core::int*>(1, let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
       /*@ typeArgs=int* */ min(1, 2.0));
                                   ^" in 2.0 as{TypeError} core::int*));
   self::printDouble(math::max<core::double*>(1.0, 2.0));
   self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(math::min<core::int*>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                    ^" in "hi" as{TypeError} core::int*, let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
                                           ^" in "there" as{TypeError} core::int*));
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
index c42f670..6c102fe 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
@@ -49,7 +49,7 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
                                                                         ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int*>(42){(invalid-type) →* invalid-type};
   core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
index ebdf203..79f41c9 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
@@ -13,7 +13,7 @@
   return null;
 static method test() → dynamic {
   core::String* x = self::f<core::String*>(<core::String*>["hi"]);
-  core::String* y = self::f<core::String*>(<core::String*>[let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = self::f<core::String*>(<core::String*>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
                                                                               ^" in 42 as{TypeError} core::String*]);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
index c6f8ccd..71fc12a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   return null;
 static method test() → dynamic {
   core::String* x = self::f<core::String*>(core::_GrowableList::_literal1<core::String*>("hi"));
-  core::String* y = self::f<core::String*>(core::_GrowableList::_literal1<core::String*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = self::f<core::String*>(core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
                                                                               ^" in 42 as{TypeError} core::String*));
 }
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 e8a716a..1474987 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
@@ -104,42 +104,42 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::takeIII(#C1<core::int*>);
-  self::takeDDD(#C1<core::double*>);
-  self::takeNNN(#C1<core::num*>);
-  self::takeIDN(#C1<core::num*>);
-  self::takeDIN(#C1<core::num*>);
-  self::takeIIN(#C1<core::int*>);
-  self::takeDDN(#C1<core::double*>);
-  self::takeIIO(#C1<core::int*>);
-  self::takeDDO(#C1<core::double*>);
-  self::takeOOI((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI((#C5) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+                                                                        ^" in (#C4) as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
-  self::takeOON((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeIII(#C2<core::int*>);
-  self::takeDDD(#C2<core::double*>);
-  self::takeNNN(#C2<core::num*>);
-  self::takeIDN(#C2<core::num*>);
-  self::takeDIN(#C2<core::num*>);
-  self::takeIIN(#C2<core::int*>);
-  self::takeDDN(#C2<core::double*>);
-  self::takeIIO(#C2<core::int*>);
-  self::takeDDO(#C2<core::double*>);
-  self::takeOOI((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+                                                                        ^" in (#C4) as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI((#C10) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+                                                                       ^" in (#C9) as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
-  self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+                                                                       ^" in (#C9) as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
   self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
   self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
@@ -152,10 +152,10 @@
   self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
@@ -177,5 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = static-tearoff math::min
+  #C2 = instantiation math::max <core::int*>
+  #C3 = instantiation math::max <core::double*>
+  #C4 = instantiation math::max <core::num*>
+  #C5 = instantiation math::max <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*>
 }
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 1ee8bea..1474987 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
@@ -104,42 +104,42 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::takeIII(#C1<core::int*>);
-  self::takeDDD(#C1<core::double*>);
-  self::takeNNN(#C1<core::num*>);
-  self::takeIDN(#C1<core::num*>);
-  self::takeDIN(#C1<core::num*>);
-  self::takeIIN(#C1<core::int*>);
-  self::takeDDN(#C1<core::double*>);
-  self::takeIIO(#C1<core::int*>);
-  self::takeDDO(#C1<core::double*>);
-  self::takeOOI((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI((#C5) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+                                                                        ^" in (#C4) as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in (#C1<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
-  self::takeOON((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeIII(#C2<core::int*>);
-  self::takeDDD(#C2<core::double*>);
-  self::takeNNN(#C2<core::num*>);
-  self::takeIDN(#C2<core::num*>);
-  self::takeDIN(#C2<core::num*>);
-  self::takeIIN(#C2<core::int*>);
-  self::takeDDN(#C2<core::double*>);
-  self::takeIIO(#C2<core::int*>);
-  self::takeDDO(#C2<core::double*>);
-  self::takeOOI((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+                                                                        ^" in (#C4) as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI((#C10) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+                                                                       ^" in (#C9) as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
-  self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+                                                                       ^" in (#C9) as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
   self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
   self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
@@ -152,10 +152,10 @@
   self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
@@ -177,36 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = static-tearoff math::min
+  #C2 = instantiation math::max <core::int*>
+  #C3 = instantiation math::max <core::double*>
+  #C4 = instantiation math::max <core::num*>
+  #C5 = instantiation math::max <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*>
 }
-
-Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:16:16 -> InstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:17:16 -> InstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:18:16 -> InstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:19:16 -> InstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:20:16 -> InstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:21:16 -> InstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:22:16 -> InstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:23:16 -> InstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:24:16 -> InstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:26:70 -> InstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:28:73 -> InstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:30:73 -> InstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:31:70 -> InstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:32:70 -> InstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:35:11 -> InstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:36:11 -> InstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:37:11 -> InstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:38:11 -> InstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:39:11 -> InstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:40:11 -> InstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:41:11 -> InstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:42:11 -> InstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:43:11 -> InstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:45:65 -> InstantiationConstant(min<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:46:72 -> InstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:47:72 -> InstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:48:65 -> InstantiationConstant(min<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:49:65 -> InstantiationConstant(min<Object*>)
-Extra constant evaluation: evaluated: 133, effectively constant: 28
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
index 057fc60..e828e03 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
@@ -10,7 +10,7 @@
 
 test() {
   String x = JS('int', '42'); // error
-  var /*@type=dynamic*/ y = JS<String>('String', '"hello"');
+  var /*@type=invalid-type*/ y = JS<String>('String', '"hello"');
   y = "world";
   y = 42; // error
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
index 4b1c3d6..4831a9f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
@@ -17,9 +17,9 @@
 //   String x = JS('int', '42'); // error
 //              ^^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:29: Error: Method not found: 'JS'.
-//   var /*@type=dynamic*/ y = JS<String>('String', '"hello"');
-//                             ^^
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+//   var /*@type=invalid-type*/ y = JS<String>('String', '"hello"');
+//                                  ^^
 //
 import self as self;
 import "dart:core" as core;
@@ -29,10 +29,10 @@
 static method test() → dynamic {
   core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
   String x = JS('int', '42'); // error
-             ^^" as{TypeError,ForDynamic} core::String*;
-  dynamic y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:29: Error: Method not found: 'JS'.
-  var /*@type=dynamic*/ y = JS<String>('String', '\"hello\"');
-                            ^^";
+             ^^";
+  invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+  var /*@type=invalid-type*/ y = JS<String>('String', '\"hello\"');
+                                 ^^";
   y = "world";
   y = 42;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
index 59da75c..23c34ad 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
@@ -10,9 +10,9 @@
 //   String x = JS('int', '42'); // error
 //              ^^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:29: Error: Method not found: 'JS'.
-//   var /*@type=dynamic*/ y = JS<String>('String', '"hello"');
-//                             ^^
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+//   var /*@type=invalid-type*/ y = JS<String>('String', '"hello"');
+//                                  ^^
 //
 import self as self;
 import "dart:core" as core;
@@ -23,9 +23,9 @@
   core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
   String x = JS('int', '42'); // error
              ^^";
-  dynamic y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:29: Error: Method not found: 'JS'.
-  var /*@type=dynamic*/ y = JS<String>('String', '\"hello\"');
-                            ^^";
+  invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+  var /*@type=invalid-type*/ y = JS<String>('String', '\"hello\"');
+                                 ^^";
   y = "world";
   y = 42;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
index fedd32d..f3dc908 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method f() → void {
   core::List<core::String*>* y;
-  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
           1.0);
           ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
index fedd32d..f3dc908 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method f() → void {
   core::List<core::String*>* y;
-  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
           1.0);
           ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
index fe91228..2f4c738 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
@@ -25,8 +25,8 @@
   asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*}) as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
                                                                                                               ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
   asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
index 393b79d..5a62ebc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
@@ -25,8 +25,8 @@
   asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^"){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*})){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
                                                                                                               ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
   asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
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 3d04d1f..5a16fe2 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
@@ -39,10 +39,11 @@
 static method main() → dynamic {
   core::List<self::Trace*>* traces = <self::Trace*>[];
   core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
 }
 
 constants  {
   #C1 = static-tearoff math::max
+  #C2 = instantiation math::max <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 b46e8a6..39218a6 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
@@ -39,15 +39,11 @@
 static method main() → dynamic {
   core::List<self::Trace*>* traces = core::_GrowableList::•<self::Trace*>(0);
   core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
 }
 
 constants  {
   #C1 = static-tearoff math::max
+  #C2 = instantiation math::max <core::int*>
 }
-
-Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:28:71 -> InstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:29:67 -> InstantiationConstant(max<int*>)
-Extra constant evaluation: evaluated: 16, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
index c0c88a8..5692085 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
@@ -58,16 +58,16 @@
   core::String* s;
   core::int* i;
   s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
                                                             ^" in new self::B::•().{self::B::y}{core::int*} as{TypeError} core::String*;
   s = new self::B::•().{self::B::z}{core::String*};
-  s = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
                                                             ^" in new self::B::•().{self::B::w}{core::int*} as{TypeError} core::String*;
   i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y}{core::int*};
-  i = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
                                                             ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
   i = new self::B::•().{self::B::w}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
index c0c88a8..5692085 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
@@ -58,16 +58,16 @@
   core::String* s;
   core::int* i;
   s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
                                                             ^" in new self::B::•().{self::B::y}{core::int*} as{TypeError} core::String*;
   s = new self::B::•().{self::B::z}{core::String*};
-  s = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
                                                             ^" in new self::B::•().{self::B::w}{core::int*} as{TypeError} core::String*;
   i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y}{core::int*};
-  i = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
                                                             ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
   i = new self::B::•().{self::B::w}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
index fe4097c..7a1c5ba 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
@@ -17,7 +17,7 @@
 var a = new A();
 // Note: it doesn't matter that some of these refer to 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
-var c1 = /*@typeArgs=dynamic*/ [
+var c1 = /*@typeArgs=invalid-type*/ [
   /*error:UNDEFINED_IDENTIFIER*/ x
 ]; // list literals
 var c2 = /*@typeArgs=dynamic*/ const [];
@@ -37,7 +37,7 @@
   a = new B(3);
   b = /*error:INVALID_ASSIGNMENT*/ "hi";
   b = new B(3);
-  c1 = /*@typeArgs=dynamic*/ [];
+  c1 = /*@typeArgs=invalid-type*/ [];
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
   c2 = /*@typeArgs=dynamic*/ [];
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
index 1e12aec..a18d682 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 // var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
 //                                              ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
 //   /*error:UNDEFINED_IDENTIFIER*/ x
 //                                  ^
 //
@@ -26,7 +26,7 @@
 //   b = /*error:INVALID_ASSIGNMENT*/ "hi";
 //                                    ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'List' is from 'dart:core'.
 //   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
@@ -101,10 +101,10 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
                                              ^");
-static field core::List<dynamic>* c1 = <dynamic>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+static field core::List<invalid-type>* c1 = <invalid-type>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^"];
 static field core::List<dynamic>* c2 = #C1;
@@ -119,66 +119,66 @@
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
-                                                         ^";
+                                                         ^" in new self::A::•(){<unresolved>}.unary-();
 static field self::B* j = null as self::B*;
 static method test1() → dynamic {
-  self::a = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} self::A*;
   self::a = new self::B::•(3);
-  self::b = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
+  self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} self::B*;
   self::b = new self::B::•(3);
-  self::c1 = <dynamic>[];
-  self::c1 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+  self::c1 = <invalid-type>[];
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-  } =>#t5) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic>* #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError} core::List<invalid-type>*;
   self::c2 = <dynamic>[];
-  self::c2 = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+  self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t7 = col::LinkedHashSet::•<dynamic>();
-  } =>#t7) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError} core::List<dynamic>*;
   self::d = <dynamic, dynamic>{};
-  self::d = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
+  self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
  - 'Map' is from 'dart:core'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
                                    ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
   self::e = new self::A::•();
-  self::e = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
+  self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
  - 'Map' is from 'dart:core'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                   ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
   self::f = 3;
-  self::f = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} core::int*;
   self::g = 1;
-  self::g = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} core::int*;
-  self::h = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+  self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} self::B*;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} self::B*;
-  self::j = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
index b315ae4..413000a 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 // var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
 //                                              ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
 //   /*error:UNDEFINED_IDENTIFIER*/ x
 //                                  ^
 //
@@ -36,7 +36,7 @@
 }
 static field self::A* a;
 static field self::B* b;
-static field core::List<dynamic>* c1;
+static field core::List<invalid-type>* c1;
 static field core::List<dynamic>* c2;
 static field core::Map<dynamic, dynamic>* d;
 static field self::A* e;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
index 0cc2a2f..be878a0 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 // var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
 //                                              ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
 //   /*error:UNDEFINED_IDENTIFIER*/ x
 //                                  ^
 //
@@ -26,7 +26,7 @@
 //   b = /*error:INVALID_ASSIGNMENT*/ "hi";
 //                                    ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'List' is from 'dart:core'.
 //   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
@@ -101,10 +101,10 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
                                              ^");
-static field core::List<dynamic>* c1 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+static field core::List<invalid-type>* c1 = core::_GrowableList::_literal1<invalid-type>(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^");
 static field core::List<dynamic>* c2 = #C1;
@@ -119,66 +119,66 @@
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
-                                                         ^";
+                                                         ^" in new self::A::•(){<unresolved>}.unary-();
 static field self::B* j = null;
 static method test1() → dynamic {
-  self::a = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} self::A*;
   self::a = new self::B::•(3);
-  self::b = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
+  self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} self::B*;
   self::b = new self::B::•(3);
-  self::c1 = core::_GrowableList::•<dynamic>(0);
-  self::c1 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+  self::c1 = core::_GrowableList::•<invalid-type>(0);
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t5 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t5) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic>* #t2 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError} core::List<invalid-type>*;
   self::c2 = core::_GrowableList::•<dynamic>(0);
-  self::c2 = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+  self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t7 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t7) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError} core::List<dynamic>*;
   self::d = <dynamic, dynamic>{};
-  self::d = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
+  self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
  - 'Map' is from 'dart:core'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
                                    ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
   self::e = new self::A::•();
-  self::e = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
+  self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
  - 'Map' is from 'dart:core'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                   ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
   self::f = 3;
-  self::f = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} core::int*;
   self::g = 1;
-  self::g = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} core::int*;
-  self::h = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+  self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} self::B*;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in false as{TypeError} self::B*;
-  self::j = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
@@ -193,4 +193,4 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:27:25 -> IntConstant(5)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:30:32 -> IntConstant(-3)
-Extra constant evaluation: evaluated: 74, effectively constant: 2
+Extra constant evaluation: evaluated: 44, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
index 0bdc6f3..cfb8761 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
@@ -18,10 +18,10 @@
 
 static field core::int* y = inf::x;
 static method test1() → dynamic {
-  inf::x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
-  self::y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
index 0bdc6f3..cfb8761 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
@@ -18,10 +18,10 @@
 
 static field core::int* y = inf::x;
 static method test1() → dynamic {
-  inf::x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
-  self::y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
index 7542232..74f640c 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
@@ -33,10 +33,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  inf::A::x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
-  self::B::y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
index 7542232..74f640c 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
@@ -33,10 +33,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  inf::A::x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
-  self::B::y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
index 0bb3ec1..4cb24f0 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
@@ -6,7 +6,7 @@
 library test;
 
 test() {
-  /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+  /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
 
   // Ignore inference for g since Fasta doesn't infer it due to the circularity,
   // and that's ok.
@@ -14,7 +14,7 @@
   g() => 0;
   /*@testedFeatures=inference*/
 
-  var /*@ type=() ->* dynamic */ v = f;
+  var /*@type=() ->* invalid-type*/ v = f;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
index 08ebecb..588ca83 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Error: Method not found: 'g'.
-//   /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-//                                                                            ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
 //
 // pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
 //   g() => 0;
 //   ^
-// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Context: Previous use of 'g'.
-//   /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-//                                                                            ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Context: Previous use of 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method test() → dynamic {
-  function f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Error: Method not found: 'g'.
-  /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-                                                                           ^";
+  function f() → invalid-type
+    return invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+  /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                              ^";
   {
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
@@ -28,6 +28,6 @@
     function g() → core::int*
       return 0;
   }
-  () →* dynamic v = f;
+  () →* invalid-type v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
index 08ebecb..588ca83 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Error: Method not found: 'g'.
-//   /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-//                                                                            ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
 //
 // pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
 //   g() => 0;
 //   ^
-// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Context: Previous use of 'g'.
-//   /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-//                                                                            ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Context: Previous use of 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method test() → dynamic {
-  function f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:76: Error: Method not found: 'g'.
-  /*@ returnType=dynamic */ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
-                                                                           ^";
+  function f() → invalid-type
+    return invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+  /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                              ^";
   {
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
@@ -28,6 +28,6 @@
     function g() → core::int*
       return 0;
   }
-  () →* dynamic v = f;
+  () →* invalid-type v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
index 7306671..454f2de 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
@@ -33,7 +33,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
index 7306671..454f2de 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
index 357a311..a8b5b21 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
@@ -43,7 +43,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
index 357a311..a8b5b21 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
index cc7cb0d..be69c0e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method test1() → dynamic {
   core::int* x = 3;
-  x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
index cc7cb0d..be69c0e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test1() → dynamic {
   core::int* x = 3;
-  x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
index d782c48..318a2d0 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method test2() → dynamic {
   core::int* x = 3;
-  x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
index d782c48..318a2d0 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test2() → dynamic {
   core::int* x = 3;
-  x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
index 8674afe..f622139 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
@@ -26,17 +26,17 @@
     ;
   method test1() → dynamic {
     core::int* a = this.{self::A::x}{core::int*};
-    a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     a = 3;
     core::int* b = this.{self::A::y}{core::int*};
-    b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     b = 4;
     core::int* c = this.{self::A::z}{core::int*};
-    c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     c = 4;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
index 8674afe..f622139 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
@@ -26,17 +26,17 @@
     ;
   method test1() → dynamic {
     core::int* a = this.{self::A::x}{core::int*};
-    a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     a = 3;
     core::int* b = this.{self::A::y}{core::int*};
-    b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     b = 4;
     core::int* c = this.{self::A::z}{core::int*};
-    c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     c = 4;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
index a0affa1..63aa12a 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
@@ -22,17 +22,17 @@
 static final field core::int* z = 42;
 static method test1() → dynamic {
   core::int* a = self::x;
-  a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   a = 3;
   core::int* b = self::y;
-  b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   b = 4;
   core::int* c = self::z;
-  c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   c = 4;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
index a0affa1..63aa12a 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
@@ -22,17 +22,17 @@
 static final field core::int* z = 42;
 static method test1() → dynamic {
   core::int* a = self::x;
-  a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   a = 3;
   core::int* b = self::y;
-  b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   b = 4;
   core::int* c = self::z;
-  c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in "hi" as{TypeError} core::int*;
   c = 4;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
index 247bcf0..dced83d 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
@@ -38,7 +38,7 @@
 }
 static method foo() → dynamic {
   core::int* y = new self::C::•().{self::C::x}{core::int*};
-  core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
                                                                    ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
index 247bcf0..dced83d 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
@@ -38,7 +38,7 @@
 }
 static method foo() → dynamic {
   core::int* y = new self::C::•().{self::C::x}{core::int*};
-  core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
                                                                    ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
index ebbcf90..0acdfbf 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
@@ -51,7 +51,7 @@
 }
 static method foo() → dynamic {
   core::int* y = new test::C::•().{test::C::x}{core::int*};
-  core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
                                                                    ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
index ebbcf90..0acdfbf 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
 }
 static method foo() → dynamic {
   core::int* y = new test::C::•().{test::C::x}{core::int*};
-  core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
                                                                    ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
index 0dfdff3..a263f07 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
@@ -37,7 +37,7 @@
   get x() → core::int*
     return 3;
   get w() → core::int*
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
                                             ^" in "hello" as{TypeError} core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -52,7 +52,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
index 0dfdff3..a263f07 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
   get x() → core::int*
     return 3;
   get w() → core::int*
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
                                             ^" in "hello" as{TypeError} core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -52,7 +52,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
                                                                    ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
   core::int* z = new self::B::•().{self::B::x}{core::int*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
index 4c24549..ce66d87 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
@@ -34,7 +34,7 @@
     return this.{self::B::y}{self::B::E*};
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
                                                                         ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
index 4c24549..ce66d87 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
     return this.{self::B::y}{self::B::E*};
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
                                                                         ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
index f76b260..5b19a39 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
@@ -66,7 +66,7 @@
   method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=B.m*/ m(null, null);
                         ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
index f76b260..5b19a39 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
@@ -66,7 +66,7 @@
   method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=B.m*/ m(null, null);
                         ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
index b156e85..27f0da3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
@@ -53,7 +53,7 @@
   method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
                             ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
index b156e85..27f0da3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
   method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
                             ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
   core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
index 5764bd1..e7555d5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
@@ -78,7 +78,7 @@
   method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
                             ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
   core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
index 5764bd1..e7555d5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
@@ -78,7 +78,7 @@
   method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
 }
 static method foo() → dynamic {
-  core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
                             ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
   core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
index 086fb1f690..4e36d34 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
@@ -53,7 +53,7 @@
     ;
   method foo(generic-covariant-impl self::Bar::T* t) → void {
     for (core::String* i in t) {
-      core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
     }
@@ -75,7 +75,7 @@
     ;
   method foo(generic-covariant-impl self::Baz::S* t) → void {
     for (self::Baz::T* i in t) {
-      core::int* x = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
       self::Baz::T* y = i;
@@ -95,7 +95,7 @@
 static method test() → dynamic {
   core::List<self::Foo*>* list = <self::Foo*>[];
   for (self::Foo* x in list) {
-    core::String* y = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in x as{TypeError} core::String*;
@@ -103,31 +103,31 @@
   for (dynamic x in list) {
     core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
-  for (final self::Foo* #t4 in list) {
-    core::String* x = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  for (final self::Foo* #t1 in list) {
+    core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in #t4 as{TypeError} core::String*;
+              ^" in #t1 as{TypeError} core::String*;
     core::String* y = x;
   }
   dynamic z;
-  for (final self::Foo* #t6 in list) {
-    z = #t6;
+  for (final self::Foo* #t2 in list) {
+    z = #t2;
     core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   core::Iterable<dynamic>* iter = list;
-  for (final dynamic #t7 in iter) {
-    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
+  for (final dynamic #t3 in iter) {
+    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t8 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
+  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
-  for (dynamic x in let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
  - 'Iterable' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
index 5eb2f87..d522cdb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::String* i = :sync-for-iterator.{core::Iterator::current}{core::String*};
         {
-          core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
         }
@@ -85,7 +85,7 @@
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         self::Baz::T* i = :sync-for-iterator.{core::Iterator::current}{self::Baz::T*};
         {
-          core::int* x = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+          core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
           self::Baz::T* y = i;
@@ -111,7 +111,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       self::Foo* x = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
       {
-        core::String* y = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+        core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in x as{TypeError} core::String*;
@@ -130,13 +130,13 @@
   {
     core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::Foo* #t4 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      final self::Foo* #t1 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
       {
-        core::String* x = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+        core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in #t4 as{TypeError} core::String*;
+              ^" in #t1 as{TypeError} core::String*;
         core::String* y = x;
       }
     }
@@ -145,9 +145,9 @@
   {
     core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::Foo* #t6 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      final self::Foo* #t2 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
       {
-        z = #t6;
+        z = #t2;
         core::String* y = z as{TypeError,ForDynamic} core::String*;
       }
     }
@@ -156,9 +156,9 @@
   {
     core::Iterator<dynamic>* :sync-for-iterator = iter.{core::Iterable::iterator}{core::Iterator<dynamic>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
+        self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
@@ -167,23 +167,23 @@
   {
     core::Iterator<dynamic>* :sync-for-iterator = (iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
+        self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
  - 'Iterable' is from 'dart:core'.
   for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
-                                                                     ^" in map as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                                                                     ^" in map as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{Never};
       {
         core::String* y = x as{TypeError,ForDynamic} core::String*;
       }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
index c01f6d8..5a5abe3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
@@ -56,7 +56,7 @@
     ;
   method foo(generic-covariant-impl self::Bar::T* t) → dynamic async {
     await for (core::String* i in t) {
-      core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
     }
@@ -78,7 +78,7 @@
     ;
   method foo(generic-covariant-impl self::Baz::S* t) → dynamic async {
     await for (self::Baz::T* i in t) {
-      core::int* x = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
       self::Baz::T* y = i;
@@ -149,7 +149,7 @@
 static method test() → dynamic async {
   self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
   await for (self::Foo* x in myStream) {
-    core::String* y = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in x as{TypeError} core::String*;
@@ -157,31 +157,31 @@
   await for (dynamic x in myStream) {
     core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
-  await for (final self::Foo* #t4 in myStream) {
-    core::String* x = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  await for (final self::Foo* #t1 in myStream) {
+    core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t4 as{TypeError} core::String*;
+                    ^" in #t1 as{TypeError} core::String*;
     core::String* y = x;
   }
   dynamic z;
-  await for (final self::Foo* #t6 in myStream) {
-    z = #t6;
+  await for (final self::Foo* #t2 in myStream) {
+    z = #t2;
     core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   asy::Stream<dynamic>* stream = myStream;
-  await for (final dynamic #t7 in stream) {
-    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
+  await for (final dynamic #t3 in stream) {
+    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t8 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
+  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
-  await for (dynamic x in let final Never* #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
+  await for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - 'Stream' is from 'dart:async'.
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index a8fa094..ecf46cd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -82,7 +82,7 @@
                 if(_in::unsafeCast<core::bool>(:result)) {
                   core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
                   {
-                    core::int* x = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                    core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
                   }
@@ -92,7 +92,7 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null)) {
-                [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
                 :result;
               }
           }
@@ -146,12 +146,12 @@
             try
               #L4:
               while (true) {
-                dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+                dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
+                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
                 if(_in::unsafeCast<core::bool>(:result)) {
                   self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T*};
                   {
-                    core::int* x = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+                    core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
                     self::Baz::T* y = i;
@@ -162,7 +162,7 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null)) {
-                [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
                 :result;
               }
           }
@@ -264,12 +264,12 @@
           try
             #L6:
             while (true) {
-              dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
-                  core::String* y = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+                  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in x as{TypeError} core::String*;
@@ -280,7 +280,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -290,8 +290,8 @@
           try
             #L7:
             while (true) {
-              dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
@@ -303,7 +303,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -313,16 +313,16 @@
           try
             #L8:
             while (true) {
-              dynamic #t16 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final self::Foo* #t18 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
+                final self::Foo* #t15 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
-                  core::String* x = let final Never* #t19 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+                  core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t18 as{TypeError} core::String*;
+                    ^" in #t15 as{TypeError} core::String*;
                   core::String* y = x;
                 }
               }
@@ -331,7 +331,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -342,12 +342,12 @@
           try
             #L9:
             while (true) {
-              dynamic #t21 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final self::Foo* #t23 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
+                final self::Foo* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
-                  z = #t23;
+                  z = #t19;
                   core::String* y = z as{TypeError,ForDynamic} core::String*;
                 }
               }
@@ -356,7 +356,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -367,6 +367,31 @@
           try
             #L10:
             while (true) {
+              dynamic #t21 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              if(_in::unsafeCast<core::bool>(:result)) {
+                final dynamic #t23 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                {
+                  self::Foo* x = #t23 as{TypeError,ForDynamic} self::Foo*;
+                  self::Foo* y = x;
+                }
+              }
+              else
+                break #L10;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
+              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              :result;
+            }
+        }
+        dynamic stream2 = myStream;
+        {
+          asy::Stream<dynamic>* :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          try
+            #L11:
+            while (true) {
               dynamic #t25 = asy::_asyncStarMoveNextHelper(:stream);
               [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
@@ -377,7 +402,7 @@
                 }
               }
               else
-                break #L10;
+                break #L11;
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
@@ -385,34 +410,9 @@
               :result;
             }
         }
-        dynamic stream2 = myStream;
-        {
-          asy::Stream<dynamic>* :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L11:
-            while (true) {
-              dynamic #t29 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
-                final dynamic #t31 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  self::Foo* x = #t31 as{TypeError,ForDynamic} self::Foo*;
-                  self::Foo* y = x;
-                }
-              }
-              else
-                break #L11;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t32 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
-            }
-        }
         core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t33 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - 'Stream' is from 'dart:async'.
@@ -422,8 +422,8 @@
           try
             #L12:
             while (true) {
-              dynamic #t34 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t35 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t29 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
@@ -435,7 +435,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t36 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
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 5d83e0a..ba2952c 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -36,14 +36,16 @@
   function h<T extends core::Object* = dynamic>(T* x) → T*
     return x;
   (core::int*) →* core::int* func;
-  func = #C1<core::int*>;
+  func = #C2;
   func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
-  func = #C2<core::int*>;
+  func = #C4;
   func = h<core::int*>;
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = static-tearoff self::C::g
+  #C2 = instantiation self::f <core::int*>
+  #C3 = static-tearoff self::C::g
+  #C4 = instantiation self::C::g <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 87decf1..ba2952c 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
@@ -36,19 +36,16 @@
   function h<T extends core::Object* = dynamic>(T* x) → T*
     return x;
   (core::int*) →* core::int* func;
-  func = #C1<core::int*>;
+  func = #C2;
   func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
-  func = #C2<core::int*>;
+  func = #C4;
   func = h<core::int*>;
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = static-tearoff self::C::g
+  #C2 = instantiation self::f <core::int*>
+  #C3 = static-tearoff self::C::g
+  #C4 = instantiation self::C::g <core::int*>
 }
-
-Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:25:10 -> InstantiationConstant(f<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:27:12 -> InstantiationConstant(C.g<int*>)
-Extra constant evaluation: evaluated: 18, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
index 15684fc..2e086bf 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
   (core::int*) →* core::int* func;
-  func = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
   func = f.call;
            ^" in f.call as{TypeError} (core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
index 15684fc..2e086bf 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
   (core::int*) →* core::int* func;
-  func = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
   func = f.call;
            ^" in f.call as{TypeError} (core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
index fb63017..a4e38e4 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
@@ -19,10 +19,10 @@
 
 static method test1() → dynamic {
   core::List<core::int*>* x = <core::int*>[1, 2, 3];
-  x.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
-  x.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
   x.{core::List::add}(4){(core::int*) →* void};
@@ -30,7 +30,7 @@
 }
 static method test2() → dynamic {
   core::List<core::num*>* x = <core::num*>[1, 2.0, 3];
-  x.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
   x.{core::List::add}(4.0){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
index 1f10df9..6631f98 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
@@ -19,10 +19,10 @@
 
 static method test1() → dynamic {
   core::List<core::int*>* x = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
-  x.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
-  x.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
   x.{core::List::add}(4){(core::int*) →* void};
@@ -30,7 +30,7 @@
 }
 static method test2() → dynamic {
   core::List<core::num*>* x = core::_GrowableList::_literal3<core::num*>(1, 2.0, 3);
-  x.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
   x.{core::List::add}(4.0){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
index ae6d28e..75f767f 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
@@ -20,17 +20,17 @@
 static field core::List<core::int*>* x1 = <core::int*>[1, 2, 3];
 static field core::List<core::num*>* x2 = <core::num*>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
-  self::x1.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                       ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
   self::x1.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
   self::x2.{core::List::add}(4.0){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
index 3155e77..ec2a985 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
@@ -20,17 +20,17 @@
 static field core::List<core::int*>* x1 = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
 static field core::List<core::num*>* x2 = core::_GrowableList::_literal3<core::num*>(1, 2.0, 3);
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
-  self::x1.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                       ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
   self::x1.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
   self::x2.{core::List::add}(4.0){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
index 3d37ae4..421e71c 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
@@ -19,7 +19,7 @@
     return (core::int* x) → core::int* => x;
   }
   function b() → asy::Future<(core::int*) →* core::int*>* async {
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 00b4229..1b77665 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
       try {
         #L1:
         {
-          :return_value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+          :return_value = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
index 298f552..f3f2fd7 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
@@ -29,13 +29,13 @@
 static method test1() → dynamic {
   core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                              ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = x;
@@ -43,11 +43,11 @@
 static method test2() → dynamic {
   core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
index 298f552..f3f2fd7 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
@@ -29,13 +29,13 @@
 static method test1() → dynamic {
   core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                              ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = x;
@@ -43,11 +43,11 @@
 static method test2() → dynamic {
   core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
index 09b5da1..cd284fd 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
@@ -30,24 +30,24 @@
 static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                  ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                                                  ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                  ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+  self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
index 09b5da1..cd284fd 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
@@ -30,24 +30,24 @@
 static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                  ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                                                  ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  self::x1.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                  ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+  self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
index c3ad47e..81035d4 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
@@ -31,11 +31,11 @@
 }
 static method test5() → dynamic {
   self::A* a1 = new self::A::•();
-  a1.{self::A::x} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                        ^" in "hi" as{TypeError} core::int*;
   self::A* a2 = new self::A::•();
-  a2.{self::A::x} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                        ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
index c3ad47e..81035d4 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
@@ -31,11 +31,11 @@
 }
 static method test5() → dynamic {
   self::A* a1 = new self::A::•();
-  a1.{self::A::x} = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                        ^" in "hi" as{TypeError} core::int*;
   self::A* a2 = new self::A::•();
-  a2.{self::A::x} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                        ^" in "hi" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
index ba5fd06..3ca6230 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
@@ -18,7 +18,7 @@
   return (core::int* x) → core::int* => x;
 }
 static method b() → asy::Future<(core::int*) →* core::int*>* async {
-  return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
index f81139c..9f7346a 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     try {
       #L1:
       {
-        :return_value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+        :return_value = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
index 1307281..a3935bb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
index ff81030..2fae640 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
index 56348a9..50db1f8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
index f64ec974..ec6dd58 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
index 337c89c..3275c50 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
index a98e49b..7deb475 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
 //
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
index 60d54ba..727e04a 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
@@ -28,30 +28,30 @@
 
 static method test() → dynamic async {
   core::String* s;
-  for (final dynamic #t1 in let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
                 ^" in s as{TypeError} core::Iterable<dynamic>*) {
     core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
   }
-  await for (final dynamic #t3 in let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+  await for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (int x in s) {}
                       ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    core::int* x = #t3 as{TypeError,ForDynamic} core::int*;
+    core::int* x = #t2 as{TypeError,ForDynamic} core::int*;
   }
   core::int* y;
-  for (final dynamic #t5 in let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (y in s) {}
             ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    y = #t5 as{TypeError,ForDynamic} core::int*;
+    y = #t3 as{TypeError,ForDynamic} core::int*;
   }
-  await for (final dynamic #t7 in let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+  await for (final dynamic #t4 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (y in s) {}
                   ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    y = #t7 as{TypeError,ForDynamic} core::int*;
+    y = #t4 as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
index ad564fc..aa020dd 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
@@ -45,19 +45,19 @@
       {
         core::String* s;
         {
-          core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+          core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
-                ^" in s as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+                ^" in s as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+            final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{Never};
             {
-              core::int* x = #t2 as{TypeError,ForDynamic} core::int*;
+              core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (int x in s) {}
                       ^" in s as{TypeError} asy::Stream<dynamic>*;
@@ -65,12 +65,12 @@
           try
             #L2:
             while (true) {
-              dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
-                  core::int* x = #t6 as{TypeError,ForDynamic} core::int*;
+                  core::int* x = #t4 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
@@ -78,25 +78,25 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::int* y;
         {
-          core::Iterator<dynamic>* :sync-for-iterator = (let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+          core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (y in s) {}
-            ^" in s as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+            ^" in s as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t9 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+            final dynamic #t6 = :sync-for-iterator.{core::Iterator::current}{Never};
             {
-              y = #t9 as{TypeError,ForDynamic} core::int*;
+              y = #t6 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
         {
-          asy::Stream<dynamic>* :stream = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (y in s) {}
                   ^" in s as{TypeError} asy::Stream<dynamic>*;
@@ -104,12 +104,12 @@
           try
             #L3:
             while (true) {
-              dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final dynamic #t13 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                final dynamic #t9 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
-                  y = #t13 as{TypeError,ForDynamic} core::int*;
+                  y = #t9 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
@@ -117,7 +117,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
index 6613e7c..e195507 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
@@ -61,24 +61,24 @@
     b = #t4 as{TypeError} self::B*;
   }
   for (final self::A* #t5 in iterable) {
-    i = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
          ^" in #t5 as{TypeError} core::int*;
   }
-  await for (final self::A* #t7 in stream) {
-    i = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+  await for (final self::A* #t6 in stream) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t7 as{TypeError} core::int*;
+               ^" in #t6 as{TypeError} core::int*;
   }
-  for (final self::A* #t9 in self::f<core::Iterable<self::A*>*>()) {
-    a = #t9;
+  for (final self::A* #t7 in self::f<core::Iterable<self::A*>*>()) {
+    a = #t7;
   }
-  await for (final self::A* #t10 in self::f<asy::Stream<self::A*>*>()) {
-    a = #t10;
+  await for (final self::A* #t8 in self::f<asy::Stream<self::A*>*>()) {
+    a = #t8;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
index 0e6f089..2ad99fc 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
@@ -133,7 +133,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
             final self::A* #t11 = :sync-for-iterator.{core::Iterator::current}{self::A*};
             {
-              i = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+              i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
@@ -147,16 +147,16 @@
           try
             #L4:
             while (true) {
-              dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final self::A* #t15 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+                final self::A* #t14 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
-                  i = let final Never* #t16 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+                  i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t15 as{TypeError} core::int*;
+               ^" in #t14 as{TypeError} core::int*;
                 }
               }
               else
@@ -164,16 +164,16 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         {
           core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final self::A* #t18 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+            final self::A* #t16 = :sync-for-iterator.{core::Iterator::current}{self::A*};
             {
-              a = #t18;
+              a = #t16;
             }
           }
         }
@@ -183,12 +183,12 @@
           try
             #L5:
             while (true) {
-              dynamic #t19 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
-                final self::A* #t21 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+                final self::A* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
-                  a = #t21;
+                  a = #t19;
                 }
               }
               else
@@ -196,7 +196,7 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
index 7305204..bae6ac3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
@@ -96,17 +96,17 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = let final Never* #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
             /*@target=num.+*/ += getInt();
-                              ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
-    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
-    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
-    core::int* v10 = let final core::String* #t87 = "x" in let final core::int* #t88 = let final Never* #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                              ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = super.{self::Base::[]}(#t80).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
+    core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = super.{self::Base::[]}(#t83).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-                                                 ^" in super.{self::Base::[]}(#t87).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
-    core::int* v11 = let final core::String* #t91 = "x" in let final core::int* #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final Never* #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                                                 ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         ['x'] /*@target=num.+*/ ++;
-                                ^" in #t92.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t92;
+                                ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t90;
   }
 }
 abstract class Test4 extends self::Base<core::num*, core::int*> {
@@ -114,14 +114,14 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = let final core::String* #t95 = "x" in let final core::int* #t96 = self::getInt() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
-    core::num* v2 = let final core::String* #t98 = "x" in let final core::num* #t99 = self::getNum() as{TypeError} core::int* in let final void #t100 = super.{self::Base::[]=}(#t98, #t99) in #t99;
-    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = super.{self::Base::[]}(#t101) in #t102 == null ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = super.{self::Base::[]=}(#t101, #t103) in #t103 : #t102;
-    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = super.{self::Base::[]}(#t105) in #t106 == null ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = super.{self::Base::[]=}(#t105, #t107) in #t107 : #t106;
-    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
-    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
-    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = super.{self::Base::[]}(#t115).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
-    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = super.{self::Base::[]}(#t118) in let final void #t120 = super.{self::Base::[]=}(#t118, #t119.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*) in #t119;
+    core::int* v1 = let final core::String* #t92 = "x" in let final core::int* #t93 = self::getInt() in let final void #t94 = super.{self::Base::[]=}(#t92, #t93) in #t93;
+    core::num* v2 = let final core::String* #t95 = "x" in let final core::num* #t96 = self::getNum() as{TypeError} core::int* in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
+    core::num* v4 = let final core::String* #t98 = "x" in let final core::num* #t99 = super.{self::Base::[]}(#t98) in #t99 == null ?{core::num*} let final core::int* #t100 = self::getInt() in let final void #t101 = super.{self::Base::[]=}(#t98, #t100) in #t100 : #t99;
+    core::num* v5 = let final core::String* #t102 = "x" in let final core::num* #t103 = super.{self::Base::[]}(#t102) in #t103 == null ?{core::num*} let final core::num* #t104 = self::getNum() as{TypeError} core::int* in let final void #t105 = super.{self::Base::[]=}(#t102, #t104) in #t104 : #t103;
+    core::num* v7 = let final core::String* #t106 = "x" in let final core::num* #t107 = super.{self::Base::[]}(#t106).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t108 = super.{self::Base::[]=}(#t106, #t107) in #t107;
+    core::num* v8 = let final core::String* #t109 = "x" in let final core::num* #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
+    core::num* v10 = let final core::String* #t112 = "x" in let final core::num* #t113 = super.{self::Base::[]}(#t112).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::num* v11 = let final core::String* #t115 = "x" in let final core::num* #t116 = super.{self::Base::[]}(#t115) in let final void #t117 = super.{self::Base::[]=}(#t115, #t116.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*) in #t116;
   }
 }
 abstract class Test5 extends self::Base<core::num*, core::num*> {
@@ -129,17 +129,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
-    core::num* v2 = let final core::String* #t124 = "x" in let final core::num* #t125 = self::getNum() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
-    core::double* v3 = let final core::String* #t127 = "x" in let final core::double* #t128 = self::getDouble() in let final void #t129 = super.{self::Base::[]=}(#t127, #t128) in #t128;
-    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = super.{self::Base::[]}(#t130) in #t131 == null ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = super.{self::Base::[]=}(#t130, #t132) in #t132 : #t131;
-    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = super.{self::Base::[]}(#t134) in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = super.{self::Base::[]=}(#t134, #t136) in #t136 : #t135;
-    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = super.{self::Base::[]}(#t138) in #t139 == null ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = super.{self::Base::[]=}(#t138, #t140) in #t140 : #t139;
-    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
-    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
-    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
-    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = super.{self::Base::[]}(#t151).{core::num::+}(1){(core::num*) →* core::num*} in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
-    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = super.{self::Base::[]}(#t154) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*}) in #t155;
+    core::int* v1 = let final core::String* #t118 = "x" in let final core::int* #t119 = self::getInt() in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
+    core::num* v2 = let final core::String* #t121 = "x" in let final core::num* #t122 = self::getNum() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
+    core::double* v3 = let final core::String* #t124 = "x" in let final core::double* #t125 = self::getDouble() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
+    core::num* v4 = let final core::String* #t127 = "x" in let final core::num* #t128 = super.{self::Base::[]}(#t127) in #t128 == null ?{core::num*} let final core::int* #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t127, #t129) in #t129 : #t128;
+    core::num* v5 = let final core::String* #t131 = "x" in let final core::num* #t132 = super.{self::Base::[]}(#t131) in #t132 == null ?{core::num*} let final core::num* #t133 = self::getNum() in let final void #t134 = super.{self::Base::[]=}(#t131, #t133) in #t133 : #t132;
+    core::num* v6 = let final core::String* #t135 = "x" in let final core::num* #t136 = super.{self::Base::[]}(#t135) in #t136 == null ?{core::num*} let final core::double* #t137 = self::getDouble() in let final void #t138 = super.{self::Base::[]=}(#t135, #t137) in #t137 : #t136;
+    core::num* v7 = let final core::String* #t139 = "x" in let final core::num* #t140 = super.{self::Base::[]}(#t139).{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t141 = super.{self::Base::[]=}(#t139, #t140) in #t140;
+    core::num* v8 = let final core::String* #t142 = "x" in let final core::num* #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
+    core::num* v9 = let final core::String* #t145 = "x" in let final core::num* #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
+    core::num* v10 = let final core::String* #t148 = "x" in let final core::num* #t149 = super.{self::Base::[]}(#t148).{core::num::+}(1){(core::num*) →* core::num*} in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
+    core::num* v11 = let final core::String* #t151 = "x" in let final core::num* #t152 = super.{self::Base::[]}(#t151) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*}) in #t152;
   }
 }
 abstract class Test6 extends self::Base<core::num*, core::double*> {
@@ -147,15 +147,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num* v2 = let final core::String* #t157 = "x" in let final core::num* #t158 = self::getNum() as{TypeError} core::double* in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
-    core::double* v3 = let final core::String* #t160 = "x" in let final core::double* #t161 = self::getDouble() in let final void #t162 = super.{self::Base::[]=}(#t160, #t161) in #t161;
-    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = super.{self::Base::[]}(#t163) in #t164 == null ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = super.{self::Base::[]=}(#t163, #t165) in #t165 : #t164;
-    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = super.{self::Base::[]}(#t167) in #t168 == null ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = super.{self::Base::[]=}(#t167, #t169) in #t169 : #t168;
-    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
-    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
-    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
-    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = super.{self::Base::[]}(#t180).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
-    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*) in #t184;
+    core::num* v2 = let final core::String* #t154 = "x" in let final core::num* #t155 = self::getNum() as{TypeError} core::double* in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
+    core::double* v3 = let final core::String* #t157 = "x" in let final core::double* #t158 = self::getDouble() in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
+    core::num* v5 = let final core::String* #t160 = "x" in let final core::num* #t161 = super.{self::Base::[]}(#t160) in #t161 == null ?{core::num*} let final core::num* #t162 = self::getNum() as{TypeError} core::double* in let final void #t163 = super.{self::Base::[]=}(#t160, #t162) in #t162 : #t161;
+    core::num* v6 = let final core::String* #t164 = "x" in let final core::num* #t165 = super.{self::Base::[]}(#t164) in #t165 == null ?{core::num*} let final core::double* #t166 = self::getDouble() in let final void #t167 = super.{self::Base::[]=}(#t164, #t166) in #t166 : #t165;
+    core::num* v7 = let final core::String* #t168 = "x" in let final core::num* #t169 = super.{self::Base::[]}(#t168).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t170 = super.{self::Base::[]=}(#t168, #t169) in #t169;
+    core::num* v8 = let final core::String* #t171 = "x" in let final core::num* #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::num* v9 = let final core::String* #t174 = "x" in let final core::num* #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::num* v10 = let final core::String* #t177 = "x" in let final core::num* #t178 = super.{self::Base::[]}(#t177).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::num* v11 = let final core::String* #t180 = "x" in let final core::num* #t181 = super.{self::Base::[]}(#t180) in let final void #t182 = super.{self::Base::[]=}(#t180, #t181.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*) in #t181;
   }
 }
 abstract class Test7 extends self::Base<core::double*, core::int*> {
@@ -163,22 +163,22 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = let final core::String* #t186 = "x" in let final core::int* #t187 = self::getInt() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
-    core::num* v2 = let final core::String* #t189 = "x" in let final core::num* #t190 = self::getNum() as{TypeError} core::int* in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
-    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = super.{self::Base::[]}(#t192) in #t193 == null ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
-    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = super.{self::Base::[]}(#t196) in #t197 == null ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
-    core::double* v7 = let final core::String* #t200 = "x" in let final core::double* #t201 = let final Never* #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::int* v1 = let final core::String* #t183 = "x" in let final core::int* #t184 = self::getInt() in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
+    core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
+    core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = super.{self::Base::[]}(#t189) in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
+    core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = super.{self::Base::[]}(#t193) in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getInt();
-                                 ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
-    core::double* v8 = let final core::String* #t204 = "x" in let final core::double* #t205 = let final Never* #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                 ^" in super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getNum();
-                                 ^" in super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
-    core::double* v10 = let final core::String* #t208 = "x" in let final core::double* #t209 = let final Never* #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                 ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-                                                       ^" in super.{self::Base::[]}(#t208).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
-    core::double* v11 = let final core::String* #t212 = "x" in let final core::double* #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final Never* #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                                       ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         ['x'] /*@target=double.+*/ ++;
-                                   ^" in #t213.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t213;
+                                   ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t207;
   }
 }
 abstract class Test8 extends self::Base<core::double*, core::num*> {
@@ -186,17 +186,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = let final core::String* #t216 = "x" in let final core::int* #t217 = self::getInt() in let final void #t218 = super.{self::Base::[]=}(#t216, #t217) in #t217;
-    core::num* v2 = let final core::String* #t219 = "x" in let final core::num* #t220 = self::getNum() in let final void #t221 = super.{self::Base::[]=}(#t219, #t220) in #t220;
-    core::double* v3 = let final core::String* #t222 = "x" in let final core::double* #t223 = self::getDouble() in let final void #t224 = super.{self::Base::[]=}(#t222, #t223) in #t223;
-    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = super.{self::Base::[]}(#t225) in #t226 == null ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = super.{self::Base::[]=}(#t225, #t227) in #t227 : #t226;
-    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = super.{self::Base::[]}(#t229) in #t230 == null ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = super.{self::Base::[]=}(#t229, #t231) in #t231 : #t230;
-    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = super.{self::Base::[]}(#t233) in #t234 == null ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = super.{self::Base::[]=}(#t233, #t235) in #t235 : #t234;
-    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = super.{self::Base::[]}(#t237).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t239 = super.{self::Base::[]=}(#t237, #t238) in #t238;
-    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = super.{self::Base::[]}(#t240).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t242 = super.{self::Base::[]=}(#t240, #t241) in #t241;
-    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = super.{self::Base::[]}(#t243).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t245 = super.{self::Base::[]=}(#t243, #t244) in #t244;
-    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = super.{self::Base::[]}(#t246).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t248 = super.{self::Base::[]=}(#t246, #t247) in #t247;
-    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = super.{self::Base::[]}(#t249) in let final void #t251 = super.{self::Base::[]=}(#t249, #t250.{core::double::+}(1){(core::num*) →* core::double*}) in #t250;
+    core::int* v1 = let final core::String* #t209 = "x" in let final core::int* #t210 = self::getInt() in let final void #t211 = super.{self::Base::[]=}(#t209, #t210) in #t210;
+    core::num* v2 = let final core::String* #t212 = "x" in let final core::num* #t213 = self::getNum() in let final void #t214 = super.{self::Base::[]=}(#t212, #t213) in #t213;
+    core::double* v3 = let final core::String* #t215 = "x" in let final core::double* #t216 = self::getDouble() in let final void #t217 = super.{self::Base::[]=}(#t215, #t216) in #t216;
+    core::num* v4 = let final core::String* #t218 = "x" in let final core::double* #t219 = super.{self::Base::[]}(#t218) in #t219 == null ?{core::num*} let final core::int* #t220 = self::getInt() in let final void #t221 = super.{self::Base::[]=}(#t218, #t220) in #t220 : #t219;
+    core::num* v5 = let final core::String* #t222 = "x" in let final core::double* #t223 = super.{self::Base::[]}(#t222) in #t223 == null ?{core::num*} let final core::num* #t224 = self::getNum() in let final void #t225 = super.{self::Base::[]=}(#t222, #t224) in #t224 : #t223;
+    core::double* v6 = let final core::String* #t226 = "x" in let final core::double* #t227 = super.{self::Base::[]}(#t226) in #t227 == null ?{core::double*} let final core::double* #t228 = self::getDouble() in let final void #t229 = super.{self::Base::[]=}(#t226, #t228) in #t228 : #t227;
+    core::double* v7 = let final core::String* #t230 = "x" in let final core::double* #t231 = super.{self::Base::[]}(#t230).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t232 = super.{self::Base::[]=}(#t230, #t231) in #t231;
+    core::double* v8 = let final core::String* #t233 = "x" in let final core::double* #t234 = super.{self::Base::[]}(#t233).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t235 = super.{self::Base::[]=}(#t233, #t234) in #t234;
+    core::double* v9 = let final core::String* #t236 = "x" in let final core::double* #t237 = super.{self::Base::[]}(#t236).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t238 = super.{self::Base::[]=}(#t236, #t237) in #t237;
+    core::double* v10 = let final core::String* #t239 = "x" in let final core::double* #t240 = super.{self::Base::[]}(#t239).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t241 = super.{self::Base::[]=}(#t239, #t240) in #t240;
+    core::double* v11 = let final core::String* #t242 = "x" in let final core::double* #t243 = super.{self::Base::[]}(#t242) in let final void #t244 = super.{self::Base::[]=}(#t242, #t243.{core::double::+}(1){(core::num*) →* core::double*}) in #t243;
   }
 }
 abstract class Test9 extends self::Base<core::double*, core::double*> {
@@ -204,15 +204,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num* v2 = let final core::String* #t252 = "x" in let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = super.{self::Base::[]=}(#t252, #t253) in #t253;
-    core::double* v3 = let final core::String* #t255 = "x" in let final core::double* #t256 = self::getDouble() in let final void #t257 = super.{self::Base::[]=}(#t255, #t256) in #t256;
-    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = super.{self::Base::[]}(#t258) in #t259 == null ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = super.{self::Base::[]=}(#t258, #t260) in #t260 : #t259;
-    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = super.{self::Base::[]}(#t262) in #t263 == null ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = super.{self::Base::[]=}(#t262, #t264) in #t264 : #t263;
-    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = super.{self::Base::[]}(#t266).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t268 = super.{self::Base::[]=}(#t266, #t267) in #t267;
-    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = super.{self::Base::[]}(#t269).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t271 = super.{self::Base::[]=}(#t269, #t270) in #t270;
-    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = super.{self::Base::[]}(#t272).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t274 = super.{self::Base::[]=}(#t272, #t273) in #t273;
-    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = super.{self::Base::[]}(#t275).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t277 = super.{self::Base::[]=}(#t275, #t276) in #t276;
-    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = super.{self::Base::[]}(#t278) in let final void #t280 = super.{self::Base::[]=}(#t278, #t279.{core::double::+}(1){(core::num*) →* core::double*}) in #t279;
+    core::num* v2 = let final core::String* #t245 = "x" in let final core::num* #t246 = self::getNum() as{TypeError} core::double* in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
+    core::double* v3 = let final core::String* #t248 = "x" in let final core::double* #t249 = self::getDouble() in let final void #t250 = super.{self::Base::[]=}(#t248, #t249) in #t249;
+    core::num* v5 = let final core::String* #t251 = "x" in let final core::double* #t252 = super.{self::Base::[]}(#t251) in #t252 == null ?{core::num*} let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = super.{self::Base::[]=}(#t251, #t253) in #t253 : #t252;
+    core::double* v6 = let final core::String* #t255 = "x" in let final core::double* #t256 = super.{self::Base::[]}(#t255) in #t256 == null ?{core::double*} let final core::double* #t257 = self::getDouble() in let final void #t258 = super.{self::Base::[]=}(#t255, #t257) in #t257 : #t256;
+    core::double* v7 = let final core::String* #t259 = "x" in let final core::double* #t260 = super.{self::Base::[]}(#t259).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t261 = super.{self::Base::[]=}(#t259, #t260) in #t260;
+    core::double* v8 = let final core::String* #t262 = "x" in let final core::double* #t263 = super.{self::Base::[]}(#t262).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t264 = super.{self::Base::[]=}(#t262, #t263) in #t263;
+    core::double* v9 = let final core::String* #t265 = "x" in let final core::double* #t266 = super.{self::Base::[]}(#t265).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t267 = super.{self::Base::[]=}(#t265, #t266) in #t266;
+    core::double* v10 = let final core::String* #t268 = "x" in let final core::double* #t269 = super.{self::Base::[]}(#t268).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t270 = super.{self::Base::[]=}(#t268, #t269) in #t269;
+    core::double* v11 = let final core::String* #t271 = "x" in let final core::double* #t272 = super.{self::Base::[]}(#t271) in let final void #t273 = super.{self::Base::[]=}(#t271, #t272.{core::double::+}(1){(core::num*) →* core::double*}) in #t272;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
index 7648761..99a0822 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
@@ -101,17 +101,17 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67){(core::String*, core::double*) →* void} in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69){(core::String*) →* core::int*} in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71){(core::String*, core::double*) →* void} in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73){(core::String*) →* core::int*} in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75){(core::String*, core::double*) →* void} in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = let final Never* #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ += getInt();
-                          ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
-    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = this.{self::Test3::[]}(#t81){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82){(core::String*, core::double*) →* void} in #t82;
-    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = this.{self::Test3::[]}(#t84){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85){(core::String*, core::double*) →* void} in #t85;
-    core::int* v10 = let final core::String* #t87 = "x" in let final core::int* #t88 = let final Never* #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                          ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
+    core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = this.{self::Test3::[]}(#t80){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = this.{self::Test3::[]=}(#t80, #t81){(core::String*, core::double*) →* void} in #t81;
+    core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = this.{self::Test3::[]}(#t83){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = this.{self::Test3::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-                                                 ^" in this.{self::Test3::[]}(#t87){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
-    core::int* v11 = let final core::String* #t91 = "x" in let final core::int* #t92 = this.{self::Test3::[]}(#t91){(core::String*) →* core::int*} in let final void #t93 = this.{self::Test3::[]=}(#t91, let final Never* #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                                                 ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ ++;
-                          ^" in #t92.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t92;
+                          ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t90;
   }
   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
@@ -131,14 +131,14 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::int* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t95 = "x" in let final core::int* #t96 = self::getInt() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96){(core::String*, core::int*) →* void} in #t96;
-    core::num* v2 = let final core::String* #t98 = "x" in let final core::num* #t99 = self::getNum() as{TypeError} core::int* in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99){(core::String*, core::int*) →* void} in #t99;
-    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = this.{self::Test4::[]}(#t101){(core::String*) →* core::num*} in #t102 == null ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = this.{self::Test4::[]=}(#t101, #t103){(core::String*, core::int*) →* void} in #t103 : #t102;
-    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = this.{self::Test4::[]}(#t105){(core::String*) →* core::num*} in #t106 == null ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = this.{self::Test4::[]=}(#t105, #t107){(core::String*, core::int*) →* void} in #t107 : #t106;
-    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = this.{self::Test4::[]}(#t109){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110){(core::String*, core::int*) →* void} in #t110;
-    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = this.{self::Test4::[]}(#t112){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113){(core::String*, core::int*) →* void} in #t113;
-    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = this.{self::Test4::[]}(#t115){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116){(core::String*, core::int*) →* void} in #t116;
-    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = this.{self::Test4::[]}(#t118){(core::String*) →* core::num*} in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t119;
+    core::int* v1 = let final core::String* #t92 = "x" in let final core::int* #t93 = self::getInt() in let final void #t94 = this.{self::Test4::[]=}(#t92, #t93){(core::String*, core::int*) →* void} in #t93;
+    core::num* v2 = let final core::String* #t95 = "x" in let final core::num* #t96 = self::getNum() as{TypeError} core::int* in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96){(core::String*, core::int*) →* void} in #t96;
+    core::num* v4 = let final core::String* #t98 = "x" in let final core::num* #t99 = this.{self::Test4::[]}(#t98){(core::String*) →* core::num*} in #t99 == null ?{core::num*} let final core::int* #t100 = self::getInt() in let final void #t101 = this.{self::Test4::[]=}(#t98, #t100){(core::String*, core::int*) →* void} in #t100 : #t99;
+    core::num* v5 = let final core::String* #t102 = "x" in let final core::num* #t103 = this.{self::Test4::[]}(#t102){(core::String*) →* core::num*} in #t103 == null ?{core::num*} let final core::num* #t104 = self::getNum() as{TypeError} core::int* in let final void #t105 = this.{self::Test4::[]=}(#t102, #t104){(core::String*, core::int*) →* void} in #t104 : #t103;
+    core::num* v7 = let final core::String* #t106 = "x" in let final core::num* #t107 = this.{self::Test4::[]}(#t106){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t108 = this.{self::Test4::[]=}(#t106, #t107){(core::String*, core::int*) →* void} in #t107;
+    core::num* v8 = let final core::String* #t109 = "x" in let final core::num* #t110 = this.{self::Test4::[]}(#t109){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110){(core::String*, core::int*) →* void} in #t110;
+    core::num* v10 = let final core::String* #t112 = "x" in let final core::num* #t113 = this.{self::Test4::[]}(#t112){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113){(core::String*, core::int*) →* void} in #t113;
+    core::num* v11 = let final core::String* #t115 = "x" in let final core::num* #t116 = this.{self::Test4::[]}(#t115){(core::String*) →* core::num*} in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t116;
   }
   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
@@ -158,17 +158,17 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::num* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122){(core::String*, core::num*) →* void} in #t122;
-    core::num* v2 = let final core::String* #t124 = "x" in let final core::num* #t125 = self::getNum() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125){(core::String*, core::num*) →* void} in #t125;
-    core::double* v3 = let final core::String* #t127 = "x" in let final core::double* #t128 = self::getDouble() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128){(core::String*, core::num*) →* void} in #t128;
-    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = this.{self::Test5::[]}(#t130){(core::String*) →* core::num*} in #t131 == null ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = this.{self::Test5::[]=}(#t130, #t132){(core::String*, core::num*) →* void} in #t132 : #t131;
-    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = this.{self::Test5::[]}(#t134){(core::String*) →* core::num*} in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = this.{self::Test5::[]=}(#t134, #t136){(core::String*, core::num*) →* void} in #t136 : #t135;
-    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = this.{self::Test5::[]}(#t138){(core::String*) →* core::num*} in #t139 == null ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = this.{self::Test5::[]=}(#t138, #t140){(core::String*, core::num*) →* void} in #t140 : #t139;
-    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = this.{self::Test5::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143){(core::String*, core::num*) →* void} in #t143;
-    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = this.{self::Test5::[]}(#t145){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146){(core::String*, core::num*) →* void} in #t146;
-    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = this.{self::Test5::[]}(#t148){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149){(core::String*, core::num*) →* void} in #t149;
-    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = this.{self::Test5::[]}(#t151){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152){(core::String*, core::num*) →* void} in #t152;
-    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = this.{self::Test5::[]}(#t154){(core::String*) →* core::num*} in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t155;
+    core::int* v1 = let final core::String* #t118 = "x" in let final core::int* #t119 = self::getInt() in let final void #t120 = this.{self::Test5::[]=}(#t118, #t119){(core::String*, core::num*) →* void} in #t119;
+    core::num* v2 = let final core::String* #t121 = "x" in let final core::num* #t122 = self::getNum() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122){(core::String*, core::num*) →* void} in #t122;
+    core::double* v3 = let final core::String* #t124 = "x" in let final core::double* #t125 = self::getDouble() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125){(core::String*, core::num*) →* void} in #t125;
+    core::num* v4 = let final core::String* #t127 = "x" in let final core::num* #t128 = this.{self::Test5::[]}(#t127){(core::String*) →* core::num*} in #t128 == null ?{core::num*} let final core::int* #t129 = self::getInt() in let final void #t130 = this.{self::Test5::[]=}(#t127, #t129){(core::String*, core::num*) →* void} in #t129 : #t128;
+    core::num* v5 = let final core::String* #t131 = "x" in let final core::num* #t132 = this.{self::Test5::[]}(#t131){(core::String*) →* core::num*} in #t132 == null ?{core::num*} let final core::num* #t133 = self::getNum() in let final void #t134 = this.{self::Test5::[]=}(#t131, #t133){(core::String*, core::num*) →* void} in #t133 : #t132;
+    core::num* v6 = let final core::String* #t135 = "x" in let final core::num* #t136 = this.{self::Test5::[]}(#t135){(core::String*) →* core::num*} in #t136 == null ?{core::num*} let final core::double* #t137 = self::getDouble() in let final void #t138 = this.{self::Test5::[]=}(#t135, #t137){(core::String*, core::num*) →* void} in #t137 : #t136;
+    core::num* v7 = let final core::String* #t139 = "x" in let final core::num* #t140 = this.{self::Test5::[]}(#t139){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t141 = this.{self::Test5::[]=}(#t139, #t140){(core::String*, core::num*) →* void} in #t140;
+    core::num* v8 = let final core::String* #t142 = "x" in let final core::num* #t143 = this.{self::Test5::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143){(core::String*, core::num*) →* void} in #t143;
+    core::num* v9 = let final core::String* #t145 = "x" in let final core::num* #t146 = this.{self::Test5::[]}(#t145){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146){(core::String*, core::num*) →* void} in #t146;
+    core::num* v10 = let final core::String* #t148 = "x" in let final core::num* #t149 = this.{self::Test5::[]}(#t148){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149){(core::String*, core::num*) →* void} in #t149;
+    core::num* v11 = let final core::String* #t151 = "x" in let final core::num* #t152 = this.{self::Test5::[]}(#t151){(core::String*) →* core::num*} in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t152;
   }
   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
@@ -188,15 +188,15 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::double* v) → void;
   method test() → void {
-    core::num* v2 = let final core::String* #t157 = "x" in let final core::num* #t158 = self::getNum() as{TypeError} core::double* in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158){(core::String*, core::double*) →* void} in #t158;
-    core::double* v3 = let final core::String* #t160 = "x" in let final core::double* #t161 = self::getDouble() in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161){(core::String*, core::double*) →* void} in #t161;
-    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = this.{self::Test6::[]}(#t163){(core::String*) →* core::num*} in #t164 == null ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = this.{self::Test6::[]=}(#t163, #t165){(core::String*, core::double*) →* void} in #t165 : #t164;
-    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = this.{self::Test6::[]}(#t167){(core::String*) →* core::num*} in #t168 == null ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = this.{self::Test6::[]=}(#t167, #t169){(core::String*, core::double*) →* void} in #t169 : #t168;
-    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = this.{self::Test6::[]}(#t171){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172){(core::String*, core::double*) →* void} in #t172;
-    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = this.{self::Test6::[]}(#t174){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175){(core::String*, core::double*) →* void} in #t175;
-    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = this.{self::Test6::[]}(#t177){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178){(core::String*, core::double*) →* void} in #t178;
-    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = this.{self::Test6::[]}(#t180){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181){(core::String*, core::double*) →* void} in #t181;
-    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = this.{self::Test6::[]}(#t183){(core::String*) →* core::num*} in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t184;
+    core::num* v2 = let final core::String* #t154 = "x" in let final core::num* #t155 = self::getNum() as{TypeError} core::double* in let final void #t156 = this.{self::Test6::[]=}(#t154, #t155){(core::String*, core::double*) →* void} in #t155;
+    core::double* v3 = let final core::String* #t157 = "x" in let final core::double* #t158 = self::getDouble() in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158){(core::String*, core::double*) →* void} in #t158;
+    core::num* v5 = let final core::String* #t160 = "x" in let final core::num* #t161 = this.{self::Test6::[]}(#t160){(core::String*) →* core::num*} in #t161 == null ?{core::num*} let final core::num* #t162 = self::getNum() as{TypeError} core::double* in let final void #t163 = this.{self::Test6::[]=}(#t160, #t162){(core::String*, core::double*) →* void} in #t162 : #t161;
+    core::num* v6 = let final core::String* #t164 = "x" in let final core::num* #t165 = this.{self::Test6::[]}(#t164){(core::String*) →* core::num*} in #t165 == null ?{core::num*} let final core::double* #t166 = self::getDouble() in let final void #t167 = this.{self::Test6::[]=}(#t164, #t166){(core::String*, core::double*) →* void} in #t166 : #t165;
+    core::num* v7 = let final core::String* #t168 = "x" in let final core::num* #t169 = this.{self::Test6::[]}(#t168){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t170 = this.{self::Test6::[]=}(#t168, #t169){(core::String*, core::double*) →* void} in #t169;
+    core::num* v8 = let final core::String* #t171 = "x" in let final core::num* #t172 = this.{self::Test6::[]}(#t171){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172){(core::String*, core::double*) →* void} in #t172;
+    core::num* v9 = let final core::String* #t174 = "x" in let final core::num* #t175 = this.{self::Test6::[]}(#t174){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175){(core::String*, core::double*) →* void} in #t175;
+    core::num* v10 = let final core::String* #t177 = "x" in let final core::num* #t178 = this.{self::Test6::[]}(#t177){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178){(core::String*, core::double*) →* void} in #t178;
+    core::num* v11 = let final core::String* #t180 = "x" in let final core::num* #t181 = this.{self::Test6::[]}(#t180){(core::String*) →* core::num*} in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t181;
   }
   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
@@ -216,22 +216,22 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::int* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t186 = "x" in let final core::int* #t187 = self::getInt() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
-    core::num* v2 = let final core::String* #t189 = "x" in let final core::num* #t190 = self::getNum() as{TypeError} core::int* in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190){(core::String*, core::int*) →* void} in #t190;
-    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = this.{self::Test7::[]}(#t192){(core::String*) →* core::double*} in #t193 == null ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194){(core::String*, core::int*) →* void} in #t194 : #t193;
-    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = this.{self::Test7::[]}(#t196){(core::String*) →* core::double*} in #t197 == null ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198){(core::String*, core::int*) →* void} in #t198 : #t197;
-    core::double* v7 = let final core::String* #t200 = "x" in let final core::double* #t201 = let final Never* #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::int* v1 = let final core::String* #t183 = "x" in let final core::int* #t184 = self::getInt() in let final void #t185 = this.{self::Test7::[]=}(#t183, #t184){(core::String*, core::int*) →* void} in #t184;
+    core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
+    core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = this.{self::Test7::[]}(#t189){(core::String*) →* core::double*} in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191){(core::String*, core::int*) →* void} in #t191 : #t190;
+    core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = this.{self::Test7::[]}(#t193){(core::String*) →* core::double*} in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195){(core::String*, core::int*) →* void} in #t195 : #t194;
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getInt();
-                             ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
-    core::double* v8 = let final core::String* #t204 = "x" in let final core::double* #t205 = let final Never* #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                             ^" in this.{self::Test7::[]}(#t197){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198){(core::String*, core::int*) →* void} in #t198;
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getNum();
-                             ^" in this.{self::Test7::[]}(#t204){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205){(core::String*, core::int*) →* void} in #t205;
-    core::double* v10 = let final core::String* #t208 = "x" in let final core::double* #t209 = let final Never* #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                             ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-                                                       ^" in this.{self::Test7::[]}(#t208){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209){(core::String*, core::int*) →* void} in #t209;
-    core::double* v11 = let final core::String* #t212 = "x" in let final core::double* #t213 = this.{self::Test7::[]}(#t212){(core::String*) →* core::double*} in let final void #t214 = this.{self::Test7::[]=}(#t212, let final Never* #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                                       ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ ++;
-                             ^" in #t213.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t213;
+                             ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t207;
   }
   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
@@ -251,17 +251,17 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::num* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t216 = "x" in let final core::int* #t217 = self::getInt() in let final void #t218 = this.{self::Test8::[]=}(#t216, #t217){(core::String*, core::num*) →* void} in #t217;
-    core::num* v2 = let final core::String* #t219 = "x" in let final core::num* #t220 = self::getNum() in let final void #t221 = this.{self::Test8::[]=}(#t219, #t220){(core::String*, core::num*) →* void} in #t220;
-    core::double* v3 = let final core::String* #t222 = "x" in let final core::double* #t223 = self::getDouble() in let final void #t224 = this.{self::Test8::[]=}(#t222, #t223){(core::String*, core::num*) →* void} in #t223;
-    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = this.{self::Test8::[]}(#t225){(core::String*) →* core::double*} in #t226 == null ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = this.{self::Test8::[]=}(#t225, #t227){(core::String*, core::num*) →* void} in #t227 : #t226;
-    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = this.{self::Test8::[]}(#t229){(core::String*) →* core::double*} in #t230 == null ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = this.{self::Test8::[]=}(#t229, #t231){(core::String*, core::num*) →* void} in #t231 : #t230;
-    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = this.{self::Test8::[]}(#t233){(core::String*) →* core::double*} in #t234 == null ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = this.{self::Test8::[]=}(#t233, #t235){(core::String*, core::num*) →* void} in #t235 : #t234;
-    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = this.{self::Test8::[]}(#t237){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t239 = this.{self::Test8::[]=}(#t237, #t238){(core::String*, core::num*) →* void} in #t238;
-    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = this.{self::Test8::[]}(#t240){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t242 = this.{self::Test8::[]=}(#t240, #t241){(core::String*, core::num*) →* void} in #t241;
-    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = this.{self::Test8::[]}(#t243){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t245 = this.{self::Test8::[]=}(#t243, #t244){(core::String*, core::num*) →* void} in #t244;
-    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = this.{self::Test8::[]}(#t246){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t248 = this.{self::Test8::[]=}(#t246, #t247){(core::String*, core::num*) →* void} in #t247;
-    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = this.{self::Test8::[]}(#t249){(core::String*) →* core::double*} in let final void #t251 = this.{self::Test8::[]=}(#t249, #t250.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t250;
+    core::int* v1 = let final core::String* #t209 = "x" in let final core::int* #t210 = self::getInt() in let final void #t211 = this.{self::Test8::[]=}(#t209, #t210){(core::String*, core::num*) →* void} in #t210;
+    core::num* v2 = let final core::String* #t212 = "x" in let final core::num* #t213 = self::getNum() in let final void #t214 = this.{self::Test8::[]=}(#t212, #t213){(core::String*, core::num*) →* void} in #t213;
+    core::double* v3 = let final core::String* #t215 = "x" in let final core::double* #t216 = self::getDouble() in let final void #t217 = this.{self::Test8::[]=}(#t215, #t216){(core::String*, core::num*) →* void} in #t216;
+    core::num* v4 = let final core::String* #t218 = "x" in let final core::double* #t219 = this.{self::Test8::[]}(#t218){(core::String*) →* core::double*} in #t219 == null ?{core::num*} let final core::int* #t220 = self::getInt() in let final void #t221 = this.{self::Test8::[]=}(#t218, #t220){(core::String*, core::num*) →* void} in #t220 : #t219;
+    core::num* v5 = let final core::String* #t222 = "x" in let final core::double* #t223 = this.{self::Test8::[]}(#t222){(core::String*) →* core::double*} in #t223 == null ?{core::num*} let final core::num* #t224 = self::getNum() in let final void #t225 = this.{self::Test8::[]=}(#t222, #t224){(core::String*, core::num*) →* void} in #t224 : #t223;
+    core::double* v6 = let final core::String* #t226 = "x" in let final core::double* #t227 = this.{self::Test8::[]}(#t226){(core::String*) →* core::double*} in #t227 == null ?{core::double*} let final core::double* #t228 = self::getDouble() in let final void #t229 = this.{self::Test8::[]=}(#t226, #t228){(core::String*, core::num*) →* void} in #t228 : #t227;
+    core::double* v7 = let final core::String* #t230 = "x" in let final core::double* #t231 = this.{self::Test8::[]}(#t230){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t232 = this.{self::Test8::[]=}(#t230, #t231){(core::String*, core::num*) →* void} in #t231;
+    core::double* v8 = let final core::String* #t233 = "x" in let final core::double* #t234 = this.{self::Test8::[]}(#t233){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t235 = this.{self::Test8::[]=}(#t233, #t234){(core::String*, core::num*) →* void} in #t234;
+    core::double* v9 = let final core::String* #t236 = "x" in let final core::double* #t237 = this.{self::Test8::[]}(#t236){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t238 = this.{self::Test8::[]=}(#t236, #t237){(core::String*, core::num*) →* void} in #t237;
+    core::double* v10 = let final core::String* #t239 = "x" in let final core::double* #t240 = this.{self::Test8::[]}(#t239){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t241 = this.{self::Test8::[]=}(#t239, #t240){(core::String*, core::num*) →* void} in #t240;
+    core::double* v11 = let final core::String* #t242 = "x" in let final core::double* #t243 = this.{self::Test8::[]}(#t242){(core::String*) →* core::double*} in let final void #t244 = this.{self::Test8::[]=}(#t242, #t243.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t243;
   }
   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
@@ -281,15 +281,15 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::double* v) → void;
   method test() → void {
-    core::num* v2 = let final core::String* #t252 = "x" in let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = this.{self::Test9::[]=}(#t252, #t253){(core::String*, core::double*) →* void} in #t253;
-    core::double* v3 = let final core::String* #t255 = "x" in let final core::double* #t256 = self::getDouble() in let final void #t257 = this.{self::Test9::[]=}(#t255, #t256){(core::String*, core::double*) →* void} in #t256;
-    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = this.{self::Test9::[]}(#t258){(core::String*) →* core::double*} in #t259 == null ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = this.{self::Test9::[]=}(#t258, #t260){(core::String*, core::double*) →* void} in #t260 : #t259;
-    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = this.{self::Test9::[]}(#t262){(core::String*) →* core::double*} in #t263 == null ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = this.{self::Test9::[]=}(#t262, #t264){(core::String*, core::double*) →* void} in #t264 : #t263;
-    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = this.{self::Test9::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t268 = this.{self::Test9::[]=}(#t266, #t267){(core::String*, core::double*) →* void} in #t267;
-    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = this.{self::Test9::[]}(#t269){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t271 = this.{self::Test9::[]=}(#t269, #t270){(core::String*, core::double*) →* void} in #t270;
-    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = this.{self::Test9::[]}(#t272){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t274 = this.{self::Test9::[]=}(#t272, #t273){(core::String*, core::double*) →* void} in #t273;
-    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = this.{self::Test9::[]}(#t275){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t277 = this.{self::Test9::[]=}(#t275, #t276){(core::String*, core::double*) →* void} in #t276;
-    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = this.{self::Test9::[]}(#t278){(core::String*) →* core::double*} in let final void #t280 = this.{self::Test9::[]=}(#t278, #t279.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t279;
+    core::num* v2 = let final core::String* #t245 = "x" in let final core::num* #t246 = self::getNum() as{TypeError} core::double* in let final void #t247 = this.{self::Test9::[]=}(#t245, #t246){(core::String*, core::double*) →* void} in #t246;
+    core::double* v3 = let final core::String* #t248 = "x" in let final core::double* #t249 = self::getDouble() in let final void #t250 = this.{self::Test9::[]=}(#t248, #t249){(core::String*, core::double*) →* void} in #t249;
+    core::num* v5 = let final core::String* #t251 = "x" in let final core::double* #t252 = this.{self::Test9::[]}(#t251){(core::String*) →* core::double*} in #t252 == null ?{core::num*} let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = this.{self::Test9::[]=}(#t251, #t253){(core::String*, core::double*) →* void} in #t253 : #t252;
+    core::double* v6 = let final core::String* #t255 = "x" in let final core::double* #t256 = this.{self::Test9::[]}(#t255){(core::String*) →* core::double*} in #t256 == null ?{core::double*} let final core::double* #t257 = self::getDouble() in let final void #t258 = this.{self::Test9::[]=}(#t255, #t257){(core::String*, core::double*) →* void} in #t257 : #t256;
+    core::double* v7 = let final core::String* #t259 = "x" in let final core::double* #t260 = this.{self::Test9::[]}(#t259){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t261 = this.{self::Test9::[]=}(#t259, #t260){(core::String*, core::double*) →* void} in #t260;
+    core::double* v8 = let final core::String* #t262 = "x" in let final core::double* #t263 = this.{self::Test9::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t264 = this.{self::Test9::[]=}(#t262, #t263){(core::String*, core::double*) →* void} in #t263;
+    core::double* v9 = let final core::String* #t265 = "x" in let final core::double* #t266 = this.{self::Test9::[]}(#t265){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t267 = this.{self::Test9::[]=}(#t265, #t266){(core::String*, core::double*) →* void} in #t266;
+    core::double* v10 = let final core::String* #t268 = "x" in let final core::double* #t269 = this.{self::Test9::[]}(#t268){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t270 = this.{self::Test9::[]=}(#t268, #t269){(core::String*, core::double*) →* void} in #t269;
+    core::double* v11 = let final core::String* #t271 = "x" in let final core::double* #t272 = this.{self::Test9::[]}(#t271){(core::String*) →* core::double*} in let final void #t273 = this.{self::Test9::[]=}(#t271, #t272.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t272;
   }
   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
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
index fcc9cd1..3b91dc5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
@@ -84,92 +84,92 @@
   core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
   core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91){(core::String*) →* core::int*} in #t92 == null ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93){(core::String*, core::double*) →* void} in #t93 : #t92;
   core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96){(core::String*) →* core::int*} in #t97 == null ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98){(core::String*, core::double*) →* void} in #t98 : #t97;
-  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = let final Never* #t103 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
-                                                                         ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
-  core::num* v8 = let final self::Test<core::int*, core::double*>* #t105 = t in let final core::String* #t106 = "x" in let final core::num* #t107 = #t105.{self::Test::[]}(#t106){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107){(core::String*, core::double*) →* void} in #t107;
-  core::double* v9 = let final self::Test<core::int*, core::double*>* #t109 = t in let final core::String* #t110 = "x" in let final core::double* #t111 = #t109.{self::Test::[]}(#t110){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111){(core::String*, core::double*) →* void} in #t111;
-  core::int* v10 = let final self::Test<core::int*, core::double*>* #t113 = t in let final core::String* #t114 = "x" in let final core::int* #t115 = let final Never* #t116 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                                                                         ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t103 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
+  core::num* v8 = let final self::Test<core::int*, core::double*>* #t104 = t in let final core::String* #t105 = "x" in let final core::num* #t106 = #t104.{self::Test::[]}(#t105){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t107 = #t104.{self::Test::[]=}(#t105, #t106){(core::String*, core::double*) →* void} in #t106;
+  core::double* v9 = let final self::Test<core::int*, core::double*>* #t108 = t in let final core::String* #t109 = "x" in let final core::double* #t110 = #t108.{self::Test::[]}(#t109){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t111 = #t108.{self::Test::[]=}(#t109, #t110){(core::String*, core::double*) →* void} in #t110;
+  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
-                        ^" in #t113.{self::Test::[]}(#t114){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115){(core::String*, core::double*) →* void} in #t115;
-  core::int* v11 = let final self::Test<core::int*, core::double*>* #t118 = t in let final core::String* #t119 = "x" in let final core::int* #t120 = #t118.{self::Test::[]}(#t119){(core::String*) →* core::int*} in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final Never* #t122 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                        ^" in #t112.{self::Test::[]}(#t113){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t115 = #t112.{self::Test::[]=}(#t113, #t114){(core::String*, core::double*) →* void} in #t114;
+  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
-                                                                         ^" in #t120.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t120;
+                                                                         ^" in #t118.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t118;
 }
 static method test4(self::Test<core::num*, core::int*>* t) → void {
-  core::int* v1 = let final self::Test<core::num*, core::int*>* #t123 = t in let final core::String* #t124 = "x" in let final core::int* #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125){(core::String*, core::int*) →* void} in #t125;
-  core::num* v2 = let final self::Test<core::num*, core::int*>* #t127 = t in let final core::String* #t128 = "x" in let final core::num* #t129 = self::getNum() as{TypeError} core::int* in let final void #t130 = #t127.{self::Test::[]=}(#t128, #t129){(core::String*, core::int*) →* void} in #t129;
-  core::num* v4 = let final self::Test<core::num*, core::int*>* #t131 = t in let final core::String* #t132 = "x" in let final core::num* #t133 = #t131.{self::Test::[]}(#t132){(core::String*) →* core::num*} in #t133 == null ?{core::num*} let final core::int* #t134 = self::getInt() in let final void #t135 = #t131.{self::Test::[]=}(#t132, #t134){(core::String*, core::int*) →* void} in #t134 : #t133;
-  core::num* v5 = let final self::Test<core::num*, core::int*>* #t136 = t in let final core::String* #t137 = "x" in let final core::num* #t138 = #t136.{self::Test::[]}(#t137){(core::String*) →* core::num*} in #t138 == null ?{core::num*} let final core::num* #t139 = self::getNum() as{TypeError} core::int* in let final void #t140 = #t136.{self::Test::[]=}(#t137, #t139){(core::String*, core::int*) →* void} in #t139 : #t138;
-  core::num* v7 = let final self::Test<core::num*, core::int*>* #t141 = t in let final core::String* #t142 = "x" in let final core::num* #t143 = #t141.{self::Test::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t144 = #t141.{self::Test::[]=}(#t142, #t143){(core::String*, core::int*) →* void} in #t143;
-  core::num* v8 = let final self::Test<core::num*, core::int*>* #t145 = t in let final core::String* #t146 = "x" in let final core::num* #t147 = #t145.{self::Test::[]}(#t146){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t148 = #t145.{self::Test::[]=}(#t146, #t147){(core::String*, core::int*) →* void} in #t147;
-  core::num* v10 = let final self::Test<core::num*, core::int*>* #t149 = t in let final core::String* #t150 = "x" in let final core::num* #t151 = #t149.{self::Test::[]}(#t150){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t152 = #t149.{self::Test::[]=}(#t150, #t151){(core::String*, core::int*) →* void} in #t151;
-  core::num* v11 = let final self::Test<core::num*, core::int*>* #t153 = t in let final core::String* #t154 = "x" in let final core::num* #t155 = #t153.{self::Test::[]}(#t154){(core::String*) →* core::num*} in let final void #t156 = #t153.{self::Test::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t155;
+  core::int* v1 = let final self::Test<core::num*, core::int*>* #t120 = t in let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = #t120.{self::Test::[]=}(#t121, #t122){(core::String*, core::int*) →* void} in #t122;
+  core::num* v2 = let final self::Test<core::num*, core::int*>* #t124 = t in let final core::String* #t125 = "x" in let final core::num* #t126 = self::getNum() as{TypeError} core::int* in let final void #t127 = #t124.{self::Test::[]=}(#t125, #t126){(core::String*, core::int*) →* void} in #t126;
+  core::num* v4 = let final self::Test<core::num*, core::int*>* #t128 = t in let final core::String* #t129 = "x" in let final core::num* #t130 = #t128.{self::Test::[]}(#t129){(core::String*) →* core::num*} in #t130 == null ?{core::num*} let final core::int* #t131 = self::getInt() in let final void #t132 = #t128.{self::Test::[]=}(#t129, #t131){(core::String*, core::int*) →* void} in #t131 : #t130;
+  core::num* v5 = let final self::Test<core::num*, core::int*>* #t133 = t in let final core::String* #t134 = "x" in let final core::num* #t135 = #t133.{self::Test::[]}(#t134){(core::String*) →* core::num*} in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() as{TypeError} core::int* in let final void #t137 = #t133.{self::Test::[]=}(#t134, #t136){(core::String*, core::int*) →* void} in #t136 : #t135;
+  core::num* v7 = let final self::Test<core::num*, core::int*>* #t138 = t in let final core::String* #t139 = "x" in let final core::num* #t140 = #t138.{self::Test::[]}(#t139){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140){(core::String*, core::int*) →* void} in #t140;
+  core::num* v8 = let final self::Test<core::num*, core::int*>* #t142 = t in let final core::String* #t143 = "x" in let final core::num* #t144 = #t142.{self::Test::[]}(#t143){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144){(core::String*, core::int*) →* void} in #t144;
+  core::num* v10 = let final self::Test<core::num*, core::int*>* #t146 = t in let final core::String* #t147 = "x" in let final core::num* #t148 = #t146.{self::Test::[]}(#t147){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148){(core::String*, core::int*) →* void} in #t148;
+  core::num* v11 = let final self::Test<core::num*, core::int*>* #t150 = t in let final core::String* #t151 = "x" in let final core::num* #t152 = #t150.{self::Test::[]}(#t151){(core::String*) →* core::num*} in let final void #t153 = #t150.{self::Test::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t152;
 }
 static method test5(self::Test<core::num*, core::num*>* t) → void {
-  core::int* v1 = let final self::Test<core::num*, core::num*>* #t157 = t in let final core::String* #t158 = "x" in let final core::int* #t159 = self::getInt() in let final void #t160 = #t157.{self::Test::[]=}(#t158, #t159){(core::String*, core::num*) →* void} in #t159;
-  core::num* v2 = let final self::Test<core::num*, core::num*>* #t161 = t in let final core::String* #t162 = "x" in let final core::num* #t163 = self::getNum() in let final void #t164 = #t161.{self::Test::[]=}(#t162, #t163){(core::String*, core::num*) →* void} in #t163;
-  core::double* v3 = let final self::Test<core::num*, core::num*>* #t165 = t in let final core::String* #t166 = "x" in let final core::double* #t167 = self::getDouble() in let final void #t168 = #t165.{self::Test::[]=}(#t166, #t167){(core::String*, core::num*) →* void} in #t167;
-  core::num* v4 = let final self::Test<core::num*, core::num*>* #t169 = t in let final core::String* #t170 = "x" in let final core::num* #t171 = #t169.{self::Test::[]}(#t170){(core::String*) →* core::num*} in #t171 == null ?{core::num*} let final core::int* #t172 = self::getInt() in let final void #t173 = #t169.{self::Test::[]=}(#t170, #t172){(core::String*, core::num*) →* void} in #t172 : #t171;
-  core::num* v5 = let final self::Test<core::num*, core::num*>* #t174 = t in let final core::String* #t175 = "x" in let final core::num* #t176 = #t174.{self::Test::[]}(#t175){(core::String*) →* core::num*} in #t176 == null ?{core::num*} let final core::num* #t177 = self::getNum() in let final void #t178 = #t174.{self::Test::[]=}(#t175, #t177){(core::String*, core::num*) →* void} in #t177 : #t176;
-  core::num* v6 = let final self::Test<core::num*, core::num*>* #t179 = t in let final core::String* #t180 = "x" in let final core::num* #t181 = #t179.{self::Test::[]}(#t180){(core::String*) →* core::num*} in #t181 == null ?{core::num*} let final core::double* #t182 = self::getDouble() in let final void #t183 = #t179.{self::Test::[]=}(#t180, #t182){(core::String*, core::num*) →* void} in #t182 : #t181;
-  core::num* v7 = let final self::Test<core::num*, core::num*>* #t184 = t in let final core::String* #t185 = "x" in let final core::num* #t186 = #t184.{self::Test::[]}(#t185){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186){(core::String*, core::num*) →* void} in #t186;
-  core::num* v8 = let final self::Test<core::num*, core::num*>* #t188 = t in let final core::String* #t189 = "x" in let final core::num* #t190 = #t188.{self::Test::[]}(#t189){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t191 = #t188.{self::Test::[]=}(#t189, #t190){(core::String*, core::num*) →* void} in #t190;
-  core::num* v9 = let final self::Test<core::num*, core::num*>* #t192 = t in let final core::String* #t193 = "x" in let final core::num* #t194 = #t192.{self::Test::[]}(#t193){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t195 = #t192.{self::Test::[]=}(#t193, #t194){(core::String*, core::num*) →* void} in #t194;
-  core::num* v10 = let final self::Test<core::num*, core::num*>* #t196 = t in let final core::String* #t197 = "x" in let final core::num* #t198 = #t196.{self::Test::[]}(#t197){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t199 = #t196.{self::Test::[]=}(#t197, #t198){(core::String*, core::num*) →* void} in #t198;
-  core::num* v11 = let final self::Test<core::num*, core::num*>* #t200 = t in let final core::String* #t201 = "x" in let final core::num* #t202 = #t200.{self::Test::[]}(#t201){(core::String*) →* core::num*} in let final void #t203 = #t200.{self::Test::[]=}(#t201, #t202.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t202;
+  core::int* v1 = let final self::Test<core::num*, core::num*>* #t154 = t in let final core::String* #t155 = "x" in let final core::int* #t156 = self::getInt() in let final void #t157 = #t154.{self::Test::[]=}(#t155, #t156){(core::String*, core::num*) →* void} in #t156;
+  core::num* v2 = let final self::Test<core::num*, core::num*>* #t158 = t in let final core::String* #t159 = "x" in let final core::num* #t160 = self::getNum() in let final void #t161 = #t158.{self::Test::[]=}(#t159, #t160){(core::String*, core::num*) →* void} in #t160;
+  core::double* v3 = let final self::Test<core::num*, core::num*>* #t162 = t in let final core::String* #t163 = "x" in let final core::double* #t164 = self::getDouble() in let final void #t165 = #t162.{self::Test::[]=}(#t163, #t164){(core::String*, core::num*) →* void} in #t164;
+  core::num* v4 = let final self::Test<core::num*, core::num*>* #t166 = t in let final core::String* #t167 = "x" in let final core::num* #t168 = #t166.{self::Test::[]}(#t167){(core::String*) →* core::num*} in #t168 == null ?{core::num*} let final core::int* #t169 = self::getInt() in let final void #t170 = #t166.{self::Test::[]=}(#t167, #t169){(core::String*, core::num*) →* void} in #t169 : #t168;
+  core::num* v5 = let final self::Test<core::num*, core::num*>* #t171 = t in let final core::String* #t172 = "x" in let final core::num* #t173 = #t171.{self::Test::[]}(#t172){(core::String*) →* core::num*} in #t173 == null ?{core::num*} let final core::num* #t174 = self::getNum() in let final void #t175 = #t171.{self::Test::[]=}(#t172, #t174){(core::String*, core::num*) →* void} in #t174 : #t173;
+  core::num* v6 = let final self::Test<core::num*, core::num*>* #t176 = t in let final core::String* #t177 = "x" in let final core::num* #t178 = #t176.{self::Test::[]}(#t177){(core::String*) →* core::num*} in #t178 == null ?{core::num*} let final core::double* #t179 = self::getDouble() in let final void #t180 = #t176.{self::Test::[]=}(#t177, #t179){(core::String*, core::num*) →* void} in #t179 : #t178;
+  core::num* v7 = let final self::Test<core::num*, core::num*>* #t181 = t in let final core::String* #t182 = "x" in let final core::num* #t183 = #t181.{self::Test::[]}(#t182){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t184 = #t181.{self::Test::[]=}(#t182, #t183){(core::String*, core::num*) →* void} in #t183;
+  core::num* v8 = let final self::Test<core::num*, core::num*>* #t185 = t in let final core::String* #t186 = "x" in let final core::num* #t187 = #t185.{self::Test::[]}(#t186){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t188 = #t185.{self::Test::[]=}(#t186, #t187){(core::String*, core::num*) →* void} in #t187;
+  core::num* v9 = let final self::Test<core::num*, core::num*>* #t189 = t in let final core::String* #t190 = "x" in let final core::num* #t191 = #t189.{self::Test::[]}(#t190){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t192 = #t189.{self::Test::[]=}(#t190, #t191){(core::String*, core::num*) →* void} in #t191;
+  core::num* v10 = let final self::Test<core::num*, core::num*>* #t193 = t in let final core::String* #t194 = "x" in let final core::num* #t195 = #t193.{self::Test::[]}(#t194){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t196 = #t193.{self::Test::[]=}(#t194, #t195){(core::String*, core::num*) →* void} in #t195;
+  core::num* v11 = let final self::Test<core::num*, core::num*>* #t197 = t in let final core::String* #t198 = "x" in let final core::num* #t199 = #t197.{self::Test::[]}(#t198){(core::String*) →* core::num*} in let final void #t200 = #t197.{self::Test::[]=}(#t198, #t199.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t199;
 }
 static method test6(self::Test<core::num*, core::double*>* t) → void {
-  core::num* v2 = let final self::Test<core::num*, core::double*>* #t204 = t in let final core::String* #t205 = "x" in let final core::num* #t206 = self::getNum() as{TypeError} core::double* in let final void #t207 = #t204.{self::Test::[]=}(#t205, #t206){(core::String*, core::double*) →* void} in #t206;
-  core::double* v3 = let final self::Test<core::num*, core::double*>* #t208 = t in let final core::String* #t209 = "x" in let final core::double* #t210 = self::getDouble() in let final void #t211 = #t208.{self::Test::[]=}(#t209, #t210){(core::String*, core::double*) →* void} in #t210;
-  core::num* v5 = let final self::Test<core::num*, core::double*>* #t212 = t in let final core::String* #t213 = "x" in let final core::num* #t214 = #t212.{self::Test::[]}(#t213){(core::String*) →* core::num*} in #t214 == null ?{core::num*} let final core::num* #t215 = self::getNum() as{TypeError} core::double* in let final void #t216 = #t212.{self::Test::[]=}(#t213, #t215){(core::String*, core::double*) →* void} in #t215 : #t214;
-  core::num* v6 = let final self::Test<core::num*, core::double*>* #t217 = t in let final core::String* #t218 = "x" in let final core::num* #t219 = #t217.{self::Test::[]}(#t218){(core::String*) →* core::num*} in #t219 == null ?{core::num*} let final core::double* #t220 = self::getDouble() in let final void #t221 = #t217.{self::Test::[]=}(#t218, #t220){(core::String*, core::double*) →* void} in #t220 : #t219;
-  core::num* v7 = let final self::Test<core::num*, core::double*>* #t222 = t in let final core::String* #t223 = "x" in let final core::num* #t224 = #t222.{self::Test::[]}(#t223){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t225 = #t222.{self::Test::[]=}(#t223, #t224){(core::String*, core::double*) →* void} in #t224;
-  core::num* v8 = let final self::Test<core::num*, core::double*>* #t226 = t in let final core::String* #t227 = "x" in let final core::num* #t228 = #t226.{self::Test::[]}(#t227){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t229 = #t226.{self::Test::[]=}(#t227, #t228){(core::String*, core::double*) →* void} in #t228;
-  core::num* v9 = let final self::Test<core::num*, core::double*>* #t230 = t in let final core::String* #t231 = "x" in let final core::num* #t232 = #t230.{self::Test::[]}(#t231){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t233 = #t230.{self::Test::[]=}(#t231, #t232){(core::String*, core::double*) →* void} in #t232;
-  core::num* v10 = let final self::Test<core::num*, core::double*>* #t234 = t in let final core::String* #t235 = "x" in let final core::num* #t236 = #t234.{self::Test::[]}(#t235){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t237 = #t234.{self::Test::[]=}(#t235, #t236){(core::String*, core::double*) →* void} in #t236;
-  core::num* v11 = let final self::Test<core::num*, core::double*>* #t238 = t in let final core::String* #t239 = "x" in let final core::num* #t240 = #t238.{self::Test::[]}(#t239){(core::String*) →* core::num*} in let final void #t241 = #t238.{self::Test::[]=}(#t239, #t240.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t240;
+  core::num* v2 = let final self::Test<core::num*, core::double*>* #t201 = t in let final core::String* #t202 = "x" in let final core::num* #t203 = self::getNum() as{TypeError} core::double* in let final void #t204 = #t201.{self::Test::[]=}(#t202, #t203){(core::String*, core::double*) →* void} in #t203;
+  core::double* v3 = let final self::Test<core::num*, core::double*>* #t205 = t in let final core::String* #t206 = "x" in let final core::double* #t207 = self::getDouble() in let final void #t208 = #t205.{self::Test::[]=}(#t206, #t207){(core::String*, core::double*) →* void} in #t207;
+  core::num* v5 = let final self::Test<core::num*, core::double*>* #t209 = t in let final core::String* #t210 = "x" in let final core::num* #t211 = #t209.{self::Test::[]}(#t210){(core::String*) →* core::num*} in #t211 == null ?{core::num*} let final core::num* #t212 = self::getNum() as{TypeError} core::double* in let final void #t213 = #t209.{self::Test::[]=}(#t210, #t212){(core::String*, core::double*) →* void} in #t212 : #t211;
+  core::num* v6 = let final self::Test<core::num*, core::double*>* #t214 = t in let final core::String* #t215 = "x" in let final core::num* #t216 = #t214.{self::Test::[]}(#t215){(core::String*) →* core::num*} in #t216 == null ?{core::num*} let final core::double* #t217 = self::getDouble() in let final void #t218 = #t214.{self::Test::[]=}(#t215, #t217){(core::String*, core::double*) →* void} in #t217 : #t216;
+  core::num* v7 = let final self::Test<core::num*, core::double*>* #t219 = t in let final core::String* #t220 = "x" in let final core::num* #t221 = #t219.{self::Test::[]}(#t220){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221){(core::String*, core::double*) →* void} in #t221;
+  core::num* v8 = let final self::Test<core::num*, core::double*>* #t223 = t in let final core::String* #t224 = "x" in let final core::num* #t225 = #t223.{self::Test::[]}(#t224){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225){(core::String*, core::double*) →* void} in #t225;
+  core::num* v9 = let final self::Test<core::num*, core::double*>* #t227 = t in let final core::String* #t228 = "x" in let final core::num* #t229 = #t227.{self::Test::[]}(#t228){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t230 = #t227.{self::Test::[]=}(#t228, #t229){(core::String*, core::double*) →* void} in #t229;
+  core::num* v10 = let final self::Test<core::num*, core::double*>* #t231 = t in let final core::String* #t232 = "x" in let final core::num* #t233 = #t231.{self::Test::[]}(#t232){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t234 = #t231.{self::Test::[]=}(#t232, #t233){(core::String*, core::double*) →* void} in #t233;
+  core::num* v11 = let final self::Test<core::num*, core::double*>* #t235 = t in let final core::String* #t236 = "x" in let final core::num* #t237 = #t235.{self::Test::[]}(#t236){(core::String*) →* core::num*} in let final void #t238 = #t235.{self::Test::[]=}(#t236, #t237.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t237;
 }
 static method test7(self::Test<core::double*, core::int*>* t) → void {
-  core::int* v1 = let final self::Test<core::double*, core::int*>* #t242 = t in let final core::String* #t243 = "x" in let final core::int* #t244 = self::getInt() in let final void #t245 = #t242.{self::Test::[]=}(#t243, #t244){(core::String*, core::int*) →* void} in #t244;
-  core::num* v2 = let final self::Test<core::double*, core::int*>* #t246 = t in let final core::String* #t247 = "x" in let final core::num* #t248 = self::getNum() as{TypeError} core::int* in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248){(core::String*, core::int*) →* void} in #t248;
-  core::num* v4 = let final self::Test<core::double*, core::int*>* #t250 = t in let final core::String* #t251 = "x" in let final core::double* #t252 = #t250.{self::Test::[]}(#t251){(core::String*) →* core::double*} in #t252 == null ?{core::num*} let final core::int* #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253){(core::String*, core::int*) →* void} in #t253 : #t252;
-  core::num* v5 = let final self::Test<core::double*, core::int*>* #t255 = t in let final core::String* #t256 = "x" in let final core::double* #t257 = #t255.{self::Test::[]}(#t256){(core::String*) →* core::double*} in #t257 == null ?{core::num*} let final core::num* #t258 = self::getNum() as{TypeError} core::int* in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258){(core::String*, core::int*) →* void} in #t258 : #t257;
-  core::double* v7 = let final self::Test<core::double*, core::int*>* #t260 = t in let final core::String* #t261 = "x" in let final core::double* #t262 = let final Never* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int* v1 = let final self::Test<core::double*, core::int*>* #t239 = t in let final core::String* #t240 = "x" in let final core::int* #t241 = self::getInt() in let final void #t242 = #t239.{self::Test::[]=}(#t240, #t241){(core::String*, core::int*) →* void} in #t241;
+  core::num* v2 = let final self::Test<core::double*, core::int*>* #t243 = t in let final core::String* #t244 = "x" in let final core::num* #t245 = self::getNum() as{TypeError} core::int* in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245){(core::String*, core::int*) →* void} in #t245;
+  core::num* v4 = let final self::Test<core::double*, core::int*>* #t247 = t in let final core::String* #t248 = "x" in let final core::double* #t249 = #t247.{self::Test::[]}(#t248){(core::String*) →* core::double*} in #t249 == null ?{core::num*} let final core::int* #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250){(core::String*, core::int*) →* void} in #t250 : #t249;
+  core::num* v5 = let final self::Test<core::double*, core::int*>* #t252 = t in let final core::String* #t253 = "x" in let final core::double* #t254 = #t252.{self::Test::[]}(#t253){(core::String*) →* core::double*} in #t254 == null ?{core::num*} let final core::num* #t255 = self::getNum() as{TypeError} core::int* in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255){(core::String*, core::int*) →* void} in #t255 : #t254;
+  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
-                                                                            ^" in #t260.{self::Test::[]}(#t261){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262){(core::String*, core::int*) →* void} in #t262;
-  core::double* v8 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = let final Never* #t268 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                                                            ^" in #t257.{self::Test::[]}(#t258){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259){(core::String*, core::int*) →* void} in #t259;
+  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
-                                                                            ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
-  core::double* v10 = let final self::Test<core::double*, core::int*>* #t270 = t in let final core::String* #t271 = "x" in let final core::double* #t272 = let final Never* #t273 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                                                            ^" in #t261.{self::Test::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t261.{self::Test::[]=}(#t262, #t263){(core::String*, core::int*) →* void} in #t263;
+  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*@target=double.+*/ ++t
-                           ^" in #t270.{self::Test::[]}(#t271){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272){(core::String*, core::int*) →* void} in #t272;
-  core::double* v11 = let final self::Test<core::double*, core::int*>* #t275 = t in let final core::String* #t276 = "x" in let final core::double* #t277 = #t275.{self::Test::[]}(#t276){(core::String*) →* core::double*} in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final Never* #t279 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                           ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t268 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
+  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
-                                                                            ^" in #t277.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t277;
+                                                                            ^" in #t271.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t271;
 }
 static method test8(self::Test<core::double*, core::num*>* t) → void {
-  core::int* v1 = let final self::Test<core::double*, core::num*>* #t280 = t in let final core::String* #t281 = "x" in let final core::int* #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282){(core::String*, core::num*) →* void} in #t282;
-  core::num* v2 = let final self::Test<core::double*, core::num*>* #t284 = t in let final core::String* #t285 = "x" in let final core::num* #t286 = self::getNum() in let final void #t287 = #t284.{self::Test::[]=}(#t285, #t286){(core::String*, core::num*) →* void} in #t286;
-  core::double* v3 = let final self::Test<core::double*, core::num*>* #t288 = t in let final core::String* #t289 = "x" in let final core::double* #t290 = self::getDouble() in let final void #t291 = #t288.{self::Test::[]=}(#t289, #t290){(core::String*, core::num*) →* void} in #t290;
-  core::num* v4 = let final self::Test<core::double*, core::num*>* #t292 = t in let final core::String* #t293 = "x" in let final core::double* #t294 = #t292.{self::Test::[]}(#t293){(core::String*) →* core::double*} in #t294 == null ?{core::num*} let final core::int* #t295 = self::getInt() in let final void #t296 = #t292.{self::Test::[]=}(#t293, #t295){(core::String*, core::num*) →* void} in #t295 : #t294;
-  core::num* v5 = let final self::Test<core::double*, core::num*>* #t297 = t in let final core::String* #t298 = "x" in let final core::double* #t299 = #t297.{self::Test::[]}(#t298){(core::String*) →* core::double*} in #t299 == null ?{core::num*} let final core::num* #t300 = self::getNum() in let final void #t301 = #t297.{self::Test::[]=}(#t298, #t300){(core::String*, core::num*) →* void} in #t300 : #t299;
-  core::double* v6 = let final self::Test<core::double*, core::num*>* #t302 = t in let final core::String* #t303 = "x" in let final core::double* #t304 = #t302.{self::Test::[]}(#t303){(core::String*) →* core::double*} in #t304 == null ?{core::double*} let final core::double* #t305 = self::getDouble() in let final void #t306 = #t302.{self::Test::[]=}(#t303, #t305){(core::String*, core::num*) →* void} in #t305 : #t304;
-  core::double* v7 = let final self::Test<core::double*, core::num*>* #t307 = t in let final core::String* #t308 = "x" in let final core::double* #t309 = #t307.{self::Test::[]}(#t308){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t310 = #t307.{self::Test::[]=}(#t308, #t309){(core::String*, core::num*) →* void} in #t309;
-  core::double* v8 = let final self::Test<core::double*, core::num*>* #t311 = t in let final core::String* #t312 = "x" in let final core::double* #t313 = #t311.{self::Test::[]}(#t312){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t314 = #t311.{self::Test::[]=}(#t312, #t313){(core::String*, core::num*) →* void} in #t313;
-  core::double* v9 = let final self::Test<core::double*, core::num*>* #t315 = t in let final core::String* #t316 = "x" in let final core::double* #t317 = #t315.{self::Test::[]}(#t316){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t318 = #t315.{self::Test::[]=}(#t316, #t317){(core::String*, core::num*) →* void} in #t317;
-  core::double* v10 = let final self::Test<core::double*, core::num*>* #t319 = t in let final core::String* #t320 = "x" in let final core::double* #t321 = #t319.{self::Test::[]}(#t320){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t322 = #t319.{self::Test::[]=}(#t320, #t321){(core::String*, core::num*) →* void} in #t321;
-  core::double* v11 = let final self::Test<core::double*, core::num*>* #t323 = t in let final core::String* #t324 = "x" in let final core::double* #t325 = #t323.{self::Test::[]}(#t324){(core::String*) →* core::double*} in let final void #t326 = #t323.{self::Test::[]=}(#t324, #t325.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t325;
+  core::int* v1 = let final self::Test<core::double*, core::num*>* #t273 = t in let final core::String* #t274 = "x" in let final core::int* #t275 = self::getInt() in let final void #t276 = #t273.{self::Test::[]=}(#t274, #t275){(core::String*, core::num*) →* void} in #t275;
+  core::num* v2 = let final self::Test<core::double*, core::num*>* #t277 = t in let final core::String* #t278 = "x" in let final core::num* #t279 = self::getNum() in let final void #t280 = #t277.{self::Test::[]=}(#t278, #t279){(core::String*, core::num*) →* void} in #t279;
+  core::double* v3 = let final self::Test<core::double*, core::num*>* #t281 = t in let final core::String* #t282 = "x" in let final core::double* #t283 = self::getDouble() in let final void #t284 = #t281.{self::Test::[]=}(#t282, #t283){(core::String*, core::num*) →* void} in #t283;
+  core::num* v4 = let final self::Test<core::double*, core::num*>* #t285 = t in let final core::String* #t286 = "x" in let final core::double* #t287 = #t285.{self::Test::[]}(#t286){(core::String*) →* core::double*} in #t287 == null ?{core::num*} let final core::int* #t288 = self::getInt() in let final void #t289 = #t285.{self::Test::[]=}(#t286, #t288){(core::String*, core::num*) →* void} in #t288 : #t287;
+  core::num* v5 = let final self::Test<core::double*, core::num*>* #t290 = t in let final core::String* #t291 = "x" in let final core::double* #t292 = #t290.{self::Test::[]}(#t291){(core::String*) →* core::double*} in #t292 == null ?{core::num*} let final core::num* #t293 = self::getNum() in let final void #t294 = #t290.{self::Test::[]=}(#t291, #t293){(core::String*, core::num*) →* void} in #t293 : #t292;
+  core::double* v6 = let final self::Test<core::double*, core::num*>* #t295 = t in let final core::String* #t296 = "x" in let final core::double* #t297 = #t295.{self::Test::[]}(#t296){(core::String*) →* core::double*} in #t297 == null ?{core::double*} let final core::double* #t298 = self::getDouble() in let final void #t299 = #t295.{self::Test::[]=}(#t296, #t298){(core::String*, core::num*) →* void} in #t298 : #t297;
+  core::double* v7 = let final self::Test<core::double*, core::num*>* #t300 = t in let final core::String* #t301 = "x" in let final core::double* #t302 = #t300.{self::Test::[]}(#t301){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t303 = #t300.{self::Test::[]=}(#t301, #t302){(core::String*, core::num*) →* void} in #t302;
+  core::double* v8 = let final self::Test<core::double*, core::num*>* #t304 = t in let final core::String* #t305 = "x" in let final core::double* #t306 = #t304.{self::Test::[]}(#t305){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t307 = #t304.{self::Test::[]=}(#t305, #t306){(core::String*, core::num*) →* void} in #t306;
+  core::double* v9 = let final self::Test<core::double*, core::num*>* #t308 = t in let final core::String* #t309 = "x" in let final core::double* #t310 = #t308.{self::Test::[]}(#t309){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t311 = #t308.{self::Test::[]=}(#t309, #t310){(core::String*, core::num*) →* void} in #t310;
+  core::double* v10 = let final self::Test<core::double*, core::num*>* #t312 = t in let final core::String* #t313 = "x" in let final core::double* #t314 = #t312.{self::Test::[]}(#t313){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t315 = #t312.{self::Test::[]=}(#t313, #t314){(core::String*, core::num*) →* void} in #t314;
+  core::double* v11 = let final self::Test<core::double*, core::num*>* #t316 = t in let final core::String* #t317 = "x" in let final core::double* #t318 = #t316.{self::Test::[]}(#t317){(core::String*) →* core::double*} in let final void #t319 = #t316.{self::Test::[]=}(#t317, #t318.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t318;
 }
 static method test9(self::Test<core::double*, core::double*>* t) → void {
-  core::num* v2 = let final self::Test<core::double*, core::double*>* #t327 = t in let final core::String* #t328 = "x" in let final core::num* #t329 = self::getNum() as{TypeError} core::double* in let final void #t330 = #t327.{self::Test::[]=}(#t328, #t329){(core::String*, core::double*) →* void} in #t329;
-  core::double* v3 = let final self::Test<core::double*, core::double*>* #t331 = t in let final core::String* #t332 = "x" in let final core::double* #t333 = self::getDouble() in let final void #t334 = #t331.{self::Test::[]=}(#t332, #t333){(core::String*, core::double*) →* void} in #t333;
-  core::num* v5 = let final self::Test<core::double*, core::double*>* #t335 = t in let final core::String* #t336 = "x" in let final core::double* #t337 = #t335.{self::Test::[]}(#t336){(core::String*) →* core::double*} in #t337 == null ?{core::num*} let final core::num* #t338 = self::getNum() as{TypeError} core::double* in let final void #t339 = #t335.{self::Test::[]=}(#t336, #t338){(core::String*, core::double*) →* void} in #t338 : #t337;
-  core::double* v6 = let final self::Test<core::double*, core::double*>* #t340 = t in let final core::String* #t341 = "x" in let final core::double* #t342 = #t340.{self::Test::[]}(#t341){(core::String*) →* core::double*} in #t342 == null ?{core::double*} let final core::double* #t343 = self::getDouble() in let final void #t344 = #t340.{self::Test::[]=}(#t341, #t343){(core::String*, core::double*) →* void} in #t343 : #t342;
-  core::double* v7 = let final self::Test<core::double*, core::double*>* #t345 = t in let final core::String* #t346 = "x" in let final core::double* #t347 = #t345.{self::Test::[]}(#t346){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t348 = #t345.{self::Test::[]=}(#t346, #t347){(core::String*, core::double*) →* void} in #t347;
-  core::double* v8 = let final self::Test<core::double*, core::double*>* #t349 = t in let final core::String* #t350 = "x" in let final core::double* #t351 = #t349.{self::Test::[]}(#t350){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t352 = #t349.{self::Test::[]=}(#t350, #t351){(core::String*, core::double*) →* void} in #t351;
-  core::double* v9 = let final self::Test<core::double*, core::double*>* #t353 = t in let final core::String* #t354 = "x" in let final core::double* #t355 = #t353.{self::Test::[]}(#t354){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t356 = #t353.{self::Test::[]=}(#t354, #t355){(core::String*, core::double*) →* void} in #t355;
-  core::double* v10 = let final self::Test<core::double*, core::double*>* #t357 = t in let final core::String* #t358 = "x" in let final core::double* #t359 = #t357.{self::Test::[]}(#t358){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t360 = #t357.{self::Test::[]=}(#t358, #t359){(core::String*, core::double*) →* void} in #t359;
-  core::double* v11 = let final self::Test<core::double*, core::double*>* #t361 = t in let final core::String* #t362 = "x" in let final core::double* #t363 = #t361.{self::Test::[]}(#t362){(core::String*) →* core::double*} in let final void #t364 = #t361.{self::Test::[]=}(#t362, #t363.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t363;
+  core::num* v2 = let final self::Test<core::double*, core::double*>* #t320 = t in let final core::String* #t321 = "x" in let final core::num* #t322 = self::getNum() as{TypeError} core::double* in let final void #t323 = #t320.{self::Test::[]=}(#t321, #t322){(core::String*, core::double*) →* void} in #t322;
+  core::double* v3 = let final self::Test<core::double*, core::double*>* #t324 = t in let final core::String* #t325 = "x" in let final core::double* #t326 = self::getDouble() in let final void #t327 = #t324.{self::Test::[]=}(#t325, #t326){(core::String*, core::double*) →* void} in #t326;
+  core::num* v5 = let final self::Test<core::double*, core::double*>* #t328 = t in let final core::String* #t329 = "x" in let final core::double* #t330 = #t328.{self::Test::[]}(#t329){(core::String*) →* core::double*} in #t330 == null ?{core::num*} let final core::num* #t331 = self::getNum() as{TypeError} core::double* in let final void #t332 = #t328.{self::Test::[]=}(#t329, #t331){(core::String*, core::double*) →* void} in #t331 : #t330;
+  core::double* v6 = let final self::Test<core::double*, core::double*>* #t333 = t in let final core::String* #t334 = "x" in let final core::double* #t335 = #t333.{self::Test::[]}(#t334){(core::String*) →* core::double*} in #t335 == null ?{core::double*} let final core::double* #t336 = self::getDouble() in let final void #t337 = #t333.{self::Test::[]=}(#t334, #t336){(core::String*, core::double*) →* void} in #t336 : #t335;
+  core::double* v7 = let final self::Test<core::double*, core::double*>* #t338 = t in let final core::String* #t339 = "x" in let final core::double* #t340 = #t338.{self::Test::[]}(#t339){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t341 = #t338.{self::Test::[]=}(#t339, #t340){(core::String*, core::double*) →* void} in #t340;
+  core::double* v8 = let final self::Test<core::double*, core::double*>* #t342 = t in let final core::String* #t343 = "x" in let final core::double* #t344 = #t342.{self::Test::[]}(#t343){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t345 = #t342.{self::Test::[]=}(#t343, #t344){(core::String*, core::double*) →* void} in #t344;
+  core::double* v9 = let final self::Test<core::double*, core::double*>* #t346 = t in let final core::String* #t347 = "x" in let final core::double* #t348 = #t346.{self::Test::[]}(#t347){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t349 = #t346.{self::Test::[]=}(#t347, #t348){(core::String*, core::double*) →* void} in #t348;
+  core::double* v10 = let final self::Test<core::double*, core::double*>* #t350 = t in let final core::String* #t351 = "x" in let final core::double* #t352 = #t350.{self::Test::[]}(#t351){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t353 = #t350.{self::Test::[]=}(#t351, #t352){(core::String*, core::double*) →* void} in #t352;
+  core::double* v11 = let final self::Test<core::double*, core::double*>* #t354 = t in let final core::String* #t355 = "x" in let final core::double* #t356 = #t354.{self::Test::[]}(#t355){(core::String*) →* core::double*} in let final void #t357 = #t354.{self::Test::[]=}(#t355, #t356.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t356;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
index 2269e14..1bf4996 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
@@ -60,20 +60,20 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
 var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
                                    ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
-static field core::double* v_prefix_mm = let final self::B* #t3 = new self::B::•() in #t3.{self::B::a} = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
 var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-                                   ^" in #t3.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
-static field self::A* v_postfix_pp = let final self::B* #t5 = new self::B::•() in let final self::A* #t6 = #t5.{self::B::a}{self::A*} in let final core::int* #t7 = #t5.{self::B::a} = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
+static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
     /*@ type=int* */ a /*@target=A.+*/ ++);
-                                       ^" in #t6.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t6;
-static field self::A* v_postfix_mm = let final self::B* #t9 = new self::B::•() in let final self::A* #t10 = #t9.{self::B::a}{self::A*} in let final core::double* #t11 = #t9.{self::B::a} = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
+static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
     /*@ type=double* */ a /*@target=A.-*/ --);
-                                          ^" in #t10.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t10;
+                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect
new file mode 100644
index 0000000..1bf4996
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+// var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
+//                                    ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+// var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
+//                                    ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@ type=int* */ a /*@target=A.+*/ ++);
+//                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@ type=double* */ a /*@target=A.-*/ --);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → core::int*
+    return 1;
+  operator -(dynamic other) → core::double*
+    return 2.0;
+  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 B extends core::Object {
+  field self::A* a = null;
+  synthetic constructor •() → self::B*
+    : 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 field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
+                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
+static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
+                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
+static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+    /*@ type=int* */ a /*@target=A.+*/ ++);
+                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
+static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+    /*@ type=double* */ a /*@target=A.-*/ --);
+                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
index 423be1f..3faad32 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static field core::int* i;
 static field core::String* s;
-static field core::String* x = self::i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 var x = i = s;
             ^" in self::s as{TypeError} core::int*;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect
new file mode 100644
index 0000000..3faad32
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// var x = i = s;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* i;
+static field core::String* s;
+static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+var x = i = s;
+            ^" in self::s as{TypeError} core::int*;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
index 72b278b..844cd74 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
@@ -38,9 +38,9 @@
       return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
-  #local#set((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set(invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^" in #local#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
index 72b278b..844cd74 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
@@ -38,9 +38,9 @@
       return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
-  #local#set((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set(invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^" in #local#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
index 918a8c7..eb987a6 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
@@ -52,9 +52,9 @@
       #local#isSet = true;
       return #local = #t3;
     }
-  #local#set((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set(invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^" in #local#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
index 918a8c7..eb987a6 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
@@ -52,9 +52,9 @@
       #local#isSet = true;
       return #local = #t3;
     }
-  #local#set((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set(invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^" in #local#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
index d7714fc..cc9b378 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
@@ -95,13 +95,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -110,27 +110,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t9) → dynamic
+  function #local2#set(T% #t6) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t9;
+      return #local2 = #t6;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = #local4 in #t10 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
-  function #local4#set(core::int #t11) → dynamic
+    return let final core::int? #t7 = #local4 in #t7 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t7{core::int};
+  function #local4#set(core::int #t8) → dynamic
     if(#local4 == null)
-      return #local4 = #t11;
+      return #local4 = #t8;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = #local6 in #t12 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t13) → dynamic
+    return let final FutureOr<core::int>? #t9 = #local6 in #t9 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t9{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t10) → dynamic
     if(#local6 == null)
-      return #local6 = #t13;
+      return #local6 = #t10;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -141,27 +141,27 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = #local4 in #t17 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
-  function #local4#set(core::int #t18) → dynamic
+    return let final core::int? #t11 = #local4 in #t11 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t11{core::int};
+  function #local4#set(core::int #t12) → dynamic
     if(#local4 == null)
-      return #local4 = #t18;
+      return #local4 = #t12;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
@@ -170,39 +170,39 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t20) → dynamic
+  function #local2#set(self::methodDirect::T% #t13) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t20;
+      return #local2 = #t13;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = #local4 in #t21 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
-  function #local4#set(core::int #t22) → dynamic
+    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
     if(#local4 == null)
-      return #local4 = #t22;
+      return #local4 = #t15;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = #local6 in #t23 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t24) → dynamic
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t17) → dynamic
     if(#local6 == null)
-      return #local6 = #t24;
+      return #local6 = #t17;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set(value){(self::methodDirect::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -211,27 +211,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t28) → dynamic
+  function #local2#set(self::methodConditional::T% #t18) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t28;
+      return #local2 = #t18;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = #local4 in #t29 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
-  function #local4#set(core::int #t30) → dynamic
+    return let final core::int? #t19 = #local4 in #t19 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t19{core::int};
+  function #local4#set(core::int #t20) → dynamic
     if(#local4 == null)
-      return #local4 = #t30;
+      return #local4 = #t20;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = #local6 in #t31 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t32) → dynamic
+    return let final FutureOr<core::int>? #t21 = #local6 in #t21 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t21{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t22) → dynamic
     if(#local6 == null)
-      return #local6 = #t32;
+      return #local6 = #t22;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -242,27 +242,27 @@
   #local2#set(value){(self::methodConditional::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
-  let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = #local4 in #t36 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
-  function #local4#set(core::int #t37) → dynamic
+    return let final core::int? #t23 = #local4 in #t23 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t23{core::int};
+  function #local4#set(core::int #t24) → dynamic
     if(#local4 == null)
-      return #local4 = #t37;
+      return #local4 = #t24;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
index d7714fc..cc9b378 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
@@ -95,13 +95,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -110,27 +110,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t9) → dynamic
+  function #local2#set(T% #t6) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t9;
+      return #local2 = #t6;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = #local4 in #t10 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
-  function #local4#set(core::int #t11) → dynamic
+    return let final core::int? #t7 = #local4 in #t7 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t7{core::int};
+  function #local4#set(core::int #t8) → dynamic
     if(#local4 == null)
-      return #local4 = #t11;
+      return #local4 = #t8;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = #local6 in #t12 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t13) → dynamic
+    return let final FutureOr<core::int>? #t9 = #local6 in #t9 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t9{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t10) → dynamic
     if(#local6 == null)
-      return #local6 = #t13;
+      return #local6 = #t10;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -141,27 +141,27 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = #local4 in #t17 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
-  function #local4#set(core::int #t18) → dynamic
+    return let final core::int? #t11 = #local4 in #t11 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t11{core::int};
+  function #local4#set(core::int #t12) → dynamic
     if(#local4 == null)
-      return #local4 = #t18;
+      return #local4 = #t12;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
@@ -170,39 +170,39 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t20) → dynamic
+  function #local2#set(self::methodDirect::T% #t13) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t20;
+      return #local2 = #t13;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = #local4 in #t21 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
-  function #local4#set(core::int #t22) → dynamic
+    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
     if(#local4 == null)
-      return #local4 = #t22;
+      return #local4 = #t15;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = #local6 in #t23 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t24) → dynamic
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t17) → dynamic
     if(#local6 == null)
-      return #local6 = #t24;
+      return #local6 = #t17;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set(value){(self::methodDirect::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -211,27 +211,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t28) → dynamic
+  function #local2#set(self::methodConditional::T% #t18) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t28;
+      return #local2 = #t18;
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = #local4 in #t29 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
-  function #local4#set(core::int #t30) → dynamic
+    return let final core::int? #t19 = #local4 in #t19 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t19{core::int};
+  function #local4#set(core::int #t20) → dynamic
     if(#local4 == null)
-      return #local4 = #t30;
+      return #local4 = #t20;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = #local6 in #t31 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t32) → dynamic
+    return let final FutureOr<core::int>? #t21 = #local6 in #t21 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t21{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t22) → dynamic
     if(#local6 == null)
-      return #local6 = #t32;
+      return #local6 = #t22;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -242,27 +242,27 @@
   #local2#set(value){(self::methodConditional::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
-  let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = #local4 in #t36 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
-  function #local4#set(core::int #t37) → dynamic
+    return let final core::int? #t23 = #local4 in #t23 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t23{core::int};
+  function #local4#set(core::int #t24) → dynamic
     if(#local4 == null)
-      return #local4 = #t37;
+      return #local4 = #t24;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
index 62841e6a..28154dd 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
@@ -101,13 +101,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -116,34 +116,34 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t7) → dynamic
+  function #local2#set(T% #t4) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t7;
+      return #local2 = #t4;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t8) → dynamic
+  function #local4#set(core::int #t5) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t8;
+      return #local4 = #t5;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t9) → dynamic
+  function #local6#set(FutureOr<core::int>#t6) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t9;
+      return #local6 = #t6;
     }
   if(b) {
     #local2#set(value){(T%) → dynamic};
@@ -153,13 +153,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -168,15 +168,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t13) → dynamic
+  function #local4#set(core::int #t7) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t13;
+      return #local4 = #t7;
     }
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
@@ -185,45 +185,45 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t15) → dynamic
+  function #local2#set(self::methodDirect::T% #t8) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t15;
+      return #local2 = #t8;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t16) → dynamic
+  function #local4#set(core::int #t9) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t16;
+      return #local4 = #t9;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t17) → dynamic
+  function #local6#set(FutureOr<core::int>#t10) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t17;
+      return #local6 = #t10;
     }
   #local2#set(value){(self::methodDirect::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -232,34 +232,34 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t21) → dynamic
+  function #local2#set(self::methodConditional::T% #t11) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t21;
+      return #local2 = #t11;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t22) → dynamic
+  function #local4#set(core::int #t12) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t22;
+      return #local4 = #t12;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t23) → dynamic
+  function #local6#set(FutureOr<core::int>#t13) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t23;
+      return #local6 = #t13;
     }
   if(b) {
     #local2#set(value){(self::methodConditional::T%) → dynamic};
@@ -269,13 +269,13 @@
   #local2#set(value){(self::methodConditional::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -284,15 +284,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t27) → dynamic
+  function #local4#set(core::int #t14) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t27;
+      return #local4 = #t14;
     }
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
index 62841e6a..28154dd 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
@@ -101,13 +101,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -116,34 +116,34 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t7) → dynamic
+  function #local2#set(T% #t4) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t7;
+      return #local2 = #t4;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t8) → dynamic
+  function #local4#set(core::int #t5) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t8;
+      return #local4 = #t5;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t9) → dynamic
+  function #local6#set(FutureOr<core::int>#t6) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t9;
+      return #local6 = #t6;
     }
   if(b) {
     #local2#set(value){(T%) → dynamic};
@@ -153,13 +153,13 @@
   #local2#set(value){(T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(T%) → dynamic};
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
@@ -168,15 +168,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t13) → dynamic
+  function #local4#set(core::int #t7) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t13;
+      return #local4 = #t7;
     }
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
@@ -185,45 +185,45 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t15) → dynamic
+  function #local2#set(self::methodDirect::T% #t8) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t15;
+      return #local2 = #t8;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t16) → dynamic
+  function #local4#set(core::int #t9) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t16;
+      return #local4 = #t9;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t17) → dynamic
+  function #local6#set(FutureOr<core::int>#t10) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t17;
+      return #local6 = #t10;
     }
   #local2#set(value){(self::methodDirect::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -232,34 +232,34 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t21) → dynamic
+  function #local2#set(self::methodConditional::T% #t11) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return #local2 = #t21;
+      return #local2 = #t11;
     }
   lowered final core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t22) → dynamic
+  function #local4#set(core::int #t12) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t22;
+      return #local4 = #t12;
     }
   lowered final FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t23) → dynamic
+  function #local6#set(FutureOr<core::int>#t13) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return #local6 = #t23;
+      return #local6 = #t13;
     }
   if(b) {
     #local2#set(value){(self::methodConditional::T%) → dynamic};
@@ -269,13 +269,13 @@
   #local2#set(value){(self::methodConditional::T%) → dynamic};
   #local4#set(0){(core::int) → dynamic};
   #local6#set(0){(FutureOr<core::int>) → dynamic};
-  let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
   ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
@@ -284,15 +284,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t27) → dynamic
+  function #local4#set(core::int #t14) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return #local4 = #t27;
+      return #local4 = #t14;
     }
   #local4#set(0){(core::int) → dynamic};
-  let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
index 0b556b4..b85ce55 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
@@ -131,22 +131,22 @@
     #local7#isSet = true;
     return #local7 = #t6;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → T%};
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → T%};
@@ -157,22 +157,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t13) → dynamic {
+  function #local2#set(T% #t7) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t13;
+    return #local2 = #t7;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
-  function #local4#set(core::int #t15) → dynamic
-    return #local4 = #t15;
+    return let final core::int? #t8 = #local4 in #t8 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t8{core::int};
+  function #local4#set(core::int #t9) → dynamic
+    return #local4 = #t9;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t17) → dynamic
-    return #local6 = #t17;
+    return let final FutureOr<core::int>? #t10 = #local6 in #t10 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t10{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t11) → dynamic
+    return #local6 = #t11;
   lowered T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
@@ -182,9 +182,9 @@
     }
     return #local7{T%};
   }
-  function #local7#set(T% #t18) → dynamic {
+  function #local7#set(T% #t12) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t18;
+    return #local7 = #t12;
   }
   if(b) {
     local1 = value;
@@ -195,15 +195,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#get(){() → T%};
   }
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → T%};
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -213,15 +213,15 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
-  function #local4#set(core::int #t23) → dynamic
-    return #local4 = #t23;
-  local3 = (let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+    return let final core::int? #t13 = #local4 in #t13 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t13{core::int};
+  function #local4#set(core::int #t14) → dynamic
+    return #local4 = #t14;
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -229,22 +229,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+  function #local2#set(self::methodDirect::T% #t15) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t26;
+    return #local2 = #t15;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
-  function #local4#set(core::int #t28) → dynamic
-    return #local4 = #t28;
+    return let final core::int? #t16 = #local4 in #t16 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t16{core::int};
+  function #local4#set(core::int #t17) → dynamic
+    return #local4 = #t17;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = #local6 in #t29 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t30) → dynamic
-    return #local6 = #t30;
+    return let final FutureOr<core::int>? #t18 = #local6 in #t18 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t18{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t19) → dynamic
+    return #local6 = #t19;
   lowered self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
@@ -254,26 +254,26 @@
     }
     return #local7{self::methodDirect::T%};
   }
-  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+  function #local7#set(self::methodDirect::T% #t20) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t31;
+    return #local7 = #t20;
   }
-  let final Never #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
-  let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → self::methodDirect::T%};
@@ -284,22 +284,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+  function #local2#set(self::methodConditional::T% #t21) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t38;
+    return #local2 = #t21;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = #local4 in #t39 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
-  function #local4#set(core::int #t40) → dynamic
-    return #local4 = #t40;
+    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return #local4 = #t23;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = #local6 in #t41 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t42) → dynamic
-    return #local6 = #t42;
+    return let final FutureOr<core::int>? #t24 = #local6 in #t24 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t24{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t25) → dynamic
+    return #local6 = #t25;
   lowered self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
@@ -309,9 +309,9 @@
     }
     return #local7{self::methodConditional::T%};
   }
-  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+  function #local7#set(self::methodConditional::T% #t26) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t43;
+    return #local7 = #t26;
   }
   if(b) {
     local1 = value;
@@ -322,15 +322,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
-  let final Never #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → self::methodConditional::T%};
-  let final Never #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -340,14 +340,14 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = #local4 in #t47 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
-  function #local4#set(core::int #t48) → dynamic
-    return #local4 = #t48;
-  local3 = (let final Never #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return #local4 = #t28;
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
index 0b556b4..b85ce55 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
@@ -131,22 +131,22 @@
     #local7#isSet = true;
     return #local7 = #t6;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → T%};
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → T%};
@@ -157,22 +157,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t13) → dynamic {
+  function #local2#set(T% #t7) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t13;
+    return #local2 = #t7;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
-  function #local4#set(core::int #t15) → dynamic
-    return #local4 = #t15;
+    return let final core::int? #t8 = #local4 in #t8 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t8{core::int};
+  function #local4#set(core::int #t9) → dynamic
+    return #local4 = #t9;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t17) → dynamic
-    return #local6 = #t17;
+    return let final FutureOr<core::int>? #t10 = #local6 in #t10 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t10{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t11) → dynamic
+    return #local6 = #t11;
   lowered T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
@@ -182,9 +182,9 @@
     }
     return #local7{T%};
   }
-  function #local7#set(T% #t18) → dynamic {
+  function #local7#set(T% #t12) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t18;
+    return #local7 = #t12;
   }
   if(b) {
     local1 = value;
@@ -195,15 +195,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#get(){() → T%};
   }
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → T%};
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -213,15 +213,15 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
-  function #local4#set(core::int #t23) → dynamic
-    return #local4 = #t23;
-  local3 = (let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+    return let final core::int? #t13 = #local4 in #t13 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t13{core::int};
+  function #local4#set(core::int #t14) → dynamic
+    return #local4 = #t14;
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -229,22 +229,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+  function #local2#set(self::methodDirect::T% #t15) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t26;
+    return #local2 = #t15;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
-  function #local4#set(core::int #t28) → dynamic
-    return #local4 = #t28;
+    return let final core::int? #t16 = #local4 in #t16 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t16{core::int};
+  function #local4#set(core::int #t17) → dynamic
+    return #local4 = #t17;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = #local6 in #t29 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t30) → dynamic
-    return #local6 = #t30;
+    return let final FutureOr<core::int>? #t18 = #local6 in #t18 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t18{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t19) → dynamic
+    return #local6 = #t19;
   lowered self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
@@ -254,26 +254,26 @@
     }
     return #local7{self::methodDirect::T%};
   }
-  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+  function #local7#set(self::methodDirect::T% #t20) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t31;
+    return #local7 = #t20;
   }
-  let final Never #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
-  let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → self::methodDirect::T%};
@@ -284,22 +284,22 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+  function #local2#set(self::methodConditional::T% #t21) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t38;
+    return #local2 = #t21;
   }
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = #local4 in #t39 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
-  function #local4#set(core::int #t40) → dynamic
-    return #local4 = #t40;
+    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return #local4 = #t23;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = #local6 in #t41 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
-  function #local6#set(FutureOr<core::int>#t42) → dynamic
-    return #local6 = #t42;
+    return let final FutureOr<core::int>? #t24 = #local6 in #t24 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t24{FutureOr<core::int>};
+  function #local6#set(FutureOr<core::int>#t25) → dynamic
+    return #local6 = #t25;
   lowered self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
@@ -309,9 +309,9 @@
     }
     return #local7{self::methodConditional::T%};
   }
-  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+  function #local7#set(self::methodConditional::T% #t26) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t43;
+    return #local7 = #t26;
   }
   if(b) {
     local1 = value;
@@ -322,15 +322,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
-  let final Never #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → self::methodConditional::T%};
-  let final Never #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -340,14 +340,14 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = #local4 in #t47 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
-  function #local4#set(core::int #t48) → dynamic
-    return #local4 = #t48;
-  local3 = (let final Never #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return #local4 = #t28;
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
index 2c9947c..5589982 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
@@ -137,22 +137,22 @@
     #local7#isSet = true;
     return #local7 = #t4;
   }
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → T%};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → T%};
@@ -163,27 +163,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t11) → dynamic {
+  function #local2#set(T% #t5) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t11;
+    return #local2 = #t5;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t12) → dynamic {
+  function #local4#set(core::int #t6) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t12;
+    return #local4 = #t6;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t13) → dynamic {
+  function #local6#set(FutureOr<core::int>#t7) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t13;
+    return #local6 = #t7;
   }
   lowered T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -194,9 +194,9 @@
     }
     return #local7{T%};
   }
-  function #local7#set(T% #t14) → dynamic {
+  function #local7#set(T% #t8) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t14;
+    return #local7 = #t8;
   }
   if(b) {
     local1 = value;
@@ -207,15 +207,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#get(){() → T%};
   }
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → T%};
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -227,16 +227,16 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t18) → dynamic {
+  function #local4#set(core::int #t9) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t18;
+    return #local4 = #t9;
   }
-  local3 = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -244,27 +244,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t21) → dynamic {
+  function #local2#set(self::methodDirect::T% #t10) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t21;
+    return #local2 = #t10;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t22) → dynamic {
+  function #local4#set(core::int #t11) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t22;
+    return #local4 = #t11;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t23) → dynamic {
+  function #local6#set(FutureOr<core::int>#t12) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t23;
+    return #local6 = #t12;
   }
   lowered self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -275,26 +275,26 @@
     }
     return #local7{self::methodDirect::T%};
   }
-  function #local7#set(self::methodDirect::T% #t24) → dynamic {
+  function #local7#set(self::methodDirect::T% #t13) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t24;
+    return #local7 = #t13;
   }
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
-  let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t29 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t30 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → self::methodDirect::T%};
@@ -305,27 +305,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t31) → dynamic {
+  function #local2#set(self::methodConditional::T% #t14) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t31;
+    return #local2 = #t14;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t32) → dynamic {
+  function #local4#set(core::int #t15) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t32;
+    return #local4 = #t15;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t33) → dynamic {
+  function #local6#set(FutureOr<core::int>#t16) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t33;
+    return #local6 = #t16;
   }
   lowered self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -336,9 +336,9 @@
     }
     return #local7{self::methodConditional::T%};
   }
-  function #local7#set(self::methodConditional::T% #t34) → dynamic {
+  function #local7#set(self::methodConditional::T% #t17) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t34;
+    return #local7 = #t17;
   }
   if(b) {
     local1 = value;
@@ -349,15 +349,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → self::methodConditional::T%};
-  let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -369,15 +369,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t38) → dynamic {
+  function #local4#set(core::int #t18) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t38;
+    return #local4 = #t18;
   }
-  local3 = (let final Never #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
index 2c9947c..5589982 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
@@ -137,22 +137,22 @@
     #local7#isSet = true;
     return #local7 = #t4;
   }
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → T%};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → T%};
@@ -163,27 +163,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
     return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(T% #t11) → dynamic {
+  function #local2#set(T% #t5) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t11;
+    return #local2 = #t5;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t12) → dynamic {
+  function #local4#set(core::int #t6) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t12;
+    return #local4 = #t6;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t13) → dynamic {
+  function #local6#set(FutureOr<core::int>#t7) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t13;
+    return #local6 = #t7;
   }
   lowered T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -194,9 +194,9 @@
     }
     return #local7{T%};
   }
-  function #local7#set(T% #t14) → dynamic {
+  function #local7#set(T% #t8) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t14;
+    return #local7 = #t8;
   }
   if(b) {
     local1 = value;
@@ -207,15 +207,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#get(){() → T%};
   }
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → T%};
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -227,16 +227,16 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t18) → dynamic {
+  function #local4#set(core::int #t9) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t18;
+    return #local4 = #t9;
   }
-  local3 = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -244,27 +244,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
     return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodDirect::T% #t21) → dynamic {
+  function #local2#set(self::methodDirect::T% #t10) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t21;
+    return #local2 = #t10;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t22) → dynamic {
+  function #local4#set(core::int #t11) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t22;
+    return #local4 = #t11;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t23) → dynamic {
+  function #local6#set(FutureOr<core::int>#t12) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t23;
+    return #local6 = #t12;
   }
   lowered self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -275,26 +275,26 @@
     }
     return #local7{self::methodDirect::T%};
   }
-  function #local7#set(self::methodDirect::T% #t24) → dynamic {
+  function #local7#set(self::methodDirect::T% #t13) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t24;
+    return #local7 = #t13;
   }
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
-  let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in #local4#get(){() → core::int};
-  let final Never #t29 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t30 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
   #local7#get(){() → self::methodDirect::T%};
@@ -305,27 +305,27 @@
   lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
     return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
-  function #local2#set(self::methodConditional::T% #t31) → dynamic {
+  function #local2#set(self::methodConditional::T% #t14) → dynamic {
     #local2#isSet = true;
-    return #local2 = #t31;
+    return #local2 = #t14;
   }
   core::int local3;
   lowered core::int? #local4;
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t32) → dynamic {
+  function #local4#set(core::int #t15) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t32;
+    return #local4 = #t15;
   }
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
     return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
-  function #local6#set(FutureOr<core::int>#t33) → dynamic {
+  function #local6#set(FutureOr<core::int>#t16) → dynamic {
     #local6#isSet = true;
-    return #local6 = #t33;
+    return #local6 = #t16;
   }
   lowered self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
@@ -336,9 +336,9 @@
     }
     return #local7{self::methodConditional::T%};
   }
-  function #local7#set(self::methodConditional::T% #t34) → dynamic {
+  function #local7#set(self::methodConditional::T% #t17) → dynamic {
     #local7#isSet = true;
-    return #local7 = #t34;
+    return #local7 = #t17;
   }
   if(b) {
     local1 = value;
@@ -349,15 +349,15 @@
     #local6#set(0){(FutureOr<core::int>) → dynamic};
     #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
-  let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   #local2#get(){() → self::methodConditional::T%};
-  let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   #local4#get(){() → core::int};
-  let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   #local6#get(){() → FutureOr<core::int>};
@@ -369,15 +369,15 @@
   lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
     return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
-  function #local4#set(core::int #t38) → dynamic {
+  function #local4#set(core::int #t18) → dynamic {
     #local4#isSet = true;
-    return #local4 = #t38;
+    return #local4 = #t18;
   }
-  local3 = (let final Never #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  #local4#set((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index d80fa11..20030f2 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -141,7 +141,7 @@
   function #s1#get() → core::String
     return let final core::String? #t8 = #s1 in #t8 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
-                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t8{core::String};
+                   ^^^^^" : #t8{core::String};
   function #s1#set(core::String #t9) → dynamic
     return #s1 = #t9;
   lowered core::String? #s2;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 0026c6b..a38e25a 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -163,7 +163,7 @@
     if(!#s1#isSet) {
       #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
-                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+                   ^^^^^";
       #s1#isSet = true;
     }
     return #s1{core::String};
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
index 6dec7c2..5603cdc 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
@@ -1032,758 +1032,758 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+  core::Object objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
                      ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  core::num numVar = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+  core::num numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
   numVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
   numVar = intNullableArg;
            ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
   numVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+  core::int intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
            ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   intVar = intNullableArg;
            ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
                      ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
   doubleVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
                               ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
   toVoidVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
                                ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
                    ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
                    ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final Never #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final Never #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YnonNull yNonNullVar = let final Never #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
   yNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final Never #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
                         ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
index 8a79a2f..bf5a308 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
@@ -1032,758 +1032,758 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+  core::Object objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
-                     ^" in let core::Object? #t5 = objectNullableArg in #t5 == null ?{core::Object} #t5 as{TypeError,ForNonNullableByDefault} core::Object : #t5{core::Object};
-  objectVar = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+                     ^" in let core::Object? #t4 = objectNullableArg in #t4 == null ?{core::Object} #t4 as{TypeError,ForNonNullableByDefault} core::Object : #t4{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
-              ^" in let core::num? #t7 = numNullableArg in #t7 == null ?{core::Object} #t7 as{TypeError,ForNonNullableByDefault} core::Object : #t7{core::Object};
-  objectVar = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+              ^" in let core::num? #t5 = numNullableArg in #t5 == null ?{core::Object} #t5 as{TypeError,ForNonNullableByDefault} core::Object : #t5{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
-              ^" in let core::int? #t9 = intNullableArg in #t9 == null ?{core::Object} #t9 as{TypeError,ForNonNullableByDefault} core::Object : #t9{core::Object};
-  objectVar = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+              ^" in let core::int? #t6 = intNullableArg in #t6 == null ?{core::Object} #t6 as{TypeError,ForNonNullableByDefault} core::Object : #t6{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
-              ^" in let core::double? #t11 = doubleNullableArg in #t11 == null ?{core::Object} #t11 as{TypeError,ForNonNullableByDefault} core::Object : #t11{core::Object};
-  objectVar = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+              ^" in let core::double? #t7 = doubleNullableArg in #t7 == null ?{core::Object} #t7 as{TypeError,ForNonNullableByDefault} core::Object : #t7{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
-              ^" in let core::Function? #t13 = functionNullableArg in #t13 == null ?{core::Object} #t13 as{TypeError,ForNonNullableByDefault} core::Object : #t13{core::Object};
-  objectVar = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+              ^" in let core::Function? #t8 = functionNullableArg in #t8 == null ?{core::Object} #t8 as{TypeError,ForNonNullableByDefault} core::Object : #t8{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
-              ^" in let () →? void #t15 = toVoidNullableArg in #t15 == null ?{core::Object} #t15 as{TypeError,ForNonNullableByDefault} core::Object : #t15{core::Object};
-  objectVar = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+              ^" in let () →? void #t9 = toVoidNullableArg in #t9 == null ?{core::Object} #t9 as{TypeError,ForNonNullableByDefault} core::Object : #t9{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
-              ^" in let self::Tearoffable? #t17 = tearoffableNullableArg in #t17 == null ?{core::Object} #t17 as{TypeError,ForNonNullableByDefault} core::Object : #t17{core::Object};
-  objectVar = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+              ^" in let self::Tearoffable? #t10 = tearoffableNullableArg in #t10 == null ?{core::Object} #t10 as{TypeError,ForNonNullableByDefault} core::Object : #t10{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
-              ^" in let self::error::XnonNull? #t19 = xNonNullNullableArg in #t19 == null ?{core::Object} #t19 as{TypeError,ForNonNullableByDefault} core::Object : #t19{core::Object};
-  objectVar = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+              ^" in let self::error::XnonNull? #t11 = xNonNullNullableArg in #t11 == null ?{core::Object} #t11 as{TypeError,ForNonNullableByDefault} core::Object : #t11{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
-              ^" in let self::error::XpotentiallyNull% #t21 = xPotentiallyNullArg in #t21 == null ?{core::Object} #t21 as{TypeError,ForNonNullableByDefault} core::Object : #t21{core::Object};
-  objectVar = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+              ^" in let self::error::XpotentiallyNull% #t12 = xPotentiallyNullArg in #t12 == null ?{core::Object} #t12 as{TypeError,ForNonNullableByDefault} core::Object : #t12{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
-              ^" in let self::error::XpotentiallyNull? #t23 = xPotentiallyNullNullableArg in #t23 == null ?{core::Object} #t23 as{TypeError,ForNonNullableByDefault} core::Object : #t23{core::Object};
-  objectVar = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+              ^" in let self::error::XpotentiallyNull? #t13 = xPotentiallyNullNullableArg in #t13 == null ?{core::Object} #t13 as{TypeError,ForNonNullableByDefault} core::Object : #t13{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
-              ^" in let self::error::YnonNull? #t25 = yNonNullNullableArg in #t25 == null ?{core::Object} #t25 as{TypeError,ForNonNullableByDefault} core::Object : #t25{core::Object};
-  objectVar = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+              ^" in let self::error::YnonNull? #t14 = yNonNullNullableArg in #t14 == null ?{core::Object} #t14 as{TypeError,ForNonNullableByDefault} core::Object : #t14{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
-              ^" in let self::error::YpotentiallyNull% #t27 = yPotentiallyNullArg in #t27 == null ?{core::Object} #t27 as{TypeError,ForNonNullableByDefault} core::Object : #t27{core::Object};
-  objectVar = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+              ^" in let self::error::YpotentiallyNull% #t15 = yPotentiallyNullArg in #t15 == null ?{core::Object} #t15 as{TypeError,ForNonNullableByDefault} core::Object : #t15{core::Object};
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-              ^" in let self::error::YpotentiallyNull? #t29 = yPotentiallyNullNullableArg in #t29 == null ?{core::Object} #t29 as{TypeError,ForNonNullableByDefault} core::Object : #t29{core::Object};
-  core::num numVar = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+              ^" in let self::error::YpotentiallyNull? #t16 = yPotentiallyNullNullableArg in #t16 == null ?{core::Object} #t16 as{TypeError,ForNonNullableByDefault} core::Object : #t16{core::Object};
+  core::num numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
   numVar = numNullableArg;
-           ^" in let core::num? #t33 = numNullableArg in #t33 == null ?{core::num} #t33 as{TypeError,ForNonNullableByDefault} core::num : #t33{core::num};
-  numVar = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+           ^" in let core::num? #t17 = numNullableArg in #t17 == null ?{core::num} #t17 as{TypeError,ForNonNullableByDefault} core::num : #t17{core::num};
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
   numVar = intNullableArg;
-           ^" in let core::int? #t35 = intNullableArg in #t35 == null ?{core::num} #t35 as{TypeError,ForNonNullableByDefault} core::num : #t35{core::num};
-  numVar = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+           ^" in let core::int? #t18 = intNullableArg in #t18 == null ?{core::num} #t18 as{TypeError,ForNonNullableByDefault} core::num : #t18{core::num};
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
   numVar = doubleNullableArg;
-           ^" in let core::double? #t37 = doubleNullableArg in #t37 == null ?{core::num} #t37 as{TypeError,ForNonNullableByDefault} core::num : #t37{core::num};
-  numVar = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+           ^" in let core::double? #t19 = doubleNullableArg in #t19 == null ?{core::num} #t19 as{TypeError,ForNonNullableByDefault} core::num : #t19{core::num};
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+  core::int intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
            ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   intVar = intNullableArg;
-           ^" in let core::int? #t57 = intNullableArg in #t57 == null ?{core::int} #t57 as{TypeError,ForNonNullableByDefault} core::int : #t57{core::int};
-  intVar = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+           ^" in let core::int? #t20 = intNullableArg in #t20 == null ?{core::int} #t20 as{TypeError,ForNonNullableByDefault} core::int : #t20{core::int};
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
                      ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
   doubleVar = doubleNullableArg;
-              ^" in let core::double? #t81 = doubleNullableArg in #t81 == null ?{core::double} #t81 as{TypeError,ForNonNullableByDefault} core::double : #t81{core::double};
-  doubleVar = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+              ^" in let core::double? #t21 = doubleNullableArg in #t21 == null ?{core::double} #t21 as{TypeError,ForNonNullableByDefault} core::double : #t21{core::double};
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
                               ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
   toVoidVar = toVoidNullableArg;
-              ^" in let () →? void #t126 = toVoidNullableArg in #t126 == null ?{() → void} #t126 as{TypeError,ForNonNullableByDefault} () → void : #t126{() → void};
-  toVoidVar = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+              ^" in let () →? void #t22 = toVoidNullableArg in #t22 == null ?{() → void} #t22 as{TypeError,ForNonNullableByDefault} () → void : #t22{() → void};
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
                                ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
                    ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-                   ^" in let self::Tearoffable? #t149 = tearoffableNullableArg in #t149 == null ?{self::Tearoffable} #t149 as{TypeError,ForNonNullableByDefault} self::Tearoffable : #t149{self::Tearoffable};
-  tearoffableVar = let final Never #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in let self::Tearoffable? #t23 = tearoffableNullableArg in #t23 == null ?{self::Tearoffable} #t23 as{TypeError,ForNonNullableByDefault} self::Tearoffable : #t23{self::Tearoffable};
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final Never #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final Never #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YnonNull yNonNullVar = let final Never #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
   yNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final Never #t219 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t220 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t221 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t222 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t223 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t224 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t225 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t226 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t227 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t228 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t229 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t230 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t231 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t232 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t233 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t234 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t235 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
                         ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t236 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t237 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t238 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t239 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
index 6dec7c2..5603cdc 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
@@ -1032,758 +1032,758 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+  core::Object objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
                      ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
-  objectVar = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
-  core::num numVar = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+  core::num numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
   numVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
   numVar = intNullableArg;
            ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
   numVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+  core::int intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
            ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   intVar = intNullableArg;
            ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
                      ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
   doubleVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
                               ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
   toVoidVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
                                ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
                    ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
                    ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final Never #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final Never #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YnonNull yNonNullVar = let final Never #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
   yNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final Never #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
                         ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
index 906e01c..565f0f3 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
@@ -1032,758 +1032,758 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+  core::Object objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
                      ^" in objectNullableArg;
-  objectVar = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
               ^" in numNullableArg;
-  objectVar = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
               ^" in intNullableArg;
-  objectVar = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
               ^" in doubleNullableArg;
-  objectVar = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
               ^" in functionNullableArg;
-  objectVar = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
               ^" in toVoidNullableArg;
-  objectVar = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg;
-  objectVar = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg;
-  objectVar = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg;
-  objectVar = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg;
-  objectVar = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg;
-  objectVar = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg;
-  objectVar = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg;
-  core::num numVar = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+  core::num numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
   numVar = numNullableArg;
            ^" in numNullableArg;
-  numVar = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
   numVar = intNullableArg;
            ^" in intNullableArg;
-  numVar = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
   numVar = doubleNullableArg;
            ^" in doubleNullableArg;
-  numVar = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+  core::int intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
                ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
            ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
            ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
            ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   intVar = intNullableArg;
            ^" in intNullableArg;
-  intVar = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
                      ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
   doubleVar = doubleNullableArg;
               ^" in doubleNullableArg;
-  doubleVar = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
                               ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
               ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
   toVoidVar = toVoidNullableArg;
               ^" in toVoidNullableArg;
-  toVoidVar = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
                                ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
                    ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
                    ^" in tearoffableNullableArg;
-  tearoffableVar = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final Never #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
   xNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xNonNullVar = let final Never #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final Never #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  xPotentiallyNullVar = let final Never #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YnonNull yNonNullVar = let final Never #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
                 ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
   yNonNullVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yNonNullVar = let final Never #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final Never #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
                                          ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
                         ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
                         ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
                         ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
-  yPotentiallyNullVar = let final Never #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
                         ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
index b5c4d02..1f4c1bb 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
@@ -203,12 +203,12 @@
 static method barContext(core::List<self::A> x) → void {}
 static method bazContext(() → core::num f) → void {}
 static method foo(self::B? x, core::List<self::B?> l, core::Map<self::B?, self::B?> m, core::List<self::B>? l2, core::Map<self::B, self::B>? m2) → self::A {
-  self::fooContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+  self::A a = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a = x; // Error.
@@ -233,15 +233,15 @@
   <self::A, self::A>{invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:32:13: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   <A, A>{...m2}; // Error.
             ^": null};
-  for (final self::B? #t3 in l) {
-    self::A y = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+  for (final self::B? #t1 in l) {
+    self::A y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (A y in l) {} // Error.
-         ^" in #t3 as{TypeError,ForNonNullableByDefault} self::A;
+         ^" in #t1 as{TypeError,ForNonNullableByDefault} self::A;
   }
-  for (self::A y in let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+  for (self::A y in invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'Iterable' is from 'dart:core'.
@@ -263,14 +263,14 @@
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -278,20 +278,20 @@
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   <List<A>, List<A>>{...m}; // Error.
                         ^"};
-  for (final core::List<self::B?> #t11 in l) {
-    core::List<self::A> y = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  for (final core::List<self::B?> #t2 in l) {
+    core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t2 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
   }
-  return let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,48 +331,48 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t3 = c in #t3 == null ?{() → core::num?} null : #t3.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::fooContext(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a1 = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
-  self::A a2 = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   if(true) {
-    return let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x as{TypeError,ForNonNullableByDefault} self::A;
   }
   else {
-    return let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index 74f4fa8..663f7f7 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -203,16 +203,16 @@
 static method barContext(core::List<self::A> x) → void {}
 static method bazContext(() → core::num f) → void {}
 static method foo(self::B? x, core::List<self::B?> l, core::Map<self::B?, self::B?> m, core::List<self::B>? l2, core::Map<self::B, self::B>? m2) → self::A {
-  self::fooContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
-             ^" in let self::B? #t2 = x in #t2 == null ?{self::A} #t2 as{TypeError,ForNonNullableByDefault} self::A : #t2{self::A});
-  self::A a = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+             ^" in let self::B? #t1 = x in #t1 == null ?{self::A} #t1 as{TypeError,ForNonNullableByDefault} self::A : #t1{self::A});
+  self::A a = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a = x; // Error.
-        ^" in let self::B? #t4 = x in #t4 == null ?{self::A} #t4 as{TypeError,ForNonNullableByDefault} self::A : #t4{self::A};
+        ^" in let self::B? #t2 = x in #t2 == null ?{self::A} #t2 as{TypeError,ForNonNullableByDefault} self::A : #t2{self::A};
   core::_GrowableList::_literal1<self::A>(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:29:10: Error: Can't assign spread elements of type 'B?' to collection elements of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -236,26 +236,26 @@
   {
     core::Iterator<self::B?> :sync-for-iterator = l.{core::Iterable::iterator}{core::Iterator<self::B?>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::B? #t5 = :sync-for-iterator.{core::Iterator::current}{self::B?};
+      final self::B? #t3 = :sync-for-iterator.{core::Iterator::current}{self::B?};
       {
-        self::A y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+        self::A y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (A y in l) {} // Error.
-         ^" in let self::B? #t7 = #t5 in #t7 == null ?{self::A} #t7 as{TypeError,ForNonNullableByDefault} self::A : #t7{self::A};
+         ^" in let self::B? #t4 = #t3 in #t4 == null ?{self::A} #t4 as{TypeError,ForNonNullableByDefault} self::A : #t4{self::A};
       }
     }
   }
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'Iterable' is from 'dart:core'.
   for (A y in l2) {} // Error.
-              ^" in let core::List<self::B>? #t9 = l2 in #t9 == null ?{core::Iterable<dynamic>} #t9 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t9{core::Iterable<dynamic>}).{core::Iterable::iterator}{core::Iterator<dynamic>};
+              ^" in let core::List<self::B>? #t5 = l2 in #t5 == null ?{core::Iterable<dynamic>} #t5 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t5{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      self::A y = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      self::A y = :sync-for-iterator.{core::Iterator::current}{Never};
       {}
     }
   }
@@ -285,15 +285,15 @@
         #L4:
         {
           if(true) {
-            :return_value = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
-             ^" in let self::B? #t11 = x in #t11 == null ?{self::A} #t11 as{TypeError,ForNonNullableByDefault} self::A : #t11{self::A};
+             ^" in let self::B? #t6 = x in #t6 == null ?{self::A} #t6 as{TypeError,ForNonNullableByDefault} self::A : #t6{self::A};
             break #L4;
           }
           else {
-            :return_value = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,20 +314,20 @@
     :is_sync = true;
     return :async_future;
   }
-  return let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
-         ^" in let self::B? #t14 = x in #t14 == null ?{self::A} #t14 as{TypeError,ForNonNullableByDefault} self::A : #t14{self::A};
+         ^" in let self::B? #t7 = x in #t7 == null ?{self::A} #t7 as{TypeError,ForNonNullableByDefault} self::A : #t7{self::A};
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -353,19 +353,19 @@
   {
     core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator}{core::Iterator<core::List<self::B?>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::List<self::B?> #t17 = :sync-for-iterator.{core::Iterator::current}{core::List<self::B?>};
+      final core::List<self::B?> #t8 = :sync-for-iterator.{core::Iterator::current}{core::List<self::B?>};
       {
-        core::List<self::A> y = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+        core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t17 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t8 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
       }
     }
   }
-  return let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -373,38 +373,38 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t21 = c in #t21 == null ?{() → core::num?} null : #t21.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t9 = c in #t9 == null ?{() → core::num?} null : #t9.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
-             ^" in let Null #t23 = x in #t23 == null ?{self::A} #t23 as{TypeError,ForNonNullableByDefault} self::A : #t23{self::A});
-  self::fooContext(let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+             ^" in let Null #t10 = x in #t10 == null ?{self::A} #t10 as{TypeError,ForNonNullableByDefault} self::A : #t10{self::A});
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
-             ^" in let Null #t25 = null in #t25 == null ?{self::A} #t25 as{TypeError,ForNonNullableByDefault} self::A : #t25{self::A});
-  self::A a1 = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+             ^" in let Null #t11 = null in #t11 == null ?{self::A} #t11 as{TypeError,ForNonNullableByDefault} self::A : #t11{self::A});
+  self::A a1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
-         ^" in let Null #t27 = x in #t27 == null ?{self::A} #t27 as{TypeError,ForNonNullableByDefault} self::A : #t27{self::A};
-  self::A a2 = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+         ^" in let Null #t12 = x in #t12 == null ?{self::A} #t12 as{TypeError,ForNonNullableByDefault} self::A : #t12{self::A};
+  self::A a2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
-         ^" in let Null #t29 = null in #t29 == null ?{self::A} #t29 as{TypeError,ForNonNullableByDefault} self::A : #t29{self::A};
+         ^" in let Null #t13 = null in #t13 == null ?{self::A} #t13 as{TypeError,ForNonNullableByDefault} self::A : #t13{self::A};
   if(true) {
-    return let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
-           ^" in let Null #t31 = x in #t31 == null ?{self::A} #t31 as{TypeError,ForNonNullableByDefault} self::A : #t31{self::A};
+           ^" in let Null #t14 = x in #t14 == null ?{self::A} #t14 as{TypeError,ForNonNullableByDefault} self::A : #t14{self::A};
   }
   else {
-    return let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
-           ^" in let Null #t33 = null in #t33 == null ?{self::A} #t33 as{TypeError,ForNonNullableByDefault} self::A : #t33{self::A};
+           ^" in let Null #t15 = null in #t15 == null ?{self::A} #t15 as{TypeError,ForNonNullableByDefault} self::A : #t15{self::A};
   }
   function local() → FutureOr<self::A> /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
@@ -419,14 +419,14 @@
         #L5:
         {
           if(true) {
-            :return_value = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
-             ^" in let Null #t35 = null in #t35 == null ?{self::A} #t35 as{TypeError,ForNonNullableByDefault} self::A : #t35{self::A};
+             ^" in let Null #t16 = null in #t16 == null ?{self::A} #t16 as{TypeError,ForNonNullableByDefault} self::A : #t16{self::A};
             break #L5;
           }
           else {
-            :return_value = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
@@ -453,21 +453,6 @@
   #C1 = self::A {}
 }
 
-Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///assignability_error_messages.dart:67:14 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:67:14 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:67:14 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///assignability_error_messages.dart:69:10 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:69:10 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:69:10 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///assignability_error_messages.dart:73:12 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:73:12 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:73:12 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 208, effectively constant: 12
-
 
 Constructor coverage from constants:
 org-dartlang-testcase:///assignability_error_messages.dart:
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
index b5c4d02..1f4c1bb 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
@@ -203,12 +203,12 @@
 static method barContext(core::List<self::A> x) → void {}
 static method bazContext(() → core::num f) → void {}
 static method foo(self::B? x, core::List<self::B?> l, core::Map<self::B?, self::B?> m, core::List<self::B>? l2, core::Map<self::B, self::B>? m2) → self::A {
-  self::fooContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+  self::A a = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a = x; // Error.
@@ -233,15 +233,15 @@
   <self::A, self::A>{invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:32:13: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   <A, A>{...m2}; // Error.
             ^": null};
-  for (final self::B? #t3 in l) {
-    self::A y = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+  for (final self::B? #t1 in l) {
+    self::A y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (A y in l) {} // Error.
-         ^" in #t3 as{TypeError,ForNonNullableByDefault} self::A;
+         ^" in #t1 as{TypeError,ForNonNullableByDefault} self::A;
   }
-  for (self::A y in let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+  for (self::A y in invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'Iterable' is from 'dart:core'.
@@ -263,14 +263,14 @@
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -278,20 +278,20 @@
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   <List<A>, List<A>>{...m}; // Error.
                         ^"};
-  for (final core::List<self::B?> #t11 in l) {
-    core::List<self::A> y = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  for (final core::List<self::B?> #t2 in l) {
+    core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t2 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
   }
-  return let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,48 +331,48 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t3 = c in #t3 == null ?{() → core::num?} null : #t3.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::fooContext(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a1 = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
-  self::A a2 = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   if(true) {
-    return let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x as{TypeError,ForNonNullableByDefault} self::A;
   }
   else {
-    return let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 454dea3..374fc977 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -203,12 +203,12 @@
 static method barContext(core::List<self::A> x) → void {}
 static method bazContext(() → core::num f) → void {}
 static method foo(self::B? x, core::List<self::B?> l, core::Map<self::B?, self::B?> m, core::List<self::B>? l2, core::Map<self::B, self::B>? m2) → self::A {
-  self::fooContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x);
-  self::A a = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+  self::A a = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a = x; // Error.
@@ -236,26 +236,26 @@
   {
     core::Iterator<self::B?> :sync-for-iterator = l.{core::Iterable::iterator}{core::Iterator<self::B?>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::B? #t3 = :sync-for-iterator.{core::Iterator::current}{self::B?};
+      final self::B? #t1 = :sync-for-iterator.{core::Iterator::current}{self::B?};
       {
-        self::A y = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+        self::A y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (A y in l) {} // Error.
-         ^" in #t3;
+         ^" in #t1;
       }
     }
   }
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'Iterable' is from 'dart:core'.
   for (A y in l2) {} // Error.
-              ^" in l2).{core::Iterable::iterator}{core::Iterator<dynamic>};
+              ^" in l2.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      self::A y = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      self::A y = :sync-for-iterator.{core::Iterator::current}{Never};
       {}
     }
   }
@@ -285,7 +285,7 @@
         #L4:
         {
           if(true) {
-            :return_value = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
@@ -293,7 +293,7 @@
             break #L4;
           }
           else {
-            :return_value = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,20 +314,20 @@
     :is_sync = true;
     return :async_future;
   }
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x);
-  core::List<self::A> y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -353,19 +353,19 @@
   {
     core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator}{core::Iterator<core::List<self::B?>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::List<self::B?> #t11 = :sync-for-iterator.{core::Iterator::current}{core::List<self::B?>};
+      final core::List<self::B?> #t2 = :sync-for-iterator.{core::Iterator::current}{core::List<self::B?>};
       {
-        core::List<self::A> y = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+        core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t11;
+               ^" in #t2;
       }
     }
   }
-  return let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -373,35 +373,35 @@
          ^" in x;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call}{() → core::num?});
+             ^" in let final self::C #t3 = c in #t3 == null ?{() → core::num?} null : #t3.{self::C::call}{() → core::num?});
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x);
-  self::fooContext(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null);
-  self::A a1 = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x;
-  self::A a2 = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null;
   if(true) {
-    return let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x;
   }
   else {
-    return let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null;
@@ -419,14 +419,14 @@
         #L5:
         {
           if(true) {
-            :return_value = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in null;
             break #L5;
           }
           else {
-            :return_value = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
index 2984427..e93db55 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
@@ -35,20 +35,20 @@
 }
 static method error() → dynamic {
   () →? void f;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
    ^" in f{<nullable>}.(){() →? void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
     ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
          ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
           ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
index 2984427..e93db55 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
@@ -35,20 +35,20 @@
 }
 static method error() → dynamic {
   () →? void f;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
    ^" in f{<nullable>}.(){() →? void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
     ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
          ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
           ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
index 2984427..e93db55 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
@@ -35,20 +35,20 @@
 }
 static method error() → dynamic {
   () →? void f;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
    ^" in f{<nullable>}.(){() →? void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
     ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
          ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
           ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
index 2984427..e93db55 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
@@ -35,20 +35,20 @@
 }
 static method error() → dynamic {
   () →? void f;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
    ^" in f{<nullable>}.(){() →? void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
     ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
          ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
           ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
index ddfe4c9..23b6d19 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
@@ -299,248 +299,248 @@
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
index ddfe4c9..23b6d19 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
@@ -299,248 +299,248 @@
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
index ddfe4c9..23b6d19 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
@@ -299,248 +299,248 @@
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
index ddfe4c9..23b6d19 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
@@ -299,248 +299,248 @@
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
   a =={self::A::==}{(self::A) → core::bool} a;
   a =={self::A::==}{(self::A) → core::bool} b;
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
   b =={self::B::==}{(self::A) → core::bool} a;
   b =={self::B::==}{(self::A) → core::bool} b;
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
-       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
-       ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
-               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
-               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
   c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
-           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
-           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
-           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
-           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
-              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
-              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
-              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
-              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
   c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
-  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
-              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
-       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
-       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
-       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
-  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
-       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
   d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
index ae2d66b..aae820c 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
@@ -20,7 +20,7 @@
     ;
   method foo() → core::int {
     core::int x;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
            ^" in x;
   }
@@ -34,7 +34,7 @@
 }
 static method foo() → core::int {
   core::int x;
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
          ^" in x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
index ae2d66b..aae820c 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
     ;
   method foo() → core::int {
     core::int x;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
            ^" in x;
   }
@@ -34,7 +34,7 @@
 }
 static method foo() → core::int {
   core::int x;
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
          ^" in x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
index ae2d66b..aae820c 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
@@ -20,7 +20,7 @@
     ;
   method foo() → core::int {
     core::int x;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
            ^" in x;
   }
@@ -34,7 +34,7 @@
 }
 static method foo() → core::int {
   core::int x;
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
          ^" in x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
index ae2d66b..aae820c 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
     ;
   method foo() → core::int {
     core::int x;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
            ^" in x;
   }
@@ -34,7 +34,7 @@
 }
 static method foo() → core::int {
   core::int x;
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
          ^" in x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
index b478d6b..8a0aaba 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
@@ -70,13 +70,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
@@ -92,20 +92,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
 static field () → Null fieldCompound = () → Null {
   late final core::int local4;
   local4 = 0;
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
@@ -116,13 +116,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
@@ -138,20 +138,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
 static method methodCompound() → dynamic {
   late final core::int local4;
   local4 = 0;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
index b478d6b..8a0aaba 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
@@ -70,13 +70,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
@@ -92,20 +92,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
 static field () → Null fieldCompound = () → Null {
   late final core::int local4;
   local4 = 0;
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
@@ -116,13 +116,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
@@ -138,20 +138,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
 static method methodCompound() → dynamic {
   late final core::int local4;
   local4 = 0;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
index b478d6b..8a0aaba 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
@@ -70,13 +70,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
@@ -92,20 +92,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
 static field () → Null fieldCompound = () → Null {
   late final core::int local4;
   local4 = 0;
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
@@ -116,13 +116,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
@@ -138,20 +138,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
 static method methodCompound() → dynamic {
   late final core::int local4;
   local4 = 0;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
index b478d6b..8a0aaba 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
@@ -70,13 +70,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
@@ -92,20 +92,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 };
 static field () → Null fieldCompound = () → Null {
   late final core::int local4;
   local4 = 0;
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
@@ -116,13 +116,13 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
@@ -138,20 +138,20 @@
   local2 = value;
   local4 = 0;
   local6 = 0;
-  let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
   local2 = value; // error
   ^^^^^^" in local2 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
   local4 = 0; // error
   ^^^^^^" in local4 = 0;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
   local6 = 0; // error
   ^^^^^^" in local6 = 0;
 }
 static method methodCompound() → dynamic {
   late final core::int local4;
   local4 = 0;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
   ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
index 50bf941..58f8535 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
@@ -103,22 +103,22 @@
   FutureOr<core::int>local5;
   late FutureOr<core::int>local6;
   late T% local7 = value;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -140,15 +140,15 @@
     local6 = 0;
     local7;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -157,12 +157,12 @@
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -172,22 +172,22 @@
   FutureOr<core::int>local5;
   late FutureOr<core::int>local6;
   late self::methodDirect::T% local7 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -209,15 +209,15 @@
     local6 = 0;
     local7 = value;
   }
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -226,11 +226,11 @@
 static method methodCompound() → dynamic {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
index b110df5..e3f741f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
@@ -105,22 +105,22 @@
   function #local7#initializer() → T%
     return value;
   late T% local7 = #local7#initializer(){() → T%};
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -144,15 +144,15 @@
     local6 = 0;
     local7;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -161,12 +161,12 @@
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -178,22 +178,22 @@
   function #local7#initializer() → self::methodDirect::T%
     return value;
   late self::methodDirect::T% local7 = #local7#initializer(){() → self::methodDirect::T%};
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -217,15 +217,15 @@
     local6 = 0;
     local7 = value;
   }
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -234,11 +234,11 @@
 static method methodCompound() → dynamic {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
index 50bf941..58f8535 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
@@ -103,22 +103,22 @@
   FutureOr<core::int>local5;
   late FutureOr<core::int>local6;
   late T% local7 = value;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -140,15 +140,15 @@
     local6 = 0;
     local7;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -157,12 +157,12 @@
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -172,22 +172,22 @@
   FutureOr<core::int>local5;
   late FutureOr<core::int>local6;
   late self::methodDirect::T% local7 = value;
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -209,15 +209,15 @@
     local6 = 0;
     local7 = value;
   }
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -226,11 +226,11 @@
 static method methodCompound() → dynamic {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
index b110df5..e3f741f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
@@ -105,22 +105,22 @@
   function #local7#initializer() → T%
     return value;
   late T% local7 = #local7#initializer(){() → T%};
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -144,15 +144,15 @@
     local6 = 0;
     local7;
   }
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -161,12 +161,12 @@
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -178,22 +178,22 @@
   function #local7#initializer() → self::methodDirect::T%
     return value;
   late self::methodDirect::T% local7 = #local7#initializer(){() → self::methodDirect::T%};
-  let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
   ^^^^^^" in local2;
-  let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
   ^^^^^^" in local4;
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
   ^^^^^^" in local6;
   local7;
@@ -217,15 +217,15 @@
     local6 = 0;
     local7 = value;
   }
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
   local2;
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   local4;
-  let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   local6;
@@ -234,11 +234,11 @@
 static method methodCompound() → dynamic {
   core::int local3;
   late core::int local4;
-  local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
-  local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
index f47ac7f..db466d1 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
@@ -22,10 +22,10 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+    this.{self::A::bar}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
         ^^^^^" in value){(self::A::T%) → dynamic};
-    this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+    this.{self::A::barInt}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
            ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index f47ac7f..db466d1 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -22,10 +22,10 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+    this.{self::A::bar}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
         ^^^^^" in value){(self::A::T%) → dynamic};
-    this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+    this.{self::A::barInt}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
            ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
index f47ac7f..db466d1 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
@@ -22,10 +22,10 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+    this.{self::A::bar}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
         ^^^^^" in value){(self::A::T%) → dynamic};
-    this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+    this.{self::A::barInt}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
            ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index f47ac7f..db466d1 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -22,10 +22,10 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+    this.{self::A::bar}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
         ^^^^^" in value){(self::A::T%) → dynamic};
-    this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+    this.{self::A::barInt}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
            ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
index f003f8c..d3ad413 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
   if(a is{ForNonNullableByDefault} core::String) {
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
-    core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String s = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
index f003f8c..d3ad413 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
   if(a is{ForNonNullableByDefault} core::String) {
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
-    core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String s = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
index f003f8c..d3ad413 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
   if(a is{ForNonNullableByDefault} core::String) {
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
-    core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String s = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
index f003f8c..d3ad413 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
   if(a is{ForNonNullableByDefault} core::String) {
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
-    core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    core::String s = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
                 ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
index 9c492c7..36ed89b 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
@@ -253,54 +253,54 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
   c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
index 9c492c7..36ed89b 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
@@ -253,54 +253,54 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
   c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
index 9c492c7..36ed89b 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
@@ -253,54 +253,54 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
   c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
index 9c492c7..36ed89b 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
@@ -253,54 +253,54 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
   c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
index 85f6043..92b80e8 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
@@ -328,79 +328,79 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   core::int c = 0;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
index 85f6043..92b80e8 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
@@ -328,79 +328,79 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   core::int c = 0;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
index 85f6043..92b80e8 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
@@ -328,79 +328,79 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   core::int c = 0;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
index 85f6043..92b80e8 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
@@ -328,79 +328,79 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
   c.instanceMethod();
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^"{dynamic}.call();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
   c.instanceSetter = 0;
-    ^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
   c.instanceField;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
   c.instanceField = 0;
-    ^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
   c.instanceFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
   c.instanceFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
   c.instanceLateFinalFieldAndSetter1 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
   c.instanceLateFinalFieldAndSetter2 = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2 = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
   c.instanceDuplicateFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
   c.instanceFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
   c.instanceDuplicateFieldAndDuplicateSetter = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
 }
 static method main() → dynamic {
   core::int c = 0;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart
index bcd891f..cdde874 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart
@@ -79,9 +79,25 @@
 
 int topLevelMethodAndSetter2() => 1;
 
+var field = topLevelMethod;
+
+@topLevelMethod
 test() {
   topLevelMethod();
   (topLevelMethod)();
+  if (topLevelMethod) {}
+  topLevelMethod;
+  @topLevelMethod
+  var foo;
+  switch (null) {
+    case topLevelMethod;
+  }
+  topLevelMethod || topLevelMethod;
+  topLevelMethod + 0;
+  topLevelMethod ~ 0;
+  topLevelMethod ?? topLevelMethod;
+  topLevelMethod?.foo;
+  topLevelMethod?.foo();
   topLevelGetter;
   topLevelSetter = 0;
   topLevelField;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
index ca55581..85c4c69 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
@@ -112,55 +112,123 @@
 // int topLevelMethodAndSetter2() => 1;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   topLevelMethod();
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   (topLevelMethod)();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   if (topLevelMethod) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:24: Error: Expected ':' before this.
+//     case topLevelMethod;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//     case topLevelMethod;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod + 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+//   topLevelMethod ~ 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
 //   topLevelGetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
 //   topLevelSetter = 0;
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
 //   topLevelField;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
 //   topLevelField = 0;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndSetter = 0;
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
 //   topLevelFieldAndDuplicateSetter = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndDuplicateSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndDuplicateSetter = 0;
 //                                            ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
 //   topLevelMethodAndSetter1 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
 //   topLevelMethodAndSetter2 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
@@ -176,6 +244,9 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+var field = topLevelMethod;
+            ^";
 static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
@@ -203,45 +274,89 @@
 }
 static method topLevelMethodAndSetter2() → core::int
   return 1;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+@topLevelMethod
+ ^"
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
   ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
    ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+  if(invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  if (topLevelMethod) {}
+      ^") {
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod;
+  ^";
+  @invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+  @topLevelMethod
+   ^" dynamic foo;
+  switch(null) {
+    #L1:
+    case invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+    case topLevelMethod;
+         ^":
+      {
+        ;
+      }
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+  ^" || invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod + 0;
+  ^"{<invalid>}.+(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+  topLevelMethod ~ 0;
+                 ^";
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+  ^" in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+                    ^" : #t1;
+  let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo;
+  ^" in #t2 == null ?{invalid-type} null : #t2{<invalid>}.foo;
+  let final invalid-type #t3 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo();
+  ^" in #t3 == null ?{dynamic} null : #t3{dynamic}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
   topLevelSetter = 0;
                  ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
   topLevelField;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
   topLevelField = 0;
                 ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
   topLevelDuplicateFieldAndSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
   topLevelDuplicateFieldAndSetter = 0;
                                   ^";
   self::topLevelFieldAndDuplicateSetter;
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
   topLevelFieldAndDuplicateSetter = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
   topLevelDuplicateFieldAndDuplicateSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
   topLevelDuplicateFieldAndDuplicateSetter = 0;
                                            ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
   topLevelMethodAndSetter1 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
   topLevelMethodAndSetter2 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
index ca55581..85c4c69 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
@@ -112,55 +112,123 @@
 // int topLevelMethodAndSetter2() => 1;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   topLevelMethod();
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   (topLevelMethod)();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   if (topLevelMethod) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:24: Error: Expected ':' before this.
+//     case topLevelMethod;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//     case topLevelMethod;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod + 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+//   topLevelMethod ~ 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
 //   topLevelGetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
 //   topLevelSetter = 0;
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
 //   topLevelField;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
 //   topLevelField = 0;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndSetter = 0;
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
 //   topLevelFieldAndDuplicateSetter = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndDuplicateSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndDuplicateSetter = 0;
 //                                            ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
 //   topLevelMethodAndSetter1 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
 //   topLevelMethodAndSetter2 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
@@ -176,6 +244,9 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+var field = topLevelMethod;
+            ^";
 static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
@@ -203,45 +274,89 @@
 }
 static method topLevelMethodAndSetter2() → core::int
   return 1;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+@topLevelMethod
+ ^"
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
   ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
    ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+  if(invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  if (topLevelMethod) {}
+      ^") {
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod;
+  ^";
+  @invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+  @topLevelMethod
+   ^" dynamic foo;
+  switch(null) {
+    #L1:
+    case invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+    case topLevelMethod;
+         ^":
+      {
+        ;
+      }
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+  ^" || invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod + 0;
+  ^"{<invalid>}.+(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+  topLevelMethod ~ 0;
+                 ^";
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+  ^" in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+                    ^" : #t1;
+  let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo;
+  ^" in #t2 == null ?{invalid-type} null : #t2{<invalid>}.foo;
+  let final invalid-type #t3 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo();
+  ^" in #t3 == null ?{dynamic} null : #t3{dynamic}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
   topLevelSetter = 0;
                  ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
   topLevelField;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
   topLevelField = 0;
                 ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
   topLevelDuplicateFieldAndSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
   topLevelDuplicateFieldAndSetter = 0;
                                   ^";
   self::topLevelFieldAndDuplicateSetter;
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
   topLevelFieldAndDuplicateSetter = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
   topLevelDuplicateFieldAndDuplicateSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
   topLevelDuplicateFieldAndDuplicateSetter = 0;
                                            ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
   topLevelMethodAndSetter1 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
   topLevelMethodAndSetter2 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect
index 20b935d..591960d 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect
@@ -29,6 +29,8 @@
 void set topLevelMethodAndSetter1(int value) {}
 void set topLevelMethodAndSetter2(int value) {}
 int topLevelMethodAndSetter2() => 1;
+var field = topLevelMethod;
+@topLevelMethod
 test() {}
 main() {}
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect
index bb9a9a2..b5d58c1 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect
@@ -32,7 +32,9 @@
 int topLevelMethodAndSetter1() => 1;
 int topLevelMethodAndSetter2() => 1;
 main() {}
+@topLevelMethod
 test() {}
+var field = topLevelMethod;
 void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
 void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
 void set topLevelMethodAndSetter1(int value) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
index ca55581..85c4c69 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
@@ -112,55 +112,123 @@
 // int topLevelMethodAndSetter2() => 1;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   topLevelMethod();
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   (topLevelMethod)();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   if (topLevelMethod) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:24: Error: Expected ':' before this.
+//     case topLevelMethod;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//     case topLevelMethod;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod + 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+//   topLevelMethod ~ 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
 //   topLevelGetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
 //   topLevelSetter = 0;
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
 //   topLevelField;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
 //   topLevelField = 0;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndSetter = 0;
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
 //   topLevelFieldAndDuplicateSetter = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndDuplicateSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndDuplicateSetter = 0;
 //                                            ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
 //   topLevelMethodAndSetter1 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
 //   topLevelMethodAndSetter2 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
@@ -176,6 +244,9 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+var field = topLevelMethod;
+            ^";
 static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
@@ -203,45 +274,89 @@
 }
 static method topLevelMethodAndSetter2() → core::int
   return 1;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+@topLevelMethod
+ ^"
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
   ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
    ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+  if(invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  if (topLevelMethod) {}
+      ^") {
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod;
+  ^";
+  @invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+  @topLevelMethod
+   ^" dynamic foo;
+  switch(null) {
+    #L1:
+    case invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+    case topLevelMethod;
+         ^":
+      {
+        ;
+      }
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+  ^" || invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod + 0;
+  ^"{<invalid>}.+(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+  topLevelMethod ~ 0;
+                 ^";
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+  ^" in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+                    ^" : #t1;
+  let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo;
+  ^" in #t2 == null ?{invalid-type} null : #t2{<invalid>}.foo;
+  let final invalid-type #t3 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo();
+  ^" in #t3 == null ?{dynamic} null : #t3{dynamic}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
   topLevelSetter = 0;
                  ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
   topLevelField;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
   topLevelField = 0;
                 ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
   topLevelDuplicateFieldAndSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
   topLevelDuplicateFieldAndSetter = 0;
                                   ^";
   self::topLevelFieldAndDuplicateSetter;
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
   topLevelFieldAndDuplicateSetter = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
   topLevelDuplicateFieldAndDuplicateSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
   topLevelDuplicateFieldAndDuplicateSetter = 0;
                                            ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
   topLevelMethodAndSetter1 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
   topLevelMethodAndSetter2 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
index 2540f70..25e0d01 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
@@ -112,6 +112,18 @@
 // int topLevelMethodAndSetter2() => 1;
 //     ^
 //
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+// @topLevelMethod
+//  ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -124,6 +136,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field;
 static const field dynamic _exports# = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}" /*isLegacy*/;
 static method topLevelMethod() → core::int
   ;
@@ -145,6 +158,11 @@
   ;
 static method topLevelMethodAndSetter2() → core::int
   ;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+@topLevelMethod
+ ^" in invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+@topLevelMethod
+ ^"
 static method test() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
index ca55581..85c4c69 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
@@ -112,55 +112,123 @@
 // int topLevelMethodAndSetter2() => 1;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   topLevelMethod();
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
 //   (topLevelMethod)();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   if (topLevelMethod) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:24: Error: Expected ':' before this.
+//     case topLevelMethod;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//     case topLevelMethod;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod + 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+//   topLevelMethod ~ 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
 //   topLevelGetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
 //   topLevelSetter = 0;
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
 //   topLevelField;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
 //   topLevelField = 0;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndSetter = 0;
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
 //   topLevelFieldAndDuplicateSetter = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
 //   topLevelDuplicateFieldAndDuplicateSetter;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
 //   topLevelDuplicateFieldAndDuplicateSetter = 0;
 //                                            ^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
 //   topLevelMethodAndSetter1 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
 //   topLevelMethodAndSetter2 = 0;
 //   ^^^^^^^^^^^^^^^^^^^^^^^^
 //
@@ -176,6 +244,9 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+var field = topLevelMethod;
+            ^";
 static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
@@ -203,45 +274,89 @@
 }
 static method topLevelMethodAndSetter2() → core::int
   return 1;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: 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.
+@topLevelMethod
+ ^"
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
   ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
    ^"{dynamic}.call();
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+  if(invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  if (topLevelMethod) {}
+      ^") {
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod;
+  ^";
+  @invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: 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.
+  @topLevelMethod
+   ^" dynamic foo;
+  switch(null) {
+    #L1:
+    case invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+    case topLevelMethod;
+         ^":
+      {
+        ;
+      }
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+  ^" || invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod + 0;
+  ^"{<invalid>}.+(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+  topLevelMethod ~ 0;
+                 ^";
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+  ^" in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+                    ^" : #t1;
+  let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo;
+  ^" in #t2 == null ?{invalid-type} null : #t2{<invalid>}.foo;
+  let final invalid-type #t3 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo();
+  ^" in #t3 == null ?{dynamic} null : #t3{dynamic}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
   topLevelSetter = 0;
                  ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
   topLevelField;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
   topLevelField = 0;
                 ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
   topLevelDuplicateFieldAndSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
   topLevelDuplicateFieldAndSetter = 0;
                                   ^";
   self::topLevelFieldAndDuplicateSetter;
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
   topLevelFieldAndDuplicateSetter = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
   topLevelDuplicateFieldAndDuplicateSetter;
   ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
   topLevelDuplicateFieldAndDuplicateSetter = 0;
                                            ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
   topLevelMethodAndSetter1 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
   topLevelMethodAndSetter2 = 0;
   ^^^^^^^^^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
index db34931..0d1dd3b 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
@@ -34,8 +34,8 @@
   core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
-                     ^^^^...";
-  dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+                     ^^^^..." in c.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  dynamic v6 = c.{core::Object::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
                           ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
index db34931..0d1dd3b 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
@@ -34,8 +34,8 @@
   core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
-                     ^^^^...";
-  dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+                     ^^^^..." in c.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  dynamic v6 = c.{core::Object::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
                           ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
index db34931..0d1dd3b 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
@@ -34,8 +34,8 @@
   core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
-                     ^^^^...";
-  dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+                     ^^^^..." in c.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  dynamic v6 = c.{core::Object::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
                           ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
index db34931..0d1dd3b 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
@@ -34,8 +34,8 @@
   core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
-                     ^^^^...";
-  dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+                     ^^^^..." in c.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  dynamic v6 = c.{core::Object::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
                           ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
index 5390151..07e7856 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
@@ -49,7 +49,7 @@
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     return t1.method1();
               ^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
@@ -58,7 +58,7 @@
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
   if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
-    self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
                            ^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
@@ -70,7 +70,7 @@
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method2'.
     SubClass subClass = t3.method2();
-                           ^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2() as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
index 06d884d..88447ae 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     return t1.method1();
               ^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
@@ -58,7 +58,7 @@
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
   if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
-    self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
                            ^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
@@ -70,7 +70,7 @@
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method2'.
     SubClass subClass = t3.method2();
-                           ^^^^^^^";
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2();
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
index 566b27a..d58abf1 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
@@ -49,7 +49,7 @@
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     return t1.method1();
               ^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
@@ -58,7 +58,7 @@
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
   if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
-    self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
                            ^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
@@ -70,7 +70,7 @@
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method2'.
     SubClass subClass = t3.method2();
-                           ^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2() as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
index 60b5e6c..b18bd22 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     return t1.method1();
               ^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
@@ -58,7 +58,7 @@
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
   if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
-    self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
                            ^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
@@ -70,7 +70,7 @@
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method2'.
     SubClass subClass = t3.method2();
-                           ^^^^^^^";
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2();
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
index 17ad5ba..6e42cfb 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
@@ -1164,12 +1164,20 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
   c.duplicateInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+      c.duplicateInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
   c.duplicateInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+      c.duplicateInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2;
   self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
   self::Class::staticFieldAndDuplicateSetter = self::Class::staticFieldAndDuplicateSetter;
   self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
@@ -1184,13 +1192,13 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
   c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
   c.staticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   self::Class::staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
@@ -1204,7 +1212,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
   c.duplicateStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter1;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter1 =
                                                ^";
@@ -1212,7 +1222,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
   c.duplicateStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter2;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter2 =
                                                ^";
@@ -1225,19 +1237,31 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
   0.extensionInstanceFieldAndDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+      0.extensionInstanceFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
   0.duplicateExtensionInstanceFieldAndSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+      0.duplicateExtensionInstanceFieldAndSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
   0.duplicateExtensionInstanceFieldAndSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+      0.duplicateExtensionInstanceFieldAndSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2;
   self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
   self::Extension|extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
   self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
@@ -1251,12 +1275,12 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
   0.extensionStaticFieldAndInstanceSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
   0.extensionStaticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   self::Extension|extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
   Extension.extensionInstanceFieldAndStaticSetter =
@@ -1264,42 +1288,58 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
   0.extensionInstanceFieldAndStaticSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+      0.extensionInstanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
                                                            ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
   0.extensionInstanceFieldAndStaticDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+      0.extensionInstanceFieldAndStaticDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
   0.duplicateExtensionInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
   0.duplicateExtensionInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
   0.duplicateExtensionStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
index 17ad5ba..6e42cfb 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
@@ -1164,12 +1164,20 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
   c.duplicateInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+      c.duplicateInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
   c.duplicateInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+      c.duplicateInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2;
   self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
   self::Class::staticFieldAndDuplicateSetter = self::Class::staticFieldAndDuplicateSetter;
   self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
@@ -1184,13 +1192,13 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
   c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
   c.staticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   self::Class::staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
@@ -1204,7 +1212,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
   c.duplicateStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter1;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter1 =
                                                ^";
@@ -1212,7 +1222,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
   c.duplicateStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter2;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter2 =
                                                ^";
@@ -1225,19 +1237,31 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
   0.extensionInstanceFieldAndDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+      0.extensionInstanceFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
   0.duplicateExtensionInstanceFieldAndSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+      0.duplicateExtensionInstanceFieldAndSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
   0.duplicateExtensionInstanceFieldAndSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+      0.duplicateExtensionInstanceFieldAndSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2;
   self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
   self::Extension|extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
   self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
@@ -1251,12 +1275,12 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
   0.extensionStaticFieldAndInstanceSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
   0.extensionStaticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   self::Extension|extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
   Extension.extensionInstanceFieldAndStaticSetter =
@@ -1264,42 +1288,58 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
   0.extensionInstanceFieldAndStaticSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+      0.extensionInstanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
                                                            ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
   0.extensionInstanceFieldAndStaticDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+      0.extensionInstanceFieldAndStaticDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
   0.duplicateExtensionInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
   0.duplicateExtensionInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
   0.duplicateExtensionStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
index 17ad5ba..6e42cfb 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
@@ -1164,12 +1164,20 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
   c.duplicateInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+      c.duplicateInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
   c.duplicateInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+      c.duplicateInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2;
   self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
   self::Class::staticFieldAndDuplicateSetter = self::Class::staticFieldAndDuplicateSetter;
   self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
@@ -1184,13 +1192,13 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
   c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
   c.staticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   self::Class::staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
@@ -1204,7 +1212,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
   c.duplicateStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter1;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter1 =
                                                ^";
@@ -1212,7 +1222,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
   c.duplicateStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter2;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter2 =
                                                ^";
@@ -1225,19 +1237,31 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
   0.extensionInstanceFieldAndDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+      0.extensionInstanceFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
   0.duplicateExtensionInstanceFieldAndSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+      0.duplicateExtensionInstanceFieldAndSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
   0.duplicateExtensionInstanceFieldAndSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+      0.duplicateExtensionInstanceFieldAndSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2;
   self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
   self::Extension|extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
   self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
@@ -1251,12 +1275,12 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
   0.extensionStaticFieldAndInstanceSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
   0.extensionStaticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   self::Extension|extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
   Extension.extensionInstanceFieldAndStaticSetter =
@@ -1264,42 +1288,58 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
   0.extensionInstanceFieldAndStaticSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+      0.extensionInstanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
                                                            ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
   0.extensionInstanceFieldAndStaticDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+      0.extensionInstanceFieldAndStaticDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
   0.duplicateExtensionInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
   0.duplicateExtensionInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
   0.duplicateExtensionStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
index 17ad5ba..6e42cfb 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
@@ -1164,12 +1164,20 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
   c.duplicateInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+      c.duplicateInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
   c.duplicateInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+      c.duplicateInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2;
   self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
   self::Class::staticFieldAndDuplicateSetter = self::Class::staticFieldAndDuplicateSetter;
   self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
@@ -1184,13 +1192,13 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
   c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
   c.staticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   self::Class::staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
@@ -1204,7 +1212,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
   c.duplicateStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter1;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter1 =
                                                ^";
@@ -1212,7 +1222,9 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
   c.duplicateStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter2;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
   Class.duplicateStaticFieldAndInstanceSetter2 =
                                                ^";
@@ -1225,19 +1237,31 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
   0.extensionInstanceFieldAndDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+      0.extensionInstanceFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
   0.duplicateExtensionInstanceFieldAndSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+      0.duplicateExtensionInstanceFieldAndSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
   0.duplicateExtensionInstanceFieldAndSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+      0.duplicateExtensionInstanceFieldAndSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2;
   self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
   self::Extension|extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
   self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
@@ -1251,12 +1275,12 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
   0.extensionStaticFieldAndInstanceSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
   0.extensionStaticFieldAndInstanceDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   self::Extension|extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
   Extension.extensionInstanceFieldAndStaticSetter =
@@ -1264,42 +1288,58 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
   0.extensionInstanceFieldAndStaticSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+      0.extensionInstanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
                                                            ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
   0.extensionInstanceFieldAndStaticDuplicateSetter =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+      0.extensionInstanceFieldAndStaticDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
   0.duplicateExtensionInstanceFieldAndStaticSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
   0.duplicateExtensionInstanceFieldAndStaticSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
   0.duplicateExtensionStaticFieldAndInstanceSetter1 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
                                                             ^";
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
index 8b35773..875fe7a 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
@@ -52,98 +52,98 @@
 import "dart:core" as core;
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
-  for (core::int x in let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
-    final core::List<core::int> #t2 = <core::int>[];
-    for (core::int x in let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    final core::List<core::int> #t1 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
                  ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t2.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t2;
-  for (core::int x in let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+      #t1.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t1;
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
-    final core::List<core::int> #t5 = <core::int>[];
-    for (core::int x in let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    final core::List<core::int> #t2 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
                  ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t5.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t5;
-  for (final dynamic #t7 in let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      #t2.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t2;
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t9 = <core::int>[];
-    for (final dynamic #t10 in let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::List<core::int> #t4 = <core::int>[];
+    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
                  ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t4.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t9;
-  for (final dynamic #t12 in let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  } =>#t4;
+  for (final dynamic #t6 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t14 = <core::int>[];
-    for (final dynamic #t15 in let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::List<core::int> #t7 = <core::int>[];
+    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
                  ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t14.{core::List::add}{Invariant}(x){(core::int) → void};
+      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t7.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t14;
+  } =>#t7;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   for (core::int x in i1)
     x;
   block {
-    final core::List<core::int> #t17 = <core::int>[];
+    final core::List<core::int> #t9 = <core::int>[];
     for (core::int x in i1)
-      #t17.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t17;
+      #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t9;
   for (core::int x in l1)
     x;
   block {
-    final core::List<core::int> #t18 = <core::int>[];
+    final core::List<core::int> #t10 = <core::int>[];
     for (core::int x in l1)
-      #t18.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t18;
-  for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t10.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t10;
+  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t20 = <core::int>[];
-    for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t20.{core::List::add}{Invariant}(x){(core::int) → void};
+    final core::List<core::int> #t12 = <core::int>[];
+    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t12.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t20;
+  } =>#t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
index 89a6493..021170d 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
@@ -53,115 +53,115 @@
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in let core::Iterable<core::int>? #t2 = i2 in #t2 == null ?{core::Iterable<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t2{core::Iterable<dynamic>}).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in let core::Iterable<core::int>? #t1 = i2 in #t1 == null ?{core::Iterable<dynamic>} #t1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t1{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
       x;
     }
   }
   block {
-    final core::List<core::int> #t3 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t2 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
-                 ^" in let core::Iterable<core::int>? #t5 = i2 in #t5 == null ?{core::Iterable<dynamic>} #t5 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t5{core::Iterable<dynamic>}).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                 ^" in let core::Iterable<core::int>? #t3 = i2 in #t3 == null ?{core::Iterable<dynamic>} #t3 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t3{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t3.{core::List::add}{Invariant}(x){(core::int) → void};
+        core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t2.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
-  } =>#t3;
+  } =>#t2;
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
-                ^" in let core::List<core::int>? #t7 = l2 in #t7 == null ?{core::Iterable<dynamic>} #t7 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t7{core::Iterable<dynamic>}).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in let core::List<core::int>? #t4 = l2 in #t4 == null ?{core::Iterable<dynamic>} #t4 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t4{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
       x;
     }
   }
   block {
+    final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in l2) x];
+                 ^" in let core::List<core::int>? #t6 = l2 in #t6 == null ?{core::Iterable<dynamic>} #t6 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t6{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<Never>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t5.{core::List::add}{Invariant}(x){(core::int) → void};
+      }
+    }
+  } =>#t5;
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o1) x;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{Never};
+      {
+        core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        x;
+      }
+    }
+  }
+  block {
     final core::List<core::int> #t8 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
- - 'List' is from 'dart:core'.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
-  [for (int x in l2) x];
-                 ^" in let core::List<core::int>? #t10 = l2 in #t10 == null ?{core::Iterable<dynamic>} #t10 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t10{core::Iterable<dynamic>}).{core::Iterable::iterator}{core::Iterator<dynamic>};
+  [for (int x in o1) x];
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t8.{core::List::add}{Invariant}(x){(core::int) → void};
+        final dynamic #t9 = :sync-for-iterator.{core::Iterator::current}{Never};
+        {
+          core::int x = #t9 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t8.{core::List::add}{Invariant}(x){(core::int) → void};
+        }
       }
     }
   } =>#t8;
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
- - 'Object' is from 'dart:core'.
- - 'Iterable' is from 'dart:core'.
-  for (int x in o1) x;
-                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
-    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t12 = :sync-for-iterator.{core::Iterator::current}{dynamic};
-      {
-        core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-        x;
-      }
-    }
-  }
-  block {
-    final core::List<core::int> #t13 = core::_GrowableList::•<core::int>(0);
-    {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
- - 'Object' is from 'dart:core'.
- - 'Iterable' is from 'dart:core'.
-  [for (int x in o1) x];
-                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
-      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t15 = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        {
-          core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t13.{core::List::add}{Invariant}(x){(core::int) → void};
-        }
-      }
-    }
-  } =>#t13;
-  {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t17 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t10 = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        core::int x = #t17 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t18 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t11 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t20 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t12 = :sync-for-iterator.{core::Iterator::current}{Never};
         {
-          core::int x = #t20 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t18.{core::List::add}{Invariant}(x){(core::int) → void};
+          core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t11.{core::List::add}{Invariant}(x){(core::int) → void};
         }
       }
     }
-  } =>#t18;
+  } =>#t11;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   {
@@ -172,15 +172,15 @@
     }
   }
   block {
-    final core::List<core::int> #t21 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t13 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<core::int> :sync-for-iterator = i1.{core::Iterable::iterator}{core::Iterator<core::int>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
-        #t21.{core::List::add}{Invariant}(x){(core::int) → void};
+        #t13.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
-  } =>#t21;
+  } =>#t13;
   {
     core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -189,37 +189,37 @@
     }
   }
   block {
-    final core::List<core::int> #t22 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t14 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator}{core::Iterator<core::int>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
-        #t22.{core::List::add}{Invariant}(x){(core::int) → void};
+        #t14.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
-  } =>#t22;
+  } =>#t14;
   {
     core::Iterator<dynamic> :sync-for-iterator = (d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t23 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t15 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        core::int x = #t23 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t24 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t16 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<dynamic> :sync-for-iterator = (d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t25 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t17 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          core::int x = #t25 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t24.{core::List::add}{Invariant}(x){(core::int) → void};
+          core::int x = #t17 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t16.{core::List::add}{Invariant}(x){(core::int) → void};
         }
       }
     }
-  } =>#t24;
+  } =>#t16;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
index 8b35773..875fe7a 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
@@ -52,98 +52,98 @@
 import "dart:core" as core;
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
-  for (core::int x in let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
-    final core::List<core::int> #t2 = <core::int>[];
-    for (core::int x in let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    final core::List<core::int> #t1 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
                  ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t2.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t2;
-  for (core::int x in let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+      #t1.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t1;
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
-    final core::List<core::int> #t5 = <core::int>[];
-    for (core::int x in let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    final core::List<core::int> #t2 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
                  ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t5.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t5;
-  for (final dynamic #t7 in let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      #t2.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t2;
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t9 = <core::int>[];
-    for (final dynamic #t10 in let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::List<core::int> #t4 = <core::int>[];
+    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
                  ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t4.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t9;
-  for (final dynamic #t12 in let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+  } =>#t4;
+  for (final dynamic #t6 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t14 = <core::int>[];
-    for (final dynamic #t15 in let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    final core::List<core::int> #t7 = <core::int>[];
+    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
                  ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t14.{core::List::add}{Invariant}(x){(core::int) → void};
+      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t7.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t14;
+  } =>#t7;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   for (core::int x in i1)
     x;
   block {
-    final core::List<core::int> #t17 = <core::int>[];
+    final core::List<core::int> #t9 = <core::int>[];
     for (core::int x in i1)
-      #t17.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t17;
+      #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t9;
   for (core::int x in l1)
     x;
   block {
-    final core::List<core::int> #t18 = <core::int>[];
+    final core::List<core::int> #t10 = <core::int>[];
     for (core::int x in l1)
-      #t18.{core::List::add}{Invariant}(x){(core::int) → void};
-  } =>#t18;
-  for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t10.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t10;
+  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t20 = <core::int>[];
-    for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t20.{core::List::add}{Invariant}(x){(core::int) → void};
+    final core::List<core::int> #t12 = <core::int>[];
+    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t12.{core::List::add}{Invariant}(x){(core::int) → void};
     }
-  } =>#t20;
+  } =>#t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
index b242ebb..5adda70 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
@@ -53,115 +53,115 @@
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in i2).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in i2.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
+      x;
+    }
+  }
+  block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in i2) x];
+                 ^" in i2.{core::Iterable::iterator}{core::Iterator<Never>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t1.{core::List::add}{Invariant}(x){(core::int) → void};
+      }
+    }
+  } =>#t1;
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in l2) x;
+                ^" in l2.{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
       x;
     }
   }
   block {
     final core::List<core::int> #t2 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
-  [for (int x in i2) x];
-                 ^" in i2).{core::Iterable::iterator}{core::Iterator<dynamic>};
+  [for (int x in l2) x];
+                 ^" in l2.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        core::int x = :sync-for-iterator.{core::Iterator::current}{Never};
         #t2.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
   } =>#t2;
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
- - 'List' is from 'dart:core'.
- - 'Iterable' is from 'dart:core'.
-  for (int x in l2) x;
-                ^" in l2).{core::Iterable::iterator}{core::Iterator<dynamic>};
-    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-      x;
-    }
-  }
-  block {
-    final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
-    {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
- - 'List' is from 'dart:core'.
- - 'Iterable' is from 'dart:core'.
-  [for (int x in l2) x];
-                 ^" in l2).{core::Iterable::iterator}{core::Iterator<dynamic>};
-      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        core::int x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-        #t5.{core::List::add}{Invariant}(x){(core::int) → void};
-      }
-    }
-  } =>#t5;
-  {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
-                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t9 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t4 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
-                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t11 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t5 = :sync-for-iterator.{core::Iterator::current}{Never};
         {
-          core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+          core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t4.{core::List::add}{Invariant}(x){(core::int) → void};
         }
       }
     }
-  } =>#t9;
+  } =>#t4;
   {
-    core::Iterator<dynamic> :sync-for-iterator = (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t13 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t6 = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t14 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t7 = core::_GrowableList::•<core::int>(0);
     {
-      core::Iterator<dynamic> :sync-for-iterator = (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t16 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{Never};
         {
-          core::int x = #t16 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t14.{core::List::add}{Invariant}(x){(core::int) → void};
+          core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t7.{core::List::add}{Invariant}(x){(core::int) → void};
         }
       }
     }
-  } =>#t14;
+  } =>#t7;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   {
@@ -172,15 +172,15 @@
     }
   }
   block {
-    final core::List<core::int> #t17 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t9 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<core::int> :sync-for-iterator = i1.{core::Iterable::iterator}{core::Iterator<core::int>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
-        #t17.{core::List::add}{Invariant}(x){(core::int) → void};
+        #t9.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
-  } =>#t17;
+  } =>#t9;
   {
     core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -189,37 +189,37 @@
     }
   }
   block {
-    final core::List<core::int> #t18 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t10 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator}{core::Iterator<core::int>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
-        #t18.{core::List::add}{Invariant}(x){(core::int) → void};
+        #t10.{core::List::add}{Invariant}(x){(core::int) → void};
       }
     }
-  } =>#t18;
+  } =>#t10;
   {
     core::Iterator<dynamic> :sync-for-iterator = (d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t19 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t11 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t20 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t12 = core::_GrowableList::•<core::int>(0);
     {
       core::Iterator<dynamic> :sync-for-iterator = (d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final dynamic #t21 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        final dynamic #t13 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t20.{core::List::add}{Invariant}(x){(core::int) → void};
+          core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t12.{core::List::add}{Invariant}(x){(core::int) → void};
         }
       }
     }
-  } =>#t20;
+  } =>#t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
index 862ef63..7a49cf6 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
@@ -247,17 +247,17 @@
   return 0;
 static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void {}
 static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void {}
 static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property6 => 0; // error
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
index 862ef63..7a49cf6 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
@@ -247,17 +247,17 @@
   return 0;
 static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void {}
 static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void {}
 static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property6 => 0; // error
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
index 37f68ac..1f876ab 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
@@ -253,22 +253,22 @@
   return 0;
 static method Extension|set#property3<T extends core::num>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4a<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4a<T extends core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
 static method Extension|get#property4b<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4b<T extends core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
 static method Extension|get#property5<T extends core::num>(lowered final core::int #this) → self::Extension|get#property5::T
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
 static method Extension|get#property6<T extends core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
index 37f68ac..1f876ab 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
@@ -253,22 +253,22 @@
   return 0;
 static method Extension|set#property3<T extends core::num>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4a<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4a<T extends core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
 static method Extension|get#property4b<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4b<T extends core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
 static method Extension|get#property5<T extends core::num>(lowered final core::int #this) → self::Extension|get#property5::T
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
 static method Extension|get#property6<T extends core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
index 37f68ac..1f876ab 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
@@ -253,22 +253,22 @@
   return 0;
 static method Extension|set#property3<T extends core::num>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4a<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4a<T extends core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
 static method Extension|get#property4b<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4b<T extends core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
 static method Extension|get#property5<T extends core::num>(lowered final core::int #this) → self::Extension|get#property5::T
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
 static method Extension|get#property6<T extends core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
index 37f68ac..1f876ab 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
@@ -253,22 +253,22 @@
   return 0;
 static method Extension|set#property3<T extends core::num>(lowered final core::int #this, core::int i) → void {}
 static method Extension|get#property4a<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4a<T extends core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
 static method Extension|get#property4b<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property4b<T extends core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
 static method Extension|get#property5<T extends core::num>(lowered final core::int #this) → self::Extension|get#property5::T
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property5<T extends core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
 static method Extension|get#property6<T extends core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
 static method Extension|set#property6<T extends core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.expect
index eae7c97..2e2a614 100644
--- a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.expect
@@ -18,7 +18,7 @@
 static method test2() → dynamic {
   dynamic d = (core::int a, core::int b) → core::int => a;
   d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
-  d = (core::int a, core::int b) → core::int => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+  d = (core::int a, core::int b) → core::int => invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   d = (a, b) => '\$a';
                     ^" in "${a}" as{TypeError,ForNonNullableByDefault} core::int;
 }
diff --git a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.transformed.expect
index eae7c97..2e2a614 100644
--- a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
 static method test2() → dynamic {
   dynamic d = (core::int a, core::int b) → core::int => a;
   d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
-  d = (core::int a, core::int b) → core::int => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+  d = (core::int a, core::int b) → core::int => invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   d = (a, b) => '\$a';
                     ^" in "${a}" as{TypeError,ForNonNullableByDefault} core::int;
 }
diff --git a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.expect
index eae7c97..2e2a614 100644
--- a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.expect
@@ -18,7 +18,7 @@
 static method test2() → dynamic {
   dynamic d = (core::int a, core::int b) → core::int => a;
   d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
-  d = (core::int a, core::int b) → core::int => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+  d = (core::int a, core::int b) → core::int => invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   d = (a, b) => '\$a';
                     ^" in "${a}" as{TypeError,ForNonNullableByDefault} core::int;
 }
diff --git a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.transformed.expect
index eae7c97..2e2a614 100644
--- a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 static method test2() → dynamic {
   dynamic d = (core::int a, core::int b) → core::int => a;
   d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
-  d = (core::int a, core::int b) → core::int => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+  d = (core::int a, core::int b) → core::int => invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   d = (a, b) => '\$a';
                     ^" in "${a}" as{TypeError,ForNonNullableByDefault} core::int;
 }
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
index e98b1ac..4c6feac 100644
--- a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
@@ -27,7 +27,7 @@
   self::f<core::String?>(snull);
   self::f<core::String>(s);
   self::g<core::Object>(d);
-  self::g<core::Object>(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  self::g<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
   g(v);
     ^" in v);
   self::g<core::Object>(onull);
@@ -35,7 +35,7 @@
   self::g<core::String>(snull);
   self::g<core::String>(s);
   self::h<core::Object>(d);
-  self::h<core::Object>(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  self::h<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
   h(v);
     ^" in v);
   self::h<core::Object>(onull);
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
index e98b1ac..4c6feac 100644
--- a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
   self::f<core::String?>(snull);
   self::f<core::String>(s);
   self::g<core::Object>(d);
-  self::g<core::Object>(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  self::g<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
   g(v);
     ^" in v);
   self::g<core::Object>(onull);
@@ -35,7 +35,7 @@
   self::g<core::String>(snull);
   self::g<core::String>(s);
   self::h<core::Object>(d);
-  self::h<core::Object>(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  self::h<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
   h(v);
     ^" in v);
   self::h<core::Object>(onull);
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
index e98b1ac..4c6feac 100644
--- a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
@@ -27,7 +27,7 @@
   self::f<core::String?>(snull);
   self::f<core::String>(s);
   self::g<core::Object>(d);
-  self::g<core::Object>(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  self::g<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
   g(v);
     ^" in v);
   self::g<core::Object>(onull);
@@ -35,7 +35,7 @@
   self::g<core::String>(snull);
   self::g<core::String>(s);
   self::h<core::Object>(d);
-  self::h<core::Object>(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  self::h<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
   h(v);
     ^" in v);
   self::h<core::Object>(onull);
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
index e98b1ac..4c6feac 100644
--- a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
   self::f<core::String?>(snull);
   self::f<core::String>(s);
   self::g<core::Object>(d);
-  self::g<core::Object>(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  self::g<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
   g(v);
     ^" in v);
   self::g<core::Object>(onull);
@@ -35,7 +35,7 @@
   self::g<core::String>(snull);
   self::g<core::String>(s);
   self::h<core::Object>(d);
-  self::h<core::Object>(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  self::h<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
   h(v);
     ^" in v);
   self::h<core::Object>(onull);
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
index 9920c38..7e8a8f2 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
@@ -542,63 +542,87 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
   c.methodAndField1 = c.methodAndField1;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
   c.methodAndField2 = c.methodAndField2;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
   c.methodAndFinalField1;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
   c.methodAndFinalField2;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4;
   c.{self::Class::methodAndFinalFieldAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter2} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter3} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter4} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
                          ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
@@ -608,21 +632,37 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
index 68ff748..46e1b34 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
@@ -542,63 +542,87 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
   c.methodAndField1 = c.methodAndField1;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
   c.methodAndField2 = c.methodAndField2;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
   c.methodAndFinalField1;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
   c.methodAndFinalField2;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4;
   c.{self::Class::methodAndFinalFieldAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter1;
   c.{self::Class::methodAndFinalFieldAndSetter2} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter2;
   c.{self::Class::methodAndFinalFieldAndSetter3} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter3;
   c.{self::Class::methodAndFinalFieldAndSetter4} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter4;
+  c.{self::Class::methodAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
                          ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
@@ -608,21 +632,37 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
index 9920c38..7e8a8f2 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
@@ -542,63 +542,87 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
   c.methodAndField1 = c.methodAndField1;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
   c.methodAndField2 = c.methodAndField2;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
   c.methodAndFinalField1;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
   c.methodAndFinalField2;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4;
   c.{self::Class::methodAndFinalFieldAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter2} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter3} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndFinalFieldAndSetter4} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
                          ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
@@ -608,21 +632,37 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
index 68ff748..46e1b34 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
@@ -542,63 +542,87 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
   c.methodAndField1 = c.methodAndField1;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
   c.methodAndField2 = c.methodAndField2;
-    ^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
   c.methodAndFinalField1;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
   c.methodAndFinalField2;
-    ^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4;
   c.{self::Class::methodAndFinalFieldAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter1;
   c.{self::Class::methodAndFinalFieldAndSetter2} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter2;
   c.{self::Class::methodAndFinalFieldAndSetter3} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter3;
   c.{self::Class::methodAndFinalFieldAndSetter4} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
-                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter4;
+  c.{self::Class::methodAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
                          ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
@@ -608,21 +632,37 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3;
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
index 76d99bf..e9cdc2d 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
@@ -70,7 +70,7 @@
 static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = <dynamic>[];
 static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
-static final field core::List<core::int> s3 = core::List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+static final field core::List<core::int> s3 = core::List::filled<core::int>(2, invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null as{TypeError,ForNonNullableByDefault} core::int);
 static final field dynamic s4 = (() → Null {
@@ -88,33 +88,33 @@
   }
 })(){() → Null};
 static field core::int? s5;
-static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static final field core::num s6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
               ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
-static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field dynamic s8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
              ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
-static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field core::int s9 = let final core::List<dynamic>? #t2 = self::s7 in let final core::int #t3 = 0 in let final core::int #t4 = 0 in let final void #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
-static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+             ^" in #t2.{core::List::[]=}{<nullable>}.(#t3, #t4){(core::int, dynamic) → void} in #t4;
+static final field core::int s10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
-static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+static final field core::int s11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
-static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static final field core::int s12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
             ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
-static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+static final field core::int s14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
                  ^" in self::s13{<nullable>}.(){() →? core::int};
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
index 3d7775d..1552eab 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
@@ -70,9 +70,9 @@
 static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = core::_GrowableList::•<dynamic>(0);
 static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
-static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
-                                   ^" in let Null #t3 = null in #t3 == null ?{core::int} #t3 as{TypeError,ForNonNullableByDefault} core::int : #t3{core::int});
+                                   ^" in let Null #t2 = null in #t2 == null ?{core::int} #t2 as{TypeError,ForNonNullableByDefault} core::int : #t2{core::int});
 static final field dynamic s4 = (() → Null {
   core::int e = 0;
   switch(e) {
@@ -88,33 +88,33 @@
   }
 })(){() → Null};
 static field core::int? s5;
-static final field core::num s6 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static final field core::num s6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
               ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
-static final field dynamic s8 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field dynamic s8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
              ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
-static final field core::int s9 = let final core::List<dynamic>? #t6 = self::s7 in let final core::int #t7 = 0 in let final core::int #t8 = 0 in let final void #t9 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field core::int s9 = let final core::List<dynamic>? #t3 = self::s7 in let final core::int #t4 = 0 in let final core::int #t5 = 0 in let final void #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t6.{core::List::[]=}{<nullable>}.(#t7, #t8){(core::int, dynamic) → void} in #t8;
-static final field core::int s10 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+             ^" in #t3.{core::List::[]=}{<nullable>}.(#t4, #t5){(core::int, dynamic) → void} in #t5;
+static final field core::int s10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
-static final field core::int s11 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+static final field core::int s11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
-static final field core::int s12 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static final field core::int s12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
             ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
-static final field core::int s14 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+static final field core::int s14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
                  ^" in self::s13{<nullable>}.(){() →? core::int};
@@ -130,10 +130,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///issue41102.dart:17:36 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:17:36 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:17:36 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:15 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
-Extra constant evaluation: evaluated: 61, effectively constant: 6
+Extra constant evaluation: evaluated: 31, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
index 76d99bf..e9cdc2d 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
@@ -70,7 +70,7 @@
 static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = <dynamic>[];
 static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
-static final field core::List<core::int> s3 = core::List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+static final field core::List<core::int> s3 = core::List::filled<core::int>(2, invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null as{TypeError,ForNonNullableByDefault} core::int);
 static final field dynamic s4 = (() → Null {
@@ -88,33 +88,33 @@
   }
 })(){() → Null};
 static field core::int? s5;
-static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static final field core::num s6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
               ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
-static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field dynamic s8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
              ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
-static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field core::int s9 = let final core::List<dynamic>? #t2 = self::s7 in let final core::int #t3 = 0 in let final core::int #t4 = 0 in let final void #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
-static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+             ^" in #t2.{core::List::[]=}{<nullable>}.(#t3, #t4){(core::int, dynamic) → void} in #t4;
+static final field core::int s10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
-static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+static final field core::int s11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
-static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static final field core::int s12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
             ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
-static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+static final field core::int s14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
                  ^" in self::s13{<nullable>}.(){() →? core::int};
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
index 9cdfa657..1b4a268 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
@@ -70,7 +70,7 @@
 static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = core::_GrowableList::•<dynamic>(0);
 static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
-static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null);
 static final field dynamic s4 = (() → Null {
@@ -88,33 +88,33 @@
   }
 })(){() → Null};
 static field core::int? s5;
-static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static final field core::num s6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
               ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
-static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field dynamic s8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
              ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
-static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+static final field core::int s9 = let final core::List<dynamic>? #t2 = self::s7 in let final core::int #t3 = 0 in let final core::int #t4 = 0 in let final void #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
-static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+             ^" in #t2.{core::List::[]=}{<nullable>}.(#t3, #t4){(core::int, dynamic) → void} in #t4;
+static final field core::int s10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
-static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+static final field core::int s11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
                ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
-static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static final field core::int s12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
             ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
-static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+static final field core::int s14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
                  ^" in self::s13{<nullable>}.(){() →? core::int};
@@ -130,7 +130,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:15 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
-Extra constant evaluation: evaluated: 55, effectively constant: 3
+Extra constant evaluation: evaluated: 31, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
index 18097c3..3874c5a 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
@@ -12,7 +12,7 @@
 import "dart:async" as asy;
 
 static method test() → dynamic async {
-  core::List<dynamic> y = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+  core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
            ^" in await self::l() as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
index 023355f..3864109 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
@@ -25,12 +25,11 @@
     try {
       #L1:
       {
-        final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^";
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<dynamic> y = let core::List<dynamic>? #t3 = _in::unsafeCast<core::List<dynamic>?>(:result) in #t3 == null ?{core::List<dynamic>} #t3 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t3{core::List<dynamic>};
+           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
index 18097c3..3874c5a 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
@@ -12,7 +12,7 @@
 import "dart:async" as asy;
 
 static method test() → dynamic async {
-  core::List<dynamic> y = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+  core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
            ^" in await self::l() as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
index 0ba3732..18ac50d 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
@@ -25,12 +25,11 @@
     try {
       #L1:
       {
-        final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^";
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<dynamic> y = _in::unsafeCast<core::List<dynamic>?>(:result);
+           ^" in _in::unsafeCast<core::List<dynamic>?>(:result);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
index 78aa0d3..5fca931 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
@@ -77,7 +77,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
   };
@@ -87,7 +87,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
   };
@@ -97,7 +97,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
   };
@@ -107,7 +107,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
@@ -117,7 +117,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
@@ -127,7 +127,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
@@ -137,7 +137,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
@@ -147,7 +147,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index 4f6a3ba..e3bb148 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -234,7 +234,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
         };
@@ -244,7 +244,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
         };
@@ -254,7 +254,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
         };
@@ -264,7 +264,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
@@ -285,7 +285,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
                 break #L8;
@@ -320,7 +320,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
                 break #L9;
@@ -354,7 +354,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
                 break #L10;
@@ -389,7 +389,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
                 break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
index a73797e..9940f1b 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
@@ -78,7 +78,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
   };
@@ -88,27 +88,27 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
   };
   (core::int) → core::String x5 = (core::int v) → core::String {
     try {
-      let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
   };
   (core::int) → core::String x6 = (core::int v) → core::String {
     try {
-      return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      return let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
@@ -118,7 +118,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
@@ -128,27 +128,27 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
     try {
-      let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
     try {
-      return let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      return let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index 6e6ee4d..dbb0ff6 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -235,7 +235,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
         };
@@ -245,27 +245,27 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
         };
         (core::int) → core::String x5 = (core::int v) → core::String {
           try {
-            let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+            let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
         };
         (core::int) → core::String x6 = (core::int v) → core::String {
           try {
-            return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+            return let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
@@ -286,7 +286,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
                 break #L8;
@@ -321,7 +321,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
                 break #L9;
@@ -351,11 +351,11 @@
               #L10:
               {
                 try {
-                  let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+                  let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
                 break #L10;
@@ -385,12 +385,12 @@
               #L11:
               {
                 try {
-                  :return_value = let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+                  :return_value = let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
                   break #L11;
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
                 break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
index b356950..fbc0fe4 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
@@ -18,6 +18,6 @@
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
+                           ^" in v{<unresolved>}.%(2) =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
index b356950..fbc0fe4 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
@@ -18,6 +18,6 @@
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
+                           ^" in v{<unresolved>}.%(2) =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
index b356950..fbc0fe4 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
@@ -18,6 +18,6 @@
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
+                           ^" in v{<unresolved>}.%(2) =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
index b356950..fbc0fe4 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
@@ -18,6 +18,6 @@
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
+                           ^" in v{<unresolved>}.%(2) =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
index f683f0e..6b82704 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
@@ -48,7 +48,7 @@
 static method test4() → asy::Future<core::bool> async 
   return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -66,7 +66,7 @@
   function test4() → asy::Future<core::bool> async 
     return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -74,17 +74,17 @@
     return self::getFutureBool();
   function test7() → asy::Future<core::bool> async 
     return self::getFutureBool();
-  asy::Future<core::bool> var1 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Future<core::bool> var4 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var5 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 72d6a6a..a53d4d3 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -150,7 +150,7 @@
   return :async_future;
 }
 static method test5() → asy::Future<core::bool>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -208,7 +208,7 @@
             try {
               #L7:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
@@ -241,7 +241,7 @@
             try {
               #L8:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
@@ -258,7 +258,7 @@
           return :async_future;
         }
         function test5() → asy::Future<core::bool>
-          return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -291,7 +291,7 @@
           :is_sync = true;
           return :async_future;
         }
-        asy::Future<core::bool> var1 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -307,7 +307,7 @@
             try {
               #L10:
               {
-                [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result;
                 break #L10;
               }
@@ -325,7 +325,7 @@
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -341,7 +341,7 @@
             try {
               #L11:
               {
-                [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result;
                 break #L11;
               }
@@ -357,7 +357,7 @@
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
index f683f0e..6b82704 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
@@ -48,7 +48,7 @@
 static method test4() → asy::Future<core::bool> async 
   return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -66,7 +66,7 @@
   function test4() → asy::Future<core::bool> async 
     return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -74,17 +74,17 @@
     return self::getFutureBool();
   function test7() → asy::Future<core::bool> async 
     return self::getFutureBool();
-  asy::Future<core::bool> var1 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Future<core::bool> var4 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var5 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 72d6a6a..a53d4d3 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -150,7 +150,7 @@
   return :async_future;
 }
 static method test5() → asy::Future<core::bool>
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -208,7 +208,7 @@
             try {
               #L7:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
@@ -241,7 +241,7 @@
             try {
               #L8:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
@@ -258,7 +258,7 @@
           return :async_future;
         }
         function test5() → asy::Future<core::bool>
-          return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -291,7 +291,7 @@
           :is_sync = true;
           return :async_future;
         }
-        asy::Future<core::bool> var1 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -307,7 +307,7 @@
             try {
               #L10:
               {
-                [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result;
                 break #L10;
               }
@@ -325,7 +325,7 @@
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -341,7 +341,7 @@
             try {
               #L11:
               {
-                [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
                 :return_value = :result;
                 break #L11;
               }
@@ -357,7 +357,7 @@
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
index 7231fd2..89bdcad 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
@@ -56,13 +56,13 @@
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → core::Iterable<core::bool> sync* {
-  yield* let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   yield* getIterableNull(); // error
          ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
 }
 static method test5() → core::Iterable<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
 Iterable<bool> test5() => getIterableNull(); // error
                           ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -80,13 +80,13 @@
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → core::Iterable<core::bool> sync* {
-    yield* let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   }
   function test5() → core::Iterable<core::bool>
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -95,7 +95,7 @@
   function test7() → core::Iterable<core::bool> sync* {
     yield* self::getIterableBool();
   }
-  core::Iterable<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
@@ -103,13 +103,13 @@
   })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield* self::getIterableNull();
   })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index 70fbbeb..f1dad02 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -105,7 +105,7 @@
     function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
         {
-          :iterator.{core::_SyncIterator::_yieldEachIterable} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+          :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   yield* getIterableNull(); // error
          ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -119,7 +119,7 @@
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
 static method test5() → core::Iterable<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
 Iterable<bool> test5() => getIterableNull(); // error
                           ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -182,7 +182,7 @@
             function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
               {
                 {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+                  :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -196,7 +196,7 @@
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
         function test5() → core::Iterable<core::bool>
-          return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -219,7 +219,7 @@
           }
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        core::Iterable<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
@@ -241,7 +241,7 @@
         })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
@@ -261,7 +261,7 @@
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
         })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
index 7231fd2..89bdcad 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
@@ -56,13 +56,13 @@
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → core::Iterable<core::bool> sync* {
-  yield* let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   yield* getIterableNull(); // error
          ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
 }
 static method test5() → core::Iterable<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
 Iterable<bool> test5() => getIterableNull(); // error
                           ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -80,13 +80,13 @@
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → core::Iterable<core::bool> sync* {
-    yield* let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   }
   function test5() → core::Iterable<core::bool>
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -95,7 +95,7 @@
   function test7() → core::Iterable<core::bool> sync* {
     yield* self::getIterableBool();
   }
-  core::Iterable<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
@@ -103,13 +103,13 @@
   })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield* self::getIterableNull();
   })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+  core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index 70fbbeb..f1dad02 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -105,7 +105,7 @@
     function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
         {
-          :iterator.{core::_SyncIterator::_yieldEachIterable} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+          :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   yield* getIterableNull(); // error
          ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -119,7 +119,7 @@
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
 static method test5() → core::Iterable<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
 Iterable<bool> test5() => getIterableNull(); // error
                           ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -182,7 +182,7 @@
             function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
               {
                 {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+                  :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -196,7 +196,7 @@
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
         function test5() → core::Iterable<core::bool>
-          return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
@@ -219,7 +219,7 @@
           }
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        core::Iterable<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
@@ -241,7 +241,7 @@
         })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
@@ -261,7 +261,7 @@
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
         })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
index 71acc8c..54bbc93 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
@@ -57,13 +57,13 @@
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → asy::Stream<core::bool> async* {
-  yield* let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
          ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 }
 static method test5() → asy::Stream<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
 Stream<bool> test5() => getStreamNull(); // error
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -81,13 +81,13 @@
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → asy::Stream<core::bool> async* {
-    yield* let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
            ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   }
   function test5() → asy::Stream<core::bool>
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -96,7 +96,7 @@
   function test7() → asy::Stream<core::bool> async* {
     yield* self::getStreamBool();
   }
-  asy::Stream<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
@@ -104,13 +104,13 @@
   })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield* self::getStreamNull();
   })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
index 943f144..afdc269 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -160,7 +160,7 @@
       try {
         #L4:
         {
-          if(:controller.{asy::_AsyncStarStreamController::addStream}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
          ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → core::bool})
@@ -183,7 +183,7 @@
   return :controller_stream;
 }
 static method test5() → asy::Stream<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
 Stream<bool> test5() => getStreamNull(); // error
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -285,7 +285,7 @@
               try {
                 #L8:
                 {
-                  if(:controller.{asy::_AsyncStarStreamController::addStream}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+                  if(:controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
            ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → core::bool})
@@ -308,7 +308,7 @@
           return :controller_stream;
         }
         function test5() → asy::Stream<core::bool>
-          return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -347,7 +347,7 @@
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
           return :controller_stream;
         }
-        asy::Stream<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> /* originally async* */ {
@@ -385,7 +385,7 @@
         })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
         asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> /* originally async* */ {
@@ -421,7 +421,7 @@
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
           return :controller_stream;
         })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
index 71acc8c..54bbc93 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
@@ -57,13 +57,13 @@
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → asy::Stream<core::bool> async* {
-  yield* let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
          ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 }
 static method test5() → asy::Stream<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
 Stream<bool> test5() => getStreamNull(); // error
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -81,13 +81,13 @@
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → asy::Stream<core::bool> async* {
-    yield* let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
            ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   }
   function test5() → asy::Stream<core::bool>
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -96,7 +96,7 @@
   function test7() → asy::Stream<core::bool> async* {
     yield* self::getStreamBool();
   }
-  asy::Stream<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
@@ -104,13 +104,13 @@
   })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield* self::getStreamNull();
   })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
index 943f144..afdc269 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -160,7 +160,7 @@
       try {
         #L4:
         {
-          if(:controller.{asy::_AsyncStarStreamController::addStream}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
          ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → core::bool})
@@ -183,7 +183,7 @@
   return :controller_stream;
 }
 static method test5() → asy::Stream<core::bool>
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
 Stream<bool> test5() => getStreamNull(); // error
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -285,7 +285,7 @@
               try {
                 #L8:
                 {
-                  if(:controller.{asy::_AsyncStarStreamController::addStream}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+                  if(:controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
            ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → core::bool})
@@ -308,7 +308,7 @@
           return :controller_stream;
         }
         function test5() → asy::Stream<core::bool>
-          return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
@@ -347,7 +347,7 @@
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
           return :controller_stream;
         }
-        asy::Stream<core::bool> var1 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> /* originally async* */ {
@@ -385,7 +385,7 @@
         })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
         asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> /* originally async* */ {
@@ -421,7 +421,7 @@
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
           return :controller_stream;
         })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+        asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
index 0341432..f5982c7 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
@@ -28,12 +28,12 @@
 static method main() → dynamic {}
 static method errors() → dynamic {
   self::A? a1 = new self::A::•() as{ForNonNullableByDefault} self::A?;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
      ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
index 0ed1268..b4e53f7 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
@@ -28,12 +28,12 @@
 static method main() → dynamic {}
 static method errors() → dynamic {
   self::A? a1 = new self::A::•();
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
      ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
index 0341432..f5982c7 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
@@ -28,12 +28,12 @@
 static method main() → dynamic {}
 static method errors() → dynamic {
   self::A? a1 = new self::A::•() as{ForNonNullableByDefault} self::A?;
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
      ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
index 0ed1268..b4e53f7 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
@@ -28,12 +28,12 @@
 static method main() → dynamic {}
 static method errors() → dynamic {
   self::A? a1 = new self::A::•();
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
      ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
diff --git a/pkg/front_end/testcases/nnbd/issue41520.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41520.dart.strong.expect
index 05bafe4..c66c505 100644
--- a/pkg/front_end/testcases/nnbd/issue41520.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41520.dart.strong.expect
@@ -31,7 +31,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     self::_takesObject(error);
   }
   try {
@@ -41,12 +41,12 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
  - 'StackTrace' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
     stackTrace.notAMethodOnStackTrace();
-               ^^^^^^^^^^^^^^^^^^^^^^";
+               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
     self::_takesObject(error);
     self::_takesStackTrace(stackTrace);
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41520.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41520.dart.strong.transformed.expect
index 05bafe4..c66c505 100644
--- a/pkg/front_end/testcases/nnbd/issue41520.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41520.dart.strong.transformed.expect
@@ -31,7 +31,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     self::_takesObject(error);
   }
   try {
@@ -41,12 +41,12 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
  - 'StackTrace' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
     stackTrace.notAMethodOnStackTrace();
-               ^^^^^^^^^^^^^^^^^^^^^^";
+               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
     self::_takesObject(error);
     self::_takesStackTrace(stackTrace);
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41520.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.expect
index 05bafe4..c66c505 100644
--- a/pkg/front_end/testcases/nnbd/issue41520.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.expect
@@ -31,7 +31,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     self::_takesObject(error);
   }
   try {
@@ -41,12 +41,12 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
  - 'StackTrace' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
     stackTrace.notAMethodOnStackTrace();
-               ^^^^^^^^^^^^^^^^^^^^^^";
+               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
     self::_takesObject(error);
     self::_takesStackTrace(stackTrace);
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41520.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.transformed.expect
index 05bafe4..c66c505 100644
--- a/pkg/front_end/testcases/nnbd/issue41520.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     self::_takesObject(error);
   }
   try {
@@ -41,12 +41,12 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
     error.notAMethodOnObject();
-          ^^^^^^^^^^^^^^^^^^";
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
     invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
  - 'StackTrace' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
     stackTrace.notAMethodOnStackTrace();
-               ^^^^^^^^^^^^^^^^^^^^^^";
+               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
     self::_takesObject(error);
     self::_takesStackTrace(stackTrace);
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index c36ec72..2f21afd 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -39,18 +39,18 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index 8b732be..6a230ed 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -66,7 +66,7 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
@@ -83,11 +83,10 @@
       try {
         #L2:
         {
-          final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^";
-          [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -104,7 +103,7 @@
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index c36ec72..2f21afd 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -39,18 +39,18 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
-  return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index 8b732be..6a230ed 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -66,7 +66,7 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
@@ -83,11 +83,10 @@
       try {
         #L2:
         {
-          final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^";
-          [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -104,7 +103,7 @@
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
index 62b372d..e45354a 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
@@ -17,7 +17,7 @@
   core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
-  core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
@@ -25,7 +25,7 @@
   core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
-  core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
index 62b372d..e45354a 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
   core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
-  core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
@@ -25,7 +25,7 @@
   core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
-  core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
index 62b372d..e45354a 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
@@ -17,7 +17,7 @@
   core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
-  core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
@@ -25,7 +25,7 @@
   core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
-  core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
index 62b372d..e45354a 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
-  core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
@@ -25,7 +25,7 @@
   core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
-  core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
index 40f1fe1..25b0480 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
@@ -19,11 +19,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
index 40f1fe1..25b0480 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
@@ -19,11 +19,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
index 40f1fe1..25b0480 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
@@ -19,11 +19,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
index 40f1fe1..25b0480 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
@@ -19,11 +19,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
index e24bca3..bf9a0db 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
@@ -28,7 +28,7 @@
     ;
 }
 static method test() → dynamic {
-  self::Null x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+  self::Null x = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
   Null x = null;
            ^" in null as{TypeError,ForNonNullableByDefault} self::Null;
@@ -36,12 +36,12 @@
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
index ebee0fc..9c05cb5 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
@@ -28,27 +28,20 @@
     ;
 }
 static method test() → dynamic {
-  self::Null x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+  self::Null x = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
   Null x = null;
-           ^" in let Null #t2 = null in #t2 == null ?{self::Null} #t2 as{TypeError,ForNonNullableByDefault} self::Null : #t2{self::Null};
+           ^" in let Null #t1 = null in #t1 == null ?{self::Null} #t1 as{TypeError,ForNonNullableByDefault} self::Null : #t1{self::Null};
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
-
-
-Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///issue41700b.dart:8:12 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41700b.dart:8:12 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41700b.dart:8:12 -> NullConstant(null)
-Extra constant evaluation: evaluated: 7, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
index e24bca3..bf9a0db 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
@@ -28,7 +28,7 @@
     ;
 }
 static method test() → dynamic {
-  self::Null x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+  self::Null x = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
   Null x = null;
            ^" in null as{TypeError,ForNonNullableByDefault} self::Null;
@@ -36,12 +36,12 @@
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
index 068a09a..f6edfc2 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     ;
 }
 static method test() → dynamic {
-  self::Null x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+  self::Null x = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
   Null x = null;
            ^" in null;
@@ -36,12 +36,12 @@
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
-    ^^^";
+    ^^^" in x{<unresolved>}.foo();
   self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42089.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42089.dart.strong.expect
index 2c96e71..1c01411 100644
--- a/pkg/front_end/testcases/nnbd/issue42089.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42089.dart.strong.expect
@@ -17,11 +17,11 @@
 
 static method test<X extends core::Object? = dynamic>(self::test::X? x) → dynamic {
   if(x is{ForNonNullableByDefault} core::String?) {
-    core::Object o = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    core::Object o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     Object o = x;
                ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
-    o = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     o = x;
         ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
diff --git a/pkg/front_end/testcases/nnbd/issue42089.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42089.dart.strong.transformed.expect
index d066ef6..0875ea7 100644
--- a/pkg/front_end/testcases/nnbd/issue42089.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42089.dart.strong.transformed.expect
@@ -17,14 +17,14 @@
 
 static method test<X extends core::Object? = dynamic>(self::test::X? x) → dynamic {
   if(x is{ForNonNullableByDefault} core::String?) {
-    core::Object o = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    core::Object o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     Object o = x;
-               ^" in let self::test::X? & core::String? /* '?' & '?' = '?' */ #t2 = x{self::test::X? & core::String? /* '?' & '?' = '?' */} in #t2 == null ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object};
-    o = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+               ^" in let self::test::X? & core::String? /* '?' & '?' = '?' */ #t1 = x{self::test::X? & core::String? /* '?' & '?' = '?' */} in #t1 == null ?{core::Object} #t1 as{TypeError,ForNonNullableByDefault} core::Object : #t1{core::Object};
+    o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     o = x;
-        ^" in let self::test::X? & core::String? /* '?' & '?' = '?' */ #t4 = x{self::test::X? & core::String? /* '?' & '?' = '?' */} in #t4 == null ?{core::Object} #t4 as{TypeError,ForNonNullableByDefault} core::Object : #t4{core::Object};
+        ^" in let self::test::X? & core::String? /* '?' & '?' = '?' */ #t2 = x{self::test::X? & core::String? /* '?' & '?' = '?' */} in #t2 == null ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42089.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.expect
index 2c96e71..1c01411 100644
--- a/pkg/front_end/testcases/nnbd/issue42089.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.expect
@@ -17,11 +17,11 @@
 
 static method test<X extends core::Object? = dynamic>(self::test::X? x) → dynamic {
   if(x is{ForNonNullableByDefault} core::String?) {
-    core::Object o = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    core::Object o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     Object o = x;
                ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
-    o = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     o = x;
         ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
diff --git a/pkg/front_end/testcases/nnbd/issue42089.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.transformed.expect
index dcf8b9d0..981ba92 100644
--- a/pkg/front_end/testcases/nnbd/issue42089.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.transformed.expect
@@ -17,11 +17,11 @@
 
 static method test<X extends core::Object? = dynamic>(self::test::X? x) → dynamic {
   if(x is{ForNonNullableByDefault} core::String?) {
-    core::Object o = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    core::Object o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     Object o = x;
                ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */};
-    o = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+    o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     o = x;
         ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */};
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
index 8ac17aa..26a075c 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
@@ -117,12 +117,12 @@
     : self::A::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::A
-    : self::A::i = let final Never #t1 = 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.
+    : 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
-    : self::A::i = let final Never #t2 = 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.
+    : 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::•()
     ;
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -184,12 +184,12 @@
     : self::C::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::C
-    : self::C::i = let final Never #t3 = 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.
+    : 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
-    : self::C::i = let final Never #t4 = 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.
+    : 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::•()
     ;
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
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 e39daa0..b672730 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
@@ -117,14 +117,14 @@
     : self::A::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::A
-    : self::A::i = let final Never #t1 = 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.
+    : 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? #t2 = i in #t2 == null ?{core::int} #t2 as{TypeError,ForNonNullableByDefault} core::int : #t2{core::int}, super core::Object::•()
+                 ^" 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
-    : self::A::i = let final Never #t3 = 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.
+    : 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? #t4 = i in #t4 == null ?{core::int} #t4 as{TypeError,ForNonNullableByDefault} core::int : #t4{core::int}, super core::Object::•()
+                 ^" 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
     : self::A::i = i, super core::Object::•()
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -184,28 +184,28 @@
     : self::C::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::C
-    : self::C::i = let final Never #t5 = 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.
+    : 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? #t6 = i in #t6 == null ?{core::int} #t6 as{TypeError,ForNonNullableByDefault} core::int : #t6{core::int}, super core::Object::•()
+                                      ^" 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
-    : self::C::i = let final Never #t7 = 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.
+    : 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? #t8 = i in #t8 == null ?{core::int} #t8 as{TypeError,ForNonNullableByDefault} core::int : #t8{core::int}, super core::Object::•()
+                                      ^" 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
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
index 8ac17aa..26a075c 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
@@ -117,12 +117,12 @@
     : self::A::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::A
-    : self::A::i = let final Never #t1 = 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.
+    : 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
-    : self::A::i = let final Never #t2 = 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.
+    : 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::•()
     ;
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -184,12 +184,12 @@
     : self::C::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::C
-    : self::C::i = let final Never #t3 = 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.
+    : 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
-    : self::C::i = let final Never #t4 = 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.
+    : 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::•()
     ;
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
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 b2b3256..0040b41 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -107,15 +107,15 @@
   external constructor constructor9({core::int i}) → self::A
     ;
   static factory factory3([core::int i]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i]) → self::A
     ;
   static factory factory9({core::int i}) → self::A
@@ -161,15 +161,15 @@
   constructor constructor7({required core::int i}) → self::C
     ;
   static factory factory3([core::int i]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i]) → self::C
     ;
   static factory factory9({core::int i}) → self::C
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 621f17d..94f4fab 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
@@ -117,12 +117,12 @@
     : self::A::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::A
-    : self::A::i = let final Never #t1 = 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.
+    : 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
-    : self::A::i = let final Never #t2 = 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.
+    : 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::•()
     ;
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -184,12 +184,12 @@
     : self::C::i = i, super core::Object::•()
     ;
   constructor constructor5([core::int? i = #C1]) → self::C
-    : self::C::i = let final Never #t3 = 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.
+    : 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
-    : self::C::i = let final Never #t4 = 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.
+    : 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::•()
     ;
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
index 81da4f2..66fe67c 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
@@ -10,9 +10,10 @@
 }
 static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
 static method main() → dynamic {
-  (self::X?) → dynamic t2 = #C1<self::X>;
+  (self::X?) → dynamic t2 = #C2;
 }
 
 constants  {
   #C1 = static-tearoff self::checkme
+  #C2 = instantiation self::checkme <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 d4ca87d..66fe67c 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
@@ -10,13 +10,10 @@
 }
 static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
 static method main() → dynamic {
-  (self::X?) → dynamic t2 = #C1<self::X>;
+  (self::X?) → dynamic t2 = #C2;
 }
 
 constants  {
   #C1 = static-tearoff self::checkme
+  #C2 = instantiation self::checkme <self::X>
 }
-
-Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> InstantiationConstant(checkme<X>)
-Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
index 81da4f2..17ca8c8 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
@@ -10,9 +10,10 @@
 }
 static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
 static method main() → dynamic {
-  (self::X?) → dynamic t2 = #C1<self::X>;
+  (self::X?) → dynamic t2 = #C2;
 }
 
 constants  {
   #C1 = static-tearoff self::checkme
+  #C2 = instantiation self::checkme <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 005edee..17ca8c8 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
@@ -10,13 +10,10 @@
 }
 static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
 static method main() → dynamic {
-  (self::X?) → dynamic t2 = #C1<self::X>;
+  (self::X?) → dynamic t2 = #C2;
 }
 
 constants  {
   #C1 = static-tearoff self::checkme
+  #C2 = instantiation self::checkme <self::X*>
 }
-
-Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> InstantiationConstant(checkme<X*>)
-Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42459.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42459.dart.strong.expect
index 79b97eb..fe7ca67 100644
--- a/pkg/front_end/testcases/nnbd/issue42459.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42459.dart.strong.expect
@@ -15,7 +15,7 @@
       return 1;
     }
     else {
-      return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+      return invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
       return;
       ^" in null;
     }
diff --git a/pkg/front_end/testcases/nnbd/issue42459.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42459.dart.strong.transformed.expect
index 79b97eb..fe7ca67 100644
--- a/pkg/front_end/testcases/nnbd/issue42459.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42459.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
       return 1;
     }
     else {
-      return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+      return invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
       return;
       ^" in null;
     }
diff --git a/pkg/front_end/testcases/nnbd/issue42459.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.expect
index 79b97eb..fe7ca67 100644
--- a/pkg/front_end/testcases/nnbd/issue42459.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.expect
@@ -15,7 +15,7 @@
       return 1;
     }
     else {
-      return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+      return invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
       return;
       ^" in null;
     }
diff --git a/pkg/front_end/testcases/nnbd/issue42459.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.transformed.expect
index 79b97eb..fe7ca67 100644
--- a/pkg/front_end/testcases/nnbd/issue42459.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
       return 1;
     }
     else {
-      return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+      return invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
       return;
       ^" in null;
     }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index cb4208d..8c2a328 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -38,11 +38,11 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
-  asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+  asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
new file mode 100644
index 0000000..204fd46
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -0,0 +1,115 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//  - 'Future' is from 'dart:async'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
+  synthetic constructor •() → self::Divergent<self::Divergent::T%>
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{core::Object::noSuchMethod}(invocation);
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+}
+static method test() → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {
+        asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+ - 'Future' is from 'dart:async'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
+          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
+          core::bool* :is_sync = false;
+          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
+          (dynamic) → dynamic :async_op_then;
+          (core::Object, core::StackTrace) → dynamic :async_op_error;
+          core::int :await_jump_var = 0;
+          dynamic :await_ctx_var;
+          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            try {
+              #L2:
+              {
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+ - 'Future' is from 'dart:async'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
+                break #L2;
+              }
+              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              return;
+            }
+            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+            }
+          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+          :async_op(){() → dynamic};
+          :is_sync = true;
+          return :async_future;
+        })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <dynamic>[]
+  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
+  #C8 = #timeout
+  #C9 = #onTimeout
+  #C10 = #then
+  #C11 = #onError
+  #C12 = #asStream
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index cb4208d..8c2a328 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -38,11 +38,11 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
-  asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+  asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
new file mode 100644
index 0000000..204fd46
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -0,0 +1,115 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//  - 'Future' is from 'dart:async'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
+  synthetic constructor •() → self::Divergent<self::Divergent::T%>
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{core::Object::noSuchMethod}(invocation);
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+}
+static method test() → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {
+        asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+ - 'Future' is from 'dart:async'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
+          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
+          core::bool* :is_sync = false;
+          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
+          (dynamic) → dynamic :async_op_then;
+          (core::Object, core::StackTrace) → dynamic :async_op_error;
+          core::int :await_jump_var = 0;
+          dynamic :await_ctx_var;
+          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            try {
+              #L2:
+              {
+                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+ - 'Future' is from 'dart:async'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
+                break #L2;
+              }
+              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              return;
+            }
+            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+            }
+          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+          :async_op(){() → dynamic};
+          :is_sync = true;
+          return :async_future;
+        })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <dynamic>[]
+  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
+  #C8 = #timeout
+  #C9 = #onTimeout
+  #C10 = #then
+  #C11 = #onError
+  #C12 = #asStream
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
index 175a246..7b83456 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
@@ -33,7 +33,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
-                               ^^^^^^^";
+                               ^^^^^^^" in #t3{core::Object}{<unresolved>}.unknown();
   } =>#t2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
index 175a246..7b83456 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
-                               ^^^^^^^";
+                               ^^^^^^^" in #t3{core::Object}{<unresolved>}.unknown();
   } =>#t2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
index 175a246..7b83456 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
@@ -33,7 +33,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
-                               ^^^^^^^";
+                               ^^^^^^^" in #t3{core::Object}{<unresolved>}.unknown();
   } =>#t2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
index 175a246..7b83456 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
-                               ^^^^^^^";
+                               ^^^^^^^" in #t3{core::Object}{<unresolved>}.unknown();
   } =>#t2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
index ecf7395..2763847 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
@@ -40,14 +40,14 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t2{core::Object}{<unresolved>}.unknown();
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t4{core::Object}{<unresolved>}.unknown();
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
index ecf7395..2763847 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
@@ -40,14 +40,14 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t2{core::Object}{<unresolved>}.unknown();
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t4{core::Object}{<unresolved>}.unknown();
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
index ecf7395..2763847 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
@@ -40,14 +40,14 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t2{core::Object}{<unresolved>}.unknown();
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t4{core::Object}{<unresolved>}.unknown();
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
index ecf7395..2763847 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
@@ -40,14 +40,14 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t2{core::Object}{<unresolved>}.unknown();
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
-                        ^^^^^^^";
+                        ^^^^^^^" in #t4{core::Object}{<unresolved>}.unknown();
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
     let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
index 06403e2..b7191c8 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
@@ -58,7 +58,7 @@
     : super self::E::•()
     ;
   operator ==(core::Object? other) → core::bool
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   bool operator ==(Object? other) => super == other;
                                            ^" in super.{self::E::==}(other);
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
index 06403e2..b7191c8 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
@@ -58,7 +58,7 @@
     : super self::E::•()
     ;
   operator ==(core::Object? other) → core::bool
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   bool operator ==(Object? other) => super == other;
                                            ^" in super.{self::E::==}(other);
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 ed2262c..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
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 6cf3739..0c168d7 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
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
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 ed2262c..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
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 08fff2c..18f72ef 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
@@ -6,7 +6,7 @@
   field Never n;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
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 6cf3739..0c168d7 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
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
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 9f4202d..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
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 6347dde..bd950c6 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
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
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 9f4202d..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
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 afe3abd..53f7e37 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
@@ -6,7 +6,7 @@
   final field dynamic n;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
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 6347dde..bd950c6 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
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
index 1954bc8..2bc396c 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
@@ -19,7 +19,7 @@
 }
 static method test() → dynamic {
   self::method(() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
     return 42; // error
            ^" in 42;
   });
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
index 1954bc8..2bc396c 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 }
 static method test() → dynamic {
   self::method(() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
     return 42; // error
            ^" in 42;
   });
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
index 1954bc8..2bc396c 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
@@ -19,7 +19,7 @@
 }
 static method test() → dynamic {
   self::method(() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
     return 42; // error
            ^" in 42;
   });
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
index 1954bc8..2bc396c 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 }
 static method test() → dynamic {
   self::method(() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
     return 42; // error
            ^" in 42;
   });
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index 19e109d..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
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 48a5a0a..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let Never #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index 19e109d..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
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 aef5c33..39eaec6 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
@@ -125,7 +125,7 @@
   constructor internal(dynamic _) → self::C
     ;
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C
     ;
 }
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 48a5a0a..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let Never #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
index d62d171..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
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 25804c8..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
index d62d171..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
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 ac7b8e7..bff1a1e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -22,7 +22,7 @@
   static factory fact({core::int i}) → self::C
     ;
   static factory redirect({core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
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 25804c8..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
index 3de5c65..c69ecec 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
@@ -45,24 +45,24 @@
   set fooExtension = self::Extension|set#fooExtension;
 }
 static method test<T extends self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic {
-  let final self::A? #t1 = a in (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+  let final self::A? #t1 = a in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
     ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
-  let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+  let final self::test::T% #t2 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t2.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
-  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
-  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t2.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t3 = d in #t3{dynamic}.foo == null ?{dynamic} #t3{dynamic}.foo = x : null;
+  let final self::A? #t4 = a in #t4 == null ?{core::int?} null : let final self::A #t5 = #t4{self::A}.{self::A::bar}{self::A} in #t5.{self::A::foo}{core::int?} == null ?{core::int} #t5.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -70,22 +70,22 @@
 static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
-  let final self::B? #t10 = b in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+  let final self::B? #t6 = b in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t6) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t10, x) : null;
-  let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t6, x) : null;
+  let final self::testExtension::T% #t7 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t7) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t7, x) : null;
+  let final self::B? #t8 = b in #t8 == null ?{core::int?} null : let final self::B #t9 = self::Extension|get#barExtension(#t8{self::B}) in self::Extension|get#fooExtension(#t9) == null ?{core::int} self::Extension|set#fooExtension(#t9, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
index 3de5c65..c69ecec 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
@@ -45,24 +45,24 @@
   set fooExtension = self::Extension|set#fooExtension;
 }
 static method test<T extends self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic {
-  let final self::A? #t1 = a in (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+  let final self::A? #t1 = a in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
     ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
-  let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+  let final self::test::T% #t2 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t2.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
-  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
-  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t2.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t3 = d in #t3{dynamic}.foo == null ?{dynamic} #t3{dynamic}.foo = x : null;
+  let final self::A? #t4 = a in #t4 == null ?{core::int?} null : let final self::A #t5 = #t4{self::A}.{self::A::bar}{self::A} in #t5.{self::A::foo}{core::int?} == null ?{core::int} #t5.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -70,22 +70,22 @@
 static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
-  let final self::B? #t10 = b in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+  let final self::B? #t6 = b in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t6) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t10, x) : null;
-  let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t6, x) : null;
+  let final self::testExtension::T% #t7 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t7) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t7, x) : null;
+  let final self::B? #t8 = b in #t8 == null ?{core::int?} null : let final self::B #t9 = self::Extension|get#barExtension(#t8{self::B}) in self::Extension|get#fooExtension(#t9) == null ?{core::int} self::Extension|set#fooExtension(#t9, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
index 3de5c65..c69ecec 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
@@ -45,24 +45,24 @@
   set fooExtension = self::Extension|set#fooExtension;
 }
 static method test<T extends self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic {
-  let final self::A? #t1 = a in (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+  let final self::A? #t1 = a in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
     ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
-  let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+  let final self::test::T% #t2 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t2.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
-  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
-  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t2.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t3 = d in #t3{dynamic}.foo == null ?{dynamic} #t3{dynamic}.foo = x : null;
+  let final self::A? #t4 = a in #t4 == null ?{core::int?} null : let final self::A #t5 = #t4{self::A}.{self::A::bar}{self::A} in #t5.{self::A::foo}{core::int?} == null ?{core::int} #t5.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -70,22 +70,22 @@
 static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
-  let final self::B? #t10 = b in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+  let final self::B? #t6 = b in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t6) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t10, x) : null;
-  let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t6, x) : null;
+  let final self::testExtension::T% #t7 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t7) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t7, x) : null;
+  let final self::B? #t8 = b in #t8 == null ?{core::int?} null : let final self::B #t9 = self::Extension|get#barExtension(#t8{self::B}) in self::Extension|get#fooExtension(#t9) == null ?{core::int} self::Extension|set#fooExtension(#t9, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
index 3de5c65..c69ecec 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
@@ -45,24 +45,24 @@
   set fooExtension = self::Extension|set#fooExtension;
 }
 static method test<T extends self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic {
-  let final self::A? #t1 = a in (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+  let final self::A? #t1 = a in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
     ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
-  let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+  let final self::test::T% #t2 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t2.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
-  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
-  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t2.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t3 = d in #t3{dynamic}.foo == null ?{dynamic} #t3{dynamic}.foo = x : null;
+  let final self::A? #t4 = a in #t4 == null ?{core::int?} null : let final self::A #t5 = #t4{self::A}.{self::A::bar}{self::A} in #t5.{self::A::foo}{core::int?} == null ?{core::int} #t5.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -70,22 +70,22 @@
 static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
-  let final self::B? #t10 = b in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+  let final self::B? #t6 = b in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t6) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t10, x) : null;
-  let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t6, x) : null;
+  let final self::testExtension::T% #t7 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t7) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t7, x) : null;
+  let final self::B? #t8 = b in #t8 == null ?{core::int?} null : let final self::B #t9 = self::Extension|get#barExtension(#t8{self::B}) in self::Extension|get#fooExtension(#t9) == null ?{core::int} self::Extension|set#fooExtension(#t9, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
index bee2422..aa327e3 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
@@ -31,10 +31,10 @@
   late final core::int x;
   late final core::int? x = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
   late final int? x;
-                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                  ^";
   core::int z;
   core::int? z = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:12:8: Error: 'z' is already declared in this scope.
   int? z;
-       ^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+       ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
index bee2422..aa327e3 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
@@ -31,10 +31,10 @@
   late final core::int x;
   late final core::int? x = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
   late final int? x;
-                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+                  ^";
   core::int z;
   core::int? z = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:12:8: Error: 'z' is already declared in this scope.
   int? z;
-       ^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+       ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
index ac73263..afe7f3b 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
@@ -19,7 +19,7 @@
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
              ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} as{TypeError,ForNonNullableByDefault} core::Object;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
index e1b2b87..a5b697a 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
@@ -19,10 +19,10 @@
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
-             ^" in let core::Object? #t2 = z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} in #t2 == null ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object};
+             ^" in let core::Object? #t1 = z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} in #t1 == null ?{core::Object} #t1 as{TypeError,ForNonNullableByDefault} core::Object : #t1{core::Object};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
index ac73263..afe7f3b 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
@@ -19,7 +19,7 @@
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
              ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} as{TypeError,ForNonNullableByDefault} core::Object;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
index 3c0963d..e53c5e2 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
              ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?};
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
index 5f9dc45..78b0b34 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
@@ -18,7 +18,7 @@
     (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
     if(z == null)
       return;
-    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
       ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
index 5f9dc45..78b0b34 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
     (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
     if(z == null)
       return;
-    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
       ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
index 5f9dc45..78b0b34 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
@@ -18,7 +18,7 @@
     (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
     if(z == null)
       return;
-    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
       ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
index 5f9dc45..78b0b34 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
     if(z == null)
       return;
-    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
       ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
index 5a28faa..da9759d 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
@@ -17,7 +17,7 @@
   FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
-  self::foo(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+  self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   foo(z); // Error.
       ^" in z as{TypeError,ForNonNullableByDefault} core::Object);
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
index 01f043c..125399b 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
@@ -17,9 +17,9 @@
   FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
-  self::foo(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+  self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   foo(z); // Error.
-      ^" in let FutureOr<core::num?>#t2 = z in #t2 == null ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object});
+      ^" in let FutureOr<core::num?>#t1 = z in #t1 == null ?{core::Object} #t1 as{TypeError,ForNonNullableByDefault} core::Object : #t1{core::Object});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
index 5a28faa..da9759d 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
@@ -17,7 +17,7 @@
   FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
-  self::foo(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+  self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   foo(z); // Error.
       ^" in z as{TypeError,ForNonNullableByDefault} core::Object);
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
index b4f0696..e256d75 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
-  self::foo(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+  self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
   foo(z); // Error.
       ^" in z);
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
index 152826c..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
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 3ebf619..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let Never #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let Never #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
index 152826c..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
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 1b9a3e0..a50e08b 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -14,7 +14,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
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 3ebf619..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let Never #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let Never #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
index d08482c..3eaeb2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
@@ -67,7 +67,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
     lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
     invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
     lateFinalStaticFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -97,7 +97,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
   c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
index d08482c..3eaeb2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
     lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
     invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
     lateFinalStaticFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -97,7 +97,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
   c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
index d08482c..3eaeb2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
@@ -67,7 +67,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
     lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
     invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
     lateFinalStaticFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -97,7 +97,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
   c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
index d08482c..3eaeb2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
     lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
     invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
     lateFinalStaticFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -97,7 +97,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
   c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index d9880ad..63fc71a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -125,7 +125,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+                   ^^^^^";
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index d9880ad..63fc71a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -125,7 +125,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+                   ^^^^^";
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.expect
index 0a42d2b..6ebdc4c 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.expect
@@ -21,15 +21,15 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object?>() → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<T>(42);
       ^" in core::List::•<self::foo::T%>(42);
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int?>(42);
       ^" in core::List::•<core::int?>(42);
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int>(42);
       ^" in core::List::•<core::int>(42);
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.transformed.expect
index 540795f..0adf073 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.strong.transformed.expect
@@ -21,15 +21,15 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object?>() → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<T>(42);
       ^" in core::_List::•<self::foo::T%>(42);
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int?>(42);
       ^" in core::_List::•<core::int?>(42);
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int>(42);
       ^" in core::_List::•<core::int>(42);
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
index 0a42d2b..6ebdc4c 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
@@ -21,15 +21,15 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object?>() → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<T>(42);
       ^" in core::List::•<self::foo::T%>(42);
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int?>(42);
       ^" in core::List::•<core::int?>(42);
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int>(42);
       ^" in core::List::•<core::int>(42);
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
index 540795f..0adf073 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
@@ -21,15 +21,15 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object?>() → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<T>(42);
       ^" in core::_List::•<self::foo::T%>(42);
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int?>(42);
       ^" in core::_List::•<core::int?>(42);
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 Try using List.filled instead.
   new List<int>(42);
       ^" in core::_List::•<core::int>(42);
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
index 03536f5..a736a23 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
@@ -48,13 +48,13 @@
   new A();
        ^";
   self::A a = new self::A::•(x: 42);
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
        ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
      ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
    ^" in self::g{<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
index 03536f5..a736a23 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
@@ -48,13 +48,13 @@
   new A();
        ^";
   self::A a = new self::A::•(x: 42);
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
        ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
      ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
    ^" in self::g{<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
index 03536f5..a736a23 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
@@ -48,13 +48,13 @@
   new A();
        ^";
   self::A a = new self::A::•(x: 42);
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
        ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
      ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
    ^" in self::g{<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
index 03536f5..a736a23 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
@@ -48,13 +48,13 @@
   new A();
        ^";
   self::A a = new self::A::•(x: 42);
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
        ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
      ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
    ^" in self::g{<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.expect b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.expect
index a88a56b..b9ee95d 100644
--- a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.expect
@@ -37,12 +37,12 @@
     : super core::Object::•()
     ;
   method method1() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
   method method2() → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
diff --git a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.transformed.expect
index a88a56b..b9ee95d 100644
--- a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.strong.transformed.expect
@@ -37,12 +37,12 @@
     : super core::Object::•()
     ;
   method method1() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
   method method2() → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
diff --git a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.expect b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.expect
index a88a56b..b9ee95d 100644
--- a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.expect
@@ -37,12 +37,12 @@
     : super core::Object::•()
     ;
   method method1() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
   method method2() → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
diff --git a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.transformed.expect
index a88a56b..b9ee95d 100644
--- a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.transformed.expect
@@ -37,12 +37,12 @@
     : super core::Object::•()
     ;
   method method1() → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
   method method2() → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
     return new Future<Null>.value(null); // error
                ^" in asy::Future::value<Null>(null);
   }
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
index cfeb55d..08ea6da 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
@@ -90,34 +90,34 @@
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.bar;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
-   ^";
+   ^" in y{<unresolved>}.call();
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
-   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+   ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
-    ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+    ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
-   ^";
+   ^" in y{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
-   ^";
+   ^" in y{<unresolved>}.[]=(42, 42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
index 0451577..059d3e5 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
@@ -90,34 +90,34 @@
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.bar;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
-   ^";
+   ^" in y{<unresolved>}.call();
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
-   ^";
+   ^" in y{<unresolved>}.+(1);
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
-    ^";
+    ^" in y{<unresolved>}.+(1);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
-   ^";
+   ^" in y{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
-   ^";
+   ^" in y{<unresolved>}.[]=(42, 42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
index c766f41..910a2cd 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
@@ -91,34 +91,34 @@
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.bar;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
-   ^";
+   ^" in y{<unresolved>}.call();
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
-   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+   ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
-    ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+    ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
-   ^";
+   ^" in y{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
-   ^";
+   ^" in y{<unresolved>}.[]=(42, 42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
index 58e9b4e..08dcc7b 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
@@ -91,34 +91,34 @@
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.foo();
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.bar;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
-    ^^^";
+    ^^^" in y{<unresolved>}.baz = 42;
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
-   ^";
+   ^" in y{<unresolved>}.call();
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
-   ^";
+   ^" in y{<unresolved>}.+(1);
   y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
-    ^";
+    ^" in y{<unresolved>}.+(1);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
-   ^";
+   ^" in y{<unresolved>}.[](42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
-   ^";
+   ^" in y{<unresolved>}.[]=(42, 42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.expect b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.expect
index 6800298..ce4e2f2 100644
--- a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.expect
@@ -97,13 +97,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
   c?.[42] = 42;
           ^";
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
   c?.[42]++;
      ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]++;
      ^";
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
   ++c?.[42];
        ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
@@ -116,13 +116,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
   c?.[42]?.[0] ??= 42;
                ^^^";
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
   c?.[42]?.[0]++;
            ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]?.[0]++;
            ^";
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
   ++c?.[42]?.[0];
              ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
diff --git a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.transformed.expect
index 6800298..ce4e2f2 100644
--- a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.strong.transformed.expect
@@ -97,13 +97,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
   c?.[42] = 42;
           ^";
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
   c?.[42]++;
      ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]++;
      ^";
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
   ++c?.[42];
        ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
@@ -116,13 +116,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
   c?.[42]?.[0] ??= 42;
                ^^^";
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
   c?.[42]?.[0]++;
            ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]?.[0]++;
            ^";
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
   ++c?.[42]?.[0];
              ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
diff --git a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.expect b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.expect
index 6800298..ce4e2f2 100644
--- a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.expect
@@ -97,13 +97,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
   c?.[42] = 42;
           ^";
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
   c?.[42]++;
      ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]++;
      ^";
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
   ++c?.[42];
        ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
@@ -116,13 +116,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
   c?.[42]?.[0] ??= 42;
                ^^^";
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
   c?.[42]?.[0]++;
            ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]?.[0]++;
            ^";
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
   ++c?.[42]?.[0];
              ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
diff --git a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.transformed.expect
index 6800298..ce4e2f2 100644
--- a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.transformed.expect
@@ -97,13 +97,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
   c?.[42] = 42;
           ^";
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
   c?.[42]++;
      ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]++;
      ^";
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
   ++c?.[42];
        ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
@@ -116,13 +116,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
   c?.[42]?.[0] ??= 42;
                ^^^";
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
   c?.[42]?.[0]++;
            ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
   c?.[42]?.[0]++;
            ^";
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
   ++c?.[42]?.[0];
              ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
 Try inserting an identifier before '['.
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
index 8c14009..abcb54d 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
@@ -100,7 +100,7 @@
 //   topLevelMethodAndSetter = topLevelMethodAndSetter();
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Couldn't find constructor 'typedefAndSetter'.
 //   typedefAndSetter = typedefAndSetter();
 //                      ^^^^^^^^^^^^^^^^
 //
@@ -202,11 +202,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
   c.Class = c.Class;
-              ^^^^^";
+              ^^^^^" in c{<unresolved>}.Class;
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = self::Extension|extensionInstanceMethodAndSetter(0);
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
   Extension.extensionStaticMethodAndSetter =
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
index 8c14009..abcb54d 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
@@ -100,7 +100,7 @@
 //   topLevelMethodAndSetter = topLevelMethodAndSetter();
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Couldn't find constructor 'typedefAndSetter'.
 //   typedefAndSetter = typedefAndSetter();
 //                      ^^^^^^^^^^^^^^^^
 //
@@ -202,11 +202,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
   c.Class = c.Class;
-              ^^^^^";
+              ^^^^^" in c{<unresolved>}.Class;
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = self::Extension|extensionInstanceMethodAndSetter(0);
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
   Extension.extensionStaticMethodAndSetter =
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
index 8c14009..abcb54d 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
@@ -100,7 +100,7 @@
 //   topLevelMethodAndSetter = topLevelMethodAndSetter();
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Couldn't find constructor 'typedefAndSetter'.
 //   typedefAndSetter = typedefAndSetter();
 //                      ^^^^^^^^^^^^^^^^
 //
@@ -202,11 +202,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
   c.Class = c.Class;
-              ^^^^^";
+              ^^^^^" in c{<unresolved>}.Class;
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = self::Extension|extensionInstanceMethodAndSetter(0);
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
   Extension.extensionStaticMethodAndSetter =
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
index 8c14009..abcb54d 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
@@ -100,7 +100,7 @@
 //   topLevelMethodAndSetter = topLevelMethodAndSetter();
 //   ^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Couldn't find constructor 'typedefAndSetter'.
 //   typedefAndSetter = typedefAndSetter();
 //                      ^^^^^^^^^^^^^^^^
 //
@@ -202,11 +202,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
   c.Class = c.Class;
-              ^^^^^";
+              ^^^^^" in c{<unresolved>}.Class;
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
   0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = self::Extension|extensionInstanceMethodAndSetter(0);
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
   Extension.extensionStaticMethodAndSetter =
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
index bf9303e..e32613c 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
@@ -123,82 +123,82 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
   ^" in nullableInt.{core::int::unary-}(){() → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
               ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
                ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
                ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t1.{self::Class::[]=}{<nullable>}.(#t2, invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+               ^" in #t1.{self::Class::[]}{<nullable>}.(#t2){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]}{<nullable>}.(#t4){(core::int) → core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
-  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
-  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]=}{<nullable>}.(#t4, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t5 = nullableClass in #t5 == null ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t6 = nullableClass in #t6 == null ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t7 = nullableClass in #t7 == null ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t10 = nullableClass in #t10 == null ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12){(core::int) → core::int?} == null ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt){(core::int, core::int) → void} : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
-  let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
-  let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  let final self::Class? #t13 = nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}.{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t16 = nullableClass in #t16 == null ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t17 = nullableClass in #t17 == null ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t19.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t20 = nullableClass in #t20 == null ?{core::num?} null : #t20.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
-  let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+                               ^" in #t20.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t21 = nullableClass in #t21 == null ?{core::int?} null : #t21.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t22 = nullableClass in #t22 == null ?{core::int?} null : #t22.{self::Class::nullableField}{core::int?} == null ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t23 = nullableClass in #t23 == null ?{core::int?} null : let final self::Class #t24 = #t23{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t24.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t24.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t25 = nullableClass in #t25 == null ?{core::int?} null : let final self::Class #t26 = #t25{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t26.{self::Class::nullableField}{core::int?} == null ?{core::int} #t26.{self::Class::nullableField} = 0 : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
                ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
   nonNullableClass.{self::Class::call}(){() → self::Class};
-  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
-  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t27 = nonNullableClass in #t27 == null ?{self::Class?} null : #t27.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t28 = nonNullableClass in #t28 == null ?{self::Class?} null : #t28.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
index bf9303e..a60625c 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
@@ -123,82 +123,82 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
   ^" in nullableInt.{core::int::unary-}(){() → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
               ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
                ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
                ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t1.{self::Class::[]=}{<nullable>}.(#t2, invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+               ^" in #t1.{self::Class::[]}{<nullable>}.(#t2){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]}{<nullable>}.(#t4){(core::int) → core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
-  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
-  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]=}{<nullable>}.(#t4, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t5 = nullableClass in #t5 == null ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t6 = nullableClass in #t6 == null ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t7 = nullableClass in #t7 == null ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t10 = nullableClass in #t10 == null ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12){(core::int) → core::int?} == null ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt){(core::int, core::int) → void} : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
-  let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
-  let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  let final self::Class? #t13 = nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}.{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t16 = nullableClass in #t16 == null ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t17 = nullableClass in #t17 == null ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t19.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num};
+  let final self::Class? #t20 = nullableClass in #t20 == null ?{core::num?} null : #t20.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
-  let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+                               ^" in #t20.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num};
+  let final self::Class? #t21 = nullableClass in #t21 == null ?{core::int?} null : #t21.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t22 = nullableClass in #t22 == null ?{core::int?} null : #t22.{self::Class::nullableField}{core::int?} == null ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t23 = nullableClass in #t23 == null ?{core::int?} null : let final self::Class #t24 = #t23{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t24.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t24.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t25 = nullableClass in #t25 == null ?{core::int?} null : let final self::Class #t26 = #t25{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t26.{self::Class::nullableField}{core::int?} == null ?{core::int} #t26.{self::Class::nullableField} = 0 : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
                ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
   nonNullableClass.{self::Class::call}(){() → self::Class};
-  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
-  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t27 = nonNullableClass in #t27 == null ?{self::Class?} null : #t27.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t28 = nonNullableClass in #t28 == null ?{self::Class?} null : #t28.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
index bf9303e..e32613c 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
@@ -123,82 +123,82 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
   ^" in nullableInt.{core::int::unary-}(){() → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
               ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
                ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
                ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t1.{self::Class::[]=}{<nullable>}.(#t2, invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+               ^" in #t1.{self::Class::[]}{<nullable>}.(#t2){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]}{<nullable>}.(#t4){(core::int) → core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
-  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
-  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]=}{<nullable>}.(#t4, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t5 = nullableClass in #t5 == null ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t6 = nullableClass in #t6 == null ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t7 = nullableClass in #t7 == null ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t10 = nullableClass in #t10 == null ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12){(core::int) → core::int?} == null ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt){(core::int, core::int) → void} : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
-  let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
-  let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  let final self::Class? #t13 = nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}.{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t16 = nullableClass in #t16 == null ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t17 = nullableClass in #t17 == null ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t19.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t20 = nullableClass in #t20 == null ?{core::num?} null : #t20.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
-  let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+                               ^" in #t20.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t21 = nullableClass in #t21 == null ?{core::int?} null : #t21.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t22 = nullableClass in #t22 == null ?{core::int?} null : #t22.{self::Class::nullableField}{core::int?} == null ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t23 = nullableClass in #t23 == null ?{core::int?} null : let final self::Class #t24 = #t23{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t24.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t24.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t25 = nullableClass in #t25 == null ?{core::int?} null : let final self::Class #t26 = #t25{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t26.{self::Class::nullableField}{core::int?} == null ?{core::int} #t26.{self::Class::nullableField} = 0 : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
                ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
   nonNullableClass.{self::Class::call}(){() → self::Class};
-  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
-  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t27 = nonNullableClass in #t27 == null ?{self::Class?} null : #t27.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t28 = nonNullableClass in #t28 == null ?{self::Class?} null : #t28.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
index bf9303e..a60625c 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
@@ -123,82 +123,82 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
   ^" in nullableInt.{core::int::unary-}(){() → core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
               ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
                ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
                ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t1.{self::Class::[]=}{<nullable>}.(#t2, invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+               ^" in #t1.{self::Class::[]}{<nullable>}.(#t2){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]}{<nullable>}.(#t4){(core::int) → core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
-  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
-  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
-  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
-  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
-  let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                            ^" in #t3.{self::NullableIndexClass::[]=}{<nullable>}.(#t4, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t5 = nullableClass in #t5 == null ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t6 = nullableClass in #t6 == null ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t7 = nullableClass in #t7 == null ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t10 = nullableClass in #t10 == null ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12){(core::int) → core::int?} == null ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt){(core::int, core::int) → void} : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
-  let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
                 ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
-  let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  let final self::Class? #t13 = nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
-  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
-  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}.{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t16 = nullableClass in #t16 == null ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t17 = nullableClass in #t17 == null ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t19.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num};
+  let final self::Class? #t20 = nullableClass in #t20 == null ?{core::num?} null : #t20.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
-  let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+                               ^" in #t20.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num};
+  let final self::Class? #t21 = nullableClass in #t21 == null ?{core::int?} null : #t21.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t22 = nullableClass in #t22 == null ?{core::int?} null : #t22.{self::Class::nullableField}{core::int?} == null ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t23 = nullableClass in #t23 == null ?{core::int?} null : let final self::Class #t24 = #t23{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t24.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t24.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t25 = nullableClass in #t25 == null ?{core::int?} null : let final self::Class #t26 = #t25{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t26.{self::Class::nullableField}{core::int?} == null ?{core::int} #t26.{self::Class::nullableField} = 0 : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
                ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
   nonNullableClass.{self::Class::call}(){() → self::Class};
-  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
-  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t27 = nonNullableClass in #t27 == null ?{self::Class?} null : #t27.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t28 = nonNullableClass in #t28 == null ?{self::Class?} null : #t28.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
index ed3bb8d..6be85bf 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
@@ -110,153 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in (let final self::Class1? #t17 = n1 in #t17 == null ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+                                          ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t27 = n1 in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t41 = n1 in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
-  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
-  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
-  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
-  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
-  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
-  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
-  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
-  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
-  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
-  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
-  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
-  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
-  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91){(self::Class1?, self::Class1?) → void} in #t91;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t94 == null ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t98 = n1 in #t98 == null ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101){(self::Class2?, self::Class2?) → void} in #t101;
+  let final self::Class1? #t103 = n1 in #t103 == null ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} in #t107 == null ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108){(self::Class1?, self::Class1?) → void} in #t108 : #t107{self::Class1};
+  let final self::Class2? #t110 = n2 in #t110 == null ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114){(self::Class2?, self::Class2?) → void} in #t114;
+  let final self::Class2? #t116 = n2 in #t116 == null ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120){(self::Class2?, self::Class2?) → void} in #t120;
+  let final self::Class2? #t122 = n2 in #t122 == null ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2} in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t126;
+  let final self::Class2? #t128 = n2 in #t128 == null ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130){(self::Class2?, self::Class2?) → void} in #t130;
+  nullable2 = let final self::Class2? #t132 = n2 in #t132 == null ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134){(self::Class2?, self::Class2?) → void} in #t134;
+  let final self::Class1? #t136 = n1 in #t136 == null ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141){(self::Class2?) → self::Class2} in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t142;
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147){(self::Class2?, self::Class2?) → void} in #t147;
+  nullable2 = let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152){(self::Class2?, self::Class2?) → void} in #t152;
+  let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t155 = n1 in #t155 == null ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159){(self::Class2?, self::Class2?) → void} in #t159;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t162 == null ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169){(self::Class2?, self::Class2?) → void} in #t169;
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176){(self::Class2?) → self::Class2} in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182){(self::Class2?, self::Class2?) → void} in #t182;
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187){(self::Class2?, self::Class2?) → void} in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t190 == null ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196){(self::Class1?, self::Class1?) → void} in #t196;
+  let final self::Class1? #t198 = n1 in #t198 == null ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t199 == null ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t200 == null ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t201 = n1 in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t203 == null ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t204 = n1 in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t207 = n1 in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t208 == null ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211){(self::Class1?, self::Class1?) → void} in #t211 : #t210{self::Class1};
+  let final self::Class3? #t213 = n3 in #t213 == null ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t216 = n3 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t217 == null ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219){(self::Class2?, self::Class2?) → void} in #t219;
+  let final self::Class3? #t221 = n3 in #t221 == null ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t222 == null ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t224 = n3 in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t225 == null ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226){(self::Class2?) → self::Class2} in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t227;
+  let final self::Class3? #t229 = n3 in #t229 == null ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t230 == null ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232){(self::Class2?, self::Class2?) → void} in #t232;
+  nullable2 = let final self::Class3? #t234 = n3 in #t234 == null ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t235 == null ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237){(self::Class2?, self::Class2?) → void} in #t237;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
-  self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in (let final self::Class1? #t239 = n1 in #t239 == null ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
-  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
-  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t241 = n2 in #t241 == null ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t242 = n2 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t247 = n2 in #t247 == null ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t250 = n2 in #t250 == null ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2}{self::Class2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1){(core::int) → self::Class2} in #t251;
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
+  nullable2 = let final self::Class2? #t256 = n2 in #t256 == null ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class1?} null : #t259.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1}{self::Class1?} in #t261 == null ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
+  let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class1?} null : let final self::Class1 #t263 = #t262{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1 #t265 = #t264{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t266 = #t265.{self::Class1::nullable1}{self::Class1?} in #t266 == null ?{self::Class1} #t265.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272){(self::Class1?) → self::Class1?} in #t273 == null ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274){(self::Class1?, self::Class1?) → void} in #t274 : #t273{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
index ed3bb8d..6be85bf 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
@@ -110,153 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in (let final self::Class1? #t17 = n1 in #t17 == null ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+                                          ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t27 = n1 in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t41 = n1 in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
-  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
-  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
-  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
-  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
-  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
-  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
-  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
-  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
-  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
-  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
-  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
-  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
-  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91){(self::Class1?, self::Class1?) → void} in #t91;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t94 == null ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t98 = n1 in #t98 == null ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101){(self::Class2?, self::Class2?) → void} in #t101;
+  let final self::Class1? #t103 = n1 in #t103 == null ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} in #t107 == null ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108){(self::Class1?, self::Class1?) → void} in #t108 : #t107{self::Class1};
+  let final self::Class2? #t110 = n2 in #t110 == null ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114){(self::Class2?, self::Class2?) → void} in #t114;
+  let final self::Class2? #t116 = n2 in #t116 == null ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120){(self::Class2?, self::Class2?) → void} in #t120;
+  let final self::Class2? #t122 = n2 in #t122 == null ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2} in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t126;
+  let final self::Class2? #t128 = n2 in #t128 == null ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130){(self::Class2?, self::Class2?) → void} in #t130;
+  nullable2 = let final self::Class2? #t132 = n2 in #t132 == null ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134){(self::Class2?, self::Class2?) → void} in #t134;
+  let final self::Class1? #t136 = n1 in #t136 == null ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141){(self::Class2?) → self::Class2} in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t142;
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147){(self::Class2?, self::Class2?) → void} in #t147;
+  nullable2 = let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152){(self::Class2?, self::Class2?) → void} in #t152;
+  let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t155 = n1 in #t155 == null ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159){(self::Class2?, self::Class2?) → void} in #t159;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t162 == null ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169){(self::Class2?, self::Class2?) → void} in #t169;
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176){(self::Class2?) → self::Class2} in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182){(self::Class2?, self::Class2?) → void} in #t182;
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187){(self::Class2?, self::Class2?) → void} in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t190 == null ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196){(self::Class1?, self::Class1?) → void} in #t196;
+  let final self::Class1? #t198 = n1 in #t198 == null ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t199 == null ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t200 == null ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t201 = n1 in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t203 == null ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t204 = n1 in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t207 = n1 in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t208 == null ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211){(self::Class1?, self::Class1?) → void} in #t211 : #t210{self::Class1};
+  let final self::Class3? #t213 = n3 in #t213 == null ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t216 = n3 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t217 == null ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219){(self::Class2?, self::Class2?) → void} in #t219;
+  let final self::Class3? #t221 = n3 in #t221 == null ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t222 == null ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t224 = n3 in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t225 == null ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226){(self::Class2?) → self::Class2} in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t227;
+  let final self::Class3? #t229 = n3 in #t229 == null ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t230 == null ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232){(self::Class2?, self::Class2?) → void} in #t232;
+  nullable2 = let final self::Class3? #t234 = n3 in #t234 == null ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t235 == null ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237){(self::Class2?, self::Class2?) → void} in #t237;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
-  self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in (let final self::Class1? #t239 = n1 in #t239 == null ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
-  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
-  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t241 = n2 in #t241 == null ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t242 = n2 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t247 = n2 in #t247 == null ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t250 = n2 in #t250 == null ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2}{self::Class2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1){(core::int) → self::Class2} in #t251;
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
+  nullable2 = let final self::Class2? #t256 = n2 in #t256 == null ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class1?} null : #t259.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1}{self::Class1?} in #t261 == null ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
+  let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class1?} null : let final self::Class1 #t263 = #t262{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1 #t265 = #t264{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t266 = #t265.{self::Class1::nullable1}{self::Class1?} in #t266 == null ?{self::Class1} #t265.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272){(self::Class1?) → self::Class1?} in #t273 == null ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274){(self::Class1?, self::Class1?) → void} in #t274 : #t273{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
index ed3bb8d..6be85bf 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
@@ -110,153 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in (let final self::Class1? #t17 = n1 in #t17 == null ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+                                          ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t27 = n1 in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t41 = n1 in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
-  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
-  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
-  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
-  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
-  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
-  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
-  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
-  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
-  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
-  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
-  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
-  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
-  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91){(self::Class1?, self::Class1?) → void} in #t91;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t94 == null ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t98 = n1 in #t98 == null ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101){(self::Class2?, self::Class2?) → void} in #t101;
+  let final self::Class1? #t103 = n1 in #t103 == null ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} in #t107 == null ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108){(self::Class1?, self::Class1?) → void} in #t108 : #t107{self::Class1};
+  let final self::Class2? #t110 = n2 in #t110 == null ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114){(self::Class2?, self::Class2?) → void} in #t114;
+  let final self::Class2? #t116 = n2 in #t116 == null ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120){(self::Class2?, self::Class2?) → void} in #t120;
+  let final self::Class2? #t122 = n2 in #t122 == null ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2} in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t126;
+  let final self::Class2? #t128 = n2 in #t128 == null ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130){(self::Class2?, self::Class2?) → void} in #t130;
+  nullable2 = let final self::Class2? #t132 = n2 in #t132 == null ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134){(self::Class2?, self::Class2?) → void} in #t134;
+  let final self::Class1? #t136 = n1 in #t136 == null ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141){(self::Class2?) → self::Class2} in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t142;
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147){(self::Class2?, self::Class2?) → void} in #t147;
+  nullable2 = let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152){(self::Class2?, self::Class2?) → void} in #t152;
+  let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t155 = n1 in #t155 == null ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159){(self::Class2?, self::Class2?) → void} in #t159;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t162 == null ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169){(self::Class2?, self::Class2?) → void} in #t169;
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176){(self::Class2?) → self::Class2} in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182){(self::Class2?, self::Class2?) → void} in #t182;
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187){(self::Class2?, self::Class2?) → void} in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t190 == null ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196){(self::Class1?, self::Class1?) → void} in #t196;
+  let final self::Class1? #t198 = n1 in #t198 == null ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t199 == null ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t200 == null ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t201 = n1 in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t203 == null ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t204 = n1 in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t207 = n1 in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t208 == null ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211){(self::Class1?, self::Class1?) → void} in #t211 : #t210{self::Class1};
+  let final self::Class3? #t213 = n3 in #t213 == null ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t216 = n3 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t217 == null ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219){(self::Class2?, self::Class2?) → void} in #t219;
+  let final self::Class3? #t221 = n3 in #t221 == null ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t222 == null ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t224 = n3 in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t225 == null ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226){(self::Class2?) → self::Class2} in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t227;
+  let final self::Class3? #t229 = n3 in #t229 == null ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t230 == null ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232){(self::Class2?, self::Class2?) → void} in #t232;
+  nullable2 = let final self::Class3? #t234 = n3 in #t234 == null ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t235 == null ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237){(self::Class2?, self::Class2?) → void} in #t237;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
-  self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in (let final self::Class1? #t239 = n1 in #t239 == null ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
-  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
-  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t241 = n2 in #t241 == null ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t242 = n2 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t247 = n2 in #t247 == null ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t250 = n2 in #t250 == null ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2}{self::Class2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1){(core::int) → self::Class2} in #t251;
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
+  nullable2 = let final self::Class2? #t256 = n2 in #t256 == null ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class1?} null : #t259.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1}{self::Class1?} in #t261 == null ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
+  let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class1?} null : let final self::Class1 #t263 = #t262{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1 #t265 = #t264{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t266 = #t265.{self::Class1::nullable1}{self::Class1?} in #t266 == null ?{self::Class1} #t265.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272){(self::Class1?) → self::Class1?} in #t273 == null ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274){(self::Class1?, self::Class1?) → void} in #t274 : #t273{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
index ed3bb8d..6be85bf 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
@@ -110,153 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in (let final self::Class1? #t17 = n1 in #t17 == null ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+                                          ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t27 = n1 in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t41 = n1 in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
-  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
-  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
-  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
-  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
-  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
-  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
-  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
-  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
-  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
-  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
-  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
-  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
-  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
-  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
-  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
-  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
-  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91){(self::Class1?, self::Class1?) → void} in #t91;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t94 == null ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t98 = n1 in #t98 == null ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101){(self::Class2?, self::Class2?) → void} in #t101;
+  let final self::Class1? #t103 = n1 in #t103 == null ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} in #t107 == null ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108){(self::Class1?, self::Class1?) → void} in #t108 : #t107{self::Class1};
+  let final self::Class2? #t110 = n2 in #t110 == null ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114){(self::Class2?, self::Class2?) → void} in #t114;
+  let final self::Class2? #t116 = n2 in #t116 == null ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120){(self::Class2?, self::Class2?) → void} in #t120;
+  let final self::Class2? #t122 = n2 in #t122 == null ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2} in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t126;
+  let final self::Class2? #t128 = n2 in #t128 == null ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130){(self::Class2?, self::Class2?) → void} in #t130;
+  nullable2 = let final self::Class2? #t132 = n2 in #t132 == null ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134){(self::Class2?, self::Class2?) → void} in #t134;
+  let final self::Class1? #t136 = n1 in #t136 == null ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141){(self::Class2?) → self::Class2} in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t142;
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147){(self::Class2?, self::Class2?) → void} in #t147;
+  nullable2 = let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152){(self::Class2?, self::Class2?) → void} in #t152;
+  let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t155 = n1 in #t155 == null ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159){(self::Class2?, self::Class2?) → void} in #t159;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t162 == null ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169){(self::Class2?, self::Class2?) → void} in #t169;
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176){(self::Class2?) → self::Class2} in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182){(self::Class2?, self::Class2?) → void} in #t182;
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187){(self::Class2?, self::Class2?) → void} in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t190 == null ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196){(self::Class1?, self::Class1?) → void} in #t196;
+  let final self::Class1? #t198 = n1 in #t198 == null ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t199 == null ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t200 == null ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t201 = n1 in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t203 == null ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t204 = n1 in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t207 = n1 in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t208 == null ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211){(self::Class1?, self::Class1?) → void} in #t211 : #t210{self::Class1};
+  let final self::Class3? #t213 = n3 in #t213 == null ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t216 = n3 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t217 == null ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219){(self::Class2?, self::Class2?) → void} in #t219;
+  let final self::Class3? #t221 = n3 in #t221 == null ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t222 == null ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t224 = n3 in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t225 == null ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226){(self::Class2?) → self::Class2} in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t227;
+  let final self::Class3? #t229 = n3 in #t229 == null ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t230 == null ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232){(self::Class2?, self::Class2?) → void} in #t232;
+  nullable2 = let final self::Class3? #t234 = n3 in #t234 == null ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t235 == null ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237){(self::Class2?, self::Class2?) → void} in #t237;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
-  self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in (let final self::Class1? #t239 = n1 in #t239 == null ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
-  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
-  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
-  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
-  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t241 = n2 in #t241 == null ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t242 = n2 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t247 = n2 in #t247 == null ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t250 = n2 in #t250 == null ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2}{self::Class2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1){(core::int) → self::Class2} in #t251;
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
+  nullable2 = let final self::Class2? #t256 = n2 in #t256 == null ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class1?} null : #t259.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1}{self::Class1?} in #t261 == null ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
+  let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class1?} null : let final self::Class1 #t263 = #t262{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1 #t265 = #t264{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t266 = #t265.{self::Class1::nullable1}{self::Class1?} in #t266 == null ?{self::Class1} #t265.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272){(self::Class1?) → self::Class1?} in #t273 == null ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274){(self::Class1?, self::Class1?) → void} in #t274 : #t273{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
index 25e39a1..410df6c 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                            ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
+  let final self::Class2? #t343 = n2 in #t343 == null ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
+  nullable2 = let final self::Class2? #t346 = n2 in #t346 == null ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t349 = n1 in #t349 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t349) == null ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t350 = n1 in #t350 == null ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351 == null ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
+  let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355) == null ?{self::Class1} self::Extension1|set#nullable1(#t355, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357) in #t358 == null ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357, #t359) in #t359 : #t358{self::Class1};
+  let final self::Class1? #t361 = n1 in #t361 == null ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363) == null ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t364 = n1 in #t364 == null ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367 == null ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
index 25e39a1..410df6c 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                            ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
+  let final self::Class2? #t343 = n2 in #t343 == null ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
+  nullable2 = let final self::Class2? #t346 = n2 in #t346 == null ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t349 = n1 in #t349 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t349) == null ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t350 = n1 in #t350 == null ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351 == null ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
+  let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355) == null ?{self::Class1} self::Extension1|set#nullable1(#t355, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357) in #t358 == null ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357, #t359) in #t359 : #t358{self::Class1};
+  let final self::Class1? #t361 = n1 in #t361 == null ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363) == null ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t364 = n1 in #t364 == null ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367 == null ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
index 25e39a1..410df6c 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                            ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
+  let final self::Class2? #t343 = n2 in #t343 == null ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
+  nullable2 = let final self::Class2? #t346 = n2 in #t346 == null ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t349 = n1 in #t349 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t349) == null ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t350 = n1 in #t350 == null ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351 == null ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
+  let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355) == null ?{self::Class1} self::Extension1|set#nullable1(#t355, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357) in #t358 == null ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357, #t359) in #t359 : #t358{self::Class1};
+  let final self::Class1? #t361 = n1 in #t361 == null ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363) == null ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t364 = n1 in #t364 == null ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367 == null ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
index 25e39a1..410df6c 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                            ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
+  let final self::Class2? #t343 = n2 in #t343 == null ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
+  nullable2 = let final self::Class2? #t346 = n2 in #t346 == null ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t349 = n1 in #t349 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t349) == null ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t350 = n1 in #t350 == null ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351 == null ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
+  let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355) == null ?{self::Class1} self::Extension1|set#nullable1(#t355, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357) in #t358 == null ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357, #t359) in #t359 : #t358{self::Class1};
+  let final self::Class1? #t361 = n1 in #t361 == null ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363) == null ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t364 = n1 in #t364 == null ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367 == null ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
index 38237dc..954b4c0 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
+  nullable2 = let final self::Class2? #t344 = n2 in #t344 == null ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t347 = n1 in #t347 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t347) == null ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t348 = n1 in #t348 == null ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349 == null ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
+  let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1 #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355) in #t356 == null ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355, #t357) in #t357 : #t356{self::Class1};
+  let final self::Class1? #t359 = n1 in #t359 == null ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361) == null ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t362 = n1 in #t362 == null ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365 == null ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
index 38237dc..954b4c0 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
+  nullable2 = let final self::Class2? #t344 = n2 in #t344 == null ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t347 = n1 in #t347 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t347) == null ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t348 = n1 in #t348 == null ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349 == null ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
+  let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1 #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355) in #t356 == null ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355, #t357) in #t357 : #t356{self::Class1};
+  let final self::Class1? #t359 = n1 in #t359 == null ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361) == null ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t362 = n1 in #t362 == null ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365 == null ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
index 38237dc..954b4c0 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
+  nullable2 = let final self::Class2? #t344 = n2 in #t344 == null ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t347 = n1 in #t347 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t347) == null ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t348 = n1 in #t348 == null ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349 == null ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
+  let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1 #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355) in #t356 == null ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355, #t357) in #t357 : #t356{self::Class1};
+  let final self::Class1? #t359 = n1 in #t359 == null ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361) == null ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t362 = n1 in #t362 == null ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365 == null ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
index 38237dc..954b4c0 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
@@ -139,153 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
-  self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
-  self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+                                ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
+  nullable2 = let final self::Class2? #t344 = n2 in #t344 == null ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t347 = n1 in #t347 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t347) == null ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t348 = n1 in #t348 == null ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349 == null ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
+  let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1 #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355) in #t356 == null ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355, #t357) in #t357 : #t356{self::Class1};
+  let final self::Class1? #t359 = n1 in #t359 == null ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361) == null ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t362 = n1 in #t362 == null ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365 == null ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
index e0b2ca8..c5958c2 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
@@ -33,13 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → void => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
                  ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
-  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
-  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
+  self::expect(null, let final self::Class? #t1 = c in #t1 == null ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
index e0b2ca8..c5958c2 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
@@ -33,13 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → void => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
                  ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
-  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
-  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
+  self::expect(null, let final self::Class? #t1 = c in #t1 == null ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
index e0b2ca8..c5958c2 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
@@ -33,13 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → void => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
                  ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
-  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
-  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
+  self::expect(null, let final self::Class? #t1 = c in #t1 == null ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
index e0b2ca8..c5958c2 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
@@ -33,13 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → void => let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
                  ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
-  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
-  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
+  self::expect(null, let final self::Class? #t1 = c in #t1 == null ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
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 fd1b424..f2c396a 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
@@ -76,21 +76,21 @@
   (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
   (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
   core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
-  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
                                           ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
   core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
-  c1 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+  c1 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c1 == ''; // error
-        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
   c1 =={self::Class::==}{(self::Class) → core::bool} c2;
   ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
   ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
   c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
-  self::CustomType runtimeType2 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+  self::CustomType runtimeType2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
  - 'Type' is from 'dart:core'.
  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   CustomType runtimeType2 = c2.runtimeType; // error
@@ -98,8 +98,8 @@
   core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
   invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
   c2.runtimeType(); // error
-                ^^^^^^^^^^^";
-  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+                ^^^^^^^^^^^" in c2.{core::Object::runtimeType}{core::Type}{<unresolved>}.call();
+  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
       c2.noSuchMethod; // error
@@ -107,17 +107,17 @@
   (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
   core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
-  c2 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+  c2 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c2 == ''; // ok or error?
-        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
   c2 =={self::Class::==}{(self::Class) → core::bool} c1;
-  ({o: core::Object}) → core::String toStringTearOff2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+  ({o: core::Object}) → core::String toStringTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
  - 'Object' is from 'dart:core'.
   String Function({Object o}) toStringTearOff2 = c2.toString; // error
                                                     ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
   () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
   c2.toString(o: c1); // error
               ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
 }
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
new file mode 100644
index 0000000..f2c396a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
@@ -0,0 +1,127 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c1 == ''; // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+//  - 'Type' is from 'dart:core'.
+//  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   CustomType runtimeType2 = c2.runtimeType; // error
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+//   c2.runtimeType(); // error
+//                 ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//       c2.noSuchMethod; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c2 == ''; // ok or error?
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+//  - 'Object' is from 'dart:core'.
+//   String Function({Object o}) toStringTearOff2 = c2.toString; // error
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+//   c2.toString(o: c1); // error
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class CustomType extends core::Type {
+  synthetic constructor •() → self::CustomType
+    : super core::Type::•()
+    ;
+  method call() → void {}
+}
+abstract class CustomInvocation extends core::Object implements core::Invocation {
+  synthetic constructor •() → self::CustomInvocation
+    : super core::Object::•()
+    ;
+}
+abstract class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  abstract get runtimeType() → self::CustomType;
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+    return super.{core::Object::noSuchMethod}(invocation);
+  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+    return super.{core::Object::==}(o);
+  abstract method toString({core::Object o = #C1}) → core::String;
+}
+static method main() → dynamic {}
+static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void {
+  self::CustomType runtimeType1 = c1.{self::Class::runtimeType}{self::CustomType};
+  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType}{self::CustomType};
+  c1.{self::Class::runtimeType}{self::CustomType}.{self::CustomType::call}(){() → void};
+  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  c1 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c1 == ''; // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c1 =={self::Class::==}{(self::Class) → core::bool} c2;
+  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
+  self::CustomType runtimeType2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+ - 'Type' is from 'dart:core'.
+ - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  CustomType runtimeType2 = c2.runtimeType; // error
+                               ^" in c2.{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} self::CustomType;
+  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+  c2.runtimeType(); // error
+                ^^^^^^^^^^^" in c2.{core::Object::runtimeType}{core::Type}{<unresolved>}.call();
+  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+      c2.noSuchMethod; // error
+         ^" in c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
+  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
+  c2 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c2 == ''; // ok or error?
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c2 =={self::Class::==}{(self::Class) → core::bool} c1;
+  ({o: core::Object}) → core::String toStringTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+ - 'Object' is from 'dart:core'.
+  String Function({Object o}) toStringTearOff2 = c2.toString; // error
+                                                    ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
+  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+  c2.toString(o: c1); // error
+              ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
+}
+
+constants  {
+  #C1 = null
+}
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 fd1b424..f2c396a 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
@@ -76,21 +76,21 @@
   (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
   (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
   core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
-  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
                                           ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
   core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
-  c1 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+  c1 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c1 == ''; // error
-        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
   c1 =={self::Class::==}{(self::Class) → core::bool} c2;
   ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
   ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
   c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
-  self::CustomType runtimeType2 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+  self::CustomType runtimeType2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
  - 'Type' is from 'dart:core'.
  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   CustomType runtimeType2 = c2.runtimeType; // error
@@ -98,8 +98,8 @@
   core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
   invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
   c2.runtimeType(); // error
-                ^^^^^^^^^^^";
-  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+                ^^^^^^^^^^^" in c2.{core::Object::runtimeType}{core::Type}{<unresolved>}.call();
+  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
       c2.noSuchMethod; // error
@@ -107,17 +107,17 @@
   (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
   core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
-  c2 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+  c2 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c2 == ''; // ok or error?
-        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
   c2 =={self::Class::==}{(self::Class) → core::bool} c1;
-  ({o: core::Object}) → core::String toStringTearOff2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+  ({o: core::Object}) → core::String toStringTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
  - 'Object' is from 'dart:core'.
   String Function({Object o}) toStringTearOff2 = c2.toString; // error
                                                     ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
   () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
   c2.toString(o: c1); // error
               ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
 }
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
new file mode 100644
index 0000000..f2c396a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
@@ -0,0 +1,127 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c1 == ''; // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+//  - 'Type' is from 'dart:core'.
+//  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   CustomType runtimeType2 = c2.runtimeType; // error
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+//   c2.runtimeType(); // error
+//                 ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//       c2.noSuchMethod; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c2 == ''; // ok or error?
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+//  - 'Object' is from 'dart:core'.
+//   String Function({Object o}) toStringTearOff2 = c2.toString; // error
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+//   c2.toString(o: c1); // error
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class CustomType extends core::Type {
+  synthetic constructor •() → self::CustomType
+    : super core::Type::•()
+    ;
+  method call() → void {}
+}
+abstract class CustomInvocation extends core::Object implements core::Invocation {
+  synthetic constructor •() → self::CustomInvocation
+    : super core::Object::•()
+    ;
+}
+abstract class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  abstract get runtimeType() → self::CustomType;
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+    return super.{core::Object::noSuchMethod}(invocation);
+  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+    return super.{core::Object::==}(o);
+  abstract method toString({core::Object o = #C1}) → core::String;
+}
+static method main() → dynamic {}
+static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void {
+  self::CustomType runtimeType1 = c1.{self::Class::runtimeType}{self::CustomType};
+  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType}{self::CustomType};
+  c1.{self::Class::runtimeType}{self::CustomType}.{self::CustomType::call}(){() → void};
+  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  c1 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c1 == ''; // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c1 =={self::Class::==}{(self::Class) → core::bool} c2;
+  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
+  self::CustomType runtimeType2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+ - 'Type' is from 'dart:core'.
+ - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  CustomType runtimeType2 = c2.runtimeType; // error
+                               ^" in c2.{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} self::CustomType;
+  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+  c2.runtimeType(); // error
+                ^^^^^^^^^^^" in c2.{core::Object::runtimeType}{core::Type}{<unresolved>}.call();
+  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+      c2.noSuchMethod; // error
+         ^" in c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
+  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
+  c2 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c2 == ''; // ok or error?
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c2 =={self::Class::==}{(self::Class) → core::bool} c1;
+  ({o: core::Object}) → core::String toStringTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+ - 'Object' is from 'dart:core'.
+  String Function({Object o}) toStringTearOff2 = c2.toString; // error
+                                                    ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
+  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+  c2.toString(o: c1); // error
+              ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
index f1e425b..7274ffb 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
@@ -74,45 +74,45 @@
     return super.{core::Object::toString}();
 }
 static method error(core::String? s, self::A? a, self::B? b) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
   s.length;
     ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 Try calling using ?. instead.
   s.substring(1, 1);
     ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   a.foo();
     ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.bar;
     ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.baz = 42;
     ^^^" in a.{self::A::baz}{<nullable>}. = 42;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
    ^" in a.{self::A::call}{<nullable>}.(){() → void};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   b.toString(0);
             ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
-  core::Function f1 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function f1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
-  () → void f2 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  () → void f2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
                        ^" in a as{TypeError} () → void;
-  () →? void f3 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  () →? void f3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
   void Function()? f3 = a;
                         ^" in a as{TypeError} () →? void;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
new file mode 100644
index 0000000..7274ffb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+// Try accessing using ?. instead.
+//   s.length;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+// Try calling using ?. instead.
+//   s.substring(1, 1);
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?. instead.
+//   a.foo();
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.bar;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.baz = 42;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?.call instead.
+//   a();
+//    ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   b.toString(0);
+//             ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+//   Function f1 = a;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function() f2 = a;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  get bar() → core::int
+    return 42;
+  set baz(core::int value) → void {}
+  method call() → void {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method toString([core::int extra = #C1]) → core::String
+    return super.{core::Object::toString}();
+}
+static method error(core::String? s, self::A? a, self::B? b) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+  s.length;
+    ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+Try calling using ?. instead.
+  s.substring(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  a.foo();
+    ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.bar;
+    ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.baz = 42;
+    ^^^" in a.{self::A::baz}{<nullable>}. = 42;
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?.call instead.
+  a();
+   ^" in a.{self::A::call}{<nullable>}.(){() → void};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  b.toString(0);
+            ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
+  core::Function f1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  Function f1 = a;
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  void Function() f2 = a;
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
+}
+static method ok<T extends core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
+  s =={core::String::==}{(core::Object) → core::bool} s;
+  a =={core::Object::==}{(core::Object) → core::bool} a;
+  t =={core::Object::==}{(core::Object) → core::bool} t;
+  b =={core::Object::==}{(core::Object) → core::bool} b;
+  s.{core::Object::hashCode}{core::int};
+  a.{core::Object::hashCode}{core::int};
+  t.{core::Object::hashCode}{core::int};
+  b.{core::Object::hashCode}{core::int};
+  s.{core::Object::toString}(){() → core::String};
+  a.{core::Object::toString}(){() → core::String};
+  t.{core::Object::toString}(){() → core::String};
+  b.{core::Object::toString}(){() → core::String};
+  try {
+    s.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    a.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    t.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    b.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  s.{core::Object::runtimeType}{core::Type};
+  a.{core::Object::runtimeType}{core::Type};
+  t.{core::Object::runtimeType}{core::Type};
+  b.{core::Object::runtimeType}{core::Type};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
index f1e425b..7274ffb 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
@@ -74,45 +74,45 @@
     return super.{core::Object::toString}();
 }
 static method error(core::String? s, self::A? a, self::B? b) → dynamic {
-  let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
   s.length;
     ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 Try calling using ?. instead.
   s.substring(1, 1);
     ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   a.foo();
     ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.bar;
     ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.baz = 42;
     ^^^" in a.{self::A::baz}{<nullable>}. = 42;
-  let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
    ^" in a.{self::A::call}{<nullable>}.(){() → void};
-  let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   b.toString(0);
             ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
-  core::Function f1 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function f1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
-  () → void f2 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  () → void f2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
                        ^" in a as{TypeError} () → void;
-  () →? void f3 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  () →? void f3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
   void Function()? f3 = a;
                         ^" in a as{TypeError} () →? void;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
new file mode 100644
index 0000000..7274ffb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+// Try accessing using ?. instead.
+//   s.length;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+// Try calling using ?. instead.
+//   s.substring(1, 1);
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?. instead.
+//   a.foo();
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.bar;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.baz = 42;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?.call instead.
+//   a();
+//    ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   b.toString(0);
+//             ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+//   Function f1 = a;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function() f2 = a;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  get bar() → core::int
+    return 42;
+  set baz(core::int value) → void {}
+  method call() → void {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method toString([core::int extra = #C1]) → core::String
+    return super.{core::Object::toString}();
+}
+static method error(core::String? s, self::A? a, self::B? b) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+  s.length;
+    ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+Try calling using ?. instead.
+  s.substring(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  a.foo();
+    ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.bar;
+    ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.baz = 42;
+    ^^^" in a.{self::A::baz}{<nullable>}. = 42;
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?.call instead.
+  a();
+   ^" in a.{self::A::call}{<nullable>}.(){() → void};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  b.toString(0);
+            ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
+  core::Function f1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  Function f1 = a;
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  void Function() f2 = a;
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
+}
+static method ok<T extends core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
+  s =={core::String::==}{(core::Object) → core::bool} s;
+  a =={core::Object::==}{(core::Object) → core::bool} a;
+  t =={core::Object::==}{(core::Object) → core::bool} t;
+  b =={core::Object::==}{(core::Object) → core::bool} b;
+  s.{core::Object::hashCode}{core::int};
+  a.{core::Object::hashCode}{core::int};
+  t.{core::Object::hashCode}{core::int};
+  b.{core::Object::hashCode}{core::int};
+  s.{core::Object::toString}(){() → core::String};
+  a.{core::Object::toString}(){() → core::String};
+  t.{core::Object::toString}(){() → core::String};
+  b.{core::Object::toString}(){() → core::String};
+  try {
+    s.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    a.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    t.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    b.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  s.{core::Object::runtimeType}{core::Type};
+  a.{core::Object::runtimeType}{core::Type};
+  t.{core::Object::runtimeType}{core::Type};
+  b.{core::Object::runtimeType}{core::Type};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
index 43aba38..7bd9497 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
@@ -553,501 +553,501 @@
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
   core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
               ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
               ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
               ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
               ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
   core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
               ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
               ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
               ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
               ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
   core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
               ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
               ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
               ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
               ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
   core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
               ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
               ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
               ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
               ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
   core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
               ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
               ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
               ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
               ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
   core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
               ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double n_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
                  ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double i_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
                  ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
               ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
               ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double x_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
                  ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double y_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
                  ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
               ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
index 43aba38..7bd9497 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
@@ -553,501 +553,501 @@
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
   core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
               ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
               ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
               ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
               ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
   core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
               ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
               ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
               ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
               ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
   core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
               ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
               ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
               ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
               ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
   core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
               ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
               ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
               ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
               ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
   core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
               ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
               ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
               ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
               ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
   core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
               ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double n_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
                  ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double i_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
                  ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
               ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
               ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double x_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
                  ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double y_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
                  ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
               ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
index 43aba38..7bd9497 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
@@ -553,501 +553,501 @@
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
   core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
               ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
               ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
               ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
               ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
   core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
               ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
               ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
               ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
               ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
   core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
               ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
               ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
               ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
               ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
   core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
               ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
               ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
               ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
               ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
   core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
               ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
               ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
               ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
               ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
   core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
               ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double n_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
                  ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double i_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
                  ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
               ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
               ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double x_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
                  ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double y_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
                  ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
               ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
index 43aba38..7bd9497 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
@@ -553,501 +553,501 @@
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
   core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
               ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
             ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
             ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
               ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
             ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
               ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
             ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
-  self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::add::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::add::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::add::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
             ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
               ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
-  self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::add::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::add::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::add::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
             ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
   core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
               ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
             ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
             ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
               ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
             ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
               ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
             ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
-  self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::sub::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::sub::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::sub::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
             ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
               ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
-  self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::sub::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::sub::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::sub::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
             ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
   core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
               ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
             ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
             ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
               ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
             ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
               ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
             ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
-  self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mul::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mul::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mul::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
             ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
               ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
-  self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mul::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mul::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mul::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
             ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
   core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
               ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
             ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
             ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
               ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
             ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
               ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
             ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
-  self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::mod::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::mod::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::mod::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
             ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
               ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
-  self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::mod::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::mod::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::mod::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
             ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
   core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
               ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
             ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
             ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
               ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
             ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
-  core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
               ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
             ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
   core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
-  self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::remainder::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
             ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
               ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
-  self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  self::remainder::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  self::remainder::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
-  self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  self::remainder::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
             ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
   core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
               ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double n_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
                  ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
             ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double i_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
                  ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
             ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
               ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
             ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
               ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double x_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
                  ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
             ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
-  core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  core::double y_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
                  ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
-  self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
             ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
-  core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
               ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
-  self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  self::clamp::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  self::clamp::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
-  self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  self::clamp::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
             ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
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 661f38d..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    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.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
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 1ac0b20..2640926 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
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let Never #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    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.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let Never #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
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 661f38d..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    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.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
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 c5c7f90..1f2f60e 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
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    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.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -75,7 +78,10 @@
   constructor foo(core::num x) → self::D
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic
   ;
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 1ac0b20..2640926 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
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let Never #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    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.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let Never #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
index 631f443..4384943 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
@@ -61,7 +61,7 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
@@ -69,14 +69,14 @@
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -84,14 +84,14 @@
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -99,7 +99,7 @@
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
@@ -107,14 +107,14 @@
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
index 631f443..4384943 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
@@ -61,7 +61,7 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
@@ -69,14 +69,14 @@
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -84,14 +84,14 @@
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -99,7 +99,7 @@
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
@@ -107,14 +107,14 @@
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
index 631f443..4384943 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
@@ -61,7 +61,7 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
@@ -69,14 +69,14 @@
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -84,14 +84,14 @@
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -99,7 +99,7 @@
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
@@ -107,14 +107,14 @@
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
index 631f443..4384943 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
@@ -69,14 +69,14 @@
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
     ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -84,14 +84,14 @@
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
            ^" in k;
   }
@@ -99,7 +99,7 @@
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
@@ -107,14 +107,14 @@
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
          ^" in k;
 }
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
index d77513d..939fe87 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
@@ -443,176 +443,176 @@
   get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
   set extensionProperty = self::Extension|set#extensionProperty;
 }
-static field core::num topLevelBinary = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static field core::num topLevelBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 var topLevelBinary = nullableInt + 0;
                                  ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
-static field core::int topLevelUnary = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static field core::int topLevelUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 var topLevelUnary = -nullableInt;
                     ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
-static field dynamic topLevelIndexGet = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+static field dynamic topLevelIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGet = nullableMap[0];
                                   ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
-static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t4 = self::nullableMap in let final core::int #t5 = 0 in let final core::int #t6 = 1 in let final void #t7 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t1 = self::nullableMap in let final core::int #t2 = 0 in let final core::int #t3 = 1 in let final void #t4 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexSet = nullableMap[0] = 1;
-                                  ^" in #t4.{core::Map::[]=}{<nullable>}.(#t5, #t6){(dynamic, dynamic) → void} in #t6;
-static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t9 = self::nullableMap in let final core::int #t10 = 0 in let final dynamic #t11 = (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                  ^" in #t1.{core::Map::[]=}{<nullable>}.(#t2, #t3){(dynamic, dynamic) → void} in #t3;
+static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t5 = self::nullableMap in let final core::int #t6 = 0 in let final dynamic #t7 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]}{<nullable>}.(#t10){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                     ^" in #t5.{core::Map::[]}{<nullable>}.(#t6){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]=}{<nullable>}.(#t10, #t11){(dynamic, dynamic) → void} in #t11;
-static field core::int topLevelPropertyGet = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                     ^" in #t5.{core::Map::[]=}{<nullable>}.(#t6, #t7){(dynamic, dynamic) → void} in #t7;
+static field core::int topLevelPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGet = nullableClass.property;
                                         ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
-static field core::int topLevelPropertySet = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertySet = nullableClass.property = 1;
                                         ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
-static field core::int topLevelPropertyGetSet = let final self::Class? #t17 = self::nullableClass in let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelPropertyGetSet = let final self::Class? #t9 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}. = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
-static field core::int topLevelMethodInvocation = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int topLevelMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelMethodInvocation = nullableClass.method();
                                              ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
-static field () → core::int topLevelMethodTearOff = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelMethodTearOff = nullableClass.method;
                                           ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
-static field dynamic topLevelFunctionImplicitCall = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+static field dynamic topLevelFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
 var topLevelFunctionImplicitCall = nullableFunction();
                                                    ^" in self::nullableFunction{<nullable>}.();
-static field dynamic topLevelFunctionExplicitCall = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+static field dynamic topLevelFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
 var topLevelFunctionExplicitCall = nullableFunction.call();
                                                     ^^^^" in self::nullableFunction{<nullable>}.();
-static field core::Function? topLevelFunctionTearOff = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+static field core::Function? topLevelFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
 var topLevelFunctionTearOff = nullableFunction.call;
                                                ^^^^" in self::nullableFunction.call;
-static field void topLevelFunctionTypeImplicitCall = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+static field void topLevelFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 var topLevelFunctionTypeImplicitCall = nullableFunctionType();
                                                            ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-static field void topLevelFunctionTypeExplicitCall = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+static field void topLevelFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
 var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
                                                             ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-static field () →? void topLevelFunctionTypeTearOff = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+static field () →? void topLevelFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
 var topLevelFunctionTypeTearOff = nullableFunctionType.call;
                                                        ^^^^" in self::nullableFunctionType.call;
-static field dynamic topLevelFunctionField = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionField = nullableClass.functionField();
                                           ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
-static field void topLevelFunctionTypeField = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeField = nullableClass.functionTypeField();
                                               ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
-static field dynamic topLevelFunctionGetter = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionGetter = nullableClass.functionGetter();
                                            ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
-static field void topLevelFunctionTypeGetter = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
                                                ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
-static field core::int topLevelExtensionBinary = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionBinary = nullableClass + 0;
                                             ^" in self::Extension|+(self::nullableClass, 0);
-static field core::int topLevelExtensionUnary = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionUnary = -nullableClass;
                              ^" in self::Extension|unary-(self::nullableClass);
-static field core::int topLevelExtensionIndexGet = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGet = nullableClass[0];
                                              ^" in self::Extension|[](self::nullableClass, 0);
-static field core::int topLevelExtensionIndexSet = let final self::Class? #t35 = self::nullableClass in let final core::int #t36 = 0 in let final core::int #t37 = 1 in let final void #t38 = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionIndexSet = let final self::Class? #t10 = self::nullableClass in let final core::int #t11 = 0 in let final core::int #t12 = 1 in let final void #t13 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexSet = nullableClass[0] = 1;
-                                             ^" in self::Extension|[]=(#t35, #t36, #t37) in #t37;
-static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t40 = self::nullableClass in let final core::int #t41 = 0 in let final core::int #t42 = (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+                                             ^" in self::Extension|[]=(#t10, #t11, #t12) in #t12;
+static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t14 = self::nullableClass in let final core::int #t15 = 0 in let final core::int #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[](#t14, #t15).{core::num::+}(1){(core::num) → core::int} in let final void #t17 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[]=(#t40, #t41, #t42) in #t42;
-static field core::int topLevelExtensionPropertyGet = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[]=(#t14, #t15, #t16) in #t16;
+static field core::int topLevelExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
                                                  ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
-static field core::int topLevelExtensionPropertySet = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
-                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t48 = 1 in let final void #t49 = self::Extension|set#extensionProperty(self::nullableClass, #t48) in #t48;
-static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t50 = self::nullableClass in let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t18 = 1 in let final void #t19 = self::Extension|set#extensionProperty(self::nullableClass, #t18) in #t18;
+static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t20 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t52 = (let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1){(core::num) → core::int} in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
-static field core::int topLevelExtensionMethodInvocation = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t20).{core::num::+}(1){(core::num) → core::int} in let final void #t22 = self::Extension|set#extensionProperty(#t20, #t21) in #t21;
+static field core::int topLevelExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
                                                       ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
-static field () → core::int topLevelExtensionMethodTearOff = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
                                                    ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
-static field core::int topLevelExtensionFunctionTypeImplicitCall = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field core::int topLevelExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
                                                              ^" in self::Extension|call(self::nullableClass);
-static field core::int topLevelExtensionFunctionTypeExplicitCall = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
                                                               ^^^^" in self::Extension|call(self::nullableClass);
-static field () → core::int topLevelExtensionFunctionTypeTearOff = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
                                                          ^^^^" in self::Extension|get#call(self::nullableClass);
-static field dynamic topLevelExtensionFunctionGetter = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
                                                     ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
-static field void topLevelExtensionFunctionTypeGetter = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
@@ -650,176 +650,176 @@
 static get nullableClass() → self::Class?
   return new self::Class::•();
 static method test() → dynamic {
-  core::num localBinary = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  core::num localBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   var localBinary = nullableInt + 0;
                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
-  core::int localUnary = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  core::int localUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   var localUnary = -nullableInt;
                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
-  dynamic localIndexGet = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+  dynamic localIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGet = nullableMap[0];
                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
-  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t65 = self::nullableMap in let final core::int #t66 = 0 in let final core::int #t67 = 1 in let final void #t68 = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t23 = self::nullableMap in let final core::int #t24 = 0 in let final core::int #t25 = 1 in let final void #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexSet = nullableMap[0] = 1;
-                                 ^" in #t65.{core::Map::[]=}{<nullable>}.(#t66, #t67){(dynamic, dynamic) → void} in #t67;
-  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t70 = self::nullableMap in let final core::int #t71 = 0 in let final dynamic #t72 = (let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                 ^" in #t23.{core::Map::[]=}{<nullable>}.(#t24, #t25){(dynamic, dynamic) → void} in #t25;
+  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t27 = self::nullableMap in let final core::int #t28 = 0 in let final dynamic #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]}{<nullable>}.(#t71){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                    ^" in #t27.{core::Map::[]}{<nullable>}.(#t28){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]=}{<nullable>}.(#t71, #t72){(dynamic, dynamic) → void} in #t72;
-  core::int localPropertyGet = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                    ^" in #t27.{core::Map::[]=}{<nullable>}.(#t28, #t29){(dynamic, dynamic) → void} in #t29;
+  core::int localPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGet = nullableClass.property;
                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
-  core::int localPropertySet = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertySet = nullableClass.property = 1;
                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
-  core::int localPropertyGetSet = let final self::Class? #t78 = self::nullableClass in let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localPropertyGetSet = let final self::Class? #t31 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}. = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
-  core::int localMethodInvocation = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+  core::int localMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localMethodInvocation = nullableClass.method();
                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
-  () → core::int localMethodTearOff = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localMethodTearOff = nullableClass.method;
                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
-  dynamic localFunctionImplicitCall = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  dynamic localFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   var localFunctionImplicitCall = nullableFunction();
                                                   ^" in self::nullableFunction{<nullable>}.();
-  dynamic localFunctionExplicitCall = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+  dynamic localFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   var localFunctionExplicitCall = nullableFunction.call();
                                                    ^^^^" in self::nullableFunction{<nullable>}.();
-  core::Function? localFunctionTearOff = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+  core::Function? localFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
   var localFunctionTearOff = nullableFunction.call;
                                               ^^^^" in self::nullableFunction.call;
-  void localFunctionTypeImplicitCall = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  void localFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   var localFunctionTypeImplicitCall = nullableFunctionType();
                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-  void localFunctionTypeExplicitCall = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  void localFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   var localFunctionTypeExplicitCall = nullableFunctionType.call();
                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-  () →? void localFunctionTypeTearOff = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+  () →? void localFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
   var localFunctionTypeTearOff = nullableFunctionType.call;
                                                       ^^^^" in self::nullableFunctionType.call;
-  dynamic localFunctionField = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionField = nullableClass.functionField();
                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
-  void localFunctionTypeField = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeField = nullableClass.functionTypeField();
                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
-  dynamic localFunctionGetter = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionGetter = nullableClass.functionGetter();
                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
-  void localFunctionTypeGetter = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
-  core::int localExtensionBinary = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionBinary = nullableClass + 0;
                                            ^" in self::Extension|+(self::nullableClass, 0);
-  core::int localExtensionUnary = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionUnary = -nullableClass;
                             ^" in self::Extension|unary-(self::nullableClass);
-  core::int localExtensionIndexGet = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGet = nullableClass[0];
                                             ^" in self::Extension|[](self::nullableClass, 0);
-  core::int localExtensionIndexSet = let final self::Class? #t96 = self::nullableClass in let final core::int #t97 = 0 in let final core::int #t98 = 1 in let final void #t99 = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionIndexSet = let final self::Class? #t32 = self::nullableClass in let final core::int #t33 = 0 in let final core::int #t34 = 1 in let final void #t35 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexSet = nullableClass[0] = 1;
-                                            ^" in self::Extension|[]=(#t96, #t97, #t98) in #t98;
-  core::int localExtensionIndexGetSet = let final self::Class? #t101 = self::nullableClass in let final core::int #t102 = 0 in let final core::int #t103 = (let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+                                            ^" in self::Extension|[]=(#t32, #t33, #t34) in #t34;
+  core::int localExtensionIndexGetSet = let final self::Class? #t36 = self::nullableClass in let final core::int #t37 = 0 in let final core::int #t38 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1){(core::num) → core::int} in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[](#t36, #t37).{core::num::+}(1){(core::num) → core::int} in let final void #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[]=(#t101, #t102, #t103) in #t103;
-  core::int localExtensionPropertyGet = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[]=(#t36, #t37, #t38) in #t38;
+  core::int localExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGet = nullableClass.extensionProperty;
                                                 ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
-  core::int localExtensionPropertySet = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertySet = nullableClass.extensionProperty = 1;
-                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t109 = 1 in let final void #t110 = self::Extension|set#extensionProperty(self::nullableClass, #t109) in #t109;
-  core::int localExtensionPropertyGetSet = let final self::Class? #t111 = self::nullableClass in let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t40 = 1 in let final void #t41 = self::Extension|set#extensionProperty(self::nullableClass, #t40) in #t40;
+  core::int localExtensionPropertyGetSet = let final self::Class? #t42 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t113 = (let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1){(core::num) → core::int} in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
-  core::int localExtensionMethodInvocation = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t42).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = self::Extension|set#extensionProperty(#t42, #t43) in #t43;
+  core::int localExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localExtensionMethodInvocation = nullableClass.extensionMethod();
                                                      ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
-  () → core::int localExtensionMethodTearOff = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionMethodTearOff = nullableClass.extensionMethod;
                                                   ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
-  core::int localExtensionFunctionTypeImplicitCall = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  core::int localExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionTypeImplicitCall = nullableClass();
                                                             ^" in self::Extension|call(self::nullableClass);
-  core::int localExtensionFunctionTypeExplicitCall = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localExtensionFunctionTypeExplicitCall = nullableClass.call();
                                                              ^^^^" in self::Extension|call(self::nullableClass);
-  () → core::int localExtensionFunctionTypeTearOff = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionFunctionTypeTearOff = nullableClass.call;
                                                         ^^^^" in self::Extension|get#call(self::nullableClass);
-  dynamic localExtensionFunctionGetter = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
-  void localExtensionFunctionTypeGetter = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
       nullableClass.extensionFunctionTypeGetter();
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.transformed.expect
new file mode 100644
index 0000000..74aa200
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.transformed.expect
@@ -0,0 +1,836 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// var topLevelBinary = nullableInt + 0;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// var topLevelUnary = -nullableInt;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGet = nullableMap[0];
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexSet = nullableMap[0] = 1;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGet = nullableClass.property;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertySet = nullableClass.property = 1;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGetSet = nullableClass.property += 1;
+//                                            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelMethodInvocation = nullableClass.method();
+//                                              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelMethodTearOff = nullableClass.method;
+//                                           ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+// var topLevelFunctionImplicitCall = nullableFunction();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+// var topLevelFunctionExplicitCall = nullableFunction.call();
+//                                                     ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+// var topLevelFunctionTearOff = nullableFunction.call;
+//                                                ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+//                                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+// var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                             ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+// var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+//                                                        ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionField = nullableClass.functionField();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeField = nullableClass.functionTypeField();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionGetter = nullableClass.functionGetter();
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionBinary = nullableClass + 0;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionUnary = -nullableClass;
+//                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGet = nullableClass[0];
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexSet = nullableClass[0] = 1;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                     ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                    ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                          ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//     nullableClass.extensionFunctionTypeGetter();
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   var localBinary = nullableInt + 0;
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   var localUnary = -nullableInt;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGet = nullableMap[0];
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexSet = nullableMap[0] = 1;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGet = nullableClass.property;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertySet = nullableClass.property = 1;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGetSet = nullableClass.property += 1;
+//                                           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localMethodInvocation = nullableClass.method();
+//                                             ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localMethodTearOff = nullableClass.method;
+//                                          ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   var localFunctionImplicitCall = nullableFunction();
+//                                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   var localFunctionExplicitCall = nullableFunction.call();
+//                                                    ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+//   var localFunctionTearOff = nullableFunction.call;
+//                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   var localFunctionTypeImplicitCall = nullableFunctionType();
+//                                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+//   var localFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                            ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+//   var localFunctionTypeTearOff = nullableFunctionType.call;
+//                                                       ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionField = nullableClass.functionField();
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeField = nullableClass.functionTypeField();
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionGetter = nullableClass.functionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionBinary = nullableClass + 0;
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionUnary = -nullableClass;
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGet = nullableClass[0];
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexSet = nullableClass[0] = 1;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                      ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                              ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                         ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//       nullableClass.extensionFunctionTypeGetter();
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int property = 0;
+  field core::Function functionField = () → Null {};
+  field () → void functionTypeField = () → void {};
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → core::int
+    return 0;
+  get functionGetter() → core::Function
+    return () → Null {};
+  get functionTypeGetter() → () → void
+    return () → void {};
+}
+extension Extension on self::Class {
+  operator + = self::Extension|+;
+  operator unary- = self::Extension|unary-;
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+  get extensionProperty = self::Extension|get#extensionProperty;
+  method extensionMethod = self::Extension|extensionMethod;
+  tearoff extensionMethod = self::Extension|get#extensionMethod;
+  get extensionFunctionGetter = self::Extension|get#extensionFunctionGetter;
+  get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
+  set extensionProperty = self::Extension|set#extensionProperty;
+}
+static field core::num topLevelBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+var topLevelBinary = nullableInt + 0;
+                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+static field core::int topLevelUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+var topLevelUnary = -nullableInt;
+                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+static field dynamic topLevelIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGet = nullableMap[0];
+                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t1 = self::nullableMap in let final core::int #t2 = 0 in let final core::int #t3 = 1 in let final void #t4 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexSet = nullableMap[0] = 1;
+                                  ^" in #t1.{core::Map::[]=}{<nullable>}.(#t2, #t3){(dynamic, dynamic) → void} in #t3;
+static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t5 = self::nullableMap in let final core::int #t6 = 0 in let final dynamic #t7 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]}{<nullable>}.(#t6){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]=}{<nullable>}.(#t6, #t7){(dynamic, dynamic) → void} in #t7;
+static field core::int topLevelPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGet = nullableClass.property;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+static field core::int topLevelPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertySet = nullableClass.property = 1;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+static field core::int topLevelPropertyGetSet = let final self::Class? #t9 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int topLevelMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelMethodInvocation = nullableClass.method();
+                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+static field () → core::int topLevelMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelMethodTearOff = nullableClass.method;
+                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+static field dynamic topLevelFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+var topLevelFunctionImplicitCall = nullableFunction();
+                                                   ^" in self::nullableFunction{<nullable>}.();
+static field dynamic topLevelFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+var topLevelFunctionExplicitCall = nullableFunction.call();
+                                                    ^^^^" in self::nullableFunction{<nullable>}.();
+static field core::Function? topLevelFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+var topLevelFunctionTearOff = nullableFunction.call;
+                                               ^^^^" in self::nullableFunction.call;
+static field void topLevelFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field void topLevelFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field () →? void topLevelFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+                                                       ^^^^" in self::nullableFunctionType.call;
+static field dynamic topLevelFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionField = nullableClass.functionField();
+                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeField = nullableClass.functionTypeField();
+                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+static field dynamic topLevelFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionGetter = nullableClass.functionGetter();
+                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+static field core::int topLevelExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionBinary = nullableClass + 0;
+                                            ^" in self::Extension|+(self::nullableClass, 0);
+static field core::int topLevelExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionUnary = -nullableClass;
+                             ^" in self::Extension|unary-(self::nullableClass);
+static field core::int topLevelExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGet = nullableClass[0];
+                                             ^" in self::Extension|[](self::nullableClass, 0);
+static field core::int topLevelExtensionIndexSet = let final self::Class? #t10 = self::nullableClass in let final core::int #t11 = 0 in let final core::int #t12 = 1 in let final void #t13 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexSet = nullableClass[0] = 1;
+                                             ^" in self::Extension|[]=(#t10, #t11, #t12) in #t12;
+static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t14 = self::nullableClass in let final core::int #t15 = 0 in let final core::int #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[](#t14, #t15).{core::num::+}(1){(core::num) → core::int} in let final void #t17 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[]=(#t14, #t15, #t16) in #t16;
+static field core::int topLevelExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+                                                 ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+static field core::int topLevelExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t18 = 1 in let final void #t19 = self::Extension|set#extensionProperty(self::nullableClass, #t18) in #t18;
+static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t20 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t20).{core::num::+}(1){(core::num) → core::int} in let final void #t22 = self::Extension|set#extensionProperty(#t20, #t21) in #t21;
+static field core::int topLevelExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                      ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+static field () → core::int topLevelExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                   ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+                                                             ^" in self::Extension|call(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                              ^^^^" in self::Extension|call(self::nullableClass);
+static field () → core::int topLevelExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+                                                         ^^^^" in self::Extension|get#call(self::nullableClass);
+static field dynamic topLevelExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+static field void topLevelExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+    nullableClass.extensionFunctionTypeGetter();
+                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
+  return 0;
+static method Extension|unary-(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
+  return 0;
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void {}
+static method Extension|call(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|call(#this);
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void {}
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|extensionMethod(#this);
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
+  return () → Null {};
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
+  return () → void {};
+static get nullableFunction() → core::Function?
+  return () → Null {};
+static get nullableFunctionType() → () →? void
+  return () → void {};
+static get nullableInt() → core::int?
+  return 0;
+static get nullableMap() → core::Map<dynamic, dynamic>?
+  return <dynamic, dynamic>{};
+static get nullableClass() → self::Class?
+  return new self::Class::•();
+static method test() → dynamic {
+  core::num localBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  var localBinary = nullableInt + 0;
+                                ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+  core::int localUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  var localUnary = -nullableInt;
+                   ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+  dynamic localIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGet = nullableMap[0];
+                                 ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t23 = self::nullableMap in let final core::int #t24 = 0 in let final core::int #t25 = 1 in let final void #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexSet = nullableMap[0] = 1;
+                                 ^" in #t23.{core::Map::[]=}{<nullable>}.(#t24, #t25){(dynamic, dynamic) → void} in #t25;
+  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t27 = self::nullableMap in let final core::int #t28 = 0 in let final dynamic #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]}{<nullable>}.(#t28){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]=}{<nullable>}.(#t28, #t29){(dynamic, dynamic) → void} in #t29;
+  core::int localPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGet = nullableClass.property;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+  core::int localPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertySet = nullableClass.property = 1;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+  core::int localPropertyGetSet = let final self::Class? #t31 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+  core::int localMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localMethodInvocation = nullableClass.method();
+                                            ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+  () → core::int localMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localMethodTearOff = nullableClass.method;
+                                         ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+  dynamic localFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  var localFunctionImplicitCall = nullableFunction();
+                                                  ^" in self::nullableFunction{<nullable>}.();
+  dynamic localFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  var localFunctionExplicitCall = nullableFunction.call();
+                                                   ^^^^" in self::nullableFunction{<nullable>}.();
+  core::Function? localFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+  var localFunctionTearOff = nullableFunction.call;
+                                              ^^^^" in self::nullableFunction.call;
+  void localFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  var localFunctionTypeImplicitCall = nullableFunctionType();
+                                                          ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  void localFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+  var localFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                           ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  () →? void localFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+  var localFunctionTypeTearOff = nullableFunctionType.call;
+                                                      ^^^^" in self::nullableFunctionType.call;
+  dynamic localFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionField = nullableClass.functionField();
+                                         ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+  void localFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeField = nullableClass.functionTypeField();
+                                             ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+  dynamic localFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionGetter = nullableClass.functionGetter();
+                                          ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+  void localFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+  core::int localExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionBinary = nullableClass + 0;
+                                           ^" in self::Extension|+(self::nullableClass, 0);
+  core::int localExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionUnary = -nullableClass;
+                            ^" in self::Extension|unary-(self::nullableClass);
+  core::int localExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGet = nullableClass[0];
+                                            ^" in self::Extension|[](self::nullableClass, 0);
+  core::int localExtensionIndexSet = let final self::Class? #t32 = self::nullableClass in let final core::int #t33 = 0 in let final core::int #t34 = 1 in let final void #t35 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexSet = nullableClass[0] = 1;
+                                            ^" in self::Extension|[]=(#t32, #t33, #t34) in #t34;
+  core::int localExtensionIndexGetSet = let final self::Class? #t36 = self::nullableClass in let final core::int #t37 = 0 in let final core::int #t38 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[](#t36, #t37).{core::num::+}(1){(core::num) → core::int} in let final void #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[]=(#t36, #t37, #t38) in #t38;
+  core::int localExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGet = nullableClass.extensionProperty;
+                                                ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+  core::int localExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t40 = 1 in let final void #t41 = self::Extension|set#extensionProperty(self::nullableClass, #t40) in #t40;
+  core::int localExtensionPropertyGetSet = let final self::Class? #t42 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t42).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = self::Extension|set#extensionProperty(#t42, #t43) in #t43;
+  core::int localExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                     ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+  () → core::int localExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                  ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+  core::int localExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionTypeImplicitCall = nullableClass();
+                                                            ^" in self::Extension|call(self::nullableClass);
+  core::int localExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                             ^^^^" in self::Extension|call(self::nullableClass);
+  () → core::int localExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionFunctionTypeTearOff = nullableClass.call;
+                                                        ^^^^" in self::Extension|get#call(self::nullableClass);
+  dynamic localExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+  void localExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+      nullableClass.extensionFunctionTypeGetter();
+                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+}
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:79:40 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:100:51 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:40:41 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:61:52 -> IntConstant(1)
+Extra constant evaluation: evaluated: 76, effectively constant: 4
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
index d77513d..939fe87 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
@@ -443,176 +443,176 @@
   get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
   set extensionProperty = self::Extension|set#extensionProperty;
 }
-static field core::num topLevelBinary = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+static field core::num topLevelBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 var topLevelBinary = nullableInt + 0;
                                  ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
-static field core::int topLevelUnary = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+static field core::int topLevelUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 var topLevelUnary = -nullableInt;
                     ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
-static field dynamic topLevelIndexGet = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+static field dynamic topLevelIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGet = nullableMap[0];
                                   ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
-static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t4 = self::nullableMap in let final core::int #t5 = 0 in let final core::int #t6 = 1 in let final void #t7 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t1 = self::nullableMap in let final core::int #t2 = 0 in let final core::int #t3 = 1 in let final void #t4 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexSet = nullableMap[0] = 1;
-                                  ^" in #t4.{core::Map::[]=}{<nullable>}.(#t5, #t6){(dynamic, dynamic) → void} in #t6;
-static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t9 = self::nullableMap in let final core::int #t10 = 0 in let final dynamic #t11 = (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                  ^" in #t1.{core::Map::[]=}{<nullable>}.(#t2, #t3){(dynamic, dynamic) → void} in #t3;
+static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t5 = self::nullableMap in let final core::int #t6 = 0 in let final dynamic #t7 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]}{<nullable>}.(#t10){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                     ^" in #t5.{core::Map::[]}{<nullable>}.(#t6){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]=}{<nullable>}.(#t10, #t11){(dynamic, dynamic) → void} in #t11;
-static field core::int topLevelPropertyGet = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                     ^" in #t5.{core::Map::[]=}{<nullable>}.(#t6, #t7){(dynamic, dynamic) → void} in #t7;
+static field core::int topLevelPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGet = nullableClass.property;
                                         ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
-static field core::int topLevelPropertySet = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertySet = nullableClass.property = 1;
                                         ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
-static field core::int topLevelPropertyGetSet = let final self::Class? #t17 = self::nullableClass in let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelPropertyGetSet = let final self::Class? #t9 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}. = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
-static field core::int topLevelMethodInvocation = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int topLevelMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelMethodInvocation = nullableClass.method();
                                              ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
-static field () → core::int topLevelMethodTearOff = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelMethodTearOff = nullableClass.method;
                                           ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
-static field dynamic topLevelFunctionImplicitCall = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+static field dynamic topLevelFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
 var topLevelFunctionImplicitCall = nullableFunction();
                                                    ^" in self::nullableFunction{<nullable>}.();
-static field dynamic topLevelFunctionExplicitCall = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+static field dynamic topLevelFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
 var topLevelFunctionExplicitCall = nullableFunction.call();
                                                     ^^^^" in self::nullableFunction{<nullable>}.();
-static field core::Function? topLevelFunctionTearOff = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+static field core::Function? topLevelFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
 var topLevelFunctionTearOff = nullableFunction.call;
                                                ^^^^" in self::nullableFunction.call;
-static field void topLevelFunctionTypeImplicitCall = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+static field void topLevelFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 var topLevelFunctionTypeImplicitCall = nullableFunctionType();
                                                            ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-static field void topLevelFunctionTypeExplicitCall = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+static field void topLevelFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
 var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
                                                             ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-static field () →? void topLevelFunctionTypeTearOff = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+static field () →? void topLevelFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
 var topLevelFunctionTypeTearOff = nullableFunctionType.call;
                                                        ^^^^" in self::nullableFunctionType.call;
-static field dynamic topLevelFunctionField = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionField = nullableClass.functionField();
                                           ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
-static field void topLevelFunctionTypeField = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeField = nullableClass.functionTypeField();
                                               ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
-static field dynamic topLevelFunctionGetter = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionGetter = nullableClass.functionGetter();
                                            ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
-static field void topLevelFunctionTypeGetter = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
                                                ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
-static field core::int topLevelExtensionBinary = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionBinary = nullableClass + 0;
                                             ^" in self::Extension|+(self::nullableClass, 0);
-static field core::int topLevelExtensionUnary = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionUnary = -nullableClass;
                              ^" in self::Extension|unary-(self::nullableClass);
-static field core::int topLevelExtensionIndexGet = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGet = nullableClass[0];
                                              ^" in self::Extension|[](self::nullableClass, 0);
-static field core::int topLevelExtensionIndexSet = let final self::Class? #t35 = self::nullableClass in let final core::int #t36 = 0 in let final core::int #t37 = 1 in let final void #t38 = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionIndexSet = let final self::Class? #t10 = self::nullableClass in let final core::int #t11 = 0 in let final core::int #t12 = 1 in let final void #t13 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexSet = nullableClass[0] = 1;
-                                             ^" in self::Extension|[]=(#t35, #t36, #t37) in #t37;
-static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t40 = self::nullableClass in let final core::int #t41 = 0 in let final core::int #t42 = (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+                                             ^" in self::Extension|[]=(#t10, #t11, #t12) in #t12;
+static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t14 = self::nullableClass in let final core::int #t15 = 0 in let final core::int #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[](#t14, #t15).{core::num::+}(1){(core::num) → core::int} in let final void #t17 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[]=(#t40, #t41, #t42) in #t42;
-static field core::int topLevelExtensionPropertyGet = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[]=(#t14, #t15, #t16) in #t16;
+static field core::int topLevelExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
                                                  ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
-static field core::int topLevelExtensionPropertySet = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
-                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t48 = 1 in let final void #t49 = self::Extension|set#extensionProperty(self::nullableClass, #t48) in #t48;
-static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t50 = self::nullableClass in let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t18 = 1 in let final void #t19 = self::Extension|set#extensionProperty(self::nullableClass, #t18) in #t18;
+static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t20 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t52 = (let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1){(core::num) → core::int} in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
-static field core::int topLevelExtensionMethodInvocation = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t20).{core::num::+}(1){(core::num) → core::int} in let final void #t22 = self::Extension|set#extensionProperty(#t20, #t21) in #t21;
+static field core::int topLevelExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
                                                       ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
-static field () → core::int topLevelExtensionMethodTearOff = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
                                                    ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
-static field core::int topLevelExtensionFunctionTypeImplicitCall = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field core::int topLevelExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
                                                              ^" in self::Extension|call(self::nullableClass);
-static field core::int topLevelExtensionFunctionTypeExplicitCall = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+static field core::int topLevelExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
                                                               ^^^^" in self::Extension|call(self::nullableClass);
-static field () → core::int topLevelExtensionFunctionTypeTearOff = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+static field () → core::int topLevelExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
                                                          ^^^^" in self::Extension|get#call(self::nullableClass);
-static field dynamic topLevelExtensionFunctionGetter = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field dynamic topLevelExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
                                                     ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
-static field void topLevelExtensionFunctionTypeGetter = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+static field void topLevelExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
@@ -650,176 +650,176 @@
 static get nullableClass() → self::Class?
   return new self::Class::•();
 static method test() → dynamic {
-  core::num localBinary = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  core::num localBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   var localBinary = nullableInt + 0;
                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
-  core::int localUnary = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  core::int localUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   var localUnary = -nullableInt;
                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
-  dynamic localIndexGet = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+  dynamic localIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGet = nullableMap[0];
                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
-  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t65 = self::nullableMap in let final core::int #t66 = 0 in let final core::int #t67 = 1 in let final void #t68 = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t23 = self::nullableMap in let final core::int #t24 = 0 in let final core::int #t25 = 1 in let final void #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexSet = nullableMap[0] = 1;
-                                 ^" in #t65.{core::Map::[]=}{<nullable>}.(#t66, #t67){(dynamic, dynamic) → void} in #t67;
-  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t70 = self::nullableMap in let final core::int #t71 = 0 in let final dynamic #t72 = (let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                 ^" in #t23.{core::Map::[]=}{<nullable>}.(#t24, #t25){(dynamic, dynamic) → void} in #t25;
+  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t27 = self::nullableMap in let final core::int #t28 = 0 in let final dynamic #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]}{<nullable>}.(#t71){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                    ^" in #t27.{core::Map::[]}{<nullable>}.(#t28){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]=}{<nullable>}.(#t71, #t72){(dynamic, dynamic) → void} in #t72;
-  core::int localPropertyGet = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                    ^" in #t27.{core::Map::[]=}{<nullable>}.(#t28, #t29){(dynamic, dynamic) → void} in #t29;
+  core::int localPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGet = nullableClass.property;
                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
-  core::int localPropertySet = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertySet = nullableClass.property = 1;
                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
-  core::int localPropertyGetSet = let final self::Class? #t78 = self::nullableClass in let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localPropertyGetSet = let final self::Class? #t31 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}. = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
-  core::int localMethodInvocation = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+  core::int localMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localMethodInvocation = nullableClass.method();
                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
-  () → core::int localMethodTearOff = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localMethodTearOff = nullableClass.method;
                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
-  dynamic localFunctionImplicitCall = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  dynamic localFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   var localFunctionImplicitCall = nullableFunction();
                                                   ^" in self::nullableFunction{<nullable>}.();
-  dynamic localFunctionExplicitCall = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+  dynamic localFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   var localFunctionExplicitCall = nullableFunction.call();
                                                    ^^^^" in self::nullableFunction{<nullable>}.();
-  core::Function? localFunctionTearOff = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+  core::Function? localFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
   var localFunctionTearOff = nullableFunction.call;
                                               ^^^^" in self::nullableFunction.call;
-  void localFunctionTypeImplicitCall = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  void localFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   var localFunctionTypeImplicitCall = nullableFunctionType();
                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-  void localFunctionTypeExplicitCall = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  void localFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   var localFunctionTypeExplicitCall = nullableFunctionType.call();
                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
-  () →? void localFunctionTypeTearOff = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+  () →? void localFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
   var localFunctionTypeTearOff = nullableFunctionType.call;
                                                       ^^^^" in self::nullableFunctionType.call;
-  dynamic localFunctionField = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionField = nullableClass.functionField();
                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
-  void localFunctionTypeField = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeField = nullableClass.functionTypeField();
                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
-  dynamic localFunctionGetter = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionGetter = nullableClass.functionGetter();
                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
-  void localFunctionTypeGetter = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
-  core::int localExtensionBinary = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionBinary = nullableClass + 0;
                                            ^" in self::Extension|+(self::nullableClass, 0);
-  core::int localExtensionUnary = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionUnary = -nullableClass;
                             ^" in self::Extension|unary-(self::nullableClass);
-  core::int localExtensionIndexGet = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGet = nullableClass[0];
                                             ^" in self::Extension|[](self::nullableClass, 0);
-  core::int localExtensionIndexSet = let final self::Class? #t96 = self::nullableClass in let final core::int #t97 = 0 in let final core::int #t98 = 1 in let final void #t99 = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionIndexSet = let final self::Class? #t32 = self::nullableClass in let final core::int #t33 = 0 in let final core::int #t34 = 1 in let final void #t35 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexSet = nullableClass[0] = 1;
-                                            ^" in self::Extension|[]=(#t96, #t97, #t98) in #t98;
-  core::int localExtensionIndexGetSet = let final self::Class? #t101 = self::nullableClass in let final core::int #t102 = 0 in let final core::int #t103 = (let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+                                            ^" in self::Extension|[]=(#t32, #t33, #t34) in #t34;
+  core::int localExtensionIndexGetSet = let final self::Class? #t36 = self::nullableClass in let final core::int #t37 = 0 in let final core::int #t38 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1){(core::num) → core::int} in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[](#t36, #t37).{core::num::+}(1){(core::num) → core::int} in let final void #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[]=(#t101, #t102, #t103) in #t103;
-  core::int localExtensionPropertyGet = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[]=(#t36, #t37, #t38) in #t38;
+  core::int localExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGet = nullableClass.extensionProperty;
                                                 ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
-  core::int localExtensionPropertySet = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+  core::int localExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertySet = nullableClass.extensionProperty = 1;
-                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t109 = 1 in let final void #t110 = self::Extension|set#extensionProperty(self::nullableClass, #t109) in #t109;
-  core::int localExtensionPropertyGetSet = let final self::Class? #t111 = self::nullableClass in let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t40 = 1 in let final void #t41 = self::Extension|set#extensionProperty(self::nullableClass, #t40) in #t40;
+  core::int localExtensionPropertyGetSet = let final self::Class? #t42 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t113 = (let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1){(core::num) → core::int} in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
-  core::int localExtensionMethodInvocation = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t42).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = self::Extension|set#extensionProperty(#t42, #t43) in #t43;
+  core::int localExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localExtensionMethodInvocation = nullableClass.extensionMethod();
                                                      ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
-  () → core::int localExtensionMethodTearOff = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionMethodTearOff = nullableClass.extensionMethod;
                                                   ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
-  core::int localExtensionFunctionTypeImplicitCall = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  core::int localExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionTypeImplicitCall = nullableClass();
                                                             ^" in self::Extension|call(self::nullableClass);
-  core::int localExtensionFunctionTypeExplicitCall = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+  core::int localExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localExtensionFunctionTypeExplicitCall = nullableClass.call();
                                                              ^^^^" in self::Extension|call(self::nullableClass);
-  () → core::int localExtensionFunctionTypeTearOff = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+  () → core::int localExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionFunctionTypeTearOff = nullableClass.call;
                                                         ^^^^" in self::Extension|get#call(self::nullableClass);
-  dynamic localExtensionFunctionGetter = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  dynamic localExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
-  void localExtensionFunctionTypeGetter = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+  void localExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
       nullableClass.extensionFunctionTypeGetter();
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..74aa200
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.transformed.expect
@@ -0,0 +1,836 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// var topLevelBinary = nullableInt + 0;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// var topLevelUnary = -nullableInt;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGet = nullableMap[0];
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexSet = nullableMap[0] = 1;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGet = nullableClass.property;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertySet = nullableClass.property = 1;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGetSet = nullableClass.property += 1;
+//                                            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelMethodInvocation = nullableClass.method();
+//                                              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelMethodTearOff = nullableClass.method;
+//                                           ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+// var topLevelFunctionImplicitCall = nullableFunction();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+// var topLevelFunctionExplicitCall = nullableFunction.call();
+//                                                     ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+// var topLevelFunctionTearOff = nullableFunction.call;
+//                                                ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+//                                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+// var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                             ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+// var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+//                                                        ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionField = nullableClass.functionField();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeField = nullableClass.functionTypeField();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionGetter = nullableClass.functionGetter();
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionBinary = nullableClass + 0;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionUnary = -nullableClass;
+//                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGet = nullableClass[0];
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexSet = nullableClass[0] = 1;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                     ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                    ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                          ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//     nullableClass.extensionFunctionTypeGetter();
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   var localBinary = nullableInt + 0;
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   var localUnary = -nullableInt;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGet = nullableMap[0];
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexSet = nullableMap[0] = 1;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGet = nullableClass.property;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertySet = nullableClass.property = 1;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGetSet = nullableClass.property += 1;
+//                                           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localMethodInvocation = nullableClass.method();
+//                                             ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localMethodTearOff = nullableClass.method;
+//                                          ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   var localFunctionImplicitCall = nullableFunction();
+//                                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   var localFunctionExplicitCall = nullableFunction.call();
+//                                                    ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+//   var localFunctionTearOff = nullableFunction.call;
+//                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   var localFunctionTypeImplicitCall = nullableFunctionType();
+//                                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+//   var localFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                            ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+//   var localFunctionTypeTearOff = nullableFunctionType.call;
+//                                                       ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionField = nullableClass.functionField();
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeField = nullableClass.functionTypeField();
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionGetter = nullableClass.functionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionBinary = nullableClass + 0;
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionUnary = -nullableClass;
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGet = nullableClass[0];
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexSet = nullableClass[0] = 1;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                      ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                              ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                         ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//       nullableClass.extensionFunctionTypeGetter();
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int property = 0;
+  field core::Function functionField = () → Null {};
+  field () → void functionTypeField = () → void {};
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → core::int
+    return 0;
+  get functionGetter() → core::Function
+    return () → Null {};
+  get functionTypeGetter() → () → void
+    return () → void {};
+}
+extension Extension on self::Class {
+  operator + = self::Extension|+;
+  operator unary- = self::Extension|unary-;
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+  get extensionProperty = self::Extension|get#extensionProperty;
+  method extensionMethod = self::Extension|extensionMethod;
+  tearoff extensionMethod = self::Extension|get#extensionMethod;
+  get extensionFunctionGetter = self::Extension|get#extensionFunctionGetter;
+  get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
+  set extensionProperty = self::Extension|set#extensionProperty;
+}
+static field core::num topLevelBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+var topLevelBinary = nullableInt + 0;
+                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+static field core::int topLevelUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+var topLevelUnary = -nullableInt;
+                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+static field dynamic topLevelIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGet = nullableMap[0];
+                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t1 = self::nullableMap in let final core::int #t2 = 0 in let final core::int #t3 = 1 in let final void #t4 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexSet = nullableMap[0] = 1;
+                                  ^" in #t1.{core::Map::[]=}{<nullable>}.(#t2, #t3){(dynamic, dynamic) → void} in #t3;
+static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t5 = self::nullableMap in let final core::int #t6 = 0 in let final dynamic #t7 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]}{<nullable>}.(#t6){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]=}{<nullable>}.(#t6, #t7){(dynamic, dynamic) → void} in #t7;
+static field core::int topLevelPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGet = nullableClass.property;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+static field core::int topLevelPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertySet = nullableClass.property = 1;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+static field core::int topLevelPropertyGetSet = let final self::Class? #t9 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int topLevelMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelMethodInvocation = nullableClass.method();
+                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+static field () → core::int topLevelMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelMethodTearOff = nullableClass.method;
+                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+static field dynamic topLevelFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+var topLevelFunctionImplicitCall = nullableFunction();
+                                                   ^" in self::nullableFunction{<nullable>}.();
+static field dynamic topLevelFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+var topLevelFunctionExplicitCall = nullableFunction.call();
+                                                    ^^^^" in self::nullableFunction{<nullable>}.();
+static field core::Function? topLevelFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+var topLevelFunctionTearOff = nullableFunction.call;
+                                               ^^^^" in self::nullableFunction.call;
+static field void topLevelFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field void topLevelFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field () →? void topLevelFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+                                                       ^^^^" in self::nullableFunctionType.call;
+static field dynamic topLevelFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionField = nullableClass.functionField();
+                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeField = nullableClass.functionTypeField();
+                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+static field dynamic topLevelFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionGetter = nullableClass.functionGetter();
+                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+static field core::int topLevelExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionBinary = nullableClass + 0;
+                                            ^" in self::Extension|+(self::nullableClass, 0);
+static field core::int topLevelExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionUnary = -nullableClass;
+                             ^" in self::Extension|unary-(self::nullableClass);
+static field core::int topLevelExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGet = nullableClass[0];
+                                             ^" in self::Extension|[](self::nullableClass, 0);
+static field core::int topLevelExtensionIndexSet = let final self::Class? #t10 = self::nullableClass in let final core::int #t11 = 0 in let final core::int #t12 = 1 in let final void #t13 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexSet = nullableClass[0] = 1;
+                                             ^" in self::Extension|[]=(#t10, #t11, #t12) in #t12;
+static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t14 = self::nullableClass in let final core::int #t15 = 0 in let final core::int #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[](#t14, #t15).{core::num::+}(1){(core::num) → core::int} in let final void #t17 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[]=(#t14, #t15, #t16) in #t16;
+static field core::int topLevelExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+                                                 ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+static field core::int topLevelExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t18 = 1 in let final void #t19 = self::Extension|set#extensionProperty(self::nullableClass, #t18) in #t18;
+static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t20 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t20).{core::num::+}(1){(core::num) → core::int} in let final void #t22 = self::Extension|set#extensionProperty(#t20, #t21) in #t21;
+static field core::int topLevelExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                      ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+static field () → core::int topLevelExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                   ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+                                                             ^" in self::Extension|call(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                              ^^^^" in self::Extension|call(self::nullableClass);
+static field () → core::int topLevelExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+                                                         ^^^^" in self::Extension|get#call(self::nullableClass);
+static field dynamic topLevelExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+static field void topLevelExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+    nullableClass.extensionFunctionTypeGetter();
+                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
+  return 0;
+static method Extension|unary-(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
+  return 0;
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void {}
+static method Extension|call(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|call(#this);
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void {}
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|extensionMethod(#this);
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
+  return () → Null {};
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
+  return () → void {};
+static get nullableFunction() → core::Function?
+  return () → Null {};
+static get nullableFunctionType() → () →? void
+  return () → void {};
+static get nullableInt() → core::int?
+  return 0;
+static get nullableMap() → core::Map<dynamic, dynamic>?
+  return <dynamic, dynamic>{};
+static get nullableClass() → self::Class?
+  return new self::Class::•();
+static method test() → dynamic {
+  core::num localBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  var localBinary = nullableInt + 0;
+                                ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+  core::int localUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  var localUnary = -nullableInt;
+                   ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+  dynamic localIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGet = nullableMap[0];
+                                 ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t23 = self::nullableMap in let final core::int #t24 = 0 in let final core::int #t25 = 1 in let final void #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexSet = nullableMap[0] = 1;
+                                 ^" in #t23.{core::Map::[]=}{<nullable>}.(#t24, #t25){(dynamic, dynamic) → void} in #t25;
+  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t27 = self::nullableMap in let final core::int #t28 = 0 in let final dynamic #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]}{<nullable>}.(#t28){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]=}{<nullable>}.(#t28, #t29){(dynamic, dynamic) → void} in #t29;
+  core::int localPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGet = nullableClass.property;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+  core::int localPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertySet = nullableClass.property = 1;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+  core::int localPropertyGetSet = let final self::Class? #t31 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+  core::int localMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localMethodInvocation = nullableClass.method();
+                                            ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+  () → core::int localMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localMethodTearOff = nullableClass.method;
+                                         ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+  dynamic localFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  var localFunctionImplicitCall = nullableFunction();
+                                                  ^" in self::nullableFunction{<nullable>}.();
+  dynamic localFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  var localFunctionExplicitCall = nullableFunction.call();
+                                                   ^^^^" in self::nullableFunction{<nullable>}.();
+  core::Function? localFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+  var localFunctionTearOff = nullableFunction.call;
+                                              ^^^^" in self::nullableFunction.call;
+  void localFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  var localFunctionTypeImplicitCall = nullableFunctionType();
+                                                          ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  void localFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+  var localFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                           ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  () →? void localFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+  var localFunctionTypeTearOff = nullableFunctionType.call;
+                                                      ^^^^" in self::nullableFunctionType.call;
+  dynamic localFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionField = nullableClass.functionField();
+                                         ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+  void localFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeField = nullableClass.functionTypeField();
+                                             ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+  dynamic localFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionGetter = nullableClass.functionGetter();
+                                          ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+  void localFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+  core::int localExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionBinary = nullableClass + 0;
+                                           ^" in self::Extension|+(self::nullableClass, 0);
+  core::int localExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionUnary = -nullableClass;
+                            ^" in self::Extension|unary-(self::nullableClass);
+  core::int localExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGet = nullableClass[0];
+                                            ^" in self::Extension|[](self::nullableClass, 0);
+  core::int localExtensionIndexSet = let final self::Class? #t32 = self::nullableClass in let final core::int #t33 = 0 in let final core::int #t34 = 1 in let final void #t35 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexSet = nullableClass[0] = 1;
+                                            ^" in self::Extension|[]=(#t32, #t33, #t34) in #t34;
+  core::int localExtensionIndexGetSet = let final self::Class? #t36 = self::nullableClass in let final core::int #t37 = 0 in let final core::int #t38 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[](#t36, #t37).{core::num::+}(1){(core::num) → core::int} in let final void #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[]=(#t36, #t37, #t38) in #t38;
+  core::int localExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGet = nullableClass.extensionProperty;
+                                                ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+  core::int localExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t40 = 1 in let final void #t41 = self::Extension|set#extensionProperty(self::nullableClass, #t40) in #t40;
+  core::int localExtensionPropertyGetSet = let final self::Class? #t42 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t42).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = self::Extension|set#extensionProperty(#t42, #t43) in #t43;
+  core::int localExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                     ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+  () → core::int localExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                  ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+  core::int localExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionTypeImplicitCall = nullableClass();
+                                                            ^" in self::Extension|call(self::nullableClass);
+  core::int localExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                             ^^^^" in self::Extension|call(self::nullableClass);
+  () → core::int localExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionFunctionTypeTearOff = nullableClass.call;
+                                                        ^^^^" in self::Extension|get#call(self::nullableClass);
+  dynamic localExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+  void localExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+      nullableClass.extensionFunctionTypeGetter();
+                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+}
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:79:40 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:100:51 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:40:41 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///potentially_nullable_access.dart:61:52 -> IntConstant(1)
+Extra constant evaluation: evaluated: 76, effectively constant: 4
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index 2c50f0d..a6d8695 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -72,31 +72,31 @@
 }
 static method returnImplicit() → core::String {
   core::print("foo");
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnImplicit() /*error*/ {
        ^" in null;
 }
 static method returnExplicit() → core::String {
   core::print("foo");
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
   return null; // error
          ^" in null as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method returnMixed(core::bool b) → core::String {
   if(b) {
     core::print("foo");
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
 static method returnAsync1() → asy::Future<dynamic> async {}
 static method returnAsync2() → FutureOr<dynamic> async {}
 static method returnAsync3() → FutureOr<core::int> async {
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
 }
@@ -133,7 +133,7 @@
     default:
       {}
   }
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -141,31 +141,31 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null as{TypeError,ForNonNullableByDefault} core::String;
     }
-    return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
   function returnAsync1() → asy::Future<dynamic> async {}
   function returnAsync2() → FutureOr<dynamic> async {}
   function returnAsync3() → FutureOr<core::int> async {
-    return let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
@@ -202,7 +202,7 @@
       default:
         {}
     }
-    return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 0aaa16b..027a6aa 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -72,24 +72,24 @@
 }
 static method returnImplicit() → core::String {
   core::print("foo");
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnImplicit() /*error*/ {
        ^" in null;
 }
 static method returnExplicit() → core::String {
   core::print("foo");
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
   return null; // error
-         ^" in let Null #t3 = null in #t3 == null ?{core::String} #t3 as{TypeError,ForNonNullableByDefault} core::String : #t3{core::String};
+         ^" in let Null #t1 = null in #t1 == null ?{core::String} #t1 as{TypeError,ForNonNullableByDefault} core::String : #t1{core::String};
 }
 static method returnMixed(core::bool b) → core::String {
   if(b) {
     core::print("foo");
-    return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
-           ^" in let Null #t5 = null in #t5 == null ?{core::String} #t5 as{TypeError,ForNonNullableByDefault} core::String : #t5{core::String};
+           ^" in let Null #t2 = null in #t2 == null ?{core::String} #t2 as{TypeError,ForNonNullableByDefault} core::String : #t2{core::String};
   }
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
@@ -153,7 +153,7 @@
     try {
       #L3:
       {
-        :return_value = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+        :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
         break #L3;
@@ -332,7 +332,7 @@
     default:
       {}
   }
-  return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -340,24 +340,24 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
-           ^" in let Null #t11 = null in #t11 == null ?{core::String} #t11 as{TypeError,ForNonNullableByDefault} core::String : #t11{core::String};
+           ^" in let Null #t3 = null in #t3 == null ?{core::String} #t3 as{TypeError,ForNonNullableByDefault} core::String : #t3{core::String};
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
-             ^" in let Null #t13 = null in #t13 == null ?{core::String} #t13 as{TypeError,ForNonNullableByDefault} core::String : #t13{core::String};
+             ^" in let Null #t4 = null in #t4 == null ?{core::String} #t4 as{TypeError,ForNonNullableByDefault} core::String : #t4{core::String};
     }
-    return let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
@@ -421,7 +421,7 @@
       try {
         #L15:
         {
-          :return_value = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
           break #L15;
@@ -600,7 +600,7 @@
       default:
         {}
     }
-    return let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
@@ -629,21 +629,6 @@
   #C7 = <self::Enum>[#C3, #C6]
 }
 
-Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///return_null.dart:13:10 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:13:10 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:13:10 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///return_null.dart:19:12 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:19:12 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:19:12 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///return_null.dart:69:12 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:69:12 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:69:12 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///return_null.dart:75:14 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 380, effectively constant: 12
-
 
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index d2df46e..cb0d622 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -73,31 +73,31 @@
 }
 static method returnImplicit() → core::String {
   core::print("foo");
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnImplicit() /*error*/ {
        ^" in null;
 }
 static method returnExplicit() → core::String {
   core::print("foo");
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
   return null; // error
          ^" in null as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method returnMixed(core::bool b) → core::String {
   if(b) {
     core::print("foo");
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
 static method returnAsync1() → asy::Future<dynamic> async {}
 static method returnAsync2() → FutureOr<dynamic> async {}
 static method returnAsync3() → FutureOr<core::int> async {
-  return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
 }
@@ -137,7 +137,7 @@
     default:
       {}
   }
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -145,31 +145,31 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null as{TypeError,ForNonNullableByDefault} core::String;
     }
-    return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
   function returnAsync1() → asy::Future<dynamic> async {}
   function returnAsync2() → FutureOr<dynamic> async {}
   function returnAsync3() → FutureOr<core::int> async {
-    return let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
@@ -209,7 +209,7 @@
       default:
         {}
     }
-    return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index b0fa47a..96616e8 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -73,24 +73,24 @@
 }
 static method returnImplicit() → core::String {
   core::print("foo");
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnImplicit() /*error*/ {
        ^" in null;
 }
 static method returnExplicit() → core::String {
   core::print("foo");
-  return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
   return null; // error
          ^" in null;
 }
 static method returnMixed(core::bool b) → core::String {
   if(b) {
     core::print("foo");
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null;
   }
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
@@ -154,7 +154,7 @@
     try {
       #L3:
       {
-        :return_value = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+        :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
         break #L3;
@@ -336,7 +336,7 @@
     default:
       {}
   }
-  return let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -344,24 +344,24 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null;
     }
-    return let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
@@ -425,7 +425,7 @@
       try {
         #L16:
         {
-          :return_value = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
           break #L16;
@@ -607,7 +607,7 @@
       default:
         {}
     }
-    return let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
index 5fd4921..0e34446 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
@@ -54,36 +54,36 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
-  self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
-  self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+                                ^" in (let final self::Class? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
-  self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                 ^^^^^" in (let final self::Class? #t7 = c in #t7 == null ?{self::Class?} null : #t7{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
-  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
-  self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                       ^" in (let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : #t8{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t9 = c in #t9 == null ?{core::bool?} null : #t9{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
-  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
-  self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+                                  ^" in (let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : #t10{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next}{self::Class} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14){(core::int, core::int) → void} in #t14;
+  let final self::Class? #t16 = c in #t16 == null ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next}{self::Class} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
-  self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                    ^^^^^^" in (let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : #t19{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
+                       ^" in (let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : #t20{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
-    let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+    invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
       ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
index 6c0eabe..d3a152c 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
@@ -54,36 +54,36 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
-  self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
-  self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+                                ^" in (let final self::Class? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
-  self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                 ^^^^^" in (let final self::Class? #t7 = c in #t7 == null ?{self::Class?} null : #t7{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
-  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
-  self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                       ^" in (let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : #t8{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t9 = c in #t9 == null ?{core::bool?} null : #t9{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
-  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
-  self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+                                  ^" in (let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : #t10{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next}{self::Class} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14){(core::int, core::int) → void} in #t14;
+  let final self::Class? #t16 = c in #t16 == null ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next}{self::Class} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
-  self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                    ^^^^^^" in (let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : #t19{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
+                       ^" in (let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : #t20{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
-    let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+    invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
       ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
@@ -118,4 +118,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:26:13 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:27:11 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:27:11 -> IntConstant(0)
-Extra constant evaluation: evaluated: 165, effectively constant: 4
+Extra constant evaluation: evaluated: 105, effectively constant: 4
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
index 5fd4921..0e34446 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
@@ -54,36 +54,36 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
-  self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
-  self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+                                ^" in (let final self::Class? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
-  self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                 ^^^^^" in (let final self::Class? #t7 = c in #t7 == null ?{self::Class?} null : #t7{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
-  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
-  self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                       ^" in (let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : #t8{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t9 = c in #t9 == null ?{core::bool?} null : #t9{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
-  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
-  self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+                                  ^" in (let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : #t10{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next}{self::Class} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14){(core::int, core::int) → void} in #t14;
+  let final self::Class? #t16 = c in #t16 == null ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next}{self::Class} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
-  self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                    ^^^^^^" in (let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : #t19{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
+                       ^" in (let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : #t20{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
-    let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+    invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
       ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
index 6c0eabe..d3a152c 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
@@ -54,36 +54,36 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
-  self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
-  self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+                                ^" in (let final self::Class? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
-  self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                 ^^^^^" in (let final self::Class? #t7 = c in #t7 == null ?{self::Class?} null : #t7{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
-  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
-  self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                       ^" in (let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : #t8{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t9 = c in #t9 == null ?{core::bool?} null : #t9{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
-  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
-  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
-  self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+                                  ^" in (let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : #t10{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next}{self::Class} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14){(core::int, core::int) → void} in #t14;
+  let final self::Class? #t16 = c in #t16 == null ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next}{self::Class} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
-  self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+                                    ^^^^^^" in (let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : #t19{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
+                       ^" in (let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : #t20{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
-    let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+    invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
       ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
@@ -118,4 +118,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:26:13 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:27:11 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///shorting_stop.dart:27:11 -> IntConstant(0)
-Extra constant evaluation: evaluated: 165, effectively constant: 4
+Extra constant evaluation: evaluated: 105, effectively constant: 4
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index 3435d06..199a6cb 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -30,7 +30,7 @@
         return 0;
       }
   }
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 int method1(Enum? e) {
     ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index 3435d06..199a6cb 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -30,7 +30,7 @@
         return 0;
       }
   }
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 int method1(Enum? e) {
     ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index 6d0b4f2..f73e2a7 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -31,7 +31,7 @@
         return 0;
       }
   }
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 int method1(Enum? e) {
     ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index 6d0b4f2..f73e2a7 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
         return 0;
       }
   }
-  return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 int method1(Enum? e) {
     ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
index 9cbfdf4..ad453ca 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
@@ -55,38 +55,38 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
                        ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
                                ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(c); // Error.
                           ^" in c as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call}{() → core::int});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call}{() → core::int});
-  self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t1 = c in #t1 == null ?{() → core::int} null : #t1.{self::C::call}{() → core::int});
+  self::nullableFunctionContext(let final self::C #t2 = c in #t2 == null ?{() → core::int} null : #t2.{self::C::call}{() → core::int});
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
index 99736f9..b42d02f 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
@@ -55,46 +55,39 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
-                       ^" in let Null #t2 = null in #t2 == null ?{() → core::int} #t2 as{TypeError} () → core::int : #t2{() → core::int});
-  self::nullableFunctionContext(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+                       ^" in let Null #t1 = null in #t1 == null ?{() → core::int} #t1 as{TypeError} () → core::int : #t1{() → core::int});
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
                                ^" in null);
-  self::functionContext(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(c); // Error.
                           ^" in c as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call}{() → core::int});
-  self::nullableFunctionContext(let final self::C #t11 = c in #t11 == null ?{() → core::int} null : #t11.{self::C::call}{() → core::int});
-  self::functionContext(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t2 = c in #t2 == null ?{() → core::int} null : #t2.{self::C::call}{() → core::int});
+  self::nullableFunctionContext(let final self::C #t3 = c in #t3 == null ?{() → core::int} null : #t3.{self::C::call}{() → core::int});
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method main() → dynamic {}
-
-
-Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///tearoff_from_nullable_receiver.dart:14:24 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///tearoff_from_nullable_receiver.dart:14:24 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///tearoff_from_nullable_receiver.dart:14:24 -> NullConstant(null)
-Extra constant evaluation: evaluated: 58, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
index 9cbfdf4..ad453ca 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
@@ -55,38 +55,38 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
                        ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
                                ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(c); // Error.
                           ^" in c as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call}{() → core::int});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call}{() → core::int});
-  self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t1 = c in #t1 == null ?{() → core::int} null : #t1.{self::C::call}{() → core::int});
+  self::nullableFunctionContext(let final self::C #t2 = c in #t2 == null ?{() → core::int} null : #t2.{self::C::call}{() → core::int});
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
index 3f2deb7..dbe9c13 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
@@ -55,38 +55,38 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
                        ^" in null);
-  self::nullableFunctionContext(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
                                ^" in null);
-  self::functionContext(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
-  self::nullableFunctionContext(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(c); // Error.
                           ^" in c as{TypeError} () →? core::int);
-  self::functionContext(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call}{() → core::int});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call}{() → core::int});
-  self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t1 = c in #t1 == null ?{() → core::int} null : #t1.{self::C::call}{() → core::int});
+  self::nullableFunctionContext(let final self::C #t2 = c in #t2 == null ?{() → core::int} null : #t2.{self::C::call}{() → core::int});
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
diff --git a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.expect b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.expect
index aa5cbbd..b10539b 100644
--- a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.expect
@@ -19,7 +19,7 @@
 }
 static method test() → void {
   core::int x = self::check<core::int>(new self::C::•<core::List<core::int>>((core::List<core::int> x) → void {}));
-  core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String s = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String s = x; // Should be an error, `T` should be int.
              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.transformed.expect
index 680f436..4bf9d54 100644
--- a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 }
 static method test() → void {
   core::int x = self::check<core::int>(new self::C::•<core::List<core::int>>((core::List<core::int> x) → void {}));
-  core::String s = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String s = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String s = x; // Should be an error, `T` should be int.
              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
 }
@@ -30,4 +30,4 @@
 Evaluated: EqualsNull @ org-dartlang-testcase:///type_constraint_solving_closures_in_upper_and_lower_bounds.dart:10:3 -> BoolConstant(true)
 Evaluated: VariableGet @ org-dartlang-testcase:///type_constraint_solving_closures_in_upper_and_lower_bounds.dart:10:15 -> NullConstant(null)
 Evaluated: VariableGet @ org-dartlang-testcase:///type_constraint_solving_closures_in_upper_and_lower_bounds.dart:10:3 -> NullConstant(null)
-Extra constant evaluation: evaluated: 12, effectively constant: 3
+Extra constant evaluation: evaluated: 9, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.expect b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.expect
index aa5cbbd..b10539b 100644
--- a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.expect
@@ -19,7 +19,7 @@
 }
 static method test() → void {
   core::int x = self::check<core::int>(new self::C::•<core::List<core::int>>((core::List<core::int> x) → void {}));
-  core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String s = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String s = x; // Should be an error, `T` should be int.
              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.transformed.expect
index abbe6b1..2b87acd 100644
--- a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 }
 static method test() → void {
   core::int x = self::check<core::int>(new self::C::•<core::List<core::int>>((core::List<core::int> x) → void {}));
-  core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String s = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String s = x; // Should be an error, `T` should be int.
              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
index d78b587..d345541 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
@@ -110,7 +110,7 @@
     i = super.{in_2::Super::nullabilityMethod}(null);
     i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
@@ -142,13 +142,13 @@
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
     i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
-    this.{self::ClassQ::nullabilitySetter} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
                         ^" in null as{TypeError,ForNonNullableByDefault} core::int;
     super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -171,13 +171,13 @@
     ;
   method test() → dynamic {
     core::int i;
-    invalid-type v1 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
     var v1 = nullabilityMethod(null); // ok
                               ^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}{<inapplicable>}.(null){(invalid-type) → invalid-type};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
@@ -207,7 +207,7 @@
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..f10d073
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.transformed.expect
@@ -0,0 +1,372 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: Class 'ClassMixedIn' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedIn'.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is one of the overridden members.
+//   int nullabilityMethod(int i, {required int j}) => i;
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: This is one of the overridden members.
+//   int? nullabilityMethod(int? i, {int? j}) => i;
+//        ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: Class 'ClassMixedInQ' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedInQ'.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: This is one of the overridden members.
+//   int? nullabilityMethod(int? i, {int? j}) => i;
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is one of the overridden members.
+//   int nullabilityMethod(int i, {required int j}) => i;
+//       ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+//     var v1 = nullabilityMethod(null); // ok
+//                               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  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 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 nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+    var v1 = nullabilityMethod(null); // ok
+                              ^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}{<inapplicable>}.(null){(invalid-type) → invalid-type};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int v2 = this.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  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 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 nullabilitySetter(core::int? value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int?, {j: core::int?}) →* core::int?};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::Super::nullabilityGetter
+  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 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 {}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super extends core::Object implements in_2::Super /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
+    return 0;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int i) → core::int
+    return i;
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int value) → void {}
+  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 class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ extends core::Object implements in_2::SuperQ /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
+    return null;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int? value) → void {}
+  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 class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
index a532ea2..4d404a1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
@@ -88,7 +88,7 @@
     i = super.{in_2::Super::nullabilityMethod}(null);
     i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
@@ -120,13 +120,13 @@
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
     i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
-    this.{self::ClassQ::nullabilitySetter} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
                         ^" in null as{TypeError,ForNonNullableByDefault} core::int;
     super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -153,7 +153,7 @@
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
-    let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
@@ -185,13 +185,13 @@
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
     i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
-    this.{self::ClassMixedInQ::nullabilitySetter} = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
                         ^" in null as{TypeError,ForNonNullableByDefault} core::int;
     super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..b2f64e9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.transformed.expect
@@ -0,0 +1,353 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  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 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 nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  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 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 nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  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 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 nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super extends core::Object implements in_2::Super /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
+    return 0;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int i) → core::int
+    return i;
+  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
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int value) → void {}
+}
+abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ extends core::Object implements in_2::SuperQ /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
+    return null;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+  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
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int? value) → void {}
+}
+abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
index 3e98cba..a4ccce2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
@@ -96,7 +96,7 @@
     i = super.{in_2::Super::nullabilityMethod}(null);
     i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
-    let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
@@ -124,19 +124,19 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{self::ClassQ::nullabilityMethod}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    this.{self::ClassQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
     nullabilityMethod(null); // error
                       ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
     i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
-    this.{self::ClassQ::nullabilitySetter} = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
                         ^" in null as{TypeError,ForNonNullableByDefault} core::int;
     super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -164,7 +164,7 @@
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
-    let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
@@ -192,19 +192,19 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{self::ClassMixedInQ::nullabilityMethod}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    this.{self::ClassMixedInQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
     nullabilityMethod(null); // error
                       ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
     i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
-    let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
     i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
-    this.{self::ClassMixedInQ::nullabilitySetter} = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
                         ^" in null as{TypeError,ForNonNullableByDefault} core::int;
     super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..628d263
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect
@@ -0,0 +1,367 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//     nullabilityMethod(null); // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//     nullabilityMethod(null); // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  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 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 nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{self::ClassQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    nullabilityMethod(null); // error
+                      ^" in null){(core::int) → core::int};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?) → core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  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 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 nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{self::ClassMixedInQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    nullabilityMethod(null); // error
+                      ^" in null){(core::int) → core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  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 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 nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super extends core::Object implements in_2::Super /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i) → core::int
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
+    return 0;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int i) → core::int
+    return i;
+  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
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int value) → void {}
+}
+abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ extends core::Object implements in_2::SuperQ /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i) → core::int?
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
+    return null;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+  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
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int? value) → void {}
+}
+abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
+}
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 03c441d..9f5ab6a 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
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   static factory redirect() → self::Class
-    let dynamic #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic {}
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 8527d75..2dad0b1 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
@@ -7,7 +7,7 @@
   constructor •() → self::Class
     ;
   static factory redirect() → self::Class
-    let dynamic #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic
   ;
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 f2556e6..9f5ab6a 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
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   static factory redirect() → self::Class
-    let Never #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
index e5721c4..ebb0722 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
@@ -29,27 +29,27 @@
     ;
   static method test() → void {
     () → void f;
-    (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
-    (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}(){() → core::String};
+  ^" in f.{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
-    (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   };
   self::C::test();
   new self::C::•().{self::C::test2}(){() → void};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
index e5721c4..ebb0722 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
@@ -29,27 +29,27 @@
     ;
   static method test() → void {
     () → void f;
-    (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
-    (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}(){() → core::String};
+  ^" in f.{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
-    (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   };
   self::C::test();
   new self::C::•().{self::C::test2}(){() → void};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
index 4f9e4ba..3af3c21 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
@@ -74,27 +74,27 @@
     ;
   static method test() → void {
     () → void f;
-    (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
-    (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}(){() → core::String};
+  ^" in f.{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
-    (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   };
   iss::C::test();
   new iss::C::•().{iss::C::test2}(){() → void};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
index 4f9e4ba..3af3c21 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
@@ -74,27 +74,27 @@
     ;
   static method test() → void {
     () → void f;
-    (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
-    (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}(){() → core::String};
+  ^" in f.{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
-    (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}(){() → core::String};
+    ^" in f.{core::Object::toString}(){() → core::String};
   };
   iss::C::test();
   new iss::C::•().{iss::C::test2}(){() → void};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.expect
index 91ceff1..63d713b0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.expect
@@ -28,23 +28,23 @@
     : super core::Object::•()
     ;
   static method sTest() → () → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   static LegacyFoo sTest() {}
                    ^" in null;
   }
   method mTest() → () → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo mTest() {}
             ^" in null;
   }
   get gTest() → () → void {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo get gTest {}
                 ^" in null;
   }
 }
 static method test() → () → void {
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
 LegacyFoo test() {}
           ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.transformed.expect
index 91ceff1..63d713b0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.transformed.expect
@@ -28,23 +28,23 @@
     : super core::Object::•()
     ;
   static method sTest() → () → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   static LegacyFoo sTest() {}
                    ^" in null;
   }
   method mTest() → () → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo mTest() {}
             ^" in null;
   }
   get gTest() → () → void {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo get gTest {}
                 ^" in null;
   }
 }
 static method test() → () → void {
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
 LegacyFoo test() {}
           ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.expect
index 860b48b..e46d2e6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.expect
@@ -37,23 +37,23 @@
     : super core::Object::•()
     ;
   static method sTest() → () → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   static LegacyFoo sTest() {}
                    ^" in null;
   }
   method mTest() → () → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo mTest() {}
             ^" in null;
   }
   get gTest() → () → void {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo get gTest {}
                 ^" in null;
   }
 }
 static method test() → () → void {
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
 LegacyFoo test() {}
           ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.transformed.expect
index 860b48b..e46d2e6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.transformed.expect
@@ -37,23 +37,23 @@
     : super core::Object::•()
     ;
   static method sTest() → () → void {
-    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   static LegacyFoo sTest() {}
                    ^" in null;
   }
   method mTest() → () → void {
-    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo mTest() {}
             ^" in null;
   }
   get gTest() → () → void {
-    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
   LegacyFoo get gTest {}
                 ^" in null;
   }
 }
 static method test() → () → void {
-  return let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
 LegacyFoo test() {}
           ^" in null;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
index d1b585c..0178674 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
@@ -62,9 +62,9 @@
   core::print(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:12:9: Error: Can't use 'x' because it is declared more than once.
   print(x!);
         ^"!);
-  core::print(!(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:13:10: Error: Can't use 'x' because it is declared more than once.
+  core::print(!invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:13:10: Error: Can't use 'x' because it is declared more than once.
   print(!x);
-         ^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool));
+         ^");
 }
 static method main() → dynamic {}
 
@@ -111,19 +111,18 @@
 // ^^^^^^^^^^^^
 //
 import self as self2;
-import "dart:core" as core;
 
 static method errors(dynamic c) → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^"{dynamic}.f;
-  !(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
+     ^"{<invalid>}.f;
+  !invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   !c?..f;
-      ^"{dynamic}.f as{TypeError,ForDynamic} core::bool*);
+      ^"{<invalid>}.f;
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f!;
-     ^"{dynamic}.f!;
+     ^"{<invalid>}.f!;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
index d81d034..0178674 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
@@ -111,19 +111,18 @@
 // ^^^^^^^^^^^^
 //
 import self as self2;
-import "dart:core" as core;
 
 static method errors(dynamic c) → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^"{dynamic}.f;
-  !(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
+     ^"{<invalid>}.f;
+  !invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   !c?..f;
-      ^"{dynamic}.f as{TypeError,ForDynamic} core::bool*);
+      ^"{<invalid>}.f;
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f!;
-     ^"{dynamic}.f!;
+     ^"{<invalid>}.f!;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.expect
index 9f64aae..8e2527a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.expect
@@ -14,7 +14,7 @@
 static method f1(core::int x) → core::int?
   return x;
 static method test() → void {
-  (core::int*) → core::int* f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
+  (core::int*) → core::int* f = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
   F f = null; // Static error
         ^" in null as{TypeError,ForNonNullableByDefault} (core::int*) → core::int*;
   f = #C1;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.transformed.expect
index c2af5e9..9f4a447 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 static method f1(core::int x) → core::int?
   return x;
 static method test() → void {
-  (core::int*) → core::int* f = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
+  (core::int*) → core::int* f = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
   F f = null; // Static error
         ^" in null;
   f = #C1;
diff --git a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.expect
index e1b0839..33ff672 100644
--- a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.expect
@@ -106,22 +106,22 @@
 static field () →? core::int nullableVar = () → core::int => 3;
 static field core::double nonNullableVar = 4.0;
 static method testOptIn() → dynamic {
-  self::nullableVar = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
                 ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
-  self::nonNullableVar = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
                    ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
-  mes::legacyVar = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
               ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
-  self::nullableVar = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
                 ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
-  self::nonNullableVar = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
                    ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
-  mes::legacyVar = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
               ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
@@ -253,22 +253,22 @@
 }
 static field core::String* legacyVar = "legacy";
 static method testOptOut() → dynamic {
-  self::nullableVar = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
   nullableVar = nonNullableVar;
                 ^" in self::nonNullableVar as{TypeError} () →? core::int;
-  self::nonNullableVar = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
                    ^" in self::nullableVar as{TypeError} core::double;
-  mes::legacyVar = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
               ^" in self::nullableVar as{TypeError} core::String*;
-  self::nullableVar = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
   nullableVar = legacyVar;
                 ^" in mes::legacyVar as{TypeError} () →? core::int;
-  self::nonNullableVar = let final Never* #t11 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
                    ^" in mes::legacyVar as{TypeError} core::double;
-  mes::legacyVar = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
               ^" in self::nonNullableVar as{TypeError} core::String*;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.expect
index 52e12c5..8a877f1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.expect
@@ -125,22 +125,22 @@
 }
 static field core::String* legacyVar = "legacy";
 static method testOptOut() → dynamic {
-  mes::nullableVar = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
   nullableVar = nonNullableVar;
                 ^" in mes::nonNullableVar as{TypeError} () →? core::int;
-  mes::nonNullableVar = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
                    ^" in mes::nullableVar as{TypeError} core::double;
-  self::legacyVar = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
               ^" in mes::nullableVar as{TypeError} core::String*;
-  mes::nullableVar = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
   nullableVar = legacyVar;
                 ^" in self::legacyVar as{TypeError} () →? core::int;
-  mes::nonNullableVar = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
                    ^" in self::legacyVar as{TypeError} core::double;
-  self::legacyVar = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
               ^" in mes::nonNullableVar as{TypeError} core::String*;
 }
@@ -253,22 +253,22 @@
 static field () →? core::int nullableVar = () → core::int => 3;
 static field core::double nonNullableVar = 4.0;
 static method testOptIn() → dynamic {
-  mes::nullableVar = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
                 ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
-  mes::nonNullableVar = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
                    ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
-  self::legacyVar = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
               ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
-  mes::nullableVar = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
                 ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
-  mes::nonNullableVar = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
                    ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
-  self::legacyVar = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
               ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
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 c139fe9..4e5f43d 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 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:762:8 -> SymbolConstant(#clear)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:762:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:762:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:762:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <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 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <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 e1d738d..34cee4f 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
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → opt::Class1<opt::Class1::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class1::_ in let opt::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → opt::Class1<opt::Class1::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class1::_ in let opt::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → opt::Class1<opt::Class1::fact::T%>
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
@@ -51,9 +51,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → opt::Class2<opt::Class2::redirect::T>
-    let dynamic #redirecting_factory = opt::Class2::_ in let opt::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → opt::Class2<opt::Class2::constRedirect::T>
-    let dynamic #redirecting_factory = opt::Class2::_ in let opt::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → opt::Class2<opt::Class2::fact::T>
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
@@ -63,9 +63,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → opt::Class3<opt::Class3::redirect::T>
-    let dynamic #redirecting_factory = opt::Class3::_ in let opt::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → opt::Class3<opt::Class3::constRedirect::T>
-    let dynamic #redirecting_factory = opt::Class3::_ in let opt::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → opt::Class3<opt::Class3::fact::T>
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
@@ -75,9 +75,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class4::_ in let opt::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class4::_ in let opt::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::fact::T%>
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
@@ -87,9 +87,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → opt::Class5<opt::Class5::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class5::_ in let opt::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → opt::Class5<opt::Class5::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class5::_ in let opt::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → opt::Class5<opt::Class5::fact::T%>
     return new opt::Class5::_<opt::Class5::fact::T%>();
 }
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 f70672f..958ab4c 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
@@ -16,9 +16,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → self2::Class1<self2::Class1::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class1::_ in let self2::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class1::_<self2::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → self2::Class1<self2::Class1::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class1::_ in let self2::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class1::_<self2::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → self2::Class1<self2::Class1::fact::T%>
     ;
 }
@@ -28,9 +28,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → self2::Class2<self2::Class2::redirect::T>
-    let dynamic #redirecting_factory = self2::Class2::_ in let self2::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class2::_<self2::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → self2::Class2<self2::Class2::constRedirect::T>
-    let dynamic #redirecting_factory = self2::Class2::_ in let self2::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class2::_<self2::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → self2::Class2<self2::Class2::fact::T>
     ;
 }
@@ -40,9 +40,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → self2::Class3<self2::Class3::redirect::T>
-    let dynamic #redirecting_factory = self2::Class3::_ in let self2::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class3::_<self2::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → self2::Class3<self2::Class3::constRedirect::T>
-    let dynamic #redirecting_factory = self2::Class3::_ in let self2::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class3::_<self2::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → self2::Class3<self2::Class3::fact::T>
     ;
 }
@@ -52,9 +52,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::fact::T%>
     ;
 }
@@ -64,9 +64,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → self2::Class5<self2::Class5::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class5::_ in let self2::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class5::_<self2::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → self2::Class5<self2::Class5::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class5::_ in let self2::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class5::_<self2::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → self2::Class5<self2::Class5::fact::T%>
     ;
 }
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 e67696e..34cee4f 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
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → opt::Class1<opt::Class1::redirect::T%>
-    let Never #redirecting_factory = opt::Class1::_ in let opt::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → opt::Class1<opt::Class1::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class1::_ in let opt::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → opt::Class1<opt::Class1::fact::T%>
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
@@ -51,9 +51,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → opt::Class2<opt::Class2::redirect::T>
-    let Never #redirecting_factory = opt::Class2::_ in let opt::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → opt::Class2<opt::Class2::constRedirect::T>
-    let Never #redirecting_factory = opt::Class2::_ in let opt::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → opt::Class2<opt::Class2::fact::T>
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
@@ -63,9 +63,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → opt::Class3<opt::Class3::redirect::T>
-    let Never #redirecting_factory = opt::Class3::_ in let opt::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → opt::Class3<opt::Class3::constRedirect::T>
-    let Never #redirecting_factory = opt::Class3::_ in let opt::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → opt::Class3<opt::Class3::fact::T>
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
@@ -75,9 +75,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::redirect::T%>
-    let Never #redirecting_factory = opt::Class4::_ in let opt::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class4::_ in let opt::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::fact::T%>
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
@@ -87,9 +87,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → opt::Class5<opt::Class5::redirect::T%>
-    let Never #redirecting_factory = opt::Class5::_ in let opt::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → opt::Class5<opt::Class5::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class5::_ in let opt::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → opt::Class5<opt::Class5::fact::T%>
     return new opt::Class5::_<opt::Class5::fact::T%>();
 }
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 0c9e63d..2cb6f54 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
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let dynamic #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let dynamic #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
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 06c295f..ee92a0d 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
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let dynamic #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let dynamic #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
@@ -82,4 +82,4 @@
 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: ListLiteral @ org-dartlang-testcase:///opt_in_lib.dart:36:24 -> ListConstant(const <P<Object*>*>[])
-Extra constant evaluation: evaluated: 17, effectively constant: 3
+Extra constant evaluation: evaluated: 16, effectively constant: 3
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 7b1f0d6..2cb6f54 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
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let Never #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let Never #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
index 6bba169..6e0d3ce 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
@@ -172,7 +172,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^"{dynamic}.f;
+     ^"{<invalid>}.f;
   let final dynamic #t3 = c in #t3 == null ?{dynamic} null : #t3{dynamic}.[](0);
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
index 59b31ed..37d3838 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
@@ -172,7 +172,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^"{dynamic}.f;
+     ^"{<invalid>}.f;
   let final dynamic #t3 = c in #t3 == null ?{dynamic} null : #t3{dynamic}.[](0);
 }
 
diff --git a/pkg/front_end/testcases/none/equals.dart.strong.expect b/pkg/front_end/testcases/none/equals.dart.strong.expect
index daaf5db..4aec504 100644
--- a/pkg/front_end/testcases/none/equals.dart.strong.expect
+++ b/pkg/front_end/testcases/none/equals.dart.strong.expect
@@ -194,18 +194,18 @@
   !(nullableTypeVariable2 == null);
   nullableTypeVariable2 == null;
   !(nullableTypeVariable2 == null);
-  (let final Never #t1 = invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == null;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t2 = invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != null;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
   null == nonNullableClass.method();
-                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t4 = invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
   null != nonNullableClass.method();
-                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
   core::print("EqualsNull (constant null)");
   (#C1) == null;
   !((#C1) == null);
@@ -217,28 +217,28 @@
   !(nullableObject == null);
   nullableObject == null;
   !(nullableObject == null);
-  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass == nullValue;
-                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass != nullValue;
-                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   nonNullableClass == null;
   !(nonNullableClass == null);
-  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass == nullValue;
-                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass != nullValue;
-                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   nullableClass == null;
   !(nullableClass == null);
   dyn == null;
@@ -289,18 +289,18 @@
   !(nullableTypeVariable2 == null);
   nullableTypeVariable2 == null;
   !(nullableTypeVariable2 == null);
-  (let final Never #t9 = invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == nullValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t10 = invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != nullValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
-  (let final Never #t11 = invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
   nullValue == nonNullableClass.method();
-                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t12 = invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
   nullValue != nonNullableClass.method();
-                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
   core::print("EqualsCall");
   nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
   !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
@@ -322,32 +322,32 @@
   !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
   nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
   !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
-  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass == o;
-                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass != o;
-                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
   !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
   nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
   !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
   nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass;
   !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass);
-  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass == o;
-                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass != o;
-                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   o =={core::Object::==}{(core::Object) → core::bool} nullableClass;
   !(o =={core::Object::==}{(core::Object) → core::bool} nullableClass);
   dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
@@ -446,30 +446,30 @@
   !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
   o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
   !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
-  (let final Never #t17 = invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == nullTypedValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
-  !((let final Never #t18 = invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != nullTypedValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
-  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
   nullTypedValue == nonNullableClass.method();
-                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
-  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
   nullTypedValue != nonNullableClass.method();
-                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}));
-  (let final Never #t21 = invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == o;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} o;
-  !((let final Never #t22 = invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != o;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} o);
-  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
   o == nonNullableClass.method();
-                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
-  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
   o != nonNullableClass.method();
-                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}));
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
 }
 static method nullEqualsIndexGet(core::Map<core::int, core::String> map) → dynamic {
   map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
diff --git a/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect b/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect
new file mode 100644
index 0000000..6c3c0a7
--- /dev/null
+++ b/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect
@@ -0,0 +1,489 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null == nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null != nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue == nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue != nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue == nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue != nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o == nonNullableClass.method();
+//                               ^
+//
+// pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o != nonNullableClass.method();
+//                               ^
+//
+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::•()
+    ;
+  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+    return true;
+  method method(dynamic o) → dynamic {}
+}
+static const field core::Object? nullValue = #C1;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int>(core::Object o, core::Object nonNullableObject, core::Object? nullableObject, self::Class<core::String> nonNullableClass, self::Class<core::String>? nullableClass, dynamic dyn, Never never, Never? nullableNever, Null nullTypedValue, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("EqualsNull (literal null)");
+  null == null;
+  !(null == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  never == null;
+  !(never == null);
+  never == null;
+  !(never == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+  null == nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+  null != nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsNull (constant null)");
+  (#C1) == null;
+  !((#C1) == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == nullValue;
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != nullValue;
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == nullValue;
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != nullValue;
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nullableClass == null;
+  !(nullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  never == null;
+  !(never == null);
+  never == null;
+  !(never == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue == nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue != nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsCall");
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn);
+  dyn =={core::Object::==}{(core::Object) → core::bool} o;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(o =={core::Object::==}{(core::Object) → core::bool} dyn);
+  never =={core::Object::==}{(dynamic) → Never} nullTypedValue;
+  !(never =={core::Object::==}{(dynamic) → Never} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} never;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} never);
+  never =={core::Object::==}{(dynamic) → Never} o;
+  !(never =={core::Object::==}{(dynamic) → Never} o);
+  o =={core::Object::==}{(core::Object) → core::bool} never;
+  !(o =={core::Object::==}{(core::Object) → core::bool} never);
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue == nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue != nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+  o == nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+  o != nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+}
+static method nullEqualsIndexGet(core::Map<core::int, core::String> map) → dynamic {
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: EqualsNull @ org-dartlang-testcase:///equals.dart:32:8 -> BoolConstant(true)
+Evaluated: Not @ org-dartlang-testcase:///equals.dart:33:8 -> BoolConstant(false)
+Evaluated: EqualsNull @ org-dartlang-testcase:///equals.dart:121:13 -> BoolConstant(true)
+Evaluated: Not @ org-dartlang-testcase:///equals.dart:122:13 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 809, effectively constant: 4
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.expect b/pkg/front_end/testcases/none/equals.dart.weak.expect
index 5b4129e..fa1f1e0 100644
--- a/pkg/front_end/testcases/none/equals.dart.weak.expect
+++ b/pkg/front_end/testcases/none/equals.dart.weak.expect
@@ -195,18 +195,18 @@
   !(nullableTypeVariable2 == null);
   nullableTypeVariable2 == null;
   !(nullableTypeVariable2 == null);
-  (let final Never #t5 = invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == null;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t6 = invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != null;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
-  (let final Never #t7 = invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
   null == nonNullableClass.method();
-                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t8 = invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
   null != nonNullableClass.method();
-                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
   core::print("EqualsNull (constant null)");
   (#C1) == null;
   !((#C1) == null);
@@ -218,38 +218,38 @@
   !(nullableObject == null);
   nullableObject == null;
   !(nullableObject == null);
-  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass == nullValue;
-                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass != nullValue;
-                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   nonNullableClass == null;
   !(nonNullableClass == null);
-  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass == nullValue;
-                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass != nullValue;
-                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   nullableClass == null;
   !(nullableClass == null);
   dyn == null;
   !(dyn == null);
   dyn == null;
   !(dyn == null);
-  let final Never #t13 = (let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t15 = !((let final Never #t16 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
-  !((let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t7 = !((let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t9 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
   nullableNever == null;
   !(nullableNever == null);
   nullableNever == null;
@@ -290,18 +290,18 @@
   !(nullableTypeVariable2 == null);
   nullableTypeVariable2 == null;
   !(nullableTypeVariable2 == null);
-  (let final Never #t19 = invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == nullValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t20 = invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != nullValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
-  (let final Never #t21 = invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
   nullValue == nonNullableClass.method();
-                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null;
-  !((let final Never #t22 = invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
   nullValue != nonNullableClass.method();
-                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) == null);
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
   core::print("EqualsCall");
   nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
   !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
@@ -323,32 +323,32 @@
   !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
   nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
   !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
-  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass == o;
-                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nonNullableClass != o;
-                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
   !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
   nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
   !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
   nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass;
   !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass);
-  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass == o;
-                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
-  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
  - 'Object' is from 'dart:core'.
  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
   nullableClass != o;
-                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?));
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
   o =={core::Object::==}{(core::Object) → core::bool} nullableClass;
   !(o =={core::Object::==}{(core::Object) → core::bool} nullableClass);
   dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
@@ -359,14 +359,14 @@
   !(dyn =={core::Object::==}{(core::Object) → core::bool} o);
   o =={core::Object::==}{(core::Object) → core::bool} dyn;
   !(o =={core::Object::==}{(core::Object) → core::bool} dyn);
-  let final Never #t27 = (let final Never #t28 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t29 = !((let final Never #t30 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t31 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
-  let final Never #t33 = (let final Never #t34 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t35 = !((let final Never #t36 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t38 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = !((let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t16 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  let final Never #t17 = (let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t19 = !((let final Never #t20 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t22 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
   nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
   !(nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
   nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever;
@@ -447,30 +447,30 @@
   !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
   o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
   !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
-  (let final Never #t39 = invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == nullTypedValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
-  !((let final Never #t40 = invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != nullTypedValue;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
-  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
   nullTypedValue == nonNullableClass.method();
-                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
-  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
   nullTypedValue != nonNullableClass.method();
-                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}));
-  (let final Never #t43 = invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() == o;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} o;
-  !((let final Never #t44 = invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass.method() != o;
-                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}) =={core::Object::==}{(core::Object) → core::bool} o);
-  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
   o == nonNullableClass.method();
-                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
-  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
   o != nonNullableClass.method();
-                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type}));
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
 }
 static method nullEqualsIndexGet(core::Map<core::int, core::String> map) → dynamic {
   map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect b/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect
new file mode 100644
index 0000000..c28a57aa
--- /dev/null
+++ b/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect
@@ -0,0 +1,490 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null == nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null != nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue == nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue != nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue == nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue != nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o == nonNullableClass.method();
+//                               ^
+//
+// pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o != nonNullableClass.method();
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+    return true;
+  method method(dynamic o) → dynamic {}
+}
+static const field core::Object? nullValue = #C1;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int>(core::Object o, core::Object nonNullableObject, core::Object? nullableObject, self::Class<core::String> nonNullableClass, self::Class<core::String>? nullableClass, dynamic dyn, Never never, Never? nullableNever, Null nullTypedValue, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("EqualsNull (literal null)");
+  null == null;
+  !(null == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  (let final Never #t1 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  (let final Never #t3 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+  null == nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+  null != nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsNull (constant null)");
+  (#C1) == null;
+  !((#C1) == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == nullValue;
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != nullValue;
+                      ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == nullValue;
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != nullValue;
+                   ^" in (#C1) as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nullableClass == null;
+  !(nullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t7 = !((let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t9 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue == nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue != nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsCall");
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn);
+  dyn =={core::Object::==}{(core::Object) → core::bool} o;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(o =={core::Object::==}{(core::Object) → core::bool} dyn);
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = !((let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t16 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  let final Never #t17 = (let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t19 = !((let final Never #t20 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t22 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue == nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue != nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+  o == nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+  o != nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+}
+static method nullEqualsIndexGet(core::Map<core::int, core::String> map) → dynamic {
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: EqualsNull @ org-dartlang-testcase:///equals.dart:32:8 -> BoolConstant(true)
+Evaluated: Not @ org-dartlang-testcase:///equals.dart:33:8 -> BoolConstant(false)
+Evaluated: EqualsNull @ org-dartlang-testcase:///equals.dart:121:13 -> BoolConstant(true)
+Evaluated: Not @ org-dartlang-testcase:///equals.dart:122:13 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 875, effectively constant: 4
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.strong.expect b/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
index 32d8252..be70e1c 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
@@ -144,43 +144,43 @@
   nonNullableClass2.{self::Class2::nonNullableFunctionGetter}{core::Function}();
   nonNullableClass2.{self::Class2::nonNullableFunctionTypedField}{() → void}(){() → void};
   nonNullableClass2.{self::Class2::nonNullableFunctionTypedGetter}{() → void}(){() → void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionField();
                                          ^" in nonNullableClass2.{self::Class2::nullableFunctionField}{core::Function?}{<nullable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionGetter();
                                           ^" in nonNullableClass2.{self::Class2::nullableFunctionGetter}{core::Function?}{<nullable>}.();
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionTypedField();
                                               ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedField}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionTypedGetter();
                                                ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedGetter}{() →? void}{<nullable>}.(){() →? void};
-  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in #t6.{self::Class2::nonNullableFunctionField}{core::Function}(#t7);
-  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in #t8.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t9);
-  let final self::Class2<core::String> #t10 = nonNullableClass2 in let final core::int #t11 = 0 in let final Never #t12 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+  let final self::Class2<core::String> #t2 = nonNullableClass2 in let final core::int #t3 = 0 in #t2.{self::Class2::nonNullableFunctionField}{core::Function}(#t3);
+  let final self::Class2<core::String> #t4 = nonNullableClass2 in let final core::int #t5 = 0 in #t4.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t5);
+  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   nonNullableClass2.nonNullableFunctionTypedField(0);
-                                                 ^" in #t10.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t11);
-  let final self::Class2<core::String> #t13 = nonNullableClass2 in let final core::int #t14 = 0 in let final Never #t15 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+                                                 ^" in #t6.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t7);
+  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   nonNullableClass2.nonNullableFunctionTypedGetter(0);
-                                                  ^" in #t13.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t14);
+                                                  ^" in #t8.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t9);
   core::print("InstanceInvocation (Nullable)");
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
 Try calling using ?. instead.
   nullableClass1.method(0);
                  ^^^^^^" in nullableClass1.{self::Class1::method}{<nullable>}.(0){(core::int) → core::double};
   core::print("DynamicInvocation");
   dyn{dynamic}.method(0);
-  let final dynamic #t17 = dyn in #t17 == null ?{dynamic} null : #t17{dynamic}.method(0);
+  let final dynamic #t10 = dyn in #t10 == null ?{dynamic} null : #t10{dynamic}.method(0);
   dyn{dynamic}.toString(0);
   const core::int call_dyn = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
   const int call_dyn = dyn.toString(0);
@@ -205,58 +205,58 @@
  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
   nonNullableClass1.unresolved();
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved();
   core::print("DynamicInvocation (Inapplicable)");
-  let final Never #t18 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method();
                           ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t19 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableFunctionType();
                          ^" in nonNullableFunctionType{<inapplicable>}.();
   core::print("InstanceInvocation (generic)");
   nonNullableClass2.{self::Class2::method}(0){(core::int) → core::String};
-  let final self::Class2<core::String>? #t20 = nullableClass2 in #t20 == null ?{core::String?} null : #t20{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
+  let final self::Class2<core::String>? #t11 = nullableClass2 in #t11 == null ?{core::String?} null : #t11{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
   nonNullableClass2.{self::Class2::call}(){() → core::String};
   nonNullableClass2.{self::Class2::call}(){() → core::String};
   core::print("FunctionInvocation");
   nonNullableFunction(0);
   nonNullableFunction(0);
-  let final core::Function? #t21 = nullableFunction in #t21 == null ?{dynamic} null : #t21{core::Function}(0);
+  let final core::Function? #t12 = nullableFunction in #t12 == null ?{dynamic} null : #t12{core::Function}(0);
   nonNullableFunctionType(0){(core::int) → core::int};
   nonNullableFunctionType(0){(core::int) → core::int};
-  let final (core::int) →? core::int #t22 = nullableFunctionType in #t22 == null ?{core::int?} null : #t22{(core::int) → core::int}(0){(core::int) → core::int};
+  let final (core::int) →? core::int #t13 = nullableFunctionType in #t13 == null ?{core::int?} null : #t13{(core::int) → core::int}(0){(core::int) → core::int};
   genericFunctionType<core::int>(0){(core::int) → core::int};
   genericFunctionType<core::num>(0){(core::num) → core::num};
   core::num i = genericFunctionType<core::num>(0){(core::num) → core::num};
   nonNullableTypeVariable1(0);
   nonNullableTypeVariable1(0);
-  let final self::test::T1? #t23 = nullableTypeVariable1 in #t23 == null ?{dynamic} null : #t23{self::test::T1}(0);
+  let final self::test::T1? #t14 = nullableTypeVariable1 in #t14 == null ?{dynamic} null : #t14{self::test::T1}(0);
   nonNullableTypeVariable2(0){(core::int) → core::int};
   nonNullableTypeVariable2(0){(core::int) → core::int};
-  let final self::test::T2? #t24 = nullableTypeVariable2 in #t24 == null ?{core::int?} null : #t24{self::test::T2}(0){(core::int) → core::int};
+  let final self::test::T2? #t15 = nullableTypeVariable2 in #t15 == null ?{core::int?} null : #t15{self::test::T2}(0){(core::int) → core::int};
   core::print("FunctionInvocation (Nullable)");
-  let final Never #t25 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nullableFunction(0);
                   ^" in nullableFunction{<nullable>}.(0);
-  let final Never #t26 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   nullableFunction.call(0);
                    ^^^^" in nullableFunction{<nullable>}.(0);
-  let final Never #t27 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nullableFunctionType(0);
                       ^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
-  let final Never #t28 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
 Try calling using ?. instead.
   nullableFunctionType.call(0);
                        ^^^^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t29 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().method(0);
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){dynamic}.method(0);
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{dynamic}.method(0);
   core::print("LocalFunctionInvocation");
   function localFunction() → core::int
     return 42;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..4493594
--- /dev/null
+++ b/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect
@@ -0,0 +1,301 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:24: Error: Not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                        ^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                            ^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+//   const int call_localFunction = localFunction();
+//                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+//   const int call_f = f();
+//                      ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+//   const bool equals = i == j;
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionField();
+//                                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedField();
+//                                               ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedField(0);
+//                                                  ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedGetter(0);
+//                                                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try calling using ?. instead.
+//   nullableClass1.method(0);
+//                  ^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+//   nonNullableClass1.unresolved();
+//                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method();
+//                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableFunctionType();
+//                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nullableFunction(0);
+//                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   nullableFunction.call(0);
+//                    ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nullableFunctionType(0);
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+// Try calling using ?. instead.
+//   nullableFunctionType.call(0);
+//                        ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().method(0);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method method(core::int o) → core::double
+    return 0.5;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  generic-covariant-impl field self::Class2::T% field;
+  field core::Function nonNullableFunctionField;
+  field core::Function? nullableFunctionField = null;
+  field () → void nonNullableFunctionTypedField;
+  field () →? void nullableFunctionTypedField = null;
+  constructor •(self::Class2::T% field, core::Function nonNullableFunctionField, () → void nonNullableFunctionTypedField) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, self::Class2::nonNullableFunctionField = nonNullableFunctionField, self::Class2::nonNullableFunctionTypedField = nonNullableFunctionTypedField, super core::Object::•()
+    ;
+  method call() → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  method method(core::int o) → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  get nonNullableFunctionGetter() → core::Function
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionGetter() → core::Function?
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nonNullableFunctionTypedGetter() → () → void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionTypedGetter() → () →? void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+}
+static const field core::int i = #C1;
+static const field core::int j = #C2;
+static const field core::int k = #C3;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int, T3 extends core::Object? = dynamic>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, <T extends core::Object? = dynamic>(T%) → T% genericFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2, self::test::T3% undeterminedTypeVariable) → dynamic {
+  core::print("InstanceInvocation");
+  nonNullableClass1.{self::Class1::method}(0){(core::int) → core::double};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::double?} null : #t1{self::Class1}.{self::Class1::method}(0){(core::int) → core::double};
+  core::print("InstanceGet calls");
+  nonNullableClass2.{self::Class2::nonNullableFunctionField}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionGetter}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedField}{() → void}(){() → void};
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedGetter}{() → void}(){() → void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionField();
+                                         ^" in nonNullableClass2.{self::Class2::nullableFunctionField}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionGetter();
+                                          ^" in nonNullableClass2.{self::Class2::nullableFunctionGetter}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedField();
+                                              ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedField}{() →? void}{<nullable>}.(){() →? void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedGetter();
+                                               ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedGetter}{() →? void}{<nullable>}.(){() →? void};
+  let final self::Class2<core::String> #t2 = nonNullableClass2 in let final core::int #t3 = 0 in #t2.{self::Class2::nonNullableFunctionField}{core::Function}(#t3);
+  let final self::Class2<core::String> #t4 = nonNullableClass2 in let final core::int #t5 = 0 in #t4.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t5);
+  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedField(0);
+                                                 ^" in #t6.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t7);
+  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedGetter(0);
+                                                  ^" in #t8.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t9);
+  core::print("InstanceInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try calling using ?. instead.
+  nullableClass1.method(0);
+                 ^^^^^^" in nullableClass1.{self::Class1::method}{<nullable>}.(0){(core::int) → core::double};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.method(0);
+  let final dynamic #t10 = dyn in #t10 == null ?{dynamic} null : #t10{dynamic}.method(0);
+  dyn{dynamic}.toString(0);
+  const core::int call_dyn = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^");
+  core::print("InstanceInvocation (Object)");
+  dyn.{core::Object::toString}(){() → core::String};
+  nullableClass1.{core::Object::toString}(){() → core::String};
+  nullableClass2.{core::Object::toString}(){() → core::String};
+  nullableFunction.{core::Object::toString}(){() → core::String};
+  nullableFunctionType.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable1.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable2.{core::Object::toString}(){() → core::String};
+  undeterminedTypeVariable.{core::Object::toString}(){() → core::String};
+  core::print("DynamicInvocation (Never)");
+  never{Never}.method(0);
+  never{Never}.toString();
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+  nonNullableClass1.unresolved();
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved();
+  core::print("DynamicInvocation (Inapplicable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method();
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableFunctionType();
+                         ^" in nonNullableFunctionType{<inapplicable>}.();
+  core::print("InstanceInvocation (generic)");
+  nonNullableClass2.{self::Class2::method}(0){(core::int) → core::String};
+  let final self::Class2<core::String>? #t11 = nullableClass2 in #t11 == null ?{core::String?} null : #t11{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  core::print("FunctionInvocation");
+  nonNullableFunction(0);
+  nonNullableFunction(0);
+  let final core::Function? #t12 = nullableFunction in #t12 == null ?{dynamic} null : #t12{core::Function}(0);
+  nonNullableFunctionType(0){(core::int) → core::int};
+  nonNullableFunctionType(0){(core::int) → core::int};
+  let final (core::int) →? core::int #t13 = nullableFunctionType in #t13 == null ?{core::int?} null : #t13{(core::int) → core::int}(0){(core::int) → core::int};
+  genericFunctionType<core::int>(0){(core::int) → core::int};
+  genericFunctionType<core::num>(0){(core::num) → core::num};
+  core::num i = genericFunctionType<core::num>(0){(core::num) → core::num};
+  nonNullableTypeVariable1(0);
+  nonNullableTypeVariable1(0);
+  let final self::test::T1? #t14 = nullableTypeVariable1 in #t14 == null ?{dynamic} null : #t14{self::test::T1}(0);
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  let final self::test::T2? #t15 = nullableTypeVariable2 in #t15 == null ?{core::int?} null : #t15{self::test::T2}(0){(core::int) → core::int};
+  core::print("FunctionInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nullableFunction(0);
+                  ^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  nullableFunction.call(0);
+                   ^^^^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nullableFunctionType(0);
+                      ^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+Try calling using ?. instead.
+  nullableFunctionType.call(0);
+                       ^^^^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().method(0);
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{dynamic}.method(0);
+  core::print("LocalFunctionInvocation");
+  function localFunction() → core::int
+    return 42;
+  function genericLocalFunction<T extends core::Object? = dynamic>(T% t) → T%
+    return t;
+  localFunction(){() → core::int};
+  genericLocalFunction<core::int>(0){(core::int) → core::int};
+  genericLocalFunction<core::num>(0){(core::num) → core::num};
+  const core::int call_localFunction = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^");
+  () → core::int f = () → core::int => 42;
+  const core::int call_f = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^");
+  core::print(#C4);
+  const core::bool equals = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 4
+  #C2 = 24
+  #C3 = 96
+  #C4 = false
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///method_invocation.dart:72:46 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_invocation.dart:73:47 -> IntConstant(0)
+Extra constant evaluation: evaluated: 174, effectively constant: 2
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
index 0f57fe6..faa00f4 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
@@ -145,43 +145,43 @@
   nonNullableClass2.{self::Class2::nonNullableFunctionGetter}{core::Function}();
   nonNullableClass2.{self::Class2::nonNullableFunctionTypedField}{() → void}(){() → void};
   nonNullableClass2.{self::Class2::nonNullableFunctionTypedGetter}{() → void}(){() → void};
-  let final Never #t2 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionField();
                                          ^" in nonNullableClass2.{self::Class2::nullableFunctionField}{core::Function?}{<nullable>}.();
-  let final Never #t3 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionGetter();
                                           ^" in nonNullableClass2.{self::Class2::nullableFunctionGetter}{core::Function?}{<nullable>}.();
-  let final Never #t4 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionTypedField();
                                               ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedField}{() →? void}{<nullable>}.(){() →? void};
-  let final Never #t5 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nonNullableClass2.nullableFunctionTypedGetter();
                                                ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedGetter}{() →? void}{<nullable>}.(){() →? void};
-  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in #t6.{self::Class2::nonNullableFunctionField}{core::Function}(#t7);
-  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in #t8.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t9);
-  let final self::Class2<core::String> #t10 = nonNullableClass2 in let final core::int #t11 = 0 in let final Never #t12 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+  let final self::Class2<core::String> #t2 = nonNullableClass2 in let final core::int #t3 = 0 in #t2.{self::Class2::nonNullableFunctionField}{core::Function}(#t3);
+  let final self::Class2<core::String> #t4 = nonNullableClass2 in let final core::int #t5 = 0 in #t4.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t5);
+  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   nonNullableClass2.nonNullableFunctionTypedField(0);
-                                                 ^" in #t10.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t11);
-  let final self::Class2<core::String> #t13 = nonNullableClass2 in let final core::int #t14 = 0 in let final Never #t15 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+                                                 ^" in #t6.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t7);
+  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   nonNullableClass2.nonNullableFunctionTypedGetter(0);
-                                                  ^" in #t13.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t14);
+                                                  ^" in #t8.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t9);
   core::print("InstanceInvocation (Nullable)");
-  let final Never #t16 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
 Try calling using ?. instead.
   nullableClass1.method(0);
                  ^^^^^^" in nullableClass1.{self::Class1::method}{<nullable>}.(0){(core::int) → core::double};
   core::print("DynamicInvocation");
   dyn{dynamic}.method(0);
-  let final dynamic #t17 = dyn in #t17 == null ?{dynamic} null : #t17{dynamic}.method(0);
+  let final dynamic #t10 = dyn in #t10 == null ?{dynamic} null : #t10{dynamic}.method(0);
   dyn{dynamic}.toString(0);
   const core::int call_dyn = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
   const int call_dyn = dyn.toString(0);
@@ -199,65 +199,65 @@
   nullableTypeVariable2.{core::Object::toString}(){() → core::String};
   undeterminedTypeVariable.{core::Object::toString}(){() → core::String};
   core::print("DynamicInvocation (Never)");
-  let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.method(0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.method(0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = (let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::print("DynamicInvocation (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
   nonNullableClass1.unresolved();
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved();
   core::print("DynamicInvocation (Inapplicable)");
-  let final Never #t22 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method();
                           ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type};
-  let final Never #t23 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableFunctionType();
                          ^" in nonNullableFunctionType{<inapplicable>}.();
   core::print("InstanceInvocation (generic)");
   nonNullableClass2.{self::Class2::method}(0){(core::int) → core::String};
-  let final self::Class2<core::String>? #t24 = nullableClass2 in #t24 == null ?{core::String?} null : #t24{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
+  let final self::Class2<core::String>? #t15 = nullableClass2 in #t15 == null ?{core::String?} null : #t15{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
   nonNullableClass2.{self::Class2::call}(){() → core::String};
   nonNullableClass2.{self::Class2::call}(){() → core::String};
   core::print("FunctionInvocation");
   nonNullableFunction(0);
   nonNullableFunction(0);
-  let final core::Function? #t25 = nullableFunction in #t25 == null ?{dynamic} null : #t25{core::Function}(0);
+  let final core::Function? #t16 = nullableFunction in #t16 == null ?{dynamic} null : #t16{core::Function}(0);
   nonNullableFunctionType(0){(core::int) → core::int};
   nonNullableFunctionType(0){(core::int) → core::int};
-  let final (core::int) →? core::int #t26 = nullableFunctionType in #t26 == null ?{core::int?} null : #t26{(core::int) → core::int}(0){(core::int) → core::int};
+  let final (core::int) →? core::int #t17 = nullableFunctionType in #t17 == null ?{core::int?} null : #t17{(core::int) → core::int}(0){(core::int) → core::int};
   genericFunctionType<core::int>(0){(core::int) → core::int};
   genericFunctionType<core::num>(0){(core::num) → core::num};
   core::num i = genericFunctionType<core::num>(0){(core::num) → core::num};
   nonNullableTypeVariable1(0);
   nonNullableTypeVariable1(0);
-  let final self::test::T1? #t27 = nullableTypeVariable1 in #t27 == null ?{dynamic} null : #t27{self::test::T1}(0);
+  let final self::test::T1? #t18 = nullableTypeVariable1 in #t18 == null ?{dynamic} null : #t18{self::test::T1}(0);
   nonNullableTypeVariable2(0){(core::int) → core::int};
   nonNullableTypeVariable2(0){(core::int) → core::int};
-  let final self::test::T2? #t28 = nullableTypeVariable2 in #t28 == null ?{core::int?} null : #t28{self::test::T2}(0){(core::int) → core::int};
+  let final self::test::T2? #t19 = nullableTypeVariable2 in #t19 == null ?{core::int?} null : #t19{self::test::T2}(0){(core::int) → core::int};
   core::print("FunctionInvocation (Nullable)");
-  let final Never #t29 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   nullableFunction(0);
                   ^" in nullableFunction{<nullable>}.(0);
-  let final Never #t30 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   nullableFunction.call(0);
                    ^^^^" in nullableFunction{<nullable>}.(0);
-  let final Never #t31 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
 Try calling using ?.call instead.
   nullableFunctionType(0);
                       ^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
-  let final Never #t32 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
 Try calling using ?. instead.
   nullableFunctionType.call(0);
                        ^^^^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t33 = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().method(0);
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){dynamic}.method(0);
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{dynamic}.method(0);
   core::print("LocalFunctionInvocation");
   function localFunction() → core::int
     return 42;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..7908441
--- /dev/null
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect
@@ -0,0 +1,302 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:24: Error: Not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                        ^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                            ^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+//   const int call_localFunction = localFunction();
+//                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+//   const int call_f = f();
+//                      ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+//   const bool equals = i == j;
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionField();
+//                                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedField();
+//                                               ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedField(0);
+//                                                  ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedGetter(0);
+//                                                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try calling using ?. instead.
+//   nullableClass1.method(0);
+//                  ^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+//   nonNullableClass1.unresolved();
+//                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method();
+//                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableFunctionType();
+//                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nullableFunction(0);
+//                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   nullableFunction.call(0);
+//                    ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nullableFunctionType(0);
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+// Try calling using ?. instead.
+//   nullableFunctionType.call(0);
+//                        ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().method(0);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method method(core::int o) → core::double
+    return 0.5;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  generic-covariant-impl field self::Class2::T% field;
+  field core::Function nonNullableFunctionField;
+  field core::Function? nullableFunctionField = null;
+  field () → void nonNullableFunctionTypedField;
+  field () →? void nullableFunctionTypedField = null;
+  constructor •(self::Class2::T% field, core::Function nonNullableFunctionField, () → void nonNullableFunctionTypedField) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, self::Class2::nonNullableFunctionField = nonNullableFunctionField, self::Class2::nonNullableFunctionTypedField = nonNullableFunctionTypedField, super core::Object::•()
+    ;
+  method call() → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  method method(core::int o) → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  get nonNullableFunctionGetter() → core::Function
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionGetter() → core::Function?
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nonNullableFunctionTypedGetter() → () → void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionTypedGetter() → () →? void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+}
+static const field core::int i = #C1;
+static const field core::int j = #C2;
+static const field core::int k = #C3;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int, T3 extends core::Object? = dynamic>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, <T extends core::Object? = dynamic>(T%) → T% genericFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2, self::test::T3% undeterminedTypeVariable) → dynamic {
+  core::print("InstanceInvocation");
+  nonNullableClass1.{self::Class1::method}(0){(core::int) → core::double};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::double?} null : #t1{self::Class1}.{self::Class1::method}(0){(core::int) → core::double};
+  core::print("InstanceGet calls");
+  nonNullableClass2.{self::Class2::nonNullableFunctionField}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionGetter}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedField}{() → void}(){() → void};
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedGetter}{() → void}(){() → void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionField();
+                                         ^" in nonNullableClass2.{self::Class2::nullableFunctionField}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionGetter();
+                                          ^" in nonNullableClass2.{self::Class2::nullableFunctionGetter}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedField();
+                                              ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedField}{() →? void}{<nullable>}.(){() →? void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedGetter();
+                                               ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedGetter}{() →? void}{<nullable>}.(){() →? void};
+  let final self::Class2<core::String> #t2 = nonNullableClass2 in let final core::int #t3 = 0 in #t2.{self::Class2::nonNullableFunctionField}{core::Function}(#t3);
+  let final self::Class2<core::String> #t4 = nonNullableClass2 in let final core::int #t5 = 0 in #t4.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t5);
+  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedField(0);
+                                                 ^" in #t6.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t7);
+  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedGetter(0);
+                                                  ^" in #t8.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t9);
+  core::print("InstanceInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try calling using ?. instead.
+  nullableClass1.method(0);
+                 ^^^^^^" in nullableClass1.{self::Class1::method}{<nullable>}.(0){(core::int) → core::double};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.method(0);
+  let final dynamic #t10 = dyn in #t10 == null ?{dynamic} null : #t10{dynamic}.method(0);
+  dyn{dynamic}.toString(0);
+  const core::int call_dyn = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^");
+  core::print("InstanceInvocation (Object)");
+  dyn.{core::Object::toString}(){() → core::String};
+  nullableClass1.{core::Object::toString}(){() → core::String};
+  nullableClass2.{core::Object::toString}(){() → core::String};
+  nullableFunction.{core::Object::toString}(){() → core::String};
+  nullableFunctionType.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable1.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable2.{core::Object::toString}(){() → core::String};
+  undeterminedTypeVariable.{core::Object::toString}(){() → core::String};
+  core::print("DynamicInvocation (Never)");
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.method(0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = (let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+  nonNullableClass1.unresolved();
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved();
+  core::print("DynamicInvocation (Inapplicable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method();
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableFunctionType();
+                         ^" in nonNullableFunctionType{<inapplicable>}.();
+  core::print("InstanceInvocation (generic)");
+  nonNullableClass2.{self::Class2::method}(0){(core::int) → core::String};
+  let final self::Class2<core::String>? #t15 = nullableClass2 in #t15 == null ?{core::String?} null : #t15{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  core::print("FunctionInvocation");
+  nonNullableFunction(0);
+  nonNullableFunction(0);
+  let final core::Function? #t16 = nullableFunction in #t16 == null ?{dynamic} null : #t16{core::Function}(0);
+  nonNullableFunctionType(0){(core::int) → core::int};
+  nonNullableFunctionType(0){(core::int) → core::int};
+  let final (core::int) →? core::int #t17 = nullableFunctionType in #t17 == null ?{core::int?} null : #t17{(core::int) → core::int}(0){(core::int) → core::int};
+  genericFunctionType<core::int>(0){(core::int) → core::int};
+  genericFunctionType<core::num>(0){(core::num) → core::num};
+  core::num i = genericFunctionType<core::num>(0){(core::num) → core::num};
+  nonNullableTypeVariable1(0);
+  nonNullableTypeVariable1(0);
+  let final self::test::T1? #t18 = nullableTypeVariable1 in #t18 == null ?{dynamic} null : #t18{self::test::T1}(0);
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  let final self::test::T2? #t19 = nullableTypeVariable2 in #t19 == null ?{core::int?} null : #t19{self::test::T2}(0){(core::int) → core::int};
+  core::print("FunctionInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nullableFunction(0);
+                  ^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  nullableFunction.call(0);
+                   ^^^^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nullableFunctionType(0);
+                      ^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+Try calling using ?. instead.
+  nullableFunctionType.call(0);
+                       ^^^^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().method(0);
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{dynamic}.method(0);
+  core::print("LocalFunctionInvocation");
+  function localFunction() → core::int
+    return 42;
+  function genericLocalFunction<T extends core::Object? = dynamic>(T% t) → T%
+    return t;
+  localFunction(){() → core::int};
+  genericLocalFunction<core::int>(0){(core::int) → core::int};
+  genericLocalFunction<core::num>(0){(core::num) → core::num};
+  const core::int call_localFunction = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^");
+  () → core::int f = () → core::int => 42;
+  const core::int call_f = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^");
+  core::print(#C4);
+  const core::bool equals = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 4
+  #C2 = 24
+  #C3 = 96
+  #C4 = false
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///method_invocation.dart:72:46 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_invocation.dart:73:47 -> IntConstant(0)
+Extra constant evaluation: evaluated: 186, effectively constant: 2
diff --git a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.expect b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.expect
index a213a54..fe8cc3c 100644
--- a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.expect
+++ b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.expect
@@ -32,7 +32,7 @@
  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
   c.setter = c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
   c.{self::Class::method}{() → void};
   c.{self::Class::method}(){() → void};
   d{dynamic}.field = d{dynamic}.field;
diff --git a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.transformed.expect b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.transformed.expect
index a213a54..fe8cc3c 100644
--- a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
   c.setter = c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
   c.{self::Class::method}{() → void};
   c.{self::Class::method}(){() → void};
   d{dynamic}.field = d{dynamic}.field;
diff --git a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.expect b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.expect
index a213a54..fe8cc3c 100644
--- a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.expect
+++ b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.expect
@@ -32,7 +32,7 @@
  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
   c.setter = c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
   c.{self::Class::method}{() → void};
   c.{self::Class::method}(){() → void};
   d{dynamic}.field = d{dynamic}.field;
diff --git a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.transformed.expect b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.transformed.expect
index a213a54..fe8cc3c 100644
--- a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
   c.setter = c.getter;
-    ^^^^^^";
+    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
   c.{self::Class::method}{() → void};
   c.{self::Class::method}(){() → void};
   d{dynamic}.field = d{dynamic}.field;
diff --git a/pkg/front_end/testcases/none/operator.dart.strong.expect b/pkg/front_end/testcases/none/operator.dart.strong.expect
index 058a649..670534d 100644
--- a/pkg/front_end/testcases/none/operator.dart.strong.expect
+++ b/pkg/front_end/testcases/none/operator.dart.strong.expect
@@ -20,7 +20,7 @@
 //   c.method()[0];
 //           ^
 //
-// pkg/front_end/testcases/none/operator.dart:109:3: Error: Getter not found: 'string'.
+// pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
 //   string[0] = 42;
 //   ^^^^^^
 //
@@ -28,7 +28,7 @@
 //   c.method()[0] = 42;
 //           ^
 //
-// pkg/front_end/testcases/none/operator.dart:129:3: Error: Getter not found: 'string'.
+// pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
 //   string[0] += 42;
 //   ^^^^^^
 //
@@ -84,7 +84,7 @@
   invalid-expression "pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
   string - 42;
-         ^";
+         ^" in string{<unresolved>}.-(42);
 }
 static method unaryMinus(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
   core::print("InstanceInvocation");
@@ -97,14 +97,14 @@
   core::print("DynamicInvocation (Never)");
   never{Never}.unary-();
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t1 = invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
   -c.method();
-           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.unary-();
+           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.unary-();
   core::print("DynamicInvocation (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -string;
-  ^";
+  ^" in string{<unresolved>}.unary-();
 }
 static method indexGet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
   core::print("InstanceInvocation");
@@ -116,9 +116,9 @@
   core::print("DynamicInvocation (Never)");
   never{Never}.[](0);
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t2 = invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0];
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.[](0);
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[](0);
   core::print("DynamicInvocation (Unresolved)");
   string.{core::String::[]}(0){(core::int) → core::String};
 }
@@ -132,32 +132,32 @@
   core::print("DynamicInvocation (Never)");
   never{Never}.[]=(0, 42);
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0] = 42;
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.[]=(0, 42);
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[]=(0, 42);
   core::print("DynamicInvocation (Unresolved)");
-  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Getter not found: 'string'.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
   string[0] = 42;
-  ^^^^^^"{dynamic}.[]=(0, 42);
+  ^^^^^^"{<invalid>}.[]=(0, 42);
 }
 static method compound(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
   core::print("InstanceInvocation");
-  let final core::List<core::int> #t4 = list in let final core::int #t5 = 0 in #t4.{core::List::[]=}(#t5, #t4.{core::List::[]}(#t5){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
-  let final core::Map<core::String, core::double> #t6 = map in let final core::String #t7 = "foo" in #t6.{core::Map::[]=}(#t7, let final Never #t8 = invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+  let final core::List<core::int> #t1 = list in let final core::int #t2 = 0 in #t1.{core::List::[]=}(#t2, #t1.{core::List::[]}(#t2){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
+  let final core::Map<core::String, core::double> #t3 = map in let final core::String #t4 = "foo" in #t3.{core::Map::[]=}(#t4, invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
   map['foo'] += 0.5;
-             ^" in #t6.{core::Map::[]}(#t7){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
-  let final self::Class<core::String> #t9 = c in let final core::int #t10 = 0 in #t9.{self::Class::[]=}(#t10, #t9.{self::Class::[]}(#t10){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
+             ^" in #t3.{core::Map::[]}(#t4){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
+  let final self::Class<core::String> #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::[]=}(#t6, #t5.{self::Class::[]}(#t6){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
   core::print("DynamicInvocation");
-  let final dynamic #t11 = dyn in let final core::int #t12 = 0 in #t11{dynamic}.[]=(#t12, #t11{dynamic}.[](#t12){dynamic}.+(42));
+  let final dynamic #t7 = dyn in let final core::int #t8 = 0 in #t7{dynamic}.[]=(#t8, #t7{dynamic}.[](#t8){dynamic}.+(42));
   core::print("DynamicInvocation (Never)");
-  let final Never #t13 = never in let final core::int #t14 = 0 in #t13{Never}.[]=(#t14, #t13{Never}.[](#t14){Never}.+(42));
+  let final Never #t9 = never in let final core::int #t10 = 0 in #t9{Never}.[]=(#t10, #t9{Never}.[](#t10){Never}.+(42));
   core::print("DynamicInvocation (Invalid)");
-  let final invalid-type #t15 = let final Never #t16 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+  let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0] += 42;
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t17 = 0 in #t15{<invalid>}.[]=(#t17, #t15{<invalid>}.[](#t17){<invalid>}.+(42));
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t12 = 0 in #t11{<invalid>}.[]=(#t12, #t11{<invalid>}.[](#t12){<invalid>}.+(42));
   core::print("DynamicInvocation (Unresolved)");
-  let final dynamic #t18 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Getter not found: 'string'.
+  let final invalid-type #t13 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
   string[0] += 42;
-  ^^^^^^" in let final core::int #t19 = 0 in #t18{dynamic}.[]=(#t19, #t18{dynamic}.[](#t19){dynamic}.+(42));
+  ^^^^^^" in let final core::int #t14 = 0 in #t13{<invalid>}.[]=(#t14, #t13{<invalid>}.[](#t14){<invalid>}.+(42));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect b/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect
new file mode 100644
index 0000000..8e6c707
--- /dev/null
+++ b/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//   string - 42;
+//          ^
+//
+// pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+//   -c.method();
+//            ^
+//
+// pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   -string;
+//   ^
+//
+// pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0];
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+//   string[0] = 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] = 42;
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+//   string[0] += 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+//   map['foo'] += 0.5;
+//              ^
+//
+// pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] += 42;
+//           ^
+//
+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::•()
+    ;
+  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+    return other;
+  operator unary-() → self::Class<self::Class::T%>
+    return this;
+  operator [](core::int index) → self::Class<self::Class::T%>
+    return this;
+  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  method method(core::double o) → core::int
+    return 42;
+}
+static method add(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::+}(n){(core::num) → core::num};
+  n.{core::num::+}(i){(core::num) → core::num};
+  n.{core::num::+}(d){(core::num) → core::double};
+  n.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  i.{core::num::+}(n){(core::num) → core::num};
+  i.{core::num::+}(i){(core::num) → core::int};
+  i.{core::num::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  d.{core::double::+}(n){(core::num) → core::double};
+  d.{core::double::+}(i){(core::num) → core::double};
+  d.{core::double::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  c.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>};
+  c.{self::Class::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class<core::String>){(self::Class<core::String>) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.+(n);
+  core::print("DynamicInvocation (Never)");
+  never{Never}.+(n);
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+  string - 42;
+         ^" in string{<unresolved>}.-(42);
+}
+static method unaryMinus(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::unary-}(){() → core::num};
+  i.{core::int::unary-}(){() → core::int};
+  d.{core::double::unary-}(){() → core::double};
+  c.{self::Class::unary-}(){() → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.unary-();
+  core::print("DynamicInvocation (Never)");
+  never{Never}.unary-();
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+  -c.method();
+           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.unary-();
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  -string;
+  ^" in string{<unresolved>}.unary-();
+}
+static method indexGet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]}(0){(core::int) → core::int};
+  map.{core::Map::[]}("foo"){(core::Object?) → core::double?};
+  c.{self::Class::[]}(0){(core::int) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[](0);
+  core::print("DynamicInvocation (Never)");
+  never{Never}.[](0);
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0];
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[](0);
+  core::print("DynamicInvocation (Unresolved)");
+  string.{core::String::[]}(0){(core::int) → core::String};
+}
+static method indexSet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]=}(0, 42){(core::int, core::int) → void};
+  map.{core::Map::[]=}("foo", 0.5){(core::String, core::double) → void};
+  c.{self::Class::[]=}(0, c){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[]=(0, 42);
+  core::print("DynamicInvocation (Never)");
+  never{Never}.[]=(0, 42);
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] = 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[]=(0, 42);
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+  string[0] = 42;
+  ^^^^^^"{<invalid>}.[]=(0, 42);
+}
+static method compound(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  let final core::List<core::int> #t1 = list in let final core::int #t2 = 0 in #t1.{core::List::[]=}(#t2, #t1.{core::List::[]}(#t2){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
+  let final core::Map<core::String, core::double> #t3 = map in let final core::String #t4 = "foo" in #t3.{core::Map::[]=}(#t4, invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+  map['foo'] += 0.5;
+             ^" in #t3.{core::Map::[]}(#t4){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
+  let final self::Class<core::String> #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::[]=}(#t6, #t5.{self::Class::[]}(#t6){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  let final dynamic #t7 = dyn in let final core::int #t8 = 0 in #t7{dynamic}.[]=(#t8, #t7{dynamic}.[](#t8){dynamic}.+(42));
+  core::print("DynamicInvocation (Never)");
+  let final Never #t9 = never in let final core::int #t10 = 0 in #t9{Never}.[]=(#t10, #t9{Never}.[](#t10){Never}.+(42));
+  core::print("DynamicInvocation (Invalid)");
+  let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] += 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t12 = 0 in #t11{<invalid>}.[]=(#t12, #t11{<invalid>}.[](#t12){<invalid>}.+(42));
+  core::print("DynamicInvocation (Unresolved)");
+  let final invalid-type #t13 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+  string[0] += 42;
+  ^^^^^^" in let final core::int #t14 = 0 in #t13{<invalid>}.[]=(#t14, #t13{<invalid>}.[](#t14){<invalid>}.+(42));
+}
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:115:8 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:115:8 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:116:7 -> StringConstant("foo")
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:117:5 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:117:5 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:120:7 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:120:7 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:123:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:123:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:126:14 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:126:14 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:129:10 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:129:10 -> IntConstant(0)
+Extra constant evaluation: evaluated: 186, effectively constant: 13
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.expect b/pkg/front_end/testcases/none/operator.dart.weak.expect
index 14d8232..712a616 100644
--- a/pkg/front_end/testcases/none/operator.dart.weak.expect
+++ b/pkg/front_end/testcases/none/operator.dart.weak.expect
@@ -20,7 +20,7 @@
 //   c.method()[0];
 //           ^
 //
-// pkg/front_end/testcases/none/operator.dart:109:3: Error: Getter not found: 'string'.
+// pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
 //   string[0] = 42;
 //   ^^^^^^
 //
@@ -28,7 +28,7 @@
 //   c.method()[0] = 42;
 //           ^
 //
-// pkg/front_end/testcases/none/operator.dart:129:3: Error: Getter not found: 'string'.
+// pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
 //   string[0] += 42;
 //   ^^^^^^
 //
@@ -85,7 +85,7 @@
   invalid-expression "pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
   string - 42;
-         ^";
+         ^" in string{<unresolved>}.-(42);
 }
 static method unaryMinus(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
   core::print("InstanceInvocation");
@@ -98,14 +98,14 @@
   core::print("DynamicInvocation (Never)");
   let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t5 = invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
   -c.method();
-           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.unary-();
+           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.unary-();
   core::print("DynamicInvocation (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   -string;
-  ^";
+  ^" in string{<unresolved>}.unary-();
 }
 static method indexGet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
   core::print("InstanceInvocation");
@@ -115,11 +115,11 @@
   core::print("DynamicInvocation");
   dyn{dynamic}.[](0);
   core::print("DynamicInvocation (Never)");
-  let final Never #t6 = (let final Never #t7 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t8 = invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0];
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.[](0);
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[](0);
   core::print("DynamicInvocation (Unresolved)");
   string.{core::String::[]}(0){(core::int) → core::String};
 }
@@ -131,34 +131,34 @@
   core::print("DynamicInvocation");
   dyn{dynamic}.[]=(0, 42);
   core::print("DynamicInvocation (Never)");
-  (let final Never #t9 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(0, 42);
+  (let final Never #t7 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(0, 42);
   core::print("DynamicInvocation (Invalid)");
-  (let final Never #t10 = invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0] = 42;
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.[]=(0, 42);
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[]=(0, 42);
   core::print("DynamicInvocation (Unresolved)");
-  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Getter not found: 'string'.
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
   string[0] = 42;
-  ^^^^^^"{dynamic}.[]=(0, 42);
+  ^^^^^^"{<invalid>}.[]=(0, 42);
 }
 static method compound(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
   core::print("InstanceInvocation");
-  let final core::List<core::int> #t11 = list in let final core::int #t12 = 0 in #t11.{core::List::[]=}(#t12, #t11.{core::List::[]}(#t12){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
-  let final core::Map<core::String, core::double> #t13 = map in let final core::String #t14 = "foo" in #t13.{core::Map::[]=}(#t14, let final Never #t15 = invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+  let final core::List<core::int> #t8 = list in let final core::int #t9 = 0 in #t8.{core::List::[]=}(#t9, #t8.{core::List::[]}(#t9){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
+  let final core::Map<core::String, core::double> #t10 = map in let final core::String #t11 = "foo" in #t10.{core::Map::[]=}(#t11, invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
   map['foo'] += 0.5;
-             ^" in #t13.{core::Map::[]}(#t14){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
-  let final self::Class<core::String> #t16 = c in let final core::int #t17 = 0 in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
+             ^" in #t10.{core::Map::[]}(#t11){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
+  let final self::Class<core::String> #t12 = c in let final core::int #t13 = 0 in #t12.{self::Class::[]=}(#t13, #t12.{self::Class::[]}(#t13){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
   core::print("DynamicInvocation");
-  let final dynamic #t18 = dyn in let final core::int #t19 = 0 in #t18{dynamic}.[]=(#t19, #t18{dynamic}.[](#t19){dynamic}.+(42));
+  let final dynamic #t14 = dyn in let final core::int #t15 = 0 in #t14{dynamic}.[]=(#t15, #t14{dynamic}.[](#t15){dynamic}.+(42));
   core::print("DynamicInvocation (Never)");
-  let final Never #t20 = let final Never #t21 = let final Never #t22 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final core::int #t23 = 0 in #t21{Never}.[]=(#t23, #t21{Never}.[](#t23){Never}.+(42)) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t16 = let final Never #t17 = let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final core::int #t19 = 0 in #t17{Never}.[]=(#t19, #t17{Never}.[](#t19){Never}.+(42)) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::print("DynamicInvocation (Invalid)");
-  let final invalid-type #t24 = let final Never #t25 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+  let final invalid-type #t20 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
   c.method()[0] += 42;
-          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t26 = 0 in #t24{<invalid>}.[]=(#t26, #t24{<invalid>}.[](#t26){<invalid>}.+(42));
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t21 = 0 in #t20{<invalid>}.[]=(#t21, #t20{<invalid>}.[](#t21){<invalid>}.+(42));
   core::print("DynamicInvocation (Unresolved)");
-  let final dynamic #t27 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Getter not found: 'string'.
+  let final invalid-type #t22 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
   string[0] += 42;
-  ^^^^^^" in let final core::int #t28 = 0 in #t27{dynamic}.[]=(#t28, #t27{dynamic}.[](#t28){dynamic}.+(42));
+  ^^^^^^" in let final core::int #t23 = 0 in #t22{<invalid>}.[]=(#t23, #t22{<invalid>}.[](#t23){<invalid>}.+(42));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect b/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect
new file mode 100644
index 0000000..059550b
--- /dev/null
+++ b/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect
@@ -0,0 +1,181 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//   string - 42;
+//          ^
+//
+// pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+//   -c.method();
+//            ^
+//
+// pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   -string;
+//   ^
+//
+// pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0];
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+//   string[0] = 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] = 42;
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+//   string[0] += 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+//   map['foo'] += 0.5;
+//              ^
+//
+// pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] += 42;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+    return other;
+  operator unary-() → self::Class<self::Class::T%>
+    return this;
+  operator [](core::int index) → self::Class<self::Class::T%>
+    return this;
+  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  method method(core::double o) → core::int
+    return 42;
+}
+static method add(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::+}(n){(core::num) → core::num};
+  n.{core::num::+}(i){(core::num) → core::num};
+  n.{core::num::+}(d){(core::num) → core::double};
+  n.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  i.{core::num::+}(n){(core::num) → core::num};
+  i.{core::num::+}(i){(core::num) → core::int};
+  i.{core::num::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  d.{core::double::+}(n){(core::num) → core::double};
+  d.{core::double::+}(i){(core::num) → core::double};
+  d.{core::double::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  c.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>};
+  c.{self::Class::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class<core::String>){(self::Class<core::String>) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.+(n);
+  core::print("DynamicInvocation (Never)");
+  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(n) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+  string - 42;
+         ^" in string{<unresolved>}.-(42);
+}
+static method unaryMinus(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::unary-}(){() → core::num};
+  i.{core::int::unary-}(){() → core::int};
+  d.{core::double::unary-}(){() → core::double};
+  c.{self::Class::unary-}(){() → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.unary-();
+  core::print("DynamicInvocation (Never)");
+  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+  -c.method();
+           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.unary-();
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  -string;
+  ^" in string{<unresolved>}.unary-();
+}
+static method indexGet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]}(0){(core::int) → core::int};
+  map.{core::Map::[]}("foo"){(core::Object?) → core::double?};
+  c.{self::Class::[]}(0){(core::int) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[](0);
+  core::print("DynamicInvocation (Never)");
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0];
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[](0);
+  core::print("DynamicInvocation (Unresolved)");
+  string.{core::String::[]}(0){(core::int) → core::String};
+}
+static method indexSet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]=}(0, 42){(core::int, core::int) → void};
+  map.{core::Map::[]=}("foo", 0.5){(core::String, core::double) → void};
+  c.{self::Class::[]=}(0, c){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[]=(0, 42);
+  core::print("DynamicInvocation (Never)");
+  (let final Never #t7 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(0, 42);
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] = 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[]=(0, 42);
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+  string[0] = 42;
+  ^^^^^^"{<invalid>}.[]=(0, 42);
+}
+static method compound(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  let final core::List<core::int> #t8 = list in let final core::int #t9 = 0 in #t8.{core::List::[]=}(#t9, #t8.{core::List::[]}(#t9){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
+  let final core::Map<core::String, core::double> #t10 = map in let final core::String #t11 = "foo" in #t10.{core::Map::[]=}(#t11, invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+  map['foo'] += 0.5;
+             ^" in #t10.{core::Map::[]}(#t11){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
+  let final self::Class<core::String> #t12 = c in let final core::int #t13 = 0 in #t12.{self::Class::[]=}(#t13, #t12.{self::Class::[]}(#t13){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  let final dynamic #t14 = dyn in let final core::int #t15 = 0 in #t14{dynamic}.[]=(#t15, #t14{dynamic}.[](#t15){dynamic}.+(42));
+  core::print("DynamicInvocation (Never)");
+  let final Never #t16 = let final Never #t17 = let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final core::int #t19 = 0 in #t17{Never}.[]=(#t19, #t17{Never}.[](#t19){Never}.+(42)) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  let final invalid-type #t20 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] += 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t21 = 0 in #t20{<invalid>}.[]=(#t21, #t20{<invalid>}.[](#t21){<invalid>}.+(42));
+  core::print("DynamicInvocation (Unresolved)");
+  let final invalid-type #t22 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+  string[0] += 42;
+  ^^^^^^" in let final core::int #t23 = 0 in #t22{<invalid>}.[]=(#t23, #t22{<invalid>}.[](#t23){<invalid>}.+(42));
+}
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:115:8 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:115:8 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:116:7 -> StringConstant("foo")
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:117:5 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:117:5 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:120:7 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:120:7 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:123:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:123:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:126:14 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:126:14 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:129:10 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///operator.dart:129:10 -> IntConstant(0)
+Extra constant evaluation: evaluated: 213, effectively constant: 13
diff --git a/pkg/front_end/testcases/none/property_get.dart.strong.expect b/pkg/front_end/testcases/none/property_get.dart.strong.expect
index e7de58d..4f2e9fa 100644
--- a/pkg/front_end/testcases/none/property_get.dart.strong.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.strong.expect
@@ -85,7 +85,7 @@
   const dynamic instance_tearOff = nonNullableClass1.method;
                                    ^^^^^^^^^^^^^^^^^");
   core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
-  core::Function? f2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
   Function? f2 = nullableClass2;
                  ^" in nullableClass2 as{TypeError} core::Function?;
   core::print("StaticGet");
@@ -97,7 +97,7 @@
   core::print(#C4);
   core::print("DynamicGet");
   dyn{dynamic}.field;
-  let final dynamic #t7 = dyn in #t7 == null ?{dynamic} null : #t7{dynamic}.field;
+  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
   const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
   const dynamic dyn_get = dyn.field;
                           ^^^";
@@ -115,13 +115,13 @@
   never{Never}.hashCode;
   core::print("FunctionTearOff");
   nonNullableFunction.call;
-  let final core::Function? #t8 = nullableFunction in #t8 == null ?{core::Function?} null : #t8{core::Function}.call;
+  let final core::Function? #t7 = nullableFunction in #t7 == null ?{core::Function?} null : #t7{core::Function}.call;
   nonNullableFunctionType.call;
-  let final () →? core::int #t9 = nullableFunctionType in #t9 == null ?{() →? core::int} null : #t9{() → core::int}.call;
+  let final () →? core::int #t8 = nullableFunctionType in #t8 == null ?{() →? core::int} null : #t8{() → core::int}.call;
   nonNullableTypeVariable1.call;
-  let final self::test::T1? #t10 = nullableTypeVariable1 in #t10 == null ?{self::test::T1?} null : #t10{self::test::T1}.call;
+  let final self::test::T1? #t9 = nullableTypeVariable1 in #t9 == null ?{self::test::T1?} null : #t9{self::test::T1}.call;
   nonNullableTypeVariable2.call;
-  let final self::test::T2? #t11 = nullableTypeVariable2 in #t11 == null ?{self::test::T2?} null : #t11{self::test::T2}.call;
+  let final self::test::T2? #t10 = nullableTypeVariable2 in #t10 == null ?{self::test::T2?} null : #t10{self::test::T2}.call;
   const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
   const dynamic function_tearOff = nonNullableFunction.call;
                                    ^^^^^^^^^^^^^^^^^^^";
@@ -129,15 +129,15 @@
   const dynamic function_tearOff = nonNullableFunction.call;
                                    ^^^^^^^^^^^^^^^^^^^");
   core::print("DynamicGet (Invalid)");
-  (let final Never #t12 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().field;
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.field;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
   core::print("DynamicGet (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
   nonNullableClass1.unresolved;
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect b/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect
new file mode 100644
index 0000000..4f2e9fa
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect
@@ -0,0 +1,149 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+//   const dynamic instance_get = nullableClass1.field;
+//                                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+//   const dynamic instance_tearOff = nonNullableClass1.method;
+//                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+//   const dynamic dyn_get = dyn.field;
+//                           ^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+//   const dynamic function_tearOff = nonNullableFunction.call;
+//                                    ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+//   Function? f2 = nullableClass2;
+//                  ^
+//
+// pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   nonNullableClass1.unresolved;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int field;
+  static field core::int staticField = 42;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(core::double o) → core::int
+    return 0;
+  static method staticMethod(core::double o) → core::int
+    return 0;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  generic-covariant-impl field self::Class2::T% field;
+  constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method call() → core::int
+    return 42;
+}
+static field core::int topLevelField = 42;
+static const field core::String string = #C1;
+static const field core::int stringLength = #C2;
+static const field dynamic dynamicString = #C1;
+static const field core::int dynamicStringLength = #C2;
+static method topLevelMethod(core::double o) → core::int
+  return 0;
+static method test<T1 extends core::Function, T2 extends () → core::int>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, () → core::int nonNullableFunctionType, () →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("InstanceGet");
+  nonNullableClass1.{self::Class1::field}{core::int};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field}{core::int};
+  nonNullableClass2.{self::Class2::field}{core::String};
+  let final self::Class2<core::String>? #t2 = nullableClass2 in #t2 == null ?{core::String?} null : #t2{self::Class2<core::String>}.{self::Class2::field}{core::String};
+  const dynamic instance_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^");
+  core::print("InstanceTearOff");
+  nonNullableClass1.{self::Class1::method}{(core::double) → core::int};
+  let final self::Class1? #t3 = nullableClass1 in #t3 == null ?{(core::double) →? core::int} null : #t3{self::Class1}.{self::Class1::method}{(core::double) → core::int};
+  nonNullableClass2.{self::Class2::call}{() → core::int};
+  let final self::Class2<core::String>? #t4 = nullableClass2 in #t4 == null ?{() →? core::int} null : #t4{self::Class2<core::String>}.{self::Class2::call}{() → core::int};
+  const dynamic instance_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^");
+  core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
+  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+  Function? f2 = nullableClass2;
+                 ^" in nullableClass2 as{TypeError} core::Function?;
+  core::print("StaticGet");
+  self::Class1::staticField;
+  self::topLevelField;
+  core::print("StaticTearOff");
+  #C3;
+  #C4;
+  core::print(#C4);
+  core::print("DynamicGet");
+  dyn{dynamic}.field;
+  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
+  const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^");
+  core::print("InstanceGet (Object)");
+  dyn.{core::Object::hashCode}{core::int};
+  nullableClass1.{core::Object::hashCode}{core::int};
+  core::print("InstanceGetTearOff (Object)");
+  dyn.{core::Object::toString}{() → core::String};
+  nullableClass1.{core::Object::toString}{() → core::String};
+  core::print("DynamicGet (Never)");
+  never{Never}.field;
+  never{Never}.hashCode;
+  core::print("FunctionTearOff");
+  nonNullableFunction.call;
+  let final core::Function? #t7 = nullableFunction in #t7 == null ?{core::Function?} null : #t7{core::Function}.call;
+  nonNullableFunctionType.call;
+  let final () →? core::int #t8 = nullableFunctionType in #t8 == null ?{() →? core::int} null : #t8{() → core::int}.call;
+  nonNullableTypeVariable1.call;
+  let final self::test::T1? #t9 = nullableTypeVariable1 in #t9 == null ?{self::test::T1?} null : #t9{self::test::T1}.call;
+  nonNullableTypeVariable2.call;
+  let final self::test::T2? #t10 = nullableTypeVariable2 in #t10 == null ?{self::test::T2?} null : #t10{self::test::T2}.call;
+  const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^");
+  core::print("DynamicGet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
+  core::print("DynamicGet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  nonNullableClass1.unresolved;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "foo"
+  #C2 = 3
+  #C3 = static-tearoff self::Class1::staticMethod
+  #C4 = static-tearoff self::topLevelMethod
+}
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.expect b/pkg/front_end/testcases/none/property_get.dart.weak.expect
index 83e1366..95f436b 100644
--- a/pkg/front_end/testcases/none/property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.expect
@@ -86,7 +86,7 @@
   const dynamic instance_tearOff = nonNullableClass1.method;
                                    ^^^^^^^^^^^^^^^^^");
   core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
-  core::Function? f2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
   Function? f2 = nullableClass2;
                  ^" in nullableClass2 as{TypeError} core::Function?;
   core::print("StaticGet");
@@ -98,7 +98,7 @@
   core::print(#C4);
   core::print("DynamicGet");
   dyn{dynamic}.field;
-  let final dynamic #t7 = dyn in #t7 == null ?{dynamic} null : #t7{dynamic}.field;
+  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
   const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
   const dynamic dyn_get = dyn.field;
                           ^^^";
@@ -112,17 +112,17 @@
   dyn.{core::Object::toString}{() → core::String};
   nullableClass1.{core::Object::toString}{() → core::String};
   core::print("DynamicGet (Never)");
-  let final Never #t8 = (let final Never #t9 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t10 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   core::print("FunctionTearOff");
   nonNullableFunction.call;
-  let final core::Function? #t12 = nullableFunction in #t12 == null ?{core::Function?} null : #t12{core::Function}.call;
+  let final core::Function? #t11 = nullableFunction in #t11 == null ?{core::Function?} null : #t11{core::Function}.call;
   nonNullableFunctionType.call;
-  let final () →? core::int #t13 = nullableFunctionType in #t13 == null ?{() →? core::int} null : #t13{() → core::int}.call;
+  let final () →? core::int #t12 = nullableFunctionType in #t12 == null ?{() →? core::int} null : #t12{() → core::int}.call;
   nonNullableTypeVariable1.call;
-  let final self::test::T1? #t14 = nullableTypeVariable1 in #t14 == null ?{self::test::T1?} null : #t14{self::test::T1}.call;
+  let final self::test::T1? #t13 = nullableTypeVariable1 in #t13 == null ?{self::test::T1?} null : #t13{self::test::T1}.call;
   nonNullableTypeVariable2.call;
-  let final self::test::T2? #t15 = nullableTypeVariable2 in #t15 == null ?{self::test::T2?} null : #t15{self::test::T2}.call;
+  let final self::test::T2? #t14 = nullableTypeVariable2 in #t14 == null ?{self::test::T2?} null : #t14{self::test::T2}.call;
   const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
   const dynamic function_tearOff = nonNullableFunction.call;
                                    ^^^^^^^^^^^^^^^^^^^";
@@ -130,15 +130,15 @@
   const dynamic function_tearOff = nonNullableFunction.call;
                                    ^^^^^^^^^^^^^^^^^^^");
   core::print("DynamicGet (Invalid)");
-  (let final Never #t16 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().field;
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.field;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
   core::print("DynamicGet (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
   nonNullableClass1.unresolved;
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect
new file mode 100644
index 0000000..95f436b
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect
@@ -0,0 +1,150 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+//   const dynamic instance_get = nullableClass1.field;
+//                                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+//   const dynamic instance_tearOff = nonNullableClass1.method;
+//                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+//   const dynamic dyn_get = dyn.field;
+//                           ^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+//   const dynamic function_tearOff = nonNullableFunction.call;
+//                                    ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+//   Function? f2 = nullableClass2;
+//                  ^
+//
+// pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   nonNullableClass1.unresolved;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  field core::int field;
+  static field core::int staticField = 42;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(core::double o) → core::int
+    return 0;
+  static method staticMethod(core::double o) → core::int
+    return 0;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  generic-covariant-impl field self::Class2::T% field;
+  constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method call() → core::int
+    return 42;
+}
+static field core::int topLevelField = 42;
+static const field core::String string = #C1;
+static const field core::int stringLength = #C2;
+static const field dynamic dynamicString = #C1;
+static const field core::int dynamicStringLength = #C2;
+static method topLevelMethod(core::double o) → core::int
+  return 0;
+static method test<T1 extends core::Function, T2 extends () → core::int>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, () → core::int nonNullableFunctionType, () →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("InstanceGet");
+  nonNullableClass1.{self::Class1::field}{core::int};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field}{core::int};
+  nonNullableClass2.{self::Class2::field}{core::String};
+  let final self::Class2<core::String>? #t2 = nullableClass2 in #t2 == null ?{core::String?} null : #t2{self::Class2<core::String>}.{self::Class2::field}{core::String};
+  const dynamic instance_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^");
+  core::print("InstanceTearOff");
+  nonNullableClass1.{self::Class1::method}{(core::double) → core::int};
+  let final self::Class1? #t3 = nullableClass1 in #t3 == null ?{(core::double) →? core::int} null : #t3{self::Class1}.{self::Class1::method}{(core::double) → core::int};
+  nonNullableClass2.{self::Class2::call}{() → core::int};
+  let final self::Class2<core::String>? #t4 = nullableClass2 in #t4 == null ?{() →? core::int} null : #t4{self::Class2<core::String>}.{self::Class2::call}{() → core::int};
+  const dynamic instance_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^");
+  core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
+  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+  Function? f2 = nullableClass2;
+                 ^" in nullableClass2 as{TypeError} core::Function?;
+  core::print("StaticGet");
+  self::Class1::staticField;
+  self::topLevelField;
+  core::print("StaticTearOff");
+  #C3;
+  #C4;
+  core::print(#C4);
+  core::print("DynamicGet");
+  dyn{dynamic}.field;
+  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
+  const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^");
+  core::print("InstanceGet (Object)");
+  dyn.{core::Object::hashCode}{core::int};
+  nullableClass1.{core::Object::hashCode}{core::int};
+  core::print("InstanceGetTearOff (Object)");
+  dyn.{core::Object::toString}{() → core::String};
+  nullableClass1.{core::Object::toString}{() → core::String};
+  core::print("DynamicGet (Never)");
+  let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("FunctionTearOff");
+  nonNullableFunction.call;
+  let final core::Function? #t11 = nullableFunction in #t11 == null ?{core::Function?} null : #t11{core::Function}.call;
+  nonNullableFunctionType.call;
+  let final () →? core::int #t12 = nullableFunctionType in #t12 == null ?{() →? core::int} null : #t12{() → core::int}.call;
+  nonNullableTypeVariable1.call;
+  let final self::test::T1? #t13 = nullableTypeVariable1 in #t13 == null ?{self::test::T1?} null : #t13{self::test::T1}.call;
+  nonNullableTypeVariable2.call;
+  let final self::test::T2? #t14 = nullableTypeVariable2 in #t14 == null ?{self::test::T2?} null : #t14{self::test::T2}.call;
+  const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^");
+  core::print("DynamicGet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
+  core::print("DynamicGet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  nonNullableClass1.unresolved;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "foo"
+  #C2 = 3
+  #C3 = static-tearoff self::Class1::staticMethod
+  #C4 = static-tearoff self::topLevelMethod
+}
diff --git a/pkg/front_end/testcases/none/property_set.dart.strong.expect b/pkg/front_end/testcases/none/property_set.dart.strong.expect
index 67eb383..ad121f3 100644
--- a/pkg/front_end/testcases/none/property_set.dart.strong.expect
+++ b/pkg/front_end/testcases/none/property_set.dart.strong.expect
@@ -54,14 +54,14 @@
   core::print("DynamicSet (Never)");
   never{Never}.field = 42;
   core::print("DynamicSet (Invalid)");
-  (let final Never #t3 = invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().field = 42;
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.field = 42;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field = 42;
   core::print("DynamicSet (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
   nonNullableClass1.unresolved = 42;
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved = 42;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/property_set.dart.strong.transformed.expect b/pkg/front_end/testcases/none/property_set.dart.strong.transformed.expect
new file mode 100644
index 0000000..ad121f3
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_set.dart.strong.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_set.dart:18:34: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                                          ^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:33: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                 ^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field = 42;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+//   nonNullableClass1.unresolved = 42;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(dynamic o) → dynamic {}
+}
+static method test(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceSet");
+  nonNullableClass1.{self::Class1::field} = 42;
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field} = 42;
+  const core::int set_instance_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+  const int set_instance_field = nonNullableClass1.field = 42;
+                                                         ^";
+  core::print("DynamicSet");
+  dyn{dynamic}.field = 42;
+  let final dynamic #t2 = dyn in #t2 == null ?{core::int?} null : #t2{dynamic}.field = 42;
+  const core::int set_dynamic_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+  const int set_dynamic_field = dyn.field = 42;
+                                          ^";
+  core::print("DynamicSet (Never)");
+  never{Never}.field = 42;
+  core::print("DynamicSet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field = 42;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field = 42;
+  core::print("DynamicSet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+  nonNullableClass1.unresolved = 42;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/property_set.dart.weak.expect b/pkg/front_end/testcases/none/property_set.dart.weak.expect
index d0822e6..b7f6716 100644
--- a/pkg/front_end/testcases/none/property_set.dart.weak.expect
+++ b/pkg/front_end/testcases/none/property_set.dart.weak.expect
@@ -55,14 +55,14 @@
   core::print("DynamicSet (Never)");
   (let final Never #t3 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field = 42;
   core::print("DynamicSet (Invalid)");
-  (let final Never #t4 = invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
   nonNullableClass1.method().field = 42;
-                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}){<invalid>}.field = 42;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field = 42;
   core::print("DynamicSet (Unresolved)");
   invalid-expression "pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
   nonNullableClass1.unresolved = 42;
-                    ^^^^^^^^^^";
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved = 42;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/property_set.dart.weak.transformed.expect b/pkg/front_end/testcases/none/property_set.dart.weak.transformed.expect
new file mode 100644
index 0000000..b7f6716
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_set.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_set.dart:18:34: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                                          ^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:33: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                 ^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field = 42;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+//   nonNullableClass1.unresolved = 42;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(dynamic o) → dynamic {}
+}
+static method test(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceSet");
+  nonNullableClass1.{self::Class1::field} = 42;
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field} = 42;
+  const core::int set_instance_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+  const int set_instance_field = nonNullableClass1.field = 42;
+                                                         ^";
+  core::print("DynamicSet");
+  dyn{dynamic}.field = 42;
+  let final dynamic #t2 = dyn in #t2 == null ?{core::int?} null : #t2{dynamic}.field = 42;
+  const core::int set_dynamic_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+  const int set_dynamic_field = dyn.field = 42;
+                                          ^";
+  core::print("DynamicSet (Never)");
+  (let final Never #t3 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field = 42;
+  core::print("DynamicSet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field = 42;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field = 42;
+  core::print("DynamicSet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+  nonNullableClass1.unresolved = 42;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.expect
index 68d1353..ebbaed4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.expect
@@ -214,3 +214,5 @@
 static method bar3b<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
   return throw 42;
 static method main() → dynamic {}
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.transformed.expect
index 68d1353..ebbaed4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.strong.transformed.expect
@@ -214,3 +214,5 @@
 static method bar3b<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
   return throw 42;
 static method main() → dynamic {}
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.expect
index 68d1353..ebbaed4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.expect
@@ -214,3 +214,5 @@
 static method bar3b<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
   return throw 42;
 static method main() → dynamic {}
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.outline.expect
index 224c9fc..bde9db2 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.outline.expect
@@ -192,3 +192,5 @@
   ;
 static method main() → dynamic
   ;
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.transformed.expect
index 68d1353..ebbaed4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.transformed.expect
@@ -214,3 +214,5 @@
 static method bar3b<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
   return throw 42;
 static method main() → dynamic {}
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
index 221969e..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
@@ -36,3 +36,21 @@
   core::String a;
 }
 static method main() → dynamic {}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+
+constants  {
+  #C1 = 0
+  #C2 = null
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
index 221969e..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
@@ -36,3 +36,21 @@
   core::String a;
 }
 static method main() → dynamic {}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+
+constants  {
+  #C1 = 0
+  #C2 = null
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
index 221969e..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
@@ -36,3 +36,21 @@
   core::String a;
 }
 static method main() → dynamic {}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+
+constants  {
+  #C1 = 0
+  #C2 = null
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
index 9b82c3d..782f6eb 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
@@ -28,3 +28,15 @@
   ;
 static method main() → dynamic
   ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
index 221969e..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
@@ -36,3 +36,21 @@
   core::String a;
 }
 static method main() → dynamic {}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+
+constants  {
+  #C1 = 0
+  #C2 = null
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.expect
index 2da2661..cf0d7b6 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.expect
@@ -31,3 +31,5 @@
     : super core::Object::•()
     ;
 }
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.transformed.expect
index 2da2661..cf0d7b6 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.strong.transformed.expect
@@ -31,3 +31,5 @@
     : super core::Object::•()
     ;
 }
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.expect
index 2da2661..cf0d7b6 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.expect
@@ -31,3 +31,5 @@
     : super core::Object::•()
     ;
 }
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.outline.expect
index 9cbea69..250c92f 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.outline.expect
@@ -30,3 +30,5 @@
   synthetic constructor •() → self2::C<self2::C::Y>
     ;
 }
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.transformed.expect
index 2da2661..cf0d7b6 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.transformed.expect
@@ -31,3 +31,5 @@
     : super core::Object::•()
     ;
 }
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
index fb500ca..7169aca 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
@@ -21,12 +21,12 @@
 typedef AAliasNonNullable = opt::A;
 typedef AAliasNullable = opt::A?;
 static method test() → dynamic {
-  FutureOr<() → opt::A*>foLegacyNonNullable = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+  FutureOr<() → opt::A*>foLegacyNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
   FutureOr<() →? opt::A*>foLegacyNullable = null;
-  FutureOr<opt::A>foNonNullable = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
index aab83a3..33d8eb0 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
@@ -21,15 +21,15 @@
 typedef AAliasNonNullable = opt::A;
 typedef AAliasNullable = opt::A?;
 static method test() → dynamic {
-  FutureOr<() → opt::A*>foLegacyNonNullable = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+  FutureOr<() → opt::A*>foLegacyNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
-                                         ^" in let Null #t2 = null in #t2 == null ?{FutureOr<() → opt::A*>} #t2 as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*> : #t2{FutureOr<() → opt::A*>};
+                                         ^" in let Null #t1 = null in #t1 == null ?{FutureOr<() → opt::A*>} #t1 as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*> : #t1{FutureOr<() → opt::A*>};
   FutureOr<() →? opt::A*>foLegacyNullable = null;
-  FutureOr<opt::A>foNonNullable = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
-                                              ^" in let Null #t4 = null in #t4 == null ?{FutureOr<opt::A>} #t4 as{TypeError,ForNonNullableByDefault} FutureOr<opt::A> : #t4{FutureOr<opt::A>};
+                                              ^" in let Null #t2 = null in #t2 == null ?{FutureOr<opt::A>} #t2 as{TypeError,ForNonNullableByDefault} FutureOr<opt::A> : #t2{FutureOr<opt::A>};
   FutureOr<opt::A?>foNullable = null;
   FutureOr<opt::A?>foNonNullableNullable = null;
   FutureOr<opt::A?>foNullableNullable = null;
@@ -71,13 +71,3 @@
   FutureOr<opt::A*>* foNonNullable = null;
   FutureOr<opt::A*>* foNullable = null;
 }
-
-
-Extra constant evaluation status:
-Evaluated: EqualsNull @ org-dartlang-testcase:///issue41501.dart:13:42 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41501.dart:13:42 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41501.dart:13:42 -> NullConstant(null)
-Evaluated: EqualsNull @ org-dartlang-testcase:///issue41501.dart:15:47 -> BoolConstant(true)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41501.dart:15:47 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///issue41501.dart:15:47 -> NullConstant(null)
-Extra constant evaluation: evaluated: 14, effectively constant: 6
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
index a709e0b..1527b5e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
@@ -21,12 +21,12 @@
 typedef AAliasNonNullable = opt::A;
 typedef AAliasNullable = opt::A?;
 static method test() → dynamic {
-  FutureOr<() → opt::A*>foLegacyNonNullable = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+  FutureOr<() → opt::A*>foLegacyNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
   FutureOr<() →? opt::A*>foLegacyNullable = null;
-  FutureOr<opt::A>foNonNullable = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
index a75d478..09de8be 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
@@ -21,12 +21,12 @@
 typedef AAliasNonNullable = opt::A;
 typedef AAliasNullable = opt::A?;
 static method test() → dynamic {
-  FutureOr<() → opt::A*>foLegacyNonNullable = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+  FutureOr<() → opt::A*>foLegacyNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null;
   FutureOr<() →? opt::A*>foLegacyNullable = null;
-  FutureOr<opt::A>foNonNullable = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null;
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 435aedb..3df2a9b 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
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
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 b58ffcf..3df2a9b 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
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let Never #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
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 435aedb..3df2a9b 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
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
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 65b2862..978eeea 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
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
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 b58ffcf..3df2a9b 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
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let Never #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.expect
index e43a323..ada86f5 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.expect
@@ -21,3 +21,5 @@
     ;
 }
 static method main() → void {}
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.transformed.expect
index e43a323..ada86f5 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.strong.transformed.expect
@@ -21,3 +21,5 @@
     ;
 }
 static method main() → void {}
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.expect
index e43a323..ada86f5 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.expect
@@ -21,3 +21,5 @@
     ;
 }
 static method main() → void {}
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.outline.expect
index 19040d1..c6e3e9c 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.outline.expect
@@ -21,3 +21,5 @@
 }
 static method main() → void
   ;
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.transformed.expect
index e43a323..ada86f5 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.transformed.expect
@@ -21,3 +21,5 @@
     ;
 }
 static method main() → void {}
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
index 20cf2a0a..0d5fcd0 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.expect
@@ -29,3 +29,5 @@
   self::C<(self::C<dynamic>) → self::C<dynamic>> a = throw 42;
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
index 20cf2a0a..0d5fcd0 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.strong.transformed.expect
@@ -29,3 +29,5 @@
   self::C<(self::C<dynamic>) → self::C<dynamic>> a = throw 42;
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
index 20cf2a0a..0d5fcd0 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.expect
@@ -29,3 +29,5 @@
   self::C<(self::C<dynamic>) → self::C<dynamic>> a = throw 42;
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.outline.expect
index 2c7e28a..88c365f 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.outline.expect
@@ -12,3 +12,5 @@
   ;
 static method main() → dynamic
   ;
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
index 20cf2a0a..0d5fcd0 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.transformed.expect
@@ -29,3 +29,5 @@
   self::C<(self::C<dynamic>) → self::C<dynamic>> a = throw 42;
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
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 88129af..1d4c9d2 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
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    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*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
@@ -96,3 +96,15 @@
   new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  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>();
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 eab7fa2..1d4c9d2 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
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let <X extends core::Object? = dynamic>() → self::C<X%> #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    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*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let Never #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
@@ -96,3 +96,15 @@
   new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  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>();
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 88129af..1d4c9d2 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
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    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*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
@@ -96,3 +96,15 @@
   new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  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>();
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 5bcbed2..218a88b 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
@@ -12,7 +12,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     ;
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    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*/;
@@ -21,9 +21,21 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     ;
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic
   ;
 static method main() → dynamic
   ;
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  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>();
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 eab7fa2..1d4c9d2 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
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let <X extends core::Object? = dynamic>() → self::C<X%> #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    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*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let Never #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
@@ -96,3 +96,15 @@
   new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  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>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.expect
index 502ae56..0ed8715 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.expect
@@ -38,3 +38,7 @@
   self::C::foo<self::C<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.transformed.expect
index 502ae56..0ed8715 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.strong.transformed.expect
@@ -38,3 +38,7 @@
   self::C::foo<self::C<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.expect
index 502ae56..0ed8715 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.expect
@@ -38,3 +38,7 @@
   self::C::foo<self::C<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.outline.expect
index d911298..a91ccee 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.outline.expect
@@ -13,3 +13,7 @@
   ;
 static method main() → dynamic
   ;
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.transformed.expect
index 502ae56..0ed8715 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.transformed.expect
@@ -38,3 +38,7 @@
   self::C::foo<self::C<core::Object?>>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.expect
index d805d8c..1dd5191 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.expect
@@ -23,3 +23,5 @@
   new self::C::•<dynamic>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.transformed.expect
index d805d8c..1dd5191 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.strong.transformed.expect
@@ -23,3 +23,5 @@
   new self::C::•<dynamic>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.expect
index d805d8c..1dd5191 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.expect
@@ -23,3 +23,5 @@
   new self::C::•<dynamic>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.outline.expect
index 0b4358a..f5a9e7e 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.outline.expect
@@ -11,3 +11,5 @@
   ;
 static method main() → dynamic
   ;
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.transformed.expect
index d805d8c..1dd5191 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.transformed.expect
@@ -23,3 +23,5 @@
   new self::C::•<dynamic>();
 }
 static method main() → dynamic {}
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.expect
index 98796c8..f7eab09 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.expect
@@ -30,3 +30,5 @@
 static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic {
   new self2::C::•<dynamic>();
 }
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.transformed.expect
index 98796c8..f7eab09 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.strong.transformed.expect
@@ -30,3 +30,5 @@
 static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic {
   new self2::C::•<dynamic>();
 }
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.expect
index 98796c8..f7eab09 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.expect
@@ -30,3 +30,5 @@
 static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic {
   new self2::C::•<dynamic>();
 }
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.outline.expect
index ca7c9c2..8a85f74 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.outline.expect
@@ -18,3 +18,5 @@
 }
 static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic
   ;
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.transformed.expect
index 98796c8..f7eab09 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.transformed.expect
@@ -30,3 +30,5 @@
 static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic {
   new self2::C::•<dynamic>();
 }
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index a59e9fd..428a77b 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 const_functions/const_functions_const_factory: VerificationError
+constructor_tearoffs/lowering/invalid_redirect: VerificationError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized
 extension_types/simple_getter_resolution: ExpectationFileMismatchSerialized
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
index 9e8cbc2..e09a8ab 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
@@ -10,7 +10,7 @@
 //   print(" $x.);
 //        ^
 //
-// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
 //   print(" $x.);
 //            ^
 //
@@ -22,7 +22,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print(" ${invalid-expression "pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Getter not found: 'x'.
+  core::print(" ${invalid-expression "pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
   print(\" \$x.);
            ^"}.);\"");
 }
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
index 9e8cbc2..e09a8ab 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 //   print(" $x.);
 //        ^
 //
-// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
 //   print(" $x.);
 //            ^
 //
@@ -22,7 +22,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print(" ${invalid-expression "pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Getter not found: 'x'.
+  core::print(" ${invalid-expression "pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
   print(\" \$x.);
            ^"}.);\"");
 }
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 6c4e211..4ca626f 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
@@ -77,7 +77,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   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
@@ -93,7 +95,7 @@
   new self::A::•();
   new self::B::•();
   new self::C::•();
-  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:19:7: Error: Method not found: 'Missing'.
-  new D();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
 }
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 11d42be..5a0190f 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
@@ -75,7 +75,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   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
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 3915deb..4ca626f 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
@@ -77,7 +77,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let core::String* #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   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
@@ -93,7 +95,7 @@
   new self::A::•();
   new self::B::•();
   new self::C::•();
-  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:19:7: Error: Method not found: 'Missing'.
-  new D();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
 }
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
index 56e361b..7ff9ec5 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
@@ -16,7 +16,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   c();
-   ^";
+   ^" in (#C1){<unresolved>}.call();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
index 56e361b..7ff9ec5 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   c();
-   ^";
+   ^" in (#C1){<unresolved>}.call();
 }
 
 constants  {
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 e0f9879..900f8a7 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
@@ -78,11 +78,18 @@
     : super core::Object::•()
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   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
@@ -100,9 +107,14 @@
     : super self::A::internal()
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
@@ -111,10 +123,20 @@
 }
 static method main() → dynamic {
   new self::C::•<self::C3*>();
-  new self::C::•<self::C1*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   new self::C::•<self::C3*>();
-  new self::C::•<self::C2*>();
-  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:35:7: Error: Method not found: 'Missing'.
-  new A<C3>.c();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
 }
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 7dad5eb..12ffeef 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
@@ -74,11 +74,18 @@
   constructor internal() → self::A<self::A::T*>*
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   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
@@ -95,9 +102,14 @@
   constructor internal() → self::B<self::B::S*>*
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
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 93c8bd0..900f8a7 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
@@ -78,11 +78,18 @@
     : super core::Object::•()
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let <S extends core::Object* = dynamic>() →* self::B<S*>* #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let <S extends core::Object* = dynamic>() →* self::B<S*>* #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let core::String* #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   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
@@ -100,9 +107,14 @@
     : super self::A::internal()
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let Never #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let Never #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
@@ -111,10 +123,20 @@
 }
 static method main() → dynamic {
   new self::C::•<self::C3*>();
-  new self::C::•<self::C1*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   new self::C::•<self::C3*>();
-  new self::C::•<self::C2*>();
-  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:35:7: Error: Method not found: 'Missing'.
-  new A<C3>.c();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
index 0485f14..5147d08 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
@@ -12,7 +12,7 @@
 import "dart:math" as math;
 
 static method main() → dynamic {
-  let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
     #t1.{core::Object::toString}(){() →* core::String*};
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
index 0485f14..5147d08 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:math" as math;
 
 static method main() → dynamic {
-  let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
     #t1.{core::Object::toString}(){() →* core::String*};
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
index b75908e..8be752c 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
@@ -1,5 +1,5 @@
 // @dart = 2.9
 class C {
-  C< >(){}
+  C< >;
 }
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
index 9cae185..2849f6d 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
@@ -2,33 +2,27 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected a type, but got '}'.
+// }
+// ^
+//
 // pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected an identifier, but got '}'.
 // Try inserting an identifier before '}'.
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Constructors can't have type parameters.
-// Try removing the type parameters.
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
 //   C<
-//    ^^...
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:3: Error: A method declaration needs an explicit list of parameters.
-// Try adding a parameter list to the method declaration.
-//   C<
-//   ^
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected '{' before this.
-// }
-// ^
+//    ^
 //
 // pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected an identifier, but got '}'.
 // Try inserting an identifier before '}'.
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: Expected ';' after this.
+//   C<
+//    ^
 //
 // pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
@@ -40,8 +34,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
-    : super 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
@@ -58,5 +53,11 @@
  - 'Type' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
   C<
-   ^";
+   ^" in (#C1){<unresolved>}.<(invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: This couldn't be parsed.
+}
+^");
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C*)
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
index d9fcdaf..dcaeb52 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
@@ -2,30 +2,24 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected a type, but got '}'.
+// }
+// ^
+//
 // pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected an identifier, but got '}'.
 // Try inserting an identifier before '}'.
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Constructors can't have type parameters.
-// Try removing the type parameters.
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
 //   C<
-//    ^^...
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:3: Error: A method declaration needs an explicit list of parameters.
-// Try adding a parameter list to the method declaration.
-//   C<
-//   ^
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected '{' before this.
-// }
-// ^
+//    ^
 //
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  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
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
index 9cae185..2849f6d 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
@@ -2,33 +2,27 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected a type, but got '}'.
+// }
+// ^
+//
 // pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected an identifier, but got '}'.
 // Try inserting an identifier before '}'.
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Constructors can't have type parameters.
-// Try removing the type parameters.
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
 //   C<
-//    ^^...
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:6:3: Error: A method declaration needs an explicit list of parameters.
-// Try adding a parameter list to the method declaration.
-//   C<
-//   ^
-//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected '{' before this.
-// }
-// ^
+//    ^
 //
 // pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected an identifier, but got '}'.
 // Try inserting an identifier before '}'.
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: Expected ';' after this.
+//   C<
+//    ^
 //
 // pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
@@ -40,8 +34,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
-    : super 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
@@ -58,5 +53,11 @@
  - 'Type' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
   C<
-   ^";
+   ^" in (#C1){<unresolved>}.<(invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: This couldn't be parsed.
+}
+^");
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C*)
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
index 7774711..e288dc4 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 // @JS()
 //  ^^
 //
 import self as self;
 
-@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 @JS()
  ^^"
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
index feabb09..e0207cf 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 // @JS()
 //  ^^
 //
 import self as self;
 
-@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 @JS()
  ^^"
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
index 7774711..e288dc4 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
@@ -2,13 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 // @JS()
 //  ^^
 //
 import self as self;
 
-@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
 @JS()
  ^^"
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
index 27dc313..255d67d 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
@@ -18,4 +18,4 @@
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
 main() => a. - 5;
-             ^"{dynamic}.-(5);
+             ^"{<invalid>}.-(5);
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
index 27dc313..255d67d 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
@@ -18,4 +18,4 @@
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
 main() => a. - 5;
-             ^"{dynamic}.-(5);
+             ^"{<invalid>}.-(5);
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
index 238ce88..289c890 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
@@ -12,9 +12,9 @@
 //   }
 //   ^
 //
-// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected ';' after this.
-//   }
-//   ^
+// pkg/front_end/testcases/rasta/issue_000039.dart:9:15: Error: Expected ';' after this.
+//     this.a = x.
+//               ^
 //
 // pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
 // class B extends A {
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
index 238ce88..289c890 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
@@ -12,9 +12,9 @@
 //   }
 //   ^
 //
-// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected ';' after this.
-//   }
-//   ^
+// pkg/front_end/testcases/rasta/issue_000039.dart:9:15: Error: Expected ';' after this.
+//     this.a = x.
+//               ^
 //
 // pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
 // class B extends A {
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
index 63fc41c..2026340 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
@@ -22,7 +22,7 @@
   method test() → dynamic {
     self::use(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: This couldn't be parsed.
     use(+super);
-        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+        ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
index 63fc41c..2026340 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   method test() → dynamic {
     self::use(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: This couldn't be parsed.
     use(+super);
-        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+        ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
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 9513300..58f3e10 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -25,7 +25,7 @@
 //   C notEvenAConstructor(a) = h;
 //                              ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 // a b(c) = d;
 //          ^
 //
@@ -34,7 +34,7 @@
 //   C.missingFactoryKeyword() = C.constant;
 //                             ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Getter not found: 'constant'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
 //   C.missingFactoryKeyword() = C.constant;
 //                                 ^^^^^^^^
 //
@@ -74,13 +74,13 @@
   C.missingFactoryKeyword() = C.constant;
                               ^";
   static factory good() → self::C*
-    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" as{TypeError,ForDynamic} self::C*;
+                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic} 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
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method b(dynamic c) → invalid-type
-  return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
+  return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 a b(c) = d;
          ^";
 static method main() → dynamic {
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 f560daf..49eadbc 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
@@ -36,7 +36,7 @@
   constructor missingFactoryKeyword() → self::C*
     ;
   static factory good() → self::C*
-    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
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 186f22a..41ab0dd 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
@@ -25,7 +25,7 @@
 //   C notEvenAConstructor(a) = h;
 //                              ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 // a b(c) = d;
 //          ^
 //
@@ -34,7 +34,7 @@
 //   C.missingFactoryKeyword() = C.constant;
 //                             ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Getter not found: 'constant'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
 //   C.missingFactoryKeyword() = C.constant;
 //                                 ^^^^^^^^
 //
@@ -74,13 +74,13 @@
   C.missingFactoryKeyword() = C.constant;
                               ^";
   static factory good() → self::C*
-    let Never #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^";
+                             ^" in this{<unresolved>}.h;
   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
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method b(dynamic c) → invalid-type
-  return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
+  return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 a b(c) = d;
          ^";
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
index ab67342..4625b85 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
@@ -30,7 +30,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
  - 'Object' is from 'dart:core'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
 Change the type of the object being constructed or the context in which it is used.
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
index ab67342..4625b85 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
  - 'Object' is from 'dart:core'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
 Change the type of the object being constructed or the context in which it is used.
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 033c0fd..3f594b7 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -10,7 +10,7 @@
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
-    let dynamic #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int* {}
   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
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int* {
     return 1;
   }
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 7f34682..b498bf4 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
@@ -9,7 +9,7 @@
   constructor •() → self::A*
     ;
   static factory foo() → self::A*
-    let dynamic #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     ;
   static factory bar() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int*
     ;
 }
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 d34604a..3f594b7 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
@@ -10,7 +10,7 @@
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
-    let () →* self::C* #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int* {}
   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
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int* {
     return 1;
   }
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
index 9989711..ac6a230 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
@@ -12,10 +12,14 @@
 // main(arguments = [x]) {
 //                  ^
 //
-// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:19: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:19: Error: Undefined name 'x'.
 // main(arguments = [x]) {
 //                   ^
 //
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:18: Error: Non-constant list literal is not a constant expression.
+// main(arguments = [x]) {
+//                  ^
+//
 import self as self;
 
-static method main(dynamic arguments = invalid-expression "Non-constant list literal") → dynamic {}
+static method main(dynamic arguments = invalid-expression "Non-constant list literal is not a constant expression.") → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
index 9989711..ac6a230 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
@@ -12,10 +12,14 @@
 // main(arguments = [x]) {
 //                  ^
 //
-// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:19: Error: Getter not found: 'x'.
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:19: Error: Undefined name 'x'.
 // main(arguments = [x]) {
 //                   ^
 //
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:18: Error: Non-constant list literal is not a constant expression.
+// main(arguments = [x]) {
+//                  ^
+//
 import self as self;
 
-static method main(dynamic arguments = invalid-expression "Non-constant list literal") → dynamic {}
+static method main(dynamic arguments = invalid-expression "Non-constant list literal is not a constant expression.") → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
index 6547bf2..b83c501 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
@@ -23,11 +23,11 @@
 import "package:expect/expect.dart";
 
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
-  if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
+  if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" as{TypeError,ForDynamic} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError,ForDynamic} core::bool*)
+        ^")
     return b as{TypeError,ForDynamic} core::int*;
   return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
 }
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
index a26a0de..b83c501 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
@@ -23,11 +23,11 @@
 import "package:expect/expect.dart";
 
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
-  if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
+  if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError,ForDynamic} core::bool*)
+        ^")
     return b as{TypeError,ForDynamic} core::int*;
   return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
 }
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.expect b/pkg/front_end/testcases/rasta/static.dart.weak.expect
index e32deba4..245d8d6 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.expect
@@ -205,7 +205,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant++;
         ^^^^^^^^^^^^^^";
-    self::use(let final core::int* #t1 = #C1 in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
     self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
@@ -213,21 +213,21 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
-    self::use(let final () →* dynamic #t5 = #C2 in let final dynamic #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction++);
             ^^^^^^^^^^^^^^" in #t5);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter++;
         ^^^^^^^^^^^^";
-    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final invalid-type #t8 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter++);
             ^^^^^^^^^^^^" in #t7);
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter++;
-        ^^^^^^^^^^^^"{dynamic}.+(1);
-    self::use(let final dynamic #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
+        ^^^^^^^^^^^^"{<invalid>}.+(1);
+    self::use(let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter++);
-            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9{dynamic}.+(1) in #t9);
+            ^^^^^^^^^^^^" in let final invalid-type #t10 = self::Foo::staticSetter = #t9{<invalid>}.+(1) in #t9);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
     ++Foo.staticConstant;
           ^^^^^^^^^^^^^^";
@@ -250,26 +250,26 @@
               ^^^^^^^^^^^^");
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
     ++Foo.staticSetter;
-          ^^^^^^^^^^^^"{dynamic}.+(1);
+          ^^^^^^^^^^^^"{<invalid>}.+(1);
     self::use(self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
     use(++Foo.staticSetter);
-              ^^^^^^^^^^^^"{dynamic}.+(1));
+              ^^^^^^^^^^^^"{<invalid>}.+(1));
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticConstant();
-                      ^";
+                      ^" in (#C1){<unresolved>}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:54:27: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     use(Foo.staticConstant());
-                          ^");
+                          ^" in (#C1){<unresolved>}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:55:20: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticField();
-                   ^";
+                   ^" in self::Foo::staticField{<unresolved>}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:56:24: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     use(Foo.staticField());
-                       ^");
+                       ^" in self::Foo::staticField{<unresolved>}.call());
     self::Foo::staticFunction();
     self::use(self::Foo::staticFunction());
     self::Foo::staticGetter{dynamic}.call();
@@ -302,32 +302,32 @@
             ^^^^^^^^^^^^");
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+    (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
     self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
     self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
-    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+    (#C2) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
-    self::Foo::staticGetter == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+    self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter ??= 87;
         ^^^^^^^^^^^^" : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter ??= 87);
             ^^^^^^^^^^^^" : #t14);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter ??= 87;
-        ^^^^^^^^^^^^" == null ?{dynamic} self::Foo::staticSetter = 87 : null;
-    self::use(let final dynamic #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
+        ^^^^^^^^^^^^" == null ?{invalid-type} self::Foo::staticSetter = 87 : null;
+    self::use(let final invalid-type #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter ??= 87);
-            ^^^^^^^^^^^^" in #t15 == null ?{dynamic} self::Foo::staticSetter = 87 : #t15);
+            ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError* catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
index 6e667ff..831077b 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
@@ -205,7 +205,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant++;
         ^^^^^^^^^^^^^^";
-    self::use(let final core::int* #t1 = #C1 in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
     self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
@@ -213,21 +213,21 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
-    self::use(let final () →* dynamic #t5 = #C2 in let final dynamic #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction++);
             ^^^^^^^^^^^^^^" in #t5);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter++;
         ^^^^^^^^^^^^";
-    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final invalid-type #t8 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter++);
             ^^^^^^^^^^^^" in #t7);
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter++;
-        ^^^^^^^^^^^^"{dynamic}.+(1);
-    self::use(let final dynamic #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
+        ^^^^^^^^^^^^"{<invalid>}.+(1);
+    self::use(let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter++);
-            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9{dynamic}.+(1) in #t9);
+            ^^^^^^^^^^^^" in let final invalid-type #t10 = self::Foo::staticSetter = #t9{<invalid>}.+(1) in #t9);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
     ++Foo.staticConstant;
           ^^^^^^^^^^^^^^";
@@ -250,26 +250,26 @@
               ^^^^^^^^^^^^");
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
     ++Foo.staticSetter;
-          ^^^^^^^^^^^^"{dynamic}.+(1);
+          ^^^^^^^^^^^^"{<invalid>}.+(1);
     self::use(self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
     use(++Foo.staticSetter);
-              ^^^^^^^^^^^^"{dynamic}.+(1));
+              ^^^^^^^^^^^^"{<invalid>}.+(1));
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticConstant();
-                      ^";
+                      ^" in (#C1){<unresolved>}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:54:27: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     use(Foo.staticConstant());
-                          ^");
+                          ^" in (#C1){<unresolved>}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:55:20: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticField();
-                   ^";
+                   ^" in self::Foo::staticField{<unresolved>}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:56:24: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     use(Foo.staticField());
-                       ^");
+                       ^" in self::Foo::staticField{<unresolved>}.call());
     self::Foo::staticFunction();
     self::use(self::Foo::staticFunction());
     self::Foo::staticGetter{dynamic}.call();
@@ -302,32 +302,32 @@
             ^^^^^^^^^^^^");
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+    (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
     self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
     self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
-    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+    (#C2) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
-    self::Foo::staticGetter == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+    self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter ??= 87;
         ^^^^^^^^^^^^" : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter ??= 87);
             ^^^^^^^^^^^^" : #t14);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter ??= 87;
-        ^^^^^^^^^^^^" == null ?{dynamic} self::Foo::staticSetter = 87 : null;
-    self::use(let final dynamic #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
+        ^^^^^^^^^^^^" == null ?{invalid-type} self::Foo::staticSetter = 87 : null;
+    self::use(let final invalid-type #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter ??= 87);
-            ^^^^^^^^^^^^" in #t15 == null ?{dynamic} self::Foo::staticSetter = 87 : #t15);
+            ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError* catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.expect b/pkg/front_end/testcases/rasta/super.dart.weak.expect
index 2afaa67..e24c07d 100644
--- a/pkg/front_end/testcases/rasta/super.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.expect
@@ -406,13 +406,13 @@
     self::use(super.{self::A::unary-}());
     invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: This couldn't be parsed.
     +super;
-    ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+    ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     +super;
      ^^^^^");
     self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: This couldn't be parsed.
     use(+super);
-        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+        ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
@@ -467,19 +467,19 @@
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m++;
-           ^";
+           ^" in super.{self::A::m}{<unresolved>}.+(1);
     self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m++);
-               ^" in #t23);
+               ^" in #t23{<unresolved>}.+(1) in #t23);
     super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n++;
-           ^";
+           ^" in super.{self::A::n}{<unresolved>}.+(1);
     self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n++);
-               ^" in #t25);
+               ^" in #t25{<unresolved>}.+(1) in #t25);
     super.{self::A::a} = super.{self::A::a}{dynamic}.+(1);
     self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(1));
     super.{self::A::b} = super.{self::B::b}{dynamic}.+(1);
@@ -503,19 +503,19 @@
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.m;
-    ^";
+    ^" in super.{self::A::m}{<unresolved>}.+(1);
     self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(++super.m);
-        ^");
+        ^" in super.{self::A::m}{<unresolved>}.+(1));
     super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.n;
-    ^";
+    ^" in super.{self::A::n}{<unresolved>}.+(1);
     self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(++super.n);
-        ^");
+        ^" in super.{self::A::n}{<unresolved>}.+(1));
     super.{self::A::a}{dynamic}.call();
     self::use(super.{self::A::a}{dynamic}.call());
     super.{self::B::b}{dynamic}.call();
@@ -537,22 +537,22 @@
     super.{self::A::[]}(87){dynamic}.call();
     self::use(super.{self::A::[]}(87){dynamic}.call());
     super.{self::A::m}();
-    self::use(let final Never* #t33 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:146:15: Error: This expression has type 'void' and can't be used.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:146:15: Error: This expression has type 'void' and can't be used.
     use(super.m());
               ^" in super.{self::A::m}());
-    let final Never* #t34 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     super.m(87);
            ^" in super.{self::A::m}(87);
-    self::use(let final Never* #t35 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     use(super.m(87));
                ^" in super.{self::A::m}(87));
-    let final Never* #t36 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+    invalid-expression "pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     super.n(87);
            ^" in super.{self::A::n}(87);
-    self::use(let final Never* #t37 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
     use(super.n(87));
                ^" in super.{self::A::n}(87));
@@ -575,35 +575,35 @@
     super.{self::B::i} = 42;
     self::use(super.{self::B::i} = 42);
     super.{self::A::[]=}(87, 42);
-    self::use(let final core::int* #t38 = 87 in let final core::int* #t39 = 42 in let final void #t40 = super.{self::A::[]=}(#t38, #t39) in #t39);
+    self::use(let final core::int* #t33 = 87 in let final core::int* #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
     super.m = 42;
     self::use(super.m = 42);
     super.{self::A::n} = 42;
     self::use(super.{self::A::n} = 42);
     super.{self::A::a} == null ?{dynamic} super.{self::A::a} = 42 : null;
-    self::use(let final dynamic #t41 = super.{self::A::a} in #t41 == null ?{dynamic} super.{self::A::a} = 42 : #t41);
+    self::use(let final dynamic #t36 = super.{self::A::a} in #t36 == null ?{dynamic} super.{self::A::a} = 42 : #t36);
     super.{self::B::b} == null ?{dynamic} super.{self::A::b} = 42 : null;
-    self::use(let final dynamic #t42 = super.{self::B::b} in #t42 == null ?{dynamic} super.{self::A::b} = 42 : #t42);
+    self::use(let final dynamic #t37 = super.{self::B::b} in #t37 == null ?{dynamic} super.{self::A::b} = 42 : #t37);
     super.{self::A::c} == null ?{dynamic} super.{self::B::c} = 42 : null;
-    self::use(let final dynamic #t43 = super.{self::A::c} in #t43 == null ?{dynamic} super.{self::B::c} = 42 : #t43);
+    self::use(let final dynamic #t38 = super.{self::A::c} in #t38 == null ?{dynamic} super.{self::B::c} = 42 : #t38);
     super.{self::B::d} == null ?{dynamic} super.{self::A::d} = 42 : null;
-    self::use(let final dynamic #t44 = super.{self::B::d} in #t44 == null ?{dynamic} super.{self::A::d} = 42 : #t44);
+    self::use(let final dynamic #t39 = super.{self::B::d} in #t39 == null ?{dynamic} super.{self::A::d} = 42 : #t39);
     super.{self::A::e} == null ?{dynamic} super.e = 42 : null;
-    self::use(let final dynamic #t45 = super.{self::A::e} in #t45 == null ?{dynamic} super.e = 42 : #t45);
+    self::use(let final dynamic #t40 = super.{self::A::e} in #t40 == null ?{dynamic} super.e = 42 : #t40);
     super.{self::A::f} == null ?{dynamic} super.f = 42 : null;
-    self::use(let final dynamic #t46 = super.{self::A::f} in #t46 == null ?{dynamic} super.f = 42 : #t46);
+    self::use(let final dynamic #t41 = super.{self::A::f} in #t41 == null ?{dynamic} super.f = 42 : #t41);
     super.g == null ?{dynamic} super.{self::A::g} = 42 : null;
-    self::use(let final dynamic #t47 = super.g in #t47 == null ?{dynamic} super.{self::A::g} = 42 : #t47);
+    self::use(let final dynamic #t42 = super.g in #t42 == null ?{dynamic} super.{self::A::g} = 42 : #t42);
     super.{self::A::h} == null ?{dynamic} super.{self::A::h} = 42 : null;
-    self::use(let final dynamic #t48 = super.{self::A::h} in #t48 == null ?{dynamic} super.{self::A::h} = 42 : #t48);
+    self::use(let final dynamic #t43 = super.{self::A::h} in #t43 == null ?{dynamic} super.{self::A::h} = 42 : #t43);
     super.{self::A::i} == null ?{dynamic} super.{self::B::i} = 42 : null;
-    self::use(let final dynamic #t49 = super.{self::A::i} in #t49 == null ?{dynamic} super.{self::B::i} = 42 : #t49);
-    let final core::int* #t50 = 87 in super.{self::A::[]}(#t50) == null ?{dynamic} super.{self::A::[]=}(#t50, 42) : null;
-    self::use(let final core::int* #t51 = 87 in let final dynamic #t52 = super.{self::A::[]}(#t51) in #t52 == null ?{dynamic} let final core::int* #t53 = 42 in let final void #t54 = super.{self::A::[]=}(#t51, #t53) in #t53 : #t52);
+    self::use(let final dynamic #t44 = super.{self::A::i} in #t44 == null ?{dynamic} super.{self::B::i} = 42 : #t44);
+    let final core::int* #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
+    self::use(let final core::int* #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int* #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
     super.{self::A::m} == null ?{core::Object*} super.m = 42 : null;
-    self::use(let final () →* void #t55 = super.{self::A::m} in #t55 == null ?{core::Object*} super.m = 42 : #t55);
+    self::use(let final () →* void #t50 = super.{self::A::m} in #t50 == null ?{core::Object*} super.m = 42 : #t50);
     super.{self::A::n} == null ?{core::Object*} super.{self::A::n} = 42 : null;
-    self::use(let final () →* void #t56 = super.{self::A::n} in #t56 == null ?{core::Object*} super.{self::A::n} = 42 : #t56);
+    self::use(let final () →* void #t51 = super.{self::A::n} in #t51 == null ?{core::Object*} super.{self::A::n} = 42 : #t51);
     super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
     self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));
     super.{self::A::b} = super.{self::B::b}{dynamic}.+(42);
@@ -622,24 +622,24 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(42));
-    let final core::int* #t57 = 87 in super.{self::A::[]=}(#t57, super.{self::A::[]}(#t57){dynamic}.+(42));
-    self::use(let final core::int* #t58 = 87 in let final dynamic #t59 = super.{self::A::[]}(#t58){dynamic}.+(42) in let final void #t60 = super.{self::A::[]=}(#t58, #t59) in #t59);
+    let final core::int* #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
+    self::use(let final core::int* #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m += 42;
-            ^";
+            ^" in super.{self::A::m}{<unresolved>}.+(42);
     self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m += 42);
-                ^");
+                ^" in super.{self::A::m}{<unresolved>}.+(42));
     super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n += 42;
-            ^";
+            ^" in super.{self::A::n}{<unresolved>}.+(42);
     self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n += 42);
-                ^");
+                ^" in super.{self::A::n}{<unresolved>}.+(42));
     super.{self::A::a} = super.{self::A::a}{dynamic}.-(42);
     self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.-(42));
     super.{self::A::b} = super.{self::B::b}{dynamic}.-(42);
@@ -658,24 +658,24 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.-(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.-(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.-(42));
-    let final core::int* #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61){dynamic}.-(42));
-    self::use(let final core::int* #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62){dynamic}.-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
+    let final core::int* #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
+    self::use(let final core::int* #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     super.m -= 42;
-            ^";
+            ^" in super.{self::A::m}{<unresolved>}.-(42);
     self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     use(super.m -= 42);
-                ^");
+                ^" in super.{self::A::m}{<unresolved>}.-(42));
     super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     super.n -= 42;
-            ^";
+            ^" in super.{self::A::n}{<unresolved>}.-(42);
     self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     use(super.n -= 42);
-                ^");
+                ^" in super.{self::A::n}{<unresolved>}.-(42));
   }
 }
 static method use(dynamic x) → dynamic {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
index 4b8a87c..b3cd230 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Method not found: 'dynamic'.
+// pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
 //     dynamic();
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Method not found: 'dynamic'.
+// pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
 //     use(dynamic());
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Method not found: 'T'.
+// pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
 //     T();
 //     ^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Method not found: 'T'.
+// pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
 //     use(T());
 //         ^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Method not found: 'Func'.
+// pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
 //     Func();
 //     ^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Method not found: 'Func'.
+// pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
 //     use(Func());
 //         ^^^^
 //
@@ -301,22 +301,22 @@
     self::use(#C3);
     new self::C::•<dynamic>();
     self::use(new self::C::•<dynamic>());
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Method not found: 'dynamic'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
     dynamic();
     ^^^^^^^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Method not found: 'dynamic'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
     use(dynamic());
         ^^^^^^^");
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Method not found: 'T'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
     T();
     ^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Method not found: 'T'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
     use(T());
         ^");
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Method not found: 'Func'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
     Func();
     ^^^^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Method not found: 'Func'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
     use(Func());
         ^^^^");
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:29:5: Error: Can't assign to a type literal.
@@ -439,28 +439,28 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
     use(--Func);
           ^^^^");
-    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+    (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
-    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+    (#C2) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T* == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
-    (#C3) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+    (#C3) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
index 18048bd..2d68132 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Method not found: 'dynamic'.
+// pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
 //     dynamic();
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Method not found: 'dynamic'.
+// pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
 //     use(dynamic());
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Method not found: 'T'.
+// pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
 //     T();
 //     ^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Method not found: 'T'.
+// pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
 //     use(T());
 //         ^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Method not found: 'Func'.
+// pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
 //     Func();
 //     ^^^^
 //
-// pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Method not found: 'Func'.
+// pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
 //     use(Func());
 //         ^^^^
 //
@@ -301,22 +301,22 @@
     self::use(#C3);
     new self::C::•<dynamic>();
     self::use(new self::C::•<dynamic>());
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Method not found: 'dynamic'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
     dynamic();
     ^^^^^^^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Method not found: 'dynamic'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
     use(dynamic());
         ^^^^^^^");
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Method not found: 'T'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
     T();
     ^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Method not found: 'T'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
     use(T());
         ^");
-    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Method not found: 'Func'.
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
     Func();
     ^^^^";
-    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Method not found: 'Func'.
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
     use(Func());
         ^^^^");
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:29:5: Error: Can't assign to a type literal.
@@ -439,28 +439,28 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
     use(--Func);
           ^^^^");
-    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+    (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
-    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+    (#C2) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T* == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
-    (#C3) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+    (#C3) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
index 6892897..3020e18 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
@@ -10,7 +10,7 @@
 //   Foo ??= null;
 //   ^^^
 //
-// pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
+// pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
 //   Foo();
 //   ^^^
 //
@@ -23,10 +23,10 @@
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
   Foo = null;
   ^^^";
-  (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+  (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
   Foo ??= null;
   ^^^" : null;
-  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
+  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
   Foo();
   ^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
index 85363aa..fa1d089 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 //   Foo ??= null;
 //   ^^^
 //
-// pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
+// pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
 //   Foo();
 //   ^^^
 //
@@ -23,10 +23,10 @@
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
   Foo = null;
   ^^^";
-  (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+  (#C1) == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
   Foo ??= null;
   ^^^" : null;
-  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
+  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
   Foo();
   ^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
index bc52a62..39e56f4 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Method not found: 'Missing'.
+// pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
 //   new Missing();
 //       ^^^^^^^
 //
 import self as self;
 
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Method not found: 'Missing'.
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
   new Missing();
       ^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
index bc52a62..39e56f4 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
@@ -2,14 +2,14 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Method not found: 'Missing'.
+// pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
 //   new Missing();
 //       ^^^^^^^
 //
 import self as self;
 
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Method not found: 'Missing'.
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
   new Missing();
       ^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
index 9b5f481..fc47b33 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
@@ -9,7 +9,7 @@
 //   Foo(x, y);
 //   ^^^
 //
-// pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Method not found: 'Foo.notHere'.
+// pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
 //   new Foo.notHere();
 //           ^^^^^^^
 //
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
   new Foo();
          ^";
-  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Method not found: 'Foo.notHere'.
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
   new Foo.notHere();
           ^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
index 9b5f481..fc47b33 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
 //   Foo(x, y);
 //   ^^^
 //
-// pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Method not found: 'Foo.notHere'.
+// pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
 //   new Foo.notHere();
 //           ^^^^^^^
 //
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
   new Foo();
          ^";
-  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Method not found: 'Foo.notHere'.
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
   new Foo.notHere();
           ^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
index eda1e6f..1600ec3 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
@@ -45,7 +45,7 @@
 //       print(key);
 //             ^^^
 //
-// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
 //     print(key);
 //           ^^^
 //
@@ -74,7 +74,7 @@
 //   for (1 in arguments) {
 //        ^
 //
-// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
 //     print(key);
 //           ^^^
 //
@@ -98,12 +98,16 @@
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
     for (key in x) {
+         ^^^" in this{<unresolved>}.key = invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
+    for (key in x) {
          ^^^";
       core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
       print(key);
-            ^^^");
+            ^^^" in this{<unresolved>}.key);
     }
     for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Can't assign to a type literal.
@@ -138,7 +142,7 @@
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
       print(key);
-            ^^^");
+            ^^^" in this{<unresolved>}.key);
       }
     }
   }
@@ -159,7 +163,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
-    core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
+    core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
     print(key);
           ^^^");
   }
@@ -192,7 +196,7 @@
   for (1 in arguments) {
        ^";
       1;
-      core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
+      core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
     print(key);
           ^^^");
     }
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
index ce85d90..f07fe0b 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
 //       print(key);
 //             ^^^
 //
-// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
 //     print(key);
 //           ^^^
 //
@@ -74,7 +74,7 @@
 //   for (1 in arguments) {
 //        ^
 //
-// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
 //     print(key);
 //           ^^^
 //
@@ -102,12 +102,16 @@
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
     for (key in x) {
+         ^^^" in this{<unresolved>}.key = invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
+    for (key in x) {
          ^^^";
           core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
       print(key);
-            ^^^");
+            ^^^" in this{<unresolved>}.key);
         }
       }
     }
@@ -166,7 +170,7 @@
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
       print(key);
-            ^^^");
+            ^^^" in this{<unresolved>}.key);
           }
         }
       }
@@ -193,7 +197,7 @@
         invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
-        core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
+        core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
     print(key);
           ^^^");
       }
@@ -250,7 +254,7 @@
   for (1 in arguments) {
        ^";
           1;
-          core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
+          core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
     print(key);
           ^^^");
         }
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
index 85bcb06..8bd61ac 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
@@ -31,7 +31,7 @@
 //   on Exception catch (e) { }
 //                ^^^^^
 //
-// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:23: Error: Getter not found: 'e'.
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:23: Error: Undefined name 'e'.
 //   on Exception catch (e) { }
 //                       ^
 //
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
index 32136e8..382c715 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
@@ -25,7 +25,7 @@
 //   print('${eh[éh']}');
 //                 ^^^^
 //
-// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: 'éh'.
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name 'éh'.
 //   print('${eh[éh']}');
 //               ^^
 //
@@ -42,7 +42,7 @@
 
 static method main() → dynamic {
   core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
-  core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: '\u0233h'.
+  core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
   print('\${eh[\u0233h']}');
               ^^"){(core::Object*) →* core::String*}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
index 32136e8..382c715 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
 //   print('${eh[éh']}');
 //                 ^^^^
 //
-// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: 'éh'.
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name 'éh'.
 //   print('${eh[éh']}');
 //               ^^
 //
@@ -42,7 +42,7 @@
 
 static method main() → dynamic {
   core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
-  core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: '\u0233h'.
+  core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
   print('\${eh[\u0233h']}');
               ^^"){(core::Object*) →* core::String*}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
index 37906e0..990d69c 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
+// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Undefined name 'missing'.
 //   return missing;
 //          ^^^^^^^
 //
@@ -10,7 +10,7 @@
 //   return missing;
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Undefined name 'dummy'.
 // g() sync* => dummy;
 //              ^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
index fedb52d..38371ce 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
+// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Undefined name 'missing'.
 //   return missing;
 //          ^^^^^^^
 //
@@ -10,7 +10,7 @@
 //   return missing;
 //   ^
 //
-// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Undefined name 'dummy'.
 // g() sync* => dummy;
 //              ^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
index b47c12d..0c71c56 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
 //   for (int i = i;; false) {}
 //                ^
 //
@@ -17,11 +17,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
   for (int i = i;; false) {}
-               ^") as{TypeError,ForDynamic} core::int*; ; false) {
+               ^"; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
index 3f0ff7a..0c71c56 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
 //   for (int i = i;; false) {}
 //                ^
 //
@@ -17,9 +17,9 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
   for (int i = i;; false) {}
                ^"; ; false) {
   }
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
index eff9615..ca444a5 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
@@ -11,14 +11,14 @@
 //   🔛
 //   ^^
 //
-// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '🔛'.
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '🔛'.
 //   🔛
 //   ^^
 //
 import self as self;
 
 static method bad() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.
+  invalid-expression "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '\u55357\u56603'.
   \u55357\u56603
   ^^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
index eff9615..ca444a5 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
@@ -11,14 +11,14 @@
 //   🔛
 //   ^^
 //
-// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '🔛'.
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '🔛'.
 //   🔛
 //   ^^
 //
 import self as self;
 
 static method bad() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.
+  invalid-expression "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '\u55357\u56603'.
   \u55357\u56603
   ^^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
index 2c87a2a..af8ae54 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
@@ -6,9 +6,9 @@
 // typedef F = Map<String, dynamic> Function();
 // ^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+//           ^
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
 // typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
index 0528f74..d0b75ac 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
@@ -6,9 +6,9 @@
 // typedef F = Map<String, dynamic> Function();
 // ^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+//           ^
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
 // typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
index 2c87a2a..af8ae54 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
 // typedef F = Map<String, dynamic> Function();
 // ^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+//           ^
 //
 // pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
 // typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
index 962f180..60fc8d2 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
@@ -24,9 +24,9 @@
 static method bad() → dynamic {
   for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
-                  ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+                  ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^"{dynamic}.>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
index 05cce7d..60fc8d2 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   for (int i = 0, i > 10; i++) {}
                   ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^"{dynamic}.>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
index 7170828..ec82b98 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
@@ -25,7 +25,7 @@
 static method test2() → core::int* {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
-           ^" as{TypeError,ForDynamic} core::int*;
+           ^";
   self::i;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
index cdeea07..bc17959 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
@@ -23,7 +23,7 @@
 //                 ^
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // type T = Map<A, B>
 //             ^
 //
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
index cdeea07..bc17959 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
 //                 ^
 //
 // pkg/front_end/testcases/regress/issue_31188.dart:7: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 // type T = Map<A, B>
 //             ^
 //
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart b/pkg/front_end/testcases/regress/issue_31198.dart
index e0adf99..06128f9 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart
+++ b/pkg/front_end/testcases/regress/issue_31198.dart
@@ -6,6 +6,8 @@
 
 class B extends A {
   B(): super().foo() {}
+  B.named1(): super().super() {}
+  B.named2(): super().() {}
 }
 
 bad() {
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
index 1059c9e..aa17508 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
@@ -2,6 +2,8 @@
 abstract class A {}
 class B extends A {
   B(): super().foo() {}
+  B.named1(): super().super() {}
+  B.named2(): super().() {}
 }
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
index 3bc5419..ecfe034 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   B.named2(): super().() {}
+//                        ^
+//
 // pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
 // To delegate a constructor to a super constructor, put the super call as an initializer.
 //   B(): super().foo() {}
@@ -11,6 +16,19 @@
 //   B(): super().foo() {}
 //                ^
 //
+// pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+//   B.named1(): super().super() {}
+//                       ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   B.named2(): super().() {}
+//                       ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an initializer.
+//   B.named2(): super().() {}
+//                       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -35,6 +53,15 @@
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super().foo() {}
        ^"{dynamic}.foo() {}
+  constructor named1() → self::B*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+  B.named1(): super().super() {}
+                      ^^^^^" {}
+  constructor named2() → self::B*
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  B.named2(): super().() {}
+                      ^" {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
index 60bee53..e898940 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
@@ -1,4 +1,12 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   B.named2(): super().() {}
+//                        ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -19,6 +27,10 @@
 class B extends self::A {
   constructor •() → self::B*
     ;
+  constructor named1() → self::B*
+    ;
+  constructor named2() → self::B*
+    ;
 }
 static method bad() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
index 3bc5419..ecfe034 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
@@ -2,6 +2,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   B.named2(): super().() {}
+//                        ^
+//
 // pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
 // To delegate a constructor to a super constructor, put the super call as an initializer.
 //   B(): super().foo() {}
@@ -11,6 +16,19 @@
 //   B(): super().foo() {}
 //                ^
 //
+// pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+//   B.named1(): super().super() {}
+//                       ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   B.named2(): super().() {}
+//                       ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an initializer.
+//   B.named2(): super().() {}
+//                       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -35,6 +53,15 @@
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super().foo() {}
        ^"{dynamic}.foo() {}
+  constructor named1() → self::B*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+  B.named1(): super().super() {}
+                      ^^^^^" {}
+  constructor named2() → self::B*
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  B.named2(): super().() {}
+                      ^" {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
index 2d8b859..c1f0dcb 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
@@ -39,7 +39,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
   new A().foo();
              ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
   new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect
new file mode 100644
index 0000000..c1f0dcb
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect
@@ -0,0 +1,52 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   new A.foo(1, 2);
+//            ^
+// pkg/front_end/testcases/regress/issue_31299.dart:10:3: Context: Found this candidate, but the arguments don't match.
+//   A.foo() : m = 2;
+//   ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+//   new A().foo();
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* m;
+  constructor •() → self::A*
+    : self::A::m = 1, super core::Object::•()
+    ;
+  constructor foo() → self::A*
+    : self::A::m = 2, super core::Object::•()
+    ;
+  method foo(core::int* a, core::int* b) → core::int*
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+  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 test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+  new A().foo();
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
+  new self::A::foo();
+  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
+Try removing the extra positional arguments.
+  new A.foo(1, 2);
+           ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
index 36cb030..660b650 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
@@ -79,7 +79,7 @@
       ^";
   self::Foo::foo<core::int*>(42);
   self::Foo* f = new self::Foo::•();
-  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
   f.bar<double, double>(42.42);
     ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
   f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect
new file mode 100644
index 0000000..660b650
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+//   foo<String, String>("hello world");
+//   ^
+// pkg/front_end/testcases/regress/issue_32972.dart:5:6: Context: Found this candidate, but the arguments don't match.
+// void foo<X>(X i) {
+//      ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+//   Foo.foo<int, int>(42);
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:10:10: Context: Found this candidate, but the arguments don't match.
+//   static foo<X>(X i) {
+//          ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+//   new Bar<String>();
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:19:7: Context: The class 'Bar' has a constructor that takes no arguments.
+// class Bar<X, Y> {}
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+//   f.bar<double, double>(42.42);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic {
+    core::print(i);
+  }
+  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic {
+    core::print(i);
+  }
+  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 Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+    : 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 foo<X extends core::Object* = dynamic>(self::foo::X* i) → void {
+  core::print(i);
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+  foo<String, String>(\"hello world\");
+  ^";
+  self::foo<core::String*>("hello world");
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+  Foo.foo<int, int>(42);
+      ^";
+  self::Foo::foo<core::int*>(42);
+  self::Foo* f = new self::Foo::•();
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+  f.bar<double, double>(42.42);
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
+  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+  new Bar<String>();
+      ^";
+  new self::Bar::•<core::String*, core::String*>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
index 908c70d..0f3ef8d 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   var x = new ExistingClass.nonExistingConstructor();
 //                             ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
 //   x = new ExistingClass();
 //           ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
 //   x = new ExistingClass<String>();
 //           ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   x = new ExistingClass<String>.nonExistingConstructor();
 //                                 ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   x = new ExistingClass<String, String>.nonExistingConstructor();
 //                                         ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
 //   x = new NonExistingClass();
 //           ^^^^^^^^^^^^^^^^
 //
@@ -45,22 +45,22 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  dynamic x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   var x = new ExistingClass.nonExistingConstructor();
                             ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
   x = new ExistingClass();
           ^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
   x = new ExistingClass<String>();
           ^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   x = new ExistingClass<String>.nonExistingConstructor();
                                 ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   x = new ExistingClass<String, String>.nonExistingConstructor();
                                         ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
   x = new NonExistingClass();
           ^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
index 908c70d..0f3ef8d 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   var x = new ExistingClass.nonExistingConstructor();
 //                             ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
 //   x = new ExistingClass();
 //           ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
 //   x = new ExistingClass<String>();
 //           ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   x = new ExistingClass<String>.nonExistingConstructor();
 //                                 ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
 //   x = new ExistingClass<String, String>.nonExistingConstructor();
 //                                         ^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
+// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
 //   x = new NonExistingClass();
 //           ^^^^^^^^^^^^^^^^
 //
@@ -45,22 +45,22 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  dynamic x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   var x = new ExistingClass.nonExistingConstructor();
                             ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
   x = new ExistingClass();
           ^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
   x = new ExistingClass<String>();
           ^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   x = new ExistingClass<String>.nonExistingConstructor();
                                 ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
   x = new ExistingClass<String, String>.nonExistingConstructor();
                                         ^^^^^^^^^^^^^^^^^^^^^^";
-  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
   x = new NonExistingClass();
           ^^^^^^^^^^^^^^^^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
index c8ed962..2a92ec9 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
@@ -59,7 +59,7 @@
  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
-    ^";
+    ^" in c{<unresolved>}.C = 5;
   self::D* d = new self::D::•();
   d.{self::D::D} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
index c8ed962..2a92ec9 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
@@ -59,7 +59,7 @@
  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
-    ^";
+    ^" in c{<unresolved>}.C = 5;
   self::D* d = new self::D::•();
   d.{self::D::D} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
index 25ed5db..67d25ff 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
@@ -2,103 +2,103 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c1 = C.bar<int>();
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:20: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   var c3 = C<String>.bar<int>();
 //             ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c3 = C<String>.bar<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c4 = new C<String>.bar<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d1 = D.foo<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:29: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   const d3 = D<String>.foo<int>();
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d3 = D<String>.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d4 = const D<String>.foo<int>();
 //                              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e1 = p.E.bar<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:38: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e3 = p.E<String>.bar<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e4 = new p.E<String>.bar<int>();
 //                            ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f1 = p.F.foo<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f3 = p.F<String>.foo<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f4 = const p.F<String>.foo<int>();
 //                                ^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
index 25ed5db..67d25ff 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
@@ -2,103 +2,103 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c1 = C.bar<int>();
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:20: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   var c3 = C<String>.bar<int>();
 //             ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c3 = C<String>.bar<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var c4 = new C<String>.bar<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d1 = D.foo<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:29: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   const d3 = D<String>.foo<int>();
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d3 = D<String>.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const d4 = const D<String>.foo<int>();
 //                              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e1 = p.E.bar<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:38: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.14 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e3 = p.E<String>.bar<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   var e4 = new p.E<String>.bar<int>();
 //                            ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f1 = p.F.foo<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' 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'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f3 = p.F<String>.foo<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments on the constructor name.
-// Try to place the type arguments on the class name.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
 //   const f4 = const p.F<String>.foo<int>();
 //                                ^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
index 5f2bf3e..201e0fa 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
@@ -136,19 +136,19 @@
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+     ^" in c2{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
-            ^");
+            ^" in c2{<unresolved>}.c);
   self::C3* c3 = new self::C3::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+     ^" in c3{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
-            ^");
+            ^" in c3{<unresolved>}.c);
 }
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
index 5f2bf3e..201e0fa 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
@@ -136,19 +136,19 @@
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+     ^" in c2{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
-            ^");
+            ^" in c2{<unresolved>}.c);
   self::C3* c3 = new self::C3::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+     ^" in c3{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
-            ^");
+            ^" in c3{<unresolved>}.c);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
index 3a8e95f..cab6aea 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
   method bad() → self::A* {
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
                         ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
index fdaaf0b..cab6aea 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
   method bad() → self::A* {
-    return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
                         ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
@@ -32,8 +32,3 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
-
-
-Extra constant evaluation status:
-Evaluated: Not @ org-dartlang-testcase:///issue_35220.dart:6:25 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 3, effectively constant: 1
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 c62b784..89937c2 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
@@ -35,7 +35,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   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
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 3c59d21..e164c58 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
@@ -31,7 +31,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   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
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 a6ad0e6..89937c2 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
@@ -35,7 +35,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let core::String* #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   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
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 3552933..27e321c 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
@@ -19,7 +19,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   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
@@ -49,5 +49,5 @@
 static method main() → dynamic {
   self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
-            ^" as{TypeError,ForDynamic} self::X*;
+            ^";
 }
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 474004e..5198fda 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
@@ -15,7 +15,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   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
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 e341499..27e321c 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
@@ -19,7 +19,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let Never #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   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
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 698e95b..6e380a7 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
@@ -22,7 +22,7 @@
     : super self::C::•()
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    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];
@@ -30,7 +30,9 @@
     : super core::Object::•()
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let dynamic #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   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
@@ -43,7 +45,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:17:7: Error: Method not found: 'B.foo'.
-  new C.bar();
-      ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
 }
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 7f77682..b64319b 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
@@ -21,14 +21,16 @@
   constructor •() → self::B<self::B::T*>*
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    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];
   constructor •() → self::C<self::C::K*>*
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let dynamic #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   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
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 68f6e8a..6e380a7 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
@@ -22,7 +22,7 @@
     : super self::C::•()
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let Never #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    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];
@@ -30,7 +30,9 @@
     : super core::Object::•()
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let core::String* #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   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
@@ -43,7 +45,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:17:7: Error: Method not found: 'B.foo'.
-  new C.bar();
-      ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
index c7801f6..6b4145e 100644
--- a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
@@ -24,9 +24,9 @@
 // M("${)=
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected ';' after this.
 // M("${)=
-//        ^...
+//       ^
 //
 // pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Unexpected token ''.
 // M("${)=
diff --git a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
index c7801f6..6b4145e 100644
--- a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
@@ -24,9 +24,9 @@
 // M("${)=
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected ';' after this.
 // M("${)=
-//        ^...
+//       ^
 //
 // pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Unexpected token ''.
 // M("${)=
diff --git a/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.expect
index baaeba50..0ebcc72 100644
--- a/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.expect
@@ -14,7 +14,7 @@
 // "";
 //    ^
 //
-// pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Getter not found: 'hello'.
+// pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
 // "";/*æ*/ hello; /*æ*/
 //           ^^^^^
 //
@@ -28,7 +28,7 @@
   "A";
   "\u65279";
   "\u65279";
-  invalid-expression "pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Getter not found: 'hello'.
+  invalid-expression "pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
 \"\u65279\";/*\u0230*/ hello; /*\u0230*/
           ^^^^^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.transformed.expect
index baaeba50..0ebcc72 100644
--- a/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 // "";
 //    ^
 //
-// pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Getter not found: 'hello'.
+// pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
 // "";/*æ*/ hello; /*æ*/
 //           ^^^^^
 //
@@ -28,7 +28,7 @@
   "A";
   "\u65279";
   "\u65279";
-  invalid-expression "pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Getter not found: 'hello'.
+  invalid-expression "pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
 \"\u65279\";/*\u0230*/ hello; /*\u0230*/
           ^^^^^";
 }
diff --git a/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.expect b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.expect
index 459497a..bfc33bf 100644
--- a/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.expect
Binary files differ
diff --git a/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.transformed.expect
index 459497a..bfc33bf 100644
--- a/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.transformed.expect
Binary files differ
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
index f2e772a..2d633a8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
@@ -21,7 +21,7 @@
     ;
   method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
   method g1<generic-covariant-impl U extends self::C::T*>() → void {
-    this.{self::C::f}<self::C::g1::U*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
               ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
   }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
index f2e772a..2d633a8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
     ;
   method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
   method g1<generic-covariant-impl U extends self::C::T*>() → void {
-    this.{self::C::f}<self::C::g1::U*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
               ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
   }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
index 378a300..edcb17e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
@@ -80,15 +80,15 @@
   return 2;
 static method main() → void {
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
-  let final self::D* #t1 = d in #t1.{self::D::value} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
                                              ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
-  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}{(core::int*) →* core::int*}(#t4){(core::int*) →* core::int*}, 1);
+  self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
-    let final self::D* #t5 = d in #t5.{self::D::value} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t5.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
index 92acd28..bafb1cc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
@@ -80,15 +80,15 @@
   return 2;
 static method main() → void {
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
-  let final self::D* #t1 = d in #t1.{self::D::value} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
                                              ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
-  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}{(core::int*) →* core::int*}(#t4){(core::int*) →* core::int*}, 1);
+  self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
-    let final self::D* #t5 = d in #t5.{self::D::value} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t5.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
@@ -100,4 +100,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:21 -> IntConstant(0)
-Extra constant evaluation: evaluated: 58, effectively constant: 1
+Extra constant evaluation: evaluated: 46, effectively constant: 1
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
index 5bf031a..5ce91ef 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
@@ -62,21 +62,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  let final self::C<core::num*>* #t5 = c in #t5.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8 == null ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
+                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
index 5bf031a..5ce91ef 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
@@ -62,21 +62,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  let final self::C<core::num*>* #t5 = c in #t5.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8 == null ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
+                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
index 075b356..d565d03 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
@@ -60,15 +60,15 @@
   core::Iterable<core::int*>* i = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
   } =>#t2;
-  col::LinkedHashSet<core::int*>* lhs = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
   LinkedHashSet<int> lhs = {};
                            ^" in block {
-    final core::Set<dynamic>* #t4 = col::LinkedHashSet::•<dynamic>();
-  } =>#t4;
-  col::LinkedHashMap<core::int*, core::bool*>* lhm = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3;
+  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
@@ -89,24 +89,24 @@
   return <core::int*, core::bool*>{};
 static method setfun() → asy::Future<core::Set<core::int*>*>* async 
   return block {
-    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
-  } =>#t6;
+    final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
+  } =>#t4;
 static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async 
   return block {
-    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-  } =>#t7;
+    final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
+  } =>#t5;
 static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async 
-  return let final Never* #t8 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
 Future<LinkedHashSet<int>> lhsfun() async => {};
                                              ^" in block {
-    final core::Set<dynamic>* #t9 = col::LinkedHashSet::•<dynamic>();
-  } =>#t9;
+    final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
+  } =>#t6;
 static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async 
-  return let final Never* #t10 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
@@ -117,22 +117,22 @@
   return <core::int*, core::bool*>{};
 static method setfun2() → FutureOr<core::Set<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t11 = col::LinkedHashSet::•<core::int*>();
-  } =>#t11;
+    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
+  } =>#t7;
 static method iterablefun2() → FutureOr<core::Iterable<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-  } =>#t12;
+    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
+  } =>#t8;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
-  return let final Never* #t13 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
                                           ^" in ( block {
-    final core::Set<dynamic>* #t14 = col::LinkedHashSet::•<dynamic>();
-  } =>#t14) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
+    final core::Set<dynamic>* #t9 = col::LinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
-  return let final Never* #t15 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
index 49295eb..ee407a3 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
@@ -73,39 +73,39 @@
         core::Iterable<core::int*>* i = block {
           final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
         } =>#t2;
-        col::LinkedHashSet<core::int*>* lhs = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+        col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
   LinkedHashSet<int> lhs = {};
                            ^" in block {
-          final core::Set<dynamic>* #t4 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t4;
-        col::LinkedHashMap<core::int*, core::bool*>* lhm = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+          final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+        } =>#t3;
+        col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
   LinkedHashMap<int, bool> lhm = {};
                                  ^" in <dynamic, dynamic>{};
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error, :async_op) in null;
         core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error, :async_op) in null;
         core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error, :async_op) in null;
         core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error, :async_op) in null;
         col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error, :async_op) in null;
         col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error, :async_op) in null;
         core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error, :async_op) in null;
         core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error, :async_op) in null;
         core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error, :async_op) in null;
         col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t15 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error, :async_op) in null;
         col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -160,8 +160,8 @@
       #L3:
       {
         :return_value = block {
-          final core::Set<core::int*>* #t16 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t16;
+          final core::Set<core::int*>* #t14 = new col::_CompactLinkedHashSet::•<core::int*>();
+        } =>#t14;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -189,8 +189,8 @@
       #L4:
       {
         :return_value = block {
-          final core::Set<core::int*>* #t17 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t17;
+          final core::Set<core::int*>* #t15 = new col::_CompactLinkedHashSet::•<core::int*>();
+        } =>#t15;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -217,15 +217,15 @@
     try {
       #L5:
       {
-        :return_value = let final Never* #t18 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
 Future<LinkedHashSet<int>> lhsfun() async => {};
                                              ^" in block {
-          final core::Set<dynamic>* #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t19;
+          final core::Set<dynamic>* #t16 = new col::_CompactLinkedHashSet::•<dynamic>();
+        } =>#t16;
         break #L5;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -252,7 +252,7 @@
     try {
       #L6:
       {
-        :return_value = let final Never* #t20 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
@@ -277,22 +277,22 @@
   return <core::int*, core::bool*>{};
 static method setfun2() → FutureOr<core::Set<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t21 = new col::_CompactLinkedHashSet::•<core::int*>();
-  } =>#t21;
+    final core::Set<core::int*>* #t17 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t17;
 static method iterablefun2() → FutureOr<core::Iterable<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t22 = new col::_CompactLinkedHashSet::•<core::int*>();
-  } =>#t22;
+    final core::Set<core::int*>* #t18 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t18;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
-  return let final Never* #t23 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
                                           ^" in ( block {
-    final core::Set<dynamic>* #t24 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t24) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
+    final core::Set<dynamic>* #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t19) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
-  return let final Never* #t25 = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 2518fb5..47b80dd 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -9,9 +9,7 @@
 dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
 
 constructor_tearoffs/call_instantiation: TypeCheckError
-constructor_tearoffs/const_tear_off: RuntimeError
-constructor_tearoffs/redirecting_constructors: RuntimeError
-constructor_tearoffs/redirecting_factory_tear_off: RuntimeError
+constructor_tearoffs/lowering/invalid_redirect: VerificationError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
@@ -23,17 +21,8 @@
 late_lowering/covariant_late_field: TypeCheckError
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
-nnbd/issue42546: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
-nnbd/nullable_object_access: TypeCheckError
-nnbd/nullable_receiver: TypeCheckError
-nnbd/potentially_nullable_access: TypeCheckError
-none/equals: TypeCheckError
-none/method_invocation: TypeCheckError
-none/operator: TypeCheckError
-none/property_get: TypeCheckError
-none/property_set: TypeCheckError
 value_class/copy_with_call_sites: RuntimeError # Expected
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 7ea4ce0..9093936 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -7,9 +7,7 @@
 # Kernel files are produced by compiling Dart code via Fasta.
 
 constructor_tearoffs/call_instantiation: TypeCheckError
-constructor_tearoffs/const_tear_off: RuntimeError
-constructor_tearoffs/redirecting_constructors: RuntimeError
-constructor_tearoffs/redirecting_factory_tear_off: RuntimeError
+constructor_tearoffs/lowering/invalid_redirect: VerificationError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
@@ -29,8 +27,7 @@
 general/bounded_implicit_instantiation: TypeCheckError
 general/bug30695: TypeCheckError
 general/bug31124: RuntimeError
-general/call: TypeCheckError
-general/candidate_found: TypeCheckError
+general/call: RuntimeError
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError
 general/covariant_field: TypeCheckError
@@ -87,13 +84,13 @@
 general/issue41210b/issue41210.no_link: TypeCheckError
 general/issue41210b/issue41210: TypeCheckError
 general/issue44733: TypeCheckError
-general/issue45204: TypeCheckError
+general/issue_46886: RuntimeError
 general/micro: RuntimeError
 general/mixin_application_override: TypeCheckError
 general/mixin_constructors_with_default_values: RuntimeError
 general/mixin_covariant2: RuntimeError
 general/operator_method_not_found: RuntimeError
-general/optional: TypeCheckError
+general/optional: RuntimeError
 general/override_check_accessor_after_inference: TypeCheckError # Issue #31620
 general/override_check_accessor_basic: TypeCheckError # Issue #31620
 general/override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
@@ -101,6 +98,7 @@
 general/override_check_basic: TypeCheckError # Issue #31620
 general/override_check_with_covariant_modifier: TypeCheckError # Issue #31620
 general/override_setter_with_field: TypeCheckError
+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/type_parameter_type_named_int: RuntimeError
@@ -130,17 +128,11 @@
 inference_new/infer_assign_to_index_super_upwards: TypeCheckError
 inference_new/infer_assign_to_index_this_upwards: TypeCheckError
 inference_new/infer_assign_to_index_upwards: TypeCheckError
-inference_new/infer_assign_to_property_custom: TypeCheckError
-inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
 late_lowering/covariant_late_field: TypeCheckError
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
-nnbd/issue42546: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
-nnbd/nullable_object_access: TypeCheckError
-nnbd/nullable_receiver: TypeCheckError
-nnbd/potentially_nullable_access: TypeCheckError
 nnbd_mixed/bad_mixins: TypeCheckError
 nnbd_mixed/covariant_from_opt_in: TypeCheckError
 nnbd_mixed/hierarchy/conflict: TypeCheckError
@@ -149,20 +141,12 @@
 nnbd_mixed/hierarchy/forwarding_semi_stub_method: TypeCheckError
 nnbd_mixed/hierarchy/forwarding_semi_stub_setter: TypeCheckError
 nnbd_mixed/hierarchy/getter_setter: TypeCheckError
-nnbd_mixed/hierarchy/in_dill_out_in/in_out_in: TypeCheckError
-nnbd_mixed/hierarchy/in_out_dill_in/in_out_in: TypeCheckError
-nnbd_mixed/hierarchy/in_out_in: TypeCheckError
 nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
 nnbd_mixed/hierarchy/override: TypeCheckError
 nnbd_mixed/inheritance_from_opt_in: TypeCheckError
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
-none/equals: TypeCheckError
-none/method_invocation: TypeCheckError
-none/operator: TypeCheckError
-none/property_get: TypeCheckError
-none/property_set: TypeCheckError
 rasta/abstract_constructor: RuntimeError
 rasta/bad_constructor_redirection: RuntimeError
 rasta/bad_continue: RuntimeError
@@ -212,8 +196,7 @@
 regress/issue_29982: RuntimeError
 regress/issue_30836: RuntimeError
 regress/issue_31180: TypeCheckError
-regress/issue_31299: TypeCheckError
-regress/issue_32972: TypeCheckError
+regress/issue_32972: RuntimeError
 regress/issue_33452: RuntimeError
 regress/issue_34225: RuntimeError
 regress/issue_34563: RuntimeError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index ed0e7e4..c24938e 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -23,29 +23,7 @@
 const_functions/const_functions_const_ctor: FormatterCrash
 const_functions/const_functions_const_ctor_error: FormatterCrash
 const_functions/const_functions_const_factory: FormatterCrash
-constructor_tearoffs/call_instantiation: FormatterCrash
-constructor_tearoffs/const_tear_off: FormatterCrash
-constructor_tearoffs/dynamic_explicit_instantiation: FormatterCrash
-constructor_tearoffs/explicit_instantiation_errors: FormatterCrash
-constructor_tearoffs/explicit_new_as_unnamed: FormatterCrash
-constructor_tearoffs/generic_tearoff_with_context: FormatterCrash
-constructor_tearoffs/generic_tearoff_without_context: FormatterCrash
-constructor_tearoffs/identical_instantiated_function_tearoffs: FormatterCrash
-constructor_tearoffs/inferred_constructor_tear_off: FormatterCrash
-constructor_tearoffs/inferred_non_proper_rename: FormatterCrash
-constructor_tearoffs/instantiation: FormatterCrash
-constructor_tearoffs/lowering/inferred_constructor_tear_off: FormatterCrash
-constructor_tearoffs/lowering/inferred_non_proper_rename: FormatterCrash
-constructor_tearoffs/lowering/inferred_tear_off: FormatterCrash
-constructor_tearoffs/lowering/typedef_from_dill/main: FormatterCrash
-constructor_tearoffs/lowering/typedef_identical: FormatterCrash
-constructor_tearoffs/nongeneric_tearoff_with_context: FormatterCrash
-constructor_tearoffs/nongeneric_tearoff_without_context: FormatterCrash
-constructor_tearoffs/redirecting_constructors: FormatterCrash
-constructor_tearoffs/simple_instantiated_type_literals: FormatterCrash
-constructor_tearoffs/simple_proper_rename_identity: FormatterCrash
-constructor_tearoffs/typedef_tearoffs: FormatterCrash
-constructor_tearoffs/unnamed_constructor: FormatterCrash
+constructor_tearoffs/issue47075: FormatterCrash
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
 extension_types/simple_getter_resolution: FormatterCrash
@@ -64,6 +42,7 @@
 general/clone_function_type: FormatterCrash
 general/constants/js_semantics/number_folds: FormatterCrash
 general/constants/js_semantics/number_folds_opt_out: FormatterCrash
+general/constants/non_const_constructor: FormatterCrash
 general/constants/number_folds: FormatterCrash
 general/constants/number_folds_opt_out: FormatterCrash
 general/constants/various: FormatterCrash
@@ -98,6 +77,7 @@
 general/issue45700.crash: FormatterCrash
 general/many_errors: FormatterCrash
 general/missing_prefix_name: 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
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.textual_outline.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.textual_outline.expect
index a449983..7faa576 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.textual_outline.expect
@@ -1,29 +1,22 @@
 class Operators1 {
-  operator >>(){}
-  operator>() => true;
+  operator >>> () => true;
 }
 class Operators2 {
-  operator >>(){}
-  operator>(a, b) => true;
+  operator >>> (a, b) => true;
 }
 class Operators3 {
-  operator >>(){}
-  operator>([a]) => true;
+  operator >>> ([a]) => true;
 }
 class Operators4 {
-  operator >>(){}
-  operator>({a}) => true;
+  operator >>> ({a}) => true;
 }
 class Operators5 {
-  operator >>(){}
-  operator>(a, [b]) => true;
+  operator >>> (a, [b]) => true;
 }
 class Operators6 {
-  operator >>(){}
-  operator>(a, {b}) => true;
+  operator >>> (a, {b}) => true;
 }
 class Operators7 {
-  operator >>(){}
-  operator><T>(a) => true;
+  operator >>> <T>(a) => true;
 }
 main() {}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
index a1e49d5..2ccee62 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
@@ -146,10 +146,10 @@
       for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
 } =>#t20;
-static field core::Map<dynamic, Null>* error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
                                ^": null};
-static field core::Map<dynamic, Null>* error5 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error5 = {if (b) for (var a in list) a else 0: 1};
                      ^": null};
 static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -158,10 +158,10 @@
 static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error7 = {
              ^";
-static field core::Map<dynamic, Null>* error8 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
                                ^": null};
-static field core::Map<dynamic, Null>* error9 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
                      ^": null};
 static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
index b63c846..142ef6b 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
@@ -36,12 +36,12 @@
 static field core::Map<dynamic, core::int*>* map10;
 static field core::Map<dynamic, core::int*>* map11;
 static field core::Map<core::int*, core::int*>* map12;
-static field core::Map<dynamic, Null>* error4;
-static field core::Map<dynamic, Null>* error5;
+static field core::Map<invalid-type, Null>* error4;
+static field core::Map<invalid-type, Null>* error5;
 static field Null error6;
 static field Null error7;
-static field core::Map<dynamic, Null>* error8;
-static field core::Map<dynamic, Null>* error9;
+static field core::Map<invalid-type, Null>* error8;
+static field core::Map<invalid-type, Null>* error9;
 static field Null error10;
 static field Null error11;
 static field Null error12;
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
index cf02136..c14132e 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
@@ -200,10 +200,10 @@
       }
     }
 } =>#t20;
-static field core::Map<dynamic, Null>* error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
                                ^": null};
-static field core::Map<dynamic, Null>* error5 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error5 = {if (b) for (var a in list) a else 0: 1};
                      ^": null};
 static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -212,10 +212,10 @@
 static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error7 = {
              ^";
-static field core::Map<dynamic, Null>* error8 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
                                ^": null};
-static field core::Map<dynamic, Null>* error9 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
                      ^": null};
 static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
index 31c63c2..f81b865 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
@@ -78,7 +78,7 @@
     return invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:21:15: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     return Foo(bar, bar2);
-              ^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+              ^";
   }
 }
 class A extends core::Object {
@@ -97,20 +97,20 @@
 static method main() → dynamic {
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
-                   ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                   ^^^^^^^^^^^^^^^^";
   self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
-                            ^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                            ^^^^^^^^" in (cat as{ForNonNullableByDefault} core::Object){<unresolved>}.copyWith(numberOfWhiskers: 4) as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
   self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
   self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = (invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
+         ^" in a as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
   self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
index b4dffa3..f7861d6 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
@@ -104,13 +104,13 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
-                            ^^^^^^^^";
+                            ^^^^^^^^" in cat{<unresolved>}.copyWith(numberOfWhiskers: 4);
   self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
   self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = (invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
+         ^" in a as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
   self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
@@ -143,4 +143,4 @@
 
 Extra constant evaluation status:
 Evaluated: StringConcatenation @ org-dartlang-testcase:///copy_with_call_sites.dart:26:7 -> StringConstant("A()")
-Extra constant evaluation: evaluated: 108, effectively constant: 1
+Extra constant evaluation: evaluated: 106, effectively constant: 1
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
index 31c63c2..f81b865 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
@@ -78,7 +78,7 @@
     return invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:21:15: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
     return Foo(bar, bar2);
-              ^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+              ^";
   }
 }
 class A extends core::Object {
@@ -97,20 +97,20 @@
 static method main() → dynamic {
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
-                   ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                   ^^^^^^^^^^^^^^^^";
   self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
-                            ^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                            ^^^^^^^^" in (cat as{ForNonNullableByDefault} core::Object){<unresolved>}.copyWith(numberOfWhiskers: 4) as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
   self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
   self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = (invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
+         ^" in a as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
   self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
index b4dffa3..f7861d6 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
@@ -104,13 +104,13 @@
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
-                            ^^^^^^^^";
+                            ^^^^^^^^" in cat{<unresolved>}.copyWith(numberOfWhiskers: 4);
   self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
   self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = (invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
+         ^" in a as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
   self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
@@ -143,4 +143,4 @@
 
 Extra constant evaluation status:
 Evaluated: StringConcatenation @ org-dartlang-testcase:///copy_with_call_sites.dart:26:7 -> StringConstant("A()")
-Extra constant evaluation: evaluated: 108, effectively constant: 1
+Extra constant evaluation: evaluated: 106, effectively constant: 1
diff --git a/pkg/front_end/testcases/value_class/simple.dart.strong.expect b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
index cee962b..0144bcf 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
@@ -51,13 +51,13 @@
 static method main() → dynamic {
   self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal firstAnimal = Animal(numberOfLegs: 4);
-                              ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                              ^^^^^^^^^^^^";
   self::Animal secondAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:14:32: Error: No named parameter with the name 'numberOfLegs'.
   Animal secondAnimal = Animal(numberOfLegs: 4);
-                               ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                               ^^^^^^^^^^^^";
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
-                              ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                              ^^^^^^^^^^^^";
   self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
   self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
   self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
index cee962b..0144bcf 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
@@ -51,13 +51,13 @@
 static method main() → dynamic {
   self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal firstAnimal = Animal(numberOfLegs: 4);
-                              ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                              ^^^^^^^^^^^^";
   self::Animal secondAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:14:32: Error: No named parameter with the name 'numberOfLegs'.
   Animal secondAnimal = Animal(numberOfLegs: 4);
-                               ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                               ^^^^^^^^^^^^";
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
-                              ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
+                              ^^^^^^^^^^^^";
   self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
   self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
   self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
index 682fc4d..955fab2 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
@@ -57,13 +57,13 @@
 static method main() → dynamic {
   self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:19:23: Error: No named parameter with the name 'numberOfLegs'.
   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                      ^^^^^^^^^^^^";
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
   self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
   self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
index 682fc4d..955fab2 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
@@ -57,13 +57,13 @@
 static method main() → dynamic {
   self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:19:23: Error: No named parameter with the name 'numberOfLegs'.
   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                      ^^^^^^^^^^^^";
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
   self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
   self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
index 47528c5..28477fa 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
@@ -120,26 +120,26 @@
 static method main() → dynamic {
   self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:29:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:23: Error: No named parameter with the name 'numberOfLegs'.
   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                      ^^^^^^^^^^^^";
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
   self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
   self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
   self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
-                        ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                        ^^^^^^^^^^^^";
   self::Cat2 secondCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:40:26: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 secondCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
-                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                         ^^^^^^^^^^^^";
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
-                        ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                        ^^^^^^^^^^^^";
   self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
   self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
   self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
index 47528c5..28477fa 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
@@ -120,26 +120,26 @@
 static method main() → dynamic {
   self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:29:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:23: Error: No named parameter with the name 'numberOfLegs'.
   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
-                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                      ^^^^^^^^^^^^";
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
-                     ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+                     ^^^^^^^^^^^^";
   self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
   self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
   self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
   self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
-                        ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                        ^^^^^^^^^^^^";
   self::Cat2 secondCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:40:26: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 secondCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
-                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                         ^^^^^^^^^^^^";
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
-                        ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
+                        ^^^^^^^^^^^^";
   self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
   self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
   self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 8256003..15062a3 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -12,9 +12,7 @@
 dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
 
 constructor_tearoffs/call_instantiation: TypeCheckError
-constructor_tearoffs/const_tear_off: RuntimeError
-constructor_tearoffs/redirecting_constructors: RuntimeError
-constructor_tearoffs/redirecting_factory_tear_off: RuntimeError
+constructor_tearoffs/lowering/invalid_redirect: VerificationError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
@@ -34,8 +32,7 @@
 general/bounded_implicit_instantiation: TypeCheckError
 general/bug30695: TypeCheckError
 general/bug31124: RuntimeError # Test has no main method (and we shouldn't add one).
-general/call: TypeCheckError
-general/candidate_found: TypeCheckError
+general/call: RuntimeError
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError # Fails execution after recovery
 general/covariant_field: TypeCheckError
@@ -92,14 +89,14 @@
 general/issue41210b/issue41210.no_link: TypeCheckError
 general/issue41210b/issue41210: TypeCheckError
 general/issue44733: TypeCheckError
-general/issue45204: TypeCheckError
+general/issue_46886: RuntimeError
 general/micro: RuntimeError
 general/mixin_application_override: ExpectationFileMismatch # Too many errors.
 general/mixin_application_override: TypeCheckError
 general/mixin_constructors_with_default_values: RuntimeError # Expected
 general/mixin_covariant2: RuntimeError
 general/operator_method_not_found: RuntimeError # Expected
-general/optional: TypeCheckError
+general/optional: RuntimeError
 general/override_check_accessor_after_inference: TypeCheckError # Issue #31620
 general/override_check_accessor_basic: TypeCheckError # Issue #31620
 general/override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
@@ -107,6 +104,7 @@
 general/override_check_basic: TypeCheckError # Issue #31620
 general/override_check_with_covariant_modifier: TypeCheckError # Issue #31620
 general/override_setter_with_field: TypeCheckError
+general/redirecting_factory: RuntimeError
 general/redirecting_factory_invocation_in_invalid: TypeCheckError
 general/spread_collection: RuntimeError
 general/type_parameter_type_named_int: RuntimeError # Expected
@@ -136,26 +134,11 @@
 inference_new/infer_assign_to_index_super_upwards: TypeCheckError
 inference_new/infer_assign_to_index_this_upwards: TypeCheckError
 inference_new/infer_assign_to_index_upwards: TypeCheckError
-inference_new/infer_assign_to_property_custom: TypeCheckError
-inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
-late_lowering/covariant_late_field: TypeCheckError
 late_lowering/covariant_late_field: TypeCheckError
 nnbd/covariant_late_field: TypeCheckError
-nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
-nnbd/getter_vs_setter_type: TypeCheckError
-nnbd/issue42546: TypeCheckError
-nnbd/issue42546: TypeCheckError
-nnbd/issue42603: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
-nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
-nnbd/nullable_object_access: TypeCheckError
-nnbd/nullable_object_access: TypeCheckError
-nnbd/nullable_receiver: TypeCheckError
-nnbd/nullable_receiver: TypeCheckError
-nnbd/potentially_nullable_access: TypeCheckError
-nnbd/potentially_nullable_access: TypeCheckError
 nnbd_mixed/bad_mixins: TypeCheckError
 nnbd_mixed/covariant_from_opt_in: TypeCheckError
 nnbd_mixed/hierarchy/conflict: TypeCheckError
@@ -164,20 +147,12 @@
 nnbd_mixed/hierarchy/forwarding_semi_stub_method: TypeCheckError
 nnbd_mixed/hierarchy/forwarding_semi_stub_setter: TypeCheckError
 nnbd_mixed/hierarchy/getter_setter: TypeCheckError
-nnbd_mixed/hierarchy/in_dill_out_in/in_out_in: TypeCheckError
-nnbd_mixed/hierarchy/in_out_dill_in/in_out_in: TypeCheckError
-nnbd_mixed/hierarchy/in_out_in: TypeCheckError
 nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
 nnbd_mixed/hierarchy/override: TypeCheckError
 nnbd_mixed/inheritance_from_opt_in: TypeCheckError
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
-none/equals: TypeCheckError
-none/method_invocation: TypeCheckError
-none/operator: TypeCheckError
-none/property_get: TypeCheckError
-none/property_set: TypeCheckError
 rasta/abstract_constructor: RuntimeError
 rasta/bad_constructor_redirection: RuntimeError
 rasta/bad_continue: RuntimeError
@@ -227,8 +202,7 @@
 regress/issue_29982: RuntimeError # Tests runtime behavior of error recovery.
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_31180: TypeCheckError
-regress/issue_31299: TypeCheckError
-regress/issue_32972: TypeCheckError
+regress/issue_32972: RuntimeError
 regress/issue_33452: RuntimeError # Test has an intentional error
 regress/issue_34225: RuntimeError
 regress/issue_34563: RuntimeError # Test execution after recovery
diff --git a/pkg/front_end/tool/_fasta/abcompile.dart b/pkg/front_end/tool/_fasta/abcompile.dart
index a9e3125..26ad63a 100644
--- a/pkg/front_end/tool/_fasta/abcompile.dart
+++ b/pkg/front_end/tool/_fasta/abcompile.dart
@@ -18,7 +18,7 @@
 /// by alternately launching the compile application in this directory
 /// and the compile application location in the repo specified by "bRoot"
 /// via -DbRoot=/absolute/path/to/other/sdk/repo
-main(List<String> args) async {
+void main(List<String> args) async {
   print(args);
   if (bRootPath == null) {
     print('Expected -DbRoot=/absolute/path/to/other/sdk/repo');
diff --git a/pkg/front_end/tool/_fasta/additional_targets.dart b/pkg/front_end/tool/_fasta/additional_targets.dart
index 098cd0d..6e9399a 100644
--- a/pkg/front_end/tool/_fasta/additional_targets.dart
+++ b/pkg/front_end/tool/_fasta/additional_targets.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 library fasta.tool.additional_targets;
 
 import 'package:kernel/target/targets.dart' show TargetFlags, targets;
diff --git a/pkg/front_end/tool/_fasta/additional_targets_test.dart b/pkg/front_end/tool/_fasta/additional_targets_test.dart
index d9fea70..e5b3b50 100644
--- a/pkg/front_end/tool/_fasta/additional_targets_test.dart
+++ b/pkg/front_end/tool/_fasta/additional_targets_test.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 library fasta.tool.additional_targets_test;
 
 import 'package:kernel/target/targets.dart' show targets;
@@ -15,7 +13,7 @@
 
 import 'additional_targets.dart' show installAdditionalTargets;
 
-main() {
+void main() {
   installAdditionalTargets();
   String expected =
       "  ${Flags.target}=${(targets.keys.toList()..sort()).join('|')}";
diff --git a/pkg/front_end/tool/_fasta/batch.dart b/pkg/front_end/tool/_fasta/batch.dart
index ac34ce6..94408d4 100644
--- a/pkg/front_end/tool/_fasta/batch.dart
+++ b/pkg/front_end/tool/_fasta/batch.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'entry_points.dart' show batchEntryPoint;
 
-main(List<String> arguments) => batchEntryPoint(arguments);
+void main(List<String> arguments) => batchEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 6ab0e47..61caaf3 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -7,6 +7,7 @@
 import 'dart:io' show exit;
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
+import 'package:_fe_analyzer_shared/src/util/options.dart';
 
 import 'package:build_integration/file_system/single_root.dart'
     show SingleRootFileSystem;
@@ -39,230 +40,102 @@
         PlainAndColorizedString,
         messageFastaUsageLong,
         messageFastaUsageShort,
-        templateFastaCLIArgumentRequired,
         templateUnspecified;
 
 import 'package:front_end/src/fasta/problems.dart' show DebugAbort;
 
-import 'package:front_end/src/fasta/resolve_input_uri.dart'
+import 'package:_fe_analyzer_shared/src/util/resolve_input_uri.dart'
     show resolveInputUri;
 
 import 'package:front_end/src/scheme_based_file_system.dart'
     show SchemeBasedFileSystem;
 
 import 'package:kernel/target/targets.dart'
-    show
-        ConstructorTearOffLowering,
-        LateLowering,
-        Target,
-        TargetFlags,
-        getTarget,
-        targets;
-
-class CommandLineProblem {
-  final Message message;
-
-  CommandLineProblem(this.message);
-
-  CommandLineProblem.deprecated(String message)
-      : this(templateUnspecified.withArguments(message));
-}
-
-class ParsedArguments {
-  final Map<String, dynamic> options = <String, dynamic>{};
-  final List<String> arguments = <String>[];
-  final Map<String, String> defines = <String, String>{};
-
-  toString() => "ParsedArguments($options, $arguments)";
-
-  /// Parses a list of command-line [arguments] into options and arguments.
-  ///
-  /// An /option/ is something that, normally, starts with `-` or `--` (one or
-  /// two dashes). However, as a special case `/?` and `/h` are also recognized
-  /// as options for increased compatibility with Windows. An option can have a
-  /// value.
-  ///
-  /// An /argument/ is something that isn't an option, for example, a file name.
-  ///
-  /// The specification is a map of options to one of the following values:
-  /// * the type literal `Uri`, representing an option value of type [Uri],
-  /// * the type literal `int`, representing an option value of type [int],
-  /// * the bool literal `false`, representing a boolean option that is turned
-  ///   off by default,
-  /// * the bool literal `true, representing a boolean option that is turned on
-  ///   by default,
-  /// * or the string literal `","`, representing a comma-separated list of
-  ///   values.
-  ///
-  /// If [arguments] contains `"--"`, anything before is parsed as options, and
-  /// arguments; anything following is treated as arguments (even if starting
-  /// with, for example, a `-`).
-  ///
-  /// If an option isn't found in [specification], an error is thrown.
-  ///
-  /// Boolean options do not require an option value, but an optional value can
-  /// be provided using the forms `--option=value` where `value` can be `true`
-  /// or `yes` to turn on the option, or `false` or `no` to turn it off.  If no
-  /// option value is specified, a boolean option is turned on.
-  ///
-  /// All other options require an option value, either on the form `--option
-  /// value` or `--option=value`.
-  static ParsedArguments parse(
-      List<String> arguments, Map<String, ValueSpecification>? specification) {
-    specification ??= const <String, ValueSpecification>{};
-    ParsedArguments result = new ParsedArguments();
-    int index = arguments.indexOf("--");
-    Iterable<String> nonOptions = const <String>[];
-    Iterator<String> iterator = arguments.iterator;
-    if (index != -1) {
-      nonOptions = arguments.skip(index + 1);
-      iterator = arguments.take(index).iterator;
-    }
-    while (iterator.moveNext()) {
-      String argument = iterator.current;
-      if (argument.startsWith("-") || argument == "/?" || argument == "/h") {
-        String? value;
-        if (argument.startsWith("-D")) {
-          value = argument.substring("-D".length);
-          argument = "-D";
-        } else {
-          index = argument.indexOf("=");
-          if (index != -1) {
-            value = argument.substring(index + 1);
-            argument = argument.substring(0, index);
-          }
-        }
-        ValueSpecification? valueSpecification = specification[argument];
-        if (valueSpecification == null) {
-          throw new CommandLineProblem.deprecated(
-              "Unknown option '$argument'.");
-        }
-        String canonicalArgument = argument;
-        if (valueSpecification.alias != null) {
-          canonicalArgument = valueSpecification.alias as String;
-          valueSpecification = specification[valueSpecification.alias];
-        }
-        if (valueSpecification == null) {
-          throw new CommandLineProblem.deprecated(
-              "Unknown option alias '$canonicalArgument'.");
-        }
-        final bool requiresValue = valueSpecification.requiresValue;
-        if (requiresValue && value == null) {
-          if (!iterator.moveNext()) {
-            throw new CommandLineProblem(
-                templateFastaCLIArgumentRequired.withArguments(argument));
-          }
-          value = iterator.current;
-        }
-        valueSpecification.processValue(
-            result, canonicalArgument, argument, value);
-      } else {
-        result.arguments.add(argument);
-      }
-    }
-    specification.forEach((String key, ValueSpecification value) {
-      if (value.defaultValue != null) {
-        result.options[key] ??= value.defaultValue;
-      }
-    });
-    result.arguments.addAll(nonOptions);
-    return result;
-  }
-}
+    show Target, TargetFlags, TestTargetFlags, getTarget, targets;
 
 // Before adding new options here, you must:
 //  * Document the option.
 //  * Get an explicit approval from the front-end team.
-const Map<String, ValueSpecification> optionSpecification =
-    const <String, ValueSpecification>{
-  Flags.compileSdk: const UriValue(),
-  Flags.dumpIr: const BoolValue(false),
-  Flags.enableExperiment: const StringListValue(),
-  Flags.excludeSource: const BoolValue(false),
-  Flags.omitPlatform: const BoolValue(false),
-  Flags.fatal: const StringListValue(),
-  Flags.fatalSkip: const StringValue(),
-  Flags.forceLateLowering: const BoolValue(false),
-  Flags.forceStaticFieldLowering: const BoolValue(false),
-  Flags.forceNoExplicitGetterCalls: const BoolValue(false),
-  Flags.forceConstructorTearOffLowering: const BoolValue(false),
-  Flags.help: const BoolValue(false),
-  Flags.librariesJson: const UriValue(),
-  Flags.noDefines: const BoolValue(false),
-  Flags.output: const UriValue(),
-  Flags.packages: const UriValue(),
-  Flags.platform: const UriValue(),
-  Flags.sdk: const UriValue(),
-  Flags.singleRootBase: const UriValue(),
-  Flags.singleRootScheme: const StringValue(),
-  Flags.nnbdWeakMode: const BoolValue(false),
-  Flags.nnbdStrongMode: const BoolValue(false),
-  Flags.nnbdAgnosticMode: const BoolValue(false),
-  Flags.target: const StringValue(),
-  Flags.verbose: const BoolValue(false),
-  Flags.verbosity: const StringValue(),
-  Flags.verify: const BoolValue(false),
-  Flags.skipPlatformVerification: const BoolValue(false),
-  Flags.warnOnReachabilityCheck: const BoolValue(false),
-  Flags.linkDependencies: const UriListValue(),
-  Flags.noDeps: const BoolValue(false),
-  Flags.invocationModes: const StringValue(),
-  "-D": const DefineValue(),
-  "--define": const AliasValue("-D"),
-  "-h": const AliasValue(Flags.help),
-  "--out": const AliasValue(Flags.output),
-  "-o": const AliasValue(Flags.output),
-  "-t": const AliasValue(Flags.target),
-  "-v": const AliasValue(Flags.verbose),
-  "/?": const AliasValue(Flags.help),
-  "/h": const AliasValue(Flags.help),
-};
+const List<Option> optionSpecification = [
+  Options.compileSdk,
+  Options.dumpIr,
+  Options.enableExperiment,
+  Options.excludeSource,
+  Options.omitPlatform,
+  Options.fatal,
+  Options.fatalSkip,
+  Options.forceLateLowering,
+  Options.forceLateLoweringSentinel,
+  Options.forceStaticFieldLowering,
+  Options.forceNoExplicitGetterCalls,
+  Options.forceConstructorTearOffLowering,
+  Options.help,
+  Options.librariesJson,
+  Options.noDefines,
+  Options.output,
+  Options.packages,
+  Options.platform,
+  Options.sdk,
+  Options.singleRootBase,
+  Options.singleRootScheme,
+  Options.nnbdWeakMode,
+  Options.nnbdStrongMode,
+  Options.nnbdAgnosticMode,
+  Options.target,
+  Options.verbose,
+  Options.verbosity,
+  Options.verify,
+  Options.skipPlatformVerification,
+  Options.warnOnReachabilityCheck,
+  Options.linkDependencies,
+  Options.noDeps,
+  Options.invocationModes,
+  Options.defines,
+];
 
 void throwCommandLineProblem(String message) {
   throw new CommandLineProblem.deprecated(message);
 }
 
 ProcessedOptions analyzeCommandLine(String programName,
-    ParsedArguments parsedArguments, bool areRestArgumentsInputs) {
-  final Map<String, dynamic> options = parsedArguments.options;
+    ParsedOptions parsedOptions, bool areRestArgumentsInputs) {
+  final List<String> arguments = parsedOptions.arguments;
 
-  final List<String> arguments = parsedArguments.arguments;
+  final bool help = Options.help.read(parsedOptions);
 
-  final bool help = options[Flags.help];
-
-  final bool verbose = options[Flags.verbose];
+  final bool verbose = Options.verbose.read(parsedOptions);
 
   if (help) {
     print(computeUsage(programName, verbose).message);
     exit(0);
   }
 
-  if (options.containsKey(Flags.compileSdk) &&
-      options.containsKey(Flags.platform)) {
+  if (parsedOptions.options.containsKey(Flags.compileSdk) &&
+      parsedOptions.options.containsKey(Flags.platform)) {
     return throw new CommandLineProblem.deprecated(
         "Can't specify both '${Flags.compileSdk}' and '${Flags.platform}'.");
   }
 
-  final String targetName = options[Flags.target] ?? "vm";
+  final String targetName = Options.target.read(parsedOptions);
 
   Map<ExperimentalFlag, bool> explicitExperimentalFlags =
       parseExperimentalFlags(
-          parseExperimentalArguments(options[Flags.enableExperiment]),
+          parseExperimentalArguments(
+              Options.enableExperiment.read(parsedOptions)),
           onError: throwCommandLineProblem,
           onWarning: print);
 
-  final TargetFlags flags = new TargetFlags(
-      forceLateLoweringsForTesting: options[Flags.forceLateLowering]
-          ? LateLowering.all
-          : LateLowering.none,
+  final TargetFlags flags = new TestTargetFlags(
+      forceLateLoweringsForTesting:
+          Options.forceLateLowering.read(parsedOptions),
       forceStaticFieldLoweringForTesting:
-          options[Flags.forceStaticFieldLowering],
+          Options.forceStaticFieldLowering.read(parsedOptions),
       forceNoExplicitGetterCallsForTesting:
-          options[Flags.forceNoExplicitGetterCalls],
+          Options.forceNoExplicitGetterCalls.read(parsedOptions),
       forceConstructorTearOffLoweringForTesting:
-          options[Flags.forceConstructorTearOffLowering]
-              ? ConstructorTearOffLowering.all
-              : ConstructorTearOffLowering.none,
+          Options.forceConstructorTearOffLowering.read(parsedOptions),
+      forceLateLoweringSentinelForTesting:
+          Options.forceLateLoweringSentinel.read(parsedOptions),
       enableNullSafety: isExperimentEnabled(ExperimentalFlag.nonNullable,
           explicitExperimentalFlags: explicitExperimentalFlags));
 
@@ -273,53 +146,58 @@
         "Valid targets are:\n  ${targets.keys.join("\n  ")}");
   }
 
-  final bool noDefines = options[Flags.noDefines];
+  final bool noDefines = Options.noDefines.read(parsedOptions);
 
-  final bool noDeps = options[Flags.noDeps];
+  final bool noDeps = Options.noDeps.read(parsedOptions);
 
-  final bool verify = options[Flags.verify];
+  final bool verify = Options.verify.read(parsedOptions);
 
-  final bool skipPlatformVerification = options[Flags.skipPlatformVerification];
+  final bool skipPlatformVerification =
+      Options.skipPlatformVerification.read(parsedOptions);
 
-  final bool dumpIr = options[Flags.dumpIr];
+  final bool dumpIr = Options.dumpIr.read(parsedOptions);
 
-  final bool excludeSource = options[Flags.excludeSource];
+  final bool excludeSource = Options.excludeSource.read(parsedOptions);
 
-  final bool omitPlatform = options[Flags.omitPlatform];
+  final bool omitPlatform = Options.omitPlatform.read(parsedOptions);
 
-  final Uri packages = options[Flags.packages];
+  final Uri? packages = Options.packages.read(parsedOptions);
 
   final Set<String> fatal =
-      new Set<String>.from(options[Flags.fatal] ?? <String>[]);
+      new Set<String>.from(Options.fatal.read(parsedOptions) ?? <String>[]);
 
   final bool errorsAreFatal = fatal.contains("errors");
 
   final bool warningsAreFatal = fatal.contains("warnings");
 
-  final int fatalSkip = int.tryParse(options[Flags.fatalSkip] ?? "0") ?? -1;
+  final int fatalSkip =
+      int.tryParse(Options.fatalSkip.read(parsedOptions) ?? "0") ?? -1;
 
-  final bool compileSdk = options.containsKey(Flags.compileSdk);
+  final bool compileSdk = Options.compileSdk.read(parsedOptions) != null;
 
-  final String? singleRootScheme = options[Flags.singleRootScheme];
-  final Uri singleRootBase = options[Flags.singleRootBase];
+  final String? singleRootScheme = Options.singleRootScheme.read(parsedOptions);
+  final Uri? singleRootBase = Options.singleRootBase.read(parsedOptions);
 
-  final bool nnbdStrongMode = options[Flags.nnbdStrongMode];
+  final bool nnbdStrongMode = Options.nnbdStrongMode.read(parsedOptions);
 
-  final bool nnbdWeakMode = options[Flags.nnbdWeakMode];
+  final bool nnbdWeakMode = Options.nnbdWeakMode.read(parsedOptions);
 
-  final bool nnbdAgnosticMode = options[Flags.nnbdAgnosticMode];
+  final bool nnbdAgnosticMode = Options.nnbdAgnosticMode.read(parsedOptions);
 
   final NnbdMode nnbdMode = nnbdAgnosticMode
       ? NnbdMode.Agnostic
       : (nnbdStrongMode ? NnbdMode.Strong : NnbdMode.Weak);
 
-  final bool warnOnReachabilityCheck = options[Flags.warnOnReachabilityCheck];
+  final bool warnOnReachabilityCheck =
+      Options.warnOnReachabilityCheck.read(parsedOptions);
 
-  final List<Uri> linkDependencies = options[Flags.linkDependencies] ?? [];
+  final List<Uri> linkDependencies =
+      Options.linkDependencies.read(parsedOptions) ?? [];
 
-  final String invocationModes = options[Flags.invocationModes] ?? '';
+  final String invocationModes =
+      Options.invocationModes.read(parsedOptions) ?? '';
 
-  final String verbosity = options[Flags.verbosity] ?? Verbosity.defaultValue;
+  final String verbosity = Options.verbosity.read(parsedOptions);
 
   if (nnbdStrongMode && nnbdWeakMode) {
     return throw new CommandLineProblem.deprecated(
@@ -348,7 +226,7 @@
       // should have been handled elsewhere).
       '': fileSystem,
       singleRootScheme: new SingleRootFileSystem(
-          singleRootScheme, singleRootBase, fileSystem),
+          singleRootScheme, singleRootBase!, fileSystem),
     });
   }
 
@@ -367,7 +245,7 @@
     ..verify = verify
     ..skipPlatformVerification = skipPlatformVerification
     ..explicitExperimentalFlags = explicitExperimentalFlags
-    ..environmentDefines = noDefines ? null : parsedArguments.defines
+    ..environmentDefines = noDefines ? null : parsedOptions.defines
     ..nnbdMode = nnbdMode
     ..additionalDills = linkDependencies
     ..emitDeps = !noDeps
@@ -384,14 +262,14 @@
       return throw new CommandLineProblem.deprecated(
           "Cannot specify '${Flags.compileSdk}' option to compile_platform.");
     }
-    if (options.containsKey(Flags.output)) {
+    if (parsedOptions.options.containsKey(Flags.output)) {
       return throw new CommandLineProblem.deprecated(
           "Cannot specify '${Flags.output}' option to compile_platform.");
     }
 
     return new ProcessedOptions(
         options: compilerOptions
-          ..sdkSummary = options[Flags.platform]
+          ..sdkSummary = Options.platform.read(parsedOptions)
           ..librariesSpecificationUri = resolveInputUri(arguments[1])
           ..setExitCodeOnProblem = true,
         inputs: <Uri>[Uri.parse(arguments[0])],
@@ -402,15 +280,16 @@
 
   final Uri defaultOutput = resolveInputUri("${arguments.first}.dill");
 
-  final Uri output = options[Flags.output] ?? defaultOutput;
+  final Uri output = Options.output.read(parsedOptions) ?? defaultOutput;
 
-  final Uri sdk = options[Flags.sdk] ?? options[Flags.compileSdk];
+  final Uri? sdk =
+      Options.sdk.read(parsedOptions) ?? Options.compileSdk.read(parsedOptions);
 
-  final Uri librariesJson = options[Flags.librariesJson];
+  final Uri? librariesJson = Options.librariesJson.read(parsedOptions);
 
-  final Uri platform = compileSdk
+  final Uri? platform = compileSdk
       ? null
-      : (options[Flags.platform] ??
+      : (Options.platform.read(parsedOptions) ??
           computePlatformBinariesLocation(forceBuildDir: true)
               .resolve(computePlatformDillName(target, nnbdMode, () {
             throwCommandLineProblem(
@@ -437,13 +316,13 @@
     List<String> arguments,
     bool areRestArgumentsInputs,
     Future<T> f(CompilerContext context, List<String> restArguments)) {
-  ParsedArguments? parsedArguments;
+  ParsedOptions? parsedOptions;
   ProcessedOptions options;
   CommandLineProblem? problem;
   try {
-    parsedArguments = ParsedArguments.parse(arguments, optionSpecification);
-    options = analyzeCommandLine(
-        programName, parsedArguments, areRestArgumentsInputs);
+    parsedOptions = ParsedOptions.parse(arguments, optionSpecification);
+    options =
+        analyzeCommandLine(programName, parsedOptions, areRestArgumentsInputs);
   } on CommandLineProblem catch (e) {
     options = new ProcessedOptions();
     problem = e;
@@ -464,7 +343,7 @@
       exit(1);
     }
 
-    return f(c, parsedArguments!.arguments);
+    return f(c, parsedOptions!.arguments);
   }, errorOnMissingInput: problem == null);
 }
 
@@ -521,148 +400,3 @@
     exit(255);
   }
 }
-
-abstract class ValueSpecification {
-  const ValueSpecification();
-
-  String? get alias => null;
-
-  dynamic get defaultValue => null;
-
-  bool get requiresValue => true;
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value);
-}
-
-class AliasValue extends ValueSpecification {
-  final String alias;
-
-  const AliasValue(this.alias);
-
-  bool get requiresValue =>
-      throw new UnsupportedError("AliasValue.requiresValue");
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    throw new UnsupportedError("AliasValue.processValue");
-  }
-}
-
-class UriValue extends ValueSpecification {
-  const UriValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    if (result.options.containsKey(canonicalArgument)) {
-      throw new CommandLineProblem.deprecated(
-          "Multiple values for '$argument': "
-          "'${result.options[canonicalArgument]}' and '$value'.");
-    }
-    // TODO(ahe): resolve Uris lazily, so that schemes provided by
-    // other flags can be used for parsed command-line arguments too.
-    result.options[canonicalArgument] = resolveInputUri(value!);
-  }
-}
-
-class StringValue extends ValueSpecification {
-  const StringValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    if (result.options.containsKey(canonicalArgument)) {
-      throw new CommandLineProblem.deprecated(
-          "Multiple values for '$argument': "
-          "'${result.options[canonicalArgument]}' and '$value'.");
-    }
-    result.options[canonicalArgument] = value!;
-  }
-}
-
-class BoolValue extends ValueSpecification {
-  final bool defaultValue;
-
-  const BoolValue(this.defaultValue);
-
-  bool get requiresValue => false;
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    if (result.options.containsKey(canonicalArgument)) {
-      throw new CommandLineProblem.deprecated(
-          "Multiple values for '$argument': "
-          "'${result.options[canonicalArgument]}' and '$value'.");
-    }
-    bool parsedValue;
-    if (value == null || value == "true" || value == "yes") {
-      parsedValue = true;
-    } else if (value == "false" || value == "no") {
-      parsedValue = false;
-    } else {
-      throw new CommandLineProblem.deprecated(
-          "Value for '$argument' is '$value', "
-          "but expected one of: 'true', 'false', 'yes', or 'no'.");
-    }
-    result.options[canonicalArgument] = parsedValue;
-  }
-}
-
-class IntValue extends ValueSpecification {
-  const IntValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    if (result.options.containsKey(canonicalArgument)) {
-      throw new CommandLineProblem.deprecated(
-          "Multiple values for '$argument': "
-          "'${result.options[canonicalArgument]}' and '$value'.");
-    }
-    int? parsedValue = int.tryParse(value!);
-    if (parsedValue == null) {
-      throw new CommandLineProblem.deprecated(
-          "Value for '$argument', '$value', isn't an int.");
-    }
-    result.options[canonicalArgument] = parsedValue;
-  }
-}
-
-class DefineValue extends ValueSpecification {
-  const DefineValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    int index = value!.indexOf('=');
-    String name;
-    String expression;
-    if (index != -1) {
-      name = value.substring(0, index);
-      expression = value.substring(index + 1);
-    } else {
-      name = value;
-      expression = value;
-    }
-    result.defines[name] = expression;
-  }
-}
-
-class StringListValue extends ValueSpecification {
-  const StringListValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    result.options
-        .putIfAbsent(canonicalArgument, () => <String>[])
-        .addAll(value!.split(","));
-  }
-}
-
-class UriListValue extends ValueSpecification {
-  const UriListValue();
-
-  void processValue(ParsedArguments result, String canonicalArgument,
-      String argument, String? value) {
-    result.options
-        .putIfAbsent(canonicalArgument, () => <Uri>[])
-        .addAll(value!.split(",").map(resolveInputUri));
-  }
-}
diff --git a/pkg/front_end/tool/_fasta/compile.dart b/pkg/front_end/tool/_fasta/compile.dart
index 0fa58c9..88c8564 100644
--- a/pkg/front_end/tool/_fasta/compile.dart
+++ b/pkg/front_end/tool/_fasta/compile.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'entry_points.dart' show compileEntryPoint;
 
-main(List<String> arguments) => compileEntryPoint(arguments);
+void main(List<String> arguments) => compileEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/compile_platform.dart b/pkg/front_end/tool/_fasta/compile_platform.dart
index 352e1f0..ce03fc7 100644
--- a/pkg/front_end/tool/_fasta/compile_platform.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'entry_points.dart' show compilePlatformEntryPoint;
 
-main(List<String> arguments) => compilePlatformEntryPoint(arguments);
+void main(List<String> arguments) => compilePlatformEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
index 985026c..073dd5f 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
@@ -10,7 +10,7 @@
 
 import 'package:expect/expect.dart';
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   Uri dartVm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
   Uri librariesJson = Uri.base.resolve("sdk/lib/libraries.json");
   Uri compilePlatform =
@@ -38,7 +38,8 @@
   });
 }
 
-withTemporaryDirectory(String prefix, Future<void> f(Uri tmp)) async {
+Future<void> withTemporaryDirectory(
+    String prefix, Future<void> f(Uri tmp)) async {
   Directory tmp = await Directory.systemTemp.createTemp(prefix);
   try {
     await f(tmp.uri);
diff --git a/pkg/front_end/tool/_fasta/compile_platform_test.dart b/pkg/front_end/tool/_fasta/compile_platform_test.dart
index 985026c..073dd5f 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_test.dart
@@ -10,7 +10,7 @@
 
 import 'package:expect/expect.dart';
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   Uri dartVm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
   Uri librariesJson = Uri.base.resolve("sdk/lib/libraries.json");
   Uri compilePlatform =
@@ -38,7 +38,8 @@
   });
 }
 
-withTemporaryDirectory(String prefix, Future<void> f(Uri tmp)) async {
+Future<void> withTemporaryDirectory(
+    String prefix, Future<void> f(Uri tmp)) async {
   Directory tmp = await Directory.systemTemp.createTemp(prefix);
   try {
     await f(tmp.uri);
diff --git a/pkg/front_end/tool/_fasta/deps.dart b/pkg/front_end/tool/_fasta/deps.dart
index 3e8c7be..154bef7 100644
--- a/pkg/front_end/tool/_fasta/deps.dart
+++ b/pkg/front_end/tool/_fasta/deps.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'entry_points.dart' show depsEntryPoint;
 
-main(List<String> arguments) => depsEntryPoint(arguments);
+void main(List<String> arguments) => depsEntryPoint(arguments);
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 0d705a2..3624fe0 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
@@ -11,7 +11,7 @@
 import 'package:dart_style/dart_style.dart' show DartFormatter;
 import '../../test/utils/io_utils.dart' show computeRepoDirUri;
 
-main(List<String> args) {
+void main(List<String> args) {
   final Uri repoDir = computeRepoDirUri();
   String generated = generateAstHelper(repoDir);
   new File.fromUri(computeAstHelperUri(repoDir))
@@ -42,6 +42,7 @@
 
 import 'package:_fe_analyzer_shared/src/parser/assert.dart';
 import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/constructor_reference_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
@@ -100,14 +101,17 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideListenerClass = false;
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -118,6 +122,7 @@
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     void end() {
@@ -130,6 +135,7 @@
             currentMethodName!.startsWith("end") ||
             currentMethodName!.startsWith("handle"))) {
       StringBuffer sb = new StringBuffer();
+      sb.writeln("  @override");
       sb.write("  ");
       Token token = beginToken;
       Token? latestToken;
@@ -221,6 +227,7 @@
           newClasses.write('}');
         }
         newClasses.write(') : super("$name", type);\n\n');
+        newClasses.writeln("@override");
         newClasses.write("Map<String, Object?> get deprecatedArguments => {");
         for (int i = 0; i < parameters.length; i++) {
           Parameter param = parameters[i];
@@ -248,11 +255,13 @@
     latestSeenParameterTypeTokenQuestion = null;
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     latestSeenParameterTypeToken = beginToken.lexeme;
     latestSeenParameterTypeTokenQuestion = questionMark?.lexeme;
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index e3c343a..af225d7 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 library fasta.tool.entry_points;
 
 import 'dart:convert' show LineSplitter, jsonDecode, jsonEncode, utf8;
@@ -61,7 +59,7 @@
 
 const int iterations = const int.fromEnvironment("iterations", defaultValue: 1);
 
-compileEntryPoint(List<String> arguments) async {
+Future<void> compileEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
 
   // Timing results for each iteration
@@ -76,9 +74,9 @@
     stopwatch.stop();
 
     elapsedTimes.add(stopwatch.elapsedMilliseconds.toDouble());
-    List<Object> typeChecks = Types.typeChecksForTesting;
+    List<Object>? typeChecks = Types.typeChecksForTesting;
     if (typeChecks?.isNotEmpty ?? false) {
-      BenchMaker.writeTypeChecks("type_checks.json", typeChecks);
+      BenchMaker.writeTypeChecks("type_checks.json", typeChecks!);
     }
   }
 
@@ -88,7 +86,7 @@
   }
 }
 
-outlineEntryPoint(List<String> arguments) async {
+void outlineEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
 
   for (int i = 0; i < iterations; i++) {
@@ -99,7 +97,7 @@
   }
 }
 
-depsEntryPoint(List<String> arguments) async {
+void depsEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
 
   for (int i = 0; i < iterations; i++) {
@@ -110,7 +108,7 @@
   }
 }
 
-compilePlatformEntryPoint(List<String> arguments) async {
+void compilePlatformEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
   for (int i = 0; i < iterations; i++) {
     if (i > 0) {
@@ -120,7 +118,7 @@
   }
 }
 
-batchEntryPoint(List<String> arguments) {
+void batchEntryPoint(List<String> arguments) {
   installAdditionalTargets();
   return new BatchCompiler(
           stdin.transform(utf8.decoder).transform(new LineSplitter()))
@@ -130,15 +128,15 @@
 class BatchCompiler {
   final Stream<String> lines;
 
-  Uri platformUri;
+  Uri? platformUri;
 
-  Component platformComponent;
+  Component? platformComponent;
 
   bool hadVerifyError = false;
 
   BatchCompiler(this.lines);
 
-  run() async {
+  void run() async {
     await for (String line in lines) {
       try {
         if (await batchCompileArguments(
@@ -186,14 +184,14 @@
       }
       hadVerifyError = false;
     } else {
-      options.sdkSummaryComponent = platformComponent;
+      options.sdkSummaryComponent = platformComponent!;
     }
     CompileTask task = new CompileTask(c, ticker);
     await task.compile(omitPlatform: true, supportAdditionalDills: false);
-    CanonicalName root = platformComponent.root;
-    for (Library library in platformComponent.libraries) {
+    CanonicalName root = platformComponent!.root;
+    for (Library library in platformComponent!.libraries) {
       library.parent = platformComponent;
-      CanonicalName name = library.reference.canonicalName;
+      CanonicalName? name = library.reference.canonicalName;
       if (name != null && name.parent != root) {
         root.adoptChild(name);
       }
@@ -209,7 +207,7 @@
   }
 }
 
-incrementalEntryPoint(List<String> arguments) async {
+void incrementalEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
   await withGlobalOptions("incremental", arguments, true,
       (CompilerContext c, _) {
@@ -249,8 +247,8 @@
   });
 }
 
-Future<Uri> deps(List<String> arguments) async {
-  return await runProtectedFromAbort<Uri>(() async {
+Future<Uri?> deps(List<String> arguments) async {
+  return await runProtectedFromAbort<Uri?>(() async {
     return await withGlobalOptions("deps", arguments, true,
         (CompilerContext c, _) async {
       if (c.options.verbose) {
@@ -278,12 +276,12 @@
     return new KernelTarget(c.fileSystem, false, dillTarget, uriTranslator);
   }
 
-  Future<Uri> buildDeps([Uri output]) async {
+  Future<Uri?> buildDeps([Uri? output]) async {
     UriTranslator uriTranslator = await c.options.getUriTranslator();
     ticker.logMs("Read packages file");
     DillTarget dillTarget = createDillTarget(uriTranslator);
     KernelTarget kernelTarget = createKernelTarget(dillTarget, uriTranslator);
-    Uri platform = c.options.sdkSummary;
+    Uri? platform = c.options.sdkSummary;
     if (platform != null) {
       // TODO(CFE-Team): Probably this should be read through the filesystem as
       // well and the recording would be automatic.
@@ -294,7 +292,7 @@
     await dillTarget.buildOutlines();
     await kernelTarget.loader.buildOutlines();
 
-    Uri dFile;
+    Uri? dFile;
     if (output != null) {
       dFile = new File(new File.fromUri(output).path + ".d").uri;
       await writeDepsFile(output, dFile, c.dependencies);
@@ -303,7 +301,7 @@
   }
 
   Future<KernelTarget> buildOutline(
-      {Uri output,
+      {Uri? output,
       bool omitPlatform: false,
       bool supportAdditionalDills: true}) async {
     UriTranslator uriTranslator = await c.options.getUriTranslator();
@@ -312,7 +310,7 @@
     KernelTarget kernelTarget = createKernelTarget(dillTarget, uriTranslator);
 
     if (supportAdditionalDills) {
-      Component sdkSummary = await c.options.loadSdkSummary(null);
+      Component? sdkSummary = await c.options.loadSdkSummary(null);
       if (sdkSummary != null) {
         dillTarget.loader.appendLibraries(sdkSummary);
       }
@@ -323,7 +321,7 @@
         dillTarget.loader.appendLibraries(additionalDill);
       }
     } else {
-      Component sdkSummary = await c.options.loadSdkSummary(null);
+      Component? sdkSummary = await c.options.loadSdkSummary(null);
       if (sdkSummary != null) {
         dillTarget.loader.appendLibraries(sdkSummary);
       }
@@ -338,7 +336,7 @@
     }
     if (output != null) {
       if (omitPlatform) {
-        outline.computeCanonicalNames();
+        outline!.computeCanonicalNames();
         Component userCode = new Component(
             nameRoot: outline.root,
             uriToSource: new Map<Uri, Source>.from(outline.uriToSource));
@@ -352,7 +350,7 @@
         outline = userCode;
       }
 
-      await writeComponentToFile(outline, output);
+      await writeComponentToFile(outline!, output);
       ticker.logMs("Wrote outline to ${output.toFilePath()}");
     }
     return kernelTarget;
@@ -363,9 +361,9 @@
     c.options.reportNullSafetyCompilationModeInfo();
     KernelTarget kernelTarget =
         await buildOutline(supportAdditionalDills: supportAdditionalDills);
-    Uri uri = c.options.output;
+    Uri uri = c.options.output!;
     Component component =
-        await kernelTarget.buildComponent(verify: c.options.verify);
+        (await kernelTarget.buildComponent(verify: c.options.verify))!;
     if (c.options.debugDump) {
       printComponentText(component,
           libraryFilter: kernelTarget.isSourceLibraryForDebugging);
@@ -408,7 +406,7 @@
     Uri hostPlatform = Uri.base.resolveUri(new Uri.file(restArguments[2]));
     Uri outlineOutput = Uri.base.resolveUri(new Uri.file(restArguments[4]));
     return compilePlatformInternal(
-        c, c.options.output, outlineOutput, hostPlatform);
+        c, c.options.output!, outlineOutput, hostPlatform);
   });
 }
 
@@ -421,16 +419,17 @@
 
   var result =
       await generateKernelInternal(buildSummary: true, buildComponent: true);
+  // ignore: unnecessary_null_comparison
   if (result == null) {
     exitCode = 1;
     // Note: an error should have been reported by now.
     print('The platform .dill files were not created.');
     return;
   }
-  new File.fromUri(outlineOutput).writeAsBytesSync(result.summary);
+  new File.fromUri(outlineOutput).writeAsBytesSync(result.summary!);
   c.options.ticker.logMs("Wrote outline to ${outlineOutput.toFilePath()}");
 
-  await writeComponentToFile(result.component, fullOutput);
+  await writeComponentToFile(result.component!, fullOutput);
 
   c.options.ticker.logMs("Wrote component to ${fullOutput.toFilePath()}");
 
@@ -455,7 +454,7 @@
   // mode), this is only an approximation, albeit accurate.  Once Fasta is
   // self-hosting, this isn't an approximation. Regardless, strong mode
   // shouldn't affect which files are read.
-  Target hostTarget = getTarget("vm", new TargetFlags());
+  Target? hostTarget = getTarget("vm", new TargetFlags());
   return getDependencies(Platform.script,
       platform: hostPlatform, target: hostTarget);
 }
@@ -489,13 +488,12 @@
   StringBuffer sb = new StringBuffer();
   sb.write(toRelativeFilePath(output));
   sb.write(":");
-  List<String> paths = new List<String>.filled(allDependencies.length, null);
-  for (int i = 0; i < allDependencies.length; i++) {
-    paths[i] = toRelativeFilePath(allDependencies[i]);
-  }
+  List<String> paths = new List<String>.generate(
+      allDependencies.length, (int i) => toRelativeFilePath(allDependencies[i]),
+      growable: false);
   // Sort the relative paths to ease analyzing future changes to this code.
   paths.sort();
-  String previous;
+  String? previous;
   for (String path in paths) {
     // Check for and omit duplicates.
     if (path != previous) {
diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
index a452b9f..e321747 100644
--- a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
+++ b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
@@ -15,7 +15,7 @@
 
 import '../../test/utils/io_utils.dart' show computeRepoDirUri;
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   final Uri repoDir = computeRepoDirUri();
   new File.fromUri(computeCfeGeneratedFile(repoDir))
       .writeAsStringSync(generateCfeFile(repoDir), flush: true);
@@ -164,12 +164,12 @@
 const Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
 ''');
   for (String key in keys) {
-    bool expired = (features[key] as YamlMap)['expired'];
+    bool? expired = (features[key] as YamlMap)['expired'];
     bool shipped = (features[key] as YamlMap)['enabledIn'] != null;
     sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: ${shipped},');
     if (shipped) {
       if (expired == false) {
-        throw 'Cannot mark shipped feature as "expired: false"';
+        throw 'Cannot mark shipped feature "$key" as "expired: false"';
       }
     }
   }
@@ -232,7 +232,7 @@
   }
   sb.write('''
 };
-  
+
 ''');
 
   Uri allowListFile = computeAllowListFile(repoDir);
@@ -273,7 +273,7 @@
   return new DartFormatter().format("$sb");
 }
 
-keyToIdentifier(String key, {bool upperCaseFirst = false}) {
+String keyToIdentifier(String key, {bool upperCaseFirst = false}) {
   StringBuffer identifier = StringBuffer();
   bool first = true;
   for (int index = 0; index < key.length; ++index) {
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 3a971c3..97bf6d8 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -13,7 +13,7 @@
 
 import '../../test/utils/io_utils.dart' show computeRepoDirUri;
 
-main(List<String> arguments) {
+void main(List<String> arguments) {
   final Uri repoDir = computeRepoDirUri();
   Messages message = generateMessagesFiles(repoDir);
   if (message.sharedMessages.trim().isEmpty ||
@@ -414,7 +414,7 @@
     if (analyzerCode is String) {
       analyzerCode = <String>[analyzerCode];
     }
-    List<Object> codes = analyzerCode as List<Object>;
+    List<Object?> codes = analyzerCode as List<Object?>;
     // If "index:" is defined, then "analyzerCode:" should not be generated
     // in the front end. See comment in messages.yaml
     codeArguments.add('analyzerCodes: <String>["${codes.join('", "')}"]');
diff --git a/pkg/front_end/tool/_fasta/log_analyzer.dart b/pkg/front_end/tool/_fasta/log_analyzer.dart
index c93e916..1fdbc7a 100644
--- a/pkg/front_end/tool/_fasta/log_analyzer.dart
+++ b/pkg/front_end/tool/_fasta/log_analyzer.dart
@@ -8,7 +8,7 @@
 
 import 'package:testing/src/run_tests.dart' show CommandLine;
 
-main(List<String> arguments) async {
+void main(List<String> arguments) async {
   CommandLine cl = CommandLine.parse(arguments);
   Set<String> fields = cl.commaSeparated("--fields=");
   if (fields.isEmpty) {
diff --git a/pkg/front_end/tool/_fasta/log_collector.dart b/pkg/front_end/tool/_fasta/log_collector.dart
index 01fac75..3b0c717 100644
--- a/pkg/front_end/tool/_fasta/log_collector.dart
+++ b/pkg/front_end/tool/_fasta/log_collector.dart
@@ -10,7 +10,7 @@
 
 import 'package:front_end/src/fasta/crash.dart' show defaultServerAddress;
 
-badRequest(HttpRequest request, int status, String message) {
+void badRequest(HttpRequest request, int status, String message) {
   request.response.statusCode = status;
   request.response.write('''
 <!DOCTYPE html>
@@ -30,7 +30,7 @@
   print("${request.uri}: $message");
 }
 
-collectLog(DateTime time, HttpRequest request) async {
+void collectLog(DateTime time, HttpRequest request) async {
   String json = await request.cast<List<int>>().transform(utf8.decoder).join();
   var data;
   try {
@@ -81,7 +81,7 @@
 """);
 }
 
-main(List<String> arguments) async {
+void main(List<String> arguments) async {
   RawReceivePort keepAlive = new RawReceivePort();
   Uri uri;
   if (arguments.length == 1) {
diff --git a/pkg/front_end/tool/_fasta/outline.dart b/pkg/front_end/tool/_fasta/outline.dart
index 2a4d7f9..282c290 100644
--- a/pkg/front_end/tool/_fasta/outline.dart
+++ b/pkg/front_end/tool/_fasta/outline.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'entry_points.dart' show outlineEntryPoint;
 
-main(List<String> arguments) => outlineEntryPoint(arguments);
+void main(List<String> arguments) => outlineEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/parser.dart b/pkg/front_end/tool/_fasta/parser.dart
index aec74f9..694473e 100644
--- a/pkg/front_end/tool/_fasta/parser.dart
+++ b/pkg/front_end/tool/_fasta/parser.dart
@@ -5,4 +5,4 @@
 import 'package:_fe_analyzer_shared/src/parser/parser_main.dart'
     show mainEntryPoint;
 
-main(List<String> arguments) => mainEntryPoint(arguments);
+void main(List<String> arguments) => mainEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/scanner.dart b/pkg/front_end/tool/_fasta/scanner.dart
index 9d58567..03aea34 100644
--- a/pkg/front_end/tool/_fasta/scanner.dart
+++ b/pkg/front_end/tool/_fasta/scanner.dart
@@ -5,4 +5,4 @@
 import 'package:_fe_analyzer_shared/src/scanner/scanner_main.dart'
     show mainEntryPoint;
 
-main(List<String> arguments) => mainEntryPoint(arguments);
+void main(List<String> arguments) => mainEntryPoint(arguments);
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 14f981f..2e4d7f2 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'package:_fe_analyzer_shared/src/messages/diagnostic_message.dart';
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/api_prototype/kernel_generator.dart';
@@ -16,7 +14,9 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/src/printer.dart';
+import 'package:kernel/target/targets.dart';
 import 'package:kernel/type_environment.dart';
+import 'package:vm/target/vm.dart';
 
 final Uri astLibraryUri = Uri.parse('package:kernel/ast.dart');
 final Uri canonicalNameLibraryUri =
@@ -33,7 +33,7 @@
 /// If the identifying name is non-null, this is used to determine the
 /// nominality. For instance the name of a variable declaration is taking as
 /// defining its identity.
-const Map<String, String> _declarativeClassesNames = const {
+const Map<String, String?> _declarativeClassesNames = const {
   'VariableDeclaration': 'name',
   'TypeParameter': 'name',
   'LabeledStatement': null,
@@ -55,6 +55,20 @@
   'PrimitiveConstant',
 };
 
+/// Names of inner [Node] classes that are used as interfaces for (generally)
+/// interchangeable classes.
+///
+/// For instance, when [Expression] is used as the field type, any subtype of
+/// [Expression] can be used to populate the field.
+const Set<String> _interchangeableClasses = const {
+  'Member',
+  'Statement',
+  'Expression',
+  'Constant',
+  'DartType',
+  'Initializer',
+};
+
 /// Names of subclasses of [NamedNode] that do _not_ have `visitXReference` or
 /// `defaultXReference` methods.
 const Set<String> _classesWithoutVisitReference = const {
@@ -68,7 +82,7 @@
 /// [FieldRule] define exceptions to how a field should be treated.
 ///
 /// If a field name maps to `null`, the field is not included in the [AstModel].
-const Map<String /*?*/, Map<String, FieldRule /*?*/ >> _fieldRuleMap = {
+const Map<String?, Map<String, FieldRule?>> _fieldRuleMap = {
   null: {
     'hashCode': null,
     'parent': null,
@@ -96,8 +110,7 @@
     '_proceduresView': null,
     '_proceduresInternal': FieldRule(name: 'procedures'),
     '_redirectingFactoriesView': null,
-    '_redirectingFactoriesInternal':
-        FieldRule(name: 'redirectingFactories'),
+    '_redirectingFactoriesInternal': FieldRule(name: 'redirectingFactories'),
     'lazyBuilder': null,
     'dirty': null,
   },
@@ -179,29 +192,29 @@
   ///
   /// This is for instance used for private fields accessed through a public
   /// getter.
-  final String name;
+  final String? name;
 
   /// For fields contain ast class of kind `AstClassKind.declarative`, this
   /// value defines whether the field should be treated as a declaration or
   /// a reference to the declaration.
-  final bool isDeclaration;
+  final bool? isDeclaration;
 
   const FieldRule({this.name, this.isDeclaration});
 }
 
 /// Return the [FieldRule] to use for the [field] in [AstClass].
-FieldRule getFieldRule(AstClass astClass, Field field) {
+FieldRule? getFieldRule(AstClass astClass, Field field) {
   String name = field.name.text;
-  Map<String, FieldRule> leafClassMap = _fieldRuleMap[astClass.name];
+  Map<String?, FieldRule?>? leafClassMap = _fieldRuleMap[astClass.name];
   if (leafClassMap != null && leafClassMap.containsKey(name)) {
     return leafClassMap[name];
   }
-  Map<String, FieldRule> enclosingClassMap =
-      _fieldRuleMap[field.enclosingClass.name];
+  Map<String?, FieldRule?>? enclosingClassMap =
+      _fieldRuleMap[field.enclosingClass!.name];
   if (enclosingClassMap != null && enclosingClassMap.containsKey(name)) {
     return enclosingClassMap[name];
   }
-  Map<String, FieldRule> defaultClassMap = _fieldRuleMap[null];
+  Map<String?, FieldRule?>? defaultClassMap = _fieldRuleMap[null];
   if (defaultClassMap != null && defaultClassMap.containsKey(name)) {
     return defaultClassMap[name];
   }
@@ -262,21 +275,25 @@
 
 class AstClass {
   final Class node;
-  AstClassKind _kind;
-  final String declarativeName;
+  AstClassKind? _kind;
+  final String? declarativeName;
+  final bool isInterchangeable;
 
-  AstClass superclass;
+  AstClass? superclass;
   List<AstClass> interfaces = [];
   List<AstClass> subclasses = [];
   List<AstClass> subtypes = [];
 
-  List<AstField> fields = [];
+  Map<String, AstField> fields = {};
 
   AstClass(this.node,
-      {this.superclass, AstClassKind kind, this.declarativeName})
+      {this.superclass,
+      AstClassKind? kind,
+      this.declarativeName,
+      required this.isInterchangeable})
       : _kind = kind {
     if (superclass != null) {
-      superclass.subclasses.add(this);
+      superclass!.subclasses.add(this);
     }
   }
 
@@ -303,7 +320,7 @@
         }
       }
     }
-    return _kind;
+    return _kind!;
   }
 
   /// Returns `true` if this class has a `visitX` or `defaultX` method.
@@ -323,7 +340,6 @@
       case AstClassKind.utilityAsValue:
         return false;
     }
-    throw new UnsupportedError("Unexpected $kind");
   }
 
   /// Returns `true` if this class has a `visitXReference` or
@@ -344,13 +360,12 @@
       case AstClassKind.utilityAsValue:
         return false;
     }
-    throw new UnsupportedError("Unexpected $kind");
   }
 
   String dump([String indent = ""]) {
     StringBuffer sb = new StringBuffer();
     sb.writeln('${indent}${node.name} ($kind)');
-    for (AstField field in fields) {
+    for (AstField field in fields.values) {
       sb.write(field.dump('${indent}    '));
     }
     for (AstClass subclass in subclasses) {
@@ -359,6 +374,7 @@
     return sb.toString();
   }
 
+  @override
   String toString() => '${runtimeType}(${name})';
 }
 
@@ -405,6 +421,7 @@
 
   FieldType(this.type, this.kind);
 
+  @override
   String toString() => 'FieldType($type,$kind)';
 }
 
@@ -414,6 +431,7 @@
   ListFieldType(DartType type, this.elementType)
       : super(type, AstFieldKind.list);
 
+  @override
   String toString() => 'ListFieldType($type,$elementType)';
 }
 
@@ -422,6 +440,7 @@
 
   SetFieldType(DartType type, this.elementType) : super(type, AstFieldKind.set);
 
+  @override
   String toString() => 'SetFieldType($type,$elementType)';
 }
 
@@ -432,6 +451,7 @@
   MapFieldType(DartType type, this.keyType, this.valueType)
       : super(type, AstFieldKind.map);
 
+  @override
   String toString() => 'MapFieldType($type,$keyType,$valueType)';
 }
 
@@ -441,15 +461,18 @@
   UtilityFieldType(DartType type, this.astClass)
       : super(type, AstFieldKind.utility);
 
+  @override
   String toString() => 'UtilityFieldType($type,$astClass)';
 }
 
 class AstField {
+  final AstClass astClass;
   final Field node;
   final String name;
   final FieldType type;
+  final AstField? parentField;
 
-  AstField(this.node, this.name, this.type);
+  AstField(this.astClass, this.node, this.name, this.type, this.parentField);
 
   String dump([String indent = ""]) {
     StringBuffer sb = new StringBuffer();
@@ -457,6 +480,7 @@
     return sb.toString();
   }
 
+  @override
   String toString() => '${runtimeType}(${name})';
 }
 
@@ -490,50 +514,64 @@
 ///
 /// If [printDump] is `true`, a dump of the model printed to stdout.
 Future<AstModel> deriveAstModel(Uri repoDir, {bool printDump: false}) async {
+  bool errorsFound = false;
   CompilerOptions options = new CompilerOptions();
   options.sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
+  options.compileSdk = true;
+  options.target = new VmTarget(new TargetFlags());
+  options.librariesSpecificationUri = repoDir.resolve("sdk/lib/libraries.json");
+  options.environmentDefines = const {};
   options.packagesFileUri = computePackageConfig(repoDir);
   options.onDiagnostic = (DiagnosticMessage message) {
     printDiagnosticMessage(message, print);
+    if (message.severity == Severity.error) {
+      errorsFound = true;
+    }
   };
 
-  InternalCompilerResult compilerResult = await kernelForProgramInternal(
+  InternalCompilerResult compilerResult = (await kernelForProgramInternal(
       astLibraryUri, options,
-      retainDataForTesting: true, requireMain: false);
-  ClassHierarchy classHierarchy = compilerResult.classHierarchy;
-  CoreTypes coreTypes = compilerResult.coreTypes;
+      retainDataForTesting: true,
+      requireMain: false)) as InternalCompilerResult;
+  if (errorsFound) {
+    throw 'Errors found';
+  }
+  ClassHierarchy classHierarchy = compilerResult.classHierarchy!;
+  CoreTypes coreTypes = compilerResult.coreTypes!;
   TypeEnvironment typeEnvironment =
       new TypeEnvironment(coreTypes, classHierarchy);
 
-  Library astLibrary = compilerResult.component.libraries
+  Library astLibrary = compilerResult.component!.libraries
       .singleWhere((library) => library.importUri == astLibraryUri);
 
-  bool errorsFound = false;
   void reportError(String message) {
     print(message);
     errorsFound = true;
   }
 
-  Map<String, String> declarativeClassesNames = {..._declarativeClassesNames};
+  Map<String, String?> declarativeClassesNames = {..._declarativeClassesNames};
   Set<String> classesWithoutVisitMethods = _classesWithoutVisitMethods.toSet();
   Set<String> classesWithoutVisitReference =
       _classesWithoutVisitReference.toSet();
-  Map<String, Map<String, FieldRule>> fieldRuleMap = {..._fieldRuleMap};
-  Map<String, FieldRule> nullFieldRules = {...?fieldRuleMap.remove(null)};
+  Map<String?, Map<String, FieldRule?>> fieldRuleMap = {..._fieldRuleMap};
+  Map<String, FieldRule?> nullFieldRules = {...?fieldRuleMap.remove(null)};
+  Set<String> interchangeableClasses = _interchangeableClasses.toSet();
   for (Class cls in astLibrary.classes) {
     declarativeClassesNames.remove(cls.name);
     classesWithoutVisitMethods.remove(cls.name);
     classesWithoutVisitReference.remove(cls.name);
-    Map<String, FieldRule> fieldRules = {...?fieldRuleMap.remove(cls.name)};
+    interchangeableClasses.remove(cls.name);
+
+    Map<String, FieldRule?> fieldRules = {...?fieldRuleMap.remove(cls.name)};
     Set<String> renames = {};
-    Class parent = cls;
+    Class? parent = cls;
     while (parent != null && parent.enclosingLibrary == astLibrary) {
       for (Field field in parent.fields) {
         bool hasFieldRule = fieldRules.containsKey(field.name.text);
-        FieldRule fieldRule = fieldRules.remove(field.name.text);
+        FieldRule? fieldRule = fieldRules.remove(field.name.text);
         if (fieldRule != null) {
           if (fieldRule.name != null) {
-            renames.add(fieldRule.name);
+            renames.add(fieldRule.name!);
           }
         }
         if (!hasFieldRule) {
@@ -544,7 +582,7 @@
           }
         }
         if (nullFieldRules.containsKey(field.name.text)) {
-          FieldRule nullFieldRule = nullFieldRules.remove(field.name.text);
+          FieldRule? nullFieldRule = nullFieldRules.remove(field.name.text);
           if (nullFieldRule != null) {
             reportError('Only `null` is allowed for class `null`.');
           }
@@ -575,6 +613,10 @@
     reportError('Unknown classes without visit reference methods: '
         '${classesWithoutVisitReference}');
   }
+  if (interchangeableClasses.isNotEmpty) {
+    reportError('Unknown interchangeable classes: '
+        '${interchangeableClasses}');
+  }
   if (fieldRuleMap.isNotEmpty) {
     reportError('Unknown classes with field rules: ${fieldRuleMap.keys}');
   }
@@ -589,7 +631,7 @@
   Class classConstant =
       astLibrary.classes.singleWhere((cls) => cls.name == 'Constant');
 
-  Library canonicalNameLibrary = compilerResult.component.libraries
+  Library canonicalNameLibrary = compilerResult.component!.libraries
       .singleWhere((library) => library.importUri == canonicalNameLibraryUri);
 
   Class referenceClass = canonicalNameLibrary.classes
@@ -609,18 +651,20 @@
 
   /// Computes the [AstClass] corresponding to [node] if [node] is declared in
   /// 'package:kernel/ast.dart'.
-  AstClass computeAstClass(Class node) {
+  AstClass? computeAstClass(Class? node) {
     if (node == null) return null;
     if (node.enclosingLibrary != astLibrary) return null;
 
-    AstClass astClass = classMap[node];
+    AstClass? astClass = classMap[node];
     if (astClass == null) {
+      bool isInterchangeable = _interchangeableClasses.contains(node.name);
       if (node == classNode) {
-        astClass = new AstClass(node, kind: AstClassKind.root);
+        astClass = new AstClass(node,
+            kind: AstClassKind.root, isInterchangeable: isInterchangeable);
       } else if (classHierarchy.isSubtypeOf(node, classNode)) {
-        AstClass superclass = computeAstClass(node.superclass);
-        AstClassKind kind;
-        String declarativeName;
+        AstClass? superclass = computeAstClass(node.superclass);
+        AstClassKind? kind;
+        String? declarativeName;
         if (!node.isAbstract &&
             classHierarchy.isSubtypeOf(node, classNamedNode)) {
           kind = AstClassKind.named;
@@ -631,24 +675,27 @@
         astClass = new AstClass(node,
             superclass: superclass,
             kind: kind,
-            declarativeName: declarativeName);
+            declarativeName: declarativeName,
+            isInterchangeable: isInterchangeable);
         for (Supertype supertype in node.implementedTypes) {
-          AstClass astSupertype = computeAstClass(supertype.classNode);
+          AstClass? astSupertype = computeAstClass(supertype.classNode);
           if (astSupertype != null) {
             astClass.interfaces.add(astSupertype);
             astSupertype.subtypes.add(astClass);
           }
         }
       } else if (node.isEnum || _utilityClassesAsValues.contains(node.name)) {
-        astClass = new AstClass(node, kind: AstClassKind.utilityAsValue);
-      } else {
-        AstClass superclass = computeAstClass(node.superclass);
         astClass = new AstClass(node,
-            superclass: superclass, kind: AstClassKind.utilityAsStructure);
+            kind: AstClassKind.utilityAsValue,
+            isInterchangeable: isInterchangeable);
+      } else {
+        AstClass? superclass = computeAstClass(node.superclass);
+        astClass = new AstClass(node,
+            superclass: superclass,
+            kind: AstClassKind.utilityAsStructure,
+            isInterchangeable: isInterchangeable);
       }
-      if (astClass != null) {
-        classMap[node] = astClass;
-      }
+      classMap[node] = astClass;
     }
     return astClass;
   }
@@ -657,12 +704,16 @@
     computeAstClass(cls);
   }
 
-  for (AstClass astClass in classMap.values) {
+  Set<AstClass> hasComputedFields = {};
+
+  void computeAstFields(AstClass astClass) {
+    if (!hasComputedFields.add(astClass)) return;
+
     void computeAstField(Field field, Substitution substitution) {
       if (field.isStatic) {
         return;
       }
-      FieldRule rule = getFieldRule(astClass, field);
+      FieldRule? rule = getFieldRule(astClass, field);
       if (rule == null) {
         return;
       }
@@ -670,7 +721,7 @@
 
       FieldType computeFieldType(DartType type) {
         bool isDeclarativeType = false;
-        for (InterfaceType declarativeType in declarativeTypes) {
+        for (DartType declarativeType in declarativeTypes) {
           if (type is InterfaceType &&
               typeEnvironment.isSubtypeOf(
                   type, declarativeType, SubtypeCheckMode.withNullabilities)) {
@@ -687,7 +738,7 @@
                 "and a rule must therefore specify "
                 "whether this constitutes declarative or referential use.");
           }
-          if (!rule.isDeclaration) {
+          if (!rule.isDeclaration!) {
             return new FieldType(type, AstFieldKind.use);
           }
         }
@@ -695,21 +746,21 @@
             typeEnvironment.isSubtypeOf(type, coreTypes.listNullableRawType,
                 SubtypeCheckMode.withNullabilities)) {
           DartType elementType = typeEnvironment
-              .getTypeArgumentsAsInstanceOf(type, coreTypes.listClass)
+              .getTypeArgumentsAsInstanceOf(type, coreTypes.listClass)!
               .single;
           return new ListFieldType(type, computeFieldType(elementType));
         } else if (type is InterfaceType &&
             typeEnvironment.isSubtypeOf(type, coreTypes.setNullableRawType,
                 SubtypeCheckMode.withNullabilities)) {
           DartType elementType = typeEnvironment
-              .getTypeArgumentsAsInstanceOf(type, coreTypes.setClass)
+              .getTypeArgumentsAsInstanceOf(type, coreTypes.setClass)!
               .single;
           return new SetFieldType(type, computeFieldType(elementType));
         } else if (type is InterfaceType &&
             typeEnvironment.isSubtypeOf(type, coreTypes.mapNullableRawType,
                 SubtypeCheckMode.withNullabilities)) {
           List<DartType> typeArguments = typeEnvironment
-              .getTypeArgumentsAsInstanceOf(type, coreTypes.mapClass);
+              .getTypeArgumentsAsInstanceOf(type, coreTypes.mapClass)!;
           return new MapFieldType(type, computeFieldType(typeArguments[0]),
               computeFieldType(typeArguments[1]));
         } else if (type is InterfaceType &&
@@ -722,7 +773,7 @@
           return new FieldType(type, AstFieldKind.reference);
         } else {
           if (type is InterfaceType) {
-            AstClass astClass = classMap[type.classNode];
+            AstClass? astClass = classMap[type.classNode];
             if (astClass != null &&
                 astClass.kind == AstClassKind.utilityAsStructure) {
               return new UtilityFieldType(type, astClass);
@@ -732,13 +783,13 @@
         }
       }
 
-      FieldType fieldType;
-      fieldType ??= computeFieldType(type);
-      astClass.fields
-          .add(new AstField(field, rule.name ?? field.name.text, fieldType));
+      FieldType? fieldType = computeFieldType(type);
+      String name = rule.name ?? field.name.text;
+      astClass.fields[name] = new AstField(
+          astClass, field, name, fieldType, astClass.superclass?.fields[name]);
     }
 
-    AstClass parent = astClass;
+    AstClass? parent = astClass;
     Substitution substitution = Substitution.empty;
     while (parent != null) {
       for (Field field in parent.node.fields) {
@@ -747,17 +798,21 @@
       parent = parent.superclass;
       if (parent != null) {
         substitution = Substitution.fromSupertype(
-            classHierarchy.getClassAsInstanceOf(astClass.node, parent.node));
+            classHierarchy.getClassAsInstanceOf(astClass.node, parent.node)!);
       }
     }
   }
 
-  AstClass astClassNode = classMap[classNode];
-  AstClass astClassNamedNode = classMap[classNamedNode];
-  AstClass astClassConstant = classMap[classConstant];
+  for (AstClass astClass in classMap.values) {
+    computeAstFields(astClass);
+  }
+
+  AstClass astClassNode = classMap[classNode]!;
+  AstClass astClassNamedNode = classMap[classNamedNode]!;
+  AstClass astClassConstant = classMap[classConstant]!;
 
   if (printDump) {
-    print(classMap[classNode].dump());
+    print(classMap[classNode]!.dump());
     for (AstClass astClass in classMap.values) {
       if (astClass != astClassNode && astClass.superclass == null) {
         print(astClass.dump());
diff --git a/pkg/front_end/tool/compare_dill.dart b/pkg/front_end/tool/compare_dill.dart
index f7e24b3..39202d5 100644
--- a/pkg/front_end/tool/compare_dill.dart
+++ b/pkg/front_end/tool/compare_dill.dart
@@ -2,15 +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.
 
-// @dart=2.9
-
 import 'dart:io' show File;
 
 import '../test/binary_md_dill_reader.dart' show DillComparer;
 
 import '../test/utils/io_utils.dart' show computeRepoDir;
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length != 2) {
     throw "Expects two arguments: The two files to compare";
   }
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 38e9a55..92316dc 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -49,6 +49,8 @@
 // ignore: import_of_legacy_library_into_null_safe
 import 'package:front_end/src/fasta/incremental_compiler.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart';
+import 'package:front_end/src/fasta/source/diet_parser.dart'
+    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/uri_translator.dart';
@@ -472,6 +474,7 @@
 
   ExpectTest(this.call, this.result);
 
+  @override
   bool operator ==(Object other) {
     if (other is! ExpectTest) return false;
     if (other.call != call) return false;
@@ -479,6 +482,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "ExpectTest[$call, $result]";
   }
@@ -490,6 +494,7 @@
 
   TestParseError(this.message, this.position);
 
+  @override
   bool operator ==(Object other) {
     if (other is! TestParseError) return false;
     if (other.message != message) return false;
@@ -497,6 +502,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "TestParseError[$position, $message]";
   }
@@ -519,6 +525,7 @@
 
   TestResult(this.test, this.outcome);
 
+  @override
   bool operator ==(Object other) {
     if (other is! TestResult) return false;
     if (other.test != test) return false;
@@ -527,6 +534,7 @@
     return true;
   }
 
+  @override
   String toString() {
     if (message != null) {
       return "TestResult[$outcome, $test, $message]";
@@ -549,7 +557,8 @@
     final Token firstToken =
         scanRawBytes(utf8.encode(comments.substring(scanOffset)) as Uint8List);
     final ErrorListener listener = new ErrorListener();
-    final Parser parser = new Parser(listener);
+    final Parser parser = new Parser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     parser.asyncState = AsyncModifier.Async;
 
     final Token pastErrors = parser.skipErrorTokens(firstToken);
@@ -728,6 +737,7 @@
 
   CommentString(this.string, this.charOffset);
 
+  @override
   bool operator ==(Object other) {
     if (other is! CommentString) return false;
     if (other.string != string) return false;
@@ -735,6 +745,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "CommentString[$charOffset, $string]";
   }
@@ -764,6 +775,7 @@
       new Uri(scheme: "dartdoctest", path: "tester");
   DocTestIncrementalCompiler(CompilerContext context) : super(context);
 
+  @override
   bool dontReissueLibraryProblemsFor(Uri? uri) {
     return super.dontReissueLibraryProblemsFor(uri) || uri == dartDocTestUri;
   }
diff --git a/pkg/front_end/tool/fasta.dart b/pkg/front_end/tool/fasta.dart
index af6094b..3e02026 100644
--- a/pkg/front_end/tool/fasta.dart
+++ b/pkg/front_end/tool/fasta.dart
@@ -15,7 +15,7 @@
 String get dartVm =>
     Platform.isWindows ? '$repoDir/sdk/bin/dart.bat' : '$repoDir/sdk/bin/dart';
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   List<String> extraVmArguments = [];
   String script;
   List<String> scriptArguments = [];
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index cd92061..6a04071 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// An entrypoint used to run portions of fasta and measure its performance.
 library front_end.tool.fasta_perf;
 
@@ -20,6 +18,7 @@
 
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/base/processed_options.dart';
+import 'package:front_end/src/fasta/source/diet_parser.dart';
 import 'package:front_end/src/fasta/source/directive_listener.dart';
 import 'package:front_end/src/fasta/uri_translator.dart' show UriTranslator;
 
@@ -31,7 +30,7 @@
 /// Cumulative time spent scanning.
 Stopwatch scanTimer = new Stopwatch();
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   // TODO(sigmund): provide sdk folder as well.
   var options = argParser.parse(args);
   if (options.rest.length != 2) {
@@ -79,7 +78,7 @@
 Uri sdkRoot = Uri.base.resolve("sdk/");
 
 /// Translates `dart:*` and `package:*` URIs to resolved URIs.
-UriTranslator uriResolver;
+late UriTranslator uriResolver;
 
 /// Preliminary set up to be able to correctly resolve URIs on the given
 /// program.
@@ -153,8 +152,9 @@
 
 /// Add to [files] all sources reachable from [start].
 Future<Null> collectSources(Uri start, Map<Uri, List<int>> files) async {
-  helper(Uri uri) {
+  void helper(Uri uri) {
     uri = uriResolver.translate(uri) ?? uri;
+    // ignore: unnecessary_null_comparison
     if (uri == null) return;
     if (files.containsKey(uri)) return;
     var contents = readBytesFromFileSync(uri);
@@ -171,11 +171,13 @@
 /// import, export, and part directives.
 Set<String> extractDirectiveUris(List<int> contents) {
   var listener = new DirectiveListenerWithNative();
-  new TopLevelParser(listener).parseUnit(tokenize(contents));
+  new TopLevelParser(listener,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe)
+      .parseUnit(tokenize(contents));
   return new Set<String>()
-    ..addAll(listener.imports.map((directive) => directive.uri))
-    ..addAll(listener.exports.map((directive) => directive.uri))
-    ..addAll(listener.parts);
+    ..addAll(listener.imports.map((directive) => directive.uri!))
+    ..addAll(listener.exports.map((directive) => directive.uri!))
+    ..addAll(listener.parts.map((uri) => uri!));
 }
 
 class DirectiveListenerWithNative extends DirectiveListener {
@@ -200,9 +202,10 @@
 }
 
 /// Parse the full body of [source].
-parseFull(Uri uri, List<int> source) {
+void parseFull(Uri uri, List<int> source) {
   var tokens = tokenize(source);
-  Parser parser = new Parser(new _PartialAstBuilder(uri));
+  Parser parser = new Parser(new _PartialAstBuilder(uri),
+      useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
   parser.parseUnit(tokens);
 }
 
@@ -210,11 +213,12 @@
 // bodies. So this listener is not feature complete.
 class _PartialAstBuilder extends AstBuilder {
   _PartialAstBuilder(Uri uri)
-      : super(null, null, true, FeatureSet.latestLanguageVersion(), uri);
+      : super(null, uri, true, FeatureSet.latestLanguageVersion(), uri);
 }
 
 // Invoke the fasta kernel generator for the program starting in [entryUri]
-generateKernel(Uri entryUri, {bool compileSdk: true}) async {
+Future<CompilerResult> generateKernel(Uri entryUri,
+    {bool compileSdk: true}) async {
   // TODO(sigmund): this is here only to compute the input size,
   // we should extract the input size from the frontend instead.
   await scanReachableFiles(entryUri);
diff --git a/pkg/front_end/tool/fasta_perf_test.dart b/pkg/front_end/tool/fasta_perf_test.dart
index fb850f0..1671627 100644
--- a/pkg/front_end/tool/fasta_perf_test.dart
+++ b/pkg/front_end/tool/fasta_perf_test.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// The only purpose of this file is to enable analyzer tests on `perf.dart`,
 /// the code here just has a dummy import to the rest of the code.
 library front_end.tool.perf_test;
@@ -11,7 +9,7 @@
 import 'dart:io' show Platform;
 import 'fasta_perf.dart' as m show main;
 
-main() async {
+void main() async {
   var benchIds = [
     'scan',
     'kernel_gen_e2e',
diff --git a/pkg/front_end/tool/generate_ast_coverage.dart b/pkg/front_end/tool/generate_ast_coverage.dart
new file mode 100644
index 0000000..516d5e1
--- /dev/null
+++ b/pkg/front_end/tool/generate_ast_coverage.dart
@@ -0,0 +1,125 @@
+// 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 'ast_model.dart';
+import 'visitor_generator.dart';
+
+Uri computeCoverageUri(Uri repoDir) {
+  return repoDir.resolve('pkg/kernel/lib/src/coverage.dart');
+}
+
+void main(List<String> args) async {
+  Uri output = args.isEmpty
+      ? computeCoverageUri(Uri.base)
+      : new File(args[0]).absolute.uri;
+  String result = await generateAstCoverage(Uri.base);
+  new File.fromUri(output).writeAsStringSync(result);
+}
+
+Future<String> generateAstCoverage(Uri repoDir, [AstModel astModel]) async {
+  astModel ??= await deriveAstModel(repoDir);
+  return generateVisitor(astModel, new CoverageVisitorStrategy());
+}
+
+class CoverageVisitorStrategy extends Visitor0Strategy {
+  Map<String, Set<String>> nestedClassNames = {};
+
+  @override
+  String get generatorCommand =>
+      'dart pkg/front_end/tool/generate_ast_coverage.dart';
+
+  @override
+  String get returnType => 'void';
+
+  @override
+  String get visitorName => 'CoverageVisitor';
+
+  @override
+  String get visitorComment => '''
+/// Recursive visitor that collects kinds for all visited nodes.
+///
+/// This can be used to verify that tests have the intended coverage.''';
+
+  @override
+  void handleVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {
+    AstClass superAstClass = astClass.superclass;
+    while (superAstClass != null && !superAstClass.isInterchangeable) {
+      superAstClass = superAstClass.superclass;
+    }
+    String innerName = superAstClass?.name ?? 'Node';
+    (nestedClassNames[innerName] ??= {}).add(astClass.name);
+    sb.writeln('''
+    visited.add(${innerName}Kind.${astClass.name});
+    node.visitChildren(this);''');
+  }
+
+  @override
+  void handleVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
+    AstClass superAstClass = astClass.superclass;
+    while (superAstClass != null && !superAstClass.isInterchangeable) {
+      superAstClass = superAstClass.superclass;
+    }
+    if (superAstClass == astModel.constantClass) {
+      // Constants are only visited as references.
+      String innerName = superAstClass.name;
+      (nestedClassNames[innerName] ??= {}).add(astClass.name);
+      sb.writeln('''
+        visited.add(${innerName}Kind.${astClass.name});
+        node.visitChildren(this);''');
+    }
+  }
+
+  @override
+  void generateHeader(AstModel astModel, StringBuffer sb) {
+    super.generateHeader(astModel, sb);
+    sb.writeln('''
+    Set<Object> visited = {};''');
+  }
+
+  @override
+  void generateFooter(AstModel astModel, StringBuffer sb) {
+    super.generateFooter(astModel, sb);
+    nestedClassNames.forEach((String innerName, Set<String> classNames) {
+      sb.writeln('''
+
+enum ${innerName}Kind {''');
+      for (String className in classNames.toList()..sort()) {
+        sb.writeln('''
+  $className,''');
+      }
+      sb.writeln('''
+}''');
+    });
+    sb.writeln('''
+
+/// Returns the set of node kinds that were not visited by [visitor].
+Set<Object> missingNodes($visitorName visitor) {
+  Set<Object> all = {''');
+    nestedClassNames.forEach((String innerName, Set<String> classNames) {
+      sb.writeln('''
+    ...${innerName}Kind.values,''');
+    });
+    sb.writeln('''
+  };
+  all.removeAll(visitor.visited);
+  return all;
+}''');
+    nestedClassNames.forEach((String innerName, Set<String> classNames) {
+      if (innerName == 'Node') return;
+      sb.writeln('''
+/// Returns the set of [${innerName}Kind]s that were not visited by [visitor].
+Set<${innerName}Kind> missing${innerName}s($visitorName visitor) {
+  Set<${innerName}Kind> all = 
+    new Set<${innerName}Kind>.from(${innerName}Kind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}''');
+    });
+  }
+}
diff --git a/pkg/front_end/tool/generate_ast_equivalence.dart b/pkg/front_end/tool/generate_ast_equivalence.dart
index 87349d6..5a0c02b 100644
--- a/pkg/front_end/tool/generate_ast_equivalence.dart
+++ b/pkg/front_end/tool/generate_ast_equivalence.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 import 'dart:io';
 
 import 'ast_model.dart';
@@ -13,7 +11,7 @@
   return repoDir.resolve('pkg/kernel/lib/src/equivalence.dart');
 }
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Uri output = args.isEmpty
       ? computeEquivalenceUri(Uri.base)
       : new File(args[0]).absolute.uri;
@@ -21,8 +19,8 @@
   new File.fromUri(output).writeAsStringSync(result);
 }
 
-Future<String> generateAstEquivalence(Uri repoDir) async {
-  AstModel astModel = await deriveAstModel(repoDir);
+Future<String> generateAstEquivalence(Uri repoDir, [AstModel? astModel]) async {
+  astModel ??= await deriveAstModel(repoDir);
   return generateVisitor(astModel, new EquivalenceVisitorStrategy());
 }
 
@@ -33,6 +31,10 @@
   EquivalenceVisitorStrategy();
 
   @override
+  String get generatorCommand =>
+      'dart pkg/front_end/tool/generate_ast_equivalence.dart';
+
+  @override
   String get argumentType => 'Node';
 
   @override
@@ -106,11 +108,12 @@
 
   String classCheckName(AstClass astClass) => 'check${astClass.name}';
 
-  String fieldCheckName(AstClass astClass, AstField field) =>
-      'check${astClass.name}_${field.name}';
+  String fieldCheckName(AstField field) =>
+      'check${field.astClass.name}_${field.name}';
 
   @override
-  void handleDefaultVisit(AstClass astClass, StringBuffer sb) {
+  void handleDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
     return false;''');
   }
@@ -136,13 +139,13 @@
       case AstFieldKind.use:
         return '$prefix$shallowMatchDeclarations';
       case AstFieldKind.list:
-        ListFieldType listFieldType = fieldType;
+        ListFieldType listFieldType = fieldType as ListFieldType;
         String elementEquivalence =
             computeMatchingHelper(listFieldType.elementType);
         return '($thisName, $otherName) => $prefix$matchLists('
             '$thisName, $otherName, $elementEquivalence)';
       case AstFieldKind.set:
-        SetFieldType setFieldType = fieldType;
+        SetFieldType setFieldType = fieldType as SetFieldType;
         String elementMatching =
             computeMatchingHelper(setFieldType.elementType);
         String elementEquivalence =
@@ -150,7 +153,7 @@
         return '($thisName, $otherName) => $prefix$checkSets('
             '$thisName, $otherName, $elementMatching, $elementEquivalence)';
       case AstFieldKind.map:
-        MapFieldType mapFieldType = fieldType;
+        MapFieldType mapFieldType = fieldType as MapFieldType;
         String keyMatching = computeMatchingHelper(mapFieldType.keyType);
         String keyEquivalence = computeEquivalenceHelper(mapFieldType.keyType);
         String valueEquivalence =
@@ -160,7 +163,7 @@
             '$keyEquivalence, $valueEquivalence)';
       case AstFieldKind.utility:
         StringBuffer sb = new StringBuffer();
-        UtilityFieldType utilityFieldType = fieldType;
+        UtilityFieldType utilityFieldType = fieldType as UtilityFieldType;
         registerAstClassEquivalence(utilityFieldType.astClass);
         sb.writeln('''($thisName, $otherName, _) {
     if (identical($thisName, $otherName)) return true;
@@ -173,7 +176,6 @@
   }''');
         return sb.toString();
     }
-    throw ArgumentError("Unexpected field type ${fieldType}");
   }
 
   /// Computes the expression code for checking the equivalence of two fields
@@ -196,13 +198,13 @@
       case AstFieldKind.use:
         return '$prefix$checkDeclarations';
       case AstFieldKind.list:
-        ListFieldType listFieldType = fieldType;
+        ListFieldType listFieldType = fieldType as ListFieldType;
         String elementEquivalence =
             computeEquivalenceHelper(listFieldType.elementType);
         return '($thisName, $otherName) => $prefix$checkLists('
             '$thisName, $otherName, $elementEquivalence)';
       case AstFieldKind.set:
-        SetFieldType setFieldType = fieldType;
+        SetFieldType setFieldType = fieldType as SetFieldType;
         String elementMatching =
             computeMatchingHelper(setFieldType.elementType);
         String elementEquivalence =
@@ -210,7 +212,7 @@
         return '($thisName, $otherName) => $prefix$checkSets('
             '$thisName, $otherName, $elementMatching, $elementEquivalence)';
       case AstFieldKind.map:
-        MapFieldType mapFieldType = fieldType;
+        MapFieldType mapFieldType = fieldType as MapFieldType;
         String keyMatching = computeMatchingHelper(mapFieldType.keyType);
         String keyEquivalence = computeEquivalenceHelper(mapFieldType.keyType);
         String valueEquivalence =
@@ -220,7 +222,7 @@
             '$keyEquivalence, $valueEquivalence)';
       case AstFieldKind.utility:
         StringBuffer sb = new StringBuffer();
-        UtilityFieldType utilityFieldType = fieldType;
+        UtilityFieldType utilityFieldType = fieldType as UtilityFieldType;
         registerAstClassEquivalence(utilityFieldType.astClass);
         sb.writeln('''($thisName, $otherName, _) {
     if (identical($thisName, $otherName)) return true;
@@ -233,7 +235,6 @@
   }''');
         return sb.toString();
     }
-    throw ArgumentError("Unexpected field type ${fieldType}");
   }
 
   /// Registers that a strategy method is needed for checking [astClass].
@@ -274,10 +275,10 @@
     }
     classStrategy.writeln('''
     bool result = true;''');
-    for (AstField field in astClass.fields) {
-      registerAstFieldEquivalence(astClass, field);
+    for (AstField field in astClass.fields.values) {
+      registerAstFieldEquivalence(field);
       classStrategy.writeln('''
-    if (!${fieldCheckName(astClass, field)}(visitor, $thisName, $otherName)) {
+    if (!${fieldCheckName(field)}(visitor, $thisName, $otherName)) {
       result = visitor.$resultOnInequivalence;
     }''');
     }
@@ -299,69 +300,75 @@
   ///
   /// If the method has not already been generated, it is generated and stored
   /// in [_fieldStrategyMembers].
-  void registerAstFieldEquivalence(AstClass astClass, AstField field) {
+  void registerAstFieldEquivalence(AstField field) {
     if (_fieldStrategyMembers.containsKey(field)) return;
 
+    AstClass astClass = field.astClass;
     String thisName = 'node';
     String otherName = 'other';
     StringBuffer fieldStrategy = new StringBuffer();
     fieldStrategy.writeln('''
-  bool ${fieldCheckName(astClass, field)}(
+  bool ${fieldCheckName(field)}(
       $visitorName visitor,
       ${astClass.name} $thisName,
       ${astClass.name} $otherName) {''');
-
-    switch (field.type.kind) {
-      case AstFieldKind.value:
-        fieldStrategy.writeln('''
+    if (field.parentField != null) {
+      registerAstFieldEquivalence(field.parentField!);
+      fieldStrategy.writeln('''
+    return ${fieldCheckName(field.parentField!)}(
+        visitor, $thisName, $otherName);''');
+    } else {
+      switch (field.type.kind) {
+        case AstFieldKind.value:
+          fieldStrategy.writeln('''
     return visitor.$checkValues(
         $thisName.${field.name},
         $otherName.${field.name},
         '${field.name}');''');
-        break;
-      case AstFieldKind.node:
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.node:
+          fieldStrategy.writeln('''
     return visitor.$checkNodes(
         $thisName.${field.name},
         $otherName.${field.name},
         '${field.name}');''');
-        break;
-      case AstFieldKind.reference:
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.reference:
+          fieldStrategy.writeln('''
     return visitor.$checkReferences(
         $thisName.${field.name},
         $otherName.${field.name},
         '${field.name}');''');
-        break;
-      case AstFieldKind.use:
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.use:
+          fieldStrategy.writeln('''
     return visitor.$checkDeclarations(
         $thisName.${field.name},
         $otherName.${field.name},
         '${field.name}');''');
-        break;
-      case AstFieldKind.list:
-        ListFieldType listFieldType = field.type;
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.list:
+          ListFieldType listFieldType = field.type as ListFieldType;
+          fieldStrategy.writeln('''
     return visitor.$checkLists(
         $thisName.${field.name},
         $otherName.${field.name},
         ${computeEquivalenceHelper(listFieldType.elementType, 'visitor.')},
         '${field.name}');''');
-        break;
-      case AstFieldKind.set:
-        SetFieldType setFieldType = field.type;
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.set:
+          SetFieldType setFieldType = field.type as SetFieldType;
+          fieldStrategy.writeln('''
     return visitor.$checkSets(
         $thisName.${field.name},
         $otherName.${field.name},
         ${computeMatchingHelper(setFieldType.elementType, 'visitor.')},
         ${computeEquivalenceHelper(setFieldType.elementType, 'visitor.')},
         '${field.name}');''');
-        break;
-      case AstFieldKind.map:
-        MapFieldType mapFieldType = field.type;
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.map:
+          MapFieldType mapFieldType = field.type as MapFieldType;
+          fieldStrategy.writeln('''
     return visitor.$checkMaps(
         $thisName.${field.name},
         $otherName.${field.name},
@@ -369,17 +376,18 @@
         ${computeEquivalenceHelper(mapFieldType.keyType, 'visitor.')},
         ${computeEquivalenceHelper(mapFieldType.valueType, 'visitor.')},
         '${field.name}');''');
-        break;
-      case AstFieldKind.utility:
-        UtilityFieldType utilityFieldType = field.type;
-        registerAstClassEquivalence(utilityFieldType.astClass);
-        fieldStrategy.writeln('''
+          break;
+        case AstFieldKind.utility:
+          UtilityFieldType utilityFieldType = field.type as UtilityFieldType;
+          registerAstClassEquivalence(utilityFieldType.astClass);
+          fieldStrategy.writeln('''
     '${field.name}';
     return ${classCheckName(utilityFieldType.astClass)}(
         visitor,
         $thisName.${field.name},
         $otherName.${field.name});''');
-        break;
+          break;
+      }
     }
     fieldStrategy.writeln('''
   }''');
@@ -387,7 +395,7 @@
   }
 
   @override
-  void handleVisit(AstClass astClass, StringBuffer sb) {
+  void handleVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {
     registerAstClassEquivalence(astClass);
     sb.writeln('''
     return strategy.${classCheckName(astClass)}(
@@ -395,26 +403,23 @@
   }
 
   @override
-  void handleDefaultVisitReference(AstClass astClass, StringBuffer sb) {
+  void handleDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
     return false;''');
   }
 
   @override
-  void handleVisitReference(AstClass astClass, StringBuffer sb) {
+  void handleVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
     return false;''');
   }
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
-// 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.
-
-// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Run 'dart pkg/front_end/tool/generate_ast_equivalence.dart' to update.
+$preamble
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/src/printer.dart';
@@ -428,7 +433,7 @@
 /// current assumptions. The current state has two modes. In the asserting mode,
 /// the default, inequivalences are registered when found. In the non-asserting
 /// mode, inequivalences are _not_ registered. The latter is used to compute
-/// equivalences in sand boxed state, for instance to determine which elements
+/// equivalences in sandboxed state, for instance to determine which elements
 /// to pair when checking equivalence of two sets.
 class $visitorName$visitorTypeParameters
     implements Visitor1<$returnType, $argumentType> {
@@ -504,12 +509,14 @@
     return result;
   }
 
-  /// Returns `true` if [a] and [b] are equivalent, as defined by their
-  /// corresponding canonical names. Inequivalence is _not_ registered.
+  /// Returns `true` if [a] and [b] are equivalent, either by existing 
+  /// assumption or as defined by their corresponding canonical names. 
+  /// Inequivalence is _not_ registered.
   bool $matchNamedNodes(NamedNode? a, NamedNode? b) {
     return identical(a, b) ||
         a == null ||
         b == null ||
+        checkAssumedReferences(a.reference, b.reference) ||
         new ReferenceName.fromNamedNode(a) ==
             new ReferenceName.fromNamedNode(b);
   }
@@ -527,10 +534,12 @@
     return $checkingState.$assumeReferences(a, b);
   }
 
-  /// Returns `true` if [a] and [b] are equivalent, as defined by their
-  /// corresponding canonical names. Inequivalence is _not_ registered.
+  /// Returns `true` if [a] and [b] are equivalent, either by existing
+  /// assumption or as defined by their corresponding canonical names. 
+  /// Inequivalence is _not_ registered.
   bool $matchReferences(Reference? a, Reference? b) {
     return identical(a, b) ||
+        checkAssumedReferences(a, b) ||
         ReferenceName.fromReference(a) ==
             ReferenceName.fromReference(b);
   }
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 81956ff..e3dda75 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// An entrypoint used to measure performance of the incremental compiler.
 ///
 /// Given an input a program and a .json file describing edits, this script will
@@ -57,7 +55,7 @@
 
 import 'perf_common.dart';
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   var options = argParser.parse(args);
   if (options.rest.length != 2) {
     throw """
@@ -100,8 +98,8 @@
     bool verbose,
     bool verboseCompilation,
     List<ChangeSet> changeSets,
-    String sdkSummary,
-    String sdkLibrarySpecification,
+    String? sdkSummary,
+    String? sdkLibrarySpecification,
     String cache) async {
   var overlayFs = new OverlayFileSystem();
   var compilerOptions = new CompilerOptions()
@@ -157,7 +155,7 @@
 
 /// Apply all edits of a single iteration by updating the copy of the file in
 /// the memory file system.
-applyEdits(
+Future<void> applyEdits(
     List<Edit> edits,
     OverlayFileSystem fs,
     IncrementalKernelGenerator generator,
@@ -168,9 +166,10 @@
       print('edit $edit');
     }
     var uri = edit.uri;
-    if (uri.scheme == 'package') uri = uriTranslator.translate(uri);
+    if (uri.scheme == 'package') uri = uriTranslator.translate(uri)!;
     generator.invalidate(uri);
-    OverlayFileSystemEntity entity = fs.entityForUri(uri);
+    OverlayFileSystemEntity entity =
+        fs.entityForUri(uri) as OverlayFileSystemEntity;
     var contents = await entity.readAsString();
     entity.writeAsStringSync(
         contents.replaceAll(edit.original, edit.replacement));
@@ -227,18 +226,19 @@
 }
 
 class OverlayFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
-  FileSystemEntity _delegate;
+  FileSystemEntity? _delegate;
   final OverlayFileSystem _fs;
 
   OverlayFileSystemEntity(this.uri, this._fs);
 
   Future<FileSystemEntity> get delegate async {
-    if (_delegate != null) return _delegate;
+    if (_delegate != null) return _delegate!;
     FileSystemEntity entity = _fs.memory.entityForUri(uri);
     if (await entity.exists()) {
       _delegate = entity;
-      return _delegate;
+      return _delegate!;
     }
     return _delegate = _fs.physical.entityForUri(uri.replace(scheme: 'file'));
   }
@@ -273,6 +273,7 @@
   Edit(String uriString, this.original, this.replacement)
       : uri = _resolveOverlayUri(uriString);
 
+  @override
   String toString() => 'Edit($uri, "$original" -> "$replacement")';
 }
 
@@ -283,10 +284,11 @@
 
   ChangeSet(this.name, this.edits);
 
+  @override
   String toString() => 'ChangeSet($name, $edits)';
 }
 
-_resolveOverlayUri(String uriString) {
+Uri _resolveOverlayUri(String uriString) {
   Uri result = Uri.base.resolve(uriString);
   return result.isScheme("file")
       ? result.replace(scheme: 'org-dartlang-overlay')
diff --git a/pkg/front_end/tool/incremental_perf_test.dart b/pkg/front_end/tool/incremental_perf_test.dart
index 72deb00..d24c01a 100644
--- a/pkg/front_end/tool/incremental_perf_test.dart
+++ b/pkg/front_end/tool/incremental_perf_test.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// Test to ensure that incremental_perf.dart is running without errors.
 
 import 'dart:io';
@@ -11,7 +9,7 @@
     show computePlatformBinariesLocation;
 import 'incremental_perf.dart' as m show main;
 
-main() async {
+void main() async {
   var sdkOutline = computePlatformBinariesLocation(forceBuildDir: true).resolve(
       // TODO(sigmund): switch to `vm_outline.dill` (issue #29881).
       "vm_platform_strong.dill");
diff --git a/pkg/front_end/tool/kernel_ast_file_rewriter.dart b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
index 7f3e6da..2d0e924 100644
--- a/pkg/front_end/tool/kernel_ast_file_rewriter.dart
+++ b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import "dart:io" show File, Platform, stdout;
 import "dart:typed_data" show Uint8List;
 
@@ -30,7 +28,7 @@
     classes[identifier.token.toString()] = cls;
   }
 
-  Set<String> goodNames = {"TreeNode"};
+  Set<String?> goodNames = {"TreeNode"};
   Map<Token, Replacement> replacements = {};
   for (MapEntry<String, DirectParserASTContentTopLevelDeclarationEnd> entry
       in classes.entries) {
@@ -41,9 +39,9 @@
       // Cached good.
     } else {
       // Check if good.
-      String parent = getExtends(cls);
-      DirectParserASTContentTopLevelDeclarationEnd parentCls = classes[parent];
-      List<String> allParents = [parent];
+      String? parent = getExtends(cls);
+      DirectParserASTContentTopLevelDeclarationEnd? parentCls = classes[parent];
+      List<String?> allParents = [parent];
       while (
           parent != null && parentCls != null && !goodNames.contains(parent)) {
         parent = getExtends(parentCls);
@@ -71,18 +69,18 @@
             member.getClassConstructor();
         Token nameToken = constructor.beginToken;
         // String name = nameToken.lexeme;
-        if (nameToken.next.lexeme == ".") {
-          nameToken = nameToken.next.next;
+        if (nameToken.next!.lexeme == ".") {
+          nameToken = nameToken.next!.next!;
           // name += ".$nameToken";
           namedClassConstructors.add(nameToken.lexeme);
         }
-        if (nameToken.next.lexeme == ".") {
+        if (nameToken.next!.lexeme == ".") {
           throw "Unexpected";
         }
       } else if (member.isClassFields()) {
         DirectParserASTContentClassFieldsEnd classFields =
             member.getClassFields();
-        Token identifierToken = classFields.getFieldIdentifiers().single.token;
+        Token identifierToken = classFields.getFieldIdentifiers().single!.token;
         String identifier = identifierToken.toString();
         namedFields.add(identifier);
       }
@@ -106,11 +104,11 @@
       }
     }
   }
-  Token token = ast.getBegin().token;
+  Token? token = ast.getBegin().token;
 
   int endOfLast = token.end;
   while (token != null) {
-    CommentToken comment = token.precedingComments;
+    CommentToken? comment = token.precedingComments;
     while (comment != null) {
       if (comment.offset > endOfLast) {
         for (int i = endOfLast; i < comment.offset; i++) {
@@ -121,7 +119,7 @@
 
       stdout.write(comment.value());
       endOfLast = comment.end;
-      comment = comment.next;
+      comment = comment.next as CommentToken?;
     }
 
     if (token.isEof) break;
@@ -132,7 +130,7 @@
       }
     }
 
-    Replacement replacement = replacements[token];
+    Replacement? replacement = replacements[token];
     if (replacement != null) {
       stdout.write(replacement.replacement);
       token = replacement.endToken;
@@ -154,7 +152,7 @@
     throw "Notice ${classFields.count}";
   }
 
-  Token identifierToken = classFields.getFieldIdentifiers().single.token;
+  Token identifierToken = classFields.getFieldIdentifiers().single!.token;
   String identifier = identifierToken.toString();
 
   if (identifier == "frozen" && entry.key == "TreeNode") return;
@@ -167,19 +165,19 @@
     isFinal = true;
   }
 
-  DirectParserASTContentTypeHandle type = classFields.getFirstType();
+  DirectParserASTContentTypeHandle? type = classFields.getFirstType();
   String typeString = "dynamic";
   if (type != null) {
     Token token = type.beginToken;
     typeString = "";
     while (token != identifierToken) {
       typeString += " ${token.lexeme}";
-      token = token.next;
+      token = token.next!;
     }
     typeString = typeString.trim();
   }
 
-  DirectParserASTContentFieldInitializerEnd initializer =
+  DirectParserASTContentFieldInitializerEnd? initializer =
       classFields.getFieldInitializer();
   String initializerString = "";
   if (initializer != null) {
@@ -187,14 +185,16 @@
     Token endToken = initializer.token;
     while (token != endToken) {
       initializerString += " ${token.lexeme}";
-      token = token.next;
+      token = token.next!;
     }
     initializerString = initializerString.trim();
   }
 
   Token beginToken = classFields.beginToken;
   Token endToken = classFields.endToken;
+  // ignore: unnecessary_null_comparison
   assert(beginToken != null);
+  // ignore: unnecessary_null_comparison
   assert(endToken != null);
 
   String frozenCheckCode =
@@ -254,15 +254,15 @@
 
   for (DirectParserASTContentFormalParameterEnd parameter in parameters) {
     Token token = parameter.getBegin().token;
-    if (token?.lexeme != "this") {
+    if (token.lexeme != "this") {
       continue;
     }
     // Here `this.foo` can just be replace with `this._foo`.
-    Token afterDot = token.next.next;
+    Token afterDot = token.next!.next!;
     replacements[afterDot] = new Replacement(afterDot, afterDot, "_$afterDot");
   }
 
-  DirectParserASTContentOptionalFormalParametersEnd optionalFormalParameters =
+  DirectParserASTContentOptionalFormalParametersEnd? optionalFormalParameters =
       formalParameters.getOptionalFormalParameters();
   Set<String> addInitializers = {};
   if (optionalFormalParameters != null) {
@@ -271,20 +271,20 @@
 
     for (DirectParserASTContentFormalParameterEnd parameter in parameters) {
       Token token = parameter.getBegin().token;
-      if (token?.lexeme != "this") {
+      if (token.lexeme != "this") {
         continue;
       }
       // Here `this.foo` can't just be replace with `this._foo` as it is
       // (possibly) named and we can't use private stuff in named.
       // Instead we replace it with `dynamic foo` here and add an
       // initializer `this._foo = foo`.
-      Token afterDot = token.next.next;
+      Token afterDot = token.next!.next!;
       addInitializers.add(afterDot.lexeme);
-      replacements[token] = new Replacement(token, token.next, "dynamic ");
+      replacements[token] = new Replacement(token, token.next!, "dynamic ");
     }
   }
 
-  DirectParserASTContentInitializersEnd initializers =
+  DirectParserASTContentInitializersEnd? initializers =
       constructor.getInitializers();
 
   // First patch up any existing initializers.
@@ -296,7 +296,7 @@
       Token token = initializer.getBegin().token;
       // This is only afterDot if there's a dot --- which (probably) is
       // only there if there's a `this`.
-      Token afterDot = token.next.next;
+      Token afterDot = token.next!.next!;
 
       // We need to check it's not a redirecting call!
       // TODO(jensj): Handle redirects like this:
@@ -345,7 +345,7 @@
   } else if (addInitializers.isNotEmpty) {
     // Add to existing initializer list. We add them as the first one(s)
     // so we don't have to insert before the potential super call.
-    DirectParserASTContentInitializersBegin firstOne = initializers.getBegin();
+    DirectParserASTContentInitializersBegin firstOne = initializers!.getBegin();
     Token colon = firstOne.token;
     assert(colon.lexeme == ":");
     String initializerString =
@@ -365,7 +365,7 @@
   //    C(this.field1) : field2 = field1 + 1;
   //  }
   if (addInitializers.isNotEmpty) {
-    DirectParserASTContentBlockFunctionBodyEnd blockFunctionBody =
+    DirectParserASTContentBlockFunctionBodyEnd? blockFunctionBody =
         constructor.getBlockFunctionBody();
     if (blockFunctionBody != null) {
       List<DirectParserASTContentIdentifierHandle> identifiers =
@@ -395,13 +395,13 @@
   Replacement(this.beginToken, this.endToken, this.replacement);
 }
 
-String getExtends(DirectParserASTContentTopLevelDeclarationEnd cls) {
+String? getExtends(DirectParserASTContentTopLevelDeclarationEnd cls) {
   DirectParserASTContentClassDeclarationEnd classDeclaration =
       cls.getClassDeclaration();
 
   DirectParserASTContentClassExtendsHandle classExtends =
       classDeclaration.getClassExtends();
-  Token extendsKeyword = classExtends.extendsKeyword;
+  Token? extendsKeyword = classExtends.extendsKeyword;
   if (extendsKeyword == null) {
     return null;
   } else {
@@ -410,7 +410,7 @@
 }
 
 void debugDumpNode(DirectParserASTContent node) {
-  node.children.forEach((element) {
+  node.children!.forEach((element) {
     print("${element.what} (${element.deprecatedArguments}) "
         "(${element.children})");
   });
@@ -420,10 +420,10 @@
     {String indent = ""}) {
   print("$indent${node.what} (${node.deprecatedArguments})");
   if (node.children == null) return;
-  node.children.forEach((element) {
+  node.children!.forEach((element) {
     print("$indent${element.what} (${element.deprecatedArguments})");
     if (element.children != null) {
-      element.children.forEach((element) {
+      element.children!.forEach((element) {
         debugDumpNodeRecursively(element, indent: "  $indent");
       });
     }
diff --git a/pkg/front_end/tool/parser_direct_ast/console_helper.dart b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
index d758c92..ad90ce7 100644
--- a/pkg/front_end/tool/parser_direct_ast/console_helper.dart
+++ b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
@@ -2,23 +2,21 @@
 // for 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" show StreamSubscription, Timer;
 import "dart:io" show Platform, ProcessSignal, exit, stdin, stdout;
 import "dart:isolate" show RawReceivePort;
 import "dart:typed_data" show Uint16List;
 
 class Application {
-  int _latestKnownTerminalColumns;
-  int _latestKnownTerminalRows;
-  RawReceivePort _preventClose;
-  StreamSubscription<List<int>> _stdinListen;
-  StreamSubscription<ProcessSignal> _sigintListen;
-  StreamSubscription<ProcessSignal> _sigwinchListen;
-  Timer _timer;
+  late int _latestKnownTerminalColumns;
+  late int _latestKnownTerminalRows;
+  late RawReceivePort _preventClose;
+  late StreamSubscription<List<int>> _stdinListen;
+  late StreamSubscription<ProcessSignal> _sigintListen;
+  StreamSubscription<ProcessSignal>? _sigwinchListen;
+  Timer? _timer;
   final Widget _widget;
-  _Output _output;
+  late _Output _output;
   bool _started = false;
 
   Application(this._widget) {
@@ -65,7 +63,7 @@
   void quit() {
     _gotoMainScreenBuffer();
     _showCursor();
-    _timer.cancel();
+    _timer!.cancel();
     _preventClose.close();
     _stdinListen.cancel();
     _sigintListen.cancel();
@@ -99,26 +97,26 @@
     });
   }
 
-  _Output _prevOutput;
+  _Output? _prevOutput;
 
-  _printOutput() {
+  void _printOutput() {
     int currentPosRow = -1;
     int currentPosColumn = -1;
     StringBuffer buffer = new StringBuffer();
     if (_prevOutput == null ||
-        _prevOutput.columns != _output.columns ||
-        _prevOutput.rows != _output.rows) {
+        _prevOutput!.columns != _output.columns ||
+        _prevOutput!.rows != _output.rows) {
       _clearScreenAlt();
       _prevOutput = null;
     }
     for (int row = 0; row < _output.rows; row++) {
       for (int column = 0; column < _output.columns; column++) {
-        String char = _output.getChar(row, column);
+        String? char = _output.getChar(row, column);
         int rawModifier = _output.getRawModifiers(row, column);
 
         if (_prevOutput != null) {
-          String prevChar = _prevOutput.getChar(row, column);
-          int prevRawModifier = _prevOutput.getRawModifiers(row, column);
+          String? prevChar = _prevOutput!.getChar(row, column);
+          int prevRawModifier = _prevOutput!.getRawModifiers(row, column);
           if (prevChar == char && prevRawModifier == rawModifier) continue;
         }
 
@@ -269,7 +267,7 @@
 }
 
 class BoxedWidget extends Widget {
-  final Widget _content;
+  final Widget? _content;
   BoxedWidget(this._content);
 
   @override
@@ -304,7 +302,7 @@
 }
 
 class QuitOnQWidget extends Widget {
-  Widget _contentWidget;
+  Widget? _contentWidget;
 
   QuitOnQWidget(this._contentWidget);
 
@@ -324,8 +322,8 @@
 }
 
 class WithSingleLineBottomWidget extends Widget {
-  Widget _contentWidget;
-  Widget _bottomWidget;
+  Widget? _contentWidget;
+  Widget? _bottomWidget;
 
   WithSingleLineBottomWidget(this._contentWidget, this._bottomWidget);
 
@@ -380,7 +378,9 @@
 }
 
 class _Output implements WriteOnlyOutput {
+  @override
   final int rows;
+  @override
   final int columns;
   final Uint16List _text;
   final Uint16List _modifiers;
@@ -393,11 +393,12 @@
     return row * columns + column;
   }
 
+  @override
   void setCell(int row, int column,
-      {String char,
-      Modifier modifier,
-      ForegroundColor foregroundColor,
-      BackgroundColor backgroundColor}) {
+      {String? char,
+      Modifier? modifier,
+      ForegroundColor? foregroundColor,
+      BackgroundColor? backgroundColor}) {
     int position = getPosition(row, column);
 
     if (char != null) {
@@ -429,7 +430,7 @@
     _modifiers[position] = outModifier;
   }
 
-  String getChar(int row, int column) {
+  String? getChar(int row, int column) {
     int position = getPosition(row, column);
     int char = _text[position];
     if (char > 0) return new String.fromCharCode(char);
@@ -467,17 +468,19 @@
   int get rows;
   int get columns;
   void setCell(int row, int column,
-      {String char,
-      Modifier modifier,
-      ForegroundColor foregroundColor,
-      BackgroundColor backgroundColor});
+      {String? char,
+      Modifier? modifier,
+      ForegroundColor? foregroundColor,
+      BackgroundColor? backgroundColor});
 }
 
 class WriteOnlyPartialOutput implements WriteOnlyOutput {
   final WriteOnlyOutput _output;
   final int offsetRow;
   final int offsetColumn;
+  @override
   final int rows;
+  @override
   final int columns;
   WriteOnlyPartialOutput(this._output, this.offsetRow, this.offsetColumn,
       this.rows, this.columns) {
@@ -489,10 +492,10 @@
 
   @override
   void setCell(int row, int column,
-      {String char,
-      Modifier modifier,
-      ForegroundColor foregroundColor,
-      BackgroundColor backgroundColor}) {
+      {String? char,
+      Modifier? modifier,
+      ForegroundColor? foregroundColor,
+      BackgroundColor? backgroundColor}) {
     if (row >= rows || column >= columns) return;
     _output.setCell(row + offsetRow, column + offsetColumn,
         char: char,
diff --git a/pkg/front_end/tool/parser_direct_ast/viewer.dart b/pkg/front_end/tool/parser_direct_ast/viewer.dart
index 276ea23..aeee1b5 100644
--- a/pkg/front_end/tool/parser_direct_ast/viewer.dart
+++ b/pkg/front_end/tool/parser_direct_ast/viewer.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import "dart:io" show File, Platform;
 import "dart:typed_data" show Uint8List;
 
@@ -35,9 +33,9 @@
 
 class PrintedLine {
   final String text;
-  final DirectParserASTContent ast;
-  final List<PrintedLine> parentShown;
-  final int selected;
+  final DirectParserASTContent? ast;
+  final List<PrintedLine>? parentShown;
+  final int? selected;
 
   PrintedLine.parent(this.parentShown, this.selected)
       : text = "..",
@@ -52,7 +50,7 @@
 }
 
 class AstWidget extends Widget {
-  List<PrintedLine> shown;
+  late List<PrintedLine> shown;
   int selected = 0;
 
   AstWidget(DirectParserASTContent ast) {
@@ -75,7 +73,7 @@
     }
     String extra = " ";
     if (element.children != null) {
-      extra += element.children.first.deprecatedArguments.toString();
+      extra += element.children!.first.deprecatedArguments.toString();
     }
     return "${indent ? "  " : ""}"
         "${header}${element.what} "
@@ -112,11 +110,11 @@
     // Enter selected line.
     PrintedLine selectedElement = shown[selected];
     if (selectedElement.parentShown != null) {
-      shown = selectedElement.parentShown;
-      selected = selectedElement.selected;
+      shown = selectedElement.parentShown!;
+      selected = selectedElement.selected!;
     } else {
       shown = [new PrintedLine.parent(shown, selected)];
-      List<DirectParserASTContent> children = selectedElement.ast.children;
+      List<DirectParserASTContent>? children = selectedElement.ast!.children;
       if (children != null) {
         for (int i = 0; i < children.length; i++) {
           shown.add(new PrintedLine.ast(
@@ -124,7 +122,7 @@
         }
       }
       shown.add(new PrintedLine.parentWithText(shown,
-          textualize(selectedElement.ast, withEndHeader: true), shown.length));
+          textualize(selectedElement.ast!, withEndHeader: true), shown.length));
       selected = 0;
     }
   }
@@ -160,7 +158,7 @@
 }
 
 class StatusBarWidget extends Widget {
-  List<int> latestInput;
+  List<int>? latestInput;
 
   @override
   void print(WriteOnlyOutput output) {
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index 0917caf..bd751cb 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// An entrypoint used to run portions of analyzer and measure its performance.
 ///
 /// TODO(sigmund): rename to 'analyzer_perf.dart' in sync with changes to the
@@ -34,7 +32,7 @@
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:path/path.dart' as path;
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   // TODO(sigmund): provide sdk folder as well.
   if (args.length < 2) {
     print('usage: perf.dart <bench-id> <entry.dart>');
@@ -80,7 +78,7 @@
 int inputSize = 0;
 
 /// Factory to load and resolve app, packages, and sdk sources.
-SourceFactory sources;
+late SourceFactory sources;
 
 /// Path to the root of the built SDK that is being used to execute this script.
 final _sdkPath = _findSdkPath();
@@ -91,7 +89,7 @@
   var unit = parseDirectives(start);
   for (var directive in unit.directives) {
     if (directive is UriBasedDirective) {
-      var next = sources.resolveUri(start, directive.uri.stringValue);
+      var next = sources.resolveUri(start, directive.uri.stringValue)!;
       collectSources(next, files);
     }
   }
@@ -164,7 +162,7 @@
   var files = new Set<Source>();
   var loadTimer = new Stopwatch()..start();
   scanTimer = new Stopwatch();
-  collectSources(sources.forUri2(entryUri), files);
+  collectSources(sources.forUri2(entryUri)!, files);
 
   var libs = [
     'dart:async',
@@ -181,7 +179,7 @@
   ];
 
   for (var lib in libs) {
-    collectSources(sources.forUri(lib), files);
+    collectSources(sources.forUri(lib)!, files);
   }
 
   loadTimer.stop();
@@ -231,7 +229,7 @@
   if (result.hasErrors) {
     // Ignore errors.
     while (token is ErrorToken) {
-      token = token.next;
+      token = token.next!;
     }
   }
   scanTimer.stop();
diff --git a/pkg/front_end/tool/perf_common.dart b/pkg/front_end/tool/perf_common.dart
index 0ba1365..f258aec 100644
--- a/pkg/front_end/tool/perf_common.dart
+++ b/pkg/front_end/tool/perf_common.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 /// Shared code used by fasta_perf and incremental_perf.
 library front_end.tool.perf_common;
 
@@ -89,7 +87,7 @@
 
   TimingsCollector(this.verbose);
 
-  String currentKey;
+  String? currentKey;
 
   void start(String key) {
     if (currentKey != null) {
diff --git a/pkg/front_end/tool/perf_test.dart b/pkg/front_end/tool/perf_test.dart
index b246c05..495c9fb 100644
--- a/pkg/front_end/tool/perf_test.dart
+++ b/pkg/front_end/tool/perf_test.dart
@@ -2,14 +2,12 @@
 // for 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
-
 library front_end.tool.perf_test;
 
 import 'dart:io' show Platform;
 import 'perf.dart' as m;
 
-main() async {
+void main() async {
   var benchIds = ['scan', 'parse'];
   var inputFile =
       Platform.script.resolve('../lib/src/api_prototype/file_system.dart').path;
diff --git a/pkg/front_end/tool/smoke_test_quick.dart b/pkg/front_end/tool/smoke_test_quick.dart
index 9e7d790..b6d94f8 100644
--- a/pkg/front_end/tool/smoke_test_quick.dart
+++ b/pkg/front_end/tool/smoke_test_quick.dart
@@ -10,7 +10,7 @@
 
 String get dartVm => Platform.executable;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Stopwatch stopwatch = new Stopwatch()..start();
   List<Future> futures = <Future>[];
   futures.add(run("pkg/front_end/test/explicit_creation_git_test.dart",
diff --git a/pkg/front_end/tool/stat_on_dash_v.dart b/pkg/front_end/tool/stat_on_dash_v.dart
index 7040540..0e28d29 100644
--- a/pkg/front_end/tool/stat_on_dash_v.dart
+++ b/pkg/front_end/tool/stat_on_dash_v.dart
@@ -19,7 +19,7 @@
   exit(1);
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length < 4) {
     usage("Requires more input.");
   }
diff --git a/pkg/front_end/tool/update_all.dart b/pkg/front_end/tool/update_all.dart
index 3f9bfd1..e32686e 100644
--- a/pkg/front_end/tool/update_all.dart
+++ b/pkg/front_end/tool/update_all.dart
@@ -23,7 +23,7 @@
   'pkg/front_end/test/static_types/static_type_test.dart',
 ];
 
-main() async {
+void main() async {
   // Update all tests based on expectation files.
   await expectations.main(const <String>[]);
 
diff --git a/pkg/front_end/tool/update_expectations.dart b/pkg/front_end/tool/update_expectations.dart
index bd97672..45d7ef3 100644
--- a/pkg/front_end/tool/update_expectations.dart
+++ b/pkg/front_end/tool/update_expectations.dart
@@ -38,7 +38,7 @@
   }
 }
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   if (args.isEmpty) {
     await runStandardSuites();
     for (String suite in specialSuites) {
diff --git a/pkg/front_end/tool/visitor_generator.dart b/pkg/front_end/tool/visitor_generator.dart
index ff3bace..02f6d92 100644
--- a/pkg/front_end/tool/visitor_generator.dart
+++ b/pkg/front_end/tool/visitor_generator.dart
@@ -2,14 +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 'package:dart_style/dart_style.dart' show DartFormatter;
 
 import 'ast_model.dart';
 
 /// Generates a visitor library into [sb] based on [astModel] and [strategy].
-String generateVisitor(AstModel astModel, VisitorStrategy strategy) {
+///
+/// If [format] is `false`, the generated output will _not_ be formatted using
+/// the Dart formatter. Use this during development to support incomplete
+/// generation.
+String generateVisitor(AstModel astModel, VisitorStrategy strategy,
+    {bool format: true}) {
   StringBuffer sb = new StringBuffer();
   strategy.generateHeader(astModel, sb);
 
@@ -18,7 +21,7 @@
       case AstClassKind.root:
       case AstClassKind.inner:
         if (astClass.hasVisitMethod) {
-          strategy.generateDefaultVisit(astClass, sb);
+          strategy.generateDefaultVisit(astModel, astClass, sb);
         }
         for (AstClass subclass in astClass.subclasses) {
           addVisitNode(subclass);
@@ -28,7 +31,7 @@
       case AstClassKind.named:
       case AstClassKind.declarative:
         if (astClass.hasVisitMethod) {
-          strategy.generateVisit(astClass, sb);
+          strategy.generateVisit(astModel, astClass, sb);
         }
         break;
       case AstClassKind.implementation:
@@ -44,7 +47,7 @@
       case AstClassKind.root:
       case AstClassKind.inner:
         if (astClass.hasVisitReferenceMethod) {
-          strategy.generateDefaultVisitReference(astClass, sb);
+          strategy.generateDefaultVisitReference(astModel, astClass, sb);
         }
         for (AstClass subclass in astClass.subclasses) {
           addVisitReference(subclass);
@@ -54,7 +57,7 @@
       case AstClassKind.named:
       case AstClassKind.declarative:
         if (astClass.hasVisitReferenceMethod) {
-          strategy.generateVisitReference(astClass, sb);
+          strategy.generateVisitReference(astModel, astClass, sb);
         }
         break;
       case AstClassKind.implementation:
@@ -71,7 +74,9 @@
   strategy.generateFooter(astModel, sb);
 
   String result = sb.toString();
-  result = new DartFormatter().format(result);
+  if (format) {
+    result = new DartFormatter().format(result);
+  }
   return result;
 }
 
@@ -79,21 +84,44 @@
 abstract class VisitorStrategy {
   const VisitorStrategy();
 
+  /// Preamble comment used in the generated file.
+  String get preamble => '''
+// 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.
+
+// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
+//
+// Run '$generatorCommand' to update.
+''';
+
+  /// The command used to generate the visitor.
+  ///
+  /// This is inserted in the [preamble] along with a comment that the file
+  /// is generated.
+  String get generatorCommand;
+
+  /// Comment used as doc comment for the generated visitor class.
+  String get visitorComment => '';
+
   /// Generates the header of the visitor library, including preamble, imports
   /// and visitor class declaration start.
   void generateHeader(AstModel astModel, StringBuffer sb);
 
   /// Generates a `defaultX` visitor method for [astClass].
-  void generateDefaultVisit(AstClass astClass, StringBuffer sb);
+  void generateDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb);
 
   /// Generates a `visitX` visitor method for [astClass].
-  void generateVisit(AstClass astClass, StringBuffer sb);
+  void generateVisit(AstModel astModel, AstClass astClass, StringBuffer sb);
 
   /// Generates a `defaultXReference` visitor method for [astClass].
-  void generateDefaultVisitReference(AstClass astClass, StringBuffer sb);
+  void generateDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb);
 
   /// Generates a `visitXReference` visitor method for [astClass].
-  void generateVisitReference(AstClass astClass, StringBuffer sb);
+  void generateVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb);
 
   /// Generates the footer of the visitor library, including the visitor class
   /// declaration end.
@@ -115,73 +143,84 @@
   /// The generated visitor will implement `Visitor<$returnType>`.
   String get returnType;
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
+$preamble
+
 import 'package:kernel/ast.dart';
 
+$visitorComment
 class $visitorName$visitorTypeParameters implements Visitor<$returnType> {''');
   }
 
+  @override
   void generateFooter(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 }''');
   }
 
   @override
-  void generateDefaultVisit(AstClass astClass, StringBuffer sb) {
+  void generateDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} default${astClass.name}(
       ${astClass.name} node) {''');
-    handleDefaultVisit(astClass, sb);
+    handleDefaultVisit(astModel, astClass, sb);
     sb.writeln('}');
   }
 
   /// Generates the body of a `defaultX` visitor method of [astClass].
-  void handleDefaultVisit(AstClass astClass, StringBuffer sb) {}
+  void handleDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateVisit(AstClass astClass, StringBuffer sb) {
+  void generateVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} visit${astClass.name}(
       ${astClass.name} node) {''');
-    handleVisit(astClass, sb);
+    handleVisit(astModel, astClass, sb);
     sb.writeln('}');
   }
 
   /// Generates the body of a `visitX` visitor method of [astClass].
-  void handleVisit(AstClass astClass, StringBuffer sb) {}
+  void handleVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateDefaultVisitReference(AstClass astClass, StringBuffer sb) {
-    sb.writeln(''''
+  void generateDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
+    sb.writeln('''
   @override
   ${returnType} default${astClass.name}Reference(
-      '${astClass.name} node) {''');
-    handleDefaultVisitReference(astClass, sb);
+      ${astClass.name} node) {''');
+    handleDefaultVisitReference(astModel, astClass, sb);
     sb.writeln('}');
   }
 
   /// Generates the body of a `defaultXReference` visitor method of [astClass].
-  void handleDefaultVisitReference(AstClass astClass, StringBuffer sb) {}
+  void handleDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateVisitReference(AstClass astClass, StringBuffer sb) {
+  void generateVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} visit${astClass.name}Reference(
       ${astClass.name} node) {''');
-    handleVisitReference(astClass, sb);
+    handleVisitReference(astModel, astClass, sb);
     sb.writeln('}');
   }
 
   /// Generates the body of a `visitXReference` visitor method of [astClass].
-  void handleVisitReference(AstClass astClass, StringBuffer sb) {}
+  void handleVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 }
 
 /// Strategy for creating an empty `Visitor<void>` implementation.
-class VoidVisitor0Strategy extends Visitor0Strategy {
+abstract class VoidVisitor0Strategy extends Visitor0Strategy {
   const VoidVisitor0Strategy();
 
   @override
@@ -216,78 +255,87 @@
   /// `Visitor1<$returnType, $argumentType>`.
   String get returnType;
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 import 'package:kernel/ast.dart';
 
+$visitorComment
 class $visitorName$visitorTypeParameters
     implements Visitor1<$returnType, $argumentType> {''');
   }
 
+  @override
   void generateFooter(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 }''');
   }
 
   @override
-  void generateDefaultVisit(AstClass astClass, StringBuffer sb) {
+  void generateDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} default${astClass.name}(
       ${astClass.name} node, $argumentType $argumentName) {''');
-    handleDefaultVisit(astClass, sb);
+    handleDefaultVisit(astModel, astClass, sb);
     sb.writeln('''
   }''');
   }
 
   /// Generates the body of a `defaultX` visitor method of [astClass].
-  void handleDefaultVisit(AstClass astClass, StringBuffer sb) {}
+  void handleDefaultVisit(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateVisit(AstClass astClass, StringBuffer sb) {
+  void generateVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} visit${astClass.name}(
       ${astClass.name} node, $argumentType $argumentName) {''');
-    handleVisit(astClass, sb);
+    handleVisit(astModel, astClass, sb);
     sb.writeln('''
   }''');
   }
 
   /// Generates the body of a `visitX` visitor method of [astClass].
-  void handleVisit(AstClass astClass, StringBuffer sb) {}
+  void handleVisit(AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateDefaultVisitReference(AstClass astClass, StringBuffer sb) {
+  void generateDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} default${astClass.name}Reference(
       ${astClass.name} node, $argumentType $argumentName) {''');
-    handleDefaultVisitReference(astClass, sb);
+    handleDefaultVisitReference(astModel, astClass, sb);
     sb.writeln('''
   }''');
   }
 
   /// Generates the body of a `defaultXReference` visitor method of [astClass].
-  void handleDefaultVisitReference(AstClass astClass, StringBuffer sb) {}
+  void handleDefaultVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 
   @override
-  void generateVisitReference(AstClass astClass, StringBuffer sb) {
+  void generateVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {
     sb.writeln('''
   @override
   ${returnType} visit${astClass.name}Reference(
       ${astClass.name} node, $argumentType $argumentName) {''');
-    handleVisitReference(astClass, sb);
+    handleVisitReference(astModel, astClass, sb);
     sb.writeln('''
   }''');
   }
 
   /// Generates the body of a `visitXReference` visitor method of [astClass].
-  void handleVisitReference(AstClass astClass, StringBuffer sb) {}
+  void handleVisitReference(
+      AstModel astModel, AstClass astClass, StringBuffer sb) {}
 }
 
 /// Strategy for creating an empty `Visitor1<void,Null>` implementation.
-class VoidVisitor1Strategy extends Visitor1Strategy {
+abstract class VoidVisitor1Strategy extends Visitor1Strategy {
   const VoidVisitor1Strategy();
 
   @override
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index 30586c4..83bb11f 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -7,196 +7,190 @@
 
 part of js_ast;
 
-/**
- * Global template manager.  We should aim to have a fixed number of
- * templates. This implies that we do not use js('xxx') to parse text that is
- * constructed from values that depend on names in the Dart program.
- *
- * TODO(sra): Find the remaining places where js('xxx') used to parse an
- * unbounded number of expression, or institute a cache policy.
- */
-TemplateManager templateManager = new TemplateManager();
+/// Global template manager.  We should aim to have a fixed number of
+/// templates. This implies that we do not use js('xxx') to parse text that is
+/// constructed from values that depend on names in the Dart program.
+///
+/// TODO(sra): Find the remaining places where js('xxx') used to parse an
+/// unbounded number of expression, or institute a cache policy.
+TemplateManager templateManager = TemplateManager();
 
-/**
-
-[js] is a singleton instance of JsBuilder.  JsBuilder is a set of conveniences
-for constructing JavaScript ASTs.
-
-[string] and [number] are used to create leaf AST nodes:
-
-    var s = js.string('hello');    //  s = new LiteralString('"hello"')
-    var n = js.number(123);        //  n = new LiteralNumber(123)
-
-In the line above `a --> b` means Dart expression `a` evaluates to a JavaScript
-AST that would pretty-print as `b`.
-
-The [call] method constructs an Expression AST.
-
-No argument
-
-    js('window.alert("hello")')  -->  window.alert("hello")
-
-The input text can contain placeholders `#` that are replaced with provided
-arguments.  A single argument can be passed directly:
-
-    js('window.alert(#)', s)   -->  window.alert("hello")
-
-Multiple arguments are passed as a list:
-
-    js('# + #', [s, s])  -->  "hello" + "hello"
-
-The [statement] method constructs a Statement AST, but is otherwise like the
-[call] method.  This constructs a Return AST:
-
-    var ret = js.statement('return #;', n);  -->  return 123;
-
-A placeholder in a Statement context must be followed by a semicolon ';'.  You
-can think of a statement placeholder as being `#;` to explain why the output
-still has one semicolon:
-
-    js.statement('if (happy) #;', ret)
-    -->
-    if (happy)
-      return 123;
-
-If the placeholder is not followed by a semicolon, it is part of an expression.
-Here the placeholder is in the position of the function in a function call:
-
-    var vFoo = new VariableUse('foo');
-    js.statement('if (happy) #("Happy!")', vFoo)
-    -->
-    if (happy)
-      foo("Happy!");
-
-Generally, a placeholder in an expression position requires an Expression AST as
-an argument and a placeholder in a statement position requires a Statement AST.
-An expression will be converted to a Statement if needed by creating an
-ExpressionStatement.  A String argument will be converted into a VariableUse and
-requires that the string is a JavaScript identifier.
-
-    js('# + 1', vFoo)       -->  foo + 1
-    js('# + 1', 'foo')      -->  foo + 1
-    js('# + 1', 'foo.bar')  -->  assertion failure
-
-Some placeholder positions are _splicing contexts_.  A function argument list is
-a splicing expression context.  A placeholder in a splicing expression context
-can take a single Expression (or String, converted to VariableUse) or an
-Iterable of Expressions (and/or Strings).
-
-    // non-splicing argument:
-    js('#(#)', ['say', s])        -->  say("hello")
-    // splicing arguments:
-    js('#(#)', ['say', []])       -->  say()
-    js('#(#)', ['say', [s]])      -->  say("hello")
-    js('#(#)', ['say', [s, n]])   -->  say("hello", 123)
-
-A splicing context can be used to append 'lists' and add extra elements:
-
-    js('foo(#, #, 1)', [ ['a', n], s])       -->  foo(a, 123, "hello", 1)
-    js('foo(#, #, 1)', [ ['a', n], [s, n]])  -->  foo(a, 123, "hello", 123, 1)
-    js('foo(#, #, 1)', [ [], [s, n]])        -->  foo("hello", 123, 1)
-    js('foo(#, #, 1)', [ [], [] ])           -->  foo(1)
-
-The generation of a compile-time optional argument expression can be chosen by
-providing an empty or singleton list.
-
-In addition to Expressions and Statements, there are Parameters, which occur
-only in the parameter list of a function expression or declaration.
-Placeholders in parameter positions behave like placeholders in Expression
-positions, except only Parameter AST nodes are permitted.  String arguments for
-parameter placeholders are converted to Parameter AST nodes.
-
-    var pFoo = new Parameter('foo')
-    js('function(#) { return #; }', [pFoo, vFoo])
-    -->
-    function(foo) { return foo; }
-
-Expressions and Parameters are not compatible with each other's context:
-
-    js('function(#) { return #; }', [vFoo, vFoo]) --> error
-    js('function(#) { return #; }', [pFoo, pFoo]) --> error
-
-The parameter context is a splicing context.  When combined with the
-context-sensitive conversion of Strings, this simplifies the construction of
-trampoline-like functions:
-
-    var args = ['a', 'b'];
-    js('function(#) { return f(this, #); }', [args, args])
-    -->
-    function(a, b) { return f(this, a, b); }
-
-A statement placeholder in a Block is also in a splicing context.  In addition
-to splicing Iterables, statement placeholders in a Block will also splice a
-Block or an EmptyStatement.  This flattens nested blocks and allows blocks to be
-appended.
-
-    var b1 = js.statement('{ 1; 2; }');
-    var sEmpty = new Emptystatement();
-    js.statement('{ #; #; #; #; }', [sEmpty, b1, b1, sEmpty])
-    -->
-    { 1; 2; 1; 2; }
-
-A placeholder in the context of an if-statement condition also accepts a Dart
-bool argument, which selects the then-part or else-part of the if-statement:
-
-    js.statement('if (#) return;', vFoo)   -->  if (foo) return;
-    js.statement('if (#) return;', true)   -->  return;
-    js.statement('if (#) return;', false)  -->  ;   // empty statement
-    var eTrue = new LiteralBool(true);
-    js.statement('if (#) return;', eTrue)  -->  if (true) return;
-
-Combined with block splicing, if-statement condition context placeholders allows
-the creation of templates that select code depending on variables.
-
-    js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', true)
-    --> { 1; 2; 5; }
-
-    js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', false)
-    --> { 1; 3; 4; 5; }
-
-A placeholder following a period in a property access is in a property access
-context.  This is just like an expression context, except String arguments are
-converted to JavaScript property accesses.  In JavaScript, `a.b` is short-hand
-for `a["b"]`:
-
-    js('a[#]', vFoo)  -->  a[foo]
-    js('a[#]', s)     -->  a.hello    (i.e. a["hello"]).
-    js('a[#]', 'x')   -->  a[x]
-
-    js('a.#', vFoo)   -->  a[foo]
-    js('a.#', s)      -->  a.hello    (i.e. a["hello"])
-    js('a.#', 'x')    -->  a.x        (i.e. a["x"])
-
-(Question - should `.#` be restricted to permit only String arguments? The
-template should probably be written with `[]` if non-strings are accepted.)
-
-
-Object initializers allow placeholders in the key property name position:
-
-    js('{#:1, #:2}',  [s, 'bye'])    -->  {hello: 1, bye: 2}
-
-
-What is not implemented:
-
- -  Array initializers and object initializers could support splicing.  In the
-    array case, we would need some way to know if an ArrayInitializer argument
-    should be splice or is intended as a single value.
-
-*/
-const JsBuilder js = const JsBuilder();
+/// [js] is a singleton instance of JsBuilder.  JsBuilder is a set of
+/// conveniences for constructing JavaScript ASTs.
+///
+/// [string] and [number] are used to create leaf AST nodes:
+///
+///     var s = js.string('hello');    //  s = new LiteralString('"hello"')
+///     var n = js.number(123);        //  n = new LiteralNumber(123)
+///
+/// In the line above `a --> b` means Dart expression `a` evaluates to a
+/// JavaScript AST that would pretty-print as `b`.
+///
+/// The [call] method constructs an Expression AST.
+///
+/// No argument
+///
+///     js('window.alert("hello")')  -->  window.alert("hello")
+///
+/// The input text can contain placeholders `#` that are replaced with provided
+/// arguments.  A single argument can be passed directly:
+///
+///     js('window.alert(#)', s)   -->  window.alert("hello")
+///
+/// Multiple arguments are passed as a list:
+///
+///     js('# + #', [s, s])  -->  "hello" + "hello"
+///
+/// The [statement] method constructs a Statement AST, but is otherwise like the
+/// [call] method.  This constructs a Return AST:
+///
+///     var ret = js.statement('return #;', n);  -->  return 123;
+///
+/// A placeholder in a Statement context must be followed by a semicolon ';'.
+/// One can think of a statement placeholder as being `#;` to explain why the
+/// output still has one semicolon:
+///
+///     js.statement('if (happy) #;', ret)
+///     -->
+///     if (happy)
+///       return 123;
+///
+/// If the placeholder is not followed by a semicolon, it is part of an
+/// expression.  Here the placeholder is in the position of the function in a
+/// function call:
+///
+///     var vFoo = new VariableUse('foo');
+///     js.statement('if (happy) #("Happy!")', vFoo)
+///     -->
+///     if (happy)
+///       foo("Happy!");
+///
+/// Generally, a placeholder in an expression position requires an Expression
+/// AST as an argument and a placeholder in a statement position requires a
+/// Statement AST.  An expression will be converted to a Statement if needed by
+/// creating an ExpressionStatement.  A String argument will be converted into a
+/// VariableUse and requires that the string is a JavaScript identifier.
+///
+///     js('# + 1', vFoo)       -->  foo + 1
+///     js('# + 1', 'foo')      -->  foo + 1
+///     js('# + 1', 'foo.bar')  -->  assertion failure
+///
+/// Some placeholder positions are _splicing contexts_.  A function argument list is
+/// a splicing expression context.  A placeholder in a splicing expression context
+/// can take a single Expression (or String, converted to VariableUse) or an
+/// Iterable of Expressions (and/or Strings).
+///
+///     // non-splicing argument:
+///     js('#(#)', ['say', s])        -->  say("hello")
+///     // splicing arguments:
+///     js('#(#)', ['say', []])       -->  say()
+///     js('#(#)', ['say', [s]])      -->  say("hello")
+///     js('#(#)', ['say', [s, n]])   -->  say("hello", 123)
+///
+/// A splicing context can be used to append 'lists' and add extra elements:
+///
+///     js('foo(#, #, 1)', [ ['a', n], s])       -->  foo(a, 123, "hello", 1)
+///     js('foo(#, #, 1)', [ ['a', n], [s, n]])  -->  foo(a, 123, "hello", 123, 1)
+///     js('foo(#, #, 1)', [ [], [s, n]])        -->  foo("hello", 123, 1)
+///     js('foo(#, #, 1)', [ [], [] ])           -->  foo(1)
+///
+/// The generation of a compile-time optional argument expression can be chosen by
+/// providing an empty or singleton list.
+///
+/// In addition to Expressions and Statements, there are Parameters, which occur
+/// only in the parameter list of a function expression or declaration.
+/// Placeholders in parameter positions behave like placeholders in Expression
+/// positions, except only Parameter AST nodes are permitted.  String arguments for
+/// parameter placeholders are converted to Parameter AST nodes.
+///
+///     var pFoo = new Parameter('foo')
+///     js('function(#) { return #; }', [pFoo, vFoo])
+///     -->
+///     function(foo) { return foo; }
+///
+/// Expressions and Parameters are not compatible with each other's context:
+///
+///     js('function(#) { return #; }', [vFoo, vFoo]) --> error
+///     js('function(#) { return #; }', [pFoo, pFoo]) --> error
+///
+/// The parameter context is a splicing context.  When combined with the
+/// context-sensitive conversion of Strings, this simplifies the construction of
+/// trampoline-like functions:
+///
+///     var args = ['a', 'b'];
+///     js('function(#) { return f(this, #); }', [args, args])
+///     -->
+///     function(a, b) { return f(this, a, b); }
+///
+/// A statement placeholder in a Block is also in a splicing context.  In addition
+/// to splicing Iterables, statement placeholders in a Block will also splice a
+/// Block or an EmptyStatement.  This flattens nested blocks and allows blocks to be
+/// appended.
+///
+///     var b1 = js.statement('{ 1; 2; }');
+///     var sEmpty = new Emptystatement();
+///     js.statement('{ #; #; #; #; }', [sEmpty, b1, b1, sEmpty])
+///     -->
+///     { 1; 2; 1; 2; }
+///
+/// A placeholder in the context of an if-statement condition also accepts a Dart
+/// bool argument, which selects the then-part or else-part of the if-statement:
+///
+///     js.statement('if (#) return;', vFoo)   -->  if (foo) return;
+///     js.statement('if (#) return;', true)   -->  return;
+///     js.statement('if (#) return;', false)  -->  ;   // empty statement
+///     var eTrue = new LiteralBool(true);
+///     js.statement('if (#) return;', eTrue)  -->  if (true) return;
+///
+/// Combined with block splicing, if-statement condition context placeholders allows
+/// the creation of templates that select code depending on variables.
+///
+///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', true)
+///     --> { 1; 2; 5; }
+///
+///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', false)
+///     --> { 1; 3; 4; 5; }
+///
+/// A placeholder following a period in a property access is in a property access
+/// context.  This is just like an expression context, except String arguments are
+/// converted to JavaScript property accesses.  In JavaScript, `a.b` is short-hand
+/// for `a["b"]`:
+///
+///     js('a[#]', vFoo)  -->  a[foo]
+///     js('a[#]', s)     -->  a.hello    (i.e. a["hello"]).
+///     js('a[#]', 'x')   -->  a[x]
+///
+///     js('a.#', vFoo)   -->  a[foo]
+///     js('a.#', s)      -->  a.hello    (i.e. a["hello"])
+///     js('a.#', 'x')    -->  a.x        (i.e. a["x"])
+///
+/// (Question - should `.#` be restricted to permit only String arguments? The
+/// template should probably be written with `[]` if non-strings are accepted.)
+///
+///
+/// Object initializers allow placeholders in the key property name position:
+///
+///     js('{#:1, #:2}',  [s, 'bye'])    -->  {hello: 1, bye: 2}
+///
+///
+/// What is not implemented:
+///
+///  -  Array initializers and object initializers could support splicing.  In the
+///     array case, we would need some way to know if an ArrayInitializer argument
+///     should be splice or is intended as a single value.
+///
+const JsBuilder js = JsBuilder();
 
 class JsBuilder {
   const JsBuilder();
 
-  /**
-   * Parses a bit of JavaScript, and returns an expression.
-   *
-   * See the MiniJsParser class.
-   *
-   * [arguments] can be a single [Node] (e.g. an [Expression] or [Statement]) or
-   * a list of [Node]s, which will be interpolated into the source at the '#'
-   * signs.
-   */
+  /// Parses a bit of JavaScript, and returns an expression.
+  ///
+  /// See the MiniJsParser class.
+  ///
+  /// [arguments] can be a single [Node] (e.g. an [Expression] or [Statement]) or
+  /// a list of [Node]s, which will be interpolated into the source at the '#'
+  /// signs.
   Expression call(String source, [var arguments]) {
     Template template = _findExpressionTemplate(source);
     if (arguments == null) return template.instantiate([]);
@@ -205,9 +199,7 @@
     return template.instantiate(arguments);
   }
 
-  /**
-   * Parses a JavaScript Statement, otherwise just like [call].
-   */
+  /// Parses a JavaScript Statement, otherwise just like [call].
   Statement statement(String source, [var arguments]) {
     Template template = _findStatementTemplate(source);
     if (arguments == null) return template.instantiate([]);
@@ -216,12 +208,10 @@
     return template.instantiate(arguments);
   }
 
-  /**
-   * Parses JavaScript written in the `JS` foreign instruction.
-   *
-   * The [source] must be a JavaScript expression or a JavaScript throw
-   * statement.
-   */
+  /// Parses JavaScript written in the `JS` foreign instruction.
+  ///
+  /// The [source] must be a JavaScript expression or a JavaScript throw
+  /// statement.
   Template parseForeignJS(String source) {
     // TODO(sra): Parse with extra validation to forbid `#` interpolation in
     // functions, as this leads to unanticipated capture of temporaries that are
@@ -236,7 +226,7 @@
   Template _findExpressionTemplate(String source) {
     Template template = templateManager.lookupExpressionTemplate(source);
     if (template == null) {
-      MiniJsParser parser = new MiniJsParser(source);
+      MiniJsParser parser = MiniJsParser(source);
       Expression expression = parser.expression();
       template = templateManager.defineExpressionTemplate(source, expression);
     }
@@ -246,53 +236,43 @@
   Template _findStatementTemplate(String source) {
     Template template = templateManager.lookupStatementTemplate(source);
     if (template == null) {
-      MiniJsParser parser = new MiniJsParser(source);
+      MiniJsParser parser = MiniJsParser(source);
       Statement statement = parser.statement();
       template = templateManager.defineStatementTemplate(source, statement);
     }
     return template;
   }
 
-  /**
-   * Creates an Expression template for the given [source].
-   *
-   * The returned template is cached.
-   */
+  /// Creates an Expression template for the given [source].
+  ///
+  /// The returned template is cached.
   Template expressionTemplateFor(String source) {
     return _findExpressionTemplate(source);
   }
 
-  /**
-   * Creates an Expression template without caching the result.
-   */
+  /// Creates an Expression template without caching the result.
   Template uncachedExpressionTemplate(String source) {
-    MiniJsParser parser = new MiniJsParser(source);
+    MiniJsParser parser = MiniJsParser(source);
     Expression expression = parser.expression();
-    return new Template(source, expression,
-        isExpression: true, forceCopy: false);
+    return Template(source, expression, isExpression: true, forceCopy: false);
   }
 
-  /**
-   * Creates a Statement template without caching the result.
-   */
+  /// Creates a Statement template without caching the result.
   Template uncachedStatementTemplate(String source) {
-    MiniJsParser parser = new MiniJsParser(source);
+    MiniJsParser parser = MiniJsParser(source);
     Statement statement = parser.statement();
-    return new Template(source, statement,
-        isExpression: false, forceCopy: false);
+    return Template(source, statement, isExpression: false, forceCopy: false);
   }
 
-  /**
-   * Create an Expression template which has [ast] as the result.  This is used
-   * to wrap a generated AST in a zero-argument Template so it can be passed to
-   * context that expects a template.
-   */
+  /// Create an Expression template which has [ast] as the result.  This is used
+  /// to wrap a generated AST in a zero-argument Template so it can be passed to
+  /// context that expects a template.
   Template expressionTemplateYielding(Node ast) {
-    return new Template.withExpressionResult(ast);
+    return Template.withExpressionResult(ast);
   }
 
   Template statementTemplateYielding(Node ast) {
-    return new Template.withStatementResult(ast);
+    return Template.withStatementResult(ast);
   }
 
   /// Creates a literal js string from [value].
@@ -316,29 +296,29 @@
     return LiteralStringFromName(name);
   }
 
-  LiteralNumber number(num value) => new LiteralNumber('$value');
+  LiteralNumber number(num value) => LiteralNumber('$value');
 
-  LiteralBool boolean(bool value) => new LiteralBool(value);
+  LiteralBool boolean(bool value) => LiteralBool(value);
 
   ArrayInitializer numArray(Iterable<int> list) =>
-      new ArrayInitializer(list.map(number).toList());
+      ArrayInitializer(list.map(number).toList());
 
   ArrayInitializer stringArray(Iterable<String> list) =>
-      new ArrayInitializer(list.map(string).toList());
+      ArrayInitializer(list.map(string).toList());
 
-  Comment comment(String text) => new Comment(text);
+  Comment comment(String text) => Comment(text);
 
   Call propertyCall(
       Expression receiver, Expression fieldName, List<Expression> arguments) {
-    return new Call(new PropertyAccess(receiver, fieldName), arguments);
+    return Call(PropertyAccess(receiver, fieldName), arguments);
   }
 
   ObjectInitializer objectLiteral(Map<String, Expression> map) {
-    List<Property> properties = <Property>[];
+    List<Property> properties = [];
     map.forEach((name, value) {
-      properties.add(new Property(string(name), value));
+      properties.add(Property(string(name), value));
     });
-    return new ObjectInitializer(properties);
+    return ObjectInitializer(properties);
   }
 }
 
@@ -392,7 +372,7 @@
 
     // Replace non-tabs with spaces, giving a print indent that matches the text
     // for tabbing.
-    String spaces = prefix.replaceAll(new RegExp(r'[^\t]'), ' ');
+    String spaces = prefix.replaceAll(RegExp(r'[^\t]'), ' ');
     return 'Error in MiniJsParser:\n${src}\n$spaces^\n$spaces$message\n';
   }
 }
@@ -436,7 +416,7 @@
   bool skippedNewline = false; // skipped newline in last getToken?
   final String src;
 
-  final List<InterpolatedNode> interpolatedValues = <InterpolatedNode>[];
+  final List<InterpolatedNode> interpolatedValues = [];
   bool get hasNamedHoles =>
       interpolatedValues.isNotEmpty && interpolatedValues.first.isNamed;
   bool get hasPositionalHoles =>
@@ -515,7 +495,7 @@
     return "Unknown: $cat";
   }
 
-  static const CATEGORIES = const <int>[
+  static const CATEGORIES = <int>[
     OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, // 0-7
     OTHER, WHITESPACE, WHITESPACE, OTHER, OTHER, WHITESPACE, // 8-13
     OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, // 14-21
@@ -810,7 +790,7 @@
   }
 
   void error(message) {
-    throw new MiniJsParserError(this, message);
+    throw MiniJsParserError(this, message);
   }
 
   /// Returns either the name for the hole, or its integer position.
@@ -835,31 +815,31 @@
     String last = lastToken;
     if (acceptCategory(ALPHA)) {
       if (last == "true") {
-        return new LiteralBool(true);
+        return LiteralBool(true);
       } else if (last == "false") {
-        return new LiteralBool(false);
+        return LiteralBool(false);
       } else if (last == "null") {
-        return new LiteralNull();
+        return LiteralNull();
       } else if (last == "function") {
         return parseFunctionExpression();
       } else if (last == "this") {
-        return new This();
+        return This();
       } else {
-        return new VariableUse(last);
+        return VariableUse(last);
       }
     } else if (acceptCategory(LPAREN)) {
       return parseExpressionOrArrowFunction();
     } else if (acceptCategory(STRING)) {
-      return new LiteralString(last);
+      return LiteralString(last);
     } else if (acceptCategory(NUMERIC)) {
-      return new LiteralNumber(last);
+      return LiteralNumber(last);
     } else if (acceptCategory(LBRACE)) {
       return parseObjectInitializer();
     } else if (acceptCategory(LSQUARE)) {
       var values = <Expression>[];
       while (true) {
         if (acceptCategory(COMMA)) {
-          values.add(new ArrayHole());
+          values.add(ArrayHole());
           continue;
         }
         if (acceptCategory(RSQUARE)) break;
@@ -867,18 +847,18 @@
         if (acceptCategory(RSQUARE)) break;
         expectCategory(COMMA);
       }
-      return new ArrayInitializer(values);
+      return ArrayInitializer(values);
     } else if (last != null && last.startsWith("/")) {
       String regexp = getRegExp(lastPosition);
       getToken();
       String flags = lastToken;
       if (!acceptCategory(ALPHA)) flags = "";
-      Expression expression = new RegExpLiteral(regexp + flags);
+      Expression expression = RegExpLiteral(regexp + flags);
       return expression;
     } else if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
       InterpolatedExpression expression =
-          new InterpolatedExpression(nameOrPosition);
+          InterpolatedExpression(nameOrPosition);
       interpolatedValues.add(expression);
       return expression;
     } else {
@@ -890,26 +870,26 @@
   Expression parseFunctionExpression() {
     if (lastCategory == ALPHA || lastCategory == HASH) {
       Declaration name = parseVariableDeclaration();
-      return new NamedFunction(name, parseFun());
+      return NamedFunction(name, parseFun());
     }
     return parseFun();
   }
 
   Expression parseFun() {
-    List<Parameter> params = <Parameter>[];
+    List<Parameter> params = [];
     expectCategory(LPAREN);
     if (!acceptCategory(RPAREN)) {
       for (;;) {
         if (acceptCategory(HASH)) {
           var nameOrPosition = parseHash();
           InterpolatedParameter parameter =
-              new InterpolatedParameter(nameOrPosition);
+              InterpolatedParameter(nameOrPosition);
           interpolatedValues.add(parameter);
           params.add(parameter);
         } else {
           String argumentName = lastToken;
           expectCategory(ALPHA);
-          params.add(new Parameter(argumentName));
+          params.add(Parameter(argumentName));
         }
         if (acceptCategory(COMMA)) continue;
         expectCategory(RPAREN);
@@ -931,18 +911,18 @@
     }
     expectCategory(LBRACE);
     Block block = parseBlock();
-    return new Fun(params, block, asyncModifier: asyncModifier);
+    return Fun(params, block, asyncModifier: asyncModifier);
   }
 
   Expression parseObjectInitializer() {
-    List<Property> properties = <Property>[];
+    List<Property> properties = [];
     for (;;) {
       if (acceptCategory(RBRACE)) break;
       properties.add(parseMethodDefinitionOrProperty());
       if (acceptCategory(RBRACE)) break;
       expectCategory(COMMA);
     }
-    return new ObjectInitializer(properties);
+    return ObjectInitializer(properties);
   }
 
   Property parseMethodDefinitionOrProperty() {
@@ -959,7 +939,7 @@
     } else if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
       InterpolatedLiteral interpolatedLiteral =
-          new InterpolatedLiteral(nameOrPosition);
+          InterpolatedLiteral(nameOrPosition);
       interpolatedValues.add(interpolatedLiteral);
       propertyName = interpolatedLiteral;
     } else {
@@ -967,10 +947,10 @@
     }
     if (acceptCategory(COLON)) {
       Expression value = parseAssignment();
-      return new Property(propertyName, value);
+      return Property(propertyName, value);
     } else {
       Expression fun = parseFun();
-      return new MethodDefinition(propertyName, fun);
+      return MethodDefinition(propertyName, fun);
     }
   }
 
@@ -982,7 +962,7 @@
       } else if (acceptCategory(LSQUARE)) {
         Expression inBraces = parseExpression();
         expectCategory(RSQUARE);
-        receiver = new PropertyAccess(receiver, inBraces);
+        receiver = PropertyAccess(receiver, inBraces);
       } else {
         break;
       }
@@ -1004,14 +984,13 @@
             expectCategory(COMMA);
           }
         }
-        receiver = constructor
-            ? new New(receiver, arguments)
-            : new Call(receiver, arguments);
+        receiver =
+            constructor ? New(receiver, arguments) : Call(receiver, arguments);
         constructor = false;
       } else if (!constructor && acceptCategory(LSQUARE)) {
         Expression inBraces = parseExpression();
         expectCategory(RSQUARE);
-        receiver = new PropertyAccess(receiver, inBraces);
+        receiver = PropertyAccess(receiver, inBraces);
       } else if (!constructor && acceptCategory(DOT)) {
         receiver = getDotRhs(receiver);
       } else {
@@ -1026,9 +1005,9 @@
   Expression getDotRhs(Expression receiver) {
     if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
-      InterpolatedSelector property = new InterpolatedSelector(nameOrPosition);
+      InterpolatedSelector property = InterpolatedSelector(nameOrPosition);
       interpolatedValues.add(property);
-      return new PropertyAccess(receiver, property);
+      return PropertyAccess(receiver, property);
     }
     String identifier = lastToken;
     // In ES5 keywords like delete and continue are allowed as property
@@ -1040,7 +1019,7 @@
     } else {
       expectCategory(ALPHA);
     }
-    return new PropertyAccess.field(receiver, identifier);
+    return PropertyAccess.field(receiver, identifier);
   }
 
   Expression parsePostfix() {
@@ -1051,7 +1030,7 @@
     if (lastCategory == SYMBOL &&
         !skippedNewline &&
         (acceptString("++") || acceptString("--"))) {
-      return new Postfix(operator, expression);
+      return Postfix(operator, expression);
     }
     // If we don't accept '++' or '--' due to skippedNewline a newline, no other
     // part of the parser will accept the token and we will get an error at the
@@ -1064,8 +1043,8 @@
     if (lastCategory == SYMBOL &&
         UNARY_OPERATORS.contains(operator) &&
         (acceptString("++") || acceptString("--") || acceptString('await'))) {
-      if (operator == "await") return new Await(parsePostfix());
-      return new Prefix(operator, parsePostfix());
+      if (operator == "await") return Await(parsePostfix());
+      return Prefix(operator, parsePostfix());
     }
     return parsePostfix();
   }
@@ -1077,8 +1056,8 @@
         operator != "++" &&
         operator != "--") {
       expectCategory(SYMBOL);
-      if (operator == "await") return new Await(parsePostfix());
-      return new Prefix(operator, parseUnaryLow());
+      if (operator == "await") return Await(parsePostfix());
+      return Prefix(operator, parseUnaryLow());
     }
     return parseUnaryHigh();
   }
@@ -1097,17 +1076,17 @@
       }
       expectCategory(SYMBOL);
       if (rhs == null || BINARY_PRECEDENCE[symbol] >= minPrecedence) {
-        if (rhs != null) lhs = new Binary(lastSymbol, lhs, rhs);
+        if (rhs != null) lhs = Binary(lastSymbol, lhs, rhs);
         minPrecedence = BINARY_PRECEDENCE[symbol];
         rhs = parseUnaryLow();
         lastSymbol = symbol;
       } else {
         Expression higher = parseBinary(BINARY_PRECEDENCE[symbol]);
-        rhs = new Binary(symbol, rhs, higher);
+        rhs = Binary(symbol, rhs, higher);
       }
     }
     if (rhs == null) return lhs;
-    return new Binary(lastSymbol, lhs, rhs);
+    return Binary(lastSymbol, lhs, rhs);
   }
 
   Expression parseConditional() {
@@ -1116,7 +1095,7 @@
     Expression ifTrue = parseAssignment();
     expectCategory(COLON);
     Expression ifFalse = parseAssignment();
-    return new Conditional(lhs, ifTrue, ifFalse);
+    return Conditional(lhs, ifTrue, ifFalse);
   }
 
   Expression parseAssignment() {
@@ -1125,12 +1104,12 @@
     if (acceptCategory(ASSIGNMENT)) {
       Expression rhs = parseAssignment();
       if (assignmentOperator == "=") {
-        return new Assignment(lhs, rhs);
+        return Assignment(lhs, rhs);
       } else {
         // Handle +=, -=, etc.
         String operator =
             assignmentOperator.substring(0, assignmentOperator.length - 1);
-        return new Assignment.compound(lhs, operator, rhs);
+        return Assignment.compound(lhs, operator, rhs);
       }
     }
     return lhs;
@@ -1140,7 +1119,7 @@
     Expression expression = parseAssignment();
     while (acceptCategory(COMMA)) {
       Expression right = parseAssignment();
-      expression = new Binary(',', expression, right);
+      expression = Binary(',', expression, right);
     }
     return expression;
   }
@@ -1148,7 +1127,7 @@
   Expression parseExpressionOrArrowFunction() {
     if (acceptCategory(RPAREN)) {
       expectCategory(ARROW);
-      return parseArrowFunctionBody(<Parameter>[]);
+      return parseArrowFunctionBody([]);
     }
     List<Expression> expressions = [parseAssignment()];
     while (acceptCategory(COMMA)) {
@@ -1159,7 +1138,7 @@
       var params = <Parameter>[];
       for (Expression e in expressions) {
         if (e is VariableUse) {
-          params.add(new Parameter(e.name));
+          params.add(Parameter(e.name));
         } else if (e is InterpolatedExpression) {
           params.add(InterpolatedParameter(e.nameOrPosition));
         } else {
@@ -1168,8 +1147,8 @@
       }
       return parseArrowFunctionBody(params);
     }
-    return expressions.reduce((Expression value, Expression element) =>
-        new Binary(',', value, element));
+    return expressions.reduce(
+        (Expression value, Expression element) => Binary(',', value, element));
   }
 
   Expression parseArrowFunctionBody(List<Parameter> params) {
@@ -1179,7 +1158,7 @@
     } else {
       body = parseAssignment();
     }
-    return new ArrowFunction(params, body);
+    return ArrowFunction(params, body);
   }
 
   VariableDeclarationList parseVariableDeclarationList() {
@@ -1196,7 +1175,7 @@
       if (acceptString("=")) {
         initializer = parseAssignment();
       }
-      initialization.add(new VariableInitialization(declaration, initializer));
+      initialization.add(VariableInitialization(declaration, initializer));
     }
 
     declare(firstVariable);
@@ -1204,7 +1183,7 @@
       Declaration variable = parseVariableDeclaration();
       declare(variable);
     }
-    return new VariableDeclarationList(initialization);
+    return VariableDeclarationList(initialization);
   }
 
   Expression parseVarDeclarationOrExpression() {
@@ -1233,19 +1212,19 @@
   }
 
   Block parseBlock() {
-    List<Statement> statements = <Statement>[];
+    List<Statement> statements = [];
 
     while (!acceptCategory(RBRACE)) {
       Statement statement = parseStatement();
       statements.add(statement);
     }
-    return new Block(statements);
+    return Block(statements);
   }
 
   Statement parseStatement() {
     if (acceptCategory(LBRACE)) return parseBlock();
 
-    if (acceptCategory(SEMICOLON)) return new EmptyStatement();
+    if (acceptCategory(SEMICOLON)) return EmptyStatement();
 
     if (lastCategory == ALPHA) {
       if (acceptString('return')) return parseReturn();
@@ -1253,11 +1232,11 @@
       if (acceptString('throw')) return parseThrow();
 
       if (acceptString('break')) {
-        return parseBreakOrContinue((label) => new Break(label));
+        return parseBreakOrContinue((label) => Break(label));
       }
 
       if (acceptString('continue')) {
-        return parseBreakOrContinue((label) => new Continue(label));
+        return parseBreakOrContinue((label) => Continue(label));
       }
 
       if (acceptString('if')) return parseIfThenElse();
@@ -1271,7 +1250,7 @@
       if (acceptString('var')) {
         Expression declarations = parseVariableDeclarationList();
         expectSemicolon();
-        return new ExpressionStatement(declarations);
+        return ExpressionStatement(declarations);
       }
 
       if (acceptString('while')) return parseWhile();
@@ -1296,7 +1275,7 @@
     Expression expression = parseExpression();
 
     if (expression is VariableUse && acceptCategory(COLON)) {
-      return new LabeledStatement(expression.name, parseStatement());
+      return LabeledStatement(expression.name, parseStatement());
     }
 
     expectSemicolon();
@@ -1307,34 +1286,34 @@
       if (expression is InterpolatedExpression) {
         assert(identical(interpolatedValues.last, expression));
         InterpolatedStatement statement =
-            new InterpolatedStatement(expression.nameOrPosition);
+            InterpolatedStatement(expression.nameOrPosition);
         interpolatedValues[interpolatedValues.length - 1] = statement;
         return statement;
       }
     }
 
-    return new ExpressionStatement(expression);
+    return ExpressionStatement(expression);
   }
 
   Statement parseReturn() {
-    if (acceptSemicolon()) return new Return();
+    if (acceptSemicolon()) return Return();
     Expression expression = parseExpression();
     expectSemicolon();
-    return new Return(expression);
+    return Return(expression);
   }
 
   Statement parseYield() {
     bool hasStar = acceptString('*');
     Expression expression = parseExpression();
     expectSemicolon();
-    return new DartYield(expression, hasStar);
+    return DartYield(expression, hasStar);
   }
 
   Statement parseThrow() {
     if (skippedNewline) error('throw expression must be on same line');
     Expression expression = parseExpression();
     expectSemicolon();
-    return new Throw(expression);
+    return Throw(expression);
   }
 
   Statement parseBreakOrContinue(constructor) {
@@ -1355,9 +1334,9 @@
     if (acceptString('else')) {
       // Resolves dangling else by binding 'else' to closest 'if'.
       Statement elseStatement = parseStatement();
-      return new If(condition, thenStatement, elseStatement);
+      return If(condition, thenStatement, elseStatement);
     } else {
-      return new If.noElse(condition, thenStatement);
+      return If.noElse(condition, thenStatement);
     }
   }
 
@@ -1380,7 +1359,7 @@
         expectCategory(RPAREN);
       }
       Statement body = parseStatement();
-      return new For(init, condition, update, body);
+      return For(init, condition, update, body);
     }
 
     expectCategory(LPAREN);
@@ -1394,9 +1373,9 @@
         Expression objectExpression = parseExpression();
         expectCategory(RPAREN);
         Statement body = parseStatement();
-        return new ForIn(
-            new VariableDeclarationList(
-                [new VariableInitialization(declaration, null)]),
+        return ForIn(
+            VariableDeclarationList(
+                [VariableInitialization(declaration, null)]),
             objectExpression,
             body);
       }
@@ -1414,20 +1393,20 @@
     if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
       InterpolatedDeclaration declaration =
-          new InterpolatedDeclaration(nameOrPosition);
+          InterpolatedDeclaration(nameOrPosition);
       interpolatedValues.add(declaration);
       return declaration;
     } else {
       String token = lastToken;
       expectCategory(ALPHA);
-      return new VariableDeclaration(token);
+      return VariableDeclaration(token);
     }
   }
 
   Statement parseFunctionDeclaration() {
     Declaration name = parseVariableDeclaration();
     Expression fun = parseFun();
-    return new FunctionDeclaration(name, fun);
+    return FunctionDeclaration(name, fun);
   }
 
   Statement parseTry() {
@@ -1442,7 +1421,7 @@
     } else {
       if (catchPart == null) error("expected 'finally'");
     }
-    return new Try(body, catchPart, finallyPart);
+    return Try(body, catchPart, finallyPart);
   }
 
   SwitchClause parseSwitchClause() {
@@ -1463,8 +1442,8 @@
       statements.add(parseStatement());
     }
     return expression == null
-        ? new Default(new Block(statements))
-        : new Case(expression, new Block(statements));
+        ? Default(Block(statements))
+        : Case(expression, Block(statements));
   }
 
   Statement parseWhile() {
@@ -1472,7 +1451,7 @@
     Expression condition = parseExpression();
     expectCategory(RPAREN);
     Statement body = parseStatement();
-    return new While(condition, body);
+    return While(condition, body);
   }
 
   Statement parseDo() {
@@ -1483,7 +1462,7 @@
     Expression condition = parseExpression();
     expectCategory(RPAREN);
     expectSemicolon();
-    return new Do(body, condition);
+    return Do(body, condition);
   }
 
   Statement parseSwitch() {
@@ -1491,12 +1470,12 @@
     Expression key = parseExpression();
     expectCategory(RPAREN);
     expectCategory(LBRACE);
-    List<SwitchClause> clauses = <SwitchClause>[];
+    List<SwitchClause> clauses = [];
     while (lastCategory != RBRACE) {
       clauses.add(parseSwitchClause());
     }
     expectCategory(RBRACE);
-    return new Switch(key, clauses);
+    return Switch(key, clauses);
   }
 
   Catch parseCatch() {
@@ -1505,6 +1484,6 @@
     expectCategory(RPAREN);
     expectCategory(LBRACE);
     Block body = parseBlock();
-    return new Catch(errorName, body);
+    return Catch(errorName, body);
   }
 }
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index a69342b..9ded615 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -459,7 +459,7 @@
   bool get isFinalized => true;
 
   Statement toStatement() {
-    throw new UnsupportedError('toStatement');
+    throw UnsupportedError('toStatement');
   }
 
   String debugPrint() => DebugPrint(this);
@@ -482,7 +482,7 @@
     for (Statement statement in body) statement.accept1(visitor, arg);
   }
 
-  Program _clone() => new Program(body);
+  Program _clone() => Program(body);
 }
 
 abstract class Statement extends Node {
@@ -513,7 +513,7 @@
 
   Block(this.statements);
 
-  Block.empty() : this.statements = <Statement>[];
+  Block.empty() : this.statements = [];
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBlock(this);
 
@@ -528,7 +528,7 @@
     for (Statement statement in statements) statement.accept1(visitor, arg);
   }
 
-  Block _clone() => new Block(statements);
+  Block _clone() => Block(statements);
 }
 
 class ExpressionStatement extends Statement {
@@ -551,7 +551,7 @@
     expression.accept1(visitor, arg);
   }
 
-  ExpressionStatement _clone() => new ExpressionStatement(expression);
+  ExpressionStatement _clone() => ExpressionStatement(expression);
 }
 
 class EmptyStatement extends Statement {
@@ -566,7 +566,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  EmptyStatement _clone() => new EmptyStatement();
+  EmptyStatement _clone() => EmptyStatement();
 }
 
 class If extends Statement {
@@ -576,7 +576,7 @@
 
   If(this.condition, this.then, this.otherwise);
 
-  If.noElse(this.condition, this.then) : this.otherwise = new EmptyStatement();
+  If.noElse(this.condition, this.then) : this.otherwise = EmptyStatement();
 
   bool get hasElse => otherwise is! EmptyStatement;
 
@@ -597,7 +597,7 @@
     otherwise.accept1(visitor, arg);
   }
 
-  If _clone() => new If(condition, then, otherwise);
+  If _clone() => If(condition, then, otherwise);
 }
 
 abstract class Loop extends Statement {
@@ -632,7 +632,7 @@
     body.accept1(visitor, arg);
   }
 
-  For _clone() => new For(init, condition, update, body);
+  For _clone() => For(init, condition, update, body);
 }
 
 class ForIn extends Loop {
@@ -660,7 +660,7 @@
     body.accept1(visitor, arg);
   }
 
-  ForIn _clone() => new ForIn(leftHandSide, object, body);
+  ForIn _clone() => ForIn(leftHandSide, object, body);
 }
 
 class While extends Loop {
@@ -683,7 +683,7 @@
     body.accept1(visitor, arg);
   }
 
-  While _clone() => new While(condition, body);
+  While _clone() => While(condition, body);
 }
 
 class Do extends Loop {
@@ -706,7 +706,7 @@
     condition.accept1(visitor, arg);
   }
 
-  Do _clone() => new Do(body, condition);
+  Do _clone() => Do(body, condition);
 }
 
 class Continue extends Statement {
@@ -723,7 +723,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  Continue _clone() => new Continue(targetLabel);
+  Continue _clone() => Continue(targetLabel);
 }
 
 class Break extends Statement {
@@ -740,7 +740,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  Break _clone() => new Break(targetLabel);
+  Break _clone() => Break(targetLabel);
 }
 
 class Return extends Statement {
@@ -761,7 +761,7 @@
     if (value != null) value.accept1(visitor, arg);
   }
 
-  Return _clone() => new Return(value);
+  Return _clone() => Return(value);
 }
 
 class Throw extends Statement {
@@ -782,7 +782,7 @@
     expression.accept1(visitor, arg);
   }
 
-  Throw _clone() => new Throw(expression);
+  Throw _clone() => Throw(expression);
 }
 
 class Try extends Statement {
@@ -811,7 +811,7 @@
     if (finallyPart != null) finallyPart.accept1(visitor, arg);
   }
 
-  Try _clone() => new Try(body, catchPart, finallyPart);
+  Try _clone() => Try(body, catchPart, finallyPart);
 }
 
 class Catch extends Node {
@@ -835,7 +835,7 @@
     body.accept1(visitor, arg);
   }
 
-  Catch _clone() => new Catch(declaration, body);
+  Catch _clone() => Catch(declaration, body);
 }
 
 class Switch extends Statement {
@@ -859,7 +859,7 @@
     for (SwitchClause clause in cases) clause.accept1(visitor, arg);
   }
 
-  Switch _clone() => new Switch(key, cases);
+  Switch _clone() => Switch(key, cases);
 }
 
 abstract class SwitchClause extends Node {
@@ -888,7 +888,7 @@
     body.accept1(visitor, arg);
   }
 
-  Case _clone() => new Case(expression, body);
+  Case _clone() => Case(expression, body);
 }
 
 class Default extends SwitchClause {
@@ -907,7 +907,7 @@
     body.accept1(visitor, arg);
   }
 
-  Default _clone() => new Default(body);
+  Default _clone() => Default(body);
 }
 
 class FunctionDeclaration extends Statement {
@@ -931,7 +931,7 @@
     function.accept1(visitor, arg);
   }
 
-  FunctionDeclaration _clone() => new FunctionDeclaration(name, function);
+  FunctionDeclaration _clone() => FunctionDeclaration(name, function);
 }
 
 class LabeledStatement extends Statement {
@@ -953,7 +953,7 @@
     body.accept1(visitor, arg);
   }
 
-  LabeledStatement _clone() => new LabeledStatement(label, body);
+  LabeledStatement _clone() => LabeledStatement(label, body);
 }
 
 class LiteralStatement extends Statement {
@@ -970,7 +970,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  LiteralStatement _clone() => new LiteralStatement(code);
+  LiteralStatement _clone() => LiteralStatement(code);
 }
 
 // Not a real JavaScript node, but represents the yield statement from a dart
@@ -995,7 +995,7 @@
     expression.accept1(visitor, arg);
   }
 
-  DartYield _clone() => new DartYield(expression, hasStar);
+  DartYield _clone() => DartYield(expression, hasStar);
 }
 
 abstract class Expression extends Node {
@@ -1003,7 +1003,7 @@
   // have precedence depending on how the deferred node is resolved.
   int get precedenceLevel;
 
-  Statement toStatement() => new ExpressionStatement(this);
+  Statement toStatement() => ExpressionStatement(this);
 }
 
 abstract class Declaration implements VariableReference {}
@@ -1081,10 +1081,8 @@
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * [VariableDeclarationList] is a subclass of [Expression] to simplify the
- * AST.
- */
+/// [VariableDeclarationList] is a subclass of [Expression] to simplify the
+/// AST.
 class VariableDeclarationList extends Expression {
   final List<VariableInitialization> declarations;
 
@@ -1113,7 +1111,7 @@
     }
   }
 
-  VariableDeclarationList _clone() => new VariableDeclarationList(declarations);
+  VariableDeclarationList _clone() => VariableDeclarationList(declarations);
 
   int get precedenceLevel => EXPRESSION;
 }
@@ -1138,7 +1136,7 @@
     enclosed.accept1(visitor, arg);
   }
 
-  Parentheses _clone() => new Parentheses(enclosed);
+  Parentheses _clone() => Parentheses(enclosed);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1172,11 +1170,11 @@
     if (value != null) value.accept1(visitor, arg);
   }
 
-  Assignment _clone() => new Assignment.compound(leftHandSide, op, value);
+  Assignment _clone() => Assignment.compound(leftHandSide, op, value);
 }
 
 class VariableInitialization extends Assignment {
-  /** [value] may be null. */
+  /// [value] may be null.
   VariableInitialization(Declaration declaration, Expression value)
       : super(declaration, value);
 
@@ -1188,8 +1186,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableInitialization(this, arg);
 
-  VariableInitialization _clone() =>
-      new VariableInitialization(declaration, value);
+  VariableInitialization _clone() => VariableInitialization(declaration, value);
 }
 
 class Conditional extends Expression {
@@ -1216,7 +1213,7 @@
     otherwise.accept1(visitor, arg);
   }
 
-  Conditional _clone() => new Conditional(condition, then, otherwise);
+  Conditional _clone() => Conditional(condition, then, otherwise);
 
   int get precedenceLevel => ASSIGNMENT;
 }
@@ -1249,7 +1246,7 @@
     }
   }
 
-  Call _clone() => new Call(target, arguments);
+  Call _clone() => Call(target, arguments);
 
   int get precedenceLevel => CALL;
 }
@@ -1262,7 +1259,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitNew(this, arg);
 
-  New _clone() => new New(target, arguments);
+  New _clone() => New(target, arguments);
 }
 
 class Binary extends Expression {
@@ -1277,7 +1274,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitBinary(this, arg);
 
-  Binary _clone() => new Binary(op, left, right);
+  Binary _clone() => Binary(op, left, right);
 
   void visitChildren<T>(NodeVisitor<T> visitor) {
     left.accept(visitor);
@@ -1346,7 +1343,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitPrefix(this, arg);
 
-  Prefix _clone() => new Prefix(op, argument);
+  Prefix _clone() => Prefix(op, argument);
 
   void visitChildren<T>(NodeVisitor<T> visitor) {
     argument.accept(visitor);
@@ -1370,7 +1367,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitPostfix(this, arg);
 
-  Postfix _clone() => new Postfix(op, argument);
+  Postfix _clone() => Postfix(op, argument);
 
   void visitChildren<T>(NodeVisitor<T> visitor) {
     argument.accept(visitor);
@@ -1383,7 +1380,7 @@
   int get precedenceLevel => UNARY;
 }
 
-RegExp _identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
+RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
 
 abstract class VariableReference extends Expression {
   final String name;
@@ -1409,7 +1406,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableUse(this, arg);
 
-  VariableUse _clone() => new VariableUse(name);
+  VariableUse _clone() => VariableUse(name);
 
   String toString() => 'VariableUse($name)';
 }
@@ -1417,14 +1414,14 @@
 class VariableDeclaration extends VariableReference implements Declaration {
   final bool allowRename;
 
-  VariableDeclaration(String name, {this.allowRename: true}) : super(name);
+  VariableDeclaration(String name, {this.allowRename = true}) : super(name);
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitVariableDeclaration(this);
 
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableDeclaration(this, arg);
 
-  VariableDeclaration _clone() => new VariableDeclaration(name);
+  VariableDeclaration _clone() => VariableDeclaration(name);
 }
 
 class Parameter extends VariableDeclaration {
@@ -1435,7 +1432,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitParameter(this, arg);
 
-  Parameter _clone() => new Parameter(name);
+  Parameter _clone() => Parameter(name);
 }
 
 class This extends Parameter {
@@ -1446,7 +1443,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitThis(this, arg);
 
-  This _clone() => new This();
+  This _clone() => This();
 }
 
 class NamedFunction extends Expression {
@@ -1470,7 +1467,7 @@
     function.accept1(visitor, arg);
   }
 
-  NamedFunction _clone() => new NamedFunction(name, function);
+  NamedFunction _clone() => NamedFunction(name, function);
 
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
@@ -1489,7 +1486,7 @@
   @override
   final AsyncModifier asyncModifier;
 
-  Fun(this.params, this.body, {this.asyncModifier: AsyncModifier.sync});
+  Fun(this.params, this.body, {this.asyncModifier = AsyncModifier.sync});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitFun(this);
 
@@ -1506,7 +1503,7 @@
     body.accept1(visitor, arg);
   }
 
-  Fun _clone() => new Fun(params, body, asyncModifier: asyncModifier);
+  Fun _clone() => Fun(params, body, asyncModifier: asyncModifier);
 
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
@@ -1520,7 +1517,7 @@
   final AsyncModifier asyncModifier;
 
   ArrowFunction(this.params, this.body,
-      {this.asyncModifier: AsyncModifier.sync});
+      {this.asyncModifier = AsyncModifier.sync});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrowFunction(this);
 
@@ -1538,7 +1535,7 @@
   }
 
   ArrowFunction _clone() =>
-      new ArrowFunction(params, body, asyncModifier: asyncModifier);
+      ArrowFunction(params, body, asyncModifier: asyncModifier);
 
   int get precedenceLevel => ASSIGNMENT;
 }
@@ -1553,13 +1550,13 @@
       {this.isAsync, this.isYielding});
 
   static const AsyncModifier sync =
-      const AsyncModifier(0, "sync", isAsync: false, isYielding: false);
+      AsyncModifier(0, "sync", isAsync: false, isYielding: false);
   static const AsyncModifier async =
-      const AsyncModifier(1, "async", isAsync: true, isYielding: false);
+      AsyncModifier(1, "async", isAsync: true, isYielding: false);
   static const AsyncModifier asyncStar =
-      const AsyncModifier(2, "async*", isAsync: true, isYielding: true);
+      AsyncModifier(2, "async*", isAsync: true, isYielding: true);
   static const AsyncModifier syncStar =
-      const AsyncModifier(3, "sync*", isAsync: false, isYielding: true);
+      AsyncModifier(3, "sync*", isAsync: false, isYielding: true);
 
   static const List<AsyncModifier> values = [sync, async, asyncStar, syncStar];
 
@@ -1593,7 +1590,7 @@
     selector.accept1(visitor, arg);
   }
 
-  PropertyAccess _clone() => new PropertyAccess(receiver, selector);
+  PropertyAccess _clone() => PropertyAccess(receiver, selector);
 
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
@@ -1669,7 +1666,7 @@
 
   // [visitChildren] inherited from [Literal].
 
-  LiteralBool _clone() => new LiteralBool(value);
+  LiteralBool _clone() => LiteralBool(value);
 }
 
 class LiteralNull extends Literal {
@@ -1680,7 +1677,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralNull(this, arg);
 
-  LiteralNull _clone() => new LiteralNull();
+  LiteralNull _clone() => LiteralNull();
 }
 
 class LiteralString extends Literal {
@@ -1746,7 +1743,7 @@
     for (Literal part in parts) part.accept1(visitor, arg);
   }
 
-  StringConcatenation _clone() => new StringConcatenation(this.parts);
+  StringConcatenation _clone() => StringConcatenation(this.parts);
 }
 
 class LiteralNumber extends Literal {
@@ -1761,7 +1758,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralNumber(this, arg);
 
-  LiteralNumber _clone() => new LiteralNumber(value);
+  LiteralNumber _clone() => LiteralNumber(value);
 }
 
 class ArrayInitializer extends Expression {
@@ -1782,15 +1779,13 @@
     for (Expression element in elements) element.accept1(visitor, arg);
   }
 
-  ArrayInitializer _clone() => new ArrayInitializer(elements);
+  ArrayInitializer _clone() => ArrayInitializer(elements);
 
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * An empty place in an [ArrayInitializer].
- * For example the list [1, , , 2] would contain two holes.
- */
+/// An empty place in an [ArrayInitializer].
+/// For example the list [1, , , 2] would contain two holes.
 class ArrayHole extends Expression {
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayHole(this);
 
@@ -1801,7 +1796,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  ArrayHole _clone() => new ArrayHole();
+  ArrayHole _clone() => ArrayHole();
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1810,14 +1805,12 @@
   final List<Property> properties;
   final bool isOneLiner;
 
-  /**
-   * Constructs a new object-initializer containing the given [properties].
-   *
-   * [isOneLiner] describes the behaviour when pretty-printing (non-minified).
-   * If true print all properties on the same line.
-   * If false print each property on a seperate line.
-   */
-  ObjectInitializer(this.properties, {this.isOneLiner: true});
+  /// Constructs a new object-initializer containing the given [properties].
+  ///
+  /// [isOneLiner] describes the behaviour when pretty-printing (non-minified).
+  /// If true print all properties on the same line.
+  /// If false print each property on a seperate line.
+  ObjectInitializer(this.properties, {this.isOneLiner = true});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitObjectInitializer(this);
 
@@ -1833,7 +1826,7 @@
   }
 
   ObjectInitializer _clone() =>
-      new ObjectInitializer(properties, isOneLiner: isOneLiner);
+      ObjectInitializer(properties, isOneLiner: isOneLiner);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1860,7 +1853,7 @@
     value.accept1(visitor, arg);
   }
 
-  Property _clone() => new Property(name, value);
+  Property _clone() => Property(name, value);
 }
 
 class MethodDefinition extends Node implements Property {
@@ -1919,7 +1912,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  InterpolatedExpression _clone() => new InterpolatedExpression(nameOrPosition);
+  InterpolatedExpression _clone() => InterpolatedExpression(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1938,7 +1931,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition);
+  InterpolatedLiteral _clone() => InterpolatedLiteral(nameOrPosition);
 }
 
 class InterpolatedParameter extends Expression
@@ -1964,7 +1957,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  InterpolatedParameter _clone() => new InterpolatedParameter(nameOrPosition);
+  InterpolatedParameter _clone() => InterpolatedParameter(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1984,7 +1977,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  InterpolatedSelector _clone() => new InterpolatedSelector(nameOrPosition);
+  InterpolatedSelector _clone() => InterpolatedSelector(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -2004,7 +1997,7 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition);
+  InterpolatedStatement _clone() => InterpolatedStatement(nameOrPosition);
 }
 
 class InterpolatedDeclaration extends Expression
@@ -2025,7 +2018,7 @@
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
   InterpolatedDeclaration _clone() {
-    return new InterpolatedDeclaration(nameOrPosition);
+    return InterpolatedDeclaration(nameOrPosition);
   }
 
   @override
@@ -2035,13 +2028,11 @@
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * [RegExpLiteral]s, despite being called "Literal", do not inherit from
- * [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
- * are thus not in the same category as numbers or strings.
- */
+/// [RegExpLiteral]s, despite being called "Literal", do not inherit from
+/// [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
+/// are thus not in the same category as numbers or strings.
 class RegExpLiteral extends Expression {
-  /** Contains the pattern and the flags.*/
+  /// Contains the pattern and the flags.
   final String pattern;
 
   RegExpLiteral(this.pattern);
@@ -2055,19 +2046,17 @@
 
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
-  RegExpLiteral _clone() => new RegExpLiteral(pattern);
+  RegExpLiteral _clone() => RegExpLiteral(pattern);
 
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * An asynchronous await.
- *
- * Not part of JavaScript. We desugar this expression before outputting.
- * Should only occur in a [Fun] with `asyncModifier` async or asyncStar.
- */
+/// An asynchronous await.
+///
+/// Not part of JavaScript. We desugar this expression before outputting.
+/// Should only occur in a [Fun] with `asyncModifier` async or asyncStar.
 class Await extends Expression {
-  /** The awaited expression. */
+  /// The awaited expression.
   final Expression expression;
 
   Await(this.expression);
@@ -2084,15 +2073,13 @@
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       expression.accept1(visitor, arg);
 
-  Await _clone() => new Await(expression);
+  Await _clone() => Await(expression);
 }
 
-/**
- * A comment.
- *
- * Extends [Statement] so we can add comments before statements in
- * [Block] and [Program].
- */
+/// A comment.
+///
+/// Extends [Statement] so we can add comments before statements in
+/// [Block] and [Program].
 class Comment extends Statement {
   final String comment;
 
@@ -2103,7 +2090,7 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitComment(this, arg);
 
-  Comment _clone() => new Comment(comment);
+  Comment _clone() => Comment(comment);
 
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index 8dcc958..af0c66a 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -49,7 +49,7 @@
 
 /// A simple implementation of [JavaScriptPrintingContext] suitable for tests.
 class SimpleJavaScriptPrintingContext extends JavaScriptPrintingContext {
-  final StringBuffer buffer = new StringBuffer();
+  final StringBuffer buffer = StringBuffer();
 
   void emit(String string) {
     buffer.write(string);
@@ -82,7 +82,7 @@
   // The current indentation level.
   int _indentLevel = 0;
   // A cache of all indentation strings used so far.
-  List<String> _indentList = <String>[""];
+  final List<String> _indentList = [""];
 
   static final identifierCharacterRegExp = RegExp(r'^[a-zA-Z_0-9$]');
   static final expressionContinuationRegExp = RegExp(r'^[-+([]');
@@ -91,15 +91,15 @@
       : options = options,
         context = context,
         shouldCompressOutput = options.shouldCompressOutput,
-        danglingElseVisitor = new DanglingElseVisitor(context),
+        danglingElseVisitor = DanglingElseVisitor(context),
         localNamer = determineRenamer(
             options.shouldCompressOutput, options.minifyLocalVariables);
 
   static LocalNamer determineRenamer(
       bool shouldCompressOutput, bool allowVariableMinification) {
     return (shouldCompressOutput && allowVariableMinification)
-        ? new MinifyRenamer()
-        : new IdentityNamer();
+        ? MinifyRenamer()
+        : IdentityNamer();
   }
 
   // The current indentation string.
@@ -141,7 +141,7 @@
     return lastAddedString.codeUnitAt(lastAddedString.length - 1);
   }
 
-  void out(String str, {bool isWhitespace: false}) {
+  void out(String str, {bool isWhitespace = false}) {
     if (str != "") {
       if (pendingSemicolon) {
         if (!shouldCompressOutput) {
@@ -218,7 +218,7 @@
   }
 
   void startNode(Node node) {
-    currentNode = new EnterExitNode(currentNode, node);
+    currentNode = EnterExitNode(currentNode, node);
     if (node is DeferredExpression) {
       startNode(node.value);
     }
@@ -356,7 +356,7 @@
     if (hasElse) {
       bool needsBraces = then.accept(danglingElseVisitor) || then is Do;
       if (needsBraces) {
-        then = new Block(<Statement>[then]);
+        then = Block(<Statement>[then]);
       }
     }
     if (shouldIndent) indent();
@@ -598,7 +598,7 @@
     // See:
     // https://connect.microsoft.com/IE/feedback/details/891889/parser-bugs
     if (body is Break && body.targetLabel == node.label) {
-      visit(new EmptyStatement());
+      visit(EmptyStatement());
       return;
     }
     outIndent("${node.label}:");
@@ -645,7 +645,7 @@
 
   @override
   visitFunctionDeclaration(FunctionDeclaration declaration) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitFunctionDeclaration(declaration);
     indent();
     startNode(declaration.function);
@@ -1083,7 +1083,7 @@
 
   @override
   void visitNamedFunction(NamedFunction namedFunction) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitNamedFunction(namedFunction);
     startNode(namedFunction.function);
     int closingPosition = currentNode.closingPosition =
@@ -1096,14 +1096,14 @@
 
   @override
   void visitFun(Fun fun) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitFun(fun);
     currentNode.closingPosition = functionOut(fun, null, vars);
   }
 
   @override
   void visitArrowFunction(ArrowFunction fun) {
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitArrowFunction(fun);
     currentNode.closingPosition = arrowFunctionOut(fun, vars);
   }
@@ -1307,7 +1307,7 @@
   @override
   visitMethodDefinition(MethodDefinition node) {
     propertyNameOut(node);
-    VarCollector vars = new VarCollector();
+    VarCollector vars = VarCollector();
     vars.visitMethodDefinition(node);
     startNode(node.function);
     currentNode.closingPosition = methodOut(node, vars);
@@ -1465,7 +1465,7 @@
   final List<T> list;
 
   OrderedSet()
-      : set = new Set<T>(),
+      : set = Set<T>(),
         list = <T>[];
 
   void add(T x) {
@@ -1493,8 +1493,8 @@
 
   VarCollector()
       : nested = false,
-        vars = new OrderedSet<String>(),
-        params = new OrderedSet<String>();
+        vars = OrderedSet<String>(),
+        params = OrderedSet<String>();
 
   void forEachVar(void fn(String v)) => vars.forEach(fn);
   void forEachParam(void fn(String p)) => params.forEach(fn);
@@ -1550,10 +1550,8 @@
   }
 }
 
-/**
- * Returns true, if the given node must be wrapped into braces when used
- * as then-statement in an [If] that has an else branch.
- */
+/// Returns true, if the given node must be wrapped into braces when used
+/// as then-statement in an [If] that has an else branch.
 class DanglingElseVisitor extends BaseVisitor<bool> {
   JavaScriptPrintingContext context;
 
@@ -1631,7 +1629,7 @@
   MinifyRenamer();
 
   void enterScope(VarCollector vars) {
-    maps.add(new Map<String, String>());
+    maps.add({});
     variableNumberStack.add(variableNumber);
     parameterNumberStack.add(parameterNumber);
     vars.forEachVar(declareVariable);
@@ -1711,7 +1709,7 @@
     String newName;
     if (n < LETTERS) {
       // Start naming variables a, b, c, ..., z, A, B, C, ..., Z.
-      newName = new String.fromCharCodes([nthLetter(n)]);
+      newName = String.fromCharCodes([nthLetter(n)]);
     } else {
       // Then name variables a0, a1, a2, ..., a9, b0, b1, ..., Z9, aa0, aa1, ...
       // For all functions with fewer than 500 locals this is just as compact
@@ -1734,9 +1732,9 @@
         codes.add(nthLetter((n ~/ nameSpaceSize) % LETTERS));
       }
       codes.add(charCodes.$0 + digit);
-      newName = new String.fromCharCodes(codes);
+      newName = String.fromCharCodes(codes);
     }
-    assert(new RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
+    assert(RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
     maps.last[oldName] = newName;
     return newName;
   }
diff --git a/pkg/js_ast/lib/src/template.dart b/pkg/js_ast/lib/src/template.dart
index 1fee00a..239a717 100644
--- a/pkg/js_ast/lib/src/template.dart
+++ b/pkg/js_ast/lib/src/template.dart
@@ -5,8 +5,8 @@
 part of js_ast;
 
 class TemplateManager {
-  Map<String, Template> expressionTemplates = new Map<String, Template>();
-  Map<String, Template> statementTemplates = new Map<String, Template>();
+  Map<String, Template> expressionTemplates = {};
+  Map<String, Template> statementTemplates = {};
 
   TemplateManager();
 
@@ -16,7 +16,7 @@
 
   Template defineExpressionTemplate(String source, Node ast) {
     Template template =
-        new Template(source, ast, isExpression: true, forceCopy: false);
+        Template(source, ast, isExpression: true, forceCopy: false);
     expressionTemplates[source] = template;
     return template;
   }
@@ -27,18 +27,16 @@
 
   Template defineStatementTemplate(String source, Node ast) {
     Template template =
-        new Template(source, ast, isExpression: false, forceCopy: false);
+        Template(source, ast, isExpression: false, forceCopy: false);
     statementTemplates[source] = template;
     return template;
   }
 }
 
-/**
- * A Template is created with JavaScript AST containing placeholders (interface
- * InterpolatedNode).  The [instantiate] method creates an AST that looks like
- * the original with the placeholders replaced by the arguments to
- * [instantiate].
- */
+/// A Template is created with JavaScript AST containing placeholders (interface
+/// InterpolatedNode).  The [instantiate] method creates an AST that looks like
+/// the original with the placeholders replaced by the arguments to
+/// [instantiate].
 class Template {
   final String source;
   final bool isExpression;
@@ -54,7 +52,7 @@
   bool get isPositional => holeNames == null;
 
   Template(this.source, this.ast,
-      {this.isExpression: true, this.forceCopy: false}) {
+      {this.isExpression = true, this.forceCopy = false}) {
     assert(this.isExpression ? ast is Expression : ast is Statement);
     _compile();
   }
@@ -81,14 +79,14 @@
 
   bool _checkNoPlaceholders() {
     InstantiatorGeneratorVisitor generator =
-        new InstantiatorGeneratorVisitor(false);
+        InstantiatorGeneratorVisitor(false);
     generator.compile(ast);
     return generator.analysis.count == 0;
   }
 
   void _compile() {
     InstantiatorGeneratorVisitor generator =
-        new InstantiatorGeneratorVisitor(forceCopy);
+        InstantiatorGeneratorVisitor(forceCopy);
     instantiator = generator.compile(ast);
     positionalArgumentCount = generator.analysis.count;
     Set<String> names = generator.analysis.holeNames;
@@ -125,26 +123,20 @@
   }
 }
 
-/**
- * An Instantiator is a Function that generates a JS AST tree or List of
- * trees. [arguments] is a List for positional templates, or Map for
- * named templates.
- */
-typedef /*Node|Iterable<Node>*/ Instantiator(var arguments);
+/// An Instantiator is a Function that generates a JS AST tree or List of
+/// trees. [arguments] is a List for positional templates, or Map for named
+/// templates.
+typedef Instantiator = /*Node|Iterable<Node>*/ Function(dynamic arguments);
 
-/**
- * InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
- * containing [InterpolatedNode]s into a function that will create a copy of the
- * tree with the interpolated nodes substituted with provided values.
- */
+/// InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
+/// containing [InterpolatedNode]s into a function that will create a copy of the
+/// tree with the interpolated nodes substituted with provided values.
 class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
   final bool forceCopy;
 
-  InterpolatedNodeAnalysis analysis = new InterpolatedNodeAnalysis();
+  InterpolatedNodeAnalysis analysis = InterpolatedNodeAnalysis();
 
-  /**
-   * The entire tree is cloned if [forceCopy] is true.
-   */
+  /// The entire tree is cloned if [forceCopy] is true.
   InstantiatorGeneratorVisitor(this.forceCopy);
 
   Instantiator compile(Node node) {
@@ -181,16 +173,16 @@
     throw 'Unimplemented InstantiatorGeneratorVisitor for $node';
   }
 
-  static RegExp identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
+  static RegExp identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
 
   static Expression convertStringToVariableUse(String value) {
     assert(identifierRE.hasMatch(value));
-    return new VariableUse(value);
+    return VariableUse(value);
   }
 
   static Expression convertStringToVariableDeclaration(String value) {
     assert(identifierRE.hasMatch(value));
-    return new VariableDeclaration(value);
+    return VariableDeclaration(value);
   }
 
   Instantiator visitInterpolatedExpression(InterpolatedExpression node) {
@@ -250,7 +242,7 @@
 
       Parameter toParameter(item) {
         if (item is Parameter) return item;
-        if (item is String) return new Parameter(item);
+        if (item is String) return Parameter(item);
         throw error('Interpolated value #$nameOrPosition is not a Parameter or'
             ' List of Parameters: $value');
       }
@@ -307,7 +299,7 @@
     List<Instantiator> instantiators =
         node.body.map(visitSplayableStatement).toList();
     return (arguments) {
-      List<Statement> statements = <Statement>[];
+      List<Statement> statements = [];
       void add(node) {
         if (node is EmptyStatement) return;
         if (node is Iterable) {
@@ -320,7 +312,7 @@
       for (Instantiator instantiator in instantiators) {
         add(instantiator(arguments));
       }
-      return new Program(statements);
+      return Program(statements);
     };
   }
 
@@ -328,7 +320,7 @@
     List<Instantiator> instantiators =
         node.statements.map(visitSplayableStatement).toList();
     return (arguments) {
-      List<Statement> statements = <Statement>[];
+      List<Statement> statements = [];
       void add(node) {
         if (node is EmptyStatement) return;
         if (node is Iterable) {
@@ -343,7 +335,7 @@
       for (Instantiator instantiator in instantiators) {
         add(instantiator(arguments));
       }
-      return new Block(statements);
+      return Block(statements);
     };
   }
 
@@ -355,7 +347,7 @@
   }
 
   Instantiator visitEmptyStatement(EmptyStatement node) =>
-      (arguments) => new EmptyStatement();
+      (arguments) => EmptyStatement();
 
   Instantiator visitIf(If node) {
     if (node.condition is InterpolatedExpression) {
@@ -391,7 +383,7 @@
           return makeOtherwise(arguments);
         }
       }
-      return new If(condition, makeThen(arguments), makeOtherwise(arguments));
+      return If(condition, makeThen(arguments), makeOtherwise(arguments));
     };
   }
 
@@ -400,7 +392,7 @@
     Instantiator makeThen = visit(node.then);
     Instantiator makeOtherwise = visit(node.otherwise);
     return (arguments) {
-      return new If(makeCondition(arguments), makeThen(arguments),
+      return If(makeCondition(arguments), makeThen(arguments),
           makeOtherwise(arguments));
     };
   }
@@ -411,7 +403,7 @@
     Instantiator makeUpdate = visitNullable(node.update);
     Instantiator makeBody = visit(node.body);
     return (arguments) {
-      return new For(makeInit(arguments), makeCondition(arguments),
+      return For(makeInit(arguments), makeCondition(arguments),
           makeUpdate(arguments), makeBody(arguments));
     };
   }
@@ -421,20 +413,20 @@
     Instantiator makeObject = visit(node.object);
     Instantiator makeBody = visit(node.body);
     return (arguments) {
-      return new ForIn(makeLeftHandSide(arguments), makeObject(arguments),
+      return ForIn(makeLeftHandSide(arguments), makeObject(arguments),
           makeBody(arguments));
     };
   }
 
   TODO(String name) {
-    throw new UnimplementedError('$this.$name');
+    throw UnimplementedError('$this.$name');
   }
 
   Instantiator visitWhile(While node) {
     Instantiator makeCondition = visit(node.condition);
     Instantiator makeBody = visit(node.body);
     return (arguments) {
-      return new While(makeCondition(arguments), makeBody(arguments));
+      return While(makeCondition(arguments), makeBody(arguments));
     };
   }
 
@@ -442,52 +434,50 @@
     Instantiator makeBody = visit(node.body);
     Instantiator makeCondition = visit(node.condition);
     return (arguments) {
-      return new Do(makeBody(arguments), makeCondition(arguments));
+      return Do(makeBody(arguments), makeCondition(arguments));
     };
   }
 
   Instantiator visitContinue(Continue node) =>
-      (arguments) => new Continue(node.targetLabel);
+      (arguments) => Continue(node.targetLabel);
 
-  Instantiator visitBreak(Break node) =>
-      (arguments) => new Break(node.targetLabel);
+  Instantiator visitBreak(Break node) => (arguments) => Break(node.targetLabel);
 
   Instantiator visitReturn(Return node) {
     Instantiator makeExpression = visitNullable(node.value);
-    return (arguments) => new Return(makeExpression(arguments));
+    return (arguments) => Return(makeExpression(arguments));
   }
 
   Instantiator visitDartYield(DartYield node) {
     Instantiator makeExpression = visit(node.expression);
-    return (arguments) =>
-        new DartYield(makeExpression(arguments), node.hasStar);
+    return (arguments) => DartYield(makeExpression(arguments), node.hasStar);
   }
 
   Instantiator visitThrow(Throw node) {
     Instantiator makeExpression = visit(node.expression);
-    return (arguments) => new Throw(makeExpression(arguments));
+    return (arguments) => Throw(makeExpression(arguments));
   }
 
   Instantiator visitTry(Try node) {
     Instantiator makeBody = visit(node.body);
     Instantiator makeCatch = visitNullable(node.catchPart);
     Instantiator makeFinally = visitNullable(node.finallyPart);
-    return (arguments) => new Try(
-        makeBody(arguments), makeCatch(arguments), makeFinally(arguments));
+    return (arguments) =>
+        Try(makeBody(arguments), makeCatch(arguments), makeFinally(arguments));
   }
 
   Instantiator visitCatch(Catch node) {
     Instantiator makeDeclaration = visit(node.declaration);
     Instantiator makeBody = visit(node.body);
     return (arguments) =>
-        new Catch(makeDeclaration(arguments), makeBody(arguments));
+        Catch(makeDeclaration(arguments), makeBody(arguments));
   }
 
   Instantiator visitSwitch(Switch node) {
     Instantiator makeKey = visit(node.key);
     Iterable<Instantiator> makeCases = node.cases.map(visit);
     return (arguments) {
-      return new Switch(
+      return Switch(
           makeKey(arguments),
           makeCases
               .map<SwitchClause>((Instantiator makeCase) => makeCase(arguments))
@@ -499,14 +489,14 @@
     Instantiator makeExpression = visit(node.expression);
     Instantiator makeBody = visit(node.body);
     return (arguments) {
-      return new Case(makeExpression(arguments), makeBody(arguments));
+      return Case(makeExpression(arguments), makeBody(arguments));
     };
   }
 
   Instantiator visitDefault(Default node) {
     Instantiator makeBody = visit(node.body);
     return (arguments) {
-      return new Default(makeBody(arguments));
+      return Default(makeBody(arguments));
     };
   }
 
@@ -514,12 +504,12 @@
     Instantiator makeName = visit(node.name);
     Instantiator makeFunction = visit(node.function);
     return (arguments) =>
-        new FunctionDeclaration(makeName(arguments), makeFunction(arguments));
+        FunctionDeclaration(makeName(arguments), makeFunction(arguments));
   }
 
   Instantiator visitLabeledStatement(LabeledStatement node) {
     Instantiator makeBody = visit(node.body);
-    return (arguments) => new LabeledStatement(node.label, makeBody(arguments));
+    return (arguments) => LabeledStatement(node.label, makeBody(arguments));
   }
 
   Instantiator visitLiteralStatement(LiteralStatement node) =>
@@ -531,12 +521,12 @@
     List<Instantiator> declarationMakers =
         node.declarations.map(visit).toList();
     return (arguments) {
-      List<VariableInitialization> declarations = <VariableInitialization>[];
+      List<VariableInitialization> declarations = [];
       for (Instantiator instantiator in declarationMakers) {
         var result = instantiator(arguments);
         declarations.add(result);
       }
-      return new VariableDeclarationList(declarations);
+      return VariableDeclarationList(declarations);
     };
   }
 
@@ -545,7 +535,7 @@
     String op = node.op;
     Instantiator makeValue = visitNullable(node.value);
     return (arguments) {
-      return new Assignment.compound(
+      return Assignment.compound(
           makeLeftHandSide(arguments), op, makeValue(arguments));
     };
   }
@@ -554,7 +544,7 @@
     Instantiator makeDeclaration = visit(node.declaration);
     Instantiator makeValue = visitNullable(node.value);
     return (arguments) {
-      return new VariableInitialization(
+      return VariableInitialization(
           makeDeclaration(arguments), makeValue(arguments));
     };
   }
@@ -563,15 +553,15 @@
     Instantiator makeCondition = visit(cond.condition);
     Instantiator makeThen = visit(cond.then);
     Instantiator makeOtherwise = visit(cond.otherwise);
-    return (arguments) => new Conditional(makeCondition(arguments),
+    return (arguments) => Conditional(makeCondition(arguments),
         makeThen(arguments), makeOtherwise(arguments));
   }
 
   Instantiator visitNew(New node) =>
-      handleCallOrNew(node, (target, arguments) => new New(target, arguments));
+      handleCallOrNew(node, (target, arguments) => New(target, arguments));
 
   Instantiator visitCall(Call node) =>
-      handleCallOrNew(node, (target, arguments) => new Call(target, arguments));
+      handleCallOrNew(node, (target, arguments) => Call(target, arguments));
 
   Instantiator handleCallOrNew(Call node, finish(target, arguments)) {
     Instantiator makeTarget = visit(node.target);
@@ -582,7 +572,7 @@
     // copying.
     return (arguments) {
       Node target = makeTarget(arguments);
-      List<Expression> callArguments = <Expression>[];
+      List<Expression> callArguments = [];
       for (Instantiator instantiator in argumentMakers) {
         var result = instantiator(arguments);
         if (result is Iterable) {
@@ -599,45 +589,44 @@
     Instantiator makeLeft = visit(node.left);
     Instantiator makeRight = visit(node.right);
     String op = node.op;
-    return (arguments) =>
-        new Binary(op, makeLeft(arguments), makeRight(arguments));
+    return (arguments) => Binary(op, makeLeft(arguments), makeRight(arguments));
   }
 
   Instantiator visitPrefix(Prefix node) {
     Instantiator makeOperand = visit(node.argument);
     String op = node.op;
-    return (arguments) => new Prefix(op, makeOperand(arguments));
+    return (arguments) => Prefix(op, makeOperand(arguments));
   }
 
   Instantiator visitPostfix(Postfix node) {
     Instantiator makeOperand = visit(node.argument);
     String op = node.op;
-    return (arguments) => new Postfix(op, makeOperand(arguments));
+    return (arguments) => Postfix(op, makeOperand(arguments));
   }
 
   Instantiator visitVariableUse(VariableUse node) =>
-      (arguments) => new VariableUse(node.name);
+      (arguments) => VariableUse(node.name);
 
-  Instantiator visitThis(This node) => (arguments) => new This();
+  Instantiator visitThis(This node) => (arguments) => This();
 
   Instantiator visitVariableDeclaration(VariableDeclaration node) =>
-      (arguments) => new VariableDeclaration(node.name);
+      (arguments) => VariableDeclaration(node.name);
 
   Instantiator visitParameter(Parameter node) =>
-      (arguments) => new Parameter(node.name);
+      (arguments) => Parameter(node.name);
 
   Instantiator visitAccess(PropertyAccess node) {
     Instantiator makeReceiver = visit(node.receiver);
     Instantiator makeSelector = visit(node.selector);
     return (arguments) =>
-        new PropertyAccess(makeReceiver(arguments), makeSelector(arguments));
+        PropertyAccess(makeReceiver(arguments), makeSelector(arguments));
   }
 
   Instantiator visitNamedFunction(NamedFunction node) {
     Instantiator makeDeclaration = visit(node.name);
     Instantiator makeFunction = visit(node.function);
     return (arguments) =>
-        new NamedFunction(makeDeclaration(arguments), makeFunction(arguments));
+        NamedFunction(makeDeclaration(arguments), makeFunction(arguments));
   }
 
   Instantiator visitFun(Fun node) {
@@ -645,7 +634,7 @@
     Instantiator makeBody = visit(node.body);
     // TODO(sra): Avoid copying params if no interpolation or forced copying.
     return (arguments) {
-      List<Parameter> params = <Parameter>[];
+      List<Parameter> params = [];
       for (Instantiator instantiator in paramMakers) {
         var result = instantiator(arguments);
         if (result is Iterable) {
@@ -655,7 +644,7 @@
         }
       }
       Statement body = makeBody(arguments);
-      return new Fun(params, body);
+      return Fun(params, body);
     };
   }
 
@@ -664,7 +653,7 @@
     Instantiator makeBody = visit(node.body);
     // TODO(sra): Avoid copying params if no interpolation or forced copying.
     return (arguments) {
-      List<Parameter> params = <Parameter>[];
+      List<Parameter> params = [];
       for (Instantiator instantiator in paramMakers) {
         var result = instantiator(arguments);
         if (result is Iterable) {
@@ -675,7 +664,7 @@
       }
       // Either a Block or Expression.
       Node body = makeBody(arguments);
-      return new ArrowFunction(params, body);
+      return ArrowFunction(params, body);
     };
   }
 
@@ -688,16 +677,16 @@
   Instantiator visitDeferredString(DeferredString node) => (arguments) => node;
 
   Instantiator visitLiteralBool(LiteralBool node) =>
-      (arguments) => new LiteralBool(node.value);
+      (arguments) => LiteralBool(node.value);
 
   Instantiator visitLiteralString(LiteralString node) =>
-      (arguments) => new LiteralString(node.value);
+      (arguments) => LiteralString(node.value);
 
   Instantiator visitLiteralNumber(LiteralNumber node) =>
-      (arguments) => new LiteralNumber(node.value);
+      (arguments) => LiteralNumber(node.value);
 
   Instantiator visitLiteralNull(LiteralNull node) =>
-      (arguments) => new LiteralNull();
+      (arguments) => LiteralNull();
 
   Instantiator visitStringConcatenation(StringConcatenation node) {
     List<Instantiator> partMakers =
@@ -706,7 +695,7 @@
       List<Literal> parts = partMakers
           .map((Instantiator instantiator) => instantiator(arguments))
           .toList(growable: false);
-      return new StringConcatenation(parts);
+      return StringConcatenation(parts);
     };
   }
 
@@ -729,12 +718,12 @@
           .map<Expression>(
               (Instantiator instantiator) => instantiator(arguments))
           .toList(growable: false);
-      return new ArrayInitializer(elements);
+      return ArrayInitializer(elements);
     };
   }
 
   Instantiator visitArrayHole(ArrayHole node) {
-    return (arguments) => new ArrayHole();
+    return (arguments) => ArrayHole();
   }
 
   Instantiator visitObjectInitializer(ObjectInitializer node) {
@@ -742,7 +731,7 @@
         node.properties.map(visitSplayable).toList();
     bool isOneLiner = node.isOneLiner;
     return (arguments) {
-      List<Property> properties = <Property>[];
+      List<Property> properties = [];
       for (Instantiator instantiator in propertyMakers) {
         var result = instantiator(arguments);
         if (result is Iterable) {
@@ -751,7 +740,7 @@
           properties.add(result);
         }
       }
-      return new ObjectInitializer(properties, isOneLiner: isOneLiner);
+      return ObjectInitializer(properties, isOneLiner: isOneLiner);
     };
   }
 
@@ -759,7 +748,7 @@
     Instantiator makeName = visit(node.name);
     Instantiator makeValue = visit(node.value);
     return (arguments) {
-      return new Property(makeName(arguments), makeValue(arguments));
+      return Property(makeName(arguments), makeValue(arguments));
     };
   }
 
@@ -767,30 +756,28 @@
     Instantiator makeName = visit(node.name);
     Instantiator makeFunction = visit(node.function);
     return (arguments) {
-      return new MethodDefinition(makeName(arguments), makeFunction(arguments));
+      return MethodDefinition(makeName(arguments), makeFunction(arguments));
     };
   }
 
   Instantiator visitRegExpLiteral(RegExpLiteral node) =>
-      (arguments) => new RegExpLiteral(node.pattern);
+      (arguments) => RegExpLiteral(node.pattern);
 
   Instantiator visitComment(Comment node) => TODO('visitComment');
 
   Instantiator visitAwait(Await node) {
     Instantiator makeExpression = visit(node.expression);
     return (arguments) {
-      return new Await(makeExpression(arguments));
+      return Await(makeExpression(arguments));
     };
   }
 }
 
-/**
- * InterpolatedNodeAnalysis determines which AST trees contain
- * [InterpolatedNode]s, and the names of the named interpolated nodes.
- */
+/// InterpolatedNodeAnalysis determines which AST trees contain
+/// [InterpolatedNode]s, and the names of the named interpolated nodes.
 class InterpolatedNodeAnalysis extends BaseVisitor {
-  final Set<Node> containsInterpolatedNode = new Set<Node>();
-  final Set<String> holeNames = new Set<String>();
+  final Set<Node> containsInterpolatedNode = {};
+  final Set<String> holeNames = {};
   int count = 0;
 
   InterpolatedNodeAnalysis();
diff --git a/pkg/js_ast/test/printer_callback_test.dart b/pkg/js_ast/test/printer_callback_test.dart
index 153c41d..a54ddbc 100644
--- a/pkg/js_ast/test/printer_callback_test.dart
+++ b/pkg/js_ast/test/printer_callback_test.dart
@@ -28,8 +28,8 @@
   const TestCase(this.data, [this.environment = const {}]);
 }
 
-const List<TestCase> DATA = const <TestCase>[
-  const TestCase(const {
+const List<TestCase> DATA = <TestCase>[
+  TestCase({
     TestMode.NONE: """
 function(a, b) {
   return null;
@@ -47,7 +47,7 @@
   return null@5;
 @4}@3@0"""
   }),
-  const TestCase(const {
+  TestCase({
     TestMode.NONE: """
 function() {
   if (true) {
@@ -105,7 +105,7 @@
 @26  }@22
 @20}@1@0""",
   }),
-  const TestCase(const {
+  TestCase({
     TestMode.NONE: """
 function() {
   function foo() {
@@ -127,7 +127,7 @@
   }@5@3
 @2}@1@0"""
   }),
-  const TestCase(const {
+  TestCase({
     TestMode.INPUT: """
 function() {
   a['b'];
@@ -154,13 +154,13 @@
 @2  [1@8,,@9 2@10]@7;
 @6}@1@0""",
   }),
-  const TestCase(const {
+  TestCase({
     TestMode.INPUT: "a.#nameTemplate = #nameTemplate",
     TestMode.NONE: "a.nameValue = nameValue",
     TestMode.ENTER: "@0@1@2a.@3nameValue = @3nameValue",
     TestMode.DELIMITER: "a.nameValue = nameValue",
     TestMode.EXIT: "a@2.nameValue@3@1 = nameValue@3@0",
-  }, const {
+  }, {
     'nameTemplate': 'nameValue'
   }),
 ];
@@ -179,16 +179,16 @@
     // Input is the same as output.
     code = map[TestMode.NONE];
   }
-  JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
+  JavaScriptPrintingOptions options = JavaScriptPrintingOptions();
   Map arguments = {};
   testCase.environment.forEach((String name, String value) {
-    arguments[name] = new FixedName(value);
+    arguments[name] = FixedName(value);
   });
   Node node = js.parseForeignJS(code).instantiate(arguments);
   map.forEach((TestMode mode, String expectedOutput) {
     if (mode == TestMode.INPUT) return;
-    Context context = new Context(mode);
-    new Printer(options, context).visit(node);
+    Context context = Context(mode);
+    Printer(options, context).visit(node);
     // TODO(johnniwinther): Remove `replaceAll(...)` when dart2js behaves as the
     // VM on newline in multiline strings.
     expect(context.getText(), equals(expectedOutput.replaceAll('\r\n', '\n')),
@@ -227,7 +227,7 @@
   String getText() {
     String text = super.getText();
     int offset = 0;
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     for (int position in tagMap.keys.toList()..sort()) {
       if (offset < position) {
         sb.write(text.substring(offset, position));
diff --git a/pkg/js_runtime/lib/shared/embedded_names.dart b/pkg/js_runtime/lib/shared/embedded_names.dart
index ec45847..0334810 100644
--- a/pkg/js_runtime/lib/shared/embedded_names.dart
+++ b/pkg/js_runtime/lib/shared/embedded_names.dart
@@ -179,6 +179,9 @@
 /// This embedded global is used for --experiment-new-rti.
 const RTI_UNIVERSE = 'typeUniverse';
 
+/// An embedded global used to collect and access startup metrics.
+const STARTUP_METRICS = 'sm';
+
 /// Names that are supported by [JS_GET_NAME].
 // TODO(herhut): Make entries lower case (as in fields) and find a better name.
 enum JsGetName {
diff --git a/pkg/kernel/PRESUBMIT.py b/pkg/kernel/PRESUBMIT.py
index ee42fc8..8630f20 100644
--- a/pkg/kernel/PRESUBMIT.py
+++ b/pkg/kernel/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # 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.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/pkg/kernel/analysis_options.yaml b/pkg/kernel/analysis_options.yaml
index 68fdd50..4d00632 100644
--- a/pkg/kernel/analysis_options.yaml
+++ b/pkg/kernel/analysis_options.yaml
@@ -16,4 +16,6 @@
     - package_api_docs
     - lines_longer_than_80_chars
     - unrelated_type_equality_checks
+    - annotate_overrides
+    - always_declare_return_types
     # - always_specify_types
diff --git a/pkg/kernel/bin/count_breakdown.dart b/pkg/kernel/bin/count_breakdown.dart
index 839ab42..0771034 100755
--- a/pkg/kernel/bin/count_breakdown.dart
+++ b/pkg/kernel/bin/count_breakdown.dart
@@ -17,7 +17,7 @@
   exit(1);
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   Component component = CommandLineHelper.tryLoadDill(args[0]);
@@ -28,13 +28,15 @@
 
 class TypeCounter extends RecursiveVisitor {
   Map<String, int> _typeCounts = <String, int>{};
-  defaultNode(Node node) {
+
+  @override
+  void defaultNode(Node node) {
     String key = node.runtimeType.toString();
     _typeCounts[key] = (_typeCounts[key] ??= 0) + 1;
     super.defaultNode(node);
   }
 
-  printStats() {
+  void printStats() {
     List<List<Object>> data = [];
     _typeCounts.forEach((type, count) {
       data.add([type, count]);
diff --git a/pkg/kernel/bin/dill_forensic.dart b/pkg/kernel/bin/dill_forensic.dart
new file mode 100755
index 0000000..c95d02a
--- /dev/null
+++ b/pkg/kernel/bin/dill_forensic.dart
@@ -0,0 +1,106 @@
+#!/usr/bin/env dart
+// 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 'dart:typed_data';
+
+import 'package:kernel/kernel.dart'
+    show Component, Source, loadComponentFromBytes;
+import 'package:kernel/binary/tag.dart' show Tag;
+
+void main(List<String> args) {
+  if (args.length != 1) {
+    throw "Usage: dart <script> <dillfile>";
+  }
+  File file = new File(args.single);
+  if (!file.existsSync()) {
+    throw "Given file doesn't exist.\n"
+        "Usage: dart <script> <dillfile>";
+  }
+  Uint8List bytes = file.readAsBytesSync();
+  List<Component> components = splitAndRead(bytes);
+  print("Sucessfully read ${components.length} sub-components.");
+
+  for (int i = 0; i < components.length; i++) {
+    Component component = components[i];
+    print("Component #${i + 1}:");
+    for (MapEntry<Uri, Source> entry in component.uriToSource.entries) {
+      String importUri = entry.value.importUri.toString();
+      String fileUri = entry.key.toString();
+      if (importUri != fileUri) {
+        print(" - $importUri ($fileUri)");
+      } else {
+        print(" - $fileUri");
+      }
+    }
+  }
+
+  // TODO(jensj): Could we read _some_ (useful) data from a partial component
+  // (e.g. one that stops after the first few libraries)?
+}
+
+List<Component> splitAndRead(Uint8List bytes) {
+  List<Component> components = [];
+
+  // Search for magic component file tag.
+  List<int> magicTagBytes = [
+    (Tag.ComponentFile >> 24) & 0XFF,
+    (Tag.ComponentFile >> 16) & 0XFF,
+    (Tag.ComponentFile >> 8) & 0XFF,
+    (Tag.ComponentFile >> 0) & 0XFF,
+  ];
+  List<int> tagOffsets = [];
+  for (int index = 0; index < bytes.length - 7; index++) {
+    if (bytes[index] == magicTagBytes[0] &&
+        bytes[index + 1] == magicTagBytes[1] &&
+        bytes[index + 2] == magicTagBytes[2] &&
+        bytes[index + 3] == magicTagBytes[3]) {
+      // Try to read binary version too and see if it matches.
+      int version = (bytes[index + 4] << 24) |
+          (bytes[index + 5] << 16) |
+          (bytes[index + 6] << 8) |
+          bytes[index + 7];
+      if (version != Tag.BinaryFormatVersion) {
+        print("Found tag, but version mismatches "
+            "('$version' vs readable version '${Tag.BinaryFormatVersion}'). "
+            "Try again in a different checkout.");
+      } else {
+        tagOffsets.add(index);
+      }
+    }
+  }
+  print("Found ${tagOffsets.length} possible tag offsets.");
+
+  // Add fake file tag after end of bytes to also attempt "last component".
+  tagOffsets.add(bytes.length);
+
+  // Warning: O(n²) algorithm (though, as the tag is assumed to be rather unique
+  // in normal cases it will probably much better in practise
+  // (and n will be low)).
+  int fromIndex = 0;
+  while (fromIndex < tagOffsets.length - 1) {
+    int toIndex = fromIndex + 1;
+    while (toIndex < tagOffsets.length) {
+      // Cut bytes and try to load.
+      int fromOffset = tagOffsets[fromIndex];
+      int toOffset = tagOffsets[toIndex];
+      Uint8List bytesView =
+          new Uint8List.sublistView(bytes, fromOffset, toOffset);
+      try {
+        Component loaded = loadComponentFromBytes(bytesView);
+        components.add(loaded);
+        print("Loaded from tag ${fromIndex} to ${toIndex}.");
+        break;
+      } catch (e) {
+        print("Failed loading from tag ${fromIndex} to ${toIndex}"
+            " (${toOffset - fromOffset} bytes).");
+        toIndex++;
+      }
+    }
+    fromIndex++;
+  }
+
+  return components;
+}
diff --git a/pkg/kernel/bin/dump.dart b/pkg/kernel/bin/dump.dart
index 0c3ab47..0f901a2 100755
--- a/pkg/kernel/bin/dump.dart
+++ b/pkg/kernel/bin/dump.dart
@@ -22,7 +22,7 @@
   exit(1);
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   CommandLineHelper.requireVariableArgumentCount([1, 2], args, usage);
   CommandLineHelper.requireFileExists(args[0]);
   var binary = CommandLineHelper.tryLoadDill(args[0]);
diff --git a/pkg/kernel/bin/size_breakdown.dart b/pkg/kernel/bin/size_breakdown.dart
index af98f8a..51661fe 100755
--- a/pkg/kernel/bin/size_breakdown.dart
+++ b/pkg/kernel/bin/size_breakdown.dart
@@ -19,7 +19,7 @@
   exit(1);
 }
 
-main(args) {
+void main(args) {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   List<int> bytes = new File(args[0]).readAsBytesSync();
@@ -43,6 +43,7 @@
   int constantTableSize = 0;
   Map<Uri, int> librarySizes = {};
 
+  @override
   int readOffset() {
     offsetsSize -= byteOffset;
     int result = super.readOffset();
@@ -50,18 +51,21 @@
     return result;
   }
 
+  @override
   void readStringTable() {
     stringTableSize -= byteOffset;
     super.readStringTable();
     stringTableSize += byteOffset;
   }
 
+  @override
   void readLinkTable(CanonicalName linkRoot) {
     linkTableSize -= byteOffset;
     super.readLinkTable(linkRoot);
     linkTableSize += byteOffset;
   }
 
+  @override
   Map<Uri, Source> readUriToSource({required bool readCoverage}) {
     uriToSourceSize -= byteOffset;
     Map<Uri, Source> result = super.readUriToSource(readCoverage: readCoverage);
@@ -69,12 +73,14 @@
     return result;
   }
 
+  @override
   void readConstantTable() {
     constantTableSize -= byteOffset;
     super.readConstantTable();
     constantTableSize += byteOffset;
   }
 
+  @override
   Library readLibrary(Component component, int endOffset) {
     int size = -byteOffset;
     var result = super.readLibrary(component, endOffset);
diff --git a/pkg/kernel/bin/split.dart b/pkg/kernel/bin/split.dart
index e3c99e8..90f1028 100755
--- a/pkg/kernel/bin/split.dart
+++ b/pkg/kernel/bin/split.dart
@@ -21,7 +21,7 @@
   exit(1);
 }
 
-main(args) async {
+void main(args) async {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   Component binary = CommandLineHelper.tryLoadDill(args[0]);
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index e013be5..bf0cb40 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 69;
+  UInt32 formatVersion = 70;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -547,6 +547,7 @@
   Byte tag = 19;
   FileOffset fileOffset;
   StringReference message;
+  Option<Expression> expression;
 }
 
 type VariableGet extends Expression {
diff --git a/pkg/kernel/doc/semantics/kernel-semantics.tex b/pkg/kernel/doc/semantics/kernel-semantics.tex
deleted file mode 100644
index 44e23c3..0000000
--- a/pkg/kernel/doc/semantics/kernel-semantics.tex
+++ /dev/null
@@ -1,3406 +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.
-
-
-\documentclass[a4paper,oneside,fleqn]{article}
-
-
-\usepackage[utf8]{inputenc}
-\usepackage[fleqn]{amsmath}
-\usepackage{a4wide}
-\usepackage{url}
-\usepackage{cite}
-\usepackage{amssymb}
-\usepackage{stmaryrd}
-\usepackage{alltt}
-\usepackage{xypic}
-\usepackage{appendix}
-\usepackage{color}
-\usepackage{hyperref}
-\usepackage{chngcntr}
-\usepackage{ifthen}
-\usepackage[fleqn]{mathtools}
-\usepackage{geometry}
-\usepackage{mdframed}
-\usepackage[textsize=tiny]{todonotes}
-\usepackage{mathrsfs}
-
-\definecolor{shade}{gray}{0.75}
-\newcommand{\shadethis}[1]{\colorbox{shade}%
-    {\protect\rule[-0.95mm]{0mm}{3.95mm}\hspace{0.3mm}#1\hspace{0.3mm}}}
-
-
-% Shorthard for ``Dart Kernel'' in small caps.
-\newcommand{\kernel}{\textsc{Dart Kernel}}
-
-% Shorthand for ``Dart'' in small caps.
-\newcommand{\dart}{\textsc{Dart}}
-
-% A bit nicer symbol: ∅
-\renewcommand{\emptyset}{\varnothing}
-
-% Some known sets.
-\newcommand{\NN}{\mathbb{N}}    % Natural numbers.
-
-
-% Some auxiliary operators.
-\DeclareMathOperator{\dom}{Dom} % Domain of a function.
-
-
-% Meta-functions to be used in math mode.
-\DeclareMathOperator{\extend}{extend}
-\DeclareMathOperator{\update}{update}
-\DeclareMathOperator{\extendMain}{extendMain}
-\DeclareMathOperator{\concat}{concat}
-\DeclareMathOperator{\getter}{implicitGetter}
-\DeclareMathOperator{\setter}{implicitSetter}
-\DeclareMathOperator{\lookup}{lookup}
-\DeclareMathOperator{\methodLookup}{methodLookup}
-\DeclareMathOperator{\contains}{contains}
-
-% Meta-functions for operations on list
-\DeclareMathOperator{\head}{head}
-\DeclareMathOperator{\tail}{tail}
-\DeclareMathOperator{\append}{append}
-
-% Keywords and syntactic constructs of Dart Kernel to be used in math mode.
-\newcommand{\synt}[1]{\ensuremath{\text{\textbf{\texttt{#1}}}}}
-\DeclareMathOperator{\dowhile}{\synt{do~while}}
-\DeclareMathOperator{\while}{\synt{while}}
-\DeclareMathOperator{\forin}{\synt{for~in}}
-\DeclareMathOperator{\for}{\synt{for}}
-\DeclareMathOperator{\throw}{\synt{throw}}
-\DeclareMathOperator{\rethrow}{\synt{rethrow}}
-\DeclareMathOperator{\new}{\synt{new}}
-\DeclareMathOperator{\nnull}{\synt{null}}
-\DeclareMathOperator{\bbreak}{\synt{break}}
-\DeclareMathOperator{\switch}{\synt{switch}}
-\DeclareMathOperator{\continue}{\synt{continue}}
-\DeclareMathOperator{\return}{\synt{return}}
-\DeclareMathOperator{\case}{\synt{case}}
-\DeclareMathOperator{\default}{\synt{default}}
-\DeclareMathOperator{\try}{\synt{try}}
-\DeclareMathOperator{\catch}{\synt{catch}}
-\DeclareMathOperator{\finally}{\synt{finally}}
-
-% Functions for projection on components of class.
-\DeclareMathOperator{\superclass}{\synt{superclass}}
-\DeclareMathOperator{\members}{\synt{members}}
-\DeclareMathOperator{\lookupMember}{\synt{lookupMember}}
-\DeclareMathOperator{\class}{\synt{class}}
-\DeclareMathOperator{\getfield}{\synt{field}}
-
-
-% Oftenly used syntactic meta-literals.
-\newcommand{\true}{\synt{true}}
-\newcommand{\false}{\synt{false}}
-\newcommand{\this}{\synt{this}}
-\newcommand{\Rethrow}{\synt{rethrow}}
-\newcommand{\Throw}[1]{\synt{throw}\,#1}
-
-% Syntactic Domains
-\newcommand{\dexpr}{\mathbf{Expr}}
-\newcommand{\dstmt}{\mathbf{Stmt}}
-\newcommand{\dhandler}{\mathbf{Handler}}
-
-\newcommand{\decont}{\mathbf{ExprCont}}
-\newcommand{\dscont}{\mathbf{StmtCont}}
-\newcommand{\dacont}{\mathbf{ApplCont}}
-\newcommand{\dbcont}{\mathbf{BreakCont}}
-\newcommand{\dswitchcont}{\mathbf{SwitchCont}}
-\newcommand{\dncont}{\mathbf{EventCont}}
-
-\newcommand{\dlbl}{\mathbf{Label}}
-\newcommand{\dclbl}{\mathbf{SwitchLabel}}
-
-\newcommand{\denv}{\mathbf{Env}}
-\newcommand{\dmenv}{\mathbf{MainEnv}}
-\newcommand{\dfield}{\mathbf{Field}}
-
-\newcommand{\dval}{\mathbf{Value}}
-\newcommand{\dlit}{\mathbf{Literal}}
-\newcommand{\dvar}{\mathbf{Variable}}
-\newcommand{\dvardecl}{\mathbf{VariableDeclaration}}
-\newcommand{\dstring}{\mathbf{StringValue}}
-\newcommand{\dfunval}{\mathbf{FunctionValue}}
-\newcommand{\dlitval}{\mathbf{LiteralValue}}
-\newcommand{\dobjval}{\mathbf{ObjectValue}}
-\newcommand{\dvector}{\mathbf{Vector}}
-\newcommand{\dmember}{\mathbf{Member}}
-\newcommand{\dident}{\mathbf{Identifier}}
-\newcommand{\idmeta}{\ensuremath{\mathit{X}}}
-\newcommand{\dtype}{\mathbf{Type}}
-
-\newcommand{\typemeta}{\ensuremath{\mathit{t}}}
-\newcommand{\dclass}{\mathbf{Class}}
-\newcommand{\dformals}{\mathbf{Formals}}
-
-\newcommand{\ddom}{\mathbf{Dom}}    % Unspecified domain to use in examples.
-
-% Known domains for Dart types.
-\newcommand{\dsemint}{\mathbf{int}}
-\newcommand{\dsembool}{\mathbf{bool}}
-\newcommand{\dsemdouble}{\mathbf{double}}
-\newcommand{\dsemlist}{\mathbf{List}}
-\newcommand{\dsemmap}{\mathbf{Map}}
-\newcommand{\dsemstring}{\mathbf{String}}
-\newcommand{\dsemsymbol}{\mathbf{Symbol}}
-
-
-%%
-% Commands to typeset transitions of CESK machine.
-%
-% \cesktrans{FROM}{TO}
-% \cesktransalign{FROM}{TO}
-% \cesktranssplit{FROM}{TO}
-%
-% Typesets a transition from configuration FROM to configuration TO. Like this:
-%
-%     FROM => TO
-%
-% "Align" variant has an embedded "&" inside, immediately before the transition
-% sign "=>".  It means that the command should be put into an environment that
-% aligns its multi-line content using "&" signs, for example "align".
-%
-% "Split" variant has an embedded "\\" inside, immediately after the transition
-% sign "=>".  It is useful for putting long equations in an environment such as
-% "split".
-%%
-\newcommand{\cesktrans}[2]{\ensuremath{{#1} \Rightarrow {#2}}}
-\newcommand{\cesktransalign}[2]{\ensuremath{{#1} &\Rightarrow {#2}}}
-\newcommand{\cesktranssplit}[2]{\ensuremath{{#1} \Rightarrow\\ {#2}}}
-
-
-%%
-% Commands to typeset transitions of CESK machine with clarifying clause.
-%
-% \cesktranswhere{FROM}{TO}{WHERE}
-% \cesktranswherealign{FROM}{TO}{WHERE}
-% \cesktranswherealign*{FROM}{TO}{WHERE}
-% \cesktranswheresplit{FROM}{TO}{WHERE}
-% \cesktranswheresplit*{FROM}{TO}{WHERE}
-%
-% Typesets a transition from configuration FROM to configuration TO.  These
-% commands have a clarifying clause that explains the meaning of some new
-% symbols introduced by the transition.
-%
-% The "align" versions have an embedded "&" inside, immideately before the
-% transition sign "=>".  It means that the command sould be put into an
-% environment that aligns its multi-line content using "&" signs, for example
-% "align".  The non-starred "align" variant puts the additional clause to the
-% same line as the transition itself, separating it with a comma.  The starred
-% version puts the additional clause on the next line.
-%
-% Here is how non-starred version looks like:
-%
-%     FROM => TO, WHERE
-%
-% Here is how starred version looks like:
-%
-%     FROM => TO,
-%          WHERE
-%
-% "Split" variants has embedded "\\" inside.  Non-starred "split" variant have one
-% after the comma.  Starred "split" variant have one additional "\\" after
-% the transition sign "=>".  It is useful for putting long equations in an
-% environment such as "split", "gather", or "multline".  Note that if an
-% environment generates a new equation number for each line, it can be disabled
-% by putting "\notag" inside the arguments where the number is undesirable.
-%%
-\newcommand{\cesktranswhere}[3]{\ensuremath{{#1} \Rightarrow {#2}, {#3}}}
-\newcommand{\cesktranswherealignNoStar}[3]{\ensuremath{{#1} &\Rightarrow {#2}, {#3}}}
-\newcommand{\cesktranswherealignStar}[3]{\ensuremath{{#1} &\Rightarrow \begin{aligned}[t]&{#2},\\&{#3}\end{aligned}}}
-\makeatletter
-\newcommand{\cesktranswherealign}{%
-    \@ifstar
-        \cesktranswherealignStar%
-        \cesktranswherealignNoStar%
-}
-\makeatother
-\newcommand{\cesktranswheresplitNoStar}[3]{\ensuremath{{#1} \Rightarrow {#2},\\{#3}}}
-\newcommand{\cesktranswheresplitStar}[3]{\ensuremath{{#1} \Rightarrow\\ {#2},\\{#3}}}
-\makeatletter
-\newcommand{\cesktranswheresplit}{%
-    \@ifstar
-        \cesktranswheresplitStar%
-        \cesktranswheresplitNoStar%
-}
-\makeatother
-
-
-\setlength{\itemsep}{0pt}
-\geometry{%
-    top=2cm,%
-    right=2cm,%
-    bottom=2cm,%
-    left=3cm,%
-}
-
-
-\newmdenv[linecolor=black,leftline=false,rightline=false]{eqfigure}
-
-
-\begin{document}
-\title{Operational Semantics of \kernel{}}
-\author{\kernel{} Team \\ \href{mailto:dart-kernel@google.com}{dart-kernel@google.com}}
-
-\maketitle
-
-\begin{abstract}
-
-The \kernel{} is a simplified representation of the \dart{} programming language.
-Similar to the \textsc{Core} of the Glasgow Haskell Compiler, \kernel{} is more amenable to formal specification and analysis than the \dart{} surface language and is the primary intermediate representation used in the \dart{} compilation toolchain.
-This paper documents the syntax and operational semantics of \kernel{} to enable framework authors for \dart{} to write safe transformations on \kernel{}, to allow the creation of a reference interpreter for testing the backend implementations of \dart{} and to facilitate academic analysis of the safety properties of \dart{}.
-
-\end{abstract}
-
-\setcounter{tocdepth}{2}
-\tableofcontents
-
-\section{Foreword}
-
-\subsection{Audience}
-This paper is intended for compiler and framework authors and academics.
-The reader should have a proficient understanding of basic concepts in programming language design and implementation, such as abstract syntax, intermediate representations and operational semantics.
-Still, this paper aims to be as accessible as possible, so most concepts that are not familiar to an advanced \dart{} programmer will be explained in sufficient detail to understand the formalizations here.
-
-\subsection{Formalization Style}
-
-\subsubsection{Abstract Syntax}
-
-The abstract syntax of \kernel{} is slightly unusual in that it does not have a tree structure or relate to any concrete, textual syntax.
-It is instead a description of the data structures used by the \dart{} compliation toolchain, which are represented as directed acyclic graph.
-The semantics depends heavily on the use of ``pointer'' equality between nodes in the syntax graph, which is more fine-grained than structural equality.
-For example, a single \kernel{} program may have several syntax nodes that each define and initialize a variable with the same name and value, even in the same scope.
-A later assignment to the variable will disambiguate between these declarations by referring to the specific variable declaration node by pointer identity.
-Presenting the abstract syntax in this manner not only models the \kernel{} implementation more accurately, but allows us to ignore complications with variable renaming, shadowing and $\alpha$-conversion.
-
-\subsubsection{Small-step Operational Semantics}
-
-The operational semantics of \kernel{} are given in ``small-step'' style, where each rule of the semantics corresponds to a simple transition from one state of an abstract machine to another.
-The rules are not nested or recursive, and only specify one possible outgoing transition from any state.
-Some states of the machine have no outgoing transitions specified, corresponding to undefined operations like out-of-bounds vector access.
-
-\subsubsection{CESK Machine}
-
-The abstract machine is presented in the style of a CESK machine. \todo{dmitryas: add citation for CESK machine}
-The state space of the CESK machine is grouped into several configurations, most of which carry an environment, which maps variable declarations in the present scope to their current assignments, a store, which models the mutable object store in which all objects in a \dart{} program live, and a continuation, which captures the work to be done after the current operation is complete, roughly similar to a chain of call frames above the current function.
-In this way states of the CESK machine mimic states of the \dart{} virtual machine at a very abstract level.
-
-
-\section{Definitions}
-\label{sec:definitions}
-
-This section contains definitions of syntactic and semantic domains, helper functions, and notations used in the rest of the document.
-
-
-\subsection{Conventions}
-\label{subsec:conventions}
-
-\begin{itemize}
-    \item The symbols ``:'' (is-of-type) and ``$\in$'' (element-of) are used interchangeably.
-    \item The names of variables are italicized.
-    \item The names of variables within a syntactic domain start with an upper case letter.
-    \item The names of domains (meta-types defined in this paper) are written in bold (e.g. ``$\dexpr$'').
-    \item The names of the different kinds of continuations are written in normal text (e.g. VarSetEK).
-    \item The names of meta-functions start with lower case letter (e.g. $\extend$).
-    \item ``$\mlist{\ddom}$'' denotes the domain of meta-lists of elements from domain ``$\ddom$''.
-        Note that the word ``List'' here is not in bold, so that it isn't confused with the domain $\dsemlist$ of \dart{} objects.
-        \todo{sjindel: Why is this a domain?}
-\end{itemize}
-\todo{dmitryas: Explain notation for Kernel syntactic constructs like "on T catch (e, s)".}
-
-\subsection{Notations}
-\label{subsec:notations}
-
-\begin{align*}
-    \dom(f) &\text{ --- the domain of function \(f\)}.\\
-    \pi_i(x) &\text{ --- the $i^{th}$ component of $x \in \ddom_1 \times \dots \times \ddom_n$}.
-\end{align*}
-
-\subsubsection{Meta list}
-\label{subsubsec:meta-list}
-
-Throughout the document we use meta lists which represent lists of elements from some domain.
-We define a list $l \in \mlist{\ddom}$ and are constructed as follows:
-\begin{align*}
-    [] &\text{ --- empty list}.\\
-    x :: \textit{list} &\text{ --- a meta-list that is constructed by adding element $x \in \ddom$ to the head of the meta-list $list$}.
-\end{align*}
-
-\todo{Define behaviour for operations on empty list.}
-In addition of the usual $\head$ and $\tail$ operations on a list, we add $\append$ operator.
-\begin{align*}
-    &\head \in \mlist{\ddom} \rightarrow \ddom\\
-    &\head(x :: \textit{list}) = x \text{ where $x :: \text{list} \in \mlist{\ddom}$}\\
-    &\tail \in \mlist{\ddom} \rightarrow \mlist{\ddom}\\
-    &\tail(x :: \textit{list}) = list \text{ where $x :: \text{list} \in \mlist{\ddom}$}\\
-    &\append \in \mlist{\ddom} \times \ddom \rightarrow \mlist{\ddom}\\
-    &\append(\textit{list}, x) = \textit{list'} \text{ where $x \in \ddom$ is the last element of $\textit{list}' \in \mlist{\ddom}$}\\
-\end{align*}
-
-
-\subsection{Domains}
-\label{subsec:domains}
-
-% Variables
-\newcommand{\dlocation}{\mathbf{Location}}
-\newcommand{\loc}{\ensuremath{\alpha}}
-
-\newcommand{\expr}{\ensuremath{\mathit{E}}}
-\newcommand{\expri}[1]{\expr_\ensuremath{\mathit{#1}}}
-\newcommand{\exprs}{\expr\ensuremath{\mathit{s}}}
-\newcommand{\membermeta}{\ensuremath{\mathit{M}}}
-
-\newcommand{\stmt}{\ensuremath{\mathit{S}}}
-\newcommand{\stmti}[1]{\stmt_\ensuremath{#1}}
-\newcommand{\stmts}{\stmt\ensuremath{\mathit{s}}}
-
-\newcommand{\handler}{\ensuremath{\mathit{H}}}
-\newcommand{\strace}{\ensuremath{\textit{st}}}
-\newcommand{\cstrace}{\ensuremath{\textit{cst}}}
-\newcommand{\cex}{\ensuremath{\textit{cex}}}
-
-\newcommand{\scase}{\mathit{SC}}
-\newcommand{\scases}{\scase\ensuremath{\mathit{s}}}
-\newcommand{\ccase}{\mathit{CC}}
-\newcommand{\ccases}{\scase\ensuremath{\mathit{s}}}
-
-\newcommand{\vals}{\ensuremath{vs}}
-\newcommand{\vvec}{\ensuremath{\vec{v}}}
-
-\newcommand{\env}{\ensuremath{\rho}}
-\newcommand{\mainenv}{\env_{M}}
-\newcommand{\field}{\phi}
-
-\newcommand{\lit}{\ensuremath{\mathscr{L}}}
-\newcommand{\classvar}{\ensuremath{c}}
-
-\newcommand{\lbl}{\ensuremath{\textit{lbl}}}
-\newcommand{\lbls}{\ensuremath{\textit{lbls}}}
-\newcommand{\clbl}{\ensuremath{\textit{clbl}}}
-\newcommand{\clbls}{\ensuremath{\textit{clbls}}}
-
-\newcommand{\econt}{\cont_\ensuremath{E}}
-\newcommand{\acont}{\cont_\ensuremath{A}}
-\newcommand{\scont}{\cont_\ensuremath{S}}
-\newcommand{\bcont}{\cont_\ensuremath{B}}
-\newcommand{\switchcont}{\cont_{\ensuremath{\textit{switch}}}}
-
-\newcommand{\funval}[3]{\mathrm{FunctionValue}({#1},\,{#2},\,{#3})}
-\newcommand{\objval}{\mathrm{ObjectValue}(class, fields)}
-\newcommand{\obj}{\ensuremath{o}}
-
-\newcommand{\formal}{\ensuremath{A}}
-\newcommand{\formali}[1]{\ensuremath{A_{#1}}}
-\newcommand{\formals}{\ensuremath{As}}
-
-\newcommand{\ncont}{\cont_\ensuremath{N}}
-\newcommand{\eventloop}{\ensuremath{G}}
-
-% Constructor Initializers
-\newcommand{\Initializer}[1]{\synt{Initializer}(#1)}
-\newcommand{\FieldInitializer}[1]{\synt{FieldInitializer}(\field, #1)}
-\newcommand{\LocalInitializer}[1]{\synt{LocalInitializer}(\varmeta, #1)}
-\newcommand{\SuperInitializer}[2]{\synt{SuperInitializer}(#1,\,#2)}
-\newcommand{\RedirectingInitializer}[2]{\synt{RedirectingInitializer}(#1,\,#2)}
-
-\[
-  \begin{array}{ccll}
-    \expr, \expri{i}
-    & : & \dexpr & \text{syntactic domain of expressions}\\
-    \exprs
-    & : & \mlist{\dexpr}\\
-
-    \stmt, \stmti{i}
-    & : & \dstmt & \text{syntactic domain of statements}\\
-    \stmts
-    & : & \mlist{\dstmt}  & \text{}\\
-
-    \econt
-    & : & \decont & \text{semantic domain of expression continuations}\\
-    \acont
-    & : & \dacont & \text{semantic domain of application continuations}\\
-    \scont
-    & : & \dscont & \text{semantic domain of statement continuations}\\
-    \bcont
-    & : & \dbcont & \text{semantic domain of break continuations}\\
-    \switchcont
-    & : & \dswitchcont & \text{semantic domain of switch continuations}\\
-
-    \lbl & : & \dlbl & \text{semantic domain of labels}\\
-    \lbls & : & \mlist{\dlbl} \\
-    \clbl & : & \dclbl & \text{semantic domain of switch labels}\\
-    \clbls & : & \mlist{\dclbl} \\
-
-    \handler
-    & : & \dhandler & \text{syntactic domain of exception handlers} \\
-    \strace
-    & : & \mlist{\dexpr} & \text{semantic domain of stack traces}\\
-    \cex
-    & : &  \emptyset + \dval & \text{semantic domain of current exception values}\\
-    \cstrace
-    & : & \emptyset + \mlist{\dexpr} & \text{semantic domain of current exception stack traces}\\
-    \varmeta
-    & : & \dvar & \text{semantic domain of variables}\\
-    \loc
-    & : & \dlocation & \text{semantic domain of store locations}\\
-    \val
-    & : & \dval & \text{semantic domain of values}\\
-    \vals & : & \mlist{\dval} \\
-    \vvec & : & \dvector = \mlist{\dval}& \text{semantic domain of vectors}\\
-    \env
-    & : & \denv & \text{semantic domain of environments}\\
-    \mainenv
-    & : & \dmenv & \text{semantic domain of main environments}\\
-    \obj
-    & : & \dobjval & \text{semantic domain of object values}\\
-    \lit
-    & : & \dlit & \text{syntactic domain of literals}\\
-    \classvar
-    & : & \dclass & \text{semantic domain of class definitions}\\
-    \membermeta
-    & : & \dmember & \text{syntactic domain of class members}\\
-    \idmeta
-    & : & \dident & \text{syntactic domain of identifiers}\\
-    \typemeta & : & \dtype & \text{semantic domain of Dart types}\\
-    \formal, \formali{i} & : & \dvardecl & \text{syntactic domain of variable declarations} \\
-    \formals & : & \dformals = \mlist{\dvardecl} &\text{syntactic domain of formal parameters}\\
-    \ncont & : & \dncont &\text{semantic domain of event loop continuations}\\
-    \eventloop & : & \mlist{\dncont} &\text{semantic domain of event loops}\\
-  \end{array}
-\]
-
-% Metavariables
-\newcommand{\expressionmeta}{\ensuremath{\mathit{E}}}
-\newcommand{\expressionsmeta}{\expressionmeta{s}}
-\newcommand{\variablemeta}{\ensuremath{\mathit{x}}}
-\newcommand{\boolmeta}{\ensuremath{\mathit{B}}}
-\newcommand{\integermeta}{\ensuremath{\mathit{I}}}
-\newcommand{\doublemeta}{\ensuremath{\mathit{D}}}
-\newcommand{\stringmeta}{\ensuremath{\mathit{S}}}
-% Metavariables for statements
-\newcommand{\statementmeta}{\ensuremath{\mathit{\stmt}}}
-
-\subsection{Store}
-\label{subsec:store-definition}
-
-The store $s$ is a finite map from location $\loc$ to a value $\val$.
-The store is a mutable map and should not be confused with a function.
-A global store is assumed and locations reachable in the current scope are defined by the current environment function
-\[
-    s : \dlocation \rightarrow \dval.
-\]
-
-
-\subsubsection{Locations}
-
-The object store is indexed by elements $\loc$ from the domain $\dlocation$.
-This domain is countably infinite, and we assume that we can generate fresh values from the domain within the abstract machine.
-It could be represented by natural numbers, for example, but arithmetic on locations is not meaningful.
-
-
-\subsubsection{Dereferencing}
-\label{subsubsection:dereferecing}
-
-\newcommand{\deref}[1]{!#1}
-The function ``$\deref{}$'' is used to access the value stored in the store at the given location.
-The location is stored in the environment, or in the list of field locations for object values.
-``$\deref{}$'' has an implicit argument which is the store of CESK machine.
-\begin{align*}
-    &\deref{} \in \dlocation \rightarrow \dval,\\
-    &\deref{\loc} =  \val, \text{ with $\val$ the value in store at location } \loc.
-\end{align*}
-
-
-\subsubsection{Update}
-\label{subsubsec:store-update}
-
-%\newcommand{\update}[2]{{#1} := {#2}}
-The operator ``$\update(\loc,\, \val)$'' updates the store at location $\loc \in \dlocation$ with value $\val \in \dval$.
-It has an implicit operand which is the store of the CESK machine.
-Upon execution the operator returns a value from domain $\dval$, s.\,t. $\update(\loc,\,\val) = \val$, where $\val$ is the value in the store at location $\loc$.
-
-
-\subsection{Environment}
-\label{subsec:env-definition}
-
-The environment is a function that maps a variable to a location in the store.
-\[
-    \env \in \denv = \dvardecl \rightarrow \dlocation.
-\]
-
-When an environment is needed to further execute the program, it is saved by the caller in the corresponding continuation.
-
-
-\subsubsection{Extend}
-\label{subsubsec:extend-env}
-
-Operator ``$\extend$'' creates a new environment by extending the provided environment with new bindings for the variable declarations to fresh locations for each of the provided values.
-This operator has an implicit operand which is the store of the CESK machine.
-\begin{align*}
-    &\extend \in \denv \times \mlist{\dvardecl} \times \mlist{\dval} \rightarrow  \denv,\\
-    &\ext{\env}{(\varmeta_{1}, \dots, \varmeta_{n})}{(\val_{1}, \dots, \val_{n})} = \env',
-\end{align*}
-
-\noindent where
-\begin{align*}
-    & n \in \NN,\\
-    & (\varmeta_{1}, \dots, \varmeta_{n}) \in \mlist{\dvardecl},\\
-    & (\val_{1}, \dots, \val_{n}) \in \mlist{\dval},\\
-    & (\alpha_{1}, \dots, \alpha_{n}) \in \mlist{\dlocation} \text{ --- list of fresh locations in the store},\\
-    & !\env'(\varmeta) =\begin{cases}
-        !\loc_i = \val_i, & \text{if }\varmeta = \varmeta_i,\\
-        !\env(\varmeta), &\text{otherwise}.
-    \end{cases}
-\end{align*}
-
-For simpler notation, we allow ``$\extend$'' to be called on single values: $\ext{\env}{\varmeta}{\val}$, which we consider equivalent to calling it on singleton lists: $\ext{\env}{\varmeta :: []}{\val :: []}$.
-
-
-\subsubsection{Variable Lookup}
-\label{subsubsec:variable-lookup}
-
-A variable lookup consists of looking up the location of a variable from the environment with $\loc = \env(\varmeta)$ and reading the stored value $v$ with $\deref{\loc} = \deref{\env(\varmeta)}$ from the store.
-
-
-\subsection{Main Environment}
-\label{subsec:main-env}
-
-\kernel{} supports static and library fields, which are initialized when first accessed and mutations of values stored in these fields are visible in all subsequent execution of statements or evaluation of expressions.
-To support this feature, we introduce a main environment, denoted as $\mainenv$.
-
-\newcommand{\dmainenv}{\textbf{MainEnvironment}}
-
-\[\mainenv \in \dmainenv = \dmember \rightarrow \dlocation \]
-
-We define the following functions for manipulating $\mainenv$:
-
-\subsubsection{Contains}
-We define the function $\contains$ as follows:
-\begin{align*}
-    \contains &\in \dmainenv \times \dmember \rightarrow \dsembool\\
-    \contains(\mainenv, x) &=\begin{cases}
-        \true &\text{ if }x \in \dom(\mainenv),\\
-        \false &\text{ otherwise}
-    \end{cases}
-\end{align*}
-where $\dom(\mainenv)$ is the domain of the environment $\mainenv$, i.e. the set of members for which $\mainenv$ is defined.
-
-We will use `\contains` as a proposition in the transition steps below, since the value produced is not used alongside the values from the semantic domains.
-
-\subsubsection{Extend}
-We define the function extend as follows:
-\begin{align*}
-    &\extend \in \dmainenv \times \dmember \times \dval \rightarrow \denv\\
-    &\extend(\mainenv, x, \val) = \mainenv',\\
-    &\text{where }\\
-    &\forall y \in \dom(\mainenv) \cup \{x\},\,\mainenv'(y) =\begin{cases}
-        \loc &\text{ if } y = x,\\
-        \mainenv(y) &\text{ otherwise}\\
-    \end{cases}\\
-    &\text{and $\loc$ is a fresh location that stores the value $\val$.}
-\end{align*}
-
-This environment is visible during the execution of a \kernel{} program, therefore it should be in the left and right-hand side of all the transition presented in the paper.
-In order to simplify the transitions, we assume the main environment is implicit.
-
-For a rule $C_1 \Rightarrow C_2$ that defines the transition from configuration $C_1$ to configuration $C_2$, we explicitly mention when the main environment in the resulting configuration $C_2$ is not the same as the one in the previous configuration $C_1$.
-
-\subsubsection{Static and Library Field Lookup}
-\label{subsubsec:static-field-lookup}
-
-A static and library field lookup for field $\field$ consists of looking up the location of the static field from the main environment with $\loc = \mainenv(\field)$ and reading the stored value $v$ with $\deref{\loc} = \deref{\mainenv(\field)}$ from the store.
-
-
-\subsection{Values}
-\label{sec:values}
-
-Values in \kernel{} fall into two categories: $\dvector$ values and $\dobjval$ values.
-Values are irreducible terms, i.e, the result of the evaluation of expressions.
-Only object values may be in the image of the store.
-
-\subsubsection{Vector Values}
-\label{subsubsec:vector-values}
-
-\kernel{} has limited support for arrays without bounds checking via $\dvector$s.
-The step function for the CESK machine is not defined for operations that access an element vector outside its bounds.
-$\dvector$s cannot be introduced by any construct present in \dart{} itself, but rather are introduced only by \kernel{} transformations which can ensure they are only used in a safe manner.
-
-\subsubsection{Literals}
-
-Some objects from primitive types contain a literal value and a specific class corresponding to the literal's type.
-The different types of literal values are:
-\[\dlit = \dsemint + \dsembool + \dsemdouble + \dsemlist + \dsemmap + \dsemstring + \dsemsymbol + \dtype.\]
-
-Literal values are special values that store the specific payload and an associated class.
-Each of the specific literal values contains predefined operators and methods, whose semantics are elided here.
-
-\subsubsection{Class}
-\label{subsubsec:class}
-
-A $\dclass$ encodes a class definition in \kernel{}.
-
-\begin{align*}
-\dclass &= (\emptyset + \dclass) \times \mlist{\dclass} \times (\dident \mapsto \dmember)\\
-\dmember &= \mathbf{Getter} + \mathbf{Setter} + \mathbf{Method} \\
-\mathbf{Getter} &= \NN + \dstmt \\
-\mathbf{Setter} &= \NN + \dformals \times \dstmt \\
-\mathbf{Method} &= \dformals \times \dstmt
-\end{align*}
-
-A class definition contains a reference to the superclass (none only in the case of the ``Object'' class), a list of interface classes and a finite map from identifiers to members which provides dynamic dispatch.
-The natural-indexed getters and setters correspond to the case where a field should be modified directly, and the number provides the index into an instance's list of locations.
-
-Although constructor definitions are included in the class definition, they are not presented here because the same syntax nodes are directly referenced by the expression form for constructor invocation.
-
-For accessing the superclass component of elements in the domain $\dclass$ we define:
-\begin{align*}
-\superclass &\in \dclass \rightarrow \dclass,\\
-\superclass(c_1) &= \pi_1(c_1) = c_2, \text{ where $c_2 \in \dclass$ is the first component of $c_1 \in \dclass$}
-\end{align*}
-
-For accessing the members component of elements in the domain $\dclass$, we define:
-\begin{align*}
-\members &\in \dclass \rightarrow (\dident \mapsto \dmember),\\
-\members(c) &= \pi_3(c), \text{where $c \in \dclass$}
-\end{align*}
-
-For looking up a member, given its identifier $\idmeta \in \dident$, we define:
-\begin{align*}
-\lookupMember &\in \dclass \times \dident \rightarrow \dmember,\\
-\lookupMember(c, \, \idmeta) &= \members(c)(\idmeta), \text{ where $c \in \dclass, \idmeta \in \dident$}
-\end{align*}
-
-\subsubsection{Object Values}
-\label{subsec:object-values}
-
-Object values are composed of a reference to a class definition, which is shared across all instances of that object, and a list of locations which identify the values of the fields for a specific instance.
-\[
-    \dobjval = \dclass \times \mlist{\dlocation}
-\]
-
-We define the following function for accessing the class component of an element in $\dobjval$:
-\begin{align*}
-\class &\in \dobjval \rightarrow \dclass,\\
-\class(\val) &= \pi_1(\val) = c, \text{ where $c \in \dclass$ is the first component of $\val \in \dobjval$}
-\end{align*}
-
-
-We define the following function for accessing the location of a field at position $i \in \NN$ in $\dobjval$:
-\begin{align*}
-\getfield &\in \dobjval \times \NN \rightarrow \dlocation,\\
-\getfield(\val, i) &= \pi_2(\val)[i] = \loc, \text{ where $\pi_2(\val) \in \mlist{\dlocation}$ and $\pi_2(\val)[i]$ is the location at position $i \in \NN$}
-\end{align*}
-
-\subsubsection{Function Values}
-\label{subsec:function-values}
-Function values capture the body, formals and the environment in which a function was created.
-To support recursive functions, we add a location component to the function value and store the environment in it.
-This allows us to modify the environment and add a binding to a location containing the function value for local functions.
-\[
-    \dfunval : \dformals \times \dstmt \times \denv
-\]
-
-
-\section{\kernel{} Syntax}
-\label{sec:definitions}
-
-
-\subsection{Expressions}
-\label{sec:expr-syntax}
-
-
-% Syntax
-\newcommand{\VariableGet}[1]{#1}
-\newcommand{\VariableSet}[2]{#1=#2}
-
-\todo{kmillikin: Names should not ignore the library.}
-\newcommand{\PropertyGet}[2]{#1.#2}
-\newcommand{\PropertySet}[3]{#1.#2=#3}
-
-\newcommand{\DirectPropertyGet}[2]{#1.\{#2\}}
-\newcommand{\DirectPropertySet}[3]{#1.\{#2\}=#3}
-
-\newcommand{\SuperPropertyGet}[1]{\synt{super}.#1}
-\newcommand{\SuperPropertySet}[2]{\synt{super}.#1=#2}
-
-\newcommand{\StaticGet}[1]{\{#1\}}
-\newcommand{\StaticSet}[2]{\{#1\}=#2}
-
-%% MethodInvocation
-\newcommand{\InstanceMethodInvocation}[3]{#1.#2(#3)}
-%% DirectMethodInvocation
-\newcommand{\DInstanceMethodInvocation}[3]{#1.\{#2\}(#3)}
-%% SuperMethodInvocation
-\newcommand{\SuperMethodInvocation}[2]{\synt{super}.#1(#2)}
-%% StaticInvocation
-\newcommand{\StaticInvocation}[2]{#1(#2)}
-%% ConstructorInvocation
-\newcommand{\New}[2]{\new\, #1\,(#2)}
-
-\newcommand{\Not}[1]{\synt{!}#1}
-\newcommand{\AndExpression}[2]{#1\,\synt{\&\&}\,#2}
-\newcommand{\OrExpression}[2]{#1\,\synt{||}\,#2}
-\newcommand{\ConditionalExpression}[3]{#1\,\synt{?}\,#2\,\synt{:}\,#3}
-
-%% StringConcatenation
-\newcommand{\StringConcatenation}[2]{#1\,\dots\,#2}
-
-\newcommand{\IsExpression}[2]{#1\,\synt{is}\,#2}
-\newcommand{\AsExpression}[2]{#1\,\synt{as}\,#2}
-
-%% SymbolLiteral
-%% TypeLiteral
-
-
-%% ListLiteral
-%% MapLiteral
-
-\newcommand{\AwaitExpression}[1]{\synt{await\,#1}}
-
-%% FunctionExpression
-
-\newcommand{\StringLiteral}[1]{#1}
-\newcommand{\IntLiteral}[1]{#1}
-\newcommand{\DoubleLiteral}[1]{#1}
-\newcommand{\BoolLiteral}[1]{#1}
-\newcommand{\NullLiteral}{\nnull}
-\newcommand{\Let}[3]{\synt{let}\,#1\synt{=}#2\,\synt{in}\,#3}
-
-%% LoadLibrary
-%% CheckLibraryIsLoaded
-%% VectorCreation
-%% VectorGet
-%% VectorSet
-%% VectorCopy
-%% ClosureCreation
-%% TypeInstantiation
-
-\[
-\begin{array}{rl}
-  \expressionmeta \in \dexpr ::=
-  & \VariableGet{\variablemeta} \\
-  & \VariableSet{\variablemeta}{\expressionmeta} \\
-  & \PropertyGet{\expressionmeta}{\idmeta} \\
-  & \PropertySet{\expressionmeta_0}{\idmeta}{\expressionmeta_1} \\
-  & \DirectPropertyGet{\expressionmeta}{\membermeta} \\
-  & \DirectPropertySet{\expressionmeta_0}{\membermeta}{\expressionmeta_1} \\
-  & \SuperPropertyGet{\idmeta} \\
-  & \SuperPropertySet{\idmeta}{\expressionmeta} \\
-  & \StaticGet{\membermeta} \\
-  & \StaticSet{\membermeta}{\expressionmeta} \\
-  & \Not{\expressionmeta} \\
-  & \AndExpression{\expressionmeta_0}{\expressionmeta_1} \\
-  & \OrExpression{\expressionmeta_0}{\expressionmeta_1} \\
-  & \ConditionalExpression{\expressionmeta_0}{\expressionmeta_1}{\expressionmeta_2} \\
-  & \New{\synt{Q}}{\expressionmeta*} \\
-  & \IsExpression{\expressionmeta}{\typemeta} \\
-  & \AsExpression{\expressionmeta}{\typemeta} \\
-  & \this \\
-  & \Rethrow \\
-  & \Throw{\expressionmeta} \\
-  & \AwaitExpression{\expressionmeta} \\
-  & \lit \\
-  & \NullLiteral \\
-  & \Let{\variablemeta}{\expressionmeta_0}{\expressionmeta_1} \\
-\end{array}
-\]
-
-
-\subsection{Statements}
-\label{subsec:stmt-syntax}
-
-% InvalidStatement
-\newcommand{\ExpressionStatement}[1]{\{\, #1\, \}}
-\newcommand{\Block}[1]{\{\, #1\, \}}
-\newcommand{\EmptyStatement}{\{\}}
-
-% AssertStatement
-\newcommand{\LabeledStatement}[2]{#1\synt{:}\, #2}
-\newcommand{\BreakStatement}[1]{\synt{break}\, #1}
-\newcommand{\WhileStatement}[2]{\synt{while}\, \synt{(}#1\synt{)}\, #2}
-\newcommand{\DoStatement}[2]{\synt{do}\, #1\, \synt{while}\, \synt{(}#2\synt{)}}
-\newcommand{\ForStatement}[4]{\synt{for}\, \synt{(}\,#1\synt{;}\, #2\synt{;}\, #3\,\synt{)}\, #4}
-\newcommand{\ForInStatement}[3]{\synt{for}\,\synt{(}#1\,\synt{in}\,#2\synt{)}\,#3}
-
-\newcommand{\SwitchStatement}[2]{\synt{switch}\,\synt{(}#1\synt{)}\,#2}
-\newcommand{\ContinueSwitchStatement}[1]{\synt{continue}\,#1}
-\newcommand{\IfStatement}[3]{\synt{if}\,\synt{(}#1\synt{)}\,#2\,\synt{else}\,#3}
-\newcommand{\ReturnStatement}[1]{\synt{return}\,#1}
-
-\newcommand{\TryCatch}[2]{\synt{try}\,#1\,\synt{catch}\,#2}
-\newcommand{\TryFinally}[2]{\synt{try}\,#1\,\synt{finally}\,#2}
-
-\newcommand{\Yield}[1]{\synt{yield}\,#1}
-
-\newcommand{\VarDeclaration}[2]{\synt{var}\,#1\synt{=}#2}
-\newcommand{\FunctionDeclaration}[5]{#1\,#2\synt{(}\,#3\,\synt{)}\,#4\,#5}
-
-\[
-\begin{array}{rl}
-
-  \statementmeta \in \dstmt ::=
-  & \ExpressionStatement{\expressionmeta} \\
-  & \Block{\statementmeta{s}} \\
-  & \EmptyStatement \\
-  & \LabeledStatement{\lbl}{\statementmeta} \\
-  & \BreakStatement{\lbl} \\
-  & \WhileStatement{\expressionmeta}{\statementmeta} \\
-  & \DoStatement{\statementmeta}{\expressionmeta} \\
-  & \ForStatement{\varmeta{s}}{\expressionmeta}{\expressionsmeta}{\statementmeta} \\
-  & \ForInStatement{\varmeta}{\expressionmeta}{\statementmeta} \\
-  & \SwitchStatement{\expressionmeta}{\tt{SCs}} \\
-  & \ContinueSwitchStatement{\statementmeta} \\
-  & \IfStatement{\expressionmeta}{\statementmeta_1}{\statementmeta_2} \\
-  & \ReturnStatement{\expressionmeta} \\
-  & \ReturnStatement{} \\
-  & \TryCatch{\statementmeta}{\tt{CCs}} \\
-  & \TryFinally{\statementmeta_1}{\statementmeta_2} \\
-  & \Yield{\expressionmeta} \\
-  & \VarDeclaration{\idmeta}{\expressionmeta} \\
-  & \FunctionDeclaration{\typemeta}{\idmeta}{\formals}{}{\stmt} \\
-
-\end{array}
-\]
-  \todo{Add sync*/async/async* marker and type parameters}
-
-\section{CESK Machine States}
-\subsection{Configurations}
-\label{subsec:cesk-configs}
-
-The state space of the CESK machine contains various kinds of configurations.
-Configurations contain different components and the transition step dispatches to the next configuration based on one of the components of the configuration.
-
-% Named Configuration for CESK transitions
-\newcommand{\breakconf}[1]{\confsingle{#1}_{\mathrm{breakCont}}}
-\newcommand{\switchconf}[1]{\confsingle{#1}_{\mathrm{switchCont}}}
-\newcommand{\contconf}[2]{\confpair{#1}{#2}_{\mathrm{cont}}}
-\newcommand{\scontconf}[2]{\confpair{#1}{#2}_{\mathrm{scont}}}
-\newcommand{\acontconf}[2]{\confpair{#1}{#2}_{\mathrm{acont}}}
-\newcommand{\throwconf}[3]{\conftriple{#1}{#2}{#3}_{\mathrm{throw}}}
-\newcommand{\evallistconf}[6]{\langle{#1},\,{#2},\,{#3},\handler,\,{#4},\,{#5},\,{#6}\rangle_{\mathrm{evalList}}}
-\newcommand{\evalconf}[6]{\langle{#1},\,{#2},\,{#3},\handler,\,{#4},\,{#5},\,{#6}\rangle_{\mathrm{eval}}}
-\newcommand{\execconf}[9]{\langle{#1},\,{#2},\,{#3},\,{#4},\,{#5},\,{#6},\,{#7},\,{#8},\,{#9}\rangle_{\mathrm{exec}}}
-\newcommand{\eventconf}[2]{\langle{#1},\,{#2}\rangle_{\mathrm{event}}}
-
-% Transition
-\todo{dmitryas: Add G (event loop) to all configurations.}
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\evalconf{\expr}{\env}{st}{cex}{cst}{\econt} & :\quad & \text{EvalConfiguration} \label{config:eval}\\
-    &\evallistconf{\exprs}{\env}{st}{cex}{cst}{\acont} & :\quad & \text{EvalListConfiguration} \label{config:evallist}\\
-    &\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}  & :\quad & \text{ExecConfiguration} \label{config:exec}\\
-    &\contconf{\econt}{\val} & :\quad & \text{ValuePassingConfiguration} \label{config:econt}\\
-    &\acontconf{\acont}{\vals} & :\quad & \text{ApplicationConfiguration} \label{config:acont}\\
-    &\scontconf{\scont}{\env} & :\quad & \text{ForwardConfiguration} \label{config:scont}\\
-    &\throwconf{\handler}{\val}{\strace} & :\quad & \text{ThrowConfiguration} \label{config:throw}\\
-    &\breakconf{\bcont} & :\quad & \text{BreakConfiguration} \label{config:bcont}\\
-    &\switchconf{\switchcont} & :\quad & \text{SwitchConfiguration} \\
-    &\eventconf{\ncont}{\eventloop} & :\quad & \text{EventLoopConfiguration}
-    \label{config:switchcont}
-  \end{align}
-  \caption{States for the CESK machine}
-  \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{EvalConfiguration}
-\label{subsubsec:evalconfig}
-
-The configuration EvalConfiguration is shown in \ref{config:eval}.
-The transition step for this configuration dispatches on the expression component, $\expr$.
-With one transition step of the CESK-transition function, from the EvalConfiguration the next configuration can be one of the following:
-
-\begin{itemize}
-    \item ValuePassingConfiguration, when the current expression evaluates to a value in one step.
-    \item ExecConfiguration, when the current expression results with an invocation, i.e. execution of statement body of a getter.
-        Note that for other invocations, we first evaluate the receiver for instance invocations, or the arguments for static or constructor invocations.
-    \item EvalListConfiguration, when the current expression implies evaluation of a list of expressions.
-    \item ThrowConfiguration, when the current expression throws, i.e. is a throw expression.
-    \item EvalConfiguration, otherwise.
-\end{itemize}
-
-
-\subsubsection{EvalListConfigruation}
-\label{subsubsec:evallistconfig}
-
-The configuration EvalListConfiguration is shown in Figure~\ref{config:evallist}.
-The transition step for this configuration dispatches on the expression list, $\exprs$.
-With one step of the CESK-transition function, from EvalListConfifuration the next configuration is either EvalConfiguration, when $\exprs \neq []$, or ApplicationConfiguration, otherwise.
-
-
-\subsubsection{ExecConfiguration}
-\label{subsubsec:execconfig}
-
-The configuration ExecConfiguration is shown in Figure~\ref{config:exec}.
-The transition step dispatches on the statement, $\stmt$.
-The next configuration is either EvalConfiguration or ExecConfiguration.
-
-
-\subsubsection{ValuePassingConfiguration}
-\label{suubsubsec:valuepassingconfig}
-
-The configuration ValuePassingConfiguration is shown in Figure~\ref{config:econt}.
-The transition step applies the expression continuation component to its value component.
-The expression continuation produces the next configuration.
-
-
-\subsubsection{ApplicationConfiguration}
-\label{subsubsec:applicationconfig}
-
-The configuration ApplicationConfiguration is shown in Figure~\ref{config:acont}.
-The transition step applies the application continuation component to its list of values component.
-The application continuation produces the next configuration.
-
-
-\subsubsection{ForwardConfiguration}
-\label{subsubsec:forwardconfig}
-
-The configuration ForwardConfiguration is shown in Figure~\ref{config:scont}.
-The transition step applies the statement continuation component to its environment component.
-The statement continuation produces the next configuration.
-
-
-\subsubsection{ThrowCongfiguration}
-\label{subsubsec:throwconfig}
-
-The configuration ThrowConfiguration is shown in Figure~\ref{config:throw}.
-The transition step applies the exception handler.
-The next configuration is:
-
-\begin{itemize}
-    \item ThrowConfiguration, when the exception is not handled by the first catch clause of a catch handler.
-    \item ExecConfiguration, for the statement body of the matching catch or the finally statement, when no catch clauses are present.
-\end{itemize}
-
-
-\subsubsection{BreakConfiguration}
-\label{subsubsec:breakconfig}
-
-The configuration BreakConfiguration is shown in Figure~\ref{config:bcont}.
-The transition step applies the break continuation component.
-The next configuration is ForwardConfiguration.
-
-
-\subsubsection{SwitchConfiguration}
-\label{subsubsec:switchconfig}
-
-The configuration SwitchConfiguration is shown in Figure~\ref{config:switchcont}.
-The transition step applies the switch continuation component.
-The next configuration is ExecConfiguration.
-
-
-\subsection{Continuations}
-\label{subsec:continuations-definition}
-
-Continuations represent the instructions for execution of statements or evaluation of expressions.
-They capture the information needed to resume the execution of the program.
-There are various types of continuations depending on the state for evaluation of an expression or execution of a statement.
-
-
-\subsubsection{Expression Continuations}
-\label{subsubsec:expression-continuations}
-
-Expression continuations, $\econt$, capture the steps after the evaluation of a given expression.
-They accept a value and produce the next configuration.
-
-There are various kinds of configurations, but two more general types can be distinguished:
-
-\begin{itemize}
-    \item Continuations with holes, i.e. expressions to be evaluated\\
-        Expression continuations with expressions will produce EvalConfiguration for evaluation of the next expression.
-        Note that some continuation will not evaluate the captured expression, when this is not necessary (e.g., \eqref{eval:and}).
-
-    \item Continuations without holes\\
-        Continuations without holes dispatch on the provided value and produce the next configuration, a ValuePassingConfiguration.
-
-\end{itemize}
-
-We suffix the names of expression continuations with ``$K$''.
-The different expression continuations are shown in Figure~\ref{figure:econts}.
-
-\newcommand{\ExceptionHandlersRest}{\handler,\,\cstrace,\,\cex}
-\newcommand{\ExceptionHandlers}{\strace,\,\handler,\,\cstrace,\,\cex}
-% Continuations
-\newcommand{\VarSetK}[4]{\mathrm{VarSetEK}({#1},\,{#2},\,{#3},\,{#4})}
-\newcommand{\ExpressionsK}[3]{\mathrm{ExpressionsEK}({#1},\,{#2},\,\ExceptionHandlers,\,{#3})}
-
-\newcommand{\NotK}[1]{\mathrm{NotEK}({#1})}
-\newcommand{\AndK}[3]{\mathrm{AndEK}({#1},\,{#2},\,\ExceptionHandlers,\,{#3})}
-\newcommand{\OrK}[3]{\mathrm{OrEK}({#1},\,{#2},\,\ExceptionHandlers,\,{#3})}
-\newcommand{\ConditionalK}[4]{\mathrm{ConditionalEK}({#1},\,{#2},\,{#3},\,\ExceptionHandlers,\,{#4})}
-
-\newcommand{\LetK}[4]{\mathrm{LetEK}({#1},\,{#2},\,{#3},\,\ExceptionHandlers,\,{#4})}
-
-\newcommand{\IsExpressionK}{\mathrm{IsExpressionEK}(\tt{T},\,\econt)}
-\newcommand{\AsExpressionK}{\mathrm{AsExpressionEK}(\tt{T},\,\strace,\,\handler,\,\econt)}
-
-\newcommand{\StaticGetK}{\mathrm{StaticGetEK}(\membermeta,\,\econt)}
-\newcommand{\StaticSetK}{\mathrm{StaticSetEK}(\membermeta,\,\econt)}
-\newcommand{\PropertyGetK}{\mathrm{PropertyGetEK}(\idmeta,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\PropertySetK}{\mathrm{PropertySetEK}(\idmeta,\,\expressionmeta_1,\,\env,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\PropertySetVK}{\mathrm{PropertySetValueEK}(\val_0,\,\idmeta,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\DPropertyGetK}{\mathrm{DPropertyGetEK}(\membermeta,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\DirectPropertySetK}{\mathrm{DPropertySetEK}(\membermeta,\,\expressionmeta_1,\,\env,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\DPropertySetVK}{\mathrm{DPropertySetValueEK}(\val_0,\,\membermeta,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\SuperPropertySetK}{\mathrm{SuperPropertySetEK}(\idmeta,\,\env,\,\ExceptionHandlers,\,\econt)}
-
-\newcommand{\InstanceMethodK}[1]{\mathrm{InstanceMethodK(\expressionsmeta,\,\idmeta,\,\env,\,#1,\,\ExceptionHandlersRest,\,\econt)}}
-\newcommand{\DInstanceMethodK}[1]{\mathrm{DInstanceMethodEK}(\expressionsmeta,\,\membermeta,\,\env,\,#1,\,\ExceptionHandlersRest,\,\econt)}
-\newcommand{\VarDeclK}[3]{\mathrm{VarDeclarationEK}({#1},\,{#2},\,{#3})}
-\newcommand{\IfCondK}[2]{\mathrm{IfConditionEK}({#1},\,{#2},\,\env,\,\lbls,\,\clbls,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\newcommand{\SwitchK}[2]{\mathrm{SwitchEK}({#1},\,\env,\,\lbls,\,{#2},\,\strace,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-
-\newcommand{\WhileCondK}{\mathrm{WhileCondEK}(\expr,\,\stmt,\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\newcommand{\InitializerK}[4]{\mathrm{InitializerEK}({#1},\,{#2},\,{#3},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#4})}
-\newcommand{\InitK}[3]{\mathrm{InitEK}({#1},\,{#2},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#3})}
-\newcommand{\InitializerListEK}[5]{\mathrm{InitializerListEK}({#1},\,{#2},\,{#3},\,{#4},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#5})}
-\newcommand{\FinallyK}[1]{\mathrm{FinallyEK}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\econt)}
-\newcommand{\FinallyReturnK}[1]{\mathrm{FinallyReturnEK}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\econt)}
-
-\newcommand{\ForCondK}{\mathrm{ForConditionEK}(\varmeta{s},\, \expressionmeta,\, \exprs,\, \statementmeta,\, \env,\, \env',\, \lbls,\, \clbls,\, \handler,\, \cstrace,\, \cex,\, \econt,\, \scont)}
-\newcommand{\ExpressionK}[2]{\mathrm{ExpressionEK}({#1},\,{#2})}
-
-\newcommand{\AsyncReturnEK}[1]{\mathrm{AsyncReturnEK}({#1})}
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\VarSetK{\idmeta}{\env}{\ExceptionHandlers}{\econt} \label{econt:varset}\\
-    &\ExpressionsK{\exprs}{\env}{\acont} \label{econt:expressions}\\
-    &\NotK{\econt} \label{econt:not}\\
-    &\AndK{\expressionmeta}{\ExceptionHandlers}{\econt} \label{econt:and}\\
-    &\OrK{\expressionmeta}{\ExceptionHandlers}{\econt} \label{econt:or}\\
-    &\ConditionalK{\expressionmeta_1}{\expressionmeta_2}{\ExceptionHandlers}{\econt} \label{econt:cond}\\
-    &\LetK{\varmeta}{\expressionmeta}{\ExceptionHandlers}{\econt} \label{econt:let}\\
-    &\IsExpressionK \label{econt:is}\\
-    &\AsExpressionK \label{econt:as}\\
-    &\StaticGetK \label{econt:static-get}\\
-    &\StaticSetK \label{econt:static-set}\\
-    &\DPropertyGetK \label{econt:dproperty-get}\\
-    &\PropertySetK \label{econt:property-set}\\
-    &\PropertySetVK \label{econt:property-set}\\
-    &\DPropertyGetK \label{econt:dproperty-set}\\
-    &\DPropertySetVK \label{econt:dproperty-set-v}\\
-    &\SuperPropertySetK \label{econt:super-property-set}\\
-    &\InstanceMethodK{\strace} \label{econt:instance-method}\\
-    &\DInstanceMethodK{\strace} \label{econt:dinstance-method}\\
-    &\VarDeclK{\idmeta}{\env}{\scont} \label{econt:var-decl}\\
-    &\IfCondK{\expressionmeta_1}{\expressionmeta_2} \label{econt:if-cond}\\
-    &\ForCondK \label{econt:for-cond}\\
-    &\ExpressionK{\scont}{\env} \label{econt:expression}\\
-    &\InitializerListEK{Q}{i}{\loc}{\env}{\scont} \label{econt:initializer-list}\\
-    &\AsyncReturnEK{\econt}
-  \end{align}
-  \caption{Expression Continuations}
-  \label{figure:econts}
-  \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Statement Continuations}
-\label{subsubsec:statement-continuations}
-
-Statement continuations, $\scont$, capture the steps after execution of a statement.
-They accept an environment and produce the next configuration.
-Statements in a block expressions can extend the environment function and this is visible to the subsequent statements in the same block.
-For other types of statement configuration, the environment is ignored.
-
-We suffix the names of statement continuations with ``$SK$''.
-The different statement continuations are shown in Figure~\ref{figure:sconts}.
-
-\newcommand{\ExitSK}[1]{\mathrm{ExitSK}(\econt,\,#1)}
-\newcommand{\BlockSK}[2]{\mathrm{BlockSK}({#1},\,{#2},\,\lbls,\,\clbls,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\newcommand{\WhileSK}{\mathrm{WhileSK}(\expr,\,\stmt,\,\env,\,\lbls,\,\clbls,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\newcommand{\BodySK}[3]{\mathrm{BodySK}({#1},\,{#2},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#3})}
-\newcommand{\NewSK}[2]{\mathrm{NewSK}({#1},\,{#2})}
-\newcommand{\FinallySK}[1]{\mathrm{FinallySK}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\econt,\,\scont)}
-\newcommand{\RethrowSK}[3]{\mathrm{RethrowSK}({#1},\,{#2},\,{#3})}
-\newcommand{\ForSK}{\mathrm{ForSK}(\varmeta{s},\, \expressionmeta,\, \exprs,\, \statementmeta,\, \env,\, \env',\, \lbls,\, \clbls,\, \handler,\, \cstrace,\, \cex,\, \econt,\, \scont)}
-\newcommand{\WhileCondSK}{\mathrm{WhileCondSK}(\expr,\,\stmt,\,\env,\,\lbls,\,\clbls,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\ExitSK{\val} \label{scont:exit}\\
-    &\BlockSK{\stmts}{\env} \label{scont:block}\\
-    &\WhileSK \label{scont:while}\\
-    &\BodySK{\stmt}{\env}{\scont} \label{scont:body}\\
-    &\NewSK{\econt}{\loc} \label{scont:new}\\
-    &\FinallySK{\stmt} \label{scont:finally}\\
-    &\RethrowSK{\val}{\strace}{\handler} \label{scont:rethrow}\\
-    &\ForSK \label{scont:for}\\
-    &\WhileCondSK \label{scont:while}
-  \end{align}
-  \caption{Statement Continuations}
-  \label{figure:sconts}
-  \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Application Continuation}
-\label{subsubsec:application-continuation}
-
-Application continuations, $\acont$, capture the application of a list of values resulting from the evaluation of list of expressions.
-
-\newcommand{\ValueA}[2]{\mathrm{ValueA}({#1},\,{#2})}
-\newcommand{\StringConcatenationA}{\mathrm{StringConcatenationA(\econt)}}
-\newcommand{\SuperMethodA}[1]{\mathrm{SuperMethodA}(\idmeta,\,\env,\,#1,\,\ExceptionHandlersRest,\,\econt)}
-\newcommand{\StaticInvA}[4]{\mathrm{StaticInvocationA}({#1},\,{#2},\,{#3},\,\ExceptionHandlersRest,\,{#4})}
-\newcommand{\DInstanceMethodA}{\mathrm{DInstanceMethodA}(\membermeta,\,\val,\,\ExceptionHandlers,\,\econt)}
-\newcommand{\FieldsA}[4]{\mathrm{InstanceFieldsA}({#1},\,{#2},\,{#3},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#4})}
-\newcommand{\SuperA}[3]{\mathrm{SuperA}({#1},\,{#2},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#3})}
-\newcommand{\ConstructorA}[3]{\mathrm{ConstructorA}({#1},\,{#2},\,\handler,\,\cstrace,\,\cex,\,{#3})}
-\newcommand{\RedirectingA}[3]{\mathrm{RedirectingA}({#1},\,{#2},\,\strace,\,\handler,\,\cstrace,\,\cex,\,{#3})}
-\newcommand{\ForInitA}[1]{\mathrm{ForInitA}(\varmeta{s},\, #1,\, \exprs,\, \statementmeta,\, \env,\, \lbls,\, \clbls,\, \handler,\, \cstrace,\, \cex,\, \econt,\, \scont)}
-\newcommand{\ForUpdatesA}[2]{\mathrm{ForUpdatesA}(\varmeta{s},\, #1,\, \exprs,\, \statementmeta,\, \env,\, #2,\, \lbls,\, \clbls,\, \handler,\, \cstrace,\, \cex,\, \econt,\, \scont)}
-\newcommand{\InstanceMethodA}{\mathrm{InstanceMethodA(\idmeta,\,\val,\,\strace,\,\handler,\,\cstrace,\,\cex,\,\econt)}}
-
-We use the application continuation $\ValueA{\acont}{\val}$, capturing a value and an application continuation, as application that adds a value to the list of values to eventually used by an application continuation that produces a configuration other than ApplicationConfiguration.
-We suffix the names of application continuations with ``$A$''.
-The different application continuations are shown in Figure~\ref{figure:acont}.
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\ValueA{\val}{\acont} \label{acont:value}\\
-    &\StringConcatenationA \label{acont:stringconcat}\\
-    &\ForInitA{\expressionmeta} \label{acont:forinit}\\
-    &\ForUpdatesA{\expressionmeta}{\env'} \label{acont:forupdates}\\
-    &\SuperMethodA{\strace} \label{acont:supermethod}\\
-    &\DInstanceMethodA \label{acont:staticinv}\\
-    &\FieldsA{Q}{\loc}{\env}{\scont} \label{acont:fields}\\
-    &\ConstructorA{Q}{\strace}{\econt} \label{acont:constructor}\\
-    &\SuperA{Q}{\loc}{\scont} \label{acont:super}\\
-    &\RedirectingA{Q}{\loc}{\scont} \label{acont:redirecting}
-  \end{align}
-  \caption{Application Continuations}
-  \label{figure:acont}
-  \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Break Continuations}
-\label{subsubsec:break-continuations}
-
-Break continuations, $\bcont$, capture the steps to be executed when a break to a given label is encountered.
-The different break continuations are shown in Figure~\ref{figure:breakcont}.
-\newcommand{\Break}[2]{\mathrm{Break}(#1,\,#2)}
-\newcommand{\FinallyBreak}[2]{\mathrm{FinallyBreak}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\cstrace,\,\cex,\,\econt,\,{#2})}
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\Break{\env}{\scont} \label{breakcont:break} \\
-    &\FinallyBreak{\stmt}{\scont} \label{breakcont:finallybreak}
-  \end{align}
-  \caption{Break Continuations}
-  \label{figure:breakcont}
-  \end{eqfigure}
-\end{figure}
-
-The break continuation Break, \ref{breakcont:break}, captures a statement continuation and the environment corresponding to a target label or a break statement.
-The break continuation FinallyBreak, \ref{breakcont:finallybreak}, captures the statement body and the components necessary for the execution of an enclosing Finally statement.
-They are added when a try/finally statement is executed.
-
-
-\subsubsection{Switch Continuations}
-\label{subsubsec:switch-continuations}
-
-Switch continuations, $\switchcont$, capture the steps to be executed when a continue to a preceding switch case statement is executed.
-They capture the components needed for the execution of the case body statement.
-The different switch continuations are shown in Figure~\ref{figure:switchconts}.
-
-\newcommand{\ContinueK}{\mathrm{SwitchContinueK}(\stmt,\,\env,\,\lbls,\,\clbls,\,\handler,\,\cstrace,\,\cex,\,\econt,\,\scont)}
-\newcommand{\FinallyContinue}[2]{\mathrm{FinallyContinue}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\cstrace,\,\cex,\,\econt,\,{#2})}
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\ContinueK \label{switchcont:continue} \\
-    &\FinallyContinue{\stmt}{\scont} \label{switchcont:finallycontinue}
-  \end{align}
-  \caption{Switch Continuations}
-  \label{figure:switchconts}
-  \end{eqfigure}
-\end{figure}
-
-The switch continuation SwitchContinue, \ref{switchcont:continue}, captures the statement body of a preceding switch case, targeted by some continue statement, and the components necessary for its execution.
-The switch continuation FinallyContinue, \ref{switchcont:finallycontinue}, captures the statement body and the components necessary for the execution of an enclosing Finally statement.
-They are added when a try/finally statement is executed.
-
-
-\subsubsection{Exception Handlers}
-\label{subsubsec:exception-handlers}
-
-The different exception handlers are shown in Figure~\ref{figure:handlers}.
-\newcommand{\ThrowH}[2]{\mathrm{ThrowK}({#1},\,{#2})}
-\newcommand{\CatchH}[1]{\mathrm{Catch}({#1},\,\env,\,\lbls,\,\clbls,\,\strace,\,\handler,\,\econt,\,\scont)}
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\ThrowH{\val}{\strace} \label{handle:throw} \\
-    &\CatchH{cs} \label{handle:catch}
-  \end{align}
-  \caption{Exception handlers}
-  \label{figure:handlers}
-  \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Event Loop Continuations}
-
-\newcommand{\StartNK}[3]{\mathrm{StartNK}({#1},\,{#2},\,{#3})}
-\newcommand{\ResumeNK}[2]{\mathrm{ResumeNK}({#1},\,{#2})}
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-        \begin{align}
-            &\StartNK{\stmt}{\env}{\econt}\\
-            &\ResumeNK{\econt}{\val}
-        \end{align}
-        \caption{Event loop continuations}
-    \end{eqfigure}
-\end{figure}
-
-
-\section{CESK Machine Transitions}
-\label{sec:semantics}
-
-
-\subsection{Expression Evaluation}
-\label{subsec:expr-evaluation}
-
-
-Expressions are evaluated by dispatching according to the expression component, $\expressionmeta$, in EvalConfiguration, Section~\ref{subsubsec:evalconfig}, and the list of expression component, $\exprs$, in EvalListConfiguration, Section~\ref{subsubsec:evallistconfig}.
-
-The CESK-transition function for EvalListConfiguration is shown in Figure~\ref{figure:evallist}.
-The value corresponding to the evaluated expression is captured by the application continuation ValueA and eventually added to the list of values corresponding to the expressions.
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    &\begin{multlined}
-        \cesktranswheresplit%
-            {\evallistconf{\expr :: \exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-            {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\text{where $\econt = \ExpressionsK{\exprs}{\env}{\acont}$}}
-    \end{multlined}\\
-    &\cesktrans%
-        {\evallistconf{[]}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-        {\acontconf{\acont}{[]}}\\
-    &\cesktrans%
-        {\acontconf{\ValueA{\val}{\acont}}{\val s}}%
-        {\acontconf{\acont}{\val :: \val s}}
-    \end{align}
-    \caption{The CESK-transition function for EvalListConfiguration}\label{figure:evallist}
-    \label{subsec:eval-list-expressions}
-    \end{eqfigure}
-\end{figure}
-
-%%
-% Figure showing the CESK-transition function starting from EvalConfiguration for simple
-% expressions.
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\cesktranswhere%
-            {\evalconf{\IntLiteral{\integermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\val}}%
-            {\text{where $\val = \mathrm{IntLiteral(\integermeta)} \in \dsemint$}}
-            \label{eval:int}\\
-        &\cesktranswhere%
-            {\evalconf{\DoubleLiteral{\doublemeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\val}}%
-            {\text{where $\val = \mathrm{DoubleLiteral(\doublemeta)} \in \dsemdouble$}}
-            \label{eval:double}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\BoolLiteral{\true}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\contconf{\econt}{\val}}%
-                {\text{where $\val = \mathrm{BoolValue(\true)} = \true\in \dsembool$}}
-        \end{multlined}
-        \label{eval:true}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\BoolLiteral{\false}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\contconf{\econt}{\val}}%
-                {\text{where $\val = \mathrm{BoolValue(\false)} = \false\in \dsembool$}}
-        \end{multlined}
-        \label{eval:false}\\
-        &\cesktranswhere%
-            {\evalconf{\StringLiteral{\stringmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\val}}%
-            {\text{where $\val = \mathrm{StringValue(\stringmeta)} \in \dsemstring$}}
-            \label{eval:string}\\
-        &\cesktrans%
-            {\evalconf{\varmeta}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\deref{\env(\varmeta)}}}
-            \label{eval:varget}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-            {\evalconf{\varmeta \synt{=} \expr}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}
-            {\econt' = \VarSetK{\variablemeta}{\env}{\ExceptionHandlers}{\econt}}
-        \end{multlined}
-        \label{eval:varset}\\
-        &\cesktrans%
-            {\evalconf{\Not{\expressionmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\NotK{\econt}}}
-            \label{eval:not}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\AndExpression{\expressionmeta_0}{\expressionmeta_1}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expressionmeta_0}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \AndK{\expressionmeta_1}{\env}{\econt}$}}%
-        \end{multlined}
-        \label{eval:and}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\OrExpression{\expressionmeta_0}{\expressionmeta_1}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expressionmeta_0}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \OrK{\expressionmeta_1}{\env}{\econt}$}}%
-        \end{multlined}
-        \label{eval:or}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\ConditionalExpression{\expr}{\expri{1}}{\expri{2}}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where }\econt' = \ConditionalK{\expri{1}}{\expri{2}}{\env}{\econt}}
-        \end{multlined}
-        \label{eval:cond}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\Let{\varmeta}{\expri{1}}{\expri{2}}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expri{1}}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where }\econt' = \LetK{\varmeta}{\expri{2}}{\env}{\econt}}
-        \end{multlined}
-        \label{eval:let}\\
-        &\begin{multlined}
-            \cesktranssplit%
-                {\evalconf{\StringConcatenation{\expressionmeta_1}{\expressionmeta_N}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\StringConcatenationA}}
-        \end{multlined}
-        \label{eval:concat}\\
-        &\cesktrans%
-            {\evalconf{\IsExpression{\expressionmeta}{\tt{T}}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\IsExpressionK}}
-          \label{eval:is}\\
-        &\begin{multlined}
-            \cesktranssplit%
-                {\evalconf{\AsExpression{\expressionmeta}{\tt{T}}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\AsExpressionK}}
-        \end{multlined}
-        \label{eval:as}\\
-        &\cesktrans%
-            {\evalconf{\this}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\deref{\env(\this)}}}
-            \label{eval:this}\\
-        &\begin{multlined}
-            \cesktranssplit%
-                {\evalconf{\throw \expr}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\ThrowH{(\throw \expr) :: \strace}{\handler}}}
-        \end{multlined}
-        \label{eval:throw}\\
-        &\cesktrans%
-            {\evalconf{\rethrow}{\env}{\strace}{\strace'}{\cex}{\econt}}%
-            {\throwconf{\handler}{\cex}{\strace'}}
-            \label{eval:rethrow}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{F}{\env}{st}{cex}{cst}{\econt}}%
-                {\contconf{\econt}{\val}}%
-                {\begin{aligned}
-                    \text{where } \val &= \funval{\formals}{\stmt}{\loc}\\
-                                  F &\text{ is a function expression with formal parameters $\formals$ and body $\stmt$}\\
-                                  \deref{\loc} &= \env \text{ after transtion}
-                \end{aligned}}
-        \end{multlined}
-    \end{align}
-    \caption{The CESK-transition function for EvalConfiguration: simple expressions}
-    \label{figure:expressions-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-%%
-% Figure showing the CESK-transition function starting from ValuePassingConfiguration
-% for simple expressions
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-        \cesktranssplit%
-            {\contconf{\ExpressionsK{\exprs}{\env}{\acont}}{\val}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\ValueA{\val}{\acont}}}
-        \end{multlined}
-        \label{econtconf:exprs}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\VarSetK{\idmeta}{\env}{\ExceptionHandlers}{\econt}}{\val}}%
-            {\contconf{\econt}{\val}}%
-        {\text{where $\deref{\env(\idmeta)} = \val$ after transition}}
-        \end{multlined}
-        \label{econtconf:varset}\\
-        &\cesktrans%
-            {\contconf{\NotK{\econt}}{\true}}%
-            {\contconf{\econt}{\false}}
-        \label{econtconf:not-true}\\
-        &\cesktrans%
-            {\contconf{\NotK{\econt}}{\false}}%
-            {\contconf{\econt}{\true}}
-        \label{econtconf:not-false}\\
-        &\cesktrans%
-            {\contconf{\AndK{\expressionmeta}{\env}{\econt}}{\true}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt}}
-        \label{econtconf:and-true}\\
-        &\cesktrans%
-            {\contconf{\AndK{\expressionmeta}{\env}{\econt}}{\false}}%
-            {\contconf{\econt}{\false}}
-        \label{econtconf:and-false}\\
-        &\cesktrans%
-            {\contconf{\OrK{\expressionmeta}{\env}{\econt}}{\false}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt}}
-        \label{econtconf:or-false}\\
-        &\cesktrans%
-            {\contconf{\OrK{\expressionmeta}{\env}{\econt}}{\true}}%
-            {\contconf{\econt}{\true}}
-        \label{econtconf:or-true}\\
-        &\begin{multlined}
-        \cesktranssplit%
-            {\contconf{\ConditionalK{\expri{1}}{\expri{2}}{\env}{\econt}}{\true}}%
-            {\evalconf{\expri{1}}{\env}{\strace}{\cstrace}{\cex}{\econt}}
-        \end{multlined}
-        \label{econtconf:cond-true}\\
-        &\begin{multlined}
-        \cesktranssplit%
-            {\contconf{\ConditionalK{\expri{1}}{\expri{2}}{\env}{\econt}}{\false}}%
-            {\evalconf{\expri{2}}{\env}{\strace}{\cstrace}{\cex}{\econt}}
-        \end{multlined}
-        \label{econtconf:cond-false}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\LetK{\expri{2}}{\env}{\varmeta}{\econt}}{\val}}%
-            {\evalconf{\expri{2}}{\env'}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\text{where $\env'=\ext{\env}{\varmeta}{\val}$}}
-        \end{multlined}
-        \label{econtconf:let}\\
-        &\cesktranswhere%
-            {\contconf{\IsExpressionK}{\val}}%
-            {\contconf{\econt}{\true}}%
-            {\text{where $\val$ is $\tt{T}$}}
-        \label{econtconf:is-true}\\
-        &\cesktranswhere%
-            {\contconf{\IsExpressionK}{\val}}%
-            {\contconf{\econt}{\false}}%
-            {\text{where $\val$ is not $\tt{T}$}}
-        \label{econtconf:is-false}\\
-        &\cesktranswhere%
-            {\contconf{\AsExpressionK}{\val}}%
-            {\contconf{\econt}{\val}}%
-            {\text{where $\val$ is $\tt{T}$}}
-        \label{econtconf:as-true}\\
-        &\cesktranswhere%
-            {\contconf{\AsExpressionK}{\val}}%
-            {\throwconf{\handler}{\AsExpression{\expressionmeta}{\tt{T}} :: \strace}{\synt{CastError}}}%
-            {\text{where $\val$ is not $\tt{T}$}}
-        \label{econtconf:as-false}
-    \end{align}
-    \caption{The CESK-transition function for ValuePassingConfiguration: simple expressions}
-    \label{figure:cont-config}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Basic Literal Evaluation}
-\label{subsubsec:basic-literal-eval}
-
-\kernel{} literals are evaluated to a value $\val \in \dlitval$ in one step.
-Transitions of the CESK machine for basic literals are presented in Figure~\ref{figure:expressions-evalconfigs}, rules \eqref{eval:int} - \eqref{eval:string}.
-
-
-\subsubsection{Variable Assignment and Lookup}
-\label{subsubsec:variable-assignment-and-lookup}
-
-A variable $\varmeta$ is accessed by reading the value stored at location $\env(\varmeta)$ in the store, \eqref{eval:varget}.
-Assigning a value to a variable $\varmeta$ will modify the store, more specifically the value stored at location  $\env(\varmeta)$.
-The evaluation of this expression proceeds by evaluating the right-hand side expression, as shown in \eqref{eval:varset} and setting the location $\env(\varmeta)$ in the store to the value this expression evaluates to, as shown in \eqref{econtconf:varset}.
-
-
-\subsubsection{Boolean Expressions}
-\label{subsubsec:bool-expressions}
-
-The CESK-transition function for boolean expressions is show in Figure~\ref{figure:expressions-evalconfigs}, rules \eqref{eval:not} - \eqref{eval:cond}.
-
-\begin{itemize}
-    \item Not expression\\
-        The target expression is evaluated, as shown in \eqref{eval:not} and proceed by dispatching on the value the expression evaluates to according to \eqref{econtconf:not-true} and \eqref{econtconf:not-false}.
-
-    \item And expression\\
-        The left-hand side expression is evaluated, according to \eqref{eval:and}.
-        We dispatch on the value the expression evaluates to.
-        If the expression evaluate to $\false$, according to \eqref{econtconf:and-false}, the value is immediately applied to the current expression continuation.
-        Otherwise, we proceed with the CESK-transition \eqref{econtconf:and-true}, by also evaluating the right-hand side.
-
-    \item Or expression\\
-        The left-hand side expression is evaluated, as shown in the CESK-transition \eqref{eval:or}.
-        We dispatch on the value the expression evaluates to.
-        If the expression evaluates to $\true$, according to \eqref{econtconf:or-true}, the value is immediately applied to the current expression continuation.
-        Otherwise, we proceed with the CESK-transition \eqref{econtconf:or-false}, by also evaluating the right-hand side.
-
-    \item Conditional expression\\
-        The condition expression is evaluated, as shown in the CESK-transition \eqref{eval:cond}.
-        We dispatch on the value the expression evaluates to.
-        If the expression evaluates to $\true$, the next configuration evaluates the first expression and is produced with the CESK-transition \eqref{econtconf:cond-true}.
-        Otherwise, the next configuration evaluates the second expression and is produced with the transition \eqref{econtconf:cond-false}.
-
-\end{itemize}
-
-
-\subsubsection{Let}
-
-Let expressions in \kernel{} introduce a new variable, initialized to some value with an initializer expression, for the evaluation of the right-hand side let expression.
-Let expressions are evaluated by first evaluating the initializer expression for the fresh variable as shown in the CESK-transition \eqref{eval:let}.
-It proceeds by extending the environment for the evaluation of the right-hand side let expression and producing the next configuration for evaluation of the later with the CESK-transition \eqref{econtconf:let}.
-
-
-\subsubsection{String Concatenation}
-\label{subsubsec:string-concatenation}
-
-The function $\concat$ concatenates the strings from the given meta-list into a single value.
-\begin{align*}
-  \concat : \mlist{\dsemstring} &\rightarrow \dsemstring\\
-  \concat( s_1 :: \dots :: s_n :: []) &= s_1 \dots s_n
-\end{align*}
-The evaluation of concatenation expression proceeds by evaluating the target expressions in the specified order, as shown with the CESK-transition \eqref{eval:concat}.
-Once all expressions have been evaluated the corresponding application is applied, as shown in \eqref{acontconf:concat}, which results with an expression continuation application to the resulting $\dsemstring$.
-
-
-\subsubsection{This}
-
-For the evaluation of $\this$ expression we add a special variable declaration, $\this$.
-In the body of instance methods or constructors, there is a binding in the corresponding environment from $\this$ variable declaration to a location that stores the corresponding value.
-Evaluation of $\this$ expression resolves to that value in one step, as shown in \eqref{eval:this}.
-
-
-\subsubsection{Type Test}
-\label{subsubsec:type-test}
-
-Type test expressions evaluate to a boolean literal value, in more than one step.
-The evaluation of this kind of expression proceeds by evaluating the target expression, as in CESK-transition \eqref{eval:is}.
-When the target expression evaluates to a value $\val$ such that ``$\val $ is $\tt{T}$" holds, the value $true$ is applied to the expression continuation, $\econt$, as shown in \eqref{econtconf:is-true}, otherwise $\false$ is applied to $\econt$, as in \eqref{econtconf:is-false}.
-
-
-\subsubsection{Type Cast}
-\label{subsubsec:type-cast}
-
-Evaluation of type cast expression proceed to evaluation of the target expression to the corresponding value, as shown in \eqref{eval:as}.
-When the target expression evaluates to a value $\val$ such that ``$\val $ is $\tt{T}$" holds, the value $\val$ is applied to the expression continuation as shown in \eqref{econtconf:as-true}.
-Otherwise, the evaluation of the expression results with an error, as shown in \eqref{econtconf:as-false}.
-
-
-\subsubsection{Function Expressions}
-\label{subsubsec:function-expressions}
-
-\kernel{} supports encapsulating an executable unit of code with function expressions.
-To support function expressions we introduce $fv = \funval{\formals}{\stmt_{body}}{\env} \in \dfunval$ as a value that has the function statement body, $\stmt_{body} \in \dstmt$, its list of formal parameters, $\formals \in \dformals$, and the environment, $\env \in \denv$ in scope of the function expression.
-This ensures that there are no free variables in the body of $fv$.
-
-$fv \in \dfunval$ has only one property, $call$.
-
-%%
-% Figure showing the CESK-transition function starting from ApplicationConfiguration.
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-       &\begin{multlined}
-        \cesktrans%
-            {\acontconf{\StringConcatenationA}{\vals}}%
-            {\contconf{\econt}{\concat(\vals)}}
-        \end{multlined}
-        \label{acontconf:concat}\\
-        &\begin{multlined}
-        \cesktranswheresplit*%
-            {\acontconf{\StaticInvA{\formals}{\stmt}{\strace}{\econt}}{\val{s}}}%
-            {\execconf{\stmt}{\env'}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\parbox{10cm}{where $\scont = \ExitSK{\nnull}$, $\env' = \ext{\env_{empty}}{\formals}{\val{s}}$}}
-        \end{multlined}
-        \label{acontconf:staticinvoc}
-    \end{align}
-    \caption{The CESK-transition function for ApplicationConfiguration for static invocation}
-    \label{table:static-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Function Invocation}
-\label{subsubsec:function-invoc}
-
-Function invocation occurs when a function expression (\ref{subsubsec:function-expressions}), instance method (\ref{subsubsec:instance-method-invoc}, \ref{subsubsec:direct-instance-method-invoc}, \ref{subsubsec:super-method-invoc}), a getter(\ref{subsubsec:property-extraction}), a setter (\ref{subsubsec:property-assignment}) or a constructor is invoked with new or with super and redirecting initializer (\ref{subsubsec:new-instance}).
-
-Instance method, getter or setter invocation proceed by evaluation of the receiver expression and binding its value to $\this$.
-For the other invocations, $\this$ is not bound.
-
-Execution of function invocation proceeds immediately when the target function is marked as "sync".
-\todo{Add text for generator sync and async function, and async function invocation.}
-
-The evaluation of the invocation proceeds by evaluating the actual argument list and binding the values of the evaluated argument list to the formal parameters of the function.
-\kernel{} supports positional, positional optional and named arguments.
-
-An invocation expression for a \kernel{} function contains a list of expressions that represent the actual arguments for the invocation.
-We construct a list of actual argument expressions containing the provided positional arguments and the provided named arguments.
-We also add the constant default expressions for the optional positional and named parameters.
-This is an implementation detail that allows us to evaluate all arguments for the invocation ignoring the distinction between provided or missing positional, optional and named arguments.
-Note that the default values for the optional positional and named parameters are constants, hence their evaluation does not have side effects and they evaluate to a value in one step.
-
-After the evaluation of the argument expressions, and before binding the actual arguments to the formal parameters necessary checks ensure the actual arguments are valid.
-
-Let $(\val_1, \dots, \val_n, \{a_{n+1} : \val_{n+1}, \dots, a_{n+l} : \val_{n+l}\})$ be the list of values that correspond to the actual arguments expressions for the function invocation with $a_i$ names of actual named arguments.
-The actual arguments are valid if:
-\begin{itemize}
-\item The number of positional actual arguments corresponds to the number of formal arguments for the function.
-\item The actual names of named arguments $a_i$ correspond to named formal parameters.
-\end{itemize}
-
-If any of the above mentioned statements doesn't hold, a "NoSuchMethodError" is thrown.
-\todo{Elaborate how this error is constructed and passed to the current handler.}
-\todo{Add text for type checking the parameters.}
-
-Otherwise, the statement body is then executed with the appropriate bindings.
-The specific CESK-transitions for the different invocations are described in the appropriate sections below.
-
-%%
-% Figure showing the CESK-transition function starting from EvalConfgiration for
-% static property extraction and assignment, and static invocation
-%%
-\todo{zhivkag: Modify static method and getter invocation w.r.t. async semantics}
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticGet{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\contconf{\econt}{\deref{\mainenv(\membermeta)}}}%
-                {\text{where $\membermeta$ is a static field and $\contains(\mainenv, \membermeta)$}}
-            \end{multlined}
-        \label{eval:staticget-var}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticGet{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\contconf{\econt}{\nnull}}%
-                {\begin{aligned}
-                    \text{where } &\membermeta \text{ is a static field without an initializer expression},\\
-                                  &not \contains(\mainenv, \membermeta),\\
-                                  &\deref{(\mainenv(\membermeta))} = \NullLiteral \text{ after transition}
-                 \end{aligned}}
-        \end{multlined}
-        \label{eval:staticget-varnew-null}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticGet{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\begin{aligned}
-                    \text{where } &\membermeta \text{ is a static field with initializer expression $\expressionmeta$},\\
-                                  &not \contains(\mainenv, \membermeta),\\
-                                  &\econt' = \StaticGetK
-                \end{aligned}}
-        \end{multlined}
-        \label{eval:staticget-varnew}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticGet{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\execconf{\stmt}{\env_{empty}}{[]}{[]}{\StaticGet{\membermeta} ::\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\begin{aligned}
-                    \text{where } \membermeta &\text{is a getter with body $\stmt$}\\
-                                  \scont &= \ExitSK{\nnull}
-                \end{aligned}}
-        \end{multlined}
-        \label{eval:staticget-getter}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticGet{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\contconf{\econt}{\funval{\formals}{\stmt}{\loc}}}%
-                {\begin{aligned}
-                    \text{where } \deref{\loc} &= \env_{empty} \text{ after transition}\\
-                                  \membermeta &\text{ is a method tear-off with formal parameters $\formals$ and body $\stmt$}
-                \end{aligned}}
-        \end{multlined}
-        \label{eval:staticget-tearoff}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticSet{\membermeta}{\expressionmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \StaticSetK$}}
-        \end{multlined}
-        \label{eval:staticset}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticInvocation{\{\membermeta\}}{\expressionsmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont'}}%
-                {\begin{aligned}
-                    \text{where } \acont' &= \StaticInvA{\formals}{\stmt}{\strace'}{\econt},\\
-                                  \strace' &= \StaticInvocation{\{\membermeta\}}{\expressionsmeta}::\strace,\\
-                                  \membermeta &\text{ is a static method with formal parameters }\formals \text{ and body }\stmt
-                  \end{aligned}}
-        \end{multlined}
-        \label{eval:staticinvoc}
-    \end{align}
-    \caption{The CESK-transition function for EvalConfiguration: static variable extraction and assignment, and sync static method invocation}
-    \label{table:static-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-%%
-% Figure showing the CESK-transition function starting from ValuePassingConfiguration for
-% static property extraction and assignment, and static invocation
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\StaticGetK}{\val}}%
-            {\contconf{\econt}{\val}}%
-            {\begin{aligned}
-                \text{where }&\\
-                \mainenv^{\synt{R}} &= \extend( \mainenv^{\synt{L}},\,\membermeta,\,\val)
-                \text{ after transition}\\
-                \mainenv^{\synt{L}} &\text{ is the main environment in the starting configuration}\\
-                \mainenv^{\synt{R}} &\text{ is the main environment in the resulting configuration}
-            \end{aligned}}
-        \end{multlined}
-        \label{econtconf:staticget}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\StaticSetK}{\val}}%
-            {\contconf{\econt}{\val}}
-            {\begin{aligned}
-                \text{where }
-                &\contains(\mainenv, \membermeta),\\
-                &\deref{(\mainenv(\membermeta))} = \val \text{ after transition}
-            \end{aligned}}
-        \end{multlined}
-        \label{econtconf:staticset-var}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\StaticSetK}{\val}}%
-            {\contconf{\econt}{\val}}
-            {\begin{aligned}
-                \text{where }
-                &not \contains(\mainenv, \membermeta)\\
-                &\mainenv^{\synt{R}} = \extend( \mainenv^{\synt{L}},\,\membermeta,\,\val)\\
-                &\mainenv^{\synt{L}} \text{ is the main environment in the starting configuration}\\
-                &\mainenv^{\synt{R}} \text{ is the main environment in the resulting configuration}
-            \end{aligned}}
-        \end{multlined}
-        \label{econtconf:staticset-var-new}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\StaticSetK}{\val}}%
-            {\execconf{\stmt}{\env}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\begin{aligned}
-                \text{where }  &\membermeta \text{ is a static setter with formal parameter }\formal \text{ and body }\stmt\\
-                               &\scont = \ExitSK{\val},\\
-                               &\env = \ext{\env_{empty}}{\formal}{\val}
-            \end{aligned}}
-        \end{multlined}
-        \label{econtconf:staticset-setter}
-    \end{align}
-    \caption{The CESK-transition function for ValuePassingConfiguration: static variable extraction and assignment, and static method invocation}
-    \label{table:static-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Static and Library Fields}
-\label{subsubsec:static-and-library-fields}
-
-In order to remember initialization and assignment of library variables and static variables, we introduce a global environment $\mainenv$ described in Section~\ref{subsec:main-env}.
-The environment $\mainenv$ stores bindings for static and library fields to locations for all static and library fields allocated before the execution of the program.
-Static and library variables are accessed with $\StaticGet{\membermeta}$.
-The member $\membermeta$ can be a static or library field, a getter or a method.
-When $\membermeta$ is a method, the expression $\StaticGet{\membermeta}$ is a method tear-off.
-
-\begin{itemize}
-    \item $\membermeta$ is a static or library field\\
-        Let $\expressionmeta_{\membermeta}$ be $\membermeta$'s initializer expression.
-        \begin{itemize}
-            \item If $\membermeta$ is accessed for the first time during the program's execution, the evaluation of $\StaticGet{\membermeta}$ proceeds with evaluation of the initializer expression $\expressionmeta_{\membermeta}$.
-            \item If $\expressionmeta$ is $\nnull$, the location for $\membermeta$ is updated to store a $\nnull$ value, as shown in \eqref{eval:staticget-varnew-null}.
-            \item If $\expressionmeta$ is an expression, this expression is evaluated as shown in \eqref{eval:staticget-varnew}.
-                The expression will evaluate to some value $\val$ that will be applied to the corresponding continuations, as shown in \eqref{econtconf:staticget}: the location for the field $\membermeta$ is updated to store the value $\val$ and the continuation $\econt$ is applied to the value $\val$.
-            \item If the location for the member $\membermeta$ in the global environment $\env_{M}$ has been previously accessed or initialized and does not store the empty value $\emptyset$, the continuation $\econt$ is applied to the stored value, as shown in \eqref{eval:staticget-var}.
-        \end{itemize}
-
-    \item $\membermeta$ is a static getter\\
-        If $\membermeta$ is a static getter, the body of the getter is executed, as shown in \eqref{eval:staticget-getter}.
-
-    \item $\membermeta$ is a static method tear-off\\
-        If $\membermeta$ is a method with formal parameters $\formals$ and body $\stmt$, a new $\funval{\formals}{\stmt}{\loc}, \deref{\loc} = \env_{empty}$ is created and bound to the member in the global environment $\mainenv$, as shown in \eqref{eval:staticget-tearoff}.
-        The continuation $\econt$ is applied to this value.
-
-\end{itemize}
-
-Static and library variables are set with $\StaticSet{\membermeta}{\expressionmeta}$.
-The target member can either be a static or library field, or it can be a static setter. For both cases, the right-hand side expression is evaluated first, as shown in \eqref{eval:staticset}.
-
-\begin{itemize}
-    \item $\membermeta$ is a static or library field\\
-        The evaluation proceeds by updating the value stored at the corresponding location in the environment $\mainenv$, as shown in \eqref{econtconf:staticset-var}.
-
-    \item $\membermeta$ is a static setter\\
-        The evaluation proceeds by executing the statement body of the setter.
-        A statement continuation $\ExitSK{\val}$ is added that applies the given expression continuation $\econt$ to the value of the right-hand side expression.
-        The statement body is executed in an environment that has only the binding from the formal parameter of the static setter to the value of the right-hand side expression, as shown in \eqref{econtconf:staticset-setter}.
-
-    \item Otherwise, $\membermeta$ is a static or library setter with body $\stmt$ and formal parameter $\formal$.
-
-\end{itemize}
-
-
-\subsubsection{Static Invocation}
-\label{subsubsec:static-invoc}
-
-Static invocation is supported with $\StaticInvocation{\{\membermeta\}}{\expressionsmeta}$ where $\membermeta$ is a function with statement body $\stmt$ and formal parameters $\formals$.
-The evaluation of a static invocation proceeds by evaluating the arguments of the call, as shown in \eqref{eval:staticinvoc}.
-After the evaluation of the actual arguments for the invocation, the corresponding application is applied to the resulting list of values, as shown in \eqref{acontconf:staticinvoc}.
-In \eqref{acontconf:staticinvoc}, we apply the application continuation by creating a new environment for the execution of the body of the method by binding its formal parameters to the locations of the values for the actual arguments.
-A statement continuation, $\ExitSK{\nnull}$ is added as next statement continuation to ensure that the execution of the body of the method returns correctly, when a return statement is not executed after the execution of the last statement of the body.
-
-%%
-% Figure showing the CESK-transition function starting from
-% ValuePassingConfiguration for instance property extraction and assignment.
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\PropertyGet{\expressionmeta}{\idmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\text{where $\econt' = \PropertyGetK$}}
-        \end{multlined}
-        \label{eval:propertyget}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\DirectPropertyGet{\expressionmeta}{\membermeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\text{where $\econt' = \DPropertyGetK$}}
-        \end{multlined}
-        \label{eval:dpropertyget}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\PropertySet{\expressionmeta_0}{\idmeta}{\expressionmeta_1}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta_0}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\text{where $\econt' = \PropertySetK$}}
-        \end{multlined}
-        \label{eval:propertyset}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\DirectPropertySet{\expressionmeta_0}{\membermeta}{\expressionmeta_1}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta_0}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\text{where $\econt' = \DirectPropertySetK$}}
-        \end{multlined}
-        \label{eval:dpropertyset}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\SuperPropertyGet{\idmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{\val}}%
-            {\begin{aligned}
-                \text{where } \val &= \funval{\formals}{\stmt}{\loc}\\
-                              \deref{\loc} &= \env'\\
-                              \env' &= \ext{\env_{empty}}{\this}{\deref{(\env(\this))}},\\
-                              \membermeta &= \superclass(\deref{\env(\this)}).lookup(\idmeta),\\
-                              \membermeta &\text{ is a method tear-off with formal parameters $\formals$ and body $\stmt$}
-             \end{aligned}}
-        \end{multlined}
-        \label{eval:superpropertyget-tearoff}\\
-        &\begin{multlined}
-        \cesktranswheresplit*%
-            {\evalconf{\SuperPropertyGet{\idmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\execconf{\stmt}{\env'}{\lbls}{\clbls}{\SuperPropertyGet{\idmeta} :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\begin{aligned}
-                \text{where } \membermeta &= \superclass(\deref{\env(\this)}).lookup(\idmeta),\\
-                              \membermeta &\text{ is a getter method with body }\stmt,\\
-                              \env' &= \ext{\env_{empty}}{\this}{\deref{(\env(\this))}},\\
-                              \scont &= \ExitSK{\nnull}
-            \end{aligned}}
-        \end{multlined}
-        \label{eval:superpropertyget-getter}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\SuperPropertyGet{\idmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\contconf{\econt}{M(\deref{(\env(\this))})}}%
-            {\text{where $\membermeta = \superclass(\deref{\env(\this)}).lookup(\idmeta)$, $\membermeta$ is a implicit field getter}}
-        \end{multlined}
-        \label{eval:superpropertyget-field}\\
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\SuperPropertySet{\idmeta}{\expressionmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\text{where $\econt' = \SuperPropertySetK$}}
-        \end{multlined}
-        \label{eval:superpropertyset}
-    \end{align}
-    \caption{The CESK-transition function for EvalConfiguration: instance property extraction and assignment}
-    \label{figure:instance-property-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-%%
-% Figure showing the CESK-transition function starting from ValuePassingConfiguration for instance property extraction.
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    &\begin{multlined}
-    \cesktranswheresplit*%
-        {\contconf{\PropertyGetK}{\val}}%
-        {\contconf{\econt}{\funval{\formals}{\stmt}{\loc}}}
-        {\begin{aligned}
-            \text{where } \membermeta &\text{ is a method with body $\stmt$ and formals $\formals$},\\
-                          \deref{\loc} &= \env \text{ after transition}\\
-                          \env &= \ext{\env_{empty}}{\this}{\val}
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:propertyget-tearoff}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\PropertyGetK}{\val}}%
-        {\execconf{\stmt}{\env}{[]}{[]}{\PropertyGet{\val}{\idmeta} :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-        {\begin{aligned}
-            \text{where } \membermeta&\text{ is a getter with body $\stmt$},\\
-                          \env &= \ext{\env_{empty}}{\this}{\val},\\
-                          \scont &= \ExitSK{\nnull}
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:propertyget-getter}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\PropertyGetK}{\val}}%
-        {\contconf{\econt}{\text{\membermeta}(\val)}}%
-        {\begin{aligned}
-            \text{where } \membermeta &\text{ is an implicit getter for field $\idmeta$},\\
-                          \env &= \ext{\env_{empty}}{\this}{\val},\\
-                          \scont &= \ExitSK{\nnull}
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:propertyget-field}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\PropertyGetK}{\val}}%
-        {\throwconf{\handler}{(\throw\text{ NoSuchMethod($\PropertyGet{\val}{\idmeta}$)}) :: \strace}{\text{NoSuchMethod}}}%
-        {\parbox{10cm}{where lookup of name $\idmeta$ was unsuccessful in class of value $\val$}}
-    \end{multlined}
-    \label{econtconf:propertyget-nosuchmethod}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\DPropertyGetK}{\val}}%
-        {\contconf{\econt}{\funval{\formals}{\stmt}{\loc}}}%
-        {\begin{aligned}
-            \text{where } \deref{\loc} = \env \text{ after transition}\\
-                          \membermeta &\text{ is a method with body $\stmt$ and formals $\formals$},\\
-                          \env &= \ext{\env_{empty}}{\this}{\val}
-         \end{aligned}}
-    \end{multlined}
-    \label{econtconf:dpropertyget-tearoff}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-            {\contconf{\DPropertyGetK}{\val}}%
-            {\execconf{\stmt}{\env}{[]}{[]}{\DirectPropertyGet{\val}{\membermeta} :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\begin{aligned}
-                \text{where } \membermeta &\text{ is getter with statement body $\stmt$},\\
-                              \env &= \ext{\env_{empty}}{\this}{\val},\\
-                              \scont &= \ExitSK{\nnull}
-             \end{aligned}}
-    \end{multlined}
-    \label{econtconf:dpropertyget-getter}\\
-    &\begin{multlined}
-        \cesktranswhere%
-        {\contconf{\DPropertyGetK}{\val}}%
-        {\contconf{\econt}{\deref{\val[\membermeta]}}}%
-        {\text{where $\membermeta$ is a field }}
-    \end{multlined}
-    \label{econtconf:dpropertyget-field}
-    \end{align}
-    \caption{The CESK-transition function for ValuePassingConfiguration: instance property extraction}
-    \label{figure:econtconf:instance-property-extraction}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Property Extraction}
-\label{subsubsec:property-extraction}
-
-\kernel{} allows access of a member as a property, which can be either getter access, which executes the getter, or method extraction, which converts a method into a closure, also known as tear-off.
-Property extraction is supported with $\PropertyGet{\expr}{\idmeta}$.
-The evaluation of this expression is shown in \eqref{eval:propertyget}.
-After the evaluation of the receiver expression to a value $\val$, the property $\idmeta$ is looked up in methods, getters and implicit getters for the value $\val$.
-Let $\membermeta$ be the instance member result of such successful lookup below and in \eqref{econtconf:propertyget-field}, \eqref{econtconf:propertyget-getter} and \eqref{econtconf:propertyget-tearoff}.
-The evaluation of the expression proceeds as follow:
-
-\begin{itemize}
-    \item $\membermeta$ is a method tear-off\\
-        When $\membermeta$ is a method tear-off, the evaluation of the property extraction expression proceeds as shown in \eqref{econtconf:propertyget-tearoff}.
-        The member is converted to a value $\val \in \dfunval$, capturing the method body, its formal parameters and an environment with a $\this$ binding to a location that stores the current instance value and the expression continuation $\econt$ is applied to it.
-
-    \item $\membermeta$ is a getter\\
-        When $\membermeta$ is a getter, the body of the getter is executed as shown in the CESK-transition function step \eqref{econtconf:propertyget-getter}.
-        The statement body is executed with an environment with a $\this$ binding to a location that stores the current instance value and no statement continuation.
-        A getter should always contain a reachable return statement.
-
-    \item $\membermeta$ is an implicit getter for a field $\idmeta$\\
-        When $\membermeta$ is an implicit getter for field $\idmeta$ it is immediately applied on the receiver expression.
-        Application of implicit getter on some instance value returns the value stored in the location this getter contains.
-        Afterwards the continuation expression is applied to the value, as shown in \eqref{econtconf:propertyget-field}.
-
-\end{itemize}
-
-If the lookup fails, a ``NoSuchMethod'' will be thrown, as shown in \eqref{econtconf:propertyget-nosuchmethod}.
-
-
-\subsubsection{Direct Property Extraction}
-\label{subsubsec:direct-property-extraction}
-
-In \kernel{} a property can be accessed without lookup, by direct reference to the member $\membermeta$.
-This implies that the lookup step above is bypassed.
-Similar to Section~\ref{subsubsec:property-extraction}, this expression can be either getter access, which executes the getter, or method extraction, which converts a method into a closure, also known as tear-off.
-The evaluation proceeds as follows:
-
-\begin{itemize}
-    \item $\membermeta$ is an instance method\\
-        When $\membermeta$ is an instance method the evaluation of the direct property extraction expression proceeds in the same way as in Section~\ref{subsubsec:property-extraction}.
-        The exact CESK-transition function for this case is shown in \eqref{econtconf:dpropertyget-tearoff}.
-
-    \item $\membermeta$ is an instance getter\\
-        When $\membermeta$ is an instance getter, the statement body of the getter is executed, as described in the previous section with the CESK-transition function shown in \eqref{econtconf:dpropertyget-getter}.
-
-    \item $\membermeta$ is an instance field\\
-        When $\membermeta$ is an instance field, the evaluation proceeds as shown in \eqref{econtconf:dpropertyget-field}.
-
-\end{itemize}
-
-%%
-% Figure showing the CESK-transition function starting from
-% ValuePassingConfiguration for instance property assignment.
-%%
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\PropertySetK}{\val_0}}%
-        {\evalconf{\expressionmeta_1}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-        {\text{where $\econt' = \PropertySetVK$}}
-    \end{multlined}
-    \label{econtconf:propertyset-val}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\PropertySetVK}{\val_1}}%
-        {\execconf{\stmt}{\env}{[]}{[]}{(\PropertySet{\val_0}{\idmeta}{\val_1}) :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-        {\begin{aligned}
-            \text{where } \lookupMember(\class(\val_0),\,\idmeta) &= \text{Setter}(A, S),\\
-                          \env &= \ext{\env_{empty}}{\this :: \formal :: []}{\val_0 :: \val_1 :: []},\\
-                          \scont &= \ExitSK{\val_1}\\
-         \end{aligned}}
-    \end{multlined}
-    \label{econtconf:propertyset-setter}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\PropertySetVK}{\val}}%
-        {\contconf{\econt}{\val_1}}%
-        {\begin{aligned}
-            \text{where } \lookupMember(\class(\val_0),\,\idmeta) &= \text{Setter}(i \in \NN),\\
-                          \deref{(\getfield(\val_0,\, i))} &= \val \text{ after the transtion}\\
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:propertyset-field}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\DirectPropertySetK}{\val_0}}%
-        {\evalconf{\expressionmeta_1}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-        {\parbox{10cm}{where $\econt' = \DPropertySetVK$}}
-    \end{multlined}
-    \label{econtconf:dpropertyset-val}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\DPropertySetVK}{\val_1}}
-        {\execconf{\stmt}{\env}{\lbls}{\clbls}{(\DirectPropertySet{\val_0}{\membermeta}{\val_1}) :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}
-        {\begin{aligned}
-            \text{where } \membermeta &= \text{Setter}(\formal, \stmt),\\
-            \env &= \ext{\env_{empty}}{\this :: \formal :: []}{\val_0 :: \val_1 :: []}\\
-            \scont &= \ExitSK{\val_1}
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:dpropertyset-setter}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\DPropertySetVK}{\val}}%
-        {\contconf{\econt}{\val}}%
-        {\begin{aligned}
-        \text{where } \membermeta &= \text{Setter}(i \in \NN),\\
-                      \deref{(\getfield(\val_0,\, i))} &= \val \text{ after the transtion}\\
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:dpropertyset-field}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\SuperPropertySetK}{\val}}
-        {\execconf{\stmt}{\env'}{\lbls}{\clbls}{(\SuperPropertySet{\idmeta}{\val}) :: \strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}
-        {\begin{aligned}
-        \text{where } c &= \superclass(\class(\deref{(\env(\this))}))\\
-                      \lookupMember(c,\,\idmeta) &= \text{Setter}(\formal, \stmt)\\
-                      \env' &=  \ext{\env_{empty}}{\this :: \formal :: []}{\deref{(\env(\this))} :: \val :: []}\\
-                      \scont &= \ExitSK{\val}
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:superpropertyset-setter}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\SuperPropertySetK}{\val}}%
-        {\contconf{\econt}{\val}}%
-        {\begin{aligned}
-            \text{where } c &= \superclass(\class(\deref{(\env(\this))}))\\
-                          \lookupMember(c,\,\idmeta) &= \text{Setter}(i \in \NN)\\
-                          \deref{(\getfield(\deref{(\env(\this))},\, i))} &= \val \text{ after the transtion}\\
-        \end{aligned}}
-    \end{multlined}
-    \label{econtconf:superpropertyset-field}
-    \end{align}
-    \caption{The CESK-transition function for ValuePassingConfiguration: instance property assignment}
-    \label{figure:instance-property-assignment-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Property Assignment}
-\label{subsubsec:property-assignment}
-
-An assignment in \kernel{} results with the invocation of a setter.
-The evaluation of a property assignment proceeds as follows.
-First, the left-hand side expression, i.e. the receiver expression, is evaluated as shown in \eqref{eval:propertyset}.
-Afterwards, the right-hand side expression is evaluated, as shown in \eqref{econtconf:propertyset-val}.
-After the evaluation of the receiver expression to a value $\val_0$ and the argument to value $\val_1$, the property $\idmeta$ is looked up in the properties for the value $\val_0$.
-and implicit setters for the value $\val_0$.
-Let $\membermeta$ be the result of such lookup.
-The evaluation proceeds as follows:
-
-\begin{itemize}
-    \item $\membermeta$ is a setter invocation\\
-        When $\membermeta$ is an invocation of a setter with body $\stmt$ and formal parameter $\formal$, the evaluation proceeds by executing the body in the environment which binds $\this$ to a location that contains $\val_0$ and the formal parameter $\formal$ to a location that contains $\val_1$.
-        This is shown in the CESK-transition \eqref{econtconf:propertyset-setter}.
-        Note that we add the special statement continuation $\ExitSK{\val_1}$, that will apply the value $\val_1$ to the current expression continuation.
-
-    \item $\membermeta$ is a field\\
-        When the lookup results with a field, the implicit setter for the field is invoked with the receiver value and the field value as shown in \eqref{econtconf:propertyset-field}.
-        The $\{\membermeta\}(\val_0, \val_1)$ is the implicit setter for the field $\membermeta$ which is a function in the domain $\dval \times \dval \rightarrow \dval$.
-        The value returned by the implicit function is $\val_1$.
-
-\end{itemize}
-
-
-\subsubsection{Direct Property Assignment}
-\label{subsubsec:direct-property-assignment}
-
-In \kernel{} a property can be set without lookup, by direct reference to the member of the instance.
-This implies that the lookup step described in \ref{subsubsec:property-assignment} above is bypassed.
-The evaluation of direct property assignment proceeds by evaluating the right-hand side expression, i.e. the receiver expression as shown in \eqref{eval:dpropertyset}.
-Afterwards, the evaluation continues with the left-hand side expression as shown in \eqref{econtconf:dpropertyset-val}.
-After evaluating the receiver expression to $\val_0$ and the argument expression to $\val_1$, depending on $\membermeta$, the evaluation continues as follows:
-
-\begin{itemize}
-    \item $\membermeta$ is an instance setter\\
-        When $\membermeta$ is an instance setter with body $\stmt$ and formal parameter $\formal$, the evaluation of the expression proceeds with execution of the body with an environment binding $\this$ to a location containing $\val_0$ and the formal parameter $\formal$ to a location storing $\val_1$.
-
-    \item $\membermeta$ is a field\\
-        When $\membermeta$ is a field the value stored at location $\val_0[\membermeta]$ is modified to store value the argument expression evaluates to, $\val_1$, as shown in \eqref{econtconf:dpropertyset-field}.
-
-\end{itemize}
-
-
-\subsubsection{Super Property Get}
-\label{subsubsec:super-property-get}
-
-\kernel{} allows access of a superclass member as a property, which can be either getter access, which executes the getter, or method extraction, which converts a method into a closure.
-Accessing a superclass member is accessed with the expression $\SuperPropertyGet{\idmeta}$ evaluated with the corresponding components: $\env$, $\strace$, $\handler$, $\cstrace$, $\cex$, $\econt$.
-Let $\val = \deref{(\env(\this))}$, $C = \superclass(\val)$ and $\membermeta$ the result of looking up $\idmeta$ in $C$.
-The evaluation of a super property extraction proceeds as follows:
-
-\begin{itemize}
-    \item $\membermeta$ is a method tear-off\\
-        When $\membermeta$ is a method tear-off, the evaluation of super property extraction expression proceeds as shown in \eqref{eval:superpropertyget-tearoff}.
-        The member with body $\stmt$ and formal parameters $\formals$ is converted to a value $\val \in \dfunval$.
-        The value $\val$ captures the method body, its formal parameters and an environment with a $\this$ binding to a location that stores the current instance value and the expression continuation $\econt$ is applied to it.
-
-    \item $\membermeta$ is an instance getter\\
-        When $\membermeta$ is an instance getter, the statement body of the getter is executed.
-        The CESK-transition is shown in \eqref{eval:superpropertyget-getter}.
-
-    \item $\membermeta$ is an instance field\\
-        When $\membermeta$ is an instance field, the evaluation proceeds as shown in \eqref{eval:superpropertyget-field}.
-
-\end{itemize}
-
-
-\subsubsection{Super Property Assignment}
-\label{subsubsec:super-property-assignemnt}
-
-\kernel{} supports assignment of a super member with the expression $\SuperPropertySet{\idmeta}{\expressionmeta}$.
-Let $\val' = \deref{(\env(\this))}$, $C = \superclass(\val')$ and $M$ the result of looking up $\idmeta$ in $C$.
-The evaluation proceeds with evaluation of the right-hand side expression as shown in \eqref{eval:superpropertyset}.
-After the evaluation of the argument expression to a value $\val$, depending on $\membermeta$, the evaluation continues as follows:
-
-\todo{regroup all property extraction together since text is similar}
-\begin{itemize}
-    \item $\membermeta$ is an instance setter\\
-        When $\membermeta$ is an invocation of a setter with body $\stmt$ and formal parameter $\formal$, the evaluation proceeds by executing the body in the environment which binds $\this$ to a location that contains $\deref{(\env(\this))}$ and the formal parameter $\formal$ to a location that contains $\val$.
-        This is shown in the CESK-transition \eqref{econtconf:superpropertyset-setter}.
-        Note that we add the special statement continuation $\ExitSK{\val_1}$, that will apply the value $\val$ to the current expression continuation.
-
-    \item $\membermeta$ is a field\\
-        When the lookup results with a field, the implicit setter for the field is invoked with the receiver value $\deref{(\env(\this))}$ and the field value $\val$, as shown in \eqref{econtconf:superpropertyset-field}.
-
-\end{itemize}
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-        \cesktranswheresplit%
-            {\evalconf{\InstanceMethodInvocation{\expressionmeta}{\idmeta}{\expressionsmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\econt' = \InstanceMethodK{\InstanceMethodInvocation{\expressionmeta}{\idmeta}{\expressionsmeta} :: \strace}}
-        \end{multlined}
-        \label{eval:instancemethod}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-            {\evalconf{\DInstanceMethodInvocation{\expressionmeta}{\membermeta}{\expressionsmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evalconf{\expressionmeta}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-            {\econt' = \DInstanceMethodK{\DInstanceMethodInvocation{\expressionmeta}{\membermeta}{\expressionsmeta} :: \strace}}
-        \end{multlined}
-        \label{eval:dinstancemethod}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-            {\evalconf{\SuperMethodInvocation{\idmeta}{\expressionsmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-            {\evallistconf{\expressionsmeta}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-            {\acont = \SuperMethodA{\SuperMethodInvocation{\idmeta}{\expressionsmeta} :: \strace}}
-        \end{multlined}
-        \label{eval:superinstancemethod}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-            {\evalconf{\new Q(\exprs)}{\env}{st}{cex}{cst}{\econt}}%
-            {\evallistconf{\exprs}{\env}{st}{cex}{cst}{\acont'}}%
-            {\acont' = \ConstructorA{Q}{\new Q(\exprs) :: \strace}{\econt}}
-        \end{multlined}
-        \label{eval:new}
-    \end{align}
-    \caption{The CESK-transition function for EvalConfiguration: instance method and constructor invocation}
-    \label{figure:instance-method-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\InstanceMethodK{\strace}}{\val}}%
-        {\evallistconf{\expressionsmeta}{\env}{\strace}{\cstrace}{\cex}{\acont'}}%
-        {\text{where $\acont' = \InstanceMethodA$}}
-    \end{multlined}
-    \label{econtconf:instancemethod}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\DInstanceMethodK{\strace}}{\val}}%
-        {\evallistconf{\expressionsmeta}{\env}{\strace}{\cstrace}{\cex}{\acont'}}%
-        {\text{where $\acont' = \DInstanceMethodA$}}
-    \end{multlined}
-    \label{econtconf:dinstancemethod}
-    \end{align}
-    \caption{The CESK-transition function for ValuePassingConfiguration: instance method and constructor invocation}
-    \label{figure:instance-method-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    &\begin{multlined}
-            \cesktranswheresplit*%
-            {\contconf{\InstanceMethodA}{\val{s}}}%
-            {\execconf{\stmt}{\env}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\begin{aligned}
-                \text{where } \membermeta &= class(\val).lookup(\idmeta)\text{ is an instance method with body $\stmt$ and formals $\formals$},\\
-                              \scont &= \ExitSK{\nnull},\\
-                              \env &= \ext{\env_{empty}}{\this :: \formals}{\val :: \val{s}}
-            \end{aligned}}
-    \end{multlined}
-    \label{acontconf:instancemethod}\\
-    &\begin{multlined}
-            \cesktranswheresplit*%
-            {\contconf{\DInstanceMethodA}{\val{s}}}%
-            {\execconf{\stmt}{\env}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\begin{aligned}
-                \text{where } \stmt &\text{ is the statement body and $\formals$ are the formal parameters of the instace method $\membermeta$},\\
-                              \scont &= \ExitSK{\nnull},\\
-                              \env &= \ext{\env_{empty}}{\this :: \formals}{\val :: \val{s}}
-            \end{aligned}}
-    \end{multlined}
-    \label{acontconf:dinstancemethod}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\SuperMethodA{\strace}}{\val{s}}}%
-        {\execconf{\stmt}{\env'}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-        {\begin{aligned}
-            \text{where } c &= \superclass(\class(\val))\\
-                          \membermeta &= \lookupMember(c,\,\idmeta)\text{ is an instance method with body $\stmt$ and formals $\formals$},\\
-                          \scont &= \ExitSK{\nnull},\\
-                          \env' &= \ext{\env_{empty}}{\this :: \formals}{\deref{(\env(\this))} :: \val{s}}        \end{aligned}}
-    \end{multlined}
-    \label{acontconf:superinstancemethod}
-    \end{align}
-    \caption{The CESK-transition function for ApplicationConfigurations}
-    \label{figure:instance-method-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-    \cesktrans%
-        {\scontconf{\ExitSK{\val}}{\env}}%
-        {\contconf{\econt}{\val}}
-    \end{align}
-    \caption{The CESK-transition function for ForwardConfigurations}
-    \label{figure:instance-method-evalconfigs}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Instance Method Invocation}
-\label{subsubsec:instance-method-invoc}
-
-Method invocation is supported with $\InstanceMethodInvocation{\expressionmeta}{\idmeta}{\expressionsmeta}$.
-
-The evaluation of instance method invocation proceeds with the evaluation of the left-hand side expression, i.e. the receiver expression as shown in \eqref{eval:instancemethod}.
-As shown in the CESK-transition \eqref{econtconf:instancemethod}, the argument expressions evaluate to a list of values.
-After the evaluation of the receiver expression to a value $\val$, we proceed with evaluation of the argument expressions.
-
-After the evaluation of the receiver expression to a value $\val$ and the argument expressions to $\vals$, the instance method $\idmeta$ is looked up in the instance methods for the value $\val$.
-Let $\membermeta$ be the result of such lookup with statement body $\stmt$ and formal parameters $\formals$.
-
-The body $\stmt$ is then executed with an environment binding $\this$ to a location storing the instance value $\val$ and the formal parameters to fresh locations each storing the values in $\vals$.
-The CESK-transition is shown in \eqref{acontconf:instancemethod}.
-
-We add $\ExitSK{\nnull}$ as next statement continuation.
-When a $\return$ statement is missing in the statement body $\stmt$ of the instance method $\membermeta$, the statement continuation $\ExitSK{\val}$ ensures that the execution will proceed to the corresponding expression continuation, in this case with $\val = \nnull$.
-
-
-\subsubsection{Direct Instance Method Invocation}
-\label{subsubsec:direct-instance-method-invoc}
-
-Direct method invocation allows invocation of instance method by providing directly the member method to be invoked and bypass the lookup step described in Section~\ref{subsubsec:instance-method-invoc} above.
-The evaluation of the direct instance method invocation proceeds with the evaluation of the left-hand side expression, i.e. the receiver expression as shown in \eqref{eval:dinstancemethod}.
-After the evaluation of the receiver expression to a value $\val$, the evaluation proceeds with the evaluation of the argument expressions as shown in \eqref{acontconf:dinstancemethod}.
-The argument expressions are evaluated to a list of values $\vals$.
-The evaluation of the expression continues with the execution of the statement body in the environment that binds $\this$ to a location that stores the value $\val$ and the formal parameters $\formals$ to fresh locations storing values from $\vals$ accordingly.
-The CESK-transition is shown in \eqref{acontconf:dinstancemethod}.
-Similar to Section~\ref{subsubsec:instance-method-invoc}, $\ExitSK{\nnull}$ is added as next statement continuation.
-
-
-\subsubsection{Super Method Invocation}
-\label{subsubsec:super-method-invoc}
-
-Super method invocation is supported with $\SuperMethodInvocation{\idmeta}{\expressionsmeta}$.
-We first evaluate the argument expressions, as shown in the CESK-transition \eqref{eval:superinstancemethod}.
-After the evaluation of the argument expressions to list of values $\vals$ for the super method invocation, the evaluation continues with lookup for $\idmeta$ in the members of the value bound to $\this$ in the current environment.
-Let $\val = \deref{(\env(\this))}$, $C = \superclass(\val)$ and $M$ the result of looking up $\idmeta$ in $C$.
-Let $\stmt$ be the statement body and $\formals$ the formal parameters for $\membermeta$.
-The statement $\stmt$ is executed in an environment binding $\formals$ to the locations containing the values in $\vals$ and $\this$ binding to location containing the same value bound to $\this$ in the current environment.
-Similarly to Section~\ref{subsubsec:instance-method-invoc}, $\ExitSK{\val}$ is added as next statement continuation.
-
-
-\subsubsection{New Instance Creation}
-\label{subsubsec:new-instance}
-
-\kernel{} supports new instance creation with constructor invocation.
-A constructor can be run with $\new$ expression or when it is a target of an initializer.
-\kernel{} also supports redirecting constructors, which invoke a specified target constructor without modifying the newly allocated instance.
-
-A constructor has an associated class definition, an initializer list, $Izs$, with various kinds of initializers, formal parameters, $\formals$, and a statement body $\stmt$.
-
-We support the following kinds of initializers:
-
-\begin{itemize}
-    \item $\FieldInitializer{\expressionmeta}$ --- Field initializer for field $\field$ with expression $\expressionmeta$.
-        Field initializers modify the field of the newly allocated instance to store the value the expression evaluates to.
-    \item $\LocalInitializer{\expressionmeta}$ --- Local initializer for variable $\varmeta$ with expression $\expressionmeta$.
-        Local initializers extend the environment for the initializer list of the constructor with a binding of variable declaration $\varmeta$ to the value the expression evaluates to.
-    \item $\RedirectingInitializer{G}{\expressionsmeta}$ --- Redirecting initializer with target constructor $G$ and actual arguments for running the constructor $\expressionsmeta$.
-        Redirecting initializer appears last in the list of initializers of a constructor.
-        When the last initializer in the initializer list of a constructor is a redirecting initializer, we say the constructor is a redirecting constructor.
-        The redirecting constructor has an empty statement body.
-        When a redirecting constructor is run, only the initializer list of the constructor is executed.
-        Note that in other cases we first initialize instance fields in the immediately enclosing class that have initializer expressions before proceeding to execution of the initializer list.
-        Fields for the newly allocated instance from the immediately enclosing class are initialized only when a non-redirecting constructor is run.
-        This ensures that side effects from evaluating the actual arguments for the target constructor of the redirecting constructor occur before any side effects from initializing the fields in the immediately enclosing class.
-    \item $\SuperInitializer{G}{\expressionsmeta}$ --- Super initializer with target constructor $G$ and actual arguments for running the constructor $\expressionsmeta$.
-
-        Super initializers appear last in the initializer list and all non-redirecting constructors other then the constructor for the object class, have a super initializer as the last in their initializer list.
-        Before invoking the target constructor of the super initializer, all non initialized fields in the immediately enclosing class are set to $\NullLiteral$ to ensure that all fields have been initialized before they are used.
-\end{itemize}
-
-
-A new object value is allocated only a constructor is run with $\new$, i.e. invoked, otherwise we say that the constructor is run to further initialize an already allocated object value.
-
-Let $\new(Q(\expressionsmeta))$ be an expression invokes a constructor $Q$ to produce a new instance.
-The invocation of a constructor $Q$ proceeds by evaluating the actual argument expressions as shown in \eqref{eval:new}.
-After the evaluation of the argument expressions for the invocation, a fresh instance is allocated by creating a value $\val \in \dobjval$ (see Section~\ref{subsec:object-values} for details on $\dobjval$).
-The execution of the constructor proceeds as follows:
-
-\begin{align*}
-    &\begin{multlined}
-    \cesktranswheresplit*%
-        {\acontconf{\ConstructorA{Q}{\strace}{\econt}}{\val{s}}}%
-        {\contconf{\InitK{Q}{\env'}{\scont}}{\val}}%
-        {\begin{aligned}
-            \val &= \objval \in \dobjval,\\
-            class &\text{ is class component of the constructor }Q,\\
-            fields &\in \mlist{\dlocation} \text{ is a list of fresh locations in the store},\\
-            \env' &= \extend(\env_{empty}, \formals, \val{s}),\\
-            \scont &= \NewSK{\econt}{\loc} \text{ with $\loc$ a new location such that $\deref{\loc}=\val$}
-        \end{aligned}}
-    \end{multlined}
-\end{align*}
-
-We introduce a new statement continuation, $\NewSK{\econt}{\loc}$ which captures the expression continuation that will be eventually applied to the newly allocated value after the execution of the statement body of the constructor.
-The CESK-transition from the corresponding ForwardConfiguration is shown below:
-\begin{align*}
-    &\cesktrans{\scontconf{\NewSK{\econt}{\loc}}{\env}}{\contconf{\econt}{\deref{\loc}}}
-\end{align*}
-
-Let $initializer$ be the last initializer in the list of initializers, $Izs$, of constructor $Q$.
-When $initializer$ is a redirecting initializer to some target constructor $G$, then execution of constructor $Q$'s initializer list,  $Izs$, proceeds immediately.
-When the redirecting initializer is the only initializer in the list, the execution proceeds as follows:
-\begin{align*}
-    &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\InitK{Q}{\env}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-            {\begin{aligned}
-                \text{where } Izs &= \RedirectingInitializer{G}{\exprs} :: [],\\
-                              \acont &= \RedirectingA{G}{\loc}{\scont},\\
-                              \deref{\loc} &= \val
-             \end{aligned}}
-    \end{multlined}
-\end{align*}
-Otherwise, the redirecting constructor $Q$ has other initializers in the initializer list.
-The redirecting constructor can have only local initializers in the list.
-The rules for executing the initializer list of redirecting and non-redirecting constructors are the same.
-The other initializers for redirecting constructor are introduced by transformations that only introduce local initializers.
-
-The CESK-transition starting form the corresponding ValuePassingConfiguration proceeds with the first initializer in the list, denoted as $fi$ below:
-\begin{align*}
-    &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\InitK{Q}{\env}{\scont}}{\val}}%
-            {\evalconf{\expr}{\env}{\strace}{\cex}{\cstrace}{\econt}}%
-            {\begin{aligned}
-                \text{where } fi &= \LocalInitializer{\expr} + \FieldInitializer{\expr},\\
-                              fi &\text{ is first initializer in }Izs,\\
-                              \econt &= \InitializerK{Izs}{\val}{\env}{\scont}
-             \end{aligned}}
-    \end{multlined}
-\end{align*}
-
-Otherwise, $Q$ is a non-redirecting generative constructor, and execution of $Q$ proceeds with evaluation of field initializers in the immediately enclosing class.
-Let $Q$ be a non-redirecting constructor below.
-
-\begin{align*}
-    &\begin{multlined}
-        \cesktranswheresplit%
-            {\contconf{\InitK{Q}{\env}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-            {\begin{aligned}
-                \text{where }   \env'  &= \ext{\env}{\this}{\val},\\
-                                \exprs &= \text{initializer expressions for instance fields},\\
-                                \deref{\loc} &= \val,\text{ a fresh location that stores $\val$}\\
-                \acont &= \FieldsA{Q}{\loc}{\env}{\scont'},\\
-                                \scont' &= \BodySK{\stmt_{body}}{\env'}{\scont}.
-            \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-            {\acontconf{\RedirectingA{G}{\loc}{\scont}}{\val{s}}}%
-            {\contconf{\InitK{\synt{G}}{\env'}{\scont}}{\val}}%
-        {\text{where $\deref{\loc} = \val$, $\env' = \extend(\env_{empty}, \formals, \val{s})$}}.
-    \end{multlined}
-\end{align*}
-
-
-To further initialize the new instance, the body of the constructor will be eventually executed, after the execution of the instance field initializers, the constructor initializer list and its super constructor.
-To support this, we add a new statement continuation, BodySK, that captures the constructor body statement, the environment for the execution of the body, the error handlers and stack trace, and the next statement continuation.
-We add the newly created statement continuation as next continuation for the execution of the instance field initializers, the constructor initializer list and the super constructor.
-Note that the statement continuation for the body of the constructor is not added when the constructor is redirecting, since redirecting constructors do not have a body.
-The CESK-transition for this statement continuation is shown below/
-
-\begin{align*}
-    &\cesktrans%
-        {\scontconf{\BodySK{\stmt}{\env}{\scont}}{\_}}%
-        {\execconf{\stmt}{\env}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}.
-\end{align*}
-
-The application continuation applied on the evaluated expressions for the instance field initializers updates the values stored in the locations for each field  of the object value.
-An update of field $\field_i$, stored at location $\loc' = (\deref{\loc})[i]$ with value $\val_i$ is expressed as $\update((\deref{\loc}[i],\, \val_{i})$, so the following holds $\deref{\loc'} = \deref{(\deref{(\loc)}[i])} = \val_{i}$ after the update.
-
-After the update of the values stored in the field locations of the object value, the application continuation will produce the next configuration.
-The next configuration is produced depending on the initializer list of the constructor.
-We consider multiple cases:
-\begin{itemize}
-    \item The initializer list is empty, $Izs = []$.
-        Note that this can be true only for the superclass `object`.
-        All other constructors will have at least one initializer, $\SuperInitializer{G}{\expressionsmeta}$ that targets some constructor $G$.
-        The CESK-transition for the case when the initializer list is empty is shown below:
-        \begin{align*}
-            &\begin{multlined}
-                \cesktranswheresplit%
-                {\acontconf{\FieldsA{Q}{\loc}{\env}{\scont}}{\val{s}}}%
-                {\scontconf{\scont}{\env}}%
-                {\text{where $\deref{(\deref{(\loc)}[i])}= \val_{i}, \forall \field_i \in Fs, \forall \val_i \in \val{s}$}}.
-            \end{multlined}
-        \end{align*}
-    \item The initializer list contains at least one initializer with an expression to evaluate.
-        This initializer is a $\FieldInitializer{\expressionmeta}$ or a $\LocalInitializer{\expressionmeta}$.
-        If the initializer list contains at least two initializers, we can assume that the next initializer is as described above.
-        The CESK-transition function for this case is shown below:
-        \begin{align*}
-            &\begin{multlined}
-                \cesktranswheresplit%
-                {\acontconf{\FieldsA{Q}{\loc}{\env}{\scont}}{\val{s}}}%
-                {\evalconf{\expr}{\env}{st}{cex}{cst}{\econt'}}
-                {\begin{aligned}
-                   \text{where } \deref{(\deref{\loc[i]})} &= \val_{i}, \forall \field_i \in Fs, \forall \field_i \in \val{s},\\
-                                 \econt' &= \InitializerListEK{Q}{k}{\loc}{\env}{\scont},\\
-                                 k &= 0 \text{ is the index of the initializer whose expression is evaluated in the next step},\\
-                                 \expressionmeta &\text{ is the expression from $\FieldInitializer{\expressionmeta}$ or $\LocalInitializer{\expressionmeta}$}
-                \end{aligned}}
-            \end{multlined}
-        \end{align*}
-
-    \item Otherwise, there is only one initializer in the initializer list and it is a $\SuperInitializer{G}{\expressionsmeta}$.
-        This is the case because the fields are initialized only when a non-redirecting constructor is run.
-        Otherwise, the initializer is a super initializer, $\SuperInitializer{G}{\exprs}$:
-        \begin{align*}
-            \cesktranswheresplit%
-            {\acontconf{\FieldsA{Q}{\loc}{\env}{\scont}}{\val{s}}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-            {\begin{aligned}
-                \text{where } \deref{\deref{\loc[\field_i]}} &= \val_{i}, \forall \field_i \in Fs, \forall \val_i \in \val{s},\\
-                \acont &= \SuperA{G}{\loc}{\scont}
-            \end{aligned}}
-        \end{align*}
-\end{itemize}
-
-The CESK-transition functions starting in an ValuePassingConfiguration, with an initializer list expression continuation are described below.
-
-When the current initializer being executed is a $\LocalInitializer{\expressionmeta}$, we have the following cases:
-\begin{align*}
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\InitializerListEK{Q}{k}{\env}{\loc}{\scont}}{\val}}%
-            {\scontconf{\scont}{\env'}}%
-        {\begin{aligned}
-            \text{where } \env' &= \ext{\env}{\variablemeta}{\val},\\
-                          Izs &\text{ is the initializer list of the constructor $Q$},\\
-                          Izs[k] &= \LocalInitializer{\expressionmeta},\\
-                          k+1 &\geq length(Izs)
-        \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\InitializerListEK{Q}{k}{\env}{\loc}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env'}{\strace}{\cstrace}{\cex}{\acont}}%
-        {\begin{aligned}
-            \text{where } \env' &= \ext{\env}{\variablemeta}{\val},\\
-                          Izs &\text{ is the initializer list of the constructor $Q$},\\
-                          Izs[k] &= \LocalInitializer{\expressionmeta},\\
-                          \acont &= \SuperA{G}{\loc}{\scont},\\
-                          Izs[k+1] &= \SuperInitializer{G}{\exprs},\\
-         \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\InitializerListEK{Q}{k}{\env}{\loc}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env'}{\strace}{\cstrace}{\cex}{\acont}}%
-        {\begin{aligned}
-            \text{where } \env' &= \ext{\env}{\variablemeta}{\val},\\
-                          Izs &\text{ is the initializer list of the constructor $Q$},\\
-                          Izs[k] &= \LocalInitializer{\expressionmeta},\\
-                          \acont &= \RedirectingA{G}{\loc}{\scont},\\
-                          Izs[k+1] &= \RedirectingInitializer{G}{\exprs}
-         \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\InitializerListEK{Q}{k}{\env}{\loc}{\scont}}{\val}}%
-            {\evalconf{\expri{1}}{\env'}{st}{cex}{cst}{\econt'}}%
-        {\begin{aligned}
-            \text{where } \env' &= \ext{\env}{\variablemeta}{\val},\\
-                          Izs &\text{ is the initializer list of the constructor $Q$},\\
-                          Izs[k] &= \LocalInitializer{\expressionmeta},\\
-                          Izs[k+1] &= \LocalInitializer{\expressionmeta_1} \text{ or }\FieldInitializer{\expressionmeta_1},\\
-                          \econt' &= \InitializerListEK{Izs}{k+1}{\loc}{\env'}{\scont}
-        \end{aligned}}
-    \end{multlined}
-\end{align*}
-
-Note that when a local initializer is last in the initializer list, the environment resulted after the transition is discarded.
-However, the corresponding expression has to be executed, because of side effects.
-
-
-When the current initalizer being executed is a $\FieldInitializer{\expressionmeta}$, we have the following cases:
-
-\begin{align*}
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\InitializerListEK{Q}{k}{\loc}{\env}{\scont}}{\val}}%
-            {\scontconf{\scont}{\env'}}%
-        {\begin{aligned}
-            \text{where } \deref{((\deref{\loc})[i]}) &= {\val}, i \in \NN \text{ s.t $i$ is the position of $\field$ in fields of $\deref{\loc}$} \\
-                          Izs[k] &= \FieldInitializer{\expressionmeta}
-        \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\InitializerListEK{Q}{k}{\loc}{\env}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-        {\begin{aligned}
-            \text{where } \deref{((\deref{\loc})[i]}) &= {\val}, i \in \NN \text{ s.t $i$ is the position of $\field$ in fields of $\deref{\loc}$} \\
-                          Izs[k] &= \FieldInitializer{\expressionmeta}\\
-                          \acont &= \SuperA{G}{\loc}{\scont},\\
-                          Izs[k+1] &= \SuperInitializer{G}{\exprs}
-         \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-        {\contconf{\InitializerListEK{Q}{k}{\loc}{\env}{\scont}}{\val}}%
-            {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-        {\begin{aligned}
-            \text{where } \deref{((\deref{\loc})[i]}) &= {\val}, i \in \NN \text{ s.t $i$ is the position of $\field$ in fields of $\deref{\loc}$} \\
-                          Izs[k] &= \FieldInitializer{\expressionmeta}\\
-                          \acont &= \RedirectingA{G}{\loc}{\scont},\\
-                          Izs[k+1] &= \RedirectingInitializer{G}{\exprs}
-         \end{aligned}}
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranswheresplit%
-        {\contconf{\InitializerListEK{Q}{k}{\env}{\loc}{\scont}}{\val}}%
-            {\evalconf{\expri{1}}{\env}{st}{cex}{cst}{\econt}}%
-        {\begin{aligned}
-            \text{where } \deref{((\deref{\loc})[i]}) &= {\val}, i \in \NN \text{ s.t $i$ is the position of $\field$ in fields of $\deref{\loc}$} \\
-                          Izs[k] &= \FieldInitializer{\expressionmeta}\\
-                          Izs[k+1] &= \LocalInitializer{\expressionmeta_1} \text{ or }\FieldInitializer{\expressionmeta_1},\\
-                          \econt' &= \InitializerListEK{Izs}{k+1}{\env'}{\loc}{\scont}
-        \end{aligned}}
-    \end{multlined}
-\end{align*}
-
-
-\subsection{Statement Execution}
-\label{subsec:stmt-exectution}
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\VarDeclaration{\varmeta}{\expr}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \VarDeclK{\env}{\varmeta}{\scont}$}}
-        \end{multlined}
-        \label{execconf:vardecl}\\
-        &\cesktrans%
-            {\execconf{\EmptyStatement}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\scontconf{\scont}{\env}}
-        \label{execconf:empty}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\execconf{\ExpressionStatement{\expressionmeta}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \ExpressionK{\scont}{\env}$}}
-        \end{multlined}
-        \label{execconf:expresion}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\Block{\stmt_1 :: \stmt{s}}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\execconf{\stmt_1}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont'}}%
-                {\text{where $\scont' = \BlockSK{\stmt{s}}{\env}$}}
-        \end{multlined}
-        \label{execconf:block}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\IfStatement{\expr}{\stmti{1}}{\stmti{2}}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \IfCondK{\stmti{1}}{\stmti{2}}$}}
-        \end{multlined}
-        \label{execconf:if}\\
-        &\cesktrans%
-            {\execconf{\ReturnStatement{\expr}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt}}
-        \label{execconf:return}\\
-        &\cesktrans%
-            {\execconf{\ReturnStatement{}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\contconf{\econt}{\nnull}}
-        \label{execconf:return-empty}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\DoStatement{\statementmeta}{\expressionmeta}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\execconf{\statementmeta}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont'}}%
-                {\text{where $\scont' = \WhileCondK$}}
-        \end{multlined}
-        \label{execconf:do}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\WhileStatement{\expr}{\stmt}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt', \scont' = \WhileCondK$}}
-        \end{multlined}
-        \label{execconf:while}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\ForStatement{\varmeta{s}}{\expressionmeta}{\exprs}{\statementmeta}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evallistconf{\exprs'}{\env}{\strace}{\cex}{\cstrace}{\acont}}%
-                {\parbox{\textwidth-2cm}{where $\acont = \ForInitA{\expressionmeta}$,\\
-                $\exprs' =$ initializer expressions for the list of variable declarations $\varmeta{s}$}}
-        \end{multlined}
-        \label{execconf:for}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\LabeledStatement{L}{\stmt_{L}}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\execconf{\stmt_{L}}{\env}{\lbl :: \lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\text{where $\lbl = \mathrm{Label}(L, \bcont)$, $\bcont = \mathrm{Break}(\env, \scont)$}}
-        \end{multlined}
-        \label{execconf:labeled}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\SwitchStatement{\expr}{\scases}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \SwitchK{\scases}{\clbls}$}}
-        \end{multlined}
-        \label{execconf:switch}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\execconf{\BreakStatement{L}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\breakconf{\bcont}}%
-                {\text{where $\lbl = Label(L', \bcont) \in \lbls \text{ with } L' == \synt{L}$}}
-        \end{multlined}
-        \label{execconf:break}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\execconf{\ContinueSwitchStatement{\stmt}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\switchconf{\switchcont}}%
-                {\text{where $\clbl = \continuel{\stmt'}{\switchcont} \in \clbls \text{ with } \stmt' == \stmt$}}
-        \end{multlined}
-        \label{execconf:continue}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\execconf{\FunctionDeclaration{\typemeta}{\idmeta}{\formals}{}{\stmt}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont}}%
-                {\contconf{\econt}{\val}}%
-                {\begin{aligned}
-                    \text{where } \env' &= \ext{\env}{\varmeta}{\nnull}\\
-                                  \val &= \funval{\stmt_{body}}{\formals}{\env'}\\
-                                  \deref{\env'(\varmeta)} &=\val \text{ after transition}\\
-                                  \varmeta &= \text{a variable declaration corresponding to identifier $\idmeta$}
-                \end{aligned}}
-        \end{multlined}
-        \label{execconf:function}
-    \end{align}
-    \caption{The CESK-transition function starting in ExecConfiguration}
-    \label{figure:exec}
-    \end{eqfigure}
-\end{figure}
-
-\begin{figure}
-    \begin{eqfigure}
-    \begin{align}
-        &\cesktrans%
-            {\contconf{\VarDeclK{\env}{\varmeta}{\scont}}{\val}}%
-            {\scontconf{\scont}{\ext{\env}{\varmeta}{\val}}}
-       \label{econtconf:vardecl}\\
-        &\begin{multlined}
-           \cesktranssplit%
-                {\contconf{\IfCondK{\stmti{1}}{\stmti{2}}}{\true}}%
-                {\execconf{\stmti{1}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont}}
-        \end{multlined}
-        \label{econtconf:if-true}\\
-        &\begin{multlined}
-            \cesktranssplit%
-                {\contconf{\IfCondK{\stmti{1}}{\stmti{2}}}{\false}}%
-                {\execconf{\stmti{2}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont}}
-        \end{multlined}
-        \label{econtconf:if-false}\\
-        &\begin{multlined}
-              \cesktrans%
-                  {\contconf{\WhileCondK}{\false}}%
-                  {\scontconf{\scont}{\env}}
-        \end{multlined}
-        \label{econtconf:while-false}\\
-        &\begin{multlined}
-              \cesktranswheresplit*%
-                  {\contconf{\WhileCondK}{\true}}%
-                  {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont'}}
-                  {\text{where $\scont' = \WhileCondSK$}}
-        \end{multlined}
-        \label{econtconf:while-true}\\
-        &\cesktrans%
-              {\contconf{\ForCondK}{\false}}%
-              {\scontconf{\scont}{\env}}
-        \label{econtconf:for-false}\\
-        &\begin{multlined}
-              \cesktranswheresplit*%
-                  {\contconf{\ForCondK}{\true}}%
-                  {\execconf{\scont}{\env'}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont'}}%
-                  {\text{where $\scont' = \ForSK$}}
-        \end{multlined}
-        \label{econtconf:for-true}
-    \end{align}
-    \caption{The CESK-transition function starting in ValuePassingConfiguration: statements}
-    \end{eqfigure}
-\end{figure}
-
-\begin{figure}
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-            \cesktranssplit%
-            {\scontconf{\BlockSK{\stmt :: \stmts}{\env}}{\env'}}
-            {\execconf{\stmt}{\env'}{\lbls}{\clbls}{\strace}{\handler}{\cstrace,\,\cex}{\econt}{\scont'}}
-        \end{multlined}
-        \label{scontconf:block}\\
-        &\cesktrans%
-            {\scontconf{\BlockSK{[]}{\env}}{ \_ }}%
-            {\scontconf{\scont}{\env}},
-        \label{scontconf:block-empty}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\scontconf{\WhileCondSK}{\_}}%
-                {\evalconf{\expr}{\env}{\strace}{\cstrace}{\cex}{\econt'}}
-                {\text{where $\econt' = \WhileCondK$}}
-        \end{multlined}
-        \label{scontconf:while}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\scontconf{\ForSK}{\_}}%
-                {\evallistconf{\exprs}{\env_{new}}{st}{cex}{cst}{\acont}}%
-                {\parbox{\textwidth-2cm}{where $\acont = \ForUpdatesA{\expressionmeta}{\env_{new}}$,\\
-                    $\env_{new} = \extend(\env, \varmeta{s}, \vals)$, $\vals = \{\val_i \mid \deref(\env'(\varmeta_i))\}$}}
-        \end{multlined}
-        \label{scontconf:for}
-    \end{align}
-    \caption{The CESK-transition function starting in ForwardConfiguration: statements}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Variable Declaration}
-
-Execution of a variable declaration statement proceeds by evaluating the right-hand side expression as shown in \eqref{execconf:vardecl}.
-After the evaluation of the initializer expression to a value $\val$, the corresponding environment is extended with a new binding to a location that stores the value $\val$, as shown in \eqref{econtconf:vardecl}.
-
-
-\subsubsection{Empty Statement}
-\label{subsubsec:emtpy-stmt}
-
-Execution of empty statement proceeds to the next ForwardConfiguration, as shown in \eqref{execconf:empty}.
-
-
-\subsubsection{Expression Statement}
-\label{expression-stmt}
-
-Execution of expression statement proceeds by evaluating the expression, as shown in \eqref{execconf:expresion}.
-
-
-\subsubsection{Block Statements}
-
-Execution of block statements proceeds by executing each statement of the block with the environment function after the execution of the previous statement.
-The CESK-transition function for block statements is shown in \eqref{execconf:block}, \eqref{scontconf:block} and \eqref{scontconf:block-empty}.
-
-
-\subsubsection{If Statement}
-
-Execution of conditional statements proceeds by evaluating the condition to a value, as shown in \eqref{execconf:if}.
-The expression continuation for the execution of the rest of the statement will dispatch on the value the condition expression evaluates to and produce a configuration for the execution of the next statement, as shown in \eqref{econtconf:if-true} and \eqref{econtconf:if-false}.
-
-
-\subsubsection{Return Statement}
-
-\kernel{} supports return statements with or without an expression.
-In the first case, the execution proceeds with evaluation of the return expression, as shown in \eqref{execconf:return}.
-The expression continuation component in the ExecConfiguration is the return expression continuation.
-This is the expression continuation that is applied to the value the return expression evaluates to.
-When the return expression is empty, the value $\nnull$ is applied to the return expression continuation component in the ExecConfiguration as shown in \eqref{execconf:return-empty}.
-
-\begin{figure}
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\acontconf{\ForInitA{\nnull}}{\vals}}%
-                {\execconf{\stmt}{\env'}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont'}}%
-                {\parbox{\textwidth-2cm}{where $\env' = \extend(\env, \varmeta{s}, \vals)$,\\
-                $\scont' = \ForSK$}}
-        \end{multlined}
-        \label{acontconf:forinit-nullcond}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\acontconf{\ForInitA{\expressionmeta}}{\vals}}%
-                {\evalconf{\expressionmeta}{\env'}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\parbox{\textwidth-2cm}{where $\env' = \extend(\env, \varmeta{s}, \vals)$,\\
-                $\econt' = \ForCondK$}}
-        \end{multlined}
-        \label{acontconf:forinit}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\acontconf{\ForUpdatesA{\nnull}{\env'}}{\_}}%
-                {\evalconf{\expressionmeta}{\env'}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \ForCondK$}}
-        \end{multlined}
-        \label{acontconf:forupdate-nullcond}\\
-        &\begin{multlined}
-            \cesktranswheresplit*%
-                {\acontconf{\ForUpdatesA{\expressionmeta}{\env'}}{\_}}%
-                {\evalconf{\expressionmeta}{\env'}{\strace}{\cstrace}{\cex}{\econt'}}%
-                {\text{where $\econt' = \ForCondK$}}
-        \end{multlined}
-        \label{acontconf:forupdate}
-    \end{align}
-    \caption{The CESK-transition function starting in ApplicationConfiguration: statements}
-    \end{eqfigure}
-\end{figure}
-
-
-\subsubsection{Loops}
-
-In \kernel{} there are $\dowhile$, $\forin$, $\for$ and $\while$ loop statements.
-The execution of the different loop statements is defined below:
-
-\begin{itemize}
-    \item  $\while$\\
-        The execution of  $\while$ statement loops proceeds with evaluation of the condition expression as shown in \eqref{execconf:while}.
-        The expression continuation for the execution of the remainder of the statement dispatches on the value of the condition expression.
-        The body of the while loop is executed when this value is identical to $\true$, as shown in \eqref{econtconf:while-true}.
-        Otherwise, the execution proceeds with the next ForwardConfiguration as shown in \eqref{econtconf:while-false}.
-    \item $\dowhile$\\
-        The execution of do while loop statement is similar to while loop statements.
-        First the statement body of the loop is executed as shown in \eqref{execconf:do}.
-        We add while statement continuation as next statement continuation that will evaluate the condition expression accordingly, as shown in \eqref{scontconf:while}.
-    \item $\forin$\\
-        In \kernel{}, $\forin$ loops, will be desugared into while loops and their execution will proceed as the $\while$ loop rule shown in Figure~\ref{figure:exec}.
-    \item $\for$\\
-        The execution of for loops starts with evaluation of the initializer expressions for the variable declarations in the for loop statement, as shown in \eqref{execconf:for}.
-        After the evaluation of the initializer, the application continuation is applied to extend the environment and evaluate a non null condition expression, as shown in \eqref{acontconf:forinit}.
-        When the condition expression is null, the execution of the statement proceeds to evaluation of the body of the loop, as shown in \eqref{acontconf:forinit-nullcond}.
-        After the execution of all the statements in the body of the loop, the execution proceeds to create a new environment with fresh locations for the variable declarations of the for loop.
-        That is the environment used to evaluate the update expressions, as shown in \eqref{scontconf:for}.
-        After the update step, the execution proceeds to evaluation of the condition, as in ~\eqref{acontconf:forupdate-nullcond} and \eqref{acontconf:forupdate}, depending whether there is a condition expression.
-\end{itemize}
-
-Loops $\dowhile$, $\forin$, $\for$ can be desugared to while loops with transformations performed before interpreting the program.
-
-
-\subsubsection{Labels}
-
-\kernel{} supports labelling statements, $\synt{L}: \stmt_{L}$, and breaking to L, $\bbreak \synt{L}$.
-$\bbreak \synt{L}$ completes the execution of the labelled statement and proceeds to executing the rest of the program.
-To support breaking to a label, we add a labels component, $\lbls$, to statement configurations.
-$\lbls$ represents a list of pairs mapping a labelled statement, $\synt{L}: \stmt_L$, to a break statement continuation, $\bcont$.
-Executing a labelled statement inserts a new break label, $\lbl$ in the list of labels $\lbls$.
-
-
-\subsubsection{Switch}
-
-\kernel{} supports dispatching control among a number of cases with $\switch$ statements.
-The target expression $\expr$ is evaluated and matched against the different case clauses of the switch statement.
-
-Case clauses can have multiple constant expressions and there is no implicit fall-through between cases.
-\kernel{} supports continuing to execution of a preceding case clause with continue statements where the target of the continue statement is a preceding case clause, e.g, $\continue \synt{C}$ with $\synt{C}$ = case $\expri{1..i}$: $\stmt$.
-To support continue, we add an optional $\clbls$ list, similar to the label list, which is set in a switch statement and unset otherwise.
-
-If there is a matching case clause, its statement is executed.
-A new statement continuation is added as next statement continuation that will throw when reached.
-The new statement continuation is necessary because implicit fall-through is not supported and an explicit break of the flow is required (with either of $\continue$, $\bbreak$, $\return$, $\throw$).
-
-\begin{figure}[Htp]
-  \begin{eqfigure}
-  \begin{align}
-    &\begin{multlined}
-        \cesktranswheresplit*%
-            {\contconf{\SwitchK{\scase :: \scases}{\clbls}}{\val}}%
-            {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\ExitSK{\nnull}}}%
-            {\begin{aligned}
-                \text{where } &\scase = \case \expri{1}, \dots, \expri{i} \synt{ : } \stmt,\\
-                              &\text{$\scase$ is a matching $\case$ clause}
-            \end{aligned}}
-    \end{multlined}
-    \label{econt:switch-matching}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-            {\contconf{\SwitchK{\scase :: \scases}{\clbls}}{\val}}%
-            {\contconf{\SwitchK{\scases}{\clbl :: \clbls}}{\val}}%
-            {\begin{aligned}
-                \text{where } &\text{$SC$ is a target of a $\mathrm{continue}$},\\
-                              &\clbl = \continuel{\scase}{\switchcont},\\
-                              &\switchcont = \ContinueK
-            \end{aligned}}
-    \end{multlined}
-    \label{econt:switch-continue}\\
-    &\begin{multlined}
-        \cesktranswheresplit*%
-            {\contconf{\SwitchK{\scase :: \scases}{\clbls}}{\val}}%
-            {\contconf{\SwitchK{\scases}{\clbls}}{\val}}%
-            {\text{where $SC$ is not a target of a $\mathrm{continue}$}},
-    \end{multlined}
-    \label{econt:switch-next}\\
-    &\cesktrans%
-        {\contconf{\SwitchK{[]}{\clbls}}{\val}}%
-        {\scontconf{\scont}{\env}}
-  \end{align}
-  \end{eqfigure}
-  \caption{The CESK-transition function starting in ValuePassingConfiguration: switch statements}
-  \label{fig:econt-switch}
-\end{figure}
-
-The execution of switch statements is shown in \eqref{execconf:switch}, where the target expression is evaluated to some value $\val$.
-
-In Figure~\ref{fig:econt-switch} we show how the SwitchEK is applied to the target value of the switch. 
-We consider three cases: if a switch case is a matching case clause, if it is a non-matching case clause target of a continue in a following switch case or a non-matching switch clause that is not the target of a continue.
-
-We add a CESK-transition that evaluates all the expressions in the associated switch cases.
-These expressions being constant, their evaluation has no side effects.
-
-A case clause is matching if is $\default$ or there is at least one of the constant expressions in the case clause identical to the target value of the switch.
-The CESK-transition function  matching case is shown in \eqref{econt:switch-matching}.
-
-If a non-matching $\case$ clause, $\scase$, is the target of a continue statement, it installs a new continue label.
-A new continue label is installed to support execution of its statement with the appropriate configuration when a continue to this clause is executed.
-The CESK-transition is shown in \eqref{econt:switch-continue}.
-
-If the switch case is not target of a continue, the execution of the switch statement proceeds to the next switch case, as shown in \eqref{econt:switch-next}.
-
-
-\subsubsection{Exceptions}
-
-\kernel{} supports structured exception handling with $\synt{try/catch}$ and $\synt{try/finally}$ statements.
-Exceptions are thrown with $\throw$ and $\rethrow$ expressions.
-To support throwing exceptions, we add a handler, $\handler$, and a stacktrace, $\strace$, component to expression configurations (and correspondingly, to statement configurations).
-To support $\rethrow$, we add an optional current error, $\cex$, and current stack trace, $\cstrace$, which are set when inside a catch block and unset otherwise.
-
-\begin{align*}
-    &\cesktrans%
-        {\contconf{\ThrowH{\strace}{\handler}}{\val}}%
-        {\throwconf{\handler}{\val}{\strace}}.
-\end{align*}
-
-$\synt{try/catch}$ handlers contain a list of on-catch handlers, environment, break labels, continue switch labels, exception handler, stacktrace, return continuation, and statement continuation.
-The handlers are tried in order to see if they match against the type of the exception.
-If none match, the exception is rethrown.
-
-\begin{align*}
-    \cesktranswherealign%
-        {\throwconf{\econt'}{\val}{\strace'}}%
-        {\execconf{\stmt}{\env'}{\lbls}{\clbls}{\handler}{inr(\val)}{inr(\strace')}{\econt}{\scont}}%
-        {\text{if $V$ is $T$}}\\
-    \cesktranswherealign%
-        {\throwconf{\econt'}{\val}{\strace'}}%
-        {\throwconf{\CatchH{cs}}{\val}{\strace'}}%
-        {\text{otherwise}}
-\end{align*}
-
-\noindent where $\econt' = \CatchH{(\synt{on T catch (e, s) }\stmt) :: cs}$ is a catch continuation containing a non-empty list of on-catch handlers, and $\env' = \extend(\env, e :: s :: [], \val :: \strace' :: [])$.
-
-When a catch handler with no on-catch handlers is reached, the exception is rethrown.
-
-\begin{align*}
-    &\cesktrans%
-        {\throwconf{\CatchH{[]}}{\val}{\strace'}}%
-        {\throwconf{\handler}{\val}{\strace'}}
-\end{align*}
-
-$\synt{try/finally}$ handlers contain a statement, environment, break labels, continue switch labels, exception handler, stacktrace, and return continuation.
-Note that they do not contain a statement continuation because when control falls off the end of the finally statement the exception is rethrown.
-The statement is unconditionally executed:
-
-\begin{align*}
-    &\begin{multlined}
-        \cesktranssplit%
-            {\throwconf{\FinallyK{\stmt}}{\val}{\strace'}}%
-            {\execconf{\stmt}{\env}{\lbls}{\clbls}{\handler}{inl()}{inl()}{\econt}{\RethrowSK{\val}{\strace'}{\handler}}},
-    \end{multlined}\\
-    &\cesktrans%
-        {\scontconf{\RethrowSK{\val}{\strace}{\handler}}{\_}}%
-        {\throwconf{\handler}{\val}{\strace}}.
-\end{align*}
-
-$\synt{try/catch}$ statements execute their body with a new handler.
-\begin{align*}
-    \begin{multlined}
-            \cesktranswheresplit*%
-                {\execconf{\TryCatch{\stmt}{cs}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler'}{\cex,\,\cstrace}{\econt}{\scont}}%
-                {\text{where $\handler' = \CatchH{cs}$}}
-        \end{multlined}
-\end{align*}
-
-$\synt{try/finally}$ statements execute their body with a new handler and additionally install new break and continue switch labels, a new return continuation, and a new statement continuation:
-
-\begin{align*}
-    &\begin{multlined}
-        \cesktranssplit
-            {\execconf{\TryFinally{\stmti{0}}{\stmti{1}}}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-            {\execconf{\stmti{0}}{\env}{\lbls'}{\clbls'}{\handler'}{\cex}{\cstrace}{\econt'}{\scont'}}
-    \end{multlined}
-\end{align*}
-
-\noindent where
-\[
-\begin{aligned}
-    \handler' &= \FinallyK{\stmti{0}},\\
-    \econt' &= \FinallyReturnK{\stmti{1}},\\
-    \scont' &= \FinallySK{\stmti{1}},\\
-    \lbls' &= \lbrace \mathrm{Label}(L, \bcont') \mid \mathrm{Label}(L, \bcont) \in \lbls\rbrace,\\
-    \bcont' &= \FinallyBreak{\stmti{1}}{\bcont},\\
-    \clbls' &= \lbrace \continuel{C}{\switchcont'} \mid  \continuel{C}{\switchcont} \in \clbls\rbrace,\\
-    \switchcont' &= \FinallyContinue{\stmti{1}}{\switchcont}
-\end{aligned}
-\]
-
-
-\subsubsection{Break}
-
-$\bbreak \synt{L}$ statements break from an enclosing label $\synt{L}$ and execute the break continuation corresponding to the label in the list of labels $\lbls$.
-
-\begin{align*}
-    &\cesktrans%
-        {\breakconf{\Break{\env}{\scont}}}%
-        {\scontconf{\scont}{\env}},\\
-    &\begin{multlined}
-        \cesktranssplit%
-            {\breakconf{\FinallyBreak{\stmt}{\bcont}}}%
-            {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\mathrm{BreakSK}(\bcont)}},
-    \end{multlined}\\
-    &\cesktrans%
-        {\scontconf{\mathrm{BreakSK}(\bcont)}{\env}}%
-        {\breakconf{\bcont}},
-\end{align*}
-
-\noindent where $\lbl = Label(L', \bcont) \in \lbls \text{ with } L' == \synt{L}$.
-
-
-\subsubsection{Continue}
-
-$\continue \synt{L}$ statements continue to executing the statement of a preceding case clause, labelled with $\synt{L}$ and execute the continue continuation corresponding to the label in the list of labels $\clbls$.
-
-\begin{align*}
-    &\begin{multlined}
-        \cesktranssplit%
-            {\switchconf{\ContinueK}}%
-            {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}},
-    \end{multlined}\\
-    &\begin{multlined}
-        \cesktranssplit%
-            {\switchconf{\FinallyContinue{\stmt}{\switchcont}}}%
-            {\execconf{\stmt}{\env}{\lbls}{\clbls}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\mathrm{SwitchContinueSK}(\switchcont)}},
-    \end{multlined}\\
-    &\cesktrans%
-        {\scontconf{\mathrm{SwitchContinueSK}(\switchcont)}{\env}}%
-        {\switchconf{\switchcont}},
-\end{align*}
-
-\noindent where $\clbl = \continuel{L'}{\switchcont} \in \clbls \text{ with } L' == \synt{L}$.
-
-
-\subsubsection{Function Declaration}
-
-\kernel{} supports local function declaration, where a final variable stores a function value.
-Let $F$ be a function with a body $\stmt_{body}$ and a list of formal parameters, $\formals$, and let $fun \in \dvardecl$ be the corresponding final variable declaration.
-
-
-\subsection{Event Loop}
-\label{subsec:eventloop}
-
-\dart{} supports asynchronous execution of code with async functions, await expressions, and asynchronous for-in loops.
-We introduce an event loop component to represent Dart's event loop.
-We denote the event loop with $\eventloop$.
-$\eventloop$ is a list of event continuations, elements of $\dncont$.
-\[
-    \eventloop \in \mlist{\dncont}
-\]
-
-The event loop is a list and it supports the operations defined in Section~\ref{subsubsec:semantic-list}.
-
-\subsubsection{Async}
-\label{subsubsec:async}
-% Move these macros next to the rest of the macros.
-\renewcommand{\StartNK}[4]{\mathrm{StartNK}({#1},\,{#2},\,{#3},\,\ExceptionHandlersRest,\,{#4})}
-\newcommand{\CompleteFutureEK}[1]{\mathrm{CompleteFutureEK}({#1})}
-\newcommand{\AwaitReturnNK}[2]{\mathrm{AwaitReturnNK}({#1},\,{#2})}
-\newcommand{\AwaitEK}{\mathrm{AwaitEK}(\econt)}
-\newcommand{\AsyncStaticInvA}[4]{\mathrm{AsyncStaticInvA}({#1},\,{#2},\,{#3},\,\ExceptionHandlersRest,\,{#4})}
-\newcommand{\FutureValue}[1]{\mathrm{FutureValue}(#1)}
-\newcommand{\dfuture}{\mathbf{FutureValue}}
-
-Asynchronous execution in \dart{} is supported with async functions, await expressions, and asynchronous for-in loops.
-In \kernel{} $\AwaitExpression{}$ is an expression and here we present the behaviour of invocation of asynchronous functions.
-Asynchronous \synt{for in} loops occur as statements.
-The semantics of the $\AwaitExpression{}$ expression in \kernel{} for expressions that do not evaluate to an element of $\dfuture$ does not modify the event loop.
-
-Otherwise, the await expression modifies the event loop and proceeds to a state that that applies an event continuation from the event loop, i.e. an event loop configuration.
-Invocation of asynchronous functions without an await modifies the event loop, but continues with the next continuation.
-
-Notes here are for those who will rewrite the basic async specification into full async specification.
-They should be changed in the final version.
-
-What to read:
-\begin{itemize}
-    \item The Event Loop and Dart \url{https://webdev.dartlang.org/articles/performance/event-loop}.
-
-    \item Dart Language Asynchrony Support: Phase 1 \url{https://www.dartlang.org/articles/language/await-async}.
-
-    \item Spicing Up Dart with Side Effects \url{http://dl.acm.org/citation.cfm?id=2747873}.
-
-\end{itemize}
-
-Along other things, the following is not considered in the basic version:
-\begin{itemize}
-	\item Event loop component needs to be added to all configurations.
-    \item Exception handlers should be updated with a handler that completes the future.
-
-    \item Semantics for invocations of async functions other then static invocations should be added.
-
-    \item Elements from $\dfuture$ should be specified.
-
-\end{itemize}
-
-
-When an await continuation, $\AwaitEK$, is applied to a $\FutureValue{\loc}$, it needs to "complete" the future before returning.
-Therefore, it adds an event continuation at the tail of the event loop that captures the return continuation and the location from the store corresponding to the returned future.
-It then proceeds to the head event continuation of the event loop.
-
-When the body of async function is about to be executed, we create a $\StartNK{\stmt}{\env}{\strace}{\econt'}$ event continuation that captures the body, the environment, the exception components and an expression continuation that completes the corresponding $\FutureValue{\loc}$.
-We append this event continuation to the event loop and the invocation evaluates to a future immediately.
-The created future value captures the location where the completed value of the future will eventually be stored.
-The future is completed eventually, when the above mentioned continuation from the event loop is applied.
-
-Additionally, we need to mention that the execution of the program completes when a final state is reached and the event loop is empty.
-Note that this implies the introduction of an exit state, which will not proceed to application of continuations from the event loop.
-Transition to this state will happen when a failure to handle an exception occurs.
-
-
-\begin{figure}[Htp]
-    \begin{eqfigure}
-    \begin{align}
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\AwaitExpression{\expressionmeta}}{\env}{st}{cex}{cst}{\econt}}%
-                {\evalconf{\expressionmeta}{\env}{st}{cex}{cst}{\econt'}}%
-                {\text{where } \econt' = \AwaitEK}
-        \end{multlined}\label{async:await}\\
-        &\begin{multlined}
-            \cesktranswheresplit%
-                {\evalconf{\StaticInvocation{\{\membermeta\}}{\expressionsmeta}}{\env}{\strace}{\cstrace}{\cex}{\econt}}%
-                {\evallistconf{\exprs}{\env}{\strace}{\cstrace}{\cex}{\acont}}%
-                {\begin{aligned}
-                    \text{where }
-                    \acont &= \AsyncStaticInvA{\formals}{\stmt}{\strace'}{\econt},\\
-                    \strace' &= \StaticInvocation{\{\membermeta\}}{\expressionsmeta}::\strace,\\
-                    \membermeta &\text{ is an async static method with formal parameters }\formals \text{ and body }\stmt
-                  \end{aligned}}
-        \end{multlined}\label{async:static-invoc}\\
-        &\begin{multlined}
-             \cesktranswheresplit%
-                 {\acontconf{\AsyncStaticInvA{\formals}{\stmt}{\strace}{\econt}}{\val{s}}}%
-                 {\contconf{\econt}{\val}}%
-                 {\begin{aligned}
-                     \text{where }
-                     \val &= \FutureValue{\loc}\\
-                     \loc &= \text{fresh location in the store}\\
-                     \eventloop_{R} &= \append(\eventloop_{L},\ncont)\\
-                     \ncont &= \StartNK{\stmt}{\env}{\strace}{\econt'}\\
-                     \econt' &= \CompleteFutureEK{\loc}\\
-                     \env &= \ext{\env_{empty}}{\formals}{\val{s}}
-                  \end{aligned}}
-        \end{multlined}\label{async:static-invoc-a}\\
-        &\begin{multlined}
-             \cesktranswheresplit%
-                 {\contconf{\AwaitEK}{\val}}%
-                 {\eventconf{\head(\eventloop')}{\tail(\eventloop')}}%
-                 {\begin{aligned}
-                     \text{where }
-                     \val &= \FutureValue{\loc}\\
-                     \eventloop' &= \append(\eventloop, \AwaitReturnNK{\econt}{\loc})
-                 \end{aligned}}
-        \end{multlined}\label{async:econt-future}\\
-        &\begin{multlined}
-             \cesktranswhere%
-                 {\contconf{\AwaitEK}{\val}}%
-                 {\contconf{\econt}{\val}}%
-                 {\text{where }\val \notin \dfuture}
-        \end{multlined}\label{async:econt-value}\\
-        &\begin{multlined}
-             \cesktranswheresplit%
-                 {\eventconf{\StartNK{\stmt}{\env}{\strace}{\econt}}{\eventloop}}%
-                 {\execconf{\stmt}{\env}{[]}{[]}{\strace}{\handler}{\cex,\,\cstrace}{\econt}{\scont}}%
-                 {\text{where } \scont = \ExitSK{null}}
-        \end{multlined}\label{async:startnk}\\
-         &\begin{multlined}
-             \cesktranswheresplit%
-                 {\contconf{\CompleteFutureEK{\loc}}{\val}}%
-                 {\eventconf{\head(G)}{\tail(G)}}%
-                 {\text{where } \deref{\loc} = \val \text{ after transition}}
-        \end{multlined}\label{async:complete-future}\\
-        &\begin{multlined}
-             \cesktranswhere%
-                 {\contconf{\AwaitReturnNK{\econt}{\loc}}{\eventloop}}%
-                 {\contconf{\econt}{\deref{\loc}}}%
-                 {\text{where } \deref{\loc} \neq \emptyset}
-        \end{multlined}\label{async:await-return}\\
-        &\begin{multlined}
-             \cesktranswheresplit%
-                 {\contconf{\AwaitReturnNK{\econt}{\loc}}{\eventloop}}%
-                 {\eventconf{\head(\eventloop')}{\tail(\eventloop')}}%
-                 {\text{where } \deref{\loc} = \emptyset,\,\eventloop' = \append(\eventloop,\, \AwaitReturnNK{\econt}{\loc})}
-        \end{multlined}\label{async:await-return-fail}\\
-  \end{align}
-  \end{eqfigure}
-  \caption{The CESK-transition function for await expressions}
-  \label{fig:async}
-\end{figure}
-
-\subsubsection{Sync*}
-\label{subsubsec:syncstar}
-
-
-\subsubsection{Async*}
-\label{subsubsec:asyncstar}
-
-
-\subsection{Yield}
-\todo{dmitryas: Write this section after native yield behaviour is figured out, assuming that this section is about native "yield."}
-
-\kernel{} supports suspending the execution of the body of a function with native yield statements.
-Functions containing yield statements in the body are marked with $SyncYielding$.
-
-
-\subsubsection{Yield in SyncYielding}
-\label{subsubsec:yield-in-syncyelding}
-
-
-\end{document}
-
-% vim: tw=0
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 69df63a..2ebf049 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -101,6 +101,7 @@
   ///
   /// The data is generally bare-bones, but can easily be updated for your
   /// specific debugging needs.
+  @override
   String toString();
 
   /// Returns the textual representation of this node for use in debugging.
@@ -138,6 +139,7 @@
 /// This is anything other than [Name] and [DartType] nodes.
 abstract class TreeNode extends Node {
   static int _hashCounter = 0;
+  @override
   final int hashCode = _hashCounter = (_hashCounter + 1) & 0x3fffffff;
   static const int noOffset = -1;
 
@@ -149,8 +151,11 @@
   /// not available (this is the default if none is specifically set).
   int fileOffset = noOffset;
 
+  @override
   R accept<R>(TreeVisitor<R> v);
+  @override
   R accept1<R, A>(TreeVisitor1<R, A> v, A arg);
+  @override
   void visitChildren(Visitor v);
   void transformChildren(Transformer v);
   void transformOrRemoveChildren(RemovingTransformer v);
@@ -608,10 +613,12 @@
     printer.write(libraryNameToString(this));
   }
 
+  @override
   Location? _getLocationInEnclosingFile(int offset) {
     return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 
+  @override
   String leakingDebugToString() => astToText.debugLibraryToString(this);
 }
 
@@ -1510,6 +1517,7 @@
   String name;
 
   /// The URI of the source file this class was loaded from.
+  @override
   Uri fileUri;
 
   /// Type parameters declared on the extension.
@@ -1595,6 +1603,7 @@
 
   @override
   void transformChildren(Transformer v) {
+    v.transformList(annotations, this);
     v.transformList(typeParameters, this);
     // ignore: unnecessary_null_comparison
     if (onType != null) {
@@ -1604,6 +1613,7 @@
 
   @override
   void transformOrRemoveChildren(RemovingTransformer v) {
+    v.transformExpressionList(annotations, this);
     v.transformTypeParameterList(typeParameters, this);
     // ignore: unnecessary_null_comparison
     if (onType != null) {
@@ -2260,6 +2270,7 @@
   /// The `FunctionNode.body` is `null` or a synthesized [ConstructorInvocation]
   /// of the [targetReference] constructor using the [typeArguments] and
   /// [VariableGet] of the parameters.
+  @override
   FunctionNode function;
 
   RedirectingFactory(this.targetReference,
@@ -3251,7 +3262,7 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    // TODO(johnniwinther): Implement this.
+    statement.toTextInternal(printer);
   }
 }
 
@@ -3706,7 +3717,12 @@
   // TODO(johnniwinther): Avoid using `null` as the empty string.
   String? message;
 
-  InvalidExpression(this.message);
+  /// The expression containing the error.
+  Expression? expression;
+
+  InvalidExpression(this.message, [this.expression]) {
+    expression?.parent = this;
+  }
 
   @override
   DartType getStaticType(StaticTypeContext context) =>
@@ -3724,13 +3740,25 @@
       v.visitInvalidExpression(this, arg);
 
   @override
-  void visitChildren(Visitor v) {}
+  void visitChildren(Visitor v) {
+    expression?.accept(v);
+  }
 
   @override
-  void transformChildren(Transformer v) {}
+  void transformChildren(Transformer v) {
+    if (expression != null) {
+      expression = v.transform(expression!);
+      expression?.parent = this;
+    }
+  }
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {}
+  void transformOrRemoveChildren(RemovingTransformer v) {
+    if (expression != null) {
+      expression = v.transformOrRemoveExpression(expression!);
+      expression?.parent = this;
+    }
+  }
 
   @override
   String toString() {
@@ -3741,6 +3769,10 @@
   void toTextInternal(AstPrinter printer) {
     printer.write('<invalid:');
     printer.write(message ?? '');
+    if (expression != null) {
+      printer.write(', ');
+      printer.writeExpression(expression!);
+    }
     printer.write('>');
   }
 }
@@ -5028,6 +5060,7 @@
   static const int FlagBoundsSafe = 1 << 1;
 
   final InstanceAccessKind kind;
+  @override
   Expression receiver;
 
   @override
@@ -5201,6 +5234,7 @@
   static const int FlagBoundsSafe = 1 << 1;
 
   final InstanceAccessKind kind;
+  @override
   Expression receiver;
 
   @override
@@ -5307,6 +5341,7 @@
     interfaceTarget.acceptReference(v);
     name.accept(v);
     arguments.accept(v);
+    functionType?.accept(v);
   }
 
   @override
@@ -5321,6 +5356,9 @@
       arguments = v.transform(arguments);
       arguments.parent = this;
     }
+    if (functionType != null) {
+      functionType = v.visitDartType(functionType!) as FunctionType;
+    }
   }
 
   @override
@@ -5335,6 +5373,10 @@
       arguments = v.transform(arguments);
       arguments.parent = this;
     }
+    if (functionType != null) {
+      functionType =
+          v.visitDartType(functionType!, cannotRemoveSentinel) as FunctionType;
+    }
   }
 
   @override
@@ -6067,9 +6109,14 @@
 
   @override
   DartType getStaticTypeInternal(StaticTypeContext context) {
-    FunctionType type = expression.getStaticType(context) as FunctionType;
-    return Substitution.fromPairs(type.typeParameters, typeArguments)
-        .substituteType(type.withoutTypeParameters);
+    DartType type = expression.getStaticType(context);
+    if (type is FunctionType) {
+      return Substitution.fromPairs(type.typeParameters, typeArguments)
+          .substituteType(type.withoutTypeParameters);
+    }
+    assert(type is InvalidType || type is NeverType,
+        "Unexpected operand type $type for $expression");
+    return type;
   }
 
   @override
@@ -6784,6 +6831,7 @@
 class FileUriExpression extends Expression implements FileUriNode {
   /// The URI of the source file in which the subexpression is located.
   /// Can be different from the file containing the [FileUriExpression].
+  @override
   Uri fileUri;
 
   Expression expression;
@@ -6869,6 +6917,7 @@
         : (flags & ~FlagForNonNullableByDefault);
   }
 
+  @override
   DartType getStaticType(StaticTypeContext context) =>
       getStaticTypeInternal(context);
 
@@ -7286,6 +7335,7 @@
   @override
   Object? get value => null;
 
+  @override
   DartType getStaticType(StaticTypeContext context) =>
       getStaticTypeInternal(context);
 
@@ -7398,6 +7448,7 @@
 }
 
 class ThisExpression extends Expression {
+  @override
   DartType getStaticType(StaticTypeContext context) =>
       getStaticTypeInternal(context);
 
@@ -7791,12 +7842,14 @@
     return "MapEntry(${toStringInternal()})";
   }
 
+  @override
   String toText(AstTextStrategy strategy) {
     AstPrinter printer = new AstPrinter(strategy);
     toTextInternal(printer);
     return printer.getText();
   }
 
+  @override
   void toTextInternal(AstPrinter printer) {
     printer.writeExpression(key);
     printer.write(': ');
@@ -10329,6 +10382,7 @@
   @override
   R accept<R>(DartTypeVisitor<R> v);
 
+  @override
   R accept1<R, A>(DartTypeVisitor1<R, A> v, A arg);
 
   @override
@@ -10984,6 +11038,7 @@
 ///
 /// The underlying type can be extracted using [unalias].
 class TypedefType extends DartType {
+  @override
   final Nullability declaredNullability;
   final Reference typedefReference;
   final List<DartType> typeArguments;
@@ -11088,6 +11143,7 @@
 class FutureOrType extends DartType {
   final DartType typeArgument;
 
+  @override
   final Nullability declaredNullability;
 
   FutureOrType(this.typeArgument, this.declaredNullability);
@@ -11320,12 +11376,14 @@
     return "NamedType(${toStringInternal()})";
   }
 
+  @override
   String toText(AstTextStrategy strategy) {
     AstPrinter printer = new AstPrinter(strategy);
     printer.writeNamedType(this);
     return printer.getText();
   }
 
+  @override
   void toTextInternal(AstPrinter printer) {
     if (isRequired) {
       printer.write("required ");
@@ -12064,12 +12122,14 @@
 
   Class get classNode => className.asClass;
 
+  @override
   R accept<R>(Visitor<R> v) => v.visitSupertype(this);
 
   @override
   R accept1<R, A>(Visitor1<R, A> v, A arg) => v.visitSupertype(this, arg);
 
-  visitChildren(Visitor v) {
+  @override
+  void visitChildren(Visitor v) {
     classNode.acceptReference(v);
     visitList(typeArguments, v);
   }
@@ -12078,6 +12138,7 @@
     return new InterfaceType(classNode, Nullability.legacy, typeArguments);
   }
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     if (other is Supertype) {
@@ -12092,6 +12153,7 @@
     }
   }
 
+  @override
   int get hashCode {
     int hash = 0x3fffffff & className.hashCode;
     for (int i = 0; i < typeArguments.length; ++i) {
@@ -12627,7 +12689,8 @@
 
   Class get classNode => classReference.asClass;
 
-  visitChildren(Visitor v) {
+  @override
+  void visitChildren(Visitor v) {
     classReference.asClass.acceptReference(v);
     visitList(typeArguments, v);
     for (final Reference reference in fieldValues.keys) {
@@ -12638,6 +12701,7 @@
     }
   }
 
+  @override
   R accept<R>(ConstantVisitor<R> v) => v.visitInstanceConstant(this);
 
   @override
@@ -12858,13 +12922,16 @@
   @override
   String toString() => 'ConstructorTearOffConstant(${toStringInternal()})';
 
+  @override
   int get hashCode => targetReference.hashCode;
 
+  @override
   bool operator ==(Object other) {
     return other is ConstructorTearOffConstant &&
         other.targetReference == targetReference;
   }
 
+  @override
   FunctionType getType(StaticTypeContext context) {
     return function.computeFunctionType(context.nonNullable);
   }
@@ -12917,13 +12984,16 @@
   String toString() =>
       'RedirectingFactoryTearOffConstant(${toStringInternal()})';
 
+  @override
   int get hashCode => targetReference.hashCode;
 
+  @override
   bool operator ==(Object other) {
     return other is RedirectingFactoryTearOffConstant &&
         other.targetReference == targetReference;
   }
 
+  @override
   FunctionType getType(StaticTypeContext context) {
     return function.computeFunctionType(context.nonNullable);
   }
@@ -12934,6 +13004,7 @@
   final TearOffConstant tearOffConstant;
   final List<DartType> types;
 
+  @override
   late final int hashCode = _computeHashCode();
 
   TypedefTearOffConstant(this.parameters, this.tearOffConstant, this.types);
@@ -12970,6 +13041,7 @@
   @override
   String toString() => 'TypedefTearOffConstant(${toStringInternal()})';
 
+  @override
   bool operator ==(Object other) {
     if (other is! TypedefTearOffConstant) return false;
     if (other.tearOffConstant != tearOffConstant) return false;
@@ -13008,6 +13080,7 @@
     return hash;
   }
 
+  @override
   DartType getType(StaticTypeContext context) {
     FunctionType type = tearOffConstant.getType(context) as FunctionType;
     FreshTypeParameters freshTypeParameters =
@@ -13065,6 +13138,7 @@
     return other is TypeLiteralConstant && other.type == type;
   }
 
+  @override
   DartType getType(StaticTypeContext context) =>
       context.typeEnvironment.coreTypes.typeRawType(context.nonNullable);
 }
@@ -13096,6 +13170,7 @@
   R acceptReference1<R, A>(Visitor1<R, A> v, A arg) =>
       v.visitUnevaluatedConstantReference(this, arg);
 
+  @override
   DartType getType(StaticTypeContext context) =>
       expression.getStaticType(context);
 
@@ -13303,6 +13378,7 @@
     // TODO(johnniwinther): Implement this.
   }
 
+  @override
   String leakingDebugToString() => astToText.debugComponentToString(this);
 }
 
@@ -13315,6 +13391,7 @@
 
   Location(this.file, this.line, this.column);
 
+  @override
   String toString() => '$file:$line:$column';
 }
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 80b2979..d53d7de 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -21,6 +21,7 @@
   ParseError(this.message,
       {required this.filename, required this.byteIndex, required this.path});
 
+  @override
   String toString() => '$filename:$byteIndex: $message at $path';
 }
 
@@ -30,6 +31,7 @@
 
   InvalidKernelVersionError(this.filename, this.version);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write('Unexpected Kernel Format Version ${version} '
@@ -46,6 +48,7 @@
 
   InvalidKernelSdkVersionError(this.version);
 
+  @override
   String toString() {
     return 'Unexpected Kernel SDK Version ${version} '
         '(expected ${expectedSdkHash}).';
@@ -57,6 +60,7 @@
 
   CompilationModeError(this.message);
 
+  @override
   String toString() => "CompilationModeError[$message]";
 }
 
@@ -179,7 +183,7 @@
             (alwaysCreateNewNamedNodes == true),
         this.alwaysCreateNewNamedNodes = alwaysCreateNewNamedNodes ?? false;
 
-  fail(String message) {
+  Never fail(String message) {
     throw ParseError(message,
         byteIndex: _byteOffset, filename: filename, path: debugPath.join('::'));
   }
@@ -2103,7 +2107,8 @@
 
   Expression _readInvalidExpression() {
     int offset = readOffset();
-    return new InvalidExpression(readStringOrNullIfEmpty())
+    return new InvalidExpression(
+        readStringOrNullIfEmpty(), readExpressionOption())
       ..fileOffset = offset;
   }
 
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index aa211d3..a295640 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -83,15 +83,18 @@
     return index!;
   }
 
+  @override
   void writeByte(int byte) {
     assert((byte & 0xFF) == byte);
     _sink.addByte(byte);
   }
 
+  @override
   void writeBytes(List<int> bytes) {
     _sink.addBytes(bytes);
   }
 
+  @override
   @pragma("vm:prefer-inline")
   void writeUInt30(int value) {
     assert(value >= 0 && value >> 30 == 0);
@@ -105,16 +108,19 @@
     }
   }
 
+  @override
   void writeUInt32(int value) {
     _sink.addByte4((value >> 24) & 0xFF, (value >> 16) & 0xFF,
         (value >> 8) & 0xFF, value & 0xFF);
   }
 
+  @override
   void writeByteList(List<int> bytes) {
     writeUInt30(bytes.length);
     writeBytes(bytes);
   }
 
+  @override
   int getBufferOffset() {
     return _sink.offset;
   }
@@ -166,6 +172,7 @@
     }
   }
 
+  @override
   void writeStringReference(String string) {
     writeUInt30(stringIndexer.put(string));
   }
@@ -174,6 +181,7 @@
     writeList(strings, writeStringReference);
   }
 
+  @override
   void writeConstantReference(Constant constant) {
     writeUInt30(_constantIndexer.put(constant));
   }
@@ -296,6 +304,7 @@
     _typeParameterIndexer = oldTypeParameterIndexer;
   }
 
+  @override
   void writeDartType(DartType type) {
     type.accept(this);
   }
@@ -413,6 +422,7 @@
     }
   }
 
+  @override
   void writeNode(Node node) {
     if (_metadataSubsections != null) {
       _writeNodeMetadata(node);
@@ -951,6 +961,7 @@
     _canonicalNameList.add(node);
   }
 
+  @override
   void writeNullAllowedCanonicalNameReference(CanonicalName? name) {
     if (name == null) {
       writeUInt30(0);
@@ -979,7 +990,7 @@
     writeNullAllowedCanonicalNameReference(node.reference.canonicalName);
   }
 
-  writeOffset(int offset) {
+  void writeOffset(int offset) {
     // TODO(jensj): Delta-encoding.
     // File offset ranges from -1 and up,
     // but is here saved as unsigned (thus the +1)
@@ -999,6 +1010,7 @@
     writeNonNullCanonicalNameReference(getCanonicalNameOfClass(class_));
   }
 
+  @override
   void writeName(Name node) {
     if (_metadataSubsections != null) {
       _writeNodeMetadata(node);
@@ -1119,6 +1131,7 @@
     writeNodeList(node.combinators);
   }
 
+  @override
   void visitCombinator(Combinator node) {
     writeByte(node.isShow ? 1 : 0);
     writeStringReferenceList(node.names);
@@ -1140,6 +1153,7 @@
     writeStringReference(node.partUri);
   }
 
+  @override
   void visitTypedef(Typedef node) {
     enterScope(memberScope: true);
     writeNonNullCanonicalNameReference(getCanonicalNameOfTypedef(node));
@@ -1461,6 +1475,7 @@
     writeByte(Tag.InvalidExpression);
     writeOffset(node.fileOffset);
     writeStringReference(node.message ?? '');
+    writeOptionalNode(node.expression);
   }
 
   @override
@@ -1852,7 +1867,7 @@
     writeInteger(node.value);
   }
 
-  writeInteger(int value) {
+  void writeInteger(int value) {
     int biasedValue = value + Tag.SpecializedIntLiteralBias;
     if (biasedValue >= 0 &&
         biasedValue & Tag.SpecializedPayloadMask == biasedValue) {
@@ -1878,7 +1893,7 @@
     writeDouble(node.value);
   }
 
-  writeDouble(double value) {
+  void writeDouble(double value) {
     _sink.addDouble(value);
   }
 
@@ -2009,7 +2024,7 @@
     writeLibraryDependencyReference(node.import);
   }
 
-  writeStatementOrEmpty(Statement? node) {
+  void writeStatementOrEmpty(Statement? node) {
     if (node == null) {
       writeByte(Tag.EmptyStatement);
     } else {
@@ -2842,7 +2857,8 @@
     return index[constant] = newIndex;
   }
 
-  defaultConstantReference(Constant node) {
+  @override
+  void defaultConstantReference(Constant node) {
     put(node);
   }
 }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index d578618..f9a62ce 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 = 69;
+  static const int BinaryFormatVersion = 70;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index 6d7bd11..bd151c1 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -263,6 +263,7 @@
     }
   }
 
+  @override
   String toString() => _parent == null ? 'root' : '$parent::$name';
   String toStringInternal() {
     if (isRoot) return "";
@@ -438,6 +439,7 @@
     _node = node;
   }
 
+  @override
   String toString() {
     return "Reference to ${toStringInternal()}";
   }
@@ -597,12 +599,14 @@
 
   CanonicalNameError(this.message);
 
+  @override
   String toString() => 'CanonicalNameError: $message';
 }
 
 class CanonicalNameSdkError extends CanonicalNameError {
   CanonicalNameSdkError(String message) : super(message);
 
+  @override
   String toString() => 'CanonicalNameSdkError: $message';
 }
 
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index f66182a..43368ec 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -454,11 +454,13 @@
 
 /// Implementation of [ClassHierarchy] for closed world.
 class ClosedWorldClassHierarchy implements ClassHierarchy {
+  @override
   CoreTypes coreTypes;
   late HandleAmbiguousSupertypes _onAmbiguousSupertypes;
   late HandleAmbiguousSupertypes _onAmbiguousSupertypesNotWrapped;
   MixinInferrer? mixinInferrer;
 
+  @override
   void set onAmbiguousSupertypes(
       HandleAmbiguousSupertypes onAmbiguousSupertypes) {
     _onAmbiguousSupertypesNotWrapped = onAmbiguousSupertypes;
@@ -512,6 +514,7 @@
     allBetsOff = false;
   }
 
+  @override
   final Set<Library> knownLibraries = new Set<Library>();
   bool allBetsOff = false;
 
@@ -1702,6 +1705,7 @@
   final Set<Class> _classes;
   ClassSet(this._classes);
 
+  @override
   bool contains(Object? class_) {
     return _classes.contains(class_);
   }
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 9127088..fec13cc 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -57,30 +57,37 @@
     return _variables[variable] = clone;
   }
 
+  @override
   TreeNode visitLibrary(Library node) {
     throw 'Cloning of libraries is not implemented';
   }
 
+  @override
   TreeNode visitClass(Class node) {
     throw 'Cloning of classes is not implemented';
   }
 
+  @override
   TreeNode visitExtension(Extension node) {
     throw 'Cloning of extensions is not implemented';
   }
 
+  @override
   TreeNode visitConstructor(Constructor node) {
     throw 'Cloning of constructors is not implemented here';
   }
 
+  @override
   TreeNode visitProcedure(Procedure node) {
     throw 'Cloning of procedures is not implemented here';
   }
 
+  @override
   TreeNode visitField(Field node) {
     throw 'Cloning of fields is not implemented here';
   }
 
+  @override
   TreeNode visitRedirectingFactory(RedirectingFactory node) {
     throw 'Cloning of redirecting factory constructors is not implemented here';
   }
@@ -151,92 +158,112 @@
     return type == null ? null : substitute(type, typeSubstitution);
   }
 
-  visitInvalidExpression(InvalidExpression node) {
-    return new InvalidExpression(node.message);
+  @override
+  TreeNode visitInvalidExpression(InvalidExpression node) {
+    return new InvalidExpression(
+        node.message, node.expression != null ? clone(node.expression!) : null);
   }
 
-  visitVariableGet(VariableGet node) {
+  @override
+  TreeNode visitVariableGet(VariableGet node) {
     return new VariableGet(
         getVariableClone(node.variable)!, visitOptionalType(node.promotedType));
   }
 
-  visitVariableSet(VariableSet node) {
+  @override
+  TreeNode visitVariableSet(VariableSet node) {
     return new VariableSet(getVariableClone(node.variable)!, clone(node.value));
   }
 
-  visitSuperPropertyGet(SuperPropertyGet node) {
+  @override
+  TreeNode visitSuperPropertyGet(SuperPropertyGet node) {
     return new SuperPropertyGet.byReference(
         node.name, node.interfaceTargetReference);
   }
 
-  visitSuperPropertySet(SuperPropertySet node) {
+  @override
+  TreeNode visitSuperPropertySet(SuperPropertySet node) {
     return new SuperPropertySet.byReference(
         node.name, clone(node.value), node.interfaceTargetReference);
   }
 
-  visitStaticGet(StaticGet node) {
+  @override
+  TreeNode visitStaticGet(StaticGet node) {
     return new StaticGet.byReference(node.targetReference);
   }
 
-  visitStaticSet(StaticSet node) {
+  @override
+  TreeNode visitStaticSet(StaticSet node) {
     return new StaticSet.byReference(node.targetReference, clone(node.value));
   }
 
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
+  @override
+  TreeNode visitSuperMethodInvocation(SuperMethodInvocation node) {
     return new SuperMethodInvocation.byReference(
         node.name, clone(node.arguments), node.interfaceTargetReference);
   }
 
-  visitStaticInvocation(StaticInvocation node) {
+  @override
+  TreeNode visitStaticInvocation(StaticInvocation node) {
     return new StaticInvocation.byReference(
         node.targetReference, clone(node.arguments),
         isConst: node.isConst);
   }
 
-  visitConstructorInvocation(ConstructorInvocation node) {
+  @override
+  TreeNode visitConstructorInvocation(ConstructorInvocation node) {
     return new ConstructorInvocation.byReference(
         node.targetReference, clone(node.arguments),
         isConst: node.isConst);
   }
 
-  visitNot(Not node) {
+  @override
+  TreeNode visitNot(Not node) {
     return new Not(clone(node.operand));
   }
 
-  visitNullCheck(NullCheck node) {
+  @override
+  TreeNode visitNullCheck(NullCheck node) {
     return new NullCheck(clone(node.operand));
   }
 
-  visitLogicalExpression(LogicalExpression node) {
+  @override
+  TreeNode visitLogicalExpression(LogicalExpression node) {
     return new LogicalExpression(
         clone(node.left), node.operatorEnum, clone(node.right));
   }
 
-  visitConditionalExpression(ConditionalExpression node) {
+  @override
+  TreeNode visitConditionalExpression(ConditionalExpression node) {
     return new ConditionalExpression(clone(node.condition), clone(node.then),
         clone(node.otherwise), visitType(node.staticType));
   }
 
-  visitStringConcatenation(StringConcatenation node) {
+  @override
+  TreeNode visitStringConcatenation(StringConcatenation node) {
     return new StringConcatenation(node.expressions.map(clone).toList());
   }
 
-  visitListConcatenation(ListConcatenation node) {
+  @override
+  TreeNode visitListConcatenation(ListConcatenation node) {
     return new ListConcatenation(node.lists.map(clone).toList(),
         typeArgument: visitType(node.typeArgument));
   }
 
-  visitSetConcatenation(SetConcatenation node) {
+  @override
+  TreeNode visitSetConcatenation(SetConcatenation node) {
     return new SetConcatenation(node.sets.map(clone).toList(),
         typeArgument: visitType(node.typeArgument));
   }
 
-  visitMapConcatenation(MapConcatenation node) {
+  @override
+  TreeNode visitMapConcatenation(MapConcatenation node) {
     return new MapConcatenation(node.maps.map(clone).toList(),
         keyType: visitType(node.keyType), valueType: visitType(node.valueType));
   }
 
-  visitInstanceCreation(InstanceCreation node) {
+  @override
+  TreeNode visitInstanceCreation(InstanceCreation node) {
     final Map<Reference, Expression> fieldValues = <Reference, Expression>{};
     node.fieldValues.forEach((Reference fieldRef, Expression value) {
       fieldValues[fieldRef] = clone(value);
@@ -249,153 +276,186 @@
         node.unusedArguments.map(clone).toList());
   }
 
-  visitFileUriExpression(FileUriExpression node) {
+  @override
+  TreeNode visitFileUriExpression(FileUriExpression node) {
     return new FileUriExpression(clone(node.expression), _activeFileUri!);
   }
 
-  visitIsExpression(IsExpression node) {
+  @override
+  TreeNode visitIsExpression(IsExpression node) {
     return new IsExpression(clone(node.operand), visitType(node.type))
       ..flags = node.flags;
   }
 
-  visitAsExpression(AsExpression node) {
+  @override
+  TreeNode visitAsExpression(AsExpression node) {
     return new AsExpression(clone(node.operand), visitType(node.type))
       ..flags = node.flags;
   }
 
-  visitSymbolLiteral(SymbolLiteral node) {
+  @override
+  TreeNode visitSymbolLiteral(SymbolLiteral node) {
     return new SymbolLiteral(node.value);
   }
 
-  visitTypeLiteral(TypeLiteral node) {
+  @override
+  TreeNode visitTypeLiteral(TypeLiteral node) {
     return new TypeLiteral(visitType(node.type));
   }
 
-  visitThisExpression(ThisExpression node) {
+  @override
+  TreeNode visitThisExpression(ThisExpression node) {
     return new ThisExpression();
   }
 
-  visitRethrow(Rethrow node) {
+  @override
+  TreeNode visitRethrow(Rethrow node) {
     return new Rethrow();
   }
 
-  visitThrow(Throw node) {
+  @override
+  TreeNode visitThrow(Throw node) {
     return new Throw(clone(node.expression));
   }
 
-  visitListLiteral(ListLiteral node) {
+  @override
+  TreeNode visitListLiteral(ListLiteral node) {
     return new ListLiteral(node.expressions.map(clone).toList(),
         typeArgument: visitType(node.typeArgument), isConst: node.isConst);
   }
 
-  visitSetLiteral(SetLiteral node) {
+  @override
+  TreeNode visitSetLiteral(SetLiteral node) {
     return new SetLiteral(node.expressions.map(clone).toList(),
         typeArgument: visitType(node.typeArgument), isConst: node.isConst);
   }
 
-  visitMapLiteral(MapLiteral node) {
+  @override
+  TreeNode visitMapLiteral(MapLiteral node) {
     return new MapLiteral(node.entries.map(clone).toList(),
         keyType: visitType(node.keyType),
         valueType: visitType(node.valueType),
         isConst: node.isConst);
   }
 
-  visitMapLiteralEntry(MapLiteralEntry node) {
+  @override
+  TreeNode visitMapLiteralEntry(MapLiteralEntry node) {
     return new MapLiteralEntry(clone(node.key), clone(node.value));
   }
 
-  visitAwaitExpression(AwaitExpression node) {
+  @override
+  TreeNode visitAwaitExpression(AwaitExpression node) {
     return new AwaitExpression(clone(node.operand));
   }
 
-  visitFunctionExpression(FunctionExpression node) {
+  @override
+  TreeNode visitFunctionExpression(FunctionExpression node) {
     return new FunctionExpression(clone(node.function));
   }
 
-  visitConstantExpression(ConstantExpression node) {
+  @override
+  TreeNode visitConstantExpression(ConstantExpression node) {
     return new ConstantExpression(
         visitConstant(node.constant), visitType(node.type));
   }
 
-  visitStringLiteral(StringLiteral node) {
+  @override
+  TreeNode visitStringLiteral(StringLiteral node) {
     return new StringLiteral(node.value);
   }
 
-  visitIntLiteral(IntLiteral node) {
+  @override
+  TreeNode visitIntLiteral(IntLiteral node) {
     return new IntLiteral(node.value);
   }
 
-  visitDoubleLiteral(DoubleLiteral node) {
+  @override
+  TreeNode visitDoubleLiteral(DoubleLiteral node) {
     return new DoubleLiteral(node.value);
   }
 
-  visitBoolLiteral(BoolLiteral node) {
+  @override
+  TreeNode visitBoolLiteral(BoolLiteral node) {
     return new BoolLiteral(node.value);
   }
 
-  visitNullLiteral(NullLiteral node) {
+  @override
+  TreeNode visitNullLiteral(NullLiteral node) {
     return new NullLiteral();
   }
 
-  visitLet(Let node) {
+  @override
+  TreeNode visitLet(Let node) {
     VariableDeclaration newVariable = clone(node.variable);
     return new Let(newVariable, clone(node.body));
   }
 
-  visitBlockExpression(BlockExpression node) {
+  @override
+  TreeNode visitBlockExpression(BlockExpression node) {
     return new BlockExpression(clone(node.body), clone(node.value));
   }
 
-  visitExpressionStatement(ExpressionStatement node) {
+  @override
+  TreeNode visitExpressionStatement(ExpressionStatement node) {
     return new ExpressionStatement(clone(node.expression));
   }
 
-  visitBlock(Block node) {
+  @override
+  TreeNode visitBlock(Block node) {
     return new Block(node.statements.map(clone).toList())
       ..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
   }
 
-  visitAssertBlock(AssertBlock node) {
+  @override
+  TreeNode visitAssertBlock(AssertBlock node) {
     return new AssertBlock(node.statements.map(clone).toList());
   }
 
-  visitEmptyStatement(EmptyStatement node) {
+  @override
+  TreeNode visitEmptyStatement(EmptyStatement node) {
     return new EmptyStatement();
   }
 
-  visitAssertStatement(AssertStatement node) {
+  @override
+  TreeNode visitAssertStatement(AssertStatement node) {
     return new AssertStatement(clone(node.condition),
         conditionStartOffset: node.conditionStartOffset,
         conditionEndOffset: node.conditionEndOffset,
         message: cloneOptional(node.message));
   }
 
-  visitLabeledStatement(LabeledStatement node) {
+  @override
+  TreeNode visitLabeledStatement(LabeledStatement node) {
     LabeledStatement newNode = new LabeledStatement(null);
     labels[node] = newNode;
     newNode.body = clone(node.body)..parent = newNode;
     return newNode;
   }
 
-  visitBreakStatement(BreakStatement node) {
+  @override
+  TreeNode visitBreakStatement(BreakStatement node) {
     return new BreakStatement(labels[node.target]!);
   }
 
-  visitWhileStatement(WhileStatement node) {
+  @override
+  TreeNode visitWhileStatement(WhileStatement node) {
     return new WhileStatement(clone(node.condition), clone(node.body));
   }
 
-  visitDoStatement(DoStatement node) {
+  @override
+  TreeNode visitDoStatement(DoStatement node) {
     return new DoStatement(clone(node.body), clone(node.condition));
   }
 
-  visitForStatement(ForStatement node) {
+  @override
+  TreeNode visitForStatement(ForStatement node) {
     List<VariableDeclaration> variables = node.variables.map(clone).toList();
     return new ForStatement(variables, cloneOptional(node.condition),
         node.updates.map(clone).toList(), clone(node.body));
   }
 
-  visitForInStatement(ForInStatement node) {
+  @override
+  TreeNode visitForInStatement(ForInStatement node) {
     VariableDeclaration newVariable = clone(node.variable);
     return new ForInStatement(
         newVariable, clone(node.iterable), clone(node.body),
@@ -403,7 +463,8 @@
       ..bodyOffset = node.bodyOffset;
   }
 
-  visitSwitchStatement(SwitchStatement node) {
+  @override
+  TreeNode visitSwitchStatement(SwitchStatement node) {
     for (SwitchCase switchCase in node.cases) {
       switchCases[switchCase] = new SwitchCase(
           switchCase.expressions.map(clone).toList(),
@@ -415,46 +476,55 @@
         clone(node.expression), node.cases.map(clone).toList());
   }
 
-  visitSwitchCase(SwitchCase node) {
+  @override
+  TreeNode visitSwitchCase(SwitchCase node) {
     SwitchCase switchCase = switchCases[node]!;
     switchCase.body = clone(node.body)..parent = switchCase;
     return switchCase;
   }
 
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  @override
+  TreeNode visitContinueSwitchStatement(ContinueSwitchStatement node) {
     return new ContinueSwitchStatement(switchCases[node.target]!);
   }
 
-  visitIfStatement(IfStatement node) {
+  @override
+  TreeNode visitIfStatement(IfStatement node) {
     return new IfStatement(
         clone(node.condition), clone(node.then), cloneOptional(node.otherwise));
   }
 
-  visitReturnStatement(ReturnStatement node) {
+  @override
+  TreeNode visitReturnStatement(ReturnStatement node) {
     return new ReturnStatement(cloneOptional(node.expression));
   }
 
-  visitTryCatch(TryCatch node) {
+  @override
+  TreeNode visitTryCatch(TryCatch node) {
     return new TryCatch(clone(node.body), node.catches.map(clone).toList(),
         isSynthetic: node.isSynthetic);
   }
 
-  visitCatch(Catch node) {
+  @override
+  TreeNode visitCatch(Catch node) {
     VariableDeclaration? newException = cloneOptional(node.exception);
     VariableDeclaration? newStackTrace = cloneOptional(node.stackTrace);
     return new Catch(newException, clone(node.body),
         stackTrace: newStackTrace, guard: visitType(node.guard));
   }
 
-  visitTryFinally(TryFinally node) {
+  @override
+  TreeNode visitTryFinally(TryFinally node) {
     return new TryFinally(clone(node.body), clone(node.finalizer));
   }
 
-  visitYieldStatement(YieldStatement node) {
+  @override
+  TreeNode visitYieldStatement(YieldStatement node) {
     return new YieldStatement(clone(node.expression))..flags = node.flags;
   }
 
-  visitVariableDeclaration(VariableDeclaration node) {
+  @override
+  TreeNode visitVariableDeclaration(VariableDeclaration node) {
     return setVariableClone(
         node,
         new VariableDeclaration(node.name,
@@ -467,7 +537,8 @@
           ..fileEqualsOffset = _cloneFileOffset(node.fileEqualsOffset));
   }
 
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  @override
+  TreeNode visitFunctionDeclaration(FunctionDeclaration node) {
     VariableDeclaration newVariable = clone(node.variable);
     // Create the declaration before cloning the body to support recursive
     // [LocalFunctionInvocation] nodes.
@@ -490,6 +561,7 @@
     }
   }
 
+  @override
   TypeParameter visitTypeParameter(TypeParameter node) {
     TypeParameter newNode = typeParams[node]!;
     newNode.bound = visitType(node.bound);
@@ -514,7 +586,8 @@
     }
   }
 
-  visitFunctionNode(FunctionNode node) {
+  @override
+  TreeNode visitFunctionNode(FunctionNode node) {
     prepareTypeParameters(node.typeParameters);
     List<TypeParameter> typeParameters =
         node.typeParameters.map(clone).toList();
@@ -532,98 +605,120 @@
       ..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
   }
 
-  visitArguments(Arguments node) {
+  @override
+  TreeNode visitArguments(Arguments node) {
     return new Arguments(node.positional.map(clone).toList(),
         types: node.types.map(visitType).toList(),
         named: node.named.map(clone).toList());
   }
 
-  visitNamedExpression(NamedExpression node) {
+  @override
+  TreeNode visitNamedExpression(NamedExpression node) {
     return new NamedExpression(node.name, clone(node.value));
   }
 
-  defaultBasicLiteral(BasicLiteral node) {
+  @override
+  TreeNode defaultBasicLiteral(BasicLiteral node) {
     return defaultExpression(node);
   }
 
-  defaultExpression(Expression node) {
+  @override
+  TreeNode defaultExpression(Expression node) {
     throw 'Unimplemented clone for Kernel expression: $node';
   }
 
-  defaultInitializer(Initializer node) {
+  @override
+  TreeNode defaultInitializer(Initializer node) {
     throw 'Unimplemented clone for Kernel initializer: $node';
   }
 
-  defaultMember(Member node) {
+  @override
+  TreeNode defaultMember(Member node) {
     throw 'Unimplemented clone for Kernel member: $node';
   }
 
-  defaultStatement(Statement node) {
+  @override
+  TreeNode defaultStatement(Statement node) {
     throw 'Unimplemented clone for Kernel statement: $node';
   }
 
-  defaultTreeNode(TreeNode node) {
+  @override
+  TreeNode defaultTreeNode(TreeNode node) {
     throw 'Cloning Kernel non-members is not supported.  '
         'Tried cloning $node';
   }
 
-  visitAssertInitializer(AssertInitializer node) {
+  @override
+  TreeNode visitAssertInitializer(AssertInitializer node) {
     return new AssertInitializer(clone(node.statement));
   }
 
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+  @override
+  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
     return new CheckLibraryIsLoaded(node.import);
   }
 
-  visitCombinator(Combinator node) {
+  @override
+  TreeNode visitCombinator(Combinator node) {
     return defaultTreeNode(node);
   }
 
-  visitFieldInitializer(FieldInitializer node) {
+  @override
+  TreeNode visitFieldInitializer(FieldInitializer node) {
     return new FieldInitializer.byReference(
         node.fieldReference, clone(node.value));
   }
 
-  visitInstantiation(Instantiation node) {
+  @override
+  TreeNode visitInstantiation(Instantiation node) {
     return new Instantiation(
         clone(node.expression), node.typeArguments.map(visitType).toList());
   }
 
-  visitInvalidInitializer(InvalidInitializer node) {
+  @override
+  TreeNode visitInvalidInitializer(InvalidInitializer node) {
     return new InvalidInitializer();
   }
 
-  visitLibraryDependency(LibraryDependency node) {
+  @override
+  TreeNode visitLibraryDependency(LibraryDependency node) {
     return defaultTreeNode(node);
   }
 
-  visitLibraryPart(LibraryPart node) {
+  @override
+  TreeNode visitLibraryPart(LibraryPart node) {
     return defaultTreeNode(node);
   }
 
-  visitLoadLibrary(LoadLibrary node) {
+  @override
+  TreeNode visitLoadLibrary(LoadLibrary node) {
     return new LoadLibrary(node.import);
   }
 
-  visitLocalInitializer(LocalInitializer node) {
+  @override
+  TreeNode visitLocalInitializer(LocalInitializer node) {
     return new LocalInitializer(clone(node.variable));
   }
 
-  visitComponent(Component node) {
+  @override
+  TreeNode visitComponent(Component node) {
     return defaultTreeNode(node);
   }
 
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  @override
+  TreeNode visitRedirectingInitializer(RedirectingInitializer node) {
     return new RedirectingInitializer.byReference(
         node.targetReference, clone(node.arguments));
   }
 
-  visitSuperInitializer(SuperInitializer node) {
+  @override
+  TreeNode visitSuperInitializer(SuperInitializer node) {
     return new SuperInitializer.byReference(
         node.targetReference, clone(node.arguments));
   }
 
-  visitTypedef(Typedef node) {
+  @override
+  TreeNode visitTypedef(Typedef node) {
     return defaultTreeNode(node);
   }
 
@@ -676,7 +771,8 @@
     return new InstanceInvocation.byReference(
         node.kind, clone(node.receiver), node.name, clone(node.arguments),
         functionType: visitType(node.functionType) as FunctionType,
-        interfaceTargetReference: node.interfaceTargetReference);
+        interfaceTargetReference: node.interfaceTargetReference)
+      ..flags = node.flags;
   }
 
   @override
@@ -754,6 +850,7 @@
             typeParams: typeParams,
             cloneAnnotations: cloneAnnotations);
 
+  @override
   @Deprecated("When cloning with members one should use the specific cloneX")
   T clone<T extends TreeNode>(T node) {
     return super.clone(node);
@@ -858,6 +955,7 @@
         function: super.clone(node.function),
         fileUri: node.fileUri,
         reference: reference)
+      ..fileOffset = _cloneFileOffset(node.fileOffset)
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[];
diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart
index 135db61..96327d4 100644
--- a/pkg/kernel/lib/default_language_version.dart
+++ b/pkg/kernel/lib/default_language_version.dart
@@ -9,4 +9,4 @@
 
 import "ast.dart";
 
-Version defaultLanguageVersion = const Version(2, 14);
+Version defaultLanguageVersion = const Version(2, 15);
diff --git a/pkg/kernel/lib/import_table.dart b/pkg/kernel/lib/import_table.dart
index bf9f7d5..fd5f59f 100644
--- a/pkg/kernel/lib/import_table.dart
+++ b/pkg/kernel/lib/import_table.dart
@@ -19,6 +19,7 @@
     }
   }
 
+  @override
   int getImportIndex(Library library) => _libraryIndex[library] ?? -1;
 }
 
@@ -51,6 +52,7 @@
   }
 
   /// Returns the index of the given import, or -1 if not found.
+  @override
   int getImportIndex(Library library) {
     return _libraryIndex[library] ?? -1;
   }
@@ -103,22 +105,26 @@
     }
   }
 
-  visitClassReference(Class node) {
+  @override
+  void visitClassReference(Class node) {
     addLibraryImport(node.enclosingLibrary);
   }
 
-  visitLibrary(Library node) {
+  @override
+  void visitLibrary(Library node) {
     super.visitLibrary(node);
     for (Reference exportedReference in node.additionalExports) {
       addLibraryImport(exportedReference.node!.parent as Library);
     }
   }
 
-  defaultMemberReference(Member node) {
+  @override
+  void defaultMemberReference(Member node) {
     addLibraryImport(node.enclosingLibrary);
   }
 
-  visitName(Name name) {
+  @override
+  void visitName(Name name) {
     if (name.library != null) {
       addLibraryImport(name.library);
     }
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 0e83da3..1c93f7c 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -79,6 +79,7 @@
   final Map<String, IndexedClass> _indexedClasses =
       new Map<String, IndexedClass>();
   final Map<String, Extension> _extensions = new Map<String, Extension>();
+  @override
   final Library library;
 
   IndexedLibrary(this.library) {
@@ -112,6 +113,7 @@
 class IndexedClass extends IndexedContainer {
   final Class cls;
   final Map<Name, Member> _constructors = new Map<Name, Member>();
+  @override
   final Library library;
 
   IndexedClass._(this.cls, this.library) {
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index 68ad9bb..31bdf1c 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -15,6 +15,7 @@
 import 'legacy_erasure.dart';
 
 class TypeVariableGraph extends Graph<int> {
+  @override
   late List<int> vertices;
   List<TypeParameter> typeParameters;
   List<DartType> bounds;
@@ -50,6 +51,7 @@
     }
   }
 
+  @override
   Iterable<int> neighborsOf(int index) {
     return edges[index];
   }
@@ -67,22 +69,28 @@
     node.type.accept(this);
   }
 
+  @override
   void visitInvalidType(InvalidType node);
+  @override
   void visitDynamicType(DynamicType node);
+  @override
   void visitVoidType(VoidType node);
 
+  @override
   void visitInterfaceType(InterfaceType node) {
     for (DartType argument in node.typeArguments) {
       argument.accept(this);
     }
   }
 
+  @override
   void visitTypedefType(TypedefType node) {
     for (DartType argument in node.typeArguments) {
       argument.accept(this);
     }
   }
 
+  @override
   void visitFunctionType(FunctionType node) {
     for (TypeParameter typeParameter in node.typeParameters) {
       typeParameter.bound.accept(this);
@@ -97,6 +105,7 @@
     node.returnType.accept(this);
   }
 
+  @override
   void visitTypeParameterType(TypeParameterType node) {
     if (typeParameters.contains(node.parameter)) {
       occurred.add(node.parameter);
@@ -249,6 +258,7 @@
       this.index, this.argument, this.typeParameter, this.enclosingType,
       {this.invertedType, this.isGenericTypeAsArgumentIssue = false});
 
+  @override
   int get hashCode {
     int hash = 0x3fffffff & index;
     hash = 0x3fffffff & (hash * 31 + (hash ^ argument.hashCode));
@@ -257,6 +267,7 @@
     return hash;
   }
 
+  @override
   bool operator ==(Object other) {
     assert(other is TypeArgumentIssue);
     return other is TypeArgumentIssue &&
@@ -266,6 +277,7 @@
         enclosingType == other.enclosingType;
   }
 
+  @override
   String toString() {
     return "TypeArgumentIssue(index=${index}, argument=${argument}, "
         "typeParameter=${typeParameter}, enclosingType=${enclosingType}";
diff --git a/pkg/kernel/lib/src/coverage.dart b/pkg/kernel/lib/src/coverage.dart
new file mode 100644
index 0000000..01b9483
--- /dev/null
+++ b/pkg/kernel/lib/src/coverage.dart
@@ -0,0 +1,1187 @@
+// 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.
+
+// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
+//
+// Run 'dart pkg/front_end/tool/generate_ast_coverage.dart' to update.
+
+import 'package:kernel/ast.dart';
+
+/// Recursive visitor that collects kinds for all visited nodes.
+///
+/// This can be used to verify that tests have the intended coverage.
+class CoverageVisitor implements Visitor<void> {
+  Set<Object> visited = {};
+  @override
+  void defaultNode(Node node) {}
+  @override
+  void defaultTreeNode(TreeNode node) {}
+  @override
+  void visitLibrary(Library node) {
+    visited.add(NodeKind.Library);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedef(Typedef node) {
+    visited.add(NodeKind.Typedef);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitClass(Class node) {
+    visited.add(NodeKind.Class);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitExtension(Extension node) {
+    visited.add(NodeKind.Extension);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultMember(Member node) {}
+  @override
+  void visitField(Field node) {
+    visited.add(MemberKind.Field);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstructor(Constructor node) {
+    visited.add(MemberKind.Constructor);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingFactory(RedirectingFactory node) {
+    visited.add(MemberKind.RedirectingFactory);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitProcedure(Procedure node) {
+    visited.add(MemberKind.Procedure);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLibraryDependency(LibraryDependency node) {
+    visited.add(NodeKind.LibraryDependency);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLibraryPart(LibraryPart node) {
+    visited.add(NodeKind.LibraryPart);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitCombinator(Combinator node) {
+    visited.add(NodeKind.Combinator);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultInitializer(Initializer node) {}
+  @override
+  void visitInvalidInitializer(InvalidInitializer node) {
+    visited.add(InitializerKind.InvalidInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFieldInitializer(FieldInitializer node) {
+    visited.add(InitializerKind.FieldInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
+    visited.add(InitializerKind.SuperInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
+    visited.add(InitializerKind.RedirectingInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLocalInitializer(LocalInitializer node) {
+    visited.add(InitializerKind.LocalInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitAssertInitializer(AssertInitializer node) {
+    visited.add(InitializerKind.AssertInitializer);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionNode(FunctionNode node) {
+    visited.add(NodeKind.FunctionNode);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultExpression(Expression node) {}
+  @override
+  void visitInvalidExpression(InvalidExpression node) {
+    visited.add(ExpressionKind.InvalidExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitVariableGet(VariableGet node) {
+    visited.add(ExpressionKind.VariableGet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitVariableSet(VariableSet node) {
+    visited.add(ExpressionKind.VariableSet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicGet(DynamicGet node) {
+    visited.add(ExpressionKind.DynamicGet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceGet(InstanceGet node) {
+    visited.add(ExpressionKind.InstanceGet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionTearOff(FunctionTearOff node) {
+    visited.add(ExpressionKind.FunctionTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceTearOff(InstanceTearOff node) {
+    visited.add(ExpressionKind.InstanceTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicSet(DynamicSet node) {
+    visited.add(ExpressionKind.DynamicSet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceSet(InstanceSet node) {
+    visited.add(ExpressionKind.InstanceSet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperPropertyGet(SuperPropertyGet node) {
+    visited.add(ExpressionKind.SuperPropertyGet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperPropertySet(SuperPropertySet node) {
+    visited.add(ExpressionKind.SuperPropertySet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticGet(StaticGet node) {
+    visited.add(ExpressionKind.StaticGet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticTearOff(StaticTearOff node) {
+    visited.add(ExpressionKind.StaticTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticSet(StaticSet node) {
+    visited.add(ExpressionKind.StaticSet);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicInvocation(DynamicInvocation node) {
+    visited.add(ExpressionKind.DynamicInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceInvocation(InstanceInvocation node) {
+    visited.add(ExpressionKind.InstanceInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+    visited.add(ExpressionKind.InstanceGetterInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionInvocation(FunctionInvocation node) {
+    visited.add(ExpressionKind.FunctionInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLocalFunctionInvocation(LocalFunctionInvocation node) {
+    visited.add(ExpressionKind.LocalFunctionInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
+    visited.add(ExpressionKind.SuperMethodInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticInvocation(StaticInvocation node) {
+    visited.add(ExpressionKind.StaticInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstructorInvocation(ConstructorInvocation node) {
+    visited.add(ExpressionKind.ConstructorInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitEqualsNull(EqualsNull node) {
+    visited.add(ExpressionKind.EqualsNull);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitEqualsCall(EqualsCall node) {
+    visited.add(ExpressionKind.EqualsCall);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstantiation(Instantiation node) {
+    visited.add(ExpressionKind.Instantiation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNot(Not node) {
+    visited.add(ExpressionKind.Not);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLogicalExpression(LogicalExpression node) {
+    visited.add(ExpressionKind.LogicalExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConditionalExpression(ConditionalExpression node) {
+    visited.add(ExpressionKind.ConditionalExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStringConcatenation(StringConcatenation node) {
+    visited.add(ExpressionKind.StringConcatenation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitListConcatenation(ListConcatenation node) {
+    visited.add(ExpressionKind.ListConcatenation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSetConcatenation(SetConcatenation node) {
+    visited.add(ExpressionKind.SetConcatenation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitMapConcatenation(MapConcatenation node) {
+    visited.add(ExpressionKind.MapConcatenation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceCreation(InstanceCreation node) {
+    visited.add(ExpressionKind.InstanceCreation);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFileUriExpression(FileUriExpression node) {
+    visited.add(ExpressionKind.FileUriExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitIsExpression(IsExpression node) {
+    visited.add(ExpressionKind.IsExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitAsExpression(AsExpression node) {
+    visited.add(ExpressionKind.AsExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNullCheck(NullCheck node) {
+    visited.add(ExpressionKind.NullCheck);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultBasicLiteral(BasicLiteral node) {}
+  @override
+  void visitStringLiteral(StringLiteral node) {
+    visited.add(ExpressionKind.StringLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitIntLiteral(IntLiteral node) {
+    visited.add(ExpressionKind.IntLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDoubleLiteral(DoubleLiteral node) {
+    visited.add(ExpressionKind.DoubleLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBoolLiteral(BoolLiteral node) {
+    visited.add(ExpressionKind.BoolLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNullLiteral(NullLiteral node) {
+    visited.add(ExpressionKind.NullLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSymbolLiteral(SymbolLiteral node) {
+    visited.add(ExpressionKind.SymbolLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypeLiteral(TypeLiteral node) {
+    visited.add(ExpressionKind.TypeLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitThisExpression(ThisExpression node) {
+    visited.add(ExpressionKind.ThisExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRethrow(Rethrow node) {
+    visited.add(ExpressionKind.Rethrow);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitThrow(Throw node) {
+    visited.add(ExpressionKind.Throw);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitListLiteral(ListLiteral node) {
+    visited.add(ExpressionKind.ListLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSetLiteral(SetLiteral node) {
+    visited.add(ExpressionKind.SetLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitMapLiteral(MapLiteral node) {
+    visited.add(ExpressionKind.MapLiteral);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitAwaitExpression(AwaitExpression node) {
+    visited.add(ExpressionKind.AwaitExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    visited.add(ExpressionKind.FunctionExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstantExpression(ConstantExpression node) {
+    visited.add(ExpressionKind.ConstantExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLet(Let node) {
+    visited.add(ExpressionKind.Let);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBlockExpression(BlockExpression node) {
+    visited.add(ExpressionKind.BlockExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLoadLibrary(LoadLibrary node) {
+    visited.add(ExpressionKind.LoadLibrary);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    visited.add(ExpressionKind.CheckLibraryIsLoaded);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstructorTearOff(ConstructorTearOff node) {
+    visited.add(ExpressionKind.ConstructorTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
+    visited.add(ExpressionKind.RedirectingFactoryTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedefTearOff(TypedefTearOff node) {
+    visited.add(ExpressionKind.TypedefTearOff);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitArguments(Arguments node) {
+    visited.add(NodeKind.Arguments);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNamedExpression(NamedExpression node) {
+    visited.add(NodeKind.NamedExpression);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitMapLiteralEntry(MapLiteralEntry node) {
+    visited.add(NodeKind.MapLiteralEntry);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultStatement(Statement node) {}
+  @override
+  void visitExpressionStatement(ExpressionStatement node) {
+    visited.add(StatementKind.ExpressionStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBlock(Block node) {
+    visited.add(StatementKind.Block);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitAssertBlock(AssertBlock node) {
+    visited.add(StatementKind.AssertBlock);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitEmptyStatement(EmptyStatement node) {
+    visited.add(StatementKind.EmptyStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitAssertStatement(AssertStatement node) {
+    visited.add(StatementKind.AssertStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitLabeledStatement(LabeledStatement node) {
+    visited.add(StatementKind.LabeledStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBreakStatement(BreakStatement node) {
+    visited.add(StatementKind.BreakStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitWhileStatement(WhileStatement node) {
+    visited.add(StatementKind.WhileStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDoStatement(DoStatement node) {
+    visited.add(StatementKind.DoStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitForStatement(ForStatement node) {
+    visited.add(StatementKind.ForStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitForInStatement(ForInStatement node) {
+    visited.add(StatementKind.ForInStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSwitchStatement(SwitchStatement node) {
+    visited.add(StatementKind.SwitchStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
+    visited.add(StatementKind.ContinueSwitchStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitIfStatement(IfStatement node) {
+    visited.add(StatementKind.IfStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitReturnStatement(ReturnStatement node) {
+    visited.add(StatementKind.ReturnStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTryCatch(TryCatch node) {
+    visited.add(StatementKind.TryCatch);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTryFinally(TryFinally node) {
+    visited.add(StatementKind.TryFinally);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitYieldStatement(YieldStatement node) {
+    visited.add(StatementKind.YieldStatement);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    visited.add(StatementKind.VariableDeclaration);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    visited.add(StatementKind.FunctionDeclaration);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSwitchCase(SwitchCase node) {
+    visited.add(NodeKind.SwitchCase);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitCatch(Catch node) {
+    visited.add(NodeKind.Catch);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypeParameter(TypeParameter node) {
+    visited.add(NodeKind.TypeParameter);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitComponent(Component node) {
+    visited.add(NodeKind.Component);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitName(Name node) {
+    visited.add(NodeKind.Name);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultDartType(DartType node) {}
+  @override
+  void visitInvalidType(InvalidType node) {
+    visited.add(DartTypeKind.InvalidType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicType(DynamicType node) {
+    visited.add(DartTypeKind.DynamicType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitVoidType(VoidType node) {
+    visited.add(DartTypeKind.VoidType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNeverType(NeverType node) {
+    visited.add(DartTypeKind.NeverType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNullType(NullType node) {
+    visited.add(DartTypeKind.NullType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInterfaceType(InterfaceType node) {
+    visited.add(DartTypeKind.InterfaceType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFunctionType(FunctionType node) {
+    visited.add(DartTypeKind.FunctionType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedefType(TypedefType node) {
+    visited.add(DartTypeKind.TypedefType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitFutureOrType(FutureOrType node) {
+    visited.add(DartTypeKind.FutureOrType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitExtensionType(ExtensionType node) {
+    visited.add(DartTypeKind.ExtensionType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypeParameterType(TypeParameterType node) {
+    visited.add(DartTypeKind.TypeParameterType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNamedType(NamedType node) {
+    visited.add(NodeKind.NamedType);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSupertype(Supertype node) {
+    visited.add(NodeKind.Supertype);
+    node.visitChildren(this);
+  }
+
+  @override
+  void defaultConstant(Constant node) {}
+  @override
+  void visitNullConstant(NullConstant node) {
+    visited.add(ConstantKind.NullConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBoolConstant(BoolConstant node) {
+    visited.add(ConstantKind.BoolConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitIntConstant(IntConstant node) {
+    visited.add(ConstantKind.IntConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDoubleConstant(DoubleConstant node) {
+    visited.add(ConstantKind.DoubleConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStringConstant(StringConstant node) {
+    visited.add(ConstantKind.StringConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSymbolConstant(SymbolConstant node) {
+    visited.add(ConstantKind.SymbolConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitMapConstant(MapConstant node) {
+    visited.add(ConstantKind.MapConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitListConstant(ListConstant node) {
+    visited.add(ConstantKind.ListConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSetConstant(SetConstant node) {
+    visited.add(ConstantKind.SetConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceConstant(InstanceConstant node) {
+    visited.add(ConstantKind.InstanceConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstantiationConstant(InstantiationConstant node) {
+    visited.add(ConstantKind.InstantiationConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticTearOffConstant(StaticTearOffConstant node) {
+    visited.add(ConstantKind.StaticTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+    visited.add(ConstantKind.ConstructorTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingFactoryTearOffConstant(
+      RedirectingFactoryTearOffConstant node) {
+    visited.add(ConstantKind.RedirectingFactoryTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+    visited.add(ConstantKind.TypedefTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypeLiteralConstant(TypeLiteralConstant node) {
+    visited.add(ConstantKind.TypeLiteralConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitUnevaluatedConstant(UnevaluatedConstant node) {
+    visited.add(ConstantKind.UnevaluatedConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedefReference(Typedef node) {}
+  @override
+  void visitClassReference(Class node) {}
+  @override
+  void visitExtensionReference(Extension node) {}
+  @override
+  void defaultMemberReference(Member node) {}
+  @override
+  void visitFieldReference(Field node) {}
+  @override
+  void visitConstructorReference(Constructor node) {}
+  @override
+  void visitRedirectingFactoryReference(RedirectingFactory node) {}
+  @override
+  void visitProcedureReference(Procedure node) {}
+  @override
+  void defaultConstantReference(Constant node) {}
+  @override
+  void visitNullConstantReference(NullConstant node) {
+    visited.add(ConstantKind.NullConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitBoolConstantReference(BoolConstant node) {
+    visited.add(ConstantKind.BoolConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitIntConstantReference(IntConstant node) {
+    visited.add(ConstantKind.IntConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDoubleConstantReference(DoubleConstant node) {
+    visited.add(ConstantKind.DoubleConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStringConstantReference(StringConstant node) {
+    visited.add(ConstantKind.StringConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSymbolConstantReference(SymbolConstant node) {
+    visited.add(ConstantKind.SymbolConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitMapConstantReference(MapConstant node) {
+    visited.add(ConstantKind.MapConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitListConstantReference(ListConstant node) {
+    visited.add(ConstantKind.ListConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSetConstantReference(SetConstant node) {
+    visited.add(ConstantKind.SetConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceConstantReference(InstanceConstant node) {
+    visited.add(ConstantKind.InstanceConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstantiationConstantReference(InstantiationConstant node) {
+    visited.add(ConstantKind.InstantiationConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticTearOffConstantReference(StaticTearOffConstant node) {
+    visited.add(ConstantKind.StaticTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstructorTearOffConstantReference(
+      ConstructorTearOffConstant node) {
+    visited.add(ConstantKind.ConstructorTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingFactoryTearOffConstantReference(
+      RedirectingFactoryTearOffConstant node) {
+    visited.add(ConstantKind.RedirectingFactoryTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypedefTearOffConstantReference(TypedefTearOffConstant node) {
+    visited.add(ConstantKind.TypedefTearOffConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitTypeLiteralConstantReference(TypeLiteralConstant node) {
+    visited.add(ConstantKind.TypeLiteralConstant);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitUnevaluatedConstantReference(UnevaluatedConstant node) {
+    visited.add(ConstantKind.UnevaluatedConstant);
+    node.visitChildren(this);
+  }
+}
+
+enum NodeKind {
+  Arguments,
+  Catch,
+  Class,
+  Combinator,
+  Component,
+  Extension,
+  FunctionNode,
+  Library,
+  LibraryDependency,
+  LibraryPart,
+  MapLiteralEntry,
+  Name,
+  NamedExpression,
+  NamedType,
+  Supertype,
+  SwitchCase,
+  TypeParameter,
+  Typedef,
+}
+
+enum MemberKind {
+  Constructor,
+  Field,
+  Procedure,
+  RedirectingFactory,
+}
+
+enum InitializerKind {
+  AssertInitializer,
+  FieldInitializer,
+  InvalidInitializer,
+  LocalInitializer,
+  RedirectingInitializer,
+  SuperInitializer,
+}
+
+enum ExpressionKind {
+  AsExpression,
+  AwaitExpression,
+  BlockExpression,
+  BoolLiteral,
+  CheckLibraryIsLoaded,
+  ConditionalExpression,
+  ConstantExpression,
+  ConstructorInvocation,
+  ConstructorTearOff,
+  DoubleLiteral,
+  DynamicGet,
+  DynamicInvocation,
+  DynamicSet,
+  EqualsCall,
+  EqualsNull,
+  FileUriExpression,
+  FunctionExpression,
+  FunctionInvocation,
+  FunctionTearOff,
+  InstanceCreation,
+  InstanceGet,
+  InstanceGetterInvocation,
+  InstanceInvocation,
+  InstanceSet,
+  InstanceTearOff,
+  Instantiation,
+  IntLiteral,
+  InvalidExpression,
+  IsExpression,
+  Let,
+  ListConcatenation,
+  ListLiteral,
+  LoadLibrary,
+  LocalFunctionInvocation,
+  LogicalExpression,
+  MapConcatenation,
+  MapLiteral,
+  Not,
+  NullCheck,
+  NullLiteral,
+  RedirectingFactoryTearOff,
+  Rethrow,
+  SetConcatenation,
+  SetLiteral,
+  StaticGet,
+  StaticInvocation,
+  StaticSet,
+  StaticTearOff,
+  StringConcatenation,
+  StringLiteral,
+  SuperMethodInvocation,
+  SuperPropertyGet,
+  SuperPropertySet,
+  SymbolLiteral,
+  ThisExpression,
+  Throw,
+  TypeLiteral,
+  TypedefTearOff,
+  VariableGet,
+  VariableSet,
+}
+
+enum StatementKind {
+  AssertBlock,
+  AssertStatement,
+  Block,
+  BreakStatement,
+  ContinueSwitchStatement,
+  DoStatement,
+  EmptyStatement,
+  ExpressionStatement,
+  ForInStatement,
+  ForStatement,
+  FunctionDeclaration,
+  IfStatement,
+  LabeledStatement,
+  ReturnStatement,
+  SwitchStatement,
+  TryCatch,
+  TryFinally,
+  VariableDeclaration,
+  WhileStatement,
+  YieldStatement,
+}
+
+enum DartTypeKind {
+  DynamicType,
+  ExtensionType,
+  FunctionType,
+  FutureOrType,
+  InterfaceType,
+  InvalidType,
+  NeverType,
+  NullType,
+  TypeParameterType,
+  TypedefType,
+  VoidType,
+}
+
+enum ConstantKind {
+  BoolConstant,
+  ConstructorTearOffConstant,
+  DoubleConstant,
+  InstanceConstant,
+  InstantiationConstant,
+  IntConstant,
+  ListConstant,
+  MapConstant,
+  NullConstant,
+  RedirectingFactoryTearOffConstant,
+  SetConstant,
+  StaticTearOffConstant,
+  StringConstant,
+  SymbolConstant,
+  TypeLiteralConstant,
+  TypedefTearOffConstant,
+  UnevaluatedConstant,
+}
+
+/// Returns the set of node kinds that were not visited by [visitor].
+Set<Object> missingNodes(CoverageVisitor visitor) {
+  Set<Object> all = {
+    ...NodeKind.values,
+    ...MemberKind.values,
+    ...InitializerKind.values,
+    ...ExpressionKind.values,
+    ...StatementKind.values,
+    ...DartTypeKind.values,
+    ...ConstantKind.values,
+  };
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [MemberKind]s that were not visited by [visitor].
+Set<MemberKind> missingMembers(CoverageVisitor visitor) {
+  Set<MemberKind> all = new Set<MemberKind>.from(MemberKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [InitializerKind]s that were not visited by [visitor].
+Set<InitializerKind> missingInitializers(CoverageVisitor visitor) {
+  Set<InitializerKind> all =
+      new Set<InitializerKind>.from(InitializerKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [ExpressionKind]s that were not visited by [visitor].
+Set<ExpressionKind> missingExpressions(CoverageVisitor visitor) {
+  Set<ExpressionKind> all = new Set<ExpressionKind>.from(ExpressionKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [StatementKind]s that were not visited by [visitor].
+Set<StatementKind> missingStatements(CoverageVisitor visitor) {
+  Set<StatementKind> all = new Set<StatementKind>.from(StatementKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [DartTypeKind]s that were not visited by [visitor].
+Set<DartTypeKind> missingDartTypes(CoverageVisitor visitor) {
+  Set<DartTypeKind> all = new Set<DartTypeKind>.from(DartTypeKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
+
+/// Returns the set of [ConstantKind]s that were not visited by [visitor].
+Set<ConstantKind> missingConstants(CoverageVisitor visitor) {
+  Set<ConstantKind> all = new Set<ConstantKind>.from(ConstantKind.values);
+  all.removeAll(visitor.visited);
+  return all;
+}
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index a6667e8..a8edddb 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -18,7 +18,7 @@
 /// current assumptions. The current state has two modes. In the asserting mode,
 /// the default, inequivalences are registered when found. In the non-asserting
 /// mode, inequivalences are _not_ registered. The latter is used to compute
-/// equivalences in sand boxed state, for instance to determine which elements
+/// equivalences in sandboxed state, for instance to determine which elements
 /// to pair when checking equivalence of two sets.
 class EquivalenceVisitor implements Visitor1<bool, Node> {
   final EquivalenceStrategy strategy;
@@ -950,12 +950,14 @@
     return result;
   }
 
-  /// Returns `true` if [a] and [b] are equivalent, as defined by their
-  /// corresponding canonical names. Inequivalence is _not_ registered.
+  /// Returns `true` if [a] and [b] are equivalent, either by existing
+  /// assumption or as defined by their corresponding canonical names.
+  /// Inequivalence is _not_ registered.
   bool matchNamedNodes(NamedNode? a, NamedNode? b) {
     return identical(a, b) ||
         a == null ||
         b == null ||
+        checkAssumedReferences(a.reference, b.reference) ||
         new ReferenceName.fromNamedNode(a) ==
             new ReferenceName.fromNamedNode(b);
   }
@@ -973,10 +975,12 @@
     return _checkingState.assumeReferences(a, b);
   }
 
-  /// Returns `true` if [a] and [b] are equivalent, as defined by their
-  /// corresponding canonical names. Inequivalence is _not_ registered.
+  /// Returns `true` if [a] and [b] are equivalent, either by existing
+  /// assumption or as defined by their corresponding canonical names.
+  /// Inequivalence is _not_ registered.
   bool matchReferences(Reference? a, Reference? b) {
     return identical(a, b) ||
+        checkAssumedReferences(a, b) ||
         ReferenceName.fromReference(a) == ReferenceName.fromReference(b);
   }
 
@@ -2020,6 +2024,9 @@
     if (!checkInvalidExpression_message(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
+    if (!checkInvalidExpression_expression(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
     if (!checkInvalidExpression_fileOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4522,15 +4529,30 @@
         node.fields, other.fields, visitor.checkNodes, 'fields');
   }
 
-  bool checkLibrary_reference(
-      EquivalenceVisitor visitor, Library node, Library other) {
+  bool checkNamedNode_reference(
+      EquivalenceVisitor visitor, NamedNode node, NamedNode other) {
     return visitor.checkReferences(
         node.reference, other.reference, 'reference');
   }
 
+  bool checkLibrary_reference(
+      EquivalenceVisitor visitor, Library node, Library other) {
+    return checkNamedNode_reference(visitor, node, other);
+  }
+
+  bool checkTreeNode_fileOffset(
+      EquivalenceVisitor visitor, TreeNode node, TreeNode other) {
+    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+  }
+
+  bool checkNamedNode_fileOffset(
+      EquivalenceVisitor visitor, NamedNode node, NamedNode other) {
+    return checkTreeNode_fileOffset(visitor, node, other);
+  }
+
   bool checkLibrary_fileOffset(
       EquivalenceVisitor visitor, Library node, Library other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkNamedNode_fileOffset(visitor, node, other);
   }
 
   bool checkTypedef_fileUri(
@@ -4586,13 +4608,12 @@
 
   bool checkTypedef_reference(
       EquivalenceVisitor visitor, Typedef node, Typedef other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkNamedNode_reference(visitor, node, other);
   }
 
   bool checkTypedef_fileOffset(
       EquivalenceVisitor visitor, Typedef node, Typedef other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkNamedNode_fileOffset(visitor, node, other);
   }
 
   bool checkClass_startFileOffset(
@@ -4673,13 +4694,12 @@
 
   bool checkClass_reference(
       EquivalenceVisitor visitor, Class node, Class other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkNamedNode_reference(visitor, node, other);
   }
 
   bool checkClass_fileOffset(
       EquivalenceVisitor visitor, Class node, Class other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkNamedNode_fileOffset(visitor, node, other);
   }
 
   bool checkExtension_name(
@@ -4746,13 +4766,12 @@
 
   bool checkExtension_reference(
       EquivalenceVisitor visitor, Extension node, Extension other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkNamedNode_reference(visitor, node, other);
   }
 
   bool checkExtension_fileOffset(
       EquivalenceVisitor visitor, Extension node, Extension other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkNamedNode_fileOffset(visitor, node, other);
   }
 
   bool checkField_type(EquivalenceVisitor visitor, Field node, Field other) {
@@ -4775,30 +4794,54 @@
         node.setterReference, other.setterReference, 'setterReference');
   }
 
-  bool checkField_fileEndOffset(
-      EquivalenceVisitor visitor, Field node, Field other) {
+  bool checkMember_fileEndOffset(
+      EquivalenceVisitor visitor, Member node, Member other) {
     return visitor.checkValues(
         node.fileEndOffset, other.fileEndOffset, 'fileEndOffset');
   }
 
-  bool checkField_annotations(
+  bool checkField_fileEndOffset(
       EquivalenceVisitor visitor, Field node, Field other) {
+    return checkMember_fileEndOffset(visitor, node, other);
+  }
+
+  bool checkMember_annotations(
+      EquivalenceVisitor visitor, Member node, Member other) {
     return visitor.checkLists(
         node.annotations, other.annotations, visitor.checkNodes, 'annotations');
   }
 
-  bool checkField_name(EquivalenceVisitor visitor, Field node, Field other) {
+  bool checkField_annotations(
+      EquivalenceVisitor visitor, Field node, Field other) {
+    return checkMember_annotations(visitor, node, other);
+  }
+
+  bool checkMember_name(EquivalenceVisitor visitor, Member node, Member other) {
     return visitor.checkNodes(node.name, other.name, 'name');
   }
 
-  bool checkField_fileUri(EquivalenceVisitor visitor, Field node, Field other) {
+  bool checkField_name(EquivalenceVisitor visitor, Field node, Field other) {
+    return checkMember_name(visitor, node, other);
+  }
+
+  bool checkMember_fileUri(
+      EquivalenceVisitor visitor, Member node, Member other) {
     return visitor.checkValues(node.fileUri, other.fileUri, 'fileUri');
   }
 
+  bool checkField_fileUri(EquivalenceVisitor visitor, Field node, Field other) {
+    return checkMember_fileUri(visitor, node, other);
+  }
+
+  bool checkMember_transformerFlags(
+      EquivalenceVisitor visitor, Member node, Member other) {
+    return visitor.checkValues(
+        node.transformerFlags, other.transformerFlags, 'transformerFlags');
+  }
+
   bool checkField_transformerFlags(
       EquivalenceVisitor visitor, Field node, Field other) {
-    return visitor.checkValues(
-        node.transformerFlags, other.transformerFlags, 'transformerFlags');
+    return checkMember_transformerFlags(visitor, node, other);
   }
 
   bool checkField_getterReference(
@@ -4807,9 +4850,14 @@
         node.getterReference, other.getterReference, 'getterReference');
   }
 
+  bool checkMember_fileOffset(
+      EquivalenceVisitor visitor, Member node, Member other) {
+    return checkNamedNode_fileOffset(visitor, node, other);
+  }
+
   bool checkField_fileOffset(
       EquivalenceVisitor visitor, Field node, Field other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkMember_fileOffset(visitor, node, other);
   }
 
   bool checkConstructor_startFileOffset(
@@ -4836,41 +4884,42 @@
 
   bool checkConstructor_fileEndOffset(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkValues(
-        node.fileEndOffset, other.fileEndOffset, 'fileEndOffset');
+    return checkMember_fileEndOffset(visitor, node, other);
   }
 
   bool checkConstructor_annotations(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkLists(
-        node.annotations, other.annotations, visitor.checkNodes, 'annotations');
+    return checkMember_annotations(visitor, node, other);
   }
 
   bool checkConstructor_name(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkNodes(node.name, other.name, 'name');
+    return checkMember_name(visitor, node, other);
   }
 
   bool checkConstructor_fileUri(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkValues(node.fileUri, other.fileUri, 'fileUri');
+    return checkMember_fileUri(visitor, node, other);
   }
 
   bool checkConstructor_transformerFlags(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkValues(
-        node.transformerFlags, other.transformerFlags, 'transformerFlags');
+    return checkMember_transformerFlags(visitor, node, other);
+  }
+
+  bool checkMember_reference(
+      EquivalenceVisitor visitor, Member node, Member other) {
+    return checkNamedNode_reference(visitor, node, other);
   }
 
   bool checkConstructor_reference(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkMember_reference(visitor, node, other);
   }
 
   bool checkConstructor_fileOffset(
       EquivalenceVisitor visitor, Constructor node, Constructor other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkMember_fileOffset(visitor, node, other);
   }
 
   bool checkRedirectingFactory_flags(EquivalenceVisitor visitor,
@@ -4897,41 +4946,37 @@
 
   bool checkRedirectingFactory_fileEndOffset(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkValues(
-        node.fileEndOffset, other.fileEndOffset, 'fileEndOffset');
+    return checkMember_fileEndOffset(visitor, node, other);
   }
 
   bool checkRedirectingFactory_annotations(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkLists(
-        node.annotations, other.annotations, visitor.checkNodes, 'annotations');
+    return checkMember_annotations(visitor, node, other);
   }
 
   bool checkRedirectingFactory_name(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkNodes(node.name, other.name, 'name');
+    return checkMember_name(visitor, node, other);
   }
 
   bool checkRedirectingFactory_fileUri(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkValues(node.fileUri, other.fileUri, 'fileUri');
+    return checkMember_fileUri(visitor, node, other);
   }
 
   bool checkRedirectingFactory_transformerFlags(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkValues(
-        node.transformerFlags, other.transformerFlags, 'transformerFlags');
+    return checkMember_transformerFlags(visitor, node, other);
   }
 
   bool checkRedirectingFactory_reference(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkMember_reference(visitor, node, other);
   }
 
   bool checkRedirectingFactory_fileOffset(EquivalenceVisitor visitor,
       RedirectingFactory node, RedirectingFactory other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkMember_fileOffset(visitor, node, other);
   }
 
   bool checkProcedure_startFileOffset(
@@ -4968,41 +5013,37 @@
 
   bool checkProcedure_fileEndOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkValues(
-        node.fileEndOffset, other.fileEndOffset, 'fileEndOffset');
+    return checkMember_fileEndOffset(visitor, node, other);
   }
 
   bool checkProcedure_annotations(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkLists(
-        node.annotations, other.annotations, visitor.checkNodes, 'annotations');
+    return checkMember_annotations(visitor, node, other);
   }
 
   bool checkProcedure_name(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkNodes(node.name, other.name, 'name');
+    return checkMember_name(visitor, node, other);
   }
 
   bool checkProcedure_fileUri(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkValues(node.fileUri, other.fileUri, 'fileUri');
+    return checkMember_fileUri(visitor, node, other);
   }
 
   bool checkProcedure_transformerFlags(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkValues(
-        node.transformerFlags, other.transformerFlags, 'transformerFlags');
+    return checkMember_transformerFlags(visitor, node, other);
   }
 
   bool checkProcedure_reference(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkReferences(
-        node.reference, other.reference, 'reference');
+    return checkMember_reference(visitor, node, other);
   }
 
   bool checkProcedure_fileOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkMember_fileOffset(visitor, node, other);
   }
 
   bool checkLibraryDependency_flags(EquivalenceVisitor visitor,
@@ -5037,7 +5078,7 @@
 
   bool checkLibraryDependency_fileOffset(EquivalenceVisitor visitor,
       LibraryDependency node, LibraryDependency other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkLibraryPart_annotations(
@@ -5053,7 +5094,7 @@
 
   bool checkLibraryPart_fileOffset(
       EquivalenceVisitor visitor, LibraryPart node, LibraryPart other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkCombinator_isShow(
@@ -5069,18 +5110,28 @@
 
   bool checkCombinator_fileOffset(
       EquivalenceVisitor visitor, Combinator node, Combinator other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
-  bool checkInvalidInitializer_isSynthetic(EquivalenceVisitor visitor,
-      InvalidInitializer node, InvalidInitializer other) {
+  bool checkInitializer_isSynthetic(
+      EquivalenceVisitor visitor, Initializer node, Initializer other) {
     return visitor.checkValues(
         node.isSynthetic, other.isSynthetic, 'isSynthetic');
   }
 
+  bool checkInvalidInitializer_isSynthetic(EquivalenceVisitor visitor,
+      InvalidInitializer node, InvalidInitializer other) {
+    return checkInitializer_isSynthetic(visitor, node, other);
+  }
+
+  bool checkInitializer_fileOffset(
+      EquivalenceVisitor visitor, Initializer node, Initializer other) {
+    return checkTreeNode_fileOffset(visitor, node, other);
+  }
+
   bool checkInvalidInitializer_fileOffset(EquivalenceVisitor visitor,
       InvalidInitializer node, InvalidInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkFieldInitializer_fieldReference(EquivalenceVisitor visitor,
@@ -5096,13 +5147,12 @@
 
   bool checkFieldInitializer_isSynthetic(EquivalenceVisitor visitor,
       FieldInitializer node, FieldInitializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
+    return checkInitializer_isSynthetic(visitor, node, other);
   }
 
   bool checkFieldInitializer_fileOffset(EquivalenceVisitor visitor,
       FieldInitializer node, FieldInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkSuperInitializer_targetReference(EquivalenceVisitor visitor,
@@ -5118,13 +5168,12 @@
 
   bool checkSuperInitializer_isSynthetic(EquivalenceVisitor visitor,
       SuperInitializer node, SuperInitializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
+    return checkInitializer_isSynthetic(visitor, node, other);
   }
 
   bool checkSuperInitializer_fileOffset(EquivalenceVisitor visitor,
       SuperInitializer node, SuperInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkRedirectingInitializer_targetReference(EquivalenceVisitor visitor,
@@ -5140,13 +5189,12 @@
 
   bool checkRedirectingInitializer_isSynthetic(EquivalenceVisitor visitor,
       RedirectingInitializer node, RedirectingInitializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
+    return checkInitializer_isSynthetic(visitor, node, other);
   }
 
   bool checkRedirectingInitializer_fileOffset(EquivalenceVisitor visitor,
       RedirectingInitializer node, RedirectingInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkLocalInitializer_variable(EquivalenceVisitor visitor,
@@ -5156,13 +5204,12 @@
 
   bool checkLocalInitializer_isSynthetic(EquivalenceVisitor visitor,
       LocalInitializer node, LocalInitializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
+    return checkInitializer_isSynthetic(visitor, node, other);
   }
 
   bool checkLocalInitializer_fileOffset(EquivalenceVisitor visitor,
       LocalInitializer node, LocalInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkAssertInitializer_statement(EquivalenceVisitor visitor,
@@ -5172,13 +5219,12 @@
 
   bool checkAssertInitializer_isSynthetic(EquivalenceVisitor visitor,
       AssertInitializer node, AssertInitializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
+    return checkInitializer_isSynthetic(visitor, node, other);
   }
 
   bool checkAssertInitializer_fileOffset(EquivalenceVisitor visitor,
       AssertInitializer node, AssertInitializer other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInitializer_fileOffset(visitor, node, other);
   }
 
   bool checkFunctionNode_fileEndOffset(
@@ -5247,7 +5293,7 @@
 
   bool checkFunctionNode_fileOffset(
       EquivalenceVisitor visitor, FunctionNode node, FunctionNode other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkInvalidExpression_message(EquivalenceVisitor visitor,
@@ -5255,9 +5301,19 @@
     return visitor.checkValues(node.message, other.message, 'message');
   }
 
+  bool checkInvalidExpression_expression(EquivalenceVisitor visitor,
+      InvalidExpression node, InvalidExpression other) {
+    return visitor.checkNodes(node.expression, other.expression, 'expression');
+  }
+
+  bool checkExpression_fileOffset(
+      EquivalenceVisitor visitor, Expression node, Expression other) {
+    return checkTreeNode_fileOffset(visitor, node, other);
+  }
+
   bool checkInvalidExpression_fileOffset(EquivalenceVisitor visitor,
       InvalidExpression node, InvalidExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkVariableGet_variable(
@@ -5273,7 +5329,7 @@
 
   bool checkVariableGet_fileOffset(
       EquivalenceVisitor visitor, VariableGet node, VariableGet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkVariableSet_variable(
@@ -5288,7 +5344,7 @@
 
   bool checkVariableSet_fileOffset(
       EquivalenceVisitor visitor, VariableSet node, VariableSet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkDynamicGet_kind(
@@ -5308,7 +5364,7 @@
 
   bool checkDynamicGet_fileOffset(
       EquivalenceVisitor visitor, DynamicGet node, DynamicGet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceGet_kind(
@@ -5339,7 +5395,7 @@
 
   bool checkInstanceGet_fileOffset(
       EquivalenceVisitor visitor, InstanceGet node, InstanceGet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkFunctionTearOff_receiver(
@@ -5349,7 +5405,7 @@
 
   bool checkFunctionTearOff_fileOffset(
       EquivalenceVisitor visitor, FunctionTearOff node, FunctionTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceTearOff_kind(
@@ -5380,7 +5436,7 @@
 
   bool checkInstanceTearOff_fileOffset(
       EquivalenceVisitor visitor, InstanceTearOff node, InstanceTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkDynamicSet_kind(
@@ -5405,7 +5461,7 @@
 
   bool checkDynamicSet_fileOffset(
       EquivalenceVisitor visitor, DynamicSet node, DynamicSet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceSet_kind(
@@ -5436,7 +5492,7 @@
 
   bool checkInstanceSet_fileOffset(
       EquivalenceVisitor visitor, InstanceSet node, InstanceSet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkSuperPropertyGet_name(EquivalenceVisitor visitor,
@@ -5454,7 +5510,7 @@
 
   bool checkSuperPropertyGet_fileOffset(EquivalenceVisitor visitor,
       SuperPropertyGet node, SuperPropertyGet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkSuperPropertySet_name(EquivalenceVisitor visitor,
@@ -5477,7 +5533,7 @@
 
   bool checkSuperPropertySet_fileOffset(EquivalenceVisitor visitor,
       SuperPropertySet node, SuperPropertySet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStaticGet_targetReference(
@@ -5488,7 +5544,7 @@
 
   bool checkStaticGet_fileOffset(
       EquivalenceVisitor visitor, StaticGet node, StaticGet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStaticTearOff_targetReference(
@@ -5499,7 +5555,7 @@
 
   bool checkStaticTearOff_fileOffset(
       EquivalenceVisitor visitor, StaticTearOff node, StaticTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStaticSet_targetReference(
@@ -5515,7 +5571,7 @@
 
   bool checkStaticSet_fileOffset(
       EquivalenceVisitor visitor, StaticSet node, StaticSet other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkDynamicInvocation_kind(EquivalenceVisitor visitor,
@@ -5538,9 +5594,19 @@
     return visitor.checkNodes(node.arguments, other.arguments, 'arguments');
   }
 
+  bool checkInvocationExpression_fileOffset(EquivalenceVisitor visitor,
+      InvocationExpression node, InvocationExpression other) {
+    return checkExpression_fileOffset(visitor, node, other);
+  }
+
+  bool checkInstanceInvocationExpression_fileOffset(EquivalenceVisitor visitor,
+      InstanceInvocationExpression node, InstanceInvocationExpression other) {
+    return checkInvocationExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkDynamicInvocation_fileOffset(EquivalenceVisitor visitor,
       DynamicInvocation node, DynamicInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInstanceInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceInvocation_kind(EquivalenceVisitor visitor,
@@ -5584,7 +5650,7 @@
 
   bool checkInstanceInvocation_fileOffset(EquivalenceVisitor visitor,
       InstanceInvocation node, InstanceInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInstanceInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceGetterInvocation_kind(EquivalenceVisitor visitor,
@@ -5628,7 +5694,7 @@
 
   bool checkInstanceGetterInvocation_fileOffset(EquivalenceVisitor visitor,
       InstanceGetterInvocation node, InstanceGetterInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInstanceInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkFunctionInvocation_kind(EquivalenceVisitor visitor,
@@ -5654,7 +5720,7 @@
 
   bool checkFunctionInvocation_fileOffset(EquivalenceVisitor visitor,
       FunctionInvocation node, FunctionInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInstanceInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkLocalFunctionInvocation_variable(EquivalenceVisitor visitor,
@@ -5675,7 +5741,7 @@
 
   bool checkLocalFunctionInvocation_fileOffset(EquivalenceVisitor visitor,
       LocalFunctionInvocation node, LocalFunctionInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkSuperMethodInvocation_name(EquivalenceVisitor visitor,
@@ -5698,7 +5764,7 @@
 
   bool checkSuperMethodInvocation_fileOffset(EquivalenceVisitor visitor,
       SuperMethodInvocation node, SuperMethodInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStaticInvocation_targetReference(EquivalenceVisitor visitor,
@@ -5719,7 +5785,7 @@
 
   bool checkStaticInvocation_fileOffset(EquivalenceVisitor visitor,
       StaticInvocation node, StaticInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkConstructorInvocation_targetReference(EquivalenceVisitor visitor,
@@ -5740,7 +5806,7 @@
 
   bool checkConstructorInvocation_fileOffset(EquivalenceVisitor visitor,
       ConstructorInvocation node, ConstructorInvocation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkInvocationExpression_fileOffset(visitor, node, other);
   }
 
   bool checkEqualsNull_expression(
@@ -5750,7 +5816,7 @@
 
   bool checkEqualsNull_fileOffset(
       EquivalenceVisitor visitor, EqualsNull node, EqualsNull other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkEqualsCall_left(
@@ -5777,7 +5843,7 @@
 
   bool checkEqualsCall_fileOffset(
       EquivalenceVisitor visitor, EqualsCall node, EqualsCall other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstantiation_expression(
@@ -5793,7 +5859,7 @@
 
   bool checkInstantiation_fileOffset(
       EquivalenceVisitor visitor, Instantiation node, Instantiation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkNot_operand(EquivalenceVisitor visitor, Not node, Not other) {
@@ -5801,7 +5867,7 @@
   }
 
   bool checkNot_fileOffset(EquivalenceVisitor visitor, Not node, Not other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkLogicalExpression_left(EquivalenceVisitor visitor,
@@ -5822,7 +5888,7 @@
 
   bool checkLogicalExpression_fileOffset(EquivalenceVisitor visitor,
       LogicalExpression node, LogicalExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkConditionalExpression_condition(EquivalenceVisitor visitor,
@@ -5847,7 +5913,7 @@
 
   bool checkConditionalExpression_fileOffset(EquivalenceVisitor visitor,
       ConditionalExpression node, ConditionalExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStringConcatenation_expressions(EquivalenceVisitor visitor,
@@ -5858,7 +5924,7 @@
 
   bool checkStringConcatenation_fileOffset(EquivalenceVisitor visitor,
       StringConcatenation node, StringConcatenation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkListConcatenation_typeArgument(EquivalenceVisitor visitor,
@@ -5875,7 +5941,7 @@
 
   bool checkListConcatenation_fileOffset(EquivalenceVisitor visitor,
       ListConcatenation node, ListConcatenation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkSetConcatenation_typeArgument(EquivalenceVisitor visitor,
@@ -5892,7 +5958,7 @@
 
   bool checkSetConcatenation_fileOffset(EquivalenceVisitor visitor,
       SetConcatenation node, SetConcatenation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkMapConcatenation_keyType(EquivalenceVisitor visitor,
@@ -5913,7 +5979,7 @@
 
   bool checkMapConcatenation_fileOffset(EquivalenceVisitor visitor,
       MapConcatenation node, MapConcatenation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkInstanceCreation_classReference(EquivalenceVisitor visitor,
@@ -5953,7 +6019,7 @@
 
   bool checkInstanceCreation_fileOffset(EquivalenceVisitor visitor,
       InstanceCreation node, InstanceCreation other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkFileUriExpression_fileUri(EquivalenceVisitor visitor,
@@ -5968,7 +6034,7 @@
 
   bool checkFileUriExpression_fileOffset(EquivalenceVisitor visitor,
       FileUriExpression node, FileUriExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkIsExpression_flags(
@@ -5988,7 +6054,7 @@
 
   bool checkIsExpression_fileOffset(
       EquivalenceVisitor visitor, IsExpression node, IsExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkAsExpression_flags(
@@ -6008,7 +6074,7 @@
 
   bool checkAsExpression_fileOffset(
       EquivalenceVisitor visitor, AsExpression node, AsExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkNullCheck_operand(
@@ -6018,7 +6084,7 @@
 
   bool checkNullCheck_fileOffset(
       EquivalenceVisitor visitor, NullCheck node, NullCheck other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkStringLiteral_value(
@@ -6026,9 +6092,14 @@
     return visitor.checkValues(node.value, other.value, 'value');
   }
 
+  bool checkBasicLiteral_fileOffset(
+      EquivalenceVisitor visitor, BasicLiteral node, BasicLiteral other) {
+    return checkExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkStringLiteral_fileOffset(
       EquivalenceVisitor visitor, StringLiteral node, StringLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkBasicLiteral_fileOffset(visitor, node, other);
   }
 
   bool checkIntLiteral_value(
@@ -6038,7 +6109,7 @@
 
   bool checkIntLiteral_fileOffset(
       EquivalenceVisitor visitor, IntLiteral node, IntLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkBasicLiteral_fileOffset(visitor, node, other);
   }
 
   bool checkDoubleLiteral_value(
@@ -6048,7 +6119,7 @@
 
   bool checkDoubleLiteral_fileOffset(
       EquivalenceVisitor visitor, DoubleLiteral node, DoubleLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkBasicLiteral_fileOffset(visitor, node, other);
   }
 
   bool checkBoolLiteral_value(
@@ -6058,12 +6129,12 @@
 
   bool checkBoolLiteral_fileOffset(
       EquivalenceVisitor visitor, BoolLiteral node, BoolLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkBasicLiteral_fileOffset(visitor, node, other);
   }
 
   bool checkNullLiteral_fileOffset(
       EquivalenceVisitor visitor, NullLiteral node, NullLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkBasicLiteral_fileOffset(visitor, node, other);
   }
 
   bool checkSymbolLiteral_value(
@@ -6073,7 +6144,7 @@
 
   bool checkSymbolLiteral_fileOffset(
       EquivalenceVisitor visitor, SymbolLiteral node, SymbolLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkTypeLiteral_type(
@@ -6083,17 +6154,17 @@
 
   bool checkTypeLiteral_fileOffset(
       EquivalenceVisitor visitor, TypeLiteral node, TypeLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkThisExpression_fileOffset(
       EquivalenceVisitor visitor, ThisExpression node, ThisExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkRethrow_fileOffset(
       EquivalenceVisitor visitor, Rethrow node, Rethrow other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkThrow_expression(
@@ -6103,7 +6174,7 @@
 
   bool checkThrow_fileOffset(
       EquivalenceVisitor visitor, Throw node, Throw other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkListLiteral_isConst(
@@ -6125,7 +6196,7 @@
 
   bool checkListLiteral_fileOffset(
       EquivalenceVisitor visitor, ListLiteral node, ListLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkSetLiteral_isConst(
@@ -6147,7 +6218,7 @@
 
   bool checkSetLiteral_fileOffset(
       EquivalenceVisitor visitor, SetLiteral node, SetLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkMapLiteral_isConst(
@@ -6173,7 +6244,7 @@
 
   bool checkMapLiteral_fileOffset(
       EquivalenceVisitor visitor, MapLiteral node, MapLiteral other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkAwaitExpression_operand(
@@ -6183,7 +6254,7 @@
 
   bool checkAwaitExpression_fileOffset(
       EquivalenceVisitor visitor, AwaitExpression node, AwaitExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkFunctionExpression_function(EquivalenceVisitor visitor,
@@ -6193,7 +6264,7 @@
 
   bool checkFunctionExpression_fileOffset(EquivalenceVisitor visitor,
       FunctionExpression node, FunctionExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkConstantExpression_constant(EquivalenceVisitor visitor,
@@ -6208,7 +6279,7 @@
 
   bool checkConstantExpression_fileOffset(EquivalenceVisitor visitor,
       ConstantExpression node, ConstantExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkLet_variable(EquivalenceVisitor visitor, Let node, Let other) {
@@ -6220,7 +6291,7 @@
   }
 
   bool checkLet_fileOffset(EquivalenceVisitor visitor, Let node, Let other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkBlockExpression_body(
@@ -6235,7 +6306,7 @@
 
   bool checkBlockExpression_fileOffset(
       EquivalenceVisitor visitor, BlockExpression node, BlockExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkLoadLibrary_import(
@@ -6245,7 +6316,7 @@
 
   bool checkLoadLibrary_fileOffset(
       EquivalenceVisitor visitor, LoadLibrary node, LoadLibrary other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkCheckLibraryIsLoaded_import(EquivalenceVisitor visitor,
@@ -6255,7 +6326,7 @@
 
   bool checkCheckLibraryIsLoaded_fileOffset(EquivalenceVisitor visitor,
       CheckLibraryIsLoaded node, CheckLibraryIsLoaded other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkConstructorTearOff_targetReference(EquivalenceVisitor visitor,
@@ -6266,7 +6337,7 @@
 
   bool checkConstructorTearOff_fileOffset(EquivalenceVisitor visitor,
       ConstructorTearOff node, ConstructorTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkRedirectingFactoryTearOff_targetReference(
@@ -6279,7 +6350,7 @@
 
   bool checkRedirectingFactoryTearOff_fileOffset(EquivalenceVisitor visitor,
       RedirectingFactoryTearOff node, RedirectingFactoryTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkTypedefTearOff_typeParameters(
@@ -6301,7 +6372,7 @@
 
   bool checkTypedefTearOff_fileOffset(
       EquivalenceVisitor visitor, TypedefTearOff node, TypedefTearOff other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkExpression_fileOffset(visitor, node, other);
   }
 
   bool checkArguments_types(
@@ -6324,7 +6395,7 @@
 
   bool checkArguments_fileOffset(
       EquivalenceVisitor visitor, Arguments node, Arguments other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkNamedExpression_name(
@@ -6339,7 +6410,7 @@
 
   bool checkNamedExpression_fileOffset(
       EquivalenceVisitor visitor, NamedExpression node, NamedExpression other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkMapLiteralEntry_key(
@@ -6354,7 +6425,7 @@
 
   bool checkMapLiteralEntry_fileOffset(
       EquivalenceVisitor visitor, MapLiteralEntry node, MapLiteralEntry other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkExpressionStatement_expression(EquivalenceVisitor visitor,
@@ -6362,9 +6433,14 @@
     return visitor.checkNodes(node.expression, other.expression, 'expression');
   }
 
+  bool checkStatement_fileOffset(
+      EquivalenceVisitor visitor, Statement node, Statement other) {
+    return checkTreeNode_fileOffset(visitor, node, other);
+  }
+
   bool checkExpressionStatement_fileOffset(EquivalenceVisitor visitor,
       ExpressionStatement node, ExpressionStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkBlock_statements(
@@ -6381,7 +6457,7 @@
 
   bool checkBlock_fileOffset(
       EquivalenceVisitor visitor, Block node, Block other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkAssertBlock_statements(
@@ -6392,12 +6468,12 @@
 
   bool checkAssertBlock_fileOffset(
       EquivalenceVisitor visitor, AssertBlock node, AssertBlock other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkEmptyStatement_fileOffset(
       EquivalenceVisitor visitor, EmptyStatement node, EmptyStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkAssertStatement_condition(
@@ -6424,7 +6500,7 @@
 
   bool checkAssertStatement_fileOffset(
       EquivalenceVisitor visitor, AssertStatement node, AssertStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkLabeledStatement_body(EquivalenceVisitor visitor,
@@ -6434,7 +6510,7 @@
 
   bool checkLabeledStatement_fileOffset(EquivalenceVisitor visitor,
       LabeledStatement node, LabeledStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkBreakStatement_target(
@@ -6444,7 +6520,7 @@
 
   bool checkBreakStatement_fileOffset(
       EquivalenceVisitor visitor, BreakStatement node, BreakStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkWhileStatement_condition(
@@ -6459,7 +6535,7 @@
 
   bool checkWhileStatement_fileOffset(
       EquivalenceVisitor visitor, WhileStatement node, WhileStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkDoStatement_body(
@@ -6474,7 +6550,7 @@
 
   bool checkDoStatement_fileOffset(
       EquivalenceVisitor visitor, DoStatement node, DoStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkForStatement_variables(
@@ -6501,7 +6577,7 @@
 
   bool checkForStatement_fileOffset(
       EquivalenceVisitor visitor, ForStatement node, ForStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkForInStatement_bodyOffset(
@@ -6531,7 +6607,7 @@
 
   bool checkForInStatement_fileOffset(
       EquivalenceVisitor visitor, ForInStatement node, ForInStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkSwitchStatement_expression(
@@ -6547,7 +6623,7 @@
 
   bool checkSwitchStatement_fileOffset(
       EquivalenceVisitor visitor, SwitchStatement node, SwitchStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkContinueSwitchStatement_target(EquivalenceVisitor visitor,
@@ -6557,7 +6633,7 @@
 
   bool checkContinueSwitchStatement_fileOffset(EquivalenceVisitor visitor,
       ContinueSwitchStatement node, ContinueSwitchStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkIfStatement_condition(
@@ -6577,7 +6653,7 @@
 
   bool checkIfStatement_fileOffset(
       EquivalenceVisitor visitor, IfStatement node, IfStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkReturnStatement_expression(
@@ -6587,7 +6663,7 @@
 
   bool checkReturnStatement_fileOffset(
       EquivalenceVisitor visitor, ReturnStatement node, ReturnStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkTryCatch_body(
@@ -6609,7 +6685,7 @@
 
   bool checkTryCatch_fileOffset(
       EquivalenceVisitor visitor, TryCatch node, TryCatch other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkTryFinally_body(
@@ -6624,7 +6700,7 @@
 
   bool checkTryFinally_fileOffset(
       EquivalenceVisitor visitor, TryFinally node, TryFinally other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkYieldStatement_expression(
@@ -6639,7 +6715,7 @@
 
   bool checkYieldStatement_fileOffset(
       EquivalenceVisitor visitor, YieldStatement node, YieldStatement other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkVariableDeclaration_fileEqualsOffset(EquivalenceVisitor visitor,
@@ -6683,7 +6759,7 @@
 
   bool checkVariableDeclaration_fileOffset(EquivalenceVisitor visitor,
       VariableDeclaration node, VariableDeclaration other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkFunctionDeclaration_variable(EquivalenceVisitor visitor,
@@ -6698,7 +6774,7 @@
 
   bool checkFunctionDeclaration_fileOffset(EquivalenceVisitor visitor,
       FunctionDeclaration node, FunctionDeclaration other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkStatement_fileOffset(visitor, node, other);
   }
 
   bool checkSwitchCase_expressions(
@@ -6725,7 +6801,7 @@
 
   bool checkSwitchCase_fileOffset(
       EquivalenceVisitor visitor, SwitchCase node, SwitchCase other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkCatch_guard(EquivalenceVisitor visitor, Catch node, Catch other) {
@@ -6748,7 +6824,7 @@
 
   bool checkCatch_fileOffset(
       EquivalenceVisitor visitor, Catch node, Catch other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkTypeParameter_flags(
@@ -6785,7 +6861,7 @@
 
   bool checkTypeParameter_fileOffset(
       EquivalenceVisitor visitor, TypeParameter node, TypeParameter other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkComponent_problemsAsJson(
@@ -6873,7 +6949,7 @@
 
   bool checkComponent_fileOffset(
       EquivalenceVisitor visitor, Component node, Component other) {
-    return visitor.checkValues(node.fileOffset, other.fileOffset, 'fileOffset');
+    return checkTreeNode_fileOffset(visitor, node, other);
   }
 
   bool checkName_text(EquivalenceVisitor visitor, Name node, Name other) {
@@ -7043,29 +7119,34 @@
         visitor.checkNodes, 'typeArguments');
   }
 
+  bool checkPrimitiveConstant_value(EquivalenceVisitor visitor,
+      PrimitiveConstant node, PrimitiveConstant other) {
+    return visitor.checkValues(node.value, other.value, 'value');
+  }
+
   bool checkNullConstant_value(
       EquivalenceVisitor visitor, NullConstant node, NullConstant other) {
-    return visitor.checkValues(node.value, other.value, 'value');
+    return checkPrimitiveConstant_value(visitor, node, other);
   }
 
   bool checkBoolConstant_value(
       EquivalenceVisitor visitor, BoolConstant node, BoolConstant other) {
-    return visitor.checkValues(node.value, other.value, 'value');
+    return checkPrimitiveConstant_value(visitor, node, other);
   }
 
   bool checkIntConstant_value(
       EquivalenceVisitor visitor, IntConstant node, IntConstant other) {
-    return visitor.checkValues(node.value, other.value, 'value');
+    return checkPrimitiveConstant_value(visitor, node, other);
   }
 
   bool checkDoubleConstant_value(
       EquivalenceVisitor visitor, DoubleConstant node, DoubleConstant other) {
-    return visitor.checkValues(node.value, other.value, 'value');
+    return checkPrimitiveConstant_value(visitor, node, other);
   }
 
   bool checkStringConstant_value(
       EquivalenceVisitor visitor, StringConstant node, StringConstant other) {
-    return visitor.checkValues(node.value, other.value, 'value');
+    return checkPrimitiveConstant_value(visitor, node, other);
   }
 
   bool checkSymbolConstant_name(
diff --git a/pkg/kernel/lib/src/equivalence_helpers.dart b/pkg/kernel/lib/src/equivalence_helpers.dart
index a7ccb27..a36ee07 100644
--- a/pkg/kernel/lib/src/equivalence_helpers.dart
+++ b/pkg/kernel/lib/src/equivalence_helpers.dart
@@ -13,6 +13,7 @@
 
 /// State for visiting two AST nodes in [EquivalenceVisitor].
 class NodeState extends State {
+  @override
   final State? parent;
   final Node a;
   final Node b;
@@ -22,6 +23,7 @@
 
 /// State for visiting an AST property in [EquivalenceVisitor]
 class PropertyState extends State {
+  @override
   final State? parent;
   final String name;
 
@@ -265,7 +267,7 @@
       return new ReferenceName.internal(ReferenceNameKind.Member, node.name,
           new ReferenceName.fromNamedNode(node.enclosingLibrary));
     } else if (node is Member) {
-      Class? enclosingClass = node.enclosingClass;
+      TreeNode? parent = node.parent;
       Reference? libraryReference = node.name.libraryName;
       String? uri;
       if (libraryReference != null) {
@@ -276,18 +278,15 @@
           uri = libraryReference.canonicalName?.name;
         }
       }
-      if (enclosingClass != null) {
-        return new ReferenceName.internal(
-            ReferenceNameKind.Member,
-            node.name.text,
-            new ReferenceName.fromNamedNode(enclosingClass),
-            uri);
+      if (parent is Class) {
+        return new ReferenceName.internal(ReferenceNameKind.Member,
+            node.name.text, new ReferenceName.fromNamedNode(parent), uri);
+      } else if (parent is Library) {
+        return new ReferenceName.internal(ReferenceNameKind.Member,
+            node.name.text, new ReferenceName.fromNamedNode(parent), uri);
       } else {
         return new ReferenceName.internal(
-            ReferenceNameKind.Member,
-            node.name.text,
-            new ReferenceName.fromNamedNode(node.enclosingLibrary),
-            uri);
+            ReferenceNameKind.Member, node.name.text, null, uri);
       }
     } else {
       throw new ArgumentError(
diff --git a/pkg/kernel/lib/src/hierarchy_based_type_environment.dart b/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
index 58186dd..65894ac 100644
--- a/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
+++ b/pkg/kernel/lib/src/hierarchy_based_type_environment.dart
@@ -13,6 +13,7 @@
 import '../type_environment.dart' show TypeEnvironment;
 
 class HierarchyBasedTypeEnvironment extends TypeEnvironment {
+  @override
   final ClassHierarchyBase hierarchy;
 
   HierarchyBasedTypeEnvironment(CoreTypes coreTypes, this.hierarchy)
diff --git a/pkg/kernel/lib/src/legacy_erasure.dart b/pkg/kernel/lib/src/legacy_erasure.dart
index 316a701..a17f78b 100644
--- a/pkg/kernel/lib/src/legacy_erasure.dart
+++ b/pkg/kernel/lib/src/legacy_erasure.dart
@@ -51,6 +51,7 @@
 class _LegacyErasure extends ReplacementVisitor {
   const _LegacyErasure();
 
+  @override
   Nullability? visitNullability(DartType node) {
     if (node.declaredNullability != Nullability.legacy) {
       return Nullability.legacy;
diff --git a/pkg/kernel/lib/src/node_creator.dart b/pkg/kernel/lib/src/node_creator.dart
new file mode 100644
index 0000000..8c0337d
--- /dev/null
+++ b/pkg/kernel/lib/src/node_creator.dart
@@ -0,0 +1,1481 @@
+// 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 '../ast.dart';
+import 'coverage.dart';
+
+/// Helper class used to generate ASTs that contain all different nodes.
+class NodeCreator {
+  final Uri _uri;
+
+  /// File offset counter.
+  ///
+  /// Used to generate distinct file offsets through [_needFileOffset].
+  int _fileOffset = 0;
+
+  /// The parent [Component] for all created libraries, classes, extensions,
+  /// typedefs and members.
+  final Component _component = new Component();
+
+  /// These fields contain maps of requested nodes different kinds that are
+  /// still pending. The mapped values are used to track how many nodes of the
+  /// specific kind have been created. When all variants of a kind have been
+  /// created, the entry is removed from the map.
+  final Map<ExpressionKind, int> _pendingExpressions;
+  final Map<StatementKind, int> _pendingStatements;
+  final Map<DartTypeKind, int> _pendingDartTypes;
+  final Map<ConstantKind, int> _pendingConstants;
+  final Map<InitializerKind, int> _pendingInitializers;
+  final Map<MemberKind, int> _pendingMembers;
+  final Map<NodeKind, int> _pendingNodes;
+
+  /// The set of all kinds of nodes created by this node creator.
+  final Set<Object> _createdKinds = {};
+
+  /// These fields contain list of nodes needed for the creation of other nodes.
+  ///
+  /// Needed nodes are nodes that need to exist prior to the node that required
+  /// it. For instance, to create an [InterfaceType] node, a [Class] node must
+  /// exist for the [InterfaceType] to reference.
+  ///
+  /// Needed nodes are added to the context of the created nodes. For instance,
+  /// a needed [Class] is added to the [_component] and a needed
+  /// [VariableDeclaration] is added to a enclosing [Block].
+  List<Library> _neededLibraries = [];
+  List<Class> _neededClasses = [];
+  List<Extension> _neededExtensions = [];
+  List<Typedef> _neededTypedefs = [];
+  List<TypeParameter> _neededTypeParameters = [];
+  List<Constructor> _neededConstructors = [];
+  List<Procedure> _neededRedirectingFactories = [];
+  List<Procedure> _neededProcedures = [];
+  List<Field> _neededFields = [];
+  List<LibraryDependency> _neededLibraryDependencies = [];
+  List<VariableDeclaration> _neededVariableDeclarations = [];
+  List<LabeledStatement> _neededLabeledStatements = [];
+  List<FunctionDeclaration> _neededFunctionDeclarations = [];
+  List<SwitchCase> _neededSwitchCases = [];
+
+  /// Creates a [NodeCreator] requested to create nodes of the specified kinds.
+  NodeCreator({
+    Iterable<ExpressionKind> expressions: ExpressionKind.values,
+    Iterable<StatementKind> statements: StatementKind.values,
+    Iterable<DartTypeKind> dartTypes: DartTypeKind.values,
+    Iterable<ConstantKind> constants: ConstantKind.values,
+    Iterable<InitializerKind> initializers: InitializerKind.values,
+    Iterable<MemberKind> members: MemberKind.values,
+    Iterable<NodeKind> nodes: NodeKind.values,
+  })  : _pendingExpressions = new Map<ExpressionKind, int>.fromIterables(
+            expressions, new List<int>.filled(expressions.length, 0)),
+        _pendingStatements = new Map<StatementKind, int>.fromIterables(
+            statements, new List<int>.filled(statements.length, 0)),
+        _pendingDartTypes = new Map<DartTypeKind, int>.fromIterables(
+            dartTypes, new List<int>.filled(dartTypes.length, 0)),
+        _pendingConstants = new Map<ConstantKind, int>.fromIterables(
+            constants, new List<int>.filled(constants.length, 0)),
+        _pendingInitializers = new Map<InitializerKind, int>.fromIterables(
+            initializers, new List<int>.filled(initializers.length, 0)),
+        _pendingMembers = new Map<MemberKind, int>.fromIterables(
+            members, new List<int>.filled(members.length, 0)),
+        _pendingNodes = new Map<NodeKind, int>.fromIterables(
+            nodes, new List<int>.filled(nodes.length, 0)),
+        _uri = Uri.parse('test:uri') {
+    _createdKinds.addAll(_pendingExpressions.keys);
+    _createdKinds.addAll(_pendingStatements.keys);
+    _createdKinds.addAll(_pendingDartTypes.keys);
+    _createdKinds.addAll(_pendingInitializers.keys);
+    _createdKinds.addAll(_pendingMembers.keys);
+    _createdKinds.addAll(_pendingNodes.keys);
+  }
+
+  /// The kinds created by this node creator.
+  Iterable<Object> get createdKinds => _createdKinds;
+
+  /// Wraps [statement] in nodes needed in the statement context.
+  ///
+  /// For instance, if a [LabeledStatement] was needed for the creation of
+  /// [statement], [statement] is wrapped inside the labeled statement.
+  Statement _ensureContext(Statement statement) {
+    if (_neededSwitchCases.isNotEmpty) {
+      statement = SwitchStatement(NullLiteral(), [
+        ..._neededSwitchCases,
+        SwitchCase([NullLiteral()], [TreeNode.noOffset], Block([statement]))
+      ]);
+    }
+    _neededSwitchCases.clear();
+    for (LabeledStatement labeledStatement in _neededLabeledStatements) {
+      labeledStatement.body = statement;
+      statement = labeledStatement;
+    }
+    _neededLabeledStatements.clear();
+    statement = Block([
+      ..._neededVariableDeclarations,
+      ..._neededFunctionDeclarations,
+      statement
+    ]);
+    _neededFunctionDeclarations.clear();
+    _neededVariableDeclarations.clear();
+    return statement;
+  }
+
+  /// Adds [statement] to [statements] including any nodes needed in the
+  /// context.
+  void _addStatement(List<Statement> statements, Statement statement) {
+    statements.add(_ensureContext(statement));
+  }
+
+  /// Adds [expression] to [statements] including any nodes needed in the
+  /// context.
+  void _addExpression(List<Statement> statements, Expression expression) {
+    _addStatement(statements, ExpressionStatement(expression));
+  }
+
+  /// Adds [type] to [statements] including any nodes needed in the context.
+  void _addDartType(List<Statement> statements, DartType type) {
+    _addExpression(statements, TypeLiteral(type));
+  }
+
+  /// Adds [constant] to [statements] including any nodes needed in the context.
+  void _addConstant(List<Statement> statements, Constant constant) {
+    _addExpression(statements, ConstantExpression(constant));
+  }
+
+  /// Generates a list of [Statement] containing all pending in-body nodes.
+  List<Statement> _generateBodies() {
+    List<Statement> statements = [];
+    while (_pendingStatements.isNotEmpty) {
+      _addStatement(statements, _createStatement());
+    }
+    while (_pendingExpressions.isNotEmpty) {
+      _addExpression(statements, _createExpression());
+    }
+    while (_pendingDartTypes.isNotEmpty) {
+      _addDartType(statements, _createDartType());
+    }
+    while (_pendingConstants.isNotEmpty) {
+      _addConstant(statements, _createConstant());
+    }
+    for (NodeKind kind in inBodyNodeKinds) {
+      while (_pendingNodes.containsKey(kind)) {
+        Node node = _createNodeFromKind(kind);
+        switch (kind) {
+          case NodeKind.Name:
+            _addExpression(
+                statements,
+                DynamicGet(DynamicAccessKind.Dynamic, _createExpression(),
+                    node as Name));
+            break;
+          case NodeKind.Arguments:
+            _addExpression(
+                statements,
+                DynamicInvocation(DynamicAccessKind.Dynamic,
+                    _createExpression(), _createName(), node as Arguments));
+            break;
+          case NodeKind.Catch:
+            _addStatement(
+                statements, TryCatch(_createStatement(), [node as Catch]));
+            break;
+          case NodeKind.FunctionNode:
+            _addExpression(
+                statements, FunctionExpression(node as FunctionNode));
+            break;
+          case NodeKind.MapLiteralEntry:
+            _addExpression(statements, MapLiteral([node as MapLiteralEntry]));
+            break;
+          case NodeKind.NamedExpression:
+            _addExpression(
+                statements,
+                DynamicInvocation(
+                    DynamicAccessKind.Dynamic,
+                    _createExpression(),
+                    _createName(),
+                    Arguments([], named: [node as NamedExpression])));
+            break;
+          case NodeKind.NamedType:
+            _addDartType(
+                statements,
+                FunctionType([], _createDartType(), Nullability.nonNullable,
+                    namedParameters: [node as NamedType]));
+            break;
+          case NodeKind.SwitchCase:
+            _addStatement(statements,
+                SwitchStatement(_createExpression(), [node as SwitchCase]));
+            break;
+          case NodeKind.TypeParameter:
+            _addExpression(
+                statements,
+                FunctionExpression(FunctionNode(Block([]),
+                    typeParameters: [node as TypeParameter])));
+            break;
+          default:
+            throw new UnimplementedError('Unhandled in body node $kind.');
+        }
+      }
+    }
+    return statements;
+  }
+
+  /// Generates [Statement]s containing occurrences of all requested nodes.
+  List<Statement> generateBodies() {
+    List<Statement> statements = _generateBodies();
+    Set<Object> unsupportedKinds = {};
+    if (_pendingInitializers.isNotEmpty) {
+      unsupportedKinds.addAll(_pendingInitializers.keys);
+    }
+    if (_pendingMembers.isNotEmpty) {
+      unsupportedKinds.addAll(_pendingMembers.keys);
+    }
+    if (_pendingNodes.isNotEmpty) {
+      assert(
+          _pendingNodes.keys.every((kind) => !inBodyNodeKinds.contains(kind)));
+      unsupportedKinds.addAll(_pendingNodes.keys);
+    }
+    if (unsupportedKinds.isNotEmpty) {
+      throw new UnsupportedError('Cannot create these node in a body context: '
+          '${unsupportedKinds.join(', ')}');
+    }
+    return statements;
+  }
+
+  /// Generates a [Component] containing occurrences of all requested and needed
+  /// nodes.
+  Component generateComponent() {
+    Class cls = _needClass();
+    for (Statement statement in _generateBodies()) {
+      cls.addProcedure(Procedure(
+          _createName(), ProcedureKind.Method, FunctionNode(statement),
+          fileUri: _uri));
+    }
+    while (_pendingInitializers.isNotEmpty) {
+      Initializer initializer = _createInitializer();
+      cls.addConstructor(Constructor(FunctionNode(null),
+          name: _createName(), fileUri: _uri, initializers: [initializer]));
+    }
+    while (_pendingMembers.isNotEmpty) {
+      Member member = _createMember();
+      if (member is Procedure) {
+        cls.addProcedure(member);
+      } else if (member is Field) {
+        cls.addField(member);
+      } else if (member is Constructor) {
+        cls.addConstructor(member);
+      } else if (member is RedirectingFactory) {
+        cls.addRedirectingFactory(member);
+      } else {
+        throw new UnsupportedError(
+            'Unexpected member $member (${member.runtimeType})');
+      }
+    }
+    while (_pendingNodes.isNotEmpty) {
+      NodeKind kind = _pendingNodes.keys.first;
+      Node node = _createNodeFromKind(kind);
+      switch (kind) {
+        case NodeKind.Name:
+        case NodeKind.Arguments:
+        case NodeKind.Catch:
+        case NodeKind.FunctionNode:
+        case NodeKind.MapLiteralEntry:
+        case NodeKind.NamedExpression:
+        case NodeKind.NamedType:
+        case NodeKind.SwitchCase:
+        case NodeKind.TypeParameter:
+          throw new UnimplementedError('Expected in body node $kind.');
+        case NodeKind.Class:
+          _needLibrary().addClass(node as Class);
+          break;
+        case NodeKind.Combinator:
+          _needLibrary().addDependency(LibraryDependency.import(_needLibrary(),
+              combinators: [node as Combinator]));
+          break;
+        case NodeKind.Component:
+          assert(identical(node, _component),
+              "Cannot create multiple Component nodes.");
+          break;
+        case NodeKind.Extension:
+          _needLibrary().addExtension(node as Extension);
+          break;
+        case NodeKind.Library:
+          _component.libraries.add(node as Library);
+          break;
+        case NodeKind.LibraryDependency:
+          _needLibrary().addDependency(node as LibraryDependency);
+          break;
+        case NodeKind.LibraryPart:
+          _needLibrary().addPart(node as LibraryPart);
+          break;
+        case NodeKind.Supertype:
+          _needLibrary().addClass(
+              Class(name: 'foo', fileUri: _uri, supertype: node as Supertype));
+          break;
+        case NodeKind.Typedef:
+          _needLibrary().addTypedef(node as Typedef);
+          break;
+      }
+    }
+    return _component;
+  }
+
+  /// Returns a [Library] node that fits the requirements.
+  ///
+  /// If no such [Library] exists in [_neededLibraries], a new [Library] is
+  /// created and added to [_neededLibraries].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Library _needLibrary() {
+    for (Library library in _neededLibraries) {
+      return library;
+    }
+    Library library = Library(_uri, fileUri: _uri);
+    _neededLibraries.add(library);
+    _component.libraries.add(library);
+    return library;
+  }
+
+  /// Returns a [LibraryDependency] node that fits the requirements.
+  ///
+  /// If no such [LibraryDependency] exists in [_neededLibraryDependencies], a
+  /// new [LibraryDependency] is created and added to
+  /// [_neededLibraryDependencies].
+  LibraryDependency _needLibraryDependency({bool deferred: false}) {
+    for (LibraryDependency libraryDependency in _neededLibraryDependencies) {
+      if (!deferred || libraryDependency.isDeferred) {
+        return libraryDependency;
+      }
+    }
+    LibraryDependency libraryDependency = deferred
+        ? LibraryDependency.deferredImport(_needLibrary(), 'foo')
+        : LibraryDependency.import(_needLibrary());
+    _neededLibraryDependencies.add(libraryDependency);
+    return libraryDependency;
+  }
+
+  /// Returns a [Class] node that fits the requirements.
+  ///
+  /// If no such [Class] exists in [_neededClasses], a new [Class] is
+  /// created and added to [_neededClasses].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Class _needClass() {
+    for (Class cls in _neededClasses) {
+      return cls;
+    }
+    Class cls = Class(name: 'Foo', fileUri: _uri);
+    _neededClasses.add(cls);
+    _needLibrary().addClass(cls);
+    return cls;
+  }
+
+  /// Returns a [Extension] node that fits the requirements.
+  ///
+  /// If no such [Extension] exists in [_neededExtensions], a new [Extension] is
+  /// created and added to [_neededExtensions].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Extension _needExtension() {
+    for (Extension extension in _neededExtensions) {
+      return extension;
+    }
+    Extension extension = Extension(name: 'foo', fileUri: _uri)
+      ..onType = DynamicType();
+    _neededExtensions.add(extension);
+    _needLibrary().addExtension(extension);
+    return extension;
+  }
+
+  /// Returns a [Typedef] node that fits the requirements.
+  ///
+  /// If no such [Typedef] exists in [_neededTypedefs], a new [Typedef] is
+  /// created and added to [_neededTypedefs].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Typedef _needTypedef() {
+    for (Typedef typedef in _neededTypedefs) {
+      return typedef;
+    }
+    Typedef typedef = Typedef('foo', DynamicType(), fileUri: _uri);
+    _neededTypedefs.add(typedef);
+    _needLibrary().addTypedef(typedef);
+    return typedef;
+  }
+
+  /// Returns a [TypeParameter] node that fits the requirements.
+  ///
+  /// If no such [TypeParameter] exists in [_neededTypeParameters], a new
+  /// [TypeParameter] is created and added to [_neededTypeParameters].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  TypeParameter _needTypeParameter() {
+    for (TypeParameter typeParameter in _neededTypeParameters) {
+      return typeParameter;
+    }
+    TypeParameter typeParameter =
+        TypeParameter('foo', DynamicType(), DynamicType());
+    _neededTypeParameters.add(typeParameter);
+    // TODO(johnniwinther): Add the type parameter to a context; class, method
+    // or function type.
+    return typeParameter;
+  }
+
+  /// Returns a [Procedure] node that fits the requirements.
+  ///
+  /// If no such [Procedure] exists in [_neededProcedures], a new [Library] is
+  /// created and added to [_neededProcedures].
+  ///
+  /// [index] is used to create multiple distinct [Procedure] nodes even when
+  /// these have the same requirements.
+  Procedure _needProcedure({int? index, bool? isStatic}) {
+    for (Procedure procedure in _neededProcedures) {
+      if (isStatic == null || isStatic == procedure.isStatic) {
+        if (index == null || index == 0) {
+          return procedure;
+        } else {
+          index--;
+        }
+      }
+    }
+    isStatic ??= true;
+    Procedure procedure = Procedure(
+        Name('foo'), ProcedureKind.Method, FunctionNode(Block([])),
+        fileUri: _uri, isStatic: isStatic);
+    _neededProcedures.add(procedure);
+    if (isStatic) {
+      _needLibrary().addProcedure(procedure);
+    } else {
+      _needClass().addProcedure(procedure);
+    }
+    return procedure;
+  }
+
+  /// Returns a [Constructor] node that fits the requirements.
+  ///
+  /// If no such [Constructor] exists in [_neededConstructors], a new
+  /// [Constructor] is created and added to [_neededConstructors].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Constructor _needConstructor() {
+    for (Constructor constructor in _neededConstructors) {
+      return constructor;
+    }
+    Constructor constructor =
+        Constructor(FunctionNode(null), name: Name('foo'), fileUri: _uri);
+    _needClass().addConstructor(constructor);
+    return constructor;
+  }
+
+  /// Returns a redirecting factory [Procedure] node that fits the requirements.
+  ///
+  /// If no such [Library] exists in [_neededRedirectingFactories], a new
+  /// [Procedure] is created and added to [_neededRedirectingFactories].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  Procedure _needRedirectingFactory() {
+    for (Procedure redirectingFactory in _neededRedirectingFactories) {
+      return redirectingFactory;
+    }
+    Procedure redirectingFactory = Procedure(
+        Name('foo'), ProcedureKind.Method, FunctionNode(null),
+        fileUri: _uri)
+      ..isRedirectingFactory = true;
+    _needClass().addProcedure(redirectingFactory);
+    return redirectingFactory;
+  }
+
+  /// Returns a [Field] node that fits the requirements.
+  ///
+  /// If no such [Field] exists in [_neededFields], a new [Field] is
+  /// created and added to [_neededFields].
+  ///
+  /// [index] is used to create multiple distinct [Field] nodes even when
+  /// these have the same requirements.
+  Field _needField({int? index, bool? isStatic, bool? hasSetter}) {
+    for (Field field in _neededFields) {
+      if (isStatic == null ||
+          isStatic == field.isStatic && hasSetter == null ||
+          hasSetter == field.hasSetter) {
+        if (index == null || index == 0) {
+          return field;
+        } else {
+          index--;
+        }
+      }
+    }
+    hasSetter ??= false;
+    isStatic ??= true;
+    Field field = hasSetter
+        ? new Field.immutable(Name('foo'), fileUri: _uri, isStatic: isStatic)
+        : new Field.mutable(Name('foo'), fileUri: _uri, isStatic: isStatic);
+    _neededFields.add(field);
+    if (isStatic) {
+      _needLibrary().addField(field);
+    } else {
+      _needClass().addField(field);
+    }
+    return field;
+  }
+
+  /// Returns a [VariableDeclaration] node that fits the requirements.
+  ///
+  /// If no such [VariableDeclaration] exists in [_neededVariableDeclarations],
+  /// a new [VariableDeclaration] is created and added to
+  /// [_neededVariableDeclarations].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  VariableDeclaration _needVariableDeclaration() {
+    for (VariableDeclaration variableDeclaration
+        in _neededVariableDeclarations) {
+      return variableDeclaration;
+    }
+    VariableDeclaration variableDeclaration = VariableDeclaration('foo');
+    _neededVariableDeclarations.add(variableDeclaration);
+    return variableDeclaration;
+  }
+
+  /// Returns a [LabeledStatement] node that fits the requirements.
+  ///
+  /// If no such [LabeledStatement] exists in [_neededLabeledStatements], a new
+  /// [LabeledStatement] is created and added to [_neededLabeledStatements].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  LabeledStatement _needLabeledStatement() {
+    for (LabeledStatement labeledStatement in _neededLabeledStatements) {
+      return labeledStatement;
+    }
+    LabeledStatement labeledStatement = LabeledStatement(null);
+    _neededLabeledStatements.add(labeledStatement);
+    return labeledStatement;
+  }
+
+  /// Returns a [SwitchCase] node that fits the requirements.
+  ///
+  /// If no such [SwitchCase] exists in [_neededSwitchCases], a new [SwitchCase]
+  /// is created and added to [_neededSwitchCases].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  SwitchCase _needSwitchCase() {
+    for (SwitchCase switchCase in _neededSwitchCases) {
+      return switchCase;
+    }
+    SwitchCase switchCase =
+        SwitchCase([NullLiteral()], [TreeNode.noOffset], EmptyStatement());
+    _neededSwitchCases.add(switchCase);
+    return switchCase;
+  }
+
+  /// Returns a [FunctionDeclaration] node that fits the requirements.
+  ///
+  /// If no such [FunctionDeclaration] exists in [_neededFunctionDeclarations],
+  /// a new [FunctionDeclaration] is created and added to
+  /// [_neededFunctionDeclarations].
+  // TODO(johnniwinther): Add requirements when/where needed.
+  FunctionDeclaration _needFunctionDeclaration() {
+    for (FunctionDeclaration functionDeclaration
+        in _neededFunctionDeclarations) {
+      return functionDeclaration;
+    }
+    FunctionDeclaration functionDeclaration = FunctionDeclaration(
+        VariableDeclaration('foo'), FunctionNode(Block([])));
+    _neededFunctionDeclarations.add(functionDeclaration);
+    return functionDeclaration;
+  }
+
+  /// Returns a fresh file offset value.
+  int _needFileOffset() => _fileOffset++;
+
+  /// Creates an [Expression] node.
+  ///
+  /// If there are any pending expressions, one of these is created.
+  Expression _createExpression() {
+    if (_pendingExpressions.isEmpty) {
+      return NullLiteral()..fileOffset = _needFileOffset();
+    }
+    ExpressionKind kind = _pendingExpressions.keys.first;
+    return _createExpressionFromKind(kind);
+  }
+
+  /// Creates an [Expression] node of the specified [kind].
+  ///
+  /// If there are any pending expressions of this [kind], one of these is
+  /// created.
+  Expression _createExpressionFromKind(ExpressionKind kind) {
+    int? index = _pendingExpressions.remove(kind);
+    switch (kind) {
+      case ExpressionKind.AsExpression:
+        return AsExpression(_createExpression(), _createDartType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.AwaitExpression:
+        return AwaitExpression(_createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.BlockExpression:
+        return BlockExpression(
+            _createStatementFromKind(StatementKind.Block) as Block,
+            _createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.BoolLiteral:
+        return BoolLiteral(true)..fileOffset = _needFileOffset();
+      case ExpressionKind.CheckLibraryIsLoaded:
+        return CheckLibraryIsLoaded(_needLibraryDependency(deferred: true))
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.ConditionalExpression:
+        return ConditionalExpression(_createExpression(), _createExpression(),
+            _createExpression(), _createDartType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.ConstantExpression:
+        return ConstantExpression(_createConstant(), _createDartType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.ConstructorInvocation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => ConstructorInvocation(_needConstructor(), _createArguments(),
+              isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => ConstructorInvocation(_needConstructor(), _createArguments(),
+              isConst: true)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.ConstructorTearOff:
+        return ConstructorTearOff(_needConstructor())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.DoubleLiteral:
+        return DoubleLiteral(42.5)..fileOffset = _needFileOffset();
+      case ExpressionKind.DynamicGet:
+        return DynamicGet(
+            DynamicAccessKind.Dynamic, _createExpression(), _createName())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.DynamicInvocation:
+        return DynamicInvocation(DynamicAccessKind.Dynamic, _createExpression(),
+            _createName(), _createArguments())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.DynamicSet:
+        return DynamicSet(DynamicAccessKind.Dynamic, _createExpression(),
+            _createName(), _createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.EqualsCall:
+        return EqualsCall(_createExpression(), _createExpression(),
+            functionType: _createFunctionType(),
+            interfaceTarget: _needProcedure())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.EqualsNull:
+        return EqualsNull(_createExpression())..fileOffset = _needFileOffset();
+      case ExpressionKind.FileUriExpression:
+        return FileUriExpression(_createExpression(), _uri)
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.FunctionExpression:
+        return FunctionExpression(_createFunctionNode())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.FunctionInvocation:
+        return FunctionInvocation(FunctionAccessKind.FunctionType,
+            _createExpression(), _createArguments(),
+            functionType: _createFunctionType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.FunctionTearOff:
+        return FunctionTearOff(_createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.InstanceCreation:
+        return InstanceCreation(_needClass().reference, [], {}, [], [])
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.InstanceGet:
+        return InstanceGet(
+            InstanceAccessKind.Instance, _createExpression(), _createName(),
+            interfaceTarget: _needField(), resultType: _createDartType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.InstanceGetterInvocation:
+        return InstanceGetterInvocation(InstanceAccessKind.Instance,
+            _createExpression(), _createName(), _createArguments(),
+            interfaceTarget: _needField(), functionType: _createFunctionType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.InstanceInvocation:
+        return InstanceInvocation(InstanceAccessKind.Instance,
+            _createExpression(), _createName(), _createArguments(),
+            interfaceTarget: _needProcedure(),
+            functionType: _createFunctionType())
+          ..fileOffset = _needFileOffset()
+          ..isBoundsSafe = true;
+      case ExpressionKind.InstanceSet:
+        return InstanceSet(InstanceAccessKind.Instance, _createExpression(),
+            _createName(), _createExpression(),
+            interfaceTarget: _needField())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.InstanceTearOff:
+        return InstanceTearOff(
+            InstanceAccessKind.Instance, _createExpression(), _createName(),
+            interfaceTarget: _needProcedure(), resultType: _createDartType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.Instantiation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => Instantiation(_createExpression(), [])
+            ..fileOffset = _needFileOffset(),
+          () => Instantiation(_createExpression(), [_createDartType()])
+            ..fileOffset = _needFileOffset(),
+          () => Instantiation(
+              _createExpression(), [_createDartType(), _createDartType()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.IntLiteral:
+        return IntLiteral(42)..fileOffset = _needFileOffset();
+      case ExpressionKind.InvalidExpression:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => InvalidExpression(null)..fileOffset = _needFileOffset(),
+          () => InvalidExpression('foo')..fileOffset = _needFileOffset(),
+          () => InvalidExpression('foo', _createExpression())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.IsExpression:
+        return IsExpression(
+          _createExpression(),
+          _createDartType(),
+        )..fileOffset = _needFileOffset();
+      case ExpressionKind.Let:
+        return Let(
+            _createStatementFromKind(StatementKind.VariableDeclaration)
+                as VariableDeclaration,
+            _createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.ListConcatenation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => ListConcatenation([], typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => ListConcatenation([_createExpression()],
+              typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => ListConcatenation([_createExpression(), _createExpression()],
+              typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset()
+        ]);
+      case ExpressionKind.ListLiteral:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => ListLiteral([], typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => ListLiteral([_createExpression()],
+              typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => ListLiteral([_createExpression(), _createExpression()],
+              typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => ListLiteral([_createExpression(), _createExpression()],
+              typeArgument: _createDartType(), isConst: true)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.LoadLibrary:
+        return LoadLibrary(_needLibraryDependency(deferred: true))
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.LocalFunctionInvocation:
+        return LocalFunctionInvocation(
+            _needFunctionDeclaration().variable, _createArguments(),
+            functionType: _createFunctionType())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.LogicalExpression:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => LogicalExpression(_createExpression(),
+              LogicalExpressionOperator.AND, _createExpression())
+            ..fileOffset = _needFileOffset(),
+          () => LogicalExpression(_createExpression(),
+              LogicalExpressionOperator.OR, _createExpression())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.MapConcatenation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => MapConcatenation([],
+              keyType: _createDartType(), valueType: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => MapConcatenation([_createExpression()],
+              keyType: _createDartType(), valueType: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => MapConcatenation([_createExpression(), _createExpression()],
+              keyType: _createDartType(), valueType: _createDartType())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.MapLiteral:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => MapLiteral([],
+              keyType: _createDartType(),
+              valueType: _createDartType(),
+              isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => MapLiteral([_createMapLiteralEntry()],
+              keyType: _createDartType(),
+              valueType: _createDartType(),
+              isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => MapLiteral([
+                _createMapLiteralEntry(),
+                _createMapLiteralEntry(),
+              ],
+                  keyType: _createDartType(),
+                  valueType: _createDartType(),
+                  isConst: false)
+                ..fileOffset = _needFileOffset(),
+          () => MapLiteral([
+                _createMapLiteralEntry(),
+                _createMapLiteralEntry(),
+              ],
+                  keyType: _createDartType(),
+                  valueType: _createDartType(),
+                  isConst: true)
+                ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.Not:
+        return Not(_createExpression())..fileOffset = _needFileOffset();
+      case ExpressionKind.NullCheck:
+        return NullCheck(_createExpression())..fileOffset = _needFileOffset();
+      case ExpressionKind.NullLiteral:
+        return NullLiteral();
+      case ExpressionKind.RedirectingFactoryTearOff:
+        return RedirectingFactoryTearOff(_needRedirectingFactory())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.Rethrow:
+        return Rethrow()..fileOffset = _needFileOffset();
+      case ExpressionKind.SetConcatenation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => SetConcatenation([], typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => SetConcatenation([_createExpression()],
+              typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset(),
+          () => SetConcatenation([_createExpression(), _createExpression()],
+              typeArgument: _createDartType())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.SetLiteral:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => SetLiteral([], typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => SetLiteral([_createExpression()],
+              typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => SetLiteral([_createExpression(), _createExpression()],
+              typeArgument: _createDartType(), isConst: false)
+            ..fileOffset = _needFileOffset(),
+          () => SetLiteral([_createExpression(), _createExpression()],
+              typeArgument: _createDartType(), isConst: true)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.StaticGet:
+        return StaticGet(_needField())..fileOffset = _needFileOffset();
+      case ExpressionKind.StaticInvocation:
+        return StaticInvocation(_needProcedure(), _createArguments())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.StaticSet:
+        return StaticSet(_needField(), _createExpression())
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.StaticTearOff:
+        return StaticTearOff(_needProcedure())..fileOffset = _needFileOffset();
+      case ExpressionKind.StringConcatenation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => StringConcatenation([])..fileOffset = _needFileOffset(),
+          () => StringConcatenation([_createExpression()])
+            ..fileOffset = _needFileOffset(),
+          () => StringConcatenation([_createExpression(), _createExpression()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.StringLiteral:
+        return StringLiteral('foo');
+      case ExpressionKind.SuperMethodInvocation:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => SuperMethodInvocation(_createName(), _createArguments())
+            ..fileOffset = _needFileOffset(),
+          () => SuperMethodInvocation(
+              _createName(), _createArguments(), _needProcedure())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.SuperPropertyGet:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => SuperPropertyGet(_createName())..fileOffset = _needFileOffset(),
+          () => SuperPropertyGet(_createName(), _needField())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.SuperPropertySet:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => SuperPropertySet(_createName(), _createExpression(), null)
+            ..fileOffset = _needFileOffset(),
+          () =>
+              SuperPropertySet(_createName(), _createExpression(), _needField())
+                ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.SymbolLiteral:
+        return SymbolLiteral('foo')..fileOffset = _needFileOffset();
+      case ExpressionKind.ThisExpression:
+        return ThisExpression()..fileOffset = _needFileOffset();
+      case ExpressionKind.Throw:
+        return Throw(_createExpression())..fileOffset = _needFileOffset();
+      case ExpressionKind.TypeLiteral:
+        return TypeLiteral(_createDartType())..fileOffset = _needFileOffset();
+      case ExpressionKind.TypedefTearOff:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return TypedefTearOff([], _createExpression(), [])
+          ..fileOffset = _needFileOffset();
+      case ExpressionKind.VariableGet:
+        return _createOneOf(_pendingExpressions, kind, index, [
+          () => VariableGet(_needVariableDeclaration())
+            ..fileOffset = _needFileOffset(),
+          () => VariableGet(_needVariableDeclaration(), _createDartType())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case ExpressionKind.VariableSet:
+        return VariableSet(_needVariableDeclaration(), _createExpression())
+          ..fileOffset = _needFileOffset();
+    }
+  }
+
+  /// Creates a [Statement] node.
+  ///
+  /// If there are any pending statements, one of these is created.
+  Statement _createStatement() {
+    if (_pendingStatements.isEmpty) {
+      return EmptyStatement()..fileOffset = _needFileOffset();
+    }
+    StatementKind kind = _pendingStatements.keys.first;
+    return _createStatementFromKind(kind);
+  }
+
+  /// Creates a [Statement] of the specified [kind].
+  ///
+  /// If there are any pending statements of this [kind], one of these is
+  /// created.
+  Statement _createStatementFromKind(StatementKind kind) {
+    int? index = _pendingStatements.remove(kind);
+    switch (kind) {
+      case StatementKind.AssertBlock:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => AssertBlock([])..fileOffset = _needFileOffset(),
+          () =>
+              AssertBlock([_createStatement()])..fileOffset = _needFileOffset(),
+          () => AssertBlock([_createStatement(), _createStatement()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.AssertStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => AssertStatement(_createExpression(),
+              conditionStartOffset: _needFileOffset(),
+              conditionEndOffset: _needFileOffset())
+            ..fileOffset = _needFileOffset(),
+          () => AssertStatement(_createExpression(),
+              message: _createExpression(),
+              conditionStartOffset: _needFileOffset(),
+              conditionEndOffset: _needFileOffset())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.Block:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => Block([])..fileOffset = _needFileOffset(),
+          () => Block([_createStatement()])..fileOffset = _needFileOffset(),
+          () => Block([_createStatement(), _createStatement()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.BreakStatement:
+        return BreakStatement(_needLabeledStatement())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.ContinueSwitchStatement:
+        return ContinueSwitchStatement(_needSwitchCase())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.DoStatement:
+        return DoStatement(_createStatement(), _createExpression())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.EmptyStatement:
+        return EmptyStatement()..fileOffset = _needFileOffset();
+      case StatementKind.ExpressionStatement:
+        return ExpressionStatement(_createExpression())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.ForInStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => ForInStatement(_createVariableDeclaration(),
+              _createExpression(), _createStatement(),
+              isAsync: false)
+            ..fileOffset = _needFileOffset(),
+          () => ForInStatement(_createVariableDeclaration(),
+              _createExpression(), _createStatement(),
+              isAsync: true)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.ForStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => ForStatement([], null, [], _createStatement())
+            ..fileOffset = _needFileOffset(),
+          () => ForStatement([_createVariableDeclaration()],
+              _createExpression(), [_createExpression()], _createStatement())
+            ..fileOffset = _needFileOffset(),
+          () => ForStatement(
+              [_createVariableDeclaration(), _createVariableDeclaration()],
+              _createExpression(),
+              [_createExpression(), _createExpression()],
+              _createStatement())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.FunctionDeclaration:
+        return FunctionDeclaration(
+            VariableDeclaration(null), _createFunctionNode())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.IfStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => IfStatement(_createExpression(), _createStatement(), null)
+            ..fileOffset = _needFileOffset(),
+          () => IfStatement(
+              _createExpression(), _createStatement(), _createStatement())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.LabeledStatement:
+        return LabeledStatement(_createStatement())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.ReturnStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => ReturnStatement()..fileOffset = _needFileOffset(),
+          () => ReturnStatement(_createExpression())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.SwitchStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => SwitchStatement(_createExpression(), [])
+            ..fileOffset = _needFileOffset(),
+          () => SwitchStatement(_createExpression(), [_createSwitchCase()])
+            ..fileOffset = _needFileOffset(),
+          () => SwitchStatement(
+              _createExpression(), [_createSwitchCase(), _createSwitchCase()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.TryCatch:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () =>
+              TryCatch(_createStatement(), [])..fileOffset = _needFileOffset(),
+          () => TryCatch(_createStatement(), [_createCatch()])
+            ..fileOffset = _needFileOffset(),
+          () => TryCatch(_createStatement(), [_createCatch(), _createCatch()])
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.TryFinally:
+        return TryFinally(_createStatement(), _createStatement())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.VariableDeclaration:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => VariableDeclaration('foo')..fileOffset = _needFileOffset(),
+          () => VariableDeclaration('foo', initializer: _createExpression())
+            ..fileOffset = _needFileOffset(),
+          () => VariableDeclaration('foo', type: _createDartType())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case StatementKind.WhileStatement:
+        return WhileStatement(_createExpression(), _createStatement())
+          ..fileOffset = _needFileOffset();
+      case StatementKind.YieldStatement:
+        return _createOneOf(_pendingStatements, kind, index, [
+          () => YieldStatement(_createExpression(), isYieldStar: false)
+            ..fileOffset = _needFileOffset(),
+          () => YieldStatement(_createExpression(), isYieldStar: true)
+            ..fileOffset = _needFileOffset(),
+        ]);
+    }
+  }
+
+  /// Creates a [VariableDeclaration] node.
+  ///
+  /// If there are any pending [VariableDeclaration] nodes, one of these is
+  /// created.
+  VariableDeclaration _createVariableDeclaration() {
+    return _createStatementFromKind(StatementKind.VariableDeclaration)
+        as VariableDeclaration;
+  }
+
+  /// Creates a [DartType] node.
+  ///
+  /// If there are any pending types, one of these is created.
+  DartType _createDartType() {
+    if (_pendingDartTypes.isEmpty) {
+      return VoidType();
+    }
+    DartTypeKind kind = _pendingDartTypes.keys.first;
+    return _createDartTypeFromKind(kind);
+  }
+
+  /// Creates a [DartType] node of the specified [kind].
+  ///
+  /// If there are any pending types of this [kind], one of these is created.
+  DartType _createDartTypeFromKind(DartTypeKind kind) {
+    int? index = _pendingDartTypes.remove(kind);
+    switch (kind) {
+      case DartTypeKind.DynamicType:
+        return DynamicType();
+      case DartTypeKind.ExtensionType:
+        return ExtensionType(_needExtension(), Nullability.nonNullable);
+      case DartTypeKind.FunctionType:
+        return _createOneOf(_pendingDartTypes, kind, index, [
+          // TODO(johnniwinther): Create non-trivial cases.
+          () => FunctionType([], _createDartType(), Nullability.nonNullable),
+        ]);
+      case DartTypeKind.FutureOrType:
+        return FutureOrType(_createDartType(), Nullability.nonNullable);
+      case DartTypeKind.InterfaceType:
+        return _createOneOf(_pendingDartTypes, kind, index, [
+          // TODO(johnniwinther): Create non-trivial cases.
+          () => InterfaceType(_needClass(), Nullability.nonNullable, []),
+        ]);
+      case DartTypeKind.InvalidType:
+        return InvalidType();
+      case DartTypeKind.NeverType:
+        return NeverType.nonNullable();
+      case DartTypeKind.NullType:
+        return NullType();
+      case DartTypeKind.TypeParameterType:
+        return _createOneOf(_pendingDartTypes, kind, index, [
+          () =>
+              TypeParameterType(_needTypeParameter(), Nullability.nonNullable),
+          () => TypeParameterType(
+              _needTypeParameter(), Nullability.nonNullable, _createDartType()),
+        ]);
+      case DartTypeKind.TypedefType:
+        return _createOneOf(_pendingDartTypes, kind, index, [
+          // TODO(johnniwinther): Create non-trivial cases.
+          () => TypedefType(_needTypedef(), Nullability.nonNullable, []),
+        ]);
+      case DartTypeKind.VoidType:
+        return VoidType();
+    }
+  }
+
+  /// Creates a [FunctionType] node.
+  ///
+  /// If there are any pending [FunctionType] nodes, one of these is created.
+  FunctionType _createFunctionType() {
+    return _createDartTypeFromKind(DartTypeKind.FunctionType) as FunctionType;
+  }
+
+  /// Creates a [Constant] node.
+  ///
+  /// If there are any pending constants, one of these is created.
+  Constant _createConstant() {
+    if (_pendingConstants.isEmpty) {
+      return NullConstant();
+    }
+    ConstantKind kind = _pendingConstants.keys.first;
+    return _createConstantFromKind(kind);
+  }
+
+  /// Creates a [Constant] node of the specified [kind].
+  ///
+  /// If there are any pending constants of this [kind], one of these is
+  /// created.
+  Constant _createConstantFromKind(ConstantKind kind) {
+    int? index = _pendingConstants.remove(kind);
+    switch (kind) {
+      case ConstantKind.BoolConstant:
+        return BoolConstant(true);
+      case ConstantKind.ConstructorTearOffConstant:
+        return ConstructorTearOffConstant(_needConstructor());
+      case ConstantKind.DoubleConstant:
+        return DoubleConstant(42.5);
+      case ConstantKind.InstanceConstant:
+        return _createOneOf(_pendingConstants, kind, index, [
+          () => InstanceConstant(_needClass().reference, [], {}),
+          () => InstanceConstant(_needClass().reference, [
+                _createDartType()
+              ], {
+                _needField(isStatic: false, hasSetter: false).getterReference:
+                    _createConstant()
+              }),
+          () => InstanceConstant(_needClass().reference, [
+                _createDartType()
+              ], {
+                _needField(index: 0, isStatic: false, hasSetter: false)
+                    .getterReference: _createConstant(),
+                _needField(index: 1, isStatic: false, hasSetter: false)
+                    .getterReference: _createConstant()
+              }),
+        ]);
+      case ConstantKind.InstantiationConstant:
+        return InstantiationConstant(_createConstant(), [_createDartType()]);
+      case ConstantKind.IntConstant:
+        return IntConstant(42);
+      case ConstantKind.ListConstant:
+        return _createOneOf(_pendingConstants, kind, index, [
+          () => ListConstant(_createDartType(), []),
+          () => ListConstant(_createDartType(), [_createConstant()]),
+          () => ListConstant(
+              _createDartType(), [_createConstant(), _createConstant()]),
+        ]);
+      case ConstantKind.MapConstant:
+        return _createOneOf(_pendingConstants, kind, index, [
+          () => MapConstant(_createDartType(), _createDartType(), []),
+          () => MapConstant(_createDartType(), _createDartType(),
+              [ConstantMapEntry(_createConstant(), _createConstant())]),
+          () => MapConstant(_createDartType(), _createDartType(), [
+                ConstantMapEntry(_createConstant(), _createConstant()),
+                ConstantMapEntry(_createConstant(), _createConstant())
+              ]),
+        ]);
+      case ConstantKind.NullConstant:
+        return NullConstant();
+      case ConstantKind.RedirectingFactoryTearOffConstant:
+        return RedirectingFactoryTearOffConstant(_needRedirectingFactory());
+      case ConstantKind.SetConstant:
+        return _createOneOf(_pendingConstants, kind, index, [
+          () => SetConstant(_createDartType(), []),
+          () => SetConstant(_createDartType(), [_createConstant()]),
+          () => SetConstant(
+              _createDartType(), [_createConstant(), _createConstant()]),
+        ]);
+      case ConstantKind.StaticTearOffConstant:
+        return StaticTearOffConstant(_needProcedure());
+      case ConstantKind.StringConstant:
+        return StringConstant('foo');
+      case ConstantKind.SymbolConstant:
+        return _createOneOf(_pendingConstants, kind, index, [
+          () => SymbolConstant('foo', null),
+          () => SymbolConstant('_foo', _needLibrary().reference),
+        ]);
+      case ConstantKind.TypeLiteralConstant:
+        return TypeLiteralConstant(_createDartType());
+      case ConstantKind.TypedefTearOffConstant:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return TypedefTearOffConstant(
+            [],
+            _createConstantFromKind(ConstantKind.ConstructorTearOffConstant)
+                as TearOffConstant,
+            []);
+      case ConstantKind.UnevaluatedConstant:
+        return UnevaluatedConstant(_createExpression());
+    }
+  }
+
+  /// Creates an [Initializer] node.
+  ///
+  /// If there are any pending initializers, one of these is created.
+  Initializer _createInitializer() {
+    if (_pendingInitializers.isEmpty) {
+      return InvalidInitializer()..fileOffset = _needFileOffset();
+    }
+    InitializerKind kind = _pendingInitializers.keys.first;
+    return _createInitializerFromKind(kind);
+  }
+
+  /// Creates an [Initializer] node of the specified [kind].
+  ///
+  /// If there are any pending initializers of this [kind], one of these is
+  /// created.
+  Initializer _createInitializerFromKind(InitializerKind kind) {
+    // ignore: unused_local_variable
+    int? index = _pendingInitializers.remove(kind);
+    switch (kind) {
+      case InitializerKind.AssertInitializer:
+        return AssertInitializer(
+            _createStatementFromKind(StatementKind.AssertStatement)
+                as AssertStatement)
+          ..fileOffset = _needFileOffset();
+      case InitializerKind.FieldInitializer:
+        return FieldInitializer(
+            _needField(isStatic: false), _createExpression())
+          ..fileOffset = _needFileOffset();
+      case InitializerKind.InvalidInitializer:
+        return InvalidInitializer()..fileOffset = _needFileOffset();
+      case InitializerKind.LocalInitializer:
+        return LocalInitializer(_createVariableDeclaration())
+          ..fileOffset = _needFileOffset();
+      case InitializerKind.RedirectingInitializer:
+        return RedirectingInitializer(_needConstructor(), _createArguments())
+          ..fileOffset = _needFileOffset();
+      case InitializerKind.SuperInitializer:
+        return SuperInitializer(_needConstructor(), _createArguments())
+          ..fileOffset = _needFileOffset();
+    }
+  }
+
+  /// Creates a [Member] node.
+  ///
+  /// If there are any pending members, one of these is created.
+  Member _createMember() {
+    if (_pendingMembers.isEmpty) {
+      return Field.immutable(_createName(), fileUri: _uri)
+        ..fileOffset = _needFileOffset();
+    }
+    MemberKind kind = _pendingMembers.keys.first;
+    return _createMemberKind(kind);
+  }
+
+  /// Creates a [Member] node of the specified [kind].
+  ///
+  /// If there are any pending members of this [kind], one of these is created.
+  Member _createMemberKind(MemberKind kind) {
+    int? index = _pendingMembers.remove(kind);
+    switch (kind) {
+      case MemberKind.Constructor:
+        return Constructor(_createFunctionNode(),
+            name: _createName(), fileUri: _uri)
+          ..fileOffset = _needFileOffset();
+      case MemberKind.Field:
+        return _createOneOf(_pendingMembers, kind, index, [
+          () => Field.mutable(_createName(), fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+          () => Field.immutable(_createName(), fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case MemberKind.Procedure:
+        return _createOneOf(_pendingMembers, kind, index, [
+          () => Procedure(
+              _createName(), ProcedureKind.Method, _createFunctionNode(),
+              fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+          () => Procedure(
+              _createName(), ProcedureKind.Operator, _createFunctionNode(),
+              fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+          () => Procedure(
+              _createName(), ProcedureKind.Getter, _createFunctionNode(),
+              fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+          () => Procedure(
+              _createName(), ProcedureKind.Setter, _createFunctionNode(),
+              fileUri: _uri)
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case MemberKind.RedirectingFactory:
+        return RedirectingFactory(null,
+            name: _createName(), function: _createFunctionNode(), fileUri: _uri)
+          ..fileOffset = _needFileOffset();
+    }
+  }
+
+  /// Creates an [Arguments] node.
+  ///
+  /// If there are any pending [Arguments] nodes, one of these is created.
+  Arguments _createArguments() {
+    return _createNodeFromKind(NodeKind.Arguments) as Arguments;
+  }
+
+  /// Creates a [Name] node.
+  ///
+  /// If there are any pending [Name] nodes, one of these is created.
+  Name _createName() {
+    return _createNodeFromKind(NodeKind.Name) as Name;
+  }
+
+  /// Creates a [FunctionNode] node.
+  ///
+  /// If there are any pending [FunctionNode] nodes, one of these is created.
+  FunctionNode _createFunctionNode() {
+    return _createNodeFromKind(NodeKind.FunctionNode) as FunctionNode;
+  }
+
+  /// Creates a [MapLiteralEntry] node.
+  ///
+  /// If there are any pending [MapLiteralEntry] nodes, one of these is created.
+  MapLiteralEntry _createMapLiteralEntry() {
+    return _createNodeFromKind(NodeKind.MapLiteralEntry) as MapLiteralEntry;
+  }
+
+  /// Creates a [SwitchCase] node.
+  ///
+  /// If there are any pending [SwitchCase] nodes, one of these is created.
+  SwitchCase _createSwitchCase() {
+    return _createNodeFromKind(NodeKind.SwitchCase) as SwitchCase;
+  }
+
+  /// Creates a [Catch] node.
+  ///
+  /// If there are any pending [Catch] nodes, one of these is created.
+  Catch _createCatch() {
+    return _createNodeFromKind(NodeKind.Catch) as Catch;
+  }
+
+  /// Creates a [Node] of the specified [kind].
+  ///
+  /// If there are any pending nodes of this [kind], one of these is created.
+  Node _createNodeFromKind(NodeKind kind) {
+    int? index = _pendingNodes.remove(kind);
+    switch (kind) {
+      case NodeKind.Arguments:
+        return _createOneOf(_pendingNodes, kind, index, [
+          // TODO(johnniwinther): Add non-trivial cases.
+          () => Arguments([])..fileOffset = _needFileOffset(),
+        ]);
+      case NodeKind.Catch:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return Catch(null, _createStatement())..fileOffset = _needFileOffset();
+      case NodeKind.Class:
+        return Class(name: 'foo', fileUri: _uri)
+          ..fileOffset = _needFileOffset();
+      case NodeKind.Combinator:
+        return _createOneOf(_pendingNodes, kind, index, [
+          () => Combinator.show([])..fileOffset = _needFileOffset(),
+          () => Combinator.show(['foo'])..fileOffset = _needFileOffset(),
+          () => Combinator.show(['foo', 'bar'])..fileOffset = _needFileOffset(),
+          () => Combinator.hide([])..fileOffset = _needFileOffset(),
+          () => Combinator.hide(['foo'])..fileOffset = _needFileOffset(),
+          () => Combinator.hide(['foo', 'bar'])..fileOffset = _needFileOffset(),
+        ]);
+      case NodeKind.Component:
+        return _component;
+      case NodeKind.Extension:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return Extension(name: 'foo', fileUri: _uri)
+          ..fileOffset = _needFileOffset()
+          ..onType = _createDartType();
+      case NodeKind.FunctionNode:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return FunctionNode(_createStatement())..fileOffset = _needFileOffset();
+      case NodeKind.Library:
+        return Library(_uri, fileUri: _uri)..fileOffset = _needFileOffset();
+      case NodeKind.LibraryDependency:
+        return _createOneOf(_pendingNodes, kind, index, [
+          // TODO(johnniwinther): Add more cases.
+          () => LibraryDependency.import(_needLibrary())
+            ..fileOffset = _needFileOffset(),
+          () => LibraryDependency.import(_needLibrary(), name: 'foo')
+            ..fileOffset = _needFileOffset(),
+          () => LibraryDependency.export(_needLibrary())
+            ..fileOffset = _needFileOffset(),
+        ]);
+      case NodeKind.LibraryPart:
+        // TODO(johnniwinther): Add non-trivial cases.
+        // TODO(johnniwinther): Do we need to use a valid part uri?
+        return LibraryPart([], 'foo')..fileOffset = _needFileOffset();
+      case NodeKind.MapLiteralEntry:
+        return MapLiteralEntry(_createExpression(), _createExpression())
+          ..fileOffset = _needFileOffset();
+      case NodeKind.Name:
+        return _createOneOf(_pendingNodes, kind, index, [
+          () => Name('foo'),
+          () => Name('_foo', _needLibrary()),
+        ]);
+      case NodeKind.NamedExpression:
+        return NamedExpression('foo', _createExpression())
+          ..fileOffset = _needFileOffset();
+      case NodeKind.NamedType:
+        return NamedType('foo', _createDartType());
+      case NodeKind.Supertype:
+        return _createOneOf(_pendingNodes, kind, index, [
+          () => Supertype(_needClass(), []),
+          () => Supertype(_needClass(), [_createDartType()]),
+          () => Supertype(_needClass(), [_createDartType(), _createDartType()]),
+        ]);
+      case NodeKind.SwitchCase:
+        // TODO(johnniwinther): Add non-trivial cases.
+        return SwitchCase(
+            [NullLiteral()], [TreeNode.noOffset], _createStatement())
+          ..fileOffset = _needFileOffset();
+      case NodeKind.TypeParameter:
+        return TypeParameter('foo', _createDartType(), _createDartType())
+          ..fileOffset = _needFileOffset();
+      case NodeKind.Typedef:
+        return Typedef('foo', _createDartType(), fileUri: _uri)
+          ..fileOffset = _needFileOffset();
+    }
+  }
+
+  /// Helper that creates a node of type [V] using the list of [creators].
+  ///
+  /// The [index] indicates how many nodes of the [kind] that have currently
+  /// been created. If there are more [creators] left after having created the
+  /// [index]th node, [pending] is updated with the next pending index. If all
+  /// pending nodes of the given [kind] have been created, [index] is `null` and
+  /// the first [creators] function is used.
+  V _createOneOf<K, V>(
+      Map<K, int> pending, K kind, int? index, List<V Function()> creators) {
+    if (index == null) {
+      // All pending nodes have been created so we just create the first.
+      return creators[0]();
+    }
+    if (index + 1 < creators.length) {
+      pending[kind] = index + 1;
+    }
+    return creators[index]();
+  }
+}
+
+/// [NodeKind]s for nodes that can occur inside member bodies.
+const Set<NodeKind> inBodyNodeKinds = {
+  NodeKind.Arguments,
+  NodeKind.Catch,
+  NodeKind.FunctionNode,
+  NodeKind.MapLiteralEntry,
+  NodeKind.Name,
+  NodeKind.NamedExpression,
+  NodeKind.NamedType,
+  NodeKind.SwitchCase,
+  NodeKind.TypeParameter,
+};
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 81e1974..61590da 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -267,6 +267,10 @@
 
   DartType getNullabilityAwareStandardLowerBoundInternal(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
+
     // DOWN(T1, T2) where TOP(T1) and TOP(T2) =
     //   T1 if MORETOP(T2, T1)
     //   T2 otherwise
@@ -629,6 +633,10 @@
 
   DartType getNullabilityAwareStandardUpperBoundInternal(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
+
     // UP(T1, T2) where TOP(T1) and TOP(T2) =
     //   T1 if MORETOP(T1, T2)
     //   T2 otherwise
diff --git a/pkg/kernel/lib/src/text_util.dart b/pkg/kernel/lib/src/text_util.dart
index 5871066..ac95aac 100644
--- a/pkg/kernel/lib/src/text_util.dart
+++ b/pkg/kernel/lib/src/text_util.dart
@@ -33,10 +33,9 @@
 
 String qualifiedClassNameToString(Class node,
     {bool includeLibraryName: false}) {
-  if (includeLibraryName) {
-    return libraryNameToString(node.enclosingLibrary) +
-        '::' +
-        classNameToString(node);
+  TreeNode? parent = node.parent;
+  if (parent is Library && includeLibraryName) {
+    return libraryNameToString(parent) + '::' + classNameToString(node);
   } else {
     return classNameToString(node);
   }
@@ -90,10 +89,9 @@
 
 String qualifiedExtensionNameToString(Extension node,
     {bool includeLibraryName: false}) {
-  if (includeLibraryName) {
-    return libraryNameToString(node.enclosingLibrary) +
-        '::' +
-        extensionNameToString(node);
+  TreeNode? parent = node.parent;
+  if (parent is Library && includeLibraryName) {
+    return libraryNameToString(parent) + '::' + extensionNameToString(node);
   } else {
     return extensionNameToString(node);
   }
@@ -127,10 +125,9 @@
 
 String qualifiedTypedefNameToString(Typedef node,
     {bool includeLibraryName: false}) {
-  if (includeLibraryName) {
-    return libraryNameToString(node.enclosingLibrary) +
-        '::' +
-        typedefNameToString(node);
+  TreeNode? parent = node.parent;
+  if (parent is Library && includeLibraryName) {
+    return libraryNameToString(parent) + '::' + typedefNameToString(node);
   } else {
     return typedefNameToString(node);
   }
@@ -164,15 +161,14 @@
 
 String qualifiedMemberNameToString(Member node,
     {bool includeLibraryName: false}) {
-  if (node.enclosingClass != null) {
-    return qualifiedClassNameToString(node.enclosingClass!,
+  TreeNode? parent = node.parent;
+  if (parent is Class) {
+    return qualifiedClassNameToString(parent,
             includeLibraryName: includeLibraryName) +
         '.' +
         memberNameToString(node);
-  } else if (includeLibraryName) {
-    return libraryNameToString(node.enclosingLibrary) +
-        '::' +
-        memberNameToString(node);
+  } else if (parent is Library && includeLibraryName) {
+    return libraryNameToString(parent) + '::' + memberNameToString(node);
   } else {
     return memberNameToString(node);
   }
diff --git a/pkg/kernel/lib/src/tool/command_line_util.dart b/pkg/kernel/lib/src/tool/command_line_util.dart
index df51e1d..d97b20d 100644
--- a/pkg/kernel/lib/src/tool/command_line_util.dart
+++ b/pkg/kernel/lib/src/tool/command_line_util.dart
@@ -7,7 +7,8 @@
 import 'package:kernel/kernel.dart';
 
 class CommandLineHelper {
-  static requireExactlyOneArgument(List<String> args, void Function() usage,
+  static void requireExactlyOneArgument(
+      List<String> args, void Function() usage,
       {bool requireFileExists: false}) {
     if (args.length != 1) {
       print("Expected exactly 1 argument, got ${args.length}.");
@@ -16,7 +17,7 @@
     if (requireFileExists) CommandLineHelper.requireFileExists(args[0]);
   }
 
-  static requireVariableArgumentCount(
+  static void requireVariableArgumentCount(
       List<int> ok, List<String> args, void Function() usage) {
     if (!ok.contains(args.length)) {
       print("Expected the argument count to be one of ${ok}, got "
@@ -25,7 +26,7 @@
     }
   }
 
-  static requireFileExists(String file) {
+  static void requireFileExists(String file) {
     if (!new File(file).existsSync()) {
       print("File $file doesn't exist.");
       exit(1);
diff --git a/pkg/kernel/lib/src/tool/find_referenced_libraries.dart b/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
index 9846b9b..dca5f78 100644
--- a/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
+++ b/pkg/kernel/lib/src/tool/find_referenced_libraries.dart
@@ -23,6 +23,7 @@
 class _LibraryCollector extends RecursiveVisitor {
   Set<Library> allSeenLibraries = {};
 
+  @override
   void defaultNode(Node node) {
     if (node is NamedNode) {
       // Named nodes can be linked to.
@@ -35,6 +36,7 @@
     super.defaultNode(node);
   }
 
+  @override
   void defaultMemberReference(Member node) {
     seen(node);
     super.defaultMemberReference(node);
diff --git a/pkg/kernel/lib/src/types.dart b/pkg/kernel/lib/src/types.dart
index abb2a35..b78578c 100644
--- a/pkg/kernel/lib/src/types.dart
+++ b/pkg/kernel/lib/src/types.dart
@@ -24,6 +24,7 @@
   @override
   CoreTypes get coreTypes => hierarchy.coreTypes;
 
+  @override
   bool areMutualSubtypes(DartType s, DartType t, SubtypeCheckMode mode) {
     IsSubtypeOf result = performNullabilityAwareMutualSubtypesCheck(s, t);
     switch (mode) {
diff --git a/pkg/kernel/lib/src/union_find.dart b/pkg/kernel/lib/src/union_find.dart
index 4dffab0..bab7fc6 100644
--- a/pkg/kernel/lib/src/union_find.dart
+++ b/pkg/kernel/lib/src/union_find.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.
 
+/// Implementation of a union-find algorithm.
+///
+/// See https://en.wikipedia.org/wiki/Disjoint-set_data_structure
+
 import 'dart:collection';
 
 class UnionFindNode<T> {
@@ -46,6 +50,7 @@
 
   UnionFindNode<T> findNode(UnionFindNode<T> node) {
     if (node.parent != null) {
+      // Perform path compression by updating to the effective target.
       return node.parent = findNode(node.parent!);
     }
     return node;
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 55a69cd..479f222 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -14,48 +14,23 @@
 
 class TargetFlags {
   final bool trackWidgetCreation;
-  final int forceLateLoweringsForTesting;
-  final bool forceLateLoweringSentinelForTesting;
-  final bool forceStaticFieldLoweringForTesting;
-  final bool forceNoExplicitGetterCallsForTesting;
-  final int forceConstructorTearOffLoweringForTesting;
   final bool enableNullSafety;
 
   const TargetFlags(
-      {this.trackWidgetCreation = false,
-      this.forceLateLoweringsForTesting = LateLowering.none,
-      this.forceLateLoweringSentinelForTesting = false,
-      this.forceStaticFieldLoweringForTesting = false,
-      this.forceNoExplicitGetterCallsForTesting = false,
-      this.forceConstructorTearOffLoweringForTesting =
-          ConstructorTearOffLowering.none,
-      this.enableNullSafety = false});
+      {this.trackWidgetCreation = false, this.enableNullSafety = false});
 
+  @override
   bool operator ==(other) {
     if (identical(this, other)) return true;
     return other is TargetFlags &&
         trackWidgetCreation == other.trackWidgetCreation &&
-        forceLateLoweringsForTesting == other.forceLateLoweringsForTesting &&
-        forceLateLoweringSentinelForTesting ==
-            other.forceLateLoweringSentinelForTesting &&
-        forceStaticFieldLoweringForTesting ==
-            other.forceStaticFieldLoweringForTesting &&
-        forceNoExplicitGetterCallsForTesting ==
-            other.forceNoExplicitGetterCallsForTesting &&
         enableNullSafety == other.enableNullSafety;
   }
 
+  @override
   int get hashCode {
     int hash = 485786;
     hash = 0x3fffffff & (hash * 31 + (hash ^ trackWidgetCreation.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceLateLoweringsForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceLateLoweringSentinelForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceStaticFieldLoweringForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceNoExplicitGetterCallsForTesting.hashCode));
     hash = 0x3fffffff & (hash * 31 + (hash ^ enableNullSafety.hashCode));
     return hash;
   }
@@ -70,7 +45,11 @@
 Target? getTarget(String name, TargetFlags flags) {
   _TargetBuilder? builder = targets[name];
   if (builder == null) return null;
-  return builder(flags);
+  Target target = builder(flags);
+  if (flags is TestTargetFlags) {
+    target = new TestTargetWrapper(target, flags);
+  }
+  return target;
 }
 
 abstract class DiagnosticReporter<M, C> {
@@ -451,6 +430,7 @@
   // Configure environment defines in a target-specific way.
   Map<String, String> updateEnvironmentDefines(Map<String, String> map) => map;
 
+  @override
   String toString() => 'Target($name)';
 
   Class? concreteListLiteralClass(CoreTypes coreTypes) => null;
@@ -474,27 +454,25 @@
 }
 
 class NoneTarget extends Target {
+  @override
   final TargetFlags flags;
 
   NoneTarget(this.flags);
 
   @override
-  int get enabledLateLowerings => flags.forceLateLoweringsForTesting;
+  int get enabledLateLowerings => LateLowering.none;
 
   @override
-  bool get supportsLateLoweringSentinel =>
-      flags.forceLateLoweringSentinelForTesting;
+  bool get supportsLateLoweringSentinel => false;
 
   @override
-  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+  bool get useStaticFieldLowering => false;
 
   @override
-  bool get supportsExplicitGetterCalls =>
-      !flags.forceNoExplicitGetterCallsForTesting;
+  bool get supportsExplicitGetterCalls => true;
 
   @override
-  int get enabledConstructorTearOffLowerings =>
-      flags.forceConstructorTearOffLoweringForTesting;
+  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.none;
 
   @override
   String get name => 'none';
@@ -663,3 +641,272 @@
   static const int none = 0;
   static const int all = (1 << 4) - 1;
 }
+
+class TestTargetFlags extends TargetFlags {
+  final int? forceLateLoweringsForTesting;
+  final bool? forceLateLoweringSentinelForTesting;
+  final bool? forceStaticFieldLoweringForTesting;
+  final bool? forceNoExplicitGetterCallsForTesting;
+  final int? forceConstructorTearOffLoweringForTesting;
+
+  const TestTargetFlags(
+      {bool trackWidgetCreation = false,
+      this.forceLateLoweringsForTesting,
+      this.forceLateLoweringSentinelForTesting,
+      this.forceStaticFieldLoweringForTesting,
+      this.forceNoExplicitGetterCallsForTesting,
+      this.forceConstructorTearOffLoweringForTesting,
+      bool enableNullSafety = false})
+      : super(
+            trackWidgetCreation: trackWidgetCreation,
+            enableNullSafety: enableNullSafety);
+}
+
+mixin TestTargetMixin on Target {
+  @override
+  TestTargetFlags get flags;
+
+  @override
+  int get enabledLateLowerings =>
+      flags.forceLateLoweringsForTesting ?? super.enabledLateLowerings;
+
+  @override
+  bool get supportsLateLoweringSentinel =>
+      flags.forceLateLoweringSentinelForTesting ??
+      super.supportsLateLoweringSentinel;
+
+  @override
+  bool get useStaticFieldLowering =>
+      flags.forceStaticFieldLoweringForTesting ?? super.useStaticFieldLowering;
+
+  @override
+  bool get supportsExplicitGetterCalls =>
+      flags.forceNoExplicitGetterCallsForTesting != null
+          ? !flags.forceNoExplicitGetterCallsForTesting!
+          : super.supportsExplicitGetterCalls;
+
+  @override
+  int get enabledConstructorTearOffLowerings =>
+      flags.forceConstructorTearOffLoweringForTesting ??
+      super.enabledConstructorTearOffLowerings;
+}
+
+class TargetWrapper extends Target {
+  final Target _target;
+
+  TargetWrapper(this._target);
+
+  @override
+  TargetFlags get flags => _target.flags;
+
+  @override
+  int get enabledLateLowerings => _target.enabledLateLowerings;
+
+  @override
+  bool get supportsLateLoweringSentinel => _target.supportsLateLoweringSentinel;
+
+  @override
+  bool get useStaticFieldLowering => _target.useStaticFieldLowering;
+
+  @override
+  bool get supportsExplicitGetterCalls => _target.supportsExplicitGetterCalls;
+
+  @override
+  int get enabledConstructorTearOffLowerings =>
+      _target.enabledConstructorTearOffLowerings;
+
+  @override
+  bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) {
+    return _target.allowPlatformPrivateLibraryAccess(importer, imported);
+  }
+
+  @override
+  Class? concreteConstListLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteConstListLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteConstMapLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteConstMapLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteDoubleLiteralClass(CoreTypes coreTypes, double value) {
+    return _target.concreteDoubleLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Class? concreteIntLiteralClass(CoreTypes coreTypes, int value) {
+    return _target.concreteIntLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Class? concreteListLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteListLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteMapLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteMapLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteStringLiteralClass(CoreTypes coreTypes, String value) {
+    return _target.concreteStringLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Component configureComponent(Component component) {
+    return _target.configureComponent(component);
+  }
+
+  @override
+  ConstantsBackend constantsBackend(CoreTypes coreTypes) {
+    return _target.constantsBackend(coreTypes);
+  }
+
+  @override
+  bool enableNative(Uri uri) {
+    return _target.enableNative(uri);
+  }
+
+  @override
+  bool get enableNoSuchMethodForwarders => _target.enableNoSuchMethodForwarders;
+
+  @override
+  bool get enableSuperMixins => _target.enableSuperMixins;
+
+  @override
+  bool get errorOnUnexactWebIntLiterals => _target.errorOnUnexactWebIntLiterals;
+
+  @override
+  Map<String, String> get extraDeclaredVariables =>
+      _target.extraDeclaredVariables;
+
+  @override
+  List<String> get extraIndexedLibraries => _target.extraIndexedLibraries;
+
+  @override
+  List<String> get extraRequiredLibraries => _target.extraRequiredLibraries;
+
+  @override
+  List<String> get extraRequiredLibrariesPlatform =>
+      _target.extraRequiredLibrariesPlatform;
+
+  @override
+  Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
+      String name, Arguments arguments, int offset, bool isSuper) {
+    return _target.instantiateInvocation(
+        coreTypes, receiver, name, arguments, offset, isSuper);
+  }
+
+  @override
+  Expression instantiateNoSuchMethodError(CoreTypes coreTypes,
+      Expression receiver, String name, Arguments arguments, int offset,
+      {bool isMethod = false,
+      bool isGetter = false,
+      bool isSetter = false,
+      bool isField = false,
+      bool isLocalVariable = false,
+      bool isDynamic = false,
+      bool isSuper = false,
+      bool isStatic = false,
+      bool isConstructor = false,
+      bool isTopLevel = false}) {
+    return _target.instantiateNoSuchMethodError(
+        coreTypes, receiver, name, arguments, offset,
+        isMethod: isMethod,
+        isGetter: isGetter,
+        isSetter: isSetter,
+        isField: isField,
+        isLocalVariable: isLocalVariable,
+        isDynamic: isDynamic,
+        isSuper: isSuper,
+        isStatic: isStatic,
+        isConstructor: isConstructor,
+        isTopLevel: isTopLevel);
+  }
+
+  @override
+  bool mayDefineRestrictedType(Uri uri) {
+    return _target.mayDefineRestrictedType(uri);
+  }
+
+  @override
+  String get name => _target.name;
+
+  @override
+  bool get nativeExtensionExpectsString => _target.nativeExtensionExpectsString;
+
+  @override
+  void performModularTransformationsOnLibraries(
+      Component component,
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      List<Library> libraries,
+      Map<String, String>? environmentDefines,
+      DiagnosticReporter diagnosticReporter,
+      ReferenceFromIndex? referenceFromIndex,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    _target.performModularTransformationsOnLibraries(
+        component,
+        coreTypes,
+        hierarchy,
+        libraries,
+        environmentDefines,
+        diagnosticReporter,
+        referenceFromIndex,
+        logger: logger,
+        changedStructureNotifier: changedStructureNotifier);
+  }
+
+  @override
+  void performOutlineTransformations(Component component) {
+    _target.performOutlineTransformations(component);
+  }
+
+  @override
+  void performPreConstantEvaluationTransformations(
+      Component component,
+      CoreTypes coreTypes,
+      List<Library> libraries,
+      DiagnosticReporter diagnosticReporter,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    _target.performPreConstantEvaluationTransformations(
+        component, coreTypes, libraries, diagnosticReporter,
+        logger: logger, changedStructureNotifier: changedStructureNotifier);
+  }
+
+  @override
+  void performTransformationsOnProcedure(
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      Procedure procedure,
+      Map<String, String>? environmentDefines,
+      {void Function(String msg)? logger}) {
+    _target.performTransformationsOnProcedure(
+        coreTypes, hierarchy, procedure, environmentDefines,
+        logger: logger);
+  }
+
+  @override
+  Map<String, List<String>> get requiredSdkClasses =>
+      _target.requiredSdkClasses;
+
+  @override
+  bool get supportsSetLiterals => _target.supportsSetLiterals;
+
+  @override
+  Map<String, String> updateEnvironmentDefines(Map<String, String> map) {
+    return _target.updateEnvironmentDefines(map);
+  }
+}
+
+class TestTargetWrapper extends TargetWrapper with TestTargetMixin {
+  @override
+  final TestTargetFlags flags;
+
+  TestTargetWrapper(Target target, this.flags) : super(target);
+}
diff --git a/pkg/kernel/lib/testing/type_parser.dart b/pkg/kernel/lib/testing/type_parser.dart
index f2522d3..d0aecd3 100644
--- a/pkg/kernel/lib/testing/type_parser.dart
+++ b/pkg/kernel/lib/testing/type_parser.dart
@@ -51,6 +51,7 @@
 
   ParsedInterfaceType(this.name, this.arguments, this.parsedNullability);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write(name);
@@ -63,6 +64,7 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitInterfaceType(this, a);
   }
@@ -85,6 +87,7 @@
       this.interfaces, this.callableType)
       : super(name);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write("class ");
@@ -112,6 +115,7 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitClass(this, a);
   }
@@ -123,6 +127,7 @@
 
   ParsedExtension(String name, this.typeVariables, this.onType) : super(name);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write("extension ");
@@ -138,6 +143,7 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitExtension(this, a);
   }
@@ -150,6 +156,7 @@
 
   ParsedTypedef(String name, this.typeVariables, this.type) : super(name);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write("typedef ");
@@ -164,6 +171,7 @@
     return "$sb;";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitTypedef(this, a);
   }
@@ -181,6 +189,7 @@
   ParsedFunctionType(this.typeVariables, this.returnType, this.arguments,
       this.parsedNullability);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     if (typeVariables.isNotEmpty) {
@@ -196,14 +205,17 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitFunctionType(this, a);
   }
 }
 
 class ParsedVoidType extends ParsedType {
+  @override
   String toString() => "void";
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitVoidType(this, a);
   }
@@ -216,6 +228,7 @@
 
   ParsedTypeVariable(this.name, this.bound);
 
+  @override
   String toString() {
     if (bound == null) return name;
     StringBuffer sb = new StringBuffer();
@@ -225,6 +238,7 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitTypeVariable(this, a);
   }
@@ -237,6 +251,7 @@
 
   ParsedIntersectionType(this.a, this.b);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write(a);
@@ -245,6 +260,7 @@
     return "$sb";
   }
 
+  @override
   R accept<R, A>(Visitor<R, A> visitor, A a) {
     return visitor.visitIntersectionType(this, a);
   }
@@ -258,6 +274,7 @@
   ParsedArguments(this.required, this.positional, this.named)
       : assert(positional.isEmpty || named.isEmpty);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write("(");
@@ -291,6 +308,7 @@
 
   ParsedNamedArgument(this.isRequired, this.type, this.name);
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     if (isRequired) {
@@ -637,49 +655,20 @@
   return result;
 }
 
-abstract class DefaultAction<R, A> {
-  R defaultAction(ParsedType node, A a);
-
-  static perform<R, A>(Visitor<R, A> visitor, ParsedType node, A a) {
-    if (visitor is DefaultAction<R, A>) {
-      DefaultAction<R, A> defaultAction = visitor as DefaultAction<R, A>;
-      return defaultAction.defaultAction(node, a);
-    } else {
-      return null;
-    }
-  }
-}
-
 abstract class Visitor<R, A> {
-  R visitInterfaceType(ParsedInterfaceType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitInterfaceType(ParsedInterfaceType node, A a);
 
-  R visitClass(ParsedClass node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitClass(ParsedClass node, A a);
 
-  R visitExtension(ParsedExtension node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitExtension(ParsedExtension node, A a);
 
-  R visitTypedef(ParsedTypedef node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitTypedef(ParsedTypedef node, A a);
 
-  R visitFunctionType(ParsedFunctionType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitFunctionType(ParsedFunctionType node, A a);
 
-  R visitVoidType(ParsedVoidType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitVoidType(ParsedVoidType node, A a);
 
-  R visitTypeVariable(ParsedTypeVariable node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitTypeVariable(ParsedTypeVariable node, A a);
 
-  R visitIntersectionType(ParsedIntersectionType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitIntersectionType(ParsedIntersectionType node, A a);
 }
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index c9c0b12..6beaa67 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -243,6 +243,7 @@
         as InterfaceType?;
   }
 
+  @override
   DartType visitInterfaceType(
       ParsedInterfaceType node, TypeParserEnvironment environment) {
     String name = node.name;
@@ -338,6 +339,7 @@
     }
   }
 
+  @override
   Class visitClass(ParsedClass node, TypeParserEnvironment environment) {
     String name = node.name;
     Class cls = environment.lookupDeclaration(name) as Class;
@@ -373,6 +375,7 @@
     return cls;
   }
 
+  @override
   Extension visitExtension(
       ParsedExtension node, TypeParserEnvironment environment) {
     String name = node.name;
@@ -393,6 +396,7 @@
     return ext;
   }
 
+  @override
   Typedef visitTypedef(ParsedTypedef node, TypeParserEnvironment environment) {
     String name = node.name;
     Typedef def = environment._registerDeclaration(
@@ -423,6 +427,7 @@
     return def..type = type;
   }
 
+  @override
   FunctionType visitFunctionType(
       ParsedFunctionType node, TypeParserEnvironment environment) {
     ParameterEnvironment parameterEnvironment =
@@ -453,16 +458,19 @@
         typeParameters: parameterEnvironment.parameters);
   }
 
+  @override
   VoidType visitVoidType(
       ParsedVoidType node, TypeParserEnvironment environment) {
     return const VoidType();
   }
 
+  @override
   TypeParameter visitTypeVariable(
       ParsedTypeVariable node, TypeParserEnvironment environment) {
     throw "not implemented: $node";
   }
 
+  @override
   TypeParameterType visitIntersectionType(
       ParsedIntersectionType node, TypeParserEnvironment environment) {
     TypeParameterType type =
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index eacfa1e..5485bdc 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -21,16 +21,19 @@
 }
 
 class NormalNamer<T> extends Namer<T> {
+  @override
   final String prefix;
 
   NormalNamer(this.prefix);
 }
 
-class ConstantNamer extends RecursiveResultVisitor<Null> with Namer<Constant> {
+class ConstantNamer extends RecursiveVisitor with Namer<Constant> {
+  @override
   final String prefix;
 
   ConstantNamer(this.prefix);
 
+  @override
   String getName(Constant constant) {
     if (!map.containsKey(constant)) {
       // When printing a non-fully linked kernel AST (i.e. some [Reference]s
@@ -61,11 +64,13 @@
     return super.getName(constant);
   }
 
-  defaultConstantReference(Constant constant) {
+  @override
+  void defaultConstantReference(Constant constant) {
     getName(constant);
   }
 
-  defaultDartType(DartType type) {
+  @override
+  void defaultDartType(DartType type) {
     // No need to recurse into dart types, we only care about naming the
     // constants themselves.
   }
@@ -197,15 +202,15 @@
   final Disambiguator<Reference, CanonicalName> prefixes =
       new Disambiguator<Reference, CanonicalName>();
 
-  nameVariable(VariableDeclaration node) => variables.getName(node);
-  nameMember(Member node) => members.getName(node);
-  nameClass(Class node) => classes.getName(node);
-  nameExtension(Extension node) => extensions.getName(node);
-  nameLibrary(Library node) => libraries.getName(node);
-  nameTypeParameter(TypeParameter node) => typeParameters.getName(node);
-  nameSwitchCase(SwitchCase node) => labels.getName(node);
-  nameLabeledStatement(LabeledStatement node) => labels.getName(node);
-  nameConstant(Constant node) => constants.getName(node);
+  String nameVariable(VariableDeclaration node) => variables.getName(node);
+  String nameMember(Member node) => members.getName(node);
+  String nameClass(Class node) => classes.getName(node);
+  String nameExtension(Extension node) => extensions.getName(node);
+  String nameLibrary(Library node) => libraries.getName(node);
+  String nameTypeParameter(TypeParameter node) => typeParameters.getName(node);
+  String nameSwitchCase(SwitchCase node) => labels.getName(node);
+  String nameLabeledStatement(LabeledStatement node) => labels.getName(node);
+  String nameConstant(Constant node) => constants.getName(node);
 
   final RegExp pathSeparator = new RegExp('[\\/]');
 
@@ -233,7 +238,7 @@
     });
   }
 
-  nameCanonicalNameAsLibraryPrefix(Reference? node, CanonicalName? name,
+  String nameCanonicalNameAsLibraryPrefix(Reference? node, CanonicalName? name,
       {String? proposedName}) {
     return prefixes.disambiguate(node, name, () {
       if (proposedName != null) return proposedName;
@@ -702,7 +707,8 @@
     }
   }
 
-  visitSupertype(Supertype type) {
+  @override
+  void visitSupertype(Supertype type) {
     // ignore: unnecessary_null_comparison
     if (type == null) {
       write('<No Supertype>');
@@ -716,7 +722,8 @@
     }
   }
 
-  visitTypedefType(TypedefType type) {
+  @override
+  void visitTypedefType(TypedefType type) {
     writeTypedefReference(type.typedefNode);
     if (type.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -834,7 +841,7 @@
     }
   }
 
-  writeFunctionType(FunctionType node,
+  void writeFunctionType(FunctionType node,
       {List<VariableDeclaration>? typedefPositional,
       List<VariableDeclaration>? typedefNamed}) {
     if (state == WORD) {
@@ -1107,9 +1114,11 @@
     }
   }
 
-  visitLibrary(Library node) {}
+  @override
+  void visitLibrary(Library node) {}
 
-  visitField(Field node) {
+  @override
+  void visitField(Field node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isLate, 'late');
@@ -1153,7 +1162,8 @@
     endLine(';');
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1220,7 +1230,8 @@
     }
   }
 
-  visitConstructor(Constructor node) {
+  @override
+  void visitConstructor(Constructor node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1243,7 +1254,8 @@
         name: node.name, initializers: node.initializers);
   }
 
-  visitRedirectingFactory(RedirectingFactory node) {
+  @override
+  void visitRedirectingFactory(RedirectingFactory node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1272,7 +1284,8 @@
     endLine(';');
   }
 
-  visitClass(Class node) {
+  @override
+  void visitClass(Class node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isAbstract, 'abstract');
@@ -1326,7 +1339,8 @@
     endLine('}');
   }
 
-  visitExtension(Extension node) {
+  @override
+  void visitExtension(Extension node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('extension');
@@ -1384,7 +1398,8 @@
     endLine('}');
   }
 
-  visitTypedef(Typedef node) {
+  @override
+  void visitTypedef(Typedef node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('typedef');
@@ -1402,11 +1417,16 @@
     endLine(';');
   }
 
-  visitInvalidExpression(InvalidExpression node) {
+  @override
+  void visitInvalidExpression(InvalidExpression node) {
     writeWord('invalid-expression');
     if (node.message != null) {
       writeWord('"${escapeString(node.message!)}"');
     }
+    if (node.expression != null) {
+      writeSpaced('in');
+      writeNode(node.expression!);
+    }
   }
 
   void _writeDynamicAccessKind(DynamicAccessKind kind) {
@@ -1426,7 +1446,8 @@
     }
   }
 
-  visitDynamicInvocation(DynamicInvocation node) {
+  @override
+  void visitDynamicInvocation(DynamicInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(
@@ -1449,7 +1470,8 @@
     }
   }
 
-  visitFunctionInvocation(FunctionInvocation node) {
+  @override
+  void visitFunctionInvocation(FunctionInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeFunctionAccessKind(node.kind);
     writeNode(node.arguments);
@@ -1461,7 +1483,7 @@
   }
 
   @override
-  visitLocalFunctionInvocation(LocalFunctionInvocation node) {
+  void visitLocalFunctionInvocation(LocalFunctionInvocation node) {
     writeVariableReference(node.variable);
     writeNode(node.arguments);
     writeSymbol('{');
@@ -1483,7 +1505,8 @@
     }
   }
 
-  visitInstanceInvocation(InstanceInvocation node) {
+  @override
+  void visitInstanceInvocation(InstanceInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1504,7 +1527,8 @@
     writeSymbol('}');
   }
 
-  visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+  @override
+  void visitInstanceGetterInvocation(InstanceGetterInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1517,7 +1541,8 @@
     }
   }
 
-  visitEqualsCall(EqualsCall node) {
+  @override
+  void visitEqualsCall(EqualsCall node) {
     int precedence = Precedence.EQUALITY;
     writeExpression(node.left, precedence);
     writeSpace();
@@ -1530,7 +1555,8 @@
     writeExpression(node.right, precedence + 1);
   }
 
-  visitEqualsNull(EqualsNull node) {
+  @override
+  void visitEqualsNull(EqualsNull node) {
     writeExpression(node.expression, Precedence.EQUALITY);
     writeSpace();
     writeSymbol('==');
@@ -1538,36 +1564,42 @@
     writeSymbol('null');
   }
 
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
     writeNode(node.arguments);
   }
 
-  visitStaticInvocation(StaticInvocation node) {
+  @override
+  void visitStaticInvocation(StaticInvocation node) {
     writeModifier(node.isConst, 'const');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitConstructorInvocation(ConstructorInvocation node) {
+  @override
+  void visitConstructorInvocation(ConstructorInvocation node) {
     writeWord(node.isConst ? 'const' : 'new');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitNot(Not node) {
+  @override
+  void visitNot(Not node) {
     writeSymbol('!');
     writeExpression(node.operand, Precedence.PREFIX);
   }
 
-  visitNullCheck(NullCheck node) {
+  @override
+  void visitNullCheck(NullCheck node) {
     writeExpression(node.operand, Precedence.POSTFIX);
     writeSymbol('!');
   }
 
-  visitLogicalExpression(LogicalExpression node) {
+  @override
+  void visitLogicalExpression(LogicalExpression node) {
     int precedence = Precedence.binaryPrecedence[
         logicalExpressionOperatorToString(node.operatorEnum)]!;
     writeExpression(node.left, precedence);
@@ -1575,7 +1607,8 @@
     writeExpression(node.right, precedence + 1);
   }
 
-  visitConditionalExpression(ConditionalExpression node) {
+  @override
+  void visitConditionalExpression(ConditionalExpression node) {
     writeExpression(node.condition, Precedence.LOGICAL_OR);
     ensureSpace();
     write('?');
@@ -1586,7 +1619,8 @@
     writeExpression(node.otherwise);
   }
 
-  visitStringConcatenation(StringConcatenation node) {
+  @override
+  void visitStringConcatenation(StringConcatenation node) {
     if (state == WORD) {
       writeSpace();
     }
@@ -1604,7 +1638,8 @@
     state = WORD;
   }
 
-  visitListConcatenation(ListConcatenation node) {
+  @override
+  void visitListConcatenation(ListConcatenation node) {
     bool first = true;
     for (Expression part in node.lists) {
       if (!first) writeSpaced('+');
@@ -1613,7 +1648,8 @@
     }
   }
 
-  visitSetConcatenation(SetConcatenation node) {
+  @override
+  void visitSetConcatenation(SetConcatenation node) {
     bool first = true;
     for (Expression part in node.sets) {
       if (!first) writeSpaced('+');
@@ -1622,7 +1658,8 @@
     }
   }
 
-  visitMapConcatenation(MapConcatenation node) {
+  @override
+  void visitMapConcatenation(MapConcatenation node) {
     bool first = true;
     for (Expression part in node.maps) {
       if (!first) writeSpaced('+');
@@ -1631,7 +1668,8 @@
     }
   }
 
-  visitInstanceCreation(InstanceCreation node) {
+  @override
+  void visitInstanceCreation(InstanceCreation node) {
     writeClassReferenceFromReference(node.classReference);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -1673,18 +1711,21 @@
     writeSymbol('}');
   }
 
-  visitFileUriExpression(FileUriExpression node) {
+  @override
+  void visitFileUriExpression(FileUriExpression node) {
     writeExpression(node.expression);
   }
 
-  visitIsExpression(IsExpression node) {
+  @override
+  void visitIsExpression(IsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
     writeSpaced(
         node.isForNonNullableByDefault ? 'is{ForNonNullableByDefault}' : 'is');
     writeType(node.type);
   }
 
-  visitAsExpression(AsExpression node) {
+  @override
+  void visitAsExpression(AsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
     List<String> flags = <String>[];
     if (node.isTypeError) {
@@ -1703,30 +1744,36 @@
     writeType(node.type);
   }
 
-  visitSymbolLiteral(SymbolLiteral node) {
+  @override
+  void visitSymbolLiteral(SymbolLiteral node) {
     writeSymbol('#');
     writeWord(node.value);
   }
 
-  visitTypeLiteral(TypeLiteral node) {
+  @override
+  void visitTypeLiteral(TypeLiteral node) {
     writeType(node.type);
   }
 
-  visitThisExpression(ThisExpression node) {
+  @override
+  void visitThisExpression(ThisExpression node) {
     writeWord('this');
   }
 
-  visitRethrow(Rethrow node) {
+  @override
+  void visitRethrow(Rethrow node) {
     writeWord('rethrow');
   }
 
-  visitThrow(Throw node) {
+  @override
+  void visitThrow(Throw node) {
     writeWord('throw');
     writeSpace();
     writeExpression(node.expression);
   }
 
-  visitListLiteral(ListLiteral node) {
+  @override
+  void visitListLiteral(ListLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1742,7 +1789,8 @@
     writeSymbol(']');
   }
 
-  visitSetLiteral(SetLiteral node) {
+  @override
+  void visitSetLiteral(SetLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1758,7 +1806,8 @@
     writeSymbol('}');
   }
 
-  visitMapLiteral(MapLiteral node) {
+  @override
+  void visitMapLiteral(MapLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1774,63 +1823,75 @@
     writeSymbol('}');
   }
 
-  visitMapLiteralEntry(MapLiteralEntry node) {
+  @override
+  void visitMapLiteralEntry(MapLiteralEntry node) {
     writeExpression(node.key);
     writeComma(':');
     writeExpression(node.value);
   }
 
-  visitAwaitExpression(AwaitExpression node) {
+  @override
+  void visitAwaitExpression(AwaitExpression node) {
     writeWord('await');
     writeExpression(node.operand);
   }
 
-  visitFunctionExpression(FunctionExpression node) {
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
     writeFunction(node.function, terminateLine: false);
   }
 
-  visitStringLiteral(StringLiteral node) {
+  @override
+  void visitStringLiteral(StringLiteral node) {
     writeWord('"${escapeString(node.value)}"');
   }
 
-  visitIntLiteral(IntLiteral node) {
+  @override
+  void visitIntLiteral(IntLiteral node) {
     writeWord('${node.value}');
   }
 
-  visitDoubleLiteral(DoubleLiteral node) {
+  @override
+  void visitDoubleLiteral(DoubleLiteral node) {
     writeWord('${node.value}');
   }
 
-  visitBoolLiteral(BoolLiteral node) {
+  @override
+  void visitBoolLiteral(BoolLiteral node) {
     writeWord('${node.value}');
   }
 
-  visitNullLiteral(NullLiteral node) {
+  @override
+  void visitNullLiteral(NullLiteral node) {
     writeWord('null');
   }
 
-  visitLet(Let node) {
+  @override
+  void visitLet(Let node) {
     writeWord('let');
     writeVariableDeclaration(node.variable);
     writeSpaced('in');
     writeExpression(node.body);
   }
 
-  visitBlockExpression(BlockExpression node) {
+  @override
+  void visitBlockExpression(BlockExpression node) {
     writeSpaced('block');
     writeBlockBody(node.body.statements, asExpression: true);
     writeSymbol(' =>');
     writeExpression(node.value);
   }
 
-  visitInstantiation(Instantiation node) {
+  @override
+  void visitInstantiation(Instantiation node) {
     writeExpression(node.expression);
     writeSymbol('<');
     writeList(node.typeArguments, writeType);
     writeSymbol('>');
   }
 
-  visitLoadLibrary(LoadLibrary node) {
+  @override
+  void visitLoadLibrary(LoadLibrary node) {
     writeWord('LoadLibrary');
     writeSymbol('(');
     writeWord(node.import.name!);
@@ -1838,7 +1899,8 @@
     state = WORD;
   }
 
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+  @override
+  void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
     writeWord('CheckLibraryIsLoaded');
     writeSymbol('(');
     writeWord(node.import.name!);
@@ -1846,7 +1908,8 @@
     state = WORD;
   }
 
-  visitLibraryPart(LibraryPart node) {
+  @override
+  void visitLibraryPart(LibraryPart node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('part');
@@ -1854,7 +1917,8 @@
     endLine(";");
   }
 
-  visitLibraryDependency(LibraryDependency node) {
+  @override
+  void visitLibraryDependency(LibraryDependency node) {
     writeIndentation();
     writeWord(node.isImport ? 'import' : 'export');
     String uriString;
@@ -1896,11 +1960,13 @@
     endLine(';');
   }
 
-  defaultExpression(Expression node) {
+  @override
+  void defaultExpression(Expression node) {
     writeWord('${node.runtimeType}');
   }
 
-  visitVariableGet(VariableGet node) {
+  @override
+  void visitVariableGet(VariableGet node) {
     writeVariableReference(node.variable);
     DartType? promotedType = node.promotedType;
     if (promotedType != null) {
@@ -1911,7 +1977,8 @@
     }
   }
 
-  visitVariableSet(VariableSet node) {
+  @override
+  void visitVariableSet(VariableSet node) {
     writeVariableReference(node.variable);
     writeSpaced('=');
     writeExpression(node.value);
@@ -1936,19 +2003,22 @@
     }
   }
 
-  visitDynamicGet(DynamicGet node) {
+  @override
+  void visitDynamicGet(DynamicGet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(node.name);
   }
 
-  visitFunctionTearOff(FunctionTearOff node) {
+  @override
+  void visitFunctionTearOff(FunctionTearOff node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeSymbol('call');
   }
 
-  visitInstanceGet(InstanceGet node) {
+  @override
+  void visitInstanceGet(InstanceGet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1958,7 +2028,8 @@
     writeSymbol('}');
   }
 
-  visitInstanceTearOff(InstanceTearOff node) {
+  @override
+  void visitInstanceTearOff(InstanceTearOff node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1968,7 +2039,8 @@
     writeSymbol('}');
   }
 
-  visitDynamicSet(DynamicSet node) {
+  @override
+  void visitDynamicSet(DynamicSet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(node.name);
@@ -1976,7 +2048,8 @@
     writeExpression(node.value);
   }
 
-  visitInstanceSet(InstanceSet node) {
+  @override
+  void visitInstanceSet(InstanceSet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1985,13 +2058,15 @@
     writeExpression(node.value);
   }
 
-  visitSuperPropertyGet(SuperPropertyGet node) {
+  @override
+  void visitSuperPropertyGet(SuperPropertyGet node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
   }
 
-  visitSuperPropertySet(SuperPropertySet node) {
+  @override
+  void visitSuperPropertySet(SuperPropertySet node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1999,29 +2074,35 @@
     writeExpression(node.value);
   }
 
-  visitStaticTearOff(StaticTearOff node) {
+  @override
+  void visitStaticTearOff(StaticTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
-  visitStaticGet(StaticGet node) {
+  @override
+  void visitStaticGet(StaticGet node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
-  visitStaticSet(StaticSet node) {
+  @override
+  void visitStaticSet(StaticSet node) {
     writeMemberReferenceFromReference(node.targetReference);
     writeSpaced('=');
     writeExpression(node.value);
   }
 
-  visitConstructorTearOff(ConstructorTearOff node) {
+  @override
+  void visitConstructorTearOff(ConstructorTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
-  visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
+  @override
+  void visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
-  visitTypedefTearOff(TypedefTearOff node) {
+  @override
+  void visitTypedefTearOff(TypedefTearOff node) {
     writeTypeParameterList(node.typeParameters);
     state = SYMBOL;
     writeSymbol('.(');
@@ -2035,7 +2116,8 @@
     state = WORD;
   }
 
-  visitExpressionStatement(ExpressionStatement node) {
+  @override
+  void visitExpressionStatement(ExpressionStatement node) {
     writeIndentation();
     writeExpression(node.expression);
     endLine(';');
@@ -2054,23 +2136,27 @@
     asExpression ? writeSymbol('}') : endLine('}');
   }
 
-  visitBlock(Block node) {
+  @override
+  void visitBlock(Block node) {
     writeIndentation();
     writeBlockBody(node.statements);
   }
 
-  visitAssertBlock(AssertBlock node) {
+  @override
+  void visitAssertBlock(AssertBlock node) {
     writeIndentation();
     writeSpaced('assert');
     writeBlockBody(node.statements);
   }
 
-  visitEmptyStatement(EmptyStatement node) {
+  @override
+  void visitEmptyStatement(EmptyStatement node) {
     writeIndentation();
     endLine(';');
   }
 
-  visitAssertStatement(AssertStatement node, {bool asExpression = false}) {
+  @override
+  void visitAssertStatement(AssertStatement node, {bool asExpression = false}) {
     if (!asExpression) {
       writeIndentation();
     }
@@ -2089,21 +2175,24 @@
     }
   }
 
-  visitLabeledStatement(LabeledStatement node) {
+  @override
+  void visitLabeledStatement(LabeledStatement node) {
     writeIndentation();
     writeWord(syntheticNames.nameLabeledStatement(node));
     endLine(':');
     writeNode(node.body);
   }
 
-  visitBreakStatement(BreakStatement node) {
+  @override
+  void visitBreakStatement(BreakStatement node) {
     writeIndentation();
     writeWord('break');
     writeWord(syntheticNames.nameLabeledStatement(node.target));
     endLine(';');
   }
 
-  visitWhileStatement(WhileStatement node) {
+  @override
+  void visitWhileStatement(WhileStatement node) {
     writeIndentation();
     writeSpaced('while');
     writeSymbol('(');
@@ -2112,7 +2201,8 @@
     writeBody(node.body);
   }
 
-  visitDoStatement(DoStatement node) {
+  @override
+  void visitDoStatement(DoStatement node) {
     writeIndentation();
     writeWord('do');
     writeBody(node.body);
@@ -2123,7 +2213,8 @@
     endLine(')');
   }
 
-  visitForStatement(ForStatement node) {
+  @override
+  void visitForStatement(ForStatement node) {
     writeIndentation();
     writeSpaced('for');
     writeSymbol('(');
@@ -2139,7 +2230,8 @@
     writeBody(node.body);
   }
 
-  visitForInStatement(ForInStatement node) {
+  @override
+  void visitForInStatement(ForInStatement node) {
     writeIndentation();
     if (node.isAsync) {
       writeSpaced('await');
@@ -2153,7 +2245,8 @@
     writeBody(node.body);
   }
 
-  visitSwitchStatement(SwitchStatement node) {
+  @override
+  void visitSwitchStatement(SwitchStatement node) {
     writeIndentation();
     writeWord('switch');
     writeSymbol('(');
@@ -2166,7 +2259,8 @@
     endLine('}');
   }
 
-  visitSwitchCase(SwitchCase node) {
+  @override
+  void visitSwitchCase(SwitchCase node) {
     String label = syntheticNames.nameSwitchCase(node);
     writeIndentation();
     writeWord(label);
@@ -2187,14 +2281,16 @@
     --indentation;
   }
 
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  @override
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     writeIndentation();
     writeWord('continue');
     writeWord(syntheticNames.nameSwitchCase(node.target));
     endLine(';');
   }
 
-  visitIfStatement(IfStatement node) {
+  @override
+  void visitIfStatement(IfStatement node) {
     writeIndentation();
     writeWord('if');
     writeSymbol('(');
@@ -2209,7 +2305,8 @@
     }
   }
 
-  visitReturnStatement(ReturnStatement node) {
+  @override
+  void visitReturnStatement(ReturnStatement node) {
     writeIndentation();
     writeWord('return');
     Expression? expression = node.expression;
@@ -2220,14 +2317,16 @@
     endLine(';');
   }
 
-  visitTryCatch(TryCatch node) {
+  @override
+  void visitTryCatch(TryCatch node) {
     writeIndentation();
     writeWord('try');
     writeBody(node.body);
     node.catches.forEach(writeNode);
   }
 
-  visitCatch(Catch node) {
+  @override
+  void visitCatch(Catch node) {
     writeIndentation();
     // ignore: unnecessary_null_comparison
     if (node.guard != null) {
@@ -2252,7 +2351,8 @@
     writeBody(node.body);
   }
 
-  visitTryFinally(TryFinally node) {
+  @override
+  void visitTryFinally(TryFinally node) {
     writeIndentation();
     writeWord('try');
     writeBody(node.body);
@@ -2261,7 +2361,8 @@
     writeBody(node.finalizer);
   }
 
-  visitYieldStatement(YieldStatement node) {
+  @override
+  void visitYieldStatement(YieldStatement node) {
     writeIndentation();
     if (node.isYieldStar) {
       writeWord('yield*');
@@ -2274,13 +2375,15 @@
     endLine(';');
   }
 
-  visitVariableDeclaration(VariableDeclaration node) {
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
     writeIndentation();
     writeVariableDeclaration(node, useVarKeyword: true);
     endLine(';');
   }
 
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     writeAnnotationList(node.variable.annotations);
     writeIndentation();
     writeWord('function');
@@ -2321,7 +2424,8 @@
     }
   }
 
-  visitArguments(Arguments node) {
+  @override
+  void visitArguments(Arguments node) {
     if (node.types.isNotEmpty) {
       writeSymbol('<');
       writeList(node.types, writeType);
@@ -2334,48 +2438,57 @@
     writeSymbol(')');
   }
 
-  visitNamedExpression(NamedExpression node) {
+  @override
+  void visitNamedExpression(NamedExpression node) {
     writeWord(node.name);
     writeComma(':');
     writeExpression(node.value);
   }
 
-  defaultStatement(Statement node) {
+  @override
+  void defaultStatement(Statement node) {
     writeIndentation();
     endLine('${node.runtimeType}');
   }
 
-  visitInvalidInitializer(InvalidInitializer node) {
+  @override
+  void visitInvalidInitializer(InvalidInitializer node) {
     writeWord('invalid-initializer');
   }
 
-  visitFieldInitializer(FieldInitializer node) {
+  @override
+  void visitFieldInitializer(FieldInitializer node) {
     writeMemberReferenceFromReference(node.fieldReference);
     writeSpaced('=');
     writeExpression(node.value);
   }
 
-  visitSuperInitializer(SuperInitializer node) {
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
     writeWord('super');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
     writeWord('this');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitLocalInitializer(LocalInitializer node) {
+  @override
+  void visitLocalInitializer(LocalInitializer node) {
     writeVariableDeclaration(node.variable);
   }
 
-  visitAssertInitializer(AssertInitializer node) {
+  @override
+  void visitAssertInitializer(AssertInitializer node) {
     visitAssertStatement(node.statement, asExpression: true);
   }
 
-  defaultInitializer(Initializer node) {
+  @override
+  void defaultInitializer(Initializer node) {
     writeIndentation();
     endLine(': ${node.runtimeType}');
   }
@@ -2416,28 +2529,34 @@
     }
   }
 
-  visitInvalidType(InvalidType node) {
+  @override
+  void visitInvalidType(InvalidType node) {
     writeWord('invalid-type');
   }
 
-  visitDynamicType(DynamicType node) {
+  @override
+  void visitDynamicType(DynamicType node) {
     writeWord('dynamic');
   }
 
-  visitVoidType(VoidType node) {
+  @override
+  void visitVoidType(VoidType node) {
     writeWord('void');
   }
 
-  visitNeverType(NeverType node) {
+  @override
+  void visitNeverType(NeverType node) {
     writeWord('Never');
     writeNullability(node.nullability);
   }
 
-  visitNullType(NullType node) {
+  @override
+  void visitNullType(NullType node) {
     writeWord('Null');
   }
 
-  visitInterfaceType(InterfaceType node) {
+  @override
+  void visitInterfaceType(InterfaceType node) {
     writeClassReferenceFromReference(node.className);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -2448,7 +2567,8 @@
     writeNullability(node.nullability);
   }
 
-  visitExtensionType(ExtensionType node) {
+  @override
+  void visitExtensionType(ExtensionType node) {
     writeExtensionReferenceFromReference(node.extensionReference);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -2459,7 +2579,8 @@
     writeNullability(node.declaredNullability);
   }
 
-  visitFutureOrType(FutureOrType node) {
+  @override
+  void visitFutureOrType(FutureOrType node) {
     writeWord('FutureOr');
     writeSymbol('<');
     writeNode(node.typeArgument);
@@ -2467,11 +2588,13 @@
     writeNullability(node.declaredNullability);
   }
 
-  visitFunctionType(FunctionType node) {
+  @override
+  void visitFunctionType(FunctionType node) {
     writeFunctionType(node);
   }
 
-  visitNamedType(NamedType node) {
+  @override
+  void visitNamedType(NamedType node) {
     writeModifier(node.isRequired, 'required');
     writeWord(node.name);
     writeSymbol(':');
@@ -2479,7 +2602,8 @@
     writeType(node.type);
   }
 
-  visitTypeParameterType(TypeParameterType node) {
+  @override
+  void visitTypeParameterType(TypeParameterType node) {
     writeTypeParameterReference(node.parameter);
     writeNullability(node.declaredNullability);
     DartType? promotedBound = node.promotedBound;
@@ -2497,7 +2621,8 @@
     }
   }
 
-  visitTypeParameter(TypeParameter node) {
+  @override
+  void visitTypeParameter(TypeParameter node) {
     writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
     writeAnnotationList(node.annotations, separateLines: false);
     if (node.variance != Variance.covariant) {
@@ -2522,46 +2647,53 @@
     writeWord(syntheticNames.nameConstant(node));
   }
 
-  visitConstantExpression(ConstantExpression node) {
+  @override
+  void visitConstantExpression(ConstantExpression node) {
     writeConstantReference(node.constant);
   }
 
-  defaultConstant(Constant node) {
+  @override
+  void defaultConstant(Constant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('${node.runtimeType}');
   }
 
-  visitNullConstant(NullConstant node) {
+  @override
+  void visitNullConstant(NullConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('${node.value}');
   }
 
-  visitBoolConstant(BoolConstant node) {
+  @override
+  void visitBoolConstant(BoolConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('${node.value}');
   }
 
-  visitIntConstant(IntConstant node) {
+  @override
+  void visitIntConstant(IntConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('${node.value}');
   }
 
-  visitDoubleConstant(DoubleConstant node) {
+  @override
+  void visitDoubleConstant(DoubleConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('${node.value}');
   }
 
-  visitSymbolConstant(SymbolConstant node) {
+  @override
+  void visitSymbolConstant(SymbolConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2572,7 +2704,8 @@
     endLine('${text}');
   }
 
-  visitListConstant(ListConstant node) {
+  @override
+  void visitListConstant(ListConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2583,7 +2716,8 @@
     endLine(']');
   }
 
-  visitSetConstant(SetConstant node) {
+  @override
+  void visitSetConstant(SetConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2594,7 +2728,8 @@
     endLine('}');
   }
 
-  visitMapConstant(MapConstant node) {
+  @override
+  void visitMapConstant(MapConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2609,7 +2744,8 @@
     endLine(')');
   }
 
-  visitTypeLiteralConstant(TypeLiteralConstant node) {
+  @override
+  void visitTypeLiteralConstant(TypeLiteralConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2619,7 +2755,8 @@
     endLine(')');
   }
 
-  visitInstanceConstant(InstanceConstant node) {
+  @override
+  void visitInstanceConstant(InstanceConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2643,7 +2780,8 @@
     endLine('}');
   }
 
-  visitInstantiationConstant(InstantiationConstant node) {
+  @override
+  void visitInstantiationConstant(InstantiationConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2662,14 +2800,16 @@
     endLine();
   }
 
-  visitStringConstant(StringConstant node) {
+  @override
+  void visitStringConstant(StringConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
     endLine('"${escapeString(node.value)}"');
   }
 
-  visitStaticTearOffConstant(StaticTearOffConstant node) {
+  @override
+  void visitStaticTearOffConstant(StaticTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2679,7 +2819,8 @@
     endLine();
   }
 
-  visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+  @override
+  void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2699,7 +2840,8 @@
     endLine();
   }
 
-  visitUnevaluatedConstant(UnevaluatedConstant node) {
+  @override
+  void visitUnevaluatedConstant(UnevaluatedConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2709,7 +2851,8 @@
     endLine();
   }
 
-  visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+  @override
+  void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2719,7 +2862,8 @@
     endLine();
   }
 
-  visitRedirectingFactoryTearOffConstant(
+  @override
+  void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
@@ -2730,7 +2874,8 @@
     endLine();
   }
 
-  defaultNode(Node node) {
+  @override
+  void defaultNode(Node node) {
     write('<${node.runtimeType}>');
   }
 }
diff --git a/pkg/kernel/lib/text/debug_printer.dart b/pkg/kernel/lib/text/debug_printer.dart
index fa700c1..d42442e 100644
--- a/pkg/kernel/lib/text/debug_printer.dart
+++ b/pkg/kernel/lib/text/debug_printer.dart
@@ -49,14 +49,14 @@
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     openNode(node, '${node.runtimeType}', {'target': '${node.target}'});
     node.visitChildren(this);
     closeNode();
   }
 
   @override
-  visitArguments(Arguments node) {
+  void visitArguments(Arguments node) {
     openNode(node, '${node.runtimeType}', {
       'typeArgs': '${node.types}',
       'positionalArgs': '${node.positional}',
@@ -67,7 +67,7 @@
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     openNode(node, '${node.runtimeType}',
         {'operand': '${node.operand}', 'DartType': '${node.type}'});
     node.visitChildren(this);
@@ -75,7 +75,7 @@
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  void visitStringLiteral(StringLiteral node) {
     openAndCloseNode(node, '${node.runtimeType}', {'value': '${node.value}'});
   }
 
diff --git a/pkg/kernel/lib/text/indentation.dart b/pkg/kernel/lib/text/indentation.dart
index 4c9c344..f16a4ac 100644
--- a/pkg/kernel/lib/text/indentation.dart
+++ b/pkg/kernel/lib/text/indentation.dart
@@ -42,7 +42,7 @@
 
   /// Calls [f] with one more indentation level, restoring indentation context
   /// upon return of [f] and returning its result.
-  indentBlock(Function f) {
+  void indentBlock(Function f) {
     indentMore();
     dynamic result = f();
     indentLess();
diff --git a/pkg/kernel/lib/text/serializer_combinators.dart b/pkg/kernel/lib/text/serializer_combinators.dart
index aae9ea2..b187beb 100644
--- a/pkg/kernel/lib/text/serializer_combinators.dart
+++ b/pkg/kernel/lib/text/serializer_combinators.dart
@@ -136,16 +136,20 @@
 class Nothing extends TextSerializer<void> {
   const Nothing();
 
+  @override
   void readFrom(Iterator<Object?> stream, DeserializationState? _) {}
 
+  @override
   void writeTo(StringBuffer buffer, void ignored, SerializationState? _) {}
 
+  @override
   bool get isEmpty => true;
 }
 
 class DartString extends TextSerializer<String> {
   const DartString();
 
+  @override
   String readFrom(Iterator<Object?> stream, DeserializationState? _) {
     Object? current = stream.current;
     if (current is! String) {
@@ -156,6 +160,7 @@
     return result;
   }
 
+  @override
   void writeTo(StringBuffer buffer, String object, SerializationState? _) {
     buffer.write(json.encode(object));
   }
@@ -164,6 +169,7 @@
 class DartInt extends TextSerializer<int> {
   const DartInt();
 
+  @override
   int readFrom(Iterator<Object?> stream, DeserializationState? _) {
     Object? current = stream.current;
     if (current is! String) {
@@ -174,6 +180,7 @@
     return result;
   }
 
+  @override
   void writeTo(StringBuffer buffer, int object, SerializationState? _) {
     buffer.write(object);
   }
@@ -182,6 +189,7 @@
 class DartDouble extends TextSerializer<double> {
   const DartDouble();
 
+  @override
   double readFrom(Iterator<Object?> stream, DeserializationState? _) {
     Object? current = stream.current;
     if (current is! String) {
@@ -192,6 +200,7 @@
     return result;
   }
 
+  @override
   void writeTo(StringBuffer buffer, double object, SerializationState? _) {
     buffer.write(object);
   }
@@ -200,6 +209,7 @@
 class DartBool extends TextSerializer<bool> {
   const DartBool();
 
+  @override
   bool readFrom(Iterator<Object?> stream, DeserializationState? _) {
     Object? current = stream.current;
     if (current is! String) {
@@ -217,6 +227,7 @@
     return result;
   }
 
+  @override
   void writeTo(StringBuffer buffer, bool object, SerializationState? _) {
     buffer.write(object ? 'true' : 'false');
   }
@@ -225,11 +236,13 @@
 class UriSerializer extends TextSerializer<Uri> {
   const UriSerializer();
 
+  @override
   Uri readFrom(Iterator<Object?> stream, DeserializationState? state) {
     String uriAsString = const DartString().readFrom(stream, state);
     return Uri.parse(uriAsString);
   }
 
+  @override
   void writeTo(StringBuffer buffer, Uri object, SerializationState? state) {
     const DartString().writeTo(buffer, object.toString(), state);
   }
@@ -258,6 +271,7 @@
     _serializers.addAll(tagsAndSerializers.values);
   }
 
+  @override
   T readFrom(Iterator<Object?> stream, DeserializationState? state) {
     Object? iterator = stream.current;
     if (iterator is! Iterator<Object?>) {
@@ -284,6 +298,7 @@
     throw StateError("Unrecognized tag '${tag}'.");
   }
 
+  @override
   void writeTo(StringBuffer buffer, T object, SerializationState? state) {
     String tag = tagger.tag(object);
     for (int i = 0; i < _tags.length; ++i) {
@@ -310,14 +325,17 @@
 
   const Wrapped(this.unwrap, this.wrap, this.contents);
 
+  @override
   K readFrom(Iterator<Object?> stream, DeserializationState? state) {
     return wrap(contents.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, K object, SerializationState? state) {
     contents.writeTo(buffer, unwrap(object), state);
   }
 
+  @override
   bool get isEmpty => contents.isEmpty;
 }
 
@@ -326,6 +344,7 @@
 
   const ScopedUse();
 
+  @override
   T readFrom(Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
       throw StateError(
@@ -335,6 +354,7 @@
         as T;
   }
 
+  @override
   void writeTo(StringBuffer buffer, T object, SerializationState? state) {
     if (state == null) {
       throw StateError(
@@ -351,12 +371,14 @@
 
   const Tuple2Serializer(this.first, this.second);
 
+  @override
   Tuple2<T1, T2> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple2(
         first.readFrom(stream, state), second.readFrom(stream, state));
   }
 
+  @override
   void writeTo(
       StringBuffer buffer, Tuple2<T1, T2> object, SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -379,12 +401,14 @@
 
   const Tuple3Serializer(this.first, this.second, this.third);
 
+  @override
   Tuple3<T1, T2, T3> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple3(first.readFrom(stream, state),
         second.readFrom(stream, state), third.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple3<T1, T2, T3> object,
       SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -412,6 +436,7 @@
 
   const Tuple4Serializer(this.first, this.second, this.third, this.fourth);
 
+  @override
   Tuple4<T1, T2, T3, T4> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple4(
@@ -421,6 +446,7 @@
         fourth.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple4<T1, T2, T3, T4> object,
       SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -453,6 +479,7 @@
   const Tuple5Serializer(
       this.first, this.second, this.third, this.fourth, this.fifth);
 
+  @override
   Tuple5<T1, T2, T3, T4, T5> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple5(
@@ -463,6 +490,7 @@
         fifth.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple5<T1, T2, T3, T4, T5> object,
       SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -499,6 +527,7 @@
   const Tuple6Serializer(
       this.first, this.second, this.third, this.fourth, this.fifth, this.sixth);
 
+  @override
   Tuple6<T1, T2, T3, T4, T5, T6> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple6(
@@ -510,6 +539,7 @@
         sixth.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple6<T1, T2, T3, T4, T5, T6> object,
       SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -551,6 +581,7 @@
   const Tuple7Serializer(this.first, this.second, this.third, this.fourth,
       this.fifth, this.sixth, this.seventh);
 
+  @override
   Tuple7<T1, T2, T3, T4, T5, T6, T7> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple7(
@@ -563,6 +594,7 @@
         seventh.readFrom(stream, state));
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple7<T1, T2, T3, T4, T5, T6, T7> object,
       SerializationState? state) {
     first.writeTo(buffer, object.first, state);
@@ -608,6 +640,7 @@
   const Tuple8Serializer(this.first, this.second, this.third, this.fourth,
       this.fifth, this.sixth, this.seventh, this.eighth);
 
+  @override
   Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     return new Tuple8(
@@ -621,6 +654,7 @@
         eighth.readFrom(stream, state));
   }
 
+  @override
   void writeTo(
       StringBuffer buffer,
       Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> object,
@@ -663,6 +697,7 @@
 
   const ListSerializer(this.elements);
 
+  @override
   List<T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
     Object? iterator = stream.current;
     if (iterator is! Iterator<Object?>) {
@@ -677,6 +712,7 @@
     return result;
   }
 
+  @override
   void writeTo(StringBuffer buffer, List<T> object, SerializationState? state) {
     buffer.write('(');
     for (int i = 0; i < object.length; ++i) {
@@ -692,6 +728,7 @@
 
   const Optional(this.contents);
 
+  @override
   T? readFrom(Iterator<Object?> stream, DeserializationState? state) {
     if (stream.current == '_') {
       stream.moveNext();
@@ -700,6 +737,7 @@
     return contents.readFrom(stream, state);
   }
 
+  @override
   void writeTo(StringBuffer buffer, T? object, SerializationState? state) {
     if (object == null) {
       buffer.write('_');
@@ -720,6 +758,7 @@
   Binder(TextSerializer<T> contents)
       : namedContents = new Tuple2Serializer(const DartString(), contents);
 
+  @override
   Tuple2<String, T> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
@@ -733,6 +772,7 @@
     return new Tuple2(name, object);
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple2<String?, T> namedObject,
       SerializationState? state) {
     if (state == null) {
@@ -758,6 +798,7 @@
 
   const Bind(this.pattern, this.term);
 
+  @override
   Tuple2<P, T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
       throw StateError(
@@ -771,6 +812,7 @@
     return new Tuple2(first, second);
   }
 
+  @override
   void writeTo(
       StringBuffer buffer, Tuple2<P, T> tuple, SerializationState? state) {
     if (state == null) {
@@ -797,6 +839,7 @@
 
   const Rebind(this.pattern1, this.pattern2);
 
+  @override
   Tuple2<P, T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
       throw StateError(
@@ -813,6 +856,7 @@
     return new Tuple2(first, second);
   }
 
+  @override
   void writeTo(
       StringBuffer buffer, Tuple2<P, T> tuple, SerializationState? state) {
     if (state == null) {
@@ -837,6 +881,7 @@
 
   const Zip(this.lists, this.zip, this.unzip);
 
+  @override
   List<T> readFrom(Iterator<Object?> stream, DeserializationState? state) {
     Tuple2<List<T1>, List<T2>> toZip = lists.readFrom(stream, state);
     List<T1> firsts = toZip.first;
@@ -854,6 +899,7 @@
     return zipped;
   }
 
+  @override
   void writeTo(StringBuffer buffer, List<T> zipped, SerializationState? state) {
     List<T1> firsts;
     List<T2> seconds;
diff --git a/pkg/kernel/lib/text/text_serialization_verifier.dart b/pkg/kernel/lib/text/text_serialization_verifier.dart
index dab2bc7..a8a0283 100644
--- a/pkg/kernel/lib/text/text_serialization_verifier.dart
+++ b/pkg/kernel/lib/text/text_serialization_verifier.dart
@@ -39,6 +39,7 @@
 
   String get nameForDebugging;
 
+  @override
   int compareTo(RoundTripStatus other) {
     Node thisNode = this.node;
     Node otherNode = other.node;
@@ -111,6 +112,7 @@
     }
   }
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     printOn(sb);
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 5d740c4..0f6e9f5 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -15,6 +15,7 @@
 class NameTagger implements Tagger<Name> {
   const NameTagger();
 
+  @override
   String tag(Name name) => name.isPrivate ? "private" : "public";
 }
 
@@ -33,92 +34,153 @@
     implements Tagger<Expression> {
   const ExpressionTagger();
 
+  @override
   String tag(Expression expression) => expression.accept(this);
 
+  @override
   String visitStringLiteral(StringLiteral _) => "string";
+  @override
   String visitIntLiteral(IntLiteral _) => "int";
+  @override
   String visitDoubleLiteral(DoubleLiteral _) => "double";
+  @override
   String visitBoolLiteral(BoolLiteral _) => "bool";
+  @override
   String visitNullLiteral(NullLiteral _) => "null";
+  @override
   String visitInvalidExpression(InvalidExpression _) => "invalid";
+  @override
   String visitNot(Not _) => "not";
+  @override
   String visitLogicalExpression(LogicalExpression expression) {
     return logicalExpressionOperatorToString(expression.operatorEnum);
   }
 
+  @override
   String visitStringConcatenation(StringConcatenation _) => "concat";
+  @override
   String visitSymbolLiteral(SymbolLiteral _) => "symbol";
+  @override
   String visitThisExpression(ThisExpression _) => "this";
+  @override
   String visitRethrow(Rethrow _) => "rethrow";
+  @override
   String visitThrow(Throw _) => "throw";
+  @override
   String visitAwaitExpression(AwaitExpression _) => "await";
+  @override
   String visitConditionalExpression(ConditionalExpression _) => "cond";
+  @override
   String visitIsExpression(IsExpression _) => "is";
+  @override
   String visitAsExpression(AsExpression _) => "as";
+  @override
   String visitTypeLiteral(TypeLiteral _) => "type";
+  @override
   String visitListLiteral(ListLiteral expression) {
     return expression.isConst ? "const-list" : "list";
   }
 
+  @override
   String visitSetLiteral(SetLiteral expression) {
     return expression.isConst ? "const-set" : "set";
   }
 
+  @override
   String visitMapLiteral(MapLiteral expression) {
     return expression.isConst ? "const-map" : "map";
   }
 
+  @override
   String visitLet(Let _) => "let";
 
+  @override
   String visitInstanceGet(InstanceGet _) => "get-instance";
+  @override
   String visitInstanceSet(InstanceSet _) => "set-instance";
+  @override
   String visitDynamicGet(DynamicGet _) => "get-dynamic";
+  @override
   String visitDynamicSet(DynamicSet _) => "set-dynamic";
+  @override
   String visitInstanceTearOff(InstanceTearOff _) => "tearoff-instance";
+  @override
   String visitFunctionTearOff(FunctionTearOff _) => "tearoff-function";
+  @override
   String visitSuperPropertyGet(SuperPropertyGet _) => "get-super";
+  @override
   String visitSuperPropertySet(SuperPropertySet _) => "set-super";
+  @override
   String visitInstanceInvocation(InstanceInvocation _) => "invoke-instance";
+  @override
   String visitInstanceGetterInvocation(InstanceGetterInvocation _) =>
       "invoke-instance-getter";
+  @override
   String visitDynamicInvocation(DynamicInvocation _) => "invoke-dynamic";
+  @override
   String visitFunctionInvocation(FunctionInvocation _) => "invoke-function";
+  @override
   String visitLocalFunctionInvocation(LocalFunctionInvocation _) =>
       "invoke-local-function";
+  @override
   String visitEqualsNull(EqualsNull _) => "equals-null";
+  @override
   String visitEqualsCall(EqualsCall _) => "equals-call";
+  @override
   String visitSuperMethodInvocation(SuperMethodInvocation _) => "invoke-super";
 
+  @override
   String visitVariableGet(VariableGet _) => "get-var";
+  @override
   String visitVariableSet(VariableSet _) => "set-var";
+  @override
   String visitStaticGet(StaticGet _) => "get-static";
+  @override
   String visitStaticSet(StaticSet _) => "set-static";
+  @override
   String visitStaticTearOff(StaticTearOff _) => "tearoff-static";
+  @override
   String visitConstructorTearOff(ConstructorTearOff _) => "tearoff-constructor";
+  @override
   String visitRedirectingFactoryTearOff(RedirectingFactoryTearOff _) =>
       "tearoff-redirecting-factory";
+  @override
   String visitTypedefTearOff(TypedefTearOff _) => "tearoff-typedef";
+  @override
   String visitStaticInvocation(StaticInvocation expression) {
     return expression.isConst ? "invoke-const-static" : "invoke-static";
   }
 
+  @override
   String visitConstructorInvocation(ConstructorInvocation expression) {
     return expression.isConst
         ? "invoke-const-constructor"
         : "invoke-constructor";
   }
 
+  @override
   String visitFunctionExpression(FunctionExpression _) => "fun";
+  @override
   String visitListConcatenation(ListConcatenation _) => "lists";
+  @override
   String visitSetConcatenation(SetConcatenation _) => "sets";
+  @override
   String visitMapConcatenation(MapConcatenation _) => "maps";
+  @override
   String visitBlockExpression(BlockExpression _) => "let-block";
+  @override
   String visitInstantiation(Instantiation _) => "apply";
+  @override
   String visitNullCheck(NullCheck _) => "not-null";
+  @override
   String visitFileUriExpression(FileUriExpression _) => "with-uri";
+  @override
   String visitCheckLibraryIsLoaded(CheckLibraryIsLoaded _) => "is-loaded";
+  @override
   String visitLoadLibrary(LoadLibrary _) => "load";
+  @override
   String visitConstantExpression(ConstantExpression _) => "const";
+  @override
   String visitInstanceCreation(InstanceCreation _) => "object";
 
   @override
@@ -128,16 +190,20 @@
   }
 }
 
-const TextSerializer<InvalidExpression> invalidExpressionSerializer =
-    const Wrapped<String?, InvalidExpression>(
-        unwrapInvalidExpression, wrapInvalidExpression, const DartString());
+TextSerializer<InvalidExpression> invalidExpressionSerializer =
+    new Wrapped<Tuple2<String?, Expression?>, InvalidExpression>(
+        unwrapInvalidExpression,
+        wrapInvalidExpression,
+        Tuple2Serializer<String?, Expression?>(
+            Optional(DartString()), Optional(expressionSerializer)));
 
-String? unwrapInvalidExpression(InvalidExpression expression) {
-  return expression.message;
+Tuple2<String?, Expression?> unwrapInvalidExpression(
+    InvalidExpression expression) {
+  return Tuple2(expression.message, expression.expression);
 }
 
-InvalidExpression wrapInvalidExpression(String? message) {
-  return new InvalidExpression(message);
+InvalidExpression wrapInvalidExpression(Tuple2<String?, Expression?> tuple) {
+  return new InvalidExpression(tuple.first, tuple.second);
 }
 
 TextSerializer<Not> notSerializer =
@@ -570,6 +636,7 @@
 class InstanceAccessKindTagger implements Tagger<InstanceAccessKind> {
   const InstanceAccessKindTagger();
 
+  @override
   String tag(InstanceAccessKind kind) {
     return instanceAccessKindToName[kind] ??
         (throw StateError("Unknown InstanceAccessKind flag value: ${kind}."));
@@ -661,6 +728,7 @@
 class DynamicAccessKindTagger implements Tagger<DynamicAccessKind> {
   const DynamicAccessKindTagger();
 
+  @override
   String tag(DynamicAccessKind kind) {
     return dynamicAccessKindToName[kind] ??
         (throw StateError("Unknown DynamicAccessKind flag value: ${kind}."));
@@ -700,6 +768,7 @@
 class FunctionAccessKindTagger implements Tagger<FunctionAccessKind> {
   const FunctionAccessKindTagger();
 
+  @override
   String tag(FunctionAccessKind kind) {
     return functionAccessKindToName[kind] ??
         (throw StateError("Unknown FunctionAccessKind flag value: ${kind}."));
@@ -845,6 +914,7 @@
     }
   }
 
+  @override
   CanonicalName readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
@@ -859,6 +929,7 @@
     return name;
   }
 
+  @override
   void writeTo(
       StringBuffer buffer, CanonicalName name, SerializationState? state) {
     StringBuffer sb = new StringBuffer();
@@ -1149,6 +1220,7 @@
 };
 
 class VariableDeclarationFlagTagger implements Tagger<int> {
+  @override
   String tag(int flag) {
     return variableDeclarationFlagToName[flag] ??
         (throw StateError("Unknown VariableDeclaration flag value: ${flag}."));
@@ -1222,17 +1294,28 @@
     implements Tagger<DartType> {
   const DartTypeTagger();
 
+  @override
   String tag(DartType type) => type.accept(this);
 
+  @override
   String visitInvalidType(InvalidType _) => "invalid";
+  @override
   String visitDynamicType(DynamicType _) => "dynamic";
+  @override
   String visitVoidType(VoidType _) => "void";
+  @override
   String visitFunctionType(FunctionType _) => "->";
+  @override
   String visitTypeParameterType(TypeParameterType _) => "par";
+  @override
   String visitInterfaceType(InterfaceType _) => "interface";
+  @override
   String visitNeverType(NeverType _) => "never";
+  @override
   String visitTypedefType(TypedefType _) => "typedef";
+  @override
   String visitFutureOrType(FutureOrType _) => "futureor";
+  @override
   String visitNullType(NullType _) => "null-type";
 
   @override
@@ -1386,37 +1469,58 @@
     implements Tagger<Statement> {
   const StatementTagger();
 
+  @override
   String tag(Statement statement) => statement.accept(this);
 
+  @override
   String visitExpressionStatement(ExpressionStatement _) => "expr";
+  @override
   String visitReturnStatement(ReturnStatement node) {
     return node.expression == null ? "ret-void" : "ret";
   }
 
+  @override
   String visitYieldStatement(YieldStatement _) => "yield";
+  @override
   String visitBlock(Block _) => "block";
+  @override
   String visitVariableDeclaration(VariableDeclaration _) => "local";
+  @override
   String visitIfStatement(IfStatement node) {
     return node.otherwise == null ? "if" : "if-else";
   }
 
+  @override
   String visitEmptyStatement(EmptyStatement node) => "skip";
+  @override
   String visitWhileStatement(WhileStatement node) => "while";
+  @override
   String visitDoStatement(DoStatement node) => "do-while";
+  @override
   String visitForStatement(ForStatement node) => "for";
+  @override
   String visitForInStatement(ForInStatement node) {
     return node.isAsync ? "await-for-in" : "for-in";
   }
 
+  @override
   String visitAssertStatement(AssertStatement node) => "assert";
+  @override
   String visitAssertBlock(AssertBlock node) => "assert-block";
+  @override
   String visitLabeledStatement(LabeledStatement node) => "label";
+  @override
   String visitBreakStatement(BreakStatement node) => "break";
+  @override
   String visitTryFinally(TryFinally node) => "try-finally";
+  @override
   String visitTryCatch(TryCatch node) => "try-catch";
+  @override
   String visitSwitchStatement(SwitchStatement node) => "switch";
+  @override
   String visitContinueSwitchStatement(ContinueSwitchStatement node) =>
       "continue";
+  @override
   String visitFunctionDeclaration(FunctionDeclaration node) => "local-fun";
 
   @override
@@ -1505,6 +1609,7 @@
     extends TextSerializer<Tuple2<List<Statement>, Expression?>> {
   const BlockSerializer();
 
+  @override
   Tuple2<List<Statement>, Expression?> readFrom(
       Iterator<Object?> stream, DeserializationState? state) {
     if (state == null) {
@@ -1531,6 +1636,7 @@
     return new Tuple2(statements, expression);
   }
 
+  @override
   void writeTo(StringBuffer buffer, Tuple2<List<Statement>, Expression?> tuple,
       SerializationState? state) {
     if (state == null) {
@@ -1723,6 +1829,7 @@
                 (SwitchCase z) => Tuple2(z, z.body))));
 
 class SwitchCaseTagger implements Tagger<SwitchCase> {
+  @override
   String tag(SwitchCase node) {
     return node.isDefault ? "default" : "case";
   }
@@ -1773,6 +1880,7 @@
 class AsyncMarkerTagger implements Tagger<AsyncMarker> {
   const AsyncMarkerTagger();
 
+  @override
   String tag(AsyncMarker node) {
     return asyncMarkerToName[node] ?? (throw new UnsupportedError("${node}"));
   }
@@ -1787,8 +1895,10 @@
     functionNodeWithInitializersSerializer = Wrapped<
             Tuple2<
                 AsyncMarker,
-                Tuple2< /**/
-                    Tuple2< /**/
+                Tuple2<
+                    /**/
+                    Tuple2<
+                        /**/
                         List<TypeParameter>,
                         Tuple3<
                             List<VariableDeclaration>,
@@ -1852,6 +1962,7 @@
 class ProcedureFlagTagger implements Tagger<int> {
   const ProcedureFlagTagger();
 
+  @override
   String tag(int flag) {
     return procedureFlagToName[flag] ??
         (throw StateError("Unknown Procedure flag value: ${flag}."));
@@ -1879,6 +1990,7 @@
 class FieldFlagTagger implements Tagger<int> {
   const FieldFlagTagger();
 
+  @override
   String tag(int flag) {
     return fieldFlagToName[flag] ??
         (throw StateError("Unknown Field flag value: ${flag}."));
@@ -1900,6 +2012,7 @@
 class ConstructorFlagTagger implements Tagger<int> {
   const ConstructorFlagTagger();
 
+  @override
   String tag(int flag) {
     return constructorFlagToName[flag] ??
         (throw StateError("Unknown Constructor flag value: ${flag}."));
@@ -1921,6 +2034,7 @@
 class RedirectingFactoryFlagTagger implements Tagger<int> {
   const RedirectingFactoryFlagTagger();
 
+  @override
   String tag(int flag) {
     return redirectingFactoryFlagToName[flag] ??
         (throw StateError("Unknown RedirectingFactory flag value: ${flag}."));
@@ -1939,6 +2053,7 @@
 class MemberTagger implements Tagger<Member> {
   const MemberTagger();
 
+  @override
   String tag(Member node) {
     if (node is Field) {
       return node.hasSetter ? "mutable-field" : "immutable-field";
@@ -2021,13 +2136,14 @@
         Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
             functionNodeSerializer, UriSerializer()));
 
-TextSerializer<Procedure> factorySerializer = Wrapped<
-        Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
-    (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
-    (u) => Procedure(u.first, ProcedureKind.Factory, u.third, fileUri: u.fourth)
-      ..flags = u.second,
-    Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
-        functionNodeSerializer, UriSerializer()));
+TextSerializer<Procedure> factorySerializer =
+    Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+        (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
+        (u) => Procedure(u.first, ProcedureKind.Factory, u.third,
+            fileUri: u.fourth)
+          ..flags = u.second,
+        Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+            functionNodeSerializer, UriSerializer()));
 
 TextSerializer<Constructor> constructorSerializer = Wrapped<
         Tuple4<Name, int, Tuple2<FunctionNode, List<Initializer>?>, Uri>,
@@ -2072,6 +2188,7 @@
 class LibraryTagger implements Tagger<Library> {
   const LibraryTagger();
 
+  @override
   String tag(Library node) {
     return node.isNonNullableByDefault ? "null-safe" : "legacy";
   }
@@ -2087,6 +2204,7 @@
 class LibraryFlagTagger implements Tagger<int> {
   const LibraryFlagTagger();
 
+  @override
   String tag(int flag) {
     return libraryFlagToName[flag] ??
         (throw StateError("Unknown Library flag value: ${flag}."));
@@ -2133,6 +2251,7 @@
         ListSerializer(librarySerializer));
 
 class ShowHideTagger implements Tagger<Combinator> {
+  @override
   String tag(Combinator node) => node.isShow ? "show" : "hide";
 }
 
@@ -2167,30 +2286,48 @@
     implements Tagger<Constant> {
   const ConstantTagger();
 
+  @override
   String tag(Constant node) => node.accept(this);
 
+  @override
   String visitBoolConstant(BoolConstant node) => "const-bool";
+  @override
   String visitDoubleConstant(DoubleConstant node) => "const-double";
+  @override
   String visitInstanceConstant(InstanceConstant node) => "const-object";
+  @override
   String visitIntConstant(IntConstant node) => "const-int";
+  @override
   String visitListConstant(ListConstant node) => "const-list";
+  @override
   String visitMapConstant(MapConstant node) => "const-map";
+  @override
   String visitNullConstant(NullConstant node) => "const-null";
+  @override
   String visitInstantiationConstant(InstantiationConstant node) =>
       "const-apply";
+  @override
   String visitSetConstant(SetConstant node) => "const-set";
+  @override
   String visitStringConstant(StringConstant node) => "const-string";
+  @override
   String visitSymbolConstant(SymbolConstant node) => "const-symbol";
+  @override
   String visitStaticTearOffConstant(StaticTearOffConstant node) =>
       "const-tearoff-static";
+  @override
   String visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
       "const-tearoff-constructor";
+  @override
   String visitRedirectingFactoryTearOffConstant(
           RedirectingFactoryTearOffConstant node) =>
       "const-tearoff-redirecting-factory";
+  @override
   String visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
       "const-tearoff-typedef";
+  @override
   String visitTypeLiteralConstant(TypeLiteralConstant node) => "const-type";
+  @override
   String visitUnevaluatedConstant(UnevaluatedConstant node) => "const-expr";
 
   @override
@@ -2331,6 +2468,7 @@
 class InitializerTagger implements Tagger<Initializer> {
   const InitializerTagger();
 
+  @override
   String tag(Initializer node) {
     if (node is AssertInitializer) {
       return "assert";
@@ -2402,6 +2540,7 @@
 class ClassFlagTagger implements Tagger<int> {
   const ClassFlagTagger();
 
+  @override
   String tag(int flag) {
     return classFlagToName[flag] ??
         (throw StateError("Unknown Class flag value: ${flag}."));
@@ -2478,6 +2617,7 @@
 class ExtensionMemberDescriptorFlagTagger implements Tagger<int> {
   const ExtensionMemberDescriptorFlagTagger();
 
+  @override
   String tag(int flag) {
     return extensionMemberDescriptorFlagToName[flag] ??
         (throw StateError(
@@ -2506,6 +2646,7 @@
 class ExtensionMemberKindTagger implements Tagger<ExtensionMemberKind> {
   const ExtensionMemberKindTagger();
 
+  @override
   String tag(ExtensionMemberKind kind) {
     return extensionMemberKindToName[kind] ??
         (throw StateError("Unknown ExtensionMemberKind flag value: ${kind}."));
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
index 43fca30..621d51e 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/kernel/lib/transformations/async.dart
@@ -157,13 +157,21 @@
 
   // Simple literals.  These are pure expressions so they can be evaluated after
   // an await to their right.
+  @override
   TreeNode visitSymbolLiteral(SymbolLiteral expr) => expr;
+  @override
   TreeNode visitTypeLiteral(TypeLiteral expr) => expr;
+  @override
   TreeNode visitThisExpression(ThisExpression expr) => expr;
+  @override
   TreeNode visitStringLiteral(StringLiteral expr) => expr;
+  @override
   TreeNode visitIntLiteral(IntLiteral expr) => expr;
+  @override
   TreeNode visitDoubleLiteral(DoubleLiteral expr) => expr;
+  @override
   TreeNode visitBoolLiteral(BoolLiteral expr) => expr;
+  @override
   TreeNode visitNullLiteral(NullLiteral expr) => expr;
 
   // Nullary expressions with effects.
@@ -175,14 +183,18 @@
     return expr;
   }
 
-  TreeNode visitInvalidExpression(InvalidExpression expr) => nullary(expr);
+  @override
   TreeNode visitSuperPropertyGet(SuperPropertyGet expr) => nullary(expr);
+  @override
   TreeNode visitStaticGet(StaticGet expr) => nullary(expr);
+  @override
   TreeNode visitStaticTearOff(StaticTearOff expr) => nullary(expr);
+  @override
   TreeNode visitRethrow(Rethrow expr) => nullary(expr);
 
   // Getting a final or const variable is not an effect so it can be evaluated
   // after an await to its right.
+  @override
   TreeNode visitVariableGet(VariableGet expr) {
     Expression result = expr;
     if (seenAwait && !expr.variable.isFinal && !expr.variable.isConst) {
@@ -232,6 +244,8 @@
   }
 
   @override
+  TreeNode visitInvalidExpression(InvalidExpression expr) => unary(expr);
+  @override
   TreeNode visitVariableSet(VariableSet expr) => unary(expr);
   @override
   TreeNode visitInstanceGet(InstanceGet expr) => unary(expr);
@@ -270,6 +284,7 @@
     });
   }
 
+  @override
   TreeNode visitArguments(Arguments args) {
     for (var named in args.named.reversed) {
       named.value = transform(named.value)..parent = named;
@@ -325,24 +340,28 @@
     });
   }
 
+  @override
   TreeNode visitSuperMethodInvocation(SuperMethodInvocation expr) {
     return transformTreeNode(expr, () {
       visitArguments(expr.arguments);
     });
   }
 
+  @override
   TreeNode visitStaticInvocation(StaticInvocation expr) {
     return transformTreeNode(expr, () {
       visitArguments(expr.arguments);
     });
   }
 
+  @override
   TreeNode visitConstructorInvocation(ConstructorInvocation expr) {
     return transformTreeNode(expr, () {
       visitArguments(expr.arguments);
     });
   }
 
+  @override
   TreeNode visitStringConcatenation(StringConcatenation expr) {
     return transformTreeNode(expr, () {
       var expressions = expr.expressions;
@@ -352,6 +371,7 @@
     });
   }
 
+  @override
   TreeNode visitListLiteral(ListLiteral expr) {
     return transformTreeNode(expr, () {
       var expressions = expr.expressions;
@@ -361,6 +381,7 @@
     });
   }
 
+  @override
   TreeNode visitMapLiteral(MapLiteral expr) {
     return transformTreeNode(expr, () {
       for (var entry in expr.entries.reversed) {
@@ -371,6 +392,7 @@
   }
 
   // Control flow.
+  @override
   TreeNode visitLogicalExpression(LogicalExpression expr) {
     var shouldName = seenAwait;
 
@@ -436,6 +458,7 @@
     return unsafeCastVariableGet(result, type);
   }
 
+  @override
   TreeNode visitConditionalExpression(ConditionalExpression expr) {
     // Then and otherwise are delimited because they are conditionally
     // evaluated.
@@ -501,6 +524,7 @@
   }
 
   // Others.
+  @override
   TreeNode visitAwaitExpression(AwaitExpression expr) {
     final R = continuationRewriter;
     var shouldName = seenAwait;
@@ -557,11 +581,13 @@
     return result;
   }
 
+  @override
   TreeNode visitFunctionExpression(FunctionExpression expr) {
     expr.transformChildren(this);
     return expr;
   }
 
+  @override
   TreeNode visitLet(Let expr) {
     var body = transform(expr.body);
 
@@ -603,12 +629,14 @@
     }
   }
 
-  visitFunctionNode(FunctionNode node) {
+  @override
+  TreeNode visitFunctionNode(FunctionNode node) {
     var nestedRewriter = new RecursiveContinuationRewriter(
         continuationRewriter.helper, _staticTypeContext);
     return nestedRewriter.transform(node);
   }
 
+  @override
   TreeNode visitBlockExpression(BlockExpression expr) {
     return transformTreeNode(expr, () {
       expr.value = transform(expr.value)..parent = expr;
@@ -647,6 +675,7 @@
     return null;
   }
 
+  @override
   TreeNode defaultStatement(Statement stmt) {
     throw new UnsupportedError(
         "Use _rewriteStatement to transform statement: ${stmt}");
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index fd8476f..e9d5c3c 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -99,14 +99,16 @@
     return transform(node);
   }
 
-  visitField(Field node, TreeNode? removalSentinel) {
+  @override
+  TreeNode visitField(Field node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result = super.visitField(node, removalSentinel);
     staticTypeContext.leaveMember(node);
     return result;
   }
 
-  visitConstructor(Constructor node, TreeNode? removalSentinel) {
+  @override
+  TreeNode visitConstructor(Constructor node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result = super.visitConstructor(node, removalSentinel);
     staticTypeContext.leaveMember(node);
@@ -114,7 +116,7 @@
   }
 
   @override
-  visitProcedure(Procedure node, TreeNode? removalSentinel) {
+  TreeNode visitProcedure(Procedure node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result =
         node.isAbstract ? node : super.visitProcedure(node, removalSentinel);
@@ -123,7 +125,7 @@
   }
 
   @override
-  visitLibrary(Library node, TreeNode? removalSentinel) {
+  TreeNode visitLibrary(Library node, TreeNode? removalSentinel) {
     staticTypeContext.enterLibrary(node);
     Library result = super.visitLibrary(node, removalSentinel) as Library;
     staticTypeContext.leaveLibrary(node);
@@ -131,7 +133,7 @@
   }
 
   @override
-  visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
+  TreeNode visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
     switch (node.asyncMarker) {
       case AsyncMarker.Sync:
       case AsyncMarker.SyncYielding:
@@ -283,6 +285,7 @@
     return new YieldStatement(value, isNative: true);
   }
 
+  @override
   TreeNode visitTryCatch(TryCatch node, TreeNode? removalSentinel) {
     // ignore: unnecessary_null_comparison
     if (node.body != null) {
@@ -298,6 +301,7 @@
     return node;
   }
 
+  @override
   TreeNode visitTryFinally(TryFinally node, TreeNode? removalSentinel) {
     // ignore: unnecessary_null_comparison
     if (node.body != null) {
@@ -492,7 +496,8 @@
     ]);
   }
 
-  visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
+  @override
+  TreeNode visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
     Expression transformedExpression = transform(node.expression);
 
     var statements = <Statement>[];
@@ -517,6 +522,7 @@
     return new Block(statements);
   }
 
+  @override
   TreeNode visitReturnStatement(
       ReturnStatement node, TreeNode? removalSentinel) {
     // sync* functions cannot return a value.
@@ -655,6 +661,7 @@
 
   List<Statement> statements = <Statement>[];
 
+  @override
   TreeNode visitExpressionStatement(
       ExpressionStatement stmt, TreeNode? removalSentinel) {
     stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
@@ -663,6 +670,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitBlock(Block stmt, TreeNode? removalSentinel) {
     var saved = statements;
     statements = <Statement>[];
@@ -674,11 +682,13 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitEmptyStatement(EmptyStatement stmt, TreeNode? removalSentinel) {
     statements.add(stmt);
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitAssertBlock(AssertBlock stmt, TreeNode? removalSentinel) {
     var saved = statements;
     statements = <Statement>[];
@@ -690,6 +700,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitAssertStatement(
       AssertStatement stmt, TreeNode? removalSentinel) {
     var condEffects = <Statement>[];
@@ -760,6 +771,7 @@
     return result;
   }
 
+  @override
   TreeNode visitLabeledStatement(
       LabeledStatement stmt, TreeNode? removalSentinel) {
     stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -767,11 +779,13 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitBreakStatement(BreakStatement stmt, TreeNode? removalSentinel) {
     statements.add(stmt);
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitWhileStatement(WhileStatement stmt, TreeNode? removalSentinel) {
     Statement body = visitDelimited(stmt.body);
     List<Statement> effects = <Statement>[];
@@ -801,6 +815,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitDoStatement(DoStatement stmt, TreeNode? removalSentinel) {
     Statement body = visitDelimited(stmt.body);
     List<Statement> effects = <Statement>[];
@@ -820,6 +835,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitForStatement(ForStatement stmt, TreeNode? removalSentinel) {
     // Because of for-loop scoping and variable capture, it is tricky to deal
     // with await in the loop's variable initializers or update expressions.
@@ -832,7 +848,7 @@
       if (decl.initializer != null) {
         decl.initializer = expressionRewriter!
             .rewrite(decl.initializer!, statements)
-              ..parent = decl;
+          ..parent = decl;
       }
       isSimple = isSimple && statements.isEmpty;
       return statements;
@@ -963,6 +979,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
     if (stmt.isAsync) {
       // Transform
@@ -1088,6 +1105,7 @@
     }
   }
 
+  @override
   TreeNode visitSwitchStatement(
       SwitchStatement stmt, TreeNode? removalSentinel) {
     stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
@@ -1101,12 +1119,14 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitContinueSwitchStatement(
       ContinueSwitchStatement stmt, TreeNode? removalSentinel) {
     statements.add(stmt);
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitIfStatement(IfStatement stmt, TreeNode? removalSentinel) {
     stmt.condition = expressionRewriter!.rewrite(stmt.condition, statements)
       ..parent = stmt;
@@ -1118,6 +1138,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitTryCatch(TryCatch stmt, TreeNode? removalSentinel) {
     ++currentTryDepth;
     stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -1132,6 +1153,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitTryFinally(TryFinally stmt, TreeNode? removalSentinel) {
     ++currentTryDepth;
     stmt.body = visitDelimited(stmt.body)..parent = stmt;
@@ -1143,6 +1165,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
     stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
       ..parent = stmt;
@@ -1150,17 +1173,19 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitVariableDeclaration(
       VariableDeclaration stmt, TreeNode? removalSentinel) {
     if (stmt.initializer != null) {
       stmt.initializer = expressionRewriter!
           .rewrite(stmt.initializer!, statements)
-            ..parent = stmt;
+        ..parent = stmt;
     }
     statements.add(stmt);
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitFunctionDeclaration(
       FunctionDeclaration stmt, TreeNode? removalSentinel) {
     stmt.function = transform(stmt.function)..parent = stmt;
@@ -1168,7 +1193,8 @@
     return removalSentinel ?? EmptyStatement();
   }
 
-  defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
+  @override
+  TreeNode defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
       throw 'unreachable $node';
 }
 
@@ -1231,6 +1257,7 @@
     return enclosingFunction;
   }
 
+  @override
   Statement buildWrappedBody() {
     ++currentTryDepth;
     Statement body = super.buildWrappedBody();
@@ -1249,6 +1276,7 @@
     return tryFinally;
   }
 
+  @override
   Statement buildCatchBody(VariableDeclaration exceptionVariable,
       VariableDeclaration stackTraceVariable) {
     return new ExpressionStatement(new InstanceInvocation(
@@ -1264,6 +1292,7 @@
             as FunctionType));
   }
 
+  @override
   Statement buildReturn(Statement body) {
     // Async* functions cannot return a value.  The returns from the function
     // have been translated into breaks from the labeled body.
@@ -1273,6 +1302,7 @@
     ]);
   }
 
+  @override
   TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
     Expression expr = expressionRewriter!.rewrite(stmt.expression, statements);
 
@@ -1298,6 +1328,7 @@
     return removalSentinel ?? EmptyStatement();
   }
 
+  @override
   TreeNode visitReturnStatement(
       ReturnStatement node, TreeNode? removalSentinel) {
     // Async* functions cannot return a value.
@@ -1380,6 +1411,7 @@
   }
 
   // :async_op's try-catch catch body:
+  @override
   Statement buildCatchBody(exceptionVariable, stackTraceVariable) {
     // _completeOnAsyncError(_future, e, st, :is_sync)
     return ExpressionStatement(StaticInvocation(
@@ -1393,6 +1425,7 @@
   }
 
   // :async_op's try-catch try body:
+  @override
   Statement buildReturn(Statement body) {
     // Returns from the body have all been translated into assignments to the
     // return value variable followed by a break from the labeled body.
@@ -1413,7 +1446,9 @@
     ]);
   }
 
-  visitReturnStatement(ReturnStatement node, TreeNode? removalSentinel) {
+  @override
+  TreeNode visitReturnStatement(
+      ReturnStatement node, TreeNode? removalSentinel) {
     var expr = node.expression == null
         ? new NullLiteral()
         : expressionRewriter!.rewrite(node.expression!, statements);
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index c9b5c39..d293799 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -64,7 +64,7 @@
         hierarchy.applyMemberChanges(transformedClasses, findDescendants: true);
   }
 
-  transformClass(
+  void transformClass(
       List<Library> librariesToBeTransformed,
       Set<Class> processedClasses,
       Set<Class> transformedClasses,
diff --git a/pkg/kernel/lib/transformations/scanner.dart b/pkg/kernel/lib/transformations/scanner.dart
index 18c7814..ec75cbd 100644
--- a/pkg/kernel/lib/transformations/scanner.dart
+++ b/pkg/kernel/lib/transformations/scanner.dart
@@ -18,18 +18,22 @@
   Map<X, ScanResult<Y, TreeNode?>?> targets = new Map();
   Map<X, ScanError>? errors;
 
+  @override
   String toString() => 'ScanResult<$X,$Y>';
 }
 
 class ScanError {}
 
 abstract class ClassScanner<Y extends TreeNode?> implements Scanner<Class, Y> {
+  @override
   final Scanner<Y, TreeNode?>? next;
 
   ClassScanner(this.next);
 
+  @override
   bool predicate(Class node);
 
+  @override
   ScanResult<Class, Y> scan(TreeNode node) {
     ScanResult<Class, Y> result = new ScanResult<Class, Y>();
 
@@ -64,12 +68,15 @@
 }
 
 abstract class FieldScanner<Y extends TreeNode> implements Scanner<Field, Y> {
+  @override
   final Scanner<Y, TreeNode>? next;
 
   FieldScanner(this.next);
 
+  @override
   bool predicate(Field node);
 
+  @override
   ScanResult<Field, Y> scan(TreeNode node) {
     ScanResult<Field, Y> result = new ScanResult<Field, Y>();
 
@@ -115,12 +122,15 @@
 }
 
 abstract class MemberScanner<Y extends TreeNode> implements Scanner<Member, Y> {
+  @override
   final Scanner<Y, TreeNode?>? next;
 
   MemberScanner(this.next);
 
+  @override
   bool predicate(Member node);
 
+  @override
   ScanResult<Member, Y> scan(TreeNode node) {
     ScanResult<Member, Y> result = new ScanResult<Member, Y>();
 
@@ -167,12 +177,15 @@
 
 abstract class ProcedureScanner<Y extends TreeNode?>
     implements Scanner<Procedure, Y> {
+  @override
   final Scanner<Y, TreeNode>? next;
 
   ProcedureScanner(this.next);
 
+  @override
   bool predicate(Procedure node);
 
+  @override
   ScanResult<Procedure, Y> scan(TreeNode node) {
     ScanResult<Procedure, Y> result = new ScanResult<Procedure, Y>();
 
@@ -219,13 +232,16 @@
 
 abstract class ExpressionScanner<Y extends TreeNode>
     extends RecursiveResultVisitor<void> implements Scanner<Expression, Y> {
+  @override
   final Scanner<Y, TreeNode>? next;
   ScanResult<Expression, Y>? _result;
 
   ExpressionScanner(this.next);
 
+  @override
   bool predicate(Expression node);
 
+  @override
   ScanResult<Expression, Y> scan(TreeNode node) {
     ScanResult<Expression, Y> result =
         _result = new ScanResult<Expression, Y>();
@@ -245,13 +261,16 @@
 abstract class MethodInvocationScanner<Y extends TreeNode?>
     extends RecursiveVisitor
     implements Scanner<InstanceInvocationExpression, Y> {
+  @override
   final Scanner<Y, TreeNode>? next;
   ScanResult<InstanceInvocationExpression, Y>? _result;
 
   MethodInvocationScanner(this.next);
 
+  @override
   bool predicate(InstanceInvocationExpression node);
 
+  @override
   ScanResult<InstanceInvocationExpression, Y> scan(TreeNode node) {
     ScanResult<InstanceInvocationExpression, Y> result =
         _result = new ScanResult<InstanceInvocationExpression, Y>();
@@ -260,6 +279,7 @@
     return result;
   }
 
+  @override
   void visitInstanceInvocation(InstanceInvocation node) {
     if (predicate(node)) {
       _result!.targets[node] = next?.scan(node);
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index 61481e5..cbb27dc 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -15,12 +15,14 @@
 class ValueClassScanner extends ClassScanner<Null> {
   ValueClassScanner() : super(null);
 
+  @override
   bool predicate(Class node) => isValueClass(node);
 }
 
 class JenkinsClassScanner extends ClassScanner<Procedure> {
   JenkinsClassScanner(Scanner<Procedure, TreeNode?> next) : super(next);
 
+  @override
   bool predicate(Class node) {
     return node.name == "JenkinsSmiHash";
   }
@@ -29,6 +31,7 @@
 class HashCombineMethodsScanner extends ProcedureScanner<Null> {
   HashCombineMethodsScanner() : super(null);
 
+  @override
   bool predicate(Procedure node) {
     return node.name.text == "combine" || node.name.text == "finish";
   }
@@ -38,6 +41,7 @@
   AllMemberScanner(Scanner<InstanceInvocationExpression, TreeNode?> next)
       : super(next);
 
+  @override
   bool predicate(Member member) => true;
 }
 
@@ -50,6 +54,7 @@
   // @valueClass V {}
   // V v;
   // (v as dynamic).copyWith() as V
+  @override
   bool predicate(InstanceInvocationExpression node) {
     return node.name.text == "copyWith" &&
         _isValueClassAsConstruct(node.receiver);
@@ -346,8 +351,8 @@
       .map<VariableDeclaration>(
           (f) => VariableDeclaration(f.name, type: f.type))
       .toList()
-        ..addAll(cls.fields.map<VariableDeclaration>(
-            (f) => VariableDeclaration(f.name.text, type: f.type)));
+    ..addAll(cls.fields.map<VariableDeclaration>(
+        (f) => VariableDeclaration(f.name.text, type: f.type)));
 }
 
 void removeValueClassAnnotation(Class cls) {
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index e598523..f836d1e 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -109,7 +109,9 @@
 /// mapping to be used for replacing other types to use the new type parameters.
 FreshTypeParameters getFreshTypeParameters(List<TypeParameter> typeParameters) {
   List<TypeParameter> freshParameters = new List<TypeParameter>.generate(
-      typeParameters.length, (i) => new TypeParameter(typeParameters[i].name),
+      typeParameters.length,
+      (i) => new TypeParameter(typeParameters[i].name)
+        ..flags = typeParameters[i].flags,
       growable: true);
   List<DartType> freshTypeArguments =
       new List<DartType>.generate(typeParameters.length, (int i) {
@@ -138,8 +140,10 @@
 class FreshTypeParameters {
   /// The newly created type parameters.
   final List<TypeParameter> freshTypeParameters;
+
   /// List of [TypeParameterType]s for [TypeParameter].
   final List<DartType> freshTypeArguments;
+
   /// Substitution from the original type parameters to [freshTypeArguments].
   final Substitution substitution;
 
@@ -294,6 +298,7 @@
 
   const _NullSubstitution();
 
+  @override
   DartType getSubstitute(TypeParameter parameter, bool upperBound) {
     return new TypeParameterType.forAlphaRenaming(parameter, parameter);
   }
@@ -314,6 +319,7 @@
 
   _MapSubstitution(this.upper, this.lower);
 
+  @override
   DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
     return upperBound ? upper[parameter] : lower[parameter];
   }
@@ -331,10 +337,12 @@
     }
   }
 
+  @override
   DartType? lookup(TypeParameter parameter, bool upperBound) {
     return substitution.getSubstitute(parameter, upperBound);
   }
 
+  @override
   TypeParameter freshTypeParameter(TypeParameter node) {
     throw 'Create a fresh environment first';
   }
@@ -345,6 +353,7 @@
 
   _ClassBottomSubstitution(this.class_);
 
+  @override
   DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
     if (parameter.parent == class_) {
       return upperBound ? const NeverType.nonNullable() : const DynamicType();
@@ -358,6 +367,7 @@
 
   _CombinedSubstitution(this.first, this.second);
 
+  @override
   DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
     return first.getSubstitute(parameter, upperBound) ??
         second.getSubstitute(parameter, upperBound);
@@ -372,6 +382,7 @@
 
   _FilteredSubstitution(this.base, this.filterFn);
 
+  @override
   DartType? getSubstitute(TypeParameter parameter, bool upperBound) {
     return filterFn(parameter)
         ? base.getSubstitute(parameter, upperBound)
@@ -384,12 +395,14 @@
 
   _InnerTypeSubstitutor(_TypeSubstitutor? outer) : super(outer);
 
+  @override
   DartType? lookup(TypeParameter parameter, bool upperBound) {
     return substitution[parameter];
   }
 
+  @override
   TypeParameter freshTypeParameter(TypeParameter node) {
-    TypeParameter fresh = new TypeParameter(node.name);
+    TypeParameter fresh = new TypeParameter(node.name)..flags = node.flags;
     TypeParameterType typeParameterType = substitution[node] =
         new TypeParameterType.forAlphaRenaming(node, fresh);
     fresh.bound = visit(node.bound);
@@ -574,13 +587,20 @@
 
   DartType visit(DartType node) => node.accept(this);
 
+  @override
   DartType defaultDartType(DartType node) => node;
+  @override
   DartType visitInvalidType(InvalidType node) => node;
+  @override
   DartType visitDynamicType(DynamicType node) => node;
+  @override
   DartType visitVoidType(VoidType node) => node;
+  @override
   DartType visitNeverType(NeverType node) => node;
+  @override
   DartType visitNullType(NullType node) => node;
 
+  @override
   DartType visitInterfaceType(InterfaceType node) {
     if (node.typeArguments.isEmpty) return node;
     int before = useCounter;
@@ -589,6 +609,7 @@
     return new InterfaceType(node.classNode, node.nullability, typeArguments);
   }
 
+  @override
   DartType visitFutureOrType(FutureOrType node) {
     int before = useCounter;
     DartType typeArgument = node.typeArgument.accept(this);
@@ -596,6 +617,7 @@
     return new FutureOrType(typeArgument, node.declaredNullability);
   }
 
+  @override
   DartType visitTypedefType(TypedefType node) {
     if (node.typeArguments.isEmpty) return node;
     int before = useCounter;
@@ -611,6 +633,7 @@
 
   TypeParameter freshTypeParameter(TypeParameter node);
 
+  @override
   DartType visitFunctionType(FunctionType node) {
     // This is a bit tricky because we have to generate fresh type parameters
     // in order to change the bounds.  At the same time, if the function type
@@ -678,6 +701,7 @@
     return null;
   }
 
+  @override
   DartType visitTypeParameterType(TypeParameterType node) {
     DartType? replacement = getSubstitute(node.parameter);
     if (replacement is InvalidType) return replacement;
@@ -745,6 +769,7 @@
     return visit(node.type);
   }
 
+  @override
   bool defaultDartType(DartType node) {
     if (unhandledTypeHandler == null) {
       throw new UnsupportedError("Unsupported type '${node.runtimeType}'.");
@@ -753,28 +778,38 @@
     }
   }
 
+  @override
   bool visitNeverType(NeverType node) => false;
+  @override
   bool visitNullType(NullType node) => false;
+  @override
   bool visitInvalidType(InvalidType node) => false;
+  @override
   bool visitDynamicType(DynamicType node) => false;
+  @override
   bool visitVoidType(VoidType node) => false;
 
+  @override
   bool visitInterfaceType(InterfaceType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitExtensionType(ExtensionType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFutureOrType(FutureOrType node) {
     return visit(node.typeArgument);
   }
 
+  @override
   bool visitTypedefType(TypedefType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFunctionType(FunctionType node) {
     return node.typeParameters.any(handleTypeParameter) ||
         node.positionalParameters.any(visit) ||
@@ -782,6 +817,7 @@
         visit(node.returnType);
   }
 
+  @override
   bool visitTypeParameterType(TypeParameterType node) {
     return variables.contains(node.parameter);
   }
@@ -802,6 +838,7 @@
 
   bool visit(DartType node) => node.accept(this);
 
+  @override
   bool defaultDartType(DartType node) {
     throw new UnsupportedError("Unsupported type $node (${node.runtimeType}.");
   }
@@ -810,28 +847,38 @@
     return visit(node.type);
   }
 
+  @override
   bool visitNeverType(NeverType node) => false;
+  @override
   bool visitNullType(NullType node) => false;
+  @override
   bool visitInvalidType(InvalidType node) => false;
+  @override
   bool visitDynamicType(DynamicType node) => false;
+  @override
   bool visitVoidType(VoidType node) => false;
 
+  @override
   bool visitInterfaceType(InterfaceType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitExtensionType(ExtensionType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFutureOrType(FutureOrType node) {
     return visit(node.typeArgument);
   }
 
+  @override
   bool visitTypedefType(TypedefType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFunctionType(FunctionType node) {
     variables.addAll(node.typeParameters);
     bool result = node.typeParameters.any(handleTypeParameter) ||
@@ -842,6 +889,7 @@
     return result;
   }
 
+  @override
   bool visitTypeParameterType(TypeParameterType node) {
     return node.parameter.parent == null && !variables.contains(node.parameter);
   }
@@ -862,6 +910,7 @@
 
   bool visit(DartType node) => node.accept(this);
 
+  @override
   bool defaultDartType(DartType node) {
     throw new UnsupportedError("Unsupported type $node (${node.runtimeType}.");
   }
@@ -870,28 +919,38 @@
     return visit(node.type);
   }
 
+  @override
   bool visitNeverType(NeverType node) => false;
+  @override
   bool visitNullType(NullType node) => false;
+  @override
   bool visitInvalidType(InvalidType node) => false;
+  @override
   bool visitDynamicType(DynamicType node) => false;
+  @override
   bool visitVoidType(VoidType node) => false;
 
+  @override
   bool visitInterfaceType(InterfaceType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitExtensionType(ExtensionType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFutureOrType(FutureOrType node) {
     return visit(node.typeArgument);
   }
 
+  @override
   bool visitTypedefType(TypedefType node) {
     return node.typeArguments.any(visit);
   }
 
+  @override
   bool visitFunctionType(FunctionType node) {
     variables.addAll(node.typeParameters);
     bool result = node.typeParameters.any(handleTypeParameter) ||
@@ -902,6 +961,7 @@
     return result;
   }
 
+  @override
   bool visitTypeParameterType(TypeParameterType node) {
     return !variables.contains(node.parameter);
   }
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 3d6cf83..9b8b502 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -118,9 +118,9 @@
 class TypeCheckingVisitor
     implements
         ExpressionVisitor<DartType>,
-        StatementVisitor<Null>,
-        MemberVisitor<Null>,
-        InitializerVisitor<Null> {
+        StatementVisitor<void>,
+        MemberVisitor<void>,
+        InitializerVisitor<void> {
   final TypeChecker checker;
   final TypeEnvironment environment;
   final ClassHierarchy hierarchy;
@@ -170,45 +170,54 @@
     node.accept(this);
   }
 
-  defaultMember(Member node) => throw 'Unused';
+  @override
+  TreeNode defaultMember(Member node) => throw 'Unused';
 
+  @override
   DartType defaultBasicLiteral(BasicLiteral node) {
     return defaultExpression(node);
   }
 
+  @override
   DartType defaultExpression(Expression node) {
     throw 'Unexpected expression ${node.runtimeType}';
   }
 
-  defaultStatement(Statement node) {
+  @override
+  TreeNode defaultStatement(Statement node) {
     throw 'Unexpected statement ${node.runtimeType}';
   }
 
-  defaultInitializer(Initializer node) {
+  @override
+  TreeNode defaultInitializer(Initializer node) {
     throw 'Unexpected initializer ${node.runtimeType}';
   }
 
-  visitField(Field node) {
+  @override
+  void visitField(Field node) {
     if (node.initializer != null) {
       node.initializer =
           checkAndDowncastExpression(node.initializer!, node.type);
     }
   }
 
-  visitConstructor(Constructor node) {
+  @override
+  void visitConstructor(Constructor node) {
     currentReturnType = null;
     currentYieldType = null;
     node.initializers.forEach(visitInitializer);
     handleFunctionNode(node.function);
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     currentReturnType = _getInternalReturnType(node.function);
     currentYieldType = _getYieldType(node.function);
     handleFunctionNode(node.function);
   }
 
-  visitRedirectingFactory(RedirectingFactory node) {
+  @override
+  void visitRedirectingFactory(RedirectingFactory node) {
     currentReturnType = null;
     currentYieldType = null;
   }
@@ -253,7 +262,7 @@
     while (type is TypeParameterType) {
       type = type.bound;
     }
-    if (type is NeverType || type is NullType) {
+    if (type is NeverType || type is NullType || type is InvalidType) {
       // The bottom type is a subtype of all types, so it should be allowed.
       return Substitution.bottomForClass(superclass);
     }
@@ -478,7 +487,8 @@
 
   @override
   DartType visitInvalidExpression(InvalidExpression node) {
-    return const DynamicType();
+    // Don't type check `node.expression`.
+    return const InvalidType();
   }
 
   @override
@@ -505,6 +515,9 @@
   @override
   DartType visitInstantiation(Instantiation node) {
     DartType type = visitExpression(node.expression);
+    if (type is InvalidType || type is NeverType) {
+      return type;
+    }
     if (type is! FunctionType) {
       fail(node, 'Not a function type: $type');
       return NeverType.fromNullability(currentLibrary!.nonNullable);
@@ -532,6 +545,9 @@
   @override
   DartType visitTypedefTearOff(TypedefTearOff node) {
     DartType type = visitExpression(node.expression);
+    if (type is InvalidType || type is NeverType) {
+      return type;
+    }
     if (type is! FunctionType) {
       fail(node, 'Not a function type: $type');
       return NeverType.fromNullability(currentLibrary!.nonNullable);
@@ -820,12 +836,12 @@
   }
 
   @override
-  visitConstantExpression(ConstantExpression node) {
+  DartType visitConstantExpression(ConstantExpression node) {
     return node.type;
   }
 
   @override
-  visitAssertStatement(AssertStatement node) {
+  void visitAssertStatement(AssertStatement node) {
     visitExpression(node.condition);
     if (node.message != null) {
       visitExpression(node.message!);
@@ -833,38 +849,38 @@
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     node.statements.forEach(visitStatement);
   }
 
   @override
-  visitAssertBlock(AssertBlock node) {
+  void visitAssertBlock(AssertBlock node) {
     node.statements.forEach(visitStatement);
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {}
+  void visitBreakStatement(BreakStatement node) {}
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {}
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {}
 
   @override
-  visitDoStatement(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     visitStatement(node.body);
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
   }
 
   @override
-  visitEmptyStatement(EmptyStatement node) {}
+  void visitEmptyStatement(EmptyStatement node) {}
 
   @override
-  visitExpressionStatement(ExpressionStatement node) {
+  void visitExpressionStatement(ExpressionStatement node) {
     visitExpression(node.expression);
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  void visitForInStatement(ForInStatement node) {
     DartType iterable = visitExpression(node.iterable);
     // TODO(asgerf): Store interface targets on for-in loops or desugar them,
     // instead of doing the ad-hoc resolution here.
@@ -919,7 +935,7 @@
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     node.variables.forEach(visitVariableDeclaration);
     if (node.condition != null) {
       node.condition = checkAndDowncastExpression(
@@ -930,12 +946,12 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     handleNestedFunctionNode(node.function);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
     visitStatement(node.then);
@@ -945,12 +961,12 @@
   }
 
   @override
-  visitLabeledStatement(LabeledStatement node) {
+  void visitLabeledStatement(LabeledStatement node) {
     visitStatement(node.body);
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     Expression? expression = node.expression;
     if (expression != null) {
       if (currentReturnType == null) {
@@ -966,7 +982,7 @@
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     visitExpression(node.expression);
     for (SwitchCase switchCase in node.cases) {
       switchCase.expressions.forEach(visitExpression);
@@ -975,7 +991,7 @@
   }
 
   @override
-  visitTryCatch(TryCatch node) {
+  void visitTryCatch(TryCatch node) {
     visitStatement(node.body);
     for (Catch catchClause in node.catches) {
       visitStatement(catchClause.body);
@@ -983,13 +999,13 @@
   }
 
   @override
-  visitTryFinally(TryFinally node) {
+  void visitTryFinally(TryFinally node) {
     visitStatement(node.body);
     visitStatement(node.finalizer);
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     if (node.initializer != null) {
       node.initializer =
           checkAndDowncastExpression(node.initializer!, node.type);
@@ -997,14 +1013,14 @@
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  void visitWhileStatement(WhileStatement node) {
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
     visitStatement(node.body);
   }
 
   @override
-  visitYieldStatement(YieldStatement node) {
+  void visitYieldStatement(YieldStatement node) {
     if (node.isYieldStar) {
       Class container = currentAsyncMarker == AsyncMarker.AsyncStar
           ? coreTypes.streamClass
@@ -1016,7 +1032,7 @@
       if (asContainerArguments != null) {
         checkAssignable(
             node.expression, asContainerArguments[0], currentYieldType!);
-      } else {
+      } else if (type is! InvalidType && type is! NeverType) {
         fail(node.expression, '$type is not an instance of $container');
       }
     } else {
@@ -1026,41 +1042,49 @@
   }
 
   @override
-  visitFieldInitializer(FieldInitializer node) {
+  void visitFieldInitializer(FieldInitializer node) {
     node.value = checkAndDowncastExpression(node.value, node.field.type);
   }
 
   @override
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  void visitRedirectingInitializer(RedirectingInitializer node) {
     handleCall(node.arguments, node.target.getterType,
         typeParameters: const <TypeParameter>[]);
   }
 
   @override
-  visitSuperInitializer(SuperInitializer node) {
+  void visitSuperInitializer(SuperInitializer node) {
     handleCall(node.arguments, node.target.getterType,
         typeParameters: const <TypeParameter>[],
         receiver: getSuperReceiverType(node.target));
   }
 
   @override
-  visitLocalInitializer(LocalInitializer node) {
+  void visitLocalInitializer(LocalInitializer node) {
     visitVariableDeclaration(node.variable);
   }
 
   @override
-  visitAssertInitializer(AssertInitializer node) {
+  void visitAssertInitializer(AssertInitializer node) {
     visitAssertStatement(node.statement);
   }
 
   @override
-  visitInvalidInitializer(InvalidInitializer node) {}
+  void visitInvalidInitializer(InvalidInitializer node) {}
 
   @override
   DartType visitDynamicGet(DynamicGet node) {
     DartType receiverType = visitExpression(node.receiver);
     checkUnresolvedInvocation(receiverType, node);
-    return const DynamicType();
+    switch (node.kind) {
+      case DynamicAccessKind.Dynamic:
+        return const DynamicType();
+      case DynamicAccessKind.Never:
+        return new NeverType.internal(currentLibrary!.nonNullable);
+      case DynamicAccessKind.Invalid:
+      case DynamicAccessKind.Unresolved:
+        return const InvalidType();
+    }
   }
 
   @override
@@ -1070,7 +1094,15 @@
     node.arguments.positional.forEach(visitExpression);
     node.arguments.named
         .forEach((NamedExpression n) => visitExpression(n.value));
-    return const DynamicType();
+    switch (node.kind) {
+      case DynamicAccessKind.Dynamic:
+        return const DynamicType();
+      case DynamicAccessKind.Never:
+        return new NeverType.internal(currentLibrary!.nonNullable);
+      case DynamicAccessKind.Invalid:
+      case DynamicAccessKind.Unresolved:
+        return const InvalidType();
+    }
   }
 
   @override
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index f0b4795..6b22016 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -16,6 +16,7 @@
 typedef void ErrorHandler(TreeNode node, String message);
 
 abstract class TypeEnvironment extends Types {
+  @override
   final CoreTypes coreTypes;
 
   TypeEnvironment.fromSubclass(this.coreTypes, ClassHierarchyBase base)
@@ -509,6 +510,7 @@
     return _value == _valueAlways;
   }
 
+  @override
   String toString() {
     switch (_value) {
       case _valueAlways:
@@ -540,15 +542,18 @@
   late Map<ForInStatement, DartType> _forInIteratorTypes = {};
   late Map<ForInStatement, DartType> _forInElementTypes = {};
 
+  @override
   DartType getExpressionType(Expression node, StaticTypeContext context) {
     return _expressionTypes[node] ??= node.getStaticTypeInternal(context);
   }
 
+  @override
   DartType getForInIteratorType(
       ForInStatement node, StaticTypeContext context) {
     return _forInIteratorTypes[node] ??= node.getIteratorTypeInternal(context);
   }
 
+  @override
   DartType getForInElementType(ForInStatement node, StaticTypeContext context) {
     return _forInElementTypes[node] ??= node.getElementTypeInternal(context);
   }
@@ -610,6 +615,7 @@
   /// The [TypeEnvironment] used for the static type computation.
   ///
   /// This provides access to the core types and the class hierarchy.
+  @override
   final TypeEnvironment typeEnvironment;
 
   /// The library in which the static type is computed.
@@ -619,6 +625,7 @@
   final Library _library;
 
   /// The static type of a `this` expression.
+  @override
   final InterfaceType? thisType;
 
   final StaticTypeCache? _cache;
@@ -642,21 +649,26 @@
   /// The [Nullability] used for non-nullable types.
   ///
   /// For opt out libraries this is [Nullability.legacy].
+  @override
   Nullability get nonNullable => _library.nonNullable;
 
   /// The [Nullability] used for nullable types.
   ///
   /// For opt out libraries this is [Nullability.legacy].
+  @override
   Nullability get nullable => _library.nullable;
 
   /// Return `true` if the current library is opted in to non-nullable by
   /// default.
+  @override
   bool get isNonNullableByDefault => _library.isNonNullableByDefault;
 
   /// Returns the mode under which the current library was compiled.
+  @override
   NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode =>
       _library.nonNullableByDefaultCompiledMode;
 
+  @override
   DartType getExpressionType(Expression node) {
     if (_cache != null) {
       return _cache!.getExpressionType(node, this);
@@ -665,6 +677,7 @@
     }
   }
 
+  @override
   DartType getForInIteratorType(ForInStatement node) {
     if (_cache != null) {
       return _cache!.getForInIteratorType(node, this);
@@ -673,6 +686,7 @@
     }
   }
 
+  @override
   DartType getForInElementType(ForInStatement node) {
     if (_cache != null) {
       return _cache!.getForInElementType(node, this);
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index f589e8a..ec9a9aa 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -22,7 +22,8 @@
 
   VerificationError(this.context, this.node, this.details);
 
-  toString() {
+  @override
+  String toString() {
     Location? location;
     try {
       location = node?.location ?? context?.location;
@@ -97,23 +98,23 @@
         afterConst = afterConst ?? !(isOutline ?? false);
 
   @override
-  defaultTreeNode(TreeNode node) {
+  void defaultTreeNode(TreeNode node) {
     visitChildren(node);
   }
 
   @override
-  defaultConstantReference(Constant constant) {
+  void defaultConstantReference(Constant constant) {
     if (seenConstants.add(constant)) {
       constant.accept(this);
     }
   }
 
   @override
-  defaultConstant(Constant constant) {
+  void defaultConstant(Constant constant) {
     constant.visitChildren(this);
   }
 
-  problem(TreeNode? node, String details, {TreeNode? context}) {
+  void problem(TreeNode? node, String details, {TreeNode? context}) {
     context ??= currentClassOrExtensionOrMember;
     throw new VerificationError(context, node, details);
   }
@@ -209,7 +210,8 @@
     }
   }
 
-  visitComponent(Component component) {
+  @override
+  void visitComponent(Component component) {
     try {
       for (Library library in component.libraries) {
         for (Class class_ in library.classes) {
@@ -239,13 +241,15 @@
     }
   }
 
+  @override
   void visitLibrary(Library node) {
     currentLibrary = node;
     super.visitLibrary(node);
     currentLibrary = null;
   }
 
-  visitExtension(Extension node) {
+  @override
+  void visitExtension(Extension node) {
     currentExtension = node;
     declareTypeParameters(node.typeParameters);
     final TreeNode? oldParent = enterParent(node);
@@ -276,13 +280,15 @@
     typedefState[node] = TypedefState.Done;
   }
 
-  visitTypedef(Typedef node) {
+  @override
+  void visitTypedef(Typedef node) {
     checkTypedef(node);
     // Enter and exit the node to check the parent pointer on the typedef node.
     exitParent(enterParent(node));
   }
 
-  visitField(Field node) {
+  @override
+  void visitField(Field node) {
     currentMember = node;
     TreeNode? oldParent = enterParent(node);
     bool isTopLevel = node.parent == currentLibrary;
@@ -324,7 +330,8 @@
     currentMember = null;
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     currentMember = node;
     TreeNode? oldParent = enterParent(node);
     classTypeParametersAreInScope = !node.isStatic;
@@ -374,7 +381,8 @@
     currentMember = null;
   }
 
-  visitConstructor(Constructor node) {
+  @override
+  void visitConstructor(Constructor node) {
     currentMember = node;
     classTypeParametersAreInScope = true;
     // The constructor member needs special treatment due to parameters being
@@ -394,7 +402,8 @@
     currentMember = null;
   }
 
-  visitClass(Class node) {
+  @override
+  void visitClass(Class node) {
     currentClass = node;
     declareTypeParameters(node.typeParameters);
     TreeNode? oldParent = enterParent(node);
@@ -410,7 +419,8 @@
     currentClass = null;
   }
 
-  visitFunctionNode(FunctionNode node) {
+  @override
+  void visitFunctionNode(FunctionNode node) {
     declareTypeParameters(node.typeParameters);
     bool savedInCatchBlock = inCatchBlock;
     AsyncMarker savedAsyncMarker = currentAsyncMarker;
@@ -429,7 +439,8 @@
     undeclareTypeParameters(node.typeParameters);
   }
 
-  visitFunctionType(FunctionType node) {
+  @override
+  void visitFunctionType(FunctionType node) {
     for (int i = 1; i < node.namedParameters.length; ++i) {
       if (node.namedParameters[i - 1].compareTo(node.namedParameters[i]) >= 0) {
         problem(currentParent,
@@ -450,24 +461,34 @@
     undeclareTypeParameters(node.typeParameters);
   }
 
-  visitBlock(Block node) {
+  @override
+  void visitBlock(Block node) {
     visitWithLocalScope(node);
   }
 
-  visitForStatement(ForStatement node) {
+  @override
+  void visitForStatement(ForStatement node) {
     visitWithLocalScope(node);
   }
 
-  visitForInStatement(ForInStatement node) {
+  @override
+  void visitForInStatement(ForInStatement node) {
     visitWithLocalScope(node);
   }
 
-  visitLet(Let node) {
+  @override
+  void visitLet(Let node) {
     if (_isCompileTimeErrorEncoding(node)) return;
     visitWithLocalScope(node);
   }
 
-  visitBlockExpression(BlockExpression node) {
+  @override
+  void visitInvalidExpression(InvalidExpression node) {
+    return;
+  }
+
+  @override
+  void visitBlockExpression(BlockExpression node) {
     int stackHeight = enterLocalScope();
     // Do not visit the block directly because the value expression needs to
     // be in its scope.
@@ -482,7 +503,8 @@
     exitLocalScope(stackHeight);
   }
 
-  visitCatch(Catch node) {
+  @override
+  void visitCatch(Catch node) {
     bool savedInCatchBlock = inCatchBlock;
     inCatchBlock = true;
     visitWithLocalScope(node);
@@ -528,13 +550,14 @@
   }
 
   @override
-  visitRethrow(Rethrow node) {
+  void visitRethrow(Rethrow node) {
     if (!inCatchBlock) {
       problem(node, "Rethrow must be inside a Catch block.");
     }
   }
 
-  visitVariableDeclaration(VariableDeclaration node) {
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
     TreeNode? parent = node.parent;
     if (parent is! Block &&
         !(parent is Catch && parent.body != node) &&
@@ -562,7 +585,8 @@
     }
   }
 
-  visitVariableGet(VariableGet node) {
+  @override
+  void visitVariableGet(VariableGet node) {
     checkVariableInScope(node.variable, node);
     visitChildren(node);
     if (afterConst && node.variable.isConst) {
@@ -570,13 +594,14 @@
     }
   }
 
-  visitVariableSet(VariableSet node) {
+  @override
+  void visitVariableSet(VariableSet node) {
     checkVariableInScope(node.variable, node);
     visitChildren(node);
   }
 
   @override
-  visitStaticGet(StaticGet node) {
+  void visitStaticGet(StaticGet node) {
     visitChildren(node);
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
@@ -602,7 +627,7 @@
   }
 
   @override
-  visitStaticSet(StaticSet node) {
+  void visitStaticSet(StaticSet node) {
     visitChildren(node);
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
@@ -617,7 +642,7 @@
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     checkTargetedInvocation(node.target, node);
     if (node.target.isInstanceMember) {
       problem(node,
@@ -669,7 +694,7 @@
   }
 
   @override
-  visitConstructorInvocation(ConstructorInvocation node) {
+  void visitConstructorInvocation(ConstructorInvocation node) {
     checkTargetedInvocation(node.target, node);
     if (node.target.enclosingClass.isAbstract) {
       problem(node, "ConstructorInvocation of abstract class.");
@@ -705,7 +730,7 @@
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant list literal.");
@@ -713,7 +738,7 @@
   }
 
   @override
-  visitSetLiteral(SetLiteral node) {
+  void visitSetLiteral(SetLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant set literal.");
@@ -721,7 +746,7 @@
   }
 
   @override
-  visitMapLiteral(MapLiteral node) {
+  void visitMapLiteral(MapLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant map literal.");
@@ -729,14 +754,14 @@
   }
 
   @override
-  visitSymbolLiteral(SymbolLiteral node) {
+  void visitSymbolLiteral(SymbolLiteral node) {
     if (afterConst) {
       problem(node, "Symbol literal.");
     }
   }
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
       problem(node, "No target.");
@@ -752,7 +777,7 @@
   }
 
   @override
-  visitInstanceConstant(InstanceConstant constant) {
+  void visitInstanceConstant(InstanceConstant constant) {
     constant.visitChildren(this);
     if (constant.typeArguments.length !=
         constant.classNode.typeParameters.length) {
@@ -789,7 +814,7 @@
   }
 
   @override
-  visitUnevaluatedConstant(UnevaluatedConstant constant) {
+  void visitUnevaluatedConstant(UnevaluatedConstant constant) {
     if (inUnevaluatedConstant) {
       problem(currentParent, "UnevaluatedConstant in UnevaluatedConstant.");
     }
@@ -803,7 +828,7 @@
   }
 
   @override
-  defaultMemberReference(Member node) {
+  void defaultMemberReference(Member node) {
     if (node.transformerFlags & TransformerFlag.seenByVerifier == 0) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'.");
@@ -811,7 +836,7 @@
   }
 
   @override
-  visitClassReference(Class node) {
+  void visitClassReference(Class node) {
     if (!classes.contains(node)) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'.");
@@ -819,7 +844,7 @@
   }
 
   @override
-  visitTypedefReference(Typedef node) {
+  void visitTypedefReference(Typedef node) {
     if (!typedefs.contains(node)) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'");
@@ -827,7 +852,7 @@
   }
 
   @override
-  visitTypeParameterType(TypeParameterType node) {
+  void visitTypeParameterType(TypeParameterType node) {
     TypeParameter parameter = node.parameter;
     if (!typeParametersInScope.contains(parameter)) {
       TreeNode? owner = parameter.parent is FunctionNode
@@ -847,7 +872,7 @@
   }
 
   @override
-  visitInterfaceType(InterfaceType node) {
+  void visitInterfaceType(InterfaceType node) {
     node.visitChildren(this);
     if (node.typeArguments.length != node.classNode.typeParameters.length) {
       problem(
@@ -877,7 +902,7 @@
   }
 
   @override
-  visitTypedefType(TypedefType node) {
+  void visitTypedefType(TypedefType node) {
     checkTypedef(node.typedefNode);
     node.visitChildren(this);
     if (node.typeArguments.length != node.typedefNode.typeParameters.length) {
@@ -968,6 +993,11 @@
   }
 
   @override
+  void visitInvalidExpression(InvalidExpression node) {
+    return;
+  }
+
+  @override
   void defaultExpression(Expression node) {
     try {
       node.getStaticType(_staticTypeContext);
@@ -989,7 +1019,8 @@
 
   CheckParentPointers([this.parent]);
 
-  defaultTreeNode(TreeNode node) {
+  @override
+  void defaultTreeNode(TreeNode node) {
     if (node.parent != parent) {
       throw new VerificationError(
           parent,
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index 5e5c959..cbd116e 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -186,109 +186,197 @@
   R defaultTreeNode(TreeNode node);
 
   // Expressions
+  @override
   R defaultExpression(Expression node) => defaultTreeNode(node);
+  @override
   R defaultBasicLiteral(BasicLiteral node) => defaultExpression(node);
+  @override
   R visitInvalidExpression(InvalidExpression node) => defaultExpression(node);
+  @override
   R visitVariableGet(VariableGet node) => defaultExpression(node);
+  @override
   R visitVariableSet(VariableSet node) => defaultExpression(node);
+  @override
   R visitDynamicGet(DynamicGet node) => defaultExpression(node);
+  @override
   R visitDynamicSet(DynamicSet node) => defaultExpression(node);
+  @override
   R visitFunctionTearOff(FunctionTearOff node) => defaultExpression(node);
+  @override
   R visitInstanceGet(InstanceGet node) => defaultExpression(node);
+  @override
   R visitInstanceSet(InstanceSet node) => defaultExpression(node);
+  @override
   R visitInstanceTearOff(InstanceTearOff node) => defaultExpression(node);
+  @override
   R visitSuperPropertyGet(SuperPropertyGet node) => defaultExpression(node);
+  @override
   R visitSuperPropertySet(SuperPropertySet node) => defaultExpression(node);
+  @override
   R visitStaticGet(StaticGet node) => defaultExpression(node);
+  @override
   R visitStaticSet(StaticSet node) => defaultExpression(node);
+  @override
   R visitStaticTearOff(StaticTearOff node) => defaultExpression(node);
+  @override
   R visitLocalFunctionInvocation(LocalFunctionInvocation node) =>
       defaultExpression(node);
+  @override
   R visitDynamicInvocation(DynamicInvocation node) => defaultExpression(node);
+  @override
   R visitFunctionInvocation(FunctionInvocation node) => defaultExpression(node);
+  @override
   R visitInstanceInvocation(InstanceInvocation node) => defaultExpression(node);
+  @override
   R visitInstanceGetterInvocation(InstanceGetterInvocation node) =>
       defaultExpression(node);
+  @override
   R visitEqualsNull(EqualsNull node) => defaultExpression(node);
+  @override
   R visitEqualsCall(EqualsCall node) => defaultExpression(node);
+  @override
   R visitSuperMethodInvocation(SuperMethodInvocation node) =>
       defaultExpression(node);
+  @override
   R visitStaticInvocation(StaticInvocation node) => defaultExpression(node);
+  @override
   R visitConstructorInvocation(ConstructorInvocation node) =>
       defaultExpression(node);
+  @override
   R visitNot(Not node) => defaultExpression(node);
+  @override
   R visitNullCheck(NullCheck node) => defaultExpression(node);
+  @override
   R visitLogicalExpression(LogicalExpression node) => defaultExpression(node);
+  @override
   R visitConditionalExpression(ConditionalExpression node) =>
       defaultExpression(node);
+  @override
   R visitStringConcatenation(StringConcatenation node) =>
       defaultExpression(node);
+  @override
   R visitListConcatenation(ListConcatenation node) => defaultExpression(node);
+  @override
   R visitSetConcatenation(SetConcatenation node) => defaultExpression(node);
+  @override
   R visitMapConcatenation(MapConcatenation node) => defaultExpression(node);
+  @override
   R visitInstanceCreation(InstanceCreation node) => defaultExpression(node);
+  @override
   R visitFileUriExpression(FileUriExpression node) => defaultExpression(node);
+  @override
   R visitIsExpression(IsExpression node) => defaultExpression(node);
+  @override
   R visitAsExpression(AsExpression node) => defaultExpression(node);
+  @override
   R visitSymbolLiteral(SymbolLiteral node) => defaultExpression(node);
+  @override
   R visitTypeLiteral(TypeLiteral node) => defaultExpression(node);
+  @override
   R visitThisExpression(ThisExpression node) => defaultExpression(node);
+  @override
   R visitRethrow(Rethrow node) => defaultExpression(node);
+  @override
   R visitThrow(Throw node) => defaultExpression(node);
+  @override
   R visitListLiteral(ListLiteral node) => defaultExpression(node);
+  @override
   R visitSetLiteral(SetLiteral node) => defaultExpression(node);
+  @override
   R visitMapLiteral(MapLiteral node) => defaultExpression(node);
+  @override
   R visitAwaitExpression(AwaitExpression node) => defaultExpression(node);
+  @override
   R visitFunctionExpression(FunctionExpression node) => defaultExpression(node);
+  @override
   R visitConstantExpression(ConstantExpression node) => defaultExpression(node);
+  @override
   R visitStringLiteral(StringLiteral node) => defaultBasicLiteral(node);
+  @override
   R visitIntLiteral(IntLiteral node) => defaultBasicLiteral(node);
+  @override
   R visitDoubleLiteral(DoubleLiteral node) => defaultBasicLiteral(node);
+  @override
   R visitBoolLiteral(BoolLiteral node) => defaultBasicLiteral(node);
+  @override
   R visitNullLiteral(NullLiteral node) => defaultBasicLiteral(node);
+  @override
   R visitLet(Let node) => defaultExpression(node);
+  @override
   R visitBlockExpression(BlockExpression node) => defaultExpression(node);
+  @override
   R visitInstantiation(Instantiation node) => defaultExpression(node);
+  @override
   R visitLoadLibrary(LoadLibrary node) => defaultExpression(node);
+  @override
   R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) =>
       defaultExpression(node);
+  @override
   R visitConstructorTearOff(ConstructorTearOff node) => defaultExpression(node);
+  @override
   R visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) =>
       defaultExpression(node);
+  @override
   R visitTypedefTearOff(TypedefTearOff node) => defaultExpression(node);
 
   // Statements
+  @override
   R defaultStatement(Statement node) => defaultTreeNode(node);
+  @override
   R visitExpressionStatement(ExpressionStatement node) =>
       defaultStatement(node);
+  @override
   R visitBlock(Block node) => defaultStatement(node);
+  @override
   R visitAssertBlock(AssertBlock node) => defaultStatement(node);
+  @override
   R visitEmptyStatement(EmptyStatement node) => defaultStatement(node);
+  @override
   R visitAssertStatement(AssertStatement node) => defaultStatement(node);
+  @override
   R visitLabeledStatement(LabeledStatement node) => defaultStatement(node);
+  @override
   R visitBreakStatement(BreakStatement node) => defaultStatement(node);
+  @override
   R visitWhileStatement(WhileStatement node) => defaultStatement(node);
+  @override
   R visitDoStatement(DoStatement node) => defaultStatement(node);
+  @override
   R visitForStatement(ForStatement node) => defaultStatement(node);
+  @override
   R visitForInStatement(ForInStatement node) => defaultStatement(node);
+  @override
   R visitSwitchStatement(SwitchStatement node) => defaultStatement(node);
+  @override
   R visitContinueSwitchStatement(ContinueSwitchStatement node) =>
       defaultStatement(node);
+  @override
   R visitIfStatement(IfStatement node) => defaultStatement(node);
+  @override
   R visitReturnStatement(ReturnStatement node) => defaultStatement(node);
+  @override
   R visitTryCatch(TryCatch node) => defaultStatement(node);
+  @override
   R visitTryFinally(TryFinally node) => defaultStatement(node);
+  @override
   R visitYieldStatement(YieldStatement node) => defaultStatement(node);
+  @override
   R visitVariableDeclaration(VariableDeclaration node) =>
       defaultStatement(node);
+  @override
   R visitFunctionDeclaration(FunctionDeclaration node) =>
       defaultStatement(node);
 
   // Members
+  @override
   R defaultMember(Member node) => defaultTreeNode(node);
+  @override
   R visitConstructor(Constructor node) => defaultMember(node);
+  @override
   R visitProcedure(Procedure node) => defaultMember(node);
+  @override
   R visitField(Field node) => defaultMember(node);
+  @override
   R visitRedirectingFactory(RedirectingFactory node) {
     return defaultMember(node);
   }
@@ -298,14 +386,21 @@
   R visitExtension(Extension node) => defaultTreeNode(node);
 
   // Initializers
+  @override
   R defaultInitializer(Initializer node) => defaultTreeNode(node);
+  @override
   R visitInvalidInitializer(InvalidInitializer node) =>
       defaultInitializer(node);
+  @override
   R visitFieldInitializer(FieldInitializer node) => defaultInitializer(node);
+  @override
   R visitSuperInitializer(SuperInitializer node) => defaultInitializer(node);
+  @override
   R visitRedirectingInitializer(RedirectingInitializer node) =>
       defaultInitializer(node);
+  @override
   R visitLocalInitializer(LocalInitializer node) => defaultInitializer(node);
+  @override
   R visitAssertInitializer(AssertInitializer node) => defaultInitializer(node);
 
   // Other tree nodes
@@ -335,146 +430,234 @@
   R defaultTreeNode(TreeNode node, A arg);
 
   // Expressions
+  @override
   R defaultExpression(Expression node, A arg) => defaultTreeNode(node, arg);
+  @override
   R defaultBasicLiteral(BasicLiteral node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInvalidExpression(InvalidExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitVariableGet(VariableGet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitVariableSet(VariableSet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitDynamicGet(DynamicGet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitDynamicSet(DynamicSet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitFunctionTearOff(FunctionTearOff node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInstanceGet(InstanceGet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitInstanceSet(InstanceSet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitInstanceTearOff(InstanceTearOff node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitSuperPropertyGet(SuperPropertyGet node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitSuperPropertySet(SuperPropertySet node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitStaticGet(StaticGet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitStaticSet(StaticSet node, A arg) => defaultExpression(node, arg);
+  @override
   R visitStaticTearOff(StaticTearOff node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitLocalFunctionInvocation(LocalFunctionInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitDynamicInvocation(DynamicInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitFunctionInvocation(FunctionInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInstanceInvocation(InstanceInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInstanceGetterInvocation(InstanceGetterInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitEqualsNull(EqualsNull node, A arg) => defaultExpression(node, arg);
+  @override
   R visitEqualsCall(EqualsCall node, A arg) => defaultExpression(node, arg);
+  @override
   R visitSuperMethodInvocation(SuperMethodInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitStaticInvocation(StaticInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitConstructorInvocation(ConstructorInvocation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitNot(Not node, A arg) => defaultExpression(node, arg);
+  @override
   R visitNullCheck(NullCheck node, A arg) => defaultExpression(node, arg);
+  @override
   R visitLogicalExpression(LogicalExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitConditionalExpression(ConditionalExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitStringConcatenation(StringConcatenation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitListConcatenation(ListConcatenation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitSetConcatenation(SetConcatenation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitMapConcatenation(MapConcatenation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInstanceCreation(InstanceCreation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitFileUriExpression(FileUriExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitIsExpression(IsExpression node, A arg) => defaultExpression(node, arg);
+  @override
   R visitAsExpression(AsExpression node, A arg) => defaultExpression(node, arg);
+  @override
   R visitSymbolLiteral(SymbolLiteral node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitTypeLiteral(TypeLiteral node, A arg) => defaultExpression(node, arg);
+  @override
   R visitThisExpression(ThisExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitRethrow(Rethrow node, A arg) => defaultExpression(node, arg);
+  @override
   R visitThrow(Throw node, A arg) => defaultExpression(node, arg);
+  @override
   R visitListLiteral(ListLiteral node, A arg) => defaultExpression(node, arg);
+  @override
   R visitSetLiteral(SetLiteral node, A arg) => defaultExpression(node, arg);
+  @override
   R visitMapLiteral(MapLiteral node, A arg) => defaultExpression(node, arg);
+  @override
   R visitAwaitExpression(AwaitExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitFunctionExpression(FunctionExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitConstantExpression(ConstantExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitStringLiteral(StringLiteral node, A arg) =>
       defaultBasicLiteral(node, arg);
+  @override
   R visitIntLiteral(IntLiteral node, A arg) => defaultBasicLiteral(node, arg);
+  @override
   R visitDoubleLiteral(DoubleLiteral node, A arg) =>
       defaultBasicLiteral(node, arg);
+  @override
   R visitBoolLiteral(BoolLiteral node, A arg) => defaultBasicLiteral(node, arg);
+  @override
   R visitNullLiteral(NullLiteral node, A arg) => defaultBasicLiteral(node, arg);
+  @override
   R visitLet(Let node, A arg) => defaultExpression(node, arg);
+  @override
   R visitBlockExpression(BlockExpression node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitInstantiation(Instantiation node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitLoadLibrary(LoadLibrary node, A arg) => defaultExpression(node, arg);
+  @override
   R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitConstructorTearOff(ConstructorTearOff node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node, A arg) =>
       defaultExpression(node, arg);
+  @override
   R visitTypedefTearOff(TypedefTearOff node, A arg) =>
       defaultExpression(node, arg);
 
   // Statements
+  @override
   R defaultStatement(Statement node, A arg) => defaultTreeNode(node, arg);
+  @override
   R visitExpressionStatement(ExpressionStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitBlock(Block node, A arg) => defaultStatement(node, arg);
+  @override
   R visitAssertBlock(AssertBlock node, A arg) => defaultStatement(node, arg);
+  @override
   R visitEmptyStatement(EmptyStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitAssertStatement(AssertStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitLabeledStatement(LabeledStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitBreakStatement(BreakStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitWhileStatement(WhileStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitDoStatement(DoStatement node, A arg) => defaultStatement(node, arg);
+  @override
   R visitForStatement(ForStatement node, A arg) => defaultStatement(node, arg);
+  @override
   R visitForInStatement(ForInStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitSwitchStatement(SwitchStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitContinueSwitchStatement(ContinueSwitchStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitIfStatement(IfStatement node, A arg) => defaultStatement(node, arg);
+  @override
   R visitReturnStatement(ReturnStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitTryCatch(TryCatch node, A arg) => defaultStatement(node, arg);
+  @override
   R visitTryFinally(TryFinally node, A arg) => defaultStatement(node, arg);
+  @override
   R visitYieldStatement(YieldStatement node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitVariableDeclaration(VariableDeclaration node, A arg) =>
       defaultStatement(node, arg);
+  @override
   R visitFunctionDeclaration(FunctionDeclaration node, A arg) =>
       defaultStatement(node, arg);
 
   // Members
+  @override
   R defaultMember(Member node, A arg) => defaultTreeNode(node, arg);
+  @override
   R visitConstructor(Constructor node, A arg) => defaultMember(node, arg);
+  @override
   R visitProcedure(Procedure node, A arg) => defaultMember(node, arg);
+  @override
   R visitField(Field node, A arg) => defaultMember(node, arg);
+  @override
   R visitRedirectingFactory(RedirectingFactory node, A arg) {
     return defaultMember(node, arg);
   }
@@ -484,17 +667,24 @@
   R visitExtension(Extension node, A arg) => defaultTreeNode(node, arg);
 
   // Initializers
+  @override
   R defaultInitializer(Initializer node, A arg) => defaultTreeNode(node, arg);
+  @override
   R visitInvalidInitializer(InvalidInitializer node, A arg) =>
       defaultInitializer(node, arg);
+  @override
   R visitFieldInitializer(FieldInitializer node, A arg) =>
       defaultInitializer(node, arg);
+  @override
   R visitSuperInitializer(SuperInitializer node, A arg) =>
       defaultInitializer(node, arg);
+  @override
   R visitRedirectingInitializer(RedirectingInitializer node, A arg) =>
       defaultInitializer(node, arg);
+  @override
   R visitLocalInitializer(LocalInitializer node, A arg) =>
       defaultInitializer(node, arg);
+  @override
   R visitAssertInitializer(AssertInitializer node, A arg) =>
       defaultInitializer(node, arg);
 
@@ -750,30 +940,48 @@
     return value;
   }
 
+  @override
   R defaultConstant(Constant node);
 
+  @override
   R visitNullConstant(NullConstant node) => defaultConstant(node);
+  @override
   R visitBoolConstant(BoolConstant node) => defaultConstant(node);
+  @override
   R visitIntConstant(IntConstant node) => defaultConstant(node);
+  @override
   R visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+  @override
   R visitStringConstant(StringConstant node) => defaultConstant(node);
+  @override
   R visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+  @override
   R visitMapConstant(MapConstant node) => defaultConstant(node);
+  @override
   R visitListConstant(ListConstant node) => defaultConstant(node);
+  @override
   R visitSetConstant(SetConstant node) => defaultConstant(node);
+  @override
   R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+  @override
   R visitInstantiationConstant(InstantiationConstant node) =>
       defaultConstant(node);
+  @override
   R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitStaticTearOffConstant(StaticTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitRedirectingFactoryTearOffConstant(
           RedirectingFactoryTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
+  @override
   R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
 }
 
@@ -799,29 +1007,46 @@
     }
   }
 
+  @override
   void defaultConstant(Constant node);
 
+  @override
   void visitNullConstant(NullConstant node) => defaultConstant(node);
+  @override
   void visitBoolConstant(BoolConstant node) => defaultConstant(node);
+  @override
   void visitIntConstant(IntConstant node) => defaultConstant(node);
+  @override
   void visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+  @override
   void visitStringConstant(StringConstant node) => defaultConstant(node);
+  @override
   void visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+  @override
   void visitMapConstant(MapConstant node) => defaultConstant(node);
+  @override
   void visitListConstant(ListConstant node) => defaultConstant(node);
+  @override
   void visitSetConstant(SetConstant node) => defaultConstant(node);
+  @override
   void visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+  @override
   void visitInstantiationConstant(InstantiationConstant node) =>
       defaultConstant(node);
+  @override
   void visitStaticTearOffConstant(StaticTearOffConstant node) =>
       defaultConstant(node);
+  @override
   void visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
       defaultConstant(node);
+  @override
   void visitRedirectingFactoryTearOffConstant(
           RedirectingFactoryTearOffConstant node) =>
       defaultConstant(node);
+  @override
   void visitTypeLiteralConstant(TypeLiteralConstant node) =>
       defaultConstant(node);
+  @override
   void visitUnevaluatedConstant(UnevaluatedConstant node) =>
       defaultConstant(node);
 }
@@ -863,46 +1088,77 @@
 
   /// The catch-all case, except for references.
   R defaultNode(Node node);
+  @override
   R defaultTreeNode(TreeNode node) => defaultNode(node);
 
   // DartTypes
+  @override
   R defaultDartType(DartType node) => defaultNode(node);
+  @override
   R visitInvalidType(InvalidType node) => defaultDartType(node);
+  @override
   R visitDynamicType(DynamicType node) => defaultDartType(node);
+  @override
   R visitVoidType(VoidType node) => defaultDartType(node);
+  @override
   R visitInterfaceType(InterfaceType node) => defaultDartType(node);
+  @override
   R visitFutureOrType(FutureOrType node) => defaultDartType(node);
+  @override
   R visitFunctionType(FunctionType node) => defaultDartType(node);
+  @override
   R visitTypeParameterType(TypeParameterType node) => defaultDartType(node);
+  @override
   R visitTypedefType(TypedefType node) => defaultDartType(node);
+  @override
   R visitNeverType(NeverType node) => defaultDartType(node);
+  @override
   R visitNullType(NullType node) => defaultDartType(node);
+  @override
   R visitExtensionType(ExtensionType node) => defaultDartType(node);
 
   // Constants
+  @override
   R defaultConstant(Constant node) => defaultNode(node);
+  @override
   R visitNullConstant(NullConstant node) => defaultConstant(node);
+  @override
   R visitBoolConstant(BoolConstant node) => defaultConstant(node);
+  @override
   R visitIntConstant(IntConstant node) => defaultConstant(node);
+  @override
   R visitDoubleConstant(DoubleConstant node) => defaultConstant(node);
+  @override
   R visitStringConstant(StringConstant node) => defaultConstant(node);
+  @override
   R visitSymbolConstant(SymbolConstant node) => defaultConstant(node);
+  @override
   R visitMapConstant(MapConstant node) => defaultConstant(node);
+  @override
   R visitListConstant(ListConstant node) => defaultConstant(node);
+  @override
   R visitSetConstant(SetConstant node) => defaultConstant(node);
+  @override
   R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
+  @override
   R visitInstantiationConstant(InstantiationConstant node) =>
       defaultConstant(node);
+  @override
   R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitStaticTearOffConstant(StaticTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitRedirectingFactoryTearOffConstant(
           RedirectingFactoryTearOffConstant node) =>
       defaultConstant(node);
+  @override
   R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
+  @override
   R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
 
   // Class references
@@ -952,11 +1208,16 @@
       defaultConstantReference(node);
 
   // Member references
+  @override
   R defaultMemberReference(Member node);
 
+  @override
   R visitFieldReference(Field node) => defaultMemberReference(node);
+  @override
   R visitConstructorReference(Constructor node) => defaultMemberReference(node);
+  @override
   R visitProcedureReference(Procedure node) => defaultMemberReference(node);
+  @override
   R visitRedirectingFactoryReference(RedirectingFactory node) {
     return defaultMemberReference(node);
   }
@@ -975,43 +1236,70 @@
 
   /// The catch-all case, except for references.
   R defaultNode(Node node, A arg);
+  @override
   R defaultTreeNode(TreeNode node, A arg) => defaultNode(node, arg);
 
   // DartTypes
+  @override
   R defaultDartType(DartType node, A arg) => defaultNode(node, arg);
+  @override
   R visitInvalidType(InvalidType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitDynamicType(DynamicType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitVoidType(VoidType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitInterfaceType(InterfaceType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitFutureOrType(FutureOrType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitFunctionType(FunctionType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitTypeParameterType(TypeParameterType node, A arg) =>
       defaultDartType(node, arg);
+  @override
   R visitTypedefType(TypedefType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitNeverType(NeverType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitNullType(NullType node, A arg) => defaultDartType(node, arg);
+  @override
   R visitExtensionType(ExtensionType node, A arg) => defaultDartType(node, arg);
 
   // Constants
+  @override
   R defaultConstant(Constant node, A arg) => defaultNode(node, arg);
+  @override
   R visitNullConstant(NullConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitBoolConstant(BoolConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitIntConstant(IntConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitDoubleConstant(DoubleConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitStringConstant(StringConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitSymbolConstant(SymbolConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitMapConstant(MapConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitListConstant(ListConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitSetConstant(SetConstant node, A arg) => defaultConstant(node, arg);
+  @override
   R visitInstanceConstant(InstanceConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitInstantiationConstant(InstantiationConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitTypeLiteralConstant(TypeLiteralConstant node, A arg) =>
       defaultConstant(node, arg);
+  @override
   R visitUnevaluatedConstant(UnevaluatedConstant node, A arg) =>
       defaultConstant(node, arg);
 
@@ -1063,13 +1351,18 @@
       defaultConstantReference(node, arg);
 
   // Member references
+  @override
   R defaultMemberReference(Member node, A arg);
 
+  @override
   R visitFieldReference(Field node, A arg) => defaultMemberReference(node, arg);
+  @override
   R visitConstructorReference(Constructor node, A arg) =>
       defaultMemberReference(node, arg);
+  @override
   R visitProcedureReference(Procedure node, A arg) =>
       defaultMemberReference(node, arg);
+  @override
   R visitRedirectingFactoryReference(RedirectingFactory node, A arg) =>
       defaultMemberReference(node, arg);
 
@@ -1194,6 +1487,7 @@
 class RecursiveVisitor<T> extends Visitor<void> with VisitorVoidMixin {
   const RecursiveVisitor();
 
+  @override
   void defaultNode(Node node) {
     node.visitChildren(this);
   }
@@ -1204,6 +1498,7 @@
 class RecursiveResultVisitor<R> extends Visitor<R?> with VisitorNullMixin<R> {
   const RecursiveResultVisitor();
 
+  @override
   R? defaultNode(Node node) {
     node.visitChildren(this);
     return null;
@@ -1295,6 +1590,7 @@
 
   Supertype visitSupertype(Supertype node) => node;
 
+  @override
   TreeNode defaultTreeNode(TreeNode node) {
     node.transformChildren(this);
     return node;
@@ -1653,6 +1949,7 @@
 
   Supertype visitSupertype(Supertype node, Supertype? removalSentinel) => node;
 
+  @override
   TreeNode defaultTreeNode(TreeNode node, TreeNode? removalSentinel) {
     node.transformOrRemoveChildren(this);
     return node;
@@ -1806,38 +2103,59 @@
     implements StatementVisitor1<R, T> {
   const BodyVisitor1();
 
+  @override
   R defaultStatement(Statement node, T arg);
+  @override
   R visitExpressionStatement(ExpressionStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitBlock(Block node, T arg) => defaultStatement(node, arg);
+  @override
   R visitAssertBlock(AssertBlock node, T arg) => defaultStatement(node, arg);
+  @override
   R visitEmptyStatement(EmptyStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitAssertStatement(AssertStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitLabeledStatement(LabeledStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitBreakStatement(BreakStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitWhileStatement(WhileStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitDoStatement(DoStatement node, T arg) => defaultStatement(node, arg);
+  @override
   R visitForStatement(ForStatement node, T arg) => defaultStatement(node, arg);
+  @override
   R visitForInStatement(ForInStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitSwitchStatement(SwitchStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitContinueSwitchStatement(ContinueSwitchStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitIfStatement(IfStatement node, T arg) => defaultStatement(node, arg);
+  @override
   R visitReturnStatement(ReturnStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitTryCatch(TryCatch node, T arg) => defaultStatement(node, arg);
+  @override
   R visitTryFinally(TryFinally node, T arg) => defaultStatement(node, arg);
+  @override
   R visitYieldStatement(YieldStatement node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitVariableDeclaration(VariableDeclaration node, T arg) =>
       defaultStatement(node, arg);
+  @override
   R visitFunctionDeclaration(FunctionDeclaration node, T arg) =>
       defaultStatement(node, arg);
 }
diff --git a/pkg/kernel/test/ast_membench.dart b/pkg/kernel/test/ast_membench.dart
index bd448d0..64435d4 100644
--- a/pkg/kernel/test/ast_membench.dart
+++ b/pkg/kernel/test/ast_membench.dart
@@ -8,7 +8,7 @@
 
 /// Builds N copies of the AST for the given component.
 /// Pass --print-metrics to the Dart VM to measure the memory use.
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print('USAGE: ast_membench FILE.dill NUM_COPIES');
     exit(1);
diff --git a/pkg/kernel/test/binary/can_read_platform_test.dart b/pkg/kernel/test/binary/can_read_platform_test.dart
index 2b447bc..1ffefab 100644
--- a/pkg/kernel/test/binary/can_read_platform_test.dart
+++ b/pkg/kernel/test/binary/can_read_platform_test.dart
@@ -7,7 +7,7 @@
 import 'package:kernel/binary/ast_from_binary.dart';
 import 'package:kernel/kernel.dart';
 
-main() {
+void main() {
   File exe = new File(Platform.resolvedExecutable).absolute;
   int steps = 0;
   Directory parent = exe.parent.parent;
diff --git a/pkg/kernel/test/binary/component_mode_test.dart b/pkg/kernel/test/binary/component_mode_test.dart
index c036b67..d629db5 100644
--- a/pkg/kernel/test/binary/component_mode_test.dart
+++ b/pkg/kernel/test/binary/component_mode_test.dart
@@ -6,12 +6,12 @@
 
 import 'utils.dart';
 
-main() {
-  setCompileMode(Component c, NonNullableByDefaultCompiledMode mode) {
+void main() {
+  void setCompileMode(Component c, NonNullableByDefaultCompiledMode mode) {
     c.setMainMethodAndMode(null, true, mode);
   }
 
-  verifyMode(Component c, NonNullableByDefaultCompiledMode mode) {
+  void verifyMode(Component c, NonNullableByDefaultCompiledMode mode) {
     if (c.mode != mode) {
       throw "Serialized and re-read component had change in mode: "
           "Expected $mode got ${c.mode}.";
diff --git a/pkg/kernel/test/binary/invalid_index_size.dart b/pkg/kernel/test/binary/invalid_index_size.dart
index 893c14b..7dffdc0 100644
--- a/pkg/kernel/test/binary/invalid_index_size.dart
+++ b/pkg/kernel/test/binary/invalid_index_size.dart
@@ -6,7 +6,7 @@
 
 import 'utils.dart';
 
-main() {
+void main() {
   Uri uri = Uri.parse("foo://bar.dart");
   Library lib1 = new Library(uri, fileUri: uri);
   Component c1 = new Component(libraries: [lib1]);
diff --git a/pkg/kernel/test/binary/lazy_reading_test.dart b/pkg/kernel/test/binary/lazy_reading_test.dart
index f8bec83..d3848a6 100644
--- a/pkg/kernel/test/binary/lazy_reading_test.dart
+++ b/pkg/kernel/test/binary/lazy_reading_test.dart
@@ -6,7 +6,7 @@
 import 'package:kernel/src/tool/find_referenced_libraries.dart';
 import 'utils.dart';
 
-main() {
+void main() {
   Library lib;
   {
     /// Create a library with two classes (A and B) where class A - in its
diff --git a/pkg/kernel/test/binary/library_flags_test.dart b/pkg/kernel/test/binary/library_flags_test.dart
index d8776d6..15f5ac9 100644
--- a/pkg/kernel/test/binary/library_flags_test.dart
+++ b/pkg/kernel/test/binary/library_flags_test.dart
@@ -5,34 +5,34 @@
 import 'utils.dart';
 
 /// Test that library flags are serialized and read correctly.
-main() {
-  setSynthetic(Library lib, bool isSynthetic) {
+void main() {
+  void setSynthetic(Library lib, bool isSynthetic) {
     lib.isSynthetic = isSynthetic;
   }
 
-  verifySynthetic(Library lib, bool isSynthetic) {
+  void verifySynthetic(Library lib, bool isSynthetic) {
     if (lib.isSynthetic != isSynthetic) {
       throw "Serialized and re-read library had change in synthetic flag.";
     }
   }
 
-  setNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
+  void setNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
     lib.isNonNullableByDefault = isNonNullableByDefault;
   }
 
-  verifyNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
+  void verifyNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
     if (lib.isNonNullableByDefault != isNonNullableByDefault) {
       throw "Serialized and re-read library had change in "
           "isNonNullableByDefault flag.";
     }
   }
 
-  setNonNullableByDefaultCompiledMode(Library lib,
+  void setNonNullableByDefaultCompiledMode(Library lib,
       NonNullableByDefaultCompiledMode nonNullableByDefaultCompiledMode) {
     lib.nonNullableByDefaultCompiledMode = nonNullableByDefaultCompiledMode;
   }
 
-  verifyNonNullableByDefaultCompiledMode(Library lib,
+  void verifyNonNullableByDefaultCompiledMode(Library lib,
       NonNullableByDefaultCompiledMode nonNullableByDefaultCompiledMode) {
     if (lib.nonNullableByDefaultCompiledMode !=
         nonNullableByDefaultCompiledMode) {
diff --git a/pkg/kernel/test/binary/utils.dart b/pkg/kernel/test/binary/utils.dart
index 1005909..b5faa20 100644
--- a/pkg/kernel/test/binary/utils.dart
+++ b/pkg/kernel/test/binary/utils.dart
@@ -32,9 +32,11 @@
 class ByteSink implements Sink<List<int>> {
   final BytesBuilder builder = new BytesBuilder();
 
+  @override
   void add(List<int> data) {
     builder.add(data);
   }
 
+  @override
   void close() {}
 }
diff --git a/pkg/kernel/test/binary_bench.dart b/pkg/kernel/test/binary_bench.dart
index 3c63ecd..69043b9 100644
--- a/pkg/kernel/test/binary_bench.dart
+++ b/pkg/kernel/test/binary_bench.dart
@@ -38,7 +38,7 @@
 bool forGolem = false;
 bool forRaw = false;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   if (!_parseArgs(args)) {
     print(usage);
     exit(-1);
@@ -111,7 +111,7 @@
   void report() {
     runsUs.sort();
 
-    P(int p) => runsUs[((runsUs.length - 1) * (p / 100)).ceil()];
+    int P(int p) => runsUs[((runsUs.length - 1) * (p / 100)).ceil()];
 
     final sum = runsUs.reduce(add);
     final avg = sum / runsUs.length;
diff --git a/pkg/kernel/test/class_hierarchy_basic.dart b/pkg/kernel/test/class_hierarchy_basic.dart
index 78ca0c5..26bf08f 100644
--- a/pkg/kernel/test/class_hierarchy_basic.dart
+++ b/pkg/kernel/test/class_hierarchy_basic.dart
@@ -11,6 +11,7 @@
 /// A simple implementation of the class hierarchy interface using
 /// hash tables for everything.
 class BasicClassHierarchy implements ClassHierarchy {
+  @override
   final Set<Library> knownLibraries;
   final Map<Class, Set<Class>> superclasses = <Class, Set<Class>>{};
   final Map<Class, Set<Class>> superMixtures = <Class, Set<Class>>{};
@@ -39,6 +40,7 @@
     }
   }
 
+  @override
   void forEachOverridePair(
       Class class_, callback(Member member, Member superMember, bool setter)) {
     void report(Member member, Member superMember, bool setter) {
@@ -199,6 +201,7 @@
     }
   }
 
+  @override
   bool isSubclassOf(Class subtype, Class supertype) {
     return superclasses[subtype]!.contains(supertype);
   }
@@ -207,18 +210,22 @@
     return superMixtures[subtype]!.contains(supertype);
   }
 
+  @override
   bool isSubtypeOf(Class subtype, Class supertype) {
     return supertypes[subtype]!.contains(supertype);
   }
 
+  @override
   Supertype? getClassAsInstanceOf(Class type, Class supertype) {
     return supertypeInstantiations[type]![supertype];
   }
 
+  @override
   Member? getDispatchTarget(Class class_, Name name, {bool setter: false}) {
     return setter ? setters[class_]![name] : gettersAndCalls[class_]![name];
   }
 
+  @override
   List<Member> getDispatchTargets(Class class_, {bool setters: false}) {
     return setters
         ? this.setters[class_]!.values.toList()
@@ -229,6 +236,7 @@
     return (members == null || members.isEmpty) ? null : members.first;
   }
 
+  @override
   Member? getInterfaceMember(Class class_, Name name, {bool setter: false}) {
     return tryFirst(getInterfaceMembersByName(class_, name, setter: setter));
   }
@@ -241,6 +249,7 @@
     return iterable == null ? const <Member>[] : iterable;
   }
 
+  @override
   List<Member> getInterfaceMembers(Class class_, {bool setters: false}) {
     return setters
         ? interfaceSetters[class_]!.values.expand((x) => x).toList()
@@ -255,5 +264,6 @@
   double getCompressionRatio() => 0.0;
   int getSuperTypeHashTableSize() => 0;
 
-  noSuchMethod(inv) => super.noSuchMethod(inv);
+  @override
+  dynamic noSuchMethod(inv) => super.noSuchMethod(inv);
 }
diff --git a/pkg/kernel/test/class_hierarchy_bench.dart b/pkg/kernel/test/class_hierarchy_bench.dart
index f6bf037..bf79b3c 100644
--- a/pkg/kernel/test/class_hierarchy_bench.dart
+++ b/pkg/kernel/test/class_hierarchy_bench.dart
@@ -26,7 +26,7 @@
 ${argParser.usage}
 ''';
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/class_hierarchy_membench.dart b/pkg/kernel/test/class_hierarchy_membench.dart
index 0e6aefa..10d9e43 100644
--- a/pkg/kernel/test/class_hierarchy_membench.dart
+++ b/pkg/kernel/test/class_hierarchy_membench.dart
@@ -26,7 +26,7 @@
 
 /// Builds N copies of the class hierarchy for the given component.
 /// Pass --print-metrics to the Dart VM to measure the memory use.
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/class_hierarchy_self_check.dart b/pkg/kernel/test/class_hierarchy_self_check.dart
index 4cea403..404d074 100644
--- a/pkg/kernel/test/class_hierarchy_self_check.dart
+++ b/pkg/kernel/test/class_hierarchy_self_check.dart
@@ -11,7 +11,7 @@
 import 'dart:math';
 import 'self_check_util.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   runSelfCheck(args, (String filename) {
     testClassHierarchyOnComponent(loadComponentFromBinary(filename));
   });
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index f5a2bc5..14a5143 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -11,7 +11,7 @@
 import "package:kernel/text/ast_to_text.dart";
 import "package:kernel/src/text_util.dart";
 
-main() {
+void main() {
   new ClosedWorldClassHierarchyTest().test_applyTreeChanges();
 
   new ClosedWorldClassHierarchyTest().test_applyMemberChanges();
diff --git a/pkg/kernel/test/class_hierarchy_test_disabled.dart b/pkg/kernel/test/class_hierarchy_test_disabled.dart
index 40155b0..bef2d58 100644
--- a/pkg/kernel/test/class_hierarchy_test_disabled.dart
+++ b/pkg/kernel/test/class_hierarchy_test_disabled.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 import 'class_hierarchy_self_check.dart';
 
-main() {
+void main() {
   test('All-pairs class hierarchy tests on dart2js', () {
     testClassHierarchyOnComponent(
         loadComponentFromBinary('test/data/dart2js.dill'));
diff --git a/pkg/kernel/test/clone_test.dart b/pkg/kernel/test/clone_test.dart
new file mode 100644
index 0000000..2a8cfb6
--- /dev/null
+++ b/pkg/kernel/test/clone_test.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 'package:expect/expect.dart';
+import 'package:kernel/ast.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/src/coverage.dart';
+import 'package:kernel/src/equivalence.dart';
+import 'package:kernel/src/node_creator.dart';
+
+void main() {
+  testBodyCloning();
+  testBodyCloningInContext();
+  testMemberCloning();
+}
+
+void testBodyCloning() {
+  // TODO(johnniwinther): Add a test for cloning in context.
+  NodeCreator creator =
+      new NodeCreator(initializers: [], members: [], nodes: inBodyNodeKinds);
+  List<TreeNode> nodes = creator.generateBodies();
+
+  CoverageVisitor coverageVisitor = new CoverageVisitor();
+  for (TreeNode node in nodes) {
+    node.accept(coverageVisitor);
+    CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
+    TreeNode clone = cloner.clone(node);
+    EquivalenceResult result = checkEquivalence(node, clone,
+        strategy: const NoFileOffsetEquivalenceStrategy());
+    if (!result.isEquivalent) {
+      print(result);
+    }
+    Expect.isTrue(result.isEquivalent, "$node");
+  }
+  Expect.isEmpty(
+      creator.createdKinds.toSet()..removeAll(coverageVisitor.visited),
+      'Nodes not covered in testing.');
+}
+
+void testBodyCloningInContext() {
+  NodeCreator creator =
+      new NodeCreator(initializers: [], members: [], nodes: inBodyNodeKinds);
+  List<Statement> nodes = creator.generateBodies();
+
+  CoverageVisitor coverageVisitor = new CoverageVisitor();
+  for (Statement node in nodes) {
+    node.accept(coverageVisitor);
+    CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
+    // Set up context for [statement].
+    new Procedure(Name('foo'), ProcedureKind.Method, FunctionNode(node),
+        fileUri: dummyUri);
+    TreeNode clone = cloner.cloneInContext(node);
+    EquivalenceResult result = checkEquivalence(node, clone);
+    if (!result.isEquivalent) {
+      print(result);
+    }
+    Expect.isTrue(result.isEquivalent, "$node");
+  }
+  Expect.isEmpty(
+      creator.createdKinds.toSet()..removeAll(coverageVisitor.visited),
+      'Nodes not covered in testing.');
+}
+
+void testMemberCloning() {
+  NodeCreator creator = new NodeCreator(nodes: inBodyNodeKinds);
+  Component component = creator.generateComponent();
+
+  CoverageVisitor coverageVisitor = new CoverageVisitor();
+
+  void testMembers<M extends Member>(
+      Iterable<M> members,
+      M Function(CloneVisitorWithMembers, M) cloneFunction,
+      String Function(M) toStringFunction) {
+    for (M member in members) {
+      member.accept(coverageVisitor);
+      CloneVisitorWithMembers cloner = new CloneVisitorWithMembers();
+      M clone = cloneFunction(cloner, member);
+      EquivalenceResult result = checkEquivalence(member, clone,
+          strategy: const MemberEquivalenceStrategy());
+      if (!result.isEquivalent) {
+        print(result);
+      }
+      Expect.isTrue(result.isEquivalent, toStringFunction(member));
+    }
+  }
+
+  void testProcedures(Iterable<Procedure> procedures) {
+    testMembers<Procedure>(
+        procedures,
+        (cloner, procedure) => cloner.cloneProcedure(procedure, null),
+        (procedure) => "${procedure.runtimeType}(${procedure.name}):"
+            "${procedure.function.body}");
+  }
+
+  void testFields(Iterable<Field> fields) {
+    testMembers<Field>(
+        fields,
+        (cloner, field) => cloner.cloneField(field, null, null),
+        (field) => "${field.runtimeType}(${field.name}):"
+            "${field.initializer}");
+  }
+
+  void testConstructors(Iterable<Constructor> constructors) {
+    testMembers<Constructor>(
+        constructors,
+        (cloner, constructor) => cloner.cloneConstructor(constructor, null),
+        (constructor) => "${constructor.runtimeType}(${constructor.name}):"
+            "${constructor.initializers}:"
+            "${constructor.function.body}");
+  }
+
+  void testRedirectingFactories(
+      Iterable<RedirectingFactory> redirectingFactory) {
+    testMembers<RedirectingFactory>(
+        redirectingFactory,
+        (cloner, redirectingFactory) =>
+            cloner.cloneRedirectingFactory(redirectingFactory, null),
+        (redirectingFactory) =>
+            "${redirectingFactory.runtimeType}(${redirectingFactory.name}):"
+            "${redirectingFactory.function.body}");
+  }
+
+  for (Library library in component.libraries) {
+    testProcedures(library.procedures);
+    testFields(library.fields);
+    for (Class cls in library.classes) {
+      testProcedures(cls.procedures);
+      testFields(cls.fields);
+      testConstructors(cls.constructors);
+      testRedirectingFactories(cls.redirectingFactories);
+    }
+  }
+  Expect.isEmpty(
+      creator.createdKinds.toSet()..removeAll(coverageVisitor.visited),
+      'Nodes not covered in testing.');
+}
+
+class NoFileOffsetEquivalenceStrategy extends EquivalenceStrategy {
+  const NoFileOffsetEquivalenceStrategy();
+
+  @override
+  bool checkTreeNode_fileOffset(
+      EquivalenceVisitor visitor, TreeNode node, TreeNode other) {
+    if (other.fileOffset == TreeNode.noOffset) return true;
+    return super.checkTreeNode_fileOffset(visitor, node, other);
+  }
+}
+
+class MemberEquivalenceStrategy extends EquivalenceStrategy {
+  const MemberEquivalenceStrategy();
+
+  void assumeClonedReferences(EquivalenceVisitor visitor, Member member1,
+      Reference? reference1, Member member2, Reference? reference2) {
+    if (reference1 != null && reference2 != null) {
+      ReferenceName referenceName1 = ReferenceName.fromNamedNode(member1);
+      ReferenceName referenceName2 = ReferenceName.fromNamedNode(member2);
+      if (referenceName1.memberName == referenceName2.memberName &&
+              referenceName1.memberUri == referenceName2.memberUri &&
+              referenceName2.declarationName == null ||
+          referenceName2.libraryUri == null) {
+        visitor.assumeReferences(reference1, reference2);
+      }
+    }
+  }
+
+  @override
+  bool checkProcedure(
+      EquivalenceVisitor visitor, Procedure? node, Object? other) {
+    if (node is Procedure && other is Procedure) {
+      assumeClonedReferences(
+          visitor, node, node.reference, other, other.reference);
+    }
+    return super.checkProcedure(visitor, node, other);
+  }
+
+  @override
+  bool checkConstructor(
+      EquivalenceVisitor visitor, Constructor? node, Object? other) {
+    if (node is Constructor && other is Constructor) {
+      assumeClonedReferences(
+          visitor, node, node.reference, other, other.reference);
+    }
+    return super.checkConstructor(visitor, node, other);
+  }
+
+  @override
+  bool checkRedirectingFactory(
+      EquivalenceVisitor visitor, RedirectingFactory? node, Object? other) {
+    if (node is RedirectingFactory && other is RedirectingFactory) {
+      assumeClonedReferences(
+          visitor, node, node.reference, other, other.reference);
+    }
+    return super.checkRedirectingFactory(visitor, node, other);
+  }
+
+  @override
+  bool checkField(EquivalenceVisitor visitor, Field? node, Object? other) {
+    if (node is Field && other is Field) {
+      assumeClonedReferences(
+          visitor, node, node.getterReference, other, other.getterReference);
+      assumeClonedReferences(
+          visitor, node, node.setterReference, other, other.setterReference);
+    }
+    return super.checkField(visitor, node, other);
+  }
+}
diff --git a/pkg/kernel/test/constant_equals_test.dart b/pkg/kernel/test/constant_equals_test.dart
index 80611c6..af9e4bc 100644
--- a/pkg/kernel/test/constant_equals_test.dart
+++ b/pkg/kernel/test/constant_equals_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:kernel/ast.dart';
 
-testEquals(Constant a, Constant b) {
+void testEquals(Constant a, Constant b) {
   if (a != b) {
     throw 'Expected $a and $b to be equal.';
   }
@@ -13,13 +13,13 @@
   }
 }
 
-testNotEquals(Constant a, Constant b) {
+void testNotEquals(Constant a, Constant b) {
   if (a == b) {
     throw 'Expected $a and $b to be not equal.';
   }
 }
 
-main() {
+void main() {
   Uri uri = Uri.parse('test:uri');
   Procedure procedure1 = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
diff --git a/pkg/kernel/test/convert_field_to_setter_getter.dart b/pkg/kernel/test/convert_field_to_setter_getter.dart
index 89f1fd9..702b4cf 100644
--- a/pkg/kernel/test/convert_field_to_setter_getter.dart
+++ b/pkg/kernel/test/convert_field_to_setter_getter.dart
@@ -6,7 +6,7 @@
 import 'package:kernel/binary/ast_to_binary.dart';
 import 'binary/utils.dart';
 
-main() {
+void main() {
   final Uri lib1Uri = Uri.parse('org-dartlang:///lib.dart');
   final Library lib1 = new Library(lib1Uri, fileUri: lib1Uri);
   final Field field = new Field.mutable(new Name("f"), fileUri: lib1Uri);
diff --git a/pkg/kernel/test/dart_type_equivalence_test.dart b/pkg/kernel/test/dart_type_equivalence_test.dart
index 41a7a01..fdb27eb 100644
--- a/pkg/kernel/test/dart_type_equivalence_test.dart
+++ b/pkg/kernel/test/dart_type_equivalence_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/src/dart_type_equivalence.dart';
 import 'package:kernel/testing/type_parser_environment.dart';
 
-run() {
+void run() {
   // Simple types.
   areEqual("int", "int");
   notEqual("int", "String");
@@ -164,7 +164,7 @@
       equateTopTypes: true, ignoreTopLevelNullability: true);
 }
 
-areEqual(String type1, String type2,
+void areEqual(String type1, String type2,
     {String typeParameters = '',
     bool equateTopTypes = false,
     bool ignoreAllNullabilities = false,
@@ -204,7 +204,7 @@
       "with flags ${flagNamesForDebug.map((f) => "'$f'").join(", ")}.");
 }
 
-notEqual(String type1, String type2,
+void notEqual(String type1, String type2,
     {String typeParameters = '',
     bool equateTopTypes = false,
     bool ignoreAllNullabilities = false,
@@ -244,4 +244,4 @@
       "with flags ${flagNamesForDebug.map((f) => "'$f'").join(", ")}.");
 }
 
-main() => run();
+void main() => run();
diff --git a/pkg/kernel/test/equivalence_test.dart b/pkg/kernel/test/equivalence_test.dart
index de5ec47..377d0b3 100644
--- a/pkg/kernel/test/equivalence_test.dart
+++ b/pkg/kernel/test/equivalence_test.dart
@@ -67,23 +67,22 @@
 '''),
   Test(component1, component2),
   Test(component1.libraries[0], component2.libraries[0]),
-  Test(component1.libraries[0], component2.libraries[0]),
   Test(component1.libraries[0], component2.libraries[1], inequivalence: '''
 Inequivalent nodes
-1: library file://uri1/
-2: library file://uri2/
+1: library import://uri1
+2: library import://uri2
 .root
 '''),
   Test(component1.libraries[1], component2.libraries[2], inequivalence: '''
 Inequivalent nodes
-1: library file://uri2/
-2: library file://uri3/
+1: library import://uri2
+2: library import://uri3
 .root
 '''),
   Test(component1.libraries[1], component2.libraries[3], inequivalence: '''
 Values file://uri2/ and file://uri3/ are not equivalent
 .root
- Library(library file://uri2/).fileUri
+ Library(library import://uri2).fileUri
 '''),
   Test(component1.libraries[0].procedures[0],
       component2.libraries[0].procedures[1],
@@ -126,7 +125,7 @@
 '''),
 ];
 
-main() {
+void main() {
   for (Test test in tests) {
     EquivalenceResult result =
         checkEquivalence(test.a, test.b, strategy: test.strategy);
@@ -173,31 +172,34 @@
 
 Component createComponent() {
   Component component = new Component();
-  Uri uri1 = Uri.parse('file://uri1');
-  Uri uri2 = Uri.parse('file://uri2');
-  Uri uri3 = Uri.parse('file://uri3');
-  Library library1 = new Library(uri1, fileUri: uri1);
+  Uri fileUri1 = Uri.parse('file://uri1');
+  Uri fileUri2 = Uri.parse('file://uri2');
+  Uri fileUri3 = Uri.parse('file://uri3');
+  Uri importUri1 = Uri.parse('import://uri1');
+  Uri importUri2 = Uri.parse('import://uri2');
+  Uri importUri3 = Uri.parse('import://uri3');
+  Library library1 = new Library(importUri1, fileUri: fileUri1);
   component.libraries.add(library1);
   Procedure procedure1foo = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library1.addProcedure(procedure1foo);
   Procedure procedure1bar = new Procedure(
       new Name('bar'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library1.addProcedure(procedure1bar);
 
-  Library library2 = new Library(uri2, fileUri: uri2);
+  Library library2 = new Library(importUri2, fileUri: fileUri2);
   component.libraries.add(library2);
 
-  Library library3 = new Library(uri3, fileUri: uri2);
+  Library library3 = new Library(importUri3, fileUri: fileUri2);
   component.libraries.add(library3);
   Procedure procedure3foo = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
-      fileUri: uri1);
+      fileUri: fileUri1);
   library3.addProcedure(procedure3foo);
 
-  Library library4 = new Library(uri2, fileUri: uri3);
+  Library library4 = new Library(importUri2, fileUri: fileUri3);
   component.libraries.add(library4);
 
   return component;
diff --git a/pkg/kernel/test/equivalent_dill_test.dart b/pkg/kernel/test/equivalent_dill_test.dart
index baac8b3..0b2dfcf 100644
--- a/pkg/kernel/test/equivalent_dill_test.dart
+++ b/pkg/kernel/test/equivalent_dill_test.dart
@@ -10,7 +10,7 @@
 import 'package:kernel/kernel.dart';
 import 'package:kernel/src/equivalence.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   String resolvedExecutable = Platform.environment['resolvedExecutable'];
   File exe =
       new File(resolvedExecutable ?? Platform.resolvedExecutable).absolute;
diff --git a/pkg/kernel/test/flatten_test.dart b/pkg/kernel/test/flatten_test.dart
index 2c5c656..29c229a 100644
--- a/pkg/kernel/test/flatten_test.dart
+++ b/pkg/kernel/test/flatten_test.dart
@@ -65,7 +65,7 @@
   const Test(this.input, this.output, [this.typeParameters]);
 }
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   ClassHierarchy classHierarchy =
       new ClassHierarchy(env.component, env.coreTypes);
diff --git a/pkg/kernel/test/future_value_type_test.dart b/pkg/kernel/test/future_value_type_test.dart
index 9d0e32e..3127bba 100644
--- a/pkg/kernel/test/future_value_type_test.dart
+++ b/pkg/kernel/test/future_value_type_test.dart
@@ -67,7 +67,7 @@
   'FutureOr<void>*': 'void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters('X,'
         'X_extends_FutureInt extends Future<int>,'
diff --git a/pkg/kernel/test/graph_test.dart b/pkg/kernel/test/graph_test.dart
index 1dc79f9..143ab01 100644
--- a/pkg/kernel/test/graph_test.dart
+++ b/pkg/kernel/test/graph_test.dart
@@ -13,8 +13,10 @@
 
   TestGraph(this.graph);
 
+  @override
   Iterable<String> get vertices => graph.keys;
 
+  @override
   Iterable<String> neighborsOf(String vertex) => graph[vertex]!;
 }
 
@@ -33,7 +35,7 @@
   Expect.stringEquals(expectedReversed.join(", "), result.join(", "));
 }
 
-main() {
+void main() {
   test("[[B, A], [C], [D]]", {
     "A": ["B"],
     "B": ["A"],
diff --git a/pkg/kernel/test/heap_test.dart b/pkg/kernel/test/heap_test.dart
index 32b294e..5b25dd6 100644
--- a/pkg/kernel/test/heap_test.dart
+++ b/pkg/kernel/test/heap_test.dart
@@ -5,8 +5,8 @@
 import 'package:kernel/src/heap.dart';
 import 'package:test/test.dart';
 
-main() {
-  check_sort(Iterable<int> initialOrder) {
+void main() {
+  void check_sort(Iterable<int> initialOrder) {
     var values = initialOrder.toList();
     var heap = new _intHeap();
     values.forEach(heap.add);
@@ -34,5 +34,6 @@
 }
 
 class _intHeap extends Heap<int> {
+  @override
   bool sortsBefore(int a, int b) => a < b;
 }
diff --git a/pkg/kernel/test/import_table_test.dart b/pkg/kernel/test/import_table_test.dart
index c64f614..c0d6c0a 100644
--- a/pkg/kernel/test/import_table_test.dart
+++ b/pkg/kernel/test/import_table_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:kernel/import_table.dart';
 
-main() {
+void main() {
   List<String> paths = <String>[];
   paths.add("file://");
   paths.add("file:///a");
diff --git a/pkg/kernel/test/indentation_test.dart b/pkg/kernel/test/indentation_test.dart
index 94bf983..7334393 100644
--- a/pkg/kernel/test/indentation_test.dart
+++ b/pkg/kernel/test/indentation_test.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:kernel/text/indentation.dart' show Indentation;
 
-main() {
+void main() {
   Indentation ind = new Indentation();
 
   Expect.stringEquals("", ind.indentation);
diff --git a/pkg/kernel/test/legacy_erasure_test.dart b/pkg/kernel/test/legacy_erasure_test.dart
index 24b1a33..9dcd4cd 100644
--- a/pkg/kernel/test/legacy_erasure_test.dart
+++ b/pkg/kernel/test/legacy_erasure_test.dart
@@ -53,7 +53,7 @@
   '<T extends List<T>>(T) -> void': '<T extends List<T*>*>(T) ->* void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   data.forEach((String input, String output) {
     DartType inputType = env.parseType(input);
diff --git a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
index e8debc6..f898b77 100644
--- a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
+++ b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
@@ -13,7 +13,7 @@
 Uri uri1 = Uri.parse("foo://lib1.dart");
 Uri uri2 = Uri.parse("foo://lib2.dart");
 
-main() {
+void main() {
   Library library1 = new Library(uri1, fileUri: uri1);
   Library library2 = new Library(uri2, fileUri: uri2);
   Procedure p1 = new Procedure(new Name("p1"), ProcedureKind.Method,
diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart
index 16418c6..9845b01 100644
--- a/pkg/kernel/test/metadata_test.dart
+++ b/pkg/kernel/test/metadata_test.dart
@@ -56,10 +56,13 @@
 class TestMetadataRepository extends MetadataRepository<Metadata> {
   static const kTag = 'kernel.metadata.test';
 
+  @override
   final String tag = kTag;
 
+  @override
   final Map<TreeNode, Metadata> mapping = <TreeNode, Metadata>{};
 
+  @override
   void writeToBinary(Metadata metadata, Node node, BinarySink sink) {
     expect(metadata, equals(mapping[node]));
     sink.writeByteList(utf8.encode(metadata.string));
@@ -69,6 +72,7 @@
     sink.writeDartType(metadata.type);
   }
 
+  @override
   Metadata readFromBinary(Node node, BinarySource source) {
     final string1 = utf8.decode(source.readByteList());
     final string2 = source.readStringReference();
@@ -101,7 +105,8 @@
 
   Visitor(this.predicate, this.handle);
 
-  defaultTreeNode(TreeNode node) {
+  @override
+  void defaultTreeNode(TreeNode node) {
     super.defaultTreeNode(node);
     if (MetadataRepository.isSupported(node) && predicate(node)) {
       handle(node);
@@ -149,7 +154,7 @@
   return sink.builder.takeBytes();
 }
 
-main() async {
+void main() async {
   bool anyNode(TreeNode node) => true;
   bool onlyMethods(TreeNode node) =>
       node is Procedure &&
diff --git a/pkg/kernel/test/nnbd_top_merge_test.dart b/pkg/kernel/test/nnbd_top_merge_test.dart
index c6255f1..9f0bc71 100644
--- a/pkg/kernel/test/nnbd_top_merge_test.dart
+++ b/pkg/kernel/test/nnbd_top_merge_test.dart
@@ -121,7 +121,7 @@
   '<T>(T) -> void vs <T>(invalid) -> void': '<T>(invalid) -> void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   data.forEach((String input, dynamic output) {
     List<String> parts = input.split(' vs ');
diff --git a/pkg/kernel/test/non_null_test.dart b/pkg/kernel/test/non_null_test.dart
index 3fc2b89..7ec2800 100644
--- a/pkg/kernel/test/non_null_test.dart
+++ b/pkg/kernel/test/non_null_test.dart
@@ -77,7 +77,7 @@
       'Y_extends_dynamic & X_extends_dynamic',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters('X,'
         'X_extends_Object extends Object,'
diff --git a/pkg/kernel/test/norm_test.dart b/pkg/kernel/test/norm_test.dart
index 0e1c9b1..6ae7be5 100644
--- a/pkg/kernel/test/norm_test.dart
+++ b/pkg/kernel/test/norm_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/src/norm.dart';
 import 'package:kernel/testing/type_parser_environment.dart';
 
-run() {
+void run() {
   checkNormToSame('Null');
   checkNormToSame('Never');
   check('Never?', 'Null');
@@ -142,7 +142,7 @@
       'FutureOr<FutureOr<FutureOr<int>>?>?');
 }
 
-check(String input, String output, [String typeParameters = '']) {
+void check(String input, String output, [String typeParameters = '']) {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters(typeParameters);
   DartType inputType = env.parseType(input);
@@ -157,8 +157,8 @@
       "Actual: ${actualOutputType}");
 }
 
-checkNormToSame(String type, [String typeParameters = '']) {
+void checkNormToSame(String type, [String typeParameters = '']) {
   return check(type, type, typeParameters);
 }
 
-main() => run();
+void main() => run();
diff --git a/pkg/kernel/test/relink_test.dart b/pkg/kernel/test/relink_test.dart
index 47da2a9..cbb64a4 100644
--- a/pkg/kernel/test/relink_test.dart
+++ b/pkg/kernel/test/relink_test.dart
@@ -7,7 +7,7 @@
 import 'package:kernel/src/tool/find_referenced_libraries.dart';
 import 'binary/utils.dart';
 
-main() {
+void main() {
   Component component1 = createComponent(42);
   Component component2 = createComponent(43);
 
diff --git a/pkg/kernel/test/self_check_util.dart b/pkg/kernel/test/self_check_util.dart
index 1ebdd39..d30640e 100644
--- a/pkg/kernel/test/self_check_util.dart
+++ b/pkg/kernel/test/self_check_util.dart
@@ -15,7 +15,7 @@
 ///
 /// The test can either be run with a single file passed on the command line
 /// or run in batch mode.
-runSelfCheck(List<String> args, void runTest(String filename)) {
+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';
diff --git a/pkg/kernel/test/serialize_bench.dart b/pkg/kernel/test/serialize_bench.dart
index 72853ae..c3cd92b 100644
--- a/pkg/kernel/test/serialize_bench.dart
+++ b/pkg/kernel/test/serialize_bench.dart
@@ -12,7 +12,7 @@
 the time it takes, including I/O time.
 ''';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   if (args.length != 2) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/text_serializer_test.dart b/pkg/kernel/test/text_serializer_test.dart
index 4fd8305..a08ce79 100644
--- a/pkg/kernel/test/text_serializer_test.dart
+++ b/pkg/kernel/test/text_serializer_test.dart
@@ -63,7 +63,7 @@
     test('(bool true)');
     test('(bool false)');
     test('(null)');
-    test(r'''(invalid "You can't touch this")''');
+    test(r'''(invalid "You can't touch this" (null))''');
     test('(not (bool true))');
     test('(&& (bool true) (bool false))');
     test('(|| (&& (bool true) (not (bool true))) (bool true))');
diff --git a/pkg/kernel/test/type_hashcode_quality.dart b/pkg/kernel/test/type_hashcode_quality.dart
index 8bf1f34..2e26555 100644
--- a/pkg/kernel/test/type_hashcode_quality.dart
+++ b/pkg/kernel/test/type_hashcode_quality.dart
@@ -31,7 +31,7 @@
   int numberOfTypes = 0;
 
   @override
-  defaultDartType(DartType node) {
+  void defaultDartType(DartType node) {
     if (!seenTypes.add(node)) return;
     ++numberOfTypes;
     int hash = node.hashCode;
diff --git a/pkg/kernel/test/type_hashcode_test.dart b/pkg/kernel/test/type_hashcode_test.dart
index 8d13fe6..c232443 100644
--- a/pkg/kernel/test/type_hashcode_test.dart
+++ b/pkg/kernel/test/type_hashcode_test.dart
@@ -65,6 +65,7 @@
 
   bool get shouldSucceed => expectedSubstitution != null;
 
+  @override
   String toString() => '∃ ${quantifiedVariables.join(',')}. $type1 = $type2';
 }
 
diff --git a/pkg/kernel/test/type_parser_test.dart b/pkg/kernel/test/type_parser_test.dart
index 5a2e651..30caba1 100644
--- a/pkg/kernel/test/type_parser_test.dart
+++ b/pkg/kernel/test/type_parser_test.dart
@@ -6,11 +6,11 @@
 
 import 'package:kernel/testing/type_parser.dart';
 
-testParse(String text) {
+void testParse(String text) {
   Expect.stringEquals(text.trim(), "${parse(text).join('\n')}");
 }
 
-main() {
+void main() {
   testParse("""
 () ->* void
 () ->? void
diff --git a/pkg/kernel/test/type_substitute_bounds_test.dart b/pkg/kernel/test/type_substitute_bounds_test.dart
index ca16ac0..116bddd 100644
--- a/pkg/kernel/test/type_substitute_bounds_test.dart
+++ b/pkg/kernel/test/type_substitute_bounds_test.dart
@@ -41,6 +41,7 @@
 
   TestCase(this.type, this.bounds, this.expected);
 
+  @override
   String toString() {
     var substitution = bounds.keys.map((key) {
       var bound = bounds[key]!;
@@ -62,7 +63,7 @@
   return new TestCase(type, bounds, expected);
 }
 
-main() {
+void main() {
   for (var testCase in testCases) {
     test('$testCase', () {
       var environment = new LazyTypeEnvironment();
diff --git a/pkg/kernel/test/type_substitution_identity_test.dart b/pkg/kernel/test/type_substitution_identity_test.dart
index d8fabbd..a86eea1 100644
--- a/pkg/kernel/test/type_substitution_identity_test.dart
+++ b/pkg/kernel/test/type_substitution_identity_test.dart
@@ -8,7 +8,7 @@
 import 'type_hashcode_test.dart' show testCases;
 import 'package:test/test.dart';
 
-checkType(DartType type) {
+void checkType(DartType type) {
   var map = {new TypeParameter(): const DynamicType()};
   var other = substitute(type, map);
   if (!identical(type, other)) {
@@ -20,7 +20,7 @@
   }
 }
 
-main() {
+void main() {
   for (var testCase in testCases) {
     test('$testCase', () {
       var env = new LazyTypeEnvironment();
diff --git a/pkg/kernel/test/typedef_unalias_test.dart b/pkg/kernel/test/typedef_unalias_test.dart
index 196ac3f..b9a5a41 100644
--- a/pkg/kernel/test/typedef_unalias_test.dart
+++ b/pkg/kernel/test/typedef_unalias_test.dart
@@ -14,7 +14,7 @@
   });
 }
 
-main() {
+void main() {
   harnessTest('`Foo` where typedef Foo = C', (TestHarness harness) {
     var foo = new Typedef('Foo', harness.otherLegacyRawType, fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
diff --git a/pkg/kernel/test/union_find_test.dart b/pkg/kernel/test/union_find_test.dart
index 2e5249d..94226ac 100644
--- a/pkg/kernel/test/union_find_test.dart
+++ b/pkg/kernel/test/union_find_test.dart
@@ -4,11 +4,11 @@
 
 import 'package:kernel/src/union_find.dart';
 
-testSame<T>(UnionFind<T> unionFind, T a, T b, bool expected) {
+void testSame<T>(UnionFind<T> unionFind, T a, T b, bool expected) {
   expect(expected, unionFind.nodesInSameSet(unionFind[a], unionFind[b]));
 }
 
-testSets<T>(UnionFind<T> unionFind, Set<Set<T>> sets) {
+void testSets<T>(UnionFind<T> unionFind, Set<Set<T>> sets) {
   for (Set<T> set in sets) {
     UnionFindNode<T> root = unionFind.findNode(unionFind[set.first]);
     for (T value in unionFind.values) {
@@ -17,15 +17,15 @@
   }
 }
 
-testFind<T>(UnionFind<T> unionFind, T value, T expected) {
+void testFind<T>(UnionFind<T> unionFind, T value, T expected) {
   expect(expected, unionFind.findNode(unionFind[value]).value);
 }
 
-testUnion<T>(UnionFind<T> unionFind, T a, T b, T expected) {
+void testUnion<T>(UnionFind<T> unionFind, T a, T b, T expected) {
   expect(expected, unionFind.unionOfNodes(unionFind[a], unionFind[b]).value);
 }
 
-main() {
+void main() {
   UnionFind<int> unionFind = new UnionFind();
   // {0}
   testFind(unionFind, 0, 0);
@@ -103,6 +103,6 @@
   });
 }
 
-expect(expected, actual) {
+void expect(expected, actual) {
   if (expected != actual) throw 'Expected $expected, actual $actual';
 }
diff --git a/pkg/kernel/test/verify_bench.dart b/pkg/kernel/test/verify_bench.dart
index c5fc42e..d8e5a61 100644
--- a/pkg/kernel/test/verify_bench.dart
+++ b/pkg/kernel/test/verify_bench.dart
@@ -13,7 +13,7 @@
 Measures the time it takes to run kernel verifier on the given component.
 ''';
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length != 1) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/verify_self_check.dart b/pkg/kernel/test/verify_self_check.dart
index bc9b184..ee84f9f 100644
--- a/pkg/kernel/test/verify_self_check.dart
+++ b/pkg/kernel/test/verify_self_check.dart
@@ -7,7 +7,7 @@
 
 import 'self_check_util.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   runSelfCheck(args, (String filename) {
     verifyComponent(loadComponentFromBinary(filename));
   });
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index 97919d4..c80dfaa 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -14,7 +14,7 @@
 ///
 /// We mostly test negative cases here, as we get plenty of positive cases by
 /// compiling the Dart test suite with the verifier enabled.
-main() {
+void main() {
   positiveTest(
     'Test harness has no errors',
     (TestHarness test) {
@@ -672,7 +672,7 @@
   );
 }
 
-checkHasError(Component component, Matcher matcher) {
+void checkHasError(Component component, Matcher matcher) {
   try {
     verifyComponent(component);
   } on VerificationError catch (e) {
@@ -802,7 +802,7 @@
   }
 }
 
-negative1Test(String name, Node? Function(TestHarness test) nodeProvider,
+void negative1Test(String name, Node? Function(TestHarness test) nodeProvider,
     dynamic Function(Node? node) matcher) {
   TestHarness testHarness = new TestHarness();
   Node? node = nodeProvider(testHarness);
@@ -818,7 +818,9 @@
   );
 }
 
-negative2Test(String name, List<Node?> Function(TestHarness test) nodeProvider,
+void negative2Test(
+    String name,
+    List<Node?> Function(TestHarness test) nodeProvider,
     dynamic Function(Node? node, Node? other) matcher) {
   TestHarness testHarness = new TestHarness();
   List<Node?> nodes = nodeProvider(testHarness);
@@ -835,7 +837,7 @@
   );
 }
 
-simpleNegativeTest(String name, dynamic matcher,
+void simpleNegativeTest(String name, dynamic matcher,
     void Function(TestHarness test) makeTestCase) {
   TestHarness testHarness = new TestHarness();
   test(
@@ -850,7 +852,7 @@
   );
 }
 
-positiveTest(String name, void makeTestCase(TestHarness test)) {
+void positiveTest(String name, void makeTestCase(TestHarness test)) {
   test(
     name,
     () {
diff --git a/pkg/kernel/tool/smoke_test_quick.dart b/pkg/kernel/tool/smoke_test_quick.dart
index b5a0b9a..a6969ac 100644
--- a/pkg/kernel/tool/smoke_test_quick.dart
+++ b/pkg/kernel/tool/smoke_test_quick.dart
@@ -8,7 +8,7 @@
 
 String get dartVm => Platform.executable;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Stopwatch stopwatch = new Stopwatch()..start();
   List<Future> futures = <Future>[];
   futures.add(run("pkg/front_end/test/spelling_test_src_suite.dart",
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index 15da3e3..ea032dd 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,9 @@
+## master
+
+* Add `@UseResult.unless`.
+* The mechanism behind `noInline` and `tryInline` from `dart2js.dart` has been
+  changed. This should not affect the use of these annotations in practice.
+
 ## 1.7.0
 
 * Restore `TargetKindExtension` and `get displayString`.
diff --git a/pkg/meta/lib/dart2js.dart b/pkg/meta/lib/dart2js.dart
index 483faeb..29944c8 100644
--- a/pkg/meta/lib/dart2js.dart
+++ b/pkg/meta/lib/dart2js.dart
@@ -17,7 +17,7 @@
 ///
 ///     @dart2js.noInline
 ///     String text() => 'A String of unusual size';
-const _NoInline noInline = _NoInline();
+const noInline = pragma('dart2js:noInline');
 
 /// An annotation for methods to request that dart2js always inline the
 /// method.
@@ -34,12 +34,4 @@
 ///     }
 ///
 /// It is an error to use both `@noInline` and `@tryInline` on the same method.
-const _TryInline tryInline = _TryInline();
-
-class _NoInline {
-  const _NoInline();
-}
-
-class _TryInline {
-  const _TryInline();
-}
+const tryInline = pragma('dart2js:tryInline');
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart
index 54768af..584fe42 100644
--- a/pkg/meta/lib/meta.dart
+++ b/pkg/meta/lib/meta.dart
@@ -357,11 +357,29 @@
 })
 class UseResult {
   /// A human-readable explanation of the reason why the value returned by
-  /// accessing this member should be checked.
+  /// accessing this member should be used.
   final String reason;
 
+  /// Names a parameter of a method or function that, when present, signals that
+  /// the annotated member's value is used by that method or function and does
+  /// not need to be further checked.
+  final String? parameterDefined;
+
   /// Initialize a newly created instance to have the given [reason].
-  const UseResult([this.reason = '']);
+  const UseResult([this.reason = '']) : parameterDefined = null;
+
+  /// Initialize a newly created instance to annotate a function or method that
+  /// identifies a parameter [parameterDefined] that when present signals that
+  /// the result is used by the annotated member and does not need to be further
+  /// checked.  For values that need to be used unconditionally, use the unnamed
+  /// `UseResult` constructor, or if no reason is specified, the [useResult]
+  /// constant.
+  ///
+  /// Tools, such as the analyzer, can provide feedback if
+  ///
+  /// * a parameter named by [parameterDefined] is not declared by the annotated
+  ///   method or function.
+  const UseResult.unless({required this.parameterDefined, this.reason = ''});
 }
 
 class _AlwaysThrows {
diff --git a/pkg/meta/pubspec.yaml b/pkg/meta/pubspec.yaml
index b7e00f8..d4d36da 100644
--- a/pkg/meta/pubspec.yaml
+++ b/pkg/meta/pubspec.yaml
@@ -1,6 +1,6 @@
 name: meta
 # Note, because version `2.0.0` was mistakenly released, the next major version must be `3.x.y`.
-version: 1.7.0
+version: 1.7.1-dev
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/meta
 description: >-
  Annotations that developers can use to express the intentions that otherwise
diff --git a/pkg/native_stack_traces/README.md b/pkg/native_stack_traces/README.md
index a052851..4e609d5 100644
--- a/pkg/native_stack_traces/README.md
+++ b/pkg/native_stack_traces/README.md
@@ -32,7 +32,7 @@
 
 ```dart
 @pragma('vm:prefer-inline')
-bar() => throw null;
+bar() => throw Null;
 
 @pragma('vm:never-inline')
 foo() => bar();
@@ -44,24 +44,18 @@
 
 ```bash
 # Make sure that we have the native_stack_traces package.
-$ pub get native_stack_traces
-$ pub global activate native_stack_traces
+$ dart pub global activate native_stack_traces
 
 # We compile the example program, removing the source location information
 # from the snapshot and saving the debugging information into throws.debug.
-$ dart2native -k aot -S throws.debug -o throws.aotsnapshot throws.dart
+$ dart compile exe -S throws.debug throws.dart
 
 # Run the program, saving the error output to throws.err.
-$ dartaotruntime throws.aotsnapshot 2>throws.err
+$ ./throws.exe 2>throws.err
 
 # Using the saved debugging information, we can translate the stack trace
 # contained in throws.err to its symbolic form.
-$ pub global run native_stack_traces:decode translate -d throws.debug -i throws.err
-
-# We can also just pipe the output of running the program directly into
-# the utility.
-$ dartaotruntime throws.aotsnapshot |& \
-    pub global run native_stack_traces:decode translate -d throws.debug
+$ dart pub global run native_stack_traces:decode translate -d throws.debug -i throws.err
 ```
 
 ## Features and bugs
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index fb1afee..c2700c1 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -240,6 +240,7 @@
 enum EdgeOriginKind {
   alreadyMigratedType,
   alwaysNullableType,
+  angularAnnotation,
   argumentErrorCheckNotNull,
   callTearOff,
   compoundAssignment,
diff --git a/pkg/nnbd_migration/lib/src/decorated_type_operations.dart b/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
index 3f38ca4..a93fa35 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
@@ -4,6 +4,7 @@
 
 import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_system.dart';
 import 'package:nnbd_migration/src/decorated_type.dart';
 import 'package:nnbd_migration/src/edge_origin.dart';
@@ -86,6 +87,10 @@
   }
 
   @override
+  bool isTypeParameterType(DecoratedType type) =>
+      type.type is TypeParameterType;
+
+  @override
   DecoratedType promoteToNonNull(DecoratedType type) {
     return type.withNode(_graph.never);
   }
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index d155843..62cd9a3 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -377,10 +377,14 @@
     var previousAssignedVariables = _assignedVariables;
     if (_flowAnalysis == null) {
       _assignedVariables = AssignedVariables();
+      // Note: we are using flow analysis to help us track true nullabilities;
+      // it's not necessary to replicate old bugs.  So we pass `true` for
+      // `respectImplicitlyTypedVarInitializers`.
       _flowAnalysis = FlowAnalysis<AstNode, Statement, Expression,
               PromotableElement, DecoratedType>(
           DecoratedTypeOperations(_typeSystem, _variables, _graph),
-          _assignedVariables!);
+          _assignedVariables!,
+          respectImplicitlyTypedVarInitializers: true);
     }
     try {
       _dispatch(node.name);
@@ -2110,10 +2114,14 @@
     assert(_assignedVariables == null);
     _assignedVariables =
         FlowAnalysisHelper.computeAssignedVariables(node, parameters);
+    // Note: we are using flow analysis to help us track true nullabilities;
+    // it's not necessary to replicate old bugs.  So we pass `true` for
+    // `respectImplicitlyTypedVarInitializers`.
     _flowAnalysis = FlowAnalysis<AstNode, Statement, Expression,
             PromotableElement, DecoratedType>(
         DecoratedTypeOperations(_typeSystem, _variables, _graph),
-        _assignedVariables!);
+        _assignedVariables!,
+        respectImplicitlyTypedVarInitializers: true);
     if (parameters != null) {
       for (var parameter in parameters.parameters) {
         _flowAnalysis!.declare(parameter.declaredElement!, true);
diff --git a/pkg/nnbd_migration/lib/src/edge_origin.dart b/pkg/nnbd_migration/lib/src/edge_origin.dart
index 2c2643f..91bb299 100644
--- a/pkg/nnbd_migration/lib/src/edge_origin.dart
+++ b/pkg/nnbd_migration/lib/src/edge_origin.dart
@@ -64,6 +64,19 @@
   EdgeOriginKind get kind => EdgeOriginKind.alwaysNullableType;
 }
 
+/// Edge origin resulting from the presence of an Angular annotation such as
+/// `@Optional()`, `@ViewChild(...)`, or `@ContentChild(...)`.
+class AngularAnnotationOrigin extends EdgeOrigin {
+  AngularAnnotationOrigin(Source? source, AstNode node) : super(source, node);
+
+  @override
+  String get description =>
+      'annotated with an Angular annotation indicating nullability';
+
+  @override
+  EdgeOriginKind get kind => EdgeOriginKind.angularAnnotation;
+}
+
 /// Edge origin resulting from the presence of a call to
 /// `ArgumentError.checkNotNull`.
 ///
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index b0e55fc..f271dcf 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -82,7 +82,6 @@
   /// made.
   const AtomicEdit.delete(this.length, {this.info, this.isInformative = false})
       : assert(length > 0),
-        assert(isInformative is bool),
         replacement = '';
 
   /// Initialize an edit to insert the [replacement] characters.
@@ -92,7 +91,6 @@
   const AtomicEdit.insert(this.replacement,
       {this.info, this.isInformative = false})
       : assert(replacement.length > 0),
-        assert(isInformative is bool),
         length = 0;
 
   /// Initialize an edit to replace [length] characters with the [replacement]
diff --git a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
index 26f57f1..53dc64a 100644
--- a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
@@ -7708,7 +7708,7 @@
 ''';
 
 String? _migration_js;
-// migration_dart md5 is 'cbfeac5f79f12f2862fc0d4bc569f58a'
+// migration_dart md5 is 'b415a0a8e74e830025f1153f10871ddd'
 String _migration_js_base64 = '''
 KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgcz1P
 YmplY3Qua2V5cyhhKQpmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHE9c1tyXQpiW3FdPWFb
@@ -7747,7 +7747,7 @@
 CmlmKGEpcmV0dXJuIG5ldyBGdW5jdGlvbigicGFyYW1ldGVycywgY3JlYXRlVGVhck9mZkNsYXNzLCBj
 YWNoZSIsInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIrcyt5KysrIihyZWNlaXZlcikgeyIrImlmIChj
 YWNoZSA9PT0gbnVsbCkgY2FjaGUgPSBjcmVhdGVUZWFyT2ZmQ2xhc3MocGFyYW1ldGVycyk7IisicmV0
-dXJuIG5ldyBjYWNoZSh0aGlzLCByZWNlaXZlcik7IisifSIpKGIsSC5VMixudWxsKQplbHNlIHJldHVy
+dXJuIG5ldyBjYWNoZShyZWNlaXZlciwgdGhpcyk7IisifSIpKGIsSC5VMixudWxsKQplbHNlIHJldHVy
 biBuZXcgRnVuY3Rpb24oInBhcmFtZXRlcnMsIGNyZWF0ZVRlYXJPZmZDbGFzcywgY2FjaGUiLCJyZXR1
 cm4gZnVuY3Rpb24gdGVhck9mZl8iK3MreSsrKyIoKSB7IisiaWYgKGNhY2hlID09PSBudWxsKSBjYWNo
 ZSA9IGNyZWF0ZVRlYXJPZmZDbGFzcyhwYXJhbWV0ZXJzKTsiKyJyZXR1cm4gbmV3IGNhY2hlKHRoaXMs
@@ -7784,4029 +7784,3853 @@
 dGVUeXBlcyxzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnOnNldE9yVXBkYXRlSW50ZXJjZXB0b3Jz
 QnlUYWcsc2V0T3JVcGRhdGVMZWFmVGFnczpzZXRPclVwZGF0ZUxlYWZUYWdzfX0oKQpmdW5jdGlvbiBp
 bml0aWFsaXplRGVmZXJyZWRIdW5rKGEpe3g9di50eXBlcy5sZW5ndGgKYShodW5rSGVscGVycyx2LHcs
-JCl9dmFyIEI9ewp3UjpmdW5jdGlvbigpe3JldHVybiBuZXcgQi5xcCgiIiwiIiwiIixDLkR4KX0sCllm
-OmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz1ILmsoYS5xKDAsInJlZ2lvbnMiKSksaj1I
-LmsoYS5xKDAsIm5hdmlnYXRpb25Db250ZW50IikpLGk9SC5rKGEucSgwLCJzb3VyY2VDb2RlIikpLGg9
-UC5GbCh0Lk4sdC5mNCkKZm9yKHM9dC5HLmEoYS5xKDAsImVkaXRzIikpLHM9cy5nUHUocykscz1zLmdt
-KHMpLHI9dC5SLHE9dC5naTtzLkYoKTspe3A9cy5nbCgpCm89cC5hCm49SC5RSShbXSxxKQpmb3IocD1K
-LklUKHIuYShwLmIpKTtwLkYoKTspe209cC5nbCgpCmw9Si5VNihtKQpuLnB1c2gobmV3IEIuajgoSC5V
-YyhsLnEobSwibGluZSIpKSxILmsobC5xKG0sImV4cGxhbmF0aW9uIikpLEguVWMobC5xKG0sIm9mZnNl
-dCIpKSkpfWguWTUoMCxvLG4pfXJldHVybiBuZXcgQi5xcChrLGosaSxoKX0sCmo4OmZ1bmN0aW9uIGo4
-KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnFwOmZ1bmN0aW9uIHFwKGEsYixjLGQp
-e3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LApmdjpmdW5jdGlvbiBmdigpe30sCk9T
-OmZ1bmN0aW9uKGEpe3ZhciBzCmlmKCEoYT49NjUmJmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIKZWxzZSBz
-PSEwCnJldHVybiBzfSwKWXU6ZnVuY3Rpb24oYSxiKXt2YXIgcz1hLmxlbmd0aCxyPWIrMgppZihzPHIp
-cmV0dXJuITEKaWYoIUIuT1MoQy54Qi5PKGEsYikpKXJldHVybiExCmlmKEMueEIuTyhhLGIrMSkhPT01
-OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4gQy54Qi5PKGEscik9PT00N319LEM9e30s
-RD17CmFiOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbz1udWxsCnRyeXtvPVAudW8oKX1jYXRjaChzKXtp
-Zih0Lmc4LmIoSC5SdShzKSkpe3I9JC5GZgppZihyIT1udWxsKXJldHVybiByCnRocm93IHN9ZWxzZSB0
-aHJvdyBzfWlmKEouUk0obywkLkk2KSl7cj0kLkZmCnIudG9TdHJpbmcKcmV0dXJuIHJ9JC5JNj1vCmlm
-KCQuSGsoKT09JC5FYigpKXI9JC5GZj1vLlpJKCIuIikudygwKQplbHNle3E9by50NCgpCnA9cS5sZW5n
-dGgtMQpyPSQuRmY9cD09PTA/cTpDLnhCLk5qKHEsMCxwKX1yZXR1cm4gcn19LEU9e09GOmZ1bmN0aW9u
-IE9GKGEsYixjKXt0aGlzLmQ9YQp0aGlzLmU9Ygp0aGlzLmY9Y319LEY9e3J1OmZ1bmN0aW9uIHJ1KGEs
-YixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxIPXtGSzpmdW5jdGlvbiBG
-Sygpe30sCkdKOmZ1bmN0aW9uKGEsYixjKXtpZihiLkMoImJRPDA+IikuYihhKSlyZXR1cm4gbmV3IEgu
-b2woYSxiLkMoIkA8MD4iKS5LcShjKS5DKCJvbDwxLDI+IikpCnJldHVybiBuZXcgSC5aeShhLGIuQygi
-QDwwPiIpLktxKGMpLkMoIlp5PDEsMj4iKSl9LApqOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5jKCJG
-aWVsZCAnIithKyInIGhhcyBiZWVuIGFzc2lnbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4iKX0sCm9v
-OmZ1bmN0aW9uKGEpe3ZhciBzLHI9YV40OAppZihyPD05KXJldHVybiByCnM9YXwzMgppZig5Nzw9cyYm
-czw9MTAyKXJldHVybiBzLTg3CnJldHVybi0xfSwKY2I6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhfSwK
-cUM6ZnVuY3Rpb24oYSxiLGMsZCl7UC5rMShiLCJzdGFydCIpCmlmKGMhPW51bGwpe1AuazEoYywiZW5k
-IikKaWYoYj5jKUgudihQLlRFKGIsMCxjLCJzdGFydCIsbnVsbCkpfXJldHVybiBuZXcgSC5uSChhLGIs
-YyxkLkMoIm5IPDA+IikpfSwKSzE6ZnVuY3Rpb24oYSxiLGMsZCl7aWYodC5XLmIoYSkpcmV0dXJuIG5l
-dyBILnh5KGEsYixjLkMoIkA8MD4iKS5LcShkKS5DKCJ4eTwxLDI+IikpCnJldHVybiBuZXcgSC5pMShh
-LGIsYy5DKCJAPDA+IikuS3EoZCkuQygiaTE8MSwyPiIpKX0sCmJLOmZ1bmN0aW9uKGEsYixjKXtpZih0
-LlcuYihhKSl7UC5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgSC5kNShhLGIsYy5DKCJkNTwwPiIpKX1Q
-LmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBILkFNKGEsYixjLkMoIkFNPDA+IikpfSwKV3A6ZnVuY3Rp
-b24oKXtyZXR1cm4gbmV3IFAubGooIk5vIGVsZW1lbnQiKX0sCkFtOmZ1bmN0aW9uKCl7cmV0dXJuIG5l
-dyBQLmxqKCJUb28gbWFueSBlbGVtZW50cyIpfSwKYXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFAubGoo
-IlRvbyBmZXcgZWxlbWVudHMiKX0sCkJSOmZ1bmN0aW9uIEJSKCl7fSwKZVQ6ZnVuY3Rpb24gZVQoYSxi
-KXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKWnk6ZnVuY3Rpb24gWnkoYSxiKXt0aGlzLmE9YQp0aGlzLiR0
-aT1ifSwKb2w6ZnVuY3Rpb24gb2woYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKVXE6ZnVuY3Rpb24g
-VXEoKXt9LApqVjpmdW5jdGlvbiBqVihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApjOmZ1bmN0aW9u
-IGMoYSl7dGhpcy5hPWF9LApxajpmdW5jdGlvbiBxaihhKXt0aGlzLmE9YX0sCmJROmZ1bmN0aW9uIGJR
-KCl7fSwKYUw6ZnVuY3Rpb24gYUwoKXt9LApuSDpmdW5jdGlvbiBuSChhLGIsYyxkKXt2YXIgXz10aGlz
-Cl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LAphNzpmdW5jdGlvbiBhNyhhLGIsYyl7dmFyIF89dGhp
-cwpfLmE9YQpfLmI9YgpfLmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKaTE6ZnVuY3Rpb24gaTEoYSxiLGMp
-e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LAp4eTpmdW5jdGlvbiB4eShhLGIsYyl7dGhpcy5h
-PWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCk1IOmZ1bmN0aW9uIE1IKGEsYixjKXt2YXIgXz10aGlzCl8u
-YT1udWxsCl8uYj1hCl8uYz1iCl8uJHRpPWN9LApsSjpmdW5jdGlvbiBsSihhLGIsYyl7dGhpcy5hPWEK
-dGhpcy5iPWIKdGhpcy4kdGk9Y30sClU1OmZ1bmN0aW9uIFU1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
-Ygp0aGlzLiR0aT1jfSwKU086ZnVuY3Rpb24gU08oYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMu
-JHRpPWN9LApBTTpmdW5jdGlvbiBBTShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30s
-CmQ1OmZ1bmN0aW9uIGQ1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKVTE6ZnVu
-Y3Rpb24gVTEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApNQjpmdW5jdGlvbiBN
-QihhKXt0aGlzLiR0aT1hfSwKRnU6ZnVuY3Rpb24gRnUoYSl7dGhpcy4kdGk9YX0sCnU2OmZ1bmN0aW9u
-IHU2KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkpCOmZ1bmN0aW9uIEpCKGEsYil7dGhpcy5hPWEK
-dGhpcy4kdGk9Yn0sClNVOmZ1bmN0aW9uIFNVKCl7fSwKUmU6ZnVuY3Rpb24gUmUoKXt9LAp3MjpmdW5j
-dGlvbiB3Migpe30sCnd2OmZ1bmN0aW9uIHd2KGEpe3RoaXMuYT1hfSwKUUM6ZnVuY3Rpb24gUUMoKXt9
-LApkYzpmdW5jdGlvbigpe3Rocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBN
-YXAiKSl9LApOUTpmdW5jdGlvbihhKXt2YXIgcyxyPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIh
-PW51bGwpcmV0dXJuIHIKcz0ibWluaWZpZWQ6IithCnJldHVybiBzfSwKd1Y6ZnVuY3Rpb24oYSxiKXt2
-YXIgcwppZihiIT1udWxsKXtzPWIueAppZihzIT1udWxsKXJldHVybiBzfXJldHVybiB0LmFVLmIoYSl9
-LApFajpmdW5jdGlvbihhKXt2YXIgcwppZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGEKaWYodHlw
-ZW9mIGE9PSJudW1iZXIiKXtpZihhIT09MClyZXR1cm4iIithfWVsc2UgaWYoITA9PT1hKXJldHVybiJ0
-cnVlIgplbHNlIGlmKCExPT09YSlyZXR1cm4iZmFsc2UiCmVsc2UgaWYoYT09bnVsbClyZXR1cm4ibnVs
-bCIKcz1KLncoYSkKcmV0dXJuIHN9LAplUTpmdW5jdGlvbihhKXt2YXIgcz1hLiRpZGVudGl0eUhhc2gK
+JCl9dmFyIEI9ewp3Uigpe3JldHVybiBuZXcgQi5xcCgiIiwiIiwiIixDLkR4KX0sCllmKGEpe3ZhciBz
+LHIscSxwLG8sbixtLGwsaz1ILmsoYS5xKDAsInJlZ2lvbnMiKSksaj1ILmsoYS5xKDAsIm5hdmlnYXRp
+b25Db250ZW50IikpLGk9SC5rKGEucSgwLCJzb3VyY2VDb2RlIikpLGg9UC5GbCh0Lk4sdC5mNCkKZm9y
+KHM9dC5HLmEoYS5xKDAsImVkaXRzIikpLHM9cy5nUHUocykscz1zLmdtKHMpLHI9dC5SLHE9dC5naTtz
+LkYoKTspe3A9cy5nbCgpCm89cC5hCm49SC5RSShbXSxxKQpmb3IocD1KLklUKHIuYShwLmIpKTtwLkYo
+KTspe209cC5nbCgpCmw9Si5VNihtKQpuLnB1c2gobmV3IEIuajgoSC5VYyhsLnEobSwibGluZSIpKSxI
+LmsobC5xKG0sImV4cGxhbmF0aW9uIikpLEguVWMobC5xKG0sIm9mZnNldCIpKSkpfWguWTUoMCxvLG4p
+fXJldHVybiBuZXcgQi5xcChrLGosaSxoKX0sCmo4OmZ1bmN0aW9uIGo4KGEsYixjKXt0aGlzLmE9YQp0
+aGlzLmI9Ygp0aGlzLmM9Y30sCnFwOmZ1bmN0aW9uIHFwKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEK
+Xy5iPWIKXy5jPWMKXy5kPWR9LApmdjpmdW5jdGlvbiBmdigpe30sCk9TKGEpe3ZhciBzCmlmKCEoYT49
+NjUmJmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIKZWxzZSBzPSEwCnJldHVybiBzfSwKWXUoYSxiKXt2YXIg
+cz1hLmxlbmd0aCxyPWIrMgppZihzPHIpcmV0dXJuITEKaWYoIUIuT1MoQy54Qi5PKGEsYikpKXJldHVy
+biExCmlmKEMueEIuTyhhLGIrMSkhPT01OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4g
+Qy54Qi5PKGEscik9PT00N319LEM9e30sRD17CmFiKCl7dmFyIHMscixxLHAsbz1udWxsCnRyeXtvPVAu
+dW8oKX1jYXRjaChzKXtpZih0Lmc4LmIoSC5SdShzKSkpe3I9JC5GZgppZihyIT1udWxsKXJldHVybiBy
+CnRocm93IHN9ZWxzZSB0aHJvdyBzfWlmKEouUk0obywkLkk2KSl7cj0kLkZmCnIudG9TdHJpbmcKcmV0
+dXJuIHJ9JC5JNj1vCmlmKCQuSGsoKT09JC5FYigpKXI9JC5GZj1vLlpJKCIuIikudygwKQplbHNle3E9
+by50NCgpCnA9cS5sZW5ndGgtMQpyPSQuRmY9cD09PTA/cTpDLnhCLk5qKHEsMCxwKX1yZXR1cm4gcn19
+LEU9e09GOmZ1bmN0aW9uIE9GKGEsYixjKXt0aGlzLmQ9YQp0aGlzLmU9Ygp0aGlzLmY9Y319LEY9e3J1
+OmZ1bmN0aW9uIHJ1KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxI
+PXtGSzpmdW5jdGlvbiBGSygpe30sCkdKKGEsYixjKXtpZihiLkMoImJRPDA+IikuYihhKSlyZXR1cm4g
+bmV3IEgub2woYSxiLkMoIkA8MD4iKS5LcShjKS5DKCJvbDwxLDI+IikpCnJldHVybiBuZXcgSC5aeShh
+LGIuQygiQDwwPiIpLktxKGMpLkMoIlp5PDEsMj4iKSl9LApqKGEpe3JldHVybiBuZXcgSC5jKCJGaWVs
+ZCAnIithKyInIGhhcyBiZWVuIGFzc2lnbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4iKX0sCm9vKGEp
+e3ZhciBzLHI9YV40OAppZihyPD05KXJldHVybiByCnM9YXwzMgppZig5Nzw9cyYmczw9MTAyKXJldHVy
+biBzLTg3CnJldHVybi0xfSwKY2IoYSxiLGMpe3JldHVybiBhfSwKcUMoYSxiLGMsZCl7UC5rMShiLCJz
+dGFydCIpCmlmKGMhPW51bGwpe1AuazEoYywiZW5kIikKaWYoYj5jKUgudihQLlRFKGIsMCxjLCJzdGFy
+dCIsbnVsbCkpfXJldHVybiBuZXcgSC5uSChhLGIsYyxkLkMoIm5IPDA+IikpfSwKSzEoYSxiLGMsZCl7
+aWYodC5XLmIoYSkpcmV0dXJuIG5ldyBILnh5KGEsYixjLkMoIkA8MD4iKS5LcShkKS5DKCJ4eTwxLDI+
+IikpCnJldHVybiBuZXcgSC5pMShhLGIsYy5DKCJAPDA+IikuS3EoZCkuQygiaTE8MSwyPiIpKX0sCmJL
+KGEsYixjKXtpZih0LlcuYihhKSl7UC5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgSC5kNShhLGIsYy5D
+KCJkNTwwPiIpKX1QLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBILkFNKGEsYixjLkMoIkFNPDA+Iikp
+fSwKV3AoKXtyZXR1cm4gbmV3IFAubGooIk5vIGVsZW1lbnQiKX0sCkFtKCl7cmV0dXJuIG5ldyBQLmxq
+KCJUb28gbWFueSBlbGVtZW50cyIpfSwKYXIoKXtyZXR1cm4gbmV3IFAubGooIlRvbyBmZXcgZWxlbWVu
+dHMiKX0sCkJSOmZ1bmN0aW9uIEJSKCl7fSwKZVQ6ZnVuY3Rpb24gZVQoYSxiKXt0aGlzLmE9YQp0aGlz
+LiR0aT1ifSwKWnk6ZnVuY3Rpb24gWnkoYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKb2w6ZnVuY3Rp
+b24gb2woYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKVXE6ZnVuY3Rpb24gVXEoKXt9LApqVjpmdW5j
+dGlvbiBqVihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApjOmZ1bmN0aW9uIGMoYSl7dGhpcy5hPWF9
+LApxajpmdW5jdGlvbiBxaihhKXt0aGlzLmE9YX0sCmJROmZ1bmN0aW9uIGJRKCl7fSwKYUw6ZnVuY3Rp
+b24gYUwoKXt9LApuSDpmdW5jdGlvbiBuSChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8u
+Yz1jCl8uJHRpPWR9LAphNzpmdW5jdGlvbiBhNyhhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9Ygpf
+LmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKaTE6ZnVuY3Rpb24gaTEoYSxiLGMpe3RoaXMuYT1hCnRoaXMu
+Yj1iCnRoaXMuJHRpPWN9LAp4eTpmdW5jdGlvbiB4eShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp
+cy4kdGk9Y30sCk1IOmZ1bmN0aW9uIE1IKGEsYixjKXt2YXIgXz10aGlzCl8uYT1udWxsCl8uYj1hCl8u
+Yz1iCl8uJHRpPWN9LApsSjpmdW5jdGlvbiBsSihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4k
+dGk9Y30sClU1OmZ1bmN0aW9uIFU1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwK
+U086ZnVuY3Rpb24gU08oYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApBTTpmdW5j
+dGlvbiBBTShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCmQ1OmZ1bmN0aW9uIGQ1
+KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKVTE6ZnVuY3Rpb24gVTEoYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApNQjpmdW5jdGlvbiBNQihhKXt0aGlzLiR0aT1h
+fSwKRnU6ZnVuY3Rpb24gRnUoYSl7dGhpcy4kdGk9YX0sCnU2OmZ1bmN0aW9uIHU2KGEsYil7dGhpcy5h
+PWEKdGhpcy4kdGk9Yn0sCkpCOmZ1bmN0aW9uIEpCKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sClNV
+OmZ1bmN0aW9uIFNVKCl7fSwKUmU6ZnVuY3Rpb24gUmUoKXt9LAp3MjpmdW5jdGlvbiB3Migpe30sCnd2
+OmZ1bmN0aW9uIHd2KGEpe3RoaXMuYT1hfSwKUUM6ZnVuY3Rpb24gUUMoKXt9LApkYygpe3Rocm93IEgu
+YihQLkw0KCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBNYXAiKSl9LApOUShhKXt2YXIgcyxyPXYu
+bWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIhPW51bGwpcmV0dXJuIHIKcz0ibWluaWZpZWQ6IithCnJl
+dHVybiBzfSwKd1YoYSxiKXt2YXIgcwppZihiIT1udWxsKXtzPWIueAppZihzIT1udWxsKXJldHVybiBz
+fXJldHVybiB0LmFVLmIoYSl9LApFaihhKXt2YXIgcwppZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJu
+IGEKaWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihhIT09MClyZXR1cm4iIithfWVsc2UgaWYoITA9PT1h
+KXJldHVybiJ0cnVlIgplbHNlIGlmKCExPT09YSlyZXR1cm4iZmFsc2UiCmVsc2UgaWYoYT09bnVsbCly
+ZXR1cm4ibnVsbCIKcz1KLncoYSkKcmV0dXJuIHN9LAplUShhKXt2YXIgcz1hLiRpZGVudGl0eUhhc2gK
 aWYocz09bnVsbCl7cz1NYXRoLnJhbmRvbSgpKjB4M2ZmZmZmZmZ8MAphLiRpZGVudGl0eUhhc2g9c31y
-ZXR1cm4gc30sCkhwOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuPW51bGwsbT0vXlxzKlsrLV0/
-KCgweFthLWYwLTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJC9pLmV4ZWMoYSkKaWYobT09bnVsbCly
-ZXR1cm4gbgppZigzPj1tLmxlbmd0aClyZXR1cm4gSC5PSChtLDMpCnM9bVszXQppZihiPT1udWxsKXtp
-ZihzIT1udWxsKXJldHVybiBwYXJzZUludChhLDEwKQppZihtWzJdIT1udWxsKXJldHVybiBwYXJzZUlu
-dChhLDE2KQpyZXR1cm4gbn1pZihiPDJ8fGI+MzYpdGhyb3cgSC5iKFAuVEUoYiwyLDM2LCJyYWRpeCIs
-bikpCmlmKGI9PT0xMCYmcyE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxMCkKaWYoYjwxMHx8cz09bnVs
-bCl7cj1iPD0xMD80NytiOjg2K2IKcT1tWzFdCmZvcihwPXEubGVuZ3RoLG89MDtvPHA7KytvKWlmKChD
-LnhCLlcocSxvKXwzMik+cilyZXR1cm4gbn1yZXR1cm4gcGFyc2VJbnQoYSxiKX0sCmxoOmZ1bmN0aW9u
-KGEpe3JldHVybiBILkg1KGEpfSwKSDU6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKaWYoYSBpbnN0YW5j
-ZW9mIFAuTWgpcmV0dXJuIEguZG0oSC56SyhhKSxudWxsKQppZihKLmlhKGEpPT09Qy5Pa3x8dC5iSi5i
-KGEpKXtzPUMuTzQoYSkKcj1zIT09Ik9iamVjdCImJnMhPT0iIgppZihyKXJldHVybiBzCnE9YS5jb25z
-dHJ1Y3RvcgppZih0eXBlb2YgcT09ImZ1bmN0aW9uIil7cD1xLm5hbWUKaWYodHlwZW9mIHA9PSJzdHJp
-bmciKXI9cCE9PSJPYmplY3QiJiZwIT09IiIKZWxzZSByPSExCmlmKHIpcmV0dXJuIHB9fXJldHVybiBI
-LmRtKEgueksoYSksbnVsbCl9LApNMDpmdW5jdGlvbigpe2lmKCEhc2VsZi5sb2NhdGlvbilyZXR1cm4g
-c2VsZi5sb2NhdGlvbi5ocmVmCnJldHVybiBudWxsfSwKZnc6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIs
-cSxwCmlmKGM8PTUwMCYmYj09PTAmJmM9PT1hLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
-ZS5hcHBseShudWxsLGEpCmZvcihzPWIscj0iIjtzPGM7cz1xKXtxPXMrNTAwCnA9cTxjP3E6YwpyKz1T
-dHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYS5zdWJhcnJheShzLHApKX1yZXR1cm4gcn0sCkx3
-OmZ1bmN0aW9uKGEpe3ZhciBzCmlmKDA8PWEpe2lmKGE8PTY1NTM1KXJldHVybiBTdHJpbmcuZnJvbUNo
-YXJDb2RlKGEpCmlmKGE8PTExMTQxMTEpe3M9YS02NTUzNgpyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
-ZSgoQy5qbi53RyhzLDEwKXw1NTI5Nik+Pj4wLHMmMTAyM3w1NjMyMCl9fXRocm93IEguYihQLlRFKGEs
-MCwxMTE0MTExLG51bGwsbnVsbCkpfSwKbzI6ZnVuY3Rpb24oYSl7aWYoYS5kYXRlPT09dm9pZCAwKWEu
-ZGF0ZT1uZXcgRGF0ZShhLmEpCnJldHVybiBhLmRhdGV9LAp0SjpmdW5jdGlvbihhKXt2YXIgcz1ILm8y
-KGEpLmdldEZ1bGxZZWFyKCkrMApyZXR1cm4gc30sCk5TOmZ1bmN0aW9uKGEpe3ZhciBzPUgubzIoYSku
-Z2V0TW9udGgoKSsxCnJldHVybiBzfSwKakE6ZnVuY3Rpb24oYSl7dmFyIHM9SC5vMihhKS5nZXREYXRl
-KCkrMApyZXR1cm4gc30sCklYOmZ1bmN0aW9uKGEpe3ZhciBzPUgubzIoYSkuZ2V0SG91cnMoKSswCnJl
-dHVybiBzfSwKY2g6ZnVuY3Rpb24oYSl7dmFyIHM9SC5vMihhKS5nZXRNaW51dGVzKCkrMApyZXR1cm4g
-c30sCkpkOmZ1bmN0aW9uKGEpe3ZhciBzPUgubzIoYSkuZ2V0U2Vjb25kcygpKzAKcmV0dXJuIHN9LApv
-MTpmdW5jdGlvbihhKXt2YXIgcz1ILm8yKGEpLmdldE1pbGxpc2Vjb25kcygpKzAKcmV0dXJuIHN9LAp6
-bzpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxPXt9CnEuYT0wCnM9W10Kcj1bXQpxLmE9Yi5sZW5ndGgK
-Qy5ObS5GVihzLGIpCnEuYj0iIgppZihjIT1udWxsJiZjLmEhPT0wKWMuSygwLG5ldyBILkNqKHEscixz
-KSkKIiIrcS5hCnJldHVybiBKLkp5KGEsbmV3IEguTEkoQy5UZSwwLHMsciwwKSl9LApFazpmdW5jdGlv
-bihhLGIsYyl7dmFyIHMscixxLHAKaWYoYiBpbnN0YW5jZW9mIEFycmF5KXM9Yz09bnVsbHx8Yy5hPT09
-MAplbHNlIHM9ITEKaWYocyl7cj1iCnE9ci5sZW5ndGgKaWYocT09PTApe2lmKCEhYS4kMClyZXR1cm4g
-YS4kMCgpfWVsc2UgaWYocT09PTEpe2lmKCEhYS4kMSlyZXR1cm4gYS4kMShyWzBdKX1lbHNlIGlmKHE9
-PT0yKXtpZighIWEuJDIpcmV0dXJuIGEuJDIoclswXSxyWzFdKX1lbHNlIGlmKHE9PT0zKXtpZighIWEu
-JDMpcmV0dXJuIGEuJDMoclswXSxyWzFdLHJbMl0pfWVsc2UgaWYocT09PTQpe2lmKCEhYS4kNClyZXR1
-cm4gYS4kNChyWzBdLHJbMV0sclsyXSxyWzNdKX1lbHNlIGlmKHE9PT01KWlmKCEhYS4kNSlyZXR1cm4g
-YS4kNShyWzBdLHJbMV0sclsyXSxyWzNdLHJbNF0pCnA9YVsiIisiJCIrcV0KaWYocCE9bnVsbClyZXR1
-cm4gcC5hcHBseShhLHIpfXJldHVybiBILmUxKGEsYixjKX0sCmUxOmZ1bmN0aW9uKGEsYixjKXt2YXIg
-cyxyLHEscCxvLG4sbSxsLGssaixpPWIgaW5zdGFuY2VvZiBBcnJheT9iOlAuQ0goYiwhMCx0LnopLGg9
-aS5sZW5ndGgsZz1hLiRSCmlmKGg8ZylyZXR1cm4gSC56byhhLGksYykKcz1hLiRECnI9cz09bnVsbApx
-PSFyP3MoKTpudWxsCnA9Si5pYShhKQpvPXAuJEMKaWYodHlwZW9mIG89PSJzdHJpbmciKW89cFtvXQpp
-ZihyKXtpZihjIT1udWxsJiZjLmEhPT0wKXJldHVybiBILnpvKGEsaSxjKQppZihoPT09ZylyZXR1cm4g
-by5hcHBseShhLGkpCnJldHVybiBILnpvKGEsaSxjKX1pZihxIGluc3RhbmNlb2YgQXJyYXkpe2lmKGMh
-PW51bGwmJmMuYSE9PTApcmV0dXJuIEguem8oYSxpLGMpCmlmKGg+ZytxLmxlbmd0aClyZXR1cm4gSC56
-byhhLGksbnVsbCkKQy5ObS5GVihpLHEuc2xpY2UoaC1nKSkKcmV0dXJuIG8uYXBwbHkoYSxpKX1lbHNl
-e2lmKGg+ZylyZXR1cm4gSC56byhhLGksYykKbj1PYmplY3Qua2V5cyhxKQppZihjPT1udWxsKWZvcihy
-PW4ubGVuZ3RoLG09MDttPG4ubGVuZ3RoO24ubGVuZ3RoPT09cnx8KDAsSC5saykobiksKyttKXtsPXFb
-SC5uKG5bbV0pXQppZihDLk52PT09bClyZXR1cm4gSC56byhhLGksYykKQy5ObS5pKGksbCl9ZWxzZXtm
-b3Iocj1uLmxlbmd0aCxrPTAsbT0wO208bi5sZW5ndGg7bi5sZW5ndGg9PT1yfHwoMCxILmxrKShuKSwr
-K20pe2o9SC5uKG5bbV0pCmlmKGMueDQoaikpeysrawpDLk5tLmkoaSxjLnEoMCxqKSl9ZWxzZXtsPXFb
-al0KaWYoQy5Odj09PWwpcmV0dXJuIEguem8oYSxpLGMpCkMuTm0uaShpLGwpfX1pZihrIT09Yy5hKXJl
-dHVybiBILnpvKGEsaSxjKX1yZXR1cm4gby5hcHBseShhLGkpfX0sCnBZOmZ1bmN0aW9uKGEpe3Rocm93
-IEguYihILnRMKGEpKX0sCk9IOmZ1bmN0aW9uKGEsYil7aWYoYT09bnVsbClKLkhtKGEpCnRocm93IEgu
-YihILnUoYSxiKSl9LAp1OmZ1bmN0aW9uKGEsYil7dmFyIHMscj0iaW5kZXgiCmlmKCFILm9rKGIpKXJl
-dHVybiBuZXcgUC5BVCghMCxiLHIsbnVsbCkKcz1ILklaKEouSG0oYSkpCmlmKGI8MHx8Yj49cylyZXR1
-cm4gUC5DZihiLGEscixudWxsLHMpCnJldHVybiBQLk83KGIscil9LAphdTpmdW5jdGlvbihhLGIsYyl7
-aWYoYT5jKXJldHVybiBQLlRFKGEsMCxjLCJzdGFydCIsbnVsbCkKaWYoYiE9bnVsbClpZihiPGF8fGI+
-YylyZXR1cm4gUC5URShiLGEsYywiZW5kIixudWxsKQpyZXR1cm4gbmV3IFAuQVQoITAsYiwiZW5kIixu
-dWxsKX0sCnRMOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5BVCghMCxhLG51bGwsbnVsbCl9LApiOmZ1
-bmN0aW9uKGEpe3ZhciBzLHIKaWYoYT09bnVsbClhPW5ldyBQLkYoKQpzPW5ldyBFcnJvcigpCnMuZGFy
-dEV4Y2VwdGlvbj1hCnI9SC5oCmlmKCJkZWZpbmVQcm9wZXJ0eSIgaW4gT2JqZWN0KXtPYmplY3QuZGVm
-aW5lUHJvcGVydHkocywibWVzc2FnZSIse2dldDpyfSkKcy5uYW1lPSIifWVsc2Ugcy50b1N0cmluZz1y
-CnJldHVybiBzfSwKaDpmdW5jdGlvbigpe3JldHVybiBKLncodGhpcy5kYXJ0RXhjZXB0aW9uKX0sCnY6
-ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKGEpfSwKbGs6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKFAuYTQoYSkp
-fSwKY006ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuCmE9SC5lQShhLnJlcGxhY2UoU3RyaW5nKHt9
-KSwiJHJlY2VpdmVyJCIpKQpzPWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHM9PW51bGwp
-cz1ILlFJKFtdLHQucykKcj1zLmluZGV4T2YoIlxcJGFyZ3VtZW50c1xcJCIpCnE9cy5pbmRleE9mKCJc
-XCRhcmd1bWVudHNFeHByXFwkIikKcD1zLmluZGV4T2YoIlxcJGV4cHJcXCQiKQpvPXMuaW5kZXhPZigi
-XFwkbWV0aG9kXFwkIikKbj1zLmluZGV4T2YoIlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBILmY5
-KGEucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzXFxcXFxcJCIsImciKSwiKCg/Onh8
-W154XSkqKSIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwkIiwi
-ZyIpLCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkZXhwclxcXFxcXCQi
-LCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRtZXRob2RcXFxc
-XFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkcmVjZWl2
-ZXJcXFxcXFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIikscixxLHAsbyxuKX0sClM3OmZ1bmN0aW9uKGEp
-e3JldHVybiBmdW5jdGlvbigkZXhwciQpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0
-cnl7JGV4cHIkLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2Fn
-ZX19KGEpfSwKTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4k
-bWV0aG9kJH1jYXRjaChzKXtyZXR1cm4gcy5tZXNzYWdlfX0oYSl9LApUMzpmdW5jdGlvbihhLGIpe3Zh
-ciBzPWI9PW51bGwscj1zP251bGw6Yi5tZXRob2QKcmV0dXJuIG5ldyBILmF6KGEscixzP251bGw6Yi5y
-ZWNlaXZlcil9LApSdTpmdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBuZXcgSC50ZShhKQppZihh
-IGluc3RhbmNlb2YgSC5icSlyZXR1cm4gSC50VyhhLHQuSy5hKGEuYSkpCmlmKHR5cGVvZiBhIT09Im9i
-amVjdCIpcmV0dXJuIGEKaWYoImRhcnRFeGNlcHRpb24iIGluIGEpcmV0dXJuIEgudFcoYSxhLmRhcnRF
-eGNlcHRpb24pCnJldHVybiBILnRsKGEpfSwKdFc6ZnVuY3Rpb24oYSxiKXtpZih0Lm0uYihiKSlpZihi
-LiR0aHJvd25Kc0Vycm9yPT1udWxsKWIuJHRocm93bkpzRXJyb3I9YQpyZXR1cm4gYn0sCnRsOmZ1bmN0
-aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsCmlmKCEoIm1lc3NhZ2Ui
-IGluIGEpKXJldHVybiBhCnM9YS5tZXNzYWdlCmlmKCJudW1iZXIiIGluIGEmJnR5cGVvZiBhLm51bWJl
-cj09Im51bWJlciIpe3I9YS5udW1iZXIKcT1yJjY1NTM1CmlmKChDLmpuLndHKHIsMTYpJjgxOTEpPT09
-MTApc3dpdGNoKHEpe2Nhc2UgNDM4OnJldHVybiBILnRXKGEsSC5UMyhILkVqKHMpKyIgKEVycm9yICIr
-cSsiKSIsZSkpCmNhc2UgNDQ1OmNhc2UgNTAwNzpwPUguRWoocykrIiAoRXJyb3IgIitxKyIpIgpyZXR1
-cm4gSC50VyhhLG5ldyBILlcwKHAsZSkpfX1pZihhIGluc3RhbmNlb2YgVHlwZUVycm9yKXtvPSQuU24o
-KQpuPSQubHEoKQptPSQuTjkoKQpsPSQuaUkoKQprPSQuVU4oKQpqPSQuWmgoKQppPSQuck4oKQokLmMz
-KCkKaD0kLkhLKCkKZz0kLnIxKCkKZj1vLnFTKHMpCmlmKGYhPW51bGwpcmV0dXJuIEgudFcoYSxILlQz
-KEgubihzKSxmKSkKZWxzZXtmPW4ucVMocykKaWYoZiE9bnVsbCl7Zi5tZXRob2Q9ImNhbGwiCnJldHVy
-biBILnRXKGEsSC5UMyhILm4ocyksZikpfWVsc2V7Zj1tLnFTKHMpCmlmKGY9PW51bGwpe2Y9bC5xUyhz
-KQppZihmPT1udWxsKXtmPWsucVMocykKaWYoZj09bnVsbCl7Zj1qLnFTKHMpCmlmKGY9PW51bGwpe2Y9
-aS5xUyhzKQppZihmPT1udWxsKXtmPWwucVMocykKaWYoZj09bnVsbCl7Zj1oLnFTKHMpCmlmKGY9PW51
-bGwpe2Y9Zy5xUyhzKQpwPWYhPW51bGx9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBw
-PSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwCmlmKHApe0gubihzKQpyZXR1cm4gSC50Vyhh
-LG5ldyBILlcwKHMsZj09bnVsbD9lOmYubWV0aG9kKSl9fX1yZXR1cm4gSC50VyhhLG5ldyBILnZWKHR5
-cGVvZiBzPT0ic3RyaW5nIj9zOiIiKSl9aWYoYSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe2lmKHR5cGVv
-ZiBzPT0ic3RyaW5nIiYmcy5pbmRleE9mKCJjYWxsIHN0YWNrIikhPT0tMSlyZXR1cm4gbmV3IFAuS1ko
-KQpzPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gU3RyaW5nKGIpfWNhdGNoKGQpe31yZXR1cm4gbnVsbH0o
-YSkKcmV0dXJuIEgudFcoYSxuZXcgUC5BVCghMSxlLGUsdHlwZW9mIHM9PSJzdHJpbmciP3MucmVwbGFj
-ZSgvXlJhbmdlRXJyb3I6XHMqLywiIik6cykpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9yPT0iZnVuY3Rp
-b24iJiZhIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcilpZih0eXBlb2Ygcz09InN0cmluZyImJnM9PT0i
-dG9vIG11Y2ggcmVjdXJzaW9uIilyZXR1cm4gbmV3IFAuS1koKQpyZXR1cm4gYX0sCnRzOmZ1bmN0aW9u
-KGEpe3ZhciBzCmlmKGEgaW5zdGFuY2VvZiBILmJxKXJldHVybiBhLmIKaWYoYT09bnVsbClyZXR1cm4g
-bmV3IEguWE8oYSkKcz1hLiRjYWNoZWRUcmFjZQppZihzIT1udWxsKXJldHVybiBzCnJldHVybiBhLiRj
-YWNoZWRUcmFjZT1uZXcgSC5YTyhhKX0sCkI3OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHA9YS5sZW5n
-dGgKZm9yKHM9MDtzPHA7cz1xKXtyPXMrMQpxPXIrMQpiLlk1KDAsYVtzXSxhW3JdKX1yZXR1cm4gYn0s
-CmZ0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0LlkuYShhKQpzd2l0Y2goSC5JWihiKSl7Y2FzZSAwOnJl
-dHVybiBhLiQwKCkKY2FzZSAxOnJldHVybiBhLiQxKGMpCmNhc2UgMjpyZXR1cm4gYS4kMihjLGQpCmNh
-c2UgMzpyZXR1cm4gYS4kMyhjLGQsZSkKY2FzZSA0OnJldHVybiBhLiQ0KGMsZCxlLGYpfXRocm93IEgu
-YihuZXcgUC5DRCgiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igd3JhcHBlZCBjbG9z
-dXJlIikpfSwKdFI6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCnM9YS4k
-aWRlbnRpdHkKaWYoISFzKXJldHVybiBzCnM9ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBmdW5jdGlvbihm
-LGcsaCxpKXtyZXR1cm4gZShjLGQsZixnLGgsaSl9fShhLGIsSC5mdCkKYS4kaWRlbnRpdHk9cwpyZXR1
-cm4gc30sCmlBOmZ1bmN0aW9uKGEyKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPWEyLmNvLGg9YTIu
-aVMsZz1hMi5pSSxmPWEyLm5EQSxlPWEyLmFJLGQ9YTIuZnMsYz1hMi5jcyxiPWRbMF0sYT1jWzBdLGEw
-PWlbYl0sYTE9YTIuZlQKYTEudG9TdHJpbmcKcz1oP09iamVjdC5jcmVhdGUobmV3IEguengoKS5jb25z
-dHJ1Y3Rvci5wcm90b3R5cGUpOk9iamVjdC5jcmVhdGUobmV3IEguclQobnVsbCxudWxsKS5jb25zdHJ1
-Y3Rvci5wcm90b3R5cGUpCnMuJGluaXRpYWxpemU9cy5jb25zdHJ1Y3RvcgppZihoKXI9ZnVuY3Rpb24g
-c3RhdGljX3RlYXJfb2ZmKCl7dGhpcy4kaW5pdGlhbGl6ZSgpfQplbHNle3E9JC55agppZih0eXBlb2Yg
-cSE9PSJudW1iZXIiKXJldHVybiBxLmgoKQokLnlqPXErMQpxPW5ldyBGdW5jdGlvbigiYSxiIitxLCJ0
-aGlzLiRpbml0aWFsaXplKGEsYiIrcSsiKSIpCnI9cX1zLmNvbnN0cnVjdG9yPXIKci5wcm90b3R5cGU9
-cwpzLiRfbmFtZT1iCnMuJF90YXJnZXQ9YTAKcT0haAppZihxKXA9SC5ieChiLGEwLGcsZikKZWxzZXtz
-LiRzdGF0aWNfbmFtZT1iCnA9YTB9cy4kUz1ILmltKGExLGgsZykKc1thXT1wCmZvcihvPXAsbj0xO248
-ZC5sZW5ndGg7KytuKXttPWRbbl0KaWYodHlwZW9mIG09PSJzdHJpbmciKXtsPWlbbV0Kaz1tCm09bH1l
-bHNlIGs9IiIKaj1jW25dCmlmKGohPW51bGwpe2lmKHEpbT1ILmJ4KGssbSxnLGYpCnNbal09bX1pZihu
-PT09ZSlvPW19cy4kQz1vCnMuJFI9YTIuckMKcy4kRD1hMi5kVgpyZXR1cm4gcn0sCmltOmZ1bmN0aW9u
-KGEsYixjKXt2YXIgcwppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGZ1bmN0aW9uKGQsZSl7cmV0
-dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGQoZSl9fShILkJwLGEpCmlmKHR5cGVvZiBhPT0ic3RyaW5nIil7
-aWYoYil0aHJvdyBILmIoIkNhbm5vdCBjb21wdXRlIHNpZ25hdHVyZSBmb3Igc3RhdGljIHRlYXJvZmYu
-IikKcz1jP0guUFc6SC5UbgpyZXR1cm4gZnVuY3Rpb24oZCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1
-cm4gZSh0aGlzLGQpfX0oYSxzKX10aHJvdyBILmIoIkVycm9yIGluIGZ1bmN0aW9uVHlwZSBvZiB0ZWFy
-b2ZmIil9LAp2cTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcz1ILkRWCnN3aXRjaChiPy0xOmEpe2Nhc2Ug
-MDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKVtlXSgp
-fX0oYyxzKQpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcpe3JldHVy
-biBmKHRoaXMpW2VdKGcpfX0oYyxzKQpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1
-bmN0aW9uKGcsaCl7cmV0dXJuIGYodGhpcylbZV0oZyxoKX19KGMscykKY2FzZSAzOnJldHVybiBmdW5j
-dGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSl7cmV0dXJuIGYodGhpcylbZV0oZyxoLGkpfX0o
-YyxzKQpjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpLGope3Jl
-dHVybiBmKHRoaXMpW2VdKGcsaCxpLGopfX0oYyxzKQpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKGUsZil7
-cmV0dXJuIGZ1bmN0aW9uKGcsaCxpLGosayl7cmV0dXJuIGYodGhpcylbZV0oZyxoLGksaixrKX19KGMs
-cykKZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5h
-cHBseShmKHRoaXMpLGFyZ3VtZW50cyl9fShkLHMpfX0sCmJ4OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBz
-LHIscSxwLG8KaWYoYylyZXR1cm4gSC5IZihhLGIsZCkKcz1iLmxlbmd0aApyPWR8fHM+PTI3CmlmKHIp
-cmV0dXJuIEgudnEocyxkLGEsYikKaWYocz09PTApe3I9JC55agppZih0eXBlb2YgciE9PSJudW1iZXIi
-KXJldHVybiByLmgoKQokLnlqPXIrMQpxPSJzZWxmIityCnI9InJldHVybiBmdW5jdGlvbigpe3ZhciAi
-K3ErIiA9IHRoaXMuIgpwPSQuV1cKcmV0dXJuIG5ldyBGdW5jdGlvbihyKyhwPT1udWxsPyQuV1c9SC5t
-OSgic2VsZiIpOnApKyI7cmV0dXJuICIrcSsiLiIrYSsiKCk7fSIpKCl9bz0iYWJjZGVmZ2hpamtsbW5v
-cHFyc3R1dnd4eXoiLnNwbGl0KCIiKS5zcGxpY2UoMCxzKS5qb2luKCIsIikKcj0kLnlqCmlmKHR5cGVv
-ZiByIT09Im51bWJlciIpcmV0dXJuIHIuaCgpCiQueWo9cisxCm8rPXIKcj0icmV0dXJuIGZ1bmN0aW9u
-KCIrbysiKXtyZXR1cm4gdGhpcy4iCnA9JC5XVwpyZXR1cm4gbmV3IEZ1bmN0aW9uKHIrKHA9PW51bGw/
-JC5XVz1ILm05KCJzZWxmIik6cCkrIi4iK2ErIigiK28rIik7fSIpKCl9LApaNDpmdW5jdGlvbihhLGIs
-YyxkKXt2YXIgcz1ILkRWLHI9SC55Uwpzd2l0Y2goYj8tMTphKXtjYXNlIDA6dGhyb3cgSC5iKG5ldyBI
-LkVxKCJJbnRlcmNlcHRlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4iKSkKY2FzZSAxOnJldHVy
-biBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlz
-KSl9fShjLHMscikKY2FzZSAyOnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgp
-e3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCl9fShjLHMscikKY2FzZSAzOnJldHVybiBmdW5jdGlv
-bihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGkp
-fX0oYyxzLHIpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGks
-ail7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksail9fShjLHMscikKY2FzZSA1OnJldHVybiBm
-dW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqLGspe3JldHVybiBmKHRoaXMpW2VdKGco
-dGhpcyksaCxpLGosayl9fShjLHMscikKY2FzZSA2OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJu
-IGZ1bmN0aW9uKGgsaSxqLGssbCl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksaixrLGwpfX0o
-YyxzLHIpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsZixnLGgpe3JldHVybiBmdW5jdGlvbigpe2g9
-W2codGhpcyldCkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsYXJndW1lbnRzKQpyZXR1cm4gZS5h
-cHBseShmKHRoaXMpLGgpfX0oZCxzLHIpfX0sCkhmOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscCxv
-LG49JC5XVwppZihuPT1udWxsKW49JC5XVz1ILm05KCJzZWxmIikKcz0kLmkwCmlmKHM9PW51bGwpcz0k
-LmkwPUgubTkoInJlY2VpdmVyIikKcj1iLmxlbmd0aApxPWN8fHI+PTI4CmlmKHEpcmV0dXJuIEguWjQo
-cixjLGEsYikKaWYocj09PTEpe3E9InJldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLiIrbisiLiIr
-YSsiKHRoaXMuIitzKyIpOyIKcD0kLnlqCmlmKHR5cGVvZiBwIT09Im51bWJlciIpcmV0dXJuIHAuaCgp
-CiQueWo9cCsxCnJldHVybiBuZXcgRnVuY3Rpb24ocStwKyJ9IikoKX1vPSJhYmNkZWZnaGlqa2xtbm9w
-cXJzdHV2d3h5eiIuc3BsaXQoIiIpLnNwbGljZSgwLHItMSkuam9pbigiLCIpCnE9InJldHVybiBmdW5j
-dGlvbigiK28rIil7cmV0dXJuIHRoaXMuIituKyIuIithKyIodGhpcy4iK3MrIiwgIitvKyIpOyIKcD0k
-LnlqCmlmKHR5cGVvZiBwIT09Im51bWJlciIpcmV0dXJuIHAuaCgpCiQueWo9cCsxCnJldHVybiBuZXcg
-RnVuY3Rpb24ocStwKyJ9IikoKX0sClUyOmZ1bmN0aW9uKGEpe3JldHVybiBILmlBKGEpfSwKVG46ZnVu
-Y3Rpb24oYSxiKXtyZXR1cm4gSC5jRSh2LnR5cGVVbml2ZXJzZSxILnpLKGEuYSksYil9LApQVzpmdW5j
-dGlvbihhLGIpe3JldHVybiBILmNFKHYudHlwZVVuaXZlcnNlLEgueksoYS5iKSxiKX0sCkRWOmZ1bmN0
-aW9uKGEpe3JldHVybiBhLmF9LAp5UzpmdW5jdGlvbihhKXtyZXR1cm4gYS5ifSwKbTk6ZnVuY3Rpb24o
-YSl7dmFyIHMscixxLHA9bmV3IEguclQoInNlbGYiLCJyZWNlaXZlciIpLG89Si5FcChPYmplY3QuZ2V0
-T3duUHJvcGVydHlOYW1lcyhwKSx0LlgpCmZvcihzPW8ubGVuZ3RoLHI9MDtyPHM7KytyKXtxPW9bcl0K
-aWYocFtxXT09PWEpcmV0dXJuIHF9dGhyb3cgSC5iKFAueFkoIkZpZWxkIG5hbWUgIithKyIgbm90IGZv
-dW5kLiIpKX0sCm9UOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpSC5mTygiYm9vbGVhbiBleHByZXNzaW9u
-IG11c3Qgbm90IGJlIG51bGwiKQpyZXR1cm4gYX0sCmZPOmZ1bmN0aW9uKGEpe3Rocm93IEguYihuZXcg
-SC5rWShhKSl9LAphZzpmdW5jdGlvbihhKXt0aHJvdyBILmIobmV3IFAucChhKSl9LApZZzpmdW5jdGlv
-bihhKXtyZXR1cm4gdi5nZXRJc29sYXRlVGFnKGEpfSwKaXc6ZnVuY3Rpb24oYSxiLGMpe09iamVjdC5k
-ZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOmMsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNv
-bmZpZ3VyYWJsZTp0cnVlfSl9LAp3MzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvLG49SC5uKCQuTkYu
-JDEoYSkpLG09JC5ud1tuXQppZihtIT1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LmRpc3Bh
-dGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25m
-aWd1cmFibGU6dHJ1ZX0pCnJldHVybiBtLml9cz0kLnZ2W25dCmlmKHMhPW51bGwpcmV0dXJuIHMKcj12
-LmludGVyY2VwdG9yc0J5VGFnW25dCmlmKHI9PW51bGwpe3E9SC5rKCQuVFguJDIoYSxuKSkKaWYocSE9
-bnVsbCl7bT0kLm53W3FdCmlmKG0hPW51bGwpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHYuZGlzcGF0
-Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZp
-Z3VyYWJsZTp0cnVlfSkKcmV0dXJuIG0uaX1zPSQudnZbcV0KaWYocyE9bnVsbClyZXR1cm4gcwpyPXYu
-aW50ZXJjZXB0b3JzQnlUYWdbcV0Kbj1xfX1pZihyPT1udWxsKXJldHVybiBudWxsCnM9ci5wcm90b3R5
-cGUKcD1uWzBdCmlmKHA9PT0iISIpe209SC5WYShzKQokLm53W25dPW0KT2JqZWN0LmRlZmluZVByb3Bl
-cnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6bSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRh
-YmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gbS5pfWlmKHA9PT0ifiIpeyQudnZbbl09
-cwpyZXR1cm4gc31pZihwPT09Ii0iKXtvPUguVmEocykKT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVj
-dC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpvLGVudW1lcmFi
-bGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBvLml9aWYocD09
-PSIrIilyZXR1cm4gSC5MYyhhLHMpCmlmKHA9PT0iKiIpdGhyb3cgSC5iKFAuU1kobikpCmlmKHYubGVh
-ZlRhZ3Nbbl09PT10cnVlKXtvPUguVmEocykKT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQ
-cm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFs
-c2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBvLml9ZWxzZSByZXR1cm4g
-SC5MYyhhLHMpfSwKTGM6ZnVuY3Rpb24oYSxiKXt2YXIgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkK
-T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6Si5RdShi
-LHMsbnVsbCxudWxsKSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRy
-dWV9KQpyZXR1cm4gYn0sClZhOmZ1bmN0aW9uKGEpe3JldHVybiBKLlF1KGEsITEsbnVsbCwhIWEuJGlY
-ail9LApWRjpmdW5jdGlvbihhLGIsYyl7dmFyIHM9Yi5wcm90b3R5cGUKaWYodi5sZWFmVGFnc1thXT09
-PXRydWUpcmV0dXJuIEguVmEocykKZWxzZSByZXR1cm4gSi5RdShzLGMsbnVsbCxudWxsKX0sClhEOmZ1
-bmN0aW9uKCl7aWYoITA9PT0kLkJ2KXJldHVybgokLkJ2PSEwCkguWjEoKX0sCloxOmZ1bmN0aW9uKCl7
-dmFyIHMscixxLHAsbyxuLG0sbAokLm53PU9iamVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3Jl
-YXRlKG51bGwpCkgua08oKQpzPXYuaW50ZXJjZXB0b3JzQnlUYWcKcj1PYmplY3QuZ2V0T3duUHJvcGVy
-dHlOYW1lcyhzKQppZih0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIil7d2luZG93CnE9ZnVuY3Rpb24o
-KXt9CmZvcihwPTA7cDxyLmxlbmd0aDsrK3Ape289cltwXQpuPSQueDcuJDEobykKaWYobiE9bnVsbCl7
-bT1ILlZGKG8sc1tvXSxuKQppZihtIT1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobix2LmRpc3Bh
-dGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25m
-aWd1cmFibGU6dHJ1ZX0pCnEucHJvdG90eXBlPW59fX19Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCl7bz1y
-W3BdCmlmKC9eW0EtWmEtel9dLy50ZXN0KG8pKXtsPXNbb10Kc1siISIrb109bApzWyJ+IitvXT1sCnNb
-Ii0iK29dPWwKc1siKyIrb109bApzWyIqIitvXT1sfX19LAprTzpmdW5jdGlvbigpe3ZhciBzLHIscSxw
-LG8sbixtPUMuWXEoKQptPUgudWQoQy5LVSxILnVkKEMuZlEsSC51ZChDLmk3LEgudWQoQy5pNyxILnVk
-KEMueGksSC51ZChDLmRrLEgudWQoQy53YihDLk80KSxtKSkpKSkpKQppZih0eXBlb2YgZGFydE5hdGl2
-ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lciE9InVuZGVmaW5lZCIpe3M9ZGFydE5hdGl2ZURpc3BhdGNo
-SG9va3NUcmFuc2Zvcm1lcgppZih0eXBlb2Ygcz09ImZ1bmN0aW9uIilzPVtzXQppZihzLmNvbnN0cnVj
-dG9yPT1BcnJheSlmb3Iocj0wO3I8cy5sZW5ndGg7KytyKXtxPXNbcl0KaWYodHlwZW9mIHE9PSJmdW5j
-dGlvbiIpbT1xKG0pfHxtfX1wPW0uZ2V0VGFnCm89bS5nZXRVbmtub3duVGFnCm49bS5wcm90b3R5cGVG
-b3JUYWcKJC5ORj1uZXcgSC5kQyhwKQokLlRYPW5ldyBILndOKG8pCiQueDc9bmV3IEguVlgobil9LAp1
-ZDpmdW5jdGlvbihhLGIpe3JldHVybiBhKGIpfHxifSwKdjQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3Zh
-ciBzPWI/Im0iOiIiLHI9Yz8iIjoiaSIscT1kPyJ1IjoiIixwPWU/InMiOiIiLG89Zj8iZyI6IiIsbj1m
-dW5jdGlvbihnLGgpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChnLGgpfWNhdGNoKG0pe3JldHVybiBtfX0o
-YSxzK3IrcStwK28pCmlmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG4KdGhyb3cgSC5iKFAucnIo
-IklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIrU3RyaW5nKG4pKyIpIixhLG51bGwpKX0sClNROmZ1bmN0
-aW9uKGEsYixjKXt2YXIgcwppZih0eXBlb2YgYj09InN0cmluZyIpcmV0dXJuIGEuaW5kZXhPZihiLGMp
-Pj0wCmVsc2UgaWYoYiBpbnN0YW5jZW9mIEguVlIpe3M9Qy54Qi55bihhLGMpCnJldHVybiBiLmIudGVz
-dChzKX1lbHNle3M9Si5GTChiLEMueEIueW4oYSxjKSkKcmV0dXJuIXMuZ2wwKHMpfX0sCkE0OmZ1bmN0
-aW9uKGEpe2lmKGEuaW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEucmVwbGFjZSgvXCQvZywiJCQkJCIp
-CnJldHVybiBhfSwKZUE6ZnVuY3Rpb24oYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSly
-ZXR1cm4gYS5yZXBsYWNlKC9bW1xde30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXM6
-ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUgubk0oYSxiLGMpCnJldHVybiBzfSwKbk06ZnVuY3Rpb24oYSxi
-LGMpe3ZhciBzLHIscSxwCmlmKGI9PT0iIil7aWYoYT09PSIiKXJldHVybiBjCnM9YS5sZW5ndGgKcj0i
-IitjCmZvcihxPTA7cTxzOysrcSlyPXIrYVtxXStjCnJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpy
-fXA9YS5pbmRleE9mKGIsMCkKaWYocDwwKXJldHVybiBhCmlmKGEubGVuZ3RoPDUwMHx8Yy5pbmRleE9m
-KCIkIiwwKT49MClyZXR1cm4gYS5zcGxpdChiKS5qb2luKGMpCnJldHVybiBhLnJlcGxhY2UobmV3IFJl
-Z0V4cChILmVBKGIpLCJnIiksSC5BNChjKSl9LApQRDpmdW5jdGlvbiBQRChhLGIpe3RoaXMuYT1hCnRo
-aXMuJHRpPWJ9LApXVTpmdW5jdGlvbiBXVSgpe30sCkxQOmZ1bmN0aW9uIExQKGEsYixjLGQpe3ZhciBf
-PXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sClhSOmZ1bmN0aW9uIFhSKGEsYil7dGhpcy5h
-PWEKdGhpcy4kdGk9Yn0sCkxJOmZ1bmN0aW9uIExJKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9YQpf
-LmM9YgpfLmQ9YwpfLmU9ZApfLmY9ZX0sCkNqOmZ1bmN0aW9uIENqKGEsYixjKXt0aGlzLmE9YQp0aGlz
-LmI9Ygp0aGlzLmM9Y30sCmY5OmZ1bmN0aW9uIGY5KGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uYT1h
-Cl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKVzA6ZnVuY3Rpb24gVzAoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCmF6OmZ1bmN0aW9uIGF6KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9
-Y30sCnZWOmZ1bmN0aW9uIHZWKGEpe3RoaXMuYT1hfSwKdGU6ZnVuY3Rpb24gdGUoYSl7dGhpcy5hPWF9
-LApicTpmdW5jdGlvbiBicShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWE86ZnVuY3Rpb24gWE8oYSl7
-dGhpcy5hPWEKdGhpcy5iPW51bGx9LApUcDpmdW5jdGlvbiBUcCgpe30sCmxjOmZ1bmN0aW9uIGxjKCl7
-fSwKeng6ZnVuY3Rpb24gengoKXt9LApyVDpmdW5jdGlvbiByVChhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
-fSwKRXE6ZnVuY3Rpb24gRXEoYSl7dGhpcy5hPWF9LAprWTpmdW5jdGlvbiBrWShhKXt0aGlzLmE9YX0s
-CmtyOmZ1bmN0aW9uIGtyKCl7fSwKTjU6ZnVuY3Rpb24gTjUoYSl7dmFyIF89dGhpcwpfLmE9MApfLmY9
-Xy5lPV8uZD1fLmM9Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCnZoOmZ1bmN0aW9uIHZoKGEsYil7dmFy
-IF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9Xy5jPW51bGx9LAppNTpmdW5jdGlvbiBpNShhLGIpe3RoaXMu
-YT1hCnRoaXMuJHRpPWJ9LApONjpmdW5jdGlvbiBONihhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9
-YgpfLmQ9Xy5jPW51bGwKXy4kdGk9Y30sCmRDOmZ1bmN0aW9uIGRDKGEpe3RoaXMuYT1hfSwKd046ZnVu
-Y3Rpb24gd04oYSl7dGhpcy5hPWF9LApWWDpmdW5jdGlvbiBWWChhKXt0aGlzLmE9YX0sClZSOmZ1bmN0
-aW9uIFZSKGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9Xy5jPW51bGx9LApFSzpmdW5jdGlv
-biBFSyhhKXt0aGlzLmI9YX0sCktXOmZ1bmN0aW9uIEtXKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0
-aGlzLmM9Y30sClBiOmZ1bmN0aW9uIFBiKGEsYixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1j
-Cl8uZD1udWxsfSwKdFE6ZnVuY3Rpb24gdFEoYSxiKXt0aGlzLmE9YQp0aGlzLmM9Yn0sCnVuOmZ1bmN0
-aW9uIHVuKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClNkOmZ1bmN0aW9uIFNkKGEs
-YixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1udWxsfSwKWEY6ZnVuY3Rpb24oYSl7
-cmV0dXJuIGF9LApvZDpmdW5jdGlvbihhLGIsYyl7aWYoYT4+PjAhPT1hfHxhPj1jKXRocm93IEguYihI
-LnUoYixhKSl9LApyTTpmdW5jdGlvbihhLGIsYyl7dmFyIHMKaWYoIShhPj4+MCE9PWEpKXM9Yj4+PjAh
-PT1ifHxhPmJ8fGI+YwplbHNlIHM9ITAKaWYocyl0aHJvdyBILmIoSC5hdShhLGIsYykpCnJldHVybiBi
-fSwKRVQ6ZnVuY3Rpb24gRVQoKXt9LApMWjpmdW5jdGlvbiBMWigpe30sCkRnOmZ1bmN0aW9uIERnKCl7
-fSwKUGc6ZnVuY3Rpb24gUGcoKXt9LAp4ajpmdW5jdGlvbiB4aigpe30sCmRFOmZ1bmN0aW9uIGRFKCl7
-fSwKWkE6ZnVuY3Rpb24gWkEoKXt9LApkVDpmdW5jdGlvbiBkVCgpe30sClBxOmZ1bmN0aW9uIFBxKCl7
-fSwKZUU6ZnVuY3Rpb24gZUUoKXt9LApWNjpmdW5jdGlvbiBWNigpe30sClJHOmZ1bmN0aW9uIFJHKCl7
-fSwKVlA6ZnVuY3Rpb24gVlAoKXt9LApXQjpmdW5jdGlvbiBXQigpe30sClpHOmZ1bmN0aW9uIFpHKCl7
-fSwKY3o6ZnVuY3Rpb24oYSxiKXt2YXIgcz1iLmMKcmV0dXJuIHM9PW51bGw/Yi5jPUguQihhLGIueiwh
-MCk6c30sCnhaOmZ1bmN0aW9uKGEsYil7dmFyIHM9Yi5jCnJldHVybiBzPT1udWxsP2IuYz1ILkooYSwi
-YjgiLFtiLnpdKTpzfSwKUTE6ZnVuY3Rpb24oYSl7dmFyIHM9YS55CmlmKHM9PT02fHxzPT09N3x8cz09
-PTgpcmV0dXJuIEguUTEoYS56KQpyZXR1cm4gcz09PTExfHxzPT09MTJ9LAptRDpmdW5jdGlvbihhKXty
-ZXR1cm4gYS5jeX0sCk4wOmZ1bmN0aW9uKGEpe3JldHVybiBILkUodi50eXBlVW5pdmVyc2UsYSwhMSl9
-LApQTDpmdW5jdGlvbihhLGIsYTAsYTEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxk
-LGM9Yi55CnN3aXRjaChjKXtjYXNlIDU6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OnJldHVybiBi
-CmNhc2UgNjpzPWIuegpyPUguUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4gYgpyZXR1cm4gSC5D
-KGEsciwhMCkKY2FzZSA3OnM9Yi56CnI9SC5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJl
-dHVybiBILkIoYSxyLCEwKQpjYXNlIDg6cz1iLnoKcj1ILlBMKGEscyxhMCxhMSkKaWYocj09PXMpcmV0
-dXJuIGIKcmV0dXJuIEguZihhLHIsITApCmNhc2UgOTpxPWIuUQpwPUguYlooYSxxLGEwLGExKQppZihw
-PT09cSlyZXR1cm4gYgpyZXR1cm4gSC5KKGEsYi56LHApCmNhc2UgMTA6bz1iLnoKbj1ILlBMKGEsbyxh
-MCxhMSkKbT1iLlEKbD1ILmJaKGEsbSxhMCxhMSkKaWYobj09PW8mJmw9PT1tKXJldHVybiBiCnJldHVy
-biBILmEoYSxuLGwpCmNhc2UgMTE6az1iLnoKaj1ILlBMKGEsayxhMCxhMSkKaT1iLlEKaD1ILnFUKGEs
-aSxhMCxhMSkKaWYoaj09PWsmJmg9PT1pKXJldHVybiBiCnJldHVybiBILmQoYSxqLGgpCmNhc2UgMTI6
-Zz1iLlEKYTErPWcubGVuZ3RoCmY9SC5iWihhLGcsYTAsYTEpCm89Yi56Cm49SC5QTChhLG8sYTAsYTEp
-CmlmKGY9PT1nJiZuPT09bylyZXR1cm4gYgpyZXR1cm4gSC5EKGEsbixmLCEwKQpjYXNlIDEzOmU9Yi56
-CmlmKGU8YTEpcmV0dXJuIGIKZD1hMFtlLWExXQppZihkPT1udWxsKXJldHVybiBiCnJldHVybiBkCmRl
-ZmF1bHQ6dGhyb3cgSC5iKFAuaFYoIkF0dGVtcHRlZCB0byBzdWJzdGl0dXRlIHVuZXhwZWN0ZWQgUlRJ
-IGtpbmQgIitjKSl9fSwKYlo6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxLHAsbz1iLmxlbmd0aCxu
-PVtdCmZvcihzPSExLHI9MDtyPG87KytyKXtxPWJbcl0KcD1ILlBMKGEscSxjLGQpCmlmKHAhPT1xKXM9
-ITAKbi5wdXNoKHApfXJldHVybiBzP246Yn0sCnZPOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxw
-LG8sbixtPWIubGVuZ3RoLGw9W10KZm9yKHM9ITEscj0wO3I8bTtyKz0zKXtxPWJbcl0KcD1iW3IrMV0K
-bz1iW3IrMl0Kbj1ILlBMKGEsbyxjLGQpCmlmKG4hPT1vKXM9ITAKbC5wdXNoKHEpCmwucHVzaChwKQps
-LnB1c2gobil9cmV0dXJuIHM/bDpifSwKcVQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscj1iLmEscT1I
-LmJaKGEscixjLGQpLHA9Yi5iLG89SC5iWihhLHAsYyxkKSxuPWIuYyxtPUgudk8oYSxuLGMsZCkKaWYo
-cT09PXImJm89PT1wJiZtPT09bilyZXR1cm4gYgpzPW5ldyBILkcoKQpzLmE9cQpzLmI9bwpzLmM9bQpy
-ZXR1cm4gc30sClFJOmZ1bmN0aW9uKGEsYil7YVt2LmFycmF5UnRpXT1iCnJldHVybiBhfSwKSlM6ZnVu
-Y3Rpb24oYSl7dmFyIHM9YS4kUwppZihzIT1udWxsKXtpZih0eXBlb2Ygcz09Im51bWJlciIpcmV0dXJu
-IEguQnAocykKcmV0dXJuIGEuJFMoKX1yZXR1cm4gbnVsbH0sClVlOmZ1bmN0aW9uKGEsYil7dmFyIHMK
-aWYoSC5RMShiKSlpZihhIGluc3RhbmNlb2YgSC5UcCl7cz1ILkpTKGEpCmlmKHMhPW51bGwpcmV0dXJu
-IHN9cmV0dXJuIEgueksoYSl9LAp6SzpmdW5jdGlvbihhKXt2YXIgcwppZihhIGluc3RhbmNlb2YgUC5N
-aCl7cz1hLiR0aQpyZXR1cm4gcyE9bnVsbD9zOkguVlUoYSl9aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1
-cm4gSC50NihhKQpyZXR1cm4gSC5WVShKLmlhKGEpKX0sCnQ2OmZ1bmN0aW9uKGEpe3ZhciBzPWFbdi5h
-cnJheVJ0aV0scj10LmIKaWYocz09bnVsbClyZXR1cm4gcgppZihzLmNvbnN0cnVjdG9yIT09ci5jb25z
-dHJ1Y3RvcilyZXR1cm4gcgpyZXR1cm4gc30sCkxoOmZ1bmN0aW9uKGEpe3ZhciBzPWEuJHRpCnJldHVy
-biBzIT1udWxsP3M6SC5WVShhKX0sClZVOmZ1bmN0aW9uKGEpe3ZhciBzPWEuY29uc3RydWN0b3Iscj1z
-LiRjY2FjaGUKaWYociE9bnVsbClyZXR1cm4gcgpyZXR1cm4gSC5yOShhLHMpfSwKcjk6ZnVuY3Rpb24o
-YSxiKXt2YXIgcz1hIGluc3RhbmNlb2YgSC5UcD9hLl9fcHJvdG9fXy5fX3Byb3RvX18uY29uc3RydWN0
-b3I6YixyPUguYWkodi50eXBlVW5pdmVyc2Uscy5uYW1lKQpiLiRjY2FjaGU9cgpyZXR1cm4gcn0sCkJw
-OmZ1bmN0aW9uKGEpe3ZhciBzLHIscQpILklaKGEpCnM9di50eXBlcwpyPXNbYV0KaWYodHlwZW9mIHI9
-PSJzdHJpbmciKXtxPUguRSh2LnR5cGVVbml2ZXJzZSxyLCExKQpzW2FdPXEKcmV0dXJuIHF9cmV0dXJu
-IHJ9LApKSjpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYobz09PXQuSylyZXR1cm4gSC5S
-RShvLGEsSC5rZSkKaWYoIUguQTgobykpaWYoIShvPT09dC5fKSlzPSExCmVsc2Ugcz0hMAplbHNlIHM9
-ITAKaWYocylyZXR1cm4gSC5SRShvLGEsSC5JdykKcz1vLnkKcj1zPT09Nj9vLno6bwppZihyPT09dC5T
-KXE9SC5vawplbHNlIGlmKHI9PT10LmdSfHxyPT09dC5kaSlxPUguS0gKZWxzZSBpZihyPT09dC5OKXE9
-SC5NTQplbHNlIHE9cj09PXQueT9ILnJROm51bGwKaWYocSE9bnVsbClyZXR1cm4gSC5SRShvLGEscSkK
-aWYoci55PT09OSl7cD1yLnoKaWYoci5RLmV2ZXJ5KEguY2MpKXtvLnI9IiRpIitwCmlmKHA9PT0iek0i
-KXJldHVybiBILlJFKG8sYSxILnlNKQpyZXR1cm4gSC5SRShvLGEsSC50NCl9fWVsc2UgaWYocz09PTcp
-cmV0dXJuIEguUkUobyxhLEguQVEpCnJldHVybiBILlJFKG8sYSxILllPKX0sClJFOmZ1bmN0aW9uKGEs
-YixjKXthLmI9YwpyZXR1cm4gYS5iKGIpfSwKQXU6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlzLHE9SC5P
-egppZighSC5BOChyKSlpZighKHI9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihzKXE9
-SC5obgplbHNlIGlmKHI9PT10LkspcT1ILlRpCmVsc2V7cz1ILmxSKHIpCmlmKHMpcT1ILmw0fXIuYT1x
-CnJldHVybiByLmEoYSl9LApRajpmdW5jdGlvbihhKXt2YXIgcyxyPWEueQppZighSC5BOChhKSlpZigh
-KGE9PT10Ll8pKWlmKCEoYT09PXQuYXcpKWlmKHIhPT03KXM9cj09PTgmJkguUWooYS56KXx8YT09PXQu
-UHx8YT09PXQuVAplbHNlIHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKcmV0dXJuIHN9
-LApZTzpmdW5jdGlvbihhKXt2YXIgcz10aGlzCmlmKGE9PW51bGwpcmV0dXJuIEguUWoocykKcmV0dXJu
-IEguV2Uodi50eXBlVW5pdmVyc2UsSC5VZShhLHMpLG51bGwscyxudWxsKX0sCkFROmZ1bmN0aW9uKGEp
-e2lmKGE9PW51bGwpcmV0dXJuITAKcmV0dXJuIHRoaXMuei5iKGEpfSwKdDQ6ZnVuY3Rpb24oYSl7dmFy
-IHMscj10aGlzCmlmKGE9PW51bGwpcmV0dXJuIEguUWoocikKcz1yLnIKaWYoYSBpbnN0YW5jZW9mIFAu
-TWgpcmV0dXJuISFhW3NdCnJldHVybiEhSi5pYShhKVtzXX0sCnlNOmZ1bmN0aW9uKGEpe3ZhciBzLHI9
-dGhpcwppZihhPT1udWxsKXJldHVybiBILlFqKHIpCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4h
-MQppZihBcnJheS5pc0FycmF5KGEpKXJldHVybiEwCnM9ci5yCmlmKGEgaW5zdGFuY2VvZiBQLk1oKXJl
-dHVybiEhYVtzXQpyZXR1cm4hIUouaWEoYSlbc119LApPejpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMK
-aWYoYT09bnVsbCl7cz1ILmxSKHIpCmlmKHMpcmV0dXJuIGF9ZWxzZSBpZihyLmIoYSkpcmV0dXJuIGEK
-SC5tNChhLHIpfSwKbDQ6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBhCmVs
-c2UgaWYocy5iKGEpKXJldHVybiBhCkgubTQoYSxzKX0sCm00OmZ1bmN0aW9uKGEsYil7dGhyb3cgSC5i
-KEguWmMoSC5XSyhhLEguVWUoYSxiKSxILmRtKGIsbnVsbCkpKSl9LApEaDpmdW5jdGlvbihhLGIsYyxk
-KXt2YXIgcz1udWxsCmlmKEguV2Uodi50eXBlVW5pdmVyc2UsYSxzLGIscykpcmV0dXJuIGEKdGhyb3cg
-SC5iKEguWmMoIlRoZSB0eXBlIGFyZ3VtZW50ICciK0guZG0oYSxzKSsiJyBpcyBub3QgYSBzdWJ0eXBl
-IG9mIHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kICciK0guZG0oYixzKSsiJyBvZiB0eXBlIHZhcmlhYmxl
-ICciK2MrIicgaW4gJyIrZCsiJy4iKSl9LApXSzpmdW5jdGlvbihhLGIsYyl7dmFyIHM9UC5obChhKSxy
-PUguZG0oYj09bnVsbD9ILnpLKGEpOmIsbnVsbCkKcmV0dXJuIHMrIjogdHlwZSAnIityKyInIGlzIG5v
-dCBhIHN1YnR5cGUgb2YgdHlwZSAnIitjKyInIn0sClpjOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5p
-TSgiVHlwZUVycm9yOiAiK2EpfSwKcTpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5pTSgiVHlwZUVy
-cm9yOiAiK0guV0soYSxudWxsLGIpKX0sCmtlOmZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSwKVGk6
-ZnVuY3Rpb24oYSl7aWYoYSE9bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIk9iamVjdCIpKX0s
-Ckl3OmZ1bmN0aW9uKGEpe3JldHVybiEwfSwKaG46ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LApyUTpmdW5j
-dGlvbihhKXtyZXR1cm4hMD09PWF8fCExPT09YX0sCnA4OmZ1bmN0aW9uKGEpe2lmKCEwPT09YSlyZXR1
-cm4hMAppZighMT09PWEpcmV0dXJuITEKdGhyb3cgSC5iKEgucShhLCJib29sIikpfSwKbUw6ZnVuY3Rp
-b24oYSl7aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQppZihhPT1udWxsKXJldHVy
-biBhCnRocm93IEguYihILnEoYSwiYm9vbCIpKX0sCk00OmZ1bmN0aW9uKGEpe2lmKCEwPT09YSlyZXR1
-cm4hMAppZighMT09PWEpcmV0dXJuITEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEs
-ImJvb2w/IikpfSwKclY6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCnRo
-cm93IEguYihILnEoYSwiZG91YmxlIikpfSwKdEY6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1i
-ZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJkb3VibGUiKSl9
-LApRazpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbCly
-ZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsImRvdWJsZT8iKSl9LApvazpmdW5jdGlvbihhKXtyZXR1cm4g
-dHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEpPT09YX0sCklaOmZ1bmN0aW9uKGEpe2lmKHR5
-cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShh
-LCJpbnQiKSl9LAp1UDpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3Io
-YSk9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJpbnQiKSl9
-LApVYzpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hKXJl
-dHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJpbnQ/IikpfSwKS0g6ZnVu
-Y3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ibnVtYmVyIn0sCno1OmZ1bmN0aW9uKGEpe2lmKHR5cGVv
-ZiBhPT0ibnVtYmVyIilyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIm51bSIpKX0sClcxOmZ1bmN0aW9u
-KGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93
-IEguYihILnEoYSwibnVtIikpfSwKY1U6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJl
-dHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJudW0/IikpfSwKTU06ZnVu
-Y3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0sCm46ZnVuY3Rpb24oYSl7aWYodHlwZW9m
-IGE9PSJzdHJpbmciKXJldHVybiBhCnRocm93IEguYihILnEoYSwiU3RyaW5nIikpfSwKaE46ZnVuY3Rp
-b24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhy
-b3cgSC5iKEgucShhLCJTdHJpbmciKSl9LAprOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5n
-IilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEguYihILnEoYSwiU3RyaW5nPyIpKX0s
-CmlvOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxCmZvcihzPSIiLHI9IiIscT0wO3E8YS5sZW5ndGg7Kytx
-LHI9IiwgIilzKz1yK0guZG0oYVtxXSxiKQpyZXR1cm4gc30sCmJJOmZ1bmN0aW9uKGE0LGE1LGE2KXt2
-YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMixhMz0iLCAiCmlm
-KGE2IT1udWxsKXtzPWE2Lmxlbmd0aAppZihhNT09bnVsbCl7YTU9SC5RSShbXSx0LnMpCnI9bnVsbH1l
-bHNlIHI9YTUubGVuZ3RoCnE9YTUubGVuZ3RoCmZvcihwPXM7cD4wOy0tcClDLk5tLmkoYTUsIlQiKyhx
-K3ApKQpmb3Iobz10Llgsbj10Ll8sbT0iPCIsbD0iIixwPTA7cDxzOysrcCxsPWEzKXttKz1sCms9YTUu
-bGVuZ3RoCmo9ay0xLXAKaWYoajwwKXJldHVybiBILk9IKGE1LGopCm09Qy54Qi5oKG0sYTVbal0pCmk9
-YTZbcF0KaD1pLnkKaWYoIShoPT09Mnx8aD09PTN8fGg9PT00fHxoPT09NXx8aT09PW8pKWlmKCEoaT09
-PW4pKWs9ITEKZWxzZSBrPSEwCmVsc2Ugaz0hMAppZighayltKz0iIGV4dGVuZHMgIitILmRtKGksYTUp
-fW0rPSI+In1lbHNle209IiIKcj1udWxsfW89YTQuegpnPWE0LlEKZj1nLmEKZT1mLmxlbmd0aApkPWcu
-YgpjPWQubGVuZ3RoCmI9Zy5jCmE9Yi5sZW5ndGgKYTA9SC5kbShvLGE1KQpmb3IoYTE9IiIsYTI9IiIs
-cD0wO3A8ZTsrK3AsYTI9YTMpYTErPWEyK0guZG0oZltwXSxhNSkKaWYoYz4wKXthMSs9YTIrIlsiCmZv
-cihhMj0iIixwPTA7cDxjOysrcCxhMj1hMylhMSs9YTIrSC5kbShkW3BdLGE1KQphMSs9Il0ifWlmKGE+
-MCl7YTErPWEyKyJ7Igpmb3IoYTI9IiIscD0wO3A8YTtwKz0zLGEyPWEzKXthMSs9YTIKaWYoYltwKzFd
-KWExKz0icmVxdWlyZWQgIgphMSs9SC5kbShiW3ArMl0sYTUpKyIgIitiW3BdfWExKz0ifSJ9aWYociE9
-bnVsbCl7YTUudG9TdHJpbmcKYTUubGVuZ3RoPXJ9cmV0dXJuIG0rIigiK2ExKyIpID0+ICIrYTB9LApk
-bTpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9YS55CmlmKGw9PT01KXJldHVybiJlcmFz
-ZWQiCmlmKGw9PT0yKXJldHVybiJkeW5hbWljIgppZihsPT09MylyZXR1cm4idm9pZCIKaWYobD09PTEp
-cmV0dXJuIk5ldmVyIgppZihsPT09NClyZXR1cm4iYW55IgppZihsPT09Nil7cz1ILmRtKGEueixiKQpy
-ZXR1cm4gc31pZihsPT09Nyl7cj1hLnoKcz1ILmRtKHIsYikKcT1yLnkKcmV0dXJuKHE9PT0xMXx8cT09
-PTEyPyIoIitzKyIpIjpzKSsiPyJ9aWYobD09PTgpcmV0dXJuIkZ1dHVyZU9yPCIrSC5kbShhLnosYikr
-Ij4iCmlmKGw9PT05KXtwPUgubzMoYS56KQpvPWEuUQpyZXR1cm4gby5sZW5ndGghPT0wP3ArKCI8IitI
-LmlvKG8sYikrIj4iKTpwfWlmKGw9PT0xMSlyZXR1cm4gSC5iSShhLGIsbnVsbCkKaWYobD09PTEyKXJl
-dHVybiBILmJJKGEueixiLGEuUSkKaWYobD09PTEzKXtuPWEuegptPWIubGVuZ3RoCm49bS0xLW4KaWYo
-bjwwfHxuPj1tKXJldHVybiBILk9IKGIsbikKcmV0dXJuIGJbbl19cmV0dXJuIj8ifSwKbzM6ZnVuY3Rp
-b24oYSl7dmFyIHMscj12Lm1hbmdsZWRHbG9iYWxOYW1lc1thXQppZihyIT1udWxsKXJldHVybiByCnM9
-Im1pbmlmaWVkOiIrYQpyZXR1cm4gc30sClFvOmZ1bmN0aW9uKGEsYil7dmFyIHM9YS50UltiXQpmb3Io
-O3R5cGVvZiBzPT0ic3RyaW5nIjspcz1hLnRSW3NdCnJldHVybiBzfSwKYWk6ZnVuY3Rpb24oYSxiKXt2
-YXIgcyxyLHEscCxvLG49YS5lVCxtPW5bYl0KaWYobT09bnVsbClyZXR1cm4gSC5FKGEsYiwhMSkKZWxz
-ZSBpZih0eXBlb2YgbT09Im51bWJlciIpe3M9bQpyPUgubShhLDUsIiMiKQpxPVtdCmZvcihwPTA7cDxz
-OysrcClxLnB1c2gocikKbz1ILkooYSxiLHEpCm5bYl09bwpyZXR1cm4gb31lbHNlIHJldHVybiBtfSwK
-eGI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSC5JeChhLnRSLGIpfSwKRkY6ZnVuY3Rpb24oYSxiKXtyZXR1
-cm4gSC5JeChhLmVULGIpfSwKRTpmdW5jdGlvbihhLGIsYyl7dmFyIHMscj1hLmVDLHE9ci5nZXQoYikK
-aWYocSE9bnVsbClyZXR1cm4gcQpzPUguaShILm8oYSxudWxsLGIsYykpCnIuc2V0KGIscykKcmV0dXJu
-IHN9LApjRTpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxPWIuY2gKaWYocT09bnVsbClxPWIuY2g9bmV3
-IE1hcCgpCnM9cS5nZXQoYykKaWYocyE9bnVsbClyZXR1cm4gcwpyPUguaShILm8oYSxiLGMsITApKQpx
-LnNldChjLHIpCnJldHVybiByfSwKdjU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscSxwPWIuY3gKaWYo
-cD09bnVsbClwPWIuY3g9bmV3IE1hcCgpCnM9Yy5jeQpyPXAuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJu
-IHIKcT1ILmEoYSxiLGMueT09PTEwP2MuUTpbY10pCnAuc2V0KHMscSkKcmV0dXJuIHF9LApCRDpmdW5j
-dGlvbihhLGIpe2IuYT1ILkF1CmIuYj1ILkpKCnJldHVybiBifSwKbTpmdW5jdGlvbihhLGIsYyl7dmFy
-IHMscixxPWEuZUMuZ2V0KGMpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1uZXcgSC5KYyhudWxsLG51bGwp
-CnMueT1iCnMuY3k9YwpyPUguQkQoYSxzKQphLmVDLnNldChjLHIpCnJldHVybiByfSwKQzpmdW5jdGlv
-bihhLGIsYyl7dmFyIHMscj1iLmN5KyIqIixxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEK
-cz1ILlo3KGEsYixyLGMpCmEuZUMuc2V0KHIscykKcmV0dXJuIHN9LApaNzpmdW5jdGlvbihhLGIsYyxk
-KXt2YXIgcyxyLHEKaWYoZCl7cz1iLnkKaWYoIUguQTgoYikpcj1iPT09dC5QfHxiPT09dC5UfHxzPT09
-N3x8cz09PTYKZWxzZSByPSEwCmlmKHIpcmV0dXJuIGJ9cT1uZXcgSC5KYyhudWxsLG51bGwpCnEueT02
-CnEuej1iCnEuY3k9YwpyZXR1cm4gSC5CRChhLHEpfSwKQjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscj1i
-LmN5KyI/IixxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1ILmxsKGEsYixyLGMpCmEu
-ZUMuc2V0KHIscykKcmV0dXJuIHN9LApsbDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEscAppZihk
-KXtzPWIueQppZighSC5BOChiKSlpZighKGI9PT10LlB8fGI9PT10LlQpKWlmKHMhPT03KXI9cz09PTgm
-JkgubFIoYi56KQplbHNlIHI9ITAKZWxzZSByPSEwCmVsc2Ugcj0hMAppZihyKXJldHVybiBiCmVsc2Ug
-aWYocz09PTF8fGI9PT10LmF3KXJldHVybiB0LlAKZWxzZSBpZihzPT09Nil7cT1iLnoKaWYocS55PT09
-OCYmSC5sUihxLnopKXJldHVybiBxCmVsc2UgcmV0dXJuIEguY3ooYSxiKX19cD1uZXcgSC5KYyhudWxs
-LG51bGwpCnAueT03CnAuej1iCnAuY3k9YwpyZXR1cm4gSC5CRChhLHApfSwKZjpmdW5jdGlvbihhLGIs
-Yyl7dmFyIHMscj1iLmN5KyIvIixxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1ILmVW
-KGEsYixyLGMpCmEuZUMuc2V0KHIscykKcmV0dXJuIHN9LAplVjpmdW5jdGlvbihhLGIsYyxkKXt2YXIg
-cyxyLHEKaWYoZCl7cz1iLnkKaWYoIUguQTgoYikpaWYoIShiPT09dC5fKSlyPSExCmVsc2Ugcj0hMApl
-bHNlIHI9ITAKaWYocnx8Yj09PXQuSylyZXR1cm4gYgplbHNlIGlmKHM9PT0xKXJldHVybiBILkooYSwi
-YjgiLFtiXSkKZWxzZSBpZihiPT09dC5QfHxiPT09dC5UKXJldHVybiB0LmJHfXE9bmV3IEguSmMobnVs
-bCxudWxsKQpxLnk9OApxLno9YgpxLmN5PWMKcmV0dXJuIEguQkQoYSxxKX0sCkg6ZnVuY3Rpb24oYSxi
-KXt2YXIgcyxyLHE9IiIrYisiXiIscD1hLmVDLmdldChxKQppZihwIT1udWxsKXJldHVybiBwCnM9bmV3
-IEguSmMobnVsbCxudWxsKQpzLnk9MTMKcy56PWIKcy5jeT1xCnI9SC5CRChhLHMpCmEuZUMuc2V0KHEs
-cikKcmV0dXJuIHJ9LApVeDpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1hLmxlbmd0aApmb3Iocz0iIixy
-PSIiLHE9MDtxPHA7KytxLHI9IiwiKXMrPXIrYVtxXS5jeQpyZXR1cm4gc30sClM0OmZ1bmN0aW9uKGEp
-e3ZhciBzLHIscSxwLG8sbixtPWEubGVuZ3RoCmZvcihzPSIiLHI9IiIscT0wO3E8bTtxKz0zLHI9Iiwi
-KXtwPWFbcV0Kbz1hW3ErMV0/IiEiOiI6IgpuPWFbcSsyXS5jeQpzKz1yK3ArbytufXJldHVybiBzfSwK
-SjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHA9YgppZihjLmxlbmd0aCE9PTApcCs9IjwiK0guVXgo
-YykrIj4iCnM9YS5lQy5nZXQocCkKaWYocyE9bnVsbClyZXR1cm4gcwpyPW5ldyBILkpjKG51bGwsbnVs
-bCkKci55PTkKci56PWIKci5RPWMKaWYoYy5sZW5ndGg+MClyLmM9Y1swXQpyLmN5PXAKcT1ILkJEKGEs
-cikKYS5lQy5zZXQocCxxKQpyZXR1cm4gcX0sCmE6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscSxwLG8s
-bgppZihiLnk9PT0xMCl7cz1iLnoKcj1iLlEuY29uY2F0KGMpfWVsc2V7cj1jCnM9Yn1xPXMuY3krKCI7
-PCIrSC5VeChyKSsiPiIpCnA9YS5lQy5nZXQocSkKaWYocCE9bnVsbClyZXR1cm4gcApvPW5ldyBILkpj
-KG51bGwsbnVsbCkKby55PTEwCm8uej1zCm8uUT1yCm8uY3k9cQpuPUguQkQoYSxvKQphLmVDLnNldChx
-LG4pCnJldHVybiBufSwKZDpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHAsbyxuPWIuY3ksbT1jLmEs
-bD1tLmxlbmd0aCxrPWMuYixqPWsubGVuZ3RoLGk9Yy5jLGg9aS5sZW5ndGgsZz0iKCIrSC5VeChtKQpp
-ZihqPjApe3M9bD4wPyIsIjoiIgpyPUguVXgoaykKZys9cysiWyIrcisiXSJ9aWYoaD4wKXtzPWw+MD8i
-LCI6IiIKcj1ILlM0KGkpCmcrPXMrInsiK3IrIn0ifXE9bisoZysiKSIpCnA9YS5lQy5nZXQocSkKaWYo
-cCE9bnVsbClyZXR1cm4gcApvPW5ldyBILkpjKG51bGwsbnVsbCkKby55PTExCm8uej1iCm8uUT1jCm8u
-Y3k9cQpyPUguQkQoYSxvKQphLmVDLnNldChxLHIpCnJldHVybiByfSwKRDpmdW5jdGlvbihhLGIsYyxk
-KXt2YXIgcyxyPWIuY3krKCI8IitILlV4KGMpKyI+IikscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJl
-dHVybiBxCnM9SC5odyhhLGIsYyxyLGQpCmEuZUMuc2V0KHIscykKcmV0dXJuIHN9LApodzpmdW5jdGlv
-bihhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGwKaWYoZSl7cz1jLmxlbmd0aApyPW5ldyBBcnJh
-eShzKQpmb3IocT0wLHA9MDtwPHM7KytwKXtvPWNbcF0KaWYoby55PT09MSl7cltwXT1vOysrcX19aWYo
-cT4wKXtuPUguUEwoYSxiLHIsMCkKbT1ILmJaKGEsYyxyLDApCnJldHVybiBILkQoYSxuLG0sYyE9PW0p
-fX1sPW5ldyBILkpjKG51bGwsbnVsbCkKbC55PTEyCmwuej1iCmwuUT1jCmwuY3k9ZApyZXR1cm4gSC5C
-RChhLGwpfSwKbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm57dTphLGU6YixyOmMsczpbXSxwOjAsbjpk
-fX0sCmk6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPWEucixnPWEucwpmb3Io
-cz1oLmxlbmd0aCxyPTA7cjxzOyl7cT1oLmNoYXJDb2RlQXQocikKaWYocT49NDgmJnE8PTU3KXI9SC5B
-KHIrMSxxLGgsZykKZWxzZSBpZigoKChxfDMyKT4+PjApLTk3JjY1NTM1KTwyNnx8cT09PTk1fHxxPT09
-MzYpcj1ILnQoYSxyLGgsZywhMSkKZWxzZSBpZihxPT09NDYpcj1ILnQoYSxyLGgsZywhMCkKZWxzZXsr
-K3IKc3dpdGNoKHEpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1ODpnLnB1c2goITEpCmJyZWFrCmNhc2UgMzM6
-Zy5wdXNoKCEwKQpicmVhawpjYXNlIDU5OmcucHVzaChILksoYS51LGEuZSxnLnBvcCgpKSkKYnJlYWsK
-Y2FzZSA5NDpnLnB1c2goSC5IKGEudSxnLnBvcCgpKSkKYnJlYWsKY2FzZSAzNTpnLnB1c2goSC5tKGEu
-dSw1LCIjIikpCmJyZWFrCmNhc2UgNjQ6Zy5wdXNoKEgubShhLnUsMiwiQCIpKQpicmVhawpjYXNlIDEy
-NjpnLnB1c2goSC5tKGEudSwzLCJ+IikpCmJyZWFrCmNhc2UgNjA6Zy5wdXNoKGEucCkKYS5wPWcubGVu
-Z3RoCmJyZWFrCmNhc2UgNjI6cD1hLnUKbz1nLnNwbGljZShhLnApCkgucihhLnUsYS5lLG8pCmEucD1n
-LnBvcCgpCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09InN0cmluZyIpZy5wdXNoKEguSihwLG4sbykpCmVs
-c2V7bT1ILksocCxhLmUsbikKc3dpdGNoKG0ueSl7Y2FzZSAxMTpnLnB1c2goSC5EKHAsbSxvLGEubikp
-CmJyZWFrCmRlZmF1bHQ6Zy5wdXNoKEguYShwLG0sbykpCmJyZWFrfX1icmVhawpjYXNlIDM4OkguSShh
-LGcpCmJyZWFrCmNhc2UgNDI6cD1hLnUKZy5wdXNoKEguQyhwLEguSyhwLGEuZSxnLnBvcCgpKSxhLm4p
-KQpicmVhawpjYXNlIDYzOnA9YS51CmcucHVzaChILkIocCxILksocCxhLmUsZy5wb3AoKSksYS5uKSkK
-YnJlYWsKY2FzZSA0NzpwPWEudQpnLnB1c2goSC5mKHAsSC5LKHAsYS5lLGcucG9wKCkpLGEubikpCmJy
-ZWFrCmNhc2UgNDA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgNDE6cD1hLnUKbD1u
-ZXcgSC5HKCkKaz1wLnNFQQpqPXAuc0VBCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09Im51bWJlciIpc3dp
-dGNoKG4pe2Nhc2UtMTprPWcucG9wKCkKYnJlYWsKY2FzZS0yOmo9Zy5wb3AoKQpicmVhawpkZWZhdWx0
-OmcucHVzaChuKQpicmVha31lbHNlIGcucHVzaChuKQpvPWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUs
-bykKYS5wPWcucG9wKCkKbC5hPW8KbC5iPWsKbC5jPWoKZy5wdXNoKEguZChwLEguSyhwLGEuZSxnLnBv
-cCgpKSxsKSkKYnJlYWsKY2FzZSA5MTpnLnB1c2goYS5wKQphLnA9Zy5sZW5ndGgKYnJlYWsKY2FzZSA5
-MzpvPWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkKZy5wdXNoKG8pCmcucHVz
-aCgtMSkKYnJlYWsKY2FzZSAxMjM6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgMTI1
-Om89Zy5zcGxpY2UoYS5wKQpILnkoYS51LGEuZSxvKQphLnA9Zy5wb3AoKQpnLnB1c2gobykKZy5wdXNo
-KC0yKQpicmVhawpkZWZhdWx0OnRocm93IkJhZCBjaGFyYWN0ZXIgIitxfX19aT1nLnBvcCgpCnJldHVy
-biBILksoYS51LGEuZSxpKX0sCkE6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxPWItNDgKZm9yKHM9
-Yy5sZW5ndGg7YTxzOysrYSl7cj1jLmNoYXJDb2RlQXQoYSkKaWYoIShyPj00OCYmcjw9NTcpKWJyZWFr
-CnE9cSoxMCsoci00OCl9ZC5wdXNoKHEpCnJldHVybiBhfSwKdDpmdW5jdGlvbihhLGIsYyxkLGUpe3Zh
-ciBzLHIscSxwLG8sbixtPWIrMQpmb3Iocz1jLmxlbmd0aDttPHM7KyttKXtyPWMuY2hhckNvZGVBdCht
-KQppZihyPT09NDYpe2lmKGUpYnJlYWsKZT0hMH1lbHNle2lmKCEoKCgocnwzMik+Pj4wKS05NyY2NTUz
-NSk8MjZ8fHI9PT05NXx8cj09PTM2KSlxPXI+PTQ4JiZyPD01NwplbHNlIHE9ITAKaWYoIXEpYnJlYWt9
-fXA9Yy5zdWJzdHJpbmcoYixtKQppZihlKXtzPWEudQpvPWEuZQppZihvLnk9PT0xMClvPW8uegpuPUgu
-UW8ocyxvLnopW3BdCmlmKG49PW51bGwpSC52KCdObyAiJytwKyciIGluICInK0gubUQobykrJyInKQpk
-LnB1c2goSC5jRShzLG8sbikpfWVsc2UgZC5wdXNoKHApCnJldHVybiBtfSwKSTpmdW5jdGlvbihhLGIp
+ZXR1cm4gc30sCkhwKGEsYil7dmFyIHMscixxLHAsbyxuPW51bGwsbT0vXlxzKlsrLV0/KCgweFthLWYw
+LTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJC9pLmV4ZWMoYSkKaWYobT09bnVsbClyZXR1cm4gbgpp
+ZigzPj1tLmxlbmd0aClyZXR1cm4gSC5PSChtLDMpCnM9bVszXQppZihiPT1udWxsKXtpZihzIT1udWxs
+KXJldHVybiBwYXJzZUludChhLDEwKQppZihtWzJdIT1udWxsKXJldHVybiBwYXJzZUludChhLDE2KQpy
+ZXR1cm4gbn1pZihiPDJ8fGI+MzYpdGhyb3cgSC5iKFAuVEUoYiwyLDM2LCJyYWRpeCIsbikpCmlmKGI9
+PT0xMCYmcyE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxMCkKaWYoYjwxMHx8cz09bnVsbCl7cj1iPD0x
+MD80NytiOjg2K2IKcT1tWzFdCmZvcihwPXEubGVuZ3RoLG89MDtvPHA7KytvKWlmKChDLnhCLlcocSxv
+KXwzMik+cilyZXR1cm4gbn1yZXR1cm4gcGFyc2VJbnQoYSxiKX0sCmxoKGEpe3JldHVybiBILkg1KGEp
+fSwKSDUoYSl7dmFyIHMscixxLHAKaWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJuIEguZG0oSC56Syhh
+KSxudWxsKQppZihKLmlhKGEpPT09Qy5Pa3x8dC5iSS5iKGEpKXtzPUMuTzQoYSkKcj1zIT09Ik9iamVj
+dCImJnMhPT0iIgppZihyKXJldHVybiBzCnE9YS5jb25zdHJ1Y3RvcgppZih0eXBlb2YgcT09ImZ1bmN0
+aW9uIil7cD1xLm5hbWUKaWYodHlwZW9mIHA9PSJzdHJpbmciKXI9cCE9PSJPYmplY3QiJiZwIT09IiIK
+ZWxzZSByPSExCmlmKHIpcmV0dXJuIHB9fXJldHVybiBILmRtKEgueksoYSksbnVsbCl9LApNMCgpe2lm
+KCEhc2VsZi5sb2NhdGlvbilyZXR1cm4gc2VsZi5sb2NhdGlvbi5ocmVmCnJldHVybiBudWxsfSwKZnco
+YSxiLGMpe3ZhciBzLHIscSxwCmlmKGM8PTUwMCYmYj09PTAmJmM9PT1hLmxlbmd0aClyZXR1cm4gU3Ry
+aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpCmZvcihzPWIscj0iIjtzPGM7cz1xKXtxPXMrNTAw
+CnA9cTxjP3E6YwpyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYS5zdWJhcnJheShzLHAp
+KX1yZXR1cm4gcn0sCkx3KGEpe3ZhciBzCmlmKDA8PWEpe2lmKGE8PTY1NTM1KXJldHVybiBTdHJpbmcu
+ZnJvbUNoYXJDb2RlKGEpCmlmKGE8PTExMTQxMTEpe3M9YS02NTUzNgpyZXR1cm4gU3RyaW5nLmZyb21D
+aGFyQ29kZSgoQy5qbi53RyhzLDEwKXw1NTI5Nik+Pj4wLHMmMTAyM3w1NjMyMCl9fXRocm93IEguYihQ
+LlRFKGEsMCwxMTE0MTExLG51bGwsbnVsbCkpfSwKbzIoYSl7aWYoYS5kYXRlPT09dm9pZCAwKWEuZGF0
+ZT1uZXcgRGF0ZShhLmEpCnJldHVybiBhLmRhdGV9LAp0SihhKXt2YXIgcz1ILm8yKGEpLmdldEZ1bGxZ
+ZWFyKCkrMApyZXR1cm4gc30sCk5TKGEpe3ZhciBzPUgubzIoYSkuZ2V0TW9udGgoKSsxCnJldHVybiBz
+fSwKakEoYSl7dmFyIHM9SC5vMihhKS5nZXREYXRlKCkrMApyZXR1cm4gc30sCklYKGEpe3ZhciBzPUgu
+bzIoYSkuZ2V0SG91cnMoKSswCnJldHVybiBzfSwKY2goYSl7dmFyIHM9SC5vMihhKS5nZXRNaW51dGVz
+KCkrMApyZXR1cm4gc30sCkpkKGEpe3ZhciBzPUgubzIoYSkuZ2V0U2Vjb25kcygpKzAKcmV0dXJuIHN9
+LApvMShhKXt2YXIgcz1ILm8yKGEpLmdldE1pbGxpc2Vjb25kcygpKzAKcmV0dXJuIHN9LAp6byhhLGIs
+Yyl7dmFyIHMscixxPXt9CnEuYT0wCnM9W10Kcj1bXQpxLmE9Yi5sZW5ndGgKQy5ObS5GVihzLGIpCnEu
+Yj0iIgppZihjIT1udWxsJiYhYy5nbDAoYykpYy5LKDAsbmV3IEguQ2oocSxyLHMpKQoiIitxLmEKcmV0
+dXJuIEouSnkoYSxuZXcgSC5MSShDLlRlLDAscyxyLDApKX0sCkVrKGEsYixjKXt2YXIgcyxyLHE9Yz09
+bnVsbHx8Yy5nbDAoYykKaWYocSl7cz1iLmxlbmd0aAppZihzPT09MCl7aWYoISFhLiQwKXJldHVybiBh
+LiQwKCl9ZWxzZSBpZihzPT09MSl7aWYoISFhLiQxKXJldHVybiBhLiQxKGJbMF0pfWVsc2UgaWYocz09
+PTIpe2lmKCEhYS4kMilyZXR1cm4gYS4kMihiWzBdLGJbMV0pfWVsc2UgaWYocz09PTMpe2lmKCEhYS4k
+MylyZXR1cm4gYS4kMyhiWzBdLGJbMV0sYlsyXSl9ZWxzZSBpZihzPT09NCl7aWYoISFhLiQ0KXJldHVy
+biBhLiQ0KGJbMF0sYlsxXSxiWzJdLGJbM10pfWVsc2UgaWYocz09PTUpaWYoISFhLiQ1KXJldHVybiBh
+LiQ1KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSkKcj1hWyIiKyIkIitzXQppZihyIT1udWxsKXJldHVy
+biByLmFwcGx5KGEsYil9cmV0dXJuIEguWlQoYSxiLGMpfSwKWlQoYSxiLGMpe3ZhciBzLHIscSxwLG8s
+bixtLGwsayxqLGksaCxnLGY9Yi5sZW5ndGgsZT1hLiRSCmlmKGY8ZSlyZXR1cm4gSC56byhhLGIsYykK
+cz1hLiRECnI9cz09bnVsbApxPSFyP3MoKTpudWxsCnA9Si5pYShhKQpvPXAuJEMKaWYodHlwZW9mIG89
+PSJzdHJpbmciKW89cFtvXQppZihyKXtpZihjIT1udWxsJiZjLmdvcihjKSlyZXR1cm4gSC56byhhLGIs
+YykKaWYoZj09PWUpcmV0dXJuIG8uYXBwbHkoYSxiKQpyZXR1cm4gSC56byhhLGIsYyl9aWYoQXJyYXku
+aXNBcnJheShxKSl7aWYoYyE9bnVsbCYmYy5nb3IoYykpcmV0dXJuIEguem8oYSxiLGMpCm49ZStxLmxl
+bmd0aAppZihmPm4pcmV0dXJuIEguem8oYSxiLG51bGwpCmlmKGY8bil7bT1xLnNsaWNlKGYtZSkKbD1Q
+LlkxKGIsITAsdC56KQpDLk5tLkZWKGwsbSl9ZWxzZSBsPWIKcmV0dXJuIG8uYXBwbHkoYSxsKX1lbHNl
+e2lmKGY+ZSlyZXR1cm4gSC56byhhLGIsYykKbD1QLlkxKGIsITAsdC56KQprPU9iamVjdC5rZXlzKHEp
+CmlmKGM9PW51bGwpZm9yKHI9ay5sZW5ndGgsaj0wO2o8ay5sZW5ndGg7ay5sZW5ndGg9PT1yfHwoMCxI
+LmxrKShrKSwrK2ope2k9cVtILm4oa1tqXSldCmlmKEMuTnY9PT1pKXJldHVybiBILnpvKGEsbCxjKQpD
+Lk5tLmkobCxpKX1lbHNle2ZvcihyPWsubGVuZ3RoLGg9MCxqPTA7ajxrLmxlbmd0aDtrLmxlbmd0aD09
+PXJ8fCgwLEgubGspKGspLCsrail7Zz1ILm4oa1tqXSkKaWYoYy54NChnKSl7KytoCkMuTm0uaShsLGMu
+cSgwLGcpKX1lbHNle2k9cVtnXQppZihDLk52PT09aSlyZXR1cm4gSC56byhhLGwsYykKQy5ObS5pKGws
+aSl9fWlmKGghPT1jLmdBKGMpKXJldHVybiBILnpvKGEsbCxjKX1yZXR1cm4gby5hcHBseShhLGwpfX0s
+CnBZKGEpe3Rocm93IEguYihILnRMKGEpKX0sCk9IKGEsYil7aWYoYT09bnVsbClKLkhtKGEpCnRocm93
+IEguYihILnUoYSxiKSl9LAp1KGEsYil7dmFyIHMscj0iaW5kZXgiCmlmKCFILm9rKGIpKXJldHVybiBu
+ZXcgUC5BVCghMCxiLHIsbnVsbCkKcz1ILklaKEouSG0oYSkpCmlmKGI8MHx8Yj49cylyZXR1cm4gUC5D
+ZihiLGEscixudWxsLHMpCnJldHVybiBQLk83KGIscil9LAphdShhLGIsYyl7aWYoYT5jKXJldHVybiBQ
+LlRFKGEsMCxjLCJzdGFydCIsbnVsbCkKaWYoYiE9bnVsbClpZihiPGF8fGI+YylyZXR1cm4gUC5URShi
+LGEsYywiZW5kIixudWxsKQpyZXR1cm4gbmV3IFAuQVQoITAsYiwiZW5kIixudWxsKX0sCnRMKGEpe3Jl
+dHVybiBuZXcgUC5BVCghMCxhLG51bGwsbnVsbCl9LApiKGEpe3ZhciBzLHIKaWYoYT09bnVsbClhPW5l
+dyBQLkYoKQpzPW5ldyBFcnJvcigpCnMuZGFydEV4Y2VwdGlvbj1hCnI9SC5oCmlmKCJkZWZpbmVQcm9w
+ZXJ0eSIgaW4gT2JqZWN0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkocywibWVzc2FnZSIse2dldDpyfSkK
+cy5uYW1lPSIifWVsc2Ugcy50b1N0cmluZz1yCnJldHVybiBzfSwKaCgpe3JldHVybiBKLncodGhpcy5k
+YXJ0RXhjZXB0aW9uKX0sCnYoYSl7dGhyb3cgSC5iKGEpfSwKbGsoYSl7dGhyb3cgSC5iKFAuYTQoYSkp
+fSwKY00oYSl7dmFyIHMscixxLHAsbyxuCmE9SC5lQShhLnJlcGxhY2UoU3RyaW5nKHt9KSwiJHJlY2Vp
+dmVyJCIpKQpzPWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHM9PW51bGwpcz1ILlFJKFtd
+LHQucykKcj1zLmluZGV4T2YoIlxcJGFyZ3VtZW50c1xcJCIpCnE9cy5pbmRleE9mKCJcXCRhcmd1bWVu
+dHNFeHByXFwkIikKcD1zLmluZGV4T2YoIlxcJGV4cHJcXCQiKQpvPXMuaW5kZXhPZigiXFwkbWV0aG9k
+XFwkIikKbj1zLmluZGV4T2YoIlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBILmY5KGEucmVwbGFj
+ZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzXFxcXFxcJCIsImciKSwiKCg/Onh8W154XSkqKSIp
+LnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwkIiwiZyIpLCIoKD86
+eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkZXhwclxcXFxcXCQiLCJnIiksIigo
+Pzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRtZXRob2RcXFxcXFwkIiwiZyIp
+LCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkcmVjZWl2ZXJcXFxcXFwk
+IiwiZyIpLCIoKD86eHxbXnhdKSopIikscixxLHAsbyxuKX0sClM3KGEpe3JldHVybiBmdW5jdGlvbigk
+ZXhwciQpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7JGV4cHIkLiRtZXRob2Qk
+KCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KGEpfSwKTWooYSl7cmV0
+dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4kbWV0aG9kJH1jYXRjaChzKXtyZXR1cm4gcy5t
+ZXNzYWdlfX0oYSl9LApUMyhhLGIpe3ZhciBzPWI9PW51bGwscj1zP251bGw6Yi5tZXRob2QKcmV0dXJu
+IG5ldyBILmF6KGEscixzP251bGw6Yi5yZWNlaXZlcil9LApSdShhKXtpZihhPT1udWxsKXJldHVybiBu
+ZXcgSC50ZShhKQppZihhIGluc3RhbmNlb2YgSC5icSlyZXR1cm4gSC50VyhhLHQuSy5hKGEuYSkpCmlm
+KHR5cGVvZiBhIT09Im9iamVjdCIpcmV0dXJuIGEKaWYoImRhcnRFeGNlcHRpb24iIGluIGEpcmV0dXJu
+IEgudFcoYSxhLmRhcnRFeGNlcHRpb24pCnJldHVybiBILnRsKGEpfSwKdFcoYSxiKXtpZih0Lm0uYihi
+KSlpZihiLiR0aHJvd25Kc0Vycm9yPT1udWxsKWIuJHRocm93bkpzRXJyb3I9YQpyZXR1cm4gYn0sCnRs
+KGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsCmlmKCEoIm1lc3NhZ2UiIGlu
+IGEpKXJldHVybiBhCnM9YS5tZXNzYWdlCmlmKCJudW1iZXIiIGluIGEmJnR5cGVvZiBhLm51bWJlcj09
+Im51bWJlciIpe3I9YS5udW1iZXIKcT1yJjY1NTM1CmlmKChDLmpuLndHKHIsMTYpJjgxOTEpPT09MTAp
+c3dpdGNoKHEpe2Nhc2UgNDM4OnJldHVybiBILnRXKGEsSC5UMyhILkVqKHMpKyIgKEVycm9yICIrcSsi
+KSIsZSkpCmNhc2UgNDQ1OmNhc2UgNTAwNzpwPUguRWoocykrIiAoRXJyb3IgIitxKyIpIgpyZXR1cm4g
+SC50VyhhLG5ldyBILlcwKHAsZSkpfX1pZihhIGluc3RhbmNlb2YgVHlwZUVycm9yKXtvPSQuU24oKQpu
+PSQubHEoKQptPSQuTjkoKQpsPSQuaUkoKQprPSQuVU4oKQpqPSQuWmgoKQppPSQuck4oKQokLmMzKCkK
+aD0kLkhLKCkKZz0kLnIxKCkKZj1vLnFTKHMpCmlmKGYhPW51bGwpcmV0dXJuIEgudFcoYSxILlQzKEgu
+bihzKSxmKSkKZWxzZXtmPW4ucVMocykKaWYoZiE9bnVsbCl7Zi5tZXRob2Q9ImNhbGwiCnJldHVybiBI
+LnRXKGEsSC5UMyhILm4ocyksZikpfWVsc2V7Zj1tLnFTKHMpCmlmKGY9PW51bGwpe2Y9bC5xUyhzKQpp
+ZihmPT1udWxsKXtmPWsucVMocykKaWYoZj09bnVsbCl7Zj1qLnFTKHMpCmlmKGY9PW51bGwpe2Y9aS5x
+UyhzKQppZihmPT1udWxsKXtmPWwucVMocykKaWYoZj09bnVsbCl7Zj1oLnFTKHMpCmlmKGY9PW51bGwp
+e2Y9Zy5xUyhzKQpwPWYhPW51bGx9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEw
+fWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwCmlmKHApe0gubihzKQpyZXR1cm4gSC50VyhhLG5l
+dyBILlcwKHMsZj09bnVsbD9lOmYubWV0aG9kKSl9fX1yZXR1cm4gSC50VyhhLG5ldyBILnZWKHR5cGVv
+ZiBzPT0ic3RyaW5nIj9zOiIiKSl9aWYoYSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe2lmKHR5cGVvZiBz
+PT0ic3RyaW5nIiYmcy5pbmRleE9mKCJjYWxsIHN0YWNrIikhPT0tMSlyZXR1cm4gbmV3IFAuS1koKQpz
+PWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gU3RyaW5nKGIpfWNhdGNoKGQpe31yZXR1cm4gbnVsbH0oYSkK
+cmV0dXJuIEgudFcoYSxuZXcgUC5BVCghMSxlLGUsdHlwZW9mIHM9PSJzdHJpbmciP3MucmVwbGFjZSgv
+XlJhbmdlRXJyb3I6XHMqLywiIik6cykpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9yPT0iZnVuY3Rpb24i
+JiZhIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcilpZih0eXBlb2Ygcz09InN0cmluZyImJnM9PT0idG9v
+IG11Y2ggcmVjdXJzaW9uIilyZXR1cm4gbmV3IFAuS1koKQpyZXR1cm4gYX0sCnRzKGEpe3ZhciBzCmlm
+KGEgaW5zdGFuY2VvZiBILmJxKXJldHVybiBhLmIKaWYoYT09bnVsbClyZXR1cm4gbmV3IEguWE8oYSkK
+cz1hLiRjYWNoZWRUcmFjZQppZihzIT1udWxsKXJldHVybiBzCnJldHVybiBhLiRjYWNoZWRUcmFjZT1u
+ZXcgSC5YTyhhKX0sCkNVKGEpe2lmKGE9PW51bGx8fHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gSi5o
+ZihhKQplbHNlIHJldHVybiBILmVRKGEpfSwKQjcoYSxiKXt2YXIgcyxyLHEscD1hLmxlbmd0aApmb3Io
+cz0wO3M8cDtzPXEpe3I9cysxCnE9cisxCmIuWTUoMCxhW3NdLGFbcl0pfXJldHVybiBifSwKZnQoYSxi
+LGMsZCxlLGYpe3QuWS5hKGEpCnN3aXRjaChILklaKGIpKXtjYXNlIDA6cmV0dXJuIGEuJDAoKQpjYXNl
+IDE6cmV0dXJuIGEuJDEoYykKY2FzZSAyOnJldHVybiBhLiQyKGMsZCkKY2FzZSAzOnJldHVybiBhLiQz
+KGMsZCxlKQpjYXNlIDQ6cmV0dXJuIGEuJDQoYyxkLGUsZil9dGhyb3cgSC5iKG5ldyBQLkNEKCJVbnN1
+cHBvcnRlZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB3cmFwcGVkIGNsb3N1cmUiKSl9LAp0UihhLGIp
+e3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKcz1hLiRpZGVudGl0eQppZighIXMpcmV0dXJuIHMK
+cz1mdW5jdGlvbihjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyxoLGkpe3JldHVybiBlKGMsZCxmLGcs
+aCxpKX19KGEsYixILmZ0KQphLiRpZGVudGl0eT1zCnJldHVybiBzfSwKaUEoYTIpe3ZhciBzLHIscSxw
+LG8sbixtLGwsayxqLGk9YTIuY28saD1hMi5pUyxnPWEyLmlJLGY9YTIubkRBLGU9YTIuYUksZD1hMi5m
+cyxjPWEyLmNzLGI9ZFswXSxhPWNbMF0sYTA9aVtiXSxhMT1hMi5mVAphMS50b1N0cmluZwpzPWg/T2Jq
+ZWN0LmNyZWF0ZShuZXcgSC56eCgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSk6T2JqZWN0LmNyZWF0ZShu
+ZXcgSC5yVChudWxsLG51bGwpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkKcy4kaW5pdGlhbGl6ZT1zLmNv
+bnN0cnVjdG9yCmlmKGgpcj1mdW5jdGlvbiBzdGF0aWNfdGVhcl9vZmYoKXt0aGlzLiRpbml0aWFsaXpl
+KCl9CmVsc2V7cT0kLnlqCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJuIHEuaCgpCiQueWo9cSsx
+CnE9bmV3IEZ1bmN0aW9uKCJhLGIiK3EsInRoaXMuJGluaXRpYWxpemUoYSxiIitxKyIpIikKcj1xfXMu
+Y29uc3RydWN0b3I9cgpyLnByb3RvdHlwZT1zCnMuJF9uYW1lPWIKcy4kX3RhcmdldD1hMApxPSFoCmlm
+KHEpcD1ILmJ4KGIsYTAsZyxmKQplbHNle3MuJHN0YXRpY19uYW1lPWIKcD1hMH1zLiRTPUguaW0oYTEs
+aCxnKQpzW2FdPXAKZm9yKG89cCxuPTE7bjxkLmxlbmd0aDsrK24pe209ZFtuXQppZih0eXBlb2YgbT09
+InN0cmluZyIpe2w9aVttXQprPW0KbT1sfWVsc2Ugaz0iIgpqPWNbbl0KaWYoaiE9bnVsbCl7aWYocSlt
+PUguYngoayxtLGcsZikKc1tqXT1tfWlmKG49PT1lKW89bX1zLiRDPW8Kcy4kUj1hMi5yQwpzLiREPWEy
+LmRWCnJldHVybiByfSwKaW0oYSxiLGMpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZih0
+eXBlb2YgYT09InN0cmluZyIpe2lmKGIpdGhyb3cgSC5iKCJDYW5ub3QgY29tcHV0ZSBzaWduYXR1cmUg
+Zm9yIHN0YXRpYyB0ZWFyb2ZmLiIpCnJldHVybiBmdW5jdGlvbihkLGUpe3JldHVybiBmdW5jdGlvbigp
+e3JldHVybiBlKHRoaXMsZCl9fShhLEguVG4pfXRocm93IEguYigiRXJyb3IgaW4gZnVuY3Rpb25UeXBl
+IG9mIHRlYXJvZmYiKX0sCnZxKGEsYixjLGQpe3ZhciBzPUgueVMKc3dpdGNoKGI/LTE6YSl7Y2FzZSAw
+OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpW2VdKCl9
+fShjLHMpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJu
+IGYodGhpcylbZV0oZyl9fShjLHMpCmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVu
+Y3Rpb24oZyxoKXtyZXR1cm4gZih0aGlzKVtlXShnLGgpfX0oYyxzKQpjYXNlIDM6cmV0dXJuIGZ1bmN0
+aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSl9fShj
+LHMpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGksail7cmV0
+dXJuIGYodGhpcylbZV0oZyxoLGksail9fShjLHMpCmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmKXty
+ZXR1cm4gZnVuY3Rpb24oZyxoLGksaixrKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSxqLGspfX0oYyxz
+KQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFw
+cGx5KGYodGhpcyksYXJndW1lbnRzKX19KGQscyl9fSwKYngoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxu
+PSJyZWNlaXZlciIKaWYoYylyZXR1cm4gSC5IZihhLGIsZCkKcz1iLmxlbmd0aApyPWR8fHM+PTI3Cmlm
+KHIpcmV0dXJuIEgudnEocyxkLGEsYikKaWYocz09PTApe3I9JC55agppZih0eXBlb2YgciE9PSJudW1i
+ZXIiKXJldHVybiByLmgoKQokLnlqPXIrMQpxPSJzZWxmIityCnI9InJldHVybiBmdW5jdGlvbigpe3Zh
+ciAiK3ErIiA9IHRoaXMuIgpwPSQuaTAKcmV0dXJuIG5ldyBGdW5jdGlvbihyKyhwPT1udWxsPyQuaTA9
+SC5tOShuKTpwKSsiO3JldHVybiAiK3ErIi4iK2ErIigpO30iKSgpfW89ImFiY2RlZmdoaWprbG1ub3Bx
+cnN0dXZ3eHl6Ii5zcGxpdCgiIikuc3BsaWNlKDAscykuam9pbigiLCIpCnI9JC55agppZih0eXBlb2Yg
+ciE9PSJudW1iZXIiKXJldHVybiByLmgoKQokLnlqPXIrMQpvKz1yCnI9InJldHVybiBmdW5jdGlvbigi
+K28rIil7cmV0dXJuIHRoaXMuIgpwPSQuaTAKcmV0dXJuIG5ldyBGdW5jdGlvbihyKyhwPT1udWxsPyQu
+aTA9SC5tOShuKTpwKSsiLiIrYSsiKCIrbysiKTt9IikoKX0sClo0KGEsYixjLGQpe3ZhciBzPUgueVMs
+cj1ILkFPCnN3aXRjaChiPy0xOmEpe2Nhc2UgMDp0aHJvdyBILmIobmV3IEguRXEoIkludGVyY2VwdGVk
+IGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzLiIpKQpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsZixn
+KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpKX19KGMscixzKQpjYXNl
+IDI6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGYodGhpcylb
+ZV0oZyh0aGlzKSxoKX19KGMscixzKQpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4g
+ZnVuY3Rpb24oaCxpKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSl9fShjLHIscykKY2FzZSA0
+OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqKXtyZXR1cm4gZih0aGlz
+KVtlXShnKHRoaXMpLGgsaSxqKX19KGMscixzKQpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXty
+ZXR1cm4gZnVuY3Rpb24oaCxpLGosayl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksaixrKX19
+KGMscixzKQpjYXNlIDY6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGos
+ayxsKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqLGssbCl9fShjLHIscykKZGVmYXVsdDpy
+ZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbigpe3ZhciBxPVtnKHRoaXMpXQpBcnJh
+eS5wcm90b3R5cGUucHVzaC5hcHBseShxLGFyZ3VtZW50cykKcmV0dXJuIGUuYXBwbHkoZih0aGlzKSxx
+KX19KGQscixzKX19LApIZihhLGIsYyl7dmFyIHMscixxLHAsbyxuPSQuQWwKaWYobj09bnVsbCluPSQu
+QWw9SC5tOSgiaW50ZXJjZXB0b3IiKQpzPSQuaTAKaWYocz09bnVsbClzPSQuaTA9SC5tOSgicmVjZWl2
+ZXIiKQpyPWIubGVuZ3RoCnE9Y3x8cj49MjgKaWYocSlyZXR1cm4gSC5aNChyLGMsYSxiKQppZihyPT09
+MSl7cT0icmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuIituKyIuIithKyIodGhpcy4iK3MrIik7
+IgpwPSQueWoKaWYodHlwZW9mIHAhPT0ibnVtYmVyIilyZXR1cm4gcC5oKCkKJC55aj1wKzEKcmV0dXJu
+IG5ldyBGdW5jdGlvbihxK3ArIn0iKSgpfW89ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxp
+dCgiIikuc3BsaWNlKDAsci0xKS5qb2luKCIsIikKcT0icmV0dXJuIGZ1bmN0aW9uKCIrbysiKXtyZXR1
+cm4gdGhpcy4iK24rIi4iK2ErIih0aGlzLiIrcysiLCAiK28rIik7IgpwPSQueWoKaWYodHlwZW9mIHAh
+PT0ibnVtYmVyIilyZXR1cm4gcC5oKCkKJC55aj1wKzEKcmV0dXJuIG5ldyBGdW5jdGlvbihxK3ArIn0i
+KSgpfSwKVTIoYSl7cmV0dXJuIEguaUEoYSl9LApUbihhLGIpe3JldHVybiBILmNFKHYudHlwZVVuaXZl
+cnNlLEgueksoYS5hKSxiKX0sCnlTKGEpe3JldHVybiBhLmF9LApBTyhhKXtyZXR1cm4gYS5ifSwKbTko
+YSl7dmFyIHMscixxLHA9bmV3IEguclQoInJlY2VpdmVyIiwiaW50ZXJjZXB0b3IiKSxvPUouRXAoT2Jq
+ZWN0LmdldE93blByb3BlcnR5TmFtZXMocCksdC5YKQpmb3Iocz1vLmxlbmd0aCxyPTA7cjxzOysrcil7
+cT1vW3JdCmlmKHBbcV09PT1hKXJldHVybiBxfXRocm93IEguYihQLnhZKCJGaWVsZCBuYW1lICIrYSsi
+IG5vdCBmb3VuZC4iLG51bGwpKX0sCm9UKGEpe2lmKGE9PW51bGwpSC5mTygiYm9vbGVhbiBleHByZXNz
+aW9uIG11c3Qgbm90IGJlIG51bGwiKQpyZXR1cm4gYX0sCmZPKGEpe3Rocm93IEguYihuZXcgSC5rWShh
+KSl9LAphZyhhKXt0aHJvdyBILmIobmV3IFAucChhKSl9LApZZyhhKXtyZXR1cm4gdi5nZXRJc29sYXRl
+VGFnKGEpfSwKaXcoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOmMsZW51bWVy
+YWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSl9LAp3MyhhKXt2YXIgcyxy
+LHEscCxvLG49SC5uKCQuTkYuJDEoYSkpLG09JC5ud1tuXQppZihtIT1udWxsKXtPYmplY3QuZGVmaW5l
+UHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Us
+d3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBtLml9cz0kLnZ2W25dCmlmKHMh
+PW51bGwpcmV0dXJuIHMKcj12LmludGVyY2VwdG9yc0J5VGFnW25dCmlmKHI9PW51bGwpe3E9SC5rKCQu
+VFguJDIoYSxuKSkKaWYocSE9bnVsbCl7bT0kLm53W3FdCmlmKG0hPW51bGwpe09iamVjdC5kZWZpbmVQ
+cm9wZXJ0eShhLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJsZTpmYWxzZSx3
+cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG0uaX1zPSQudnZbcV0KaWYocyE9
+bnVsbClyZXR1cm4gcwpyPXYuaW50ZXJjZXB0b3JzQnlUYWdbcV0Kbj1xfX1pZihyPT1udWxsKXJldHVy
+biBudWxsCnM9ci5wcm90b3R5cGUKcD1uWzBdCmlmKHA9PT0iISIpe209SC5WYShzKQokLm53W25dPW0K
+T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6bSxlbnVt
+ZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gbS5pfWlm
+KHA9PT0ifiIpeyQudnZbbl09cwpyZXR1cm4gc31pZihwPT09Ii0iKXtvPUguVmEocykKT2JqZWN0LmRl
+ZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1l
+LHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0p
+CnJldHVybiBvLml9aWYocD09PSIrIilyZXR1cm4gSC5MYyhhLHMpCmlmKHA9PT0iKiIpdGhyb3cgSC5i
+KFAuU1kobikpCmlmKHYubGVhZlRhZ3Nbbl09PT10cnVlKXtvPUguVmEocykKT2JqZWN0LmRlZmluZVBy
+b3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1
+ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVy
+biBvLml9ZWxzZSByZXR1cm4gSC5MYyhhLHMpfSwKTGMoYSxiKXt2YXIgcz1PYmplY3QuZ2V0UHJvdG90
+eXBlT2YoYSkKT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFs
+dWU6Si5RdShiLHMsbnVsbCxudWxsKSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmln
+dXJhYmxlOnRydWV9KQpyZXR1cm4gYn0sClZhKGEpe3JldHVybiBKLlF1KGEsITEsbnVsbCwhIWEuJGlY
+ail9LApWRihhLGIsYyl7dmFyIHM9Yi5wcm90b3R5cGUKaWYodi5sZWFmVGFnc1thXT09PXRydWUpcmV0
+dXJuIEguVmEocykKZWxzZSByZXR1cm4gSi5RdShzLGMsbnVsbCxudWxsKX0sClhEKCl7aWYoITA9PT0k
+LkJ2KXJldHVybgokLkJ2PSEwCkguWjEoKX0sCloxKCl7dmFyIHMscixxLHAsbyxuLG0sbAokLm53PU9i
+amVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3JlYXRlKG51bGwpCkgua08oKQpzPXYuaW50ZXJj
+ZXB0b3JzQnlUYWcKcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzKQppZih0eXBlb2Ygd2luZG93
+IT0idW5kZWZpbmVkIil7d2luZG93CnE9ZnVuY3Rpb24oKXt9CmZvcihwPTA7cDxyLmxlbmd0aDsrK3Ap
+e289cltwXQpuPSQueDcuJDEobykKaWYobiE9bnVsbCl7bT1ILlZGKG8sc1tvXSxuKQppZihtIT1udWxs
+KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobix2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVu
+dW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnEucHJvdG90eXBl
+PW59fX19Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCl7bz1yW3BdCmlmKC9eW0EtWmEtel9dLy50ZXN0KG8p
+KXtsPXNbb10Kc1siISIrb109bApzWyJ+IitvXT1sCnNbIi0iK29dPWwKc1siKyIrb109bApzWyIqIitv
+XT1sfX19LAprTygpe3ZhciBzLHIscSxwLG8sbixtPUMuWXEoKQptPUgudWQoQy5LVSxILnVkKEMuZlEs
+SC51ZChDLmk3LEgudWQoQy5pNyxILnVkKEMueGksSC51ZChDLmRrLEgudWQoQy53YihDLk80KSxtKSkp
+KSkpKQppZih0eXBlb2YgZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lciE9InVuZGVmaW5l
+ZCIpe3M9ZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lcgppZih0eXBlb2Ygcz09ImZ1bmN0
+aW9uIilzPVtzXQppZihzLmNvbnN0cnVjdG9yPT1BcnJheSlmb3Iocj0wO3I8cy5sZW5ndGg7KytyKXtx
+PXNbcl0KaWYodHlwZW9mIHE9PSJmdW5jdGlvbiIpbT1xKG0pfHxtfX1wPW0uZ2V0VGFnCm89bS5nZXRV
+bmtub3duVGFnCm49bS5wcm90b3R5cGVGb3JUYWcKJC5ORj1uZXcgSC5kQyhwKQokLlRYPW5ldyBILndO
+KG8pCiQueDc9bmV3IEguVlgobil9LAp1ZChhLGIpe3JldHVybiBhKGIpfHxifSwKdjQoYSxiLGMsZCxl
+LGYpe3ZhciBzPWI/Im0iOiIiLHI9Yz8iIjoiaSIscT1kPyJ1IjoiIixwPWU/InMiOiIiLG89Zj8iZyI6
+IiIsbj1mdW5jdGlvbihnLGgpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChnLGgpfWNhdGNoKG0pe3JldHVy
+biBtfX0oYSxzK3IrcStwK28pCmlmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG4KdGhyb3cgSC5i
+KFAucnIoIklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIrU3RyaW5nKG4pKyIpIixhLG51bGwpKX0sClNR
+KGEsYixjKXt2YXIgcwppZih0eXBlb2YgYj09InN0cmluZyIpcmV0dXJuIGEuaW5kZXhPZihiLGMpPj0w
+CmVsc2UgaWYoYiBpbnN0YW5jZW9mIEguVlIpe3M9Qy54Qi55bihhLGMpCnJldHVybiBiLmIudGVzdChz
+KX1lbHNle3M9Si5GTChiLEMueEIueW4oYSxjKSkKcmV0dXJuIXMuZ2wwKHMpfX0sCkE0KGEpe2lmKGEu
+aW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEucmVwbGFjZSgvXCQvZywiJCQkJCIpCnJldHVybiBhfSwK
+ZUEoYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKC9bW1xd
+e30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXMoYSxiLGMpe3ZhciBzPUgubk0oYSxi
+LGMpCnJldHVybiBzfSwKbk0oYSxiLGMpe3ZhciBzLHIscSxwCmlmKGI9PT0iIil7aWYoYT09PSIiKXJl
+dHVybiBjCnM9YS5sZW5ndGgKcj0iIitjCmZvcihxPTA7cTxzOysrcSlyPXIrYVtxXStjCnJldHVybiBy
+LmNoYXJDb2RlQXQoMCk9PTA/cjpyfXA9YS5pbmRleE9mKGIsMCkKaWYocDwwKXJldHVybiBhCmlmKGEu
+bGVuZ3RoPDUwMHx8Yy5pbmRleE9mKCIkIiwwKT49MClyZXR1cm4gYS5zcGxpdChiKS5qb2luKGMpCnJl
+dHVybiBhLnJlcGxhY2UobmV3IFJlZ0V4cChILmVBKGIpLCJnIiksSC5BNChjKSl9LApQRDpmdW5jdGlv
+biBQRChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApXVTpmdW5jdGlvbiBXVSgpe30sCkxQOmZ1bmN0
+aW9uIExQKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sClhSOmZ1
+bmN0aW9uIFhSKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkxJOmZ1bmN0aW9uIExJKGEsYixjLGQs
+ZSl7dmFyIF89dGhpcwpfLmE9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLmY9ZX0sCkNqOmZ1bmN0aW9uIENq
+KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmY5OmZ1bmN0aW9uIGY5KGEsYixjLGQs
+ZSxmKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKVzA6ZnVu
+Y3Rpb24gVzAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmF6OmZ1bmN0aW9uIGF6KGEsYixjKXt0aGlz
+LmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnZWOmZ1bmN0aW9uIHZWKGEpe3RoaXMuYT1hfSwKdGU6ZnVu
+Y3Rpb24gdGUoYSl7dGhpcy5hPWF9LApicTpmdW5jdGlvbiBicShhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
+fSwKWE86ZnVuY3Rpb24gWE8oYSl7dGhpcy5hPWEKdGhpcy5iPW51bGx9LApUcDpmdW5jdGlvbiBUcCgp
+e30sCkF5OmZ1bmN0aW9uIEF5KCl7fSwKRTE6ZnVuY3Rpb24gRTEoKXt9LApsYzpmdW5jdGlvbiBsYygp
+e30sCnp4OmZ1bmN0aW9uIHp4KCl7fSwKclQ6ZnVuY3Rpb24gclQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9
+Yn0sCkVxOmZ1bmN0aW9uIEVxKGEpe3RoaXMuYT1hfSwKa1k6ZnVuY3Rpb24ga1koYSl7dGhpcy5hPWF9
+LAprcjpmdW5jdGlvbiBrcigpe30sCk41OmZ1bmN0aW9uIE41KGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5m
+PV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LAp2aDpmdW5jdGlvbiB2aChhLGIpe3Zh
+ciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKaTU6ZnVuY3Rpb24gaTUoYSxiKXt0aGlz
+LmE9YQp0aGlzLiR0aT1ifSwKTjY6ZnVuY3Rpb24gTjYoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5i
+PWIKXy5kPV8uYz1udWxsCl8uJHRpPWN9LApkQzpmdW5jdGlvbiBkQyhhKXt0aGlzLmE9YX0sCndOOmZ1
+bmN0aW9uIHdOKGEpe3RoaXMuYT1hfSwKVlg6ZnVuY3Rpb24gVlgoYSl7dGhpcy5hPWF9LApWUjpmdW5j
+dGlvbiBWUihhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKRUs6ZnVuY3Rp
+b24gRUsoYSl7dGhpcy5iPWF9LApLVzpmdW5jdGlvbiBLVyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIK
+dGhpcy5jPWN9LApQYjpmdW5jdGlvbiBQYihhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9
+YwpfLmQ9bnVsbH0sCnRROmZ1bmN0aW9uIHRRKGEsYil7dGhpcy5hPWEKdGhpcy5jPWJ9LAp1bjpmdW5j
+dGlvbiB1bihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApTZDpmdW5jdGlvbiBTZChh
+LGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9bnVsbH0sClhGKGEpe3JldHVybiBh
+fSwKb2QoYSxiLGMpe2lmKGE+Pj4wIT09YXx8YT49Yyl0aHJvdyBILmIoSC51KGIsYSkpfSwKck0oYSxi
+LGMpe3ZhciBzCmlmKCEoYT4+PjAhPT1hKSlzPWI+Pj4wIT09Ynx8YT5ifHxiPmMKZWxzZSBzPSEwCmlm
+KHMpdGhyb3cgSC5iKEguYXUoYSxiLGMpKQpyZXR1cm4gYn0sCkVUOmZ1bmN0aW9uIEVUKCl7fSwKTFo6
+ZnVuY3Rpb24gTFooKXt9LApEZzpmdW5jdGlvbiBEZygpe30sClBnOmZ1bmN0aW9uIFBnKCl7fSwKeGo6
+ZnVuY3Rpb24geGooKXt9LApkRTpmdW5jdGlvbiBkRSgpe30sClpBOmZ1bmN0aW9uIFpBKCl7fSwKZFQ6
+ZnVuY3Rpb24gZFQoKXt9LApQcTpmdW5jdGlvbiBQcSgpe30sCmVFOmZ1bmN0aW9uIGVFKCl7fSwKVjY6
+ZnVuY3Rpb24gVjYoKXt9LApSRzpmdW5jdGlvbiBSRygpe30sClZQOmZ1bmN0aW9uIFZQKCl7fSwKV0I6
+ZnVuY3Rpb24gV0IoKXt9LApaRzpmdW5jdGlvbiBaRygpe30sCmN6KGEsYil7dmFyIHM9Yi5jCnJldHVy
+biBzPT1udWxsP2IuYz1ILkIoYSxiLnosITApOnN9LAp4WihhLGIpe3ZhciBzPWIuYwpyZXR1cm4gcz09
+bnVsbD9iLmM9SC5KKGEsImI4IixbYi56XSk6c30sClExKGEpe3ZhciBzPWEueQppZihzPT09Nnx8cz09
+PTd8fHM9PT04KXJldHVybiBILlExKGEueikKcmV0dXJuIHM9PT0xMXx8cz09PTEyfSwKbUQoYSl7cmV0
+dXJuIGEuY3l9LApOMChhKXtyZXR1cm4gSC5FKHYudHlwZVVuaXZlcnNlLGEsITEpfSwKUEwoYSxiLGEw
+LGExKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIueQpzd2l0Y2goYyl7Y2Fz
+ZSA1OmNhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYgpjYXNlIDY6cz1iLnoKcj1ILlBM
+KGEscyxhMCxhMSkKaWYocj09PXMpcmV0dXJuIGIKcmV0dXJuIEguQyhhLHIsITApCmNhc2UgNzpzPWIu
+egpyPUguUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4gYgpyZXR1cm4gSC5CKGEsciwhMCkKY2Fz
+ZSA4OnM9Yi56CnI9SC5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJldHVybiBILmYoYSxy
+LCEwKQpjYXNlIDk6cT1iLlEKcD1ILmJaKGEscSxhMCxhMSkKaWYocD09PXEpcmV0dXJuIGIKcmV0dXJu
+IEguSihhLGIueixwKQpjYXNlIDEwOm89Yi56Cm49SC5QTChhLG8sYTAsYTEpCm09Yi5RCmw9SC5iWihh
+LG0sYTAsYTEpCmlmKG49PT1vJiZsPT09bSlyZXR1cm4gYgpyZXR1cm4gSC5hKGEsbixsKQpjYXNlIDEx
+Oms9Yi56Cmo9SC5QTChhLGssYTAsYTEpCmk9Yi5RCmg9SC5xVChhLGksYTAsYTEpCmlmKGo9PT1rJiZo
+PT09aSlyZXR1cm4gYgpyZXR1cm4gSC5kKGEsaixoKQpjYXNlIDEyOmc9Yi5RCmExKz1nLmxlbmd0aApm
+PUguYlooYSxnLGEwLGExKQpvPWIuegpuPUguUEwoYSxvLGEwLGExKQppZihmPT09ZyYmbj09PW8pcmV0
+dXJuIGIKcmV0dXJuIEguRChhLG4sZiwhMCkKY2FzZSAxMzplPWIuegppZihlPGExKXJldHVybiBiCmQ9
+YTBbZS1hMV0KaWYoZD09bnVsbClyZXR1cm4gYgpyZXR1cm4gZApkZWZhdWx0OnRocm93IEguYihQLmhW
+KCJBdHRlbXB0ZWQgdG8gc3Vic3RpdHV0ZSB1bmV4cGVjdGVkIFJUSSBraW5kICIrYykpfX0sCmJaKGEs
+YixjLGQpe3ZhciBzLHIscSxwLG89Yi5sZW5ndGgsbj1ILnZVKG8pCmZvcihzPSExLHI9MDtyPG87Kyty
+KXtxPWJbcl0KcD1ILlBMKGEscSxjLGQpCmlmKHAhPT1xKXM9ITAKbltyXT1wfXJldHVybiBzP246Yn0s
+CnZPKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtPWIubGVuZ3RoLGw9SC52VShtKQpmb3Iocz0hMSxy
+PTA7cjxtO3IrPTMpe3E9YltyXQpwPWJbcisxXQpvPWJbcisyXQpuPUguUEwoYSxvLGMsZCkKaWYobiE9
+PW8pcz0hMApsLnNwbGljZShyLDMscSxwLG4pfXJldHVybiBzP2w6Yn0sCnFUKGEsYixjLGQpe3ZhciBz
+LHI9Yi5hLHE9SC5iWihhLHIsYyxkKSxwPWIuYixvPUguYlooYSxwLGMsZCksbj1iLmMsbT1ILnZPKGEs
+bixjLGQpCmlmKHE9PT1yJiZvPT09cCYmbT09PW4pcmV0dXJuIGIKcz1uZXcgSC5HKCkKcy5hPXEKcy5i
+PW8Kcy5jPW0KcmV0dXJuIHN9LApRSShhLGIpe2Fbdi5hcnJheVJ0aV09YgpyZXR1cm4gYX0sCkpTKGEp
+e3ZhciBzPWEuJFMKaWYocyE9bnVsbCl7aWYodHlwZW9mIHM9PSJudW1iZXIiKXJldHVybiBILkJwKHMp
+CnJldHVybiBhLiRTKCl9cmV0dXJuIG51bGx9LApVZShhLGIpe3ZhciBzCmlmKEguUTEoYikpaWYoYSBp
+bnN0YW5jZW9mIEguVHApe3M9SC5KUyhhKQppZihzIT1udWxsKXJldHVybiBzfXJldHVybiBILnpLKGEp
+fSwKeksoYSl7dmFyIHMKaWYoYSBpbnN0YW5jZW9mIFAuTWgpe3M9YS4kdGkKcmV0dXJuIHMhPW51bGw/
+czpILlZVKGEpfWlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIEgudDYoYSkKcmV0dXJuIEguVlUoSi5p
+YShhKSl9LAp0NihhKXt2YXIgcz1hW3YuYXJyYXlSdGldLHI9dC5iCmlmKHM9PW51bGwpcmV0dXJuIHIK
+aWYocy5jb25zdHJ1Y3RvciE9PXIuY29uc3RydWN0b3IpcmV0dXJuIHIKcmV0dXJuIHN9LApMaChhKXt2
+YXIgcz1hLiR0aQpyZXR1cm4gcyE9bnVsbD9zOkguVlUoYSl9LApWVShhKXt2YXIgcz1hLmNvbnN0cnVj
+dG9yLHI9cy4kY2NhY2hlCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIEgucjkoYSxzKX0sCnI5KGEs
+Yil7dmFyIHM9YSBpbnN0YW5jZW9mIEguVHA/YS5fX3Byb3RvX18uX19wcm90b19fLmNvbnN0cnVjdG9y
+OmIscj1ILmFpKHYudHlwZVVuaXZlcnNlLHMubmFtZSkKYi4kY2NhY2hlPXIKcmV0dXJuIHJ9LApCcChh
+KXt2YXIgcyxyPXYudHlwZXMscT1yW2FdCmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7cz1ILkUodi50eXBl
+VW5pdmVyc2UscSwhMSkKclthXT1zCnJldHVybiBzfXJldHVybiBxfSwKSkooYSl7dmFyIHMscixxLHAs
+bz10aGlzCmlmKG89PT10LkspcmV0dXJuIEguUkUobyxhLEgua2UpCmlmKCFILkE4KG8pKWlmKCEobz09
+PXQuXykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCmlmKHMpcmV0dXJuIEguUkUobyxhLEguSXcpCnM9
+by55CnI9cz09PTY/by56Om8KaWYocj09PXQuUylxPUgub2sKZWxzZSBpZihyPT09dC5nUnx8cj09PXQu
+ZGkpcT1ILktICmVsc2UgaWYocj09PXQuTilxPUguTU0KZWxzZSBxPXI9PT10Lnk/SC5yUTpudWxsCmlm
+KHEhPW51bGwpcmV0dXJuIEguUkUobyxhLHEpCmlmKHIueT09PTkpe3A9ci56CmlmKHIuUS5ldmVyeShI
+LmNjKSl7by5yPSIkaSIrcAppZihwPT09InpNIilyZXR1cm4gSC5SRShvLGEsSC55TSkKcmV0dXJuIEgu
+UkUobyxhLEgudDQpfX1lbHNlIGlmKHM9PT03KXJldHVybiBILlJFKG8sYSxILkFRKQpyZXR1cm4gSC5S
+RShvLGEsSC5ZTyl9LApSRShhLGIsYyl7YS5iPWMKcmV0dXJuIGEuYihiKX0sCkF1KGEpe3ZhciBzLHI9
+dGhpcyxxPUguT3oKaWYoIUguQTgocikpaWYoIShyPT09dC5fKSlzPSExCmVsc2Ugcz0hMAplbHNlIHM9
+ITAKaWYocylxPUguaG4KZWxzZSBpZihyPT09dC5LKXE9SC5UaQplbHNle3M9SC5sUihyKQppZihzKXE9
+SC5sNH1yLmE9cQpyZXR1cm4gci5hKGEpfSwKUWooYSl7dmFyIHMscj1hLnkKaWYoIUguQTgoYSkpaWYo
+IShhPT09dC5fKSlpZighKGE9PT10LmF3KSlpZihyIT09NylzPXI9PT04JiZILlFqKGEueil8fGE9PT10
+LlB8fGE9PT10LlQKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBz
+fSwKWU8oYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBILlFqKHMpCnJldHVybiBILldlKHYu
+dHlwZVVuaXZlcnNlLEguVWUoYSxzKSxudWxsLHMsbnVsbCl9LApBUShhKXtpZihhPT1udWxsKXJldHVy
+biEwCnJldHVybiB0aGlzLnouYihhKX0sCnQ0KGEpe3ZhciBzLHI9dGhpcwppZihhPT1udWxsKXJldHVy
+biBILlFqKHIpCnM9ci5yCmlmKGEgaW5zdGFuY2VvZiBQLk1oKXJldHVybiEhYVtzXQpyZXR1cm4hIUou
+aWEoYSlbc119LAp5TShhKXt2YXIgcyxyPXRoaXMKaWYoYT09bnVsbClyZXR1cm4gSC5RaihyKQppZih0
+eXBlb2YgYSE9Im9iamVjdCIpcmV0dXJuITEKaWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMApzPXIu
+cgppZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4hIWFbc10KcmV0dXJuISFKLmlhKGEpW3NdfSwKT3oo
+YSl7dmFyIHMscj10aGlzCmlmKGE9PW51bGwpe3M9SC5sUihyKQppZihzKXJldHVybiBhfWVsc2UgaWYo
+ci5iKGEpKXJldHVybiBhCkgubTQoYSxyKX0sCmw0KGEpe3ZhciBzPXRoaXMKaWYoYT09bnVsbClyZXR1
+cm4gYQplbHNlIGlmKHMuYihhKSlyZXR1cm4gYQpILm00KGEscyl9LAptNChhLGIpe3Rocm93IEguYihI
+LlpjKEguV0soYSxILlVlKGEsYiksSC5kbShiLG51bGwpKSkpfSwKRGgoYSxiLGMsZCl7dmFyIHM9bnVs
+bAppZihILldlKHYudHlwZVVuaXZlcnNlLGEscyxiLHMpKXJldHVybiBhCnRocm93IEguYihILlpjKCJU
+aGUgdHlwZSBhcmd1bWVudCAnIitILmRtKGEscykrIicgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgdHlw
+ZSB2YXJpYWJsZSBib3VuZCAnIitILmRtKGIscykrIicgb2YgdHlwZSB2YXJpYWJsZSAnIitjKyInIGlu
+ICciK2QrIicuIikpfSwKV0soYSxiLGMpe3ZhciBzPVAuaGwoYSkscj1ILmRtKGI9PW51bGw/SC56Syhh
+KTpiLG51bGwpCnJldHVybiBzKyI6IHR5cGUgJyIrcisiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHR5cGUg
+JyIrYysiJyJ9LApaYyhhKXtyZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIithKX0sCnEoYSxiKXty
+ZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIitILldLKGEsbnVsbCxiKSl9LAprZShhKXtyZXR1cm4g
+YSE9bnVsbH0sClRpKGEpe2lmKGEhPW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJPYmplY3Qi
+KSl9LApJdyhhKXtyZXR1cm4hMH0sCmhuKGEpe3JldHVybiBhfSwKclEoYSl7cmV0dXJuITA9PT1hfHwh
+MT09PWF9LApwOChhKXtpZighMD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCnRocm93IEgu
+YihILnEoYSwiYm9vbCIpKX0sCm1MKGEpe2lmKCEwPT09YSlyZXR1cm4hMAppZighMT09PWEpcmV0dXJu
+ITEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsImJvb2wiKSl9LApNNChhKXtpZigh
+MD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cg
+SC5iKEgucShhLCJib29sPyIpKX0sCnJWKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQp0
+aHJvdyBILmIoSC5xKGEsImRvdWJsZSIpKX0sCnRGKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1
+cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEguYihILnEoYSwiZG91YmxlIikpfSwKUWsoYSl7
+aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5i
+KEgucShhLCJkb3VibGU/IikpfSwKb2soYSl7cmV0dXJuIHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5m
+bG9vcihhKT09PWF9LApJWihhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1h
+KXJldHVybiBhCnRocm93IEguYihILnEoYSwiaW50IikpfSwKdVAoYSl7aWYodHlwZW9mIGE9PSJudW1i
+ZXIiJiZNYXRoLmZsb29yKGEpPT09YSlyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEgu
+YihILnEoYSwiaW50IikpfSwKVWMoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEp
+PT09YSlyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEguYihILnEoYSwiaW50PyIpKX0s
+CktIKGEpe3JldHVybiB0eXBlb2YgYT09Im51bWJlciJ9LAp6NShhKXtpZih0eXBlb2YgYT09Im51bWJl
+ciIpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJudW0iKSl9LApXMShhKXtpZih0eXBlb2YgYT09Im51
+bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIm51bSIpKX0s
+CmNVKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRo
+cm93IEguYihILnEoYSwibnVtPyIpKX0sCk1NKGEpe3JldHVybiB0eXBlb2YgYT09InN0cmluZyJ9LApu
+KGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmluZyIp
+KX0sCmhOKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBh
+CnRocm93IEguYihILnEoYSwiU3RyaW5nIikpfSwKayhhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0
+dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmluZz8iKSl9LAppbyhh
+LGIpe3ZhciBzLHIscQpmb3Iocz0iIixyPSIiLHE9MDtxPGEubGVuZ3RoOysrcSxyPSIsICIpcys9citI
+LmRtKGFbcV0sYikKcmV0dXJuIHN9LApiSShhNCxhNSxhNil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGos
+aSxoLGcsZixlLGQsYyxiLGEsYTAsYTEsYTIsYTM9IiwgIgppZihhNiE9bnVsbCl7cz1hNi5sZW5ndGgK
+aWYoYTU9PW51bGwpe2E1PUguUUkoW10sdC5zKQpyPW51bGx9ZWxzZSByPWE1Lmxlbmd0aApxPWE1Lmxl
+bmd0aApmb3IocD1zO3A+MDstLXApQy5ObS5pKGE1LCJUIisocStwKSkKZm9yKG89dC5YLG49dC5fLG09
+IjwiLGw9IiIscD0wO3A8czsrK3AsbD1hMyl7bSs9bAprPWE1Lmxlbmd0aApqPWstMS1wCmlmKGo8MCly
+ZXR1cm4gSC5PSChhNSxqKQptPUMueEIuaChtLGE1W2pdKQppPWE2W3BdCmg9aS55CmlmKCEoaD09PTJ8
+fGg9PT0zfHxoPT09NHx8aD09PTV8fGk9PT1vKSlpZighKGk9PT1uKSlrPSExCmVsc2Ugaz0hMAplbHNl
+IGs9ITAKaWYoIWspbSs9IiBleHRlbmRzICIrSC5kbShpLGE1KX1tKz0iPiJ9ZWxzZXttPSIiCnI9bnVs
+bH1vPWE0LnoKZz1hNC5RCmY9Zy5hCmU9Zi5sZW5ndGgKZD1nLmIKYz1kLmxlbmd0aApiPWcuYwphPWIu
+bGVuZ3RoCmEwPUguZG0obyxhNSkKZm9yKGExPSIiLGEyPSIiLHA9MDtwPGU7KytwLGEyPWEzKWExKz1h
+MitILmRtKGZbcF0sYTUpCmlmKGM+MCl7YTErPWEyKyJbIgpmb3IoYTI9IiIscD0wO3A8YzsrK3AsYTI9
+YTMpYTErPWEyK0guZG0oZFtwXSxhNSkKYTErPSJdIn1pZihhPjApe2ExKz1hMisieyIKZm9yKGEyPSIi
+LHA9MDtwPGE7cCs9MyxhMj1hMyl7YTErPWEyCmlmKGJbcCsxXSlhMSs9InJlcXVpcmVkICIKYTErPUgu
+ZG0oYltwKzJdLGE1KSsiICIrYltwXX1hMSs9In0ifWlmKHIhPW51bGwpe2E1LnRvU3RyaW5nCmE1Lmxl
+bmd0aD1yfXJldHVybiBtKyIoIithMSsiKSA9PiAiK2EwfSwKZG0oYSxiKXt2YXIgcyxyLHEscCxvLG4s
+bSxsPWEueQppZihsPT09NSlyZXR1cm4iZXJhc2VkIgppZihsPT09MilyZXR1cm4iZHluYW1pYyIKaWYo
+bD09PTMpcmV0dXJuInZvaWQiCmlmKGw9PT0xKXJldHVybiJOZXZlciIKaWYobD09PTQpcmV0dXJuImFu
+eSIKaWYobD09PTYpe3M9SC5kbShhLnosYikKcmV0dXJuIHN9aWYobD09PTcpe3I9YS56CnM9SC5kbShy
+LGIpCnE9ci55CnJldHVybihxPT09MTF8fHE9PT0xMj8iKCIrcysiKSI6cykrIj8ifWlmKGw9PT04KXJl
+dHVybiJGdXR1cmVPcjwiK0guZG0oYS56LGIpKyI+IgppZihsPT09OSl7cD1ILm8zKGEueikKbz1hLlEK
+cmV0dXJuIG8ubGVuZ3RoPjA/cCsoIjwiK0guaW8obyxiKSsiPiIpOnB9aWYobD09PTExKXJldHVybiBI
+LmJJKGEsYixudWxsKQppZihsPT09MTIpcmV0dXJuIEguYkkoYS56LGIsYS5RKQppZihsPT09MTMpe249
+YS56Cm09Yi5sZW5ndGgKbj1tLTEtbgppZihuPDB8fG4+PW0pcmV0dXJuIEguT0goYixuKQpyZXR1cm4g
+YltuXX1yZXR1cm4iPyJ9LApvMyhhKXt2YXIgcyxyPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIh
+PW51bGwpcmV0dXJuIHIKcz0ibWluaWZpZWQ6IithCnJldHVybiBzfSwKUW8oYSxiKXt2YXIgcz1hLnRS
+W2JdCmZvcig7dHlwZW9mIHM9PSJzdHJpbmciOylzPWEudFJbc10KcmV0dXJuIHN9LAphaShhLGIpe3Zh
+ciBzLHIscSxwLG8sbj1hLmVULG09bltiXQppZihtPT1udWxsKXJldHVybiBILkUoYSxiLCExKQplbHNl
+IGlmKHR5cGVvZiBtPT0ibnVtYmVyIil7cz1tCnI9SC5tKGEsNSwiIyIpCnE9SC52VShzKQpmb3IocD0w
+O3A8czsrK3ApcVtwXT1yCm89SC5KKGEsYixxKQpuW2JdPW8KcmV0dXJuIG99ZWxzZSByZXR1cm4gbX0s
+CnhiKGEsYil7cmV0dXJuIEguSXgoYS50UixiKX0sCkZGKGEsYil7cmV0dXJuIEguSXgoYS5lVCxiKX0s
+CkUoYSxiLGMpe3ZhciBzLHI9YS5lQyxxPXIuZ2V0KGIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1ILmko
+SC5vKGEsbnVsbCxiLGMpKQpyLnNldChiLHMpCnJldHVybiBzfSwKY0UoYSxiLGMpe3ZhciBzLHIscT1i
+LmNoCmlmKHE9PW51bGwpcT1iLmNoPW5ldyBNYXAoKQpzPXEuZ2V0KGMpCmlmKHMhPW51bGwpcmV0dXJu
+IHMKcj1ILmkoSC5vKGEsYixjLCEwKSkKcS5zZXQoYyxyKQpyZXR1cm4gcn0sCnY1KGEsYixjKXt2YXIg
+cyxyLHEscD1iLmN4CmlmKHA9PW51bGwpcD1iLmN4PW5ldyBNYXAoKQpzPWMuY3kKcj1wLmdldChzKQpp
+ZihyIT1udWxsKXJldHVybiByCnE9SC5hKGEsYixjLnk9PT0xMD9jLlE6W2NdKQpwLnNldChzLHEpCnJl
+dHVybiBxfSwKQkQoYSxiKXtiLmE9SC5BdQpiLmI9SC5KSgpyZXR1cm4gYn0sCm0oYSxiLGMpe3ZhciBz
+LHIscT1hLmVDLmdldChjKQppZihxIT1udWxsKXJldHVybiBxCnM9bmV3IEguSmMobnVsbCxudWxsKQpz
+Lnk9YgpzLmN5PWMKcj1ILkJEKGEscykKYS5lQy5zZXQoYyxyKQpyZXR1cm4gcn0sCkMoYSxiLGMpe3Zh
+ciBzLHI9Yi5jeSsiKiIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9SC5aNyhhLGIs
+cixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKWjcoYSxiLGMsZCl7dmFyIHMscixxCmlmKGQpe3M9
+Yi55CmlmKCFILkE4KGIpKXI9Yj09PXQuUHx8Yj09PXQuVHx8cz09PTd8fHM9PT02CmVsc2Ugcj0hMApp
+ZihyKXJldHVybiBifXE9bmV3IEguSmMobnVsbCxudWxsKQpxLnk9NgpxLno9YgpxLmN5PWMKcmV0dXJu
+IEguQkQoYSxxKX0sCkIoYSxiLGMpe3ZhciBzLHI9Yi5jeSsiPyIscT1hLmVDLmdldChyKQppZihxIT1u
+dWxsKXJldHVybiBxCnM9SC5sbChhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKbGwoYSxi
+LGMsZCl7dmFyIHMscixxLHAKaWYoZCl7cz1iLnkKaWYoIUguQTgoYikpaWYoIShiPT09dC5QfHxiPT09
+dC5UKSlpZihzIT09NylyPXM9PT04JiZILmxSKGIueikKZWxzZSByPSEwCmVsc2Ugcj0hMAplbHNlIHI9
+ITAKaWYocilyZXR1cm4gYgplbHNlIGlmKHM9PT0xfHxiPT09dC5hdylyZXR1cm4gdC5QCmVsc2UgaWYo
+cz09PTYpe3E9Yi56CmlmKHEueT09PTgmJkgubFIocS56KSlyZXR1cm4gcQplbHNlIHJldHVybiBILmN6
+KGEsYil9fXA9bmV3IEguSmMobnVsbCxudWxsKQpwLnk9NwpwLno9YgpwLmN5PWMKcmV0dXJuIEguQkQo
+YSxwKX0sCmYoYSxiLGMpe3ZhciBzLHI9Yi5jeSsiLyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJl
+dHVybiBxCnM9SC5lVihhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKZVYoYSxiLGMsZCl7
+dmFyIHMscixxCmlmKGQpe3M9Yi55CmlmKCFILkE4KGIpKWlmKCEoYj09PXQuXykpcj0hMQplbHNlIHI9
+ITAKZWxzZSByPSEwCmlmKHJ8fGI9PT10LkspcmV0dXJuIGIKZWxzZSBpZihzPT09MSlyZXR1cm4gSC5K
+KGEsImI4IixbYl0pCmVsc2UgaWYoYj09PXQuUHx8Yj09PXQuVClyZXR1cm4gdC5iR31xPW5ldyBILkpj
+KG51bGwsbnVsbCkKcS55PTgKcS56PWIKcS5jeT1jCnJldHVybiBILkJEKGEscSl9LApIKGEsYil7dmFy
+IHMscixxPSIiK2IrIl4iLHA9YS5lQy5nZXQocSkKaWYocCE9bnVsbClyZXR1cm4gcApzPW5ldyBILkpj
+KG51bGwsbnVsbCkKcy55PTEzCnMuej1iCnMuY3k9cQpyPUguQkQoYSxzKQphLmVDLnNldChxLHIpCnJl
+dHVybiByfSwKVXgoYSl7dmFyIHMscixxLHA9YS5sZW5ndGgKZm9yKHM9IiIscj0iIixxPTA7cTxwOysr
+cSxyPSIsIilzKz1yK2FbcV0uY3kKcmV0dXJuIHN9LApTNChhKXt2YXIgcyxyLHEscCxvLG4sbT1hLmxl
+bmd0aApmb3Iocz0iIixyPSIiLHE9MDtxPG07cSs9MyxyPSIsIil7cD1hW3FdCm89YVtxKzFdPyIhIjoi
+OiIKbj1hW3ErMl0uY3kKcys9citwK28rbn1yZXR1cm4gc30sCkooYSxiLGMpe3ZhciBzLHIscSxwPWIK
+aWYoYy5sZW5ndGg+MClwKz0iPCIrSC5VeChjKSsiPiIKcz1hLmVDLmdldChwKQppZihzIT1udWxsKXJl
+dHVybiBzCnI9bmV3IEguSmMobnVsbCxudWxsKQpyLnk9OQpyLno9YgpyLlE9YwppZihjLmxlbmd0aD4w
+KXIuYz1jWzBdCnIuY3k9cApxPUguQkQoYSxyKQphLmVDLnNldChwLHEpCnJldHVybiBxfSwKYShhLGIs
+Yyl7dmFyIHMscixxLHAsbyxuCmlmKGIueT09PTEwKXtzPWIuegpyPWIuUS5jb25jYXQoYyl9ZWxzZXty
+PWMKcz1ifXE9cy5jeSsoIjs8IitILlV4KHIpKyI+IikKcD1hLmVDLmdldChxKQppZihwIT1udWxsKXJl
+dHVybiBwCm89bmV3IEguSmMobnVsbCxudWxsKQpvLnk9MTAKby56PXMKby5RPXIKby5jeT1xCm49SC5C
+RChhLG8pCmEuZUMuc2V0KHEsbikKcmV0dXJuIG59LApkKGEsYixjKXt2YXIgcyxyLHEscCxvLG49Yi5j
+eSxtPWMuYSxsPW0ubGVuZ3RoLGs9Yy5iLGo9ay5sZW5ndGgsaT1jLmMsaD1pLmxlbmd0aCxnPSIoIitI
+LlV4KG0pCmlmKGo+MCl7cz1sPjA/IiwiOiIiCnI9SC5VeChrKQpnKz1zKyJbIityKyJdIn1pZihoPjAp
+e3M9bD4wPyIsIjoiIgpyPUguUzQoaSkKZys9cysieyIrcisifSJ9cT1uKyhnKyIpIikKcD1hLmVDLmdl
+dChxKQppZihwIT1udWxsKXJldHVybiBwCm89bmV3IEguSmMobnVsbCxudWxsKQpvLnk9MTEKby56PWIK
+by5RPWMKby5jeT1xCnI9SC5CRChhLG8pCmEuZUMuc2V0KHEscikKcmV0dXJuIHJ9LApEKGEsYixjLGQp
+e3ZhciBzLHI9Yi5jeSsoIjwiK0guVXgoYykrIj4iKSxxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0
+dXJuIHEKcz1ILmh3KGEsYixjLHIsZCkKYS5lQy5zZXQocixzKQpyZXR1cm4gc30sCmh3KGEsYixjLGQs
+ZSl7dmFyIHMscixxLHAsbyxuLG0sbAppZihlKXtzPWMubGVuZ3RoCnI9SC52VShzKQpmb3IocT0wLHA9
+MDtwPHM7KytwKXtvPWNbcF0KaWYoby55PT09MSl7cltwXT1vOysrcX19aWYocT4wKXtuPUguUEwoYSxi
+LHIsMCkKbT1ILmJaKGEsYyxyLDApCnJldHVybiBILkQoYSxuLG0sYyE9PW0pfX1sPW5ldyBILkpjKG51
+bGwsbnVsbCkKbC55PTEyCmwuej1iCmwuUT1jCmwuY3k9ZApyZXR1cm4gSC5CRChhLGwpfSwKbyhhLGIs
+YyxkKXtyZXR1cm57dTphLGU6YixyOmMsczpbXSxwOjAsbjpkfX0sCmkoYSl7dmFyIHMscixxLHAsbyxu
+LG0sbCxrLGosaSxoPWEucixnPWEucwpmb3Iocz1oLmxlbmd0aCxyPTA7cjxzOyl7cT1oLmNoYXJDb2Rl
+QXQocikKaWYocT49NDgmJnE8PTU3KXI9SC5BKHIrMSxxLGgsZykKZWxzZSBpZigoKChxfDMyKT4+PjAp
+LTk3JjY1NTM1KTwyNnx8cT09PTk1fHxxPT09MzYpcj1ILnQoYSxyLGgsZywhMSkKZWxzZSBpZihxPT09
+NDYpcj1ILnQoYSxyLGgsZywhMCkKZWxzZXsrK3IKc3dpdGNoKHEpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1
+ODpnLnB1c2goITEpCmJyZWFrCmNhc2UgMzM6Zy5wdXNoKCEwKQpicmVhawpjYXNlIDU5OmcucHVzaChI
+LksoYS51LGEuZSxnLnBvcCgpKSkKYnJlYWsKY2FzZSA5NDpnLnB1c2goSC5IKGEudSxnLnBvcCgpKSkK
+YnJlYWsKY2FzZSAzNTpnLnB1c2goSC5tKGEudSw1LCIjIikpCmJyZWFrCmNhc2UgNjQ6Zy5wdXNoKEgu
+bShhLnUsMiwiQCIpKQpicmVhawpjYXNlIDEyNjpnLnB1c2goSC5tKGEudSwzLCJ+IikpCmJyZWFrCmNh
+c2UgNjA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgNjI6cD1hLnUKbz1nLnNwbGlj
+ZShhLnApCkgucihhLnUsYS5lLG8pCmEucD1nLnBvcCgpCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09InN0
+cmluZyIpZy5wdXNoKEguSihwLG4sbykpCmVsc2V7bT1ILksocCxhLmUsbikKc3dpdGNoKG0ueSl7Y2Fz
+ZSAxMTpnLnB1c2goSC5EKHAsbSxvLGEubikpCmJyZWFrCmRlZmF1bHQ6Zy5wdXNoKEguYShwLG0sbykp
+CmJyZWFrfX1icmVhawpjYXNlIDM4OkguSShhLGcpCmJyZWFrCmNhc2UgNDI6cD1hLnUKZy5wdXNoKEgu
+QyhwLEguSyhwLGEuZSxnLnBvcCgpKSxhLm4pKQpicmVhawpjYXNlIDYzOnA9YS51CmcucHVzaChILkIo
+cCxILksocCxhLmUsZy5wb3AoKSksYS5uKSkKYnJlYWsKY2FzZSA0NzpwPWEudQpnLnB1c2goSC5mKHAs
+SC5LKHAsYS5lLGcucG9wKCkpLGEubikpCmJyZWFrCmNhc2UgNDA6Zy5wdXNoKGEucCkKYS5wPWcubGVu
+Z3RoCmJyZWFrCmNhc2UgNDE6cD1hLnUKbD1uZXcgSC5HKCkKaz1wLnNFQQpqPXAuc0VBCm49Zy5wb3Ao
+KQppZih0eXBlb2Ygbj09Im51bWJlciIpc3dpdGNoKG4pe2Nhc2UtMTprPWcucG9wKCkKYnJlYWsKY2Fz
+ZS0yOmo9Zy5wb3AoKQpicmVhawpkZWZhdWx0OmcucHVzaChuKQpicmVha31lbHNlIGcucHVzaChuKQpv
+PWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkKbC5hPW8KbC5iPWsKbC5jPWoK
+Zy5wdXNoKEguZChwLEguSyhwLGEuZSxnLnBvcCgpKSxsKSkKYnJlYWsKY2FzZSA5MTpnLnB1c2goYS5w
+KQphLnA9Zy5sZW5ndGgKYnJlYWsKY2FzZSA5MzpvPWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUsbykK
+YS5wPWcucG9wKCkKZy5wdXNoKG8pCmcucHVzaCgtMSkKYnJlYWsKY2FzZSAxMjM6Zy5wdXNoKGEucCkK
+YS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgMTI1Om89Zy5zcGxpY2UoYS5wKQpILnkoYS51LGEuZSxvKQph
+LnA9Zy5wb3AoKQpnLnB1c2gobykKZy5wdXNoKC0yKQpicmVhawpkZWZhdWx0OnRocm93IkJhZCBjaGFy
+YWN0ZXIgIitxfX19aT1nLnBvcCgpCnJldHVybiBILksoYS51LGEuZSxpKX0sCkEoYSxiLGMsZCl7dmFy
+IHMscixxPWItNDgKZm9yKHM9Yy5sZW5ndGg7YTxzOysrYSl7cj1jLmNoYXJDb2RlQXQoYSkKaWYoIShy
+Pj00OCYmcjw9NTcpKWJyZWFrCnE9cSoxMCsoci00OCl9ZC5wdXNoKHEpCnJldHVybiBhfSwKdChhLGIs
+YyxkLGUpe3ZhciBzLHIscSxwLG8sbixtPWIrMQpmb3Iocz1jLmxlbmd0aDttPHM7KyttKXtyPWMuY2hh
+ckNvZGVBdChtKQppZihyPT09NDYpe2lmKGUpYnJlYWsKZT0hMH1lbHNle2lmKCEoKCgocnwzMik+Pj4w
+KS05NyY2NTUzNSk8MjZ8fHI9PT05NXx8cj09PTM2KSlxPXI+PTQ4JiZyPD01NwplbHNlIHE9ITAKaWYo
+IXEpYnJlYWt9fXA9Yy5zdWJzdHJpbmcoYixtKQppZihlKXtzPWEudQpvPWEuZQppZihvLnk9PT0xMClv
+PW8uegpuPUguUW8ocyxvLnopW3BdCmlmKG49PW51bGwpSC52KCdObyAiJytwKyciIGluICInK0gubUQo
+bykrJyInKQpkLnB1c2goSC5jRShzLG8sbikpfWVsc2UgZC5wdXNoKHApCnJldHVybiBtfSwKSShhLGIp
 e3ZhciBzPWIucG9wKCkKaWYoMD09PXMpe2IucHVzaChILm0oYS51LDEsIjAmIikpCnJldHVybn1pZigx
 PT09cyl7Yi5wdXNoKEgubShhLnUsNCwiMSYiKSkKcmV0dXJufXRocm93IEguYihQLmhWKCJVbmV4cGVj
-dGVkIGV4dGVuZGVkIG9wZXJhdGlvbiAiK0guRWoocykpKX0sCks6ZnVuY3Rpb24oYSxiLGMpe2lmKHR5
-cGVvZiBjPT0ic3RyaW5nIilyZXR1cm4gSC5KKGEsYyxhLnNFQSkKZWxzZSBpZih0eXBlb2YgYz09Im51
-bWJlciIpcmV0dXJuIEguVFYoYSxiLGMpCmVsc2UgcmV0dXJuIGN9LApyOmZ1bmN0aW9uKGEsYixjKXt2
-YXIgcyxyPWMubGVuZ3RoCmZvcihzPTA7czxyOysrcyljW3NdPUguSyhhLGIsY1tzXSl9LAp5OmZ1bmN0
-aW9uKGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZvcihzPTI7czxyO3MrPTMpY1tzXT1ILksoYSxiLGNb
-c10pfSwKVFY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscT1iLnkKaWYocT09PTEwKXtpZihjPT09MCly
-ZXR1cm4gYi56CnM9Yi5RCnI9cy5sZW5ndGgKaWYoYzw9cilyZXR1cm4gc1tjLTFdCmMtPXIKYj1iLnoK
-cT1iLnl9ZWxzZSBpZihjPT09MClyZXR1cm4gYgppZihxIT09OSl0aHJvdyBILmIoUC5oVigiSW5kZXhl
-ZCBiYXNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIHR5cGUiKSkKcz1iLlEKaWYoYzw9cy5sZW5ndGgpcmV0
-dXJuIHNbYy0xXQp0aHJvdyBILmIoUC5oVigiQmFkIGluZGV4ICIrYysiIGZvciAiK2IudygwKSkpfSwK
-V2U6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagppZihiPT09ZClyZXR1
-cm4hMAppZighSC5BOChkKSlpZighKGQ9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihz
-KXJldHVybiEwCnI9Yi55CmlmKHI9PT00KXJldHVybiEwCmlmKEguQTgoYikpcmV0dXJuITEKaWYoYi55
-IT09MSlzPSExCmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnE9cj09PTEzCmlmKHEpaWYoSC5XZShhLGNb
-Yi56XSxjLGQsZSkpcmV0dXJuITAKcD1kLnkKcz1iPT09dC5QfHxiPT09dC5UCmlmKHMpe2lmKHA9PT04
-KXJldHVybiBILldlKGEsYixjLGQueixlKQpyZXR1cm4gZD09PXQuUHx8ZD09PXQuVHx8cD09PTd8fHA9
-PT02fWlmKGQ9PT10Lkspe2lmKHI9PT04KXJldHVybiBILldlKGEsYi56LGMsZCxlKQppZihyPT09Nily
-ZXR1cm4gSC5XZShhLGIueixjLGQsZSkKcmV0dXJuIHIhPT03fWlmKHI9PT02KXJldHVybiBILldlKGEs
-Yi56LGMsZCxlKQppZihwPT09Nil7cz1ILmN6KGEsZCkKcmV0dXJuIEguV2UoYSxiLGMscyxlKX1pZihy
-PT09OCl7aWYoIUguV2UoYSxiLnosYyxkLGUpKXJldHVybiExCnJldHVybiBILldlKGEsSC54WihhLGIp
-LGMsZCxlKX1pZihyPT09Nyl7cz1ILldlKGEsdC5QLGMsZCxlKQpyZXR1cm4gcyYmSC5XZShhLGIueixj
-LGQsZSl9aWYocD09PTgpe2lmKEguV2UoYSxiLGMsZC56LGUpKXJldHVybiEwCnJldHVybiBILldlKGEs
-YixjLEgueFooYSxkKSxlKX1pZihwPT09Nyl7cz1ILldlKGEsYixjLHQuUCxlKQpyZXR1cm4gc3x8SC5X
-ZShhLGIsYyxkLnosZSl9aWYocSlyZXR1cm4hMQpzPXIhPT0xMQppZigoIXN8fHI9PT0xMikmJmQ9PT10
-LlkpcmV0dXJuITAKaWYocD09PTEyKXtpZihiPT09dC51KXJldHVybiEwCmlmKHIhPT0xMilyZXR1cm4h
-MQpvPWIuUQpuPWQuUQptPW8ubGVuZ3RoCmlmKG0hPT1uLmxlbmd0aClyZXR1cm4hMQpjPWM9PW51bGw/
-bzpvLmNvbmNhdChjKQplPWU9PW51bGw/bjpuLmNvbmNhdChlKQpmb3IobD0wO2w8bTsrK2wpe2s9b1ts
-XQpqPW5bbF0KaWYoIUguV2UoYSxrLGMsaixlKXx8IUguV2UoYSxqLGUsayxjKSlyZXR1cm4hMX1yZXR1
-cm4gSC5iTyhhLGIueixjLGQueixlKX1pZihwPT09MTEpe2lmKGI9PT10LnUpcmV0dXJuITAKaWYocyly
-ZXR1cm4hMQpyZXR1cm4gSC5iTyhhLGIsYyxkLGUpfWlmKHI9PT05KXtpZihwIT09OSlyZXR1cm4hMQpy
-ZXR1cm4gSC5wRyhhLGIsYyxkLGUpfXJldHVybiExfSwKYk86ZnVuY3Rpb24oYTMsYTQsYTUsYTYsYTcp
-e3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyCmlmKCFILldl
-KGEzLGE0LnosYTUsYTYueixhNykpcmV0dXJuITEKcz1hNC5RCnI9YTYuUQpxPXMuYQpwPXIuYQpvPXEu
-bGVuZ3RoCm49cC5sZW5ndGgKaWYobz5uKXJldHVybiExCm09bi1vCmw9cy5iCms9ci5iCmo9bC5sZW5n
-dGgKaT1rLmxlbmd0aAppZihvK2o8bitpKXJldHVybiExCmZvcihoPTA7aDxvOysraCl7Zz1xW2hdCmlm
-KCFILldlKGEzLHBbaF0sYTcsZyxhNSkpcmV0dXJuITF9Zm9yKGg9MDtoPG07KytoKXtnPWxbaF0KaWYo
-IUguV2UoYTMscFtvK2hdLGE3LGcsYTUpKXJldHVybiExfWZvcihoPTA7aDxpOysraCl7Zz1sW20raF0K
-aWYoIUguV2UoYTMsa1toXSxhNyxnLGE1KSlyZXR1cm4hMX1mPXMuYwplPXIuYwpkPWYubGVuZ3RoCmM9
-ZS5sZW5ndGgKZm9yKGI9MCxhPTA7YTxjO2ErPTMpe2EwPWVbYV0KZm9yKDshMDspe2lmKGI+PWQpcmV0
-dXJuITEKYTE9ZltiXQpiKz0zCmlmKGEwPGExKXJldHVybiExCmEyPWZbYi0yXQppZihhMTxhMCl7aWYo
-YTIpcmV0dXJuITEKY29udGludWV9Zz1lW2ErMV0KaWYoYTImJiFnKXJldHVybiExCmc9ZltiLTFdCmlm
-KCFILldlKGEzLGVbYSsyXSxhNyxnLGE1KSlyZXR1cm4hMQpicmVha319Zm9yKDtiPGQ7KXtpZihmW2Ir
-MV0pcmV0dXJuITEKYis9M31yZXR1cm4hMH0sCnBHOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHMscixx
-LHAsbyxuLG0sbCxrPWIueixqPWQuegppZihrPT09ail7cz1iLlEKcj1kLlEKcT1zLmxlbmd0aApmb3Io
-cD0wO3A8cTsrK3Ape289c1twXQpuPXJbcF0KaWYoIUguV2UoYSxvLGMsbixlKSlyZXR1cm4hMX1yZXR1
-cm4hMH1pZihkPT09dC5LKXJldHVybiEwCm09SC5RbyhhLGspCmlmKG09PW51bGwpcmV0dXJuITEKbD1t
-W2pdCmlmKGw9PW51bGwpcmV0dXJuITEKcT1sLmxlbmd0aApyPWQuUQpmb3IocD0wO3A8cTsrK3ApaWYo
-IUguV2UoYSxILmNFKGEsYixsW3BdKSxjLHJbcF0sZSkpcmV0dXJuITEKcmV0dXJuITB9LApsUjpmdW5j
-dGlvbihhKXt2YXIgcyxyPWEueQppZighKGE9PT10LlB8fGE9PT10LlQpKWlmKCFILkE4KGEpKWlmKHIh
-PT03KWlmKCEocj09PTYmJkgubFIoYS56KSkpcz1yPT09OCYmSC5sUihhLnopCmVsc2Ugcz0hMAplbHNl
-IHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4gc30sCmNjOmZ1bmN0aW9uKGEpe3ZhciBzCmlm
-KCFILkE4KGEpKWlmKCEoYT09PXQuXykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBzfSwK
-QTg6ZnVuY3Rpb24oYSl7dmFyIHM9YS55CnJldHVybiBzPT09Mnx8cz09PTN8fHM9PT00fHxzPT09NXx8
-YT09PXQuWH0sCkl4OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPU9iamVjdC5rZXlzKGIpLHA9cS5sZW5n
-dGgKZm9yKHM9MDtzPHA7KytzKXtyPXFbc10KYVtyXT1iW3JdfX0sCkpjOmZ1bmN0aW9uIEpjKGEsYil7
-dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLng9Xy5yPV8uYz1udWxsCl8ueT0wCl8uY3k9Xy5jeD1fLmNo
-PV8uUT1fLno9bnVsbH0sCkc6ZnVuY3Rpb24gRygpe3RoaXMuYz10aGlzLmI9dGhpcy5hPW51bGx9LApr
-UzpmdW5jdGlvbiBrUygpe30sCmlNOmZ1bmN0aW9uIGlNKGEpe3RoaXMuYT1hfSwKUjk6ZnVuY3Rpb24o
-YSl7cmV0dXJuIHQudy5iKGEpfHx0LkIuYihhKXx8dC5kei5iKGEpfHx0LkkuYihhKXx8dC5BLmIoYSl8
-fHQuZzQuYihhKXx8dC5nMi5iKGEpfSwKRlA6ZnVuY3Rpb24oYSl7cmV0dXJuIEgudihILmooYSkpfX0s
-Sj17ClF1OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybntpOmEscDpiLGU6Yyx4OmR9fSwKa3M6ZnVuY3Rp
-b24oYSl7dmFyIHMscixxLHAsbyxuPWFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV0KaWYobj09bnVsbClp
-ZigkLkJ2PT1udWxsKXtILlhEKCkKbj1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdfWlmKG4hPW51bGwp
-e3M9bi5wCmlmKCExPT09cylyZXR1cm4gbi5pCmlmKCEwPT09cylyZXR1cm4gYQpyPU9iamVjdC5nZXRQ
-cm90b3R5cGVPZihhKQppZihzPT09cilyZXR1cm4gbi5pCmlmKG4uZT09PXIpdGhyb3cgSC5iKFAuU1ko
-IlJldHVybiBpbnRlcmNlcHRvciBmb3IgIitILkVqKHMoYSxuKSkpKX1xPWEuY29uc3RydWN0b3IKaWYo
-cT09bnVsbClwPW51bGwKZWxzZXtvPSQuem0KaWYobz09bnVsbClvPSQuem09di5nZXRJc29sYXRlVGFn
-KCJfJGRhcnRfanMiKQpwPXFbb119aWYocCE9bnVsbClyZXR1cm4gcApwPUgudzMoYSkKaWYocCE9bnVs
-bClyZXR1cm4gcAppZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gQy5ERwpzPU9iamVjdC5nZXRQ
-cm90b3R5cGVPZihhKQppZihzPT1udWxsKXJldHVybiBDLlpRCmlmKHM9PT1PYmplY3QucHJvdG90eXBl
-KXJldHVybiBDLlpRCmlmKHR5cGVvZiBxPT0iZnVuY3Rpb24iKXtvPSQuem0KaWYobz09bnVsbClvPSQu
-em09di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpPYmplY3QuZGVmaW5lUHJvcGVydHkocSxvLHt2
-YWx1ZTpDLnZCLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0p
-CnJldHVybiBDLnZCfXJldHVybiBDLnZCfSwKUWk6ZnVuY3Rpb24oYSxiKXtpZihhPDB8fGE+NDI5NDk2
-NzI5NSl0aHJvdyBILmIoUC5URShhLDAsNDI5NDk2NzI5NSwibGVuZ3RoIixudWxsKSkKcmV0dXJuIEou
-cHkobmV3IEFycmF5KGEpLGIpfSwKS2g6ZnVuY3Rpb24oYSxiKXtpZihhPDApdGhyb3cgSC5iKFAueFko
-Ikxlbmd0aCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXI6ICIrYSkpCnJldHVybiBILlFJKG5l
-dyBBcnJheShhKSxiLkMoImpkPDA+IikpfSwKcHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5FcChILlFJ
-KGEsYi5DKCJqZDwwPiIpKSxiKX0sCkVwOmZ1bmN0aW9uKGEsYil7YS5maXhlZCRsZW5ndGg9QXJyYXkK
-cmV0dXJuIGF9LAp6QzpmdW5jdGlvbihhKXthLmZpeGVkJGxlbmd0aD1BcnJheQphLmltbXV0YWJsZSRs
-aXN0PUFycmF5CnJldHVybiBhfSwKR2E6ZnVuY3Rpb24oYSl7aWYoYTwyNTYpc3dpdGNoKGEpe2Nhc2Ug
-OTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxMzM6Y2FzZSAxNjA6
-cmV0dXJuITAKZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYwOmNhc2UgODE5MjpjYXNl
-IDgxOTM6Y2FzZSA4MTk0OmNhc2UgODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3OmNhc2UgODE5ODpjYXNl
-IDgxOTk6Y2FzZSA4MjAwOmNhc2UgODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMyOmNhc2UgODIzMzpjYXNl
-IDgyMzk6Y2FzZSA4Mjg3OmNhc2UgMTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4hMApkZWZhdWx0OnJldHVy
-biExfX0sCm1tOmZ1bmN0aW9uKGEsYil7dmFyIHMscgpmb3Iocz1hLmxlbmd0aDtiPHM7KXtyPUMueEIu
-VyhhLGIpCmlmKHIhPT0zMiYmciE9PTEzJiYhSi5HYShyKSlicmVhazsrK2J9cmV0dXJuIGJ9LApjMTpm
-dW5jdGlvbihhLGIpe3ZhciBzLHIKZm9yKDtiPjA7Yj1zKXtzPWItMQpyPUMueEIuTyhhLHMpCmlmKHIh
-PT0zMiYmciE9PTEzJiYhSi5HYShyKSlicmVha31yZXR1cm4gYn0sClU2OmZ1bmN0aW9uKGEpe2lmKHR5
-cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQpp
-ZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJv
-YmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJu
-IGF9aWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApZRTpmdW5jdGlv
-bihhKXtpZihhPT1udWxsKXJldHVybiBhCmlmKHR5cGVvZiBhIT0ib2JqZWN0Iil7aWYodHlwZW9mIGE9
-PSJmdW5jdGlvbiIpcmV0dXJuIEouYzUucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBQ
-Lk1oKXJldHVybiBhCnJldHVybiBKLmtzKGEpfSwKaWE6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJu
-dW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJldHVybiBKLmJVLnByb3RvdHlwZQpyZXR1cm4gSi5r
-RC5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihh
-PT1udWxsKXJldHVybiBKLndlLnByb3RvdHlwZQppZih0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBK
-LnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUK
-aWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5w
-cm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3Mo
-YSl9LApyWTpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIEouRHIucHJvdG90
-eXBlCmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoIShhIGluc3RhbmNlb2YgUC5NaCkpcmV0dXJuIEoua2Qu
-cHJvdG90eXBlCnJldHVybiBhfSwKdzE6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbClyZXR1cm4gYQppZihh
-LmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmpl
-Y3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9
-aWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApBNTpmdW5jdGlvbihh
-LGIpe3JldHVybiBKLncxKGEpLmVSKGEsYil9LApFaDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEouWUUo
-YSkubUsoYSxiLGMpfSwKRWw6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi53MShhKS5kcihhLGIpfSwKRjc6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEouVTYoYSkuZ29yKGEpfSwKRkw6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
-Si5yWShhKS5kZChhLGIpfSwKR0E6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi53MShhKS5FKGEsYil9LApI
-bTpmdW5jdGlvbihhKXtyZXR1cm4gSi5VNihhKS5nQShhKX0sCklUOmZ1bmN0aW9uKGEpe3JldHVybiBK
-LncxKGEpLmdtKGEpfSwKSnk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5pYShhKS5lNyhhLGIpfSwKTHQ6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEouWUUoYSkud2coYSl9LApNMTpmdW5jdGlvbihhLGIsYyl7cmV0dXJu
-IEoudzEoYSkuRTIoYSxiLGMpfSwKTXU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5ZRShhKS5zUChhLGIp
-fSwKUk06ZnVuY3Rpb24oYSxiKXtpZihhPT1udWxsKXJldHVybiBiPT1udWxsCmlmKHR5cGVvZiBhIT0i
-b2JqZWN0IilyZXR1cm4gYiE9bnVsbCYmYT09PWIKcmV0dXJuIEouaWEoYSkuRE4oYSxiKX0sClJYOmZ1
-bmN0aW9uKGEpe3JldHVybiBKLncxKGEpLmJyKGEpfSwKVDA6ZnVuY3Rpb24oYSl7cmV0dXJuIEouclko
-YSkuYlMoYSl9LAphNjpmdW5jdGlvbihhLGIpe3JldHVybiBKLnJZKGEpLk8oYSxiKX0sCmJUOmZ1bmN0
-aW9uKGEpe3JldHVybiBKLllFKGEpLkQ0KGEpfSwKY0g6ZnVuY3Rpb24oYSl7cmV0dXJuIEouclkoYSku
-aGMoYSl9LApkUjpmdW5jdGlvbihhKXtyZXR1cm4gSi5ZRShhKS5nUChhKX0sCmRaOmZ1bmN0aW9uKGEs
-YixjLGQpe3JldHVybiBKLllFKGEpLk9uKGEsYixjLGQpfSwKZGg6ZnVuY3Rpb24oYSl7cmV0dXJuIEou
-WUUoYSkuRkYoYSl9LApkcjpmdW5jdGlvbihhLGIpe3JldHVybiBKLllFKGEpLnNhNChhLGIpfSwKaGY6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEouaWEoYSkuZ2lPKGEpfSwKaWc6ZnVuY3Rpb24oYSl7cmV0dXJuIEou
-WUUoYSkuZ1FnKGEpfSwKbDU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5ZRShhKS5zaGYoYSxiKX0sCnFG
-OmZ1bmN0aW9uKGEpe3JldHVybiBKLllFKGEpLmdWbChhKX0sCnRIOmZ1bmN0aW9uKGEsYixjKXtyZXR1
-cm4gSi5ZRShhKS5wayhhLGIsYyl9LAp1OTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEoudzEoYSkuWTUo
-YSxiLGMpfSwKdVU6ZnVuY3Rpb24oYSl7cmV0dXJuIEouVTYoYSkuZ2wwKGEpfSwKdzpmdW5jdGlvbihh
-KXtyZXR1cm4gSi5pYShhKS53KGEpfSwKd2Y6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5ZRShhKS5zUk4o
-YSxiKX0sCng5OmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGI9PT0ibnVtYmVyIilpZihhLmNvbnN0cnVj
-dG9yPT1BcnJheXx8dHlwZW9mIGE9PSJzdHJpbmcifHxILndWKGEsYVt2LmRpc3BhdGNoUHJvcGVydHlO
-YW1lXSkpaWYoYj4+PjA9PT1iJiZiPGEubGVuZ3RoKXJldHVybiBhW2JdCnJldHVybiBKLlU2KGEpLnEo
-YSxiKX0sCnpsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouVTYoYSkudGcoYSxiKX0sCkd2OmZ1bmN0aW9u
-IEd2KCl7fSwKeUU6ZnVuY3Rpb24geUUoKXt9LAp3ZTpmdW5jdGlvbiB3ZSgpe30sCk1GOmZ1bmN0aW9u
-IE1GKCl7fSwKaUM6ZnVuY3Rpb24gaUMoKXt9LAprZDpmdW5jdGlvbiBrZCgpe30sCmM1OmZ1bmN0aW9u
-IGM1KCl7fSwKamQ6ZnVuY3Rpb24gamQoYSl7dGhpcy4kdGk9YX0sClBvOmZ1bmN0aW9uIFBvKGEpe3Ro
-aXMuJHRpPWF9LAptMTpmdW5jdGlvbiBtMShhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9
-MApfLmQ9bnVsbApfLiR0aT1jfSwKcUk6ZnVuY3Rpb24gcUkoKXt9LApiVTpmdW5jdGlvbiBiVSgpe30s
-CmtEOmZ1bmN0aW9uIGtEKCl7fSwKRHI6ZnVuY3Rpb24gRHIoKXt9fSxMPXsKSXE6ZnVuY3Rpb24oKXtD
-LkJaLkIoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQiLG5ldyBMLmUoKSkKQy5vbC5CKHdpbmRvdywi
-cG9wc3RhdGUiLG5ldyBMLkwoKSl9LAprejpmdW5jdGlvbihhKXt2YXIgcyxyPXQuaC5hKGEucGFyZW50
-Tm9kZSkucXVlcnlTZWxlY3RvcigiOnNjb3BlID4gdWwiKSxxPXIuc3R5bGUscD0iIitDLkNELnpRKHIu
-b2Zmc2V0SGVpZ2h0KSoyKyJweCIKcS5tYXhIZWlnaHQ9cApxPUoucUYoYSkKcD1xLiR0aQpzPXAuQygi
-figxKT8iKS5hKG5ldyBMLld4KHIsYSkpCnQuWi5hKG51bGwpClcuSkUocS5hLHEuYixzLCExLHAuYyl9
-LAp5WDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtPSJxdWVyeVNlbGVjdG9yQWxsIixsPWRv
-Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSkKbC50b1N0cmluZwpzPXQuaApILkRoKHMscywiVCIsbSkKcj10
-LlUKcT1uZXcgVy53eihsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uYXYtbGluayIpLHIpCnEuSyhxLG5ldyBM
-LkFPKGIpKQpILkRoKHMscywiVCIsbSkKcD1uZXcgVy53eihsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdp
-b24iKSxyKQppZighcC5nbDAocCkpe289bC5xdWVyeVNlbGVjdG9yKCJ0YWJsZVtkYXRhLXBhdGhdIikK
-by50b1N0cmluZwpwLksocCxuZXcgTC5IbyhvLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5l
-dyBXLmk3KG8pKS5PVSgicGF0aCIpKSkpfUguRGgocyxzLCJUIixtKQpuPW5ldyBXLnd6KGwucXVlcnlT
-ZWxlY3RvckFsbCgiLmFkZC1oaW50LWxpbmsiKSxyKQpuLksobixuZXcgTC5JQygpKX0sClE2OmZ1bmN0
-aW9uKGEsYixjKXt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3QoKQpDLkR0LmVvKHMsIkdFVCIsTC5RNChh
-LGIpLCEwKQpzLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL2pzb247
-IGNoYXJzZXQ9VVRGLTgiKQpyZXR1cm4gTC5MVShzLG51bGwsYyl9LAp0eTpmdW5jdGlvbihhLGIpe3Zh
-ciBzPW5ldyBYTUxIdHRwUmVxdWVzdCgpLHI9dC5OCkMuRHQuZW8ocywiUE9TVCIsTC5RNChhLFAuRmwo
-cixyKSksITApCnMuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24vanNv
-bjsgY2hhcnNldD1VVEYtOCIpCnJldHVybiBMLkxVKHMsYix0LkcpfSwKTFU6ZnVuY3Rpb24oYSxiLGMp
-e3JldHVybiBMLlRnKGEsYixjLGMuQygiMD8iKSl9LApUZzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcz0w
-LHI9UC5GWChkKSxxLHA9MixvLG49W10sbSxsLGssaixpLGgsZyxmLGUKdmFyICRhc3luYyRMVT1QLmx6
-KGZ1bmN0aW9uKGEwLGExKXtpZihhMD09PTEpe289YTEKcz1wfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nh
-c2UgMDpoPW5ldyBQLlpmKG5ldyBQLnZzKCQuWDMsdC5hbyksdC5iaikKZz10Lmd4CmY9Zy5hKG5ldyBM
-LmZDKGgsYSkpCnQuWi5hKG51bGwpCms9dC5wClcuSkUoYSwibG9hZCIsZiwhMSxrKQpXLkpFKGEsImVy
-cm9yIixnLmEoaC5nWUooKSksITEsaykKYS5zZW5kKGI9PW51bGw/bnVsbDpDLkN0Lk9CKGIsbnVsbCkp
-CnA9NApzPTcKcmV0dXJuIFAualEoaC5hLCRhc3luYyRMVSkKY2FzZSA3OnA9MgpzPTYKYnJlYWsKY2Fz
-ZSA0OnA9MwplPW8KSC5SdShlKQptPUgudHMoZSkKZz1hLnJlYWR5U3RhdGUKaWYoZz09PTQmJmEuc3Rh
-dHVzPT09MCl0aHJvdyBILmIoTC5URygiRXJyb3IgcmVhY2hpbmcgbWlncmF0aW9uIHByZXZpZXcgc2Vy
-dmVyIiwiVGhpcyB1c3VhbGx5IGhhcHBlbnMgYmVjYXVzZSB0aGUgbWlncmF0aW9uIHByZXZpZXcgc2Vy
-dmVyIGhhcyBleGl0ZWQuICBGb3JcbmV4YW1wbGUgaXQgbWF5IGhhdmUgYmVlbiBhYm9ydGVkIHdpdGgg
-Q3RybC1DLCBvciB5b3UgbWF5IGhhdmUgY29tcGxldGVkIHRoaXNcbm1pZ3JhdGlvbiwgb3IgYW4gZXhj
-ZXB0aW9uIG1heSBoYXZlIG9jY3VycmVkLiAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIHdoZXJlXG55
-b3UgaW52b2tlZCBgZGFydCBtaWdyYXRlYCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJldmlldyBzZXJ2ZXIg
-aXMgc3RpbGwgcnVubmluZy5cbiIpKQplbHNle2w9bmV3IEgubEooSC5RSShbInJlYWR5U3RhdGU9Iitn
-LCJyZXNwb25zZVRleHQ9IitDLkN0Lk9CKGEucmVzcG9uc2VUZXh0LG51bGwpLCJyZXNwb25zZVR5cGU9
-IitDLkN0Lk9CKGEucmVzcG9uc2VUeXBlLG51bGwpLCJyZXNwb25zZVVybD0iK0MuQ3QuT0IoYS5yZXNw
-b25zZVVSTCxudWxsKSwic3RhdHVzPSIrSC5FaihhLnN0YXR1cyksInN0YXR1c1RleHQ9IitDLkN0Lk9C
-KGEuc3RhdHVzVGV4dCxudWxsKV0sdC5zKSx0LmRHLmEobmV3IEwuVG0oKSksdC5EKS5rKDAsIiwgIikK
-dGhyb3cgSC5iKFAuVGwoIkVycm9yIHJlYWNoaW5nIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlcjogIitI
-LkVqKGwpLG0pKX1zPTYKYnJlYWsKY2FzZSAzOnM9MgpicmVhawpjYXNlIDY6aWYoYS5zdGF0dXM9PT00
-MDEpdGhyb3cgSC5iKEwuVEcoIlVuYXV0aG9yaXplZCByZXNwb25zZSBmcm9tIG1pZ3JhdGlvbiBwcmV2
-aWV3IHNlcnZlciIsIlRoZSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIgaGFzIGRldGVjdGVkIGEgbWlz
-bWF0Y2ggYmV0d2VlbiB0aGUgYXV0aFRva2VuIGluXG55b3VyIFVSTCBhbmQgdGhlIHRva2VuIHRoYXQg
-d2FzIGdlbmVyYXRlZCBhdCB0aGUgdGltZSB0aGF0IGBkYXJ0IG1pZ3JhdGVgIHdhc1xucnVuLiAgSGF2
-ZSB5b3UgcmVzdGFydGVkIHRoZSBtaWdyYXRpb24gc2VydmVyIHJlY2VudGx5PyAgSWYgc28sIHlvdSds
-bCBuZWVkIHRvXG5jaGVjayBpdHMgb3V0cHV0IGZvciBhIGZyZXNoIFVSTCwgYW5kIHVzZSB0aGF0IFVS
-TCB0byBwZXJmb3JtIHlvdXIgbWlncmF0aW9uLlxuIikpCmc9YS5yZXNwb25zZVRleHQKZy50b1N0cmlu
-ZwppPUMuQ3QucFcoMCxnLG51bGwpCmlmKGEuc3RhdHVzPT09MjAwKXtxPWMuQygiMD8iKS5hKGkpCnM9
-MQpicmVha31lbHNle2kudG9TdHJpbmcKdGhyb3cgSC5iKGkpfWNhc2UgMTpyZXR1cm4gUC55QyhxLHIp
-CmNhc2UgMjpyZXR1cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRMVSxyKX0sCmFLOmZ1
-bmN0aW9uKGEpe3ZhciBzPVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0dXJuIHM9PW51bGw/bnVs
-bDpILkhwKHMsbnVsbCl9LApHNjpmdW5jdGlvbihhKXt2YXIgcz1QLmhLKGEpLmdoWSgpLnEoMCwib2Zm
-c2V0IikKcmV0dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LAppNjpmdW5jdGlvbihhKXtyZXR1
-cm4gTC5uVyh0LlYuYShhKSl9LApuVzpmdW5jdGlvbihhKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxw
-LG89W10sbixtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkaTY9UC5seihmdW5jdGlvbihiLGMpe2lmKGI9
-PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpoPXQuaC5hKFcucWMoYS5jdXJy
-ZW50VGFyZ2V0KSkuZ2V0QXR0cmlidXRlKCJocmVmIikKaC50b1N0cmluZwpuPWgKYS5wcmV2ZW50RGVm
-YXVsdCgpCnE9MwpoPWRvY3VtZW50Cm09Qy5DRC56UShoLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iiku
-c2Nyb2xsVG9wKQpzPTYKcmV0dXJuIFAualEoTC50eShuLG51bGwpLCRhc3luYyRpNikKY2FzZSA2Omo9
-dC5GLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZQpqLnRvU3RyaW5nCnM9NwpyZXR1cm4gUC5qUShM
-Lkc3KGosbnVsbCxudWxsLCExLG51bGwpLCRhc3luYyRpNikKY2FzZSA3OmguYm9keS5jbGFzc0xpc3Qu
-YWRkKCJuZWVkcy1yZXJ1biIpCmg9aC5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmgudG9TdHJpbmcK
-aC5zY3JvbGxUb3A9Qy5qbi56UShtKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9SC5SdShn
-KQprPUgudHMoZykKTC5DMigiY291bGRuJ3QgYWRkL3JlbW92ZSBoaW50IixsLGspCnM9NQpicmVhawpj
-YXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5m
-MyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRpNixyKX0sCkMyOmZ1bmN0aW9uKGEsYixjKXt2YXIg
-cyxyLHEscCxvLG4sbT0iZXhjZXB0aW9uIixsPSJzdGFja1RyYWNlIgppZih0Lmg2LmIoYikmJkouUk0o
-Yi5xKDAsInN1Y2Nlc3MiKSwhMSkmJmIueDQobSkmJmIueDQobCkpe3M9Si5VNihiKQpyPUguayhzLnEo
-YixtKSkKYz1zLnEoYixsKQpxPW51bGx9ZWxzZSBpZihiIGluc3RhbmNlb2YgTC5RVyl7cj1iLmEKcT1i
-LmJ9ZWxzZXtyPUoudyhiKQpxPW51bGx9aWYocT09bnVsbClxPWMKcz1kb2N1bWVudApwPXMucXVlcnlT
-ZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PWEKbz1w
-LnF1ZXJ5U2VsZWN0b3IoInAiKQpvLnRvU3RyaW5nCnIudG9TdHJpbmcKby5pbm5lclRleHQ9cgpvPXAu
-cXVlcnlTZWxlY3RvcigicHJlIikKby50b1N0cmluZwpvLmlubmVyVGV4dD1KLncocSkKbj10LmJxLmEo
-cC5xdWVyeVNlbGVjdG9yKCJhLmJvdHRvbSIpKQpDLnhuLnNMVShuLFAuWGQoImh0dHBzIiwiZ2l0aHVi
-LmNvbSIsImRhcnQtbGFuZy9zZGsvaXNzdWVzL25ldyIsUC5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVw
-b3J0ZWQgaXNzdWUgd2l0aCBOTkJEIG1pZ3JhdGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5
-IixhKyJcblxuRXJyb3I6ICIrcisiXG5cblBsZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioq
-TmFtZSBvZiBwYWNrYWdlIGJlaW5nIG1pZ3JhdGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMg
-ZG9pbmcgd2hlbiB0aGlzIGlzc3VlIG9jY3VycmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsg
-YXJvdW5kIHRoaXMgaXNzdWUqKjpcbioqSGFzIHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQg
-aWYgc28sIGhvdyBvZnRlbioqOlxuKipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5FaihzLmdldEVsZW1l
-bnRCeUlkKCJzZGstdmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoq
-OlxuXG5UaGFua3MgZm9yIGZpbGluZyFcblxuU3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1p
-Z3JhdGlvbiBwcmV2aWV3IHRvb2wuX1xuXG5gYGBcbiIrSC5FaihjKSsiXG5gYGBcbiJdLHQuTix0Lnop
-KS5nbkQoKSkKcz1uLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0i
-aW5pdGlhbCIKcz1hKyI6ICIrSC5FaihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmlu
-ZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKHMpCndpbmRvdwpzPUguRWooYykKaWYodHlwZW9mIGNvbnNv
-bGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKHMpfSwKdDI6ZnVuY3Rpb24oYSxiKXt2
-YXIgcyxyLHEscCxvPXQuaC5hKFcucWMoYS5jdXJyZW50VGFyZ2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgp
-CnM9by5nZXRBdHRyaWJ1dGUoImhyZWYiKQpzLnRvU3RyaW5nCnI9TC5VcyhzKQpxPUwuRzYocykKcD1M
-LmFLKHMpCmlmKHEhPW51bGwpTC5hZihyLHEscCxiLG5ldyBMLm5UKHIscSxwKSkKZWxzZSBMLmFmKHIs
-bnVsbCxudWxsLGIsbmV3IEwuTlkocikpfSwKSzA6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHA9ZG9jdW1l
-bnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5U2VsZWN0b3IoImgyIikuaW5uZXJU
-ZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJvbSBzb3VyY2VzIgpwLnF1ZXJ5U2VsZWN0b3IoInAiKS5pbm5l
-clRleHQ9IlNvdXJjZXMgY29udGFpbiBzdGF0aWMgYW5hbHlzaXMgZXJyb3JzOiIKcz1wLnF1ZXJ5U2Vs
-ZWN0b3IoInByZSIpCnMudG9TdHJpbmcKcj1KLkVsKGEsdC5mKQpxPUguTGgocikKcy5pbm5lclRleHQ9
-bmV3IEgubEoocixxLkMoInFVKGxELkUpIikuYShuZXcgTC51ZSgpKSxxLkMoImxKPGxELkUscVU+Iikp
-LmsoMCwiXG4iKQpxPXAucXVlcnlTZWxlY3RvcigiYS5ib3R0b20iKS5zdHlsZQpxLmRpc3BsYXk9Im5v
-bmUiCnM9cC5zdHlsZQpzLmRpc3BsYXk9ImluaXRpYWwifSwKdlU6ZnVuY3Rpb24oKXt2YXIgcz1kb2N1
-bWVudCxyPXQuaApILkRoKHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBXLnd6KHMucXVl
-cnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlUpCnMuSyhzLG5ldyBMLkdIKCkpfSwKaFg6ZnVuY3Rpb24o
-YSxiLGMpe3JldHVybiBMLll3KGEsYixjKX0sCll3OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz0wLHI9UC5G
-WCh0LnopLHE9MSxwLG89W10sbixtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkaFg9UC5seihmdW5jdGlv
-bihkLGUpe2lmKGQ9PT0xKXtwPWUKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaj10
-Lk4Kcz02CnJldHVybiBQLmpRKEwuUTYoYSxQLkVGKFsicmVnaW9uIiwicmVnaW9uIiwib2Zmc2V0IixI
-LkVqKGIpXSxqLGopLHQuRyksJGFzeW5jJGhYKQpjYXNlIDY6bj1lCmo9bgppPUouVTYoaikKbT1uZXcg
-VS5kMihVLmpmKGkucShqLCJlZGl0cyIpKSxILmsoaS5xKGosImV4cGxhbmF0aW9uIikpLEguVWMoaS5x
-KGosImxpbmUiKSksSC5rKGkucShqLCJkaXNwbGF5UGF0aCIpKSxILmsoaS5xKGosInVyaVBhdGgiKSks
-VS5OZChpLnEoaiwidHJhY2VzIikpKQpMLlQxKG0pCkwuRnIoYSxiLGMpCkwueVgoIi5lZGl0LXBhbmVs
-IC5wYW5lbC1jb250ZW50IiwhMSkKcT0xCnM9NQpicmVhawpjYXNlIDM6cT0yCmc9cApsPUguUnUoZykK
-az1ILnRzKGcpCkwuQzIoImNvdWxkbid0IGxvYWQgZWRpdCBkZXRhaWxzIixsLGspCnM9NQpicmVhawpj
-YXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5m
-MyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRoWCxyKX0sCkc3OmZ1bmN0aW9uKGEsYixjLGQsZSl7
-cmV0dXJuIEwuTDUoYSxiLGMsZCxlKX0sCkw1OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHM9MCxyPVAu
-RlgodC5IKSxxLHA9MixvLG49W10sbSxsLGssaixpLGgsZwp2YXIgJGFzeW5jJEc3PVAubHooZnVuY3Rp
-b24oZixhMCl7aWYoZj09PTEpe289YTAKcz1wfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDppZigh
-Qy54Qi5UYyhhLCIuZGFydCIpKXtMLkJFKGEsQi53UigpLGQpCkwuQlgoYSxudWxsKQppZihlIT1udWxs
-KWUuJDAoKQpzPTEKYnJlYWt9cD00Cmk9dC5OCnM9NwpyZXR1cm4gUC5qUShMLlE2KGEsUC5FRihbImlu
-bGluZSIsInRydWUiXSxpLGkpLHQuRyksJGFzeW5jJEc3KQpjYXNlIDc6bT1hMApMLkJFKGEsQi5ZZiht
-KSxkKQpMLmZHKGIsYykKbD1MLlVzKGEpCkwuQlgobCxiKQppZihlIT1udWxsKWUuJDAoKQpwPTIKcz02
-CmJyZWFrCmNhc2UgNDpwPTMKZz1vCms9SC5SdShnKQpqPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9h
-ZCBkYXJ0IGZpbGUgIithLGssaikKcz02CmJyZWFrCmNhc2UgMzpzPTIKYnJlYWsKY2FzZSA2OmNhc2Ug
-MTpyZXR1cm4gUC55QyhxLHIpCmNhc2UgMjpyZXR1cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQLkRJKCRh
-c3luYyRHNyxyKX0sCkdlOmZ1bmN0aW9uKCl7dmFyIHM9MCxyPVAuRlgodC56KSxxPTEscCxvPVtdLG4s
-bSxsLGssaixpLGgsZwp2YXIgJGFzeW5jJEdlPVAubHooZnVuY3Rpb24oYSxiKXtpZihhPT09MSl7cD1i
-CnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aD0iL19wcmV2aWV3L25hdmlnYXRpb25UcmVl
-Lmpzb24iCnE9MwpzPTYKcmV0dXJuIFAualEoTC5RNihoLEMuQ00sdC5lZSksJGFzeW5jJEdlKQpjYXNl
-IDY6bj1iCmo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm5hdi10cmVlIikKai50b1N0cmluZwptPWoK
-Si5sNShtLCIiKQpqPUwubUsobikKJC5JUj1qCkwudFgobSxqLCEwKQpxPTEKcz01CmJyZWFrCmNhc2Ug
-MzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9hZCBuYXZpZ2F0aW9u
-IHRyZWUiLGwsaykKcz01CmJyZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51
-bGwscikKY2FzZSAxOnJldHVybiBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJEdlLHIpfSwK
-cU86ZnVuY3Rpb24oYSl7dmFyIHMscixxPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1DLkNELnpR
-KCQuZmkoKS5vZmZzZXRIZWlnaHQpLG89d2luZG93LmlubmVySGVpZ2h0Cm8udG9TdHJpbmcKcz1DLkNE
-LnpRKCQuRFcoKS5vZmZzZXRIZWlnaHQpCnI9cS5ib3R0b20Kci50b1N0cmluZwppZihyPm8tKHMrMTQp
-KUouZGgoYSkKZWxzZXtvPXEudG9wCm8udG9TdHJpbmcKaWYobzxwKzE0KUouZGgoYSl9fSwKZkc6ZnVu
-Y3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvCmlmKGEhPW51bGwpe3M9ZG9jdW1lbnQKcj1zLmdldEVsZW1l
-bnRCeUlkKCJvIitILkVqKGEpKQpxPXMucXVlcnlTZWxlY3RvcigiLmxpbmUtIitILkVqKGIpKQppZihy
-IT1udWxsKXtMLnFPKHIpCkouZFIocikuaSgwLCJ0YXJnZXQiKX1lbHNlIGlmKHEhPW51bGwpe3M9cS5w
-YXJlbnRFbGVtZW50CnMudG9TdHJpbmcKTC5xTyhzKX1pZihxIT1udWxsKUouZFIodC5oLmEocS5wYXJl
-bnROb2RlKSkuaSgwLCJoaWdobGlnaHQiKX1lbHNle3M9ZG9jdW1lbnQKcD10LmgKSC5EaChwLHAsIlQi
-LCJxdWVyeVNlbGVjdG9yQWxsIikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saW5lLW5vIikKbz1uZXcg
-Vy53eihzLHQuVSkKaWYoby5nQShvKT09PTApcmV0dXJuCkwucU8ocC5hKEMudDUuZ3RIKHMpKSl9fSwK
-YWY6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgcyxyLHEscD10LkYsbz1MLkc2KHAuYSh3aW5kb3cubG9j
+dGVkIGV4dGVuZGVkIG9wZXJhdGlvbiAiK0guRWoocykpKX0sCksoYSxiLGMpe2lmKHR5cGVvZiBjPT0i
+c3RyaW5nIilyZXR1cm4gSC5KKGEsYyxhLnNFQSkKZWxzZSBpZih0eXBlb2YgYz09Im51bWJlciIpcmV0
+dXJuIEguVFYoYSxiLGMpCmVsc2UgcmV0dXJuIGN9LApyKGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZv
+cihzPTA7czxyOysrcyljW3NdPUguSyhhLGIsY1tzXSl9LAp5KGEsYixjKXt2YXIgcyxyPWMubGVuZ3Ro
+CmZvcihzPTI7czxyO3MrPTMpY1tzXT1ILksoYSxiLGNbc10pfSwKVFYoYSxiLGMpe3ZhciBzLHIscT1i
+LnkKaWYocT09PTEwKXtpZihjPT09MClyZXR1cm4gYi56CnM9Yi5RCnI9cy5sZW5ndGgKaWYoYzw9cily
+ZXR1cm4gc1tjLTFdCmMtPXIKYj1iLnoKcT1iLnl9ZWxzZSBpZihjPT09MClyZXR1cm4gYgppZihxIT09
+OSl0aHJvdyBILmIoUC5oVigiSW5kZXhlZCBiYXNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIHR5cGUiKSkK
+cz1iLlEKaWYoYzw9cy5sZW5ndGgpcmV0dXJuIHNbYy0xXQp0aHJvdyBILmIoUC5oVigiQmFkIGluZGV4
+ICIrYysiIGZvciAiK2IudygwKSkpfSwKV2UoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGss
+agppZihiPT09ZClyZXR1cm4hMAppZighSC5BOChkKSlpZighKGQ9PT10Ll8pKXM9ITEKZWxzZSBzPSEw
+CmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnI9Yi55CmlmKHI9PT00KXJldHVybiEwCmlmKEguQTgoYikp
+cmV0dXJuITEKaWYoYi55IT09MSlzPSExCmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnE9cj09PTEzCmlm
+KHEpaWYoSC5XZShhLGNbYi56XSxjLGQsZSkpcmV0dXJuITAKcD1kLnkKcz1iPT09dC5QfHxiPT09dC5U
+CmlmKHMpe2lmKHA9PT04KXJldHVybiBILldlKGEsYixjLGQueixlKQpyZXR1cm4gZD09PXQuUHx8ZD09
+PXQuVHx8cD09PTd8fHA9PT02fWlmKGQ9PT10Lkspe2lmKHI9PT04KXJldHVybiBILldlKGEsYi56LGMs
+ZCxlKQppZihyPT09NilyZXR1cm4gSC5XZShhLGIueixjLGQsZSkKcmV0dXJuIHIhPT03fWlmKHI9PT02
+KXJldHVybiBILldlKGEsYi56LGMsZCxlKQppZihwPT09Nil7cz1ILmN6KGEsZCkKcmV0dXJuIEguV2Uo
+YSxiLGMscyxlKX1pZihyPT09OCl7aWYoIUguV2UoYSxiLnosYyxkLGUpKXJldHVybiExCnJldHVybiBI
+LldlKGEsSC54WihhLGIpLGMsZCxlKX1pZihyPT09Nyl7cz1ILldlKGEsdC5QLGMsZCxlKQpyZXR1cm4g
+cyYmSC5XZShhLGIueixjLGQsZSl9aWYocD09PTgpe2lmKEguV2UoYSxiLGMsZC56LGUpKXJldHVybiEw
+CnJldHVybiBILldlKGEsYixjLEgueFooYSxkKSxlKX1pZihwPT09Nyl7cz1ILldlKGEsYixjLHQuUCxl
+KQpyZXR1cm4gc3x8SC5XZShhLGIsYyxkLnosZSl9aWYocSlyZXR1cm4hMQpzPXIhPT0xMQppZigoIXN8
+fHI9PT0xMikmJmQ9PT10LlkpcmV0dXJuITAKaWYocD09PTEyKXtpZihiPT09dC51KXJldHVybiEwCmlm
+KHIhPT0xMilyZXR1cm4hMQpvPWIuUQpuPWQuUQptPW8ubGVuZ3RoCmlmKG0hPT1uLmxlbmd0aClyZXR1
+cm4hMQpjPWM9PW51bGw/bzpvLmNvbmNhdChjKQplPWU9PW51bGw/bjpuLmNvbmNhdChlKQpmb3IobD0w
+O2w8bTsrK2wpe2s9b1tsXQpqPW5bbF0KaWYoIUguV2UoYSxrLGMsaixlKXx8IUguV2UoYSxqLGUsayxj
+KSlyZXR1cm4hMX1yZXR1cm4gSC5iTyhhLGIueixjLGQueixlKX1pZihwPT09MTEpe2lmKGI9PT10LnUp
+cmV0dXJuITAKaWYocylyZXR1cm4hMQpyZXR1cm4gSC5iTyhhLGIsYyxkLGUpfWlmKHI9PT05KXtpZihw
+IT09OSlyZXR1cm4hMQpyZXR1cm4gSC5wRyhhLGIsYyxkLGUpfXJldHVybiExfSwKYk8oYTMsYTQsYTUs
+YTYsYTcpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyCmlm
+KCFILldlKGEzLGE0LnosYTUsYTYueixhNykpcmV0dXJuITEKcz1hNC5RCnI9YTYuUQpxPXMuYQpwPXIu
+YQpvPXEubGVuZ3RoCm49cC5sZW5ndGgKaWYobz5uKXJldHVybiExCm09bi1vCmw9cy5iCms9ci5iCmo9
+bC5sZW5ndGgKaT1rLmxlbmd0aAppZihvK2o8bitpKXJldHVybiExCmZvcihoPTA7aDxvOysraCl7Zz1x
+W2hdCmlmKCFILldlKGEzLHBbaF0sYTcsZyxhNSkpcmV0dXJuITF9Zm9yKGg9MDtoPG07KytoKXtnPWxb
+aF0KaWYoIUguV2UoYTMscFtvK2hdLGE3LGcsYTUpKXJldHVybiExfWZvcihoPTA7aDxpOysraCl7Zz1s
+W20raF0KaWYoIUguV2UoYTMsa1toXSxhNyxnLGE1KSlyZXR1cm4hMX1mPXMuYwplPXIuYwpkPWYubGVu
+Z3RoCmM9ZS5sZW5ndGgKZm9yKGI9MCxhPTA7YTxjO2ErPTMpe2EwPWVbYV0KZm9yKDshMDspe2lmKGI+
+PWQpcmV0dXJuITEKYTE9ZltiXQpiKz0zCmlmKGEwPGExKXJldHVybiExCmEyPWZbYi0yXQppZihhMTxh
+MCl7aWYoYTIpcmV0dXJuITEKY29udGludWV9Zz1lW2ErMV0KaWYoYTImJiFnKXJldHVybiExCmc9Zlti
+LTFdCmlmKCFILldlKGEzLGVbYSsyXSxhNyxnLGE1KSlyZXR1cm4hMQpicmVha319Zm9yKDtiPGQ7KXtp
+ZihmW2IrMV0pcmV0dXJuITEKYis9M31yZXR1cm4hMH0sCnBHKGEsYixjLGQsZSl7dmFyIHMscixxLHAs
+byxuLG0sbD1iLnosaz1kLnoKZm9yKDtsIT09azspe3M9YS50UltsXQppZihzPT1udWxsKXJldHVybiEx
+CmlmKHR5cGVvZiBzPT0ic3RyaW5nIil7bD1zCmNvbnRpbnVlfXI9c1trXQppZihyPT1udWxsKXJldHVy
+biExCnE9ci5sZW5ndGgKcD1xPjA/bmV3IEFycmF5KHEpOnYudHlwZVVuaXZlcnNlLnNFQQpmb3Iobz0w
+O288cTsrK28pcFtvXT1ILmNFKGEsYixyW29dKQpyZXR1cm4gSC5TVyhhLHAsbnVsbCxjLGQuUSxlKX1u
+PWIuUQptPWQuUQpyZXR1cm4gSC5TVyhhLG4sbnVsbCxjLG0sZSl9LApTVyhhLGIsYyxkLGUsZil7dmFy
+IHMscixxLHA9Yi5sZW5ndGgKZm9yKHM9MDtzPHA7KytzKXtyPWJbc10KcT1lW3NdCmlmKCFILldlKGEs
+cixkLHEsZikpcmV0dXJuITF9cmV0dXJuITB9LApsUihhKXt2YXIgcyxyPWEueQppZighKGE9PT10LlB8
+fGE9PT10LlQpKWlmKCFILkE4KGEpKWlmKHIhPT03KWlmKCEocj09PTYmJkgubFIoYS56KSkpcz1yPT09
+OCYmSC5sUihhLnopCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4g
+c30sCmNjKGEpe3ZhciBzCmlmKCFILkE4KGEpKWlmKCEoYT09PXQuXykpcz0hMQplbHNlIHM9ITAKZWxz
+ZSBzPSEwCnJldHVybiBzfSwKQTgoYSl7dmFyIHM9YS55CnJldHVybiBzPT09Mnx8cz09PTN8fHM9PT00
+fHxzPT09NXx8YT09PXQuWH0sCkl4KGEsYil7dmFyIHMscixxPU9iamVjdC5rZXlzKGIpLHA9cS5sZW5n
+dGgKZm9yKHM9MDtzPHA7KytzKXtyPXFbc10KYVtyXT1iW3JdfX0sCnZVKGEpe3JldHVybiBhPjA/bmV3
+IEFycmF5KGEpOnYudHlwZVVuaXZlcnNlLnNFQX0sCkpjOmZ1bmN0aW9uIEpjKGEsYil7dmFyIF89dGhp
+cwpfLmE9YQpfLmI9YgpfLng9Xy5yPV8uYz1udWxsCl8ueT0wCl8uY3k9Xy5jeD1fLmNoPV8uUT1fLno9
+bnVsbH0sCkc6ZnVuY3Rpb24gRygpe3RoaXMuYz10aGlzLmI9dGhpcy5hPW51bGx9LAprUzpmdW5jdGlv
+biBrUygpe30sCmlNOmZ1bmN0aW9uIGlNKGEpe3RoaXMuYT1hfSwKUjkoYSl7cmV0dXJuIHQudy5iKGEp
+fHx0LkIuYihhKXx8dC5kei5iKGEpfHx0LkkuYihhKXx8dC5BLmIoYSl8fHQuZzQuYihhKXx8dC5nMi5i
+KGEpfSwKRlAoYSl7cmV0dXJuIEgudihILmooYSkpfX0sSj17ClF1KGEsYixjLGQpe3JldHVybntpOmEs
+cDpiLGU6Yyx4OmR9fSwKa3MoYSl7dmFyIHMscixxLHAsbyxuPWFbdi5kaXNwYXRjaFByb3BlcnR5TmFt
+ZV0KaWYobj09bnVsbClpZigkLkJ2PT1udWxsKXtILlhEKCkKbj1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5h
+bWVdfWlmKG4hPW51bGwpe3M9bi5wCmlmKCExPT09cylyZXR1cm4gbi5pCmlmKCEwPT09cylyZXR1cm4g
+YQpyPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQppZihzPT09cilyZXR1cm4gbi5pCmlmKG4uZT09PXIp
+dGhyb3cgSC5iKFAuU1koIlJldHVybiBpbnRlcmNlcHRvciBmb3IgIitILkVqKHMoYSxuKSkpKX1xPWEu
+Y29uc3RydWN0b3IKaWYocT09bnVsbClwPW51bGwKZWxzZXtvPSQuem0KaWYobz09bnVsbClvPSQuem09
+di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpwPXFbb119aWYocCE9bnVsbClyZXR1cm4gcApwPUgu
+dzMoYSkKaWYocCE9bnVsbClyZXR1cm4gcAppZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gQy5E
+RwpzPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQppZihzPT1udWxsKXJldHVybiBDLlpRCmlmKHM9PT1P
+YmplY3QucHJvdG90eXBlKXJldHVybiBDLlpRCmlmKHR5cGVvZiBxPT0iZnVuY3Rpb24iKXtvPSQuem0K
+aWYobz09bnVsbClvPSQuem09di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpPYmplY3QuZGVmaW5l
+UHJvcGVydHkocSxvLHt2YWx1ZTpDLnZCLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25m
+aWd1cmFibGU6dHJ1ZX0pCnJldHVybiBDLnZCfXJldHVybiBDLnZCfSwKUWkoYSxiKXtpZihhPDB8fGE+
+NDI5NDk2NzI5NSl0aHJvdyBILmIoUC5URShhLDAsNDI5NDk2NzI5NSwibGVuZ3RoIixudWxsKSkKcmV0
+dXJuIEoucHkobmV3IEFycmF5KGEpLGIpfSwKS2goYSxiKXtpZihhPDApdGhyb3cgSC5iKFAueFkoIkxl
+bmd0aCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXI6ICIrYSxudWxsKSkKcmV0dXJuIEguUUko
+bmV3IEFycmF5KGEpLGIuQygiamQ8MD4iKSl9LApweShhLGIpe3JldHVybiBKLkVwKEguUUkoYSxiLkMo
+ImpkPDA+IikpLGIpfSwKRXAoYSxiKXthLmZpeGVkJGxlbmd0aD1BcnJheQpyZXR1cm4gYX0sCnpDKGEp
+e2EuZml4ZWQkbGVuZ3RoPUFycmF5CmEuaW1tdXRhYmxlJGxpc3Q9QXJyYXkKcmV0dXJuIGF9LApHYShh
+KXtpZihhPDI1Nilzd2l0Y2goYSl7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6
+Y2FzZSAzMjpjYXNlIDEzMzpjYXNlIDE2MDpyZXR1cm4hMApkZWZhdWx0OnJldHVybiExfXN3aXRjaChh
+KXtjYXNlIDU3NjA6Y2FzZSA4MTkyOmNhc2UgODE5MzpjYXNlIDgxOTQ6Y2FzZSA4MTk1OmNhc2UgODE5
+NjpjYXNlIDgxOTc6Y2FzZSA4MTk4OmNhc2UgODE5OTpjYXNlIDgyMDA6Y2FzZSA4MjAxOmNhc2UgODIw
+MjpjYXNlIDgyMzI6Y2FzZSA4MjMzOmNhc2UgODIzOTpjYXNlIDgyODc6Y2FzZSAxMjI4ODpjYXNlIDY1
+Mjc5OnJldHVybiEwCmRlZmF1bHQ6cmV0dXJuITF9fSwKbW0oYSxiKXt2YXIgcyxyCmZvcihzPWEubGVu
+Z3RoO2I8czspe3I9Qy54Qi5XKGEsYikKaWYociE9PTMyJiZyIT09MTMmJiFKLkdhKHIpKWJyZWFrOysr
+Yn1yZXR1cm4gYn0sCmMxKGEsYil7dmFyIHMscgpmb3IoO2I+MDtiPXMpe3M9Yi0xCnI9Qy54Qi5PKGEs
+cykKaWYociE9PTMyJiZyIT09MTMmJiFKLkdhKHIpKWJyZWFrfXJldHVybiBifSwKVTYoYSl7aWYodHlw
+ZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBhCmlm
+KGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9i
+amVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4g
+YX1pZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sCllFKGEpe2lmKGE9
+PW51bGwpcmV0dXJuIGEKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9u
+IilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJu
+IGEKcmV0dXJuIEoua3MoYSl9LAppYShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpe2lmKE1hdGguZmxv
+b3IoYSk9PWEpcmV0dXJuIEouYlUucHJvdG90eXBlCnJldHVybiBKLmtELnByb3RvdHlwZX1pZih0eXBl
+b2YgYT09InN0cmluZyIpcmV0dXJuIEouRHIucHJvdG90eXBlCmlmKGE9PW51bGwpcmV0dXJuIEoud2Uu
+cHJvdG90eXBlCmlmKHR5cGVvZiBhPT0iYm9vbGVhbiIpcmV0dXJuIEoueUUucHJvdG90eXBlCmlmKGEu
+Y29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9iamVj
+dCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4gYX1p
+ZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sCnJZKGEpe2lmKHR5cGVv
+ZiBhPT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZigh
+KGEgaW5zdGFuY2VvZiBQLk1oKSlyZXR1cm4gSi5rZC5wcm90b3R5cGUKcmV0dXJuIGF9LAp3MShhKXtp
+ZihhPT1udWxsKXJldHVybiBhCmlmKGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3Rv
+dHlwZQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBK
+LmM1LnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4g
+Si5rcyhhKX0sCkE1KGEsYil7cmV0dXJuIEoudzEoYSkuZVIoYSxiKX0sCkVoKGEsYixjKXtyZXR1cm4g
+Si5ZRShhKS5tSyhhLGIsYyl9LApFbChhLGIpe3JldHVybiBKLncxKGEpLmRyKGEsYil9LApGNyhhKXty
+ZXR1cm4gSi5VNihhKS5nb3IoYSl9LApGTChhLGIpe3JldHVybiBKLnJZKGEpLmRkKGEsYil9LApHQShh
+LGIpe3JldHVybiBKLncxKGEpLkUoYSxiKX0sCkhtKGEpe3JldHVybiBKLlU2KGEpLmdBKGEpfSwKSVQo
+YSl7cmV0dXJuIEoudzEoYSkuZ20oYSl9LApKeShhLGIpe3JldHVybiBKLmlhKGEpLmU3KGEsYil9LApM
+dChhKXtyZXR1cm4gSi5ZRShhKS53ZyhhKX0sCk0xKGEsYixjKXtyZXR1cm4gSi53MShhKS5FMihhLGIs
+Yyl9LApNdShhLGIpe3JldHVybiBKLllFKGEpLnNQKGEsYil9LApSTShhLGIpe2lmKGE9PW51bGwpcmV0
+dXJuIGI9PW51bGwKaWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBiIT1udWxsJiZhPT09YgpyZXR1
+cm4gSi5pYShhKS5ETihhLGIpfSwKUlgoYSl7cmV0dXJuIEoudzEoYSkuYnIoYSl9LApUMChhKXtyZXR1
+cm4gSi5yWShhKS5iUyhhKX0sCmE2KGEsYil7cmV0dXJuIEouclkoYSkuTyhhLGIpfSwKYlQoYSl7cmV0
+dXJuIEouWUUoYSkuRDQoYSl9LApjSChhKXtyZXR1cm4gSi5yWShhKS5oYyhhKX0sCmRSKGEpe3JldHVy
+biBKLllFKGEpLmdQKGEpfSwKZFooYSxiLGMsZCl7cmV0dXJuIEouWUUoYSkuT24oYSxiLGMsZCl9LApk
+aChhKXtyZXR1cm4gSi5ZRShhKS5GRihhKX0sCmRyKGEsYil7cmV0dXJuIEouWUUoYSkuc2E0KGEsYil9
+LApoZihhKXtyZXR1cm4gSi5pYShhKS5naU8oYSl9LAppZyhhKXtyZXR1cm4gSi5ZRShhKS5nUWcoYSl9
+LApsNShhLGIpe3JldHVybiBKLllFKGEpLnNoZihhLGIpfSwKcUYoYSl7cmV0dXJuIEouWUUoYSkuZ1Zs
+KGEpfSwKdEgoYSxiLGMpe3JldHVybiBKLllFKGEpLnBrKGEsYixjKX0sCnU5KGEsYixjKXtyZXR1cm4g
+Si53MShhKS5ZNShhLGIsYyl9LAp1VShhKXtyZXR1cm4gSi5VNihhKS5nbDAoYSl9LAp3KGEpe3JldHVy
+biBKLmlhKGEpLncoYSl9LAp3ZihhLGIpe3JldHVybiBKLllFKGEpLnNSTihhLGIpfSwKeDkoYSxiKXtp
+Zih0eXBlb2YgYj09PSJudW1iZXIiKWlmKGEuY29uc3RydWN0b3I9PUFycmF5fHx0eXBlb2YgYT09InN0
+cmluZyJ8fEgud1YoYSxhW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdKSlpZihiPj4+MD09PWImJmI8YS5s
+ZW5ndGgpcmV0dXJuIGFbYl0KcmV0dXJuIEouVTYoYSkucShhLGIpfSwKemwoYSxiKXtyZXR1cm4gSi5V
+NihhKS50ZyhhLGIpfSwKR3Y6ZnVuY3Rpb24gR3YoKXt9LAp5RTpmdW5jdGlvbiB5RSgpe30sCndlOmZ1
+bmN0aW9uIHdlKCl7fSwKTUY6ZnVuY3Rpb24gTUYoKXt9LAppQzpmdW5jdGlvbiBpQygpe30sCmtkOmZ1
+bmN0aW9uIGtkKCl7fSwKYzU6ZnVuY3Rpb24gYzUoKXt9LApqZDpmdW5jdGlvbiBqZChhKXt0aGlzLiR0
+aT1hfSwKUG86ZnVuY3Rpb24gUG8oYSl7dGhpcy4kdGk9YX0sCm0xOmZ1bmN0aW9uIG0xKGEsYixjKXt2
+YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0wCl8uZD1udWxsCl8uJHRpPWN9LApxSTpmdW5jdGlvbiBx
+SSgpe30sCmJVOmZ1bmN0aW9uIGJVKCl7fSwKa0Q6ZnVuY3Rpb24ga0QoKXt9LApEcjpmdW5jdGlvbiBE
+cigpe319LEw9ewpJcSgpe0MuQlouQihkb2N1bWVudCwiRE9NQ29udGVudExvYWRlZCIsbmV3IEwuZSgp
+KQpDLm9sLkIod2luZG93LCJwb3BzdGF0ZSIsbmV3IEwuTCgpKX0sCmt6KGEpe3ZhciBzLHI9dC5oLmEo
+YS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKCI6c2NvcGUgPiB1bCIpLHE9ci5zdHlsZSxwPSIiK0Mu
+Q0QuelEoci5vZmZzZXRIZWlnaHQpKjIrInB4IgpxLm1heEhlaWdodD1wCnE9Si5xRihhKQpwPXEuJHRp
+CnM9cC5DKCJ+KDEpPyIpLmEobmV3IEwuV3gocixhKSkKdC5aLmEobnVsbCkKVy5KRShxLmEscS5iLHMs
+ITEscC5jKX0sCnlYKGEsYil7dmFyIHMscixxLHAsbyxuLG09InF1ZXJ5U2VsZWN0b3JBbGwiLGw9ZG9j
+dW1lbnQucXVlcnlTZWxlY3RvcihhKQpsLnRvU3RyaW5nCnM9dC5oCkguRGgocyxzLCJUIixtKQpyPXQu
+VQpxPW5ldyBXLnd6KGwucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1saW5rIikscikKcS5LKHEsbmV3IEwu
+SG8oYikpCkguRGgocyxzLCJUIixtKQpwPW5ldyBXLnd6KGwucXVlcnlTZWxlY3RvckFsbCgiLnJlZ2lv
+biIpLHIpCmlmKCFwLmdsMChwKSl7bz1sLnF1ZXJ5U2VsZWN0b3IoInRhYmxlW2RhdGEtcGF0aF0iKQpv
+LnRvU3RyaW5nCnAuSyhwLG5ldyBMLklDKG8uZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3
+IFcuaTcobykpLk9VKCJwYXRoIikpKSl9SC5EaChzLHMsIlQiLG0pCm49bmV3IFcud3oobC5xdWVyeVNl
+bGVjdG9yQWxsKCIuYWRkLWhpbnQtbGluayIpLHIpCm4uSyhuLG5ldyBMLkJOKCkpfSwKUTYoYSxiLGMp
+e3ZhciBzPW5ldyBYTUxIdHRwUmVxdWVzdCgpCkMuRHQuZW8ocywiR0VUIixMLlE0KGEsYiksITApCnMu
+c2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1V
+VEYtOCIpCnJldHVybiBMLkxVKHMsbnVsbCxjKX0sCnR5KGEsYil7dmFyIHM9bmV3IFhNTEh0dHBSZXF1
+ZXN0KCkscj10Lk4KQy5EdC5lbyhzLCJQT1NUIixMLlE0KGEsUC5GbChyLHIpKSwhMCkKcy5zZXRSZXF1
+ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IikK
+cmV0dXJuIEwuTFUocyxiLHQuRyl9LApMVShhLGIsYyl7cmV0dXJuIEwuVGcoYSxiLGMsYy5DKCIwPyIp
+KX0sClRnKGEsYixjLGQpe3ZhciBzPTAscj1QLkZYKGQpLHEscD0yLG8sbj1bXSxtLGwsayxqLGksaCxn
+LGYsZQp2YXIgJGFzeW5jJExVPVAubHooZnVuY3Rpb24oYTAsYTEpe2lmKGEwPT09MSl7bz1hMQpzPXB9
+d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9bmV3IFAuWmYobmV3IFAudnMoJC5YMyx0LmFvKSx0
+LmJqKQpnPXQuZ3gKZj1nLmEobmV3IEwuZkMoaCxhKSkKdC5aLmEobnVsbCkKaz10LnAKVy5KRShhLCJs
+b2FkIixmLCExLGspClcuSkUoYSwiZXJyb3IiLGcuYShoLmdZSigpKSwhMSxrKQphLnNlbmQoYj09bnVs
+bD9udWxsOkMuQ3QuT0IoYixudWxsKSkKcD00CnM9NwpyZXR1cm4gUC5qUShoLmEsJGFzeW5jJExVKQpj
+YXNlIDc6cD0yCnM9NgpicmVhawpjYXNlIDQ6cD0zCmU9bwpILlJ1KGUpCm09SC50cyhlKQpnPWEucmVh
+ZHlTdGF0ZQppZihnPT09NCYmYS5zdGF0dXM9PT0wKXRocm93IEguYihMLlRHKCJFcnJvciByZWFjaGlu
+ZyBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIiLCJUaGlzIHVzdWFsbHkgaGFwcGVucyBiZWNhdXNlIHRo
+ZSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIgaGFzIGV4aXRlZC4gIEZvclxuZXhhbXBsZSBpdCBtYXkg
+aGF2ZSBiZWVuIGFib3J0ZWQgd2l0aCBDdHJsLUMsIG9yIHlvdSBtYXkgaGF2ZSBjb21wbGV0ZWQgdGhp
+c1xubWlncmF0aW9uLCBvciBhbiBleGNlcHRpb24gbWF5IGhhdmUgb2NjdXJyZWQuICBQbGVhc2UgY2hl
+Y2sgdGhlIGNvbnNvbGUgd2hlcmVcbnlvdSBpbnZva2VkIGBkYXJ0IG1pZ3JhdGVgIHRvIHZlcmlmeSB0
+aGF0IHRoZSBwcmV2aWV3IHNlcnZlciBpcyBzdGlsbCBydW5uaW5nLlxuIikpCmVsc2V7bD1uZXcgSC5s
+SihILlFJKFsicmVhZHlTdGF0ZT0iK2csInJlc3BvbnNlVGV4dD0iK0MuQ3QuT0IoYS5yZXNwb25zZVRl
+eHQsbnVsbCksInJlc3BvbnNlVHlwZT0iK0MuQ3QuT0IoYS5yZXNwb25zZVR5cGUsbnVsbCksInJlc3Bv
+bnNlVXJsPSIrQy5DdC5PQihhLnJlc3BvbnNlVVJMLG51bGwpLCJzdGF0dXM9IitILkVqKGEuc3RhdHVz
+KSwic3RhdHVzVGV4dD0iK0MuQ3QuT0IoYS5zdGF0dXNUZXh0LG51bGwpXSx0LnMpLHQuZEcuYShuZXcg
+TC5UbSgpKSx0LmR2KS5rKDAsIiwgIikKdGhyb3cgSC5iKFAuVGwoIkVycm9yIHJlYWNoaW5nIG1pZ3Jh
+dGlvbiBwcmV2aWV3IHNlcnZlcjogIitILkVqKGwpLG0pKX1zPTYKYnJlYWsKY2FzZSAzOnM9MgpicmVh
+awpjYXNlIDY6aWYoYS5zdGF0dXM9PT00MDEpdGhyb3cgSC5iKEwuVEcoIlVuYXV0aG9yaXplZCByZXNw
+b25zZSBmcm9tIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlciIsIlRoZSBtaWdyYXRpb24gcHJldmlldyBz
+ZXJ2ZXIgaGFzIGRldGVjdGVkIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYXV0aFRva2VuIGluXG55b3Vy
+IFVSTCBhbmQgdGhlIHRva2VuIHRoYXQgd2FzIGdlbmVyYXRlZCBhdCB0aGUgdGltZSB0aGF0IGBkYXJ0
+IG1pZ3JhdGVgIHdhc1xucnVuLiAgSGF2ZSB5b3UgcmVzdGFydGVkIHRoZSBtaWdyYXRpb24gc2VydmVy
+IHJlY2VudGx5PyAgSWYgc28sIHlvdSdsbCBuZWVkIHRvXG5jaGVjayBpdHMgb3V0cHV0IGZvciBhIGZy
+ZXNoIFVSTCwgYW5kIHVzZSB0aGF0IFVSTCB0byBwZXJmb3JtIHlvdXIgbWlncmF0aW9uLlxuIikpCmc9
+YS5yZXNwb25zZVRleHQKZy50b1N0cmluZwppPUMuQ3QucFcoMCxnLG51bGwpCmlmKGEuc3RhdHVzPT09
+MjAwKXtxPWMuQygiMD8iKS5hKGkpCnM9MQpicmVha31lbHNle2kudG9TdHJpbmcKdGhyb3cgSC5iKGkp
+fWNhc2UgMTpyZXR1cm4gUC55QyhxLHIpCmNhc2UgMjpyZXR1cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQ
+LkRJKCRhc3luYyRMVSxyKX0sCmFLKGEpe3ZhciBzPVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0
+dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LApHNihhKXt2YXIgcz1QLmhLKGEpLmdoWSgpLnEo
+MCwib2Zmc2V0IikKcmV0dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LAppNihhKXtyZXR1cm4g
+TC5uVyh0LlYuYShhKSl9LApuVyhhKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxwLG89W10sbixtLGws
+ayxqLGksaCxnCnZhciAkYXN5bmMkaTY9UC5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1x
+fXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpoPXQuaC5hKFcucWMoYS5jdXJyZW50VGFyZ2V0KSku
+Z2V0QXR0cmlidXRlKCJocmVmIikKaC50b1N0cmluZwpuPWgKYS5wcmV2ZW50RGVmYXVsdCgpCnE9Mwpo
+PWRvY3VtZW50Cm09Qy5DRC56UShoLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iikuc2Nyb2xsVG9wKQpz
+PTYKcmV0dXJuIFAualEoTC50eShuLG51bGwpLCRhc3luYyRpNikKY2FzZSA2Omo9dC5GLmEod2luZG93
+LmxvY2F0aW9uKS5wYXRobmFtZQpqLnRvU3RyaW5nCnM9NwpyZXR1cm4gUC5qUShMLkc3KGosbnVsbCxu
+dWxsLCExLG51bGwpLCRhc3luYyRpNikKY2FzZSA3OmguYm9keS5jbGFzc0xpc3QuYWRkKCJuZWVkcy1y
+ZXJ1biIpCmg9aC5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmgudG9TdHJpbmcKaC5zY3JvbGxUb3A9
+Qy5qbi56UShtKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykK
+TC5DMigiY291bGRuJ3QgYWRkL3JlbW92ZSBoaW50IixsLGspCnM9NQpicmVhawpjYXNlIDI6cz0xCmJy
+ZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJl
+dHVybiBQLkRJKCRhc3luYyRpNixyKX0sCkMyKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbT0iZXhjZXB0
+aW9uIixsPSJzdGFja1RyYWNlIgppZih0Lmg2LmIoYikmJkouUk0oYi5xKDAsInN1Y2Nlc3MiKSwhMSkm
+JmIueDQobSkmJmIueDQobCkpe3M9Si5VNihiKQpyPUguayhzLnEoYixtKSkKYz1zLnEoYixsKQpxPW51
+bGx9ZWxzZSBpZihiIGluc3RhbmNlb2YgTC5RVyl7cj1iLmEKcT1iLmJ9ZWxzZXtyPUoudyhiKQpxPW51
+bGx9aWYocT09bnVsbClxPWMKcz1kb2N1bWVudApwPXMucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUi
+KQpwLnF1ZXJ5U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PWEKbz1wLnF1ZXJ5U2VsZWN0b3IoInAiKQpv
+LnRvU3RyaW5nCnIudG9TdHJpbmcKby5pbm5lclRleHQ9cgpvPXAucXVlcnlTZWxlY3RvcigicHJlIikK
+by50b1N0cmluZwpvLmlubmVyVGV4dD1KLncocSkKbj10LmJxLmEocC5xdWVyeVNlbGVjdG9yKCJhLmJv
+dHRvbSIpKQpDLnhuLnNMVShuLFAuWGQoImh0dHBzIiwiZ2l0aHViLmNvbSIsImRhcnQtbGFuZy9zZGsv
+aXNzdWVzL25ldyIsUC5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVwb3J0ZWQgaXNzdWUgd2l0aCBOTkJE
+IG1pZ3JhdGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5IixhKyJcblxuRXJyb3I6ICIrcisi
+XG5cblBsZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioqTmFtZSBvZiBwYWNrYWdlIGJlaW5n
+IG1pZ3JhdGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMgZG9pbmcgd2hlbiB0aGlzIGlzc3Vl
+IG9jY3VycmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUqKjpc
+bioqSGFzIHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQgaWYgc28sIGhvdyBvZnRlbioqOlxu
+KipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5FaihzLmdldEVsZW1lbnRCeUlkKCJzZGstdmVyc2lvbiIp
+LnRleHRDb250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoqOlxuXG5UaGFua3MgZm9yIGZpbGlu
+ZyFcblxuU3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1pZ3JhdGlvbiBwcmV2aWV3IHRvb2wu
+X1xuXG5gYGBcbiIrSC5FaihjKSsiXG5gYGBcbiJdLHQuTix0LnopKS5nbkQoKSkKcz1uLnN0eWxlCnMu
+ZGlzcGxheT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1hKyI6ICIrSC5F
+aihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVy
+cm9yKHMpCndpbmRvdwpzPUguRWooYykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRv
+dy5jb25zb2xlLmVycm9yKHMpfSwKdDIoYSxiKXt2YXIgcyxyLHEscCxvPXQuaC5hKFcucWMoYS5jdXJy
+ZW50VGFyZ2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgpCnM9by5nZXRBdHRyaWJ1dGUoImhyZWYiKQpzLnRv
+U3RyaW5nCnI9TC5VcyhzKQpxPUwuRzYocykKcD1MLmFLKHMpCmlmKHEhPW51bGwpTC5hZihyLHEscCxi
+LG5ldyBMLm5UKHIscSxwKSkKZWxzZSBMLmFmKHIsbnVsbCxudWxsLGIsbmV3IEwuTlkocikpfSwKSzAo
+YSl7dmFyIHMscixxLHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5
+U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJvbSBzb3VyY2VzIgpwLnF1
+ZXJ5U2VsZWN0b3IoInAiKS5pbm5lclRleHQ9IlNvdXJjZXMgY29udGFpbiBzdGF0aWMgYW5hbHlzaXMg
+ZXJyb3JzOiIKcz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCnMudG9TdHJpbmcKcj1KLkVsKGEsdC5mKQpx
+PUguTGgocikKcy5pbm5lclRleHQ9bmV3IEgubEoocixxLkMoInFVKGxELkUpIikuYShuZXcgTC51ZSgp
+KSxxLkMoImxKPGxELkUscVU+IikpLmsoMCwiXG4iKQpxPXAucXVlcnlTZWxlY3RvcigiYS5ib3R0b20i
+KS5zdHlsZQpxLmRpc3BsYXk9Im5vbmUiCnM9cC5zdHlsZQpzLmRpc3BsYXk9ImluaXRpYWwifSwKR2co
+KXt2YXIgcz1kb2N1bWVudCxyPXQuaApILkRoKHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5l
+dyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlUpCnMuSyhzLG5ldyBMLkdIKCkpfSwK
+aFgoYSxiLGMpe3JldHVybiBMLll3KGEsYixjKX0sCll3KGEsYixjKXt2YXIgcz0wLHI9UC5GWCh0Lnop
+LHE9MSxwLG89W10sbixtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkaFg9UC5seihmdW5jdGlvbihkLGUp
+e2lmKGQ9PT0xKXtwPWUKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaj10Lk4Kcz02
+CnJldHVybiBQLmpRKEwuUTYoYSxQLkVGKFsicmVnaW9uIiwicmVnaW9uIiwib2Zmc2V0IixILkVqKGIp
+XSxqLGopLHQuRyksJGFzeW5jJGhYKQpjYXNlIDY6bj1lCmo9bgppPUouVTYoaikKbT1uZXcgVS5kMihV
+LmpmKGkucShqLCJlZGl0cyIpKSxILmsoaS5xKGosImV4cGxhbmF0aW9uIikpLEguVWMoaS5xKGosImxp
+bmUiKSksSC5rKGkucShqLCJkaXNwbGF5UGF0aCIpKSxILmsoaS5xKGosInVyaVBhdGgiKSksVS5OZChp
+LnEoaiwidHJhY2VzIikpKQpMLlQxKG0pCkwuRnIoYSxiLGMpCkwueVgoIi5lZGl0LXBhbmVsIC5wYW5l
+bC1jb250ZW50IiwhMSkKcT0xCnM9NQpicmVhawpjYXNlIDM6cT0yCmc9cApsPUguUnUoZykKaz1ILnRz
+KGcpCkwuQzIoImNvdWxkbid0IGxvYWQgZWRpdCBkZXRhaWxzIixsLGspCnM9NQpicmVhawpjYXNlIDI6
+cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIp
+fX0pCnJldHVybiBQLkRJKCRhc3luYyRoWCxyKX0sCkc3KGEsYixjLGQsZSl7cmV0dXJuIEwuTDUoYSxi
+LGMsZCxlKX0sCkw1KGEsYixjLGQsZSl7dmFyIHM9MCxyPVAuRlgodC5IKSxxLHA9MixvLG49W10sbSxs
+LGssaixpLGgsZwp2YXIgJGFzeW5jJEc3PVAubHooZnVuY3Rpb24oZixhMCl7aWYoZj09PTEpe289YTAK
+cz1wfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDppZighQy54Qi5UYyhhLCIuZGFydCIpKXtMLkJF
+KGEsQi53UigpLGQpCkwuQlgoYSxudWxsKQppZihlIT1udWxsKWUuJDAoKQpzPTEKYnJlYWt9cD00Cmk9
+dC5OCnM9NwpyZXR1cm4gUC5qUShMLlE2KGEsUC5FRihbImlubGluZSIsInRydWUiXSxpLGkpLHQuRyks
+JGFzeW5jJEc3KQpjYXNlIDc6bT1hMApMLkJFKGEsQi5ZZihtKSxkKQpMLmZHKGIsYykKbD1MLlVzKGEp
+CkwuQlgobCxiKQppZihlIT1udWxsKWUuJDAoKQpwPTIKcz02CmJyZWFrCmNhc2UgNDpwPTMKZz1vCms9
+SC5SdShnKQpqPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9hZCBkYXJ0IGZpbGUgIithLGssaikKcz02
+CmJyZWFrCmNhc2UgMzpzPTIKYnJlYWsKY2FzZSA2OmNhc2UgMTpyZXR1cm4gUC55QyhxLHIpCmNhc2Ug
+MjpyZXR1cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRHNyxyKX0sCkdlKCl7dmFyIHM9
+MCxyPVAuRlgodC56KSxxPTEscCxvPVtdLG4sbSxsLGssaixpLGgsZwp2YXIgJGFzeW5jJEdlPVAubHoo
+ZnVuY3Rpb24oYSxiKXtpZihhPT09MSl7cD1iCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6
+aD0iL19wcmV2aWV3L25hdmlnYXRpb25UcmVlLmpzb24iCnE9MwpzPTYKcmV0dXJuIFAualEoTC5RNiho
+LEMuQ00sdC5lZSksJGFzeW5jJEdlKQpjYXNlIDY6bj1iCmo9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi
+Lm5hdi10cmVlIikKai50b1N0cmluZwptPWoKSi5sNShtLCIiKQpqPUwubUsobikKJC5JUj1qCkwudFgo
+bSxqLCEwKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykKTC5D
+MigiY291bGRuJ3QgbG9hZCBuYXZpZ2F0aW9uIHRyZWUiLGwsaykKcz01CmJyZWFrCmNhc2UgMjpzPTEK
+YnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBQLmYzKHAscil9fSkK
+cmV0dXJuIFAuREkoJGFzeW5jJEdlLHIpfSwKcU8oYSl7dmFyIHMscixxPWEuZ2V0Qm91bmRpbmdDbGll
+bnRSZWN0KCkscD1DLkNELnpRKCQuZmkoKS5vZmZzZXRIZWlnaHQpLG89d2luZG93LmlubmVySGVpZ2h0
+Cm8udG9TdHJpbmcKcz1DLkNELnpRKCQuRFcoKS5vZmZzZXRIZWlnaHQpCnI9cS5ib3R0b20Kci50b1N0
+cmluZwppZihyPm8tKHMrMTQpKUouZGgoYSkKZWxzZXtvPXEudG9wCm8udG9TdHJpbmcKaWYobzxwKzE0
+KUouZGgoYSl9fSwKZkcoYSxiKXt2YXIgcyxyLHEscCxvCmlmKGEhPW51bGwpe3M9ZG9jdW1lbnQKcj1z
+LmdldEVsZW1lbnRCeUlkKCJvIitILkVqKGEpKQpxPXMucXVlcnlTZWxlY3RvcigiLmxpbmUtIitILkVq
+KGIpKQppZihyIT1udWxsKXtMLnFPKHIpCkouZFIocikuaSgwLCJ0YXJnZXQiKX1lbHNlIGlmKHEhPW51
+bGwpe3M9cS5wYXJlbnRFbGVtZW50CnMudG9TdHJpbmcKTC5xTyhzKX1pZihxIT1udWxsKUouZFIodC5o
+LmEocS5wYXJlbnROb2RlKSkuaSgwLCJoaWdobGlnaHQiKX1lbHNle3M9ZG9jdW1lbnQKcD10LmgKSC5E
+aChwLHAsIlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saW5lLW5v
+IikKbz1uZXcgVy53eihzLHQuVSkKaWYoby5nQShvKT09PTApcmV0dXJuCkwucU8ocC5hKEMudDUuZ3RI
+KHMpKSl9fSwKYWYoYSxiLGMsZCxlKXt2YXIgcyxyLHEscD10LkYsbz1MLkc2KHAuYSh3aW5kb3cubG9j
 YXRpb24pLmhyZWYpLG49TC5hSyhwLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQppZihvIT1udWxsKXtz
 PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvIitILkVqKG8pKQppZihzIT1udWxsKUouZFIocykuUigw
 LCJ0YXJnZXQiKX1pZihuIT1udWxsKXtyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrSC5F
 aihuKSkKaWYociE9bnVsbCl7cT1yLnBhcmVudEVsZW1lbnQKcS50b1N0cmluZwpKLmRSKHEpLlIoMCwi
 aGlnaGxpZ2h0Iil9fWlmKGE9PXAuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lKXtMLmZHKGIsYykK
-ZS4kMCgpfWVsc2V7YS50b1N0cmluZwpMLkc3KGEsYixjLGQsZSl9fSwKUTQ6ZnVuY3Rpb24oYSxiKXt2
-YXIgcyxyLHE9UC5oSyhhKSxwPVAuRmwodC5OLHQuZGspCmZvcihzPXEuZ2hZKCkscz1zLmdQdShzKSxz
-PXMuZ20ocyk7cy5GKCk7KXtyPXMuZ2woKQpwLlk1KDAsci5hLHIuYil9Zm9yKHM9Yi5nUHUoYikscz1z
-LmdtKHMpO3MuRigpOyl7cj1zLmdsKCkKcC5ZNSgwLHIuYSxyLmIpfXAuWTUoMCwiYXV0aFRva2VuIiwk
-LlVFKCkpCnJldHVybiBxLm5tKDAscCkuZ25EKCl9LApUMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxv
-LG4sbSxsLGssaixpPSQuaEwoKQppLnRvU3RyaW5nCkoubDUoaSwiIikKaWYoYT09bnVsbCl7cz1kb2N1
-bWVudC5jcmVhdGVFbGVtZW50KCJwIikKQy5MdC5zYTQocywiU2VlIGRldGFpbHMgYWJvdXQgYSBwcm9w
-b3NlZCBlZGl0LiIpCkMuTHQuc1AocyxILlFJKFsicGxhY2Vob2xkZXIiXSx0LnMpKQppLmFwcGVuZENo
-aWxkKHMpCkMuTHQuRkYocykKcmV0dXJufXI9YS5kCnIudG9TdHJpbmcKcT0kLm5VKCkKcD1xLnpmKHIp
-Cm89YS5iCm49ZG9jdW1lbnQKbT1uLnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKbS50
-b1N0cmluZwpsPXEuSFAocixDLnhCLmJTKG0pKQprPWEuYwpqPW4uY3JlYXRlRWxlbWVudCgicCIpCmku
-YXBwZW5kQ2hpbGQoaikKai5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKEguRWoobykrIiBhdCAi
-KSkKcj1hLmUKci50b1N0cmluZwpxPXQuTgpxPVcuSjYoTC5RNChyLFAuRUYoWyJsaW5lIixKLncoayld
-LHEscSkpKQpxLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUobCsiOiIrSC5FaihrKSsiLiIpKQpq
-LmFwcGVuZENoaWxkKHEpCkouZGgoaikKTC5DQyhhLGkscCkKTC5GeihhLGkpfSwKTEg6ZnVuY3Rpb24o
-YSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkPSQueVAoKQpkLnRvU3RyaW5n
-CkoubDUoZCwiIikKaWYoYi5nQShiKT09PTApe3M9ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1lbnQoInAi
-KQpkLmFwcGVuZENoaWxkKHIpCnIuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiTm8gcHJvcG9z
-ZWQgZWRpdHMiKSl9ZWxzZSBmb3IoZD1iLmdQdShiKSxkPWQuZ20oZCkscz10LkYscT10Lk4scD10LlEs
-bz1wLkMoIn4oMSk/Iiksbj10LloscD1wLmM7ZC5GKCk7KXttPWQuZ2woKQpsPWRvY3VtZW50CnI9bC5j
-cmVhdGVFbGVtZW50KCJwIikKaz0kLnlQKCkKay5hcHBlbmRDaGlsZChyKQpyLmFwcGVuZENoaWxkKGwu
-Y3JlYXRlVGV4dE5vZGUoSC5FaihtLmEpKyI6IikpCmo9bC5jcmVhdGVFbGVtZW50KCJ1bCIpCmsuYXBw
-ZW5kQ2hpbGQoaikKZm9yKG09Si5JVChtLmIpO20uRigpOyl7az1tLmdsKCkKaT1sLmNyZWF0ZUVsZW1l
-bnQoImxpIikKai5hcHBlbmRDaGlsZChpKQpKLmRSKGkpLmkoMCwiZWRpdCIpCmg9bC5jcmVhdGVFbGVt
-ZW50KCJhIikKaS5hcHBlbmRDaGlsZChoKQpoLmNsYXNzTGlzdC5hZGQoImVkaXQtbGluayIpCmc9ay5j
-CmY9SC5FaihnKQpoLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KGgpKS5PVSgi
-b2Zmc2V0IiksZikKZT1rLmEKZj1ILkVqKGUpCmguc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3ko
-bmV3IFcuaTcoaCkpLk9VKCJsaW5lIiksZikKaC5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHROb2RlKCJs
-aW5lICIrSC5FaihlKSkpCmY9cy5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKZi50b1N0cmluZwpo
-LnNldEF0dHJpYnV0ZSgiaHJlZiIsTC5RNChmLFAuRUYoWyJsaW5lIixILkVqKGUpLCJvZmZzZXQiLEgu
-RWooZyldLHEscSkpKQpmPW8uYShuZXcgTC5FRShnLGUsYSkpCm4uYShudWxsKQpXLkpFKGgsImNsaWNr
-IixmLCExLHApCmkuYXBwZW5kQ2hpbGQobC5jcmVhdGVUZXh0Tm9kZSgiOiAiK0guRWooay5iKSkpfX1p
-ZihjKUwuVDEobnVsbCl9LApGcjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxPVAuaEsoQy5FeC5nRHIo
-dC5GLmEod2luZG93LmxvY2F0aW9uKSkrSC5FaihhKSkscD1QLkZsKHQuTix0LmRrKQppZihiIT1udWxs
-KXAuWTUoMCwib2Zmc2V0IixILkVqKGIpKQppZihjIT1udWxsKXAuWTUoMCwibGluZSIsSC5FaihjKSkK
-cC5ZNSgwLCJhdXRoVG9rZW4iLCQuVUUoKSkKcT1xLm5tKDAscCkKcD13aW5kb3cuaGlzdG9yeQpzPXQu
-egpyPXEuZ25EKCkKcC5wdXNoU3RhdGUobmV3IFAuQmYoW10sW10pLlB2KFAuRmwocyxzKSksIiIscil9
-LApFbjpmdW5jdGlvbihhKXt2YXIgcyxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4
-dENvbnRlbnQKci50b1N0cmluZwpzPXIrIi8iCmlmKEMueEIubihhLHMpKXJldHVybiBDLnhCLnluKGEs
-cy5sZW5ndGgpCmVsc2UgcmV0dXJuIGF9LApPdDpmdW5jdGlvbihhKXtzd2l0Y2goYS5yKXtjYXNlIEMu
-Y3c6YnJlYWsKY2FzZSBDLldEOmEucj1DLlhqCmJyZWFrCmNhc2UgQy5YajphLnI9Qy5XRApicmVhawpj
-YXNlIEMuZGM6dGhyb3cgSC5iKFAuUFYoIkZpbGUgIitILkVqKGEuYykrIiBzaG91bGQgbm90IGhhdmUg
-aW5kZXRlcm1pbmF0ZSBtaWdyYXRpb24gc3RhdHVzIikpCmRlZmF1bHQ6YnJlYWt9fSwKdGE6ZnVuY3Rp
-b24oYSxiKXt2YXIgcyxyPSJjaGVja19ib3giLHE9InRpdGxlIixwPSJvcHRlZC1vdXQiLG89Im1pZ3Jh
-dGluZyIKc3dpdGNoKGIpe2Nhc2UgQy5jdzphLmlubmVyVGV4dD1yCnM9Si5ZRShhKQpzLmdQKGEpLmko
-MCwiYWxyZWFkeS1taWdyYXRlZCIpCnMuZ1AoYSkuaSgwLCJkaXNhYmxlZCIpCmEuc2V0QXR0cmlidXRl
-KHEsIkFscmVhZHkgbWlncmF0ZWQiKQpicmVhawpjYXNlIEMuV0Q6YS5pbm5lclRleHQ9cgpzPUouWUUo
-YSkKcy5nUChhKS5SKDAscCkKcy5nUChhKS5pKDAsbykKYS5zZXRBdHRyaWJ1dGUocSwiTWlncmF0aW5n
-IHRvIG51bGwgc2FmZXR5IikKYnJlYWsKY2FzZSBDLlhqOmEuaW5uZXJUZXh0PSJjaGVja19ib3hfb3V0
-bGluZV9ibGFuayIKcz1KLllFKGEpCnMuZ1AoYSkuUigwLG8pCnMuZ1AoYSkuaSgwLHApCmEuc2V0QXR0
-cmlidXRlKHEsIk9wdGluZyBvdXQgb2YgbnVsbCBzYWZldHkiKQpicmVhawpkZWZhdWx0OmEuaW5uZXJU
-ZXh0PSJpbmRldGVybWluYXRlX2NoZWNrX2JveCIKcz1KLllFKGEpCnMuZ1AoYSkuUigwLG8pCnMuZ1Ao
-YSkuaSgwLHApCmEuc2V0QXR0cmlidXRlKHEsIk1peGVkIHN0YXR1c2VzIG9mICdtaWdyYXRpbmcnIGFu
-ZCAnb3B0aW5nIG91dCciKQpicmVha319LAp4bjpmdW5jdGlvbihhLGIpe3ZhciBzLHI9ImRpc2FibGVk
-IixxPWIuZ0woKQpMLnRhKGEscSkKaWYoYi5jPT09JC5EOSgpLmlubmVyVGV4dCl7aWYoYiBpbnN0YW5j
-ZW9mIEwuY0Qpe3M9Yi54CnMudG9TdHJpbmcKcz0hc31lbHNlIHM9ITEKaWYocyl7YS50b1N0cmluZwpK
-LmRSKGEpLmkoMCxyKX1lbHNle2EudG9TdHJpbmcKSi5kUihhKS5SKDAscil9TC50YSgkLmMwKCkscSl9
-fSwKQlg6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscD17fQpwLmE9YQphPUwuRW4oYSkKcC5hPWEKcz0k
-LkQ5KCkKcy50b1N0cmluZwpKLmRyKHMsYSkKcz1kb2N1bWVudApyPXQuaApILkRoKHIsciwiVCIsInF1
-ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1wYW5lbCAu
-bmF2LWxpbmsiKSx0LlUpCnMuSyhzLG5ldyBMLlZTKHApKQpzPSQuSVIKcT1zPT1udWxsP251bGw6TC55
-dyhzLHAuYSkKaWYocT09bnVsbCl7cD0kLmJOKCkKcC50b1N0cmluZwpKLmRSKHApLlIoMCwidmlzaWJs
-ZSIpfWVsc2V7cD0kLmJOKCkKcC50b1N0cmluZwpKLmRSKHApLmkoMCwidmlzaWJsZSIpCkwudGEoJC5j
-MCgpLHEuZ0woKSl9fSwKQVI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9Yi5iCmlmKHE9PT0kKXE9SC52
-KG5ldyBILmMoIkZpZWxkICdwYXJlbnQnIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iKSkKaWYocSE9
-bnVsbCl7cz10LmgKcj1zLmEocy5hKGEucGFyZW50Tm9kZSkucGFyZW50Tm9kZSkKTC54bihyLnF1ZXJ5
-U2VsZWN0b3IoIjpzY29wZSA+IC5zdGF0dXMtaWNvbiIpLHEpCkwuQVIocixxKX19LApiTDpmdW5jdGlv
-bihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9IjpzY29wZSA+IC5zdGF0dXMtaWNvbiIKZm9yKHM9Yi5k
-LHI9cy5sZW5ndGgscT10LmgscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwr
-K3Ape289c1twXQphLnRvU3RyaW5nCm49by5jCm4udG9TdHJpbmcKbT1hLnF1ZXJ5U2VsZWN0b3IoJ1tk
-YXRhLW5hbWUqPSInK1cuTGoobikrJyJdJykKaWYobyBpbnN0YW5jZW9mIEwudnQpe0wuYkwobSxvKQpM
-LnhuKG0ucXVlcnlTZWxlY3RvcihsKSxiKX1lbHNlIEwueG4ocS5hKG0ucGFyZW50Tm9kZSkucXVlcnlT
-ZWxlY3RvcihsKSxvKX19LApCRTpmdW5jdGlvbihhLGIsYyl7dmFyIHM9Ii5yZWdpb25zIixyPWRvY3Vt
-ZW50LHE9ci5xdWVyeVNlbGVjdG9yKHMpCnEudG9TdHJpbmcKcj1yLnF1ZXJ5U2VsZWN0b3IoIi5jb2Rl
-IikKci50b1N0cmluZwpKLnRIKHEsYi5hLCQuS0coKSkKSi50SChyLGIuYiwkLktHKCkpCkwuTEgoYSxi
-LmQsYykKaWYoYi5jLmxlbmd0aDwyZTUpTC52VSgpCkwueVgoIi5jb2RlIiwhMCkKTC55WChzLCEwKX0s
-CnRYOmZ1bmN0aW9uKGEwLGExLGEyKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD0i
-bWF0ZXJpYWwtaWNvbnMiLGM9InN0YXR1cy1pY29uIixiPWRvY3VtZW50LGE9Yi5jcmVhdGVFbGVtZW50
-KCJ1bCIpCmEwLmFwcGVuZENoaWxkKGEpCmZvcihzPWExLmxlbmd0aCxyPXQuTixxPXQuWixwPTA7cDxh
-MS5sZW5ndGg7YTEubGVuZ3RoPT09c3x8KDAsSC5saykoYTEpLCsrcCl7bz1hMVtwXQpuPWIuY3JlYXRl
-RWxlbWVudCgibGkiKQphLmFwcGVuZENoaWxkKG4pCmlmKG8gaW5zdGFuY2VvZiBMLnZ0KXttPUouWUUo
-bikKbS5nUChuKS5pKDAsImRpciIpCmw9by5jCmwudG9TdHJpbmcKbi5zZXRBdHRyaWJ1dGUoImRhdGEt
-IituZXcgVy5TeShuZXcgVy5pNyhuKSkuT1UoIm5hbWUiKSxsKQprPWIuY3JlYXRlRWxlbWVudCgic3Bh
-biIpCm4uYXBwZW5kQ2hpbGQoaykKbD1KLllFKGspCmwuZ1AoaykuaSgwLCJhcnJvdyIpCmwuc2hmKGss
-IiYjeDI1QkM7IikKaj1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpKLmRSKGopLmkoMCxkKQpqLmlubmVy
-VGV4dD0iZm9sZGVyX29wZW4iCm4uYXBwZW5kQ2hpbGQoaikKbD1vLmEKbC50b1N0cmluZwpuLmFwcGVu
-ZENoaWxkKGIuY3JlYXRlVGV4dE5vZGUobCkpCmw9by5kCmwudG9TdHJpbmcKTC50WChuLGwsITApCmk9
-Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbD1KLllFKGkpCmwuZ1AoaSkuaSgwLGQpCmkuaW5uZXJUZXh0
-PSJpbmRldGVybWluYXRlX2NoZWNrX2JveCIKbC5nUChpKS5pKDAsYykKTC54bihpLG8pCmw9bC5nVmwo
-aSkKaD1sLiR0aQpnPWguQygifigxKT8iKS5hKG5ldyBMLlREKG8sbixpKSkKcS5hKG51bGwpClcuSkUo
-bC5hLGwuYixnLCExLGguYykKbS5tSyhuLGksaikKTC5reihrKX1lbHNlIGlmKG8gaW5zdGFuY2VvZiBM
-LmNEKXtpPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCm09Si5ZRShpKQptLmdQKGkpLmkoMCxkKQppLmlu
-bmVyVGV4dD0iIgptLmdQKGkpLmkoMCxjKQpsPW8ueApsLnRvU3RyaW5nCmg9IWwKaWYoaCltLmdQKGkp
-LmkoMCwiZGlzYWJsZWQiKQpMLnhuKGksbykKbC50b1N0cmluZwppZihsKXttPW0uZ1ZsKGkpCmw9bS4k
-dGkKaD1sLkMoIn4oMSk/IikuYShuZXcgTC5JZihvLGksbikpCnEuYShudWxsKQpXLkpFKG0uYSxtLmIs
-aCwhMSxsLmMpfW4uYXBwZW5kQ2hpbGQoaSkKbT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpKLmRSKG0p
-LmkoMCxkKQptLmlubmVyVGV4dD0iaW5zZXJ0X2RyaXZlX2ZpbGUiCm4uYXBwZW5kQ2hpbGQobSkKZj1i
-LmNyZWF0ZUVsZW1lbnQoImEiKQpuLmFwcGVuZENoaWxkKGYpCm09Si5ZRShmKQptLmdQKGYpLmkoMCwi
-bmF2LWxpbmsiKQpsPW8uYwpsLnRvU3RyaW5nCmYuc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3ko
-bmV3IFcuaTcoZikpLk9VKCJuYW1lIiksbCkKbD1vLmQKbC50b1N0cmluZwpmLnNldEF0dHJpYnV0ZSgi
-aHJlZiIsTC5RNChsLFAuRmwocixyKSkpCmw9by5hCmwudG9TdHJpbmcKZi5hcHBlbmRDaGlsZChiLmNy
-ZWF0ZVRleHROb2RlKGwpKQptPW0uZ1ZsKGYpCmw9bS4kdGkKaD1sLkMoIn4oMSk/IikuYShuZXcgTC50
-QigpKQpxLmEobnVsbCkKVy5KRShtLmEsbS5iLGgsITEsbC5jKQpsPW8uZQpsLnRvU3RyaW5nCmlmKGw+
-MCl7ZT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpuLmFwcGVuZENoaWxkKGUpCkouZFIoZSkuaSgwLCJl
-ZGl0LWNvdW50IikKbT0iIitsKyIgIgppZihsPT09MSloPSJwcm9wb3NlZCBlZGl0IgplbHNlIGg9InBy
-b3Bvc2VkIGVkaXRzIgplLnNldEF0dHJpYnV0ZSgidGl0bGUiLG0raCkKZS5hcHBlbmRDaGlsZChiLmNy
-ZWF0ZVRleHROb2RlKEMuam4udyhsKSkpfX19fSwKdXo6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPWRvY3Vt
-ZW50LHI9cy5jcmVhdGVFbGVtZW50KCJidXR0b24iKSxxPXQuUSxwPXEuQygifigxKT8iKS5hKG5ldyBM
-Lm0yKGEsYykpCnQuWi5hKG51bGwpClcuSkUociwiY2xpY2siLHAsITEscS5jKQpxPVIuT1goYS5hKQpx
-LnRvU3RyaW5nCnIuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZShxKSkKYi5hcHBlbmRDaGlsZChy
-KX0sCkZ6OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPWEuYQppZihoPT1u
-dWxsKXJldHVybgpiLnRvU3RyaW5nCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1lbnQoInAiKQpxPWIu
-YXBwZW5kQ2hpbGQocikKcj1zLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpwPXQucwpKLk11KHIsSC5RSShb
-InR5cGUtZGVzY3JpcHRpb24iXSxwKSkKci5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCJBY3Rp
-b25zIikpCnEuYXBwZW5kQ2hpbGQocikKcS5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCI6Iikp
-Cm89cy5jcmVhdGVFbGVtZW50KCJwIikKYi5hcHBlbmRDaGlsZChvKQpmb3Iocj1oLmxlbmd0aCxuPXQu
-TyxtPTA7bTxoLmxlbmd0aDtoLmxlbmd0aD09PXJ8fCgwLEgubGspKGgpLCsrbSl7bD1oW21dCms9cy5j
-cmVhdGVFbGVtZW50KCJhIikKby5hcHBlbmRDaGlsZChrKQpqPWwuYQpqLnRvU3RyaW5nCmsuYXBwZW5k
-Q2hpbGQocy5jcmVhdGVUZXh0Tm9kZShqKSkKaj1sLmIKai50b1N0cmluZwprLnNldEF0dHJpYnV0ZSgi
-aHJlZiIsaikKaj1uLmEoSC5RSShbImFkZC1oaW50LWxpbmsiLCJiZWZvcmUtYXBwbHkiLCJidXR0b24i
-XSxwKSkKaT1KLmRSKGspCmkuVjEoMCkKaS5GVigwLGopfX0sCkNDOmZ1bmN0aW9uKGE0LGE1LGE2KXt2
-YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMixhMwpmb3Iocz1h
-NC5mLHI9cy5sZW5ndGgscT10LnMscD10Lk8sbz0wO288cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxI
-LmxrKShzKSwrK28pe249c1tvXQphNS50b1N0cmluZwptPWRvY3VtZW50Cmw9bS5jcmVhdGVFbGVtZW50
-KCJwIikKaz1wLmEoSC5RSShbInRyYWNlIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmouRlYoMCxrKQpp
-PWE1LmFwcGVuZENoaWxkKGwpCmw9bS5jcmVhdGVFbGVtZW50KCJzcGFuIikKaz1wLmEoSC5RSShbInR5
-cGUtZGVzY3JpcHRpb24iXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCms9bi5hCmsudG9T
-dHJpbmcKbC5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKGspKQppLmFwcGVuZENoaWxkKGwpCmku
-YXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiIpKQpsPW0uY3JlYXRlRWxlbWVudCgidWwiKQpr
-PXAuYShILlFJKFsidHJhY2UiXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCmg9aS5hcHBl
-bmRDaGlsZChsKQpmb3IobD1uLmIsaz1sLmxlbmd0aCxnPTA7ZzxsLmxlbmd0aDtsLmxlbmd0aD09PWt8
-fCgwLEgubGspKGwpLCsrZyl7Zj1sW2ddCmU9bS5jcmVhdGVFbGVtZW50KCJsaSIpCmguYXBwZW5kQ2hp
-bGQoZSkKZD1tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpjPXAuYShILlFJKFsiZnVuY3Rpb24iXSxxKSkK
-aj1KLmRSKGQpCmouVjEoMCkKai5GVigwLGMpCmM9Zi5iCkwuV2ooZCxjPT1udWxsPyJ1bmtub3duIjpj
-KQplLmFwcGVuZENoaWxkKGQpCmI9Zi5jCmlmKGIhPW51bGwpe2UuYXBwZW5kQ2hpbGQobS5jcmVhdGVU
-ZXh0Tm9kZSgiICgiKSkKYT1iLmIKYTA9bS5jcmVhdGVFbGVtZW50KCJhIikKYTAuYXBwZW5kQ2hpbGQo
-bS5jcmVhdGVUZXh0Tm9kZShILkVqKGIuYykrIjoiK0guRWooYSkpKQpkPWIuYQpkLnRvU3RyaW5nCmEw
-LnNldEF0dHJpYnV0ZSgiaHJlZiIsZCkKYTAuY2xhc3NMaXN0LmFkZCgibmF2LWxpbmsiKQplLmFwcGVu
-ZENoaWxkKGEwKQplLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIikiKSl9ZS5hcHBlbmRDaGls
-ZChtLmNyZWF0ZVRleHROb2RlKCI6ICIpKQpkPWYuYQpMLldqKGUsZD09bnVsbD8idW5rbm93biI6ZCkK
-ZD1mLmQKaWYoZC5sZW5ndGghPT0wKXtjPW0uY3JlYXRlRWxlbWVudCgicCIpCmExPXAuYShILlFJKFsi
-ZHJhd2VyIiwiYmVmb3JlLWFwcGx5Il0scSkpCmo9Si5kUihjKQpqLlYxKDApCmouRlYoMCxhMSkKYTI9
-ZS5hcHBlbmRDaGlsZChjKQpmb3IoYz1kLmxlbmd0aCxhMz0wO2EzPGQubGVuZ3RoO2QubGVuZ3RoPT09
-Y3x8KDAsSC5saykoZCksKythMylMLnV6KGRbYTNdLGEyLGIpfX19fSwKVXM6ZnVuY3Rpb24oYSl7cmV0
-dXJuIEMueEIudGcoYSwiPyIpP0MueEIuTmooYSwwLEMueEIuT1koYSwiPyIpKTphfSwKVEc6ZnVuY3Rp
-b24oYSxiKXtyZXR1cm4gbmV3IEwuUVcoYSxiKX0sCnl3OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAs
-bwpmb3Iocz1hLmxlbmd0aCxyPTA7cjxhLmxlbmd0aDthLmxlbmd0aD09PXN8fCgwLEgubGspKGEpLCsr
-cil7cT1hW3JdCmlmKHEgaW5zdGFuY2VvZiBMLnZ0KXtwPXEuZApwLnRvU3RyaW5nCm89TC55dyhwLGIp
-CmlmKG8hPW51bGwpcmV0dXJuIG99ZWxzZSBpZihxLmM9PT1iKXJldHVybiBxfXJldHVybiBudWxsfSwK
-V2o6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscD1ILlFJKGIuc3BsaXQoIi4iKSx0LnMpLG89Qy5ObS5n
-dEgocCksbj1kb2N1bWVudAphLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUobykpCmZvcihvPUgu
-cUMocCwxLG51bGwsdC5OKSxzPW8uJHRpLG89bmV3IEguYTcobyxvLmdBKG8pLHMuQygiYTc8YUwuRT4i
-KSkscz1zLkMoImFMLkUiKSxyPUouWUUoYSk7by5GKCk7KXtxPXMuYShvLmQpCnIubnooYSwiYmVmb3Jl
-ZW5kIiwiJiM4MjAzOy4iLG51bGwsbnVsbCkKYS5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKHEp
-KX19LAplOmZ1bmN0aW9uIGUoKXt9LApWVzpmdW5jdGlvbiBWVyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5i
-PWIKdGhpcy5jPWN9LApvWjpmdW5jdGlvbiBvWigpe30sCmpyOmZ1bmN0aW9uIGpyKCl7fSwKcWw6ZnVu
-Y3Rpb24gcWwoKXt9LAp5ODpmdW5jdGlvbiB5OCgpe30sCkhpOmZ1bmN0aW9uIEhpKCl7fSwKQlQ6ZnVu
-Y3Rpb24gQlQoKXt9LApQWTpmdW5jdGlvbiBQWSgpe30sCkw6ZnVuY3Rpb24gTCgpe30sCld4OmZ1bmN0
-aW9uIFd4KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBTzpmdW5jdGlvbiBBTyhhKXt0aGlzLmE9YX0s
-CmROOmZ1bmN0aW9uIGROKGEpe3RoaXMuYT1hfSwKSG86ZnVuY3Rpb24gSG8oYSl7dGhpcy5hPWF9LAp4
-ejpmdW5jdGlvbiB4eihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSUM6ZnVuY3Rpb24gSUMoKXt9LApm
-QzpmdW5jdGlvbiBmQyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVG06ZnVuY3Rpb24gVG0oKXt9LApu
-VDpmdW5jdGlvbiBuVChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApOWTpmdW5jdGlv
-biBOWShhKXt0aGlzLmE9YX0sCnVlOmZ1bmN0aW9uIHVlKCl7fSwKR0g6ZnVuY3Rpb24gR0goKXt9LApF
-RTpmdW5jdGlvbiBFRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApRTDpmdW5jdGlv
-biBRTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVuY3Rpb24gVlMoYSl7dGhpcy5hPWF9LApU
-RDpmdW5jdGlvbiBURChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApJZjpmdW5jdGlv
-biBJZihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp0QjpmdW5jdGlvbiB0Qigpe30s
-Cm0yOmZ1bmN0aW9uIG0yKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApRVzpmdW5jdGlvbiBRVyhhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1ifSwKWEE6ZnVuY3Rpb24gWEEoKXt9LApaczpmdW5jdGlvbihhKXt2YXIg
-cyxyLHE9Si5VNihhKQppZihMLnAyKEguayhxLnEoYSwidHlwZSIpKSk9PT1DLlkyKXtzPUguayhxLnEo
-YSwibmFtZSIpKQpyPUguayhxLnEoYSwicGF0aCIpKQpxPXEucShhLCJzdWJ0cmVlIikKcT1uZXcgTC52
-dChxPT1udWxsP251bGw6TC5tSyhxKSxzLHIpCnEuTFYoKQpyZXR1cm4gcX1lbHNle3M9SC5rKHEucShh
-LCJuYW1lIikpCnI9SC5rKHEucShhLCJwYXRoIikpCnJldHVybiBuZXcgTC5jRChILmsocS5xKGEsImhy
-ZWYiKSksSC5VYyhxLnEoYSwiZWRpdENvdW50IikpLEguTTQocS5xKGEsIndhc0V4cGxpY2l0bHlPcHRl
-ZE91dCIpKSxMLnZCKEguVWMocS5xKGEsIm1pZ3JhdGlvblN0YXR1cyIpKSksSC5NNChxLnEoYSwibWln
-cmF0aW9uU3RhdHVzQ2FuQmVDaGFuZ2VkIikpLHMscil9fSwKbUs6ZnVuY3Rpb24oYSl7dmFyIHMscj1I
-LlFJKFtdLHQuZmgpCmZvcihzPUouSVQodC5SLmEoYSkpO3MuRigpOylyLnB1c2goTC5acyhzLmdsKCkp
-KQpyZXR1cm4gcn0sClZEOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT1ILlFJKFtdLHQuZCkKZm9yKHM9YS5s
-ZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9PT1zfHwoMCxILmxrKShhKSwrK3IpcS5wdXNoKGFb
-cl0uTHQoKSkKcmV0dXJuIHF9LAp2QjpmdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBudWxsCmlm
-KGE+Pj4wIT09YXx8YT49NClyZXR1cm4gSC5PSChDLmwwLGEpCnJldHVybiBDLmwwW2FdfSwKcDI6ZnVu
-Y3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1cm4gQy5ZMgpjYXNlImZpbGUiOnJl
-dHVybiBDLnJmCmRlZmF1bHQ6dGhyb3cgSC5iKFAuUFYoIlVucmVjb2duaXplZCBuYXZpZ2F0aW9uIHRy
-ZWUgbm9kZSB0eXBlOiAiK0guRWooYSkpKX19LAp2dDpmdW5jdGlvbiB2dChhLGIsYyl7dmFyIF89dGhp
-cwpfLmQ9YQpfLmE9YgpfLmI9JApfLmM9Y30sCmNEOmZ1bmN0aW9uIGNEKGEsYixjLGQsZSxmLGcpe3Zh
-ciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWQKXy54PWUKXy5hPWYKXy5iPSQKXy5jPWd9LApE
-ODpmdW5jdGlvbiBEOCgpe30sCk85OmZ1bmN0aW9uIE85KGEpe3RoaXMuYj1hfSwKR2I6ZnVuY3Rpb24g
-R2IoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCklWOmZ1bmN0aW9uIElWKGEsYixjLGQpe3ZhciBfPXRo
-aXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxNPXsKWUY6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEs
-cCxvLG4sbSxsCmZvcihzPWIubGVuZ3RoLHI9MTtyPHM7KytyKXtpZihiW3JdPT1udWxsfHxiW3ItMV0h
-PW51bGwpY29udGludWUKZm9yKDtzPj0xO3M9cSl7cT1zLTEKaWYoYltxXSE9bnVsbClicmVha31wPW5l
-dyBQLk0oIiIpCm89IiIrKGErIigiKQpwLmE9bwpuPUgudDYoYikKbT1uLkMoIm5IPDE+IikKbD1uZXcg
-SC5uSChiLDAscyxtKQpsLkhkKGIsMCxzLG4uYykKbT1vK25ldyBILmxKKGwsbS5DKCJxVShhTC5FKSIp
-LmEobmV3IE0uTm8oKSksbS5DKCJsSjxhTC5FLHFVPiIpKS5rKDAsIiwgIikKcC5hPW0KcC5hPW0rKCIp
-OiBwYXJ0ICIrKHItMSkrIiB3YXMgbnVsbCwgYnV0IHBhcnQgIityKyIgd2FzIG5vdC4iKQp0aHJvdyBI
-LmIoUC54WShwLncoMCkpKX19LApsSTpmdW5jdGlvbiBsSShhKXt0aGlzLmE9YX0sCnE3OmZ1bmN0aW9u
-IHE3KCl7fSwKTm86ZnVuY3Rpb24gTm8oKXt9fSxPPXsKUmg6ZnVuY3Rpb24oKXt2YXIgcyxyPW51bGwK
-aWYoUC51bygpLmdGaSgpIT09ImZpbGUiKXJldHVybiAkLkViKCkKcz1QLnVvKCkKaWYoIUMueEIuVGMo
-cy5nSWkocyksIi8iKSlyZXR1cm4gJC5FYigpCmlmKFAuS0wociwiYS9iIixyLHIscixyLHIpLnQ0KCk9
-PT0iYVxcYiIpcmV0dXJuICQuS2soKQpyZXR1cm4gJC5iRCgpfSwKekw6ZnVuY3Rpb24gekwoKXt9fSxQ
-PXsKT2o6ZnVuY3Rpb24oKXt2YXIgcyxyLHE9e30KaWYoc2VsZi5zY2hlZHVsZUltbWVkaWF0ZSE9bnVs
-bClyZXR1cm4gUC5FWCgpCmlmKHNlbGYuTXV0YXRpb25PYnNlcnZlciE9bnVsbCYmc2VsZi5kb2N1bWVu
-dCE9bnVsbCl7cz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpCnI9c2VsZi5kb2N1bWVu
-dC5jcmVhdGVFbGVtZW50KCJzcGFuIikKcS5hPW51bGwKbmV3IHNlbGYuTXV0YXRpb25PYnNlcnZlcihI
-LnRSKG5ldyBQLnRoKHEpLDEpKS5vYnNlcnZlKHMse2NoaWxkTGlzdDp0cnVlfSkKcmV0dXJuIG5ldyBQ
-LmhhKHEscyxyKX1lbHNlIGlmKHNlbGYuc2V0SW1tZWRpYXRlIT1udWxsKXJldHVybiBQLnl0KCkKcmV0
-dXJuIFAucVcoKX0sClpWOmZ1bmN0aW9uKGEpe3NlbGYuc2NoZWR1bGVJbW1lZGlhdGUoSC50UihuZXcg
-UC5Wcyh0Lk0uYShhKSksMCkpfSwKb0E6ZnVuY3Rpb24oYSl7c2VsZi5zZXRJbW1lZGlhdGUoSC50Uihu
-ZXcgUC5GdCh0Lk0uYShhKSksMCkpfSwKQno6ZnVuY3Rpb24oYSl7dC5NLmEoYSkKUC5RTigwLGEpfSwK
-UU46ZnVuY3Rpb24oYSxiKXt2YXIgcz1uZXcgUC5XMygpCnMuQ1koYSxiKQpyZXR1cm4gc30sCkZYOmZ1
-bmN0aW9uKGEpe3JldHVybiBuZXcgUC5paChuZXcgUC52cygkLlgzLGEuQygidnM8MD4iKSksYS5DKCJp
-aDwwPiIpKX0sCkRJOmZ1bmN0aW9uKGEsYil7YS4kMigwLG51bGwpCmIuYj0hMApyZXR1cm4gYi5hfSwK
-alE6ZnVuY3Rpb24oYSxiKXtQLkplKGEsYil9LAp5QzpmdW5jdGlvbihhLGIpe2IuYU0oMCxhKX0sCmYz
-OmZ1bmN0aW9uKGEsYil7Yi53MChILlJ1KGEpLEgudHMoYSkpfSwKSmU6ZnVuY3Rpb24oYSxiKXt2YXIg
-cyxyLHE9bmV3IFAuV00oYikscD1uZXcgUC5TWChiKQppZihhIGluc3RhbmNlb2YgUC52cylhLlFkKHEs
-cCx0LnopCmVsc2V7cz10LnoKaWYodC5pLmIoYSkpYS5TcShxLHAscykKZWxzZXtyPW5ldyBQLnZzKCQu
-WDMsdC5jKQpyLmE9NApyLmM9YQpyLlFkKHEscCxzKX19fSwKbHo6ZnVuY3Rpb24oYSl7dmFyIHM9ZnVu
-Y3Rpb24oYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXt3aGlsZSh0cnVlKXRyeXtiKGQsZSkKYnJlYWt9
-Y2F0Y2gocil7ZT1yCmQ9Y319fShhLDEpCnJldHVybiAkLlgzLkxqKG5ldyBQLkdzKHMpLHQuSCx0LlMs
-dC56KX0sCkdROmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5GeShhLDEpfSwKVGg6ZnVuY3Rpb24oKXty
-ZXR1cm4gQy53UX0sClltOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5GeShhLDMpfSwKbDA6ZnVuY3Rp
-b24oYSxiKXtyZXR1cm4gbmV3IFAucTQoYSxiLkMoInE0PDA+IikpfSwKVGw6ZnVuY3Rpb24oYSxiKXt2
-YXIgcz1ILmNiKGEsImVycm9yIix0LkspCnJldHVybiBuZXcgUC5DdyhzLGI9PW51bGw/UC52MChhKTpi
-KX0sCnYwOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKHQubS5iKGEpKXtzPWEuZ0lJKCkKaWYocyE9bnVsbCly
-ZXR1cm4gc31yZXR1cm4gQy5wZH0sCkE5OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxCmZvcihzPXQuYzty
-PWEuYSxyPT09MjspYT1zLmEoYS5jKQppZihyPj00KXtxPWIuYWgoKQpiLmE9YS5hCmIuYz1hLmMKUC5I
-WihiLHEpfWVsc2V7cT10LmUuYShiLmMpCmIuYT0yCmIuYz1hCmEualEocSl9fSwKSFo6ZnVuY3Rpb24o
-YSxhMCl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz17fSxiPWMuYT1hCmZvcihz
-PXQubixyPXQuZSxxPXQuaTshMDspe3A9e30Kbz1iLmE9PT04CmlmKGEwPT1udWxsKXtpZihvKXtuPXMu
-YShiLmMpClAuU2kobi5hLG4uYil9cmV0dXJufXAuYT1hMAptPWEwLmEKZm9yKGI9YTA7bSE9bnVsbDti
-PW0sbT1sKXtiLmE9bnVsbApQLkhaKGMuYSxiKQpwLmE9bQpsPW0uYX1rPWMuYQpqPWsuYwpwLmI9bwpw
-LmM9agppPSFvCmlmKGkpe2g9Yi5jCmg9KGgmMSkhPT0wfHwoaCYxNSk9PT04fWVsc2UgaD0hMAppZiho
-KXtnPWIuYi5iCmlmKG8pe2s9ay5iPT09ZwprPSEoa3x8ayl9ZWxzZSBrPSExCmlmKGspe3MuYShqKQpQ
-LlNpKGouYSxqLmIpCnJldHVybn1mPSQuWDMKaWYoZiE9PWcpJC5YMz1nCmVsc2UgZj1udWxsCmI9Yi5j
-CmlmKChiJjE1KT09PTgpbmV3IFAuUlQocCxjLG8pLiQwKCkKZWxzZSBpZihpKXtpZigoYiYxKSE9PTAp
-bmV3IFAucnEocCxqKS4kMCgpfWVsc2UgaWYoKGImMikhPT0wKW5ldyBQLlJXKGMscCkuJDAoKQppZihm
-IT1udWxsKSQuWDM9ZgpiPXAuYwppZihxLmIoYikpe2s9cC5hLiR0aQprPWsuQygiYjg8Mj4iKS5iKGIp
-fHwhay5RWzFdLmIoYil9ZWxzZSBrPSExCmlmKGspe3EuYShiKQplPXAuYS5iCmlmKGIuYT49NCl7ZD1y
-LmEoZS5jKQplLmM9bnVsbAphMD1lLk44KGQpCmUuYT1iLmEKZS5jPWIuYwpjLmE9Ygpjb250aW51ZX1l
-bHNlIFAuQTkoYixlKQpyZXR1cm59fWU9cC5hLmIKZD1yLmEoZS5jKQplLmM9bnVsbAphMD1lLk44KGQp
-CmI9cC5iCms9cC5jCmlmKCFiKXtlLiR0aS5jLmEoaykKZS5hPTQKZS5jPWt9ZWxzZXtzLmEoaykKZS5h
-PTgKZS5jPWt9Yy5hPWUKYj1lfX0sClZIOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYodC5hZy5iKGEpKXJl
-dHVybiBiLkxqKGEsdC56LHQuSyx0LmwpCnM9dC5iSQppZihzLmIoYSkpcmV0dXJuIHMuYShhKQp0aHJv
-dyBILmIoUC5MMyhhLCJvbkVycm9yIiwiRXJyb3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0
-IG9yIG9uZSBPYmplY3QgYW5kIGEgU3RhY2tUcmFjZSBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSB2
-YWxpZCByZXN1bHQiKSl9LApwdTpmdW5jdGlvbigpe3ZhciBzLHIKZm9yKHM9JC5TNjtzIT1udWxsO3M9
-JC5TNil7JC5tZz1udWxsCnI9cy5iCiQuUzY9cgppZihyPT1udWxsKSQuazg9bnVsbApzLmEuJDAoKX19
-LAplTjpmdW5jdGlvbigpeyQuVUQ9ITAKdHJ5e1AucHUoKX1maW5hbGx5eyQubWc9bnVsbAokLlVEPSEx
-CmlmKCQuUzYhPW51bGwpJC51dCgpLiQxKFAuVUkoKSl9fSwKZVc6ZnVuY3Rpb24oYSl7dmFyIHM9bmV3
+ZS4kMCgpfWVsc2V7YS50b1N0cmluZwpMLkc3KGEsYixjLGQsZSl9fSwKUTQoYSxiKXt2YXIgcyxyLHE9
+UC5oSyhhKSxwPVAuRmwodC5OLHQuZGspCmZvcihzPXEuZ2hZKCkscz1zLmdQdShzKSxzPXMuZ20ocyk7
+cy5GKCk7KXtyPXMuZ2woKQpwLlk1KDAsci5hLHIuYil9Zm9yKHM9Yi5nUHUoYikscz1zLmdtKHMpO3Mu
+RigpOyl7cj1zLmdsKCkKcC5ZNSgwLHIuYSxyLmIpfXAuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnJl
+dHVybiBxLm5tKDAscCkuZ25EKCl9LApUMShhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPSQuaEwo
+KQppLnRvU3RyaW5nCkoubDUoaSwiIikKaWYoYT09bnVsbCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50
+KCJwIikKQy5MdC5zYTQocywiU2VlIGRldGFpbHMgYWJvdXQgYSBwcm9wb3NlZCBlZGl0LiIpCkMuTHQu
+c1AocyxILlFJKFsicGxhY2Vob2xkZXIiXSx0LnMpKQppLmFwcGVuZENoaWxkKHMpCkMuTHQuRkYocykK
+cmV0dXJufXI9YS5kCnIudG9TdHJpbmcKcT0kLm5VKCkKcD1xLnpmKHIpCm89YS5iCm49ZG9jdW1lbnQK
+bT1uLnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKbS50b1N0cmluZwpsPXEuSFAocixD
+LnhCLmJTKG0pKQprPWEuYwpqPW4uY3JlYXRlRWxlbWVudCgicCIpCmkuYXBwZW5kQ2hpbGQoaikKai5h
+cHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKEguRWoobykrIiBhdCAiKSkKcj1hLmUKci50b1N0cmlu
+ZwpxPXQuTgpxPVcuSjYoTC5RNChyLFAuRUYoWyJsaW5lIixKLncoayldLHEscSkpKQpxLmFwcGVuZENo
+aWxkKG4uY3JlYXRlVGV4dE5vZGUobCsiOiIrSC5FaihrKSsiLiIpKQpqLmFwcGVuZENoaWxkKHEpCkou
+ZGgoaikKTC5DQyhhLGkscCkKTC5GeihhLGkpfSwKTEgoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGws
+ayxqLGksaCxnLGYsZSxkPSQueVAoKQpkLnRvU3RyaW5nCkoubDUoZCwiIikKaWYoYi5nQShiKT09PTAp
+e3M9ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1lbnQoInAiKQpkLmFwcGVuZENoaWxkKHIpCnIuYXBwZW5k
+Q2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiTm8gcHJvcG9zZWQgZWRpdHMiKSl9ZWxzZSBmb3IoZD1iLmdQ
+dShiKSxkPWQuZ20oZCkscz10LkYscT10Lk4scD10LlEsbz1wLkMoIn4oMSk/Iiksbj10LloscD1wLmM7
+ZC5GKCk7KXttPWQuZ2woKQpsPWRvY3VtZW50CnI9bC5jcmVhdGVFbGVtZW50KCJwIikKaz0kLnlQKCkK
+ay5hcHBlbmRDaGlsZChyKQpyLmFwcGVuZENoaWxkKGwuY3JlYXRlVGV4dE5vZGUoSC5FaihtLmEpKyI6
+IikpCmo9bC5jcmVhdGVFbGVtZW50KCJ1bCIpCmsuYXBwZW5kQ2hpbGQoaikKZm9yKG09Si5JVChtLmIp
+O20uRigpOyl7az1tLmdsKCkKaT1sLmNyZWF0ZUVsZW1lbnQoImxpIikKai5hcHBlbmRDaGlsZChpKQpK
+LmRSKGkpLmkoMCwiZWRpdCIpCmg9bC5jcmVhdGVFbGVtZW50KCJhIikKaS5hcHBlbmRDaGlsZChoKQpo
+LmNsYXNzTGlzdC5hZGQoImVkaXQtbGluayIpCmc9ay5jCmY9SC5FaihnKQpoLnNldEF0dHJpYnV0ZSgi
+ZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KGgpKS5PVSgib2Zmc2V0IiksZikKZT1rLmEKZj1ILkVqKGUp
+Cmguc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoaCkpLk9VKCJsaW5lIiksZikK
+aC5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHROb2RlKCJsaW5lICIrSC5FaihlKSkpCmY9cy5hKHdpbmRv
+dy5sb2NhdGlvbikucGF0aG5hbWUKZi50b1N0cmluZwpoLnNldEF0dHJpYnV0ZSgiaHJlZiIsTC5RNChm
+LFAuRUYoWyJsaW5lIixILkVqKGUpLCJvZmZzZXQiLEguRWooZyldLHEscSkpKQpmPW8uYShuZXcgTC5F
+RShnLGUsYSkpCm4uYShudWxsKQpXLkpFKGgsImNsaWNrIixmLCExLHApCmkuYXBwZW5kQ2hpbGQobC5j
+cmVhdGVUZXh0Tm9kZSgiOiAiK0guRWooay5iKSkpfX1pZihjKUwuVDEobnVsbCl9LApGcihhLGIsYyl7
+dmFyIHMscixxPVAuaEsoQy5FeC5nRHIodC5GLmEod2luZG93LmxvY2F0aW9uKSkrSC5FaihhKSkscD1Q
+LkZsKHQuTix0LmRrKQppZihiIT1udWxsKXAuWTUoMCwib2Zmc2V0IixILkVqKGIpKQppZihjIT1udWxs
+KXAuWTUoMCwibGluZSIsSC5FaihjKSkKcC5ZNSgwLCJhdXRoVG9rZW4iLCQuVUUoKSkKcT1xLm5tKDAs
+cCkKcD13aW5kb3cuaGlzdG9yeQpzPXQuegpyPXEuZ25EKCkKcC5wdXNoU3RhdGUobmV3IFAuQmYoW10s
+W10pLlB2KFAuRmwocyxzKSksIiIscil9LApFbihhKXt2YXIgcyxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0
+b3IoIi5yb290IikudGV4dENvbnRlbnQKci50b1N0cmluZwpzPXIrIi8iCmlmKEMueEIubihhLHMpKXJl
+dHVybiBDLnhCLnluKGEscy5sZW5ndGgpCmVsc2UgcmV0dXJuIGF9LApPdChhKXtzd2l0Y2goYS5yKXtj
+YXNlIEMuY3c6YnJlYWsKY2FzZSBDLldEOmEucj1DLlhqCmJyZWFrCmNhc2UgQy5YajphLnI9Qy5XRApi
+cmVhawpjYXNlIEMuZGM6dGhyb3cgSC5iKFAuUFYoIkZpbGUgIitILkVqKGEuYykrIiBzaG91bGQgbm90
+IGhhdmUgaW5kZXRlcm1pbmF0ZSBtaWdyYXRpb24gc3RhdHVzIikpCmRlZmF1bHQ6YnJlYWt9fSwKdGEo
+YSxiKXt2YXIgcyxyPSJjaGVja19ib3giLHE9InRpdGxlIixwPSJvcHRlZC1vdXQiLG89Im1pZ3JhdGlu
+ZyIKc3dpdGNoKGIpe2Nhc2UgQy5jdzphLmlubmVyVGV4dD1yCnM9Si5ZRShhKQpzLmdQKGEpLmkoMCwi
+YWxyZWFkeS1taWdyYXRlZCIpCnMuZ1AoYSkuaSgwLCJkaXNhYmxlZCIpCmEuc2V0QXR0cmlidXRlKHEs
+IkFscmVhZHkgbWlncmF0ZWQiKQpicmVhawpjYXNlIEMuV0Q6YS5pbm5lclRleHQ9cgpzPUouWUUoYSkK
+cy5nUChhKS5SKDAscCkKcy5nUChhKS5pKDAsbykKYS5zZXRBdHRyaWJ1dGUocSwiTWlncmF0aW5nIHRv
+IG51bGwgc2FmZXR5IikKYnJlYWsKY2FzZSBDLlhqOmEuaW5uZXJUZXh0PSJjaGVja19ib3hfb3V0bGlu
+ZV9ibGFuayIKcz1KLllFKGEpCnMuZ1AoYSkuUigwLG8pCnMuZ1AoYSkuaSgwLHApCmEuc2V0QXR0cmli
+dXRlKHEsIk9wdGluZyBvdXQgb2YgbnVsbCBzYWZldHkiKQpicmVhawpkZWZhdWx0OmEuaW5uZXJUZXh0
+PSJpbmRldGVybWluYXRlX2NoZWNrX2JveCIKcz1KLllFKGEpCnMuZ1AoYSkuUigwLG8pCnMuZ1AoYSku
+aSgwLHApCmEuc2V0QXR0cmlidXRlKHEsIk1peGVkIHN0YXR1c2VzIG9mICdtaWdyYXRpbmcnIGFuZCAn
+b3B0aW5nIG91dCciKQpicmVha319LAp4bihhLGIpe3ZhciBzLHI9ImRpc2FibGVkIixxPWIuZ0woKQpM
+LnRhKGEscSkKaWYoYi5jPT09JC5EOSgpLmlubmVyVGV4dCl7aWYoYiBpbnN0YW5jZW9mIEwuY0Qpe3M9
+Yi54CnMudG9TdHJpbmcKcz0hc31lbHNlIHM9ITEKaWYocyl7YS50b1N0cmluZwpKLmRSKGEpLmkoMCxy
+KX1lbHNle2EudG9TdHJpbmcKSi5kUihhKS5SKDAscil9TC50YSgkLmMwKCkscSl9fSwKQlgoYSxiKXt2
+YXIgcyxyLHEscD17fQpwLmE9YQphPUwuRW4oYSkKcC5hPWEKcz0kLkQ5KCkKcy50b1N0cmluZwpKLmRy
+KHMsYSkKcz1kb2N1bWVudApyPXQuaApILkRoKHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5l
+dyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1wYW5lbCAubmF2LWxpbmsiKSx0LlUpCnMuSyhz
+LG5ldyBMLlZTKHApKQpzPSQuSVIKcT1zPT1udWxsP251bGw6TC55dyhzLHAuYSkKaWYocT09bnVsbCl7
+cD0kLmJOKCkKcC50b1N0cmluZwpKLmRSKHApLlIoMCwidmlzaWJsZSIpfWVsc2V7cD0kLmJOKCkKcC50
+b1N0cmluZwpKLmRSKHApLmkoMCwidmlzaWJsZSIpCkwudGEoJC5jMCgpLHEuZ0woKSl9fSwKQVIoYSxi
+KXt2YXIgcyxyLHE9Yi5iCmlmKHE9PT0kKXE9SC52KG5ldyBILmMoIkZpZWxkICdwYXJlbnQnIGhhcyBu
+b3QgYmVlbiBpbml0aWFsaXplZC4iKSkKcz10LmgKcj1zLmEocy5hKGEucGFyZW50Tm9kZSkucGFyZW50
+Tm9kZSkKTC54bihyLnF1ZXJ5U2VsZWN0b3IoIjpzY29wZSA+IC5zdGF0dXMtaWNvbiIpLHEpCkwuQVIo
+cixxKX0sCmJMKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD0iOnNjb3BlID4gLnN0YXR1cy1pY29uIgpm
+b3Iocz1iLmQscj1zLmxlbmd0aCxxPXQuaCxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgu
+bGspKHMpLCsrcCl7bz1zW3BdCmEudG9TdHJpbmcKbj1vLmMKbi50b1N0cmluZwptPWEucXVlcnlTZWxl
+Y3RvcignW2RhdGEtbmFtZSo9IicrVy5MaihuKSsnIl0nKQppZihvIGluc3RhbmNlb2YgTC52dCl7TC5i
+TChtLG8pCkwueG4obS5xdWVyeVNlbGVjdG9yKGwpLGIpfWVsc2UgTC54bihxLmEobS5wYXJlbnROb2Rl
+KS5xdWVyeVNlbGVjdG9yKGwpLG8pfX0sCkJFKGEsYixjKXt2YXIgcz0iLnJlZ2lvbnMiLHI9ZG9jdW1l
+bnQscT1yLnF1ZXJ5U2VsZWN0b3IocykKcS50b1N0cmluZwpyPXIucXVlcnlTZWxlY3RvcigiLmNvZGUi
+KQpyLnRvU3RyaW5nCkoudEgocSxiLmEsJC5LRygpKQpKLnRIKHIsYi5iLCQuS0coKSkKTC5MSChhLGIu
+ZCxjKQppZihiLmMubGVuZ3RoPDJlNSlMLkdnKCkKTC55WCgiLmNvZGUiLCEwKQpMLnlYKHMsITApfSwK
+dFgoYTAsYTEsYTIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkPSJtYXRlcmlhbC1p
+Y29ucyIsYz0ic3RhdHVzLWljb24iLGI9ZG9jdW1lbnQsYT1iLmNyZWF0ZUVsZW1lbnQoInVsIikKYTAu
+YXBwZW5kQ2hpbGQoYSkKZm9yKHM9YTEubGVuZ3RoLHI9dC5OLHE9dC5aLHA9MDtwPGExLmxlbmd0aDth
+MS5sZW5ndGg9PT1zfHwoMCxILmxrKShhMSksKytwKXtvPWExW3BdCm49Yi5jcmVhdGVFbGVtZW50KCJs
+aSIpCmEuYXBwZW5kQ2hpbGQobikKaWYobyBpbnN0YW5jZW9mIEwudnQpe209Si5ZRShuKQptLmdQKG4p
+LmkoMCwiZGlyIikKbD1vLmMKbC50b1N0cmluZwpuLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5
+KG5ldyBXLmk3KG4pKS5PVSgibmFtZSIpLGwpCms9Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbi5hcHBl
+bmRDaGlsZChrKQpsPUouWUUoaykKbC5nUChrKS5pKDAsImFycm93IikKbC5zaGYoaywiJiN4MjVCQzsi
+KQpqPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIoaikuaSgwLGQpCmouaW5uZXJUZXh0PSJmb2xk
+ZXJfb3BlbiIKbi5hcHBlbmRDaGlsZChqKQpsPW8uYQpsLnRvU3RyaW5nCm4uYXBwZW5kQ2hpbGQoYi5j
+cmVhdGVUZXh0Tm9kZShsKSkKbD1vLmQKbC50b1N0cmluZwpMLnRYKG4sbCwhMCkKaT1iLmNyZWF0ZUVs
+ZW1lbnQoInNwYW4iKQpsPUouWUUoaSkKbC5nUChpKS5pKDAsZCkKaS5pbm5lclRleHQ9ImluZGV0ZXJt
+aW5hdGVfY2hlY2tfYm94IgpsLmdQKGkpLmkoMCxjKQpMLnhuKGksbykKbD1sLmdWbChpKQpoPWwuJHRp
+Cmc9aC5DKCJ+KDEpPyIpLmEobmV3IEwuVEQobyxuLGkpKQpxLmEobnVsbCkKVy5KRShsLmEsbC5iLGcs
+ITEsaC5jKQptLm1LKG4saSxqKQpMLmt6KGspfWVsc2UgaWYobyBpbnN0YW5jZW9mIEwuY0Qpe2k9Yi5j
+cmVhdGVFbGVtZW50KCJzcGFuIikKbT1KLllFKGkpCm0uZ1AoaSkuaSgwLGQpCmkuaW5uZXJUZXh0PSIi
+Cm0uZ1AoaSkuaSgwLGMpCmw9by54CmwudG9TdHJpbmcKaWYoIWwpbS5nUChpKS5pKDAsImRpc2FibGVk
+IikKTC54bihpLG8pCmlmKGwpe209bS5nVmwoaSkKbD1tLiR0aQpoPWwuQygifigxKT8iKS5hKG5ldyBM
+LklmKG8saSxuKSkKcS5hKG51bGwpClcuSkUobS5hLG0uYixoLCExLGwuYyl9bi5hcHBlbmRDaGlsZChp
+KQptPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIobSkuaSgwLGQpCm0uaW5uZXJUZXh0PSJpbnNl
+cnRfZHJpdmVfZmlsZSIKbi5hcHBlbmRDaGlsZChtKQpmPWIuY3JlYXRlRWxlbWVudCgiYSIpCm4uYXBw
+ZW5kQ2hpbGQoZikKbT1KLllFKGYpCm0uZ1AoZikuaSgwLCJuYXYtbGluayIpCmw9by5jCmwudG9TdHJp
+bmcKZi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyhmKSkuT1UoIm5hbWUiKSxs
+KQpsPW8uZApsLnRvU3RyaW5nCmYuc2V0QXR0cmlidXRlKCJocmVmIixMLlE0KGwsUC5GbChyLHIpKSkK
+bD1vLmEKbC50b1N0cmluZwpmLmFwcGVuZENoaWxkKGIuY3JlYXRlVGV4dE5vZGUobCkpCm09bS5nVmwo
+ZikKbD1tLiR0aQpoPWwuQygifigxKT8iKS5hKG5ldyBMLnRCKCkpCnEuYShudWxsKQpXLkpFKG0uYSxt
+LmIsaCwhMSxsLmMpCmw9by5lCmwudG9TdHJpbmcKaWYobD4wKXtlPWIuY3JlYXRlRWxlbWVudCgic3Bh
+biIpCm4uYXBwZW5kQ2hpbGQoZSkKSi5kUihlKS5pKDAsImVkaXQtY291bnQiKQptPSIiK2wrIiAiCmlm
+KGw9PT0xKWg9InByb3Bvc2VkIGVkaXQiCmVsc2UgaD0icHJvcG9zZWQgZWRpdHMiCmUuc2V0QXR0cmli
+dXRlKCJ0aXRsZSIsbStoKQplLmFwcGVuZENoaWxkKGIuY3JlYXRlVGV4dE5vZGUoQy5qbi53KGwpKSl9
+fX19LAp1eihhLGIsYyl7dmFyIHM9ZG9jdW1lbnQscj1zLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpLHE9
+dC5RLHA9cS5DKCJ+KDEpPyIpLmEobmV3IEwubTIoYSxjKSkKdC5aLmEobnVsbCkKVy5KRShyLCJjbGlj
+ayIscCwhMSxxLmMpCnE9Ui5PWChhLmEpCnEudG9TdHJpbmcKci5hcHBlbmRDaGlsZChzLmNyZWF0ZVRl
+eHROb2RlKHEpKQpiLmFwcGVuZENoaWxkKHIpfSwKRnooYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGss
+aixpLGg9YS5hCmlmKGg9PW51bGwpcmV0dXJuCmIudG9TdHJpbmcKcz1kb2N1bWVudApyPXMuY3JlYXRl
+RWxlbWVudCgicCIpCnE9Yi5hcHBlbmRDaGlsZChyKQpyPXMuY3JlYXRlRWxlbWVudCgic3BhbiIpCnA9
+dC5zCkouTXUocixILlFJKFsidHlwZS1kZXNjcmlwdGlvbiJdLHApKQpyLmFwcGVuZENoaWxkKHMuY3Jl
+YXRlVGV4dE5vZGUoIkFjdGlvbnMiKSkKcS5hcHBlbmRDaGlsZChyKQpxLmFwcGVuZENoaWxkKHMuY3Jl
+YXRlVGV4dE5vZGUoIjoiKSkKbz1zLmNyZWF0ZUVsZW1lbnQoInAiKQpiLmFwcGVuZENoaWxkKG8pCmZv
+cihyPWgubGVuZ3RoLG49dC5PLG09MDttPGgubGVuZ3RoO2gubGVuZ3RoPT09cnx8KDAsSC5saykoaCks
+KyttKXtsPWhbbV0Kaz1zLmNyZWF0ZUVsZW1lbnQoImEiKQpvLmFwcGVuZENoaWxkKGspCmo9bC5hCmou
+dG9TdHJpbmcKay5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGopKQpqPWwuYgpqLnRvU3RyaW5n
+Cmsuc2V0QXR0cmlidXRlKCJocmVmIixqKQpqPW4uYShILlFJKFsiYWRkLWhpbnQtbGluayIsImJlZm9y
+ZS1hcHBseSIsImJ1dHRvbiJdLHApKQppPUouZFIoaykKaS5WMSgwKQppLkZWKDAsail9fSwKQ0MoYTQs
+YTUsYTYpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyLGEz
+CmZvcihzPWE0LmYscj1zLmxlbmd0aCxxPXQucyxwPXQuTyxvPTA7bzxzLmxlbmd0aDtzLmxlbmd0aD09
+PXJ8fCgwLEgubGspKHMpLCsrbyl7bj1zW29dCmE1LnRvU3RyaW5nCm09ZG9jdW1lbnQKbD1tLmNyZWF0
+ZUVsZW1lbnQoInAiKQprPXAuYShILlFJKFsidHJhY2UiXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5G
+VigwLGspCmk9YTUuYXBwZW5kQ2hpbGQobCkKbD1tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQprPXAuYShI
+LlFJKFsidHlwZS1kZXNjcmlwdGlvbiJdLHEpKQpqPUouZFIobCkKai5WMSgwKQpqLkZWKDAsaykKaz1u
+LmEKay50b1N0cmluZwpsLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoaykpCmkuYXBwZW5kQ2hp
+bGQobCkKaS5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKCI6IikpCmw9bS5jcmVhdGVFbGVtZW50
+KCJ1bCIpCms9cC5hKEguUUkoWyJ0cmFjZSJdLHEpKQpqPUouZFIobCkKai5WMSgwKQpqLkZWKDAsaykK
+aD1pLmFwcGVuZENoaWxkKGwpCmZvcihsPW4uYixrPWwubGVuZ3RoLGc9MDtnPGwubGVuZ3RoO2wubGVu
+Z3RoPT09a3x8KDAsSC5saykobCksKytnKXtmPWxbZ10KZT1tLmNyZWF0ZUVsZW1lbnQoImxpIikKaC5h
+cHBlbmRDaGlsZChlKQpkPW0uY3JlYXRlRWxlbWVudCgic3BhbiIpCmM9cC5hKEguUUkoWyJmdW5jdGlv
+biJdLHEpKQpqPUouZFIoZCkKai5WMSgwKQpqLkZWKDAsYykKYz1mLmIKTC5XaihkLGM9PW51bGw/InVu
+a25vd24iOmMpCmUuYXBwZW5kQ2hpbGQoZCkKYj1mLmMKaWYoYiE9bnVsbCl7ZS5hcHBlbmRDaGlsZCht
+LmNyZWF0ZVRleHROb2RlKCIgKCIpKQphPWIuYgphMD1tLmNyZWF0ZUVsZW1lbnQoImEiKQphMC5hcHBl
+bmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKEguRWooYi5jKSsiOiIrSC5FaihhKSkpCmQ9Yi5hCmQudG9T
+dHJpbmcKYTAuc2V0QXR0cmlidXRlKCJocmVmIixkKQphMC5jbGFzc0xpc3QuYWRkKCJuYXYtbGluayIp
+CmUuYXBwZW5kQ2hpbGQoYTApCmUuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiKSIpKX1lLmFw
+cGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIjogIikpCmQ9Zi5hCkwuV2ooZSxkPT1udWxsPyJ1bmtu
+b3duIjpkKQpkPWYuZAppZihkLmxlbmd0aCE9PTApe2M9bS5jcmVhdGVFbGVtZW50KCJwIikKYTE9cC5h
+KEguUUkoWyJkcmF3ZXIiLCJiZWZvcmUtYXBwbHkiXSxxKSkKaj1KLmRSKGMpCmouVjEoMCkKai5GVigw
+LGExKQphMj1lLmFwcGVuZENoaWxkKGMpCmZvcihjPWQubGVuZ3RoLGEzPTA7YTM8ZC5sZW5ndGg7ZC5s
+ZW5ndGg9PT1jfHwoMCxILmxrKShkKSwrK2EzKUwudXooZFthM10sYTIsYil9fX19LApVcyhhKXtyZXR1
+cm4gQy54Qi50ZyhhLCI/Iik/Qy54Qi5OaihhLDAsQy54Qi5PWShhLCI/IikpOmF9LApURyhhLGIpe3Jl
+dHVybiBuZXcgTC5RVyhhLGIpfSwKeXcoYSxiKXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9
+MDtyPGEubGVuZ3RoO2EubGVuZ3RoPT09c3x8KDAsSC5saykoYSksKytyKXtxPWFbcl0KaWYocSBpbnN0
+YW5jZW9mIEwudnQpe3A9cS5kCnAudG9TdHJpbmcKbz1MLnl3KHAsYikKaWYobyE9bnVsbClyZXR1cm4g
+b31lbHNlIGlmKHEuYz09PWIpcmV0dXJuIHF9cmV0dXJuIG51bGx9LApXaihhLGIpe3ZhciBzLHIscSxw
+PUguUUkoYi5zcGxpdCgiLiIpLHQucyksbz1DLk5tLmd0SChwKSxuPWRvY3VtZW50CmEuYXBwZW5kQ2hp
+bGQobi5jcmVhdGVUZXh0Tm9kZShvKSkKZm9yKG89SC5xQyhwLDEsbnVsbCx0Lk4pLHM9by4kdGksbz1u
+ZXcgSC5hNyhvLG8uZ0Eobykscy5DKCJhNzxhTC5FPiIpKSxzPXMuQygiYUwuRSIpLHI9Si5ZRShhKTtv
+LkYoKTspe3E9cy5hKG8uZCkKci5ueihhLCJiZWZvcmVlbmQiLCImIzgyMDM7LiIsbnVsbCxudWxsKQph
+LmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUocSkpfX0sCmU6ZnVuY3Rpb24gZSgpe30sClZXOmZ1
+bmN0aW9uIFZXKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCm9aOmZ1bmN0aW9uIG9a
+KCl7fSwKanI6ZnVuY3Rpb24ganIoKXt9LApxbDpmdW5jdGlvbiBxbCgpe30sCnk4OmZ1bmN0aW9uIHk4
+KCl7fSwKSGk6ZnVuY3Rpb24gSGkoKXt9LApCVDpmdW5jdGlvbiBCVCgpe30sClBZOmZ1bmN0aW9uIFBZ
+KCl7fSwKTDpmdW5jdGlvbiBMKCl7fSwKV3g6ZnVuY3Rpb24gV3goYSxiKXt0aGlzLmE9YQp0aGlzLmI9
+Yn0sCkhvOmZ1bmN0aW9uIEhvKGEpe3RoaXMuYT1hfSwKZE46ZnVuY3Rpb24gZE4oYSl7dGhpcy5hPWF9
+LApJQzpmdW5jdGlvbiBJQyhhKXt0aGlzLmE9YX0sCnh6OmZ1bmN0aW9uIHh6KGEsYil7dGhpcy5hPWEK
+dGhpcy5iPWJ9LApCTjpmdW5jdGlvbiBCTigpe30sCmZDOmZ1bmN0aW9uIGZDKGEsYil7dGhpcy5hPWEK
+dGhpcy5iPWJ9LApUbTpmdW5jdGlvbiBUbSgpe30sCm5UOmZ1bmN0aW9uIG5UKGEsYixjKXt0aGlzLmE9
+YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCk5ZOmZ1bmN0aW9uIE5ZKGEpe3RoaXMuYT1hfSwKdWU6ZnVuY3Rp
+b24gdWUoKXt9LApHSDpmdW5jdGlvbiBHSCgpe30sCkVFOmZ1bmN0aW9uIEVFKGEsYixjKXt0aGlzLmE9
+YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClFMOmZ1bmN0aW9uIFFMKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
+LApWUzpmdW5jdGlvbiBWUyhhKXt0aGlzLmE9YX0sClREOmZ1bmN0aW9uIFREKGEsYixjKXt0aGlzLmE9
+YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCklmOmZ1bmN0aW9uIElmKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
+Ygp0aGlzLmM9Y30sCnRCOmZ1bmN0aW9uIHRCKCl7fSwKbTI6ZnVuY3Rpb24gbTIoYSxiKXt0aGlzLmE9
+YQp0aGlzLmI9Yn0sClFXOmZ1bmN0aW9uIFFXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApYQTpmdW5j
+dGlvbiBYQSgpe30sClpzKGEpe3ZhciBzLHIscT1KLlU2KGEpCmlmKEwucDIoSC5rKHEucShhLCJ0eXBl
+IikpKT09PUMuWTIpe3M9SC5rKHEucShhLCJuYW1lIikpCnI9SC5rKHEucShhLCJwYXRoIikpCnE9cS5x
+KGEsInN1YnRyZWUiKQpxPW5ldyBMLnZ0KHE9PW51bGw/bnVsbDpMLm1LKHEpLHMscikKcS5MVigpCnJl
+dHVybiBxfWVsc2V7cz1ILmsocS5xKGEsIm5hbWUiKSkKcj1ILmsocS5xKGEsInBhdGgiKSkKcmV0dXJu
+IG5ldyBMLmNEKEguayhxLnEoYSwiaHJlZiIpKSxILlVjKHEucShhLCJlZGl0Q291bnQiKSksSC5NNChx
+LnEoYSwid2FzRXhwbGljaXRseU9wdGVkT3V0IikpLEwudkIoSC5VYyhxLnEoYSwibWlncmF0aW9uU3Rh
+dHVzIikpKSxILk00KHEucShhLCJtaWdyYXRpb25TdGF0dXNDYW5CZUNoYW5nZWQiKSkscyxyKX19LApt
+SyhhKXt2YXIgcyxyPUguUUkoW10sdC5maCkKZm9yKHM9Si5JVCh0LlIuYShhKSk7cy5GKCk7KXIucHVz
+aChMLlpzKHMuZ2woKSkpCnJldHVybiByfSwKVkQoYSl7dmFyIHMscixxPUguUUkoW10sdC5kKQpmb3Io
+cz1hLmxlbmd0aCxyPTA7cjxhLmxlbmd0aDthLmxlbmd0aD09PXN8fCgwLEgubGspKGEpLCsrcilxLnB1
+c2goYVtyXS5MdCgpKQpyZXR1cm4gcX0sCnZCKGEpe2lmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYT4+
+PjAhPT1hfHxhPj00KXJldHVybiBILk9IKEMubDAsYSkKcmV0dXJuIEMubDBbYV19LApwMihhKXtzd2l0
+Y2goYSl7Y2FzZSJkaXJlY3RvcnkiOnJldHVybiBDLlkyCmNhc2UiZmlsZSI6cmV0dXJuIEMucmYKZGVm
+YXVsdDp0aHJvdyBILmIoUC5QVigiVW5yZWNvZ25pemVkIG5hdmlnYXRpb24gdHJlZSBub2RlIHR5cGU6
+ICIrSC5FaihhKSkpfX0sCnZ0OmZ1bmN0aW9uIHZ0KGEsYixjKXt2YXIgXz10aGlzCl8uZD1hCl8uYT1i
+Cl8uYj0kCl8uYz1jfSwKY0Q6ZnVuY3Rpb24gY0QoYSxiLGMsZCxlLGYsZyl7dmFyIF89dGhpcwpfLmQ9
+YQpfLmU9YgpfLmY9YwpfLnI9ZApfLng9ZQpfLmE9ZgpfLmI9JApfLmM9Z30sCkQ4OmZ1bmN0aW9uIEQ4
+KCl7fSwKTzk6ZnVuY3Rpb24gTzkoYSl7dGhpcy5iPWF9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMu
+YT1hCnRoaXMuYj1ifSwKSVY6ZnVuY3Rpb24gSVYoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9
+YgpfLmY9YwpfLnI9ZH19LE09ewpZRihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwKZm9yKHM9Yi5sZW5n
+dGgscj0xO3I8czsrK3Ipe2lmKGJbcl09PW51bGx8fGJbci0xXSE9bnVsbCljb250aW51ZQpmb3IoO3M+
+PTE7cz1xKXtxPXMtMQppZihiW3FdIT1udWxsKWJyZWFrfXA9bmV3IFAuTSgiIikKbz0iIisoYSsiKCIp
+CnAuYT1vCm49SC50NihiKQptPW4uQygibkg8MT4iKQpsPW5ldyBILm5IKGIsMCxzLG0pCmwuSGQoYiww
+LHMsbi5jKQptPW8rbmV3IEgubEoobCxtLkMoInFVKGFMLkUpIikuYShuZXcgTS5ObygpKSxtLkMoImxK
+PGFMLkUscVU+IikpLmsoMCwiLCAiKQpwLmE9bQpwLmE9bSsoIik6IHBhcnQgIisoci0xKSsiIHdhcyBu
+dWxsLCBidXQgcGFydCAiK3IrIiB3YXMgbm90LiIpCnRocm93IEguYihQLnhZKHAudygwKSxudWxsKSl9
+fSwKbEk6ZnVuY3Rpb24gbEkoYSl7dGhpcy5hPWF9LApxNzpmdW5jdGlvbiBxNygpe30sCk5vOmZ1bmN0
+aW9uIE5vKCl7fX0sTz17ClJoKCl7dmFyIHMscj1udWxsCmlmKFAudW8oKS5nRmkoKSE9PSJmaWxlIily
+ZXR1cm4gJC5FYigpCnM9UC51bygpCmlmKCFDLnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJuICQuRWIo
+KQppZihQLktMKHIsImEvYiIscixyLHIscixyKS50NCgpPT09ImFcXGIiKXJldHVybiAkLktrKCkKcmV0
+dXJuICQuYkQoKX0sCnpMOmZ1bmN0aW9uIHpMKCl7fX0sUD17Ck9qKCl7dmFyIHMscixxPXt9CmlmKHNl
+bGYuc2NoZWR1bGVJbW1lZGlhdGUhPW51bGwpcmV0dXJuIFAuRVgoKQppZihzZWxmLk11dGF0aW9uT2Jz
+ZXJ2ZXIhPW51bGwmJnNlbGYuZG9jdW1lbnQhPW51bGwpe3M9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVt
+ZW50KCJkaXYiKQpyPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpCnEuYT1udWxsCm5l
+dyBzZWxmLk11dGF0aW9uT2JzZXJ2ZXIoSC50UihuZXcgUC50aChxKSwxKSkub2JzZXJ2ZShzLHtjaGls
+ZExpc3Q6dHJ1ZX0pCnJldHVybiBuZXcgUC5oYShxLHMscil9ZWxzZSBpZihzZWxmLnNldEltbWVkaWF0
+ZSE9bnVsbClyZXR1cm4gUC55dCgpCnJldHVybiBQLnFXKCl9LApaVihhKXtzZWxmLnNjaGVkdWxlSW1t
+ZWRpYXRlKEgudFIobmV3IFAuVnModC5NLmEoYSkpLDApKX0sCm9BKGEpe3NlbGYuc2V0SW1tZWRpYXRl
+KEgudFIobmV3IFAuRnQodC5NLmEoYSkpLDApKX0sCkJ6KGEpe3QuTS5hKGEpClAuUU4oMCxhKX0sClFO
+KGEsYil7dmFyIHM9bmV3IFAuVzMoKQpzLkNZKGEsYikKcmV0dXJuIHN9LApGWChhKXtyZXR1cm4gbmV3
+IFAuaWgobmV3IFAudnMoJC5YMyxhLkMoInZzPDA+IikpLGEuQygiaWg8MD4iKSl9LApESShhLGIpe2Eu
+JDIoMCxudWxsKQpiLmI9ITAKcmV0dXJuIGIuYX0sCmpRKGEsYil7UC5KZShhLGIpfSwKeUMoYSxiKXti
+LmFNKDAsYSl9LApmMyhhLGIpe2IudzAoSC5SdShhKSxILnRzKGEpKX0sCkplKGEsYil7dmFyIHMscixx
+PW5ldyBQLldNKGIpLHA9bmV3IFAuU1goYikKaWYoYSBpbnN0YW5jZW9mIFAudnMpYS5RZChxLHAsdC56
+KQplbHNle3M9dC56CmlmKHQuaS5iKGEpKWEuU3EocSxwLHMpCmVsc2V7cj1uZXcgUC52cygkLlgzLHQu
+YykKci5hPTgKci5jPWEKci5RZChxLHAscyl9fX0sCmx6KGEpe3ZhciBzPWZ1bmN0aW9uKGIsYyl7cmV0
+dXJuIGZ1bmN0aW9uKGQsZSl7d2hpbGUodHJ1ZSl0cnl7YihkLGUpCmJyZWFrfWNhdGNoKHIpe2U9cgpk
+PWN9fX0oYSwxKQpyZXR1cm4gJC5YMy5MaihuZXcgUC5HcyhzKSx0LkgsdC5TLHQueil9LApHUShhKXty
+ZXR1cm4gbmV3IFAuRnkoYSwxKX0sClRoKCl7cmV0dXJuIEMud1F9LApZbShhKXtyZXR1cm4gbmV3IFAu
+RnkoYSwzKX0sCmwwKGEsYil7cmV0dXJuIG5ldyBQLnE0KGEsYi5DKCJxNDwwPiIpKX0sClRsKGEsYil7
+dmFyIHM9SC5jYihhLCJlcnJvciIsdC5LKQpyZXR1cm4gbmV3IFAuQ3cocyxiPT1udWxsP1AudjAoYSk6
+Yil9LAp2MChhKXt2YXIgcwppZih0Lm0uYihhKSl7cz1hLmdJSSgpCmlmKHMhPW51bGwpcmV0dXJuIHN9
+cmV0dXJuIEMucGR9LApBOShhLGIpe3ZhciBzLHIscQpmb3Iocz10LmM7cj1hLmEsKHImNCkhPT0wOylh
+PXMuYShhLmMpCmlmKChyJjI0KSE9PTApe3E9Yi5haCgpCmIudWcoYSkKUC5IWihiLHEpfWVsc2V7cT10
+LmUuYShiLmMpCmIuYT1iLmEmMXw0CmIuYz1hCmEualEocSl9fSwKSFooYSxhMCl7dmFyIHMscixxLHAs
+byxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz17fSxiPWMuYT1hCmZvcihzPXQubixyPXQuZSxxPXQuaTsh
+MDspe3A9e30Kbz1iLmEKbj0obyYxNik9PT0wCm09IW4KaWYoYTA9PW51bGwpe2lmKG0mJihvJjEpPT09
+MCl7bD1zLmEoYi5jKQpQLlNpKGwuYSxsLmIpfXJldHVybn1wLmE9YTAKaz1hMC5hCmZvcihiPWEwO2sh
+PW51bGw7Yj1rLGs9ail7Yi5hPW51bGwKUC5IWihjLmEsYikKcC5hPWsKaj1rLmF9bz1jLmEKaT1vLmMK
+cC5iPW0KcC5jPWkKaWYobil7aD1iLmMKaD0oaCYxKSE9PTB8fChoJjE1KT09PTh9ZWxzZSBoPSEwCmlm
+KGgpe2c9Yi5iLmIKaWYobSl7bz1vLmI9PT1nCm89IShvfHxvKX1lbHNlIG89ITEKaWYobyl7cy5hKGkp
+ClAuU2koaS5hLGkuYikKcmV0dXJufWY9JC5YMwppZihmIT09ZykkLlgzPWcKZWxzZSBmPW51bGwKYj1i
+LmMKaWYoKGImMTUpPT09OCluZXcgUC5SVChwLGMsbSkuJDAoKQplbHNlIGlmKG4pe2lmKChiJjEpIT09
+MCluZXcgUC5ycShwLGkpLiQwKCl9ZWxzZSBpZigoYiYyKSE9PTApbmV3IFAuUlcoYyxwKS4kMCgpCmlm
+KGYhPW51bGwpJC5YMz1mCmI9cC5jCmlmKHEuYihiKSl7bz1wLmEuJHRpCm89by5DKCJiODwyPiIpLmIo
+Yil8fCFvLlFbMV0uYihiKX1lbHNlIG89ITEKaWYobyl7cS5hKGIpCmU9cC5hLmIKaWYoKGIuYSYyNCkh
+PT0wKXtkPXIuYShlLmMpCmUuYz1udWxsCmEwPWUuTjgoZCkKZS5hPWIuYSYzMHxlLmEmMQplLmM9Yi5j
+CmMuYT1iCmNvbnRpbnVlfWVsc2UgUC5BOShiLGUpCnJldHVybn19ZT1wLmEuYgpkPXIuYShlLmMpCmUu
+Yz1udWxsCmEwPWUuTjgoZCkKYj1wLmIKbz1wLmMKaWYoIWIpe2UuJHRpLmMuYShvKQplLmE9OAplLmM9
+b31lbHNle3MuYShvKQplLmE9ZS5hJjF8MTYKZS5jPW99Yy5hPWUKYj1lfX0sClZIKGEsYil7dmFyIHMK
+aWYodC5hLmIoYSkpcmV0dXJuIGIuTGooYSx0LnosdC5LLHQubCkKcz10LnYKaWYocy5iKGEpKXJldHVy
+biBzLmEoYSkKdGhyb3cgSC5iKFAuTDMoYSwib25FcnJvciIsdS5jKSl9LApwdSgpe3ZhciBzLHIKZm9y
+KHM9JC5TNjtzIT1udWxsO3M9JC5TNil7JC5tZz1udWxsCnI9cy5iCiQuUzY9cgppZihyPT1udWxsKSQu
+azg9bnVsbApzLmEuJDAoKX19LAplTigpeyQuVUQ9ITAKdHJ5e1AucHUoKX1maW5hbGx5eyQubWc9bnVs
+bAokLlVEPSExCmlmKCQuUzYhPW51bGwpJC51dCgpLiQxKFAuVUkoKSl9fSwKZVcoYSl7dmFyIHM9bmV3
 IFAuT00oYSkscj0kLms4CmlmKHI9PW51bGwpeyQuUzY9JC5rOD1zCmlmKCEkLlVEKSQudXQoKS4kMShQ
-LlVJKCkpfWVsc2UgJC5rOD1yLmI9c30sCnJSOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPSQuUzYKaWYo
-cD09bnVsbCl7UC5lVyhhKQokLm1nPSQuazgKcmV0dXJufXM9bmV3IFAuT00oYSkKcj0kLm1nCmlmKHI9
-PW51bGwpe3MuYj1wCiQuUzY9JC5tZz1zfWVsc2V7cT1yLmIKcy5iPXEKJC5tZz1yLmI9cwppZihxPT1u
-dWxsKSQuazg9c319LApyYjpmdW5jdGlvbihhKXt2YXIgcz1udWxsLHI9JC5YMwppZihDLk5VPT09cil7
-UC5UayhzLHMsQy5OVSxhKQpyZXR1cm59UC5UayhzLHMscix0Lk0uYShyLkdZKGEpKSl9LApRdzpmdW5j
-dGlvbihhLGIpe0guY2IoYSwic3RyZWFtIix0LkspCnJldHVybiBuZXcgUC54SShiLkMoInhJPDA+Iikp
-fSwKU2k6ZnVuY3Rpb24oYSxiKXtQLnJSKG5ldyBQLkV2KGEsYikpfSwKVDg6ZnVuY3Rpb24oYSxiLGMs
-ZCxlKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDAoKQokLlgzPWMKcz1yCnRyeXtyPWQu
-JDAoKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LAp5djpmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2
-YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDEoZSkKJC5YMz1jCnM9cgp0cnl7cj1kLiQxKGUp
-CnJldHVybiByfWZpbmFsbHl7JC5YMz1zfX0sClF4OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpKXt2
-YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDIoZSxmKQokLlgzPWMKcz1yCnRyeXtyPWQuJDIo
-ZSxmKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LApUazpmdW5jdGlvbihhLGIsYyxkKXt0Lk0uYShk
-KQppZihDLk5VIT09YylkPWMuR1koZCkKUC5lVyhkKX0sCnRoOmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1h
-fSwKaGE6ZnVuY3Rpb24gaGEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVu
-Y3Rpb24gVnMoYSl7dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBGdChhKXt0aGlzLmE9YX0sClczOmZ1bmN0
-aW9uIFczKCl7fSwKeUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0
-aW9uIGloKGEsYil7dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMuJHRpPWJ9LApXTTpmdW5jdGlvbiBXTShh
-KXt0aGlzLmE9YX0sClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMuYT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7
-dGhpcy5hPWF9LApGeTpmdW5jdGlvbiBGeShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKR1Y6ZnVuY3Rp
-b24gR1YoYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uZD1fLmM9Xy5iPW51bGwKXy4kdGk9Yn0sCnE0OmZ1
-bmN0aW9uIHE0KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkN3OmZ1bmN0aW9uIEN3KGEsYil7dGhp
-cy5hPWEKdGhpcy5iPWJ9LApQZjpmdW5jdGlvbiBQZigpe30sClpmOmZ1bmN0aW9uIFpmKGEsYil7dGhp
-cy5hPWEKdGhpcy4kdGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9
-bnVsbApfLmI9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwKdnM6ZnVuY3Rpb24gdnMoYSxiKXt2
-YXIgXz10aGlzCl8uYT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9LApkYTpmdW5jdGlvbiBkYShhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
-CnBWOmZ1bmN0aW9uIHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rpb24gVTcoYSl7dGhpcy5hPWF9LAp2
-cjpmdW5jdGlvbiB2cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApydDpmdW5jdGlv
-biBydChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rpb24gS0YoYSxiKXt0aGlzLmE9YQp0
-aGlzLmI9Yn0sClpMOmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30s
-ClJUOmZ1bmN0aW9uIFJUKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmpaOmZ1bmN0
-aW9uIGpaKGEpe3RoaXMuYT1hfSwKcnE6ZnVuY3Rpb24gcnEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
-ClJXOmZ1bmN0aW9uIFJXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApPTTpmdW5jdGlvbiBPTShhKXt0
-aGlzLmE9YQp0aGlzLmI9bnVsbH0sCnFoOmZ1bmN0aW9uIHFoKCl7fSwKQjU6ZnVuY3Rpb24gQjUoYSxi
-KXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnVPOmZ1bmN0aW9uIHVPKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
-LApNTzpmdW5jdGlvbiBNTygpe30sCmtUOmZ1bmN0aW9uIGtUKCl7fSwKeEk6ZnVuY3Rpb24geEkoYSl7
-dGhpcy4kdGk9YX0sCm0wOmZ1bmN0aW9uIG0wKCl7fSwKRXY6ZnVuY3Rpb24gRXYoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCkppOmZ1bmN0aW9uIEppKCl7fSwKVnA6ZnVuY3Rpb24gVnAoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCk9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9
-Y30sCkVGOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYykuQygiRm88MSwyPiIp
-LmEoSC5CNyhhLG5ldyBILk41KGIuQygiQDwwPiIpLktxKGMpLkMoIk41PDEsMj4iKSkpKX0sCkZsOmZ1
-bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBILk41KGEuQygiQDwwPiIpLktxKGIpLkMoIk41PDEsMj4iKSl9
-LApMczpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuYjYoYS5DKCJiNjwwPiIpKX0sClQyOmZ1bmN0aW9u
-KCl7dmFyIHM9T2JqZWN0LmNyZWF0ZShudWxsKQpzWyI8bm9uLWlkZW50aWZpZXIta2V5PiJdPXMKZGVs
-ZXRlIHNbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHN9LApyajpmdW5jdGlvbihhLGIsYyl7
-dmFyIHM9bmV3IFAubG0oYSxiLGMuQygibG08MD4iKSkKcy5jPWEuZQpyZXR1cm4gc30sCkVQOmZ1bmN0
-aW9uKGEsYixjKXt2YXIgcyxyCmlmKFAuaEIoYSkpe2lmKGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIigu
-Li4pIgpyZXR1cm4gYisiLi4uIitjfXM9SC5RSShbXSx0LnMpCkMuTm0uaSgkLnhnLGEpCnRyeXtQLlZy
-KGEscyl9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBv
-cCgpfXI9UC5sKGIsdC5SLmEocyksIiwgIikrYwpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0s
-Cng6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIKaWYoUC5oQihhKSlyZXR1cm4gYisiLi4uIitjCnM9bmV3
-IFAuTShiKQpDLk5tLmkoJC54ZyxhKQp0cnl7cj1zCnIuYT1QLmwoci5hLGEsIiwgIil9ZmluYWxseXtp
-ZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXMuYSs9YwpyPXMu
-YQpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCmhCOmZ1bmN0aW9uKGEpe3ZhciBzLHIKZm9y
-KHM9JC54Zy5sZW5ndGgscj0wO3I8czsrK3IpaWYoYT09PSQueGdbcl0pcmV0dXJuITAKcmV0dXJuITF9
-LApWcjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9YS5nbShhKSxrPTAsaj0wCndoaWxl
-KCEwKXtpZighKGs8ODB8fGo8MykpYnJlYWsKaWYoIWwuRigpKXJldHVybgpzPUguRWoobC5nbCgpKQpD
-Lk5tLmkoYixzKQprKz1zLmxlbmd0aCsyOysran1pZighbC5GKCkpe2lmKGo8PTUpcmV0dXJuCmlmKDA+
-PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCnI9Yi5wb3AoKQppZigwPj1iLmxlbmd0aClyZXR1cm4g
-SC5PSChiLC0xKQpxPWIucG9wKCl9ZWxzZXtwPWwuZ2woKTsrK2oKaWYoIWwuRigpKXtpZihqPD00KXtD
-Lk5tLmkoYixILkVqKHApKQpyZXR1cm59cj1ILkVqKHApCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9I
-KGIsLTEpCnE9Yi5wb3AoKQprKz1yLmxlbmd0aCsyfWVsc2V7bz1sLmdsKCk7KytqCmZvcig7bC5GKCk7
-cD1vLG89bil7bj1sLmdsKCk7KytqCmlmKGo+MTAwKXt3aGlsZSghMCl7aWYoIShrPjc1JiZqPjMpKWJy
-ZWFrCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCmstPWIucG9wKCkubGVuZ3RoKzI7LS1q
-fUMuTm0uaShiLCIuLi4iKQpyZXR1cm59fXE9SC5FaihwKQpyPUguRWoobykKays9ci5sZW5ndGgrcS5s
-ZW5ndGgrNH19aWYoaj5iLmxlbmd0aCsyKXtrKz01Cm09Ii4uLiJ9ZWxzZSBtPW51bGwKd2hpbGUoITAp
-e2lmKCEoaz44MCYmYi5sZW5ndGg+MykpYnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwt
-MSkKay09Yi5wb3AoKS5sZW5ndGgrMgppZihtPT1udWxsKXtrKz01Cm09Ii4uLiJ9fWlmKG0hPW51bGwp
-Qy5ObS5pKGIsbSkKQy5ObS5pKGIscSkKQy5ObS5pKGIscil9LAp0TTpmdW5jdGlvbihhLGIpe3ZhciBz
-LHIscT1QLkxzKGIpCmZvcihzPWEubGVuZ3RoLHI9MDtyPGEubGVuZ3RoO2EubGVuZ3RoPT09c3x8KDAs
-SC5saykoYSksKytyKXEuaSgwLGIuYShhW3JdKSkKcmV0dXJuIHF9LApuTzpmdW5jdGlvbihhKXt2YXIg
-cyxyPXt9CmlmKFAuaEIoYSkpcmV0dXJuInsuLi59IgpzPW5ldyBQLk0oIiIpCnRyeXtDLk5tLmkoJC54
-ZyxhKQpzLmErPSJ7IgpyLmE9ITAKYS5LKDAsbmV3IFAucmEocixzKSkKcy5hKz0ifSJ9ZmluYWxseXtp
-ZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXI9cy5hCnJldHVy
-biByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfSwKYjY6ZnVuY3Rpb24gYjYoYSl7dmFyIF89dGhpcwpfLmE9
-MApfLmY9Xy5lPV8uZD1fLmM9Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCmJuOmZ1bmN0aW9uIGJuKGEp
-e3RoaXMuYT1hCnRoaXMuYz10aGlzLmI9bnVsbH0sCmxtOmZ1bmN0aW9uIGxtKGEsYixjKXt2YXIgXz10
-aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbApfLiR0aT1jfSwKbVc6ZnVuY3Rpb24gbVcoKXt9LAp1
-eTpmdW5jdGlvbiB1eSgpe30sCmxEOmZ1bmN0aW9uIGxEKCl7fSwKaWw6ZnVuY3Rpb24gaWwoKXt9LApy
-YTpmdW5jdGlvbiByYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWWs6ZnVuY3Rpb24gWWsoKXt9LAp5
-UTpmdW5jdGlvbiB5UShhKXt0aGlzLmE9YX0sCktQOmZ1bmN0aW9uIEtQKCl7fSwKUG46ZnVuY3Rpb24g
-UG4oKXt9LApHajpmdW5jdGlvbiBHaihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApsZjpmdW5jdGlv
-biBsZigpe30sClZqOmZ1bmN0aW9uIFZqKCl7fSwKWHY6ZnVuY3Rpb24gWHYoKXt9LApuWTpmdW5jdGlv
-biBuWSgpe30sCldZOmZ1bmN0aW9uIFdZKCl7fSwKUlU6ZnVuY3Rpb24gUlUoKXt9LApwUjpmdW5jdGlv
-biBwUigpe30sCkJTOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHA9bnVsbAp0cnl7cD1KU09OLnBhcnNl
+LlVJKCkpfWVsc2UgJC5rOD1yLmI9c30sCnJSKGEpe3ZhciBzLHIscSxwPSQuUzYKaWYocD09bnVsbCl7
+UC5lVyhhKQokLm1nPSQuazgKcmV0dXJufXM9bmV3IFAuT00oYSkKcj0kLm1nCmlmKHI9PW51bGwpe3Mu
+Yj1wCiQuUzY9JC5tZz1zfWVsc2V7cT1yLmIKcy5iPXEKJC5tZz1yLmI9cwppZihxPT1udWxsKSQuazg9
+c319LApyYihhKXt2YXIgcz1udWxsLHI9JC5YMwppZihDLk5VPT09cil7UC5UayhzLHMsQy5OVSxhKQpy
+ZXR1cm59UC5UayhzLHMscix0Lk0uYShyLkdZKGEpKSl9LApRdyhhLGIpe0guY2IoYSwic3RyZWFtIix0
+LkspCnJldHVybiBuZXcgUC54SShiLkMoInhJPDA+IikpfSwKU2koYSxiKXtQLnJSKG5ldyBQLkV2KGEs
+YikpfSwKVDgoYSxiLGMsZCxlKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDAoKQokLlgz
+PWMKcz1yCnRyeXtyPWQuJDAoKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LAp5dihhLGIsYyxkLGUs
+ZixnKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDEoZSkKJC5YMz1jCnM9cgp0cnl7cj1k
+LiQxKGUpCnJldHVybiByfWZpbmFsbHl7JC5YMz1zfX0sClF4KGEsYixjLGQsZSxmLGcsaCxpKXt2YXIg
+cyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDIoZSxmKQokLlgzPWMKcz1yCnRyeXtyPWQuJDIoZSxm
+KQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LApUayhhLGIsYyxkKXt0Lk0uYShkKQppZihDLk5VIT09
+YylkPWMuR1koZCkKUC5lVyhkKX0sCnRoOmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwKaGE6ZnVuY3Rp
+b24gaGEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rpb24gVnMoYSl7
+dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBGdChhKXt0aGlzLmE9YX0sClczOmZ1bmN0aW9uIFczKCl7fSwK
+eUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9uIGloKGEsYil7
+dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMuJHRpPWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0aGlzLmE9YX0s
+ClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMuYT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhpcy5hPWF9LApG
+eTpmdW5jdGlvbiBGeShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKR1Y6ZnVuY3Rpb24gR1YoYSxiKXt2
+YXIgXz10aGlzCl8uYT1hCl8uZD1fLmM9Xy5iPW51bGwKXy4kdGk9Yn0sCnE0OmZ1bmN0aW9uIHE0KGEs
+Yil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkN3OmZ1bmN0aW9uIEN3KGEsYil7dGhpcy5hPWEKdGhpcy5i
+PWJ9LApQZjpmdW5jdGlvbiBQZigpe30sClpmOmZ1bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhpcy4k
+dGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9YQpf
+LmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwKdnM6ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlzCl8u
+YT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9LApkYTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1hCnRo
+aXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0aW9u
+IHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rpb24gVTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlvbiB2
+cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApydDpmdW5jdGlvbiBydChhLGIpe3Ro
+aXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rpb24gS0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClpM
+OmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0aW9u
+IFJUKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmpaOmZ1bmN0aW9uIGpaKGEpe3Ro
+aXMuYT1hfSwKcnE6ZnVuY3Rpb24gcnEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClJXOmZ1bmN0aW9u
+IFJXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApPTTpmdW5jdGlvbiBPTShhKXt0aGlzLmE9YQp0aGlz
+LmI9bnVsbH0sCnFoOmZ1bmN0aW9uIHFoKCl7fSwKQjU6ZnVuY3Rpb24gQjUoYSxiKXt0aGlzLmE9YQp0
+aGlzLmI9Yn0sCnVPOmZ1bmN0aW9uIHVPKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNTzpmdW5jdGlv
+biBNTygpe30sCmtUOmZ1bmN0aW9uIGtUKCl7fSwKeEk6ZnVuY3Rpb24geEkoYSl7dGhpcy4kdGk9YX0s
+Cm0wOmZ1bmN0aW9uIG0wKCl7fSwKRXY6ZnVuY3Rpb24gRXYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
+CkppOmZ1bmN0aW9uIEppKCl7fSwKVnA6ZnVuY3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
+Ck9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkVGKGEsYixj
+KXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYykuQygiRm88MSwyPiIpLmEoSC5CNyhhLG5ldyBILk41KGIu
+QygiQDwwPiIpLktxKGMpLkMoIk41PDEsMj4iKSkpKX0sCkZsKGEsYil7cmV0dXJuIG5ldyBILk41KGEu
+QygiQDwwPiIpLktxKGIpLkMoIk41PDEsMj4iKSl9LApMcyhhKXtyZXR1cm4gbmV3IFAuYjYoYS5DKCJi
+NjwwPiIpKX0sClQyKCl7dmFyIHM9T2JqZWN0LmNyZWF0ZShudWxsKQpzWyI8bm9uLWlkZW50aWZpZXIt
+a2V5PiJdPXMKZGVsZXRlIHNbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHN9LApyaihhLGIs
+Yyl7dmFyIHM9bmV3IFAubG0oYSxiLGMuQygibG08MD4iKSkKcy5jPWEuZQpyZXR1cm4gc30sCkVQKGEs
+YixjKXt2YXIgcyxyCmlmKFAuaEIoYSkpe2lmKGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpy
+ZXR1cm4gYisiLi4uIitjfXM9SC5RSShbXSx0LnMpCkMuTm0uaSgkLnhnLGEpCnRyeXtQLlZyKGEscyl9
+ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXI9
+UC5sKGIsdC5SLmEocyksIiwgIikrYwpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCngoYSxi
+LGMpe3ZhciBzLHIKaWYoUC5oQihhKSlyZXR1cm4gYisiLi4uIitjCnM9bmV3IFAuTShiKQpDLk5tLmko
+JC54ZyxhKQp0cnl7cj1zCnIuYT1QLmwoci5hLGEsIiwgIil9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0
+aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXMuYSs9YwpyPXMuYQpyZXR1cm4gci5jaGFy
+Q29kZUF0KDApPT0wP3I6cn0sCmhCKGEpe3ZhciBzLHIKZm9yKHM9JC54Zy5sZW5ndGgscj0wO3I8czsr
+K3IpaWYoYT09PSQueGdbcl0pcmV0dXJuITAKcmV0dXJuITF9LApWcihhLGIpe3ZhciBzLHIscSxwLG8s
+bixtLGw9YS5nbShhKSxrPTAsaj0wCndoaWxlKCEwKXtpZighKGs8ODB8fGo8MykpYnJlYWsKaWYoIWwu
+RigpKXJldHVybgpzPUguRWoobC5nbCgpKQpDLk5tLmkoYixzKQprKz1zLmxlbmd0aCsyOysran1pZigh
+bC5GKCkpe2lmKGo8PTUpcmV0dXJuCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCnI9Yi5w
+b3AoKQppZigwPj1iLmxlbmd0aClyZXR1cm4gSC5PSChiLC0xKQpxPWIucG9wKCl9ZWxzZXtwPWwuZ2wo
+KTsrK2oKaWYoIWwuRigpKXtpZihqPD00KXtDLk5tLmkoYixILkVqKHApKQpyZXR1cm59cj1ILkVqKHAp
+CmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCnE9Yi5wb3AoKQprKz1yLmxlbmd0aCsyfWVs
+c2V7bz1sLmdsKCk7KytqCmZvcig7bC5GKCk7cD1vLG89bil7bj1sLmdsKCk7KytqCmlmKGo+MTAwKXt3
+aGlsZSghMCl7aWYoIShrPjc1JiZqPjMpKWJyZWFrCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9IKGIs
+LTEpCmstPWIucG9wKCkubGVuZ3RoKzI7LS1qfUMuTm0uaShiLCIuLi4iKQpyZXR1cm59fXE9SC5Faihw
+KQpyPUguRWoobykKays9ci5sZW5ndGgrcS5sZW5ndGgrNH19aWYoaj5iLmxlbmd0aCsyKXtrKz01Cm09
+Ii4uLiJ9ZWxzZSBtPW51bGwKd2hpbGUoITApe2lmKCEoaz44MCYmYi5sZW5ndGg+MykpYnJlYWsKaWYo
+MD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKay09Yi5wb3AoKS5sZW5ndGgrMgppZihtPT1udWxs
+KXtrKz01Cm09Ii4uLiJ9fWlmKG0hPW51bGwpQy5ObS5pKGIsbSkKQy5ObS5pKGIscSkKQy5ObS5pKGIs
+cil9LAp0TShhLGIpe3ZhciBzLHIscT1QLkxzKGIpCmZvcihzPWEubGVuZ3RoLHI9MDtyPGEubGVuZ3Ro
+O2EubGVuZ3RoPT09c3x8KDAsSC5saykoYSksKytyKXEuaSgwLGIuYShhW3JdKSkKcmV0dXJuIHF9LApu
+TyhhKXt2YXIgcyxyPXt9CmlmKFAuaEIoYSkpcmV0dXJuInsuLi59IgpzPW5ldyBQLk0oIiIpCnRyeXtD
+Lk5tLmkoJC54ZyxhKQpzLmErPSJ7IgpyLmE9ITAKYS5LKDAsbmV3IFAucmEocixzKSkKcy5hKz0ifSJ9
+ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXI9
+cy5hCnJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfSwKYjY6ZnVuY3Rpb24gYjYoYSl7dmFyIF89
+dGhpcwpfLmE9MApfLmY9Xy5lPV8uZD1fLmM9Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCmJuOmZ1bmN0
+aW9uIGJuKGEpe3RoaXMuYT1hCnRoaXMuYz10aGlzLmI9bnVsbH0sCmxtOmZ1bmN0aW9uIGxtKGEsYixj
+KXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbApfLiR0aT1jfSwKbVc6ZnVuY3Rpb24g
+bVcoKXt9LAp1eTpmdW5jdGlvbiB1eSgpe30sCmxEOmZ1bmN0aW9uIGxEKCl7fSwKaWw6ZnVuY3Rpb24g
+aWwoKXt9LApyYTpmdW5jdGlvbiByYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWWs6ZnVuY3Rpb24g
+WWsoKXt9LAp5UTpmdW5jdGlvbiB5UShhKXt0aGlzLmE9YX0sCktQOmZ1bmN0aW9uIEtQKCl7fSwKUG46
+ZnVuY3Rpb24gUG4oKXt9LApHajpmdW5jdGlvbiBHaihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LAps
+ZjpmdW5jdGlvbiBsZigpe30sClZqOmZ1bmN0aW9uIFZqKCl7fSwKWHY6ZnVuY3Rpb24gWHYoKXt9LApu
+WTpmdW5jdGlvbiBuWSgpe30sCldZOmZ1bmN0aW9uIFdZKCl7fSwKUlU6ZnVuY3Rpb24gUlUoKXt9LApw
+UjpmdW5jdGlvbiBwUigpe30sCkJTKGEsYil7dmFyIHMscixxLHA9bnVsbAp0cnl7cD1KU09OLnBhcnNl
 KGEpfWNhdGNoKHIpe3M9SC5SdShyKQpxPVAucnIoU3RyaW5nKHMpLG51bGwsbnVsbCkKdGhyb3cgSC5i
-KHEpfXE9UC5RZShwKQpyZXR1cm4gcX0sClFlOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKGE9PW51bGwpcmV0
-dXJuIG51bGwKaWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBhCmlmKE9iamVjdC5nZXRQcm90b3R5
-cGVPZihhKSE9PUFycmF5LnByb3RvdHlwZSlyZXR1cm4gbmV3IFAudXcoYSxPYmplY3QuY3JlYXRlKG51
-bGwpKQpmb3Iocz0wO3M8YS5sZW5ndGg7KytzKWFbc109UC5RZShhW3NdKQpyZXR1cm4gYX0sCmt5OmZ1
-bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIKaWYoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3M9YgpkPXMu
-bGVuZ3RoCmlmKGQtYzwxNSlyZXR1cm4gbnVsbApyPVAuUlAoYSxzLGMsZCkKaWYociE9bnVsbCYmYSlp
-ZihyLmluZGV4T2YoIlx1ZmZmZCIpPj0wKXJldHVybiBudWxsCnJldHVybiByfXJldHVybiBudWxsfSwK
-UlA6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHM9YT8kLkhHKCk6JC5yZigpCmlmKHM9PW51bGwpcmV0dXJu
-IG51bGwKaWYoMD09PWMmJmQ9PT1iLmxlbmd0aClyZXR1cm4gUC5SYihzLGIpCnJldHVybiBQLlJiKHMs
-Yi5zdWJhcnJheShjLFAuakIoYyxkLGIubGVuZ3RoKSkpfSwKUmI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxy
-CnRyeXtzPWEuZGVjb2RlKGIpCnJldHVybiBzfWNhdGNoKHIpe0guUnUocil9cmV0dXJuIG51bGx9LAp4
-TTpmdW5jdGlvbihhLGIsYyxkLGUsZil7aWYoQy5qbi56WShmLDQpIT09MCl0aHJvdyBILmIoUC5ycigi
-SW52YWxpZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZv
-dXIsIGlzICIrZixhLGMpKQppZihkK2UhPT1mKXRocm93IEguYihQLnJyKCJJbnZhbGlkIGJhc2U2NCBw
-YWRkaW5nLCAnPScgbm90IGF0IHRoZSBlbmQiLGEsYikpCmlmKGU+Mil0aHJvdyBILmIoUC5ycigiSW52
-YWxpZCBiYXNlNjQgcGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFjdGVycyIsYSxiKSl9LApH
-eTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG5ldyBQLlVkKGEsYil9LApOQzpmdW5jdGlvbihhKXtyZXR1
-cm4gYS5MdCgpfSwKVWc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFAudHUoYSxbXSxQLkN5KCkpfSwK
-dVg6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHI9bmV3IFAuTSgiIikscT1QLlVnKHIsYikKcS5pVShhKQpz
-PXIuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmo0OmZ1bmN0aW9uKGEpe3N3aXRjaChh
-KXtjYXNlIDY1OnJldHVybiJNaXNzaW5nIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY3OnJldHVybiJVbmV4
-cGVjdGVkIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY5OnJldHVybiJJbnZhbGlkIFVURi04IGJ5dGUiCmNh
-c2UgNzE6cmV0dXJuIk92ZXJsb25nIGVuY29kaW5nIgpjYXNlIDczOnJldHVybiJPdXQgb2YgdW5pY29k
-ZSByYW5nZSIKY2FzZSA3NTpyZXR1cm4iRW5jb2RlZCBzdXJyb2dhdGUiCmNhc2UgNzc6cmV0dXJuIlVu
-ZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2UiCmRlZmF1bHQ6cmV0dXJuIiJ9fSwKank6ZnVuY3Rp
-b24oYSxiLGMpe3ZhciBzLHIscSxwPWMtYixvPW5ldyBVaW50OEFycmF5KHApCmZvcihzPUouVTYoYSks
-cj0wO3I8cDsrK3Ipe3E9cy5xKGEsYityKQppZigocSY0Mjk0OTY3MDQwKT4+PjAhPT0wKXE9MjU1Cmlm
-KHI+PXApcmV0dXJuIEguT0gobyxyKQpvW3JdPXF9cmV0dXJuIG99LAp1dzpmdW5jdGlvbiB1dyhhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1udWxsfSwKaTg6ZnVuY3Rpb24gaTgoYSl7dGhpcy5hPWF9
-LAp4cjpmdW5jdGlvbiB4cigpe30sCk56OmZ1bmN0aW9uIE56KCl7fSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9
-LApVODpmdW5jdGlvbiBVOCgpe30sClVrOmZ1bmN0aW9uIFVrKCl7fSwKd0k6ZnVuY3Rpb24gd0koKXt9
-LApaaTpmdW5jdGlvbiBaaSgpe30sClVkOmZ1bmN0aW9uIFVkKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
-LApLODpmdW5jdGlvbiBLOChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYnk6ZnVuY3Rpb24gYnkoKXt9
-LApvajpmdW5jdGlvbiBvaihhKXt0aGlzLmI9YX0sCk14OmZ1bmN0aW9uIE14KGEpe3RoaXMuYT1hfSwK
-U2g6ZnVuY3Rpb24gU2goKXt9LAp0aTpmdW5jdGlvbiB0aShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwK
-dHU6ZnVuY3Rpb24gdHUoYSxiLGMpe3RoaXMuYz1hCnRoaXMuYT1iCnRoaXMuYj1jfSwKdTU6ZnVuY3Rp
-b24gdTUoKXt9LApFMzpmdW5jdGlvbiBFMygpe30sClJ3OmZ1bmN0aW9uIFJ3KGEpe3RoaXMuYj0wCnRo
-aXMuYz1hfSwKR1k6ZnVuY3Rpb24gR1koYSl7dGhpcy5hPWF9LApiejpmdW5jdGlvbiBieihhKXt0aGlz
-LmE9YQp0aGlzLmI9MTYKdGhpcy5jPTB9LApRQTpmdW5jdGlvbihhLGIpe3ZhciBzPUguSHAoYSxiKQpp
-ZihzIT1udWxsKXJldHVybiBzCnRocm93IEguYihQLnJyKGEsbnVsbCxudWxsKSl9LApvczpmdW5jdGlv
-bihhKXtpZihhIGluc3RhbmNlb2YgSC5UcClyZXR1cm4gYS53KDApCnJldHVybiJJbnN0YW5jZSBvZiAn
-IitILmxoKGEpKyInIn0sCk84OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHI9Yz9KLktoKGEsZCk6Si5R
-aShhLGQpCmlmKGEhPT0wJiZiIT1udWxsKWZvcihzPTA7czxyLmxlbmd0aDsrK3MpcltzXT1iCnJldHVy
-biByfSwKQ0g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHI9SC5RSShbXSxjLkMoImpkPDA+IikpCmZvcihz
-PUouSVQoYSk7cy5GKCk7KUMuTm0uaShyLGMuYShzLmdsKCkpKQppZihiKXJldHVybiByCnJldHVybiBK
-LkVwKHIsYyl9LApZMTpmdW5jdGlvbihhLGIsYyl7dmFyIHMKaWYoYilyZXR1cm4gUC5ldihhLGMpCnM9
-Si5FcChQLmV2KGEsYyksYykKcmV0dXJuIHN9LApldjpmdW5jdGlvbihhLGIpe3ZhciBzLHIKaWYoQXJy
-YXkuaXNBcnJheShhKSlyZXR1cm4gSC5RSShhLnNsaWNlKDApLGIuQygiamQ8MD4iKSkKcz1ILlFJKFtd
-LGIuQygiamQ8MD4iKSkKZm9yKHI9Si5JVChhKTtyLkYoKTspQy5ObS5pKHMsci5nbCgpKQpyZXR1cm4g
-c30sCkFGOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouekMoUC5DSChhLCExLGIpKX0sCkhNOmZ1bmN0aW9u
-KGEsYixjKXt2YXIgcz1ILmZ3KGEsYixQLmpCKGIsYyxhLmxlbmd0aCkpCnJldHVybiBzfSwKT286ZnVu
-Y3Rpb24oYSl7cmV0dXJuIEguTHcoYSl9LApudTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguVlIoYSxI
-LnY0KGEsITEsITAsITEsITEsITEpKX0sCmw6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUouSVQoYikKaWYo
-IXMuRigpKXJldHVybiBhCmlmKGMubGVuZ3RoPT09MCl7ZG8gYSs9SC5FaihzLmdsKCkpCndoaWxlKHMu
-RigpKX1lbHNle2ErPUguRWoocy5nbCgpKQpmb3IoO3MuRigpOylhPWErYytILkVqKHMuZ2woKSl9cmV0
-dXJuIGF9LApscjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IFAubXAoYSxiLGMsZCl9LAp1bzpm
-dW5jdGlvbigpe3ZhciBzPUguTTAoKQppZihzIT1udWxsKXJldHVybiBQLmhLKHMpCnRocm93IEguYihQ
-Lkw0KCInVXJpLmJhc2UnIGlzIG5vdCBzdXBwb3J0ZWQiKSl9LAplUDpmdW5jdGlvbihhLGIsYyxkKXt2
-YXIgcyxyLHEscCxvLG4sbT0iMDEyMzQ1Njc4OUFCQ0RFRiIKaWYoYz09PUMueE0pe3M9JC56NCgpLmIK
-cz1zLnRlc3QoYil9ZWxzZSBzPSExCmlmKHMpcmV0dXJuIGIKSC5MaChjKS5DKCJVay5TIikuYShiKQpy
-PWMuZ1pFKCkuV0ooYikKZm9yKHM9ci5sZW5ndGgscT0wLHA9IiI7cTxzOysrcSl7bz1yW3FdCmlmKG88
-MTI4KXtuPW8+Pj40CmlmKG4+PTgpcmV0dXJuIEguT0goYSxuKQpuPShhW25dJjE8PChvJjE1KSkhPT0w
-fWVsc2Ugbj0hMQppZihuKXArPUguTHcobykKZWxzZSBwPWQmJm89PT0zMj9wKyIrIjpwKyIlIittW28+
-Pj40JjE1XSttW28mMTVdfXJldHVybiBwLmNoYXJDb2RlQXQoMCk9PTA/cDpwfSwKR3E6ZnVuY3Rpb24o
-YSl7dmFyIHM9TWF0aC5hYnMoYSkscj1hPDA/Ii0iOiIiCmlmKHM+PTEwMDApcmV0dXJuIiIrYQppZihz
-Pj0xMDApcmV0dXJuIHIrIjAiK3MKaWYocz49MTApcmV0dXJuIHIrIjAwIitzCnJldHVybiByKyIwMDAi
-K3N9LApWeDpmdW5jdGlvbihhKXtpZihhPj0xMDApcmV0dXJuIiIrYQppZihhPj0xMClyZXR1cm4iMCIr
-YQpyZXR1cm4iMDAiK2F9LApoMDpmdW5jdGlvbihhKXtpZihhPj0xMClyZXR1cm4iIithCnJldHVybiIw
-IithfSwKaGw6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIifHxILnJRKGEpfHxhPT1udWxs
-KXJldHVybiBKLncoYSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09OLnN0cmluZ2lmeShh
-KQpyZXR1cm4gUC5vcyhhKX0sCmhWOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5DNihhKX0sCnhZOmZ1
-bmN0aW9uKGEpe3JldHVybiBuZXcgUC5BVCghMSxudWxsLG51bGwsYSl9LApMMzpmdW5jdGlvbihhLGIs
-Yyl7cmV0dXJuIG5ldyBQLkFUKCEwLGEsYixjKX0sCk83OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBQ
-LmJKKG51bGwsbnVsbCwhMCxhLGIsIlZhbHVlIG5vdCBpbiByYW5nZSIpfSwKVEU6ZnVuY3Rpb24oYSxi
-LGMsZCxlKXtyZXR1cm4gbmV3IFAuYkooYixjLCEwLGEsZCwiSW52YWxpZCB2YWx1ZSIpfSwKd0E6ZnVu
-Y3Rpb24oYSxiLGMsZCl7aWYoYTxifHxhPmMpdGhyb3cgSC5iKFAuVEUoYSxiLGMsZCxudWxsKSkKcmV0
-dXJuIGF9LApqQjpmdW5jdGlvbihhLGIsYyl7aWYoMD5hfHxhPmMpdGhyb3cgSC5iKFAuVEUoYSwwLGMs
-InN0YXJ0IixudWxsKSkKaWYoYiE9bnVsbCl7aWYoYT5ifHxiPmMpdGhyb3cgSC5iKFAuVEUoYixhLGMs
-ImVuZCIsbnVsbCkpCnJldHVybiBifXJldHVybiBjfSwKazE6ZnVuY3Rpb24oYSxiKXtpZihhPDApdGhy
-b3cgSC5iKFAuVEUoYSwwLG51bGwsYixudWxsKSkKcmV0dXJuIGF9LApDZjpmdW5jdGlvbihhLGIsYyxk
-LGUpe3ZhciBzPUguSVooZT09bnVsbD9KLkhtKGIpOmUpCnJldHVybiBuZXcgUC5lWShzLCEwLGEsYywi
-SW5kZXggb3V0IG9mIHJhbmdlIil9LApMNDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAudWIoYSl9LApT
-WTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuZHMoYSl9LApQVjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3
-IFAubGooYSl9LAphNDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuVVYoYSl9LApycjpmdW5jdGlvbihh
-LGIsYyl7cmV0dXJuIG5ldyBQLmFFKGEsYixjKX0sCmhLOmZ1bmN0aW9uKGE1KXt2YXIgcyxyLHEscCxv
-LG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMixhMz1udWxsLGE0PWE1Lmxlbmd0aApp
-ZihhND49NSl7cz0oKEMueEIuVyhhNSw0KV41OCkqM3xDLnhCLlcoYTUsMCleMTAwfEMueEIuVyhhNSwx
-KV45N3xDLnhCLlcoYTUsMileMTE2fEMueEIuVyhhNSwzKV45Nyk+Pj4wCmlmKHM9PT0wKXJldHVybiBQ
-LktEKGE0PGE0P0MueEIuTmooYTUsMCxhNCk6YTUsNSxhMykuZ2xSKCkKZWxzZSBpZihzPT09MzIpcmV0
-dXJuIFAuS0QoQy54Qi5OaihhNSw1LGE0KSwwLGEzKS5nbFIoKX1yPVAuTzgoOCwwLCExLHQuUykKQy5O
-bS5ZNShyLDAsMCkKQy5ObS5ZNShyLDEsLTEpCkMuTm0uWTUociwyLC0xKQpDLk5tLlk1KHIsNywtMSkK
-Qy5ObS5ZNShyLDMsMCkKQy5ObS5ZNShyLDQsMCkKQy5ObS5ZNShyLDUsYTQpCkMuTm0uWTUociw2LGE0
-KQppZihQLlVCKGE1LDAsYTQsMCxyKT49MTQpQy5ObS5ZNShyLDcsYTQpCnE9clsxXQppZihxPj0wKWlm
-KFAuVUIoYTUsMCxxLDIwLHIpPT09MjApcls3XT1xCnA9clsyXSsxCm89clszXQpuPXJbNF0KbT1yWzVd
-Cmw9cls2XQppZihsPG0pbT1sCmlmKG48cCluPW0KZWxzZSBpZihuPD1xKW49cSsxCmlmKG88cClvPW4K
-az1yWzddPDAKaWYoaylpZihwPnErMyl7aj1hMwprPSExfWVsc2V7aT1vPjAKaWYoaSYmbysxPT09bil7
-aj1hMwprPSExfWVsc2V7aWYoIShtPGE0JiZtPT09bisyJiZDLnhCLlFpKGE1LCIuLiIsbikpKWg9bT5u
-KzImJkMueEIuUWkoYTUsIi8uLiIsbS0zKQplbHNlIGg9ITAKaWYoaCl7aj1hMwprPSExfWVsc2V7aWYo
-cT09PTQpaWYoQy54Qi5RaShhNSwiZmlsZSIsMCkpe2lmKHA8PTApe2lmKCFDLnhCLlFpKGE1LCIvIixu
-KSl7Zz0iZmlsZTovLy8iCnM9M31lbHNle2c9ImZpbGU6Ly8iCnM9Mn1hNT1nK0MueEIuTmooYTUsbixh
-NCkKcS09MAppPXMtMAptKz1pCmwrPWkKYTQ9YTUubGVuZ3RoCnA9NwpvPTcKbj03fWVsc2UgaWYobj09
-PW0peysrbApmPW0rMQphNT1DLnhCLmk3KGE1LG4sbSwiLyIpOysrYTQKbT1mfWo9ImZpbGUifWVsc2Ug
-aWYoQy54Qi5RaShhNSwiaHR0cCIsMCkpe2lmKGkmJm8rMz09PW4mJkMueEIuUWkoYTUsIjgwIixvKzEp
-KXtsLT0zCmU9bi0zCm0tPTMKYTU9Qy54Qi5pNyhhNSxvLG4sIiIpCmE0LT0zCm49ZX1qPSJodHRwIn1l
-bHNlIGo9YTMKZWxzZSBpZihxPT09NSYmQy54Qi5RaShhNSwiaHR0cHMiLDApKXtpZihpJiZvKzQ9PT1u
-JiZDLnhCLlFpKGE1LCI0NDMiLG8rMSkpe2wtPTQKZT1uLTQKbS09NAphNT1DLnhCLmk3KGE1LG8sbiwi
-IikKYTQtPTMKbj1lfWo9Imh0dHBzIn1lbHNlIGo9YTMKaz0hMH19fWVsc2Ugaj1hMwppZihrKXtpZihh
-NDxhNS5sZW5ndGgpe2E1PUMueEIuTmooYTUsMCxhNCkKcS09MApwLT0wCm8tPTAKbi09MAptLT0wCmwt
-PTB9cmV0dXJuIG5ldyBQLlVmKGE1LHEscCxvLG4sbSxsLGopfWlmKGo9PW51bGwpaWYocT4wKWo9UC5Q
-aShhNSwwLHEpCmVsc2V7aWYocT09PTApUC5SMyhhNSwwLCJJbnZhbGlkIGVtcHR5IHNjaGVtZSIpCmo9
-IiJ9aWYocD4wKXtkPXErMwpjPWQ8cD9QLnpSKGE1LGQscC0xKToiIgpiPVAuT2UoYTUscCxvLCExKQpp
-PW8rMQppZihpPG4pe2E9SC5IcChDLnhCLk5qKGE1LGksbiksYTMpCmEwPVAud0IoYT09bnVsbD9ILnYo
-UC5ycigiSW52YWxpZCBwb3J0IixhNSxpKSk6YSxqKX1lbHNlIGEwPWEzfWVsc2V7YTA9YTMKYj1hMApj
-PSIifWExPVAua2EoYTUsbixtLGEzLGosYiE9bnVsbCkKYTI9bTxsP1AubGUoYTUsbSsxLGwsYTMpOmEz
-CnJldHVybiBuZXcgUC5EbihqLGMsYixhMCxhMSxhMixsPGE0P1AudEcoYTUsbCsxLGE0KTphMyl9LApN
-dDpmdW5jdGlvbihhKXtILm4oYSkKcmV0dXJuIFAua3UoYSwwLGEubGVuZ3RoLEMueE0sITEpfSwKV1g6
-ZnVuY3Rpb24oYSl7dmFyIHM9dC5OCnJldHVybiBDLk5tLk4wKEguUUkoYS5zcGxpdCgiJiIpLHQucyks
-UC5GbChzLHMpLG5ldyBQLm4xKEMueE0pLHQudil9LApIaDpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixx
-LHAsbyxuLG09IklQdjQgYWRkcmVzcyBzaG91bGQgY29udGFpbiBleGFjdGx5IDQgcGFydHMiLGw9ImVh
-Y2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNTUiLGs9bmV3IFAuY1MoYSksaj1uZXcgVWlu
-dDhBcnJheSg0KQpmb3Iocz1iLHI9cyxxPTA7czxjOysrcyl7cD1DLnhCLk8oYSxzKQppZihwIT09NDYp
-e2lmKChwXjQ4KT45KWsuJDIoImludmFsaWQgY2hhcmFjdGVyIixzKX1lbHNle2lmKHE9PT0zKWsuJDIo
-bSxzKQpvPVAuUUEoQy54Qi5OaihhLHIscyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCm49cSsxCmlm
-KHE+PTQpcmV0dXJuIEguT0goaixxKQpqW3FdPW8Kcj1zKzEKcT1ufX1pZihxIT09MylrLiQyKG0sYykK
-bz1QLlFBKEMueEIuTmooYSxyLGMpLG51bGwpCmlmKG8+MjU1KWsuJDIobCxyKQppZihxPj00KXJldHVy
-biBILk9IKGoscSkKaltxXT1vCnJldHVybiBqfSwKZWc6ZnVuY3Rpb24oYSxiLGEwKXt2YXIgcyxyLHEs
-cCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD1uZXcgUC5WQyhhKSxjPW5ldyBQLkpUKGQsYSkKaWYoYS5s
-ZW5ndGg8MilkLiQxKCJhZGRyZXNzIGlzIHRvbyBzaG9ydCIpCnM9SC5RSShbXSx0LnQpCmZvcihyPWIs
-cT1yLHA9ITEsbz0hMTtyPGEwOysrcil7bj1DLnhCLk8oYSxyKQppZihuPT09NTgpe2lmKHI9PT1iKXsr
-K3IKaWYoQy54Qi5PKGEscikhPT01OClkLiQyKCJpbnZhbGlkIHN0YXJ0IGNvbG9uLiIscikKcT1yfWlm
-KHI9PT1xKXtpZihwKWQuJDIoIm9ubHkgb25lIHdpbGRjYXJkIGA6OmAgaXMgYWxsb3dlZCIscikKQy5O
-bS5pKHMsLTEpCnA9ITB9ZWxzZSBDLk5tLmkocyxjLiQyKHEscikpCnE9cisxfWVsc2UgaWYobj09PTQ2
-KW89ITB9aWYocy5sZW5ndGg9PT0wKWQuJDEoInRvbyBmZXcgcGFydHMiKQptPXE9PT1hMApsPUMuTm0u
-Z3JaKHMpCmlmKG0mJmwhPT0tMSlkLiQyKCJleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFzdCBgOmAiLGEw
-KQppZighbSlpZighbylDLk5tLmkocyxjLiQyKHEsYTApKQplbHNle2s9UC5IaChhLHEsYTApCkMuTm0u
-aShzLChrWzBdPDw4fGtbMV0pPj4+MCkKQy5ObS5pKHMsKGtbMl08PDh8a1szXSk+Pj4wKX1pZihwKXtp
-ZihzLmxlbmd0aD43KWQuJDEoImFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3QgaGF2ZSBsZXNz
-IHRoYW4gNyBwYXJ0cyIpfWVsc2UgaWYocy5sZW5ndGghPT04KWQuJDEoImFuIGFkZHJlc3Mgd2l0aG91
-dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMiKQpqPW5ldyBVaW50OEFycmF5
-KDE2KQpmb3IobD1zLmxlbmd0aCxpPTktbCxyPTAsaD0wO3I8bDsrK3Ipe2c9c1tyXQppZihnPT09LTEp
-Zm9yKGY9MDtmPGk7KytmKXtpZihoPDB8fGg+PTE2KXJldHVybiBILk9IKGosaCkKaltoXT0wCmU9aCsx
-CmlmKGU+PTE2KXJldHVybiBILk9IKGosZSkKaltlXT0wCmgrPTJ9ZWxzZXtlPUMuam4ud0coZyw4KQpp
-ZihoPDB8fGg+PTE2KXJldHVybiBILk9IKGosaCkKaltoXT1lCmU9aCsxCmlmKGU+PTE2KXJldHVybiBI
-Lk9IKGosZSkKaltlXT1nJjI1NQpoKz0yfX1yZXR1cm4gan0sCktMOmZ1bmN0aW9uKGEsYixjLGQsZSxm
-LGcpe3ZhciBzLHIscSxwLG8sbgpmPWY9PW51bGw/IiI6UC5QaShmLDAsZi5sZW5ndGgpCmc9UC56Uihn
-LDAsZz09bnVsbD8wOmcubGVuZ3RoKQphPVAuT2UoYSwwLGE9PW51bGw/MDphLmxlbmd0aCwhMSkKcz1Q
-LmxlKG51bGwsMCwwLGUpCnI9UC50RyhudWxsLDAsMCkKZD1QLndCKGQsZikKcT1mPT09ImZpbGUiCmlm
-KGE9PW51bGwpcD1nLmxlbmd0aCE9PTB8fGQhPW51bGx8fHEKZWxzZSBwPSExCmlmKHApYT0iIgpwPWE9
-PW51bGwKbz0hcApiPVAua2EoYiwwLGI9PW51bGw/MDpiLmxlbmd0aCxjLGYsbykKbj1mLmxlbmd0aD09
-PTAKaWYobiYmcCYmIUMueEIubihiLCIvIikpYj1QLndGKGIsIW58fG8pCmVsc2UgYj1QLnhlKGIpCnJl
-dHVybiBuZXcgUC5EbihmLGcscCYmQy54Qi5uKGIsIi8vIik/IiI6YSxkLGIscyxyKX0sCndLOmZ1bmN0
-aW9uKGEpe2lmKGE9PT0iaHR0cCIpcmV0dXJuIDgwCmlmKGE9PT0iaHR0cHMiKXJldHVybiA0NDMKcmV0
-dXJuIDB9LApOUjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbgpmb3Iocz1hLmxlbmd0aCxyPTA7
-cjxzOysrcil7cT1DLnhCLlcoYSxyKQpwPUMueEIuVyhiLHIpCm89cV5wCmlmKG8hPT0wKXtpZihvPT09
-MzIpe249cHxvCmlmKDk3PD1uJiZuPD0xMjIpY29udGludWV9cmV0dXJuITF9fXJldHVybiEwfSwKUjM6
-ZnVuY3Rpb24oYSxiLGMpe3Rocm93IEguYihQLnJyKGMsYSxiKSl9LApYZDpmdW5jdGlvbihhLGIsYyxk
-KXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGg9bnVsbCxnPWIubGVuZ3RoCmlmKGchPT0wKXtxPTAK
-d2hpbGUoITApe2lmKCEocTxnKSl7cz0iIgpyPTAKYnJlYWt9aWYoQy54Qi5XKGIscSk9PT02NCl7cz1D
-LnhCLk5qKGIsMCxxKQpyPXErMQpicmVha30rK3F9aWYocjxnJiZDLnhCLlcoYixyKT09PTkxKXtmb3Io
-cD1yLG89LTE7cDxnOysrcCl7bj1DLnhCLlcoYixwKQppZihuPT09MzcmJm88MCl7bT1DLnhCLlFpKGIs
-IjI1IixwKzEpP3ArMjpwCm89cApwPW19ZWxzZSBpZihuPT09OTMpYnJlYWt9aWYocD09PWcpdGhyb3cg
-SC5iKFAucnIoIkludmFsaWQgSVB2NiBob3N0IGVudHJ5LiIsYixyKSkKbD1vPDA/cDpvClAuZWcoYixy
-KzEsbCk7KytwCmlmKHAhPT1nJiZDLnhCLlcoYixwKSE9PTU4KXRocm93IEguYihQLnJyKCJJbnZhbGlk
-IGVuZCBvZiBhdXRob3JpdHkiLGIscCkpfWVsc2UgcD1yCndoaWxlKCEwKXtpZighKHA8Zykpe2s9aApi
-cmVha31pZihDLnhCLlcoYixwKT09PTU4KXtqPUMueEIueW4oYixwKzEpCms9ai5sZW5ndGghPT0wP1Au
-UUEoaixoKTpoCmJyZWFrfSsrcH1pPUMueEIuTmooYixyLHApfWVsc2V7az1oCmk9awpzPSIifXJldHVy
-biBQLktMKGksaCxILlFJKGMuc3BsaXQoIi8iKSx0LnMpLGssZCxhLHMpfSwKa0U6ZnVuY3Rpb24oYSxi
-KXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MDtyPHM7KytyKXtxPWFbcl0KcD1KLlU2KHEp
-Cm89cC5nQShxKQppZigwPm8pSC52KFAuVEUoMCwwLHAuZ0EocSksbnVsbCxudWxsKSkKaWYoSC5TUShx
-LCIvIiwwKSl7cz1QLkw0KCJJbGxlZ2FsIHBhdGggY2hhcmFjdGVyICIrSC5FaihxKSkKdGhyb3cgSC5i
-KHMpfX19LApITjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHAKZm9yKHM9SC5xQyhhLGMsbnVsbCxI
-LnQ2KGEpLmMpLHI9cy4kdGkscz1uZXcgSC5hNyhzLHMuZ0Eocyksci5DKCJhNzxhTC5FPiIpKSxyPXIu
-QygiYUwuRSIpO3MuRigpOyl7cT1yLmEocy5kKQpwPVAubnUoJ1siKi86PD4/XFxcXHxdJykKaWYoSC5T
-UShxLHAsMCkpe3M9UC5MNCgiSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aDogIitxKQp0aHJvdyBILmIo
-cyl9fX0sCnJnOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoISg2NTw9YSYmYTw9OTApKXM9OTc8PWEmJmE8
-PTEyMgplbHNlIHM9ITAKaWYocylyZXR1cm4Kcz1QLkw0KCJJbGxlZ2FsIGRyaXZlIGxldHRlciAiK1Au
-T28oYSkpCnRocm93IEguYihzKX0sCndCOmZ1bmN0aW9uKGEsYil7aWYoYSE9bnVsbCYmYT09PVAud0so
-YikpcmV0dXJuIG51bGwKcmV0dXJuIGF9LApPZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEscCxv
-LG4KaWYoYT09bnVsbClyZXR1cm4gbnVsbAppZihiPT09YylyZXR1cm4iIgppZihDLnhCLk8oYSxiKT09
-PTkxKXtzPWMtMQppZihDLnhCLk8oYSxzKSE9PTkzKVAuUjMoYSxiLCJNaXNzaW5nIGVuZCBgXWAgdG8g
-bWF0Y2ggYFtgIGluIGhvc3QiKQpyPWIrMQpxPVAudG8oYSxyLHMpCmlmKHE8cyl7cD1xKzEKbz1QLk9B
-KGEsQy54Qi5RaShhLCIyNSIscCk/cSszOnAscywiJTI1Iil9ZWxzZSBvPSIiClAuZWcoYSxyLHEpCnJl
-dHVybiBDLnhCLk5qKGEsYixxKS50b0xvd2VyQ2FzZSgpK28rIl0ifWZvcihuPWI7bjxjOysrbilpZihD
-LnhCLk8oYSxuKT09PTU4KXtxPUMueEIuWFUoYSwiJSIsYikKcT1xPj1iJiZxPGM/cTpjCmlmKHE8Yyl7
-cD1xKzEKbz1QLk9BKGEsQy54Qi5RaShhLCIyNSIscCk/cSszOnAsYywiJTI1Iil9ZWxzZSBvPSIiClAu
-ZWcoYSxiLHEpCnJldHVybiJbIitDLnhCLk5qKGEsYixxKStvKyJdIn1yZXR1cm4gUC5PTChhLGIsYyl9
-LAp0bzpmdW5jdGlvbihhLGIsYyl7dmFyIHM9Qy54Qi5YVShhLCIlIixiKQpyZXR1cm4gcz49YiYmczxj
-P3M6Y30sCk9BOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9ZCE9PSIi
-P25ldyBQLk0oZCk6bnVsbApmb3Iocz1iLHI9cyxxPSEwO3M8Yzspe3A9Qy54Qi5PKGEscykKaWYocD09
-PTM3KXtvPVAucnYoYSxzLCEwKQpuPW89PW51bGwKaWYobiYmcSl7cys9Mwpjb250aW51ZX1pZihpPT1u
-dWxsKWk9bmV3IFAuTSgiIikKbT1pLmErPUMueEIuTmooYSxyLHMpCmlmKG4pbz1DLnhCLk5qKGEscyxz
-KzMpCmVsc2UgaWYobz09PSIlIilQLlIzKGEscywiWm9uZUlEIHNob3VsZCBub3QgY29udGFpbiAlIGFu
-eW1vcmUiKQppLmE9bStvCnMrPTMKcj1zCnE9ITB9ZWxzZXtpZihwPDEyNyl7bj1wPj4+NAppZihuPj04
-KXJldHVybiBILk9IKEMuRjMsbikKbj0oQy5GM1tuXSYxPDwocCYxNSkpIT09MH1lbHNlIG49ITEKaWYo
-bil7aWYocSYmNjU8PXAmJjkwPj1wKXtpZihpPT1udWxsKWk9bmV3IFAuTSgiIikKaWYocjxzKXtpLmEr
-PUMueEIuTmooYSxyLHMpCnI9c31xPSExfSsrc31lbHNle2lmKChwJjY0NTEyKT09PTU1Mjk2JiZzKzE8
-Yyl7bD1DLnhCLk8oYSxzKzEpCmlmKChsJjY0NTEyKT09PTU2MzIwKXtwPShwJjEwMjMpPDwxMHxsJjEw
-MjN8NjU1MzYKaz0yfWVsc2Ugaz0xfWVsc2Ugaz0xCmo9Qy54Qi5OaihhLHIscykKaWYoaT09bnVsbCl7
-aT1uZXcgUC5NKCIiKQpuPWl9ZWxzZSBuPWkKbi5hKz1qCm4uYSs9UC56WChwKQpzKz1rCnI9c319fWlm
-KGk9PW51bGwpcmV0dXJuIEMueEIuTmooYSxiLGMpCmlmKHI8YylpLmErPUMueEIuTmooYSxyLGMpCm49
-aS5hCnJldHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKT0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciBz
-LHIscSxwLG8sbixtLGwsayxqLGkKZm9yKHM9YixyPXMscT1udWxsLHA9ITA7czxjOyl7bz1DLnhCLk8o
-YSxzKQppZihvPT09Mzcpe249UC5ydihhLHMsITApCm09bj09bnVsbAppZihtJiZwKXtzKz0zCmNvbnRp
-bnVlfWlmKHE9PW51bGwpcT1uZXcgUC5NKCIiKQpsPUMueEIuTmooYSxyLHMpCms9cS5hKz0hcD9sLnRv
-TG93ZXJDYXNlKCk6bAppZihtKXtuPUMueEIuTmooYSxzLHMrMykKaj0zfWVsc2UgaWYobj09PSIlIil7
-bj0iJTI1IgpqPTF9ZWxzZSBqPTMKcS5hPWsrbgpzKz1qCnI9cwpwPSEwfWVsc2V7aWYobzwxMjcpe209
-bz4+PjQKaWYobT49OClyZXR1cm4gSC5PSChDLmVhLG0pCm09KEMuZWFbbV0mMTw8KG8mMTUpKSE9PTB9
-ZWxzZSBtPSExCmlmKG0pe2lmKHAmJjY1PD1vJiY5MD49byl7aWYocT09bnVsbClxPW5ldyBQLk0oIiIp
-CmlmKHI8cyl7cS5hKz1DLnhCLk5qKGEscixzKQpyPXN9cD0hMX0rK3N9ZWxzZXtpZihvPD05Myl7bT1v
-Pj4+NAppZihtPj04KXJldHVybiBILk9IKEMuYWssbSkKbT0oQy5ha1ttXSYxPDwobyYxNSkpIT09MH1l
-bHNlIG09ITEKaWYobSlQLlIzKGEscywiSW52YWxpZCBjaGFyYWN0ZXIiKQplbHNle2lmKChvJjY0NTEy
-KT09PTU1Mjk2JiZzKzE8Yyl7aT1DLnhCLk8oYSxzKzEpCmlmKChpJjY0NTEyKT09PTU2MzIwKXtvPShv
-JjEwMjMpPDwxMHxpJjEwMjN8NjU1MzYKaj0yfWVsc2Ugaj0xfWVsc2Ugaj0xCmw9Qy54Qi5OaihhLHIs
-cykKaWYoIXApbD1sLnRvTG93ZXJDYXNlKCkKaWYocT09bnVsbCl7cT1uZXcgUC5NKCIiKQptPXF9ZWxz
-ZSBtPXEKbS5hKz1sCm0uYSs9UC56WChvKQpzKz1qCnI9c319fX1pZihxPT1udWxsKXJldHVybiBDLnhC
-Lk5qKGEsYixjKQppZihyPGMpe2w9Qy54Qi5OaihhLHIsYykKcS5hKz0hcD9sLnRvTG93ZXJDYXNlKCk6
-bH1tPXEuYQpyZXR1cm4gbS5jaGFyQ29kZUF0KDApPT0wP206bX0sClBpOmZ1bmN0aW9uKGEsYixjKXt2
-YXIgcyxyLHEscAppZihiPT09YylyZXR1cm4iIgppZighUC5FdChDLnhCLlcoYSxiKSkpUC5SMyhhLGIs
-IlNjaGVtZSBub3Qgc3RhcnRpbmcgd2l0aCBhbHBoYWJldGljIGNoYXJhY3RlciIpCmZvcihzPWIscj0h
-MTtzPGM7KytzKXtxPUMueEIuVyhhLHMpCmlmKHE8MTI4KXtwPXE+Pj40CmlmKHA+PTgpcmV0dXJuIEgu
-T0goQy5tSyxwKQpwPShDLm1LW3BdJjE8PChxJjE1KSkhPT0wfWVsc2UgcD0hMQppZighcClQLlIzKGEs
-cywiSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyIikKaWYoNjU8PXEmJnE8PTkwKXI9ITB9YT1DLnhCLk5q
-KGEsYixjKQpyZXR1cm4gUC5ZYShyP2EudG9Mb3dlckNhc2UoKTphKX0sCllhOmZ1bmN0aW9uKGEpe2lm
-KGE9PT0iaHR0cCIpcmV0dXJuImh0dHAiCmlmKGE9PT0iZmlsZSIpcmV0dXJuImZpbGUiCmlmKGE9PT0i
-aHR0cHMiKXJldHVybiJodHRwcyIKaWYoYT09PSJwYWNrYWdlIilyZXR1cm4icGFja2FnZSIKcmV0dXJu
-IGF9LAp6UjpmdW5jdGlvbihhLGIsYyl7aWYoYT09bnVsbClyZXR1cm4iIgpyZXR1cm4gUC5QSShhLGIs
-YyxDLnRvLCExKX0sCmthOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgcyxyLHE9ZT09PSJmaWxlIixw
-PXF8fGYKaWYoYT09bnVsbCl7aWYoZD09bnVsbClyZXR1cm4gcT8iLyI6IiIKcz1ILnQ2KGQpCnI9bmV3
-IEgubEooZCxzLkMoInFVKDEpIikuYShuZXcgUC5SWigpKSxzLkMoImxKPDEscVU+IikpLmsoMCwiLyIp
-fWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBILmIoUC54WSgiQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMg
-c3BlY2lmaWVkIikpCmVsc2Ugcj1QLlBJKGEsYixjLEMuV2QsITApCmlmKHIubGVuZ3RoPT09MCl7aWYo
-cSlyZXR1cm4iLyJ9ZWxzZSBpZihwJiYhQy54Qi5uKHIsIi8iKSlyPSIvIityCnJldHVybiBQLkpyKHIs
-ZSxmKX0sCkpyOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1iLmxlbmd0aD09PTAKaWYocyYmIWMmJiFDLnhC
-Lm4oYSwiLyIpKXJldHVybiBQLndGKGEsIXN8fGMpCnJldHVybiBQLnhlKGEpfSwKbGU6ZnVuY3Rpb24o
-YSxiLGMsZCl7dmFyIHMscj17fQppZihhIT1udWxsKXtpZihkIT1udWxsKXRocm93IEguYihQLnhZKCJC
-b3RoIHF1ZXJ5IGFuZCBxdWVyeVBhcmFtZXRlcnMgc3BlY2lmaWVkIikpCnJldHVybiBQLlBJKGEsYixj
-LEMuVkMsITApfWlmKGQ9PW51bGwpcmV0dXJuIG51bGwKcz1uZXcgUC5NKCIiKQpyLmE9IiIKZC5LKDAs
-bmV3IFAueTUobmV3IFAuTUUocixzKSkpCnI9cy5hCnJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpy
-fSwKdEc6ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIFAuUEkoYSxi
-LGMsQy5WQywhMCl9LApydjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHAsbyxuPWIrMgppZihuPj1h
-Lmxlbmd0aClyZXR1cm4iJSIKcz1DLnhCLk8oYSxiKzEpCnI9Qy54Qi5PKGEsbikKcT1ILm9vKHMpCnA9
-SC5vbyhyKQppZihxPDB8fHA8MClyZXR1cm4iJSIKbz1xKjE2K3AKaWYobzwxMjcpe249Qy5qbi53Ryhv
-LDQpCmlmKG4+PTgpcmV0dXJuIEguT0goQy5GMyxuKQpuPShDLkYzW25dJjE8PChvJjE1KSkhPT0wfWVs
-c2Ugbj0hMQppZihuKXJldHVybiBILkx3KGMmJjY1PD1vJiY5MD49bz8ob3wzMik+Pj4wOm8pCmlmKHM+
-PTk3fHxyPj05NylyZXR1cm4gQy54Qi5OaihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybiBudWxs
-fSwKelg6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPSIwMTIzNDU2Nzg5QUJDREVGIgpp
-ZihhPDEyOCl7cz1uZXcgVWludDhBcnJheSgzKQpzWzBdPTM3CnNbMV09Qy54Qi5XKGssYT4+PjQpCnNb
-Ml09Qy54Qi5XKGssYSYxNSl9ZWxzZXtpZihhPjIwNDcpaWYoYT42NTUzNSl7cj0yNDAKcT00fWVsc2V7
-cj0yMjQKcT0zfWVsc2V7cj0xOTIKcT0yfXA9MypxCnM9bmV3IFVpbnQ4QXJyYXkocCkKZm9yKG89MDst
-LXEscT49MDtyPTEyOCl7bj1DLmpuLmJmKGEsNipxKSY2M3xyCmlmKG8+PXApcmV0dXJuIEguT0gocyxv
-KQpzW29dPTM3Cm09bysxCmw9Qy54Qi5XKGssbj4+PjQpCmlmKG0+PXApcmV0dXJuIEguT0gocyxtKQpz
-W21dPWwKbD1vKzIKbT1DLnhCLlcoayxuJjE1KQppZihsPj1wKXJldHVybiBILk9IKHMsbCkKc1tsXT1t
-Cm8rPTN9fXJldHVybiBQLkhNKHMsMCxudWxsKX0sClBJOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHM9
-UC5VbChhLGIsYyxkLGUpCnJldHVybiBzPT1udWxsP0MueEIuTmooYSxiLGMpOnN9LApVbDpmdW5jdGlv
-bihhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqPW51bGwKZm9yKHM9IWUscj1iLHE9cixw
-PWo7cjxjOyl7bz1DLnhCLk8oYSxyKQppZihvPDEyNyl7bj1vPj4+NAppZihuPj04KXJldHVybiBILk9I
-KGQsbikKbj0oZFtuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEKaWYobikrK3IKZWxzZXtpZihvPT09
-Mzcpe209UC5ydihhLHIsITEpCmlmKG09PW51bGwpe3IrPTMKY29udGludWV9aWYoIiUiPT09bSl7bT0i
-JTI1IgpsPTF9ZWxzZSBsPTN9ZWxzZXtpZihzKWlmKG88PTkzKXtuPW8+Pj40CmlmKG4+PTgpcmV0dXJu
-IEguT0goQy5hayxuKQpuPShDLmFrW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQplbHNlIG49ITEK
-aWYobil7UC5SMyhhLHIsIkludmFsaWQgY2hhcmFjdGVyIikKbD1qCm09bH1lbHNle2lmKChvJjY0NTEy
-KT09PTU1Mjk2KXtuPXIrMQppZihuPGMpe2s9Qy54Qi5PKGEsbikKaWYoKGsmNjQ1MTIpPT09NTYzMjAp
-e289KG8mMTAyMyk8PDEwfGsmMTAyM3w2NTUzNgpsPTJ9ZWxzZSBsPTF9ZWxzZSBsPTF9ZWxzZSBsPTEK
-bT1QLnpYKG8pfX1pZihwPT1udWxsKXtwPW5ldyBQLk0oIiIpCm49cH1lbHNlIG49cApuLmErPUMueEIu
-TmooYSxxLHIpCm4uYSs9SC5FaihtKQppZih0eXBlb2YgbCE9PSJudW1iZXIiKXJldHVybiBILnBZKGwp
-CnIrPWwKcT1yfX1pZihwPT1udWxsKXJldHVybiBqCmlmKHE8YylwLmErPUMueEIuTmooYSxxLGMpCnM9
-cC5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKeUI6ZnVuY3Rpb24oYSl7aWYoQy54Qi5u
-KGEsIi4iKSlyZXR1cm4hMApyZXR1cm4gQy54Qi5PWShhLCIvLiIpIT09LTF9LAp4ZTpmdW5jdGlvbihh
-KXt2YXIgcyxyLHEscCxvLG4sbQppZighUC55QihhKSlyZXR1cm4gYQpzPUguUUkoW10sdC5zKQpmb3Io
-cj1hLnNwbGl0KCIvIikscT1yLmxlbmd0aCxwPSExLG89MDtvPHE7KytvKXtuPXJbb10KaWYoSi5STShu
-LCIuLiIpKXttPXMubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1tKXJldHVybiBILk9IKHMsLTEpCnMucG9w
-KCkKaWYocy5sZW5ndGg9PT0wKUMuTm0uaShzLCIiKX1wPSEwfWVsc2UgaWYoIi4iPT09bilwPSEwCmVs
-c2V7Qy5ObS5pKHMsbikKcD0hMX19aWYocClDLk5tLmkocywiIikKcmV0dXJuIEMuTm0uayhzLCIvIil9
-LAp3RjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbgppZighUC55QihhKSlyZXR1cm4hYj9QLkMx
-KGEpOmEKcz1ILlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5ndGgscD0hMSxvPTA7
-bzxxOysrbyl7bj1yW29dCmlmKCIuLiI9PT1uKWlmKHMubGVuZ3RoIT09MCYmQy5ObS5ncloocykhPT0i
-Li4iKXtpZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnA9ITB9ZWxzZXtDLk5t
-LmkocywiLi4iKQpwPSExfWVsc2UgaWYoIi4iPT09bilwPSEwCmVsc2V7Qy5ObS5pKHMsbikKcD0hMX19
-cj1zLmxlbmd0aAppZihyIT09MClpZihyPT09MSl7aWYoMD49cilyZXR1cm4gSC5PSChzLDApCnI9c1sw
-XS5sZW5ndGg9PT0wfWVsc2Ugcj0hMQplbHNlIHI9ITAKaWYocilyZXR1cm4iLi8iCmlmKHB8fEMuTm0u
-Z3JaKHMpPT09Ii4uIilDLk5tLmkocywiIikKaWYoIWIpe2lmKDA+PXMubGVuZ3RoKXJldHVybiBILk9I
-KHMsMCkKQy5ObS5ZNShzLDAsUC5DMShzWzBdKSl9cmV0dXJuIEMuTm0uayhzLCIvIil9LApDMTpmdW5j
-dGlvbihhKXt2YXIgcyxyLHEscD1hLmxlbmd0aAppZihwPj0yJiZQLkV0KEMueEIuVyhhLDApKSlmb3Io
-cz0xO3M8cDsrK3Mpe3I9Qy54Qi5XKGEscykKaWYocj09PTU4KXJldHVybiBDLnhCLk5qKGEsMCxzKSsi
-JTNBIitDLnhCLnluKGEscysxKQppZihyPD0xMjcpe3E9cj4+PjQKaWYocT49OClyZXR1cm4gSC5PSChD
-Lm1LLHEpCnE9KEMubUtbcV0mMTw8KHImMTUpKT09PTB9ZWxzZSBxPSEwCmlmKHEpYnJlYWt9cmV0dXJu
-IGF9LAp1ajpmdW5jdGlvbihhLGIpe2lmKGEuaEIoInBhY2thZ2UiKSYmYS5jPT1udWxsKXJldHVybiBQ
-LmZGKGIsMCxiLmxlbmd0aCkKcmV0dXJuLTF9LAptbjpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1hLmdG
-aigpLG89cC5sZW5ndGgKaWYobz4wJiZKLkhtKHBbMF0pPT09MiYmSi5hNihwWzBdLDEpPT09NTgpe2lm
-KDA+PW8pcmV0dXJuIEguT0gocCwwKQpQLnJnKEouYTYocFswXSwwKSwhMSkKUC5ITihwLCExLDEpCnM9
-ITB9ZWxzZXtQLkhOKHAsITEsMCkKcz0hMX1yPWEuZ3RUKCkmJiFzPyIiKyJcXCI6IiIKaWYoYS5nY2oo
-KSl7cT1hLmdKZihhKQppZihxLmxlbmd0aCE9PTApcj1yKyJcXCIrcSsiXFwifXI9UC5sKHIscCwiXFwi
-KQpvPXMmJm89PT0xP3IrIlxcIjpyCnJldHVybiBvLmNoYXJDb2RlQXQoMCk9PTA/bzpvfSwKSWg6ZnVu
-Y3Rpb24oYSxiKXt2YXIgcyxyLHEKZm9yKHM9MCxyPTA7cjwyOysrcil7cT1DLnhCLlcoYSxiK3IpCmlm
-KDQ4PD1xJiZxPD01NylzPXMqMTYrcS00OAplbHNle3F8PTMyCmlmKDk3PD1xJiZxPD0xMDIpcz1zKjE2
-K3EtODcKZWxzZSB0aHJvdyBILmIoUC54WSgiSW52YWxpZCBVUkwgZW5jb2RpbmciKSl9fXJldHVybiBz
-fSwKa3U6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvPWIKd2hpbGUoITApe2lmKCEobzxj
-KSl7cz0hMApicmVha31yPUMueEIuVyhhLG8pCmlmKHI8PTEyNylpZihyIT09MzcpcT1lJiZyPT09NDMK
-ZWxzZSBxPSEwCmVsc2UgcT0hMAppZihxKXtzPSExCmJyZWFrfSsrb31pZihzKXtpZihDLnhNIT09ZClx
-PSExCmVsc2UgcT0hMAppZihxKXJldHVybiBDLnhCLk5qKGEsYixjKQplbHNlIHA9bmV3IEgucWooQy54
-Qi5OaihhLGIsYykpfWVsc2V7cD1ILlFJKFtdLHQudCkKZm9yKHE9YS5sZW5ndGgsbz1iO288YzsrK28p
-e3I9Qy54Qi5XKGEsbykKaWYocj4xMjcpdGhyb3cgSC5iKFAueFkoIklsbGVnYWwgcGVyY2VudCBlbmNv
-ZGluZyBpbiBVUkkiKSkKaWYocj09PTM3KXtpZihvKzM+cSl0aHJvdyBILmIoUC54WSgiVHJ1bmNhdGVk
-IFVSSSIpKQpDLk5tLmkocCxQLkloKGEsbysxKSkKbys9Mn1lbHNlIGlmKGUmJnI9PT00MylDLk5tLmko
-cCwzMikKZWxzZSBDLk5tLmkocCxyKX19dC5MLmEocCkKcmV0dXJuIEMub0UuV0oocCl9LApFdDpmdW5j
-dGlvbihhKXt2YXIgcz1hfDMyCnJldHVybiA5Nzw9cyYmczw9MTIyfSwKS0Q6ZnVuY3Rpb24oYSxiLGMp
-e3ZhciBzLHIscSxwLG8sbixtLGwsaz0iSW52YWxpZCBNSU1FIHR5cGUiLGo9SC5RSShbYi0xXSx0LnQp
-CmZvcihzPWEubGVuZ3RoLHI9YixxPS0xLHA9bnVsbDtyPHM7KytyKXtwPUMueEIuVyhhLHIpCmlmKHA9
-PT00NHx8cD09PTU5KWJyZWFrCmlmKHA9PT00Nyl7aWYocTwwKXtxPXIKY29udGludWV9dGhyb3cgSC5i
-KFAucnIoayxhLHIpKX19aWYocTwwJiZyPmIpdGhyb3cgSC5iKFAucnIoayxhLHIpKQpmb3IoO3AhPT00
-NDspe0MuTm0uaShqLHIpOysrcgpmb3Iobz0tMTtyPHM7KytyKXtwPUMueEIuVyhhLHIpCmlmKHA9PT02
-MSl7aWYobzwwKW89cn1lbHNlIGlmKHA9PT01OXx8cD09PTQ0KWJyZWFrfWlmKG8+PTApQy5ObS5pKGos
-bykKZWxzZXtuPUMuTm0uZ3JaKGopCmlmKHAhPT00NHx8ciE9PW4rN3x8IUMueEIuUWkoYSwiYmFzZTY0
-IixuKzEpKXRocm93IEguYihQLnJyKCJFeHBlY3RpbmcgJz0nIixhLHIpKQpicmVha319Qy5ObS5pKGos
-cikKbT1yKzEKaWYoKGoubGVuZ3RoJjEpPT09MSlhPUMuaDkueXIoYSxtLHMpCmVsc2V7bD1QLlVsKGEs
-bSxzLEMuVkMsITApCmlmKGwhPW51bGwpYT1DLnhCLmk3KGEsbSxzLGwpfXJldHVybiBuZXcgUC5QRShh
-LGosYyl9LApLTjpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbixtPSIwMTIzNDU2Nzg5QUJDREVGR0hJ
-SktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei0uX34hJCYnKCkqKyw7PSIs
-bD0iLiIsaz0iOiIsaj0iLyIsaT0iPyIsaD0iIyIsZz1ILlFJKG5ldyBBcnJheSgyMiksdC5nTikKZm9y
-KHM9MDtzPDIyOysrcylnW3NdPW5ldyBVaW50OEFycmF5KDk2KQpyPW5ldyBQLnlJKGcpCnE9bmV3IFAu
-YzYoKQpwPW5ldyBQLnFkKCkKbz10LmdjCm49by5hKHIuJDIoMCwyMjUpKQpxLiQzKG4sbSwxKQpxLiQz
-KG4sbCwxNCkKcS4kMyhuLGssMzQpCnEuJDMobixqLDMpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1
-KQpuPW8uYShyLiQyKDE0LDIyNSkpCnEuJDMobixtLDEpCnEuJDMobixsLDE1KQpxLiQzKG4saywzNCkK
-cS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNSwyMjUp
-KQpxLiQzKG4sbSwxKQpxLiQzKG4sIiUiLDIyNSkKcS4kMyhuLGssMzQpCnEuJDMobixqLDkpCnEuJDMo
-bixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEsMjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhu
-LGssMzQpCnEuJDMobixqLDEwKQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigy
-LDIzNSkpCnEuJDMobixtLDEzOSkKcS4kMyhuLGosMTMxKQpxLiQzKG4sbCwxNDYpCnEuJDMobixpLDE3
-MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDMsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDY4
-KQpxLiQzKG4sbCwxOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNCwyMjkp
-KQpxLiQzKG4sbSw1KQpwLiQzKG4sIkFaIiwyMjkpCnEuJDMobixrLDEwMikKcS4kMyhuLCJAIiw2OCkK
-cS4kMyhuLCJbIiwyMzIpCnEuJDMobixqLDEzOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49
-by5hKHIuJDIoNSwyMjkpKQpxLiQzKG4sbSw1KQpwLiQzKG4sIkFaIiwyMjkpCnEuJDMobixrLDEwMikK
-cS4kMyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1v
-LmEoci4kMig2LDIzMSkpCnAuJDMobiwiMTkiLDcpCnEuJDMobiwiQCIsNjgpCnEuJDMobixqLDEzOCkK
-cS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNywyMzEpKQpwLiQzKG4sIjA5Iiw3
-KQpxLiQzKG4sIkAiLDY4KQpxLiQzKG4saiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpx
-LiQzKG8uYShyLiQyKDgsOCkpLCJdIiw1KQpuPW8uYShyLiQyKDksMjM1KSkKcS4kMyhuLG0sMTEpCnEu
-JDMobixsLDE2KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShy
-LiQyKDE2LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxNykKcS4kMyhuLGosMjM0KQpxLiQzKG4s
-aSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNywyMzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhu
-LGosOSkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMTAsMjM1KSkKcS4kMyhu
-LG0sMTEpCnEuJDMobixsLDE4KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1
-KQpuPW8uYShyLiQyKDE4LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxOSkKcS4kMyhuLGosMjM0
-KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxOSwyMzUpKQpxLiQzKG4sbSwx
-MSkKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxMSwy
-MzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGosMTApCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpu
-PW8uYShyLiQyKDEyLDIzNikpCnEuJDMobixtLDEyKQpxLiQzKG4saSwxMikKcS4kMyhuLGgsMjA1KQpu
-PW8uYShyLiQyKDEzLDIzNykpCnEuJDMobixtLDEzKQpxLiQzKG4saSwxMykKcC4kMyhvLmEoci4kMigy
-MCwyNDUpKSwiYXoiLDIxKQpyPW8uYShyLiQyKDIxLDI0NSkpCnAuJDMociwiYXoiLDIxKQpwLiQzKHIs
-IjA5IiwyMSkKcS4kMyhyLCIrLS4iLDIxKQpyZXR1cm4gZ30sClVCOmZ1bmN0aW9uKGEsYixjLGQsZSl7
-dmFyIHMscixxLHAsbz0kLnZaKCkKZm9yKHM9YjtzPGM7KytzKXtpZihkPDB8fGQ+PW8ubGVuZ3RoKXJl
-dHVybiBILk9IKG8sZCkKcj1vW2RdCnE9Qy54Qi5XKGEscyleOTYKcD1yW3E+OTU/MzE6cV0KZD1wJjMx
-CkMuTm0uWTUoZSxwPj4+NSxzKX1yZXR1cm4gZH0sClJ4OmZ1bmN0aW9uKGEpe2lmKGEuYj09PTcmJkMu
-eEIubihhLmEsInBhY2thZ2UiKSYmYS5jPD0wKXJldHVybiBQLmZGKGEuYSxhLmUsYS5mKQpyZXR1cm4t
-MX0sCmZGOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEKZm9yKHM9YixyPTA7czxjOysrcyl7cT1DLnhC
-Lk8oYSxzKQppZihxPT09NDcpcmV0dXJuIHIhPT0wP3M6LTEKaWYocT09PTM3fHxxPT09NTgpcmV0dXJu
-LTEKcnw9cV40Nn1yZXR1cm4tMX0sCldGOmZ1bmN0aW9uIFdGKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
-LAppUDpmdW5jdGlvbiBpUChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWFM6ZnVuY3Rpb24gWFMoKXt9
-LApDNjpmdW5jdGlvbiBDNihhKXt0aGlzLmE9YX0sCkV6OmZ1bmN0aW9uIEV6KCl7fSwKRjpmdW5jdGlv
-biBGKCl7fSwKQVQ6ZnVuY3Rpb24gQVQoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9
-YwpfLmQ9ZH0sCmJKOmZ1bmN0aW9uIGJKKGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uZT1hCl8uZj1i
-Cl8uYT1jCl8uYj1kCl8uYz1lCl8uZD1mfSwKZVk6ZnVuY3Rpb24gZVkoYSxiLGMsZCxlKXt2YXIgXz10
-aGlzCl8uZj1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKbXA6ZnVuY3Rpb24gbXAoYSxiLGMsZCl7
-dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCnViOmZ1bmN0aW9uIHViKGEpe3RoaXMu
-YT1hfSwKZHM6ZnVuY3Rpb24gZHMoYSl7dGhpcy5hPWF9LApsajpmdW5jdGlvbiBsaihhKXt0aGlzLmE9
-YX0sClVWOmZ1bmN0aW9uIFVWKGEpe3RoaXMuYT1hfSwKazU6ZnVuY3Rpb24gazUoKXt9LApLWTpmdW5j
-dGlvbiBLWSgpe30sCnA6ZnVuY3Rpb24gcChhKXt0aGlzLmE9YX0sCkNEOmZ1bmN0aW9uIENEKGEpe3Ro
-aXMuYT1hfSwKYUU6ZnVuY3Rpb24gYUUoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwK
-Y1g6ZnVuY3Rpb24gY1goKXt9LApBbjpmdW5jdGlvbiBBbigpe30sCk4zOmZ1bmN0aW9uIE4zKGEsYixj
-KXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKYzg6ZnVuY3Rpb24gYzgoKXt9LApNaDpmdW5j
-dGlvbiBNaCgpe30sClpkOmZ1bmN0aW9uIFpkKCl7fSwKTTpmdW5jdGlvbiBNKGEpe3RoaXMuYT1hfSwK
-bjE6ZnVuY3Rpb24gbjEoYSl7dGhpcy5hPWF9LApjUzpmdW5jdGlvbiBjUyhhKXt0aGlzLmE9YX0sClZD
-OmZ1bmN0aW9uIFZDKGEpe3RoaXMuYT1hfSwKSlQ6ZnVuY3Rpb24gSlQoYSxiKXt0aGlzLmE9YQp0aGlz
-LmI9Yn0sCkRuOmZ1bmN0aW9uIERuKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIK
-Xy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy5RPV8uej1fLnk9Xy54PW51bGx9LApSWjpmdW5j
-dGlvbiBSWigpe30sCk1FOmZ1bmN0aW9uIE1FKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp5NTpmdW5j
-dGlvbiB5NShhKXt0aGlzLmE9YX0sClBFOmZ1bmN0aW9uIFBFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
-Ygp0aGlzLmM9Y30sCnlJOmZ1bmN0aW9uIHlJKGEpe3RoaXMuYT1hfSwKYzY6ZnVuY3Rpb24gYzYoKXt9
-LApxZDpmdW5jdGlvbiBxZCgpe30sClVmOmZ1bmN0aW9uIFVmKGEsYixjLGQsZSxmLGcsaCl7dmFyIF89
-dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9ZgpfLnI9ZwpfLng9aApfLnk9bnVs
-bH0sCnFlOmZ1bmN0aW9uIHFlKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5j
-PWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy5RPV8uej1fLnk9Xy54PW51bGx9LAppSjpmdW5jdGlv
-biBpSigpe30sCkUyOmZ1bmN0aW9uIEUyKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApqZzpmdW5jdGlv
-biBqZyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQmY6ZnVuY3Rpb24gQmYoYSxiKXt0aGlzLmE9YQp0
-aGlzLmI9Yn0sCkFzOmZ1bmN0aW9uIEFzKCl7fSwKR0U6ZnVuY3Rpb24gR0UoYSl7dGhpcy5hPWF9LApO
-NzpmdW5jdGlvbiBONyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKdVE6ZnVuY3Rpb24gdVEoKXt9LApo
-RjpmdW5jdGlvbiBoRigpe30sClI0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscQpILnA4KGIpCnQu
-ai5hKGQpCmlmKGIpe3M9W2NdCkMuTm0uRlYocyxkKQpkPXN9cj10LnoKcT1QLkNIKEouTTEoZCxQLncw
-KCksciksITAscikKdC5ZLmEoYSkKcmV0dXJuIFAud1koSC5FayhhLHEsbnVsbCkpfSwKRG06ZnVuY3Rp
-b24oYSxiLGMpe3ZhciBzCnRyeXtpZihPYmplY3QuaXNFeHRlbnNpYmxlKGEpJiYhT2JqZWN0LnByb3Rv
-dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3Zh
-bHVlOmN9KQpyZXR1cm4hMH19Y2F0Y2gocyl7SC5SdShzKX1yZXR1cm4hMX0sCk9tOmZ1bmN0aW9uKGEs
-Yil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpcmV0dXJuIGFbYl0K
-cmV0dXJuIG51bGx9LAp3WTpmdW5jdGlvbihhKXtpZihhPT1udWxsfHx0eXBlb2YgYT09InN0cmluZyJ8
-fHR5cGVvZiBhPT0ibnVtYmVyInx8SC5yUShhKSlyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgUC5FNCly
-ZXR1cm4gYS5hCmlmKEguUjkoYSkpcmV0dXJuIGEKaWYodC5hay5iKGEpKXJldHVybiBhCmlmKGEgaW5z
-dGFuY2VvZiBQLmlQKXJldHVybiBILm8yKGEpCmlmKHQuWS5iKGEpKXJldHVybiBQLmhFKGEsIiRkYXJ0
-X2pzRnVuY3Rpb24iLG5ldyBQLlBDKCkpCnJldHVybiBQLmhFKGEsIl8kZGFydF9qc09iamVjdCIsbmV3
-IFAubXQoJC5rSSgpKSl9LApoRTpmdW5jdGlvbihhLGIsYyl7dmFyIHM9UC5PbShhLGIpCmlmKHM9PW51
-bGwpe3M9Yy4kMShhKQpQLkRtKGEsYixzKX1yZXR1cm4gc30sCmRVOmZ1bmN0aW9uKGEpe3ZhciBzLHIK
-aWYoYT09bnVsbHx8dHlwZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fHR5cGVvZiBh
-PT0iYm9vbGVhbiIpcmV0dXJuIGEKZWxzZSBpZihhIGluc3RhbmNlb2YgT2JqZWN0JiZILlI5KGEpKXJl
-dHVybiBhCmVsc2UgaWYoYSBpbnN0YW5jZW9mIE9iamVjdCYmdC5hay5iKGEpKXJldHVybiBhCmVsc2Ug
-aWYoYSBpbnN0YW5jZW9mIERhdGUpe3M9SC5JWihhLmdldFRpbWUoKSkKaWYoTWF0aC5hYnMocyk8PTg2
-NGUxMylyPSExCmVsc2Ugcj0hMAppZihyKUgudihQLnhZKCJEYXRlVGltZSBpcyBvdXRzaWRlIHZhbGlk
-IHJhbmdlOiAiK3MpKQpILmNiKCExLCJpc1V0YyIsdC55KQpyZXR1cm4gbmV3IFAuaVAocywhMSl9ZWxz
-ZSBpZihhLmNvbnN0cnVjdG9yPT09JC5rSSgpKXJldHVybiBhLm8KZWxzZSByZXR1cm4gUC5ORChhKX0s
-Ck5EOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBQLmlRKGEsJC56KCks
-bmV3IFAuUVMoKSkKaWYoYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBQLmlRKGEsJC5SOCgpLG5ldyBQ
-Lm5wKCkpCnJldHVybiBQLmlRKGEsJC5SOCgpLG5ldyBQLlV0KCkpfSwKaVE6ZnVuY3Rpb24oYSxiLGMp
-e3ZhciBzPVAuT20oYSxiKQppZihzPT1udWxsfHwhKGEgaW5zdGFuY2VvZiBPYmplY3QpKXtzPWMuJDEo
-YSkKUC5EbShhLGIscyl9cmV0dXJuIHN9LApQQzpmdW5jdGlvbiBQQygpe30sCm10OmZ1bmN0aW9uIG10
-KGEpe3RoaXMuYT1hfSwKUVM6ZnVuY3Rpb24gUVMoKXt9LApucDpmdW5jdGlvbiBucCgpe30sClV0OmZ1
-bmN0aW9uIFV0KCl7fSwKRTQ6ZnVuY3Rpb24gRTQoYSl7dGhpcy5hPWF9LApyNzpmdW5jdGlvbiByNyhh
-KXt0aGlzLmE9YX0sClR6OmZ1bmN0aW9uIFR6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCnZnOmZ1
-bmN0aW9uIHZnKCl7fSwKbmQ6ZnVuY3Rpb24gbmQoKXt9LApLZTpmdW5jdGlvbiBLZShhKXt0aGlzLmE9
-YX0sCmhpOmZ1bmN0aW9uIGhpKCl7fX0sUj17Cm56OmZ1bmN0aW9uKGEpe3ZhciBzPUguVWMoYS5xKDAs
-Im5vZGVJZCIpKQpyZXR1cm4gbmV3IFIuTEwoQy5ObS5IdChDLnJrLG5ldyBSLk1EKGEpKSxzKX0sCk9Y
-OmZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlIEMuQWQ6cmV0dXJuIkFkZCAvKj8qLyBoaW50IgpjYXNl
-IEMubmU6cmV0dXJuIkFkZCAvKiEqLyBoaW50IgpjYXNlIEMud1Y6cmV0dXJuIlJlbW92ZSAvKj8qLyBo
-aW50IgpjYXNlIEMuZlI6cmV0dXJuIlJlbW92ZSAvKiEqLyBoaW50IgpjYXNlIEMubXk6cmV0dXJuIkNo
-YW5nZSB0byAvKj8qLyBoaW50IgpjYXNlIEMucng6cmV0dXJuIkNoYW5nZSB0byAvKiEqLyBoaW50In19
-LApMTDpmdW5jdGlvbiBMTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTUQ6ZnVuY3Rpb24gTUQoYSl7
-dGhpcy5hPWF9LApINzpmdW5jdGlvbiBINyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifX0sVD17bVE6ZnVu
-Y3Rpb24gbVEoKXt9fSxVPXsKamY6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKaWYoYT09bnVsbClzPW51
-bGwKZWxzZXtzPUguUUkoW10sdC5mQSkKZm9yKHI9Si5JVCh0LlIuYShhKSk7ci5GKCk7KXtxPXIuZ2wo
-KQpwPUouVTYocSkKcy5wdXNoKG5ldyBVLlNlKEguayhwLnEocSwiZGVzY3JpcHRpb24iKSksSC5rKHAu
-cShxLCJocmVmIikpKSl9fXJldHVybiBzfSwKTmQ6ZnVuY3Rpb24oYSl7dmFyIHMscgppZihhPT1udWxs
-KXM9bnVsbAplbHNle3M9SC5RSShbXSx0LmhoKQpmb3Iocj1KLklUKHQuUi5hKGEpKTtyLkYoKTspcy5w
-dXNoKFUuTmYoci5nbCgpKSl9cmV0dXJuIHN9LApOZjpmdW5jdGlvbihhKXt2YXIgcz1KLlU2KGEpLHI9
-SC5rKHMucShhLCJkZXNjcmlwdGlvbiIpKSxxPUguUUkoW10sdC5hSikKZm9yKHM9Si5JVCh0LlIuYShz
-LnEoYSwiZW50cmllcyIpKSk7cy5GKCk7KXEucHVzaChVLlJqKHMuZ2woKSkpCnJldHVybiBuZXcgVS55
-RChyLHEpfSwKUmo6ZnVuY3Rpb24oYSl7dmFyIHMscj1KLlU2KGEpLHE9SC5rKHIucShhLCJkZXNjcmlw
-dGlvbiIpKSxwPUguayhyLnEoYSwiZnVuY3Rpb24iKSksbz1yLnEoYSwibGluayIpCmlmKG89PW51bGwp
-bz1udWxsCmVsc2V7cz1KLlU2KG8pCm89bmV3IFUuTWwoSC5rKHMucShvLCJocmVmIikpLEguVWMocy5x
-KG8sImxpbmUiKSksSC5rKHMucShvLCJwYXRoIikpKX1yPXQuYk0uYShyLnEoYSwiaGludEFjdGlvbnMi
-KSkKcj1yPT1udWxsP251bGw6Si5NMShyLG5ldyBVLmFOKCksdC5KKS5icigwKQpyZXR1cm4gbmV3IFUu
-d2IocSxwLG8scj09bnVsbD9DLmRuOnIpfSwKZDI6ZnVuY3Rpb24gZDIoYSxiLGMsZCxlLGYpe3ZhciBf
-PXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWZ9LApTZTpmdW5jdGlvbiBTZShh
-LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTWw6ZnVuY3Rpb24gTWwoYSxiLGMpe3RoaXMuYT1hCnRoaXMu
-Yj1iCnRoaXMuYz1jfSwKeUQ6ZnVuY3Rpb24geUQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCndiOmZ1
-bmN0aW9uIHdiKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LAphTjpm
-dW5jdGlvbiBhTigpe30sCmIwOmZ1bmN0aW9uIGIwKCl7fX0sVz17CngzOmZ1bmN0aW9uKCl7cmV0dXJu
-IHdpbmRvd30sClpyOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50fSwKSjY6ZnVuY3Rpb24oYSl7dmFy
-IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpCmlmKGEhPW51bGwpQy54bi5zTFUocyxhKQpyZXR1
-cm4gc30sCkxqOmZ1bmN0aW9uKGEpe3JldHVybiBDU1MuZXNjYXBlKGEpfSwKVTk6ZnVuY3Rpb24oYSxi
-LGMpe3ZhciBzLHI9ZG9jdW1lbnQuYm9keQpyLnRvU3RyaW5nCnM9dC5hYwpzPW5ldyBILlU1KG5ldyBX
-LmU3KEMuUlkucjYocixhLGIsYykpLHMuQygiYTIobEQuRSkiKS5hKG5ldyBXLkN2KCkpLHMuQygiVTU8
-bEQuRT4iKSkKcmV0dXJuIHQuaC5hKHMuZ3I4KHMpKX0sCnJTOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT0i
-ZWxlbWVudCB0YWcgdW5hdmFpbGFibGUiCnRyeXtzPUouWUUoYSkKcy5nbnMoYSkKcT1zLmducyhhKX1j
-YXRjaChyKXtILlJ1KHIpfXJldHVybiBxfSwKQzA6ZnVuY3Rpb24oYSxiKXthPWErYiY1MzY4NzA5MTEK
-YT1hKygoYSY1MjQyODcpPDwxMCkmNTM2ODcwOTExCnJldHVybiBhXmE+Pj42fSwKckU6ZnVuY3Rpb24o
-YSxiLGMsZCl7dmFyIHM9Vy5DMChXLkMwKFcuQzAoVy5DMCgwLGEpLGIpLGMpLGQpLHI9cysoKHMmNjcx
-MDg4NjMpPDwzKSY1MzY4NzA5MTEKcl49cj4+PjExCnJldHVybiByKygociYxNjM4Myk8PDE1KSY1MzY4
-NzA5MTF9LApUTjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscT1hLmNsYXNzTGlzdApmb3Iocz1iLmxlbmd0
-aCxyPTA7cjxiLmxlbmd0aDtiLmxlbmd0aD09PXN8fCgwLEgubGspKGIpLCsrcilxLmFkZChiW3JdKX0s
-CkpFOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHM9Vy5hRihuZXcgVy52TihjKSx0LkIpCmlmKHMhPW51
-bGwmJiEwKUouZFooYSxiLHMsITEpCnJldHVybiBuZXcgVy54QyhhLGIscywhMSxlLkMoInhDPDA+Iikp
-fSwKVHc6ZnVuY3Rpb24oYSl7dmFyIHM9Vy5KNihudWxsKSxyPXQuRi5hKHdpbmRvdy5sb2NhdGlvbikK
-cz1uZXcgVy5KUShuZXcgVy5tayhzLHIpKQpzLkNZKGEpCnJldHVybiBzfSwKcUQ6ZnVuY3Rpb24oYSxi
-LGMsZCl7dC5oLmEoYSkKSC5uKGIpCkgubihjKQp0LmNyLmEoZCkKcmV0dXJuITB9LApuWjpmdW5jdGlv
-bihhLGIsYyxkKXt2YXIgcyxyLHEKdC5oLmEoYSkKSC5uKGIpCkgubihjKQpzPXQuY3IuYShkKS5hCnI9
-cy5hCkMueG4uc0xVKHIsYykKcT1yLmhvc3RuYW1lCnM9cy5iCmlmKCEocT09cy5ob3N0bmFtZSYmci5w
-b3J0PT09cy5wb3J0JiZyLnByb3RvY29sPT09cy5wcm90b2NvbCkpaWYocT09PSIiKWlmKHIucG9ydD09
-PSIiKXtzPXIucHJvdG9jb2wKcz1zPT09IjoifHxzPT09IiJ9ZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNl
-IHM9ITAKcmV0dXJuIHN9LApCbDpmdW5jdGlvbigpe3ZhciBzPXQuTixyPVAudE0oQy5ReCxzKSxxPXQu
-ZEcuYShuZXcgVy5JQSgpKSxwPUguUUkoWyJURU1QTEFURSJdLHQucykKcz1uZXcgVy5jdChyLFAuTHMo
-cyksUC5McyhzKSxQLkxzKHMpLG51bGwpCnMuQ1kobnVsbCxuZXcgSC5sSihDLlF4LHEsdC5EKSxwLG51
-bGwpCnJldHVybiBzfSwKcWM6ZnVuY3Rpb24oYSl7dmFyIHMKaWYoYT09bnVsbClyZXR1cm4gbnVsbApp
-ZigicG9zdE1lc3NhZ2UiIGluIGEpe3M9Vy5QMShhKQpyZXR1cm4gc31lbHNlIHJldHVybiB0LmNoLmEo
-YSl9LApQMTpmdW5jdGlvbihhKXtpZihhPT09d2luZG93KXJldHVybiB0LmNpLmEoYSkKZWxzZSByZXR1
-cm4gbmV3IFcuZFcoKX0sCmFGOmZ1bmN0aW9uKGEsYil7dmFyIHM9JC5YMwppZihzPT09Qy5OVSlyZXR1
-cm4gYQpyZXR1cm4gcy5QeShhLGIpfSwKcUU6ZnVuY3Rpb24gcUUoKXt9LApHaDpmdW5jdGlvbiBHaCgp
-e30sCmZZOmZ1bmN0aW9uIGZZKCl7fSwKclo6ZnVuY3Rpb24gclooKXt9LApBejpmdW5jdGlvbiBBeigp
-e30sClFQOmZ1bmN0aW9uIFFQKCl7fSwKbng6ZnVuY3Rpb24gbngoKXt9LApvSjpmdW5jdGlvbiBvSigp
-e30sCmlkOmZ1bmN0aW9uIGlkKCl7fSwKUUY6ZnVuY3Rpb24gUUYoKXt9LApOaDpmdW5jdGlvbiBOaCgp
-e30sCmFlOmZ1bmN0aW9uIGFlKCl7fSwKSUI6ZnVuY3Rpb24gSUIoKXt9LApuNzpmdW5jdGlvbiBuNygp
-e30sCnd6OmZ1bmN0aW9uIHd6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmN2OmZ1bmN0aW9uIGN2
-KCl7fSwKQ3Y6ZnVuY3Rpb24gQ3YoKXt9LAplYTpmdW5jdGlvbiBlYSgpe30sCkQwOmZ1bmN0aW9uIEQw
-KCl7fSwKaEg6ZnVuY3Rpb24gaEgoKXt9LApoNDpmdW5jdGlvbiBoNCgpe30sCmJyOmZ1bmN0aW9uIGJy
-KCl7fSwKVmI6ZnVuY3Rpb24gVmIoKXt9LApmSjpmdW5jdGlvbiBmSigpe30sCndhOmZ1bmN0aW9uIHdh
-KCl7fSwKU2c6ZnVuY3Rpb24gU2coKXt9LAp1ODpmdW5jdGlvbiB1OCgpe30sCkFqOmZ1bmN0aW9uIEFq
-KCl7fSwKZTc6ZnVuY3Rpb24gZTcoYSl7dGhpcy5hPWF9LApLVjpmdW5jdGlvbiBLVigpe30sCkJIOmZ1
-bmN0aW9uIEJIKCl7fSwKU046ZnVuY3Rpb24gU04oKXt9LApldzpmdW5jdGlvbiBldygpe30sCmxwOmZ1
-bmN0aW9uIGxwKCl7fSwKVGI6ZnVuY3Rpb24gVGIoKXt9LApJdjpmdW5jdGlvbiBJdigpe30sCldQOmZ1
-bmN0aW9uIFdQKCl7fSwKeVk6ZnVuY3Rpb24geVkoKXt9LAp3NjpmdW5jdGlvbiB3Nigpe30sCks1OmZ1
-bmN0aW9uIEs1KCl7fSwKQ206ZnVuY3Rpb24gQ20oKXt9LApDUTpmdW5jdGlvbiBDUSgpe30sCnc0OmZ1
-bmN0aW9uIHc0KCl7fSwKcmg6ZnVuY3Rpb24gcmgoKXt9LApjZjpmdW5jdGlvbiBjZigpe30sCmk3OmZ1
-bmN0aW9uIGk3KGEpe3RoaXMuYT1hfSwKU3k6ZnVuY3Rpb24gU3koYSl7dGhpcy5hPWF9LApLUzpmdW5j
-dGlvbiBLUyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQTM6ZnVuY3Rpb24gQTMoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCkk0OmZ1bmN0aW9uIEk0KGEpe3RoaXMuYT1hfSwKRms6ZnVuY3Rpb24gRmsoYSxi
-KXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKUk86ZnVuY3Rpb24gUk8oYSxiLGMsZCl7dmFyIF89dGhpcwpf
-LmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKQ3E6ZnVuY3Rpb24gQ3EoYSxiLGMsZCl7dmFyIF89dGhp
-cwpfLmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKeEM6ZnVuY3Rpb24geEMoYSxiLGMsZCxlKXt2YXIg
-Xz10aGlzCl8uYj1hCl8uYz1iCl8uZD1jCl8uZT1kCl8uJHRpPWV9LAp2TjpmdW5jdGlvbiB2TihhKXt0
-aGlzLmE9YX0sCkpROmZ1bmN0aW9uIEpRKGEpe3RoaXMuYT1hfSwKR206ZnVuY3Rpb24gR20oKXt9LAp2
-RDpmdW5jdGlvbiB2RChhKXt0aGlzLmE9YX0sClV2OmZ1bmN0aW9uIFV2KGEpe3RoaXMuYT1hfSwKRWc6
-ZnVuY3Rpb24gRWcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKbTY6ZnVuY3Rpb24g
-bTYoKXt9LApFbzpmdW5jdGlvbiBFbygpe30sCldrOmZ1bmN0aW9uIFdrKCl7fSwKY3Q6ZnVuY3Rpb24g
-Y3QoYSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZT1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKSUE6
-ZnVuY3Rpb24gSUEoKXt9LApPdzpmdW5jdGlvbiBPdygpe30sClc5OmZ1bmN0aW9uIFc5KGEsYixjKXt2
-YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0tMQpfLmQ9bnVsbApfLiR0aT1jfSwKZFc6ZnVuY3Rpb24g
-ZFcoKXt9LAptazpmdW5jdGlvbiBtayhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rpb24g
-S28oYSl7dGhpcy5hPWEKdGhpcy5iPTB9LApmbTpmdW5jdGlvbiBmbShhKXt0aGlzLmE9YX0sCkxlOmZ1
-bmN0aW9uIExlKCl7fSwKSzc6ZnVuY3Rpb24gSzcoKXt9LApyQjpmdW5jdGlvbiByQigpe30sClhXOmZ1
-bmN0aW9uIFhXKCl7fSwKb2E6ZnVuY3Rpb24gb2EoKXt9fSxYPXsKQ0w6ZnVuY3Rpb24oYSxiKXt2YXIg
-cyxyLHEscCxvLG49Yi54WihhKQpiLmhLKGEpCmlmKG4hPW51bGwpYT1DLnhCLnluKGEsbi5sZW5ndGgp
-CnM9dC5zCnI9SC5RSShbXSxzKQpxPUguUUkoW10scykKcz1hLmxlbmd0aAppZihzIT09MCYmYi5yNChD
-LnhCLlcoYSwwKSkpe2lmKDA+PXMpcmV0dXJuIEguT0goYSwwKQpDLk5tLmkocSxhWzBdKQpwPTF9ZWxz
-ZXtDLk5tLmkocSwiIikKcD0wfWZvcihvPXA7bzxzOysrbylpZihiLnI0KEMueEIuVyhhLG8pKSl7Qy5O
-bS5pKHIsQy54Qi5OaihhLHAsbykpCkMuTm0uaShxLGFbb10pCnA9bysxfWlmKHA8cyl7Qy5ObS5pKHIs
-Qy54Qi55bihhLHApKQpDLk5tLmkocSwiIil9cmV0dXJuIG5ldyBYLldEKGIsbixyLHEpfSwKV0Q6ZnVu
-Y3Rpb24gV0QoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9YwpfLmU9ZH0sCkk3OmZ1
-bmN0aW9uKGEpe3JldHVybiBuZXcgWC5kdihhKX0sCmR2OmZ1bmN0aW9uIGR2KGEpe3RoaXMuYT1hfX0K
-dmFyIHc9W0IsQyxELEUsRixILEosTCxNLE8sUCxSLFQsVSxXLFhdCmh1bmtIZWxwZXJzLnNldEZ1bmN0
-aW9uTmFtZXNJZk5lY2Vzc2FyeSh3KQp2YXIgJD17fQpILkZLLnByb3RvdHlwZT17fQpKLkd2LnByb3Rv
-dHlwZT17CkROOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1ifSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVy
-biBILmVRKGEpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrSC5saChhKSsiJyJ9
-LAplNzpmdW5jdGlvbihhLGIpe3Quby5hKGIpCnRocm93IEguYihQLmxyKGEsYi5nV2EoKSxiLmduZCgp
-LGIuZ1ZtKCkpKX19CkoueUUucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEp
-fSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBhPzUxOTAxODoyMTgxNTl9LAokaWEyOjF9Ckoud2UucHJv
-dG90eXBlPXsKRE46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09Yn0sCnc6ZnVuY3Rpb24oYSl7cmV0
-dXJuIm51bGwifSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiAwfSwKJGljODoxfQpKLk1GLnByb3RvdHlw
-ZT17CmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gMH0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhh
+KHEpfXE9UC5RZShwKQpyZXR1cm4gcX0sClFlKGEpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwK
+aWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBhCmlmKE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSE9
+PUFycmF5LnByb3RvdHlwZSlyZXR1cm4gbmV3IFAudXcoYSxPYmplY3QuY3JlYXRlKG51bGwpKQpmb3Io
+cz0wO3M8YS5sZW5ndGg7KytzKWFbc109UC5RZShhW3NdKQpyZXR1cm4gYX0sCmt5KGEsYixjLGQpe3Zh
+ciBzLHIKaWYoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3M9YgpkPXMubGVuZ3RoCmlmKGQtYzwxNSly
+ZXR1cm4gbnVsbApyPVAuUlAoYSxzLGMsZCkKaWYociE9bnVsbCYmYSlpZihyLmluZGV4T2YoIlx1ZmZm
+ZCIpPj0wKXJldHVybiBudWxsCnJldHVybiByfXJldHVybiBudWxsfSwKUlAoYSxiLGMsZCl7dmFyIHM9
+YT8kLkhHKCk6JC5yZigpCmlmKHM9PW51bGwpcmV0dXJuIG51bGwKaWYoMD09PWMmJmQ9PT1iLmxlbmd0
+aClyZXR1cm4gUC5SYihzLGIpCnJldHVybiBQLlJiKHMsYi5zdWJhcnJheShjLFAuakIoYyxkLGIubGVu
+Z3RoKSkpfSwKUmIoYSxiKXt2YXIgcyxyCnRyeXtzPWEuZGVjb2RlKGIpCnJldHVybiBzfWNhdGNoKHIp
+e0guUnUocil9cmV0dXJuIG51bGx9LAp4TShhLGIsYyxkLGUsZil7aWYoQy5qbi56WShmLDQpIT09MCl0
+aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJl
+IG11bHRpcGxlIG9mIGZvdXIsIGlzICIrZixhLGMpKQppZihkK2UhPT1mKXRocm93IEguYihQLnJyKCJJ
+bnZhbGlkIGJhc2U2NCBwYWRkaW5nLCAnPScgbm90IGF0IHRoZSBlbmQiLGEsYikpCmlmKGU+Mil0aHJv
+dyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgcGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFj
+dGVycyIsYSxiKSl9LApHeShhLGIsYyl7cmV0dXJuIG5ldyBQLlVkKGEsYil9LApOQyhhKXtyZXR1cm4g
+YS5MdCgpfSwKVWcoYSxiKXtyZXR1cm4gbmV3IFAudHUoYSxbXSxQLkN5KCkpfSwKdVgoYSxiLGMpe3Zh
+ciBzLHI9bmV3IFAuTSgiIikscT1QLlVnKHIsYikKcS5pVShhKQpzPXIuYQpyZXR1cm4gcy5jaGFyQ29k
+ZUF0KDApPT0wP3M6c30sCmo0KGEpe3N3aXRjaChhKXtjYXNlIDY1OnJldHVybiJNaXNzaW5nIGV4dGVu
+c2lvbiBieXRlIgpjYXNlIDY3OnJldHVybiJVbmV4cGVjdGVkIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY5
+OnJldHVybiJJbnZhbGlkIFVURi04IGJ5dGUiCmNhc2UgNzE6cmV0dXJuIk92ZXJsb25nIGVuY29kaW5n
+IgpjYXNlIDczOnJldHVybiJPdXQgb2YgdW5pY29kZSByYW5nZSIKY2FzZSA3NTpyZXR1cm4iRW5jb2Rl
+ZCBzdXJyb2dhdGUiCmNhc2UgNzc6cmV0dXJuIlVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2Ui
+CmRlZmF1bHQ6cmV0dXJuIiJ9fSwKankoYSxiLGMpe3ZhciBzLHIscSxwPWMtYixvPW5ldyBVaW50OEFy
+cmF5KHApCmZvcihzPUouVTYoYSkscj0wO3I8cDsrK3Ipe3E9cy5xKGEsYityKQppZigocSY0Mjk0OTY3
+MDQwKT4+PjAhPT0wKXE9MjU1CmlmKHI+PXApcmV0dXJuIEguT0gobyxyKQpvW3JdPXF9cmV0dXJuIG99
+LAp1dzpmdW5jdGlvbiB1dyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1udWxsfSwKaTg6ZnVu
+Y3Rpb24gaTgoYSl7dGhpcy5hPWF9LAp4cjpmdW5jdGlvbiB4cigpe30sCk56OmZ1bmN0aW9uIE56KCl7
+fSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9LApVODpmdW5jdGlvbiBVOCgpe30sClVrOmZ1bmN0aW9uIFVrKCl7
+fSwKd0k6ZnVuY3Rpb24gd0koKXt9LApaaTpmdW5jdGlvbiBaaSgpe30sClVkOmZ1bmN0aW9uIFVkKGEs
+Yil7dGhpcy5hPWEKdGhpcy5iPWJ9LApLODpmdW5jdGlvbiBLOChhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
+fSwKYnk6ZnVuY3Rpb24gYnkoKXt9LApvajpmdW5jdGlvbiBvaihhKXt0aGlzLmI9YX0sCk14OmZ1bmN0
+aW9uIE14KGEpe3RoaXMuYT1hfSwKU2g6ZnVuY3Rpb24gU2goKXt9LAp0aTpmdW5jdGlvbiB0aShhLGIp
+e3RoaXMuYT1hCnRoaXMuYj1ifSwKdHU6ZnVuY3Rpb24gdHUoYSxiLGMpe3RoaXMuYz1hCnRoaXMuYT1i
+CnRoaXMuYj1jfSwKdTU6ZnVuY3Rpb24gdTUoKXt9LApFMzpmdW5jdGlvbiBFMygpe30sClJ3OmZ1bmN0
+aW9uIFJ3KGEpe3RoaXMuYj0wCnRoaXMuYz1hfSwKR1k6ZnVuY3Rpb24gR1koYSl7dGhpcy5hPWF9LApi
+ejpmdW5jdGlvbiBieihhKXt0aGlzLmE9YQp0aGlzLmI9MTYKdGhpcy5jPTB9LApRQShhLGIpe3ZhciBz
+PUguSHAoYSxiKQppZihzIT1udWxsKXJldHVybiBzCnRocm93IEguYihQLnJyKGEsbnVsbCxudWxsKSl9
+LApvcyhhKXtpZihhIGluc3RhbmNlb2YgSC5UcClyZXR1cm4gYS53KDApCnJldHVybiJJbnN0YW5jZSBv
+ZiAnIitILmxoKGEpKyInIn0sCk84KGEsYixjLGQpe3ZhciBzLHI9Yz9KLktoKGEsZCk6Si5RaShhLGQp
+CmlmKGEhPT0wJiZiIT1udWxsKWZvcihzPTA7czxyLmxlbmd0aDsrK3MpcltzXT1iCnJldHVybiByfSwK
+UFcoYSxiLGMpe3ZhciBzLHI9SC5RSShbXSxjLkMoImpkPDA+IikpCmZvcihzPUouSVQoYSk7cy5GKCk7
+KUMuTm0uaShyLGMuYShzLmdsKCkpKQppZihiKXJldHVybiByCnJldHVybiBKLkVwKHIsYyl9LApZMShh
+LGIsYyl7dmFyIHMKaWYoYilyZXR1cm4gUC5ldihhLGMpCnM9Si5FcChQLmV2KGEsYyksYykKcmV0dXJu
+IHN9LApldihhLGIpe3ZhciBzLHIKaWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gSC5RSShhLnNsaWNl
+KDApLGIuQygiamQ8MD4iKSkKcz1ILlFJKFtdLGIuQygiamQ8MD4iKSkKZm9yKHI9Si5JVChhKTtyLkYo
+KTspQy5ObS5pKHMsci5nbCgpKQpyZXR1cm4gc30sCkFGKGEsYil7cmV0dXJuIEouekMoUC5QVyhhLCEx
+LGIpKX0sCkhNKGEsYixjKXt2YXIgcz1ILmZ3KGEsYixQLmpCKGIsYyxhLmxlbmd0aCkpCnJldHVybiBz
+fSwKT28oYSl7cmV0dXJuIEguTHcoYSl9LApudShhKXtyZXR1cm4gbmV3IEguVlIoYSxILnY0KGEsITEs
+ITAsITEsITEsITEpKX0sCmwoYSxiLGMpe3ZhciBzPUouSVQoYikKaWYoIXMuRigpKXJldHVybiBhCmlm
+KGMubGVuZ3RoPT09MCl7ZG8gYSs9SC5FaihzLmdsKCkpCndoaWxlKHMuRigpKX1lbHNle2ErPUguRWoo
+cy5nbCgpKQpmb3IoO3MuRigpOylhPWErYytILkVqKHMuZ2woKSl9cmV0dXJuIGF9LApscihhLGIsYyxk
+KXtyZXR1cm4gbmV3IFAubXAoYSxiLGMsZCl9LAp1bygpe3ZhciBzPUguTTAoKQppZihzIT1udWxsKXJl
+dHVybiBQLmhLKHMpCnRocm93IEguYihQLkw0KCInVXJpLmJhc2UnIGlzIG5vdCBzdXBwb3J0ZWQiKSl9
+LAplUChhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbT0iMDEyMzQ1Njc4OUFCQ0RFRiIKaWYoYz09PUMu
+eE0pe3M9JC56NCgpLmIKcz1zLnRlc3QoYil9ZWxzZSBzPSExCmlmKHMpcmV0dXJuIGIKSC5MaChjKS5D
+KCJVay5TIikuYShiKQpyPWMuZ1pFKCkuV0ooYikKZm9yKHM9ci5sZW5ndGgscT0wLHA9IiI7cTxzOysr
+cSl7bz1yW3FdCmlmKG88MTI4KXtuPW8+Pj40CmlmKG4+PTgpcmV0dXJuIEguT0goYSxuKQpuPShhW25d
+JjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKXArPUguTHcobykKZWxzZSBwPWQmJm89PT0zMj9w
+KyIrIjpwKyIlIittW28+Pj40JjE1XSttW28mMTVdfXJldHVybiBwLmNoYXJDb2RlQXQoMCk9PTA/cDpw
+fSwKR3EoYSl7dmFyIHM9TWF0aC5hYnMoYSkscj1hPDA/Ii0iOiIiCmlmKHM+PTEwMDApcmV0dXJuIiIr
+YQppZihzPj0xMDApcmV0dXJuIHIrIjAiK3MKaWYocz49MTApcmV0dXJuIHIrIjAwIitzCnJldHVybiBy
+KyIwMDAiK3N9LApWeChhKXtpZihhPj0xMDApcmV0dXJuIiIrYQppZihhPj0xMClyZXR1cm4iMCIrYQpy
+ZXR1cm4iMDAiK2F9LApoMChhKXtpZihhPj0xMClyZXR1cm4iIithCnJldHVybiIwIithfSwKaGwoYSl7
+aWYodHlwZW9mIGE9PSJudW1iZXIifHxILnJRKGEpfHxhPT1udWxsKXJldHVybiBKLncoYSkKaWYodHlw
+ZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09OLnN0cmluZ2lmeShhKQpyZXR1cm4gUC5vcyhhKX0sCmhW
+KGEpe3JldHVybiBuZXcgUC5DNihhKX0sCnhZKGEsYil7cmV0dXJuIG5ldyBQLkFUKCExLG51bGwsYixh
+KX0sCkwzKGEsYixjKXtyZXR1cm4gbmV3IFAuQVQoITAsYSxiLGMpfSwKTzcoYSxiKXtyZXR1cm4gbmV3
+IFAuYkoobnVsbCxudWxsLCEwLGEsYiwiVmFsdWUgbm90IGluIHJhbmdlIil9LApURShhLGIsYyxkLGUp
+e3JldHVybiBuZXcgUC5iSihiLGMsITAsYSxkLCJJbnZhbGlkIHZhbHVlIil9LAp3QShhLGIsYyxkKXtp
+ZihhPGJ8fGE+Yyl0aHJvdyBILmIoUC5URShhLGIsYyxkLG51bGwpKQpyZXR1cm4gYX0sCmpCKGEsYixj
+KXtpZigwPmF8fGE+Yyl0aHJvdyBILmIoUC5URShhLDAsYywic3RhcnQiLG51bGwpKQppZihiIT1udWxs
+KXtpZihhPmJ8fGI+Yyl0aHJvdyBILmIoUC5URShiLGEsYywiZW5kIixudWxsKSkKcmV0dXJuIGJ9cmV0
+dXJuIGN9LAprMShhLGIpe2lmKGE8MCl0aHJvdyBILmIoUC5URShhLDAsbnVsbCxiLG51bGwpKQpyZXR1
+cm4gYX0sCkNmKGEsYixjLGQsZSl7dmFyIHM9SC5JWihlPT1udWxsP0ouSG0oYik6ZSkKcmV0dXJuIG5l
+dyBQLmVZKHMsITAsYSxjLCJJbmRleCBvdXQgb2YgcmFuZ2UiKX0sCkw0KGEpe3JldHVybiBuZXcgUC51
+YihhKX0sClNZKGEpe3JldHVybiBuZXcgUC5kcyhhKX0sClBWKGEpe3JldHVybiBuZXcgUC5saihhKX0s
+CmE0KGEpe3JldHVybiBuZXcgUC5VVihhKX0sCnJyKGEsYixjKXtyZXR1cm4gbmV3IFAuYUUoYSxiLGMp
+fSwKaEsoYTUpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEy
+LGEzPW51bGwsYTQ9YTUubGVuZ3RoCmlmKGE0Pj01KXtzPSgoQy54Qi5XKGE1LDQpXjU4KSozfEMueEIu
+VyhhNSwwKV4xMDB8Qy54Qi5XKGE1LDEpXjk3fEMueEIuVyhhNSwyKV4xMTZ8Qy54Qi5XKGE1LDMpXjk3
+KT4+PjAKaWYocz09PTApcmV0dXJuIFAuS0QoYTQ8YTQ/Qy54Qi5OaihhNSwwLGE0KTphNSw1LGEzKS5n
+bFIoKQplbHNlIGlmKHM9PT0zMilyZXR1cm4gUC5LRChDLnhCLk5qKGE1LDUsYTQpLDAsYTMpLmdsUigp
+fXI9UC5POCg4LDAsITEsdC5TKQpDLk5tLlk1KHIsMCwwKQpDLk5tLlk1KHIsMSwtMSkKQy5ObS5ZNShy
+LDIsLTEpCkMuTm0uWTUociw3LC0xKQpDLk5tLlk1KHIsMywwKQpDLk5tLlk1KHIsNCwwKQpDLk5tLlk1
+KHIsNSxhNCkKQy5ObS5ZNShyLDYsYTQpCmlmKFAuVUIoYTUsMCxhNCwwLHIpPj0xNClDLk5tLlk1KHIs
+NyxhNCkKcT1yWzFdCmlmKHE+PTApaWYoUC5VQihhNSwwLHEsMjAscik9PT0yMClyWzddPXEKcD1yWzJd
+KzEKbz1yWzNdCm49cls0XQptPXJbNV0KbD1yWzZdCmlmKGw8bSltPWwKaWYobjxwKW49bQplbHNlIGlm
+KG48PXEpbj1xKzEKaWYobzxwKW89bgprPXJbN108MAppZihrKWlmKHA+cSszKXtqPWEzCms9ITF9ZWxz
+ZXtpPW8+MAppZihpJiZvKzE9PT1uKXtqPWEzCms9ITF9ZWxzZXtpZighKG08YTQmJm09PT1uKzImJkMu
+eEIuUWkoYTUsIi4uIixuKSkpaD1tPm4rMiYmQy54Qi5RaShhNSwiLy4uIixtLTMpCmVsc2UgaD0hMApp
+ZihoKXtqPWEzCms9ITF9ZWxzZXtpZihxPT09NClpZihDLnhCLlFpKGE1LCJmaWxlIiwwKSl7aWYocDw9
+MCl7aWYoIUMueEIuUWkoYTUsIi8iLG4pKXtnPSJmaWxlOi8vLyIKcz0zfWVsc2V7Zz0iZmlsZTovLyIK
+cz0yfWE1PWcrQy54Qi5OaihhNSxuLGE0KQpxLT0wCmk9cy0wCm0rPWkKbCs9aQphND1hNS5sZW5ndGgK
+cD03Cm89NwpuPTd9ZWxzZSBpZihuPT09bSl7KytsCmY9bSsxCmE1PUMueEIuaTcoYTUsbixtLCIvIik7
+KythNAptPWZ9aj0iZmlsZSJ9ZWxzZSBpZihDLnhCLlFpKGE1LCJodHRwIiwwKSl7aWYoaSYmbyszPT09
+biYmQy54Qi5RaShhNSwiODAiLG8rMSkpe2wtPTMKZT1uLTMKbS09MwphNT1DLnhCLmk3KGE1LG8sbiwi
+IikKYTQtPTMKbj1lfWo9Imh0dHAifWVsc2Ugaj1hMwplbHNlIGlmKHE9PT01JiZDLnhCLlFpKGE1LCJo
+dHRwcyIsMCkpe2lmKGkmJm8rND09PW4mJkMueEIuUWkoYTUsIjQ0MyIsbysxKSl7bC09NAplPW4tNApt
+LT00CmE1PUMueEIuaTcoYTUsbyxuLCIiKQphNC09MwpuPWV9aj0iaHR0cHMifWVsc2Ugaj1hMwprPSEw
+fX19ZWxzZSBqPWEzCmlmKGspe2lmKGE0PGE1Lmxlbmd0aCl7YTU9Qy54Qi5OaihhNSwwLGE0KQpxLT0w
+CnAtPTAKby09MApuLT0wCm0tPTAKbC09MH1yZXR1cm4gbmV3IFAuVWYoYTUscSxwLG8sbixtLGwsail9
+aWYoaj09bnVsbClpZihxPjApaj1QLlBpKGE1LDAscSkKZWxzZXtpZihxPT09MClQLlIzKGE1LDAsIklu
+dmFsaWQgZW1wdHkgc2NoZW1lIikKaj0iIn1pZihwPjApe2Q9cSszCmM9ZDxwP1AuelIoYTUsZCxwLTEp
+OiIiCmI9UC5PZShhNSxwLG8sITEpCmk9bysxCmlmKGk8bil7YT1ILkhwKEMueEIuTmooYTUsaSxuKSxh
+MykKYTA9UC53QihhPT1udWxsP0gudihQLnJyKCJJbnZhbGlkIHBvcnQiLGE1LGkpKTphLGopfWVsc2Ug
+YTA9YTN9ZWxzZXthMD1hMwpiPWEwCmM9IiJ9YTE9UC5rYShhNSxuLG0sYTMsaixiIT1udWxsKQphMj1t
+PGw/UC5sZShhNSxtKzEsbCxhMyk6YTMKcmV0dXJuIG5ldyBQLkRuKGosYyxiLGEwLGExLGEyLGw8YTQ/
+UC50RyhhNSxsKzEsYTQpOmEzKX0sCk10KGEpe0gubihhKQpyZXR1cm4gUC5rdShhLDAsYS5sZW5ndGgs
+Qy54TSwhMSl9LApXWChhKXt2YXIgcz10Lk4KcmV0dXJuIEMuTm0uTjAoSC5RSShhLnNwbGl0KCImIiks
+dC5zKSxQLkZsKHMscyksbmV3IFAubjEoQy54TSksdC5FKX0sCkhoKGEsYixjKXt2YXIgcyxyLHEscCxv
+LG4sbT0iSVB2NCBhZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0cyIsbD0iZWFjaCBw
+YXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjI1NSIsaz1uZXcgUC5jUyhhKSxqPW5ldyBVaW50OEFy
+cmF5KDQpCmZvcihzPWIscj1zLHE9MDtzPGM7KytzKXtwPUMueEIuTyhhLHMpCmlmKHAhPT00Nil7aWYo
+KHBeNDgpPjkpay4kMigiaW52YWxpZCBjaGFyYWN0ZXIiLHMpfWVsc2V7aWYocT09PTMpay4kMihtLHMp
+Cm89UC5RQShDLnhCLk5qKGEscixzKSxudWxsKQppZihvPjI1NSlrLiQyKGwscikKbj1xKzEKaWYocT49
+NClyZXR1cm4gSC5PSChqLHEpCmpbcV09bwpyPXMrMQpxPW59fWlmKHEhPT0zKWsuJDIobSxjKQpvPVAu
+UUEoQy54Qi5OaihhLHIsYyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCmlmKHE+PTQpcmV0dXJuIEgu
+T0goaixxKQpqW3FdPW8KcmV0dXJuIGp9LAplZyhhLGIsYTApe3ZhciBzLHIscSxwLG8sbixtLGwsayxq
+LGksaCxnLGYsZSxkPW5ldyBQLlZDKGEpLGM9bmV3IFAuSlQoZCxhKQppZihhLmxlbmd0aDwyKWQuJDEo
+ImFkZHJlc3MgaXMgdG9vIHNob3J0IikKcz1ILlFJKFtdLHQudCkKZm9yKHI9YixxPXIscD0hMSxvPSEx
+O3I8YTA7KytyKXtuPUMueEIuTyhhLHIpCmlmKG49PT01OCl7aWYocj09PWIpeysrcgppZihDLnhCLk8o
+YSxyKSE9PTU4KWQuJDIoImludmFsaWQgc3RhcnQgY29sb24uIixyKQpxPXJ9aWYocj09PXEpe2lmKHAp
+ZC4kMigib25seSBvbmUgd2lsZGNhcmQgYDo6YCBpcyBhbGxvd2VkIixyKQpDLk5tLmkocywtMSkKcD0h
+MH1lbHNlIEMuTm0uaShzLGMuJDIocSxyKSkKcT1yKzF9ZWxzZSBpZihuPT09NDYpbz0hMH1pZihzLmxl
+bmd0aD09PTApZC4kMSgidG9vIGZldyBwYXJ0cyIpCm09cT09PWEwCmw9Qy5ObS5ncloocykKaWYobSYm
+bCE9PS0xKWQuJDIoImV4cGVjdGVkIGEgcGFydCBhZnRlciBsYXN0IGA6YCIsYTApCmlmKCFtKWlmKCFv
+KUMuTm0uaShzLGMuJDIocSxhMCkpCmVsc2V7az1QLkhoKGEscSxhMCkKQy5ObS5pKHMsKGtbMF08PDh8
+a1sxXSk+Pj4wKQpDLk5tLmkocywoa1syXTw8OHxrWzNdKT4+PjApfWlmKHApe2lmKHMubGVuZ3RoPjcp
+ZC4kMSgiYW4gYWRkcmVzcyB3aXRoIGEgd2lsZGNhcmQgbXVzdCBoYXZlIGxlc3MgdGhhbiA3IHBhcnRz
+Iil9ZWxzZSBpZihzLmxlbmd0aCE9PTgpZC4kMSgiYW4gYWRkcmVzcyB3aXRob3V0IGEgd2lsZGNhcmQg
+bXVzdCBjb250YWluIGV4YWN0bHkgOCBwYXJ0cyIpCmo9bmV3IFVpbnQ4QXJyYXkoMTYpCmZvcihsPXMu
+bGVuZ3RoLGk9OS1sLHI9MCxoPTA7cjxsOysrcil7Zz1zW3JdCmlmKGc9PT0tMSlmb3IoZj0wO2Y8aTsr
+K2Ype2lmKGg8MHx8aD49MTYpcmV0dXJuIEguT0goaixoKQpqW2hdPTAKZT1oKzEKaWYoZT49MTYpcmV0
+dXJuIEguT0goaixlKQpqW2VdPTAKaCs9Mn1lbHNle2U9Qy5qbi53RyhnLDgpCmlmKGg8MHx8aD49MTYp
+cmV0dXJuIEguT0goaixoKQpqW2hdPWUKZT1oKzEKaWYoZT49MTYpcmV0dXJuIEguT0goaixlKQpqW2Vd
+PWcmMjU1CmgrPTJ9fXJldHVybiBqfSwKS0woYSxiLGMsZCxlLGYsZyl7dmFyIHMscixxLHAsbyxuCmY9
+Zj09bnVsbD8iIjpQLlBpKGYsMCxmLmxlbmd0aCkKZz1QLnpSKGcsMCxnPT1udWxsPzA6Zy5sZW5ndGgp
+CmE9UC5PZShhLDAsYT09bnVsbD8wOmEubGVuZ3RoLCExKQpzPVAubGUobnVsbCwwLDAsZSkKcj1QLnRH
+KG51bGwsMCwwKQpkPVAud0IoZCxmKQpxPWY9PT0iZmlsZSIKaWYoYT09bnVsbClwPWcubGVuZ3RoIT09
+MHx8ZCE9bnVsbHx8cQplbHNlIHA9ITEKaWYocClhPSIiCnA9YT09bnVsbApvPSFwCmI9UC5rYShiLDAs
+Yj09bnVsbD8wOmIubGVuZ3RoLGMsZixvKQpuPWYubGVuZ3RoPT09MAppZihuJiZwJiYhQy54Qi5uKGIs
+Ii8iKSliPVAud0YoYiwhbnx8bykKZWxzZSBiPVAueGUoYikKcmV0dXJuIG5ldyBQLkRuKGYsZyxwJiZD
+LnhCLm4oYiwiLy8iKT8iIjphLGQsYixzLHIpfSwKd0soYSl7aWYoYT09PSJodHRwIilyZXR1cm4gODAK
+aWYoYT09PSJodHRwcyIpcmV0dXJuIDQ0MwpyZXR1cm4gMH0sCk5SKGEsYil7dmFyIHMscixxLHAsbyxu
+CmZvcihzPWEubGVuZ3RoLHI9MDtyPHM7KytyKXtxPUMueEIuVyhhLHIpCnA9Qy54Qi5XKGIscikKbz1x
+XnAKaWYobyE9PTApe2lmKG89PT0zMil7bj1wfG8KaWYoOTc8PW4mJm48PTEyMiljb250aW51ZX1yZXR1
+cm4hMX19cmV0dXJuITB9LApSMyhhLGIsYyl7dGhyb3cgSC5iKFAucnIoYyxhLGIpKX0sClhkKGEsYixj
+LGQpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaD1udWxsLGc9Yi5sZW5ndGgKaWYoZyE9PTApe3E9
+MAp3aGlsZSghMCl7aWYoIShxPGcpKXtzPSIiCnI9MApicmVha31pZihDLnhCLlcoYixxKT09PTY0KXtz
+PUMueEIuTmooYiwwLHEpCnI9cSsxCmJyZWFrfSsrcX1pZihyPGcmJkMueEIuVyhiLHIpPT09OTEpe2Zv
+cihwPXIsbz0tMTtwPGc7KytwKXtuPUMueEIuVyhiLHApCmlmKG49PT0zNyYmbzwwKXttPUMueEIuUWko
+YiwiMjUiLHArMSk/cCsyOnAKbz1wCnA9bX1lbHNlIGlmKG49PT05MylicmVha31pZihwPT09Zyl0aHJv
+dyBILmIoUC5ycigiSW52YWxpZCBJUHY2IGhvc3QgZW50cnkuIixiLHIpKQpsPW88MD9wOm8KUC5lZyhi
+LHIrMSxsKTsrK3AKaWYocCE9PWcmJkMueEIuVyhiLHApIT09NTgpdGhyb3cgSC5iKFAucnIoIkludmFs
+aWQgZW5kIG9mIGF1dGhvcml0eSIsYixwKSl9ZWxzZSBwPXIKd2hpbGUoITApe2lmKCEocDxnKSl7az1o
+CmJyZWFrfWlmKEMueEIuVyhiLHApPT09NTgpe2o9Qy54Qi55bihiLHArMSkKaz1qLmxlbmd0aCE9PTA/
+UC5RQShqLGgpOmgKYnJlYWt9KytwfWk9Qy54Qi5OaihiLHIscCl9ZWxzZXtrPWgKaT1rCnM9IiJ9cmV0
+dXJuIFAuS0woaSxoLEguUUkoYy5zcGxpdCgiLyIpLHQucyksayxkLGEscyl9LAprRShhLGIpe3ZhciBz
+LHIscSxwLG8KZm9yKHM9YS5sZW5ndGgscj0wO3I8czsrK3Ipe3E9YVtyXQpwPUouVTYocSkKbz1wLmdB
+KHEpCmlmKDA+bylILnYoUC5URSgwLDAscC5nQShxKSxudWxsLG51bGwpKQppZihILlNRKHEsIi8iLDAp
+KXtzPVAuTDQoIklsbGVnYWwgcGF0aCBjaGFyYWN0ZXIgIitILkVqKHEpKQp0aHJvdyBILmIocyl9fX0s
+CkhOKGEsYixjKXt2YXIgcyxyLHEscApmb3Iocz1ILnFDKGEsYyxudWxsLEgudDYoYSkuYykscj1zLiR0
+aSxzPW5ldyBILmE3KHMscy5nQShzKSxyLkMoImE3PGFMLkU+IikpLHI9ci5DKCJhTC5FIik7cy5GKCk7
+KXtxPXIuYShzLmQpCnA9UC5udSgnWyIqLzo8Pj9cXFxcfF0nKQppZihILlNRKHEscCwwKSl7cz1QLkw0
+KCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoOiAiK3EpCnRocm93IEguYihzKX19fSwKcmcoYSxiKXt2
+YXIgcwppZighKDY1PD1hJiZhPD05MCkpcz05Nzw9YSYmYTw9MTIyCmVsc2Ugcz0hMAppZihzKXJldHVy
+bgpzPVAuTDQoIklsbGVnYWwgZHJpdmUgbGV0dGVyICIrUC5PbyhhKSkKdGhyb3cgSC5iKHMpfSwKd0Io
+YSxiKXtpZihhIT1udWxsJiZhPT09UC53SyhiKSlyZXR1cm4gbnVsbApyZXR1cm4gYX0sCk9lKGEsYixj
+LGQpe3ZhciBzLHIscSxwLG8sbgppZihhPT1udWxsKXJldHVybiBudWxsCmlmKGI9PT1jKXJldHVybiIi
+CmlmKEMueEIuTyhhLGIpPT09OTEpe3M9Yy0xCmlmKEMueEIuTyhhLHMpIT09OTMpUC5SMyhhLGIsIk1p
+c3NpbmcgZW5kIGBdYCB0byBtYXRjaCBgW2AgaW4gaG9zdCIpCnI9YisxCnE9UC50byhhLHIscykKaWYo
+cTxzKXtwPXErMQpvPVAuT0EoYSxDLnhCLlFpKGEsIjI1IixwKT9xKzM6cCxzLCIlMjUiKX1lbHNlIG89
+IiIKUC5lZyhhLHIscSkKcmV0dXJuIEMueEIuTmooYSxiLHEpLnRvTG93ZXJDYXNlKCkrbysiXSJ9Zm9y
+KG49YjtuPGM7KytuKWlmKEMueEIuTyhhLG4pPT09NTgpe3E9Qy54Qi5YVShhLCIlIixiKQpxPXE+PWIm
+JnE8Yz9xOmMKaWYocTxjKXtwPXErMQpvPVAuT0EoYSxDLnhCLlFpKGEsIjI1IixwKT9xKzM6cCxjLCIl
+MjUiKX1lbHNlIG89IiIKUC5lZyhhLGIscSkKcmV0dXJuIlsiK0MueEIuTmooYSxiLHEpK28rIl0ifXJl
+dHVybiBQLk9MKGEsYixjKX0sCnRvKGEsYixjKXt2YXIgcz1DLnhCLlhVKGEsIiUiLGIpCnJldHVybiBz
+Pj1iJiZzPGM/czpjfSwKT0EoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT1kIT09IiI/
+bmV3IFAuTShkKTpudWxsCmZvcihzPWIscj1zLHE9ITA7czxjOyl7cD1DLnhCLk8oYSxzKQppZihwPT09
+Mzcpe289UC5ydihhLHMsITApCm49bz09bnVsbAppZihuJiZxKXtzKz0zCmNvbnRpbnVlfWlmKGk9PW51
+bGwpaT1uZXcgUC5NKCIiKQptPWkuYSs9Qy54Qi5OaihhLHIscykKaWYobilvPUMueEIuTmooYSxzLHMr
+MykKZWxzZSBpZihvPT09IiUiKVAuUjMoYSxzLCJab25lSUQgc2hvdWxkIG5vdCBjb250YWluICUgYW55
+bW9yZSIpCmkuYT1tK28Kcys9MwpyPXMKcT0hMH1lbHNle2lmKHA8MTI3KXtuPXA+Pj40CmlmKG4+PTgp
+cmV0dXJuIEguT0goQy5GMyxuKQpuPShDLkYzW25dJjE8PChwJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihu
+KXtpZihxJiY2NTw9cCYmOTA+PXApe2lmKGk9PW51bGwpaT1uZXcgUC5NKCIiKQppZihyPHMpe2kuYSs9
+Qy54Qi5OaihhLHIscykKcj1zfXE9ITF9KytzfWVsc2V7aWYoKHAmNjQ1MTIpPT09NTUyOTYmJnMrMTxj
+KXtsPUMueEIuTyhhLHMrMSkKaWYoKGwmNjQ1MTIpPT09NTYzMjApe3A9KHAmMTAyMyk8PDEwfGwmMTAy
+M3w2NTUzNgprPTJ9ZWxzZSBrPTF9ZWxzZSBrPTEKaj1DLnhCLk5qKGEscixzKQppZihpPT1udWxsKXtp
+PW5ldyBQLk0oIiIpCm49aX1lbHNlIG49aQpuLmErPWoKbi5hKz1QLnpYKHApCnMrPWsKcj1zfX19aWYo
+aT09bnVsbClyZXR1cm4gQy54Qi5OaihhLGIsYykKaWYocjxjKWkuYSs9Qy54Qi5OaihhLHIsYykKbj1p
+LmEKcmV0dXJuIG4uY2hhckNvZGVBdCgwKT09MD9uOm59LApPTChhLGIsYyl7dmFyIHMscixxLHAsbyxu
+LG0sbCxrLGosaQpmb3Iocz1iLHI9cyxxPW51bGwscD0hMDtzPGM7KXtvPUMueEIuTyhhLHMpCmlmKG89
+PT0zNyl7bj1QLnJ2KGEscywhMCkKbT1uPT1udWxsCmlmKG0mJnApe3MrPTMKY29udGludWV9aWYocT09
+bnVsbClxPW5ldyBQLk0oIiIpCmw9Qy54Qi5OaihhLHIscykKaz1xLmErPSFwP2wudG9Mb3dlckNhc2Uo
+KTpsCmlmKG0pe249Qy54Qi5OaihhLHMscyszKQpqPTN9ZWxzZSBpZihuPT09IiUiKXtuPSIlMjUiCmo9
+MX1lbHNlIGo9MwpxLmE9aytuCnMrPWoKcj1zCnA9ITB9ZWxzZXtpZihvPDEyNyl7bT1vPj4+NAppZiht
+Pj04KXJldHVybiBILk9IKEMuZWEsbSkKbT0oQy5lYVttXSYxPDwobyYxNSkpIT09MH1lbHNlIG09ITEK
+aWYobSl7aWYocCYmNjU8PW8mJjkwPj1vKXtpZihxPT1udWxsKXE9bmV3IFAuTSgiIikKaWYocjxzKXtx
+LmErPUMueEIuTmooYSxyLHMpCnI9c31wPSExfSsrc31lbHNle2lmKG88PTkzKXttPW8+Pj40CmlmKG0+
+PTgpcmV0dXJuIEguT0goQy5hayxtKQptPShDLmFrW21dJjE8PChvJjE1KSkhPT0wfWVsc2UgbT0hMQpp
+ZihtKVAuUjMoYSxzLCJJbnZhbGlkIGNoYXJhY3RlciIpCmVsc2V7aWYoKG8mNjQ1MTIpPT09NTUyOTYm
+JnMrMTxjKXtpPUMueEIuTyhhLHMrMSkKaWYoKGkmNjQ1MTIpPT09NTYzMjApe289KG8mMTAyMyk8PDEw
+fGkmMTAyM3w2NTUzNgpqPTJ9ZWxzZSBqPTF9ZWxzZSBqPTEKbD1DLnhCLk5qKGEscixzKQppZighcCls
+PWwudG9Mb3dlckNhc2UoKQppZihxPT1udWxsKXtxPW5ldyBQLk0oIiIpCm09cX1lbHNlIG09cQptLmEr
+PWwKbS5hKz1QLnpYKG8pCnMrPWoKcj1zfX19fWlmKHE9PW51bGwpcmV0dXJuIEMueEIuTmooYSxiLGMp
+CmlmKHI8Yyl7bD1DLnhCLk5qKGEscixjKQpxLmErPSFwP2wudG9Mb3dlckNhc2UoKTpsfW09cS5hCnJl
+dHVybiBtLmNoYXJDb2RlQXQoMCk9PTA/bTptfSwKUGkoYSxiLGMpe3ZhciBzLHIscSxwCmlmKGI9PT1j
+KXJldHVybiIiCmlmKCFQLkV0KEMueEIuVyhhLGIpKSlQLlIzKGEsYiwiU2NoZW1lIG5vdCBzdGFydGlu
+ZyB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyIikKZm9yKHM9YixyPSExO3M8YzsrK3Mpe3E9Qy54Qi5X
+KGEscykKaWYocTwxMjgpe3A9cT4+PjQKaWYocD49OClyZXR1cm4gSC5PSChDLm1LLHApCnA9KEMubUtb
+cF0mMTw8KHEmMTUpKSE9PTB9ZWxzZSBwPSExCmlmKCFwKVAuUjMoYSxzLCJJbGxlZ2FsIHNjaGVtZSBj
+aGFyYWN0ZXIiKQppZig2NTw9cSYmcTw9OTApcj0hMH1hPUMueEIuTmooYSxiLGMpCnJldHVybiBQLllh
+KHI/YS50b0xvd2VyQ2FzZSgpOmEpfSwKWWEoYSl7aWYoYT09PSJodHRwIilyZXR1cm4iaHR0cCIKaWYo
+YT09PSJmaWxlIilyZXR1cm4iZmlsZSIKaWYoYT09PSJodHRwcyIpcmV0dXJuImh0dHBzIgppZihhPT09
+InBhY2thZ2UiKXJldHVybiJwYWNrYWdlIgpyZXR1cm4gYX0sCnpSKGEsYixjKXtpZihhPT1udWxsKXJl
+dHVybiIiCnJldHVybiBQLlBJKGEsYixjLEMudG8sITEpfSwKa2EoYSxiLGMsZCxlLGYpe3ZhciBzLHIs
+cT1lPT09ImZpbGUiLHA9cXx8ZgppZihhPT1udWxsKXtpZihkPT1udWxsKXJldHVybiBxPyIvIjoiIgpz
+PUgudDYoZCkKcj1uZXcgSC5sSihkLHMuQygicVUoMSkiKS5hKG5ldyBQLlJaKCkpLHMuQygibEo8MSxx
+VT4iKSkuaygwLCIvIil9ZWxzZSBpZihkIT1udWxsKXRocm93IEguYihQLnhZKCJCb3RoIHBhdGggYW5k
+IHBhdGhTZWdtZW50cyBzcGVjaWZpZWQiLG51bGwpKQplbHNlIHI9UC5QSShhLGIsYyxDLldkLCEwKQpp
+ZihyLmxlbmd0aD09PTApe2lmKHEpcmV0dXJuIi8ifWVsc2UgaWYocCYmIUMueEIubihyLCIvIikpcj0i
+LyIrcgpyZXR1cm4gUC5KcihyLGUsZil9LApKcihhLGIsYyl7dmFyIHM9Yi5sZW5ndGg9PT0wCmlmKHMm
+JiFjJiYhQy54Qi5uKGEsIi8iKSlyZXR1cm4gUC53RihhLCFzfHxjKQpyZXR1cm4gUC54ZShhKX0sCmxl
+KGEsYixjLGQpe3ZhciBzLHI9e30KaWYoYSE9bnVsbCl7aWYoZCE9bnVsbCl0aHJvdyBILmIoUC54WSgi
+Qm90aCBxdWVyeSBhbmQgcXVlcnlQYXJhbWV0ZXJzIHNwZWNpZmllZCIsbnVsbCkpCnJldHVybiBQLlBJ
+KGEsYixjLEMuVkMsITApfWlmKGQ9PW51bGwpcmV0dXJuIG51bGwKcz1uZXcgUC5NKCIiKQpyLmE9IiIK
+ZC5LKDAsbmV3IFAueTUobmV3IFAuTUUocixzKSkpCnI9cy5hCnJldHVybiByLmNoYXJDb2RlQXQoMCk9
+PTA/cjpyfSwKdEcoYSxiLGMpe2lmKGE9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIFAuUEkoYSxiLGMs
+Qy5WQywhMCl9LApydihhLGIsYyl7dmFyIHMscixxLHAsbyxuPWIrMgppZihuPj1hLmxlbmd0aClyZXR1
+cm4iJSIKcz1DLnhCLk8oYSxiKzEpCnI9Qy54Qi5PKGEsbikKcT1ILm9vKHMpCnA9SC5vbyhyKQppZihx
+PDB8fHA8MClyZXR1cm4iJSIKbz1xKjE2K3AKaWYobzwxMjcpe249Qy5qbi53RyhvLDQpCmlmKG4+PTgp
+cmV0dXJuIEguT0goQy5GMyxuKQpuPShDLkYzW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihu
+KXJldHVybiBILkx3KGMmJjY1PD1vJiY5MD49bz8ob3wzMik+Pj4wOm8pCmlmKHM+PTk3fHxyPj05Nyly
+ZXR1cm4gQy54Qi5OaihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybiBudWxsfSwKelgoYSl7dmFy
+IHMscixxLHAsbyxuLG0sbCxrPSIwMTIzNDU2Nzg5QUJDREVGIgppZihhPDEyOCl7cz1uZXcgVWludDhB
+cnJheSgzKQpzWzBdPTM3CnNbMV09Qy54Qi5XKGssYT4+PjQpCnNbMl09Qy54Qi5XKGssYSYxNSl9ZWxz
+ZXtpZihhPjIwNDcpaWYoYT42NTUzNSl7cj0yNDAKcT00fWVsc2V7cj0yMjQKcT0zfWVsc2V7cj0xOTIK
+cT0yfXA9MypxCnM9bmV3IFVpbnQ4QXJyYXkocCkKZm9yKG89MDstLXEscT49MDtyPTEyOCl7bj1DLmpu
+LmJmKGEsNipxKSY2M3xyCmlmKG8+PXApcmV0dXJuIEguT0gocyxvKQpzW29dPTM3Cm09bysxCmw9Qy54
+Qi5XKGssbj4+PjQpCmlmKG0+PXApcmV0dXJuIEguT0gocyxtKQpzW21dPWwKbD1vKzIKbT1DLnhCLlco
+ayxuJjE1KQppZihsPj1wKXJldHVybiBILk9IKHMsbCkKc1tsXT1tCm8rPTN9fXJldHVybiBQLkhNKHMs
+MCxudWxsKX0sClBJKGEsYixjLGQsZSl7dmFyIHM9UC5VbChhLGIsYyxkLGUpCnJldHVybiBzPT1udWxs
+P0MueEIuTmooYSxiLGMpOnN9LApVbChhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqPW51
+bGwKZm9yKHM9IWUscj1iLHE9cixwPWo7cjxjOyl7bz1DLnhCLk8oYSxyKQppZihvPDEyNyl7bj1vPj4+
+NAppZihuPj04KXJldHVybiBILk9IKGQsbikKbj0oZFtuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEK
+aWYobikrK3IKZWxzZXtpZihvPT09Mzcpe209UC5ydihhLHIsITEpCmlmKG09PW51bGwpe3IrPTMKY29u
+dGludWV9aWYoIiUiPT09bSl7bT0iJTI1IgpsPTF9ZWxzZSBsPTN9ZWxzZXtpZihzKWlmKG88PTkzKXtu
+PW8+Pj40CmlmKG4+PTgpcmV0dXJuIEguT0goQy5hayxuKQpuPShDLmFrW25dJjE8PChvJjE1KSkhPT0w
+fWVsc2Ugbj0hMQplbHNlIG49ITEKaWYobil7UC5SMyhhLHIsIkludmFsaWQgY2hhcmFjdGVyIikKbD1q
+Cm09bH1lbHNle2lmKChvJjY0NTEyKT09PTU1Mjk2KXtuPXIrMQppZihuPGMpe2s9Qy54Qi5PKGEsbikK
+aWYoKGsmNjQ1MTIpPT09NTYzMjApe289KG8mMTAyMyk8PDEwfGsmMTAyM3w2NTUzNgpsPTJ9ZWxzZSBs
+PTF9ZWxzZSBsPTF9ZWxzZSBsPTEKbT1QLnpYKG8pfX1pZihwPT1udWxsKXtwPW5ldyBQLk0oIiIpCm49
+cH1lbHNlIG49cApuLmErPUMueEIuTmooYSxxLHIpCm4uYSs9SC5FaihtKQppZih0eXBlb2YgbCE9PSJu
+dW1iZXIiKXJldHVybiBILnBZKGwpCnIrPWwKcT1yfX1pZihwPT1udWxsKXJldHVybiBqCmlmKHE8Yylw
+LmErPUMueEIuTmooYSxxLGMpCnM9cC5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKeUIo
+YSl7aWYoQy54Qi5uKGEsIi4iKSlyZXR1cm4hMApyZXR1cm4gQy54Qi5PWShhLCIvLiIpIT09LTF9LAp4
+ZShhKXt2YXIgcyxyLHEscCxvLG4sbQppZighUC55QihhKSlyZXR1cm4gYQpzPUguUUkoW10sdC5zKQpm
+b3Iocj1hLnNwbGl0KCIvIikscT1yLmxlbmd0aCxwPSExLG89MDtvPHE7KytvKXtuPXJbb10KaWYoSi5S
+TShuLCIuLiIpKXttPXMubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1tKXJldHVybiBILk9IKHMsLTEpCnMu
+cG9wKCkKaWYocy5sZW5ndGg9PT0wKUMuTm0uaShzLCIiKX1wPSEwfWVsc2UgaWYoIi4iPT09bilwPSEw
+CmVsc2V7Qy5ObS5pKHMsbikKcD0hMX19aWYocClDLk5tLmkocywiIikKcmV0dXJuIEMuTm0uayhzLCIv
+Iil9LAp3RihhLGIpe3ZhciBzLHIscSxwLG8sbgppZighUC55QihhKSlyZXR1cm4hYj9QLkMxKGEpOmEK
+cz1ILlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5ndGgscD0hMSxvPTA7bzxxOysr
+byl7bj1yW29dCmlmKCIuLiI9PT1uKWlmKHMubGVuZ3RoIT09MCYmQy5ObS5ncloocykhPT0iLi4iKXtp
+ZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnA9ITB9ZWxzZXtDLk5tLmkocywi
+Li4iKQpwPSExfWVsc2UgaWYoIi4iPT09bilwPSEwCmVsc2V7Qy5ObS5pKHMsbikKcD0hMX19cj1zLmxl
+bmd0aAppZihyIT09MClpZihyPT09MSl7aWYoMD49cilyZXR1cm4gSC5PSChzLDApCnI9c1swXS5sZW5n
+dGg9PT0wfWVsc2Ugcj0hMQplbHNlIHI9ITAKaWYocilyZXR1cm4iLi8iCmlmKHB8fEMuTm0uZ3JaKHMp
+PT09Ii4uIilDLk5tLmkocywiIikKaWYoIWIpe2lmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsMCkK
+Qy5ObS5ZNShzLDAsUC5DMShzWzBdKSl9cmV0dXJuIEMuTm0uayhzLCIvIil9LApDMShhKXt2YXIgcyxy
+LHEscD1hLmxlbmd0aAppZihwPj0yJiZQLkV0KEMueEIuVyhhLDApKSlmb3Iocz0xO3M8cDsrK3Mpe3I9
+Qy54Qi5XKGEscykKaWYocj09PTU4KXJldHVybiBDLnhCLk5qKGEsMCxzKSsiJTNBIitDLnhCLnluKGEs
+cysxKQppZihyPD0xMjcpe3E9cj4+PjQKaWYocT49OClyZXR1cm4gSC5PSChDLm1LLHEpCnE9KEMubUtb
+cV0mMTw8KHImMTUpKT09PTB9ZWxzZSBxPSEwCmlmKHEpYnJlYWt9cmV0dXJuIGF9LAp1aihhLGIpe2lm
+KGEuaEIoInBhY2thZ2UiKSYmYS5jPT1udWxsKXJldHVybiBQLmZGKGIsMCxiLmxlbmd0aCkKcmV0dXJu
+LTF9LAptbihhKXt2YXIgcyxyLHEscD1hLmdGaigpLG89cC5sZW5ndGgKaWYobz4wJiZKLkhtKHBbMF0p
+PT09MiYmSi5hNihwWzBdLDEpPT09NTgpe2lmKDA+PW8pcmV0dXJuIEguT0gocCwwKQpQLnJnKEouYTYo
+cFswXSwwKSwhMSkKUC5ITihwLCExLDEpCnM9ITB9ZWxzZXtQLkhOKHAsITEsMCkKcz0hMX1yPWEuZ3RU
+KCkmJiFzPyIiKyJcXCI6IiIKaWYoYS5nY2ooKSl7cT1hLmdKZihhKQppZihxLmxlbmd0aCE9PTApcj1y
+KyJcXCIrcSsiXFwifXI9UC5sKHIscCwiXFwiKQpvPXMmJm89PT0xP3IrIlxcIjpyCnJldHVybiBvLmNo
+YXJDb2RlQXQoMCk9PTA/bzpvfSwKSWgoYSxiKXt2YXIgcyxyLHEKZm9yKHM9MCxyPTA7cjwyOysrcil7
+cT1DLnhCLlcoYSxiK3IpCmlmKDQ4PD1xJiZxPD01NylzPXMqMTYrcS00OAplbHNle3F8PTMyCmlmKDk3
+PD1xJiZxPD0xMDIpcz1zKjE2K3EtODcKZWxzZSB0aHJvdyBILmIoUC54WSgiSW52YWxpZCBVUkwgZW5j
+b2RpbmciLG51bGwpKX19cmV0dXJuIHN9LAprdShhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG89Ygp3aGls
+ZSghMCl7aWYoIShvPGMpKXtzPSEwCmJyZWFrfXI9Qy54Qi5XKGEsbykKaWYocjw9MTI3KWlmKHIhPT0z
+NylxPWUmJnI9PT00MwplbHNlIHE9ITAKZWxzZSBxPSEwCmlmKHEpe3M9ITEKYnJlYWt9KytvfWlmKHMp
+e2lmKEMueE0hPT1kKXE9ITEKZWxzZSBxPSEwCmlmKHEpcmV0dXJuIEMueEIuTmooYSxiLGMpCmVsc2Ug
+cD1uZXcgSC5xaihDLnhCLk5qKGEsYixjKSl9ZWxzZXtwPUguUUkoW10sdC50KQpmb3IocT1hLmxlbmd0
+aCxvPWI7bzxjOysrbyl7cj1DLnhCLlcoYSxvKQppZihyPjEyNyl0aHJvdyBILmIoUC54WSgiSWxsZWdh
+bCBwZXJjZW50IGVuY29kaW5nIGluIFVSSSIsbnVsbCkpCmlmKHI9PT0zNyl7aWYobyszPnEpdGhyb3cg
+SC5iKFAueFkoIlRydW5jYXRlZCBVUkkiLG51bGwpKQpDLk5tLmkocCxQLkloKGEsbysxKSkKbys9Mn1l
+bHNlIGlmKGUmJnI9PT00MylDLk5tLmkocCwzMikKZWxzZSBDLk5tLmkocCxyKX19dC5MLmEocCkKcmV0
+dXJuIEMub0UuV0oocCl9LApFdChhKXt2YXIgcz1hfDMyCnJldHVybiA5Nzw9cyYmczw9MTIyfSwKS0Qo
+YSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsaz0iSW52YWxpZCBNSU1FIHR5cGUiLGo9SC5RSShbYi0x
+XSx0LnQpCmZvcihzPWEubGVuZ3RoLHI9YixxPS0xLHA9bnVsbDtyPHM7KytyKXtwPUMueEIuVyhhLHIp
+CmlmKHA9PT00NHx8cD09PTU5KWJyZWFrCmlmKHA9PT00Nyl7aWYocTwwKXtxPXIKY29udGludWV9dGhy
+b3cgSC5iKFAucnIoayxhLHIpKX19aWYocTwwJiZyPmIpdGhyb3cgSC5iKFAucnIoayxhLHIpKQpmb3Io
+O3AhPT00NDspe0MuTm0uaShqLHIpOysrcgpmb3Iobz0tMTtyPHM7KytyKXtwPUMueEIuVyhhLHIpCmlm
+KHA9PT02MSl7aWYobzwwKW89cn1lbHNlIGlmKHA9PT01OXx8cD09PTQ0KWJyZWFrfWlmKG8+PTApQy5O
+bS5pKGosbykKZWxzZXtuPUMuTm0uZ3JaKGopCmlmKHAhPT00NHx8ciE9PW4rN3x8IUMueEIuUWkoYSwi
+YmFzZTY0IixuKzEpKXRocm93IEguYihQLnJyKCJFeHBlY3RpbmcgJz0nIixhLHIpKQpicmVha319Qy5O
+bS5pKGoscikKbT1yKzEKaWYoKGoubGVuZ3RoJjEpPT09MSlhPUMuaDkueXIoYSxtLHMpCmVsc2V7bD1Q
+LlVsKGEsbSxzLEMuVkMsITApCmlmKGwhPW51bGwpYT1DLnhCLmk3KGEsbSxzLGwpfXJldHVybiBuZXcg
+UC5QRShhLGosYyl9LApLTigpe3ZhciBzLHIscSxwLG8sbixtPSIwMTIzNDU2Nzg5QUJDREVGR0hJSktM
+TU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei0uX34hJCYnKCkqKyw7PSIsbD0i
+LiIsaz0iOiIsaj0iLyIsaT0iPyIsaD0iIyIsZz1ILlFJKG5ldyBBcnJheSgyMiksdC5nTikKZm9yKHM9
+MDtzPDIyOysrcylnW3NdPW5ldyBVaW50OEFycmF5KDk2KQpyPW5ldyBQLnlJKGcpCnE9bmV3IFAuYzYo
+KQpwPW5ldyBQLnFkKCkKbz10LmdjCm49by5hKHIuJDIoMCwyMjUpKQpxLiQzKG4sbSwxKQpxLiQzKG4s
+bCwxNCkKcS4kMyhuLGssMzQpCnEuJDMobixqLDMpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpu
+PW8uYShyLiQyKDE0LDIyNSkpCnEuJDMobixtLDEpCnEuJDMobixsLDE1KQpxLiQzKG4saywzNCkKcS4k
+MyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNSwyMjUpKQpx
+LiQzKG4sbSwxKQpxLiQzKG4sIiUiLDIyNSkKcS4kMyhuLGssMzQpCnEuJDMobixqLDkpCnEuJDMobixp
+LDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEsMjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhuLGss
+MzQpCnEuJDMobixqLDEwKQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigyLDIz
+NSkpCnEuJDMobixtLDEzOSkKcS4kMyhuLGosMTMxKQpxLiQzKG4sbCwxNDYpCnEuJDMobixpLDE3MikK
+cS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDMsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDY4KQpx
+LiQzKG4sbCwxOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNCwyMjkpKQpx
+LiQzKG4sbSw1KQpwLiQzKG4sIkFaIiwyMjkpCnEuJDMobixrLDEwMikKcS4kMyhuLCJAIiw2OCkKcS4k
+MyhuLCJbIiwyMzIpCnEuJDMobixqLDEzOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5h
+KHIuJDIoNSwyMjkpKQpxLiQzKG4sbSw1KQpwLiQzKG4sIkFaIiwyMjkpCnEuJDMobixrLDEwMikKcS4k
+MyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEo
+ci4kMig2LDIzMSkpCnAuJDMobiwiMTkiLDcpCnEuJDMobiwiQCIsNjgpCnEuJDMobixqLDEzOCkKcS4k
+MyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNywyMzEpKQpwLiQzKG4sIjA5Iiw3KQpx
+LiQzKG4sIkAiLDY4KQpxLiQzKG4saiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpxLiQz
+KG8uYShyLiQyKDgsOCkpLCJdIiw1KQpuPW8uYShyLiQyKDksMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMo
+bixsLDE2KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQy
+KDE2LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxNykKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwx
+NzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNywyMzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGos
+OSkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMTAsMjM1KSkKcS4kMyhuLG0s
+MTEpCnEuJDMobixsLDE4KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpu
+PW8uYShyLiQyKDE4LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxOSkKcS4kMyhuLGosMjM0KQpx
+LiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxOSwyMzUpKQpxLiQzKG4sbSwxMSkK
+cS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxMSwyMzUp
+KQpxLiQzKG4sbSwxMSkKcS4kMyhuLGosMTApCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8u
+YShyLiQyKDEyLDIzNikpCnEuJDMobixtLDEyKQpxLiQzKG4saSwxMikKcS4kMyhuLGgsMjA1KQpuPW8u
+YShyLiQyKDEzLDIzNykpCnEuJDMobixtLDEzKQpxLiQzKG4saSwxMykKcC4kMyhvLmEoci4kMigyMCwy
+NDUpKSwiYXoiLDIxKQpyPW8uYShyLiQyKDIxLDI0NSkpCnAuJDMociwiYXoiLDIxKQpwLiQzKHIsIjA5
+IiwyMSkKcS4kMyhyLCIrLS4iLDIxKQpyZXR1cm4gZ30sClVCKGEsYixjLGQsZSl7dmFyIHMscixxLHAs
+bz0kLnZaKCkKZm9yKHM9YjtzPGM7KytzKXtpZihkPDB8fGQ+PW8ubGVuZ3RoKXJldHVybiBILk9IKG8s
+ZCkKcj1vW2RdCnE9Qy54Qi5XKGEscyleOTYKcD1yW3E+OTU/MzE6cV0KZD1wJjMxCkMuTm0uWTUoZSxw
+Pj4+NSxzKX1yZXR1cm4gZH0sClJ4KGEpe2lmKGEuYj09PTcmJkMueEIubihhLmEsInBhY2thZ2UiKSYm
+YS5jPD0wKXJldHVybiBQLmZGKGEuYSxhLmUsYS5mKQpyZXR1cm4tMX0sCmZGKGEsYixjKXt2YXIgcyxy
+LHEKZm9yKHM9YixyPTA7czxjOysrcyl7cT1DLnhCLk8oYSxzKQppZihxPT09NDcpcmV0dXJuIHIhPT0w
+P3M6LTEKaWYocT09PTM3fHxxPT09NTgpcmV0dXJuLTEKcnw9cV40Nn1yZXR1cm4tMX0sCldGOmZ1bmN0
+aW9uIFdGKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAppUDpmdW5jdGlvbiBpUChhLGIpe3RoaXMuYT1h
+CnRoaXMuYj1ifSwKWFM6ZnVuY3Rpb24gWFMoKXt9LApDNjpmdW5jdGlvbiBDNihhKXt0aGlzLmE9YX0s
+CkV6OmZ1bmN0aW9uIEV6KCl7fSwKRjpmdW5jdGlvbiBGKCl7fSwKQVQ6ZnVuY3Rpb24gQVQoYSxiLGMs
+ZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCmJKOmZ1bmN0aW9uIGJKKGEsYixj
+LGQsZSxmKXt2YXIgXz10aGlzCl8uZT1hCl8uZj1iCl8uYT1jCl8uYj1kCl8uYz1lCl8uZD1mfSwKZVk6
+ZnVuY3Rpb24gZVkoYSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZj1hCl8uYT1iCl8uYj1jCl8uYz1kCl8u
+ZD1lfSwKbXA6ZnVuY3Rpb24gbXAoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9Ywpf
+LmQ9ZH0sCnViOmZ1bmN0aW9uIHViKGEpe3RoaXMuYT1hfSwKZHM6ZnVuY3Rpb24gZHMoYSl7dGhpcy5h
+PWF9LApsajpmdW5jdGlvbiBsaihhKXt0aGlzLmE9YX0sClVWOmZ1bmN0aW9uIFVWKGEpe3RoaXMuYT1h
+fSwKazU6ZnVuY3Rpb24gazUoKXt9LApLWTpmdW5jdGlvbiBLWSgpe30sCnA6ZnVuY3Rpb24gcChhKXt0
+aGlzLmE9YX0sCkNEOmZ1bmN0aW9uIENEKGEpe3RoaXMuYT1hfSwKYUU6ZnVuY3Rpb24gYUUoYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKY1g6ZnVuY3Rpb24gY1goKXt9LApBbjpmdW5jdGlv
+biBBbigpe30sCk4zOmZ1bmN0aW9uIE4zKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1j
+fSwKYzg6ZnVuY3Rpb24gYzgoKXt9LApNaDpmdW5jdGlvbiBNaCgpe30sClpkOmZ1bmN0aW9uIFpkKCl7
+fSwKTTpmdW5jdGlvbiBNKGEpe3RoaXMuYT1hfSwKbjE6ZnVuY3Rpb24gbjEoYSl7dGhpcy5hPWF9LApj
+UzpmdW5jdGlvbiBjUyhhKXt0aGlzLmE9YX0sClZDOmZ1bmN0aW9uIFZDKGEpe3RoaXMuYT1hfSwKSlQ6
+ZnVuY3Rpb24gSlQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkRuOmZ1bmN0aW9uIERuKGEsYixjLGQs
+ZSxmLGcpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcK
+Xy5RPV8uej1fLnk9Xy54PW51bGx9LApSWjpmdW5jdGlvbiBSWigpe30sCk1FOmZ1bmN0aW9uIE1FKGEs
+Yil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp5NTpmdW5jdGlvbiB5NShhKXt0aGlzLmE9YX0sClBFOmZ1bmN0
+aW9uIFBFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnlJOmZ1bmN0aW9uIHlJKGEp
+e3RoaXMuYT1hfSwKYzY6ZnVuY3Rpb24gYzYoKXt9LApxZDpmdW5jdGlvbiBxZCgpe30sClVmOmZ1bmN0
+aW9uIFVmKGEsYixjLGQsZSxmLGcsaCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApf
+LmU9ZQpfLmY9ZgpfLnI9ZwpfLng9aApfLnk9bnVsbH0sCnFlOmZ1bmN0aW9uIHFlKGEsYixjLGQsZSxm
+LGcpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy5R
+PV8uej1fLnk9Xy54PW51bGx9LAppSjpmdW5jdGlvbiBpSigpe30sCkUyOmZ1bmN0aW9uIEUyKGEsYil7
+dGhpcy5hPWEKdGhpcy5iPWJ9LApqZzpmdW5jdGlvbiBqZyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwK
+QmY6ZnVuY3Rpb24gQmYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkFzOmZ1bmN0aW9uIEFzKCl7fSwK
+R0U6ZnVuY3Rpb24gR0UoYSl7dGhpcy5hPWF9LApONzpmdW5jdGlvbiBONyhhLGIpe3RoaXMuYT1hCnRo
+aXMuYj1ifSwKdVE6ZnVuY3Rpb24gdVEoKXt9LApoRjpmdW5jdGlvbiBoRigpe30sClI0KGEsYixjLGQp
+e3ZhciBzLHIscQpILnA4KGIpCnQuai5hKGQpCmlmKGIpe3M9W2NdCkMuTm0uRlYocyxkKQpkPXN9cj10
+LnoKcT1QLlBXKEouTTEoZCxQLncwKCksciksITAscikKdC5ZLmEoYSkKcmV0dXJuIFAud1koSC5Fayhh
+LHEsbnVsbCkpfSwKRG0oYSxiLGMpe3ZhciBzCnRyeXtpZihPYmplY3QuaXNFeHRlbnNpYmxlKGEpJiYh
+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpe09iamVjdC5kZWZpbmVQcm9w
+ZXJ0eShhLGIse3ZhbHVlOmN9KQpyZXR1cm4hMH19Y2F0Y2gocyl7SC5SdShzKX1yZXR1cm4hMX0sCk9t
+KGEsYil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpcmV0dXJuIGFb
+Yl0KcmV0dXJuIG51bGx9LAp3WShhKXtpZihhPT1udWxsfHx0eXBlb2YgYT09InN0cmluZyJ8fHR5cGVv
+ZiBhPT0ibnVtYmVyInx8SC5yUShhKSlyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgUC5FNClyZXR1cm4g
+YS5hCmlmKEguUjkoYSkpcmV0dXJuIGEKaWYodC5hay5iKGEpKXJldHVybiBhCmlmKGEgaW5zdGFuY2Vv
+ZiBQLmlQKXJldHVybiBILm8yKGEpCmlmKHQuWS5iKGEpKXJldHVybiBQLmhFKGEsIiRkYXJ0X2pzRnVu
+Y3Rpb24iLG5ldyBQLkRWKCkpCnJldHVybiBQLmhFKGEsIl8kZGFydF9qc09iamVjdCIsbmV3IFAuUEMo
+JC5rSSgpKSl9LApoRShhLGIsYyl7dmFyIHM9UC5PbShhLGIpCmlmKHM9PW51bGwpe3M9Yy4kMShhKQpQ
+LkRtKGEsYixzKX1yZXR1cm4gc30sCmRVKGEpe3ZhciBzLHIKaWYoYT09bnVsbHx8dHlwZW9mIGE9PSJz
+dHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fHR5cGVvZiBhPT0iYm9vbGVhbiIpcmV0dXJuIGEKZWxz
+ZSBpZihhIGluc3RhbmNlb2YgT2JqZWN0JiZILlI5KGEpKXJldHVybiBhCmVsc2UgaWYoYSBpbnN0YW5j
+ZW9mIE9iamVjdCYmdC5hay5iKGEpKXJldHVybiBhCmVsc2UgaWYoYSBpbnN0YW5jZW9mIERhdGUpe3M9
+SC5JWihhLmdldFRpbWUoKSkKaWYoTWF0aC5hYnMocyk8PTg2NGUxMylyPSExCmVsc2Ugcj0hMAppZihy
+KUgudihQLnhZKCJEYXRlVGltZSBpcyBvdXRzaWRlIHZhbGlkIHJhbmdlOiAiK3MsbnVsbCkpCkguY2Io
+ITEsImlzVXRjIix0LnkpCnJldHVybiBuZXcgUC5pUChzLCExKX1lbHNlIGlmKGEuY29uc3RydWN0b3I9
+PT0kLmtJKCkpcmV0dXJuIGEubwplbHNlIHJldHVybiBQLk5EKGEpfSwKTkQoYSl7aWYodHlwZW9mIGE9
+PSJmdW5jdGlvbiIpcmV0dXJuIFAuaVEoYSwkLnooKSxuZXcgUC5RUygpKQppZihhIGluc3RhbmNlb2Yg
+QXJyYXkpcmV0dXJuIFAuaVEoYSwkLlI4KCksbmV3IFAubnAoKSkKcmV0dXJuIFAuaVEoYSwkLlI4KCks
+bmV3IFAuVXQoKSl9LAppUShhLGIsYyl7dmFyIHM9UC5PbShhLGIpCmlmKHM9PW51bGx8fCEoYSBpbnN0
+YW5jZW9mIE9iamVjdCkpe3M9Yy4kMShhKQpQLkRtKGEsYixzKX1yZXR1cm4gc30sCkRWOmZ1bmN0aW9u
+IERWKCl7fSwKUEM6ZnVuY3Rpb24gUEMoYSl7dGhpcy5hPWF9LApRUzpmdW5jdGlvbiBRUygpe30sCm5w
+OmZ1bmN0aW9uIG5wKCl7fSwKVXQ6ZnVuY3Rpb24gVXQoKXt9LApFNDpmdW5jdGlvbiBFNChhKXt0aGlz
+LmE9YX0sCnI3OmZ1bmN0aW9uIHI3KGEpe3RoaXMuYT1hfSwKVHo6ZnVuY3Rpb24gVHooYSxiKXt0aGlz
+LmE9YQp0aGlzLiR0aT1ifSwKdmc6ZnVuY3Rpb24gdmcoKXt9LApuZDpmdW5jdGlvbiBuZCgpe30sCktl
+OmZ1bmN0aW9uIEtlKGEpe3RoaXMuYT1hfSwKaGk6ZnVuY3Rpb24gaGkoKXt9fSxSPXsKbnooYSl7dmFy
+IHM9SC5VYyhhLnEoMCwibm9kZUlkIikpCnJldHVybiBuZXcgUi5MTChDLk5tLkh0KEMucmssbmV3IFIu
+TUQoYSkpLHMpfSwKT1goYSl7c3dpdGNoKGEpe2Nhc2UgQy5BZDpyZXR1cm4iQWRkIC8qPyovIGhpbnQi
+CmNhc2UgQy5uZTpyZXR1cm4iQWRkIC8qISovIGhpbnQiCmNhc2UgQy53VjpyZXR1cm4iUmVtb3ZlIC8q
+PyovIGhpbnQiCmNhc2UgQy5mUjpyZXR1cm4iUmVtb3ZlIC8qISovIGhpbnQiCmNhc2UgQy5teTpyZXR1
+cm4iQ2hhbmdlIHRvIC8qPyovIGhpbnQiCmNhc2UgQy5yeDpyZXR1cm4iQ2hhbmdlIHRvIC8qISovIGhp
+bnQifX0sCkxMOmZ1bmN0aW9uIExMKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNRDpmdW5jdGlvbiBN
+RChhKXt0aGlzLmE9YX0sCkg3OmZ1bmN0aW9uIEg3KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9fSxUPXtt
+UTpmdW5jdGlvbiBtUSgpe319LFU9ewpqZihhKXt2YXIgcyxyLHEscAppZihhPT1udWxsKXM9bnVsbApl
+bHNle3M9SC5RSShbXSx0LmZBKQpmb3Iocj1KLklUKHQuUi5hKGEpKTtyLkYoKTspe3E9ci5nbCgpCnA9
+Si5VNihxKQpzLnB1c2gobmV3IFUuU2UoSC5rKHAucShxLCJkZXNjcmlwdGlvbiIpKSxILmsocC5xKHEs
+ImhyZWYiKSkpKX19cmV0dXJuIHN9LApOZChhKXt2YXIgcyxyCmlmKGE9PW51bGwpcz1udWxsCmVsc2V7
+cz1ILlFJKFtdLHQuaGgpCmZvcihyPUouSVQodC5SLmEoYSkpO3IuRigpOylzLnB1c2goVS5OZihyLmds
+KCkpKX1yZXR1cm4gc30sCk5mKGEpe3ZhciBzPUouVTYoYSkscj1ILmsocy5xKGEsImRlc2NyaXB0aW9u
+IikpLHE9SC5RSShbXSx0LmFKKQpmb3Iocz1KLklUKHQuUi5hKHMucShhLCJlbnRyaWVzIikpKTtzLkYo
+KTspcS5wdXNoKFUuUmoocy5nbCgpKSkKcmV0dXJuIG5ldyBVLnlEKHIscSl9LApSaihhKXt2YXIgcyxy
+PUouVTYoYSkscT1ILmsoci5xKGEsImRlc2NyaXB0aW9uIikpLHA9SC5rKHIucShhLCJmdW5jdGlvbiIp
+KSxvPXIucShhLCJsaW5rIikKaWYobz09bnVsbClvPW51bGwKZWxzZXtzPUouVTYobykKbz1uZXcgVS5N
+bChILmsocy5xKG8sImhyZWYiKSksSC5VYyhzLnEobywibGluZSIpKSxILmsocy5xKG8sInBhdGgiKSkp
+fXI9dC5iTS5hKHIucShhLCJoaW50QWN0aW9ucyIpKQpyPXI9PW51bGw/bnVsbDpKLk0xKHIsbmV3IFUu
+YU4oKSx0LkopLmJyKDApCnJldHVybiBuZXcgVS53YihxLHAsbyxyPT1udWxsP0MuZG46cil9LApkMjpm
+dW5jdGlvbiBkMihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApf
+LmU9ZQpfLmY9Zn0sClNlOmZ1bmN0aW9uIFNlKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNbDpmdW5j
+dGlvbiBNbChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp5RDpmdW5jdGlvbiB5RChh
+LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKd2I6ZnVuY3Rpb24gd2IoYSxiLGMsZCl7dmFyIF89dGhpcwpf
+LmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCmFOOmZ1bmN0aW9uIGFOKCl7fSwKYjA6ZnVuY3Rpb24gYjAo
+KXt9fSxXPXsKeDMoKXtyZXR1cm4gd2luZG93fSwKWnIoKXtyZXR1cm4gZG9jdW1lbnR9LApKNihhKXt2
+YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikKaWYoYSE9bnVsbClDLnhuLnNMVShzLGEpCnJl
+dHVybiBzfSwKTGooYSl7cmV0dXJuIENTUy5lc2NhcGUoYSl9LApVOShhLGIsYyl7dmFyIHMscj1kb2N1
+bWVudC5ib2R5CnIudG9TdHJpbmcKcz10LmFjCnM9bmV3IEguVTUobmV3IFcuZTcoQy5SWS5yNihyLGEs
+YixjKSkscy5DKCJhMihsRC5FKSIpLmEobmV3IFcuQ3YoKSkscy5DKCJVNTxsRC5FPiIpKQpyZXR1cm4g
+dC5oLmEocy5ncjgocykpfSwKclMoYSl7dmFyIHMscixxPSJlbGVtZW50IHRhZyB1bmF2YWlsYWJsZSIK
+dHJ5e3M9Si5ZRShhKQpzLmducyhhKQpxPXMuZ25zKGEpfWNhdGNoKHIpe0guUnUocil9cmV0dXJuIHF9
+LApDMChhLGIpe2E9YStiJjUzNjg3MDkxMQphPWErKChhJjUyNDI4Nyk8PDEwKSY1MzY4NzA5MTEKcmV0
+dXJuIGFeYT4+PjZ9LApyRShhLGIsYyxkKXt2YXIgcz1XLkMwKFcuQzAoVy5DMChXLkMwKDAsYSksYiks
+YyksZCkscj1zKygocyY2NzEwODg2Myk8PDMpJjUzNjg3MDkxMQpyXj1yPj4+MTEKcmV0dXJuIHIrKChy
+JjE2MzgzKTw8MTUpJjUzNjg3MDkxMX0sClROKGEsYil7dmFyIHMscixxPWEuY2xhc3NMaXN0CmZvcihz
+PWIubGVuZ3RoLHI9MDtyPGIubGVuZ3RoO2IubGVuZ3RoPT09c3x8KDAsSC5saykoYiksKytyKXEuYWRk
+KGJbcl0pfSwKSkUoYSxiLGMsZCxlKXt2YXIgcz1XLmFGKG5ldyBXLnZOKGMpLHQuQikKaWYocyE9bnVs
+bCYmITApSi5kWihhLGIscywhMSkKcmV0dXJuIG5ldyBXLnhDKGEsYixzLCExLGUuQygieEM8MD4iKSl9
+LApUdyhhKXt2YXIgcz1XLko2KG51bGwpLHI9dC5GLmEod2luZG93LmxvY2F0aW9uKQpzPW5ldyBXLkpR
+KG5ldyBXLm1rKHMscikpCnMuQ1koYSkKcmV0dXJuIHN9LApxRChhLGIsYyxkKXt0LmguYShhKQpILm4o
+YikKSC5uKGMpCnQuY3IuYShkKQpyZXR1cm4hMH0sCm5aKGEsYixjLGQpe3ZhciBzLHIscQp0LmguYShh
+KQpILm4oYikKSC5uKGMpCnM9dC5jci5hKGQpLmEKcj1zLmEKQy54bi5zTFUocixjKQpxPXIuaG9zdG5h
+bWUKcz1zLmIKaWYoIShxPT1zLmhvc3RuYW1lJiZyLnBvcnQ9PT1zLnBvcnQmJnIucHJvdG9jb2w9PT1z
+LnByb3RvY29sKSlpZihxPT09IiIpaWYoci5wb3J0PT09IiIpe3M9ci5wcm90b2NvbApzPXM9PT0iOiJ8
+fHM9PT0iIn1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMApyZXR1cm4gc30sCkJsKCl7dmFyIHM9
+dC5OLHI9UC50TShDLlF4LHMpLHE9dC5kRy5hKG5ldyBXLklBKCkpLHA9SC5RSShbIlRFTVBMQVRFIl0s
+dC5zKQpzPW5ldyBXLmN0KHIsUC5McyhzKSxQLkxzKHMpLFAuTHMocyksbnVsbCkKcy5DWShudWxsLG5l
+dyBILmxKKEMuUXgscSx0LmR2KSxwLG51bGwpCnJldHVybiBzfSwKcWMoYSl7dmFyIHMKaWYoYT09bnVs
+bClyZXR1cm4gbnVsbAppZigicG9zdE1lc3NhZ2UiIGluIGEpe3M9Vy5QMShhKQpyZXR1cm4gc31lbHNl
+IHJldHVybiB0LmNoLmEoYSl9LApQMShhKXtpZihhPT09d2luZG93KXJldHVybiB0LmNpLmEoYSkKZWxz
+ZSByZXR1cm4gbmV3IFcuZFcoKX0sCmFGKGEsYil7dmFyIHM9JC5YMwppZihzPT09Qy5OVSlyZXR1cm4g
+YQpyZXR1cm4gcy5QeShhLGIpfSwKcUU6ZnVuY3Rpb24gcUUoKXt9LApHaDpmdW5jdGlvbiBHaCgpe30s
+CmZZOmZ1bmN0aW9uIGZZKCl7fSwKclo6ZnVuY3Rpb24gclooKXt9LApBejpmdW5jdGlvbiBBeigpe30s
+ClFQOmZ1bmN0aW9uIFFQKCl7fSwKbng6ZnVuY3Rpb24gbngoKXt9LApvSjpmdW5jdGlvbiBvSigpe30s
+CmlkOmZ1bmN0aW9uIGlkKCl7fSwKUUY6ZnVuY3Rpb24gUUYoKXt9LApOaDpmdW5jdGlvbiBOaCgpe30s
+CmFlOmZ1bmN0aW9uIGFlKCl7fSwKSUI6ZnVuY3Rpb24gSUIoKXt9LApuNzpmdW5jdGlvbiBuNygpe30s
+Cnd6OmZ1bmN0aW9uIHd6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmN2OmZ1bmN0aW9uIGN2KCl7
+fSwKQ3Y6ZnVuY3Rpb24gQ3YoKXt9LAplYTpmdW5jdGlvbiBlYSgpe30sCkQwOmZ1bmN0aW9uIEQwKCl7
+fSwKaEg6ZnVuY3Rpb24gaEgoKXt9LApoNDpmdW5jdGlvbiBoNCgpe30sCmJyOmZ1bmN0aW9uIGJyKCl7
+fSwKVmI6ZnVuY3Rpb24gVmIoKXt9LApmSjpmdW5jdGlvbiBmSigpe30sCndhOmZ1bmN0aW9uIHdhKCl7
+fSwKU2c6ZnVuY3Rpb24gU2coKXt9LAp1ODpmdW5jdGlvbiB1OCgpe30sCkFqOmZ1bmN0aW9uIEFqKCl7
+fSwKZTc6ZnVuY3Rpb24gZTcoYSl7dGhpcy5hPWF9LApLVjpmdW5jdGlvbiBLVigpe30sCkJIOmZ1bmN0
+aW9uIEJIKCl7fSwKU046ZnVuY3Rpb24gU04oKXt9LApldzpmdW5jdGlvbiBldygpe30sCmxwOmZ1bmN0
+aW9uIGxwKCl7fSwKVGI6ZnVuY3Rpb24gVGIoKXt9LApJdjpmdW5jdGlvbiBJdigpe30sCldQOmZ1bmN0
+aW9uIFdQKCl7fSwKeVk6ZnVuY3Rpb24geVkoKXt9LAp3NjpmdW5jdGlvbiB3Nigpe30sCks1OmZ1bmN0
+aW9uIEs1KCl7fSwKQ206ZnVuY3Rpb24gQ20oKXt9LApDUTpmdW5jdGlvbiBDUSgpe30sCnc0OmZ1bmN0
+aW9uIHc0KCl7fSwKcmg6ZnVuY3Rpb24gcmgoKXt9LApjZjpmdW5jdGlvbiBjZigpe30sCmk3OmZ1bmN0
+aW9uIGk3KGEpe3RoaXMuYT1hfSwKU3k6ZnVuY3Rpb24gU3koYSl7dGhpcy5hPWF9LApLUzpmdW5jdGlv
+biBLUyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQTM6ZnVuY3Rpb24gQTMoYSxiKXt0aGlzLmE9YQp0
+aGlzLmI9Yn0sCkk0OmZ1bmN0aW9uIEk0KGEpe3RoaXMuYT1hfSwKRms6ZnVuY3Rpb24gRmsoYSxiKXt0
+aGlzLmE9YQp0aGlzLiR0aT1ifSwKUk86ZnVuY3Rpb24gUk8oYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9
+YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKQ3E6ZnVuY3Rpb24gQ3EoYSxiLGMsZCl7dmFyIF89dGhpcwpf
+LmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKeEM6ZnVuY3Rpb24geEMoYSxiLGMsZCxlKXt2YXIgXz10
+aGlzCl8uYj1hCl8uYz1iCl8uZD1jCl8uZT1kCl8uJHRpPWV9LAp2TjpmdW5jdGlvbiB2TihhKXt0aGlz
+LmE9YX0sCkpROmZ1bmN0aW9uIEpRKGEpe3RoaXMuYT1hfSwKR206ZnVuY3Rpb24gR20oKXt9LAp2RDpm
+dW5jdGlvbiB2RChhKXt0aGlzLmE9YX0sClV2OmZ1bmN0aW9uIFV2KGEpe3RoaXMuYT1hfSwKRWc6ZnVu
+Y3Rpb24gRWcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKbTY6ZnVuY3Rpb24gbTYo
+KXt9LApFbzpmdW5jdGlvbiBFbygpe30sCldrOmZ1bmN0aW9uIFdrKCl7fSwKY3Q6ZnVuY3Rpb24gY3Qo
+YSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZT1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKSUE6ZnVu
+Y3Rpb24gSUEoKXt9LApPdzpmdW5jdGlvbiBPdygpe30sClc5OmZ1bmN0aW9uIFc5KGEsYixjKXt2YXIg
+Xz10aGlzCl8uYT1hCl8uYj1iCl8uYz0tMQpfLmQ9bnVsbApfLiR0aT1jfSwKZFc6ZnVuY3Rpb24gZFco
+KXt9LAptazpmdW5jdGlvbiBtayhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rpb24gS28o
+YSl7dGhpcy5hPWEKdGhpcy5iPTB9LApmbTpmdW5jdGlvbiBmbShhKXt0aGlzLmE9YX0sCkxlOmZ1bmN0
+aW9uIExlKCl7fSwKSzc6ZnVuY3Rpb24gSzcoKXt9LApyQjpmdW5jdGlvbiByQigpe30sClhXOmZ1bmN0
+aW9uIFhXKCl7fSwKb2E6ZnVuY3Rpb24gb2EoKXt9fSxYPXsKQ0woYSxiKXt2YXIgcyxyLHEscCxvLG49
+Yi54WihhKQpiLmhLKGEpCmlmKG4hPW51bGwpYT1DLnhCLnluKGEsbi5sZW5ndGgpCnM9dC5zCnI9SC5R
+SShbXSxzKQpxPUguUUkoW10scykKcz1hLmxlbmd0aAppZihzIT09MCYmYi5yNChDLnhCLlcoYSwwKSkp
+e2lmKDA+PXMpcmV0dXJuIEguT0goYSwwKQpDLk5tLmkocSxhWzBdKQpwPTF9ZWxzZXtDLk5tLmkocSwi
+IikKcD0wfWZvcihvPXA7bzxzOysrbylpZihiLnI0KEMueEIuVyhhLG8pKSl7Qy5ObS5pKHIsQy54Qi5O
+aihhLHAsbykpCkMuTm0uaShxLGFbb10pCnA9bysxfWlmKHA8cyl7Qy5ObS5pKHIsQy54Qi55bihhLHAp
+KQpDLk5tLmkocSwiIil9cmV0dXJuIG5ldyBYLldEKGIsbixyLHEpfSwKV0Q6ZnVuY3Rpb24gV0QoYSxi
+LGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9YwpfLmU9ZH0sCkk3KGEpe3JldHVybiBuZXcg
+WC5kdihhKX0sCmR2OmZ1bmN0aW9uIGR2KGEpe3RoaXMuYT1hfX0KdmFyIHc9W0IsQyxELEUsRixILEos
+TCxNLE8sUCxSLFQsVSxXLFhdCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSh3
+KQp2YXIgJD17fQpILkZLLnByb3RvdHlwZT17fQpKLkd2LnByb3RvdHlwZT17CkROKGEsYil7cmV0dXJu
+IGE9PT1ifSwKZ2lPKGEpe3JldHVybiBILmVRKGEpfSwKdyhhKXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIr
+SC5saChhKSsiJyJ9LAplNyhhLGIpe3Quby5hKGIpCnRocm93IEguYihQLmxyKGEsYi5nV2EoKSxiLmdu
+ZCgpLGIuZ1ZtKCkpKX19CkoueUUucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4gU3RyaW5nKGEpfSwKZ2lP
+KGEpe3JldHVybiBhPzUxOTAxODoyMTgxNTl9LAokaWEyOjF9Ckoud2UucHJvdG90eXBlPXsKRE4oYSxi
+KXtyZXR1cm4gbnVsbD09Yn0sCncoYSl7cmV0dXJuIm51bGwifSwKZ2lPKGEpe3JldHVybiAwfSwKJGlj
+ODoxfQpKLk1GLnByb3RvdHlwZT17CmdpTyhhKXtyZXR1cm4gMH0sCncoYSl7cmV0dXJuIFN0cmluZyhh
 KX0sCiRpdm06MX0KSi5pQy5wcm90b3R5cGU9e30KSi5rZC5wcm90b3R5cGU9e30KSi5jNS5wcm90b3R5
-cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPWFbJC56KCldCmlmKHM9PW51bGwpcmV0dXJuIHRoaXMudChh
-KQpyZXR1cm4iSmF2YVNjcmlwdCBmdW5jdGlvbiBmb3IgIitILkVqKEoudyhzKSl9LAokaUVIOjF9Ckou
-amQucHJvdG90eXBlPXsKZHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEgualYoYSxILnQ2KGEpLkMo
-IkA8MT4iKS5LcShiKS5DKCJqVjwxLDI+IikpfSwKaTpmdW5jdGlvbihhLGIpe0gudDYoYSkuYy5hKGIp
-CmlmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAuTDQoImFkZCIpKQphLnB1c2goYil9LApXNDpmdW5jdGlv
-bihhLGIpe3ZhciBzCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAuTDQoInJlbW92ZUF0IikpCnM9YS5s
-ZW5ndGgKaWYoYj49cyl0aHJvdyBILmIoUC5PNyhiLG51bGwpKQpyZXR1cm4gYS5zcGxpY2UoYiwxKVsw
-XX0sClVHOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyCkgudDYoYSkuQygiY1g8MT4iKS5hKGMpCmlmKCEh
-YS5maXhlZCRsZW5ndGgpSC52KFAuTDQoImluc2VydEFsbCIpKQpQLndBKGIsMCxhLmxlbmd0aCwiaW5k
-ZXgiKQppZighdC5XLmIoYykpYz1KLlJYKGMpCnM9Si5IbShjKQphLmxlbmd0aD1hLmxlbmd0aCtzCnI9
-YitzCnRoaXMuWVcoYSxyLGEubGVuZ3RoLGEsYikKdGhpcy52ZyhhLGIscixjKX0sCkZWOmZ1bmN0aW9u
-KGEsYil7dmFyIHMKSC50NihhKS5DKCJjWDwxPiIpLmEoYikKaWYoISFhLmZpeGVkJGxlbmd0aClILnYo
-UC5MNCgiYWRkQWxsIikpCmlmKEFycmF5LmlzQXJyYXkoYikpe3RoaXMuS2goYSxiKQpyZXR1cm59Zm9y
-KHM9Si5JVChiKTtzLkYoKTspYS5wdXNoKHMuZ2woKSl9LApLaDpmdW5jdGlvbihhLGIpe3ZhciBzLHIK
-dC5iLmEoYikKcz1iLmxlbmd0aAppZihzPT09MClyZXR1cm4KaWYoYT09PWIpdGhyb3cgSC5iKFAuYTQo
-YSkpCmZvcihyPTA7cjxzOysrcilhLnB1c2goYltyXSl9LApFMjpmdW5jdGlvbihhLGIsYyl7dmFyIHM9
-SC50NihhKQpyZXR1cm4gbmV3IEgubEooYSxzLktxKGMpLkMoIjEoMikiKS5hKGIpLHMuQygiQDwxPiIp
-LktxKGMpLkMoImxKPDEsMj4iKSl9LAprOmZ1bmN0aW9uKGEsYil7dmFyIHMscj1QLk84KGEubGVuZ3Ro
-LCIiLCExLHQuTikKZm9yKHM9MDtzPGEubGVuZ3RoOysrcyl0aGlzLlk1KHIscyxILkVqKGFbc10pKQpy
-ZXR1cm4gci5qb2luKGIpfSwKZVI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSC5xQyhhLGIsbnVsbCxILnQ2
-KGEpLmMpfSwKTjA6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxCmQuYShiKQpILnQ2KGEpLktxKGQp
-LkMoIjEoMSwyKSIpLmEoYykKcz1hLmxlbmd0aApmb3Iocj1iLHE9MDtxPHM7KytxKXtyPWMuJDIocixh
-W3FdKQppZihhLmxlbmd0aCE9PXMpdGhyb3cgSC5iKFAuYTQoYSkpfXJldHVybiByfSwKSHQ6ZnVuY3Rp
-b24oYSxiKXt2YXIgcyxyLHEscCxvLG49SC50NihhKQpuLkMoImEyKDEpIikuYShiKQpzPWEubGVuZ3Ro
-CmZvcihyPW51bGwscT0hMSxwPTA7cDxzOysrcCl7bz1hW3BdCmlmKEgub1QoYi4kMShvKSkpe2lmKHEp
-dGhyb3cgSC5iKEguQW0oKSkKcj1vCnE9ITB9aWYocyE9PWEubGVuZ3RoKXRocm93IEguYihQLmE0KGEp
-KX1pZihxKXJldHVybiBuLmMuYShyKQp0aHJvdyBILmIoSC5XcCgpKX0sCkU6ZnVuY3Rpb24oYSxiKXtp
-ZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9IKGEsYikKcmV0dXJuIGFbYl19LApndEg6ZnVuY3Rp
-b24oYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJvdyBILmIoSC5XcCgpKX0sCmdyWjpmdW5j
-dGlvbihhKXt2YXIgcz1hLmxlbmd0aAppZihzPjApcmV0dXJuIGFbcy0xXQp0aHJvdyBILmIoSC5XcCgp
-KX0sCllXOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbwpILnQ2KGEpLkMoImNYPDE+Iiku
-YShkKQppZighIWEuaW1tdXRhYmxlJGxpc3QpSC52KFAuTDQoInNldFJhbmdlIikpClAuakIoYixjLGEu
-bGVuZ3RoKQpzPWMtYgppZihzPT09MClyZXR1cm4KUC5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihk
-KSl7cj1kCnE9ZX1lbHNle3I9Si5BNShkLGUpLnR0KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAu
-Z0EocikpdGhyb3cgSC5iKEguYXIoKSkKaWYocTxiKWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5x
-KHIscStvKQplbHNlIGZvcihvPTA7bzxzOysrbylhW2Irb109cC5xKHIscStvKX0sCnZnOmZ1bmN0aW9u
-KGEsYixjLGQpe3JldHVybiB0aGlzLllXKGEsYixjLGQsMCl9LApWcjpmdW5jdGlvbihhLGIpe3ZhciBz
-LHIKSC50NihhKS5DKCJhMigxKSIpLmEoYikKcz1hLmxlbmd0aApmb3Iocj0wO3I8czsrK3Ipe2lmKEgu
-b1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5sZW5ndGghPT1zKXRocm93IEguYihQLmE0KGEpKX1y
-ZXR1cm4hMX0sCnRnOmZ1bmN0aW9uKGEsYil7dmFyIHMKZm9yKHM9MDtzPGEubGVuZ3RoOysrcylpZihK
-LlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVu
-Z3RoPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGghPT0wfSwKdzpmdW5jdGlvbihh
-KXtyZXR1cm4gUC54KGEsIlsiLCJdIil9LAp0dDpmdW5jdGlvbihhLGIpe3ZhciBzPUguUUkoYS5zbGlj
-ZSgwKSxILnQ2KGEpKQpyZXR1cm4gc30sCmJyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnR0KGEsITAp
-fSwKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBKLm0xKGEsYS5sZW5ndGgsSC50NihhKS5DKCJtMTwx
-PiIpKX0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gSC5lUShhKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVy
-biBhLmxlbmd0aH0sCnNBOmZ1bmN0aW9uKGEsYil7aWYoISFhLmZpeGVkJGxlbmd0aClILnYoUC5MNCgi
-c2V0IGxlbmd0aCIpKQppZihiPDApdGhyb3cgSC5iKFAuVEUoYiwwLG51bGwsIm5ld0xlbmd0aCIsbnVs
-bCkpCmlmKGI+YS5sZW5ndGgpSC50NihhKS5jLmEobnVsbCkKYS5sZW5ndGg9Yn0sCnE6ZnVuY3Rpb24o
-YSxiKXtILklaKGIpCmlmKGI+PWEubGVuZ3RofHxiPDApdGhyb3cgSC5iKEgudShhLGIpKQpyZXR1cm4g
-YVtiXX0sClk1OmZ1bmN0aW9uKGEsYixjKXtILnQ2KGEpLmMuYShjKQppZighIWEuaW1tdXRhYmxlJGxp
-c3QpSC52KFAuTDQoImluZGV4ZWQgc2V0IikpCmlmKGI+PWEubGVuZ3RofHxiPDApdGhyb3cgSC5iKEgu
-dShhLGIpKQphW2JdPWN9LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpKLlBvLnByb3RvdHlwZT17fQpK
-Lm0xLnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmQpfSwK
-RjpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxxPXIuYSxwPXEubGVuZ3RoCmlmKHIuYiE9PXApdGhyb3cg
-SC5iKEgubGsocSkpCnM9ci5jCmlmKHM+PXApe3Iuc00obnVsbCkKcmV0dXJuITF9ci5zTShxW3NdKTsr
-K3IuYwpyZXR1cm4hMH0sCnNNOmZ1bmN0aW9uKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9
-LAokaUFuOjF9CkoucUkucHJvdG90eXBlPXsKelE6ZnVuY3Rpb24oYSl7aWYoYT4wKXtpZihhIT09MS8w
-KXJldHVybiBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJldHVybiAwLU1hdGgucm91bmQoMC1h
-KQp0aHJvdyBILmIoUC5MNCgiIithKyIucm91bmQoKSIpKX0sCnc6ZnVuY3Rpb24oYSl7aWYoYT09PTAm
-JjEvYTwwKXJldHVybiItMC4wIgplbHNlIHJldHVybiIiK2F9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHMs
-cixxLHAsbz1hfDAKaWYoYT09PW8pcmV0dXJuIG8mNTM2ODcwOTExCnM9TWF0aC5hYnMoYSkKcj1NYXRo
-LmxvZyhzKS8wLjY5MzE0NzE4MDU1OTk0NTN8MApxPU1hdGgucG93KDIscikKcD1zPDE/cy9xOnEvcwpy
-ZXR1cm4oKHAqOTAwNzE5OTI1NDc0MDk5MnwwKSsocCozNTQyMjQzMTgxMTc2NTIxfDApKSo1OTkxOTcr
-cioxMjU5JjUzNjg3MDkxMX0sCnpZOmZ1bmN0aW9uKGEsYil7dmFyIHM9YSViCmlmKHM9PT0wKXJldHVy
-biAwCmlmKHM+MClyZXR1cm4gcwpyZXR1cm4gcytifSwKQlU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYXww
-KT09PWE/YS9ifDA6dGhpcy5ESihhLGIpfSwKREo6ZnVuY3Rpb24oYSxiKXt2YXIgcz1hL2IKaWYocz49
-LTIxNDc0ODM2NDgmJnM8PTIxNDc0ODM2NDcpcmV0dXJuIHN8MAppZihzPjApe2lmKHMhPT0xLzApcmV0
-dXJuIE1hdGguZmxvb3Iocyl9ZWxzZSBpZihzPi0xLzApcmV0dXJuIE1hdGguY2VpbChzKQp0aHJvdyBI
-LmIoUC5MNCgiUmVzdWx0IG9mIHRydW5jYXRpbmcgZGl2aXNpb24gaXMgIitILkVqKHMpKyI6ICIrSC5F
-aihhKSsiIH4vICIrYikpfSwKd0c6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihhPjApcz10aGlzLnAzKGEs
-YikKZWxzZXtzPWI+MzE/MzE6YgpzPWE+PnM+Pj4wfXJldHVybiBzfSwKYmY6ZnVuY3Rpb24oYSxiKXtp
-ZigwPmIpdGhyb3cgSC5iKEgudEwoYikpCnJldHVybiB0aGlzLnAzKGEsYil9LApwMzpmdW5jdGlvbihh
-LGIpe3JldHVybiBiPjMxPzA6YT4+PmJ9LAokaUNQOjEsCiRpWlo6MX0KSi5iVS5wcm90b3R5cGU9eyRp
-SWo6MX0KSi5rRC5wcm90b3R5cGU9e30KSi5Eci5wcm90b3R5cGU9ewpPOmZ1bmN0aW9uKGEsYil7aWYo
-YjwwKXRocm93IEguYihILnUoYSxiKSkKaWYoYj49YS5sZW5ndGgpSC52KEgudShhLGIpKQpyZXR1cm4g
-YS5jaGFyQ29kZUF0KGIpfSwKVzpmdW5jdGlvbihhLGIpe2lmKGI+PWEubGVuZ3RoKXRocm93IEguYihI
-LnUoYSxiKSkKcmV0dXJuIGEuY2hhckNvZGVBdChiKX0sCmRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5l
-dyBILnVuKGIsYSwwKX0sCmg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStifSwKVGM6ZnVuY3Rpb24oYSxi
-KXt2YXIgcz1iLmxlbmd0aCxyPWEubGVuZ3RoCmlmKHM+cilyZXR1cm4hMQpyZXR1cm4gYj09PXRoaXMu
-eW4oYSxyLXMpfSwKaTc6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHM9UC5qQihiLGMsYS5sZW5ndGgpLHI9
-YS5zdWJzdHJpbmcoMCxiKSxxPWEuc3Vic3RyaW5nKHMpCnJldHVybiByK2QrcX0sClFpOmZ1bmN0aW9u
-KGEsYixjKXt2YXIgcwppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3Ro
-LG51bGwsbnVsbCkpCnM9YytiLmxlbmd0aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09
-YS5zdWJzdHJpbmcoYyxzKX0sCm46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApO
-ajpmdW5jdGlvbihhLGIsYyl7aWYoYz09bnVsbCljPWEubGVuZ3RoCmlmKGI8MCl0aHJvdyBILmIoUC5P
-NyhiLG51bGwpKQppZihiPmMpdGhyb3cgSC5iKFAuTzcoYixudWxsKSkKaWYoYz5hLmxlbmd0aCl0aHJv
-dyBILmIoUC5PNyhjLG51bGwpKQpyZXR1cm4gYS5zdWJzdHJpbmcoYixjKX0sCnluOmZ1bmN0aW9uKGEs
-Yil7cmV0dXJuIHRoaXMuTmooYSxiLG51bGwpfSwKaGM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9Mb3dl
-ckNhc2UoKX0sCmJTOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPWEudHJpbSgpLG89cC5sZW5ndGgKaWYo
-bz09PTApcmV0dXJuIHAKaWYodGhpcy5XKHAsMCk9PT0xMzMpe3M9Si5tbShwLDEpCmlmKHM9PT1vKXJl
-dHVybiIifWVsc2Ugcz0wCnI9by0xCnE9dGhpcy5PKHAscik9PT0xMzM/Si5jMShwLHIpOm8KaWYocz09
-PTAmJnE9PT1vKXJldHVybiBwCnJldHVybiBwLnN1YnN0cmluZyhzLHEpfSwKVDpmdW5jdGlvbihhLGIp
+cGU9ewp3KGEpe3ZhciBzPWFbJC56KCldCmlmKHM9PW51bGwpcmV0dXJuIHRoaXMudChhKQpyZXR1cm4i
+SmF2YVNjcmlwdCBmdW5jdGlvbiBmb3IgIitILkVqKEoudyhzKSl9LAokaUVIOjF9CkouamQucHJvdG90
+eXBlPXsKZHIoYSxiKXtyZXR1cm4gbmV3IEgualYoYSxILnQ2KGEpLkMoIkA8MT4iKS5LcShiKS5DKCJq
+VjwxLDI+IikpfSwKaShhLGIpe0gudDYoYSkuYy5hKGIpCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAu
+TDQoImFkZCIpKQphLnB1c2goYil9LApXNChhLGIpe3ZhciBzCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52
+KFAuTDQoInJlbW92ZUF0IikpCnM9YS5sZW5ndGgKaWYoYj49cyl0aHJvdyBILmIoUC5PNyhiLG51bGwp
+KQpyZXR1cm4gYS5zcGxpY2UoYiwxKVswXX0sClVHKGEsYixjKXt2YXIgcyxyCkgudDYoYSkuQygiY1g8
+MT4iKS5hKGMpCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAuTDQoImluc2VydEFsbCIpKQpQLndBKGIs
+MCxhLmxlbmd0aCwiaW5kZXgiKQppZighdC5XLmIoYykpYz1KLlJYKGMpCnM9Si5IbShjKQphLmxlbmd0
+aD1hLmxlbmd0aCtzCnI9YitzCnRoaXMuWVcoYSxyLGEubGVuZ3RoLGEsYikKdGhpcy52ZyhhLGIscixj
+KX0sCkZWKGEsYil7dmFyIHMKSC50NihhKS5DKCJjWDwxPiIpLmEoYikKaWYoISFhLmZpeGVkJGxlbmd0
+aClILnYoUC5MNCgiYWRkQWxsIikpCmlmKEFycmF5LmlzQXJyYXkoYikpe3RoaXMuS2goYSxiKQpyZXR1
+cm59Zm9yKHM9Si5JVChiKTtzLkYoKTspYS5wdXNoKHMuZ2woKSl9LApLaChhLGIpe3ZhciBzLHIKdC5i
+LmEoYikKcz1iLmxlbmd0aAppZihzPT09MClyZXR1cm4KaWYoYT09PWIpdGhyb3cgSC5iKFAuYTQoYSkp
+CmZvcihyPTA7cjxzOysrcilhLnB1c2goYltyXSl9LApFMihhLGIsYyl7dmFyIHM9SC50NihhKQpyZXR1
+cm4gbmV3IEgubEooYSxzLktxKGMpLkMoIjEoMikiKS5hKGIpLHMuQygiQDwxPiIpLktxKGMpLkMoImxK
+PDEsMj4iKSl9LAprKGEsYil7dmFyIHMscj1QLk84KGEubGVuZ3RoLCIiLCExLHQuTikKZm9yKHM9MDtz
+PGEubGVuZ3RoOysrcyl0aGlzLlk1KHIscyxILkVqKGFbc10pKQpyZXR1cm4gci5qb2luKGIpfSwKZVIo
+YSxiKXtyZXR1cm4gSC5xQyhhLGIsbnVsbCxILnQ2KGEpLmMpfSwKTjAoYSxiLGMsZCl7dmFyIHMscixx
+CmQuYShiKQpILnQ2KGEpLktxKGQpLkMoIjEoMSwyKSIpLmEoYykKcz1hLmxlbmd0aApmb3Iocj1iLHE9
+MDtxPHM7KytxKXtyPWMuJDIocixhW3FdKQppZihhLmxlbmd0aCE9PXMpdGhyb3cgSC5iKFAuYTQoYSkp
+fXJldHVybiByfSwKSHQoYSxiKXt2YXIgcyxyLHEscCxvLG49SC50NihhKQpuLkMoImEyKDEpIikuYShi
+KQpzPWEubGVuZ3RoCmZvcihyPW51bGwscT0hMSxwPTA7cDxzOysrcCl7bz1hW3BdCmlmKEgub1QoYi4k
+MShvKSkpe2lmKHEpdGhyb3cgSC5iKEguQW0oKSkKcj1vCnE9ITB9aWYocyE9PWEubGVuZ3RoKXRocm93
+IEguYihQLmE0KGEpKX1pZihxKXJldHVybiBuLmMuYShyKQp0aHJvdyBILmIoSC5XcCgpKX0sCkUoYSxi
+KXtpZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9IKGEsYikKcmV0dXJuIGFbYl19LApndEgoYSl7
+aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJvdyBILmIoSC5XcCgpKX0sCmdyWihhKXt2YXIgcz1h
+Lmxlbmd0aAppZihzPjApcmV0dXJuIGFbcy0xXQp0aHJvdyBILmIoSC5XcCgpKX0sCllXKGEsYixjLGQs
+ZSl7dmFyIHMscixxLHAsbwpILnQ2KGEpLkMoImNYPDE+IikuYShkKQppZighIWEuaW1tdXRhYmxlJGxp
+c3QpSC52KFAuTDQoInNldFJhbmdlIikpClAuakIoYixjLGEubGVuZ3RoKQpzPWMtYgppZihzPT09MCly
+ZXR1cm4KUC5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihkKSl7cj1kCnE9ZX1lbHNle3I9Si5BNShk
+LGUpLnR0KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAuZ0EocikpdGhyb3cgSC5iKEguYXIoKSkK
+aWYocTxiKWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5xKHIscStvKQplbHNlIGZvcihvPTA7bzxz
+OysrbylhW2Irb109cC5xKHIscStvKX0sCnZnKGEsYixjLGQpe3JldHVybiB0aGlzLllXKGEsYixjLGQs
+MCl9LApWcihhLGIpe3ZhciBzLHIKSC50NihhKS5DKCJhMigxKSIpLmEoYikKcz1hLmxlbmd0aApmb3Io
+cj0wO3I8czsrK3Ipe2lmKEgub1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5sZW5ndGghPT1zKXRo
+cm93IEguYihQLmE0KGEpKX1yZXR1cm4hMX0sCnRnKGEsYil7dmFyIHMKZm9yKHM9MDtzPGEubGVuZ3Ro
+OysrcylpZihKLlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9LApnbDAoYSl7cmV0dXJuIGEubGVu
+Z3RoPT09MH0sCmdvcihhKXtyZXR1cm4gYS5sZW5ndGghPT0wfSwKdyhhKXtyZXR1cm4gUC54KGEsIlsi
+LCJdIil9LAp0dChhLGIpe3ZhciBzPUguUUkoYS5zbGljZSgwKSxILnQ2KGEpKQpyZXR1cm4gc30sCmJy
+KGEpe3JldHVybiB0aGlzLnR0KGEsITApfSwKZ20oYSl7cmV0dXJuIG5ldyBKLm0xKGEsYS5sZW5ndGgs
+SC50NihhKS5DKCJtMTwxPiIpKX0sCmdpTyhhKXtyZXR1cm4gSC5lUShhKX0sCmdBKGEpe3JldHVybiBh
+Lmxlbmd0aH0sCnNBKGEsYil7aWYoISFhLmZpeGVkJGxlbmd0aClILnYoUC5MNCgic2V0IGxlbmd0aCIp
+KQppZihiPDApdGhyb3cgSC5iKFAuVEUoYiwwLG51bGwsIm5ld0xlbmd0aCIsbnVsbCkpCmlmKGI+YS5s
+ZW5ndGgpSC50NihhKS5jLmEobnVsbCkKYS5sZW5ndGg9Yn0sCnEoYSxiKXtILklaKGIpCmlmKGI+PWEu
+bGVuZ3RofHxiPDApdGhyb3cgSC5iKEgudShhLGIpKQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXtILnQ2
+KGEpLmMuYShjKQppZighIWEuaW1tdXRhYmxlJGxpc3QpSC52KFAuTDQoImluZGV4ZWQgc2V0IikpCmlm
+KGI+PWEubGVuZ3RofHxiPDApdGhyb3cgSC5iKEgudShhLGIpKQphW2JdPWN9LAokaWJROjEsCiRpY1g6
+MSwKJGl6TToxfQpKLlBvLnByb3RvdHlwZT17fQpKLm0xLnByb3RvdHlwZT17CmdsKCl7cmV0dXJuIHRo
+aXMuJHRpLmMuYSh0aGlzLmQpfSwKRigpe3ZhciBzLHI9dGhpcyxxPXIuYSxwPXEubGVuZ3RoCmlmKHIu
+YiE9PXApdGhyb3cgSC5iKEgubGsocSkpCnM9ci5jCmlmKHM+PXApe3Iuc00obnVsbCkKcmV0dXJuITF9
+ci5zTShxW3NdKTsrK3IuYwpyZXR1cm4hMH0sCnNNKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEo
+YSl9LAokaUFuOjF9CkoucUkucHJvdG90eXBlPXsKelEoYSl7aWYoYT4wKXtpZihhIT09MS8wKXJldHVy
+biBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJldHVybiAwLU1hdGgucm91bmQoMC1hKQp0aHJv
+dyBILmIoUC5MNCgiIithKyIucm91bmQoKSIpKX0sCncoYSl7aWYoYT09PTAmJjEvYTwwKXJldHVybiIt
+MC4wIgplbHNlIHJldHVybiIiK2F9LApnaU8oYSl7dmFyIHMscixxLHAsbz1hfDAKaWYoYT09PW8pcmV0
+dXJuIG8mNTM2ODcwOTExCnM9TWF0aC5hYnMoYSkKcj1NYXRoLmxvZyhzKS8wLjY5MzE0NzE4MDU1OTk0
+NTN8MApxPU1hdGgucG93KDIscikKcD1zPDE/cy9xOnEvcwpyZXR1cm4oKHAqOTAwNzE5OTI1NDc0MDk5
+MnwwKSsocCozNTQyMjQzMTgxMTc2NTIxfDApKSo1OTkxOTcrcioxMjU5JjUzNjg3MDkxMX0sCnpZKGEs
+Yil7dmFyIHM9YSViCmlmKHM9PT0wKXJldHVybiAwCmlmKHM+MClyZXR1cm4gcwpyZXR1cm4gcytifSwK
+QlUoYSxiKXtyZXR1cm4oYXwwKT09PWE/YS9ifDA6dGhpcy5ESihhLGIpfSwKREooYSxiKXt2YXIgcz1h
+L2IKaWYocz49LTIxNDc0ODM2NDgmJnM8PTIxNDc0ODM2NDcpcmV0dXJuIHN8MAppZihzPjApe2lmKHMh
+PT0xLzApcmV0dXJuIE1hdGguZmxvb3Iocyl9ZWxzZSBpZihzPi0xLzApcmV0dXJuIE1hdGguY2VpbChz
+KQp0aHJvdyBILmIoUC5MNCgiUmVzdWx0IG9mIHRydW5jYXRpbmcgZGl2aXNpb24gaXMgIitILkVqKHMp
+KyI6ICIrSC5FaihhKSsiIH4vICIrYikpfSwKd0coYSxiKXt2YXIgcwppZihhPjApcz10aGlzLnAzKGEs
+YikKZWxzZXtzPWI+MzE/MzE6YgpzPWE+PnM+Pj4wfXJldHVybiBzfSwKYmYoYSxiKXtpZigwPmIpdGhy
+b3cgSC5iKEgudEwoYikpCnJldHVybiB0aGlzLnAzKGEsYil9LApwMyhhLGIpe3JldHVybiBiPjMxPzA6
+YT4+PmJ9LAokaUNQOjEsCiRpWlo6MX0KSi5iVS5wcm90b3R5cGU9eyRpSWo6MX0KSi5rRC5wcm90b3R5
+cGU9e30KSi5Eci5wcm90b3R5cGU9ewpPKGEsYil7aWYoYjwwKXRocm93IEguYihILnUoYSxiKSkKaWYo
+Yj49YS5sZW5ndGgpSC52KEgudShhLGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0KGIpfSwKVyhhLGIpe2lm
+KGI+PWEubGVuZ3RoKXRocm93IEguYihILnUoYSxiKSkKcmV0dXJuIGEuY2hhckNvZGVBdChiKX0sCmRk
+KGEsYil7cmV0dXJuIG5ldyBILnVuKGIsYSwwKX0sCmgoYSxiKXtyZXR1cm4gYStifSwKVGMoYSxiKXt2
+YXIgcz1iLmxlbmd0aCxyPWEubGVuZ3RoCmlmKHM+cilyZXR1cm4hMQpyZXR1cm4gYj09PXRoaXMueW4o
+YSxyLXMpfSwKaTcoYSxiLGMsZCl7dmFyIHM9UC5qQihiLGMsYS5sZW5ndGgpLHI9YS5zdWJzdHJpbmco
+MCxiKSxxPWEuc3Vic3RyaW5nKHMpCnJldHVybiByK2QrcX0sClFpKGEsYixjKXt2YXIgcwppZihjPDB8
+fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9YytiLmxl
+bmd0aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09YS5zdWJzdHJpbmcoYyxzKX0sCm4o
+YSxiKXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApOaihhLGIsYyl7cmV0dXJuIGEuc3Vic3RyaW5nKGIs
+UC5qQihiLGMsYS5sZW5ndGgpKX0sCnluKGEsYil7cmV0dXJuIHRoaXMuTmooYSxiLG51bGwpfSwKaGMo
+YSl7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0sCmJTKGEpe3ZhciBzLHIscSxwPWEudHJpbSgpLG89cC5s
+ZW5ndGgKaWYobz09PTApcmV0dXJuIHAKaWYodGhpcy5XKHAsMCk9PT0xMzMpe3M9Si5tbShwLDEpCmlm
+KHM9PT1vKXJldHVybiIifWVsc2Ugcz0wCnI9by0xCnE9dGhpcy5PKHAscik9PT0xMzM/Si5jMShwLHIp
+Om8KaWYocz09PTAmJnE9PT1vKXJldHVybiBwCnJldHVybiBwLnN1YnN0cmluZyhzLHEpfSwKVChhLGIp
 e3ZhciBzLHIKaWYoMD49YilyZXR1cm4iIgppZihiPT09MXx8YS5sZW5ndGg9PT0wKXJldHVybiBhCmlm
 KGIhPT1iPj4+MCl0aHJvdyBILmIoQy5FcSkKZm9yKHM9YSxyPSIiOyEwOyl7aWYoKGImMSk9PT0xKXI9
-cytyCmI9Yj4+PjEKaWYoYj09PTApYnJlYWsKcys9c31yZXR1cm4gcn0sClhVOmZ1bmN0aW9uKGEsYixj
-KXt2YXIgcwppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGws
-bnVsbCkpCnM9YS5pbmRleE9mKGIsYykKcmV0dXJuIHN9LApPWTpmdW5jdGlvbihhLGIpe3JldHVybiB0
-aGlzLlhVKGEsYiwwKX0sClBrOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyCmlmKGM9PW51bGwpYz1hLmxl
-bmd0aAplbHNlIGlmKGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5URShjLDAsYS5sZW5ndGgsbnVs
-bCxudWxsKSkKcz1iLmxlbmd0aApyPWEubGVuZ3RoCmlmKGMrcz5yKWM9ci1zCnJldHVybiBhLmxhc3RJ
-bmRleE9mKGIsYyl9LApjbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLlBrKGEsYixudWxsKX0sCklz
-OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1hLmxlbmd0aAppZihjPnMpdGhyb3cgSC5iKFAuVEUoYywwLHMs
-bnVsbCxudWxsKSkKcmV0dXJuIEguU1EoYSxiLGMpfSwKdGc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhp
-cy5JcyhhLGIsMCl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBhfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBz
-LHIscQpmb3Iocz1hLmxlbmd0aCxyPTAscT0wO3E8czsrK3Epe3I9cithLmNoYXJDb2RlQXQocSkmNTM2
-ODcwOTExCnI9cisoKHImNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpyXj1yPj42fXI9cisoKHImNjcxMDg4
-NjMpPDwzKSY1MzY4NzA5MTEKcl49cj4+MTEKcmV0dXJuIHIrKChyJjE2MzgzKTw8MTUpJjUzNjg3MDkx
-MX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILklaKGIp
-CmlmKGI+PWEubGVuZ3RofHwhMSl0aHJvdyBILmIoSC51KGEsYikpCnJldHVybiBhW2JdfSwKJGl2WDox
-LAokaXFVOjF9CkguQlIucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7dmFyIHM9SC5MaCh0aGlzKQpy
-ZXR1cm4gbmV3IEguZVQoSi5JVCh0aGlzLmdPTigpKSxzLkMoIkA8MT4iKS5LcShzLlFbMV0pLkMoImVU
-PDEsMj4iKSl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gSi5IbSh0aGlzLmdPTigpKX0sCmdsMDpmdW5j
-dGlvbihhKXtyZXR1cm4gSi51VSh0aGlzLmdPTigpKX0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4gSi5G
-Nyh0aGlzLmdPTigpKX0sCmVSOmZ1bmN0aW9uKGEsYil7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gSC5H
-SihKLkE1KHRoaXMuZ09OKCksYikscy5jLHMuUVsxXSl9LApFOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEgu
-TGgodGhpcykuUVsxXS5hKEouR0EodGhpcy5nT04oKSxiKSl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBK
-LncodGhpcy5nT04oKSl9fQpILmVULnByb3RvdHlwZT17CkY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5h
-LkYoKX0sCmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpLlFbMV0uYSh0aGlzLmEuZ2woKSl9LAok
-aUFuOjF9CkguWnkucHJvdG90eXBlPXsKZ09OOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX19Ckgub2wu
-cHJvdG90eXBlPXskaWJROjF9CkguVXEucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0
-aGlzLiR0aS5RWzFdLmEoSi54OSh0aGlzLmEsSC5JWihiKSkpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3Zh
-ciBzPXRoaXMuJHRpCkoudTkodGhpcy5hLGIscy5jLmEocy5RWzFdLmEoYykpKX0sCiRpYlE6MSwKJGl6
-TToxfQpILmpWLnByb3RvdHlwZT17CmRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBILmpWKHRoaXMu
-YSx0aGlzLiR0aS5DKCJAPDE+IikuS3EoYikuQygialY8MSwyPiIpKX0sCmdPTjpmdW5jdGlvbigpe3Jl
-dHVybiB0aGlzLmF9fQpILmMucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz0iTGF0ZUluaXRp
-YWxpemF0aW9uRXJyb3I6ICIrdGhpcy5hCnJldHVybiBzfX0KSC5xai5wcm90b3R5cGU9ewpnQTpmdW5j
-dGlvbihhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQy54Qi5P
-KHRoaXMuYSxILklaKGIpKX19CkguYlEucHJvdG90eXBlPXt9CkguYUwucHJvdG90eXBlPXsKZ206ZnVu
-Y3Rpb24oYSl7dmFyIHM9dGhpcwpyZXR1cm4gbmV3IEguYTcocyxzLmdBKHMpLEguTGgocykuQygiYTc8
-YUwuRT4iKSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKazpmdW5j
-dGlvbihhLGIpe3ZhciBzLHIscSxwPXRoaXMsbz1wLmdBKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09
-PTApcmV0dXJuIiIKcz1ILkVqKHAuRSgwLDApKQppZihvIT09cC5nQShwKSl0aHJvdyBILmIoUC5hNChw
-KSkKZm9yKHI9cyxxPTE7cTxvOysrcSl7cj1yK2IrSC5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ0EocCkp
-dGhyb3cgSC5iKFAuYTQocCkpfXJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9
-MCxyPSIiO3E8bzsrK3Epe3IrPUguRWoocC5FKDAscSkpCmlmKG8hPT1wLmdBKHApKXRocm93IEguYihQ
-LmE0KHApKX1yZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn19LApldjpmdW5jdGlvbihhLGIpe3Jl
-dHVybiB0aGlzLkdHKDAsSC5MaCh0aGlzKS5DKCJhMihhTC5FKSIpLmEoYikpfSwKRTI6ZnVuY3Rpb24o
-YSxiLGMpe3ZhciBzPUguTGgodGhpcykKcmV0dXJuIG5ldyBILmxKKHRoaXMscy5LcShjKS5DKCIxKGFM
-LkUpIikuYShiKSxzLkMoIkA8YUwuRT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwKZVI6ZnVuY3Rpb24o
-YSxiKXtyZXR1cm4gSC5xQyh0aGlzLGIsbnVsbCxILkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dDpmdW5j
-dGlvbihhLGIpe3JldHVybiBQLlkxKHRoaXMsITAsSC5MaCh0aGlzKS5DKCJhTC5FIikpfSwKYnI6ZnVu
-Y3Rpb24oYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9fQpILm5ILnByb3RvdHlwZT17CkhkOmZ1bmN0aW9u
-KGEsYixjLGQpe3ZhciBzLHI9dGhpcy5iClAuazEociwic3RhcnQiKQpzPXRoaXMuYwppZihzIT1udWxs
-KXtQLmsxKHMsImVuZCIpCmlmKHI+cyl0aHJvdyBILmIoUC5URShyLDAscywic3RhcnQiLG51bGwpKX19
-LApnVUQ6ZnVuY3Rpb24oKXt2YXIgcz1KLkhtKHRoaXMuYSkscj10aGlzLmMKaWYocj09bnVsbHx8cj5z
-KXJldHVybiBzCnJldHVybiByfSwKZ0FzOmZ1bmN0aW9uKCl7dmFyIHM9Si5IbSh0aGlzLmEpLHI9dGhp
-cy5iCmlmKHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdBOmZ1bmN0aW9uKGEpe3ZhciBzLHI9Si5IbSh0
-aGlzLmEpLHE9dGhpcy5iCmlmKHE+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVsbHx8cz49cily
-ZXR1cm4gci1xCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1cm4gcy1xfSwK
-RTpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMscj1zLmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRo
+cytyCmI9Yj4+PjEKaWYoYj09PTApYnJlYWsKcys9c31yZXR1cm4gcn0sClhVKGEsYixjKXt2YXIgcwpp
+ZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9
+YS5pbmRleE9mKGIsYykKcmV0dXJuIHN9LApPWShhLGIpe3JldHVybiB0aGlzLlhVKGEsYiwwKX0sClBr
+KGEsYixjKXt2YXIgcyxyCmlmKGM9PW51bGwpYz1hLmxlbmd0aAplbHNlIGlmKGM8MHx8Yz5hLmxlbmd0
+aCl0aHJvdyBILmIoUC5URShjLDAsYS5sZW5ndGgsbnVsbCxudWxsKSkKcz1iLmxlbmd0aApyPWEubGVu
+Z3RoCmlmKGMrcz5yKWM9ci1zCnJldHVybiBhLmxhc3RJbmRleE9mKGIsYyl9LApjbihhLGIpe3JldHVy
+biB0aGlzLlBrKGEsYixudWxsKX0sCklzKGEsYixjKXt2YXIgcz1hLmxlbmd0aAppZihjPnMpdGhyb3cg
+SC5iKFAuVEUoYywwLHMsbnVsbCxudWxsKSkKcmV0dXJuIEguU1EoYSxiLGMpfSwKdGcoYSxiKXtyZXR1
+cm4gdGhpcy5JcyhhLGIsMCl9LAp3KGEpe3JldHVybiBhfSwKZ2lPKGEpe3ZhciBzLHIscQpmb3Iocz1h
+Lmxlbmd0aCxyPTAscT0wO3E8czsrK3Epe3I9cithLmNoYXJDb2RlQXQocSkmNTM2ODcwOTExCnI9ciso
+KHImNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpyXj1yPj42fXI9cisoKHImNjcxMDg4NjMpPDwzKSY1MzY4
+NzA5MTEKcl49cj4+MTEKcmV0dXJuIHIrKChyJjE2MzgzKTw8MTUpJjUzNjg3MDkxMX0sCmdBKGEpe3Jl
+dHVybiBhLmxlbmd0aH0sCnEoYSxiKXtILklaKGIpCmlmKGI+PWEubGVuZ3RofHwhMSl0aHJvdyBILmIo
+SC51KGEsYikpCnJldHVybiBhW2JdfSwKJGl2WDoxLAokaXFVOjF9CkguQlIucHJvdG90eXBlPXsKZ20o
+YSl7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gbmV3IEguZVQoSi5JVCh0aGlzLmdPTigpKSxzLkMoIkA8
+MT4iKS5LcShzLlFbMV0pLkMoImVUPDEsMj4iKSl9LApnQShhKXtyZXR1cm4gSi5IbSh0aGlzLmdPTigp
+KX0sCmdsMChhKXtyZXR1cm4gSi51VSh0aGlzLmdPTigpKX0sCmdvcihhKXtyZXR1cm4gSi5GNyh0aGlz
+LmdPTigpKX0sCmVSKGEsYil7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gSC5HSihKLkE1KHRoaXMuZ09O
+KCksYikscy5jLHMuUVsxXSl9LApFKGEsYil7cmV0dXJuIEguTGgodGhpcykuUVsxXS5hKEouR0EodGhp
+cy5nT04oKSxiKSl9LAp3KGEpe3JldHVybiBKLncodGhpcy5nT04oKSl9fQpILmVULnByb3RvdHlwZT17
+CkYoKXtyZXR1cm4gdGhpcy5hLkYoKX0sCmdsKCl7cmV0dXJuIHRoaXMuJHRpLlFbMV0uYSh0aGlzLmEu
+Z2woKSl9LAokaUFuOjF9CkguWnkucHJvdG90eXBlPXsKZ09OKCl7cmV0dXJuIHRoaXMuYX19Ckgub2wu
+cHJvdG90eXBlPXskaWJROjF9CkguVXEucHJvdG90eXBlPXsKcShhLGIpe3JldHVybiB0aGlzLiR0aS5R
+WzFdLmEoSi54OSh0aGlzLmEsSC5JWihiKSkpfSwKWTUoYSxiLGMpe3ZhciBzPXRoaXMuJHRpCkoudTko
+dGhpcy5hLGIscy5jLmEocy5RWzFdLmEoYykpKX0sCiRpYlE6MSwKJGl6TToxfQpILmpWLnByb3RvdHlw
+ZT17CmRyKGEsYil7cmV0dXJuIG5ldyBILmpWKHRoaXMuYSx0aGlzLiR0aS5DKCJAPDE+IikuS3EoYiku
+QygialY8MSwyPiIpKX0sCmdPTigpe3JldHVybiB0aGlzLmF9fQpILmMucHJvdG90eXBlPXsKdyhhKXt2
+YXIgcz0iTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICIrdGhpcy5hCnJldHVybiBzfX0KSC5xai5wcm90
+b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnEoYSxiKXtyZXR1cm4gQy54Qi5PKHRo
+aXMuYSxILklaKGIpKX19CkguYlEucHJvdG90eXBlPXt9CkguYUwucHJvdG90eXBlPXsKZ20oYSl7dmFy
+IHM9dGhpcwpyZXR1cm4gbmV3IEguYTcocyxzLmdBKHMpLEguTGgocykuQygiYTc8YUwuRT4iKSl9LApn
+bDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKayhhLGIpe3ZhciBzLHIscSxwPXRoaXMsbz1w
+LmdBKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09PTApcmV0dXJuIiIKcz1ILkVqKHAuRSgwLDApKQpp
+ZihvIT09cC5nQShwKSl0aHJvdyBILmIoUC5hNChwKSkKZm9yKHI9cyxxPTE7cTxvOysrcSl7cj1yK2Ir
+SC5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ0EocCkpdGhyb3cgSC5iKFAuYTQocCkpfXJldHVybiByLmNo
+YXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9MCxyPSIiO3E8bzsrK3Epe3IrPUguRWoocC5FKDAs
+cSkpCmlmKG8hPT1wLmdBKHApKXRocm93IEguYihQLmE0KHApKX1yZXR1cm4gci5jaGFyQ29kZUF0KDAp
+PT0wP3I6cn19LApldihhLGIpe3JldHVybiB0aGlzLkdHKDAsSC5MaCh0aGlzKS5DKCJhMihhTC5FKSIp
+LmEoYikpfSwKRTIoYSxiLGMpe3ZhciBzPUguTGgodGhpcykKcmV0dXJuIG5ldyBILmxKKHRoaXMscy5L
+cShjKS5DKCIxKGFMLkUpIikuYShiKSxzLkMoIkA8YUwuRT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwK
+ZVIoYSxiKXtyZXR1cm4gSC5xQyh0aGlzLGIsbnVsbCxILkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dChh
+LGIpe3JldHVybiBQLlkxKHRoaXMsITAsSC5MaCh0aGlzKS5DKCJhTC5FIikpfSwKYnIoYSl7cmV0dXJu
+IHRoaXMudHQoYSwhMCl9fQpILm5ILnByb3RvdHlwZT17CkhkKGEsYixjLGQpe3ZhciBzLHI9dGhpcy5i
+ClAuazEociwic3RhcnQiKQpzPXRoaXMuYwppZihzIT1udWxsKXtQLmsxKHMsImVuZCIpCmlmKHI+cyl0
+aHJvdyBILmIoUC5URShyLDAscywic3RhcnQiLG51bGwpKX19LApnVUQoKXt2YXIgcz1KLkhtKHRoaXMu
+YSkscj10aGlzLmMKaWYocj09bnVsbHx8cj5zKXJldHVybiBzCnJldHVybiByfSwKZ0FzKCl7dmFyIHM9
+Si5IbSh0aGlzLmEpLHI9dGhpcy5iCmlmKHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdBKGEpe3ZhciBz
+LHI9Si5IbSh0aGlzLmEpLHE9dGhpcy5iCmlmKHE+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVs
+bHx8cz49cilyZXR1cm4gci1xCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1
+cm4gcy1xfSwKRShhLGIpe3ZhciBzPXRoaXMscj1zLmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRo
 cm93IEguYihQLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX0sCmVS
-OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPXRoaXMKUC5rMShiLCJjb3VudCIpCnM9cS5iK2IKcj1xLmMK
-aWYociE9bnVsbCYmcz49cilyZXR1cm4gbmV3IEguTUIocS4kdGkuQygiTUI8MT4iKSkKcmV0dXJuIEgu
-cUMocS5hLHMscixxLiR0aS5jKX0sCnR0OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHA9dGhpcyxvPXAu
-YixuPXAuYSxtPUouVTYobiksbD1tLmdBKG4pLGs9cC5jCmlmKGshPW51bGwmJms8bClsPWsKcz1sLW8K
-aWYoczw9MCl7bj1KLlFpKDAscC4kdGkuYykKcmV0dXJuIG59cj1QLk84KHMsbS5FKG4sbyksITEscC4k
-dGkuYykKZm9yKHE9MTtxPHM7KytxKXtDLk5tLlk1KHIscSxtLkUobixvK3EpKQppZihtLmdBKG4pPGwp
-dGhyb3cgSC5iKFAuYTQocCkpfXJldHVybiByfX0KSC5hNy5wcm90b3R5cGU9ewpnbDpmdW5jdGlvbigp
-e3JldHVybiB0aGlzLiR0aS5jLmEodGhpcy5kKX0sCkY6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1y
-LmEscD1KLlU2KHEpLG89cC5nQShxKQppZihyLmIhPT1vKXRocm93IEguYihQLmE0KHEpKQpzPXIuYwpp
-ZihzPj1vKXtyLnNJKG51bGwpCnJldHVybiExfXIuc0kocC5FKHEscykpOysrci5jCnJldHVybiEwfSwK
-c0k6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KSC5pMS5w
-cm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcgSC5NSChK
-LklUKHRoaXMuYSksdGhpcy5iLHMuQygiQDwxPiIpLktxKHMuUVsxXSkuQygiTUg8MSwyPiIpKX0sCmdB
-OmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIEou
-dVUodGhpcy5hKX0sCkU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIp
-KX19CkgueHkucHJvdG90eXBlPXskaWJROjF9CkguTUgucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3Zh
-ciBzPXRoaXMscj1zLmIKaWYoci5GKCkpe3Muc0kocy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0ko
-bnVsbCkKcmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aS5RWzFdLmEodGhpcy5h
-KX0sCnNJOmZ1bmN0aW9uKGEpe3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9fQpILmxKLnByb3Rv
-dHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApFOmZ1bmN0aW9uKGEsYil7
-cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpILlU1LnByb3RvdHlwZT17CmdtOmZ1bmN0
-aW9uKGEpe3JldHVybiBuZXcgSC5TTyhKLklUKHRoaXMuYSksdGhpcy5iLHRoaXMuJHRpLkMoIlNPPDE+
-IikpfX0KSC5TTy5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10
-aGlzLmI7cy5GKCk7KWlmKEgub1Qoci4kMShzLmdsKCkpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsOmZ1
-bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KSC5BTS5wcm90b3R5cGU9ewplUjpmdW5jdGlvbihh
-LGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguQU0odGhpcy5hLHRoaXMuYitiLEguTGgodGhp
-cykuQygiQU08MT4iKSl9LApnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguVTEoSi5JVCh0aGlzLmEp
-LHRoaXMuYixILkxoKHRoaXMpLkMoIlUxPDE+IikpfX0KSC5kNS5wcm90b3R5cGU9ewpnQTpmdW5jdGlv
-bihhKXt2YXIgcz1KLkhtKHRoaXMuYSktdGhpcy5iCmlmKHM+PTApcmV0dXJuIHMKcmV0dXJuIDB9LApl
-UjpmdW5jdGlvbihhLGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguZDUodGhpcy5hLHRoaXMu
-YitiLHRoaXMuJHRpKX0sCiRpYlE6MX0KSC5VMS5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7dmFyIHMs
-cgpmb3Iocz10aGlzLmEscj0wO3I8dGhpcy5iOysrcilzLkYoKQp0aGlzLmI9MApyZXR1cm4gcy5GKCl9
-LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2woKX19CkguTUIucHJvdG90eXBlPXsKZ206ZnVu
-Y3Rpb24oYSl7cmV0dXJuIEMuR3d9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LApnQTpmdW5jdGlv
-bihhKXtyZXR1cm4gMH0sCkU6ZnVuY3Rpb24oYSxiKXt0aHJvdyBILmIoUC5URShiLDAsMCwiaW5kZXgi
-LG51bGwpKX0sCmVSOmZ1bmN0aW9uKGEsYil7UC5rMShiLCJjb3VudCIpCnJldHVybiB0aGlzfX0KSC5G
-dS5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7cmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3Rocm93IEgu
-YihILldwKCkpfSwKJGlBbjoxfQpILnU2LnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBu
-ZXcgSC5KQihKLklUKHRoaXMuYSksdGhpcy4kdGkuQygiSkI8MT4iKSl9fQpILkpCLnByb3RvdHlwZT17
-CkY6ZnVuY3Rpb24oKXt2YXIgcyxyCmZvcihzPXRoaXMuYSxyPXRoaXMuJHRpLmM7cy5GKCk7KWlmKHIu
-YihzLmdsKCkpKXJldHVybiEwCnJldHVybiExfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGku
-Yy5hKHRoaXMuYS5nbCgpKX0sCiRpQW46MX0KSC5TVS5wcm90b3R5cGU9e30KSC5SZS5wcm90b3R5cGU9
-ewpZNTpmdW5jdGlvbihhLGIsYyl7SC5MaCh0aGlzKS5DKCJSZS5FIikuYShjKQp0aHJvdyBILmIoUC5M
-NCgiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpKX19CkgudzIucHJvdG90eXBlPXt9
-Ckgud3YucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuX2hhc2hDb2RlCmlmKHMh
-PW51bGwpcmV0dXJuIHMKcz02NjQ1OTcqSi5oZih0aGlzLmEpJjUzNjg3MDkxMQp0aGlzLl9oYXNoQ29k
-ZT1zCnJldHVybiBzfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4nU3ltYm9sKCInK0guRWoodGhpcy5hKSsn
-IiknfSwKRE46ZnVuY3Rpb24oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNl
-b2YgSC53diYmdGhpcy5hPT1iLmF9LAokaUdEOjF9CkguUUMucHJvdG90eXBlPXt9CkguUEQucHJvdG90
-eXBlPXt9CkguV1UucHJvdG90eXBlPXsKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdBKHRoaXMp
-PT09MH0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAubk8odGhpcyl9LApZNTpmdW5jdGlvbihhLGIsYyl7
-dmFyIHM9SC5MaCh0aGlzKQpzLmMuYShiKQpzLlFbMV0uYShjKQpILmRjKCl9LApnUHU6ZnVuY3Rpb24o
-YSl7cmV0dXJuIHRoaXMucTQoMCxILkxoKHRoaXMpLkMoIk4zPDEsMj4iKSl9LApxNDpmdW5jdGlvbihh
-LGIpe3ZhciBzPXRoaXMKcmV0dXJuIFAubDAoZnVuY3Rpb24oKXt2YXIgcj1hCnZhciBxPTAscD0xLG8s
-bixtLGwsawpyZXR1cm4gZnVuY3Rpb24gJGFzeW5jJGdQdShjLGQpe2lmKGM9PT0xKXtvPWQKcT1wfXdo
-aWxlKHRydWUpc3dpdGNoKHEpe2Nhc2UgMDpuPXMuZ3ZjKCksbj1uLmdtKG4pLG09SC5MaChzKSxtPW0u
-QygiQDwxPiIpLktxKG0uUVsxXSkuQygiTjM8MSwyPiIpCmNhc2UgMjppZighbi5GKCkpe3E9MwpicmVh
-a31sPW4uZ2woKQprPXMucSgwLGwpCmsudG9TdHJpbmcKcT00CnJldHVybiBuZXcgUC5OMyhsLGssbSkK
-Y2FzZSA0OnE9MgpicmVhawpjYXNlIDM6cmV0dXJuIFAuVGgoKQpjYXNlIDE6cmV0dXJuIFAuWW0obyl9
-fX0sYil9LAokaVowOjF9CkguTFAucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
-YX0sCng0OmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4hMQppZigiX19wcm90
-b19fIj09PWEpcmV0dXJuITEKcmV0dXJuIHRoaXMuYi5oYXNPd25Qcm9wZXJ0eShhKX0sCnE6ZnVuY3Rp
-b24oYSxiKXtpZighdGhpcy54NChiKSlyZXR1cm4gbnVsbApyZXR1cm4gdGhpcy5xUChiKX0sCnFQOmZ1
-bmN0aW9uKGEpe3JldHVybiB0aGlzLmJbSC5uKGEpXX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEs
-cCxvPUguTGgodGhpcykKby5DKCJ+KDEsMikiKS5hKGIpCnM9dGhpcy5jCmZvcihyPXMubGVuZ3RoLG89
-by5RWzFdLHE9MDtxPHI7KytxKXtwPXNbcV0KYi4kMihwLG8uYSh0aGlzLnFQKHApKSl9fSwKZ3ZjOmZ1
-bmN0aW9uKCl7cmV0dXJuIG5ldyBILlhSKHRoaXMsSC5MaCh0aGlzKS5DKCJYUjwxPiIpKX19CkguWFIu
-cHJvdG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hLmMKcmV0dXJuIG5ldyBKLm0xKHMs
-cy5sZW5ndGgsSC50NihzKS5DKCJtMTwxPiIpKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEu
-Yy5sZW5ndGh9fQpILkxJLnByb3RvdHlwZT17CmdXYTpmdW5jdGlvbigpe3ZhciBzPXRoaXMuYQpyZXR1
-cm4gc30sCmduZDpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG89dGhpcwppZihvLmM9PT0xKXJldHVybiBD
-LmhVCnM9by5kCnI9cy5sZW5ndGgtby5lLmxlbmd0aC1vLmYKaWYocj09PTApcmV0dXJuIEMuaFUKcT1b
-XQpmb3IocD0wO3A8cjsrK3Ape2lmKHA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMscCkKcS5wdXNoKHNb
-cF0pfXJldHVybiBKLnpDKHEpfSwKZ1ZtOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRo
-aXMKaWYoay5jIT09MClyZXR1cm4gQy5XTwpzPWsuZQpyPXMubGVuZ3RoCnE9ay5kCnA9cS5sZW5ndGgt
-ci1rLmYKaWYocj09PTApcmV0dXJuIEMuV08Kbz1uZXcgSC5ONSh0LmVvKQpmb3Iobj0wO248cjsrK24p
-e2lmKG4+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsbikKbT1zW25dCmw9cCtuCmlmKGw8MHx8bD49cS5s
-ZW5ndGgpcmV0dXJuIEguT0gocSxsKQpvLlk1KDAsbmV3IEgud3YobSkscVtsXSl9cmV0dXJuIG5ldyBI
-LlBEKG8sdC5nRil9LAokaXZROjF9CkguQ2oucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIg
-cwpILm4oYSkKcz10aGlzLmEKcy5iPXMuYisiJCIrYQpDLk5tLmkodGhpcy5iLGEpCkMuTm0uaSh0aGlz
-LmMsYik7KytzLmF9LAokUzoxMX0KSC5mOS5wcm90b3R5cGU9ewpxUzpmdW5jdGlvbihhKXt2YXIgcyxy
-LHE9dGhpcyxwPW5ldyBSZWdFeHAocS5hKS5leGVjKGEpCmlmKHA9PW51bGwpcmV0dXJuIG51bGwKcz1P
-YmplY3QuY3JlYXRlKG51bGwpCnI9cS5iCmlmKHIhPT0tMSlzLmFyZ3VtZW50cz1wW3IrMV0Kcj1xLmMK
-aWYociE9PS0xKXMuYXJndW1lbnRzRXhwcj1wW3IrMV0Kcj1xLmQKaWYociE9PS0xKXMuZXhwcj1wW3Ir
-MV0Kcj1xLmUKaWYociE9PS0xKXMubWV0aG9kPXBbcisxXQpyPXEuZgppZihyIT09LTEpcy5yZWNlaXZl
-cj1wW3IrMV0KcmV0dXJuIHN9fQpILlcwLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhp
-cy5iCmlmKHM9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4iTm9T
-dWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK3MrIicgb24gbnVsbCJ9fQpILmF6LnBy
-b3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlzLHE9Ik5vU3VjaE1ldGhvZEVycm9yOiBt
-ZXRob2Qgbm90IGZvdW5kOiAnIixwPXIuYgppZihwPT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJv
-cjogIityLmEKcz1yLmMKaWYocz09bnVsbClyZXR1cm4gcStwKyInICgiK3IuYSsiKSIKcmV0dXJuIHEr
-cCsiJyBvbiAnIitzKyInICgiK3IuYSsiKSJ9fQpILnZWLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7
-dmFyIHM9dGhpcy5hCnJldHVybiBzLmxlbmd0aD09PTA/IkVycm9yIjoiRXJyb3I6ICIrc319CkgudGUu
-cHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iVGhyb3cgb2YgbnVsbCAoJyIrKHRoaXMuYT09
-PW51bGw/Im51bGwiOiJ1bmRlZmluZWQiKSsiJyBmcm9tIEphdmFTY3JpcHQpIn0sCiRpUno6MX0KSC5i
-cS5wcm90b3R5cGU9e30KSC5YTy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5i
-CmlmKHIhPW51bGwpcmV0dXJuIHIKcj10aGlzLmEKcz1yIT09bnVsbCYmdHlwZW9mIHI9PT0ib2JqZWN0
-Ij9yLnN0YWNrOm51bGwKcmV0dXJuIHRoaXMuYj1zPT1udWxsPyIiOnN9LAokaUd6OjF9CkguVHAucHJv
-dG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmNvbnN0cnVjdG9yLHI9cz09bnVsbD9udWxs
-OnMubmFtZQpyZXR1cm4iQ2xvc3VyZSAnIitILk5RKHI9PW51bGw/InVua25vd24iOnIpKyInIn0sCiRp
-RUg6MSwKZ0t1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LAokQzoiJDEiLAokUjoxLAokRDpudWxsfQpI
-LmxjLnByb3RvdHlwZT17fQpILnp4LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy4k
-c3RhdGljX25hbWUKaWYocz09bnVsbClyZXR1cm4iQ2xvc3VyZSBvZiB1bmtub3duIHN0YXRpYyBtZXRo
-b2QiCnJldHVybiJDbG9zdXJlICciK0guTlEocykrIicifX0KSC5yVC5wcm90b3R5cGU9ewpETjpmdW5j
-dGlvbihhLGIpe3ZhciBzPXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZihzPT09YilyZXR1cm4hMApp
-ZighKGIgaW5zdGFuY2VvZiBILnJUKSlyZXR1cm4hMQpyZXR1cm4gcy5hPT09Yi5hJiZzLiRfdGFyZ2V0
-PT09Yi4kX3RhcmdldCYmcy5iPT09Yi5ifSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5iCmlm
-KHI9PW51bGwpcz1ILmVRKHRoaXMuYSkKZWxzZSBzPXR5cGVvZiByIT09Im9iamVjdCI/Si5oZihyKTpI
-LmVRKHIpCnJldHVybihzXkguZVEodGhpcy4kX3RhcmdldCkpPj4+MH0sCnc6ZnVuY3Rpb24oYSl7dmFy
-IHM9dGhpcy5iCmlmKHM9PW51bGwpcz10aGlzLmEKcmV0dXJuIkNsb3N1cmUgJyIrdGhpcy4kX25hbWUr
-Iicgb2YgIisoIkluc3RhbmNlIG9mICciK0gubGgodC5LLmEocykpKyInIil9fQpILkVxLnByb3RvdHlw
-ZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlJ1bnRpbWVFcnJvcjogIit0aGlzLmF9fQpILmtZLnByb3Rv
-dHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrUC5obCh0aGlzLmEp
-fX0KSC5rci5wcm90b3R5cGU9e30KSC5ONS5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4g
-dGhpcy5hfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmE9PT0wfSwKZ3ZjOmZ1bmN0aW9uKCl7
-cmV0dXJuIG5ldyBILmk1KHRoaXMsSC5MaCh0aGlzKS5DKCJpNTwxPiIpKX0sCng0OmZ1bmN0aW9uKGEp
-e3ZhciBzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiExCnJldHVybiB0aGlzLlh1KHMsYSl9LApxOmZ1
-bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbz10aGlzLG49bnVsbAppZih0eXBlb2YgYj09InN0cmluZyIp
-e3M9by5iCmlmKHM9PW51bGwpcmV0dXJuIG4Kcj1vLmoyKHMsYikKcT1yPT1udWxsP246ci5iCnJldHVy
-biBxfWVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYweDNmZmZmZmYpPT09Yil7cD1vLmMKaWYo
-cD09bnVsbClyZXR1cm4gbgpyPW8uajIocCxiKQpxPXI9PW51bGw/bjpyLmIKcmV0dXJuIHF9ZWxzZSBy
-ZXR1cm4gby5hYShiKX0sCmFhOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT10aGlzLmQKaWYocT09bnVsbCly
-ZXR1cm4gbnVsbApzPXRoaXMuQnQocSxKLmhmKGEpJjB4M2ZmZmZmZikKcj10aGlzLkZoKHMsYSkKaWYo
-cjwwKXJldHVybiBudWxsCnJldHVybiBzW3JdLmJ9LApZNTpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixx
-LHAsbyxuLG09dGhpcyxsPUguTGgobSkKbC5jLmEoYikKbC5RWzFdLmEoYykKaWYodHlwZW9mIGI9PSJz
-dHJpbmciKXtzPW0uYgptLkVIKHM9PW51bGw/bS5iPW0ueksoKTpzLGIsYyl9ZWxzZSBpZih0eXBlb2Yg
-Yj09Im51bWJlciImJihiJjB4M2ZmZmZmZik9PT1iKXtyPW0uYwptLkVIKHI9PW51bGw/bS5jPW0uekso
-KTpyLGIsYyl9ZWxzZXtxPW0uZAppZihxPT1udWxsKXE9bS5kPW0ueksoKQpwPUouaGYoYikmMHgzZmZm
-ZmZmCm89bS5CdChxLHApCmlmKG89PW51bGwpbS5FSShxLHAsW20uSG4oYixjKV0pCmVsc2V7bj1tLkZo
-KG8sYikKaWYobj49MClvW25dLmI9YwplbHNlIG8ucHVzaChtLkhuKGIsYykpfX19LApLOmZ1bmN0aW9u
-KGEsYil7dmFyIHMscixxPXRoaXMKSC5MaChxKS5DKCJ+KDEsMikiKS5hKGIpCnM9cS5lCnI9cS5yCmZv
-cig7cyE9bnVsbDspe2IuJDIocy5hLHMuYikKaWYociE9PXEucil0aHJvdyBILmIoUC5hNChxKSkKcz1z
-LmN9fSwKRUg6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHI9dGhpcyxxPUguTGgocikKcS5jLmEoYikKcS5R
-WzFdLmEoYykKcz1yLmoyKGEsYikKaWYocz09bnVsbClyLkVJKGEsYixyLkhuKGIsYykpCmVsc2Ugcy5i
-PWN9LAprczpmdW5jdGlvbigpe3RoaXMucj10aGlzLnIrMSY2NzEwODg2M30sCkhuOmZ1bmN0aW9uKGEs
-Yil7dmFyIHM9dGhpcyxyPUguTGgocykscT1uZXcgSC52aChyLmMuYShhKSxyLlFbMV0uYShiKSkKaWYo
-cy5lPT1udWxsKXMuZT1zLmY9cQplbHNle3I9cy5mCnIudG9TdHJpbmcKcS5kPXIKcy5mPXIuYz1xfSsr
-cy5hCnMua3MoKQpyZXR1cm4gcX0sCkZoOmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZihhPT1udWxsKXJl
-dHVybi0xCnM9YS5sZW5ndGgKZm9yKHI9MDtyPHM7KytyKWlmKEouUk0oYVtyXS5hLGIpKXJldHVybiBy
-CnJldHVybi0xfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5uTyh0aGlzKX0sCmoyOmZ1bmN0aW9uKGEs
-Yil7cmV0dXJuIGFbYl19LApCdDpmdW5jdGlvbihhLGIpe3JldHVybiBhW2JdfSwKRUk6ZnVuY3Rpb24o
-YSxiLGMpe2FbYl09Y30sCnJuOmZ1bmN0aW9uKGEsYil7ZGVsZXRlIGFbYl19LApYdTpmdW5jdGlvbihh
-LGIpe3JldHVybiB0aGlzLmoyKGEsYikhPW51bGx9LAp6SzpmdW5jdGlvbigpe3ZhciBzPSI8bm9uLWlk
-ZW50aWZpZXIta2V5PiIscj1PYmplY3QuY3JlYXRlKG51bGwpCnRoaXMuRUkocixzLHIpCnRoaXMucm4o
-cixzKQpyZXR1cm4gcn0sCiRpRm86MX0KSC52aC5wcm90b3R5cGU9e30KSC5pNS5wcm90b3R5cGU9ewpn
-QTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmF9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
-YS5hPT09MH0sCmdtOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYSxyPW5ldyBILk42KHMscy5yLHRoaXMu
-JHRpLkMoIk42PDE+IikpCnIuYz1zLmUKcmV0dXJuIHJ9LAp0ZzpmdW5jdGlvbihhLGIpe3JldHVybiB0
-aGlzLmEueDQoYil9fQpILk42LnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0s
-CkY6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1yLmEKaWYoci5iIT09cS5yKXRocm93IEguYihQLmE0
-KHEpKQpzPXIuYwppZihzPT1udWxsKXtyLnNxWShudWxsKQpyZXR1cm4hMX1lbHNle3Iuc3FZKHMuYSkK
-ci5jPXMuYwpyZXR1cm4hMH19LApzcVk6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/Iiku
-YShhKX0sCiRpQW46MX0KSC5kQy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5h
-KGEpfSwKJFM6NH0KSC53Ti5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEo
-YSxiKX0sCiRTOjUwfQpILlZYLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEo
-SC5uKGEpKX0sCiRTOjIxfQpILlZSLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlJlZ0V4
-cC8iK3RoaXMuYSsiLyIrdGhpcy5iLmZsYWdzfSwKZ0hjOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcyxyPXMu
-YwppZihyIT1udWxsKXJldHVybiByCnI9cy5iCnJldHVybiBzLmM9SC52NChzLmEsci5tdWx0aWxpbmUs
-IXIuaWdub3JlQ2FzZSxyLnVuaWNvZGUsci5kb3RBbGwsITApfSwKZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1
-cm4gbmV3IEguS1codGhpcyxiLDApfSwKVVo6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXQuSy5hKHRoaXMu
-Z0hjKCkpCnIubGFzdEluZGV4PWIKcz1yLmV4ZWMoYSkKaWYocz09bnVsbClyZXR1cm4gbnVsbApyZXR1
-cm4gbmV3IEguRUsocyl9LAokaXZYOjEsCiRpd0w6MX0KSC5FSy5wcm90b3R5cGU9ewpxOmZ1bmN0aW9u
-KGEsYil7dmFyIHMKSC5JWihiKQpzPXRoaXMuYgppZihiPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLGIp
-CnJldHVybiBzW2JdfSwKJGlPZDoxLAokaWliOjF9CkguS1cucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24o
-YSl7cmV0dXJuIG5ldyBILlBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19CkguUGIucHJvdG90eXBlPXsK
-Z2w6ZnVuY3Rpb24oKXtyZXR1cm4gdC5jei5hKHRoaXMuZCl9LApGOmZ1bmN0aW9uKCl7dmFyIHMscixx
-LHAsbyxuLG09dGhpcyxsPW0uYgppZihsPT1udWxsKXJldHVybiExCnM9bS5jCnI9bC5sZW5ndGgKaWYo
-czw9cil7cT1tLmEKcD1xLlVaKGwscykKaWYocCE9bnVsbCl7bS5kPXAKcz1wLmIKbz1zLmluZGV4Cm49
-bytzWzBdLmxlbmd0aAppZihvPT09bil7aWYocS5iLnVuaWNvZGUpe3M9bS5jCnE9cysxCmlmKHE8cil7
-cz1DLnhCLk8obCxzKQppZihzPj01NTI5NiYmczw9NTYzMTkpe3M9Qy54Qi5PKGwscSkKcz1zPj01NjMy
-MCYmczw9NTczNDN9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKbj0ocz9uKzE6bikrMX1tLmM9
-bgpyZXR1cm4hMH19bS5iPW0uZD1udWxsCnJldHVybiExfSwKJGlBbjoxfQpILnRRLnByb3RvdHlwZT17
-CnE6ZnVuY3Rpb24oYSxiKXtILklaKGIpCmlmKGIhPT0wKUgudihQLk83KGIsbnVsbCkpCnJldHVybiB0
-aGlzLmN9LAokaU9kOjF9CkgudW4ucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBI
-LlNkKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19CkguU2QucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3Zh
-ciBzLHIscT10aGlzLHA9cS5jLG89cS5iLG49by5sZW5ndGgsbT1xLmEsbD1tLmxlbmd0aAppZihwK24+
-bCl7cS5kPW51bGwKcmV0dXJuITF9cz1tLmluZGV4T2YobyxwKQppZihzPDApe3EuYz1sKzEKcS5kPW51
-bGwKcmV0dXJuITF9cj1zK24KcS5kPW5ldyBILnRRKHMsbykKcS5jPXI9PT1xLmM/cisxOnIKcmV0dXJu
-ITB9LApnbDpmdW5jdGlvbigpe3ZhciBzPXRoaXMuZApzLnRvU3RyaW5nCnJldHVybiBzfSwKJGlBbjox
-fQpILkVULnByb3RvdHlwZT17JGlFVDoxLCRpQVM6MX0KSC5MWi5wcm90b3R5cGU9ewpnQTpmdW5jdGlv
-bihhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhqOjF9CkguRGcucHJvdG90eXBlPXsKcTpmdW5jdGlvbihh
-LGIpe0guSVooYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwKWTU6ZnVuY3Rpb24oYSxi
-LGMpe0guclYoYykKSC5vZChiLGEsYS5sZW5ndGgpCmFbYl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpN
-OjF9CkguUGcucHJvdG90eXBlPXsKWTU6ZnVuY3Rpb24oYSxiLGMpe0guSVooYykKSC5vZChiLGEsYS5s
-ZW5ndGgpCmFbYl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkgueGoucHJvdG90eXBlPXsKcTpm
-dW5jdGlvbihhLGIpe0guSVooYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5kRS5w
-cm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC5JWihiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJu
-IGFbYl19fQpILlpBLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILklaKGIpCkgub2QoYixhLGEu
-bGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguZFQucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0guSVoo
-YikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5QcS5wcm90b3R5cGU9ewpxOmZ1bmN0
-aW9uKGEsYil7SC5JWihiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILmVFLnByb3Rv
-dHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILkla
-KGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguVjYucHJvdG90eXBlPXsKZ0E6ZnVu
-Y3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe0guSVooYikKSC5vZChiLGEs
-YS5sZW5ndGgpCnJldHVybiBhW2JdfSwKJGluNjoxfQpILlJHLnByb3RvdHlwZT17fQpILlZQLnByb3Rv
-dHlwZT17fQpILldCLnByb3RvdHlwZT17fQpILlpHLnByb3RvdHlwZT17fQpILkpjLnByb3RvdHlwZT17
-CkM6ZnVuY3Rpb24oYSl7cmV0dXJuIEguY0Uodi50eXBlVW5pdmVyc2UsdGhpcyxhKX0sCktxOmZ1bmN0
-aW9uKGEpe3JldHVybiBILnY1KHYudHlwZVVuaXZlcnNlLHRoaXMsYSl9fQpILkcucHJvdG90eXBlPXt9
-Ckgua1MucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfX0KSC5pTS5wcm90b3R5
-cGU9e30KUC50aC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEscj1zLmEKcy5h
-PW51bGwKci4kMCgpfSwKJFM6MTN9ClAuaGEucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMs
-cgp0aGlzLmEuYT10Lk0uYShhKQpzPXRoaXMuYgpyPXRoaXMuYwpzLmZpcnN0Q2hpbGQ/cy5yZW1vdmVD
-aGlsZChyKTpzLmFwcGVuZENoaWxkKHIpfSwKJFM6NDF9ClAuVnMucHJvdG90eXBlPXsKJDA6ZnVuY3Rp
-b24oKXt0aGlzLmEuJDAoKX0sCiRDOiIkMCIsCiRSOjAsCiRTOjE1fQpQLkZ0LnByb3RvdHlwZT17CiQw
-OmZ1bmN0aW9uKCl7dGhpcy5hLiQwKCl9LAokQzoiJDAiLAokUjowLAokUzoxNX0KUC5XMy5wcm90b3R5
-cGU9ewpDWTpmdW5jdGlvbihhLGIpe2lmKHNlbGYuc2V0VGltZW91dCE9bnVsbClzZWxmLnNldFRpbWVv
-dXQoSC50UihuZXcgUC55SCh0aGlzLGIpLDApLGEpCmVsc2UgdGhyb3cgSC5iKFAuTDQoImBzZXRUaW1l
-b3V0KClgIG5vdCBmb3VuZC4iKSl9fQpQLnlILnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5i
-LiQwKCl9LAokQzoiJDAiLAokUjowLAokUzowfQpQLmloLnByb3RvdHlwZT17CmFNOmZ1bmN0aW9uKGEs
-Yil7dmFyIHMscj10aGlzLHE9ci4kdGkKcS5DKCIxLz8iKS5hKGIpCmlmKGI9PW51bGwpYj1xLmMuYShi
-KQppZighci5iKXIuYS5YZihiKQplbHNle3M9ci5hCmlmKHEuQygiYjg8MT4iKS5iKGIpKXMuY1UoYikK
-ZWxzZSBzLlgyKHEuYy5hKGIpKX19LAp3MDpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMuYQppZih0aGlz
-LmIpcy5aTChhLGIpCmVsc2Ugcy5OayhhLGIpfX0KUC5XTS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh
-KXtyZXR1cm4gdGhpcy5hLiQyKDAsYSl9LAokUzo1MX0KUC5TWC5wcm90b3R5cGU9ewokMjpmdW5jdGlv
-bihhLGIpe3RoaXMuYS4kMigxLG5ldyBILmJxKGEsdC5sLmEoYikpKX0sCiRDOiIkMiIsCiRSOjIsCiRT
-OjUzfQpQLkdzLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5hKEguSVooYSksYil9LAok
-Uzo0NX0KUC5GeS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJJdGVyYXRpb25NYXJrZXIo
-Iit0aGlzLmIrIiwgIitILkVqKHRoaXMuYSkrIikifX0KUC5HVi5wcm90b3R5cGU9ewpnbDpmdW5jdGlv
-bigpe3ZhciBzPXRoaXMuYwppZihzPT1udWxsKXJldHVybiB0aGlzLiR0aS5jLmEodGhpcy5iKQpyZXR1
-cm4gcy5nbCgpfSwKRjpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMKZm9yKHM9bS4kdGku
-QygiQW48MT4iKTshMDspe3I9bS5jCmlmKHIhPW51bGwpaWYoci5GKCkpcmV0dXJuITAKZWxzZSBtLnNY
-OShudWxsKQpxPWZ1bmN0aW9uKGEsYixjKXt2YXIgbCxrPWIKd2hpbGUodHJ1ZSl0cnl7cmV0dXJuIGEo
-ayxsKX1jYXRjaChqKXtsPWoKaz1jfX0obS5hLDAsMSkKaWYocSBpbnN0YW5jZW9mIFAuRnkpe3A9cS5i
-CmlmKHA9PT0yKXtvPW0uZAppZihvPT1udWxsfHxvLmxlbmd0aD09PTApe20uc0VDKG51bGwpCnJldHVy
-biExfWlmKDA+PW8ubGVuZ3RoKXJldHVybiBILk9IKG8sLTEpCm0uYT1vLnBvcCgpCmNvbnRpbnVlfWVs
-c2V7cj1xLmEKaWYocD09PTMpdGhyb3cgcgplbHNle249cy5hKEouSVQocikpCmlmKG4gaW5zdGFuY2Vv
-ZiBQLkdWKXtyPW0uZAppZihyPT1udWxsKXI9bS5kPVtdCkMuTm0uaShyLG0uYSkKbS5hPW4uYQpjb250
-aW51ZX1lbHNle20uc1g5KG4pCmNvbnRpbnVlfX19fWVsc2V7bS5zRUMocSkKcmV0dXJuITB9fXJldHVy
-biExfSwKc0VDOmZ1bmN0aW9uKGEpe3RoaXMuYj10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LApzWDk6ZnVu
-Y3Rpb24oYSl7dGhpcy5jPXRoaXMuJHRpLkMoIkFuPDE+PyIpLmEoYSl9LAokaUFuOjF9ClAucTQucHJv
-dG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLkdWKHRoaXMuYSgpLHRoaXMuJHRpLkMo
-IkdWPDE+IikpfX0KUC5Ddy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBILkVqKHRoaXMu
-YSl9LAokaVhTOjEsCmdJSTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9fQpQLlBmLnByb3RvdHlwZT17
-CncwOmZ1bmN0aW9uKGEsYil7dmFyIHMKSC5jYihhLCJlcnJvciIsdC5LKQpzPXRoaXMuYQppZihzLmEh
-PT0wKXRocm93IEguYihQLlBWKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKSkKaWYoYj09bnVsbCli
-PVAudjAoYSkKcy5OayhhLGIpfSwKcG06ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudzAoYSxudWxsKX19
-ClAuWmYucHJvdG90eXBlPXsKYU06ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMuJHRpCnIuQygiMS8/
-IikuYShiKQpzPXRoaXMuYQppZihzLmEhPT0wKXRocm93IEguYihQLlBWKCJGdXR1cmUgYWxyZWFkeSBj
-b21wbGV0ZWQiKSkKcy5YZihyLkMoIjEvIikuYShiKSl9fQpQLkZlLnByb3RvdHlwZT17CkhSOmZ1bmN0
-aW9uKGEpe2lmKCh0aGlzLmMmMTUpIT09NilyZXR1cm4hMApyZXR1cm4gdGhpcy5iLmIuYnYodC5hbC5h
-KHRoaXMuZCksYS5hLHQueSx0LkspfSwKS3c6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5lLHI9dC56LHE9
-dC5LLHA9YS5hLG89dGhpcy4kdGkuQygiMi8iKSxuPXRoaXMuYi5iCmlmKHQuYWcuYihzKSlyZXR1cm4g
-by5hKG4ucnAocyxwLGEuYixyLHEsdC5sKSkKZWxzZSByZXR1cm4gby5hKG4uYnYodC5iSS5hKHMpLHAs
-cixxKSl9fQpQLnZzLnByb3RvdHlwZT17ClNxOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscD10aGlz
-LiR0aQpwLktxKGMpLkMoIjEvKDIpIikuYShhKQpzPSQuWDMKaWYocyE9PUMuTlUpe2MuQygiQDwwLz4i
-KS5LcShwLmMpLkMoIjEoMikiKS5hKGEpCmlmKGIhPW51bGwpYj1QLlZIKGIscyl9cj1uZXcgUC52cyhz
-LGMuQygidnM8MD4iKSkKcT1iPT1udWxsPzE6Mwp0aGlzLnhmKG5ldyBQLkZlKHIscSxhLGIscC5DKCJA
-PDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHJ9LApXNzpmdW5jdGlvbihhLGIpe3JldHVy
-biB0aGlzLlNxKGEsbnVsbCxiKX0sClFkOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyPXRoaXMuJHRpCnIu
-S3EoYykuQygiMS8oMikiKS5hKGEpCnM9bmV3IFAudnMoJC5YMyxjLkMoInZzPDA+IikpCnRoaXMueGYo
-bmV3IFAuRmUocywxOSxhLGIsci5DKCJAPDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHN9
-LAp4ZjpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMscT1yLmEKaWYocTw9MSl7YS5hPXQuZS5hKHIuYykK
-ci5jPWF9ZWxzZXtpZihxPT09Mil7cz10LmMuYShyLmMpCnE9cy5hCmlmKHE8NCl7cy54ZihhKQpyZXR1
-cm59ci5hPXEKci5jPXMuY31QLlRrKG51bGwsbnVsbCxyLmIsdC5NLmEobmV3IFAuZGEocixhKSkpfX0s
-CmpROmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD17fQpsLmE9YQppZihhPT1udWxs
-KXJldHVybgpzPW0uYQppZihzPD0xKXtyPXQuZS5hKG0uYykKbS5jPWEKaWYociE9bnVsbCl7cT1hLmEK
-Zm9yKHA9YTtxIT1udWxsO3A9cSxxPW8pbz1xLmEKcC5hPXJ9fWVsc2V7aWYocz09PTIpe249dC5jLmEo
-bS5jKQpzPW4uYQppZihzPDQpe24ualEoYSkKcmV0dXJufW0uYT1zCm0uYz1uLmN9bC5hPW0uTjgoYSkK
-UC5UayhudWxsLG51bGwsbS5iLHQuTS5hKG5ldyBQLm9RKGwsbSkpKX19LAphaDpmdW5jdGlvbigpe3Zh
-ciBzPXQuZS5hKHRoaXMuYykKdGhpcy5jPW51bGwKcmV0dXJuIHRoaXMuTjgocyl9LApOODpmdW5jdGlv
-bihhKXt2YXIgcyxyLHEKZm9yKHM9YSxyPW51bGw7cyE9bnVsbDtyPXMscz1xKXtxPXMuYQpzLmE9cn1y
-ZXR1cm4gcn0sCmVjOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPXRoaXMKcC5hPTEKdHJ5e2EuU3EobmV3
-IFAucFYocCksbmV3IFAuVTcocCksdC5QKX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEpClAucmIo
-bmV3IFAudnIocCxzLHIpKX19LApYMjpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMKci4kdGkuYy5hKGEp
-CnM9ci5haCgpCnIuYT00CnIuYz1hClAuSFoocixzKX0sClpMOmZ1bmN0aW9uKGEsYil7dmFyIHMscixx
-PXRoaXMKdC5sLmEoYikKcz1xLmFoKCkKcj1QLlRsKGEsYikKcS5hPTgKcS5jPXIKUC5IWihxLHMpfSwK
-WGY6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy4kdGkKcy5DKCIxLyIpLmEoYSkKaWYocy5DKCJiODwxPiIp
-LmIoYSkpe3RoaXMuY1UoYSkKcmV0dXJufXRoaXMud1Uocy5jLmEoYSkpfSwKd1U6ZnVuY3Rpb24oYSl7
-dmFyIHM9dGhpcwpzLiR0aS5jLmEoYSkKcy5hPTEKUC5UayhudWxsLG51bGwscy5iLHQuTS5hKG5ldyBQ
-LnJ0KHMsYSkpKX0sCmNVOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMscj1zLiR0aQpyLkMoImI4PDE+Iiku
-YShhKQppZihyLmIoYSkpe2lmKGEuYT09PTgpe3MuYT0xClAuVGsobnVsbCxudWxsLHMuYix0Lk0uYShu
-ZXcgUC5LRihzLGEpKSl9ZWxzZSBQLkE5KGEscykKcmV0dXJufXMuZWMoYSl9LApOazpmdW5jdGlvbihh
-LGIpe3RoaXMuYT0xClAuVGsobnVsbCxudWxsLHRoaXMuYix0Lk0uYShuZXcgUC5aTCh0aGlzLGEsYikp
-KX0sCiRpYjg6MX0KUC5kYS5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe1AuSFoodGhpcy5hLHRoaXMu
-Yil9LAokUzowfQpQLm9RLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7UC5IWih0aGlzLmIsdGhpcy5h
-LmEpfSwKJFM6MH0KUC5wVi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD10aGlz
-LmEKcC5hPTAKdHJ5e3AuWDIocC4kdGkuYy5hKGEpKX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEp
-CnAuWkwocyxyKX19LAokUzoxM30KUC5VNy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3RoaXMu
-YS5aTCh0LksuYShhKSx0LmwuYShiKSl9LAokQzoiJDIiLAokUjoyLAokUzozNH0KUC52ci5wcm90b3R5
-cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS5aTCh0aGlzLmIsdGhpcy5jKX0sCiRTOjB9ClAucnQucHJv
-dG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt0aGlzLmEuWDIodGhpcy5iKX0sCiRTOjB9ClAuS0YucHJvdG90
-eXBlPXsKJDA6ZnVuY3Rpb24oKXtQLkE5KHRoaXMuYix0aGlzLmEpfSwKJFM6MH0KUC5aTC5wcm90b3R5
-cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS5aTCh0aGlzLmIsdGhpcy5jKX0sCiRTOjB9ClAuUlQucHJv
-dG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9bnVsbAp0cnl7cT1t
-LmEuYQpsPXEuYi5iLnp6KHQuZk8uYShxLmQpLHQueil9Y2F0Y2gocCl7cz1ILlJ1KHApCnI9SC50cyhw
-KQpxPW0uYyYmdC5uLmEobS5iLmEuYykuYT09PXMKbz1tLmEKaWYocSlvLmM9dC5uLmEobS5iLmEuYykK
-ZWxzZSBvLmM9UC5UbChzLHIpCm8uYj0hMApyZXR1cm59aWYobCBpbnN0YW5jZW9mIFAudnMmJmwuYT49
-NCl7aWYobC5hPT09OCl7cT1tLmEKcS5jPXQubi5hKGwuYykKcS5iPSEwfXJldHVybn1pZih0LmkuYihs
-KSl7bj1tLmIuYQpxPW0uYQpxLmM9bC5XNyhuZXcgUC5qWihuKSx0LnopCnEuYj0hMX19LAokUzowfQpQ
-LmpaLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF9LAokUzoyOX0KUC5ycS5w
-cm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbixtLGwKdHJ5e3E9dGhpcy5hCnA9
-cS5hCm89cC4kdGkKbj1vLmMKbT1uLmEodGhpcy5iKQpxLmM9cC5iLmIuYnYoby5DKCIyLygxKSIpLmEo
-cC5kKSxtLG8uQygiMi8iKSxuKX1jYXRjaChsKXtzPUguUnUobCkKcj1ILnRzKGwpCnE9dGhpcy5hCnEu
-Yz1QLlRsKHMscikKcS5iPSEwfX0sCiRTOjB9ClAuUlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2
-YXIgcyxyLHEscCxvLG4sbT10aGlzCnRyeXtzPXQubi5hKG0uYS5hLmMpCnA9bS5iCmlmKHAuYS5IUihz
-KSYmcC5hLmUhPW51bGwpe3AuYz1wLmEuS3cocykKcC5iPSExfX1jYXRjaChvKXtyPUguUnUobykKcT1I
-LnRzKG8pCnA9dC5uLmEobS5hLmEuYykKbj1tLmIKaWYocC5hPT09ciluLmM9cAplbHNlIG4uYz1QLlRs
-KHIscSkKbi5iPSEwfX0sCiRTOjB9ClAuT00ucHJvdG90eXBlPXt9ClAucWgucHJvdG90eXBlPXsKZ0E6
-ZnVuY3Rpb24oYSl7dmFyIHMscixxPXRoaXMscD17fSxvPW5ldyBQLnZzKCQuWDMsdC5mSikKcC5hPTAK
-cz1ILkxoKHEpCnI9cy5DKCJ+KDEpPyIpLmEobmV3IFAuQjUocCxxKSkKdC5aLmEobmV3IFAudU8ocCxv
-KSkKVy5KRShxLmEscS5iLHIsITEscy5jKQpyZXR1cm4gb319ClAuQjUucHJvdG90eXBlPXsKJDE6ZnVu
-Y3Rpb24oYSl7SC5MaCh0aGlzLmIpLmMuYShhKTsrK3RoaXMuYS5hfSwKJFM6ZnVuY3Rpb24oKXtyZXR1
-cm4gSC5MaCh0aGlzLmIpLkMoIn4oMSkiKX19ClAudU8ucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2
-YXIgcz10aGlzLmIscj1zLiR0aSxxPXIuQygiMS8iKS5hKHRoaXMuYS5hKSxwPXMuYWgoKQpyLmMuYShx
-KQpzLmE9NApzLmM9cQpQLkhaKHMscCl9LAokUzowfQpQLk1PLnByb3RvdHlwZT17fQpQLmtULnByb3Rv
-dHlwZT17fQpQLnhJLnByb3RvdHlwZT17fQpQLm0wLnByb3RvdHlwZT17JGlRbToxfQpQLkV2LnByb3Rv
-dHlwZT17CiQwOmZ1bmN0aW9uKCl7dmFyIHM9dC5LLmEoSC5iKHRoaXMuYSkpCnMuc3RhY2s9dGhpcy5i
-LncoMCkKdGhyb3cgc30sCiRTOjB9ClAuSmkucHJvdG90eXBlPXsKYkg6ZnVuY3Rpb24oYSl7dmFyIHMs
-cixxLHAsbwp0Lk0uYShhKQp0cnl7aWYoQy5OVT09PSQuWDMpe2EuJDAoKQpyZXR1cm59UC5UOChudWxs
-LG51bGwsdGhpcyxhLHQuSCl9Y2F0Y2gocSl7cz1ILlJ1KHEpCnI9SC50cyhxKQpwPXQuSy5hKHMpCm89
-dC5sLmEocikKUC5TaShwLG8pfX0sCkRsOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscCxvCmMuQygi
-figwKSIpLmEoYSkKYy5hKGIpCnRyeXtpZihDLk5VPT09JC5YMyl7YS4kMShiKQpyZXR1cm59UC55dihu
-dWxsLG51bGwsdGhpcyxhLGIsdC5ILGMpfWNhdGNoKHEpe3M9SC5SdShxKQpyPUgudHMocSkKcD10Lksu
-YShzKQpvPXQubC5hKHIpClAuU2kocCxvKX19LApHWTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuVnAo
-dGhpcyx0Lk0uYShhKSl9LApQeTpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUC5PUih0aGlzLGIuQygi
-figwKSIpLmEoYSksYil9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGx9LAp6ejpmdW5jdGlvbihh
-LGIpe2IuQygiMCgpIikuYShhKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMCgpCnJldHVybiBQLlQ4
-KG51bGwsbnVsbCx0aGlzLGEsYil9LApidjpmdW5jdGlvbihhLGIsYyxkKXtjLkMoIkA8MD4iKS5LcShk
-KS5DKCIxKDIpIikuYShhKQpkLmEoYikKaWYoJC5YMz09PUMuTlUpcmV0dXJuIGEuJDEoYikKcmV0dXJu
-IFAueXYobnVsbCxudWxsLHRoaXMsYSxiLGMsZCl9LApycDpmdW5jdGlvbihhLGIsYyxkLGUsZil7ZC5D
-KCJAPDA+IikuS3EoZSkuS3EoZikuQygiMSgyLDMpIikuYShhKQplLmEoYikKZi5hKGMpCmlmKCQuWDM9
-PT1DLk5VKXJldHVybiBhLiQyKGIsYykKcmV0dXJuIFAuUXgobnVsbCxudWxsLHRoaXMsYSxiLGMsZCxl
-LGYpfSwKTGo6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGIuQygiQDwwPiIpLktxKGMpLktxKGQpLkMo
-IjEoMiwzKSIpLmEoYSl9fQpQLlZwLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
-YS5iSCh0aGlzLmIpfSwKJFM6MH0KUC5PUi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcz10
-aGlzLmMKcmV0dXJuIHRoaXMuYS5EbCh0aGlzLmIscy5hKGEpLHMpfSwKJFM6ZnVuY3Rpb24oKXtyZXR1
-cm4gdGhpcy5jLkMoIn4oMCkiKX19ClAuYjYucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7dmFyIHM9
-dGhpcyxyPW5ldyBQLmxtKHMscy5yLEguTGgocykuQygibG08MT4iKSkKci5jPXMuZQpyZXR1cm4gcn0s
-CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
-YT09PTB9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYSE9PTB9LAp0ZzpmdW5jdGlvbihhLGIp
-e3ZhciBzLHIKaWYoYiE9PSJfX3Byb3RvX18iKXtzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiExCnJl
-dHVybiB0LmcuYShzW2JdKSE9bnVsbH1lbHNle3I9dGhpcy5QUihiKQpyZXR1cm4gcn19LApQUjpmdW5j
-dGlvbihhKXt2YXIgcz10aGlzLmQKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5ERihzW3Ro
-aXMuTihhKV0sYSk+PTB9LAppOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPXRoaXMKSC5MaChxKS5jLmEo
-YikKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpe3M9cS5iCnJldHVybiBxLkoo
-cz09bnVsbD9xLmI9UC5UMigpOnMsYil9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjEwNzM3
-NDE4MjMpPT09Yil7cj1xLmMKcmV0dXJuIHEuSihyPT1udWxsP3EuYz1QLlQyKCk6cixiKX1lbHNlIHJl
-dHVybiBxLlkoYil9LApZOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPXRoaXMKSC5MaChwKS5jLmEoYSkK
-cz1wLmQKaWYocz09bnVsbClzPXAuZD1QLlQyKCkKcj1wLk4oYSkKcT1zW3JdCmlmKHE9PW51bGwpc1ty
-XT1bcC55byhhKV0KZWxzZXtpZihwLkRGKHEsYSk+PTApcmV0dXJuITEKcS5wdXNoKHAueW8oYSkpfXJl
-dHVybiEwfSwKUjpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZi
-IT09Il9fcHJvdG9fXyIpcmV0dXJuIHMuSChzLmIsYikKZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciIm
-JihiJjEwNzM3NDE4MjMpPT09YilyZXR1cm4gcy5IKHMuYyxiKQplbHNlIHJldHVybiBzLnFnKGIpfSwK
-cWc6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbz10aGlzLG49by5kCmlmKG49PW51bGwpcmV0dXJuITEK
-cz1vLk4oYSkKcj1uW3NdCnE9by5ERihyLGEpCmlmKHE8MClyZXR1cm4hMQpwPXIuc3BsaWNlKHEsMSlb
-MF0KaWYoMD09PXIubGVuZ3RoKWRlbGV0ZSBuW3NdCm8uRyhwKQpyZXR1cm4hMH0sCko6ZnVuY3Rpb24o
-YSxiKXtILkxoKHRoaXMpLmMuYShiKQppZih0LmcuYShhW2JdKSE9bnVsbClyZXR1cm4hMQphW2JdPXRo
-aXMueW8oYikKcmV0dXJuITB9LApIOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoYT09bnVsbClyZXR1cm4h
-MQpzPXQuZy5hKGFbYl0pCmlmKHM9PW51bGwpcmV0dXJuITEKdGhpcy5HKHMpCmRlbGV0ZSBhW2JdCnJl
-dHVybiEwfSwKUzpmdW5jdGlvbigpe3RoaXMucj10aGlzLnIrMSYxMDczNzQxODIzfSwKeW86ZnVuY3Rp
-b24oYSl7dmFyIHMscj10aGlzLHE9bmV3IFAuYm4oSC5MaChyKS5jLmEoYSkpCmlmKHIuZT09bnVsbCly
-LmU9ci5mPXEKZWxzZXtzPXIuZgpzLnRvU3RyaW5nCnEuYz1zCnIuZj1zLmI9cX0rK3IuYQpyLlMoKQpy
-ZXR1cm4gcX0sCkc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcyxyPWEuYyxxPWEuYgppZihyPT1udWxsKXMu
-ZT1xCmVsc2Ugci5iPXEKaWYocT09bnVsbClzLmY9cgplbHNlIHEuYz1yOy0tcy5hCnMuUygpfSwKTjpm
-dW5jdGlvbihhKXtyZXR1cm4gSi5oZihhKSYxMDczNzQxODIzfSwKREY6ZnVuY3Rpb24oYSxiKXt2YXIg
-cyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8czsrK3IpaWYoSi5STShh
-W3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9fQpQLmJuLnByb3RvdHlwZT17fQpQLmxtLnByb3RvdHlw
-ZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmQpfSwKRjpmdW5jdGlvbigp
-e3ZhciBzPXRoaXMscj1zLmMscT1zLmEKaWYocy5iIT09cS5yKXRocm93IEguYihQLmE0KHEpKQplbHNl
-IGlmKHI9PW51bGwpe3Muc2oobnVsbCkKcmV0dXJuITF9ZWxzZXtzLnNqKHMuJHRpLkMoIjE/IikuYShy
-LmEpKQpzLmM9ci5iCnJldHVybiEwfX0sCnNqOmZ1bmN0aW9uKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIx
-PyIpLmEoYSl9LAokaUFuOjF9ClAubVcucHJvdG90eXBlPXt9ClAudXkucHJvdG90eXBlPXskaWJROjEs
-JGljWDoxLCRpek06MX0KUC5sRC5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEgu
-YTcoYSx0aGlzLmdBKGEpLEgueksoYSkuQygiYTc8bEQuRT4iKSl9LApFOmZ1bmN0aW9uKGEsYil7cmV0
-dXJuIHRoaXMucShhLGIpfSwKSzpmdW5jdGlvbihhLGIpe3ZhciBzLHIKSC56SyhhKS5DKCJ+KGxELkUp
-IikuYShiKQpzPXRoaXMuZ0EoYSkKZm9yKHI9MDtyPHM7KytyKXtiLiQxKHRoaXMucShhLHIpKQppZihz
-IT09dGhpcy5nQShhKSl0aHJvdyBILmIoUC5hNChhKSl9fSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0
-aGlzLmdBKGEpPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5nbDAoYSl9LApFMjpmdW5j
-dGlvbihhLGIsYyl7dmFyIHM9SC56SyhhKQpyZXR1cm4gbmV3IEgubEooYSxzLktxKGMpLkMoIjEobEQu
-RSkiKS5hKGIpLHMuQygiQDxsRC5FPiIpLktxKGMpLkMoImxKPDEsMj4iKSl9LAplUjpmdW5jdGlvbihh
-LGIpe3JldHVybiBILnFDKGEsYixudWxsLEgueksoYSkuQygibEQuRSIpKX0sCmRyOmZ1bmN0aW9uKGEs
-Yil7cmV0dXJuIG5ldyBILmpWKGEsSC56SyhhKS5DKCJAPGxELkU+IikuS3EoYikuQygialY8MSwyPiIp
-KX0sCmR1OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHI9SC56SyhhKQpkPXIuQygibEQuRSIpLmEoci5D
-KCJsRC5FPyIpLmEoZCkpClAuakIoYixjLHRoaXMuZ0EoYSkpCmZvcihzPWI7czxjOysrcyl0aGlzLlk1
-KGEscyxkKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAueChhLCJbIiwiXSIpfX0KUC5pbC5wcm90b3R5
-cGU9e30KUC5yYS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy5hCmlmKCFy
-LmEpdGhpcy5iLmErPSIsICIKci5hPSExCnI9dGhpcy5iCnM9ci5hKz1ILkVqKGEpCnIuYT1zKyI6ICIK
-ci5hKz1ILkVqKGIpfSwKJFM6OX0KUC5Zay5wcm90b3R5cGU9ewpLOmZ1bmN0aW9uKGEsYil7dmFyIHMs
-cixxPUguTGgodGhpcykKcS5DKCJ+KFlrLkssWWsuVikiKS5hKGIpCmZvcihzPUouSVQodGhpcy5ndmMo
-KSkscT1xLkMoIllrLlYiKTtzLkYoKTspe3I9cy5nbCgpCmIuJDIocixxLmEodGhpcy5xKDAscikpKX19
-LApnUHU6ZnVuY3Rpb24oYSl7cmV0dXJuIEouTTEodGhpcy5ndmMoKSxuZXcgUC55USh0aGlzKSxILkxo
-KHRoaXMpLkMoIk4zPFlrLkssWWsuVj4iKSl9LAp4NDpmdW5jdGlvbihhKXtyZXR1cm4gSi56bCh0aGlz
-Lmd2YygpLGEpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIEouSG0odGhpcy5ndmMoKSl9LApnbDA6ZnVu
-Y3Rpb24oYSl7cmV0dXJuIEoudVUodGhpcy5ndmMoKSl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLm5P
-KHRoaXMpfSwKJGlaMDoxfQpQLnlRLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhp
-cy5hLHE9SC5MaChyKQpxLkMoIllrLksiKS5hKGEpCnM9cS5DKCJZay5WIikKcmV0dXJuIG5ldyBQLk4z
-KGEscy5hKHIucSgwLGEpKSxxLkMoIkA8WWsuSz4iKS5LcShzKS5DKCJOMzwxLDI+IikpfSwKJFM6ZnVu
-Y3Rpb24oKXtyZXR1cm4gSC5MaCh0aGlzLmEpLkMoIk4zPFlrLkssWWsuVj4oWWsuSykiKX19ClAuS1Au
-cHJvdG90eXBlPXsKWTU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUguTGgodGhpcykKcy5jLmEoYikKcy5R
-WzFdLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpKX19
-ClAuUG4ucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEucSgwLGIpfSwKWTU6
-ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUguTGgodGhpcykKdGhpcy5hLlk1KDAscy5jLmEoYikscy5RWzFd
-LmEoYykpfSwKeDQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS54NChhKX0sCks6ZnVuY3Rpb24oYSxi
-KXt0aGlzLmEuSygwLEguTGgodGhpcykuQygifigxLDIpIikuYShiKSl9LApnbDA6ZnVuY3Rpb24oYSl7
-dmFyIHM9dGhpcy5hCnJldHVybiBzLmdsMChzKX0sCmdBOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpy
-ZXR1cm4gcy5nQShzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS53KDApfSwKZ1B1OmZ1bmN0
-aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nUHUocyl9LAokaVowOjF9ClAuR2oucHJvdG90eXBl
-PXt9ClAubGYucHJvdG90eXBlPXsKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdBKHRoaXMpPT09
-MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKSE9PTB9LApGVjpmdW5jdGlvbihh
-LGIpe3ZhciBzCmZvcihzPUouSVQoSC5MaCh0aGlzKS5DKCJjWDxsZi5FPiIpLmEoYikpO3MuRigpOyl0
-aGlzLmkoMCxzLmdsKCkpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC54KHRoaXMsInsiLCJ9Iil9LApr
-OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPXRoaXMuZ20odGhpcykKaWYoIXEuRigpKXJldHVybiIiCnM9
-cS4kdGkuYwppZihiPT09IiIpe3I9IiIKZG8gcis9SC5FaihzLmEocS5kKSkKd2hpbGUocS5GKCkpCnM9
-cn1lbHNle3I9IiIrSC5FaihzLmEocS5kKSkKZm9yKDtxLkYoKTspcj1yK2IrSC5FaihzLmEocS5kKSkK
-cz1yfXJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKZVI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
-SC5iSyh0aGlzLGIsSC5MaCh0aGlzKS5DKCJsZi5FIikpfSwKRTpmdW5jdGlvbihhLGIpe3ZhciBzLHIs
-cSxwLG89ImluZGV4IgpILmNiKGIsbyx0LlMpClAuazEoYixvKQpmb3Iocz10aGlzLmdtKHRoaXMpLHI9
-cy4kdGkuYyxxPTA7cy5GKCk7KXtwPXIuYShzLmQpCmlmKGI9PT1xKXJldHVybiBwOysrcX10aHJvdyBI
-LmIoUC5DZihiLHRoaXMsbyxudWxsLHEpKX19ClAuVmoucHJvdG90eXBlPXskaWJROjEsJGljWDoxLCRp
-eHU6MX0KUC5Ydi5wcm90b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGl4dToxfQpQLm5ZLnByb3RvdHlwZT17
-fQpQLldZLnByb3RvdHlwZT17fQpQLlJVLnByb3RvdHlwZT17fQpQLnBSLnByb3RvdHlwZT17fQpQLnV3
-LnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMuYgppZihyPT1udWxsKXJldHVy
-biB0aGlzLmMucSgwLGIpCmVsc2UgaWYodHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBudWxsCmVsc2V7
-cz1yW2JdCnJldHVybiB0eXBlb2Ygcz09InVuZGVmaW5lZCI/dGhpcy5mYihiKTpzfX0sCmdBOmZ1bmN0
-aW9uKGEpe3JldHVybiB0aGlzLmI9PW51bGw/dGhpcy5jLmE6dGhpcy5DZigpLmxlbmd0aH0sCmdsMDpm
-dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LApndmM6ZnVuY3Rpb24oKXtpZih0aGlz
-LmI9PW51bGwpe3ZhciBzPXRoaXMuYwpyZXR1cm4gbmV3IEguaTUocyxILkxoKHMpLkMoImk1PDE+Iikp
-fXJldHVybiBuZXcgUC5pOCh0aGlzKX0sClk1OmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHE9dGhpcwpp
-ZihxLmI9PW51bGwpcS5jLlk1KDAsYixjKQplbHNlIGlmKHEueDQoYikpe3M9cS5iCnNbYl09YwpyPXEu
-YQppZihyPT1udWxsP3MhPW51bGw6ciE9PXMpcltiXT1udWxsfWVsc2UgcS5YSygpLlk1KDAsYixjKX0s
-Cng0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuYj09bnVsbClyZXR1cm4gdGhpcy5jLng0KGEpCnJldHVybiBP
-YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hLGEpfSwKSzpmdW5jdGlvbihh
-LGIpe3ZhciBzLHIscSxwLG89dGhpcwp0LmNBLmEoYikKaWYoby5iPT1udWxsKXJldHVybiBvLmMuSygw
-LGIpCnM9by5DZigpCmZvcihyPTA7cjxzLmxlbmd0aDsrK3Ipe3E9c1tyXQpwPW8uYltxXQppZih0eXBl
-b2YgcD09InVuZGVmaW5lZCIpe3A9UC5RZShvLmFbcV0pCm8uYltxXT1wfWIuJDIocSxwKQppZihzIT09
-by5jKXRocm93IEguYihQLmE0KG8pKX19LApDZjpmdW5jdGlvbigpe3ZhciBzPXQuYk0uYSh0aGlzLmMp
-CmlmKHM9PW51bGwpcz10aGlzLmM9SC5RSShPYmplY3Qua2V5cyh0aGlzLmEpLHQucykKcmV0dXJuIHN9
-LApYSzpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbj10aGlzCmlmKG4uYj09bnVsbClyZXR1cm4gbi5j
-CnM9UC5GbCh0Lk4sdC56KQpyPW4uQ2YoKQpmb3IocT0wO3A9ci5sZW5ndGgscTxwOysrcSl7bz1yW3Fd
-CnMuWTUoMCxvLG4ucSgwLG8pKX1pZihwPT09MClDLk5tLmkociwiIikKZWxzZSBDLk5tLnNBKHIsMCkK
-bi5hPW4uYj1udWxsCnJldHVybiBuLmM9c30sCmZiOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKCFPYmplY3Qu
-cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hLGEpKXJldHVybiBudWxsCnM9UC5RZSh0
-aGlzLmFbYV0pCnJldHVybiB0aGlzLmJbYV09c319ClAuaTgucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24o
-YSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmdBKHMpfSwKRTpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMu
-YQppZihzLmI9PW51bGwpcz1zLmd2YygpLkUoMCxiKQplbHNle3M9cy5DZigpCmlmKGI8MHx8Yj49cy5s
-ZW5ndGgpcmV0dXJuIEguT0gocyxiKQpzPXNbYl19cmV0dXJuIHN9LApnbTpmdW5jdGlvbihhKXt2YXIg
-cz10aGlzLmEKaWYocy5iPT1udWxsKXtzPXMuZ3ZjKCkKcz1zLmdtKHMpfWVsc2V7cz1zLkNmKCkKcz1u
-ZXcgSi5tMShzLHMubGVuZ3RoLEgudDYocykuQygibTE8MT4iKSl9cmV0dXJuIHN9LAp0ZzpmdW5jdGlv
-bihhLGIpe3JldHVybiB0aGlzLmEueDQoYil9fQpQLnhyLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7
-dmFyIHMscgp0cnl7cz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7ZmF0YWw6dHJ1ZX0pCnJldHVybiBz
-fWNhdGNoKHIpe0guUnUocil9cmV0dXJuIG51bGx9LAokUzoxMH0KUC5Oei5wcm90b3R5cGU9ewokMDpm
-dW5jdGlvbigpe3ZhciBzLHIKdHJ5e3M9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2ZhdGFsOmZhbHNl
-fSkKcmV0dXJuIHN9Y2F0Y2gocil7SC5SdShyKX1yZXR1cm4gbnVsbH0sCiRTOjEwfQpQLkNWLnByb3Rv
-dHlwZT17CnlyOmZ1bmN0aW9uKGExLGEyLGEzKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxm
-LGUsZCxjLGIsYSxhMD0iSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIKYTM9UC5qQihhMixh
-MyxhMS5sZW5ndGgpCnM9JC5WNygpCmZvcihyPXMubGVuZ3RoLHE9YTIscD1xLG89bnVsbCxuPS0xLG09
-LTEsbD0wO3E8YTM7cT1rKXtrPXErMQpqPUMueEIuVyhhMSxxKQppZihqPT09Mzcpe2k9aysyCmlmKGk8
-PWEzKXtoPUgub28oQy54Qi5XKGExLGspKQpnPUgub28oQy54Qi5XKGExLGsrMSkpCmY9aCoxNitnLShn
-JjI1NikKaWYoZj09PTM3KWY9LTEKaz1pfWVsc2UgZj0tMX1lbHNlIGY9agppZigwPD1mJiZmPD0xMjcp
-e2lmKGY8MHx8Zj49cilyZXR1cm4gSC5PSChzLGYpCmU9c1tmXQppZihlPj0wKXtmPUMueEIuTygiQUJD
-REVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkr
-LyIsZSkKaWYoZj09PWopY29udGludWUKaj1mfWVsc2V7aWYoZT09PS0xKXtpZihuPDApe2Q9bz09bnVs
-bD9udWxsOm8uYS5sZW5ndGgKaWYoZD09bnVsbClkPTAKbj1kKyhxLXApCm09cX0rK2wKaWYoaj09PTYx
-KWNvbnRpbnVlfWo9Zn1pZihlIT09LTIpe2lmKG89PW51bGwpe289bmV3IFAuTSgiIikKZD1vfWVsc2Ug
-ZD1vCmM9ZC5hKz1DLnhCLk5qKGExLHAscSkKZC5hPWMrSC5MdyhqKQpwPWsKY29udGludWV9fXRocm93
-IEguYihQLnJyKCJJbnZhbGlkIGJhc2U2NCBkYXRhIixhMSxxKSl9aWYobyE9bnVsbCl7cj1vLmErPUMu
-eEIuTmooYTEscCxhMykKZD1yLmxlbmd0aAppZihuPj0wKVAueE0oYTEsbSxhMyxuLGwsZCkKZWxzZXti
-PUMuam4uelkoZC0xLDQpKzEKaWYoYj09PTEpdGhyb3cgSC5iKFAucnIoYTAsYTEsYTMpKQpmb3IoO2I8
-NDspe3IrPSI9IgpvLmE9cjsrK2J9fXI9by5hCnJldHVybiBDLnhCLmk3KGExLGEyLGEzLHIuY2hhckNv
-ZGVBdCgwKT09MD9yOnIpfWE9YTMtYTIKaWYobj49MClQLnhNKGExLG0sYTMsbixsLGEpCmVsc2V7Yj1D
-LmpuLnpZKGEsNCkKaWYoYj09PTEpdGhyb3cgSC5iKFAucnIoYTAsYTEsYTMpKQppZihiPjEpYTE9Qy54
-Qi5pNyhhMSxhMyxhMyxiPT09Mj8iPT0iOiI9Iil9cmV0dXJuIGExfX0KUC5VOC5wcm90b3R5cGU9e30K
-UC5Vay5wcm90b3R5cGU9e30KUC53SS5wcm90b3R5cGU9e30KUC5aaS5wcm90b3R5cGU9e30KUC5VZC5w
-cm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPVAuaGwodGhpcy5hKQpyZXR1cm4odGhpcy5iIT1u
-dWxsPyJDb252ZXJ0aW5nIG9iamVjdCB0byBhbiBlbmNvZGFibGUgb2JqZWN0IGZhaWxlZDoiOiJDb252
-ZXJ0aW5nIG9iamVjdCBkaWQgbm90IHJldHVybiBhbiBlbmNvZGFibGUgb2JqZWN0OiIpKyIgIitzfX0K
-UC5LOC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJDeWNsaWMgZXJyb3IgaW4gSlNPTiBz
-dHJpbmdpZnkifX0KUC5ieS5wcm90b3R5cGU9ewpwVzpmdW5jdGlvbihhLGIsYyl7dmFyIHMKdC5mVi5h
-KGMpCnM9UC5CUyhiLHRoaXMuZ0hlKCkuYSkKcmV0dXJuIHN9LApPQjpmdW5jdGlvbihhLGIpe3ZhciBz
-CnQuZEEuYShiKQpzPVAudVgoYSx0aGlzLmdaRSgpLmIsbnVsbCkKcmV0dXJuIHN9LApnWkU6ZnVuY3Rp
-b24oKXtyZXR1cm4gQy5uWH0sCmdIZTpmdW5jdGlvbigpe3JldHVybiBDLkEzfX0KUC5vai5wcm90b3R5
-cGU9e30KUC5NeC5wcm90b3R5cGU9e30KUC5TaC5wcm90b3R5cGU9ewpSVDpmdW5jdGlvbihhKXt2YXIg
-cyxyLHEscCxvLG4sbT1hLmxlbmd0aApmb3Iocz10aGlzLmMscj0wLHE9MDtxPG07KytxKXtwPUMueEIu
-VyhhLHEpCmlmKHA+OTIpe2lmKHA+PTU1Mjk2KXtvPXAmNjQ1MTIKaWYobz09PTU1Mjk2KXtuPXErMQpu
-PSEobjxtJiYoQy54Qi5XKGEsbikmNjQ1MTIpPT09NTYzMjApfWVsc2Ugbj0hMQppZighbilpZihvPT09
-NTYzMjApe289cS0xCm89IShvPj0wJiYoQy54Qi5PKGEsbykmNjQ1MTIpPT09NTUyOTYpfWVsc2Ugbz0h
-MQplbHNlIG89ITAKaWYobyl7aWYocT5yKXMuYSs9Qy54Qi5OaihhLHIscSkKcj1xKzEKbz1zLmErPUgu
-THcoOTIpCm8rPUguTHcoMTE3KQpzLmE9bwpvKz1ILkx3KDEwMCkKcy5hPW8Kbj1wPj4+OCYxNQpvKz1I
-Lkx3KG48MTA/NDgrbjo4NytuKQpzLmE9bwpuPXA+Pj40JjE1Cm8rPUguTHcobjwxMD80OCtuOjg3K24p
-CnMuYT1vCm49cCYxNQpzLmE9bytILkx3KG48MTA/NDgrbjo4NytuKX19Y29udGludWV9aWYocDwzMil7
-aWYocT5yKXMuYSs9Qy54Qi5OaihhLHIscSkKcj1xKzEKbz1zLmErPUguTHcoOTIpCnN3aXRjaChwKXtj
-YXNlIDg6cy5hPW8rSC5Mdyg5OCkKYnJlYWsKY2FzZSA5OnMuYT1vK0guTHcoMTE2KQpicmVhawpjYXNl
-IDEwOnMuYT1vK0guTHcoMTEwKQpicmVhawpjYXNlIDEyOnMuYT1vK0guTHcoMTAyKQpicmVhawpjYXNl
-IDEzOnMuYT1vK0guTHcoMTE0KQpicmVhawpkZWZhdWx0Om8rPUguTHcoMTE3KQpzLmE9bwpvKz1ILkx3
-KDQ4KQpzLmE9bwpvKz1ILkx3KDQ4KQpzLmE9bwpuPXA+Pj40JjE1Cm8rPUguTHcobjwxMD80OCtuOjg3
-K24pCnMuYT1vCm49cCYxNQpzLmE9bytILkx3KG48MTA/NDgrbjo4NytuKQpicmVha319ZWxzZSBpZihw
-PT09MzR8fHA9PT05Mil7aWYocT5yKXMuYSs9Qy54Qi5OaihhLHIscSkKcj1xKzEKbz1zLmErPUguTHco
-OTIpCnMuYT1vK0guTHcocCl9fWlmKHI9PT0wKXMuYSs9YQplbHNlIGlmKHI8bSlzLmErPUMueEIuTmoo
-YSxyLG0pfSwKSm46ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKZm9yKHM9dGhpcy5hLHI9cy5sZW5ndGgs
-cT0wO3E8cjsrK3Epe3A9c1txXQppZihhPT1udWxsP3A9PW51bGw6YT09PXApdGhyb3cgSC5iKG5ldyBQ
-Lks4KGEsbnVsbCkpfUMuTm0uaShzLGEpfSwKaVU6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbz10aGlz
-CmlmKG8udE0oYSkpcmV0dXJuCm8uSm4oYSkKdHJ5e3M9by5iLiQxKGEpCmlmKCFvLnRNKHMpKXtxPVAu
-R3koYSxudWxsLG8uZ1ZLKCkpCnRocm93IEguYihxKX1xPW8uYQppZigwPj1xLmxlbmd0aClyZXR1cm4g
-SC5PSChxLC0xKQpxLnBvcCgpfWNhdGNoKHApe3I9SC5SdShwKQpxPVAuR3koYSxyLG8uZ1ZLKCkpCnRo
-cm93IEguYihxKX19LAp0TTpmdW5jdGlvbihhKXt2YXIgcyxyLHE9dGhpcwppZih0eXBlb2YgYT09Im51
-bWJlciIpe2lmKCFpc0Zpbml0ZShhKSlyZXR1cm4hMQpxLmMuYSs9Qy5DRC53KGEpCnJldHVybiEwfWVs
-c2UgaWYoYT09PSEwKXtxLmMuYSs9InRydWUiCnJldHVybiEwfWVsc2UgaWYoYT09PSExKXtxLmMuYSs9
-ImZhbHNlIgpyZXR1cm4hMH1lbHNlIGlmKGE9PW51bGwpe3EuYy5hKz0ibnVsbCIKcmV0dXJuITB9ZWxz
-ZSBpZih0eXBlb2YgYT09InN0cmluZyIpe3M9cS5jCnMuYSs9JyInCnEuUlQoYSkKcy5hKz0nIicKcmV0
-dXJuITB9ZWxzZSBpZih0LmouYihhKSl7cS5KbihhKQpxLmxLKGEpCnM9cS5hCmlmKDA+PXMubGVuZ3Ro
-KXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcmV0dXJuITB9ZWxzZSBpZih0LmYuYihhKSl7cS5Kbihh
-KQpyPXEuancoYSkKcz1xLmEKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpy
-ZXR1cm4gcn1lbHNlIHJldHVybiExfSwKbEs6ZnVuY3Rpb24oYSl7dmFyIHMscixxPXRoaXMuYwpxLmEr
-PSJbIgpzPUouVTYoYSkKaWYocy5nb3IoYSkpe3RoaXMuaVUocy5xKGEsMCkpCmZvcihyPTE7cjxzLmdB
-KGEpOysrcil7cS5hKz0iLCIKdGhpcy5pVShzLnEoYSxyKSl9fXEuYSs9Il0ifSwKanc6ZnVuY3Rpb24o
-YSl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPXt9CmlmKGEuZ2wwKGEpKXttLmMuYSs9Int9IgpyZXR1
-cm4hMH1zPWEuZ0EoYSkqMgpyPVAuTzgocyxudWxsLCExLHQuWCkKcT1sLmE9MApsLmI9ITAKYS5LKDAs
-bmV3IFAudGkobCxyKSkKaWYoIWwuYilyZXR1cm4hMQpwPW0uYwpwLmErPSJ7Igpmb3Iobz0nIic7cTxz
-O3ErPTIsbz0nLCInKXtwLmErPW8KbS5SVChILm4ocltxXSkpCnAuYSs9JyI6JwpuPXErMQppZihuPj1z
-KXJldHVybiBILk9IKHIsbikKbS5pVShyW25dKX1wLmErPSJ9IgpyZXR1cm4hMH19ClAudGkucHJvdG90
-eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCmlmKHR5cGVvZiBhIT0ic3RyaW5nIil0aGlzLmEu
-Yj0hMQpzPXRoaXMuYgpyPXRoaXMuYQpDLk5tLlk1KHMsci5hKyssYSkKQy5ObS5ZNShzLHIuYSsrLGIp
-fSwKJFM6OX0KUC50dS5wcm90b3R5cGU9ewpnVks6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmMuYQpyZXR1
-cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c319ClAudTUucHJvdG90eXBlPXsKZ1pFOmZ1bmN0aW9uKCl7
-cmV0dXJuIEMuUWt9fQpQLkUzLnByb3RvdHlwZT17CldKOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPVAu
-akIoMCxudWxsLGEubGVuZ3RoKSxvPXAtMAppZihvPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCkK
-cz1vKjMKcj1uZXcgVWludDhBcnJheShzKQpxPW5ldyBQLlJ3KHIpCmlmKHEuR3goYSwwLHApIT09cCl7
-Qy54Qi5PKGEscC0xKQpxLlJPKCl9cmV0dXJuIG5ldyBVaW50OEFycmF5KHIuc3ViYXJyYXkoMCxILnJN
-KDAscS5iLHMpKSl9fQpQLlJ3LnByb3RvdHlwZT17ClJPOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcyxyPXMu
-YyxxPXMuYixwPXMuYj1xKzEsbz1yLmxlbmd0aAppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT0y
-MzkKcT1zLmI9cCsxCmlmKHA+PW8pcmV0dXJuIEguT0gocixwKQpyW3BdPTE5MQpzLmI9cSsxCmlmKHE+
-PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTE4OX0sCk82OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAs
-byxuPXRoaXMKaWYoKGImNjQ1MTIpPT09NTYzMjApe3M9NjU1MzYrKChhJjEwMjMpPDwxMCl8YiYxMDIz
-CnI9bi5jCnE9bi5iCnA9bi5iPXErMQpvPXIubGVuZ3RoCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpy
-W3FdPXM+Pj4xOHwyNDAKcT1uLmI9cCsxCmlmKHA+PW8pcmV0dXJuIEguT0gocixwKQpyW3BdPXM+Pj4x
-MiY2M3wxMjgKcD1uLmI9cSsxCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPXM+Pj42JjYzfDEy
-OApuLmI9cCsxCmlmKHA+PW8pcmV0dXJuIEguT0gocixwKQpyW3BdPXMmNjN8MTI4CnJldHVybiEwfWVs
-c2V7bi5STygpCnJldHVybiExfX0sCkd4OmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbSxs
-PXRoaXMKaWYoYiE9PWMmJihDLnhCLk8oYSxjLTEpJjY0NTEyKT09PTU1Mjk2KS0tYwpmb3Iocz1sLmMs
-cj1zLmxlbmd0aCxxPWI7cTxjOysrcSl7cD1DLnhCLlcoYSxxKQppZihwPD0xMjcpe289bC5iCmlmKG8+
-PXIpYnJlYWsKbC5iPW8rMQpzW29dPXB9ZWxzZXtvPXAmNjQ1MTIKaWYobz09PTU1Mjk2KXtpZihsLmIr
-ND5yKWJyZWFrCm49cSsxCmlmKGwuTzYocCxDLnhCLlcoYSxuKSkpcT1ufWVsc2UgaWYobz09PTU2MzIw
-KXtpZihsLmIrMz5yKWJyZWFrCmwuUk8oKX1lbHNlIGlmKHA8PTIwNDcpe289bC5iCm09bysxCmlmKG0+
-PXIpYnJlYWsKbC5iPW0KaWYobz49cilyZXR1cm4gSC5PSChzLG8pCnNbb109cD4+PjZ8MTkyCmwuYj1t
-KzEKc1ttXT1wJjYzfDEyOH1lbHNle289bC5iCmlmKG8rMj49cilicmVhawptPWwuYj1vKzEKaWYobz49
-cilyZXR1cm4gSC5PSChzLG8pCnNbb109cD4+PjEyfDIyNApvPWwuYj1tKzEKaWYobT49cilyZXR1cm4g
-SC5PSChzLG0pCnNbbV09cD4+PjYmNjN8MTI4CmwuYj1vKzEKaWYobz49cilyZXR1cm4gSC5PSChzLG8p
-CnNbb109cCY2M3wxMjh9fX1yZXR1cm4gcX19ClAuR1kucHJvdG90eXBlPXsKV0o6ZnVuY3Rpb24oYSl7
-dmFyIHMscgp0LkwuYShhKQpzPXRoaXMuYQpyPVAua3kocyxhLDAsbnVsbCkKaWYociE9bnVsbClyZXR1
-cm4gcgpyZXR1cm4gbmV3IFAuYnoocykuTmUoYSwwLG51bGwsITApfX0KUC5iei5wcm90b3R5cGU9ewpO
-ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG49dGhpcwp0LkwuYShhKQpzPVAuakIoYixj
-LEouSG0oYSkpCmlmKGI9PT1zKXJldHVybiIiCnI9UC5qeShhLGIscykKcT1uLmhPKHIsMCxzLWIsITAp
-CnA9bi5iCmlmKChwJjEpIT09MCl7bz1QLmo0KHApCm4uYj0wCnRocm93IEguYihQLnJyKG8sYSxiK24u
-YykpfXJldHVybiBxfSwKaE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxPXRoaXMKaWYoYy1iPjEw
-MDApe3M9Qy5qbi5CVShiK2MsMikKcj1xLmhPKGEsYixzLCExKQppZigocS5iJjEpIT09MClyZXR1cm4g
-cgpyZXR1cm4gcitxLmhPKGEscyxjLGQpfXJldHVybiBxLkVoKGEsYixjLGQpfSwKRWg6ZnVuY3Rpb24o
-YSxiLGMsZCl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMsaj02NTUzMyxpPWsuYixoPWsuYyxnPW5l
-dyBQLk0oIiIpLGY9YisxLGU9YS5sZW5ndGgKaWYoYjwwfHxiPj1lKXJldHVybiBILk9IKGEsYikKcz1h
-W2JdCiRsYWJlbDAkMDpmb3Iocj1rLmE7ITA7KXtmb3IoOyEwO2Y9byl7cT1DLnhCLlcoIkFBQUFBQUFB
+KGEsYil7dmFyIHMscixxPXRoaXMKUC5rMShiLCJjb3VudCIpCnM9cS5iK2IKcj1xLmMKaWYociE9bnVs
+bCYmcz49cilyZXR1cm4gbmV3IEguTUIocS4kdGkuQygiTUI8MT4iKSkKcmV0dXJuIEgucUMocS5hLHMs
+cixxLiR0aS5jKX0sCnR0KGEsYil7dmFyIHMscixxLHA9dGhpcyxvPXAuYixuPXAuYSxtPUouVTYobiks
+bD1tLmdBKG4pLGs9cC5jCmlmKGshPW51bGwmJms8bClsPWsKcz1sLW8KaWYoczw9MCl7bj1KLlFpKDAs
+cC4kdGkuYykKcmV0dXJuIG59cj1QLk84KHMsbS5FKG4sbyksITEscC4kdGkuYykKZm9yKHE9MTtxPHM7
+KytxKXtDLk5tLlk1KHIscSxtLkUobixvK3EpKQppZihtLmdBKG4pPGwpdGhyb3cgSC5iKFAuYTQocCkp
+fXJldHVybiByfX0KSC5hNy5wcm90b3R5cGU9ewpnbCgpe3JldHVybiB0aGlzLiR0aS5jLmEodGhpcy5k
+KX0sCkYoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1KLlU2KHEpLG89cC5nQShxKQppZihyLmIhPT1vKXRo
+cm93IEguYihQLmE0KHEpKQpzPXIuYwppZihzPj1vKXtyLnNJKG51bGwpCnJldHVybiExfXIuc0kocC5F
+KHEscykpOysrci5jCnJldHVybiEwfSwKc0koYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0s
+CiRpQW46MX0KSC5pMS5wcm90b3R5cGU9ewpnbShhKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcg
+SC5NSChKLklUKHRoaXMuYSksdGhpcy5iLHMuQygiQDwxPiIpLktxKHMuUVsxXSkuQygiTUg8MSwyPiIp
+KX0sCmdBKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApnbDAoYSl7cmV0dXJuIEoudVUodGhpcy5hKX0s
+CkUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIpKX19CkgueHkucHJvdG90eXBlPXsk
+aWJROjF9CkguTUgucHJvdG90eXBlPXsKRigpe3ZhciBzPXRoaXMscj1zLmIKaWYoci5GKCkpe3Muc0ko
+cy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0kobnVsbCkKcmV0dXJuITF9LApnbCgpe3JldHVybiB0
+aGlzLiR0aS5RWzFdLmEodGhpcy5hKX0sCnNJKGEpe3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9
+fQpILmxKLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApFKGEsYil7cmV0dXJu
+IHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpILlU1LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBu
+ZXcgSC5TTyhKLklUKHRoaXMuYSksdGhpcy5iLHRoaXMuJHRpLkMoIlNPPDE+IikpfX0KSC5TTy5wcm90
+b3R5cGU9ewpGKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10aGlzLmI7cy5GKCk7KWlmKEgub1Qoci4k
+MShzLmdsKCkpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KSC5B
+TS5wcm90b3R5cGU9ewplUihhLGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguQU0odGhpcy5h
+LHRoaXMuYitiLEguTGgodGhpcykuQygiQU08MT4iKSl9LApnbShhKXtyZXR1cm4gbmV3IEguVTEoSi5J
+VCh0aGlzLmEpLHRoaXMuYixILkxoKHRoaXMpLkMoIlUxPDE+IikpfX0KSC5kNS5wcm90b3R5cGU9ewpn
+QShhKXt2YXIgcz1KLkhtKHRoaXMuYSktdGhpcy5iCmlmKHM+PTApcmV0dXJuIHMKcmV0dXJuIDB9LApl
+UihhLGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguZDUodGhpcy5hLHRoaXMuYitiLHRoaXMu
+JHRpKX0sCiRpYlE6MX0KSC5VMS5wcm90b3R5cGU9ewpGKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj0w
+O3I8dGhpcy5iOysrcilzLkYoKQp0aGlzLmI9MApyZXR1cm4gcy5GKCl9LApnbCgpe3JldHVybiB0aGlz
+LmEuZ2woKX19CkguTUIucHJvdG90eXBlPXsKZ20oYSl7cmV0dXJuIEMuR3d9LApnbDAoYSl7cmV0dXJu
+ITB9LApnQShhKXtyZXR1cm4gMH0sCkUoYSxiKXt0aHJvdyBILmIoUC5URShiLDAsMCwiaW5kZXgiLG51
+bGwpKX0sCmVSKGEsYil7UC5rMShiLCJjb3VudCIpCnJldHVybiB0aGlzfX0KSC5GdS5wcm90b3R5cGU9
+ewpGKCl7cmV0dXJuITF9LApnbCgpe3Rocm93IEguYihILldwKCkpfSwKJGlBbjoxfQpILnU2LnByb3Rv
+dHlwZT17CmdtKGEpe3JldHVybiBuZXcgSC5KQihKLklUKHRoaXMuYSksdGhpcy4kdGkuQygiSkI8MT4i
+KSl9fQpILkpCLnByb3RvdHlwZT17CkYoKXt2YXIgcyxyCmZvcihzPXRoaXMuYSxyPXRoaXMuJHRpLmM7
+cy5GKCk7KWlmKHIuYihzLmdsKCkpKXJldHVybiEwCnJldHVybiExfSwKZ2woKXtyZXR1cm4gdGhpcy4k
+dGkuYy5hKHRoaXMuYS5nbCgpKX0sCiRpQW46MX0KSC5TVS5wcm90b3R5cGU9e30KSC5SZS5wcm90b3R5
+cGU9ewpZNShhLGIsYyl7SC5MaCh0aGlzKS5DKCJSZS5FIikuYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fu
+bm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpKX19CkgudzIucHJvdG90eXBlPXt9Ckgud3Yu
+cHJvdG90eXBlPXsKZ2lPKGEpe3ZhciBzPXRoaXMuX2hhc2hDb2RlCmlmKHMhPW51bGwpcmV0dXJuIHMK
+cz02NjQ1OTcqSi5oZih0aGlzLmEpJjUzNjg3MDkxMQp0aGlzLl9oYXNoQ29kZT1zCnJldHVybiBzfSwK
+dyhhKXtyZXR1cm4nU3ltYm9sKCInK0guRWoodGhpcy5hKSsnIiknfSwKRE4oYSxiKXtpZihiPT1udWxs
+KXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgSC53diYmdGhpcy5hPT1iLmF9LAokaUdEOjF9Ckgu
+UUMucHJvdG90eXBlPXt9CkguUEQucHJvdG90eXBlPXt9CkguV1UucHJvdG90eXBlPXsKZ2wwKGEpe3Jl
+dHVybiB0aGlzLmdBKHRoaXMpPT09MH0sCncoYSl7cmV0dXJuIFAubk8odGhpcyl9LApZNShhLGIsYyl7
+dmFyIHM9SC5MaCh0aGlzKQpzLmMuYShiKQpzLlFbMV0uYShjKQpILmRjKCl9LApnUHUoYSl7cmV0dXJu
+IHRoaXMucTQoMCxILkxoKHRoaXMpLkMoIk4zPDEsMj4iKSl9LApxNChhLGIpe3ZhciBzPXRoaXMKcmV0
+dXJuIFAubDAoZnVuY3Rpb24oKXt2YXIgcj1hCnZhciBxPTAscD0xLG8sbixtLGwsawpyZXR1cm4gZnVu
+Y3Rpb24gJGFzeW5jJGdQdShjLGQpe2lmKGM9PT0xKXtvPWQKcT1wfXdoaWxlKHRydWUpc3dpdGNoKHEp
+e2Nhc2UgMDpuPXMuZ3ZjKCksbj1uLmdtKG4pLG09SC5MaChzKSxsPW0uUVsxXSxtPW0uQygiQDwxPiIp
+LktxKGwpLkMoIk4zPDEsMj4iKQpjYXNlIDI6aWYoIW4uRigpKXtxPTMKYnJlYWt9az1uLmdsKCkKcT00
+CnJldHVybiBuZXcgUC5OMyhrLGwuYShzLnEoMCxrKSksbSkKY2FzZSA0OnE9MgpicmVhawpjYXNlIDM6
+cmV0dXJuIFAuVGgoKQpjYXNlIDE6cmV0dXJuIFAuWW0obyl9fX0sYil9LAokaVowOjF9CkguTFAucHJv
+dG90eXBlPXsKZ0EoYSl7cmV0dXJuIHRoaXMuYX0sCng0KGEpe2lmKHR5cGVvZiBhIT0ic3RyaW5nIily
+ZXR1cm4hMQppZigiX19wcm90b19fIj09PWEpcmV0dXJuITEKcmV0dXJuIHRoaXMuYi5oYXNPd25Qcm9w
+ZXJ0eShhKX0sCnEoYSxiKXtpZighdGhpcy54NChiKSlyZXR1cm4gbnVsbApyZXR1cm4gdGhpcy5iW0gu
+bihiKV19LApLKGEsYil7dmFyIHMscixxLHAsbyxuPXRoaXMuJHRpCm4uQygifigxLDIpIikuYShiKQpz
+PXRoaXMuYwpmb3Iocj1zLmxlbmd0aCxxPXRoaXMuYixuPW4uUVsxXSxwPTA7cDxyOysrcCl7bz1ILm4o
+c1twXSkKYi4kMihvLG4uYShxW29dKSl9fSwKZ3ZjKCl7cmV0dXJuIG5ldyBILlhSKHRoaXMsdGhpcy4k
+dGkuQygiWFI8MT4iKSl9fQpILlhSLnByb3RvdHlwZT17CmdtKGEpe3ZhciBzPXRoaXMuYS5jCnJldHVy
+biBuZXcgSi5tMShzLHMubGVuZ3RoLEgudDYocykuQygibTE8MT4iKSl9LApnQShhKXtyZXR1cm4gdGhp
+cy5hLmMubGVuZ3RofX0KSC5MSS5wcm90b3R5cGU9ewpnV2EoKXt2YXIgcz10aGlzLmEKcmV0dXJuIHN9
+LApnbmQoKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYoby5jPT09MSlyZXR1cm4gQy5oVQpzPW8uZApyPXMu
+bGVuZ3RoLW8uZS5sZW5ndGgtby5mCmlmKHI9PT0wKXJldHVybiBDLmhVCnE9W10KZm9yKHA9MDtwPHI7
+KytwKXtpZihwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLHApCnEucHVzaChzW3BdKX1yZXR1cm4gSi56
+QyhxKX0sCmdWbSgpe3ZhciBzLHIscSxwLG8sbixtLGwsaz10aGlzCmlmKGsuYyE9PTApcmV0dXJuIEMu
+V08Kcz1rLmUKcj1zLmxlbmd0aApxPWsuZApwPXEubGVuZ3RoLXItay5mCmlmKHI9PT0wKXJldHVybiBD
+LldPCm89bmV3IEguTjUodC5lbykKZm9yKG49MDtuPHI7KytuKXtpZihuPj1zLmxlbmd0aClyZXR1cm4g
+SC5PSChzLG4pCm09c1tuXQpsPXArbgppZihsPDB8fGw+PXEubGVuZ3RoKXJldHVybiBILk9IKHEsbCkK
+by5ZNSgwLG5ldyBILnd2KG0pLHFbbF0pfXJldHVybiBuZXcgSC5QRChvLHQuZ0YpfSwKJGl2UToxfQpI
+LkNqLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMKSC5uKGEpCnM9dGhpcy5hCnMuYj1zLmIrIiQiK2EK
+Qy5ObS5pKHRoaXMuYixhKQpDLk5tLmkodGhpcy5jLGIpOysrcy5hfSwKJFM6MTF9CkguZjkucHJvdG90
+eXBlPXsKcVMoYSl7dmFyIHMscixxPXRoaXMscD1uZXcgUmVnRXhwKHEuYSkuZXhlYyhhKQppZihwPT1u
+dWxsKXJldHVybiBudWxsCnM9T2JqZWN0LmNyZWF0ZShudWxsKQpyPXEuYgppZihyIT09LTEpcy5hcmd1
+bWVudHM9cFtyKzFdCnI9cS5jCmlmKHIhPT0tMSlzLmFyZ3VtZW50c0V4cHI9cFtyKzFdCnI9cS5kCmlm
+KHIhPT0tMSlzLmV4cHI9cFtyKzFdCnI9cS5lCmlmKHIhPT0tMSlzLm1ldGhvZD1wW3IrMV0Kcj1xLmYK
+aWYociE9PS0xKXMucmVjZWl2ZXI9cFtyKzFdCnJldHVybiBzfX0KSC5XMC5wcm90b3R5cGU9ewp3KGEp
+e3ZhciBzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogIit0aGlzLmEK
+cmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIitzKyInIG9uIG51bGwi
+fX0KSC5hei5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHI9dGhpcyxxPSJOb1N1Y2hNZXRob2RFcnJvcjog
+bWV0aG9kIG5vdCBmb3VuZDogJyIscD1yLmIKaWYocD09bnVsbClyZXR1cm4iTm9TdWNoTWV0aG9kRXJy
+b3I6ICIrci5hCnM9ci5jCmlmKHM9PW51bGwpcmV0dXJuIHErcCsiJyAoIityLmErIikiCnJldHVybiBx
+K3ArIicgb24gJyIrcysiJyAoIityLmErIikifX0KSC52Vi5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPXRo
+aXMuYQpyZXR1cm4gcy5sZW5ndGg9PT0wPyJFcnJvciI6IkVycm9yOiAiK3N9fQpILnRlLnByb3RvdHlw
+ZT17CncoYSl7cmV0dXJuIlRocm93IG9mIG51bGwgKCciKyh0aGlzLmE9PT1udWxsPyJudWxsIjoidW5k
+ZWZpbmVkIikrIicgZnJvbSBKYXZhU2NyaXB0KSJ9LAokaVJ6OjF9CkguYnEucHJvdG90eXBlPXt9Ckgu
+WE8ucHJvdG90eXBlPXsKdyhhKXt2YXIgcyxyPXRoaXMuYgppZihyIT1udWxsKXJldHVybiByCnI9dGhp
+cy5hCnM9ciE9PW51bGwmJnR5cGVvZiByPT09Im9iamVjdCI/ci5zdGFjazpudWxsCnJldHVybiB0aGlz
+LmI9cz09bnVsbD8iIjpzfSwKJGlHejoxfQpILlRwLnByb3RvdHlwZT17CncoYSl7dmFyIHM9dGhpcy5j
+b25zdHJ1Y3RvcixyPXM9PW51bGw/bnVsbDpzLm5hbWUKcmV0dXJuIkNsb3N1cmUgJyIrSC5OUShyPT1u
+dWxsPyJ1bmtub3duIjpyKSsiJyJ9LAokaUVIOjEsCmdLdSgpe3JldHVybiB0aGlzfSwKJEM6IiQxIiwK
+JFI6MSwKJEQ6bnVsbH0KSC5BeS5wcm90b3R5cGU9eyRDOiIkMCIsJFI6MH0KSC5FMS5wcm90b3R5cGU9
+eyRDOiIkMiIsJFI6Mn0KSC5sYy5wcm90b3R5cGU9e30KSC56eC5wcm90b3R5cGU9ewp3KGEpe3ZhciBz
+PXRoaXMuJHN0YXRpY19uYW1lCmlmKHM9PW51bGwpcmV0dXJuIkNsb3N1cmUgb2YgdW5rbm93biBzdGF0
+aWMgbWV0aG9kIgpyZXR1cm4iQ2xvc3VyZSAnIitILk5RKHMpKyInIn19CkguclQucHJvdG90eXBlPXsK
+RE4oYSxiKXtpZihiPT1udWxsKXJldHVybiExCmlmKHRoaXM9PT1iKXJldHVybiEwCmlmKCEoYiBpbnN0
+YW5jZW9mIEguclQpKXJldHVybiExCnJldHVybiB0aGlzLiRfdGFyZ2V0PT09Yi4kX3RhcmdldCYmdGhp
+cy5hPT09Yi5hfSwKZ2lPKGEpe3JldHVybihILkNVKHRoaXMuYSleSC5lUSh0aGlzLiRfdGFyZ2V0KSk+
+Pj4wfSwKdyhhKXtyZXR1cm4iQ2xvc3VyZSAnIit0aGlzLiRfbmFtZSsiJyBvZiAiKygiSW5zdGFuY2Ug
+b2YgJyIrSC5saCh0LksuYSh0aGlzLmEpKSsiJyIpfX0KSC5FcS5wcm90b3R5cGU9ewp3KGEpe3JldHVy
+biJSdW50aW1lRXJyb3I6ICIrdGhpcy5hfX0KSC5rWS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJBc3Nl
+cnRpb24gZmFpbGVkOiAiK1AuaGwodGhpcy5hKX19Ckgua3IucHJvdG90eXBlPXt9CkguTjUucHJvdG90
+eXBlPXsKZ0EoYSl7cmV0dXJuIHRoaXMuYX0sCmdsMChhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmdvcihh
+KXtyZXR1cm4hdGhpcy5nbDAodGhpcyl9LApndmMoKXtyZXR1cm4gbmV3IEguaTUodGhpcyxILkxoKHRo
+aXMpLkMoImk1PDE+IikpfSwKeDQoYSl7dmFyIHM9dGhpcy5iCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0
+dXJuIHRoaXMuWHUocyxhKX0sCnEoYSxiKXt2YXIgcyxyLHEscCxvPXRoaXMsbj1udWxsCmlmKHR5cGVv
+ZiBiPT0ic3RyaW5nIil7cz1vLmIKaWYocz09bnVsbClyZXR1cm4gbgpyPW8uajIocyxiKQpxPXI9PW51
+bGw/bjpyLmIKcmV0dXJuIHF9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjB4M2ZmZmZmZik9
+PT1iKXtwPW8uYwppZihwPT1udWxsKXJldHVybiBuCnI9by5qMihwLGIpCnE9cj09bnVsbD9uOnIuYgpy
+ZXR1cm4gcX1lbHNlIHJldHVybiBvLmFhKGIpfSwKYWEoYSl7dmFyIHMscixxPXRoaXMscD1xLmQKaWYo
+cD09bnVsbClyZXR1cm4gbnVsbApzPXEuQnQocCxxLnhpKGEpKQpyPXEuRmgocyxhKQppZihyPDApcmV0
+dXJuIG51bGwKcmV0dXJuIHNbcl0uYn0sClk1KGEsYixjKXt2YXIgcyxyLHE9dGhpcyxwPUguTGgocSkK
+cC5jLmEoYikKcC5RWzFdLmEoYykKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPXEuYgpxLkVIKHM9PW51
+bGw/cS5iPXEueksoKTpzLGIsYyl9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjB4M2ZmZmZm
+Zik9PT1iKXtyPXEuYwpxLkVIKHI9PW51bGw/cS5jPXEueksoKTpyLGIsYyl9ZWxzZSBxLnh3KGIsYyl9
+LAp4dyhhLGIpe3ZhciBzLHIscSxwLG89dGhpcyxuPUguTGgobykKbi5jLmEoYSkKbi5RWzFdLmEoYikK
+cz1vLmQKaWYocz09bnVsbClzPW8uZD1vLnpLKCkKcj1vLnhpKGEpCnE9by5CdChzLHIpCmlmKHE9PW51
+bGwpby5FSShzLHIsW28uSG4oYSxiKV0pCmVsc2V7cD1vLkZoKHEsYSkKaWYocD49MClxW3BdLmI9Ygpl
+bHNlIHEucHVzaChvLkhuKGEsYikpfX0sCksoYSxiKXt2YXIgcyxyLHE9dGhpcwpILkxoKHEpLkMoIn4o
+MSwyKSIpLmEoYikKcz1xLmUKcj1xLnIKZm9yKDtzIT1udWxsOyl7Yi4kMihzLmEscy5iKQppZihyIT09
+cS5yKXRocm93IEguYihQLmE0KHEpKQpzPXMuY319LApFSChhLGIsYyl7dmFyIHMscj10aGlzLHE9SC5M
+aChyKQpxLmMuYShiKQpxLlFbMV0uYShjKQpzPXIuajIoYSxiKQppZihzPT1udWxsKXIuRUkoYSxiLHIu
+SG4oYixjKSkKZWxzZSBzLmI9Y30sCmtzKCl7dGhpcy5yPXRoaXMucisxJjY3MTA4ODYzfSwKSG4oYSxi
+KXt2YXIgcz10aGlzLHI9SC5MaChzKSxxPW5ldyBILnZoKHIuYy5hKGEpLHIuUVsxXS5hKGIpKQppZihz
+LmU9PW51bGwpcy5lPXMuZj1xCmVsc2V7cj1zLmYKci50b1N0cmluZwpxLmQ9cgpzLmY9ci5jPXF9Kytz
+LmEKcy5rcygpCnJldHVybiBxfSwKeGkoYSl7cmV0dXJuIEouaGYoYSkmMHgzZmZmZmZmfSwKRmgoYSxi
+KXt2YXIgcyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8czsrK3IpaWYo
+Si5STShhW3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9LAp3KGEpe3JldHVybiBQLm5PKHRoaXMpfSwK
+ajIoYSxiKXtyZXR1cm4gYVtiXX0sCkJ0KGEsYil7cmV0dXJuIGFbYl19LApFSShhLGIsYyl7YVtiXT1j
+fSwKcm4oYSxiKXtkZWxldGUgYVtiXX0sClh1KGEsYil7cmV0dXJuIHRoaXMuajIoYSxiKSE9bnVsbH0s
+CnpLKCl7dmFyIHM9Ijxub24taWRlbnRpZmllci1rZXk+IixyPU9iamVjdC5jcmVhdGUobnVsbCkKdGhp
+cy5FSShyLHMscikKdGhpcy5ybihyLHMpCnJldHVybiByfSwKJGlGbzoxfQpILnZoLnByb3RvdHlwZT17
+fQpILmk1LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiB0aGlzLmEuYX0sCmdsMChhKXtyZXR1cm4gdGhp
+cy5hLmE9PT0wfSwKZ20oYSl7dmFyIHM9dGhpcy5hLHI9bmV3IEguTjYocyxzLnIsdGhpcy4kdGkuQygi
+TjY8MT4iKSkKci5jPXMuZQpyZXR1cm4gcn0sCnRnKGEsYil7cmV0dXJuIHRoaXMuYS54NChiKX19Ckgu
+TjYucHJvdG90eXBlPXsKZ2woKXtyZXR1cm4gdGhpcy5kfSwKRigpe3ZhciBzLHI9dGhpcyxxPXIuYQpp
+ZihyLmIhPT1xLnIpdGhyb3cgSC5iKFAuYTQocSkpCnM9ci5jCmlmKHM9PW51bGwpe3Iuc3FZKG51bGwp
+CnJldHVybiExfWVsc2V7ci5zcVkocy5hKQpyLmM9cy5jCnJldHVybiEwfX0sCnNxWShhKXt0aGlzLmQ9
+dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpILmRDLnByb3RvdHlwZT17CiQxKGEpe3JldHVy
+biB0aGlzLmEoYSl9LAokUzo0fQpILndOLnByb3RvdHlwZT17CiQyKGEsYil7cmV0dXJuIHRoaXMuYShh
+LGIpfSwKJFM6NTB9CkguVlgucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYShILm4oYSkpfSwK
+JFM6MjF9CkguVlIucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iUmVnRXhwLyIrdGhpcy5hKyIvIit0aGlz
+LmIuZmxhZ3N9LApnSGMoKXt2YXIgcz10aGlzLHI9cy5jCmlmKHIhPW51bGwpcmV0dXJuIHIKcj1zLmIK
+cmV0dXJuIHMuYz1ILnY0KHMuYSxyLm11bHRpbGluZSwhci5pZ25vcmVDYXNlLHIudW5pY29kZSxyLmRv
+dEFsbCwhMCl9LApkZChhLGIpe3JldHVybiBuZXcgSC5LVyh0aGlzLGIsMCl9LApVWihhLGIpe3ZhciBz
+LHI9dC5LLmEodGhpcy5nSGMoKSkKci5sYXN0SW5kZXg9YgpzPXIuZXhlYyhhKQppZihzPT1udWxsKXJl
+dHVybiBudWxsCnJldHVybiBuZXcgSC5FSyhzKX0sCiRpdlg6MSwKJGl3TDoxfQpILkVLLnByb3RvdHlw
+ZT17CnEoYSxiKXt2YXIgcwpILklaKGIpCnM9dGhpcy5iCmlmKGI+PXMubGVuZ3RoKXJldHVybiBILk9I
+KHMsYikKcmV0dXJuIHNbYl19LAokaU9kOjEsCiRpaWI6MX0KSC5LVy5wcm90b3R5cGU9ewpnbShhKXty
+ZXR1cm4gbmV3IEguUGIodGhpcy5hLHRoaXMuYix0aGlzLmMpfX0KSC5QYi5wcm90b3R5cGU9ewpnbCgp
+e3JldHVybiB0LmN6LmEodGhpcy5kKX0sCkYoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9bS5iCmlm
+KGw9PW51bGwpcmV0dXJuITEKcz1tLmMKcj1sLmxlbmd0aAppZihzPD1yKXtxPW0uYQpwPXEuVVoobCxz
+KQppZihwIT1udWxsKXttLmQ9cApzPXAuYgpvPXMuaW5kZXgKbj1vK3NbMF0ubGVuZ3RoCmlmKG89PT1u
+KXtpZihxLmIudW5pY29kZSl7cz1tLmMKcT1zKzEKaWYocTxyKXtzPUMueEIuTyhsLHMpCmlmKHM+PTU1
+Mjk2JiZzPD01NjMxOSl7cz1DLnhCLk8obCxxKQpzPXM+PTU2MzIwJiZzPD01NzM0M31lbHNlIHM9ITF9
+ZWxzZSBzPSExfWVsc2Ugcz0hMQpuPShzP24rMTpuKSsxfW0uYz1uCnJldHVybiEwfX1tLmI9bS5kPW51
+bGwKcmV0dXJuITF9LAokaUFuOjF9CkgudFEucHJvdG90eXBlPXsKcShhLGIpe0guSVooYikKaWYoYiE9
+PTApSC52KFAuTzcoYixudWxsKSkKcmV0dXJuIHRoaXMuY30sCiRpT2Q6MX0KSC51bi5wcm90b3R5cGU9
+ewpnbShhKXtyZXR1cm4gbmV3IEguU2QodGhpcy5hLHRoaXMuYix0aGlzLmMpfX0KSC5TZC5wcm90b3R5
+cGU9ewpGKCl7dmFyIHMscixxPXRoaXMscD1xLmMsbz1xLmIsbj1vLmxlbmd0aCxtPXEuYSxsPW0ubGVu
+Z3RoCmlmKHArbj5sKXtxLmQ9bnVsbApyZXR1cm4hMX1zPW0uaW5kZXhPZihvLHApCmlmKHM8MCl7cS5j
+PWwrMQpxLmQ9bnVsbApyZXR1cm4hMX1yPXMrbgpxLmQ9bmV3IEgudFEocyxvKQpxLmM9cj09PXEuYz9y
+KzE6cgpyZXR1cm4hMH0sCmdsKCl7dmFyIHM9dGhpcy5kCnMudG9TdHJpbmcKcmV0dXJuIHN9LAokaUFu
+OjF9CkguRVQucHJvdG90eXBlPXskaUVUOjEsJGlBUzoxfQpILkxaLnByb3RvdHlwZT17CmdBKGEpe3Jl
+dHVybiBhLmxlbmd0aH0sCiRpWGo6MX0KSC5EZy5wcm90b3R5cGU9ewpxKGEsYil7SC5JWihiKQpILm9k
+KGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19LApZNShhLGIsYyl7SC5yVihjKQpILm9kKGIsYSxhLmxl
+bmd0aCkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRpek06MX0KSC5QZy5wcm90b3R5cGU9ewpZNShh
+LGIsYyl7SC5JWihjKQpILm9kKGIsYSxhLmxlbmd0aCkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRp
+ek06MX0KSC54ai5wcm90b3R5cGU9ewpxKGEsYil7SC5JWihiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0
+dXJuIGFbYl19fQpILmRFLnByb3RvdHlwZT17CnEoYSxiKXtILklaKGIpCkgub2QoYixhLGEubGVuZ3Ro
+KQpyZXR1cm4gYVtiXX19CkguWkEucHJvdG90eXBlPXsKcShhLGIpe0guSVooYikKSC5vZChiLGEsYS5s
+ZW5ndGgpCnJldHVybiBhW2JdfX0KSC5kVC5wcm90b3R5cGU9ewpxKGEsYil7SC5JWihiKQpILm9kKGIs
+YSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILlBxLnByb3RvdHlwZT17CnEoYSxiKXtILklaKGIpCkgu
+b2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguZUUucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJu
+IGEubGVuZ3RofSwKcShhLGIpe0guSVooYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0K
+SC5WNi5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9LApxKGEsYil7SC5JWihiKQpILm9k
+KGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19LAokaW42OjF9CkguUkcucHJvdG90eXBlPXt9CkguVlAu
+cHJvdG90eXBlPXt9CkguV0IucHJvdG90eXBlPXt9CkguWkcucHJvdG90eXBlPXt9CkguSmMucHJvdG90
+eXBlPXsKQyhhKXtyZXR1cm4gSC5jRSh2LnR5cGVVbml2ZXJzZSx0aGlzLGEpfSwKS3EoYSl7cmV0dXJu
+IEgudjUodi50eXBlVW5pdmVyc2UsdGhpcyxhKX19CkguRy5wcm90b3R5cGU9e30KSC5rUy5wcm90b3R5
+cGU9ewp3KGEpe3JldHVybiB0aGlzLmF9fQpILmlNLnByb3RvdHlwZT17JGlFejoxfQpQLnRoLnByb3Rv
+dHlwZT17CiQxKGEpe3ZhciBzPXRoaXMuYSxyPXMuYQpzLmE9bnVsbApyLiQwKCl9LAokUzoxM30KUC5o
+YS5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyCnRoaXMuYS5hPXQuTS5hKGEpCnM9dGhpcy5iCnI9dGhp
+cy5jCnMuZmlyc3RDaGlsZD9zLnJlbW92ZUNoaWxkKHIpOnMuYXBwZW5kQ2hpbGQocil9LAokUzo0MX0K
+UC5Wcy5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6MTV9ClAuRnQucHJvdG90eXBlPXsK
+JDAoKXt0aGlzLmEuJDAoKX0sCiRTOjE1fQpQLlczLnByb3RvdHlwZT17CkNZKGEsYil7aWYoc2VsZi5z
+ZXRUaW1lb3V0IT1udWxsKXNlbGYuc2V0VGltZW91dChILnRSKG5ldyBQLnlIKHRoaXMsYiksMCksYSkK
+ZWxzZSB0aHJvdyBILmIoUC5MNCgiYHNldFRpbWVvdXQoKWAgbm90IGZvdW5kLiIpKX19ClAueUgucHJv
+dG90eXBlPXsKJDAoKXt0aGlzLmIuJDAoKX0sCiRTOjB9ClAuaWgucHJvdG90eXBlPXsKYU0oYSxiKXt2
+YXIgcyxyPXRoaXMscT1yLiR0aQpxLkMoIjEvPyIpLmEoYikKaWYoYj09bnVsbCliPXEuYy5hKGIpCmlm
+KCFyLmIpci5hLlhmKGIpCmVsc2V7cz1yLmEKaWYocS5DKCJiODwxPiIpLmIoYikpcy5jVShiKQplbHNl
+IHMuWDIocS5jLmEoYikpfX0sCncwKGEsYil7dmFyIHM9dGhpcy5hCmlmKHRoaXMuYilzLlpMKGEsYikK
+ZWxzZSBzLk5rKGEsYil9fQpQLldNLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLmEuJDIoMCxh
+KX0sCiRTOjUxfQpQLlNYLnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLiQyKDEsbmV3IEguYnEoYSx0
+LmwuYShiKSkpfSwKJFM6NTN9ClAuR3MucHJvdG90eXBlPXsKJDIoYSxiKXt0aGlzLmEoSC5JWihhKSxi
+KX0sCiRTOjQ1fQpQLkZ5LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIkl0ZXJhdGlvbk1hcmtlcigiK3Ro
+aXMuYisiLCAiK0guRWoodGhpcy5hKSsiKSJ9fQpQLkdWLnByb3RvdHlwZT17CmdsKCl7dmFyIHM9dGhp
+cy5jCmlmKHM9PW51bGwpcmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmIpCnJldHVybiBzLmdsKCl9LApG
+KCl7dmFyIHMscixxLHAsbyxuLG09dGhpcwpmb3Iocz1tLiR0aS5DKCJBbjwxPiIpOyEwOyl7cj1tLmMK
+aWYociE9bnVsbClpZihyLkYoKSlyZXR1cm4hMAplbHNlIG0uc1g5KG51bGwpCnE9ZnVuY3Rpb24oYSxi
+LGMpe3ZhciBsLGs9Ygp3aGlsZSh0cnVlKXRyeXtyZXR1cm4gYShrLGwpfWNhdGNoKGope2w9agprPWN9
+fShtLmEsMCwxKQppZihxIGluc3RhbmNlb2YgUC5GeSl7cD1xLmIKaWYocD09PTIpe289bS5kCmlmKG89
+PW51bGx8fG8ubGVuZ3RoPT09MCl7bS5zRUMobnVsbCkKcmV0dXJuITF9aWYoMD49by5sZW5ndGgpcmV0
+dXJuIEguT0gobywtMSkKbS5hPW8ucG9wKCkKY29udGludWV9ZWxzZXtyPXEuYQppZihwPT09Myl0aHJv
+dyByCmVsc2V7bj1zLmEoSi5JVChyKSkKaWYobiBpbnN0YW5jZW9mIFAuR1Ype3I9bS5kCmlmKHI9PW51
+bGwpcj1tLmQ9W10KQy5ObS5pKHIsbS5hKQptLmE9bi5hCmNvbnRpbnVlfWVsc2V7bS5zWDkobikKY29u
+dGludWV9fX19ZWxzZXttLnNFQyhxKQpyZXR1cm4hMH19cmV0dXJuITF9LApzRUMoYSl7dGhpcy5iPXRo
+aXMuJHRpLkMoIjE/IikuYShhKX0sCnNYOShhKXt0aGlzLmM9dGhpcy4kdGkuQygiQW48MT4/IikuYShh
+KX0sCiRpQW46MX0KUC5xNC5wcm90b3R5cGU9ewpnbShhKXtyZXR1cm4gbmV3IFAuR1YodGhpcy5hKCks
+dGhpcy4kdGkuQygiR1Y8MT4iKSl9fQpQLkN3LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIEguRWoodGhp
+cy5hKX0sCiRpWFM6MSwKZ0lJKCl7cmV0dXJuIHRoaXMuYn19ClAuUGYucHJvdG90eXBlPXsKdzAoYSxi
+KXt2YXIgcwpILmNiKGEsImVycm9yIix0LkspCnM9dGhpcy5hCmlmKChzLmEmMzApIT09MCl0aHJvdyBI
+LmIoUC5QVigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIikpCmlmKGI9PW51bGwpYj1QLnYwKGEpCnMu
+TmsoYSxiKX0sCnBtKGEpe3JldHVybiB0aGlzLncwKGEsbnVsbCl9fQpQLlpmLnByb3RvdHlwZT17CmFN
+KGEsYil7dmFyIHMscj10aGlzLiR0aQpyLkMoIjEvPyIpLmEoYikKcz10aGlzLmEKaWYoKHMuYSYzMCkh
+PT0wKXRocm93IEguYihQLlBWKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKSkKcy5YZihyLkMoIjEv
+IikuYShiKSl9fQpQLkZlLnByb3RvdHlwZT17CkhSKGEpe2lmKCh0aGlzLmMmMTUpIT09NilyZXR1cm4h
+MApyZXR1cm4gdGhpcy5iLmIuYnYodC5hbC5hKHRoaXMuZCksYS5hLHQueSx0LkspfSwKS3coYSl7dmFy
+IHMscj10aGlzLHE9ci5lLHA9bnVsbCxvPXQueixuPXQuSyxtPWEuYSxsPXIuYi5iCmlmKHQuYS5iKHEp
+KXA9bC5ycChxLG0sYS5iLG8sbix0LmwpCmVsc2UgcD1sLmJ2KHQudi5hKHEpLG0sbyxuKQp0cnl7bz1y
+LiR0aS5DKCIyLyIpLmEocCkKcmV0dXJuIG99Y2F0Y2gocyl7aWYodC5lSy5iKEguUnUocykpKXtpZigo
+ci5jJjEpIT09MCl0aHJvdyBILmIoUC54WSgiVGhlIGVycm9yIGhhbmRsZXIgb2YgRnV0dXJlLnRoZW4g
+bXVzdCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgdHlwZSIsIm9uRXJyb3Ii
+KSkKdGhyb3cgSC5iKFAueFkoIlRoZSBlcnJvciBoYW5kbGVyIG9mIEZ1dHVyZS5jYXRjaEVycm9yIG11
+c3QgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGZ1dHVyZSdzIHR5cGUiLCJvbkVycm9yIikpfWVsc2UgdGhy
+b3cgc319fQpQLnZzLnByb3RvdHlwZT17ClNxKGEsYixjKXt2YXIgcyxyLHEscD10aGlzLiR0aQpwLktx
+KGMpLkMoIjEvKDIpIikuYShhKQpzPSQuWDMKaWYocz09PUMuTlUpe2lmKGIhPW51bGwmJiF0LmEuYihi
+KSYmIXQudi5iKGIpKXRocm93IEguYihQLkwzKGIsIm9uRXJyb3IiLHUuYykpfWVsc2V7Yy5DKCJAPDAv
+PiIpLktxKHAuYykuQygiMSgyKSIpLmEoYSkKaWYoYiE9bnVsbCliPVAuVkgoYixzKX1yPW5ldyBQLnZz
+KHMsYy5DKCJ2czwwPiIpKQpxPWI9PW51bGw/MTozCnRoaXMueGYobmV3IFAuRmUocixxLGEsYixwLkMo
+IkA8MT4iKS5LcShjKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gcn0sClc3KGEsYil7cmV0dXJuIHRoaXMu
+U3EoYSxudWxsLGIpfSwKUWQoYSxiLGMpe3ZhciBzLHI9dGhpcy4kdGkKci5LcShjKS5DKCIxLygyKSIp
+LmEoYSkKcz1uZXcgUC52cygkLlgzLGMuQygidnM8MD4iKSkKdGhpcy54ZihuZXcgUC5GZShzLDE5LGEs
+YixyLkMoIkA8MT4iKS5LcShjKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gc30sClA5KGEpe3RoaXMuYT10
+aGlzLmEmMXwxNgp0aGlzLmM9YX0sCnVnKGEpe3RoaXMuYT1hLmEmMzB8dGhpcy5hJjEKdGhpcy5jPWEu
+Y30sCnhmKGEpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihxPD0zKXthLmE9dC5lLmEoci5jKQpyLmM9YX1l
+bHNle2lmKChxJjQpIT09MCl7cz10LmMuYShyLmMpCmlmKChzLmEmMjQpPT09MCl7cy54ZihhKQpyZXR1
+cm59ci51ZyhzKX1QLlRrKG51bGwsbnVsbCxyLmIsdC5NLmEobmV3IFAuZGEocixhKSkpfX0sCmpRKGEp
+e3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD17fQpsLmE9YQppZihhPT1udWxsKXJldHVybgpzPW0uYQpp
+ZihzPD0zKXtyPXQuZS5hKG0uYykKbS5jPWEKaWYociE9bnVsbCl7cT1hLmEKZm9yKHA9YTtxIT1udWxs
+O3A9cSxxPW8pbz1xLmEKcC5hPXJ9fWVsc2V7aWYoKHMmNCkhPT0wKXtuPXQuYy5hKG0uYykKaWYoKG4u
+YSYyNCk9PT0wKXtuLmpRKGEpCnJldHVybn1tLnVnKG4pfWwuYT1tLk44KGEpClAuVGsobnVsbCxudWxs
+LG0uYix0Lk0uYShuZXcgUC5vUShsLG0pKSl9fSwKYWgoKXt2YXIgcz10LmUuYSh0aGlzLmMpCnRoaXMu
+Yz1udWxsCnJldHVybiB0aGlzLk44KHMpfSwKTjgoYSl7dmFyIHMscixxCmZvcihzPWEscj1udWxsO3Mh
+PW51bGw7cj1zLHM9cSl7cT1zLmEKcy5hPXJ9cmV0dXJuIHJ9LAplYyhhKXt2YXIgcyxyLHEscD10aGlz
+CnAuYV49Mgp0cnl7YS5TcShuZXcgUC5wVihwKSxuZXcgUC5VNyhwKSx0LlApfWNhdGNoKHEpe3M9SC5S
+dShxKQpyPUgudHMocSkKUC5yYihuZXcgUC52cihwLHMscikpfX0sClgyKGEpe3ZhciBzLHI9dGhpcwpy
+LiR0aS5jLmEoYSkKcz1yLmFoKCkKci5hPTgKci5jPWEKUC5IWihyLHMpfSwKWkwoYSxiKXt2YXIgcwp0
+LmwuYShiKQpzPXRoaXMuYWgoKQp0aGlzLlA5KFAuVGwoYSxiKSkKUC5IWih0aGlzLHMpfSwKWGYoYSl7
+dmFyIHM9dGhpcy4kdGkKcy5DKCIxLyIpLmEoYSkKaWYocy5DKCJiODwxPiIpLmIoYSkpe3RoaXMuY1Uo
+YSkKcmV0dXJufXRoaXMud1Uocy5jLmEoYSkpfSwKd1UoYSl7dmFyIHM9dGhpcwpzLiR0aS5jLmEoYSkK
+cy5hXj0yClAuVGsobnVsbCxudWxsLHMuYix0Lk0uYShuZXcgUC5ydChzLGEpKSl9LApjVShhKXt2YXIg
+cz10aGlzLHI9cy4kdGkKci5DKCJiODwxPiIpLmEoYSkKaWYoci5iKGEpKXtpZigoYS5hJjE2KSE9PTAp
+e3MuYV49MgpQLlRrKG51bGwsbnVsbCxzLmIsdC5NLmEobmV3IFAuS0YocyxhKSkpfWVsc2UgUC5BOShh
+LHMpCnJldHVybn1zLmVjKGEpfSwKTmsoYSxiKXt0aGlzLmFePTIKUC5UayhudWxsLG51bGwsdGhpcy5i
+LHQuTS5hKG5ldyBQLlpMKHRoaXMsYSxiKSkpfSwKJGliODoxfQpQLmRhLnByb3RvdHlwZT17CiQwKCl7
+UC5IWih0aGlzLmEsdGhpcy5iKX0sCiRTOjB9ClAub1EucHJvdG90eXBlPXsKJDAoKXtQLkhaKHRoaXMu
+Yix0aGlzLmEuYSl9LAokUzowfQpQLnBWLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwPXRoaXMu
+YQpwLmFePTIKdHJ5e3AuWDIocC4kdGkuYy5hKGEpKX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEp
+CnAuWkwocyxyKX19LAokUzoxM30KUC5VNy5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYS5aTCh0Lksu
+YShhKSx0LmwuYShiKSl9LAokUzozNH0KUC52ci5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS5aTCh0aGlz
+LmIsdGhpcy5jKX0sCiRTOjB9ClAucnQucHJvdG90eXBlPXsKJDAoKXt0aGlzLmEuWDIodGhpcy5iKX0s
+CiRTOjB9ClAuS0YucHJvdG90eXBlPXsKJDAoKXtQLkE5KHRoaXMuYix0aGlzLmEpfSwKJFM6MH0KUC5a
+TC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS5aTCh0aGlzLmIsdGhpcy5jKX0sCiRTOjB9ClAuUlQucHJv
+dG90eXBlPXsKJDAoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9bnVsbAp0cnl7cT1tLmEuYQpsPXEu
+Yi5iLnp6KHQuZk8uYShxLmQpLHQueil9Y2F0Y2gocCl7cz1ILlJ1KHApCnI9SC50cyhwKQpxPW0uYyYm
+dC5uLmEobS5iLmEuYykuYT09PXMKbz1tLmEKaWYocSlvLmM9dC5uLmEobS5iLmEuYykKZWxzZSBvLmM9
+UC5UbChzLHIpCm8uYj0hMApyZXR1cm59aWYobCBpbnN0YW5jZW9mIFAudnMmJihsLmEmMjQpIT09MCl7
+aWYoKGwuYSYxNikhPT0wKXtxPW0uYQpxLmM9dC5uLmEobC5jKQpxLmI9ITB9cmV0dXJufWlmKHQuaS5i
+KGwpKXtuPW0uYi5hCnE9bS5hCnEuYz1sLlc3KG5ldyBQLmpaKG4pLHQueikKcS5iPSExfX0sCiRTOjB9
+ClAualoucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYX0sCiRTOjI5fQpQLnJxLnByb3RvdHlw
+ZT17CiQwKCl7dmFyIHMscixxLHAsbyxuLG0sbAp0cnl7cT10aGlzLmEKcD1xLmEKbz1wLiR0aQpuPW8u
+YwptPW4uYSh0aGlzLmIpCnEuYz1wLmIuYi5idihvLkMoIjIvKDEpIikuYShwLmQpLG0sby5DKCIyLyIp
+LG4pfWNhdGNoKGwpe3M9SC5SdShsKQpyPUgudHMobCkKcT10aGlzLmEKcS5jPVAuVGwocyxyKQpxLmI9
+ITB9fSwKJFM6MH0KUC5SVy5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMKdHJ5
+e3M9dC5uLmEobS5hLmEuYykKcD1tLmIKaWYocC5hLkhSKHMpJiZwLmEuZSE9bnVsbCl7cC5jPXAuYS5L
+dyhzKQpwLmI9ITF9fWNhdGNoKG8pe3I9SC5SdShvKQpxPUgudHMobykKcD10Lm4uYShtLmEuYS5jKQpu
+PW0uYgppZihwLmE9PT1yKW4uYz1wCmVsc2Ugbi5jPVAuVGwocixxKQpuLmI9ITB9fSwKJFM6MH0KUC5P
+TS5wcm90b3R5cGU9e30KUC5xaC5wcm90b3R5cGU9ewpnQShhKXt2YXIgcyxyLHE9dGhpcyxwPXt9LG89
+bmV3IFAudnMoJC5YMyx0LmZKKQpwLmE9MApzPUguTGgocSkKcj1zLkMoIn4oMSk/IikuYShuZXcgUC5C
+NShwLHEpKQp0LlouYShuZXcgUC51TyhwLG8pKQpXLkpFKHEuYSxxLmIsciwhMSxzLmMpCnJldHVybiBv
+fX0KUC5CNS5wcm90b3R5cGU9ewokMShhKXtILkxoKHRoaXMuYikuYy5hKGEpOysrdGhpcy5hLmF9LAok
+Uygpe3JldHVybiBILkxoKHRoaXMuYikuQygifigxKSIpfX0KUC51Ty5wcm90b3R5cGU9ewokMCgpe3Zh
+ciBzPXRoaXMuYixyPXMuJHRpLHE9ci5DKCIxLyIpLmEodGhpcy5hLmEpLHA9cy5haCgpCnIuYy5hKHEp
+CnMuYT04CnMuYz1xClAuSFoocyxwKX0sCiRTOjB9ClAuTU8ucHJvdG90eXBlPXt9ClAua1QucHJvdG90
+eXBlPXt9ClAueEkucHJvdG90eXBlPXt9ClAubTAucHJvdG90eXBlPXskaVFtOjF9ClAuRXYucHJvdG90
+eXBlPXsKJDAoKXt2YXIgcz10LksuYShILmIodGhpcy5hKSkKcy5zdGFjaz10aGlzLmIudygwKQp0aHJv
+dyBzfSwKJFM6MH0KUC5KaS5wcm90b3R5cGU9ewpiSChhKXt2YXIgcyxyLHEscCxvCnQuTS5hKGEpCnRy
+eXtpZihDLk5VPT09JC5YMyl7YS4kMCgpCnJldHVybn1QLlQ4KG51bGwsbnVsbCx0aGlzLGEsdC5IKX1j
+YXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEpCnA9dC5LLmEocykKbz10LmwuYShyKQpQLlNpKHAsbyl9
+fSwKRGwoYSxiLGMpe3ZhciBzLHIscSxwLG8KYy5DKCJ+KDApIikuYShhKQpjLmEoYikKdHJ5e2lmKEMu
+TlU9PT0kLlgzKXthLiQxKGIpCnJldHVybn1QLnl2KG51bGwsbnVsbCx0aGlzLGEsYix0LkgsYyl9Y2F0
+Y2gocSl7cz1ILlJ1KHEpCnI9SC50cyhxKQpwPXQuSy5hKHMpCm89dC5sLmEocikKUC5TaShwLG8pfX0s
+CkdZKGEpe3JldHVybiBuZXcgUC5WcCh0aGlzLHQuTS5hKGEpKX0sClB5KGEsYil7cmV0dXJuIG5ldyBQ
+Lk9SKHRoaXMsYi5DKCJ+KDApIikuYShhKSxiKX0sCnEoYSxiKXtyZXR1cm4gbnVsbH0sCnp6KGEsYil7
+Yi5DKCIwKCkiKS5hKGEpCmlmKCQuWDM9PT1DLk5VKXJldHVybiBhLiQwKCkKcmV0dXJuIFAuVDgobnVs
+bCxudWxsLHRoaXMsYSxiKX0sCmJ2KGEsYixjLGQpe2MuQygiQDwwPiIpLktxKGQpLkMoIjEoMikiKS5h
+KGEpCmQuYShiKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMShiKQpyZXR1cm4gUC55dihudWxsLG51
+bGwsdGhpcyxhLGIsYyxkKX0sCnJwKGEsYixjLGQsZSxmKXtkLkMoIkA8MD4iKS5LcShlKS5LcShmKS5D
+KCIxKDIsMykiKS5hKGEpCmUuYShiKQpmLmEoYykKaWYoJC5YMz09PUMuTlUpcmV0dXJuIGEuJDIoYixj
+KQpyZXR1cm4gUC5ReChudWxsLG51bGwsdGhpcyxhLGIsYyxkLGUsZil9LApMaihhLGIsYyxkKXtyZXR1
+cm4gYi5DKCJAPDA+IikuS3EoYykuS3EoZCkuQygiMSgyLDMpIikuYShhKX19ClAuVnAucHJvdG90eXBl
+PXsKJDAoKXtyZXR1cm4gdGhpcy5hLmJIKHRoaXMuYil9LAokUzowfQpQLk9SLnByb3RvdHlwZT17CiQx
+KGEpe3ZhciBzPXRoaXMuYwpyZXR1cm4gdGhpcy5hLkRsKHRoaXMuYixzLmEoYSkscyl9LAokUygpe3Jl
+dHVybiB0aGlzLmMuQygifigwKSIpfX0KUC5iNi5wcm90b3R5cGU9ewpnbShhKXt2YXIgcz10aGlzLHI9
+bmV3IFAubG0ocyxzLnIsSC5MaChzKS5DKCJsbTwxPiIpKQpyLmM9cy5lCnJldHVybiByfSwKZ0EoYSl7
+cmV0dXJuIHRoaXMuYX0sCmdsMChhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmdvcihhKXtyZXR1cm4gdGhp
+cy5hIT09MH0sCnRnKGEsYil7dmFyIHMscgppZihiIT09Il9fcHJvdG9fXyIpe3M9dGhpcy5iCmlmKHM9
+PW51bGwpcmV0dXJuITEKcmV0dXJuIHQuZy5hKHNbYl0pIT1udWxsfWVsc2V7cj10aGlzLlBSKGIpCnJl
+dHVybiByfX0sClBSKGEpe3ZhciBzPXRoaXMuZAppZihzPT1udWxsKXJldHVybiExCnJldHVybiB0aGlz
+LkRGKHNbdGhpcy5OKGEpXSxhKT49MH0sCmkoYSxiKXt2YXIgcyxyLHE9dGhpcwpILkxoKHEpLmMuYShi
+KQppZih0eXBlb2YgYj09InN0cmluZyImJmIhPT0iX19wcm90b19fIil7cz1xLmIKcmV0dXJuIHEuSihz
+PT1udWxsP3EuYj1QLlQyKCk6cyxiKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMTA3Mzc0
+MTgyMyk9PT1iKXtyPXEuYwpyZXR1cm4gcS5KKHI9PW51bGw/cS5jPVAuVDIoKTpyLGIpfWVsc2UgcmV0
+dXJuIHEuWShiKX0sClkoYSl7dmFyIHMscixxLHA9dGhpcwpILkxoKHApLmMuYShhKQpzPXAuZAppZihz
+PT1udWxsKXM9cC5kPVAuVDIoKQpyPXAuTihhKQpxPXNbcl0KaWYocT09bnVsbClzW3JdPVtwLnlvKGEp
+XQplbHNle2lmKHAuREYocSxhKT49MClyZXR1cm4hMQpxLnB1c2gocC55byhhKSl9cmV0dXJuITB9LApS
+KGEsYil7dmFyIHM9dGhpcwppZih0eXBlb2YgYj09InN0cmluZyImJmIhPT0iX19wcm90b19fIilyZXR1
+cm4gcy5IKHMuYixiKQplbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMTA3Mzc0MTgyMyk9PT1i
+KXJldHVybiBzLkgocy5jLGIpCmVsc2UgcmV0dXJuIHMucWcoYil9LApxZyhhKXt2YXIgcyxyLHEscCxv
+PXRoaXMsbj1vLmQKaWYobj09bnVsbClyZXR1cm4hMQpzPW8uTihhKQpyPW5bc10KcT1vLkRGKHIsYSkK
+aWYocTwwKXJldHVybiExCnA9ci5zcGxpY2UocSwxKVswXQppZigwPT09ci5sZW5ndGgpZGVsZXRlIG5b
+c10Kby5HKHApCnJldHVybiEwfSwKSihhLGIpe0guTGgodGhpcykuYy5hKGIpCmlmKHQuZy5hKGFbYl0p
+IT1udWxsKXJldHVybiExCmFbYl09dGhpcy55byhiKQpyZXR1cm4hMH0sCkgoYSxiKXt2YXIgcwppZihh
+PT1udWxsKXJldHVybiExCnM9dC5nLmEoYVtiXSkKaWYocz09bnVsbClyZXR1cm4hMQp0aGlzLkcocykK
+ZGVsZXRlIGFbYl0KcmV0dXJuITB9LApTKCl7dGhpcy5yPXRoaXMucisxJjEwNzM3NDE4MjN9LAp5byhh
+KXt2YXIgcyxyPXRoaXMscT1uZXcgUC5ibihILkxoKHIpLmMuYShhKSkKaWYoci5lPT1udWxsKXIuZT1y
+LmY9cQplbHNle3M9ci5mCnMudG9TdHJpbmcKcS5jPXMKci5mPXMuYj1xfSsrci5hCnIuUygpCnJldHVy
+biBxfSwKRyhhKXt2YXIgcz10aGlzLHI9YS5jLHE9YS5iCmlmKHI9PW51bGwpcy5lPXEKZWxzZSByLmI9
+cQppZihxPT1udWxsKXMuZj1yCmVsc2UgcS5jPXI7LS1zLmEKcy5TKCl9LApOKGEpe3JldHVybiBKLmhm
+KGEpJjEwNzM3NDE4MjN9LApERihhLGIpe3ZhciBzLHIKaWYoYT09bnVsbClyZXR1cm4tMQpzPWEubGVu
+Z3RoCmZvcihyPTA7cjxzOysrcilpZihKLlJNKGFbcl0uYSxiKSlyZXR1cm4gcgpyZXR1cm4tMX19ClAu
+Ym4ucHJvdG90eXBlPXt9ClAubG0ucHJvdG90eXBlPXsKZ2woKXtyZXR1cm4gdGhpcy4kdGkuYy5hKHRo
+aXMuZCl9LApGKCl7dmFyIHM9dGhpcyxyPXMuYyxxPXMuYQppZihzLmIhPT1xLnIpdGhyb3cgSC5iKFAu
+YTQocSkpCmVsc2UgaWYocj09bnVsbCl7cy5zaihudWxsKQpyZXR1cm4hMX1lbHNle3Muc2oocy4kdGku
+QygiMT8iKS5hKHIuYSkpCnMuYz1yLmIKcmV0dXJuITB9fSwKc2ooYSl7dGhpcy5kPXRoaXMuJHRpLkMo
+IjE/IikuYShhKX0sCiRpQW46MX0KUC5tVy5wcm90b3R5cGU9e30KUC51eS5wcm90b3R5cGU9eyRpYlE6
+MSwkaWNYOjEsJGl6TToxfQpQLmxELnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgSC5hNyhhLHRo
+aXMuZ0EoYSksSC56SyhhKS5DKCJhNzxsRC5FPiIpKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5xKGEsYil9
+LApLKGEsYil7dmFyIHMscgpILnpLKGEpLkMoIn4obEQuRSkiKS5hKGIpCnM9dGhpcy5nQShhKQpmb3Io
+cj0wO3I8czsrK3Ipe2IuJDEodGhpcy5xKGEscikpCmlmKHMhPT10aGlzLmdBKGEpKXRocm93IEguYihQ
+LmE0KGEpKX19LApnbDAoYSl7cmV0dXJuIHRoaXMuZ0EoYSk9PT0wfSwKZ29yKGEpe3JldHVybiF0aGlz
+LmdsMChhKX0sCkUyKGEsYixjKXt2YXIgcz1ILnpLKGEpCnJldHVybiBuZXcgSC5sSihhLHMuS3EoYyku
+QygiMShsRC5FKSIpLmEoYikscy5DKCJAPGxELkU+IikuS3EoYykuQygibEo8MSwyPiIpKX0sCmVSKGEs
+Yil7cmV0dXJuIEgucUMoYSxiLG51bGwsSC56SyhhKS5DKCJsRC5FIikpfSwKZHIoYSxiKXtyZXR1cm4g
+bmV3IEgualYoYSxILnpLKGEpLkMoIkA8bEQuRT4iKS5LcShiKS5DKCJqVjwxLDI+IikpfSwKZHUoYSxi
+LGMsZCl7dmFyIHMscj1ILnpLKGEpCmQ9ci5DKCJsRC5FIikuYShyLkMoImxELkU/IikuYShkKSkKUC5q
+QihiLGMsdGhpcy5nQShhKSkKZm9yKHM9YjtzPGM7KytzKXRoaXMuWTUoYSxzLGQpfSwKdyhhKXtyZXR1
+cm4gUC54KGEsIlsiLCJdIil9fQpQLmlsLnByb3RvdHlwZT17fQpQLnJhLnByb3RvdHlwZT17CiQyKGEs
+Yil7dmFyIHMscj10aGlzLmEKaWYoIXIuYSl0aGlzLmIuYSs9IiwgIgpyLmE9ITEKcj10aGlzLmIKcz1y
+LmErPUguRWooYSkKci5hPXMrIjogIgpyLmErPUguRWooYil9LAokUzo5fQpQLllrLnByb3RvdHlwZT17
+CksoYSxiKXt2YXIgcyxyLHE9SC5MaCh0aGlzKQpxLkMoIn4oWWsuSyxZay5WKSIpLmEoYikKZm9yKHM9
+Si5JVCh0aGlzLmd2YygpKSxxPXEuQygiWWsuViIpO3MuRigpOyl7cj1zLmdsKCkKYi4kMihyLHEuYSh0
+aGlzLnEoMCxyKSkpfX0sCmdQdShhKXtyZXR1cm4gSi5NMSh0aGlzLmd2YygpLG5ldyBQLnlRKHRoaXMp
+LEguTGgodGhpcykuQygiTjM8WWsuSyxZay5WPiIpKX0sCng0KGEpe3JldHVybiBKLnpsKHRoaXMuZ3Zj
+KCksYSl9LApnQShhKXtyZXR1cm4gSi5IbSh0aGlzLmd2YygpKX0sCmdsMChhKXtyZXR1cm4gSi51VSh0
+aGlzLmd2YygpKX0sCncoYSl7cmV0dXJuIFAubk8odGhpcyl9LAokaVowOjF9ClAueVEucHJvdG90eXBl
+PXsKJDEoYSl7dmFyIHMscj10aGlzLmEscT1ILkxoKHIpCnEuQygiWWsuSyIpLmEoYSkKcz1xLkMoIllr
+LlYiKQpyZXR1cm4gbmV3IFAuTjMoYSxzLmEoci5xKDAsYSkpLHEuQygiQDxZay5LPiIpLktxKHMpLkMo
+Ik4zPDEsMj4iKSl9LAokUygpe3JldHVybiBILkxoKHRoaXMuYSkuQygiTjM8WWsuSyxZay5WPihZay5L
+KSIpfX0KUC5LUC5wcm90b3R5cGU9ewpZNShhLGIsYyl7dmFyIHM9SC5MaCh0aGlzKQpzLmMuYShiKQpz
+LlFbMV0uYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIikp
+fX0KUC5Qbi5wcm90b3R5cGU9ewpxKGEsYil7cmV0dXJuIHRoaXMuYS5xKDAsYil9LApZNShhLGIsYyl7
+dmFyIHM9SC5MaCh0aGlzKQp0aGlzLmEuWTUoMCxzLmMuYShiKSxzLlFbMV0uYShjKSl9LAp4NChhKXty
+ZXR1cm4gdGhpcy5hLng0KGEpfSwKSyhhLGIpe3RoaXMuYS5LKDAsSC5MaCh0aGlzKS5DKCJ+KDEsMiki
+KS5hKGIpKX0sCmdsMChhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ2wwKHMpfSwKZ0EoYSl7dmFyIHM9
+dGhpcy5hCnJldHVybiBzLmdBKHMpfSwKdyhhKXtyZXR1cm4gdGhpcy5hLncoMCl9LApnUHUoYSl7dmFy
+IHM9dGhpcy5hCnJldHVybiBzLmdQdShzKX0sCiRpWjA6MX0KUC5Hai5wcm90b3R5cGU9e30KUC5sZi5w
+cm90b3R5cGU9ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKZ29yKGEpe3JldHVybiB0
+aGlzLmdBKHRoaXMpIT09MH0sCkZWKGEsYil7dmFyIHMKZm9yKHM9Si5JVChILkxoKHRoaXMpLkMoImNY
+PGxmLkU+IikuYShiKSk7cy5GKCk7KXRoaXMuaSgwLHMuZ2woKSl9LAp3KGEpe3JldHVybiBQLngodGhp
+cywieyIsIn0iKX0sCmsoYSxiKXt2YXIgcyxyLHE9dGhpcy5nbSh0aGlzKQppZighcS5GKCkpcmV0dXJu
+IiIKcz1xLiR0aS5jCmlmKGI9PT0iIil7cj0iIgpkbyByKz1ILkVqKHMuYShxLmQpKQp3aGlsZShxLkYo
+KSkKcz1yfWVsc2V7cj0iIitILkVqKHMuYShxLmQpKQpmb3IoO3EuRigpOylyPXIrYitILkVqKHMuYShx
+LmQpKQpzPXJ9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LAplUihhLGIpe3JldHVybiBILmJL
+KHRoaXMsYixILkxoKHRoaXMpLkMoImxmLkUiKSl9LApFKGEsYil7dmFyIHMscixxLHAsbz0iaW5kZXgi
+CkguY2IoYixvLHQuUykKUC5rMShiLG8pCmZvcihzPXRoaXMuZ20odGhpcykscj1zLiR0aS5jLHE9MDtz
+LkYoKTspe3A9ci5hKHMuZCkKaWYoYj09PXEpcmV0dXJuIHA7KytxfXRocm93IEguYihQLkNmKGIsdGhp
+cyxvLG51bGwscSkpfX0KUC5Wai5wcm90b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGl4dToxfQpQLlh2LnBy
+b3RvdHlwZT17JGliUToxLCRpY1g6MSwkaXh1OjF9ClAublkucHJvdG90eXBlPXt9ClAuV1kucHJvdG90
+eXBlPXt9ClAuUlUucHJvdG90eXBlPXt9ClAucFIucHJvdG90eXBlPXt9ClAudXcucHJvdG90eXBlPXsK
+cShhLGIpe3ZhciBzLHI9dGhpcy5iCmlmKHI9PW51bGwpcmV0dXJuIHRoaXMuYy5xKDAsYikKZWxzZSBp
+Zih0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIG51bGwKZWxzZXtzPXJbYl0KcmV0dXJuIHR5cGVvZiBz
+PT0idW5kZWZpbmVkIj90aGlzLmZiKGIpOnN9fSwKZ0EoYSl7dmFyIHMKaWYodGhpcy5iPT1udWxsKXtz
+PXRoaXMuYwpzPXMuZ0Eocyl9ZWxzZSBzPXRoaXMuQ2YoKS5sZW5ndGgKcmV0dXJuIHN9LApnbDAoYSl7
+cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKZ3ZjKCl7aWYodGhpcy5iPT1udWxsKXJldHVybiB0aGlz
+LmMuZ3ZjKCkKcmV0dXJuIG5ldyBQLmk4KHRoaXMpfSwKWTUoYSxiLGMpe3ZhciBzLHIscT10aGlzCmlm
+KHEuYj09bnVsbClxLmMuWTUoMCxiLGMpCmVsc2UgaWYocS54NChiKSl7cz1xLmIKc1tiXT1jCnI9cS5h
+CmlmKHI9PW51bGw/cyE9bnVsbDpyIT09cylyW2JdPW51bGx9ZWxzZSBxLlhLKCkuWTUoMCxiLGMpfSwK
+eDQoYSl7aWYodGhpcy5iPT1udWxsKXJldHVybiB0aGlzLmMueDQoYSkKcmV0dXJuIE9iamVjdC5wcm90
+b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmEsYSl9LApLKGEsYil7dmFyIHMscixxLHAsbz10
+aGlzCnQuY0EuYShiKQppZihvLmI9PW51bGwpcmV0dXJuIG8uYy5LKDAsYikKcz1vLkNmKCkKZm9yKHI9
+MDtyPHMubGVuZ3RoOysrcil7cT1zW3JdCnA9by5iW3FdCmlmKHR5cGVvZiBwPT0idW5kZWZpbmVkIil7
+cD1QLlFlKG8uYVtxXSkKby5iW3FdPXB9Yi4kMihxLHApCmlmKHMhPT1vLmMpdGhyb3cgSC5iKFAuYTQo
+bykpfX0sCkNmKCl7dmFyIHM9dC5iTS5hKHRoaXMuYykKaWYocz09bnVsbClzPXRoaXMuYz1ILlFJKE9i
+amVjdC5rZXlzKHRoaXMuYSksdC5zKQpyZXR1cm4gc30sClhLKCl7dmFyIHMscixxLHAsbyxuPXRoaXMK
+aWYobi5iPT1udWxsKXJldHVybiBuLmMKcz1QLkZsKHQuTix0LnopCnI9bi5DZigpCmZvcihxPTA7cD1y
+Lmxlbmd0aCxxPHA7KytxKXtvPXJbcV0Kcy5ZNSgwLG8sbi5xKDAsbykpfWlmKHA9PT0wKUMuTm0uaShy
+LCIiKQplbHNlIEMuTm0uc0EociwwKQpuLmE9bi5iPW51bGwKcmV0dXJuIG4uYz1zfSwKZmIoYSl7dmFy
+IHMKaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmEsYSkpcmV0dXJu
+IG51bGwKcz1QLlFlKHRoaXMuYVthXSkKcmV0dXJuIHRoaXMuYlthXT1zfX0KUC5pOC5wcm90b3R5cGU9
+ewpnQShhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ0Eocyl9LApFKGEsYil7dmFyIHM9dGhpcy5hCmlm
+KHMuYj09bnVsbClzPXMuZ3ZjKCkuRSgwLGIpCmVsc2V7cz1zLkNmKCkKaWYoYjwwfHxiPj1zLmxlbmd0
+aClyZXR1cm4gSC5PSChzLGIpCnM9c1tiXX1yZXR1cm4gc30sCmdtKGEpe3ZhciBzPXRoaXMuYQppZihz
+LmI9PW51bGwpe3M9cy5ndmMoKQpzPXMuZ20ocyl9ZWxzZXtzPXMuQ2YoKQpzPW5ldyBKLm0xKHMscy5s
+ZW5ndGgsSC50NihzKS5DKCJtMTwxPiIpKX1yZXR1cm4gc30sCnRnKGEsYil7cmV0dXJuIHRoaXMuYS54
+NChiKX19ClAueHIucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyCnRyeXtzPW5ldyBUZXh0RGVjb2Rlcigi
+dXRmLTgiLHtmYXRhbDp0cnVlfSkKcmV0dXJuIHN9Y2F0Y2gocil7SC5SdShyKX1yZXR1cm4gbnVsbH0s
+CiRTOjEwfQpQLk56LnByb3RvdHlwZT17CiQwKCl7dmFyIHMscgp0cnl7cz1uZXcgVGV4dERlY29kZXIo
+InV0Zi04Iix7ZmF0YWw6ZmFsc2V9KQpyZXR1cm4gc31jYXRjaChyKXtILlJ1KHIpfXJldHVybiBudWxs
+fSwKJFM6MTB9ClAuQ1YucHJvdG90eXBlPXsKeXIoYTEsYTIsYTMpe3ZhciBzLHIscSxwLG8sbixtLGws
+ayxqLGksaCxnLGYsZSxkLGMsYixhLGEwPSJJbnZhbGlkIGJhc2U2NCBlbmNvZGluZyBsZW5ndGggIgph
+Mz1QLmpCKGEyLGEzLGExLmxlbmd0aCkKcz0kLlY3KCkKZm9yKHI9cy5sZW5ndGgscT1hMixwPXEsbz1u
+dWxsLG49LTEsbT0tMSxsPTA7cTxhMztxPWspe2s9cSsxCmo9Qy54Qi5XKGExLHEpCmlmKGo9PT0zNyl7
+aT1rKzIKaWYoaTw9YTMpe2g9SC5vbyhDLnhCLlcoYTEsaykpCmc9SC5vbyhDLnhCLlcoYTEsaysxKSkK
+Zj1oKjE2K2ctKGcmMjU2KQppZihmPT09MzcpZj0tMQprPWl9ZWxzZSBmPS0xfWVsc2UgZj1qCmlmKDA8
+PWYmJmY8PTEyNyl7aWYoZjwwfHxmPj1yKXJldHVybiBILk9IKHMsZikKZT1zW2ZdCmlmKGU+PTApe2Y9
+Qy54Qi5PKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+MDEyMzQ1Njc4OSsvIixlKQppZihmPT09ailjb250aW51ZQpqPWZ9ZWxzZXtpZihlPT09LTEpe2lmKG48
+MCl7ZD1vPT1udWxsP251bGw6by5hLmxlbmd0aAppZihkPT1udWxsKWQ9MApuPWQrKHEtcCkKbT1xfSsr
+bAppZihqPT09NjEpY29udGludWV9aj1mfWlmKGUhPT0tMil7aWYobz09bnVsbCl7bz1uZXcgUC5NKCIi
+KQpkPW99ZWxzZSBkPW8KYz1kLmErPUMueEIuTmooYTEscCxxKQpkLmE9YytILkx3KGopCnA9awpjb250
+aW51ZX19dGhyb3cgSC5iKFAucnIoIkludmFsaWQgYmFzZTY0IGRhdGEiLGExLHEpKX1pZihvIT1udWxs
+KXtyPW8uYSs9Qy54Qi5OaihhMSxwLGEzKQpkPXIubGVuZ3RoCmlmKG4+PTApUC54TShhMSxtLGEzLG4s
+bCxkKQplbHNle2I9Qy5qbi56WShkLTEsNCkrMQppZihiPT09MSl0aHJvdyBILmIoUC5ycihhMCxhMSxh
+MykpCmZvcig7Yjw0Oyl7cis9Ij0iCm8uYT1yOysrYn19cj1vLmEKcmV0dXJuIEMueEIuaTcoYTEsYTIs
+YTMsci5jaGFyQ29kZUF0KDApPT0wP3I6cil9YT1hMy1hMgppZihuPj0wKVAueE0oYTEsbSxhMyxuLGws
+YSkKZWxzZXtiPUMuam4uelkoYSw0KQppZihiPT09MSl0aHJvdyBILmIoUC5ycihhMCxhMSxhMykpCmlm
+KGI+MSlhMT1DLnhCLmk3KGExLGEzLGEzLGI9PT0yPyI9PSI6Ij0iKX1yZXR1cm4gYTF9fQpQLlU4LnBy
+b3RvdHlwZT17fQpQLlVrLnByb3RvdHlwZT17fQpQLndJLnByb3RvdHlwZT17fQpQLlppLnByb3RvdHlw
+ZT17fQpQLlVkLnByb3RvdHlwZT17CncoYSl7dmFyIHM9UC5obCh0aGlzLmEpCnJldHVybih0aGlzLmIh
+PW51bGw/IkNvbnZlcnRpbmcgb2JqZWN0IHRvIGFuIGVuY29kYWJsZSBvYmplY3QgZmFpbGVkOiI6IkNv
+bnZlcnRpbmcgb2JqZWN0IGRpZCBub3QgcmV0dXJuIGFuIGVuY29kYWJsZSBvYmplY3Q6IikrIiAiK3N9
+fQpQLks4LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIkN5Y2xpYyBlcnJvciBpbiBKU09OIHN0cmluZ2lm
+eSJ9fQpQLmJ5LnByb3RvdHlwZT17CnBXKGEsYixjKXt2YXIgcwp0LmZWLmEoYykKcz1QLkJTKGIsdGhp
+cy5nSGUoKS5hKQpyZXR1cm4gc30sCk9CKGEsYil7dmFyIHMKdC5kQS5hKGIpCnM9UC51WChhLHRoaXMu
+Z1pFKCkuYixudWxsKQpyZXR1cm4gc30sCmdaRSgpe3JldHVybiBDLm5YfSwKZ0hlKCl7cmV0dXJuIEMu
+QTN9fQpQLm9qLnByb3RvdHlwZT17fQpQLk14LnByb3RvdHlwZT17fQpQLlNoLnByb3RvdHlwZT17ClJU
+KGEpe3ZhciBzLHIscSxwLG8sbixtPWEubGVuZ3RoCmZvcihzPXRoaXMuYyxyPTAscT0wO3E8bTsrK3Ep
+e3A9Qy54Qi5XKGEscSkKaWYocD45Mil7aWYocD49NTUyOTYpe289cCY2NDUxMgppZihvPT09NTUyOTYp
+e249cSsxCm49IShuPG0mJihDLnhCLlcoYSxuKSY2NDUxMik9PT01NjMyMCl9ZWxzZSBuPSExCmlmKCFu
+KWlmKG89PT01NjMyMCl7bz1xLTEKbz0hKG8+PTAmJihDLnhCLk8oYSxvKSY2NDUxMik9PT01NTI5Nil9
+ZWxzZSBvPSExCmVsc2Ugbz0hMAppZihvKXtpZihxPnIpcy5hKz1DLnhCLk5qKGEscixxKQpyPXErMQpv
+PXMuYSs9SC5Mdyg5MikKbys9SC5MdygxMTcpCnMuYT1vCm8rPUguTHcoMTAwKQpzLmE9bwpuPXA+Pj44
+JjE1Cm8rPUguTHcobjwxMD80OCtuOjg3K24pCnMuYT1vCm49cD4+PjQmMTUKbys9SC5MdyhuPDEwPzQ4
+K246ODcrbikKcy5hPW8Kbj1wJjE1CnMuYT1vK0guTHcobjwxMD80OCtuOjg3K24pfX1jb250aW51ZX1p
+ZihwPDMyKXtpZihxPnIpcy5hKz1DLnhCLk5qKGEscixxKQpyPXErMQpvPXMuYSs9SC5Mdyg5MikKc3dp
+dGNoKHApe2Nhc2UgODpzLmE9bytILkx3KDk4KQpicmVhawpjYXNlIDk6cy5hPW8rSC5MdygxMTYpCmJy
+ZWFrCmNhc2UgMTA6cy5hPW8rSC5MdygxMTApCmJyZWFrCmNhc2UgMTI6cy5hPW8rSC5MdygxMDIpCmJy
+ZWFrCmNhc2UgMTM6cy5hPW8rSC5MdygxMTQpCmJyZWFrCmRlZmF1bHQ6bys9SC5MdygxMTcpCnMuYT1v
+Cm8rPUguTHcoNDgpCnMuYT1vCm8rPUguTHcoNDgpCnMuYT1vCm49cD4+PjQmMTUKbys9SC5MdyhuPDEw
+PzQ4K246ODcrbikKcy5hPW8Kbj1wJjE1CnMuYT1vK0guTHcobjwxMD80OCtuOjg3K24pCmJyZWFrfX1l
+bHNlIGlmKHA9PT0zNHx8cD09PTkyKXtpZihxPnIpcy5hKz1DLnhCLk5qKGEscixxKQpyPXErMQpvPXMu
+YSs9SC5Mdyg5MikKcy5hPW8rSC5MdyhwKX19aWYocj09PTApcy5hKz1hCmVsc2UgaWYocjxtKXMuYSs9
+Qy54Qi5OaihhLHIsbSl9LApKbihhKXt2YXIgcyxyLHEscApmb3Iocz10aGlzLmEscj1zLmxlbmd0aCxx
+PTA7cTxyOysrcSl7cD1zW3FdCmlmKGE9PW51bGw/cD09bnVsbDphPT09cCl0aHJvdyBILmIobmV3IFAu
+SzgoYSxudWxsKSl9Qy5ObS5pKHMsYSl9LAppVShhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYoby50TShh
+KSlyZXR1cm4Kby5KbihhKQp0cnl7cz1vLmIuJDEoYSkKaWYoIW8udE0ocykpe3E9UC5HeShhLG51bGws
+by5nVksoKSkKdGhyb3cgSC5iKHEpfXE9by5hCmlmKDA+PXEubGVuZ3RoKXJldHVybiBILk9IKHEsLTEp
+CnEucG9wKCl9Y2F0Y2gocCl7cj1ILlJ1KHApCnE9UC5HeShhLHIsby5nVksoKSkKdGhyb3cgSC5iKHEp
+fX0sCnRNKGEpe3ZhciBzLHIscT10aGlzCmlmKHR5cGVvZiBhPT0ibnVtYmVyIil7aWYoIWlzRmluaXRl
+KGEpKXJldHVybiExCnEuYy5hKz1DLkNELncoYSkKcmV0dXJuITB9ZWxzZSBpZihhPT09ITApe3EuYy5h
+Kz0idHJ1ZSIKcmV0dXJuITB9ZWxzZSBpZihhPT09ITEpe3EuYy5hKz0iZmFsc2UiCnJldHVybiEwfWVs
+c2UgaWYoYT09bnVsbCl7cS5jLmErPSJudWxsIgpyZXR1cm4hMH1lbHNlIGlmKHR5cGVvZiBhPT0ic3Ry
+aW5nIil7cz1xLmMKcy5hKz0nIicKcS5SVChhKQpzLmErPSciJwpyZXR1cm4hMH1lbHNlIGlmKHQuai5i
+KGEpKXtxLkpuKGEpCnEubEsoYSkKcz1xLmEKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkK
+cy5wb3AoKQpyZXR1cm4hMH1lbHNlIGlmKHQuZi5iKGEpKXtxLkpuKGEpCnI9cS5qdyhhKQpzPXEuYQpp
+ZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnJldHVybiByfWVsc2UgcmV0dXJu
+ITF9LApsSyhhKXt2YXIgcyxyLHE9dGhpcy5jCnEuYSs9IlsiCnM9Si5VNihhKQppZihzLmdvcihhKSl7
+dGhpcy5pVShzLnEoYSwwKSkKZm9yKHI9MTtyPHMuZ0EoYSk7KytyKXtxLmErPSIsIgp0aGlzLmlVKHMu
+cShhLHIpKX19cS5hKz0iXSJ9LApqdyhhKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9e30KaWYoYS5n
+bDAoYSkpe20uYy5hKz0ie30iCnJldHVybiEwfXM9YS5nQShhKSoyCnI9UC5POChzLG51bGwsITEsdC5Y
+KQpxPWwuYT0wCmwuYj0hMAphLksoMCxuZXcgUC50aShsLHIpKQppZighbC5iKXJldHVybiExCnA9bS5j
+CnAuYSs9InsiCmZvcihvPSciJztxPHM7cSs9MixvPScsIicpe3AuYSs9bwptLlJUKEgubihyW3FdKSkK
+cC5hKz0nIjonCm49cSsxCmlmKG4+PXMpcmV0dXJuIEguT0gocixuKQptLmlVKHJbbl0pfXAuYSs9In0i
+CnJldHVybiEwfX0KUC50aS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzLHIKaWYodHlwZW9mIGEhPSJz
+dHJpbmciKXRoaXMuYS5iPSExCnM9dGhpcy5iCnI9dGhpcy5hCkMuTm0uWTUocyxyLmErKyxhKQpDLk5t
+Llk1KHMsci5hKyssYil9LAokUzo5fQpQLnR1LnByb3RvdHlwZT17CmdWSygpe3ZhciBzPXRoaXMuYy5h
+CnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfX0KUC51NS5wcm90b3R5cGU9ewpnWkUoKXtyZXR1
+cm4gQy5Ra319ClAuRTMucHJvdG90eXBlPXsKV0ooYSl7dmFyIHMscixxLHA9UC5qQigwLG51bGwsYS5s
+ZW5ndGgpLG89cC0wCmlmKG89PT0wKXJldHVybiBuZXcgVWludDhBcnJheSgwKQpzPW8qMwpyPW5ldyBV
+aW50OEFycmF5KHMpCnE9bmV3IFAuUncocikKaWYocS5HeChhLDAscCkhPT1wKXtDLnhCLk8oYSxwLTEp
+CnEuUk8oKX1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoci5zdWJhcnJheSgwLEguck0oMCxxLmIscykpKX19
+ClAuUncucHJvdG90eXBlPXsKUk8oKXt2YXIgcz10aGlzLHI9cy5jLHE9cy5iLHA9cy5iPXErMSxvPXIu
+bGVuZ3RoCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTIzOQpxPXMuYj1wKzEKaWYocD49byly
+ZXR1cm4gSC5PSChyLHApCnJbcF09MTkxCnMuYj1xKzEKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJb
+cV09MTg5fSwKTzYoYSxiKXt2YXIgcyxyLHEscCxvLG49dGhpcwppZigoYiY2NDUxMik9PT01NjMyMCl7
+cz02NTUzNisoKGEmMTAyMyk8PDEwKXxiJjEwMjMKcj1uLmMKcT1uLmIKcD1uLmI9cSsxCm89ci5sZW5n
+dGgKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJbcV09cz4+PjE4fDI0MApxPW4uYj1wKzEKaWYocD49
+bylyZXR1cm4gSC5PSChyLHApCnJbcF09cz4+PjEyJjYzfDEyOApwPW4uYj1xKzEKaWYocT49bylyZXR1
+cm4gSC5PSChyLHEpCnJbcV09cz4+PjYmNjN8MTI4Cm4uYj1wKzEKaWYocD49bylyZXR1cm4gSC5PSChy
+LHApCnJbcF09cyY2M3wxMjgKcmV0dXJuITB9ZWxzZXtuLlJPKCkKcmV0dXJuITF9fSwKR3goYSxiLGMp
+e3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcwppZihiIT09YyYmKEMueEIuTyhhLGMtMSkmNjQ1MTIpPT09
+NTUyOTYpLS1jCmZvcihzPWwuYyxyPXMubGVuZ3RoLHE9YjtxPGM7KytxKXtwPUMueEIuVyhhLHEpCmlm
+KHA8PTEyNyl7bz1sLmIKaWYobz49cilicmVhawpsLmI9bysxCnNbb109cH1lbHNle289cCY2NDUxMgpp
+ZihvPT09NTUyOTYpe2lmKGwuYis0PnIpYnJlYWsKbj1xKzEKaWYobC5PNihwLEMueEIuVyhhLG4pKSlx
+PW59ZWxzZSBpZihvPT09NTYzMjApe2lmKGwuYiszPnIpYnJlYWsKbC5STygpfWVsc2UgaWYocDw9MjA0
+Nyl7bz1sLmIKbT1vKzEKaWYobT49cilicmVhawpsLmI9bQppZihvPj1yKXJldHVybiBILk9IKHMsbykK
+c1tvXT1wPj4+NnwxOTIKbC5iPW0rMQpzW21dPXAmNjN8MTI4fWVsc2V7bz1sLmIKaWYobysyPj1yKWJy
+ZWFrCm09bC5iPW8rMQppZihvPj1yKXJldHVybiBILk9IKHMsbykKc1tvXT1wPj4+MTJ8MjI0Cm89bC5i
+PW0rMQppZihtPj1yKXJldHVybiBILk9IKHMsbSkKc1ttXT1wPj4+NiY2M3wxMjgKbC5iPW8rMQppZihv
+Pj1yKXJldHVybiBILk9IKHMsbykKc1tvXT1wJjYzfDEyOH19fXJldHVybiBxfX0KUC5HWS5wcm90b3R5
+cGU9ewpXSihhKXt2YXIgcyxyCnQuTC5hKGEpCnM9dGhpcy5hCnI9UC5reShzLGEsMCxudWxsKQppZihy
+IT1udWxsKXJldHVybiByCnJldHVybiBuZXcgUC5ieihzKS5OZShhLDAsbnVsbCwhMCl9fQpQLmJ6LnBy
+b3RvdHlwZT17Ck5lKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbj10aGlzCnQuTC5hKGEpCnM9UC5qQihi
+LGMsSi5IbShhKSkKaWYoYj09PXMpcmV0dXJuIiIKcj1QLmp5KGEsYixzKQpxPW4uaE8ociwwLHMtYiwh
+MCkKcD1uLmIKaWYoKHAmMSkhPT0wKXtvPVAuajQocCkKbi5iPTAKdGhyb3cgSC5iKFAucnIobyxhLGIr
+bi5jKSl9cmV0dXJuIHF9LApoTyhhLGIsYyxkKXt2YXIgcyxyLHE9dGhpcwppZihjLWI+MTAwMCl7cz1D
+LmpuLkJVKGIrYywyKQpyPXEuaE8oYSxiLHMsITEpCmlmKChxLmImMSkhPT0wKXJldHVybiByCnJldHVy
+biByK3EuaE8oYSxzLGMsZCl9cmV0dXJuIHEuRWgoYSxiLGMsZCl9LApFaChhLGIsYyxkKXt2YXIgcyxy
+LHEscCxvLG4sbSxsLGs9dGhpcyxqPTY1NTMzLGk9ay5iLGg9ay5jLGc9bmV3IFAuTSgiIiksZj1iKzEs
+ZT1hLmxlbmd0aAppZihiPDB8fGI+PWUpcmV0dXJuIEguT0goYSxiKQpzPWFbYl0KJGxhYmVsMCQwOmZv
+cihyPWsuYTshMDspe2Zvcig7ITA7Zj1vKXtxPUMueEIuVygiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
 QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
-QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
-RkZGRkZGRkZGRkZGRkZGRkdHR0dHR0dHR0dHR0dHR0dISEhISEhISEhISEhISEhISEhISEhISEhISEhJ
-SEhISkVFQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS0NDQ0NDQ0NDQ0NDQ0RDTE9OTk5NRUVF
-RUVFRUVFRUUiLHMpJjMxCmg9aTw9MzI/cyY2MTY5ND4+PnE6KHMmNjN8aDw8Nik+Pj4wCmk9Qy54Qi5X
-KCIgXHgwMDA6WEVDQ0NDQ046bERiIFx4MDAwOlhFQ0NDQ0NOdmxEYiBceDAwMDpYRUNDQ0NDTjpsRGIg
-QUFBQUFceDAwXHgwMFx4MDBceDAwXHgwMEFBQUFBMDAwMDBBQUFBQTo6Ojo6QUFBQUFHRzAwMEFBQUFB
-MDBLS0tBQUFBQUc6Ojo6QUFBQUE6SUlJSUFBQUFBMDAwXHg4MDBBQUFBQVx4MDBceDAwXHgwMFx4MDAg
-QUFBQUEiLGkrcSkKaWYoaT09PTApe2cuYSs9SC5MdyhoKQppZihmPT09YylicmVhayAkbGFiZWwwJDAK
-YnJlYWt9ZWxzZSBpZigoaSYxKSE9PTApe2lmKHIpc3dpdGNoKGkpe2Nhc2UgNjk6Y2FzZSA2NzpnLmEr
-PUguTHcoaikKYnJlYWsKY2FzZSA2NTpnLmErPUguTHcoaik7LS1mCmJyZWFrCmRlZmF1bHQ6cD1nLmEr
-PUguTHcoaikKZy5hPXArSC5MdyhqKQpicmVha31lbHNle2suYj1pCmsuYz1mLTEKcmV0dXJuIiJ9aT0w
-fWlmKGY9PT1jKWJyZWFrICRsYWJlbDAkMApvPWYrMQppZihmPDB8fGY+PWUpcmV0dXJuIEguT0goYSxm
-KQpzPWFbZl19bz1mKzEKaWYoZjwwfHxmPj1lKXJldHVybiBILk9IKGEsZikKcz1hW2ZdCmlmKHM8MTI4
-KXt3aGlsZSghMCl7aWYoIShvPGMpKXtuPWMKYnJlYWt9bT1vKzEKaWYobzwwfHxvPj1lKXJldHVybiBI
-Lk9IKGEsbykKcz1hW29dCmlmKHM+PTEyOCl7bj1tLTEKbz1tCmJyZWFrfW89bX1pZihuLWY8MjApZm9y
-KGw9ZjtsPG47KytsKXtpZihsPj1lKXJldHVybiBILk9IKGEsbCkKZy5hKz1ILkx3KGFbbF0pfWVsc2Ug
-Zy5hKz1QLkhNKGEsZixuKQppZihuPT09YylicmVhayAkbGFiZWwwJDAKZj1vfWVsc2UgZj1vfWlmKGQm
-Jmk+MzIpaWYocilnLmErPUguTHcoaikKZWxzZXtrLmI9NzcKay5jPWMKcmV0dXJuIiJ9ay5iPWkKay5j
-PWgKZT1nLmEKcmV0dXJuIGUuY2hhckNvZGVBdCgwKT09MD9lOmV9fQpQLldGLnByb3RvdHlwZT17CiQy
-OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxCnQuZm8uYShhKQpzPXRoaXMuYgpyPXRoaXMuYQpxPXMuYSs9
-ci5hCnErPWEuYQpzLmE9cQpzLmE9cSsiOiAiCnMuYSs9UC5obChiKQpyLmE9IiwgIn0sCiRTOjI4fQpQ
-LmlQLnByb3RvdHlwZT17CkROOmZ1bmN0aW9uKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4g
-YiBpbnN0YW5jZW9mIFAuaVAmJnRoaXMuYT09PWIuYSYmITB9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHM9
-dGhpcy5hCnJldHVybihzXkMuam4ud0cocywzMCkpJjEwNzM3NDE4MjN9LAp3OmZ1bmN0aW9uKGEpe3Zh
-ciBzPXRoaXMscj1QLkdxKEgudEoocykpLHE9UC5oMChILk5TKHMpKSxwPVAuaDAoSC5qQShzKSksbz1Q
-LmgwKEguSVgocykpLG49UC5oMChILmNoKHMpKSxtPVAuaDAoSC5KZChzKSksbD1QLlZ4KEgubzEocykp
-LGs9cisiLSIrcSsiLSIrcCsiICIrbysiOiIrbisiOiIrbSsiLiIrbApyZXR1cm4ga319ClAuWFMucHJv
-dG90eXBlPXsKZ0lJOmZ1bmN0aW9uKCl7cmV0dXJuIEgudHModGhpcy4kdGhyb3duSnNFcnJvcil9fQpQ
-LkM2LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCmlmKHMhPW51bGwpcmV0dXJu
-IkFzc2VydGlvbiBmYWlsZWQ6ICIrUC5obChzKQpyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpQLkV6
-LnByb3RvdHlwZT17fQpQLkYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iVGhyb3cgb2Yg
-bnVsbC4ifX0KUC5BVC5wcm90b3R5cGU9ewpnWjpmdW5jdGlvbigpe3JldHVybiJJbnZhbGlkIGFyZ3Vt
-ZW50IisoIXRoaXMuYT8iKHMpIjoiIil9LApndTpmdW5jdGlvbigpe3JldHVybiIifSwKdzpmdW5jdGlv
-bihhKXt2YXIgcyxyLHE9dGhpcyxwPXEuYyxvPXA9PW51bGw/IiI6IiAoIitwKyIpIixuPXEuZCxtPW49
-PW51bGw/IiI6IjogIitILkVqKG4pLGw9cS5nWigpK28rbQppZighcS5hKXJldHVybiBsCnM9cS5ndSgp
-CnI9UC5obChxLmIpCnJldHVybiBsK3MrIjogIityfX0KUC5iSi5wcm90b3R5cGU9ewpnWjpmdW5jdGlv
-bigpe3JldHVybiJSYW5nZUVycm9yIn0sCmd1OmZ1bmN0aW9uKCl7dmFyIHMscj10aGlzLmUscT10aGlz
-LmYKaWYocj09bnVsbClzPXEhPW51bGw/IjogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAiK0guRWoo
-cSk6IiIKZWxzZSBpZihxPT1udWxsKXM9IjogTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAiK0gu
-RWoocikKZWxzZSBpZihxPnIpcz0iOiBOb3QgaW4gaW5jbHVzaXZlIHJhbmdlICIrSC5FaihyKSsiLi4i
-K0guRWoocSkKZWxzZSBzPXE8cj8iOiBWYWxpZCB2YWx1ZSByYW5nZSBpcyBlbXB0eSI6IjogT25seSB2
-YWxpZCB2YWx1ZSBpcyAiK0guRWoocikKcmV0dXJuIHN9fQpQLmVZLnByb3RvdHlwZT17CmdaOmZ1bmN0
-aW9uKCl7cmV0dXJuIlJhbmdlRXJyb3IifSwKZ3U6ZnVuY3Rpb24oKXtpZihILklaKHRoaXMuYik8MCly
-ZXR1cm4iOiBpbmRleCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIKdmFyIHM9dGhpcy5mCmlmKHM9PT0wKXJl
-dHVybiI6IG5vIGluZGljZXMgYXJlIHZhbGlkIgpyZXR1cm4iOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0
-aGFuICIrc30sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZ9fQpQLm1wLnByb3RvdHlwZT17Cnc6
-ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMsaj17fSxpPW5ldyBQLk0oIiIpCmou
-YT0iIgpzPWsuYwpmb3Iocj1zLmxlbmd0aCxxPTAscD0iIixvPSIiO3E8cjsrK3Esbz0iLCAiKXtuPXNb
-cV0KaS5hPXArbwpwPWkuYSs9UC5obChuKQpqLmE9IiwgIn1rLmQuSygwLG5ldyBQLldGKGosaSkpCm09
-UC5obChrLmEpCmw9aS53KDApCnI9Ik5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAn
-IitrLmIuYSsiJ1xuUmVjZWl2ZXI6ICIrbSsiXG5Bcmd1bWVudHM6IFsiK2wrIl0iCnJldHVybiByfX0K
-UC51Yi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJVbnN1cHBvcnRlZCBvcGVyYXRpb246
-ICIrdGhpcy5hfX0KUC5kcy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPSJVbmltcGxlbWVu
-dGVkRXJyb3I6ICIrdGhpcy5hCnJldHVybiBzfX0KUC5sai5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEp
-e3JldHVybiJCYWQgc3RhdGU6ICIrdGhpcy5hfX0KUC5VVi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEp
-e3ZhciBzPXRoaXMuYQppZihzPT1udWxsKXJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJp
-bmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRp
-b246ICIrUC5obChzKSsiLiJ9fQpQLms1LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIk91
-dCBvZiBNZW1vcnkifSwKZ0lJOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LAokaVhTOjF9ClAuS1kucHJv
-dG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iU3RhY2sgT3ZlcmZsb3cifSwKZ0lJOmZ1bmN0aW9u
-KCl7cmV0dXJuIG51bGx9LAokaVhTOjF9ClAucC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBz
-PSJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSAnIit0aGlzLmErIicgZHVyaW5nIGl0cyBpbml0aWFsaXph
-dGlvbiIKcmV0dXJuIHN9fQpQLkNELnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkV4Y2Vw
-dGlvbjogIit0aGlzLmF9LAokaVJ6OjF9ClAuYUUucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIg
-cyxyLHEscCxvLG4sbSxsLGssaixpLGgsZz10aGlzLmEsZj0iIiE9PWc/IkZvcm1hdEV4Y2VwdGlvbjog
-IitnOiJGb3JtYXRFeGNlcHRpb24iLGU9dGhpcy5jLGQ9dGhpcy5iCmlmKHR5cGVvZiBkPT0ic3RyaW5n
-Iil7aWYoZSE9bnVsbClzPWU8MHx8ZT5kLmxlbmd0aAplbHNlIHM9ITEKaWYocyllPW51bGwKaWYoZT09
-bnVsbCl7aWYoZC5sZW5ndGg+NzgpZD1DLnhCLk5qKGQsMCw3NSkrIi4uLiIKcmV0dXJuIGYrIlxuIitk
-fWZvcihyPTEscT0wLHA9ITEsbz0wO288ZTsrK28pe249Qy54Qi5XKGQsbykKaWYobj09PTEwKXtpZihx
-IT09b3x8IXApKytyCnE9bysxCnA9ITF9ZWxzZSBpZihuPT09MTMpeysrcgpxPW8rMQpwPSEwfX1mPXI+
-MT9mKygiIChhdCBsaW5lICIrcisiLCBjaGFyYWN0ZXIgIisoZS1xKzEpKyIpXG4iKTpmKygiIChhdCBj
-aGFyYWN0ZXIgIisoZSsxKSsiKVxuIikKbT1kLmxlbmd0aApmb3Iobz1lO288bTsrK28pe249Qy54Qi5P
-KGQsbykKaWYobj09PTEwfHxuPT09MTMpe209bwpicmVha319aWYobS1xPjc4KWlmKGUtcTw3NSl7bD1x
-Kzc1Cms9cQpqPSIiCmk9Ii4uLiJ9ZWxzZXtpZihtLWU8NzUpe2s9bS03NQpsPW0KaT0iIn1lbHNle2s9
-ZS0zNgpsPWUrMzYKaT0iLi4uIn1qPSIuLi4ifWVsc2V7bD1tCms9cQpqPSIiCmk9IiJ9aD1DLnhCLk5q
-KGQsayxsKQpyZXR1cm4gZitqK2graSsiXG4iK0MueEIuVCgiICIsZS1rK2oubGVuZ3RoKSsiXlxuIn1l
-bHNlIHJldHVybiBlIT1udWxsP2YrKCIgKGF0IG9mZnNldCAiK0guRWooZSkrIikiKTpmfSwKJGlSejox
-fQpQLmNYLnByb3RvdHlwZT17CmRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEguR0oodGhpcyxILkxoKHRo
-aXMpLkMoImNYLkUiKSxiKX0sCkUyOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVy
-biBILksxKHRoaXMscy5LcShjKS5DKCIxKGNYLkUpIikuYShiKSxzLkMoImNYLkUiKSxjKX0sCmV2OmZ1
-bmN0aW9uKGEsYil7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gbmV3IEguVTUodGhpcyxzLkMoImEyKGNY
-LkUpIikuYShiKSxzLkMoIlU1PGNYLkU+IikpfSwKdHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUC5ZMSh0
-aGlzLGIsSC5MaCh0aGlzKS5DKCJjWC5FIikpfSwKYnI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudHQo
-YSwhMCl9LApnQTpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuZ20odGhpcykKZm9yKHM9MDtyLkYoKTsp
-KytzCnJldHVybiBzfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmdtKHRoaXMpLkYoKX0sCmdv
-cjpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5nbDAodGhpcyl9LAplUjpmdW5jdGlvbihhLGIpe3JldHVy
-biBILmJLKHRoaXMsYixILkxoKHRoaXMpLkMoImNYLkUiKSl9LApncjg6ZnVuY3Rpb24oYSl7dmFyIHMs
-cj10aGlzLmdtKHRoaXMpCmlmKCFyLkYoKSl0aHJvdyBILmIoSC5XcCgpKQpzPXIuZ2woKQppZihyLkYo
-KSl0aHJvdyBILmIoSC5BbSgpKQpyZXR1cm4gc30sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEKUC5r
-MShiLCJpbmRleCIpCmZvcihzPXRoaXMuZ20odGhpcykscj0wO3MuRigpOyl7cT1zLmdsKCkKaWYoYj09
-PXIpcmV0dXJuIHE7KytyfXRocm93IEguYihQLkNmKGIsdGhpcywiaW5kZXgiLG51bGwscikpfSwKdzpm
-dW5jdGlvbihhKXtyZXR1cm4gUC5FUCh0aGlzLCIoIiwiKSIpfX0KUC5Bbi5wcm90b3R5cGU9e30KUC5O
-My5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJNYXBFbnRyeSgiK0guRWoodGhpcy5hKSsi
-OiAiK0guRWoodGhpcy5iKSsiKSJ9fQpQLmM4LnByb3RvdHlwZT17CmdpTzpmdW5jdGlvbihhKXtyZXR1
-cm4gUC5NaC5wcm90b3R5cGUuZ2lPLmNhbGwodGhpcyx0aGlzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJu
-Im51bGwifX0KUC5NaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlAuTWgsJGlNaDoxLApETjpmdW5jdGlv
-bihhLGIpe3JldHVybiB0aGlzPT09Yn0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gSC5lUSh0aGlzKX0s
-Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkluc3RhbmNlIG9mICciK0gubGgodGhpcykrIicifSwKZTc6ZnVu
-Y3Rpb24oYSxiKXt0Lm8uYShiKQp0aHJvdyBILmIoUC5scih0aGlzLGIuZ1dhKCksYi5nbmQoKSxiLmdW
-bSgpKSl9LAp0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLncodGhpcyl9fQpQLlpkLnByb3Rv
-dHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIiJ9LAokaUd6OjF9ClAuTS5wcm90b3R5cGU9ewpnQTpm
-dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5h
-CnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKJGlCTDoxfQpQLm4xLnByb3RvdHlwZT17CiQy
-OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAKdC52LmEoYSkKSC5uKGIpCnM9Qy54Qi5PWShiLCI9IikK
-aWYocz09PS0xKXtpZihiIT09IiIpYS5ZNSgwLFAua3UoYiwwLGIubGVuZ3RoLHRoaXMuYSwhMCksIiIp
-fWVsc2UgaWYocyE9PTApe3I9Qy54Qi5OaihiLDAscykKcT1DLnhCLnluKGIscysxKQpwPXRoaXMuYQph
-Llk1KDAsUC5rdShyLDAsci5sZW5ndGgscCwhMCksUC5rdShxLDAscS5sZW5ndGgscCwhMCkpfXJldHVy
-biBhfSwKJFM6MjZ9ClAuY1MucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aHJvdyBILmIoUC5y
-cigiSWxsZWdhbCBJUHY0IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJFM6MjR9ClAuVkMucHJvdG90
-eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aHJvdyBILmIoUC5ycigiSWxsZWdhbCBJUHY2IGFkZHJlc3Ms
-ICIrYSx0aGlzLmEsYikpfSwKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJDIoYSxudWxsKX0sCiRT
-OjE5fQpQLkpULnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoYi1hPjQpdGhpcy5h
-LiQyKCJhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRz
-IixhKQpzPVAuUUEoQy54Qi5Oaih0aGlzLmIsYSxiKSwxNikKaWYoczwwfHxzPjY1NTM1KXRoaXMuYS4k
-MigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAuLjB4RkZGRmAiLGEpCnJldHVy
-biBzfSwKJFM6MjB9ClAuRG4ucHJvdG90eXBlPXsKZ25EOmZ1bmN0aW9uKCl7dmFyIHMscixxLHA9dGhp
-cyxvPXAueAppZihvPT1udWxsKXtvPXAuYQpzPW8ubGVuZ3RoIT09MD8iIitvKyI6IjoiIgpyPXAuYwpx
-PXI9PW51bGwKaWYoIXF8fG89PT0iZmlsZSIpe289cysiLy8iCnM9cC5iCmlmKHMubGVuZ3RoIT09MClv
-PW8rcysiQCIKaWYoIXEpbys9cgpzPXAuZAppZihzIT1udWxsKW89bysiOiIrSC5FaihzKX1lbHNlIG89
-cwpvKz1wLmUKcz1wLmYKaWYocyE9bnVsbClvPW8rIj8iK3MKcz1wLnIKaWYocyE9bnVsbClvPW8rIiMi
-K3MKbz1vLmNoYXJDb2RlQXQoMCk9PTA/bzpvCmlmKHAueD09bnVsbClwLng9bwplbHNlIG89SC52KEgu
-aigiX3RleHQiKSl9cmV0dXJuIG99LApnRmo6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1yLnkKaWYo
-cT09bnVsbCl7cz1yLmUKaWYocy5sZW5ndGghPT0wJiZDLnhCLlcocywwKT09PTQ3KXM9Qy54Qi55bihz
-LDEpCnE9cy5sZW5ndGg9PT0wP0MueEQ6UC5BRihuZXcgSC5sSihILlFJKHMuc3BsaXQoIi8iKSx0LnMp
-LHQuZE8uYShQLlBIKCkpLHQuZG8pLHQuTikKaWYoci55PT1udWxsKXIuc0twKHEpCmVsc2UgcT1ILnYo
-SC5qKCJwYXRoU2VnbWVudHMiKSl9cmV0dXJuIHF9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcyxy
-PXMuegppZihyPT1udWxsKXtyPUMueEIuZ2lPKHMuZ25EKCkpCmlmKHMuej09bnVsbClzLno9cgplbHNl
-IHI9SC52KEguaigiaGFzaENvZGUiKSl9cmV0dXJuIHJ9LApnaFk6ZnVuY3Rpb24oKXt2YXIgcz10aGlz
-LHI9cy5RCmlmKHI9PW51bGwpe3I9cy5mCnI9bmV3IFAuR2ooUC5XWChyPT1udWxsPyIiOnIpLHQuZHcp
-CmlmKHMuUT09bnVsbClzLnNOTShyKQplbHNlIHI9SC52KEguaigicXVlcnlQYXJhbWV0ZXJzIikpfXJl
-dHVybiByfSwKZ2t1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sCmdKZjpmdW5jdGlvbihhKXt2YXIg
-cz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4iIgppZihDLnhCLm4ocywiWyIpKXJldHVybiBDLnhCLk5q
-KHMsMSxzLmxlbmd0aC0xKQpyZXR1cm4gc30sCmd0cDpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmQKcmV0
-dXJuIHM9PW51bGw/UC53Syh0aGlzLmEpOnN9LApndFA6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmYKcmV0
-dXJuIHM9PW51bGw/IiI6c30sCmdLYTpmdW5jdGlvbigpe3ZhciBzPXRoaXMucgpyZXR1cm4gcz09bnVs
-bD8iIjpzfSwKaEI6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCmlmKGEubGVuZ3RoIT09cy5sZW5ndGgp
-cmV0dXJuITEKcmV0dXJuIFAuTlIoYSxzKX0sCm5tOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxu
-LG0sbCxrLGo9dGhpcwp0LmM5LmEoYikKcz1qLmEKcj1zPT09ImZpbGUiCnE9ai5iCnA9ai5kCm89ai5j
-CmlmKCEobyE9bnVsbCkpbz1xLmxlbmd0aCE9PTB8fHAhPW51bGx8fHI/IiI6bnVsbApuPWouZQppZigh
-ciltPW8hPW51bGwmJm4ubGVuZ3RoIT09MAplbHNlIG09ITAKaWYobSYmIUMueEIubihuLCIvIikpbj0i
-LyIrbgpsPW4Kaz1QLmxlKG51bGwsMCwwLGIpCnJldHVybiBuZXcgUC5EbihzLHEsbyxwLGwsayxqLnIp
-fSwKSmg6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4KZm9yKHM9MCxyPTA7Qy54Qi5RaShiLCIu
-Li8iLHIpOyl7cis9MzsrK3N9cT1DLnhCLmNuKGEsIi8iKQp3aGlsZSghMCl7aWYoIShxPjAmJnM+MCkp
-YnJlYWsKcD1DLnhCLlBrKGEsIi8iLHEtMSkKaWYocDwwKWJyZWFrCm89cS1wCm49byE9PTIKaWYoIW58
-fG89PT0zKWlmKEMueEIuTyhhLHArMSk9PT00NiluPSFufHxDLnhCLk8oYSxwKzIpPT09NDYKZWxzZSBu
-PSExCmVsc2Ugbj0hMQppZihuKWJyZWFrOy0tcwpxPXB9cmV0dXJuIEMueEIuaTcoYSxxKzEsbnVsbCxD
-LnhCLnluKGIsci0zKnMpKX0sClpJOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1TKFAuaEsoYSkpfSwK
-bVM6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT10aGlzLGg9bnVsbAppZihhLmdG
-aSgpLmxlbmd0aCE9PTApe3M9YS5nRmkoKQppZihhLmdjaigpKXtyPWEuZ2t1KCkKcT1hLmdKZihhKQpw
-PWEuZ3hBKCk/YS5ndHAoYSk6aH1lbHNle3A9aApxPXAKcj0iIn1vPVAueGUoYS5nSWkoYSkpCm49YS5n
-UUQoKT9hLmd0UCgpOmh9ZWxzZXtzPWkuYQppZihhLmdjaigpKXtyPWEuZ2t1KCkKcT1hLmdKZihhKQpw
-PVAud0IoYS5neEEoKT9hLmd0cChhKTpoLHMpCm89UC54ZShhLmdJaShhKSkKbj1hLmdRRCgpP2EuZ3RQ
-KCk6aH1lbHNle3I9aS5iCnE9aS5jCnA9aS5kCm89aS5lCmlmKGEuZ0lpKGEpPT09IiIpbj1hLmdRRCgp
-P2EuZ3RQKCk6aS5mCmVsc2V7bT1QLnVqKGksbykKaWYobT4wKXtsPUMueEIuTmoobywwLG0pCm89YS5n
-dFQoKT9sK1AueGUoYS5nSWkoYSkpOmwrUC54ZShpLkpoKEMueEIueW4obyxsLmxlbmd0aCksYS5nSWko
-YSkpKX1lbHNlIGlmKGEuZ3RUKCkpbz1QLnhlKGEuZ0lpKGEpKQplbHNlIGlmKG8ubGVuZ3RoPT09MClp
-ZihxPT1udWxsKW89cy5sZW5ndGg9PT0wP2EuZ0lpKGEpOlAueGUoYS5nSWkoYSkpCmVsc2Ugbz1QLnhl
-KCIvIithLmdJaShhKSkKZWxzZXtrPWkuSmgobyxhLmdJaShhKSkKaj1zLmxlbmd0aD09PTAKaWYoIWp8
-fHEhPW51bGx8fEMueEIubihvLCIvIikpbz1QLnhlKGspCmVsc2Ugbz1QLndGKGssIWp8fHEhPW51bGwp
-fW49YS5nUUQoKT9hLmd0UCgpOmh9fX1yZXR1cm4gbmV3IFAuRG4ocyxyLHEscCxvLG4sYS5nWjgoKT9h
-LmdLYSgpOmgpfSwKZ2NqOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYyE9bnVsbH0sCmd4QTpmdW5jdGlv
-bigpe3JldHVybiB0aGlzLmQhPW51bGx9LApnUUQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mIT1udWxs
-fSwKZ1o4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuciE9bnVsbH0sCmd0VDpmdW5jdGlvbigpe3JldHVy
-biBDLnhCLm4odGhpcy5lLCIvIil9LAp0NDpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihx
-IT09IiImJnEhPT0iZmlsZSIpdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRo
-IGZyb20gYSAiK3ErIiBVUkkiKSkKcT1yLmYKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBILmIo
-UC5MNCh1LmkpKQpxPXIucgppZigocT09bnVsbD8iIjpxKSE9PSIiKXRocm93IEguYihQLkw0KHUubCkp
-CnE9JC53USgpCmlmKHEpcT1QLm1uKHIpCmVsc2V7aWYoci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUgu
-dihQLkw0KHUuaikpCnM9ci5nRmooKQpQLmtFKHMsITEpCnE9UC5sKEMueEIubihyLmUsIi8iKT8iIisi
-LyI6IiIscywiLyIpCnE9cS5jaGFyQ29kZUF0KDApPT0wP3E6cX1yZXR1cm4gcX0sCnc6ZnVuY3Rpb24o
-YSl7cmV0dXJuIHRoaXMuZ25EKCl9LApETjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscT10aGlzCmlmKGI9
-PW51bGwpcmV0dXJuITEKaWYocT09PWIpcmV0dXJuITAKaWYodC5kRC5iKGIpKWlmKHEuYT09PWIuZ0Zp
-KCkpaWYocS5jIT1udWxsPT09Yi5nY2ooKSlpZihxLmI9PT1iLmdrdSgpKWlmKHEuZ0pmKHEpPT09Yi5n
-SmYoYikpaWYocS5ndHAocSk9PT1iLmd0cChiKSlpZihxLmU9PT1iLmdJaShiKSl7cz1xLmYKcj1zPT1u
-dWxsCmlmKCFyPT09Yi5nUUQoKSl7aWYocilzPSIiCmlmKHM9PT1iLmd0UCgpKXtzPXEucgpyPXM9PW51
-bGwKaWYoIXI9PT1iLmdaOCgpKXtpZihyKXM9IiIKcz1zPT09Yi5nS2EoKX1lbHNlIHM9ITF9ZWxzZSBz
-PSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBz
-PSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKcmV0dXJuIHN9LApzS3A6ZnVuY3Rpb24oYSl7dGhpcy55PXQu
-YmsuYShhKX0sCnNOTTpmdW5jdGlvbihhKXt0aGlzLlE9dC5jWi5hKGEpfSwKJGlpRDoxLApnRmk6ZnVu
-Y3Rpb24oKXtyZXR1cm4gdGhpcy5hfSwKZ0lpOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmV9fQpQLlJa
-LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBQLmVQKEMuWkosSC5uKGEpLEMueE0sITEp
-fSwKJFM6Mn0KUC5NRS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMuYixyPXRo
+QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGRkZGRkZGRkZGRkZGRkZG
+R0dHR0dHR0dHR0dHR0dHR0hISEhISEhISEhISEhISEhISEhISEhISEhISElISEhKRUVCQkJCQkJCQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJLQ0NDQ0NDQ0NDQ0NDRENMT05OTk1FRUVFRUVFRUVFRSIscykmMzEK
+aD1pPD0zMj9zJjYxNjk0Pj4+cToocyY2M3xoPDw2KT4+PjAKaT1DLnhCLlcoIiBceDAwMDpYRUNDQ0ND
+TjpsRGIgXHgwMDA6WEVDQ0NDQ052bERiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBBQUFBQVx4MDBceDAwXHgw
+MFx4MDBceDAwQUFBQUEwMDAwMEFBQUFBOjo6OjpBQUFBQUdHMDAwQUFBQUEwMEtLS0FBQUFBRzo6OjpB
+QUFBQTpJSUlJQUFBQUEwMDBceDgwMEFBQUFBXHgwMFx4MDBceDAwXHgwMCBBQUFBQSIsaStxKQppZihp
+PT09MCl7Zy5hKz1ILkx3KGgpCmlmKGY9PT1jKWJyZWFrICRsYWJlbDAkMApicmVha31lbHNlIGlmKChp
+JjEpIT09MCl7aWYocilzd2l0Y2goaSl7Y2FzZSA2OTpjYXNlIDY3OmcuYSs9SC5MdyhqKQpicmVhawpj
+YXNlIDY1OmcuYSs9SC5MdyhqKTstLWYKYnJlYWsKZGVmYXVsdDpwPWcuYSs9SC5MdyhqKQpnLmE9cCtI
+Lkx3KGopCmJyZWFrfWVsc2V7ay5iPWkKay5jPWYtMQpyZXR1cm4iIn1pPTB9aWYoZj09PWMpYnJlYWsg
+JGxhYmVsMCQwCm89ZisxCmlmKGY8MHx8Zj49ZSlyZXR1cm4gSC5PSChhLGYpCnM9YVtmXX1vPWYrMQpp
+ZihmPDB8fGY+PWUpcmV0dXJuIEguT0goYSxmKQpzPWFbZl0KaWYoczwxMjgpe3doaWxlKCEwKXtpZigh
+KG88Yykpe249YwpicmVha31tPW8rMQppZihvPDB8fG8+PWUpcmV0dXJuIEguT0goYSxvKQpzPWFbb10K
+aWYocz49MTI4KXtuPW0tMQpvPW0KYnJlYWt9bz1tfWlmKG4tZjwyMClmb3IobD1mO2w8bjsrK2wpe2lm
+KGw+PWUpcmV0dXJuIEguT0goYSxsKQpnLmErPUguTHcoYVtsXSl9ZWxzZSBnLmErPVAuSE0oYSxmLG4p
+CmlmKG49PT1jKWJyZWFrICRsYWJlbDAkMApmPW99ZWxzZSBmPW99aWYoZCYmaT4zMilpZihyKWcuYSs9
+SC5MdyhqKQplbHNle2suYj03NwprLmM9YwpyZXR1cm4iIn1rLmI9aQprLmM9aAplPWcuYQpyZXR1cm4g
+ZS5jaGFyQ29kZUF0KDApPT0wP2U6ZX19ClAuV0YucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyLHEK
+dC5mby5hKGEpCnM9dGhpcy5iCnI9dGhpcy5hCnE9cy5hKz1yLmEKcSs9YS5hCnMuYT1xCnMuYT1xKyI6
+ICIKcy5hKz1QLmhsKGIpCnIuYT0iLCAifSwKJFM6Mjh9ClAuaVAucHJvdG90eXBlPXsKRE4oYSxiKXtp
+ZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgUC5pUCYmdGhpcy5hPT09Yi5hJiYh
+MH0sCmdpTyhhKXt2YXIgcz10aGlzLmEKcmV0dXJuKHNeQy5qbi53RyhzLDMwKSkmMTA3Mzc0MTgyM30s
+CncoYSl7dmFyIHM9dGhpcyxyPVAuR3EoSC50SihzKSkscT1QLmgwKEguTlMocykpLHA9UC5oMChILmpB
+KHMpKSxvPVAuaDAoSC5JWChzKSksbj1QLmgwKEguY2gocykpLG09UC5oMChILkpkKHMpKSxsPVAuVngo
+SC5vMShzKSksaz1yKyItIitxKyItIitwKyIgIitvKyI6IituKyI6IittKyIuIitsCnJldHVybiBrfX0K
+UC5YUy5wcm90b3R5cGU9ewpnSUkoKXtyZXR1cm4gSC50cyh0aGlzLiR0aHJvd25Kc0Vycm9yKX19ClAu
+QzYucHJvdG90eXBlPXsKdyhhKXt2YXIgcz10aGlzLmEKaWYocyE9bnVsbClyZXR1cm4iQXNzZXJ0aW9u
+IGZhaWxlZDogIitQLmhsKHMpCnJldHVybiJBc3NlcnRpb24gZmFpbGVkIn19ClAuRXoucHJvdG90eXBl
+PXt9ClAuRi5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJUaHJvdyBvZiBudWxsLiJ9fQpQLkFULnByb3Rv
+dHlwZT17CmdaKCl7cmV0dXJuIkludmFsaWQgYXJndW1lbnQiKyghdGhpcy5hPyIocykiOiIiKX0sCmd1
+KCl7cmV0dXJuIiJ9LAp3KGEpe3ZhciBzLHIscT10aGlzLHA9cS5jLG89cD09bnVsbD8iIjoiICgiK3Ar
+IikiLG49cS5kLG09bj09bnVsbD8iIjoiOiAiK0guRWoobiksbD1xLmdaKCkrbyttCmlmKCFxLmEpcmV0
+dXJuIGwKcz1xLmd1KCkKcj1QLmhsKHEuYikKcmV0dXJuIGwrcysiOiAiK3J9fQpQLmJKLnByb3RvdHlw
+ZT17CmdaKCl7cmV0dXJuIlJhbmdlRXJyb3IifSwKZ3UoKXt2YXIgcyxyPXRoaXMuZSxxPXRoaXMuZgpp
+ZihyPT1udWxsKXM9cSE9bnVsbD8iOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIrSC5FaihxKToi
+IgplbHNlIGlmKHE9PW51bGwpcz0iOiBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIrSC5Faihy
+KQplbHNlIGlmKHE+cilzPSI6IE5vdCBpbiBpbmNsdXNpdmUgcmFuZ2UgIitILkVqKHIpKyIuLiIrSC5F
+aihxKQplbHNlIHM9cTxyPyI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5IjoiOiBPbmx5IHZhbGlk
+IHZhbHVlIGlzICIrSC5FaihyKQpyZXR1cm4gc319ClAuZVkucHJvdG90eXBlPXsKZ1ooKXtyZXR1cm4i
+UmFuZ2VFcnJvciJ9LApndSgpe2lmKEguSVoodGhpcy5iKTwwKXJldHVybiI6IGluZGV4IG11c3Qgbm90
+IGJlIG5lZ2F0aXZlIgp2YXIgcz10aGlzLmYKaWYocz09PTApcmV0dXJuIjogbm8gaW5kaWNlcyBhcmUg
+dmFsaWQiCnJldHVybiI6IGluZGV4IHNob3VsZCBiZSBsZXNzIHRoYW4gIitzfSwKZ0EoYSl7cmV0dXJu
+IHRoaXMuZn19ClAubXAucHJvdG90eXBlPXsKdyhhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcyxq
+PXt9LGk9bmV3IFAuTSgiIikKai5hPSIiCnM9ay5jCmZvcihyPXMubGVuZ3RoLHE9MCxwPSIiLG89IiI7
+cTxyOysrcSxvPSIsICIpe249c1txXQppLmE9cCtvCnA9aS5hKz1QLmhsKG4pCmouYT0iLCAifWsuZC5L
+KDAsbmV3IFAuV0YoaixpKSkKbT1QLmhsKGsuYSkKbD1pLncoMCkKcj0iTm9TdWNoTWV0aG9kRXJyb3I6
+IG1ldGhvZCBub3QgZm91bmQ6ICciK2suYi5hKyInXG5SZWNlaXZlcjogIittKyJcbkFyZ3VtZW50czog
+WyIrbCsiXSIKcmV0dXJuIHJ9fQpQLnViLnByb3RvdHlwZT17CncoYSl7cmV0dXJuIlVuc3VwcG9ydGVk
+IG9wZXJhdGlvbjogIit0aGlzLmF9fQpQLmRzLnByb3RvdHlwZT17CncoYSl7dmFyIHM9IlVuaW1wbGVt
+ZW50ZWRFcnJvcjogIit0aGlzLmEKcmV0dXJuIHN9fQpQLmxqLnByb3RvdHlwZT17CncoYSl7cmV0dXJu
+IkJhZCBzdGF0ZTogIit0aGlzLmF9fQpQLlVWLnByb3RvdHlwZT17CncoYSl7dmFyIHM9dGhpcy5hCmlm
+KHM9PW51bGwpcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb24uIgpy
+ZXR1cm4iQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbjogIitQLmhsKHMpKyIu
+In19ClAuazUucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iT3V0IG9mIE1lbW9yeSJ9LApnSUkoKXtyZXR1
+cm4gbnVsbH0sCiRpWFM6MX0KUC5LWS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJTdGFjayBPdmVyZmxv
+dyJ9LApnSUkoKXtyZXR1cm4gbnVsbH0sCiRpWFM6MX0KUC5wLnByb3RvdHlwZT17CncoYSl7dmFyIHM9
+IlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICciK3RoaXMuYSsiJyBkdXJpbmcgaXRzIGluaXRpYWxpemF0
+aW9uIgpyZXR1cm4gc319ClAuQ0QucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iRXhjZXB0aW9uOiAiK3Ro
+aXMuYX0sCiRpUno6MX0KUC5hRS5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxq
+LGksaCxnPXRoaXMuYSxmPSIiIT09Zz8iRm9ybWF0RXhjZXB0aW9uOiAiK2c6IkZvcm1hdEV4Y2VwdGlv
+biIsZT10aGlzLmMsZD10aGlzLmIKaWYodHlwZW9mIGQ9PSJzdHJpbmciKXtpZihlIT1udWxsKXM9ZTww
+fHxlPmQubGVuZ3RoCmVsc2Ugcz0hMQppZihzKWU9bnVsbAppZihlPT1udWxsKXtpZihkLmxlbmd0aD43
+OClkPUMueEIuTmooZCwwLDc1KSsiLi4uIgpyZXR1cm4gZisiXG4iK2R9Zm9yKHI9MSxxPTAscD0hMSxv
+PTA7bzxlOysrbyl7bj1DLnhCLlcoZCxvKQppZihuPT09MTApe2lmKHEhPT1vfHwhcCkrK3IKcT1vKzEK
+cD0hMX1lbHNlIGlmKG49PT0xMyl7KytyCnE9bysxCnA9ITB9fWY9cj4xP2YrKCIgKGF0IGxpbmUgIity
+KyIsIGNoYXJhY3RlciAiKyhlLXErMSkrIilcbiIpOmYrKCIgKGF0IGNoYXJhY3RlciAiKyhlKzEpKyIp
+XG4iKQptPWQubGVuZ3RoCmZvcihvPWU7bzxtOysrbyl7bj1DLnhCLk8oZCxvKQppZihuPT09MTB8fG49
+PT0xMyl7bT1vCmJyZWFrfX1pZihtLXE+NzgpaWYoZS1xPDc1KXtsPXErNzUKaz1xCmo9IiIKaT0iLi4u
+In1lbHNle2lmKG0tZTw3NSl7az1tLTc1Cmw9bQppPSIifWVsc2V7az1lLTM2Cmw9ZSszNgppPSIuLi4i
+fWo9Ii4uLiJ9ZWxzZXtsPW0Kaz1xCmo9IiIKaT0iIn1oPUMueEIuTmooZCxrLGwpCnJldHVybiBmK2or
+aCtpKyJcbiIrQy54Qi5UKCIgIixlLWsrai5sZW5ndGgpKyJeXG4ifWVsc2UgcmV0dXJuIGUhPW51bGw/
+ZisoIiAoYXQgb2Zmc2V0ICIrSC5FaihlKSsiKSIpOmZ9LAokaVJ6OjF9ClAuY1gucHJvdG90eXBlPXsK
+ZHIoYSxiKXtyZXR1cm4gSC5HSih0aGlzLEguTGgodGhpcykuQygiY1guRSIpLGIpfSwKRTIoYSxiLGMp
+e3ZhciBzPUguTGgodGhpcykKcmV0dXJuIEguSzEodGhpcyxzLktxKGMpLkMoIjEoY1guRSkiKS5hKGIp
+LHMuQygiY1guRSIpLGMpfSwKZXYoYSxiKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcgSC5VNSh0
+aGlzLHMuQygiYTIoY1guRSkiKS5hKGIpLHMuQygiVTU8Y1guRT4iKSl9LAp0dChhLGIpe3JldHVybiBQ
+LlkxKHRoaXMsYixILkxoKHRoaXMpLkMoImNYLkUiKSl9LApicihhKXtyZXR1cm4gdGhpcy50dChhLCEw
+KX0sCmdBKGEpe3ZhciBzLHI9dGhpcy5nbSh0aGlzKQpmb3Iocz0wO3IuRigpOykrK3MKcmV0dXJuIHN9
+LApnbDAoYSl7cmV0dXJuIXRoaXMuZ20odGhpcykuRigpfSwKZ29yKGEpe3JldHVybiF0aGlzLmdsMCh0
+aGlzKX0sCmVSKGEsYil7cmV0dXJuIEguYksodGhpcyxiLEguTGgodGhpcykuQygiY1guRSIpKX0sCmdy
+OChhKXt2YXIgcyxyPXRoaXMuZ20odGhpcykKaWYoIXIuRigpKXRocm93IEguYihILldwKCkpCnM9ci5n
+bCgpCmlmKHIuRigpKXRocm93IEguYihILkFtKCkpCnJldHVybiBzfSwKRShhLGIpe3ZhciBzLHIscQpQ
+LmsxKGIsImluZGV4IikKZm9yKHM9dGhpcy5nbSh0aGlzKSxyPTA7cy5GKCk7KXtxPXMuZ2woKQppZihi
+PT09cilyZXR1cm4gcTsrK3J9dGhyb3cgSC5iKFAuQ2YoYix0aGlzLCJpbmRleCIsbnVsbCxyKSl9LAp3
+KGEpe3JldHVybiBQLkVQKHRoaXMsIigiLCIpIil9fQpQLkFuLnByb3RvdHlwZT17fQpQLk4zLnByb3Rv
+dHlwZT17CncoYSl7cmV0dXJuIk1hcEVudHJ5KCIrSC5Faih0aGlzLmEpKyI6ICIrSC5Faih0aGlzLmIp
+KyIpIn19ClAuYzgucHJvdG90eXBlPXsKZ2lPKGEpe3JldHVybiBQLk1oLnByb3RvdHlwZS5naU8uY2Fs
+bCh0aGlzLHRoaXMpfSwKdyhhKXtyZXR1cm4ibnVsbCJ9fQpQLk1oLnByb3RvdHlwZT17JGlNaDoxLApE
+TihhLGIpe3JldHVybiB0aGlzPT09Yn0sCmdpTyhhKXtyZXR1cm4gSC5lUSh0aGlzKX0sCncoYSl7cmV0
+dXJuIkluc3RhbmNlIG9mICciK0gubGgodGhpcykrIicifSwKZTcoYSxiKXt0Lm8uYShiKQp0aHJvdyBI
+LmIoUC5scih0aGlzLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9LAp0b1N0cmluZygpe3JldHVybiB0
+aGlzLncodGhpcyl9fQpQLlpkLnByb3RvdHlwZT17CncoYSl7cmV0dXJuIiJ9LAokaUd6OjF9ClAuTS5w
+cm90b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCncoYSl7dmFyIHM9dGhpcy5hCnJl
+dHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKJGlCTDoxfQpQLm4xLnByb3RvdHlwZT17CiQyKGEs
+Yil7dmFyIHMscixxLHAKdC5FLmEoYSkKSC5uKGIpCnM9Qy54Qi5PWShiLCI9IikKaWYocz09PS0xKXtp
+ZihiIT09IiIpYS5ZNSgwLFAua3UoYiwwLGIubGVuZ3RoLHRoaXMuYSwhMCksIiIpfWVsc2UgaWYocyE9
+PTApe3I9Qy54Qi5OaihiLDAscykKcT1DLnhCLnluKGIscysxKQpwPXRoaXMuYQphLlk1KDAsUC5rdShy
+LDAsci5sZW5ndGgscCwhMCksUC5rdShxLDAscS5sZW5ndGgscCwhMCkpfXJldHVybiBhfSwKJFM6MjZ9
+ClAuY1MucHJvdG90eXBlPXsKJDIoYSxiKXt0aHJvdyBILmIoUC5ycigiSWxsZWdhbCBJUHY0IGFkZHJl
+c3MsICIrYSx0aGlzLmEsYikpfSwKJFM6MjR9ClAuVkMucHJvdG90eXBlPXsKJDIoYSxiKXt0aHJvdyBI
+LmIoUC5ycigiSWxsZWdhbCBJUHY2IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJDEoYSl7cmV0dXJu
+IHRoaXMuJDIoYSxudWxsKX0sCiRTOjE5fQpQLkpULnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMKaWYo
+Yi1hPjQpdGhpcy5hLiQyKCJhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2Yg
+NCBoZXggZGlnaXRzIixhKQpzPVAuUUEoQy54Qi5Oaih0aGlzLmIsYSxiKSwxNikKaWYoczwwfHxzPjY1
+NTM1KXRoaXMuYS4kMigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAuLjB4RkZG
+RmAiLGEpCnJldHVybiBzfSwKJFM6MjB9ClAuRG4ucHJvdG90eXBlPXsKZ25EKCl7dmFyIHMscixxLHA9
+dGhpcyxvPXAueAppZihvPT1udWxsKXtvPXAuYQpzPW8ubGVuZ3RoIT09MD8iIitvKyI6IjoiIgpyPXAu
+YwpxPXI9PW51bGwKaWYoIXF8fG89PT0iZmlsZSIpe289cysiLy8iCnM9cC5iCmlmKHMubGVuZ3RoIT09
+MClvPW8rcysiQCIKaWYoIXEpbys9cgpzPXAuZAppZihzIT1udWxsKW89bysiOiIrSC5FaihzKX1lbHNl
+IG89cwpvKz1wLmUKcz1wLmYKaWYocyE9bnVsbClvPW8rIj8iK3MKcz1wLnIKaWYocyE9bnVsbClvPW8r
+IiMiK3MKbz1vLmNoYXJDb2RlQXQoMCk9PTA/bzpvCmlmKHAueD09bnVsbClwLng9bwplbHNlIG89SC52
+KEguaigiX3RleHQiKSl9cmV0dXJuIG99LApnRmooKXt2YXIgcyxyPXRoaXMscT1yLnkKaWYocT09bnVs
+bCl7cz1yLmUKaWYocy5sZW5ndGghPT0wJiZDLnhCLlcocywwKT09PTQ3KXM9Qy54Qi55bihzLDEpCnE9
+cy5sZW5ndGg9PT0wP0MueEQ6UC5BRihuZXcgSC5sSihILlFJKHMuc3BsaXQoIi8iKSx0LnMpLHQuZE8u
+YShQLlBIKCkpLHQuZG8pLHQuTikKaWYoci55PT1udWxsKXIuc0twKHEpCmVsc2UgcT1ILnYoSC5qKCJw
+YXRoU2VnbWVudHMiKSl9cmV0dXJuIHF9LApnaU8oYSl7dmFyIHM9dGhpcyxyPXMuegppZihyPT1udWxs
+KXtyPUMueEIuZ2lPKHMuZ25EKCkpCmlmKHMuej09bnVsbClzLno9cgplbHNlIHI9SC52KEguaigiaGFz
+aENvZGUiKSl9cmV0dXJuIHJ9LApnaFkoKXt2YXIgcz10aGlzLHI9cy5RCmlmKHI9PW51bGwpe3I9cy5m
+CnI9bmV3IFAuR2ooUC5XWChyPT1udWxsPyIiOnIpLHQuZHcpCmlmKHMuUT09bnVsbClzLnNOTShyKQpl
+bHNlIHI9SC52KEguaigicXVlcnlQYXJhbWV0ZXJzIikpfXJldHVybiByfSwKZ2t1KCl7cmV0dXJuIHRo
+aXMuYn0sCmdKZihhKXt2YXIgcz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4iIgppZihDLnhCLm4ocywi
+WyIpKXJldHVybiBDLnhCLk5qKHMsMSxzLmxlbmd0aC0xKQpyZXR1cm4gc30sCmd0cChhKXt2YXIgcz10
+aGlzLmQKcmV0dXJuIHM9PW51bGw/UC53Syh0aGlzLmEpOnN9LApndFAoKXt2YXIgcz10aGlzLmYKcmV0
+dXJuIHM9PW51bGw/IiI6c30sCmdLYSgpe3ZhciBzPXRoaXMucgpyZXR1cm4gcz09bnVsbD8iIjpzfSwK
+aEIoYSl7dmFyIHM9dGhpcy5hCmlmKGEubGVuZ3RoIT09cy5sZW5ndGgpcmV0dXJuITEKcmV0dXJuIFAu
+TlIoYSxzKX0sCm5tKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGo9dGhpcwp0LmM5LmEoYikKcz1q
+LmEKcj1zPT09ImZpbGUiCnE9ai5iCnA9ai5kCm89ai5jCmlmKCEobyE9bnVsbCkpbz1xLmxlbmd0aCE9
+PTB8fHAhPW51bGx8fHI/IiI6bnVsbApuPWouZQppZighciltPW8hPW51bGwmJm4ubGVuZ3RoIT09MApl
+bHNlIG09ITAKaWYobSYmIUMueEIubihuLCIvIikpbj0iLyIrbgpsPW4Kaz1QLmxlKG51bGwsMCwwLGIp
+CnJldHVybiBuZXcgUC5EbihzLHEsbyxwLGwsayxqLnIpfSwKSmgoYSxiKXt2YXIgcyxyLHEscCxvLG4K
+Zm9yKHM9MCxyPTA7Qy54Qi5RaShiLCIuLi8iLHIpOyl7cis9MzsrK3N9cT1DLnhCLmNuKGEsIi8iKQp3
+aGlsZSghMCl7aWYoIShxPjAmJnM+MCkpYnJlYWsKcD1DLnhCLlBrKGEsIi8iLHEtMSkKaWYocDwwKWJy
+ZWFrCm89cS1wCm49byE9PTIKaWYoIW58fG89PT0zKWlmKEMueEIuTyhhLHArMSk9PT00NiluPSFufHxD
+LnhCLk8oYSxwKzIpPT09NDYKZWxzZSBuPSExCmVsc2Ugbj0hMQppZihuKWJyZWFrOy0tcwpxPXB9cmV0
+dXJuIEMueEIuaTcoYSxxKzEsbnVsbCxDLnhCLnluKGIsci0zKnMpKX0sClpJKGEpe3JldHVybiB0aGlz
+Lm1TKFAuaEsoYSkpfSwKbVMoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT10aGlzLGg9bnVsbApp
+ZihhLmdGaSgpLmxlbmd0aCE9PTApe3M9YS5nRmkoKQppZihhLmdjaigpKXtyPWEuZ2t1KCkKcT1hLmdK
+ZihhKQpwPWEuZ3hBKCk/YS5ndHAoYSk6aH1lbHNle3A9aApxPXAKcj0iIn1vPVAueGUoYS5nSWkoYSkp
+Cm49YS5nUUQoKT9hLmd0UCgpOmh9ZWxzZXtzPWkuYQppZihhLmdjaigpKXtyPWEuZ2t1KCkKcT1hLmdK
+ZihhKQpwPVAud0IoYS5neEEoKT9hLmd0cChhKTpoLHMpCm89UC54ZShhLmdJaShhKSkKbj1hLmdRRCgp
+P2EuZ3RQKCk6aH1lbHNle3I9aS5iCnE9aS5jCnA9aS5kCm89aS5lCmlmKGEuZ0lpKGEpPT09IiIpbj1h
+LmdRRCgpP2EuZ3RQKCk6aS5mCmVsc2V7bT1QLnVqKGksbykKaWYobT4wKXtsPUMueEIuTmoobywwLG0p
+Cm89YS5ndFQoKT9sK1AueGUoYS5nSWkoYSkpOmwrUC54ZShpLkpoKEMueEIueW4obyxsLmxlbmd0aCks
+YS5nSWkoYSkpKX1lbHNlIGlmKGEuZ3RUKCkpbz1QLnhlKGEuZ0lpKGEpKQplbHNlIGlmKG8ubGVuZ3Ro
+PT09MClpZihxPT1udWxsKW89cy5sZW5ndGg9PT0wP2EuZ0lpKGEpOlAueGUoYS5nSWkoYSkpCmVsc2Ug
+bz1QLnhlKCIvIithLmdJaShhKSkKZWxzZXtrPWkuSmgobyxhLmdJaShhKSkKaj1zLmxlbmd0aD09PTAK
+aWYoIWp8fHEhPW51bGx8fEMueEIubihvLCIvIikpbz1QLnhlKGspCmVsc2Ugbz1QLndGKGssIWp8fHEh
+PW51bGwpfW49YS5nUUQoKT9hLmd0UCgpOmh9fX1yZXR1cm4gbmV3IFAuRG4ocyxyLHEscCxvLG4sYS5n
+WjgoKT9hLmdLYSgpOmgpfSwKZ2NqKCl7cmV0dXJuIHRoaXMuYyE9bnVsbH0sCmd4QSgpe3JldHVybiB0
+aGlzLmQhPW51bGx9LApnUUQoKXtyZXR1cm4gdGhpcy5mIT1udWxsfSwKZ1o4KCl7cmV0dXJuIHRoaXMu
+ciE9bnVsbH0sCmd0VCgpe3JldHVybiBDLnhCLm4odGhpcy5lLCIvIil9LAp0NCgpe3ZhciBzLHI9dGhp
+cyxxPXIuYQppZihxIT09IiImJnEhPT0iZmlsZSIpdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0
+IGEgZmlsZSBwYXRoIGZyb20gYSAiK3ErIiBVUkkiKSkKcT1yLmYKaWYoKHE9PW51bGw/IiI6cSkhPT0i
+Iil0aHJvdyBILmIoUC5MNCh1LmkpKQpxPXIucgppZigocT09bnVsbD8iIjpxKSE9PSIiKXRocm93IEgu
+YihQLkw0KHUubCkpCnE9JC53USgpCmlmKHEpcT1QLm1uKHIpCmVsc2V7aWYoci5jIT1udWxsJiZyLmdK
+ZihyKSE9PSIiKUgudihQLkw0KHUuaikpCnM9ci5nRmooKQpQLmtFKHMsITEpCnE9UC5sKEMueEIubihy
+LmUsIi8iKT8iIisiLyI6IiIscywiLyIpCnE9cS5jaGFyQ29kZUF0KDApPT0wP3E6cX1yZXR1cm4gcX0s
+CncoYSl7cmV0dXJuIHRoaXMuZ25EKCl9LApETihhLGIpe3ZhciBzLHIscT10aGlzCmlmKGI9PW51bGwp
+cmV0dXJuITEKaWYocT09PWIpcmV0dXJuITAKaWYodC5kRC5iKGIpKWlmKHEuYT09PWIuZ0ZpKCkpaWYo
+cS5jIT1udWxsPT09Yi5nY2ooKSlpZihxLmI9PT1iLmdrdSgpKWlmKHEuZ0pmKHEpPT09Yi5nSmYoYikp
+aWYocS5ndHAocSk9PT1iLmd0cChiKSlpZihxLmU9PT1iLmdJaShiKSl7cz1xLmYKcj1zPT1udWxsCmlm
+KCFyPT09Yi5nUUQoKSl7aWYocilzPSIiCmlmKHM9PT1iLmd0UCgpKXtzPXEucgpyPXM9PW51bGwKaWYo
+IXI9PT1iLmdaOCgpKXtpZihyKXM9IiIKcz1zPT09Yi5nS2EoKX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVs
+c2Ugcz0hMX1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVs
+c2Ugcz0hMQplbHNlIHM9ITEKcmV0dXJuIHN9LApzS3AoYSl7dGhpcy55PXQuYmsuYShhKX0sCnNOTShh
+KXt0aGlzLlE9dC5jWi5hKGEpfSwKJGlpRDoxLApnRmkoKXtyZXR1cm4gdGhpcy5hfSwKZ0lpKGEpe3Jl
+dHVybiB0aGlzLmV9fQpQLlJaLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBQLmVQKEMuWkosSC5uKGEp
+LEMueE0sITEpfSwKJFM6Mn0KUC5NRS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzPXRoaXMuYixyPXRo
 aXMuYQpzLmErPXIuYQpyLmE9IiYiCnI9cy5hKz1QLmVQKEMuRjMsYSxDLnhNLCEwKQppZihiIT1udWxs
 JiZiLmxlbmd0aCE9PTApe3MuYT1yKyI9IgpzLmErPVAuZVAoQy5GMyxiLEMueE0sITApfX0sCiRTOjIy
-fQpQLnk1LnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHMscgpILm4oYSkKaWYoYj09bnVs
-bHx8dHlwZW9mIGI9PSJzdHJpbmciKXRoaXMuYS4kMihhLEguayhiKSkKZWxzZSBmb3Iocz1KLklUKHQu
-Ui5hKGIpKSxyPXRoaXMuYTtzLkYoKTspci4kMihhLEgubihzLmdsKCkpKX0sCiRTOjExfQpQLlBFLnBy
-b3RvdHlwZT17CmdsUjpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG89dGhpcyxuPW51bGwsbT1vLmMKaWYo
-bT09bnVsbCl7bT1vLmIKaWYoMD49bS5sZW5ndGgpcmV0dXJuIEguT0gobSwwKQpzPW8uYQptPW1bMF0r
-MQpyPUMueEIuWFUocywiPyIsbSkKcT1zLmxlbmd0aAppZihyPj0wKXtwPVAuUEkocyxyKzEscSxDLlZD
-LCExKQpxPXJ9ZWxzZSBwPW4KbT1vLmM9bmV3IFAucWUoImRhdGEiLCIiLG4sbixQLlBJKHMsbSxxLEMu
-V2QsITEpLHAsbil9cmV0dXJuIG19LAp3OmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5iCmlmKDA+PXIu
-bGVuZ3RoKXJldHVybiBILk9IKHIsMCkKcz10aGlzLmEKcmV0dXJuIHJbMF09PT0tMT8iZGF0YToiK3M6
-c319ClAueUkucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLmEKaWYoYT49cy5s
-ZW5ndGgpcmV0dXJuIEguT0gocyxhKQpzPXNbYV0KQy5OQS5kdShzLDAsOTYsYikKcmV0dXJuIHN9LAok
-UzoyM30KUC5jNi5wcm90b3R5cGU9ewokMzpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxCmZvcihzPWIu
-bGVuZ3RoLHI9MDtyPHM7KytyKXtxPUMueEIuVyhiLHIpXjk2CmlmKHE+PTk2KXJldHVybiBILk9IKGEs
-cSkKYVtxXT1jfX0sCiRTOjE4fQpQLnFkLnByb3RvdHlwZT17CiQzOmZ1bmN0aW9uKGEsYixjKXt2YXIg
-cyxyLHEKZm9yKHM9Qy54Qi5XKGIsMCkscj1DLnhCLlcoYiwxKTtzPD1yOysrcyl7cT0oc145Nik+Pj4w
-CmlmKHE+PTk2KXJldHVybiBILk9IKGEscSkKYVtxXT1jfX0sCiRTOjE4fQpQLlVmLnByb3RvdHlwZT17
-CmdjajpmdW5jdGlvbigpe3JldHVybiB0aGlzLmM+MH0sCmd4QTpmdW5jdGlvbigpe3JldHVybiB0aGlz
-LmM+MCYmdGhpcy5kKzE8dGhpcy5lfSwKZ1FEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZjx0aGlzLnJ9
-LApnWjg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yPHRoaXMuYS5sZW5ndGh9LApndFQ6ZnVuY3Rpb24o
-KXtyZXR1cm4gQy54Qi5RaSh0aGlzLmEsIi8iLHRoaXMuZSl9LApnRmk6ZnVuY3Rpb24oKXt2YXIgcz10
-aGlzLngKcmV0dXJuIHM9PW51bGw/dGhpcy54PXRoaXMuVTIoKTpzfSwKVTI6ZnVuY3Rpb24oKXt2YXIg
-cyxyPXRoaXMscT1yLmIKaWYocTw9MClyZXR1cm4iIgpzPXE9PT00CmlmKHMmJkMueEIubihyLmEsImh0
-dHAiKSlyZXR1cm4iaHR0cCIKaWYocT09PTUmJkMueEIubihyLmEsImh0dHBzIikpcmV0dXJuImh0dHBz
-IgppZihzJiZDLnhCLm4oci5hLCJmaWxlIikpcmV0dXJuImZpbGUiCmlmKHE9PT03JiZDLnhCLm4oci5h
-LCJwYWNrYWdlIikpcmV0dXJuInBhY2thZ2UiCnJldHVybiBDLnhCLk5qKHIuYSwwLHEpfSwKZ2t1OmZ1
-bmN0aW9uKCl7dmFyIHM9dGhpcy5jLHI9dGhpcy5iKzMKcmV0dXJuIHM+cj9DLnhCLk5qKHRoaXMuYSxy
-LHMtMSk6IiJ9LApnSmY6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5jCnJldHVybiBzPjA/Qy54Qi5Oaih0
-aGlzLmEscyx0aGlzLmQpOiIifSwKZ3RwOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcwppZihyLmd4QSgp
-KXJldHVybiBQLlFBKEMueEIuTmooci5hLHIuZCsxLHIuZSksbnVsbCkKcz1yLmIKaWYocz09PTQmJkMu
-eEIubihyLmEsImh0dHAiKSlyZXR1cm4gODAKaWYocz09PTUmJkMueEIubihyLmEsImh0dHBzIikpcmV0
-dXJuIDQ0MwpyZXR1cm4gMH0sCmdJaTpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi5Oaih0aGlzLmEsdGhp
-cy5lLHRoaXMuZil9LApndFA6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmYscj10aGlzLnIKcmV0dXJuIHM8
-cj9DLnhCLk5qKHRoaXMuYSxzKzEscik6IiJ9LApnS2E6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLnIscj10
-aGlzLmEKcmV0dXJuIHM8ci5sZW5ndGg/Qy54Qi55bihyLHMrMSk6IiJ9LApnRmo6ZnVuY3Rpb24oKXt2
+fQpQLnk1LnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscgpILm4oYSkKaWYoYj09bnVsbHx8dHlwZW9m
+IGI9PSJzdHJpbmciKXRoaXMuYS4kMihhLEguayhiKSkKZWxzZSBmb3Iocz1KLklUKHQuUi5hKGIpKSxy
+PXRoaXMuYTtzLkYoKTspci4kMihhLEgubihzLmdsKCkpKX0sCiRTOjExfQpQLlBFLnByb3RvdHlwZT17
+CmdsUigpe3ZhciBzLHIscSxwLG89dGhpcyxuPW51bGwsbT1vLmMKaWYobT09bnVsbCl7bT1vLmIKaWYo
+MD49bS5sZW5ndGgpcmV0dXJuIEguT0gobSwwKQpzPW8uYQptPW1bMF0rMQpyPUMueEIuWFUocywiPyIs
+bSkKcT1zLmxlbmd0aAppZihyPj0wKXtwPVAuUEkocyxyKzEscSxDLlZDLCExKQpxPXJ9ZWxzZSBwPW4K
+bT1vLmM9bmV3IFAucWUoImRhdGEiLCIiLG4sbixQLlBJKHMsbSxxLEMuV2QsITEpLHAsbil9cmV0dXJu
+IG19LAp3KGEpe3ZhciBzLHI9dGhpcy5iCmlmKDA+PXIubGVuZ3RoKXJldHVybiBILk9IKHIsMCkKcz10
+aGlzLmEKcmV0dXJuIHJbMF09PT0tMT8iZGF0YToiK3M6c319ClAueUkucHJvdG90eXBlPXsKJDIoYSxi
+KXt2YXIgcz10aGlzLmEKaWYoYT49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxhKQpzPXNbYV0KQy5OQS5k
+dShzLDAsOTYsYikKcmV0dXJuIHN9LAokUzoyM30KUC5jNi5wcm90b3R5cGU9ewokMyhhLGIsYyl7dmFy
+IHMscixxCmZvcihzPWIubGVuZ3RoLHI9MDtyPHM7KytyKXtxPUMueEIuVyhiLHIpXjk2CmlmKHE+PTk2
+KXJldHVybiBILk9IKGEscSkKYVtxXT1jfX0sCiRTOjE4fQpQLnFkLnByb3RvdHlwZT17CiQzKGEsYixj
+KXt2YXIgcyxyLHEKZm9yKHM9Qy54Qi5XKGIsMCkscj1DLnhCLlcoYiwxKTtzPD1yOysrcyl7cT0oc145
+Nik+Pj4wCmlmKHE+PTk2KXJldHVybiBILk9IKGEscSkKYVtxXT1jfX0sCiRTOjE4fQpQLlVmLnByb3Rv
+dHlwZT17Cmdjaigpe3JldHVybiB0aGlzLmM+MH0sCmd4QSgpe3JldHVybiB0aGlzLmM+MCYmdGhpcy5k
+KzE8dGhpcy5lfSwKZ1FEKCl7cmV0dXJuIHRoaXMuZjx0aGlzLnJ9LApnWjgoKXtyZXR1cm4gdGhpcy5y
+PHRoaXMuYS5sZW5ndGh9LApndFQoKXtyZXR1cm4gQy54Qi5RaSh0aGlzLmEsIi8iLHRoaXMuZSl9LApn
+RmkoKXt2YXIgcz10aGlzLngKcmV0dXJuIHM9PW51bGw/dGhpcy54PXRoaXMuVTIoKTpzfSwKVTIoKXt2
+YXIgcyxyPXRoaXMscT1yLmIKaWYocTw9MClyZXR1cm4iIgpzPXE9PT00CmlmKHMmJkMueEIubihyLmEs
+Imh0dHAiKSlyZXR1cm4iaHR0cCIKaWYocT09PTUmJkMueEIubihyLmEsImh0dHBzIikpcmV0dXJuImh0
+dHBzIgppZihzJiZDLnhCLm4oci5hLCJmaWxlIikpcmV0dXJuImZpbGUiCmlmKHE9PT03JiZDLnhCLm4o
+ci5hLCJwYWNrYWdlIikpcmV0dXJuInBhY2thZ2UiCnJldHVybiBDLnhCLk5qKHIuYSwwLHEpfSwKZ2t1
+KCl7dmFyIHM9dGhpcy5jLHI9dGhpcy5iKzMKcmV0dXJuIHM+cj9DLnhCLk5qKHRoaXMuYSxyLHMtMSk6
+IiJ9LApnSmYoYSl7dmFyIHM9dGhpcy5jCnJldHVybiBzPjA/Qy54Qi5Oaih0aGlzLmEscyx0aGlzLmQp
+OiIifSwKZ3RwKGEpe3ZhciBzLHI9dGhpcwppZihyLmd4QSgpKXJldHVybiBQLlFBKEMueEIuTmooci5h
+LHIuZCsxLHIuZSksbnVsbCkKcz1yLmIKaWYocz09PTQmJkMueEIubihyLmEsImh0dHAiKSlyZXR1cm4g
+ODAKaWYocz09PTUmJkMueEIubihyLmEsImh0dHBzIikpcmV0dXJuIDQ0MwpyZXR1cm4gMH0sCmdJaShh
+KXtyZXR1cm4gQy54Qi5Oaih0aGlzLmEsdGhpcy5lLHRoaXMuZil9LApndFAoKXt2YXIgcz10aGlzLmYs
+cj10aGlzLnIKcmV0dXJuIHM8cj9DLnhCLk5qKHRoaXMuYSxzKzEscik6IiJ9LApnS2EoKXt2YXIgcz10
+aGlzLnIscj10aGlzLmEKcmV0dXJuIHM8ci5sZW5ndGg/Qy54Qi55bihyLHMrMSk6IiJ9LApnRmooKXt2
 YXIgcyxyLHE9dGhpcy5lLHA9dGhpcy5mLG89dGhpcy5hCmlmKEMueEIuUWkobywiLyIscSkpKytxCmlm
 KHE9PT1wKXJldHVybiBDLnhECnM9SC5RSShbXSx0LnMpCmZvcihyPXE7cjxwOysrcilpZihDLnhCLk8o
 byxyKT09PTQ3KXtDLk5tLmkocyxDLnhCLk5qKG8scSxyKSkKcT1yKzF9Qy5ObS5pKHMsQy54Qi5Oaihv
-LHEscCkpCnJldHVybiBQLkFGKHMsdC5OKX0sCmdoWTpmdW5jdGlvbigpe2lmKHRoaXMuZj49dGhpcy5y
-KXJldHVybiBDLkNNCnJldHVybiBuZXcgUC5HaihQLldYKHRoaXMuZ3RQKCkpLHQuZHcpfSwKa1g6ZnVu
-Y3Rpb24oYSl7dmFyIHM9dGhpcy5kKzEKcmV0dXJuIHMrYS5sZW5ndGg9PT10aGlzLmUmJkMueEIuUWko
-dGhpcy5hLGEscyl9LApOOTpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1zLnIscT1zLmEKaWYocj49cS5s
-ZW5ndGgpcmV0dXJuIHMKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmoocSwwLHIpLHMuYixzLmMscy5kLHMu
-ZSxzLmYscixzLngpfSwKbm06ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPXRo
-aXMsaD1udWxsCnQuYzkuYShiKQpzPWkuZ0ZpKCkKcj1zPT09ImZpbGUiCnE9aS5jCnA9cT4wP0MueEIu
-TmooaS5hLGkuYiszLHEpOiIiCm89aS5neEEoKT9pLmd0cChpKTpoCnE9aS5jCmlmKHE+MCluPUMueEIu
-TmooaS5hLHEsaS5kKQplbHNlIG49cC5sZW5ndGghPT0wfHxvIT1udWxsfHxyPyIiOmgKcT1pLmEKbT1D
-LnhCLk5qKHEsaS5lLGkuZikKaWYoIXIpbD1uIT1udWxsJiZtLmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlm
-KGwmJiFDLnhCLm4obSwiLyIpKW09Ii8iK20Kaz1QLmxlKGgsMCwwLGIpCmw9aS5yCmo9bDxxLmxlbmd0
-aD9DLnhCLnluKHEsbCsxKTpoCnJldHVybiBuZXcgUC5EbihzLHAsbixvLG0sayxqKX0sClpJOmZ1bmN0
-aW9uKGEpe3JldHVybiB0aGlzLm1TKFAuaEsoYSkpfSwKbVM6ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5j
-ZW9mIFAuVWYpcmV0dXJuIHRoaXMudTEodGhpcyxhKQpyZXR1cm4gdGhpcy5SZSgpLm1TKGEpfSwKdTE6
-ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIuYgppZihj
-PjApcmV0dXJuIGIKcz1iLmMKaWYocz4wKXtyPWEuYgppZihyPD0wKXJldHVybiBiCnE9cj09PTQKaWYo
-cSYmQy54Qi5uKGEuYSwiZmlsZSIpKXA9Yi5lIT09Yi5mCmVsc2UgaWYocSYmQy54Qi5uKGEuYSwiaHR0
-cCIpKXA9IWIua1goIjgwIikKZWxzZSBwPSEocj09PTUmJkMueEIubihhLmEsImh0dHBzIikpfHwhYi5r
-WCgiNDQzIikKaWYocCl7bz1yKzEKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsbykrQy54Qi55
-bihiLmEsYysxKSxyLHMrbyxiLmQrbyxiLmUrbyxiLmYrbyxiLnIrbyxhLngpfWVsc2UgcmV0dXJuIHRo
-aXMuUmUoKS5tUyhiKX1uPWIuZQpjPWIuZgppZihuPT09Yyl7cz1iLnIKaWYoYzxzKXtyPWEuZgpvPXIt
-YwpyZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxyKStDLnhCLnluKGIuYSxjKSxhLmIsYS5jLGEu
-ZCxhLmUsYytvLHMrbyxhLngpfWM9Yi5hCmlmKHM8Yy5sZW5ndGgpe3I9YS5yCnJldHVybiBuZXcgUC5V
-ZihDLnhCLk5qKGEuYSwwLHIpK0MueEIueW4oYyxzKSxhLmIsYS5jLGEuZCxhLmUsYS5mLHMrKHItcyks
-YS54KX1yZXR1cm4gYS5OOSgpfXM9Yi5hCmlmKEMueEIuUWkocywiLyIsbikpe209YS5lCmw9UC5SeCh0
-aGlzKQprPWw+MD9sOm0Kbz1rLW4KcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsaykrQy54Qi55
-bihzLG4pLGEuYixhLmMsYS5kLG0sYytvLGIucitvLGEueCl9aj1hLmUKaT1hLmYKaWYoaj09PWkmJmEu
-Yz4wKXtmb3IoO0MueEIuUWkocywiLi4vIixuKTspbis9MwpvPWotbisxCnJldHVybiBuZXcgUC5VZihD
-LnhCLk5qKGEuYSwwLGopKyIvIitDLnhCLnluKHMsbiksYS5iLGEuYyxhLmQsaixjK28sYi5yK28sYS54
-KX1oPWEuYQpsPVAuUngodGhpcykKaWYobD49MClnPWwKZWxzZSBmb3IoZz1qO0MueEIuUWkoaCwiLi4v
-IixnKTspZys9MwpmPTAKd2hpbGUoITApe2U9biszCmlmKCEoZTw9YyYmQy54Qi5RaShzLCIuLi8iLG4p
-KSlicmVhazsrK2YKbj1lfWZvcihkPSIiO2k+Zzspey0taQppZihDLnhCLk8oaCxpKT09PTQ3KXtpZihm
-PT09MCl7ZD0iLyIKYnJlYWt9LS1mCmQ9Ii8ifX1pZihpPT09ZyYmYS5iPD0wJiYhQy54Qi5RaShoLCIv
-IixqKSl7bi09ZiozCmQ9IiJ9bz1pLW4rZC5sZW5ndGgKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooaCww
-LGkpK2QrQy54Qi55bihzLG4pLGEuYixhLmMsYS5kLGosYytvLGIucitvLGEueCl9LAp0NDpmdW5jdGlv
-bigpe3ZhciBzLHIscT10aGlzLHA9cS5iCmlmKHA+PTApe3M9IShwPT09NCYmQy54Qi5uKHEuYSwiZmls
-ZSIpKQpwPXN9ZWxzZSBwPSExCmlmKHApdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmls
-ZSBwYXRoIGZyb20gYSAiK3EuZ0ZpKCkrIiBVUkkiKSkKcD1xLmYKcz1xLmEKaWYocDxzLmxlbmd0aCl7
-aWYocDxxLnIpdGhyb3cgSC5iKFAuTDQodS5pKSkKdGhyb3cgSC5iKFAuTDQodS5sKSl9cj0kLndRKCkK
-aWYocilwPVAubW4ocSkKZWxzZXtpZihxLmM8cS5kKUgudihQLkw0KHUuaikpCnA9Qy54Qi5OaihzLHEu
-ZSxwKX1yZXR1cm4gcH0sCmdpTzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLnkKcmV0dXJuIHM9PW51bGw/
-dGhpcy55PUMueEIuZ2lPKHRoaXMuYSk6c30sCkROOmZ1bmN0aW9uKGEsYil7aWYoYj09bnVsbClyZXR1
-cm4hMQppZih0aGlzPT09YilyZXR1cm4hMApyZXR1cm4gdC5kRC5iKGIpJiZ0aGlzLmE9PT1iLncoMCl9
-LApSZTpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1udWxsLHE9cy5nRmkoKSxwPXMuZ2t1KCksbz1zLmM+
-MD9zLmdKZihzKTpyLG49cy5neEEoKT9zLmd0cChzKTpyLG09cy5hLGw9cy5mLGs9Qy54Qi5OaihtLHMu
-ZSxsKSxqPXMucgpsPWw8aj9zLmd0UCgpOnIKcmV0dXJuIG5ldyBQLkRuKHEscCxvLG4sayxsLGo8bS5s
-ZW5ndGg/cy5nS2EoKTpyKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYX0sCiRpaUQ6MX0KUC5x
-ZS5wcm90b3R5cGU9e30KVy5xRS5wcm90b3R5cGU9e30KVy5HaC5wcm90b3R5cGU9ewpzTFU6ZnVuY3Rp
-b24oYSxiKXthLmhyZWY9Yn0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0sCiRpR2g6MX0K
-Vy5mWS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLnJaLnByb3Rv
-dHlwZT17JGlyWjoxfQpXLkF6LnByb3RvdHlwZT17JGlBejoxfQpXLlFQLnByb3RvdHlwZT17JGlRUDox
-fQpXLm54LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19Clcub0oucHJv
-dG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5pZC5wcm90b3R5cGU9e30K
-Vy5RRi5wcm90b3R5cGU9e30KVy5OaC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBTdHJp
-bmcoYSl9fQpXLmFlLnByb3RvdHlwZT17CkRjOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY3JlYXRlSFRN
-TERvY3VtZW50KGIpfX0KVy5JQi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzLHI9YS5sZWZ0
+LHEscCkpCnJldHVybiBQLkFGKHMsdC5OKX0sCmdoWSgpe2lmKHRoaXMuZj49dGhpcy5yKXJldHVybiBD
+LkNNCnJldHVybiBuZXcgUC5HaihQLldYKHRoaXMuZ3RQKCkpLHQuZHcpfSwKa1goYSl7dmFyIHM9dGhp
+cy5kKzEKcmV0dXJuIHMrYS5sZW5ndGg9PT10aGlzLmUmJkMueEIuUWkodGhpcy5hLGEscyl9LApOOSgp
+e3ZhciBzPXRoaXMscj1zLnIscT1zLmEKaWYocj49cS5sZW5ndGgpcmV0dXJuIHMKcmV0dXJuIG5ldyBQ
+LlVmKEMueEIuTmoocSwwLHIpLHMuYixzLmMscy5kLHMuZSxzLmYscixzLngpfSwKbm0oYSxiKXt2YXIg
+cyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCnQuYzkuYShiKQpzPWkuZ0ZpKCkKcj1zPT09
+ImZpbGUiCnE9aS5jCnA9cT4wP0MueEIuTmooaS5hLGkuYiszLHEpOiIiCm89aS5neEEoKT9pLmd0cChp
+KTpoCnE9aS5jCmlmKHE+MCluPUMueEIuTmooaS5hLHEsaS5kKQplbHNlIG49cC5sZW5ndGghPT0wfHxv
+IT1udWxsfHxyPyIiOmgKcT1pLmEKbT1DLnhCLk5qKHEsaS5lLGkuZikKaWYoIXIpbD1uIT1udWxsJiZt
+Lmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFDLnhCLm4obSwiLyIpKW09Ii8iK20Kaz1QLmxlKGgs
+MCwwLGIpCmw9aS5yCmo9bDxxLmxlbmd0aD9DLnhCLnluKHEsbCsxKTpoCnJldHVybiBuZXcgUC5Ebihz
+LHAsbixvLG0sayxqKX0sClpJKGEpe3JldHVybiB0aGlzLm1TKFAuaEsoYSkpfSwKbVMoYSl7aWYoYSBp
+bnN0YW5jZW9mIFAuVWYpcmV0dXJuIHRoaXMudTEodGhpcyxhKQpyZXR1cm4gdGhpcy5SZSgpLm1TKGEp
+fSwKdTEoYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIuYgppZihjPjAp
+cmV0dXJuIGIKcz1iLmMKaWYocz4wKXtyPWEuYgppZihyPD0wKXJldHVybiBiCnE9cj09PTQKaWYocSYm
+Qy54Qi5uKGEuYSwiZmlsZSIpKXA9Yi5lIT09Yi5mCmVsc2UgaWYocSYmQy54Qi5uKGEuYSwiaHR0cCIp
+KXA9IWIua1goIjgwIikKZWxzZSBwPSEocj09PTUmJkMueEIubihhLmEsImh0dHBzIikpfHwhYi5rWCgi
+NDQzIikKaWYocCl7bz1yKzEKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsbykrQy54Qi55bihi
+LmEsYysxKSxyLHMrbyxiLmQrbyxiLmUrbyxiLmYrbyxiLnIrbyxhLngpfWVsc2UgcmV0dXJuIHRoaXMu
+UmUoKS5tUyhiKX1uPWIuZQpjPWIuZgppZihuPT09Yyl7cz1iLnIKaWYoYzxzKXtyPWEuZgpvPXItYwpy
+ZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxyKStDLnhCLnluKGIuYSxjKSxhLmIsYS5jLGEuZCxh
+LmUsYytvLHMrbyxhLngpfWM9Yi5hCmlmKHM8Yy5sZW5ndGgpe3I9YS5yCnJldHVybiBuZXcgUC5VZihD
+LnhCLk5qKGEuYSwwLHIpK0MueEIueW4oYyxzKSxhLmIsYS5jLGEuZCxhLmUsYS5mLHMrKHItcyksYS54
+KX1yZXR1cm4gYS5OOSgpfXM9Yi5hCmlmKEMueEIuUWkocywiLyIsbikpe209YS5lCmw9UC5SeCh0aGlz
+KQprPWw+MD9sOm0Kbz1rLW4KcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsaykrQy54Qi55bihz
+LG4pLGEuYixhLmMsYS5kLG0sYytvLGIucitvLGEueCl9aj1hLmUKaT1hLmYKaWYoaj09PWkmJmEuYz4w
+KXtmb3IoO0MueEIuUWkocywiLi4vIixuKTspbis9MwpvPWotbisxCnJldHVybiBuZXcgUC5VZihDLnhC
+Lk5qKGEuYSwwLGopKyIvIitDLnhCLnluKHMsbiksYS5iLGEuYyxhLmQsaixjK28sYi5yK28sYS54KX1o
+PWEuYQpsPVAuUngodGhpcykKaWYobD49MClnPWwKZWxzZSBmb3IoZz1qO0MueEIuUWkoaCwiLi4vIixn
+KTspZys9MwpmPTAKd2hpbGUoITApe2U9biszCmlmKCEoZTw9YyYmQy54Qi5RaShzLCIuLi8iLG4pKSli
+cmVhazsrK2YKbj1lfWZvcihkPSIiO2k+Zzspey0taQppZihDLnhCLk8oaCxpKT09PTQ3KXtpZihmPT09
+MCl7ZD0iLyIKYnJlYWt9LS1mCmQ9Ii8ifX1pZihpPT09ZyYmYS5iPD0wJiYhQy54Qi5RaShoLCIvIixq
+KSl7bi09ZiozCmQ9IiJ9bz1pLW4rZC5sZW5ndGgKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooaCwwLGkp
+K2QrQy54Qi55bihzLG4pLGEuYixhLmMsYS5kLGosYytvLGIucitvLGEueCl9LAp0NCgpe3ZhciBzLHIs
+cT10aGlzLHA9cS5iCmlmKHA+PTApe3M9IShwPT09NCYmQy54Qi5uKHEuYSwiZmlsZSIpKQpwPXN9ZWxz
+ZSBwPSExCmlmKHApdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20g
+YSAiK3EuZ0ZpKCkrIiBVUkkiKSkKcD1xLmYKcz1xLmEKaWYocDxzLmxlbmd0aCl7aWYocDxxLnIpdGhy
+b3cgSC5iKFAuTDQodS5pKSkKdGhyb3cgSC5iKFAuTDQodS5sKSl9cj0kLndRKCkKaWYocilwPVAubW4o
+cSkKZWxzZXtpZihxLmM8cS5kKUgudihQLkw0KHUuaikpCnA9Qy54Qi5OaihzLHEuZSxwKX1yZXR1cm4g
+cH0sCmdpTyhhKXt2YXIgcz10aGlzLnkKcmV0dXJuIHM9PW51bGw/dGhpcy55PUMueEIuZ2lPKHRoaXMu
+YSk6c30sCkROKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQppZih0aGlzPT09YilyZXR1cm4hMApyZXR1
+cm4gdC5kRC5iKGIpJiZ0aGlzLmE9PT1iLncoMCl9LApSZSgpe3ZhciBzPXRoaXMscj1udWxsLHE9cy5n
+RmkoKSxwPXMuZ2t1KCksbz1zLmM+MD9zLmdKZihzKTpyLG49cy5neEEoKT9zLmd0cChzKTpyLG09cy5h
+LGw9cy5mLGs9Qy54Qi5OaihtLHMuZSxsKSxqPXMucgpsPWw8aj9zLmd0UCgpOnIKcmV0dXJuIG5ldyBQ
+LkRuKHEscCxvLG4sayxsLGo8bS5sZW5ndGg/cy5nS2EoKTpyKX0sCncoYSl7cmV0dXJuIHRoaXMuYX0s
+CiRpaUQ6MX0KUC5xZS5wcm90b3R5cGU9e30KVy5xRS5wcm90b3R5cGU9e30KVy5HaC5wcm90b3R5cGU9
+ewpzTFUoYSxiKXthLmhyZWY9Yn0sCncoYSl7cmV0dXJuIFN0cmluZyhhKX0sCiRpR2g6MX0KVy5mWS5w
+cm90b3R5cGU9ewp3KGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLnJaLnByb3RvdHlwZT17JGlyWjoxfQpX
+LkF6LnByb3RvdHlwZT17JGlBejoxfQpXLlFQLnByb3RvdHlwZT17JGlRUDoxfQpXLm54LnByb3RvdHlw
+ZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH19Clcub0oucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEu
+bGVuZ3RofX0KVy5pZC5wcm90b3R5cGU9e30KVy5RRi5wcm90b3R5cGU9e30KVy5OaC5wcm90b3R5cGU9
+ewp3KGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLmFlLnByb3RvdHlwZT17CkRjKGEsYil7cmV0dXJuIGEu
+Y3JlYXRlSFRNTERvY3VtZW50KGIpfX0KVy5JQi5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHI9YS5sZWZ0
 CnIudG9TdHJpbmcKcj0iUmVjdGFuZ2xlICgiK0guRWoocikrIiwgIgpzPWEudG9wCnMudG9TdHJpbmcK
 cz1yK0guRWoocykrIikgIgpyPWEud2lkdGgKci50b1N0cmluZwpyPXMrSC5FaihyKSsiIHggIgpzPWEu
-aGVpZ2h0CnMudG9TdHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkROOmZ1bmN0aW9uKGEsYil7dmFyIHMs
-cgppZihiPT1udWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRvU3RyaW5nCnI9Yi5s
-ZWZ0CnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIudG9wCnIudG9TdHJp
-bmcKaWYocz09PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRvU3RyaW5nCmlmKHM9
-PT1yKXtzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5nCnI9cz09PXIKcz1y
-fWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4gc30sCmdpTzpmdW5j
-dGlvbihhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpwPUMuQ0QuZ2lPKHApCnM9YS50b3AK
-cy50b1N0cmluZwpzPUMuQ0QuZ2lPKHMpCnI9YS53aWR0aApyLnRvU3RyaW5nCnI9Qy5DRC5naU8ocikK
-cT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiBXLnJFKHAscyxyLEMuQ0QuZ2lPKHEpKX0sCiRpdG46
-MX0KVy5uNy5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLnd6LnBy
-b3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKcTpmdW5jdGlvbihh
-LGIpe3ZhciBzCkguSVooYikKcz10aGlzLmEKaWYoYjwwfHxiPj1zLmxlbmd0aClyZXR1cm4gSC5PSChz
-LGIpCnJldHVybiB0aGlzLiR0aS5jLmEoc1tiXSl9LApZNTpmdW5jdGlvbihhLGIsYyl7dGhpcy4kdGku
-Yy5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IGxpc3QiKSl9fQpXLmN2LnByb3RvdHlw
-ZT17CmdRZzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuaTcoYSl9LApnUDpmdW5jdGlvbihhKXtyZXR1
-cm4gbmV3IFcuSTQoYSl9LApzUDpmdW5jdGlvbihhLGIpe3ZhciBzCnQuTy5hKGIpCnM9dGhpcy5nUChh
-KQpzLlYxKDApCnMuRlYoMCxiKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKRkY6
-ZnVuY3Rpb24oYSl7dmFyIHM9ISFhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQKaWYocylhLnNjcm9sbElu
-dG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Nyb2xsSW50b1ZpZXcoKX0sCm56OmZ1bmN0aW9uKGEsYixj
-LGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxkLGUpCnN3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2Ui
-YmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2RlCnMudG9TdHJpbmcKSi5FaChzLHIsYSkKYnJlYWsKY2Fz
-ZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rlcwp0aGlzLm1LKGEscixzLmxlbmd0aD4wP3NbMF06bnVs
-bCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEuYXBwZW5kQ2hpbGQocikKYnJlYWsKY2FzZSJhZnRlcmVu
-ZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMscixhLm5leHRTaWJsaW5nKQpicmVhawpk
-ZWZhdWx0OkgudihQLnhZKCJJbnZhbGlkIHBvc2l0aW9uICIrYikpfX0sCnI2OmZ1bmN0aW9uKGEsYixj
-LGQpe3ZhciBzLHIscSxwCmlmKGM9PW51bGwpe2lmKGQ9PW51bGwpe3M9JC5sdAppZihzPT1udWxsKXtz
-PUguUUkoW10sdC5yKQpyPW5ldyBXLnZEKHMpCkMuTm0uaShzLFcuVHcobnVsbCkpCkMuTm0uaShzLFcu
-QmwoKSkKJC5sdD1yCmQ9cn1lbHNlIGQ9c31zPSQuRVUKaWYocz09bnVsbCl7cz1uZXcgVy5LbyhkKQok
-LkVVPXMKYz1zfWVsc2V7cy5hPWQKYz1zfX1lbHNlIGlmKGQhPW51bGwpdGhyb3cgSC5iKFAueFkoInZh
-bGlkYXRvciBjYW4gb25seSBiZSBwYXNzZWQgaWYgdHJlZVNhbml0aXplciBpcyBudWxsIikpCmlmKCQu
-eG89PW51bGwpe3M9ZG9jdW1lbnQKcj1zLmltcGxlbWVudGF0aW9uCnIudG9TdHJpbmcKcj1DLm1ILkRj
-KHIsIiIpCiQueG89cgokLkJPPXIuY3JlYXRlUmFuZ2UoKQpyPSQueG8uY3JlYXRlRWxlbWVudCgiYmFz
-ZSIpCnQuY1IuYShyKQpzPXMuYmFzZVVSSQpzLnRvU3RyaW5nCnIuaHJlZj1zCiQueG8uaGVhZC5hcHBl
-bmRDaGlsZChyKX1zPSQueG8KaWYocy5ib2R5PT1udWxsKXtyPXMuY3JlYXRlRWxlbWVudCgiYm9keSIp
-CkMuQlouc0dTKHMsdC5rLmEocikpfXM9JC54bwppZih0LmsuYihhKSl7cz1zLmJvZHkKcy50b1N0cmlu
-ZwpxPXN9ZWxzZXtzLnRvU3RyaW5nCnE9cy5jcmVhdGVFbGVtZW50KGEudGFnTmFtZSkKJC54by5ib2R5
-LmFwcGVuZENoaWxkKHEpfWlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5n
-ZS5wcm90b3R5cGUmJiFDLk5tLnRnKEMuU3EsYS50YWdOYW1lKSl7JC5CTy5zZWxlY3ROb2RlQ29udGVu
-dHMocSkKcz0kLkJPCnMudG9TdHJpbmcKcD1zLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChiPT1udWxs
-PyJudWxsIjpiKX1lbHNle0oud2YocSxiKQpwPSQueG8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCmZv
-cig7cz1xLmZpcnN0Q2hpbGQscyE9bnVsbDspcC5hcHBlbmRDaGlsZChzKX1pZihxIT09JC54by5ib2R5
-KUouTHQocSkKYy5QbihwKQpkb2N1bWVudC5hZG9wdE5vZGUocCkKcmV0dXJuIHB9LApBSDpmdW5jdGlv
-bihhLGIsYyl7cmV0dXJuIHRoaXMucjYoYSxiLGMsbnVsbCl9LApzaGY6ZnVuY3Rpb24oYSxiKXt0aGlz
-LllDKGEsYil9LApwazpmdW5jdGlvbihhLGIsYyl7dGhpcy5zYTQoYSxudWxsKQphLmFwcGVuZENoaWxk
-KHRoaXMucjYoYSxiLG51bGwsYykpfSwKWUM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wayhhLGIs
-bnVsbCl9LApzUk46ZnVuY3Rpb24oYSxiKXthLmlubmVySFRNTD1ifSwKZ25zOmZ1bmN0aW9uKGEpe3Jl
-dHVybiBhLnRhZ05hbWV9LApnVmw6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXLkNxKGEsImNsaWNrIiwh
-MSx0LlEpfSwKJGljdjoxfQpXLkN2LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0Lmgu
-Yih0LkEuYShhKSl9LAokUzoyNX0KVy5lYS5wcm90b3R5cGU9eyRpZWE6MX0KVy5EMC5wcm90b3R5cGU9
-ewpPbjpmdW5jdGlvbihhLGIsYyxkKXt0LmJ3LmEoYykKaWYoYyE9bnVsbCl0aGlzLnYoYSxiLGMsZCl9
-LApCOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5PbihhLGIsYyxudWxsKX0sCnY6ZnVuY3Rpb24o
-YSxiLGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihiLEgudFIodC5idy5hKGMpLDEpLGQpfSwK
-JGlEMDoxfQpXLmhILnByb3RvdHlwZT17JGloSDoxfQpXLmg0LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9u
-KGEpe3JldHVybiBhLmxlbmd0aH19ClcuYnIucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJu
-IGEubGVuZ3RofX0KVy5WYi5wcm90b3R5cGU9ewpzR1M6ZnVuY3Rpb24oYSxiKXthLmJvZHk9Yn19Clcu
-ZkoucHJvdG90eXBlPXsKZW86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGEub3BlbihiLGMsITApfSwK
-JGlmSjoxfQpXLndhLnByb3RvdHlwZT17fQpXLlNnLnByb3RvdHlwZT17JGlTZzoxfQpXLnU4LnByb3Rv
-dHlwZT17CmdEcjpmdW5jdGlvbihhKXtpZigib3JpZ2luIiBpbiBhKXJldHVybiBhLm9yaWdpbgpyZXR1
-cm4gYS5wcm90b2NvbCsiLy8iK2EuaG9zdH0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0s
-CiRpdTg6MX0KVy5Bai5wcm90b3R5cGU9eyRpQWo6MX0KVy5lNy5wcm90b3R5cGU9ewpncjg6ZnVuY3Rp
-b24oYSl7dmFyIHM9dGhpcy5hLHI9cy5jaGlsZE5vZGVzLmxlbmd0aAppZihyPT09MCl0aHJvdyBILmIo
-UC5QVigiTm8gZWxlbWVudHMiKSkKaWYocj4xKXRocm93IEguYihQLlBWKCJNb3JlIHRoYW4gb25lIGVs
-ZW1lbnQiKSkKcz1zLmZpcnN0Q2hpbGQKcy50b1N0cmluZwpyZXR1cm4gc30sCkZWOmZ1bmN0aW9uKGEs
-Yil7dmFyIHMscixxLHAsbwp0LmVoLmEoYikKaWYoYiBpbnN0YW5jZW9mIFcuZTcpe3M9Yi5hCnI9dGhp
-cy5hCmlmKHMhPT1yKWZvcihxPXMuY2hpbGROb2Rlcy5sZW5ndGgscD0wO3A8cTsrK3Ape289cy5maXJz
-dENoaWxkCm8udG9TdHJpbmcKci5hcHBlbmRDaGlsZChvKX1yZXR1cm59Zm9yKHM9Yi5nbShiKSxyPXRo
-aXMuYTtzLkYoKTspci5hcHBlbmRDaGlsZChzLmdsKCkpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBz
-LHIKdC5BLmEoYykKcz10aGlzLmEKcj1zLmNoaWxkTm9kZXMKaWYoYjwwfHxiPj1yLmxlbmd0aClyZXR1
-cm4gSC5PSChyLGIpCnMucmVwbGFjZUNoaWxkKGMscltiXSl9LApnbTpmdW5jdGlvbihhKXt2YXIgcz10
-aGlzLmEuY2hpbGROb2RlcwpyZXR1cm4gbmV3IFcuVzkocyxzLmxlbmd0aCxILnpLKHMpLkMoIlc5PEdt
-LkU+IikpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5jaGlsZE5vZGVzLmxlbmd0aH0sCnE6
-ZnVuY3Rpb24oYSxiKXt2YXIgcwpILklaKGIpCnM9dGhpcy5hLmNoaWxkTm9kZXMKaWYoYjwwfHxiPj1z
-Lmxlbmd0aClyZXR1cm4gSC5PSChzLGIpCnJldHVybiBzW2JdfX0KVy5LVi5wcm90b3R5cGU9ewp3Zzpm
-dW5jdGlvbihhKXt2YXIgcz1hLnBhcmVudE5vZGUKaWYocyE9bnVsbClzLnJlbW92ZUNoaWxkKGEpfSwK
-RDQ6ZnVuY3Rpb24oYSl7dmFyIHMKZm9yKDtzPWEuZmlyc3RDaGlsZCxzIT1udWxsOylhLnJlbW92ZUNo
-aWxkKHMpfSwKdzpmdW5jdGlvbihhKXt2YXIgcz1hLm5vZGVWYWx1ZQpyZXR1cm4gcz09bnVsbD90aGlz
-LlUoYSk6c30sCnNhNDpmdW5jdGlvbihhLGIpe2EudGV4dENvbnRlbnQ9Yn0sCm1LOmZ1bmN0aW9uKGEs
-YixjKXtyZXR1cm4gYS5pbnNlcnRCZWZvcmUoYixjKX0sCiRpS1Y6MX0KVy5CSC5wcm90b3R5cGU9ewpn
-QTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7SC5JWihiKQppZihi
-Pj4+MCE9PWJ8fGI+PWEubGVuZ3RoKXRocm93IEguYihQLkNmKGIsYSxudWxsLG51bGwsbnVsbCkpCnJl
-dHVybiBhW2JdfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3QuQS5hKGMpCnRocm93IEguYihQLkw0KCJDYW5u
-b3QgYXNzaWduIGVsZW1lbnQgb2YgaW1tdXRhYmxlIExpc3QuIikpfSwKZ3RIOmZ1bmN0aW9uKGEpe2lm
-KGEubGVuZ3RoPjApcmV0dXJuIGFbMF0KdGhyb3cgSC5iKFAuUFYoIk5vIGVsZW1lbnRzIikpfSwKRTpm
-dW5jdGlvbihhLGIpe2lmKGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJuIEguT0goYSxiKQpyZXR1cm4gYVti
-XX0sCiRpYlE6MSwKJGlYajoxLAokaWNYOjEsCiRpek06MX0KVy5TTi5wcm90b3R5cGU9e30KVy5ldy5w
-cm90b3R5cGU9eyRpZXc6MX0KVy5scC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5s
-ZW5ndGh9fQpXLlRiLnByb3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIKaWYoImNy
-ZWF0ZUNvbnRleHR1YWxGcmFnbWVudCIgaW4gd2luZG93LlJhbmdlLnByb3RvdHlwZSlyZXR1cm4gdGhp
-cy5EVyhhLGIsYyxkKQpzPVcuVTkoIjx0YWJsZT4iK0guRWooYikrIjwvdGFibGU+IixjLGQpCnI9ZG9j
-dW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCm5ldyBXLmU3KHIpLkZWKDAsbmV3IFcuZTcocykp
-CnJldHVybiByfX0KVy5Jdi5wcm90b3R5cGU9ewpyNjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyCmlm
-KCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJu
-IHRoaXMuRFcoYSxiLGMsZCkKcz1kb2N1bWVudApyPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9
-bmV3IFcuZTcoQy5JZS5yNihzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksYixjLGQpKQpzPW5ldyBXLmU3
-KHMuZ3I4KHMpKQpuZXcgVy5lNyhyKS5GVigwLG5ldyBXLmU3KHMuZ3I4KHMpKSkKcmV0dXJuIHJ9fQpX
-LldQLnByb3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIKaWYoImNyZWF0ZUNvbnRl
-eHR1YWxGcmFnbWVudCIgaW4gd2luZG93LlJhbmdlLnByb3RvdHlwZSlyZXR1cm4gdGhpcy5EVyhhLGIs
-YyxkKQpzPWRvY3VtZW50CnI9cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKcz1uZXcgVy5lNyhDLkll
-LnI2KHMuY3JlYXRlRWxlbWVudCgidGFibGUiKSxiLGMsZCkpCm5ldyBXLmU3KHIpLkZWKDAsbmV3IFcu
-ZTcocy5ncjgocykpKQpyZXR1cm4gcn19ClcueVkucHJvdG90eXBlPXsKcGs6ZnVuY3Rpb24oYSxiLGMp
-e3ZhciBzLHIKdGhpcy5zYTQoYSxudWxsKQpzPWEuY29udGVudApzLnRvU3RyaW5nCkouYlQocykKcj10
-aGlzLnI2KGEsYixudWxsLGMpCmEuY29udGVudC5hcHBlbmRDaGlsZChyKX0sCllDOmZ1bmN0aW9uKGEs
-Yil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKJGl5WToxfQpXLnc2LnByb3RvdHlwZT17fQpXLks1
-LnByb3RvdHlwZT17ClBvOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1XLlAxKGEub3BlbihiLGMpKQpyZXR1
-cm4gc30sCmdtVzpmdW5jdGlvbihhKXtyZXR1cm4gdC5GLmEoYS5sb2NhdGlvbil9LAp1czpmdW5jdGlv
-bihhLGIpe3JldHVybiBhLmNvbmZpcm0oYil9LAokaUs1OjEsCiRpdjY6MX0KVy5DbS5wcm90b3R5cGU9
-eyRpQ206MX0KVy5DUS5wcm90b3R5cGU9eyRpQ1E6MX0KVy53NC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9u
-KGEpe3ZhciBzLHI9YS5sZWZ0CnIudG9TdHJpbmcKcj0iUmVjdGFuZ2xlICgiK0guRWoocikrIiwgIgpz
-PWEudG9wCnMudG9TdHJpbmcKcz1yK0guRWoocykrIikgIgpyPWEud2lkdGgKci50b1N0cmluZwpyPXMr
-SC5FaihyKSsiIHggIgpzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkROOmZ1
-bmN0aW9uKGEsYil7dmFyIHMscgppZihiPT1udWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVm
-dApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmlu
-ZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0
-aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRv
-U3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpy
-ZXR1cm4gc30sCmdpTzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpwPUMu
-Q0QuZ2lPKHApCnM9YS50b3AKcy50b1N0cmluZwpzPUMuQ0QuZ2lPKHMpCnI9YS53aWR0aApyLnRvU3Ry
-aW5nCnI9Qy5DRC5naU8ocikKcT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiBXLnJFKHAscyxyLEMu
-Q0QuZ2lPKHEpKX19ClcucmgucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3Ro
-fSwKcTpmdW5jdGlvbihhLGIpe0guSVooYikKaWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBI
-LmIoUC5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpyZXR1cm4gYVtiXX0sClk1OmZ1bmN0aW9uKGEsYixj
-KXt0LkEuYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0YWJs
-ZSBMaXN0LiIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtpZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9I
-KGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGljWDoxLAokaXpNOjF9ClcuY2YucHJv
-dG90eXBlPXsKSzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8KdC5lQS5hKGIpCmZvcihzPXRoaXMu
-Z3ZjKCkscj1zLmxlbmd0aCxxPXRoaXMuYSxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgu
-bGspKHMpLCsrcCl7bz1zW3BdCmIuJDIobyxILm4ocS5nZXRBdHRyaWJ1dGUobykpKX19LApndmM6ZnVu
-Y3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEuYXR0cmlidXRlcwptLnRvU3RyaW5nCnM9SC5R
-SShbXSx0LnMpCmZvcihyPW0ubGVuZ3RoLHE9dC5oOSxwPTA7cDxyOysrcCl7aWYocD49bS5sZW5ndGgp
-cmV0dXJuIEguT0gobSxwKQpvPXEuYShtW3BdKQppZihvLm5hbWVzcGFjZVVSST09bnVsbCl7bj1vLm5h
-bWUKbi50b1N0cmluZwpDLk5tLmkocyxuKX19cmV0dXJuIHN9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJu
-IHRoaXMuZ3ZjKCkubGVuZ3RoPT09MH19ClcuaTcucHJvdG90eXBlPXsKeDQ6ZnVuY3Rpb24oYSl7dmFy
-IHM9dGhpcy5hLmhhc0F0dHJpYnV0ZShhKQpyZXR1cm4gc30sCnE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
-dGhpcy5hLmdldEF0dHJpYnV0ZShILm4oYikpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5zZXRB
-dHRyaWJ1dGUoYixjKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aH19Clcu
-U3kucHJvdG90eXBlPXsKeDQ6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hLmEuaGFzQXR0cmlidXRlKCJk
-YXRhLSIrdGhpcy5PVShhKSkKcmV0dXJuIHN9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYS5h
-LmdldEF0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuT1UoSC5uKGIpKSl9LApZNTpmdW5jdGlvbihhLGIsYyl7
-dGhpcy5hLmEuc2V0QXR0cmlidXRlKCJkYXRhLSIrdGhpcy5PVShiKSxjKX0sCks6ZnVuY3Rpb24oYSxi
-KXt0aGlzLmEuSygwLG5ldyBXLktTKHRoaXMsdC5lQS5hKGIpKSl9LApndmM6ZnVuY3Rpb24oKXt2YXIg
-cz1ILlFJKFtdLHQucykKdGhpcy5hLksoMCxuZXcgVy5BMyh0aGlzLHMpKQpyZXR1cm4gc30sCmdBOmZ1
-bmN0aW9uKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aH0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4g
-dGhpcy5ndmMoKS5sZW5ndGg9PT0wfSwKeHE6ZnVuY3Rpb24oYSl7dmFyIHMscixxPUguUUkoYS5zcGxp
-dCgiLSIpLHQucykKZm9yKHM9MTtzPHEubGVuZ3RoOysrcyl7cj1xW3NdCmlmKHIubGVuZ3RoPjApQy5O
-bS5ZNShxLHMsclswXS50b1VwcGVyQ2FzZSgpK0MueEIueW4ociwxKSl9cmV0dXJuIEMuTm0uayhxLCIi
-KX0sCk9VOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8KZm9yKHM9YS5sZW5ndGgscj0wLHE9IiI7cjxz
-Oysrcil7cD1hW3JdCm89cC50b0xvd2VyQ2FzZSgpCnE9KHAhPT1vJiZyPjA/cSsiLSI6cSkrb31yZXR1
-cm4gcS5jaGFyQ29kZUF0KDApPT0wP3E6cX19ClcuS1MucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxi
-KXtpZihDLnhCLm4oYSwiZGF0YS0iKSl0aGlzLmIuJDIodGhpcy5hLnhxKEMueEIueW4oYSw1KSksYil9
-LAokUzo4fQpXLkEzLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7aWYoQy54Qi5uKGEsImRhdGEt
-IikpQy5ObS5pKHRoaXMuYix0aGlzLmEueHEoQy54Qi55bihhLDUpKSl9LAokUzo4fQpXLkk0LnByb3Rv
-dHlwZT17CkQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvPVAuTHModC5OKQpmb3Iocz10aGlzLmEuY2xh
-c3NOYW1lLnNwbGl0KCIgIikscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1KLlQwKHNbcV0pCmlmKHAu
-bGVuZ3RoIT09MClvLmkoMCxwKX1yZXR1cm4gb30sClg6ZnVuY3Rpb24oYSl7dGhpcy5hLmNsYXNzTmFt
-ZT10LkMuYShhKS5rKDAsIiAiKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0
-Lmxlbmd0aH0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGg9PT0w
-fSwKZ29yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aCE9PTB9LApWMTpm
-dW5jdGlvbihhKXt0aGlzLmEuY2xhc3NOYW1lPSIifSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlz
-LmEuY2xhc3NMaXN0LmNvbnRhaW5zKGIpCnJldHVybiBzfSwKaTpmdW5jdGlvbihhLGIpe3ZhciBzLHIK
-SC5uKGIpCnM9dGhpcy5hLmNsYXNzTGlzdApyPXMuY29udGFpbnMoYikKcy5hZGQoYikKcmV0dXJuIXJ9
-LApSOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxCmlmKHR5cGVvZiBiPT0ic3RyaW5nIil7cz10aGlzLmEu
-Y2xhc3NMaXN0CnI9cy5jb250YWlucyhiKQpzLnJlbW92ZShiKQpxPXJ9ZWxzZSBxPSExCnJldHVybiBx
-fSwKRlY6ZnVuY3Rpb24oYSxiKXtXLlROKHRoaXMuYSx0Lk8uYShiKSl9fQpXLkZrLnByb3RvdHlwZT17
-fQpXLlJPLnByb3RvdHlwZT17fQpXLkNxLnByb3RvdHlwZT17fQpXLnhDLnByb3RvdHlwZT17fQpXLnZO
-LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuJDEodC5CLmEoYSkpfSwKJFM6
-Mjd9ClcuSlEucHJvdG90eXBlPXsKQ1k6ZnVuY3Rpb24oYSl7dmFyIHMKaWYoJC5vci5hPT09MCl7Zm9y
-KHM9MDtzPDI2MjsrK3MpJC5vci5ZNSgwLEMuY21bc10sVy5wUygpKQpmb3Iocz0wO3M8MTI7KytzKSQu
-b3IuWTUoMCxDLkJJW3NdLFcuVjQoKSl9fSwKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuICQuQU4oKS50Zygw
-LFcuclMoYSkpfSwKRWI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPSQub3IucSgwLFcuclMoYSkrIjo6Iiti
-KQppZihzPT1udWxsKXM9JC5vci5xKDAsIio6OiIrYikKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4g
-SC5wOChzLiQ0KGEsYixjLHRoaXMpKX0sCiRpa0Y6MX0KVy5HbS5wcm90b3R5cGU9ewpnbTpmdW5jdGlv
-bihhKXtyZXR1cm4gbmV3IFcuVzkoYSx0aGlzLmdBKGEpLEgueksoYSkuQygiVzk8R20uRT4iKSl9fQpX
-LnZELnByb3RvdHlwZT17CmkwOmZ1bmN0aW9uKGEpe3JldHVybiBDLk5tLlZyKHRoaXMuYSxuZXcgVy5V
-dihhKSl9LApFYjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEMuTm0uVnIodGhpcy5hLG5ldyBXLkVnKGEs
-YixjKSl9LAokaWtGOjF9ClcuVXYucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHQuRS5h
-KGEpLmkwKHRoaXMuYSl9LAokUzoxNn0KVy5FZy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1
-cm4gdC5FLmEoYSkuRWIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MTZ9ClcubTYucHJvdG90eXBl
-PXsKQ1k6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxCnRoaXMuYS5GVigwLGMpCnM9Yi5ldigwLG5l
-dyBXLkVvKCkpCnI9Yi5ldigwLG5ldyBXLldrKCkpCnRoaXMuYi5GVigwLHMpCnE9dGhpcy5jCnEuRlYo
-MCxDLnhEKQpxLkZWKDAscil9LAppMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLnRnKDAsVy5yUyhh
-KSl9LApFYjpmdW5jdGlvbihhLGIsYyl7dmFyIHM9dGhpcyxyPVcuclMoYSkscT1zLmMKaWYocS50Zygw
-LHIrIjo6IitiKSlyZXR1cm4gcy5kLkR0KGMpCmVsc2UgaWYocS50ZygwLCIqOjoiK2IpKXJldHVybiBz
-LmQuRHQoYykKZWxzZXtxPXMuYgppZihxLnRnKDAscisiOjoiK2IpKXJldHVybiEwCmVsc2UgaWYocS50
-ZygwLCIqOjoiK2IpKXJldHVybiEwCmVsc2UgaWYocS50ZygwLHIrIjo6KiIpKXJldHVybiEwCmVsc2Ug
-aWYocS50ZygwLCIqOjoqIikpcmV0dXJuITB9cmV0dXJuITF9LAokaWtGOjF9ClcuRW8ucHJvdG90eXBl
-PXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIUMuTm0udGcoQy5CSSxILm4oYSkpfSwKJFM6Nn0KVy5Xay5w
-cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gQy5ObS50ZyhDLkJJLEgubihhKSl9LAokUzo2
-fQpXLmN0LnByb3RvdHlwZT17CkViOmZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLmpGKGEsYixjKSlyZXR1
-cm4hMAppZihiPT09InRlbXBsYXRlIiYmYz09PSIiKXJldHVybiEwCmlmKGEuZ2V0QXR0cmlidXRlKCJ0
-ZW1wbGF0ZSIpPT09IiIpcmV0dXJuIHRoaXMuZS50ZygwLGIpCnJldHVybiExfX0KVy5JQS5wcm90b3R5
-cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4iVEVNUExBVEU6OiIrSC5uKGEpfSwKJFM6Mn0KVy5Pdy5w
-cm90b3R5cGU9ewppMDpmdW5jdGlvbihhKXt2YXIgcwppZih0LmFPLmIoYSkpcmV0dXJuITEKcz10Lmc3
-LmIoYSkKaWYocyYmVy5yUyhhKT09PSJmb3JlaWduT2JqZWN0IilyZXR1cm4hMQppZihzKXJldHVybiEw
-CnJldHVybiExfSwKRWI6ZnVuY3Rpb24oYSxiLGMpe2lmKGI9PT0iaXMifHxDLnhCLm4oYiwib24iKSly
-ZXR1cm4hMQpyZXR1cm4gdGhpcy5pMChhKX0sCiRpa0Y6MX0KVy5XOS5wcm90b3R5cGU9ewpGOmZ1bmN0
-aW9uKCl7dmFyIHM9dGhpcyxyPXMuYysxLHE9cy5iCmlmKHI8cSl7cy5zcChKLng5KHMuYSxyKSkKcy5j
-PXIKcmV0dXJuITB9cy5zcChudWxsKQpzLmM9cQpyZXR1cm4hMX0sCmdsOmZ1bmN0aW9uKCl7cmV0dXJu
-IHRoaXMuJHRpLmMuYSh0aGlzLmQpfSwKc3A6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/
-IikuYShhKX0sCiRpQW46MX0KVy5kVy5wcm90b3R5cGU9eyRpRDA6MSwkaXY2OjF9ClcubWsucHJvdG90
-eXBlPXskaXkwOjF9ClcuS28ucHJvdG90eXBlPXsKUG46ZnVuY3Rpb24oYSl7dmFyIHMscj1uZXcgVy5m
-bSh0aGlzKQpkb3tzPXRoaXMuYgpyLiQyKGEsbnVsbCl9d2hpbGUocyE9PXRoaXMuYil9LApFUDpmdW5j
-dGlvbihhLGIpeysrdGhpcy5iCmlmKGI9PW51bGx8fGIhPT1hLnBhcmVudE5vZGUpSi5MdChhKQplbHNl
-IGIucmVtb3ZlQ2hpbGQoYSl9LApJNDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbj0hMCxtPW51
-bGwsbD1udWxsCnRyeXttPUouaWcoYSkKbD1tLmEuZ2V0QXR0cmlidXRlKCJpcyIpCnQuaC5hKGEpCnM9
-ZnVuY3Rpb24oYyl7aWYoIShjLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVy
-biB0cnVlCmlmKGMuaWQ9PSJsYXN0Q2hpbGQifHxjLm5hbWU9PSJsYXN0Q2hpbGQifHxjLmlkPT0icHJl
-dmlvdXNTaWJsaW5nInx8Yy5uYW1lPT0icHJldmlvdXNTaWJsaW5nInx8Yy5pZD09ImNoaWxkcmVuInx8
-Yy5uYW1lPT0iY2hpbGRyZW4iKXJldHVybiB0cnVlCnZhciBrPWMuY2hpbGROb2RlcwppZihjLmxhc3RD
-aGlsZCYmYy5sYXN0Q2hpbGQhPT1rW2subGVuZ3RoLTFdKXJldHVybiB0cnVlCmlmKGMuY2hpbGRyZW4p
-aWYoIShjLmNoaWxkcmVuIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb258fGMuY2hpbGRyZW4gaW5zdGFu
-Y2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRydWUKdmFyIGo9MAppZihjLmNoaWxkcmVuKWo9Yy5jaGlsZHJl
-bi5sZW5ndGgKZm9yKHZhciBpPTA7aTxqO2krKyl7dmFyIGg9Yy5jaGlsZHJlbltpXQppZihoLmlkPT0i
-YXR0cmlidXRlcyJ8fGgubmFtZT09ImF0dHJpYnV0ZXMifHxoLmlkPT0ibGFzdENoaWxkInx8aC5uYW1l
-PT0ibGFzdENoaWxkInx8aC5pZD09InByZXZpb3VzU2libGluZyJ8fGgubmFtZT09InByZXZpb3VzU2li
-bGluZyJ8fGguaWQ9PSJjaGlsZHJlbiJ8fGgubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1ZX1yZXR1
-cm4gZmFsc2V9KGEpCm49SC5vVChzKT8hMDohKGEuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9k
-ZU1hcCl9Y2F0Y2gocCl7SC5SdShwKX1yPSJlbGVtZW50IHVucHJpbnRhYmxlIgp0cnl7cj1KLncoYSl9
-Y2F0Y2gocCl7SC5SdShwKX10cnl7cT1XLnJTKGEpCnRoaXMua1IodC5oLmEoYSksYixuLHIscSx0LmYu
-YShtKSxILmsobCkpfWNhdGNoKHApe2lmKEguUnUocCkgaW5zdGFuY2VvZiBQLkFUKXRocm93IHAKZWxz
-ZXt0aGlzLkVQKGEsYikKd2luZG93Cm89IlJlbW92aW5nIGNvcnJ1cHRlZCBlbGVtZW50ICIrSC5Faihy
-KQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihvKX19fSwK
-a1I6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIHMscixxLHAsbyxuLG09dGhpcwppZihjKXttLkVQ
-KGEsYikKd2luZG93CnM9IlJlbW92aW5nIGVsZW1lbnQgZHVlIHRvIGNvcnJ1cHRlZCBhdHRyaWJ1dGVz
-IG9uIDwiK2QrIj4iCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53
-YXJuKHMpCnJldHVybn1pZighbS5hLmkwKGEpKXttLkVQKGEsYikKd2luZG93CnM9IlJlbW92aW5nIGRp
-c2FsbG93ZWQgZWxlbWVudCA8IitlKyI+IGZyb20gIitILkVqKGIpCmlmKHR5cGVvZiBjb25zb2xlIT0i
-dW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKHMpCnJldHVybn1pZihnIT1udWxsKWlmKCFtLmEu
-RWIoYSwiaXMiLGcpKXttLkVQKGEsYikKd2luZG93CnM9IlJlbW92aW5nIGRpc2FsbG93ZWQgdHlwZSBl
-eHRlbnNpb24gPCIrZSsnIGlzPSInK2crJyI+JwppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIp
-d2luZG93LmNvbnNvbGUud2FybihzKQpyZXR1cm59cz1mLmd2YygpCnI9SC5RSShzLnNsaWNlKDApLEgu
-dDYocykpCmZvcihxPWYuZ3ZjKCkubGVuZ3RoLTEscz1mLmE7cT49MDstLXEpe2lmKHE+PXIubGVuZ3Ro
-KXJldHVybiBILk9IKHIscSkKcD1yW3FdCm89bS5hCm49Si5jSChwKQpILm4ocCkKaWYoIW8uRWIoYSxu
-LEgubihzLmdldEF0dHJpYnV0ZShwKSkpKXt3aW5kb3cKbz0iUmVtb3ZpbmcgZGlzYWxsb3dlZCBhdHRy
-aWJ1dGUgPCIrZSsiICIrcCsnPSInK0guRWoocy5nZXRBdHRyaWJ1dGUocCkpKyciPicKaWYodHlwZW9m
-IGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4obykKcy5yZW1vdmVBdHRyaWJ1
-dGUocCl9fWlmKHQuYVcuYihhKSl7cz1hLmNvbnRlbnQKcy50b1N0cmluZwptLlBuKHMpfX0sCiRpb246
-MX0KVy5mbS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMu
-YQpzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOm0uSTQoYSxiKQpicmVhawpjYXNlIDg6Y2FzZSAxMTpj
-YXNlIDM6Y2FzZSA0OmJyZWFrCmRlZmF1bHQ6bS5FUChhLGIpfXM9YS5sYXN0Q2hpbGQKZm9yKHE9dC5B
-O3MhPW51bGw7KXtyPW51bGwKdHJ5e3I9cy5wcmV2aW91c1NpYmxpbmcKaWYociE9bnVsbCl7cD1yLm5l
-eHRTaWJsaW5nCm89cwpvPXA9PW51bGw/byE9bnVsbDpwIT09bwpwPW99ZWxzZSBwPSExCmlmKHApe3A9
-UC5QVigiQ29ycnVwdCBIVE1MIikKdGhyb3cgSC5iKHApfX1jYXRjaChuKXtILlJ1KG4pCnA9cS5hKHMp
-OysrbS5iCm89cC5wYXJlbnROb2RlCmlmKGEhPT1vKXtpZihvIT1udWxsKW8ucmVtb3ZlQ2hpbGQocCl9
-ZWxzZSBhLnJlbW92ZUNoaWxkKHApCnM9bnVsbApyPWEubGFzdENoaWxkfWlmKHMhPW51bGwpdGhpcy4k
-MihzLGEpCnM9cn19LAokUzozMH0KVy5MZS5wcm90b3R5cGU9e30KVy5LNy5wcm90b3R5cGU9e30KVy5y
-Qi5wcm90b3R5cGU9e30KVy5YVy5wcm90b3R5cGU9e30KVy5vYS5wcm90b3R5cGU9e30KUC5pSi5wcm90
-b3R5cGU9ewpWSDpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuYSxxPXIubGVuZ3RoCmZvcihzPTA7czxx
-OysrcylpZihyW3NdPT09YSlyZXR1cm4gcwpDLk5tLmkocixhKQpDLk5tLmkodGhpcy5iLG51bGwpCnJl
-dHVybiBxfSwKUHY6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHA9dGhpcyxvPXt9CmlmKGE9PW51bGwpcmV0
-dXJuIGEKaWYoSC5yUShhKSlyZXR1cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYo
-dHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBQLmlQKXJldHVybiBuZXcg
-RGF0ZShhLmEpCmlmKHQuZnYuYihhKSl0aHJvdyBILmIoUC5TWSgic3RydWN0dXJlZCBjbG9uZSBvZiBS
-ZWdFeHAiKSkKaWYodC5jOC5iKGEpKXJldHVybiBhCmlmKHQudy5iKGEpKXJldHVybiBhCmlmKHQuSS5i
-KGEpKXJldHVybiBhCnM9dC5kRS5iKGEpfHwhMQppZihzKXJldHVybiBhCmlmKHQuZi5iKGEpKXtyPXAu
-VkgoYSkKcz1wLmIKaWYocj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxyKQpxPW8uYT1zW3JdCmlmKHEh
-PW51bGwpcmV0dXJuIHEKcT17fQpvLmE9cQpDLk5tLlk1KHMscixxKQphLksoMCxuZXcgUC5FMihvLHAp
-KQpyZXR1cm4gby5hfWlmKHQuai5iKGEpKXtyPXAuVkgoYSkKbz1wLmIKaWYocj49by5sZW5ndGgpcmV0
-dXJuIEguT0gobyxyKQpxPW9bcl0KaWYocSE9bnVsbClyZXR1cm4gcQpyZXR1cm4gcC5layhhLHIpfWlm
-KHQuZUguYihhKSl7cj1wLlZIKGEpCnM9cC5iCmlmKHI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMscikK
-cT1vLmI9c1tyXQppZihxIT1udWxsKXJldHVybiBxCnE9e30Kby5iPXEKQy5ObS5ZNShzLHIscSkKcC5p
-bShhLG5ldyBQLmpnKG8scCkpCnJldHVybiBvLmJ9dGhyb3cgSC5iKFAuU1koInN0cnVjdHVyZWQgY2xv
-bmUgb2Ygb3RoZXIgdHlwZSIpKX0sCmVrOmZ1bmN0aW9uKGEsYil7dmFyIHMscj1KLlU2KGEpLHE9ci5n
-QShhKSxwPW5ldyBBcnJheShxKQpDLk5tLlk1KHRoaXMuYixiLHApCmZvcihzPTA7czxxOysrcylDLk5t
-Llk1KHAscyx0aGlzLlB2KHIucShhLHMpKSkKcmV0dXJuIHB9fQpQLkUyLnByb3RvdHlwZT17CiQyOmZ1
-bmN0aW9uKGEsYil7dGhpcy5hLmFbYV09dGhpcy5iLlB2KGIpfSwKJFM6MzF9ClAuamcucHJvdG90eXBl
-PXsKJDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuYlthXT10aGlzLmIuUHYoYil9LAokUzozMn0KUC5CZi5w
-cm90b3R5cGU9ewppbTpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwCnQuYjguYShiKQpmb3Iocz1PYmpl
-Y3Qua2V5cyhhKSxyPXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPXNbcV0KYi4kMihwLGFbcF0pfX19ClAu
-QXMucHJvdG90eXBlPXsKVjpmdW5jdGlvbihhKXt2YXIgcwpILm4oYSkKcz0kLmhHKCkuYgppZihzLnRl
-c3QoYSkpcmV0dXJuIGEKdGhyb3cgSC5iKFAuTDMoYSwidmFsdWUiLCJOb3QgYSB2YWxpZCBjbGFzcyB0
-b2tlbiIpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuRCgpLmsoMCwiICIpfSwKZ206ZnVuY3Rp
-b24oYSl7dmFyIHM9dGhpcy5EKCkKcmV0dXJuIFAucmoocyxzLnIsSC5MaChzKS5jKX0sCmdsMDpmdW5j
-dGlvbihhKXtyZXR1cm4gdGhpcy5EKCkuYT09PTB9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
-RCgpLmEhPT0wfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuRCgpLmF9LAp0ZzpmdW5jdGlvbihh
-LGIpe3RoaXMuVihiKQpyZXR1cm4gdGhpcy5EKCkudGcoMCxiKX0sCmk6ZnVuY3Rpb24oYSxiKXt2YXIg
-cwpILm4oYikKdGhpcy5WKGIpCnM9dGhpcy5PUyhuZXcgUC5HRShiKSkKcmV0dXJuIEgucDgocz09bnVs
-bD8hMTpzKX0sClI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCmlmKHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1
-cm4hMQp0aGlzLlYoYikKcz10aGlzLkQoKQpyPXMuUigwLGIpCnRoaXMuWChzKQpyZXR1cm4gcn0sCkZW
-OmZ1bmN0aW9uKGEsYil7dGhpcy5PUyhuZXcgUC5ONyh0aGlzLHQuTy5hKGIpKSl9LAplUjpmdW5jdGlv
-bihhLGIpe3ZhciBzPXRoaXMuRCgpCnJldHVybiBILmJLKHMsYixILkxoKHMpLkMoImxmLkUiKSl9LApF
-OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuRCgpLkUoMCxiKX0sClYxOmZ1bmN0aW9uKGEpe3RoaXMu
-T1MobmV3IFAudVEoKSl9LApPUzpmdW5jdGlvbihhKXt2YXIgcyxyCnQuYlUuYShhKQpzPXRoaXMuRCgp
-CnI9YS4kMShzKQp0aGlzLlgocykKcmV0dXJuIHJ9fQpQLkdFLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9u
-KGEpe3JldHVybiB0LkMuYShhKS5pKDAsdGhpcy5hKX0sCiRTOjMzfQpQLk43LnByb3RvdHlwZT17CiQx
-OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYixyPUgudDYocykKcmV0dXJuIHQuQy5hKGEpLkZWKDAsbmV3
-IEgubEoocyxyLkMoInFVKDEpIikuYSh0aGlzLmEuZ3VNKCkpLHIuQygibEo8MSxxVT4iKSkpfSwKJFM6
-MTJ9ClAudVEucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5DLmEoYSkKaWYoYS5hPjApe2EuYj1h
-LmM9YS5kPWEuZT1hLmY9bnVsbAphLmE9MAphLlMoKX1yZXR1cm4gbnVsbH0sCiRTOjEyfQpQLmhGLnBy
-b3RvdHlwZT17JGloRjoxfQpQLlBDLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzCnQuWS5h
-KGEpCnM9ZnVuY3Rpb24oYixjLGQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiKGMsZCx0aGlzLEFy
-cmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKX19KFAuUjQsYSwhMSkKUC5EbShzLCQu
-eigpLGEpCnJldHVybiBzfSwKJFM6NH0KUC5tdC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1
-cm4gbmV3IHRoaXMuYShhKX0sCiRTOjR9ClAuUVMucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0
-dXJuIG5ldyBQLnI3KHQuSy5hKGEpKX0sCiRTOjQ0fQpQLm5wLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9u
-KGEpe3JldHVybiBuZXcgUC5Ueih0LksuYShhKSx0LmFtKX0sCiRTOjM2fQpQLlV0LnByb3RvdHlwZT17
-CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5FNCh0LksuYShhKSl9LAokUzozN30KUC5FNC5wcm90
-b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIhPSJzdHJpbmciJiZ0eXBlb2YgYiE9Im51
-bWJlciIpdGhyb3cgSC5iKFAueFkoInByb3BlcnR5IGlzIG5vdCBhIFN0cmluZyBvciBudW0iKSkKcmV0
-dXJuIFAuZFUodGhpcy5hW2JdKX0sClk1OmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYiE9InN0cmlu
-ZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBILmIoUC54WSgicHJvcGVydHkgaXMgbm90IGEgU3Ry
-aW5nIG9yIG51bSIpKQp0aGlzLmFbYl09UC53WShjKX0sCkROOmZ1bmN0aW9uKGEsYil7aWYoYj09bnVs
-bClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIFAuRTQmJnRoaXMuYT09PWIuYX0sCnc6ZnVuY3Rp
-b24oYSl7dmFyIHMscgp0cnl7cz1TdHJpbmcodGhpcy5hKQpyZXR1cm4gc31jYXRjaChyKXtILlJ1KHIp
-CnM9dGhpcy54YigwKQpyZXR1cm4gc319LApWNzpmdW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy5hCmlm
-KGI9PW51bGwpcz1udWxsCmVsc2V7cz1ILnQ2KGIpCnM9UC5DSChuZXcgSC5sSihiLHMuQygiQCgxKSIp
-LmEoUC5pRygpKSxzLkMoImxKPDEsQD4iKSksITAsdC56KX1yZXR1cm4gUC5kVShyW2FdLmFwcGx5KHIs
-cykpfSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiAwfX0KUC5yNy5wcm90b3R5cGU9e30KUC5Uei5wcm90
-b3R5cGU9ewpjUDpmdW5jdGlvbihhKXt2YXIgcz10aGlzLHI9YTwwfHxhPj1zLmdBKHMpCmlmKHIpdGhy
-b3cgSC5iKFAuVEUoYSwwLHMuZ0EocyksbnVsbCxudWxsKSl9LApxOmZ1bmN0aW9uKGEsYil7aWYoSC5v
-ayhiKSl0aGlzLmNQKGIpCnJldHVybiB0aGlzLiR0aS5jLmEodGhpcy5VcigwLGIpKX0sClk1OmZ1bmN0
-aW9uKGEsYixjKXt0aGlzLmNQKGIpCnRoaXMuYmgoMCxiLGMpfSwKZ0E6ZnVuY3Rpb24oYSl7dmFyIHM9
-dGhpcy5hLmxlbmd0aAppZih0eXBlb2Ygcz09PSJudW1iZXIiJiZzPj4+MD09PXMpcmV0dXJuIHMKdGhy
-b3cgSC5iKFAuUFYoIkJhZCBKc0FycmF5IGxlbmd0aCIpKX0sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9
-ClAudmcucHJvdG90eXBlPXsKWTU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLmU0KDAsYixjKX19
-ClAubmQucHJvdG90eXBlPXskaW5kOjF9ClAuS2UucHJvdG90eXBlPXsKRDpmdW5jdGlvbigpe3ZhciBz
-LHIscSxwLG89dGhpcy5hLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSxuPVAuTHModC5OKQppZihvPT1udWxs
-KXJldHVybiBuCmZvcihzPW8uc3BsaXQoIiAiKSxyPXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPUouVDAo
-c1txXSkKaWYocC5sZW5ndGghPT0wKW4uaSgwLHApfXJldHVybiBufSwKWDpmdW5jdGlvbihhKXt0aGlz
-LmEuc2V0QXR0cmlidXRlKCJjbGFzcyIsYS5rKDAsIiAiKSl9fQpQLmhpLnByb3RvdHlwZT17CmdQOmZ1
-bmN0aW9uKGEpe3JldHVybiBuZXcgUC5LZShhKX0sCnNoZjpmdW5jdGlvbihhLGIpe3RoaXMuWUMoYSxi
-KX0sCnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbgppZihkPT1udWxsKXtzPUguUUko
-W10sdC5yKQpkPW5ldyBXLnZEKHMpCkMuTm0uaShzLFcuVHcobnVsbCkpCkMuTm0uaShzLFcuQmwoKSkK
-Qy5ObS5pKHMsbmV3IFcuT3coKSl9Yz1uZXcgVy5LbyhkKQpyPSc8c3ZnIHZlcnNpb249IjEuMSI+JytI
-LkVqKGIpKyI8L3N2Zz4iCnM9ZG9jdW1lbnQKcT1zLmJvZHkKcS50b1N0cmluZwpwPUMuUlkuQUgocSxy
-LGMpCm89cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKcz1uZXcgVy5lNyhwKQpuPXMuZ3I4KHMpCmZv
-cig7cz1uLmZpcnN0Q2hpbGQscyE9bnVsbDspby5hcHBlbmRDaGlsZChzKQpyZXR1cm4gb30sCm56OmZ1
-bmN0aW9uKGEsYixjLGQsZSl7dGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBpbnZva2UgaW5zZXJ0QWRqYWNl
-bnRIdG1sIG9uIFNWRy4iKSl9LApnVmw6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXLkNxKGEsImNsaWNr
-IiwhMSx0LlEpfSwKJGloaToxfQpVLmQyLnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7dmFyIHMscixx
-LHAsbz10aGlzLG49dC5OLG09dC5YLGw9UC5GbChuLG0pLGs9by5hCmlmKGshPW51bGwpe3M9SC5RSShb
-XSx0LmQpCmZvcihyPWsubGVuZ3RoLHE9MDtxPGsubGVuZ3RoO2subGVuZ3RoPT09cnx8KDAsSC5sayko
-ayksKytxKXtwPWtbcV0Kcy5wdXNoKFAuRUYoWyJkZXNjcmlwdGlvbiIscC5hLCJocmVmIixwLmJdLG4s
-bSkpfWwuWTUoMCwiZWRpdHMiLHMpfWwuWTUoMCwiZXhwbGFuYXRpb24iLG8uYikKbC5ZNSgwLCJsaW5l
-IixvLmMpCmwuWTUoMCwiZGlzcGxheVBhdGgiLG8uZCkKbC5ZNSgwLCJ1cmlQYXRoIixvLmUpCm49by5m
-CmlmKG4hPW51bGwpe209SC5RSShbXSx0LmQpCmZvcihrPW4ubGVuZ3RoLHE9MDtxPG4ubGVuZ3RoO24u
-bGVuZ3RoPT09a3x8KDAsSC5saykobiksKytxKW0ucHVzaChuW3FdLkx0KCkpCmwuWTUoMCwidHJhY2Vz
-IixtKX1yZXR1cm4gbH19ClUuU2UucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXtyZXR1cm4gUC5FRihb
-ImRlc2NyaXB0aW9uIix0aGlzLmEsImhyZWYiLHRoaXMuYl0sdC5OLHQuWCl9fQpVLk1sLnByb3RvdHlw
-ZT17Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuRUYoWyJocmVmIix0aGlzLmEsImxpbmUiLHRoaXMuYiwi
-cGF0aCIsdGhpcy5jXSx0Lk4sdC5YKX19ClUueUQucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXt2YXIg
-cyxyLHEscD1ILlFJKFtdLHQuZCkKZm9yKHM9dGhpcy5iLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7
-cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3EpcC5wdXNoKHNbcV0uTHQoKSkKcmV0dXJuIFAuRUYo
-WyJkZXNjcmlwdGlvbiIsdGhpcy5hLCJlbnRyaWVzIixwXSx0Lk4sdC5YKX19ClUud2IucHJvdG90eXBl
-PXsKTHQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscD10aGlzLG89UC5GbCh0Lk4sdC5YKQpvLlk1KDAsImRl
-c2NyaXB0aW9uIixwLmEpCnM9cC5iCmlmKHMhPW51bGwpby5ZNSgwLCJmdW5jdGlvbiIscykKcz1wLmMK
-aWYocyE9bnVsbClvLlk1KDAsImxpbmsiLHMuTHQoKSkKcz1wLmQKaWYocy5sZW5ndGghPT0wKXtyPUgu
-dDYocykKcT1yLkMoImxKPDEsWjA8cVUsTWg/Pj4iKQpvLlk1KDAsImhpbnRBY3Rpb25zIixQLlkxKG5l
-dyBILmxKKHMsci5DKCJaMDxxVSxNaD8+KDEpIikuYShuZXcgVS5iMCgpKSxxKSwhMCxxLkMoImFMLkUi
-KSkpfXJldHVybiBvfX0KVS5hTi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gUi5ueih0
-LkcuYShhKSl9LAokUzozOH0KVS5iMC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdC5K
-LmEoYSkuTHQoKX0sCiRTOjM5fQpCLmo4LnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAu
-RUYoWyJsaW5lIix0aGlzLmEsImV4cGxhbmF0aW9uIix0aGlzLmIsIm9mZnNldCIsdGhpcy5jXSx0Lk4s
-dC5YKX19CkIucXAucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRo
-aXMsaz10Lk4saj1QLkZsKGssdC54KQpmb3Iocz1sLmQscz1zLmdQdShzKSxzPXMuZ20ocykscj10Llgs
-cT10LmQ7cy5GKCk7KXtwPXMuZ2woKQpvPXAuYQpuPUguUUkoW10scSkKZm9yKHA9Si5JVChwLmIpO3Au
-RigpOyl7bT1wLmdsKCkKbi5wdXNoKFAuRUYoWyJsaW5lIixtLmEsImV4cGxhbmF0aW9uIixtLmIsIm9m
-ZnNldCIsbS5jXSxrLHIpKX1qLlk1KDAsbyxuKX1yZXR1cm4gUC5FRihbInJlZ2lvbnMiLGwuYSwibmF2
-aWdhdGlvbkNvbnRlbnQiLGwuYiwic291cmNlQ29kZSIsbC5jLCJlZGl0cyIsal0sayxyKX19ClQubVEu
-cHJvdG90eXBlPXt9CkwuZS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvLG4s
-bQp0LkIuYShhKQpzPXQuRgpyPXMuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lCnE9TC5HNihzLmEo
-d2luZG93LmxvY2F0aW9uKS5ocmVmKQpwPUwuYUsocy5hKHdpbmRvdy5sb2NhdGlvbikuaHJlZikKTC5H
-ZSgpCmlmKHIhPT0iLyIpe3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnJvb3QiKS50ZXh0Q29udGVu
-dApzLnRvU3RyaW5nCnM9ciE9PUMueEIuYlMocyl9ZWxzZSBzPSExCmlmKHMpe3IudG9TdHJpbmcKTC5H
-NyhyLHEscCwhMCxuZXcgTC5WVyhyLHEscCkpfXM9ZG9jdW1lbnQKbz1zLnF1ZXJ5U2VsZWN0b3IoIi5h
-cHBseS1taWdyYXRpb24iKQpvLnRvU3RyaW5nCm89Si5xRihvKQpuPW8uJHRpCm09bi5DKCJ+KDEpPyIp
-LmEobmV3IEwub1ooKSkKdC5aLmEobnVsbCkKVy5KRShvLmEsby5iLG0sITEsbi5jKQpuPXMucXVlcnlT
-ZWxlY3RvcigiLnJlcnVuLW1pZ3JhdGlvbiIpCm4udG9TdHJpbmcKbj1KLnFGKG4pCm09bi4kdGkKVy5K
-RShuLmEsbi5iLG0uQygifigxKT8iKS5hKG5ldyBMLnk4KCkpLCExLG0uYykKbT1zLnF1ZXJ5U2VsZWN0
-b3IoIi5yZXBvcnQtcHJvYmxlbSIpCm0udG9TdHJpbmcKbT1KLnFGKG0pCm49bS4kdGkKVy5KRShtLmEs
-bS5iLG4uQygifigxKT8iKS5hKG5ldyBMLkhpKCkpLCExLG4uYykKcz1zLnF1ZXJ5U2VsZWN0b3IoIi5w
-b3B1cC1wYW5lIC5jbG9zZSIpCnMudG9TdHJpbmcKcz1KLnFGKHMpCm49cy4kdGkKVy5KRShzLmEscy5i
-LG4uQygifigxKT8iKS5hKG5ldyBMLkJUKCkpLCExLG4uYykKbj0kLmMwKCkKbi50b1N0cmluZwpuPUou
-cUYobikKcz1uLiR0aQpXLkpFKG4uYSxuLmIscy5DKCJ+KDEpPyIpLmEobmV3IEwuUFkoKSksITEscy5j
-KX0sCiRTOjE3fQpMLlZXLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7TC5Gcih0aGlzLmEsdGhpcy5i
-LHRoaXMuYyl9LAokUzowfQpMLm9aLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxw
-LG8KdC5WLmEoYSkKaWYoQy5vbC51cyh3aW5kb3csIlRoaXMgd2lsbCBhcHBseSB0aGUgY2hhbmdlcyB5
-b3UndmUgcHJldmlld2VkIHRvIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuIEl0IGlzIHJlY29tbWVuZGVk
-IHlvdSBjb21taXQgYW55IGNoYW5nZXMgeW91IG1hZGUgYmVmb3JlIGRvaW5nIHRoaXMuIikpe3M9SC5R
-SShbXSx0LmQpCmZvcihyPSQuSVIscT1yLmxlbmd0aCxwPTA7cDxyLmxlbmd0aDtyLmxlbmd0aD09PXF8
-fCgwLEgubGspKHIpLCsrcClzLnB1c2gocltwXS5MdCgpKQpzPUwudHkoIi9hcHBseS1taWdyYXRpb24i
-LFAuRUYoWyJuYXZpZ2F0aW9uVHJlZSIsc10sdC5OLHQueCkpLlc3KG5ldyBMLmpyKCksdC5QKQpvPW5l
-dyBMLnFsKCkKdC5iNy5hKG51bGwpCnI9cy4kdGkKcT0kLlgzCmlmKHEhPT1DLk5VKW89UC5WSChvLHEp
-CnMueGYobmV3IFAuRmUobmV3IFAudnMocSxyKSwyLG51bGwsbyxyLkMoIkA8MT4iKS5LcShyLmMpLkMo
-IkZlPDEsMj4iKSkpfX0sCiRTOjF9CkwuanIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMK
-dC5mbi5hKGEpCnM9ZG9jdW1lbnQuYm9keQpzLmNsYXNzTGlzdC5yZW1vdmUoInByb3Bvc2VkIikKcy5j
-bGFzc0xpc3QuYWRkKCJhcHBsaWVkIil9LAokUzo0Mn0KTC5xbC5wcm90b3R5cGU9ewokMjpmdW5jdGlv
-bihhLGIpe0wuQzIoIkNvdWxkbid0IGFwcGx5IG1pZ3JhdGlvbiIsdC5LLmEoYSksYil9LAokQzoiJDIi
-LAokUjoyLAokUzo0M30KTC55OC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54
-bih0LlYuYShhKSl9LAp4bjpmdW5jdGlvbihhKXt2YXIgcz0wLHI9UC5GWCh0LkgpLHE9MSxwLG89W10s
-bixtLGwsayxqLGkKdmFyICRhc3luYyQkMT1QLmx6KGZ1bmN0aW9uKGIsYyl7aWYoYj09PTEpe3A9Ywpz
-PXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOnE9Mwpkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5h
-ZGQoInJlcnVubmluZyIpCnM9NgpyZXR1cm4gUC5qUShMLnR5KCIvcmVydW4tbWlncmF0aW9uIixudWxs
-KSwkYXN5bmMkJDEpCmNhc2UgNjpuPWMKaz1uCmsudG9TdHJpbmcKaWYoSC5wOChKLng5KGssInN1Y2Nl
-c3MiKSkpdC5GLmEod2luZG93LmxvY2F0aW9uKS5yZWxvYWQoKQplbHNlIEwuSzAodC5ldy5hKEoueDko
-biwiZXJyb3JzIikpKQpvLnB1c2goNSkKcz00CmJyZWFrCmNhc2UgMzpxPTIKaT1wCm09SC5SdShpKQps
-PUgudHMoaSkKTC5DMigiRmFpbGVkIHRvIHJlcnVuIG1pZ3JhdGlvbiIsbSxsKQpvLnB1c2goNSkKcz00
-CmJyZWFrCmNhc2UgMjpvPVsxXQpjYXNlIDQ6cT0xCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92
-ZSgicmVydW5uaW5nIikKcz1vLnBvcCgpCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNh
-c2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyQkMSxyKX0sCiRTOjd9Ckwu
-SGkucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5WLmEoYSkKQy5vbC5Qbyh3aW5kb3csUC5YZCgi
-aHR0cHMiLCJnaXRodWIuY29tIiwiZGFydC1sYW5nL3Nkay9pc3N1ZXMvbmV3IixQLkVGKFsidGl0bGUi
-LCJDdXN0b21lci1yZXBvcnRlZCBpc3N1ZSB3aXRoIE5OQkQgbWlncmF0aW9uIHRvb2wiLCJsYWJlbHMi
-LHUuZCwiYm9keSIsIiMjIyMgU3RlcHMgdG8gcmVwcm9kdWNlXG5cbiMjIyMgV2hhdCBkaWQgeW91IGV4
-cGVjdCB0byBoYXBwZW4/XG5cbiMjIyMgV2hhdCBhY3R1YWxseSBoYXBwZW5lZD9cblxuX1NjcmVlbnNo
-b3RzIGFyZSBhcHByZWNpYXRlZF9cblxuKipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5Faihkb2N1bWVu
-dC5nZXRFbGVtZW50QnlJZCgic2RrLXZlcnNpb24iKS50ZXh0Q29udGVudCkrIlxuXG5UaGFua3MgZm9y
-IGZpbGluZyFcbiJdLHQuTix0LnopKS5nbkQoKSwicmVwb3J0LXByb2JsZW0iKX0sCiRTOjF9CkwuQlQu
-cHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMKdC5WLmEoYSkKcz1kb2N1bWVudC5xdWVyeVNl
-bGVjdG9yKCIucG9wdXAtcGFuZSIpLnN0eWxlCnMuZGlzcGxheT0ibm9uZSIKcmV0dXJuIm5vbmUifSwK
-JFM6MX0KTC5QWS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvCnQuVi5hKGEp
-CnM9JC5EOSgpLmlubmVyVGV4dApyPXQuaC5hKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXYtcGFu
-ZWwgW2RhdGEtbmFtZSo9IicrVy5MaihzKSsnIl0nKS5wYXJlbnROb2RlKQpxPXIucXVlcnlTZWxlY3Rv
-cigiLnN0YXR1cy1pY29uIikKcD0kLklSCnAudG9TdHJpbmcKbz1MLnl3KHAscykKaWYobyBpbnN0YW5j
-ZW9mIEwuY0Qpe3A9by54CnAudG9TdHJpbmd9ZWxzZSBwPSExCmlmKHApe0wuT3QobykKTC54bihxLG8p
-CkwuQVIocixvKX19LAokUzoxfQpMLkwucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixx
-LHAKdC5CLmEoYSkKcz10LkYKcj1zLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZQpyLnRvU3RyaW5n
-CnE9TC5HNihzLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQpwPUwuYUsocy5hKHdpbmRvdy5sb2NhdGlv
-bikuaHJlZikKaWYoci5sZW5ndGg+MSlMLkc3KHIscSxwLCExLG51bGwpCmVsc2V7TC5CRShyLEIud1Io
-KSwhMCkKTC5CWCgiJm5ic3A7IixudWxsKX19LAokUzoxN30KTC5XeC5wcm90b3R5cGU9ewokMTpmdW5j
-dGlvbihhKXt2YXIgcyxyLHEscCxvPSJjb2xsYXBzZWQiCnQuVi5hKGEpCnM9dGhpcy5hCnI9Si5ZRShz
-KQpxPXRoaXMuYgpwPUouWUUocSkKaWYoIXIuZ1AocykudGcoMCxvKSl7ci5nUChzKS5pKDAsbykKcC5n
-UChxKS5pKDAsbyl9ZWxzZXtyLmdQKHMpLlIoMCxvKQpwLmdQKHEpLlIoMCxvKX19LAokUzoxfQpMLkFP
-LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzPUoucUYodC5oLmEoYSkpLHI9cy4kdGkscT1y
-LkMoIn4oMSk/IikuYShuZXcgTC5kTih0aGlzLmEpKQp0LlouYShudWxsKQpXLkpFKHMuYSxzLmIscSwh
-MSxyLmMpfSwKJFM6M30KTC5kTi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gTC50Mih0
-LlYuYShhKSx0aGlzLmEpfSwKJFM6MX0KTC5Iby5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIg
-cyxyLHEKdC5oLmEoYSkKcz1KLnFGKGEpCnI9cy4kdGkKcT1yLkMoIn4oMSk/IikuYShuZXcgTC54eihh
-LHRoaXMuYSkpCnQuWi5hKG51bGwpClcuSkUocy5hLHMuYixxLCExLHIuYyl9LAokUzozfQpMLnh6LnBy
-b3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwCnQuVi5hKGEpCnM9dGhpcy5hCnI9cy5n
-ZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyhzKSkuT1UoIm9mZnNldCIpKQpyLnRv
-U3RyaW5nCnE9UC5RQShyLG51bGwpCnM9cy5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcg
-Vy5pNyhzKSkuT1UoImxpbmUiKSkKcy50b1N0cmluZwpwPVAuUUEocyxudWxsKQpzPXRoaXMuYgpzLnRv
-U3RyaW5nCkwuaFgocyxxLHApfSwKJFM6MX0KTC5JQy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2
-YXIgcz1KLnFGKHQuaC5hKGEpKSxyPXMuJHRpCnIuQygifigxKT8iKS5hKEwuaVMoKSkKdC5aLmEobnVs
-bCkKVy5KRShzLmEscy5iLEwuaVMoKSwhMSxyLmMpfSwKJFM6M30KTC5mQy5wcm90b3R5cGU9ewokMTpm
-dW5jdGlvbihhKXt0LnAuYShhKQp0aGlzLmEuYU0oMCx0aGlzLmIpfSwKJFM6NDZ9CkwuVG0ucHJvdG90
-eXBlPXsKJDE6ZnVuY3Rpb24oYSl7SC5uKGEpCnJldHVybiBhLmxlbmd0aD40MD9DLnhCLk5qKGEsMCw0
-MCkrIi4uLiI6YX0sCiRTOjJ9CkwublQucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMu
-YSx0aGlzLmIsdGhpcy5jKX0sCiRTOjB9CkwuTlkucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZy
-KHRoaXMuYSxudWxsLG51bGwpfSwKJFM6MH0KTC51ZS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt0
-LmYuYShhKQpyZXR1cm4gSC5FaihhLnEoMCwic2V2ZXJpdHkiKSkrIiAtICIrSC5FaihhLnEoMCwibWVz
-c2FnZSIpKSsiIGF0ICIrSC5FaihhLnEoMCwibG9jYXRpb24iKSkrIiAtICgiK0guRWooYS5xKDAsImNv
-ZGUiKSkrIikifSwKJFM6NDd9CkwuR0gucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5oLmEoYSkK
-JC56QigpCnQuZXMuYSgkLm93KCkucSgwLCJobGpzIikpLlY3KCJoaWdobGlnaHRCbG9jayIsW2FdKX0s
-CiRTOjN9CkwuRUUucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscgp0LlYuYShhKS5wcmV2
-ZW50RGVmYXVsdCgpCnM9dGhpcy5hCnI9dGhpcy5iCkwuYWYodC5GLmEod2luZG93LmxvY2F0aW9uKS5w
-YXRobmFtZSxzLHIsITAsbmV3IEwuUUwocyxyKSkKTC5oWCh0aGlzLmMscyxyKX0sCiRTOjF9CkwuUUwu
-cHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHQuRi5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5h
-bWUsdGhpcy5hLHRoaXMuYil9LAokUzowfQpMLlZTLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3Zh
-ciBzLHI9InNlbGVjdGVkLWZpbGUiCnQuaC5hKGEpCnM9Si5ZRShhKQppZihhLmdldEF0dHJpYnV0ZSgi
-ZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KGEpKS5PVSgibmFtZSIpKT09PXRoaXMuYS5hKXMuZ1AoYSku
-aSgwLHIpCmVsc2Ugcy5nUChhKS5SKDAscil9LAokUzozfQpMLlRELnByb3RvdHlwZT17CiQxOmZ1bmN0
-aW9uKGEpe3ZhciBzLHIKdC5WLmEoYSkKcz10aGlzLmEKc3dpdGNoKHMuZ0woKSl7Y2FzZSBDLmN3OmJy
-ZWFrCmNhc2UgQy5XRDpzLm5HKCkKYnJlYWsKY2FzZSBDLlhqOnMuYzIoKQpicmVhawpjYXNlIEMuZGM6
-cy5jMigpCmJyZWFrfXI9dGhpcy5iCkwuYkwocixzKQpMLnhuKHRoaXMuYyxzKQpMLkFSKHIscyl9LAok
-UzoxfQpMLklmLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzCnQuVi5hKGEpCnM9dGhpcy5h
-CkwuT3QocykKTC54bih0aGlzLmIscykKTC5BUih0aGlzLmMscyl9LAokUzoxfQpMLnRCLnByb3RvdHlw
-ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBMLnQyKHQuVi5hKGEpLCEwKX0sCiRTOjF9CkwubTIucHJv
-dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuUkkodC5WLmEoYSkpfSwKUkk6ZnVuY3Rp
-b24oYSl7dmFyIHM9MCxyPVAuRlgodC5IKSxxPTEscCxvPVtdLG49dGhpcyxtLGwsayxqLGksaCxnLGYs
-ZQp2YXIgJGFzeW5jJCQxPVAubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0
-cnVlKXN3aXRjaChzKXtjYXNlIDA6cT0zCmk9ZG9jdW1lbnQKbT1DLkNELnpRKGkucXVlcnlTZWxlY3Rv
-cigiLmNvbnRlbnQiKS5zY3JvbGxUb3ApCmg9dC5OCnM9NgpyZXR1cm4gUC5qUShMLnR5KEwuUTQoIi9h
-cHBseS1oaW50IixQLkZsKGgsaCkpLG4uYS5MdCgpKSwkYXN5bmMkJDEpCmNhc2UgNjpoPW4uYgpnPWgu
-YQpnLnRvU3RyaW5nCmw9TC5VcyhnKQpzPTcKcmV0dXJuIFAualEoTC5HNyhsLG51bGwsaC5iLCExLG51
-bGwpLCRhc3luYyQkMSkKY2FzZSA3OmkuYm9keS5jbGFzc0xpc3QuYWRkKCJuZWVkcy1yZXJ1biIpCmk9
-aS5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmkudG9TdHJpbmcKaS5zY3JvbGxUb3A9Qy5qbi56USht
-KQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZT1wCms9SC5SdShlKQpqPUgudHMoZSkKTC5DMigiY291
-bGRuJ3QgYXBwbHkgaGludCIsayxqKQpzPTUKYnJlYWsKY2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0
-dXJuIFAueUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIFAuZjMocCxyKX19KQpyZXR1cm4gUC5ESSgkYXN5
-bmMkJDEscil9LAokUzo3fQpMLlFXLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
-YSsiOlxuIit0aGlzLmJ9LAokaVJ6OjF9CkwuWEEucHJvdG90eXBlPXsKRWI6ZnVuY3Rpb24oYSxiLGMp
-e3JldHVybiEwfSwKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LAokaWtGOjF9CkwudnQucHJvdG90eXBl
-PXsKZ0w6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMuZAppZihsLmxlbmd0aD09PTAp
-cmV0dXJuIEMuY3cKcz1DLk5tLmd0SChsKS5nTCgpCmZvcihyPWwubGVuZ3RoLHE9ITAscD0hMCxvPTA7
-bzxsLmxlbmd0aDtsLmxlbmd0aD09PXJ8fCgwLEgubGspKGwpLCsrbyl7bj1sW29dLmdMKCkKaWYobiE9
-cylzPW51bGwKbT1uIT09Qy5jdwppZihtJiZuIT09Qy5XRClxPSExCmlmKG0mJm4hPT1DLlhqKXA9ITF9
-aWYocyE9bnVsbClyZXR1cm4gcwppZihxKXJldHVybiBDLldECmlmKHApcmV0dXJuIEMuWGoKcmV0dXJu
-IEMuZGN9LApMVjpmdW5jdGlvbigpe3ZhciBzLHIscSxwPXRoaXMuZAppZihwIT1udWxsKWZvcihzPXAu
-bGVuZ3RoLHI9MDtyPHM7KytyKXtxPXBbcl0KaWYocS5iPT09JClxLmI9dGhpcwplbHNlIEgudihuZXcg
-SC5jKCJGaWVsZCAncGFyZW50JyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLiIpKX19LApjMjpm
-dW5jdGlvbigpe3ZhciBzLHIscSxwLG8KZm9yKHM9dGhpcy5kLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5n
-dGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3Epe3A9c1txXQppZihwIGluc3RhbmNlb2YgTC52
-dClwLmMyKCkKZWxzZXtpZihwIGluc3RhbmNlb2YgTC5jRCl7bz1wLngKby50b1N0cmluZwpvPW8mJnAu
-cj09PUMuWGp9ZWxzZSBvPSExCmlmKG8pcC5yPUMuV0R9fX0sCm5HOmZ1bmN0aW9uKCl7dmFyIHMscixx
-LHAsbwpmb3Iocz10aGlzLmQscj1zLmxlbmd0aCxxPTA7cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgw
-LEgubGspKHMpLCsrcSl7cD1zW3FdCmlmKHAgaW5zdGFuY2VvZiBMLnZ0KXAubkcoKQplbHNle2lmKHAg
-aW5zdGFuY2VvZiBMLmNEKXtvPXAueApvLnRvU3RyaW5nCm89byYmcC5yPT09Qy5XRH1lbHNlIG89ITEK
-aWYobylwLnI9Qy5Yan19fSwKTHQ6ZnVuY3Rpb24oKXt2YXIgcyxyPVAuRmwodC5OLHQuWCkKci5ZNSgw
-LCJ0eXBlIiwiZGlyZWN0b3J5IikKci5ZNSgwLCJuYW1lIix0aGlzLmEpCnM9dGhpcy5kCnMudG9TdHJp
-bmcKci5ZNSgwLCJzdWJ0cmVlIixMLlZEKHMpKQpzPXRoaXMuYwppZihzIT1udWxsKXIuWTUoMCwicGF0
-aCIscykKcmV0dXJuIHJ9fQpMLmNELnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7dmFyIHMscj10aGlz
-LHE9UC5GbCh0Lk4sdC5YKQpxLlk1KDAsInR5cGUiLCJmaWxlIikKcS5ZNSgwLCJuYW1lIixyLmEpCnM9
-ci5jCmlmKHMhPW51bGwpcS5ZNSgwLCJwYXRoIixzKQpzPXIuZAppZihzIT1udWxsKXEuWTUoMCwiaHJl
-ZiIscykKcz1yLmUKaWYocyE9bnVsbClxLlk1KDAsImVkaXRDb3VudCIscykKcz1yLmYKaWYocyE9bnVs
-bClxLlk1KDAsIndhc0V4cGxpY2l0bHlPcHRlZE91dCIscykKcz1yLnIKaWYocyE9bnVsbClxLlk1KDAs
-Im1pZ3JhdGlvblN0YXR1cyIscy5hKQpzPXIueAppZihzIT1udWxsKXEuWTUoMCwibWlncmF0aW9uU3Rh
-dHVzQ2FuQmVDaGFuZ2VkIixzKQpyZXR1cm4gcX0sCmdMOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucn19
-CkwuRDgucHJvdG90eXBlPXt9CkwuTzkucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gdGhp
-cy5ifX0KTC5HYi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJ9fQpSLkxMLnBy
-b3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuRUYoWyJub2RlSWQiLHRoaXMuYiwia2luZCIs
-dGhpcy5hLmFdLHQuTix0LlgpfX0KUi5NRC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4g
-dC5ncC5hKGEpLmE9PT10aGlzLmEucSgwLCJraW5kIil9LAokUzo0OH0KUi5INy5wcm90b3R5cGU9ewp3
-OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJ9fQpNLmxJLnByb3RvdHlwZT17CldPOmZ1bmN0aW9uKGEs
-Yil7dmFyIHMscixxPXQuZDQKTS5ZRigiYWJzb2x1dGUiLEguUUkoW2IsbnVsbCxudWxsLG51bGwsbnVs
-bCxudWxsLG51bGxdLHEpKQpzPXRoaXMuYQpzPXMuWXIoYik+MCYmIXMuaEsoYikKaWYocylyZXR1cm4g
-YgpzPUQuYWIoKQpyPUguUUkoW3MsYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0scSkKTS5Z
-Rigiam9pbiIscikKcmV0dXJuIHRoaXMuSVAobmV3IEgudTYocix0LmVKKSl9LAp6ZjpmdW5jdGlvbihh
-KXt2YXIgcyxyLHE9WC5DTChhLHRoaXMuYSkKcS5JeCgpCnM9cS5kCnI9cy5sZW5ndGgKaWYocj09PTAp
-e3M9cS5iCnJldHVybiBzPT1udWxsPyIuIjpzfWlmKHI9PT0xKXtzPXEuYgpyZXR1cm4gcz09bnVsbD8i
-LiI6c31pZigwPj1yKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgp
-cmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpxLkl4KCkKcmV0dXJuIHEudygwKX0sCklQOmZ1bmN0aW9u
-KGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqCnQuTy5hKGEpCmZvcihzPWEuJHRpLHI9cy5DKCJhMihj
-WC5FKSIpLmEobmV3IE0ucTcoKSkscT1hLmdtKGEpLHM9bmV3IEguU08ocSxyLHMuQygiU088Y1guRT4i
-KSkscj10aGlzLmEscD0hMSxvPSExLG49IiI7cy5GKCk7KXttPXEuZ2woKQppZihyLmhLKG0pJiZvKXts
-PVguQ0wobSxyKQprPW4uY2hhckNvZGVBdCgwKT09MD9uOm4Kbj1DLnhCLk5qKGssMCxyLlNwKGssITAp
-KQpsLmI9bgppZihyLmRzKG4pKUMuTm0uWTUobC5lLDAsci5nbUkoKSkKbj0iIitsLncoMCl9ZWxzZSBp
-ZihyLllyKG0pPjApe289IXIuaEsobSkKbj0iIittfWVsc2V7aj1tLmxlbmd0aAppZihqIT09MCl7aWYo
-MD49ailyZXR1cm4gSC5PSChtLDApCmo9ci5VZChtWzBdKX1lbHNlIGo9ITEKaWYoIWopaWYocCluKz1y
-LmdtSSgpCm4rPW19cD1yLmRzKG0pfXJldHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKbzU6ZnVu
-Y3Rpb24oYSl7dmFyIHMKaWYoIXRoaXMueTMoYSkpcmV0dXJuIGEKcz1YLkNMKGEsdGhpcy5hKQpzLnJS
-KCkKcmV0dXJuIHMudygwKX0sCnkzOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz10aGlz
-LmEsaj1rLllyKGEpCmlmKGohPT0wKXtpZihrPT09JC5LaygpKWZvcihzPTA7czxqOysrcylpZihDLnhC
-LlcoYSxzKT09PTQ3KXJldHVybiEwCnI9agpxPTQ3fWVsc2V7cj0wCnE9bnVsbH1mb3IocD1uZXcgSC5x
-aihhKS5hLG89cC5sZW5ndGgscz1yLG49bnVsbDtzPG87KytzLG49cSxxPW0pe209Qy54Qi5PKHAscykK
-aWYoay5yNChtKSl7aWYoaz09PSQuS2soKSYmbT09PTQ3KXJldHVybiEwCmlmKHEhPW51bGwmJmsucjQo
-cSkpcmV0dXJuITAKaWYocT09PTQ2KWw9bj09bnVsbHx8bj09PTQ2fHxrLnI0KG4pCmVsc2UgbD0hMQpp
-ZihsKXJldHVybiEwfX1pZihxPT1udWxsKXJldHVybiEwCmlmKGsucjQocSkpcmV0dXJuITAKaWYocT09
-PTQ2KWs9bj09bnVsbHx8ay5yNChuKXx8bj09PTQ2CmVsc2Ugaz0hMQppZihrKXJldHVybiEwCnJldHVy
-biExfSwKSFA6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMsaz0nVW5hYmxlIHRv
-IGZpbmQgYSBwYXRoIHRvICInCmI9bC5XTygwLGIpCnM9bC5hCmlmKHMuWXIoYik8PTAmJnMuWXIoYSk+
-MClyZXR1cm4gbC5vNShhKQppZihzLllyKGEpPD0wfHxzLmhLKGEpKWE9bC5XTygwLGEpCmlmKHMuWXIo
-YSk8PTAmJnMuWXIoYik+MCl0aHJvdyBILmIoWC5JNyhrK2ErJyIgZnJvbSAiJytiKyciLicpKQpyPVgu
-Q0woYixzKQpyLnJSKCkKcT1YLkNMKGEscykKcS5yUigpCnA9ci5kCm89cC5sZW5ndGgKaWYobyE9PTAp
-e2lmKDA+PW8pcmV0dXJuIEguT0gocCwwKQpwPUouUk0ocFswXSwiLiIpfWVsc2UgcD0hMQppZihwKXJl
-dHVybiBxLncoMCkKcD1yLmIKbz1xLmIKaWYocCE9bylwPXA9PW51bGx8fG89PW51bGx8fCFzLk5jKHAs
-bykKZWxzZSBwPSExCmlmKHApcmV0dXJuIHEudygwKQp3aGlsZSghMCl7cD1yLmQKbz1wLmxlbmd0aApp
-ZihvIT09MCl7bj1xLmQKbT1uLmxlbmd0aAppZihtIT09MCl7aWYoMD49bylyZXR1cm4gSC5PSChwLDAp
-CnA9cFswXQppZigwPj1tKXJldHVybiBILk9IKG4sMCkKbj1zLk5jKHAsblswXSkKcD1ufWVsc2UgcD0h
-MX1lbHNlIHA9ITEKaWYoIXApYnJlYWsKQy5ObS5XNChyLmQsMCkKQy5ObS5XNChyLmUsMSkKQy5ObS5X
-NChxLmQsMCkKQy5ObS5XNChxLmUsMSl9cD1yLmQKbz1wLmxlbmd0aAppZihvIT09MCl7aWYoMD49byly
-ZXR1cm4gSC5PSChwLDApCnA9Si5STShwWzBdLCIuLiIpfWVsc2UgcD0hMQppZihwKXRocm93IEguYihY
-Lkk3KGsrYSsnIiBmcm9tICInK2IrJyIuJykpCnA9dC5OCkMuTm0uVUcocS5kLDAsUC5POChyLmQubGVu
-Z3RoLCIuLiIsITEscCkpCkMuTm0uWTUocS5lLDAsIiIpCkMuTm0uVUcocS5lLDEsUC5POChyLmQubGVu
-Z3RoLHMuZ21JKCksITEscCkpCnM9cS5kCnA9cy5sZW5ndGgKaWYocD09PTApcmV0dXJuIi4iCmlmKHA+
-MSYmSi5STShDLk5tLmdyWihzKSwiLiIpKXtzPXEuZAppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChz
-LC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkK
-aWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpDLk5tLmkocywiIil9cS5iPSIi
-CnEuSXgoKQpyZXR1cm4gcS53KDApfX0KTS5xNy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1
-cm4gSC5uKGEpIT09IiJ9LAokUzo2fQpNLk5vLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe0guayhh
-KQpyZXR1cm4gYT09bnVsbD8ibnVsbCI6JyInK2ErJyInfSwKJFM6NDl9CkIuZnYucHJvdG90eXBlPXsK
-eFo6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlzLllyKGEpCmlmKHI+MClyZXR1cm4gQy54Qi5OaihhLDAs
-cikKaWYodGhpcy5oSyhhKSl7aWYoMD49YS5sZW5ndGgpcmV0dXJuIEguT0goYSwwKQpzPWFbMF19ZWxz
-ZSBzPW51bGwKcmV0dXJuIHN9LApOYzpmdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yn19ClguV0QucHJv
-dG90eXBlPXsKSXg6ZnVuY3Rpb24oKXt2YXIgcyxyLHE9dGhpcwp3aGlsZSghMCl7cz1xLmQKaWYoIShz
-Lmxlbmd0aCE9PTAmJkouUk0oQy5ObS5ncloocyksIiIpKSlicmVhawpzPXEuZAppZigwPj1zLmxlbmd0
-aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9I
-KHMsLTEpCnMucG9wKCl9cz1xLmUKcj1zLmxlbmd0aAppZihyIT09MClDLk5tLlk1KHMsci0xLCIiKX0s
-CnJSOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPUguUUkoW10sdC5zKQpmb3Iocz1t
-LmQscj1zLmxlbmd0aCxxPTAscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwr
-K3Ape289c1twXQpuPUouaWEobykKaWYoIShuLkROKG8sIi4iKXx8bi5ETihvLCIiKSkpaWYobi5ETihv
-LCIuLiIpKXtuPWwubGVuZ3RoCmlmKG4hPT0wKXtpZigwPj1uKXJldHVybiBILk9IKGwsLTEpCmwucG9w
-KCl9ZWxzZSArK3F9ZWxzZSBDLk5tLmkobCxvKX1pZihtLmI9PW51bGwpQy5ObS5VRyhsLDAsUC5POChx
-LCIuLiIsITEsdC5OKSkKaWYobC5sZW5ndGg9PT0wJiZtLmI9PW51bGwpQy5ObS5pKGwsIi4iKQptLnNu
-SihsKQpzPW0uYQptLnNQaChQLk84KGwubGVuZ3RoKzEscy5nbUkoKSwhMCx0Lk4pKQpyPW0uYgppZihy
-PT1udWxsfHxsLmxlbmd0aD09PTB8fCFzLmRzKHIpKUMuTm0uWTUobS5lLDAsIiIpCnI9bS5iCmlmKHIh
-PW51bGwmJnM9PT0kLktrKCkpe3IudG9TdHJpbmcKbS5iPUgueXMociwiLyIsIlxcIil9bS5JeCgpfSwK
-dzpmdW5jdGlvbihhKXt2YXIgcyxyLHE9dGhpcyxwPXEuYgpwPXAhPW51bGw/IiIrcDoiIgpmb3Iocz0w
-O3M8cS5kLmxlbmd0aDsrK3Mpe3I9cS5lCmlmKHM+PXIubGVuZ3RoKXJldHVybiBILk9IKHIscykKcj1w
-K0guRWoocltzXSkKcD1xLmQKaWYocz49cC5sZW5ndGgpcmV0dXJuIEguT0gocCxzKQpwPXIrSC5Faihw
-W3NdKX1wKz1ILkVqKEMuTm0uZ3JaKHEuZSkpCnJldHVybiBwLmNoYXJDb2RlQXQoMCk9PTA/cDpwfSwK
-c25KOmZ1bmN0aW9uKGEpe3RoaXMuZD10LmEuYShhKX0sCnNQaDpmdW5jdGlvbihhKXt0aGlzLmU9dC5h
-LmEoYSl9fQpYLmR2LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlBhdGhFeGNlcHRpb246
-ICIrdGhpcy5hfSwKJGlSejoxfQpPLnpMLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo
-aXMuZ29jKHRoaXMpfX0KRS5PRi5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50
-ZyhhLCIvIil9LApyNDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFy
-IHM9YS5sZW5ndGgKcmV0dXJuIHMhPT0wJiZDLnhCLk8oYSxzLTEpIT09NDd9LApTcDpmdW5jdGlvbihh
-LGIpe2lmKGEubGVuZ3RoIT09MCYmQy54Qi5XKGEsMCk9PT00NylyZXR1cm4gMQpyZXR1cm4gMH0sClly
-OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rpb24oYSl7cmV0dXJuITF9
-LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4icG9zaXgifSwKZ21JOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0K
-Ri5ydS5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50ZyhhLCIvIil9LApyNDpm
-dW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHM9YS5sZW5ndGgKaWYo
-cz09PTApcmV0dXJuITEKaWYoQy54Qi5PKGEscy0xKSE9PTQ3KXJldHVybiEwCnJldHVybiBDLnhCLlRj
-KGEsIjovLyIpJiZ0aGlzLllyKGEpPT09c30sClNwOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbz1h
-Lmxlbmd0aAppZihvPT09MClyZXR1cm4gMAppZihDLnhCLlcoYSwwKT09PTQ3KXJldHVybiAxCmZvcihz
-PTA7czxvOysrcyl7cj1DLnhCLlcoYSxzKQppZihyPT09NDcpcmV0dXJuIDAKaWYocj09PTU4KXtpZihz
-PT09MClyZXR1cm4gMApxPUMueEIuWFUoYSwiLyIsQy54Qi5RaShhLCIvLyIscysxKT9zKzM6cykKaWYo
-cTw9MClyZXR1cm4gbwppZighYnx8bzxxKzMpcmV0dXJuIHEKaWYoIUMueEIubihhLCJmaWxlOi8vIikp
-cmV0dXJuIHEKaWYoIUIuWXUoYSxxKzEpKXJldHVybiBxCnA9cSszCnJldHVybiBvPT09cD9wOnErNH19
-cmV0dXJuIDB9LApZcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhLOmZ1bmN0aW9u
-KGEpe3JldHVybiBhLmxlbmd0aCE9PTAmJkMueEIuVyhhLDApPT09NDd9LApnb2M6ZnVuY3Rpb24oKXty
-ZXR1cm4idXJsIn0sCmdtSTpmdW5jdGlvbigpe3JldHVybiIvIn19CkwuSVYucHJvdG90eXBlPXsKVWQ6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEMueEIudGcoYSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9
-PT00N3x8YT09PTkyfSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHM9YS5sZW5ndGgKaWYocz09PTApcmV0dXJu
-ITEKcz1DLnhCLk8oYSxzLTEpCnJldHVybiEocz09PTQ3fHxzPT09OTIpfSwKU3A6ZnVuY3Rpb24oYSxi
-KXt2YXIgcyxyLHE9YS5sZW5ndGgKaWYocT09PTApcmV0dXJuIDAKcz1DLnhCLlcoYSwwKQppZihzPT09
-NDcpcmV0dXJuIDEKaWYocz09PTkyKXtpZihxPDJ8fEMueEIuVyhhLDEpIT09OTIpcmV0dXJuIDEKcj1D
-LnhCLlhVKGEsIlxcIiwyKQppZihyPjApe3I9Qy54Qi5YVShhLCJcXCIscisxKQppZihyPjApcmV0dXJu
-IHJ9cmV0dXJuIHF9aWYocTwzKXJldHVybiAwCmlmKCFCLk9TKHMpKXJldHVybiAwCmlmKEMueEIuVyhh
-LDEpIT09NTgpcmV0dXJuIDAKcT1DLnhCLlcoYSwyKQppZighKHE9PT00N3x8cT09PTkyKSlyZXR1cm4g
-MApyZXR1cm4gM30sCllyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rp
-b24oYSl7cmV0dXJuIHRoaXMuWXIoYSk9PT0xfSwKT3Q6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihhPT09
-YilyZXR1cm4hMAppZihhPT09NDcpcmV0dXJuIGI9PT05MgppZihhPT09OTIpcmV0dXJuIGI9PT00Nwpp
-ZigoYV5iKSE9PTMyKXJldHVybiExCnM9YXwzMgpyZXR1cm4gcz49OTcmJnM8PTEyMn0sCk5jOmZ1bmN0
-aW9uKGEsYil7dmFyIHMscgppZihhPT09YilyZXR1cm4hMApzPWEubGVuZ3RoCmlmKHMhPT1iLmxlbmd0
-aClyZXR1cm4hMQpmb3Iocj0wO3I8czsrK3IpaWYoIXRoaXMuT3QoQy54Qi5XKGEsciksQy54Qi5XKGIs
-cikpKXJldHVybiExCnJldHVybiEwfSwKZ29jOmZ1bmN0aW9uKCl7cmV0dXJuIndpbmRvd3MifSwKZ21J
-OmZ1bmN0aW9uKCl7cmV0dXJuIlxcIn19OyhmdW5jdGlvbiBhbGlhc2VzKCl7dmFyIHM9Si5Hdi5wcm90
-b3R5cGUKcy5VPXMudwpzPUouTUYucHJvdG90eXBlCnMudD1zLncKcz1QLmNYLnByb3RvdHlwZQpzLkdH
-PXMuZXYKcz1QLk1oLnByb3RvdHlwZQpzLnhiPXMudwpzPVcuY3YucHJvdG90eXBlCnMuRFc9cy5yNgpz
-PVcubTYucHJvdG90eXBlCnMuakY9cy5FYgpzPVAuRTQucHJvdG90eXBlCnMuVXI9cy5xCnMuZTQ9cy5Z
-NQpzPVAudmcucHJvdG90eXBlCnMuYmg9cy5ZNX0pKCk7KGZ1bmN0aW9uIGluc3RhbGxUZWFyT2Zmcygp
-e3ZhciBzPWh1bmtIZWxwZXJzLl9zdGF0aWNfMSxyPWh1bmtIZWxwZXJzLl9zdGF0aWNfMCxxPWh1bmtI
-ZWxwZXJzLmluc3RhbGxJbnN0YW5jZVRlYXJPZmYscD1odW5rSGVscGVycy5pbnN0YWxsU3RhdGljVGVh
-ck9mZixvPWh1bmtIZWxwZXJzLl9pbnN0YW5jZV8xdQpzKFAsIkVYIiwiWlYiLDUpCnMoUCwieXQiLCJv
-QSIsNSkKcyhQLCJxVyIsIkJ6Iiw1KQpyKFAsIlVJIiwiZU4iLDApCnEoUC5QZi5wcm90b3R5cGUsImdZ
-SiIsMCwxLG51bGwsWyIkMiIsIiQxIl0sWyJ3MCIsInBtIl0sNDAsMCwwKQpzKFAsIkN5IiwiTkMiLDQp
-CnMoUCwiUEgiLCJNdCIsMikKcChXLCJwUyIsNCxudWxsLFsiJDQiXSxbInFEIl0sMTQsMCkKcChXLCJW
-NCIsNCxudWxsLFsiJDQiXSxbIm5aIl0sMTQsMCkKbyhQLkFzLnByb3RvdHlwZSwiZ3VNIiwiViIsMikK
-cyhQLCJpRyIsIndZIiw1MikKcyhQLCJ3MCIsImRVIiwzNSkKcyhMLCJpUyIsImk2IiwxKX0pKCk7KGZ1
-bmN0aW9uIGluaGVyaXRhbmNlKCl7dmFyIHM9aHVua0hlbHBlcnMubWl4aW4scj1odW5rSGVscGVycy5p
-bmhlcml0LHE9aHVua0hlbHBlcnMuaW5oZXJpdE1hbnkKcihQLk1oLG51bGwpCnEoUC5NaCxbSC5GSyxK
-Lkd2LEoubTEsUC5jWCxILmVULFAuWFMsUC5uWSxILmE3LFAuQW4sSC5GdSxILkpCLEguU1UsSC5SZSxI
-Lnd2LFAuUG4sSC5XVSxILkxJLEguVHAsSC5mOSxILnRlLEguYnEsSC5YTyxILmtyLFAuWWssSC52aCxI
-Lk42LEguVlIsSC5FSyxILlBiLEgudFEsSC5TZCxILkpjLEguRyxQLlczLFAuaWgsUC5GeSxQLkdWLFAu
-Q3csUC5QZixQLkZlLFAudnMsUC5PTSxQLnFoLFAuTU8sUC5rVCxQLnhJLFAubTAsUC5wUixQLmJuLFAu
-bG0sUC5sRCxQLktQLFAubGYsUC5XWSxQLlVrLFAuU2gsUC5SdyxQLmJ6LFAuaVAsUC5rNSxQLktZLFAu
-Q0QsUC5hRSxQLk4zLFAuYzgsUC5aZCxQLk0sUC5EbixQLlBFLFAuVWYsVy5pZCxXLkZrLFcuSlEsVy5H
-bSxXLnZELFcubTYsVy5PdyxXLlc5LFcuZFcsVy5tayxXLktvLFAuaUosUC5FNCxVLmQyLFUuU2UsVS5N
-bCxVLnlELFUud2IsQi5qOCxCLnFwLFQubVEsTC5YQSxMLkQ4LEwuTzksTC5HYixSLkxMLFIuSDcsTS5s
-SSxPLnpMLFguV0QsWC5kdl0pCnEoSi5HdixbSi55RSxKLndlLEouTUYsSi5qZCxKLnFJLEouRHIsSC5F
-VCxXLkQwLFcuQXosVy5MZSxXLk5oLFcuYWUsVy5JQixXLm43LFcuZWEsVy5icixXLlNnLFcudTgsVy5L
-NyxXLlhXLFAuaEZdKQpxKEouTUYsW0ouaUMsSi5rZCxKLmM1XSkKcihKLlBvLEouamQpCnEoSi5xSSxb
-Si5iVSxKLmtEXSkKcShQLmNYLFtILkJSLEguYlEsSC5pMSxILlU1LEguQU0sSC51NixILlhSLFAubVcs
-SC51bl0pCnEoSC5CUixbSC5aeSxILlFDXSkKcihILm9sLEguWnkpCnIoSC5VcSxILlFDKQpyKEgualYs
-SC5VcSkKcShQLlhTLFtILmMsUC5FeixILmF6LEgudlYsSC5FcSxQLkM2LEgua1MsUC5VZCxQLkYsUC5B
-VCxQLm1wLFAudWIsUC5kcyxQLmxqLFAuVVYsUC5wLEwuUVddKQpyKFAudXksUC5uWSkKcShQLnV5LFtI
-LncyLFcud3osVy5lN10pCnIoSC5xaixILncyKQpxKEguYlEsW0guYUwsSC5NQixILmk1XSkKcShILmFM
-LFtILm5ILEgubEosUC5pOF0pCnIoSC54eSxILmkxKQpxKFAuQW4sW0guTUgsSC5TTyxILlUxXSkKcihI
-LmQ1LEguQU0pCnIoUC5SVSxQLlBuKQpyKFAuR2osUC5SVSkKcihILlBELFAuR2opCnIoSC5MUCxILldV
-KQpxKEguVHAsW0guQ2osSC5sYyxILmRDLEgud04sSC5WWCxQLnRoLFAuaGEsUC5WcyxQLkZ0LFAueUgs
-UC5XTSxQLlNYLFAuR3MsUC5kYSxQLm9RLFAucFYsUC5VNyxQLnZyLFAucnQsUC5LRixQLlpMLFAuUlQs
-UC5qWixQLnJxLFAuUlcsUC5CNSxQLnVPLFAuRXYsUC5WcCxQLk9SLFAucmEsUC55USxQLnhyLFAuTnos
-UC50aSxQLldGLFAubjEsUC5jUyxQLlZDLFAuSlQsUC5SWixQLk1FLFAueTUsUC55SSxQLmM2LFAucWQs
-Vy5DdixXLktTLFcuQTMsVy52TixXLlV2LFcuRWcsVy5FbyxXLldrLFcuSUEsVy5mbSxQLkUyLFAuamcs
-UC5HRSxQLk43LFAudVEsUC5QQyxQLm10LFAuUVMsUC5ucCxQLlV0LFUuYU4sVS5iMCxMLmUsTC5WVyxM
-Lm9aLEwuanIsTC5xbCxMLnk4LEwuSGksTC5CVCxMLlBZLEwuTCxMLld4LEwuQU8sTC5kTixMLkhvLEwu
-eHosTC5JQyxMLmZDLEwuVG0sTC5uVCxMLk5ZLEwudWUsTC5HSCxMLkVFLEwuUUwsTC5WUyxMLlRELEwu
-SWYsTC50QixMLm0yLFIuTUQsTS5xNyxNLk5vXSkKcihILlcwLFAuRXopCnEoSC5sYyxbSC56eCxILnJU
-XSkKcihILmtZLFAuQzYpCnIoUC5pbCxQLllrKQpxKFAuaWwsW0guTjUsUC51dyxXLmNmLFcuU3ldKQpx
-KFAubVcsW0guS1csUC5xNF0pCnIoSC5MWixILkVUKQpxKEguTFosW0guUkcsSC5XQl0pCnIoSC5WUCxI
-LlJHKQpyKEguRGcsSC5WUCkKcihILlpHLEguV0IpCnIoSC5QZyxILlpHKQpxKEguUGcsW0gueGosSC5k
-RSxILlpBLEguZFQsSC5QcSxILmVFLEguVjZdKQpyKEguaU0sSC5rUykKcihQLlpmLFAuUGYpCnIoUC5K
-aSxQLm0wKQpyKFAuWHYsUC5wUikKcihQLmI2LFAuWHYpCnIoUC5WaixQLldZKQpxKFAuVWssW1AuQ1Ys
-UC5aaSxQLmJ5XSkKcihQLndJLFAua1QpCnEoUC53SSxbUC5VOCxQLm9qLFAuTXgsUC5FMyxQLkdZXSkK
-cihQLks4LFAuVWQpCnIoUC50dSxQLlNoKQpyKFAudTUsUC5aaSkKcShQLkFULFtQLmJKLFAuZVldKQpy
-KFAucWUsUC5EbikKcShXLkQwLFtXLktWLFcud2EsVy5LNSxXLkNtXSkKcShXLktWLFtXLmN2LFcubngs
-Vy5RRixXLkNRXSkKcShXLmN2LFtXLnFFLFAuaGldKQpxKFcucUUsW1cuR2gsVy5mWSxXLnJaLFcuUVAs
-Vy5oNCxXLlNOLFcubHAsVy5UYixXLkl2LFcuV1AsVy55WV0pCnIoVy5vSixXLkxlKQpyKFcuaEgsVy5B
-eikKcihXLlZiLFcuUUYpCnIoVy5mSixXLndhKQpxKFcuZWEsW1cudzYsVy5ld10pCnIoVy5BaixXLnc2
-KQpyKFcuckIsVy5LNykKcihXLkJILFcuckIpCnIoVy53NCxXLklCKQpyKFcub2EsVy5YVykKcihXLnJo
-LFcub2EpCnIoVy5pNyxXLmNmKQpyKFAuQXMsUC5WaikKcShQLkFzLFtXLkk0LFAuS2VdKQpyKFcuUk8s
-UC5xaCkKcihXLkNxLFcuUk8pCnIoVy54QyxQLk1PKQpyKFcuY3QsVy5tNikKcihQLkJmLFAuaUopCnEo
-UC5FNCxbUC5yNyxQLnZnXSkKcihQLlR6LFAudmcpCnIoUC5uZCxQLmhpKQpxKEwuRDgsW0wudnQsTC5j
-RF0pCnIoQi5mdixPLnpMKQpxKEIuZnYsW0UuT0YsRi5ydSxMLklWXSkKcyhILncyLEguUmUpCnMoSC5R
-QyxQLmxEKQpzKEguUkcsUC5sRCkKcyhILlZQLEguU1UpCnMoSC5XQixQLmxEKQpzKEguWkcsSC5TVSkK
-cyhQLm5ZLFAubEQpCnMoUC5XWSxQLmxmKQpzKFAuUlUsUC5LUCkKcyhQLnBSLFAubGYpCnMoVy5MZSxX
-LmlkKQpzKFcuSzcsUC5sRCkKcyhXLnJCLFcuR20pCnMoVy5YVyxQLmxEKQpzKFcub2EsVy5HbSkKcyhQ
-LnZnLFAubEQpfSkoKQp2YXIgdj17dHlwZVVuaXZlcnNlOntlQzpuZXcgTWFwKCksdFI6e30sZVQ6e30s
-dFBWOnt9LHNFQTpbXX0sbWFuZ2xlZEdsb2JhbE5hbWVzOntJajoiaW50IixDUDoiZG91YmxlIixaWjoi
-bnVtIixxVToiU3RyaW5nIixhMjoiYm9vbCIsYzg6Ik51bGwiLHpNOiJMaXN0In0sbWFuZ2xlZE5hbWVz
-Ont9LHR5cGVzOlsifigpIiwifihBaikiLCJxVShxVSkiLCJ+KGN2KSIsIkAoQCkiLCJ+KH4oKSkiLCJh
-MihxVSkiLCJiODx+PihBaikiLCJ+KHFVLHFVKSIsIn4oTWg/LE1oPykiLCJAKCkiLCJ+KHFVLEApIiwi
-fih4dTxxVT4pIiwiYzgoQCkiLCJhMihjdixxVSxxVSxKUSkiLCJjOCgpIiwiYTIoa0YpIiwiYzgoZWEp
-IiwifihuNixxVSxJaikiLCJ+KHFVW0BdKSIsIklqKElqLElqKSIsIkAocVUpIiwifihxVSxxVT8pIiwi
-bjYoQCxAKSIsIn4ocVUsSWopIiwiYTIoS1YpIiwiWjA8cVUscVU+KFowPHFVLHFVPixxVSkiLCJ+KGVh
-KSIsIn4oR0QsQCkiLCJ2czxAPihAKSIsIn4oS1YsS1Y/KSIsIn4oQCxAKSIsImM4KEAsQCkiLCJhMih4
-dTxxVT4pIiwiYzgoTWgsR3opIiwiTWg/KEApIiwiVHo8QD4oQCkiLCJFNChAKSIsIkxMKEApIiwiWjA8
-cVUsTWg/PihMTCkiLCJ+KE1oW0d6P10pIiwiYzgofigpKSIsImM4KFowPHFVLE1oPz4/KSIsImM4KE1o
-LEApIiwicjcoQCkiLCJ+KElqLEApIiwifihldykiLCJxVShaMDxALEA+KSIsImEyKEg3KSIsInFVKHFV
-PykiLCJAKEAscVUpIiwifihAKSIsIk1oPyhNaD8pIiwiYzgoQCxHeikiXSxpbnRlcmNlcHRvcnNCeVRh
-ZzpudWxsLGxlYWZUYWdzOm51bGwsYXJyYXlSdGk6dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlw
-ZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj9TeW1ib2woIiR0aSIpOiIkdGkifQpILnhiKHYudHlwZVVuaXZl
-cnNlLEpTT04ucGFyc2UoJ3siaUMiOiJNRiIsImtkIjoiTUYiLCJjNSI6Ik1GIiwicngiOiJlYSIsImU1
-IjoiZWEiLCJZMCI6ImhpIiwidHAiOiJoaSIsIkc4IjoiZXciLCJNciI6InFFIiwiZUwiOiJxRSIsIkkw
-IjoiS1YiLCJocyI6IktWIiwiWGciOiJRRiIsIm5yIjoiQWoiLCJ5NCI6Inc2IiwiYVAiOiJDbSIsInhj
-IjoibngiLCJrSiI6Im54IiwielUiOiJEZyIsImRmIjoiRVQiLCJ5RSI6eyJhMiI6W119LCJ3ZSI6eyJj
-OCI6W119LCJNRiI6eyJ2bSI6W119LCJqZCI6eyJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJd
-fSwiUG8iOnsiamQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwibTEiOnsi
-QW4iOlsiMSJdfSwicUkiOnsiQ1AiOltdLCJaWiI6W119LCJiVSI6eyJDUCI6W10sIklqIjpbXSwiWloi
-OltdfSwia0QiOnsiQ1AiOltdLCJaWiI6W119LCJEciI6eyJxVSI6W10sInZYIjpbXX0sImJRIjp7ImNY
-IjpbIjEiXX0sIkJSIjp7ImNYIjpbIjIiXX0sImVUIjp7IkFuIjpbIjIiXX0sIlp5Ijp7IkJSIjpbIjEi
-LCIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwib2wiOnsiWnkiOlsiMSIsIjIiXSwiQlIiOlsiMSIs
-IjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImNYLkUiOiIyIn0sIlVxIjp7ImxEIjpbIjIiXSwiek0i
-OlsiMiJdLCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXX0sImpWIjp7IlVxIjpbIjEi
-LCIyIl0sImxEIjpbIjIiXSwiek0iOlsiMiJdLCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpb
-IjIiXSwibEQuRSI6IjIiLCJjWC5FIjoiMiJ9LCJjIjp7IlhTIjpbXX0sInFqIjp7ImxEIjpbIklqIl0s
-IlJlIjpbIklqIl0sInpNIjpbIklqIl0sImJRIjpbIklqIl0sImNYIjpbIklqIl0sImxELkUiOiJJaiIs
-IlJlLkUiOiJJaiJ9LCJhTCI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm5IIjp7ImFMIjpbIjEiXSwi
-YlEiOlsiMSJdLCJjWCI6WyIxIl0sImFMLkUiOiIxIiwiY1guRSI6IjEifSwiYTciOnsiQW4iOlsiMSJd
-fSwiaTEiOnsiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJ4eSI6eyJpMSI6WyIxIiwiMiJdLCJiUSI6WyIy
-Il0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwiTUgiOnsiQW4iOlsiMiJdfSwibEoiOnsiYUwiOlsiMiJd
-LCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiYUwuRSI6IjIiLCJjWC5FIjoiMiJ9LCJVNSI6eyJjWCI6WyIx
-Il0sImNYLkUiOiIxIn0sIlNPIjp7IkFuIjpbIjEiXX0sIkFNIjp7ImNYIjpbIjEiXSwiY1guRSI6IjEi
-fSwiZDUiOnsiQU0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiVTEiOnsi
-QW4iOlsiMSJdfSwiTUIiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkZ1Ijp7IkFu
-IjpbIjEiXX0sInU2Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiSkIiOnsiQW4iOlsiMSJdfSwidzIi
-OnsibEQiOlsiMSJdLCJSZSI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJ3
-diI6eyJHRCI6W119LCJQRCI6eyJHaiI6WyIxIiwiMiJdLCJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwi
-MiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdfSwiV1UiOnsiWjAiOlsiMSIsIjIiXX0sIkxQ
-Ijp7IldVIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJYUiI6eyJjWCI6WyIxIl0sImNYLkUiOiIx
-In0sIkxJIjp7InZRIjpbXX0sIlcwIjp7IlhTIjpbXX0sImF6Ijp7IlhTIjpbXX0sInZWIjp7IlhTIjpb
-XX0sInRlIjp7IlJ6IjpbXX0sIlhPIjp7Ikd6IjpbXX0sIlRwIjp7IkVIIjpbXX0sImxjIjp7IkVIIjpb
-XX0sInp4Ijp7IkVIIjpbXX0sInJUIjp7IkVIIjpbXX0sIkVxIjp7IlhTIjpbXX0sImtZIjp7IlhTIjpb
-XX0sIk41Ijp7IllrIjpbIjEiLCIyIl0sIkZvIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl0sIllrLksi
-OiIxIiwiWWsuViI6IjIifSwiaTUiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIk42
-Ijp7IkFuIjpbIjEiXX0sIlZSIjp7IndMIjpbXSwidlgiOltdfSwiRUsiOnsiaWIiOltdLCJPZCI6W119
-LCJLVyI6eyJjWCI6WyJpYiJdLCJjWC5FIjoiaWIifSwiUGIiOnsiQW4iOlsiaWIiXX0sInRRIjp7Ik9k
-IjpbXX0sInVuIjp7ImNYIjpbIk9kIl0sImNYLkUiOiJPZCJ9LCJTZCI6eyJBbiI6WyJPZCJdfSwiRVQi
-OnsiQVMiOltdfSwiTFoiOnsiWGoiOlsiMSJdLCJFVCI6W10sIkFTIjpbXX0sIkRnIjp7ImxEIjpbIkNQ
-Il0sIlhqIjpbIkNQIl0sInpNIjpbIkNQIl0sIkVUIjpbXSwiYlEiOlsiQ1AiXSwiQVMiOltdLCJjWCI6
-WyJDUCJdLCJTVSI6WyJDUCJdLCJsRC5FIjoiQ1AifSwiUGciOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoi
-XSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpb
-IklqIl19LCJ4aiI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJR
-IjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sImRFIjp7
-ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMi
-OltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiWkEiOnsibEQiOlsiSWoiXSwi
-WGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklq
-Il0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJkVCI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6
-TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoi
-XSwibEQuRSI6IklqIn0sIlBxIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVU
-IjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoi
-fSwiZUUiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJ
-aiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJWNiI6eyJsRCI6
-WyJJaiJdLCJuNiI6W10sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwi
-QVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwia1MiOnsiWFMiOltdfSwi
-aU0iOnsiWFMiOltdfSwidnMiOnsiYjgiOlsiMSJdfSwiR1YiOnsiQW4iOlsiMSJdfSwicTQiOnsiY1gi
-OlsiMSJdLCJjWC5FIjoiMSJ9LCJDdyI6eyJYUyI6W119LCJaZiI6eyJQZiI6WyIxIl19LCJtMCI6eyJR
-bSI6W119LCJKaSI6eyJtMCI6W10sIlFtIjpbXX0sImI2Ijp7ImxmIjpbIjEiXSwieHUiOlsiMSJdLCJi
-USI6WyIxIl0sImNYIjpbIjEiXSwibGYuRSI6IjEifSwibG0iOnsiQW4iOlsiMSJdfSwibVciOnsiY1gi
-OlsiMSJdfSwidXkiOnsibEQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwi
-aWwiOnsiWWsiOlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXX0sIllrIjp7IlowIjpbIjEiLCIyIl19LCJQ
-biI6eyJaMCI6WyIxIiwiMiJdfSwiR2oiOnsiUlUiOlsiMSIsIjIiXSwiUG4iOlsiMSIsIjIiXSwiS1Ai
-OlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXX0sIlZqIjp7ImxmIjpbIjEiXSwieHUiOlsiMSJdLCJiUSI6
-WyIxIl0sImNYIjpbIjEiXX0sIlh2Ijp7ImxmIjpbIjEiXSwieHUiOlsiMSJdLCJiUSI6WyIxIl0sImNY
-IjpbIjEiXX0sInV3Ijp7IllrIjpbInFVIiwiQCJdLCJaMCI6WyJxVSIsIkAiXSwiWWsuSyI6InFVIiwi
-WWsuViI6IkAifSwiaTgiOnsiYUwiOlsicVUiXSwiYlEiOlsicVUiXSwiY1giOlsicVUiXSwiYUwuRSI6
-InFVIiwiY1guRSI6InFVIn0sIkNWIjp7IlVrIjpbInpNPElqPiIsInFVIl0sIlVrLlMiOiJ6TTxJaj4i
-fSwiVTgiOnsid0kiOlsiek08SWo+IiwicVUiXX0sIlppIjp7IlVrIjpbInFVIiwiek08SWo+Il19LCJV
-ZCI6eyJYUyI6W119LCJLOCI6eyJYUyI6W119LCJieSI6eyJVayI6WyJNaD8iLCJxVSJdLCJVay5TIjoi
-TWg/In0sIm9qIjp7IndJIjpbIk1oPyIsInFVIl19LCJNeCI6eyJ3SSI6WyJxVSIsIk1oPyJdfSwidTUi
-OnsiVWsiOlsicVUiLCJ6TTxJaj4iXSwiVWsuUyI6InFVIn0sIkUzIjp7IndJIjpbInFVIiwiek08SWo+
-Il19LCJHWSI6eyJ3SSI6WyJ6TTxJaj4iLCJxVSJdfSwiQ1AiOnsiWloiOltdfSwiSWoiOnsiWloiOltd
-fSwiek0iOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJpYiI6eyJPZCI6W119LCJ4dSI6eyJiUSI6WyIx
-Il0sImNYIjpbIjEiXX0sInFVIjp7InZYIjpbXX0sIkM2Ijp7IlhTIjpbXX0sIkV6Ijp7IlhTIjpbXX0s
-IkYiOnsiWFMiOltdfSwiQVQiOnsiWFMiOltdfSwiYkoiOnsiWFMiOltdfSwiZVkiOnsiWFMiOltdfSwi
-bXAiOnsiWFMiOltdfSwidWIiOnsiWFMiOltdfSwiZHMiOnsiWFMiOltdfSwibGoiOnsiWFMiOltdfSwi
-VVYiOnsiWFMiOltdfSwiazUiOnsiWFMiOltdfSwiS1kiOnsiWFMiOltdfSwicCI6eyJYUyI6W119LCJD
-RCI6eyJSeiI6W119LCJhRSI6eyJSeiI6W119LCJaZCI6eyJHeiI6W119LCJNIjp7IkJMIjpbXX0sIkRu
-Ijp7ImlEIjpbXX0sIlVmIjp7ImlEIjpbXX0sInFlIjp7ImlEIjpbXX0sImN2Ijp7IktWIjpbXSwiRDAi
-OltdfSwiZkoiOnsiRDAiOltdfSwid2EiOnsiRDAiOltdfSwiQWoiOnsiZWEiOltdfSwiS1YiOnsiRDAi
-OltdfSwiZXciOnsiZWEiOltdfSwidzYiOnsiZWEiOltdfSwiSlEiOnsia0YiOltdfSwicUUiOnsiY3Yi
-OltdLCJLViI6W10sIkQwIjpbXX0sIkdoIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJmWSI6eyJj
-diI6W10sIktWIjpbXSwiRDAiOltdfSwicloiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIlFQIjp7
-ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJueCI6eyJLViI6W10sIkQwIjpbXX0sIlFGIjp7IktWIjpb
-XSwiRDAiOltdfSwiSUIiOnsidG4iOlsiWloiXX0sInd6Ijp7ImxEIjpbIjEiXSwiek0iOlsiMSJdLCJi
-USI6WyIxIl0sImNYIjpbIjEiXSwibEQuRSI6IjEifSwiaEgiOnsiQXoiOltdfSwiaDQiOnsiY3YiOltd
-LCJLViI6W10sIkQwIjpbXX0sIlZiIjp7IktWIjpbXSwiRDAiOltdfSwiZTciOnsibEQiOlsiS1YiXSwi
-ek0iOlsiS1YiXSwiYlEiOlsiS1YiXSwiY1giOlsiS1YiXSwibEQuRSI6IktWIn0sIkJIIjp7ImxEIjpb
-IktWIl0sIkdtIjpbIktWIl0sInpNIjpbIktWIl0sIlhqIjpbIktWIl0sImJRIjpbIktWIl0sImNYIjpb
-IktWIl0sImxELkUiOiJLViIsIkdtLkUiOiJLViJ9LCJTTiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltd
-fSwibHAiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIlRiIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6
-W119LCJJdiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiV1AiOnsiY3YiOltdLCJLViI6W10sIkQw
-IjpbXX0sInlZIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJLNSI6eyJ2NiI6W10sIkQwIjpbXX0s
-IkNtIjp7IkQwIjpbXX0sIkNRIjp7IktWIjpbXSwiRDAiOltdfSwidzQiOnsidG4iOlsiWloiXX0sInJo
-Ijp7ImxEIjpbIktWIl0sIkdtIjpbIktWIl0sInpNIjpbIktWIl0sIlhqIjpbIktWIl0sImJRIjpbIktW
-Il0sImNYIjpbIktWIl0sImxELkUiOiJLViIsIkdtLkUiOiJLViJ9LCJjZiI6eyJZayI6WyJxVSIsInFV
-Il0sIlowIjpbInFVIiwicVUiXX0sImk3Ijp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJd
-LCJZay5LIjoicVUiLCJZay5WIjoicVUifSwiU3kiOnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIs
-InFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJxVSJ9LCJJNCI6eyJsZiI6WyJxVSJdLCJ4dSI6WyJxVSJd
-LCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJsZi5FIjoicVUifSwiUk8iOnsicWgiOlsiMSJdfSwiQ3Ei
-OnsiUk8iOlsiMSJdLCJxaCI6WyIxIl19LCJ4QyI6eyJNTyI6WyIxIl19LCJ2RCI6eyJrRiI6W119LCJt
-NiI6eyJrRiI6W119LCJjdCI6eyJrRiI6W119LCJPdyI6eyJrRiI6W119LCJXOSI6eyJBbiI6WyIxIl19
-LCJkVyI6eyJ2NiI6W10sIkQwIjpbXX0sIm1rIjp7InkwIjpbXX0sIktvIjp7Im9uIjpbXX0sIkFzIjp7
-ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl19LCJyNyI6eyJFNCI6
-W119LCJUeiI6eyJsRCI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJFNCI6W10sImNYIjpbIjEi
-XSwibEQuRSI6IjEifSwibmQiOnsiaGkiOltdLCJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiS2UiOnsi
-bGYiOlsicVUiXSwieHUiOlsicVUiXSwiYlEiOlsicVUiXSwiY1giOlsicVUiXSwibGYuRSI6InFVIn0s
-ImhpIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJRVyI6eyJYUyI6W10sIlJ6IjpbXX0sIlhBIjp7
-ImtGIjpbXX0sInZ0Ijp7IkQ4IjpbXX0sImNEIjp7IkQ4IjpbXX0sImR2Ijp7IlJ6IjpbXX0sIk9GIjp7
-ImZ2IjpbXX0sInJ1Ijp7ImZ2IjpbXX0sIklWIjp7ImZ2IjpbXX0sIm42Ijp7InpNIjpbIklqIl0sImJR
-IjpbIklqIl0sImNYIjpbIklqIl0sIkFTIjpbXX19JykpCkguRkYodi50eXBlVW5pdmVyc2UsSlNPTi5w
-YXJzZSgneyJ3MiI6MSwiUUMiOjIsIkxaIjoxLCJrVCI6MiwibVciOjEsInV5IjoxLCJpbCI6MiwiVmoi
-OjEsIlh2IjoxLCJuWSI6MSwiV1kiOjEsInBSIjoxLCJ2ZyI6MX0nKSkKdmFyIHU9e2w6IkNhbm5vdCBl
-eHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIGZyYWdtZW50IGNvbXBvbmVudCIsaToi
-Q2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgcXVlcnkgY29tcG9uZW50
-IixqOiJDYW5ub3QgZXh0cmFjdCBhIG5vbi1XaW5kb3dzIGZpbGUgcGF0aCBmcm9tIGEgZmlsZSBVUkkg
-d2l0aCBhbiBhdXRob3JpdHkiLGQ6ImFyZWEtYW5hbHl6ZXIsYW5hbHl6ZXItbm5iZC1taWdyYXRpb24s
-dHlwZS1idWcifQp2YXIgdD0oZnVuY3Rpb24gcnRpaSgpe3ZhciBzPUguTjAKcmV0dXJue2JxOnMoIkdo
-IiksbjpzKCJDdyIpLGNSOnMoInJaIiksdzpzKCJBeiIpLGs6cygiUVAiKSxnRjpzKCJQRDxHRCxAPiIp
-LFc6cygiYlE8QD4iKSxoOnMoImN2IiksbTpzKCJYUyIpLEI6cygiZWEiKSxnODpzKCJSeiIpLGM4OnMo
-ImhIIiksWTpzKCJFSCIpLGk6cygiYjg8QD4iKSxKOnMoIkxMIiksZ3A6cygiSDciKSxJOnMoIlNnIiks
-bzpzKCJ2USIpLGVoOnMoImNYPEtWPiIpLE86cygiY1g8cVU+IiksUjpzKCJjWDxAPiIpLGZBOnMoImpk
-PFNlPiIpLGdpOnMoImpkPGo4PiIpLGQ6cygiamQ8WjA8cVUsTWg/Pj4iKSxmaDpzKCJqZDxEOD4iKSxy
-OnMoImpkPGtGPiIpLHM6cygiamQ8cVU+IiksaGg6cygiamQ8eUQ+IiksYUo6cygiamQ8d2I+IiksZ046
-cygiamQ8bjY+IiksYjpzKCJqZDxAPiIpLHQ6cygiamQ8SWo+IiksZDQ6cygiamQ8cVU/PiIpLFQ6cygi
-d2UiKSxlSDpzKCJ2bSIpLHU6cygiYzUiKSxhVTpzKCJYajxAPiIpLGFtOnMoIlR6PEA+IiksZW86cygi
-TjU8R0QsQD4iKSxkejpzKCJoRiIpLGY0OnMoInpNPGo4PiIpLHg6cygiek08WjA8cVUsTWg/Pj4iKSxl
-dzpzKCJ6TTxNaD4iKSxhOnMoInpNPHFVPiIpLGo6cygiek08QD4iKSxMOnMoInpNPElqPiIpLGVlOnMo
-InpNPE1oPz4iKSxGOnMoInU4IiksaDY6cygiWjA8cVUsTWg+IiksdjpzKCJaMDxxVSxxVT4iKSxmOnMo
-IlowPEAsQD4iKSxHOnMoIlowPHFVLE1oPz4iKSxEOnMoImxKPHFVLHFVPiIpLGRvOnMoImxKPHFVLEA+
-IiksVjpzKCJBaiIpLGRFOnMoIkVUIiksQTpzKCJLViIpLEU6cygia0YiKSxQOnMoImM4IiksSzpzKCJN
-aCIpLHA6cygiZXciKSxxOnMoInRuPFpaPiIpLGZ2OnMoIndMIiksY3o6cygiaWIiKSxhTzpzKCJuZCIp
-LEM6cygieHU8cVU+IiksbDpzKCJHeiIpLE46cygicVUiKSxkRzpzKCJxVShxVSkiKSxnNzpzKCJoaSIp
-LGZvOnMoIkdEIiksYVc6cygieVkiKSxhazpzKCJBUyIpLGdjOnMoIm42IiksYko6cygia2QiKSxkdzpz
-KCJHajxxVSxxVT4iKSxkRDpzKCJpRCIpLGVKOnMoInU2PHFVPiIpLGc0OnMoIks1IiksY2k6cygidjYi
-KSxnMjpzKCJDbSIpLGJqOnMoIlpmPGZKPiIpLGg5OnMoIkNRIiksYWM6cygiZTciKSxROnMoIkNxPEFq
-PiIpLFU6cygid3o8Y3Y+IiksYW86cygidnM8Zko+IiksYzpzKCJ2czxAPiIpLGZKOnMoInZzPElqPiIp
-LGNyOnMoIkpRIikseTpzKCJhMiIpLGFsOnMoImEyKE1oKSIpLGdSOnMoIkNQIiksejpzKCJAIiksZk86
-cygiQCgpIiksYkk6cygiQChNaCkiKSxhZzpzKCJAKE1oLEd6KSIpLGJVOnMoIkAoeHU8cVU+KSIpLGRP
-OnMoIkAocVUpIiksYjg6cygiQChALEApIiksUzpzKCJJaiIpLGF3OnMoIjAmKiIpLF86cygiTWgqIiks
-Y2g6cygiRDA/IiksYkc6cygiYjg8Yzg+PyIpLGVzOnMoIkU0PyIpLGJrOnMoInpNPHFVPj8iKSxiTTpz
-KCJ6TTxAPj8iKSxjWjpzKCJaMDxxVSxxVT4/IiksYzk6cygiWjA8cVUsQD4/IiksZm46cygiWjA8cVUs
-TWg/Pj8iKSxYOnMoIk1oPyIpLGRrOnMoInFVPyIpLGU6cygiRmU8QCxAPj8iKSxnOnMoImJuPyIpLGI3
-OnMoImEyKE1oKT8iKSxidzpzKCJAKGVhKT8iKSxmVjpzKCJNaD8oTWg/LE1oPyk/IiksZEE6cygiTWg/
-KEApPyIpLFo6cygifigpPyIpLGd4OnMoIn4oZXcpPyIpLGRpOnMoIlpaIiksSDpzKCJ+IiksTTpzKCJ+
-KCkiKSxlQTpzKCJ+KHFVLHFVKSIpLGNBOnMoIn4ocVUsQCkiKX19KSgpOyhmdW5jdGlvbiBjb25zdGFu
-dHMoKXt2YXIgcz1odW5rSGVscGVycy5tYWtlQ29uc3RMaXN0CkMueG49Vy5HaC5wcm90b3R5cGUKQy5S
-WT1XLlFQLnByb3RvdHlwZQpDLm1IPVcuYWUucHJvdG90eXBlCkMuQlo9Vy5WYi5wcm90b3R5cGUKQy5E
-dD1XLmZKLnByb3RvdHlwZQpDLk9rPUouR3YucHJvdG90eXBlCkMuTm09Si5qZC5wcm90b3R5cGUKQy5q
-bj1KLmJVLnByb3RvdHlwZQpDLkNEPUoucUkucHJvdG90eXBlCkMueEI9Si5Eci5wcm90b3R5cGUKQy5E
-Rz1KLmM1LnByb3RvdHlwZQpDLkV4PVcudTgucHJvdG90eXBlCkMuTkE9SC5WNi5wcm90b3R5cGUKQy50
-NT1XLkJILnByb3RvdHlwZQpDLkx0PVcuU04ucHJvdG90eXBlCkMuWlE9Si5pQy5wcm90b3R5cGUKQy5J
-ZT1XLlRiLnByb3RvdHlwZQpDLnZCPUoua2QucHJvdG90eXBlCkMub2w9Vy5LNS5wcm90b3R5cGUKQy55
-OD1uZXcgUC5VOCgpCkMuaDk9bmV3IFAuQ1YoKQpDLkd3PW5ldyBILkZ1KEguTjAoIkZ1PDAmPiIpKQpD
-Lk80PWZ1bmN0aW9uIGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIgcyA9IE9iamVjdC5wcm90b3R5cGUu
-dG9TdHJpbmcuY2FsbChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKfQpD
-LllxPWZ1bmN0aW9uKCkgewogIHZhciB0b1N0cmluZ0Z1bmN0aW9uID0gT2JqZWN0LnByb3RvdHlwZS50
-b1N0cmluZzsKICBmdW5jdGlvbiBnZXRUYWcobykgewogICAgdmFyIHMgPSB0b1N0cmluZ0Z1bmN0aW9u
-LmNhbGwobyk7CiAgICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKICB9CiAgZnVu
-Y3Rpb24gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZykgewogICAgaWYgKC9eSFRNTFtBLVpdLipFbGVt
-ZW50JC8udGVzdCh0YWcpKSB7CiAgICAgIHZhciBuYW1lID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxsKG9i
-amVjdCk7CiAgICAgIGlmIChuYW1lID09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gbnVsbDsKICAg
-ICAgcmV0dXJuICJIVE1MRWxlbWVudCI7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdldFVua25vd25UYWdH
-ZW5lcmljQnJvd3NlcihvYmplY3QsIHRhZykgewogICAgaWYgKHNlbGYuSFRNTEVsZW1lbnQgJiYgb2Jq
-ZWN0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgcmV0dXJu
-IGdldFVua25vd25UYWcob2JqZWN0LCB0YWcpOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWco
-dGFnKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAg
-ICBpZiAodHlwZW9mIHdpbmRvd1t0YWddID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAgIHZh
-ciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPSAi
-ZnVuY3Rpb24iKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAg
-fQogIGZ1bmN0aW9uIGRpc2NyaW1pbmF0b3IodGFnKSB7IHJldHVybiBudWxsOyB9CiAgdmFyIGlzQnJv
-d3NlciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCI7CiAgcmV0dXJuIHsKICAgIGdldFRhZzog
-Z2V0VGFnLAogICAgZ2V0VW5rbm93blRhZzogaXNCcm93c2VyID8gZ2V0VW5rbm93blRhZ0dlbmVyaWNC
-cm93c2VyIDogZ2V0VW5rbm93blRhZywKICAgIHByb3RvdHlwZUZvclRhZzogcHJvdG90eXBlRm9yVGFn
-LAogICAgZGlzY3JpbWluYXRvcjogZGlzY3JpbWluYXRvciB9Owp9CkMud2I9ZnVuY3Rpb24oZ2V0VGFn
-RmFsbGJhY2spIHsKICByZXR1cm4gZnVuY3Rpb24oaG9va3MpIHsKICAgIGlmICh0eXBlb2YgbmF2aWdh
-dG9yICE9ICJvYmplY3QiKSByZXR1cm4gaG9va3M7CiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFn
-ZW50OwogICAgaWYgKHVhLmluZGV4T2YoIkR1bXBSZW5kZXJUcmVlIikgPj0gMCkgcmV0dXJuIGhvb2tz
-OwogICAgaWYgKHVhLmluZGV4T2YoIkNocm9tZSIpID49IDApIHsKICAgICAgZnVuY3Rpb24gY29uZmly
-bShwKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT0gIm9iamVjdCIgJiYgd2luZG93W3Bd
-ICYmIHdpbmRvd1twXS5uYW1lID09IHA7CiAgICAgIH0KICAgICAgaWYgKGNvbmZpcm0oIldpbmRvdyIp
-ICYmIGNvbmZpcm0oIkhUTUxFbGVtZW50IikpIHJldHVybiBob29rczsKICAgIH0KICAgIGhvb2tzLmdl
-dFRhZyA9IGdldFRhZ0ZhbGxiYWNrOwogIH07Cn0KQy5LVT1mdW5jdGlvbihob29rcykgewogIGlmICh0
-eXBlb2YgZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJmdW5jdGlvbiIpIHJldHVybiBob29r
-czsKICBob29rcy5nZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcoaG9va3MuZ2V0VGFn
-KTsKfQpDLmZRPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsKICB2
-YXIgcHJvdG90eXBlRm9yVGFnID0gaG9va3MucHJvdG90eXBlRm9yVGFnOwogIGZ1bmN0aW9uIGdldFRh
-Z0ZpeGVkKG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICBpZiAodGFnID09ICJEb2N1bWVu
-dCIpIHsKICAgICAgaWYgKCEhby54bWxWZXJzaW9uKSByZXR1cm4gIiFEb2N1bWVudCI7CiAgICAgIHJl
-dHVybiAiIUhUTUxEb2N1bWVudCI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlvbiBw
-cm90b3R5cGVGb3JUYWdGaXhlZCh0YWcpIHsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgcmV0dXJu
-IG51bGw7CiAgICByZXR1cm4gcHJvdG90eXBlRm9yVGFnKHRhZyk7CiAgfQogIGhvb2tzLmdldFRhZyA9
-IGdldFRhZ0ZpeGVkOwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0ZpeGVk
-Owp9CkMuZGs9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmlnYXRv
-ciA9PSAib2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50Lmlu
-ZGV4T2YoIkZpcmVmb3giKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5n
-ZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwK
-ICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJHZW9HZW9sb2NhdGlvbiI6ICJHZW9s
-b2NhdGlvbiIsCiAgICAiTG9jYXRpb24iOiAiIUxvY2F0aW9uIiwKICAgICJXb3JrZXJNZXNzYWdlRXZl
-bnQiOiAiTWVzc2FnZUV2ZW50IiwKICAgICJYTUxEb2N1bWVudCI6ICIhRG9jdW1lbnQifTsKICBmdW5j
-dGlvbiBnZXRUYWdGaXJlZm94KG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICByZXR1cm4g
-cXVpY2tNYXBbdGFnXSB8fCB0YWc7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpcmVmb3g7Cn0K
-Qy54aT1mdW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yID09
-ICJvYmplY3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5kZXhP
-ZigiVHJpZGVudC8iKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRU
-YWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAg
-ICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1MRERFbGVtZW50IjogIkhUTUxFbGVt
-ZW50IiwKICAgICJIVE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MUGhyYXNlRWxl
-bWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAiR2VvcG9zaXRpb24iCiAgfTsKICBm
-dW5jdGlvbiBnZXRUYWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgdmFyIG5ld1Rh
-ZyA9IHF1aWNrTWFwW3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1cm4gbmV3VGFnOwogICAgaWYgKHRh
-ZyA9PSAiT2JqZWN0IikgewogICAgICBpZiAod2luZG93LkRhdGFWaWV3ICYmIChvIGluc3RhbmNlb2Yg
-d2luZG93LkRhdGFWaWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAgICB9CiAgICByZXR1cm4gdGFnOwog
-IH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsKICAgIHZhciBjb25zdHJ1Y3RvciA9
-IHdpbmRvd1t0YWddOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHJldHVybiBudWxsOwogICAg
-cmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnSUU7
-CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnSUU7Cn0KQy5pNz1mdW5jdGlv
-bihob29rcykgeyByZXR1cm4gaG9va3M7IH0KCkMuQ3Q9bmV3IFAuYnkoKQpDLkVxPW5ldyBQLms1KCkK
-Qy54TT1uZXcgUC51NSgpCkMuUWs9bmV3IFAuRTMoKQpDLk52PW5ldyBILmtyKCkKQy5OVT1uZXcgUC5K
-aSgpCkMucGQ9bmV3IFAuWmQoKQpDLkFkPW5ldyBSLkg3KDAsIkhpbnRBY3Rpb25LaW5kLmFkZE51bGxh
-YmxlSGludCIpCkMubmU9bmV3IFIuSDcoMSwiSGludEFjdGlvbktpbmQuYWRkTm9uTnVsbGFibGVIaW50
-IikKQy5teT1uZXcgUi5INygyLCJIaW50QWN0aW9uS2luZC5jaGFuZ2VUb051bGxhYmxlSGludCIpCkMu
-cng9bmV3IFIuSDcoMywiSGludEFjdGlvbktpbmQuY2hhbmdlVG9Ob25OdWxsYWJsZUhpbnQiKQpDLndW
-PW5ldyBSLkg3KDQsIkhpbnRBY3Rpb25LaW5kLnJlbW92ZU51bGxhYmxlSGludCIpCkMuZlI9bmV3IFIu
-SDcoNSwiSGludEFjdGlvbktpbmQucmVtb3ZlTm9uTnVsbGFibGVIaW50IikKQy5BMz1uZXcgUC5NeChu
-dWxsKQpDLm5YPW5ldyBQLm9qKG51bGwpCkMuY3c9bmV3IEwuR2IoMCwiVW5pdE1pZ3JhdGlvblN0YXR1
-cy5hbHJlYWR5TWlncmF0ZWQiKQpDLmRjPW5ldyBMLkdiKDEsIlVuaXRNaWdyYXRpb25TdGF0dXMuaW5k
-ZXRlcm1pbmF0ZSIpCkMuV0Q9bmV3IEwuR2IoMiwiVW5pdE1pZ3JhdGlvblN0YXR1cy5taWdyYXRpbmci
-KQpDLlhqPW5ldyBMLkdiKDMsIlVuaXRNaWdyYXRpb25TdGF0dXMub3B0aW5nT3V0IikKQy5sMD1ILlFJ
-KHMoW0MuY3csQy5kYyxDLldELEMuWGpdKSxILk4wKCJqZDxHYj4iKSkKQy5haz1ILlFJKHMoWzAsMCwz
-Mjc3NiwzMzc5MiwxLDEwMjQwLDAsMF0pLHQudCkKQy5jbT1ILlFJKHMoWyIqOjpjbGFzcyIsIio6OmRp
-ciIsIio6OmRyYWdnYWJsZSIsIio6OmhpZGRlbiIsIio6OmlkIiwiKjo6aW5lcnQiLCIqOjppdGVtcHJv
-cCIsIio6Oml0ZW1yZWYiLCIqOjppdGVtc2NvcGUiLCIqOjpsYW5nIiwiKjo6c3BlbGxjaGVjayIsIio6
-OnRpdGxlIiwiKjo6dHJhbnNsYXRlIiwiQTo6YWNjZXNza2V5IiwiQTo6Y29vcmRzIiwiQTo6aHJlZmxh
-bmciLCJBOjpuYW1lIiwiQTo6c2hhcGUiLCJBOjp0YWJpbmRleCIsIkE6OnRhcmdldCIsIkE6OnR5cGUi
-LCJBUkVBOjphY2Nlc3NrZXkiLCJBUkVBOjphbHQiLCJBUkVBOjpjb29yZHMiLCJBUkVBOjpub2hyZWYi
-LCJBUkVBOjpzaGFwZSIsIkFSRUE6OnRhYmluZGV4IiwiQVJFQTo6dGFyZ2V0IiwiQVVESU86OmNvbnRy
-b2xzIiwiQVVESU86Omxvb3AiLCJBVURJTzo6bWVkaWFncm91cCIsIkFVRElPOjptdXRlZCIsIkFVRElP
-OjpwcmVsb2FkIiwiQkRPOjpkaXIiLCJCT0RZOjphbGluayIsIkJPRFk6OmJnY29sb3IiLCJCT0RZOjps
-aW5rIiwiQk9EWTo6dGV4dCIsIkJPRFk6OnZsaW5rIiwiQlI6OmNsZWFyIiwiQlVUVE9OOjphY2Nlc3Nr
-ZXkiLCJCVVRUT046OmRpc2FibGVkIiwiQlVUVE9OOjpuYW1lIiwiQlVUVE9OOjp0YWJpbmRleCIsIkJV
-VFRPTjo6dHlwZSIsIkJVVFRPTjo6dmFsdWUiLCJDQU5WQVM6OmhlaWdodCIsIkNBTlZBUzo6d2lkdGgi
-LCJDQVBUSU9OOjphbGlnbiIsIkNPTDo6YWxpZ24iLCJDT0w6OmNoYXIiLCJDT0w6OmNoYXJvZmYiLCJD
-T0w6OnNwYW4iLCJDT0w6OnZhbGlnbiIsIkNPTDo6d2lkdGgiLCJDT0xHUk9VUDo6YWxpZ24iLCJDT0xH
-Uk9VUDo6Y2hhciIsIkNPTEdST1VQOjpjaGFyb2ZmIiwiQ09MR1JPVVA6OnNwYW4iLCJDT0xHUk9VUDo6
-dmFsaWduIiwiQ09MR1JPVVA6OndpZHRoIiwiQ09NTUFORDo6Y2hlY2tlZCIsIkNPTU1BTkQ6OmNvbW1h
-bmQiLCJDT01NQU5EOjpkaXNhYmxlZCIsIkNPTU1BTkQ6OmxhYmVsIiwiQ09NTUFORDo6cmFkaW9ncm91
-cCIsIkNPTU1BTkQ6OnR5cGUiLCJEQVRBOjp2YWx1ZSIsIkRFTDo6ZGF0ZXRpbWUiLCJERVRBSUxTOjpv
-cGVuIiwiRElSOjpjb21wYWN0IiwiRElWOjphbGlnbiIsIkRMOjpjb21wYWN0IiwiRklFTERTRVQ6OmRp
-c2FibGVkIiwiRk9OVDo6Y29sb3IiLCJGT05UOjpmYWNlIiwiRk9OVDo6c2l6ZSIsIkZPUk06OmFjY2Vw
-dCIsIkZPUk06OmF1dG9jb21wbGV0ZSIsIkZPUk06OmVuY3R5cGUiLCJGT1JNOjptZXRob2QiLCJGT1JN
-OjpuYW1lIiwiRk9STTo6bm92YWxpZGF0ZSIsIkZPUk06OnRhcmdldCIsIkZSQU1FOjpuYW1lIiwiSDE6
-OmFsaWduIiwiSDI6OmFsaWduIiwiSDM6OmFsaWduIiwiSDQ6OmFsaWduIiwiSDU6OmFsaWduIiwiSDY6
-OmFsaWduIiwiSFI6OmFsaWduIiwiSFI6Om5vc2hhZGUiLCJIUjo6c2l6ZSIsIkhSOjp3aWR0aCIsIkhU
-TUw6OnZlcnNpb24iLCJJRlJBTUU6OmFsaWduIiwiSUZSQU1FOjpmcmFtZWJvcmRlciIsIklGUkFNRTo6
-aGVpZ2h0IiwiSUZSQU1FOjptYXJnaW5oZWlnaHQiLCJJRlJBTUU6Om1hcmdpbndpZHRoIiwiSUZSQU1F
-Ojp3aWR0aCIsIklNRzo6YWxpZ24iLCJJTUc6OmFsdCIsIklNRzo6Ym9yZGVyIiwiSU1HOjpoZWlnaHQi
-LCJJTUc6OmhzcGFjZSIsIklNRzo6aXNtYXAiLCJJTUc6Om5hbWUiLCJJTUc6OnVzZW1hcCIsIklNRzo6
-dnNwYWNlIiwiSU1HOjp3aWR0aCIsIklOUFVUOjphY2NlcHQiLCJJTlBVVDo6YWNjZXNza2V5IiwiSU5Q
-VVQ6OmFsaWduIiwiSU5QVVQ6OmFsdCIsIklOUFVUOjphdXRvY29tcGxldGUiLCJJTlBVVDo6YXV0b2Zv
-Y3VzIiwiSU5QVVQ6OmNoZWNrZWQiLCJJTlBVVDo6ZGlzYWJsZWQiLCJJTlBVVDo6aW5wdXRtb2RlIiwi
-SU5QVVQ6OmlzbWFwIiwiSU5QVVQ6Omxpc3QiLCJJTlBVVDo6bWF4IiwiSU5QVVQ6Om1heGxlbmd0aCIs
-IklOUFVUOjptaW4iLCJJTlBVVDo6bXVsdGlwbGUiLCJJTlBVVDo6bmFtZSIsIklOUFVUOjpwbGFjZWhv
-bGRlciIsIklOUFVUOjpyZWFkb25seSIsIklOUFVUOjpyZXF1aXJlZCIsIklOUFVUOjpzaXplIiwiSU5Q
-VVQ6OnN0ZXAiLCJJTlBVVDo6dGFiaW5kZXgiLCJJTlBVVDo6dHlwZSIsIklOUFVUOjp1c2VtYXAiLCJJ
-TlBVVDo6dmFsdWUiLCJJTlM6OmRhdGV0aW1lIiwiS0VZR0VOOjpkaXNhYmxlZCIsIktFWUdFTjo6a2V5
-dHlwZSIsIktFWUdFTjo6bmFtZSIsIkxBQkVMOjphY2Nlc3NrZXkiLCJMQUJFTDo6Zm9yIiwiTEVHRU5E
-OjphY2Nlc3NrZXkiLCJMRUdFTkQ6OmFsaWduIiwiTEk6OnR5cGUiLCJMSTo6dmFsdWUiLCJMSU5LOjpz
-aXplcyIsIk1BUDo6bmFtZSIsIk1FTlU6OmNvbXBhY3QiLCJNRU5VOjpsYWJlbCIsIk1FTlU6OnR5cGUi
-LCJNRVRFUjo6aGlnaCIsIk1FVEVSOjpsb3ciLCJNRVRFUjo6bWF4IiwiTUVURVI6Om1pbiIsIk1FVEVS
-Ojp2YWx1ZSIsIk9CSkVDVDo6dHlwZW11c3RtYXRjaCIsIk9MOjpjb21wYWN0IiwiT0w6OnJldmVyc2Vk
-IiwiT0w6OnN0YXJ0IiwiT0w6OnR5cGUiLCJPUFRHUk9VUDo6ZGlzYWJsZWQiLCJPUFRHUk9VUDo6bGFi
-ZWwiLCJPUFRJT046OmRpc2FibGVkIiwiT1BUSU9OOjpsYWJlbCIsIk9QVElPTjo6c2VsZWN0ZWQiLCJP
-UFRJT046OnZhbHVlIiwiT1VUUFVUOjpmb3IiLCJPVVRQVVQ6Om5hbWUiLCJQOjphbGlnbiIsIlBSRTo6
-d2lkdGgiLCJQUk9HUkVTUzo6bWF4IiwiUFJPR1JFU1M6Om1pbiIsIlBST0dSRVNTOjp2YWx1ZSIsIlNF
-TEVDVDo6YXV0b2NvbXBsZXRlIiwiU0VMRUNUOjpkaXNhYmxlZCIsIlNFTEVDVDo6bXVsdGlwbGUiLCJT
-RUxFQ1Q6Om5hbWUiLCJTRUxFQ1Q6OnJlcXVpcmVkIiwiU0VMRUNUOjpzaXplIiwiU0VMRUNUOjp0YWJp
-bmRleCIsIlNPVVJDRTo6dHlwZSIsIlRBQkxFOjphbGlnbiIsIlRBQkxFOjpiZ2NvbG9yIiwiVEFCTEU6
-OmJvcmRlciIsIlRBQkxFOjpjZWxscGFkZGluZyIsIlRBQkxFOjpjZWxsc3BhY2luZyIsIlRBQkxFOjpm
-cmFtZSIsIlRBQkxFOjpydWxlcyIsIlRBQkxFOjpzdW1tYXJ5IiwiVEFCTEU6OndpZHRoIiwiVEJPRFk6
-OmFsaWduIiwiVEJPRFk6OmNoYXIiLCJUQk9EWTo6Y2hhcm9mZiIsIlRCT0RZOjp2YWxpZ24iLCJURDo6
-YWJiciIsIlREOjphbGlnbiIsIlREOjpheGlzIiwiVEQ6OmJnY29sb3IiLCJURDo6Y2hhciIsIlREOjpj
-aGFyb2ZmIiwiVEQ6OmNvbHNwYW4iLCJURDo6aGVhZGVycyIsIlREOjpoZWlnaHQiLCJURDo6bm93cmFw
-IiwiVEQ6OnJvd3NwYW4iLCJURDo6c2NvcGUiLCJURDo6dmFsaWduIiwiVEQ6OndpZHRoIiwiVEVYVEFS
-RUE6OmFjY2Vzc2tleSIsIlRFWFRBUkVBOjphdXRvY29tcGxldGUiLCJURVhUQVJFQTo6Y29scyIsIlRF
-WFRBUkVBOjpkaXNhYmxlZCIsIlRFWFRBUkVBOjppbnB1dG1vZGUiLCJURVhUQVJFQTo6bmFtZSIsIlRF
-WFRBUkVBOjpwbGFjZWhvbGRlciIsIlRFWFRBUkVBOjpyZWFkb25seSIsIlRFWFRBUkVBOjpyZXF1aXJl
-ZCIsIlRFWFRBUkVBOjpyb3dzIiwiVEVYVEFSRUE6OnRhYmluZGV4IiwiVEVYVEFSRUE6OndyYXAiLCJU
-Rk9PVDo6YWxpZ24iLCJURk9PVDo6Y2hhciIsIlRGT09UOjpjaGFyb2ZmIiwiVEZPT1Q6OnZhbGlnbiIs
-IlRIOjphYmJyIiwiVEg6OmFsaWduIiwiVEg6OmF4aXMiLCJUSDo6Ymdjb2xvciIsIlRIOjpjaGFyIiwi
-VEg6OmNoYXJvZmYiLCJUSDo6Y29sc3BhbiIsIlRIOjpoZWFkZXJzIiwiVEg6OmhlaWdodCIsIlRIOjpu
-b3dyYXAiLCJUSDo6cm93c3BhbiIsIlRIOjpzY29wZSIsIlRIOjp2YWxpZ24iLCJUSDo6d2lkdGgiLCJU
-SEVBRDo6YWxpZ24iLCJUSEVBRDo6Y2hhciIsIlRIRUFEOjpjaGFyb2ZmIiwiVEhFQUQ6OnZhbGlnbiIs
-IlRSOjphbGlnbiIsIlRSOjpiZ2NvbG9yIiwiVFI6OmNoYXIiLCJUUjo6Y2hhcm9mZiIsIlRSOjp2YWxp
-Z24iLCJUUkFDSzo6ZGVmYXVsdCIsIlRSQUNLOjpraW5kIiwiVFJBQ0s6OmxhYmVsIiwiVFJBQ0s6OnNy
-Y2xhbmciLCJVTDo6Y29tcGFjdCIsIlVMOjp0eXBlIiwiVklERU86OmNvbnRyb2xzIiwiVklERU86Omhl
-aWdodCIsIlZJREVPOjpsb29wIiwiVklERU86Om1lZGlhZ3JvdXAiLCJWSURFTzo6bXV0ZWQiLCJWSURF
-Tzo6cHJlbG9hZCIsIlZJREVPOjp3aWR0aCJdKSx0LnMpCkMuVkM9SC5RSShzKFswLDAsNjU0OTAsNDUw
-NTUsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMubUs9SC5RSShzKFswLDAsMjY2MjQsMTAy
-Myw2NTUzNCwyMDQ3LDY1NTM0LDIwNDddKSx0LnQpCkMuU3E9SC5RSShzKFsiSEVBRCIsIkFSRUEiLCJC
-QVNFIiwiQkFTRUZPTlQiLCJCUiIsIkNPTCIsIkNPTEdST1VQIiwiRU1CRUQiLCJGUkFNRSIsIkZSQU1F
-U0VUIiwiSFIiLCJJTUFHRSIsIklNRyIsIklOUFVUIiwiSVNJTkRFWCIsIkxJTksiLCJNRVRBIiwiUEFS
-QU0iLCJTT1VSQ0UiLCJTVFlMRSIsIlRJVExFIiwiV0JSIl0pLHQucykKQy5kbj1ILlFJKHMoW10pLEgu
-TjAoImpkPExMPiIpKQpDLnhEPUguUUkocyhbXSksdC5zKQpDLmhVPUguUUkocyhbXSksdC5iKQpDLnRv
-PUguUUkocyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLnJr
-PUguUUkocyhbQy5BZCxDLm5lLEMubXksQy5yeCxDLndWLEMuZlJdKSxILk4wKCJqZDxINz4iKSkKQy5G
-Mz1ILlFJKHMoWzAsMCwyNDU3NiwxMDIzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLmVh
-PUguUUkocyhbMCwwLDMyNzU0LDExMjYzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLlpK
-PUguUUkocyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLldk
-PUguUUkocyhbMCwwLDY1NDkwLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLlF4
-PUguUUkocyhbImJpbmQiLCJpZiIsInJlZiIsInJlcGVhdCIsInN5bnRheCJdKSx0LnMpCkMuQkk9SC5R
-SShzKFsiQTo6aHJlZiIsIkFSRUE6OmhyZWYiLCJCTE9DS1FVT1RFOjpjaXRlIiwiQk9EWTo6YmFja2dy
-b3VuZCIsIkNPTU1BTkQ6Omljb24iLCJERUw6OmNpdGUiLCJGT1JNOjphY3Rpb24iLCJJTUc6OnNyYyIs
-IklOUFVUOjpzcmMiLCJJTlM6OmNpdGUiLCJROjpjaXRlIiwiVklERU86OnBvc3RlciJdKSx0LnMpCkMu
-RHg9bmV3IEguTFAoMCx7fSxDLnhELEguTjAoIkxQPHFVLHpNPGo4Pj4iKSkKQy5DTT1uZXcgSC5MUCgw
-LHt9LEMueEQsSC5OMCgiTFA8cVUscVU+IikpCkMuaUg9SC5RSShzKFtdKSxILk4wKCJqZDxHRD4iKSkK
-Qy5XTz1uZXcgSC5MUCgwLHt9LEMuaUgsSC5OMCgiTFA8R0QsQD4iKSkKQy5ZMj1uZXcgTC5POSgiTmF2
-aWdhdGlvblRyZWVOb2RlVHlwZS5kaXJlY3RvcnkiKQpDLnJmPW5ldyBMLk85KCJOYXZpZ2F0aW9uVHJl
-ZU5vZGVUeXBlLmZpbGUiKQpDLlRlPW5ldyBILnd2KCJjYWxsIikKQy5vRT1uZXcgUC5HWSghMSkKQy53
-UT1uZXcgUC5GeShudWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC56bT1udWxsCiQu
-eWo9MAokLldXPW51bGwKJC5pMD1udWxsCiQuTkY9bnVsbAokLlRYPW51bGwKJC54Nz1udWxsCiQubnc9
-bnVsbAokLnZ2PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4PW51bGwKJC5tZz1udWxsCiQuVUQ9
-ITEKJC5YMz1DLk5VCiQueGc9SC5RSShbXSxILk4wKCJqZDxNaD4iKSkKJC54bz1udWxsCiQuQk89bnVs
-bAokLmx0PW51bGwKJC5FVT1udWxsCiQub3I9UC5GbCh0Lk4sdC5ZKQokLklSPW51bGwKJC5JNj1udWxs
-CiQuRmY9bnVsbH0pKCk7KGZ1bmN0aW9uIGxhenlJbml0aWFsaXplcnMoKXt2YXIgcz1odW5rSGVscGVy
-cy5sYXp5RmluYWwscj1odW5rSGVscGVycy5sYXp5CnMoJCwiZmEiLCJ6IixmdW5jdGlvbigpe3JldHVy
-biBILllnKCJfJGRhcnRfZGFydENsb3N1cmUiKX0pCnMoJCwiS3EiLCJTbiIsZnVuY3Rpb24oKXtyZXR1
-cm4gSC5jTShILlM3KHsKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iJHJlY2VpdmVyJCJ9fSkpfSkK
-cygkLCJ4cSIsImxxIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoeyRtZXRob2QkOm51bGwsCnRv
-U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKX0pCnMoJCwiUjEiLCJOOSIsZnVu
-Y3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KG51bGwpKX0pCnMoJCwiZk4iLCJpSSIsZnVuY3Rpb24oKXty
-ZXR1cm4gSC5jTShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7
-bnVsbC4kbWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgp
-KX0pCnMoJCwicWkiLCJVTiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KHZvaWQgMCkpfSkKcygk
-LCJwdiIsIlpoIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dmFyICRhcmd1bWVudHNF
-eHByJD0iJGFyZ3VtZW50cyQiCnRyeXsodm9pZCAwKS4kbWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNh
-dGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwia3EiLCJyTiIsZnVuY3Rpb24oKXtyZXR1
-cm4gSC5jTShILk1qKG51bGwpKX0pCnMoJCwidHQiLCJjMyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShm
-dW5jdGlvbigpe3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0p
-CnMoJCwiZHQiLCJISyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILk1qKHZvaWQgMCkpfSkKcygkLCJB
-NyIsInIxIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5eyh2b2lkIDApLiRtZXRo
-b2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwiV2MiLCJ1dCIsZnVuY3Rpb24o
-KXtyZXR1cm4gUC5PaigpfSkKcygkLCJraCIsInJmIixmdW5jdGlvbigpe3JldHVybiBuZXcgUC54cigp
-LiQwKCl9KQpzKCQsImRIIiwiSEciLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQLk56KCkuJDAoKX0pCnMo
-JCwiaGoiLCJWNyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludDhBcnJheShILlhGKEguUUkoWy0yLC0y
+aGVpZ2h0CnMudG9TdHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkROKGEsYil7dmFyIHMscgppZihiPT1u
+dWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9T
+dHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09
+PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEu
+aGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0h
+MX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4gc30sCmdpTyhhKXt2YXIgcyxyLHEs
+cD1hLmxlZnQKcC50b1N0cmluZwpwPUMuQ0QuZ2lPKHApCnM9YS50b3AKcy50b1N0cmluZwpzPUMuQ0Qu
+Z2lPKHMpCnI9YS53aWR0aApyLnRvU3RyaW5nCnI9Qy5DRC5naU8ocikKcT1hLmhlaWdodApxLnRvU3Ry
+aW5nCnJldHVybiBXLnJFKHAscyxyLEMuQ0QuZ2lPKHEpKX0sCiRpdG46MX0KVy5uNy5wcm90b3R5cGU9
+ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLnd6LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiB0aGlz
+LmEubGVuZ3RofSwKcShhLGIpe3ZhciBzCkguSVooYikKcz10aGlzLmEKaWYoYjwwfHxiPj1zLmxlbmd0
+aClyZXR1cm4gSC5PSChzLGIpCnJldHVybiB0aGlzLiR0aS5jLmEoc1tiXSl9LApZNShhLGIsYyl7dGhp
+cy4kdGkuYy5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IGxpc3QiKSl9fQpXLmN2LnBy
+b3RvdHlwZT17CmdRZyhhKXtyZXR1cm4gbmV3IFcuaTcoYSl9LApnUChhKXtyZXR1cm4gbmV3IFcuSTQo
+YSl9LApzUChhLGIpe3ZhciBzCnQuTy5hKGIpCnM9dGhpcy5nUChhKQpzLlYxKDApCnMuRlYoMCxiKX0s
+CncoYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKRkYoYSl7dmFyIHM9ISFhLnNjcm9sbEludG9WaWV3SWZO
+ZWVkZWQKaWYocylhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Nyb2xsSW50b1ZpZXco
+KX0sCm56KGEsYixjLGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxkLGUpCnN3aXRjaChiLnRvTG93ZXJD
+YXNlKCkpe2Nhc2UiYmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2RlCnMudG9TdHJpbmcKSi5FaChzLHIs
+YSkKYnJlYWsKY2FzZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rlcwp0aGlzLm1LKGEscixzLmxlbmd0
+aD4wP3NbMF06bnVsbCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEuYXBwZW5kQ2hpbGQocikKYnJlYWsK
+Y2FzZSJhZnRlcmVuZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMscixhLm5leHRTaWJs
+aW5nKQpicmVhawpkZWZhdWx0OkgudihQLnhZKCJJbnZhbGlkIHBvc2l0aW9uICIrYixudWxsKSl9fSwK
+cjYoYSxiLGMsZCl7dmFyIHMscixxLHAKaWYoYz09bnVsbCl7aWYoZD09bnVsbCl7cz0kLmx0CmlmKHM9
+PW51bGwpe3M9SC5RSShbXSx0LnIpCnI9bmV3IFcudkQocykKQy5ObS5pKHMsVy5UdyhudWxsKSkKQy5O
+bS5pKHMsVy5CbCgpKQokLmx0PXIKZD1yfWVsc2UgZD1zfXM9JC5FVQppZihzPT1udWxsKXtzPW5ldyBX
+LktvKGQpCiQuRVU9cwpjPXN9ZWxzZXtzLmE9ZApjPXN9fWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBILmIo
+UC54WSgidmFsaWRhdG9yIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiB0cmVlU2FuaXRpemVyIGlzIG51bGwi
+LG51bGwpKQppZigkLnhvPT1udWxsKXtzPWRvY3VtZW50CnI9cy5pbXBsZW1lbnRhdGlvbgpyLnRvU3Ry
+aW5nCnI9Qy5tSC5EYyhyLCIiKQokLnhvPXIKJC5CTz1yLmNyZWF0ZVJhbmdlKCkKcj0kLnhvLmNyZWF0
+ZUVsZW1lbnQoImJhc2UiKQp0LmNSLmEocikKcz1zLmJhc2VVUkkKcy50b1N0cmluZwpyLmhyZWY9cwok
+LnhvLmhlYWQuYXBwZW5kQ2hpbGQocil9cz0kLnhvCmlmKHMuYm9keT09bnVsbCl7cj1zLmNyZWF0ZUVs
+ZW1lbnQoImJvZHkiKQpDLkJaLnNHUyhzLHQuay5hKHIpKX1zPSQueG8KaWYodC5rLmIoYSkpe3M9cy5i
+b2R5CnMudG9TdHJpbmcKcT1zfWVsc2V7cy50b1N0cmluZwpxPXMuY3JlYXRlRWxlbWVudChhLnRhZ05h
+bWUpCiQueG8uYm9keS5hcHBlbmRDaGlsZChxKX1pZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBp
+biB3aW5kb3cuUmFuZ2UucHJvdG90eXBlJiYhQy5ObS50ZyhDLlNxLGEudGFnTmFtZSkpeyQuQk8uc2Vs
+ZWN0Tm9kZUNvbnRlbnRzKHEpCnM9JC5CTwpzLnRvU3RyaW5nCnA9cy5jcmVhdGVDb250ZXh0dWFsRnJh
+Z21lbnQoYj09bnVsbD8ibnVsbCI6Yil9ZWxzZXtKLndmKHEsYikKcD0kLnhvLmNyZWF0ZURvY3VtZW50
+RnJhZ21lbnQoKQpmb3IoO3M9cS5maXJzdENoaWxkLHMhPW51bGw7KXAuYXBwZW5kQ2hpbGQocyl9aWYo
+cSE9PSQueG8uYm9keSlKLkx0KHEpCmMuUG4ocCkKZG9jdW1lbnQuYWRvcHROb2RlKHApCnJldHVybiBw
+fSwKQUgoYSxiLGMpe3JldHVybiB0aGlzLnI2KGEsYixjLG51bGwpfSwKc2hmKGEsYil7dGhpcy5ZQyhh
+LGIpfSwKcGsoYSxiLGMpe3RoaXMuc2E0KGEsbnVsbCkKYS5hcHBlbmRDaGlsZCh0aGlzLnI2KGEsYixu
+dWxsLGMpKX0sCllDKGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKc1JOKGEsYil7YS5pbm5l
+ckhUTUw9Yn0sCmducyhhKXtyZXR1cm4gYS50YWdOYW1lfSwKZ1ZsKGEpe3JldHVybiBuZXcgVy5DcShh
+LCJjbGljayIsITEsdC5RKX0sCiRpY3Y6MX0KVy5Ddi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5o
+LmIodC5BLmEoYSkpfSwKJFM6MjV9ClcuZWEucHJvdG90eXBlPXskaWVhOjF9ClcuRDAucHJvdG90eXBl
+PXsKT24oYSxiLGMsZCl7dC5idy5hKGMpCmlmKGMhPW51bGwpdGhpcy52KGEsYixjLGQpfSwKQihhLGIs
+Yyl7cmV0dXJuIHRoaXMuT24oYSxiLGMsbnVsbCl9LAp2KGEsYixjLGQpe3JldHVybiBhLmFkZEV2ZW50
+TGlzdGVuZXIoYixILnRSKHQuYncuYShjKSwxKSxkKX0sCiRpRDA6MX0KVy5oSC5wcm90b3R5cGU9eyRp
+aEg6MX0KVy5oNC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLmJyLnByb3RvdHlw
+ZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH19ClcuVmIucHJvdG90eXBlPXsKc0dTKGEsYil7YS5ib2R5
+PWJ9fQpXLmZKLnByb3RvdHlwZT17CmVvKGEsYixjLGQpe3JldHVybiBhLm9wZW4oYixjLCEwKX0sCiRp
+Zko6MX0KVy53YS5wcm90b3R5cGU9e30KVy5TZy5wcm90b3R5cGU9eyRpU2c6MX0KVy51OC5wcm90b3R5
+cGU9ewpnRHIoYSl7aWYoIm9yaWdpbiIgaW4gYSlyZXR1cm4gYS5vcmlnaW4KcmV0dXJuIGEucHJvdG9j
+b2wrIi8vIithLmhvc3R9LAp3KGEpe3JldHVybiBTdHJpbmcoYSl9LAokaXU4OjF9ClcuQWoucHJvdG90
+eXBlPXskaUFqOjF9ClcuZTcucHJvdG90eXBlPXsKZ3I4KGEpe3ZhciBzPXRoaXMuYSxyPXMuY2hpbGRO
+b2Rlcy5sZW5ndGgKaWYocj09PTApdGhyb3cgSC5iKFAuUFYoIk5vIGVsZW1lbnRzIikpCmlmKHI+MSl0
+aHJvdyBILmIoUC5QVigiTW9yZSB0aGFuIG9uZSBlbGVtZW50IikpCnM9cy5maXJzdENoaWxkCnMudG9T
+dHJpbmcKcmV0dXJuIHN9LApGVihhLGIpe3ZhciBzLHIscSxwLG8KdC5laC5hKGIpCmlmKGIgaW5zdGFu
+Y2VvZiBXLmU3KXtzPWIuYQpyPXRoaXMuYQppZihzIT09cilmb3IocT1zLmNoaWxkTm9kZXMubGVuZ3Ro
+LHA9MDtwPHE7KytwKXtvPXMuZmlyc3RDaGlsZApvLnRvU3RyaW5nCnIuYXBwZW5kQ2hpbGQobyl9cmV0
+dXJufWZvcihzPWIuZ20oYikscj10aGlzLmE7cy5GKCk7KXIuYXBwZW5kQ2hpbGQocy5nbCgpKX0sClk1
+KGEsYixjKXt2YXIgcyxyCnQuQS5hKGMpCnM9dGhpcy5hCnI9cy5jaGlsZE5vZGVzCmlmKGI8MHx8Yj49
+ci5sZW5ndGgpcmV0dXJuIEguT0gocixiKQpzLnJlcGxhY2VDaGlsZChjLHJbYl0pfSwKZ20oYSl7dmFy
+IHM9dGhpcy5hLmNoaWxkTm9kZXMKcmV0dXJuIG5ldyBXLlc5KHMscy5sZW5ndGgsSC56SyhzKS5DKCJX
+OTxHbS5FPiIpKX0sCmdBKGEpe3JldHVybiB0aGlzLmEuY2hpbGROb2Rlcy5sZW5ndGh9LApxKGEsYil7
+dmFyIHMKSC5JWihiKQpzPXRoaXMuYS5jaGlsZE5vZGVzCmlmKGI8MHx8Yj49cy5sZW5ndGgpcmV0dXJu
+IEguT0gocyxiKQpyZXR1cm4gc1tiXX19ClcuS1YucHJvdG90eXBlPXsKd2coYSl7dmFyIHM9YS5wYXJl
+bnROb2RlCmlmKHMhPW51bGwpcy5yZW1vdmVDaGlsZChhKX0sCkQ0KGEpe3ZhciBzCmZvcig7cz1hLmZp
+cnN0Q2hpbGQscyE9bnVsbDspYS5yZW1vdmVDaGlsZChzKX0sCncoYSl7dmFyIHM9YS5ub2RlVmFsdWUK
+cmV0dXJuIHM9PW51bGw/dGhpcy5VKGEpOnN9LApzYTQoYSxiKXthLnRleHRDb250ZW50PWJ9LAptSyhh
+LGIsYyl7cmV0dXJuIGEuaW5zZXJ0QmVmb3JlKGIsYyl9LAokaUtWOjF9ClcuQkgucHJvdG90eXBlPXsK
+Z0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0guSVooYikKaWYoYj4+PjAhPT1ifHxiPj1hLmxl
+bmd0aCl0aHJvdyBILmIoUC5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpyZXR1cm4gYVtiXX0sClk1KGEs
+YixjKXt0LkEuYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0
+YWJsZSBMaXN0LiIpKX0sCmd0SChhKXtpZihhLmxlbmd0aD4wKXJldHVybiBhWzBdCnRocm93IEguYihQ
+LlBWKCJObyBlbGVtZW50cyIpKX0sCkUoYSxiKXtpZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9I
+KGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGljWDoxLAokaXpNOjF9ClcuU04ucHJv
+dG90eXBlPXt9ClcuZXcucHJvdG90eXBlPXskaWV3OjF9ClcubHAucHJvdG90eXBlPXsKZ0EoYSl7cmV0
+dXJuIGEubGVuZ3RofX0KVy5UYi5wcm90b3R5cGU9ewpyNihhLGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVh
+dGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMu
+RFcoYSxiLGMsZCkKcz1XLlU5KCI8dGFibGU+IitILkVqKGIpKyI8L3RhYmxlPiIsYyxkKQpyPWRvY3Vt
+ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpuZXcgVy5lNyhyKS5GVigwLG5ldyBXLmU3KHMpKQpy
+ZXR1cm4gcn19ClcuSXYucHJvdG90eXBlPXsKcjYoYSxiLGMsZCl7dmFyIHMscgppZigiY3JlYXRlQ29u
+dGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEs
+YixjLGQpCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzPW5ldyBXLmU3KEMu
+SWUucjYocy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKSkKcz1uZXcgVy5lNyhzLmdyOChzKSkK
+bmV3IFcuZTcocikuRlYoMCxuZXcgVy5lNyhzLmdyOChzKSkpCnJldHVybiByfX0KVy5XUC5wcm90b3R5
+cGU9ewpyNihhLGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdp
+bmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1kb2N1bWVudApyPXMu
+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9bmV3IFcuZTcoQy5JZS5yNihzLmNyZWF0ZUVsZW1lbnQo
+InRhYmxlIiksYixjLGQpKQpuZXcgVy5lNyhyKS5GVigwLG5ldyBXLmU3KHMuZ3I4KHMpKSkKcmV0dXJu
+IHJ9fQpXLnlZLnByb3RvdHlwZT17CnBrKGEsYixjKXt2YXIgcyxyCnRoaXMuc2E0KGEsbnVsbCkKcz1h
+LmNvbnRlbnQKcy50b1N0cmluZwpKLmJUKHMpCnI9dGhpcy5yNihhLGIsbnVsbCxjKQphLmNvbnRlbnQu
+YXBwZW5kQ2hpbGQocil9LApZQyhhLGIpe3JldHVybiB0aGlzLnBrKGEsYixudWxsKX0sCiRpeVk6MX0K
+Vy53Ni5wcm90b3R5cGU9e30KVy5LNS5wcm90b3R5cGU9ewpQbyhhLGIsYyl7dmFyIHM9Vy5QMShhLm9w
+ZW4oYixjKSkKcmV0dXJuIHN9LApnbVcoYSl7cmV0dXJuIHQuRi5hKGEubG9jYXRpb24pfSwKdXMoYSxi
+KXtyZXR1cm4gYS5jb25maXJtKGIpfSwKJGlLNToxLAokaXY2OjF9ClcuQ20ucHJvdG90eXBlPXskaUNt
+OjF9ClcuQ1EucHJvdG90eXBlPXskaUNROjF9ClcudzQucHJvdG90eXBlPXsKdyhhKXt2YXIgcyxyPWEu
+bGVmdApyLnRvU3RyaW5nCnI9IlJlY3RhbmdsZSAoIitILkVqKHIpKyIsICIKcz1hLnRvcApzLnRvU3Ry
+aW5nCnM9citILkVqKHMpKyIpICIKcj1hLndpZHRoCnIudG9TdHJpbmcKcj1zK0guRWoocikrIiB4ICIK
+cz1hLmhlaWdodApzLnRvU3RyaW5nCnJldHVybiByK0guRWoocyl9LApETihhLGIpe3ZhciBzLHIKaWYo
+Yj09bnVsbClyZXR1cm4hMQppZih0LnEuYihiKSl7cz1hLmxlZnQKcy50b1N0cmluZwpyPWIubGVmdApy
+LnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEudG9wCnMudG9TdHJpbmcKcj1iLnRvcApyLnRvU3RyaW5nCmlm
+KHM9PT1yKXtzPWEud2lkdGgKcy50b1N0cmluZwpyPWIud2lkdGgKci50b1N0cmluZwppZihzPT09cil7
+cz1hLmhlaWdodApzLnRvU3RyaW5nCnI9Yi5oZWlnaHQKci50b1N0cmluZwpyPXM9PT1yCnM9cn1lbHNl
+IHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKcmV0dXJuIHN9LApnaU8oYSl7dmFyIHMs
+cixxLHA9YS5sZWZ0CnAudG9TdHJpbmcKcD1DLkNELmdpTyhwKQpzPWEudG9wCnMudG9TdHJpbmcKcz1D
+LkNELmdpTyhzKQpyPWEud2lkdGgKci50b1N0cmluZwpyPUMuQ0QuZ2lPKHIpCnE9YS5oZWlnaHQKcS50
+b1N0cmluZwpyZXR1cm4gVy5yRShwLHMscixDLkNELmdpTyhxKSl9fQpXLnJoLnByb3RvdHlwZT17CmdB
+KGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtILklaKGIpCmlmKGI+Pj4wIT09Ynx8Yj49YS5sZW5n
+dGgpdGhyb3cgSC5iKFAuQ2YoYixhLG51bGwsbnVsbCxudWxsKSkKcmV0dXJuIGFbYl19LApZNShhLGIs
+Yyl7dC5BLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBhc3NpZ24gZWxlbWVudCBvZiBpbW11dGFi
+bGUgTGlzdC4iKSl9LApFKGEsYil7aWYoYjwwfHxiPj1hLmxlbmd0aClyZXR1cm4gSC5PSChhLGIpCnJl
+dHVybiBhW2JdfSwKJGliUToxLAokaVhqOjEsCiRpY1g6MSwKJGl6TToxfQpXLmNmLnByb3RvdHlwZT17
+CksoYSxiKXt2YXIgcyxyLHEscCxvCnQuZUEuYShiKQpmb3Iocz10aGlzLmd2YygpLHI9cy5sZW5ndGgs
+cT10aGlzLmEscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3Ape289c1tw
+XQpiLiQyKG8sSC5uKHEuZ2V0QXR0cmlidXRlKG8pKSl9fSwKZ3ZjKCl7dmFyIHMscixxLHAsbyxuLG09
+dGhpcy5hLmF0dHJpYnV0ZXMKbS50b1N0cmluZwpzPUguUUkoW10sdC5zKQpmb3Iocj1tLmxlbmd0aCxx
+PXQuaDkscD0wO3A8cjsrK3Ape2lmKHA+PW0ubGVuZ3RoKXJldHVybiBILk9IKG0scCkKbz1xLmEobVtw
+XSkKaWYoby5uYW1lc3BhY2VVUkk9PW51bGwpe249by5uYW1lCm4udG9TdHJpbmcKQy5ObS5pKHMsbil9
+fXJldHVybiBzfSwKZ2wwKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aD09PTB9fQpXLmk3LnByb3Rv
+dHlwZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5oYXNBdHRyaWJ1dGUoYSkKcmV0dXJuIHN9LApxKGEsYil7
+cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoSC5uKGIpKX0sClk1KGEsYixjKXt0aGlzLmEuc2V0QXR0
+cmlidXRlKGIsYyl9LApnQShhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9fQpXLlN5LnByb3RvdHlw
+ZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5hLmhhc0F0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuT1UoYSkpCnJl
+dHVybiBzfSwKcShhLGIpe3JldHVybiB0aGlzLmEuYS5nZXRBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9V
+KEgubihiKSkpfSwKWTUoYSxiLGMpe3RoaXMuYS5hLnNldEF0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuT1Uo
+YiksYyl9LApLKGEsYil7dGhpcy5hLksoMCxuZXcgVy5LUyh0aGlzLHQuZUEuYShiKSkpfSwKZ3ZjKCl7
+dmFyIHM9SC5RSShbXSx0LnMpCnRoaXMuYS5LKDAsbmV3IFcuQTModGhpcyxzKSkKcmV0dXJuIHN9LApn
+QShhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9LApnbDAoYSl7cmV0dXJuIHRoaXMuZ3ZjKCkubGVu
+Z3RoPT09MH0sCnhxKGEpe3ZhciBzLHIscT1ILlFJKGEuc3BsaXQoIi0iKSx0LnMpCmZvcihzPTE7czxx
+Lmxlbmd0aDsrK3Mpe3I9cVtzXQppZihyLmxlbmd0aD4wKUMuTm0uWTUocSxzLHJbMF0udG9VcHBlckNh
+c2UoKStDLnhCLnluKHIsMSkpfXJldHVybiBDLk5tLmsocSwiIil9LApPVShhKXt2YXIgcyxyLHEscCxv
+CmZvcihzPWEubGVuZ3RoLHI9MCxxPSIiO3I8czsrK3Ipe3A9YVtyXQpvPXAudG9Mb3dlckNhc2UoKQpx
+PShwIT09byYmcj4wP3ErIi0iOnEpK299cmV0dXJuIHEuY2hhckNvZGVBdCgwKT09MD9xOnF9fQpXLktT
+LnByb3RvdHlwZT17CiQyKGEsYil7aWYoQy54Qi5uKGEsImRhdGEtIikpdGhpcy5iLiQyKHRoaXMuYS54
+cShDLnhCLnluKGEsNSkpLGIpfSwKJFM6OH0KVy5BMy5wcm90b3R5cGU9ewokMihhLGIpe2lmKEMueEIu
+bihhLCJkYXRhLSIpKUMuTm0uaSh0aGlzLmIsdGhpcy5hLnhxKEMueEIueW4oYSw1KSkpfSwKJFM6OH0K
+Vy5JNC5wcm90b3R5cGU9ewpEKCl7dmFyIHMscixxLHAsbz1QLkxzKHQuTikKZm9yKHM9dGhpcy5hLmNs
+YXNzTmFtZS5zcGxpdCgiICIpLHI9cy5sZW5ndGgscT0wO3E8cjsrK3Epe3A9Si5UMChzW3FdKQppZihw
+Lmxlbmd0aCE9PTApby5pKDAscCl9cmV0dXJuIG99LApYKGEpe3RoaXMuYS5jbGFzc05hbWU9dC5DLmEo
+YSkuaygwLCIgIil9LApnQShhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGh9LApnbDAoYSl7
+cmV0dXJuIHRoaXMuYS5jbGFzc0xpc3QubGVuZ3RoPT09MH0sCmdvcihhKXtyZXR1cm4gdGhpcy5hLmNs
+YXNzTGlzdC5sZW5ndGghPT0wfSwKVjEoYSl7dGhpcy5hLmNsYXNzTmFtZT0iIn0sCnRnKGEsYil7dmFy
+IHM9dGhpcy5hLmNsYXNzTGlzdC5jb250YWlucyhiKQpyZXR1cm4gc30sCmkoYSxiKXt2YXIgcyxyCkgu
+bihiKQpzPXRoaXMuYS5jbGFzc0xpc3QKcj1zLmNvbnRhaW5zKGIpCnMuYWRkKGIpCnJldHVybiFyfSwK
+UihhLGIpe3ZhciBzLHIscQppZih0eXBlb2YgYj09InN0cmluZyIpe3M9dGhpcy5hLmNsYXNzTGlzdApy
+PXMuY29udGFpbnMoYikKcy5yZW1vdmUoYikKcT1yfWVsc2UgcT0hMQpyZXR1cm4gcX0sCkZWKGEsYil7
+Vy5UTih0aGlzLmEsdC5PLmEoYikpfX0KVy5Gay5wcm90b3R5cGU9e30KVy5STy5wcm90b3R5cGU9e30K
+Vy5DcS5wcm90b3R5cGU9e30KVy54Qy5wcm90b3R5cGU9e30KVy52Ti5wcm90b3R5cGU9ewokMShhKXty
+ZXR1cm4gdGhpcy5hLiQxKHQuQi5hKGEpKX0sCiRTOjI3fQpXLkpRLnByb3RvdHlwZT17CkNZKGEpe3Zh
+ciBzCmlmKCQub3IuZ2wwKCQub3IpKXtmb3Iocz0wO3M8MjYyOysrcykkLm9yLlk1KDAsQy5jbVtzXSxX
+LnBTKCkpCmZvcihzPTA7czwxMjsrK3MpJC5vci5ZNSgwLEMuQklbc10sVy5WNCgpKX19LAppMChhKXty
+ZXR1cm4gJC5BTigpLnRnKDAsVy5yUyhhKSl9LApFYihhLGIsYyl7dmFyIHM9JC5vci5xKDAsVy5yUyhh
+KSsiOjoiK2IpCmlmKHM9PW51bGwpcz0kLm9yLnEoMCwiKjo6IitiKQppZihzPT1udWxsKXJldHVybiEx
+CnJldHVybiBILnA4KHMuJDQoYSxiLGMsdGhpcykpfSwKJGlrRjoxfQpXLkdtLnByb3RvdHlwZT17Cmdt
+KGEpe3JldHVybiBuZXcgVy5XOShhLHRoaXMuZ0EoYSksSC56SyhhKS5DKCJXOTxHbS5FPiIpKX19Clcu
+dkQucHJvdG90eXBlPXsKaTAoYSl7cmV0dXJuIEMuTm0uVnIodGhpcy5hLG5ldyBXLlV2KGEpKX0sCkVi
+KGEsYixjKXtyZXR1cm4gQy5ObS5Wcih0aGlzLmEsbmV3IFcuRWcoYSxiLGMpKX0sCiRpa0Y6MX0KVy5V
+di5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5mNi5hKGEpLmkwKHRoaXMuYSl9LAokUzoxNn0KVy5F
+Zy5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5mNi5hKGEpLkViKHRoaXMuYSx0aGlzLmIsdGhpcy5j
+KX0sCiRTOjE2fQpXLm02LnByb3RvdHlwZT17CkNZKGEsYixjLGQpe3ZhciBzLHIscQp0aGlzLmEuRlYo
+MCxjKQpzPWIuZXYoMCxuZXcgVy5FbygpKQpyPWIuZXYoMCxuZXcgVy5XaygpKQp0aGlzLmIuRlYoMCxz
+KQpxPXRoaXMuYwpxLkZWKDAsQy54RCkKcS5GVigwLHIpfSwKaTAoYSl7cmV0dXJuIHRoaXMuYS50Zygw
+LFcuclMoYSkpfSwKRWIoYSxiLGMpe3ZhciBzPXRoaXMscj1XLnJTKGEpLHE9cy5jCmlmKHEudGcoMCxy
+KyI6OiIrYikpcmV0dXJuIHMuZC5EdChjKQplbHNlIGlmKHEudGcoMCwiKjo6IitiKSlyZXR1cm4gcy5k
+LkR0KGMpCmVsc2V7cT1zLmIKaWYocS50ZygwLHIrIjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHEudGco
+MCwiKjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHEudGcoMCxyKyI6OioiKSlyZXR1cm4hMAplbHNlIGlm
+KHEudGcoMCwiKjo6KiIpKXJldHVybiEwfXJldHVybiExfSwKJGlrRjoxfQpXLkVvLnByb3RvdHlwZT17
+CiQxKGEpe3JldHVybiFDLk5tLnRnKEMuQkksSC5uKGEpKX0sCiRTOjZ9ClcuV2sucHJvdG90eXBlPXsK
+JDEoYSl7cmV0dXJuIEMuTm0udGcoQy5CSSxILm4oYSkpfSwKJFM6Nn0KVy5jdC5wcm90b3R5cGU9ewpF
+YihhLGIsYyl7aWYodGhpcy5qRihhLGIsYykpcmV0dXJuITAKaWYoYj09PSJ0ZW1wbGF0ZSImJmM9PT0i
+IilyZXR1cm4hMAppZihhLmdldEF0dHJpYnV0ZSgidGVtcGxhdGUiKT09PSIiKXJldHVybiB0aGlzLmUu
+dGcoMCxiKQpyZXR1cm4hMX19ClcuSUEucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIlRFTVBMQVRFOjoi
+K0gubihhKX0sCiRTOjJ9ClcuT3cucHJvdG90eXBlPXsKaTAoYSl7dmFyIHMKaWYodC5hTy5iKGEpKXJl
+dHVybiExCnM9dC5nNy5iKGEpCmlmKHMmJlcuclMoYSk9PT0iZm9yZWlnbk9iamVjdCIpcmV0dXJuITEK
+aWYocylyZXR1cm4hMApyZXR1cm4hMX0sCkViKGEsYixjKXtpZihiPT09ImlzInx8Qy54Qi5uKGIsIm9u
+IikpcmV0dXJuITEKcmV0dXJuIHRoaXMuaTAoYSl9LAokaWtGOjF9ClcuVzkucHJvdG90eXBlPXsKRigp
+e3ZhciBzPXRoaXMscj1zLmMrMSxxPXMuYgppZihyPHEpe3Muc3AoSi54OShzLmEscikpCnMuYz1yCnJl
+dHVybiEwfXMuc3AobnVsbCkKcy5jPXEKcmV0dXJuITF9LApnbCgpe3JldHVybiB0aGlzLiR0aS5jLmEo
+dGhpcy5kKX0sCnNwKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9ClcuZFcu
+cHJvdG90eXBlPXskaUQwOjEsJGl2NjoxfQpXLm1rLnByb3RvdHlwZT17JGl5MDoxfQpXLktvLnByb3Rv
+dHlwZT17ClBuKGEpe3ZhciBzLHI9bmV3IFcuZm0odGhpcykKZG97cz10aGlzLmIKci4kMihhLG51bGwp
+fXdoaWxlKHMhPT10aGlzLmIpfSwKRVAoYSxiKXsrK3RoaXMuYgppZihiPT1udWxsfHxiIT09YS5wYXJl
+bnROb2RlKUouTHQoYSkKZWxzZSBiLnJlbW92ZUNoaWxkKGEpfSwKSTQoYSxiKXt2YXIgcyxyLHEscCxv
+LG49ITAsbT1udWxsLGw9bnVsbAp0cnl7bT1KLmlnKGEpCmw9bS5hLmdldEF0dHJpYnV0ZSgiaXMiKQp0
+LmguYShhKQpzPWZ1bmN0aW9uKGMpe2lmKCEoYy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2Rl
+TWFwKSlyZXR1cm4gdHJ1ZQppZihjLmlkPT0ibGFzdENoaWxkInx8Yy5uYW1lPT0ibGFzdENoaWxkInx8
+Yy5pZD09InByZXZpb3VzU2libGluZyJ8fGMubmFtZT09InByZXZpb3VzU2libGluZyJ8fGMuaWQ9PSJj
+aGlsZHJlbiJ8fGMubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1ZQp2YXIgaz1jLmNoaWxkTm9kZXMK
+aWYoYy5sYXN0Q2hpbGQmJmMubGFzdENoaWxkIT09a1trLmxlbmd0aC0xXSlyZXR1cm4gdHJ1ZQppZihj
+LmNoaWxkcmVuKWlmKCEoYy5jaGlsZHJlbiBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9ufHxjLmNoaWxk
+cmVuIGluc3RhbmNlb2YgTm9kZUxpc3QpKXJldHVybiB0cnVlCnZhciBqPTAKaWYoYy5jaGlsZHJlbilq
+PWMuY2hpbGRyZW4ubGVuZ3RoCmZvcih2YXIgaT0wO2k8ajtpKyspe3ZhciBoPWMuY2hpbGRyZW5baV0K
+aWYoaC5pZD09ImF0dHJpYnV0ZXMifHxoLm5hbWU9PSJhdHRyaWJ1dGVzInx8aC5pZD09Imxhc3RDaGls
+ZCJ8fGgubmFtZT09Imxhc3RDaGlsZCJ8fGguaWQ9PSJwcmV2aW91c1NpYmxpbmcifHxoLm5hbWU9PSJw
+cmV2aW91c1NpYmxpbmcifHxoLmlkPT0iY2hpbGRyZW4ifHxoLm5hbWU9PSJjaGlsZHJlbiIpcmV0dXJu
+IHRydWV9cmV0dXJuIGZhbHNlfShhKQpuPUgub1Qocyk/ITA6IShhLmF0dHJpYnV0ZXMgaW5zdGFuY2Vv
+ZiBOYW1lZE5vZGVNYXApfWNhdGNoKHApe0guUnUocCl9cj0iZWxlbWVudCB1bnByaW50YWJsZSIKdHJ5
+e3I9Si53KGEpfWNhdGNoKHApe0guUnUocCl9dHJ5e3E9Vy5yUyhhKQp0aGlzLmtSKHQuaC5hKGEpLGIs
+bixyLHEsdC5mLmEobSksSC5rKGwpKX1jYXRjaChwKXtpZihILlJ1KHApIGluc3RhbmNlb2YgUC5BVCl0
+aHJvdyBwCmVsc2V7dGhpcy5FUChhLGIpCndpbmRvdwpvPSJSZW1vdmluZyBjb3JydXB0ZWQgZWxlbWVu
+dCAiK0guRWoocikKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndh
+cm4obyl9fX0sCmtSKGEsYixjLGQsZSxmLGcpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMKaWYoYyl7bS5F
+UChhLGIpCndpbmRvdwpzPSJSZW1vdmluZyBlbGVtZW50IGR1ZSB0byBjb3JydXB0ZWQgYXR0cmlidXRl
+cyBvbiA8IitkKyI+IgppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUu
+d2FybihzKQpyZXR1cm59aWYoIW0uYS5pMChhKSl7bS5FUChhLGIpCndpbmRvdwpzPSJSZW1vdmluZyBk
+aXNhbGxvd2VkIGVsZW1lbnQgPCIrZSsiPiBmcm9tICIrSC5FaihiKQppZih0eXBlb2YgY29uc29sZSE9
+InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihzKQpyZXR1cm59aWYoZyE9bnVsbClpZighbS5h
+LkViKGEsImlzIixnKSl7bS5FUChhLGIpCndpbmRvdwpzPSJSZW1vdmluZyBkaXNhbGxvd2VkIHR5cGUg
+ZXh0ZW5zaW9uIDwiK2UrJyBpcz0iJytnKyciPicKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQi
+KXdpbmRvdy5jb25zb2xlLndhcm4ocykKcmV0dXJufXM9Zi5ndmMoKQpyPUguUUkocy5zbGljZSgwKSxI
+LnQ2KHMpKQpmb3IocT1mLmd2YygpLmxlbmd0aC0xLHM9Zi5hO3E+PTA7LS1xKXtpZihxPj1yLmxlbmd0
+aClyZXR1cm4gSC5PSChyLHEpCnA9cltxXQpvPW0uYQpuPUouY0gocCkKSC5uKHApCmlmKCFvLkViKGEs
+bixILm4ocy5nZXRBdHRyaWJ1dGUocCkpKSl7d2luZG93Cm89IlJlbW92aW5nIGRpc2FsbG93ZWQgYXR0
+cmlidXRlIDwiK2UrIiAiK3ArJz0iJytILkVqKHMuZ2V0QXR0cmlidXRlKHApKSsnIj4nCmlmKHR5cGVv
+ZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKG8pCnMucmVtb3ZlQXR0cmli
+dXRlKHApfX1pZih0LmFXLmIoYSkpe3M9YS5jb250ZW50CnMudG9TdHJpbmcKbS5QbihzKX19LAokaW9u
+OjF9ClcuZm0ucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEKc3dpdGNo
+KGEubm9kZVR5cGUpe2Nhc2UgMTptLkk0KGEsYikKYnJlYWsKY2FzZSA4OmNhc2UgMTE6Y2FzZSAzOmNh
+c2UgNDpicmVhawpkZWZhdWx0Om0uRVAoYSxiKX1zPWEubGFzdENoaWxkCmZvcihxPXQuQTtzIT1udWxs
+Oyl7cj1udWxsCnRyeXtyPXMucHJldmlvdXNTaWJsaW5nCmlmKHIhPW51bGwpe3A9ci5uZXh0U2libGlu
+ZwpvPXMKbz1wPT1udWxsP28hPW51bGw6cCE9PW8KcD1vfWVsc2UgcD0hMQppZihwKXtwPVAuUFYoIkNv
+cnJ1cHQgSFRNTCIpCnRocm93IEguYihwKX19Y2F0Y2gobil7SC5SdShuKQpwPXEuYShzKTsrK20uYgpv
+PXAucGFyZW50Tm9kZQppZihhIT09byl7aWYobyE9bnVsbClvLnJlbW92ZUNoaWxkKHApfWVsc2UgYS5y
+ZW1vdmVDaGlsZChwKQpzPW51bGwKcj1hLmxhc3RDaGlsZH1pZihzIT1udWxsKXRoaXMuJDIocyxhKQpz
+PXJ9fSwKJFM6MzB9ClcuTGUucHJvdG90eXBlPXt9ClcuSzcucHJvdG90eXBlPXt9ClcuckIucHJvdG90
+eXBlPXt9ClcuWFcucHJvdG90eXBlPXt9Clcub2EucHJvdG90eXBlPXt9ClAuaUoucHJvdG90eXBlPXsK
+VkgoYSl7dmFyIHMscj10aGlzLmEscT1yLmxlbmd0aApmb3Iocz0wO3M8cTsrK3MpaWYocltzXT09PWEp
+cmV0dXJuIHMKQy5ObS5pKHIsYSkKQy5ObS5pKHRoaXMuYixudWxsKQpyZXR1cm4gcX0sClB2KGEpe3Zh
+ciBzLHIscSxwPXRoaXMsbz17fQppZihhPT1udWxsKXJldHVybiBhCmlmKEguclEoYSkpcmV0dXJuIGEK
+aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4g
+YQppZihhIGluc3RhbmNlb2YgUC5pUClyZXR1cm4gbmV3IERhdGUoYS5hKQppZih0LmZ2LmIoYSkpdGhy
+b3cgSC5iKFAuU1koInN0cnVjdHVyZWQgY2xvbmUgb2YgUmVnRXhwIikpCmlmKHQuYzguYihhKSlyZXR1
+cm4gYQppZih0LncuYihhKSlyZXR1cm4gYQppZih0LkkuYihhKSlyZXR1cm4gYQpzPXQuZEUuYihhKXx8
+ITEKaWYocylyZXR1cm4gYQppZih0LmYuYihhKSl7cj1wLlZIKGEpCnM9cC5iCmlmKHI+PXMubGVuZ3Ro
+KXJldHVybiBILk9IKHMscikKcT1vLmE9c1tyXQppZihxIT1udWxsKXJldHVybiBxCnE9e30Kby5hPXEK
+Qy5ObS5ZNShzLHIscSkKYS5LKDAsbmV3IFAuRTIobyxwKSkKcmV0dXJuIG8uYX1pZih0LmouYihhKSl7
+cj1wLlZIKGEpCm89cC5iCmlmKHI+PW8ubGVuZ3RoKXJldHVybiBILk9IKG8scikKcT1vW3JdCmlmKHEh
+PW51bGwpcmV0dXJuIHEKcmV0dXJuIHAuZWsoYSxyKX1pZih0LmVILmIoYSkpe3I9cC5WSChhKQpzPXAu
+YgppZihyPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLHIpCnE9by5iPXNbcl0KaWYocSE9bnVsbClyZXR1
+cm4gcQpxPXt9Cm8uYj1xCkMuTm0uWTUocyxyLHEpCnAuaW0oYSxuZXcgUC5qZyhvLHApKQpyZXR1cm4g
+by5ifXRocm93IEguYihQLlNZKCJzdHJ1Y3R1cmVkIGNsb25lIG9mIG90aGVyIHR5cGUiKSl9LAplayhh
+LGIpe3ZhciBzLHI9Si5VNihhKSxxPXIuZ0EoYSkscD1uZXcgQXJyYXkocSkKQy5ObS5ZNSh0aGlzLmIs
+YixwKQpmb3Iocz0wO3M8cTsrK3MpQy5ObS5ZNShwLHMsdGhpcy5QdihyLnEoYSxzKSkpCnJldHVybiBw
+fX0KUC5FMi5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYS5hW2FdPXRoaXMuYi5QdihiKX0sCiRTOjMx
+fQpQLmpnLnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLmJbYV09dGhpcy5iLlB2KGIpfSwKJFM6MzJ9
+ClAuQmYucHJvdG90eXBlPXsKaW0oYSxiKXt2YXIgcyxyLHEscAp0LmI4LmEoYikKZm9yKHM9T2JqZWN0
+LmtleXMoYSkscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1zW3FdCmIuJDIocCxhW3BdKX19fQpQLkFz
+LnByb3RvdHlwZT17ClYoYSl7dmFyIHMKSC5uKGEpCnM9JC5oRygpLmIKaWYocy50ZXN0KGEpKXJldHVy
+biBhCnRocm93IEguYihQLkwzKGEsInZhbHVlIiwiTm90IGEgdmFsaWQgY2xhc3MgdG9rZW4iKSl9LAp3
+KGEpe3JldHVybiB0aGlzLkQoKS5rKDAsIiAiKX0sCmdtKGEpe3ZhciBzPXRoaXMuRCgpCnJldHVybiBQ
+LnJqKHMscy5yLEguTGgocykuYyl9LApnbDAoYSl7cmV0dXJuIHRoaXMuRCgpLmE9PT0wfSwKZ29yKGEp
+e3JldHVybiB0aGlzLkQoKS5hIT09MH0sCmdBKGEpe3JldHVybiB0aGlzLkQoKS5hfSwKdGcoYSxiKXt0
+aGlzLlYoYikKcmV0dXJuIHRoaXMuRCgpLnRnKDAsYil9LAppKGEsYil7dmFyIHMKSC5uKGIpCnRoaXMu
+VihiKQpzPXRoaXMuT1MobmV3IFAuR0UoYikpCnJldHVybiBILnA4KHM9PW51bGw/ITE6cyl9LApSKGEs
+Yil7dmFyIHMscgppZih0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuITEKdGhpcy5WKGIpCnM9dGhpcy5E
+KCkKcj1zLlIoMCxiKQp0aGlzLlgocykKcmV0dXJuIHJ9LApGVihhLGIpe3RoaXMuT1MobmV3IFAuTjco
+dGhpcyx0Lk8uYShiKSkpfSwKZVIoYSxiKXt2YXIgcz10aGlzLkQoKQpyZXR1cm4gSC5iSyhzLGIsSC5M
+aChzKS5DKCJsZi5FIikpfSwKRShhLGIpe3JldHVybiB0aGlzLkQoKS5FKDAsYil9LApWMShhKXt0aGlz
+Lk9TKG5ldyBQLnVRKCkpfSwKT1MoYSl7dmFyIHMscgp0LmJVLmEoYSkKcz10aGlzLkQoKQpyPWEuJDEo
+cykKdGhpcy5YKHMpCnJldHVybiByfX0KUC5HRS5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5DLmEo
+YSkuaSgwLHRoaXMuYSl9LAokUzozM30KUC5ONy5wcm90b3R5cGU9ewokMShhKXt2YXIgcz10aGlzLmIs
+cj1ILnQ2KHMpCnJldHVybiB0LkMuYShhKS5GVigwLG5ldyBILmxKKHMsci5DKCJxVSgxKSIpLmEodGhp
+cy5hLmd1TSgpKSxyLkMoImxKPDEscVU+IikpKX0sCiRTOjEyfQpQLnVRLnByb3RvdHlwZT17CiQxKGEp
+e3QuQy5hKGEpCmlmKGEuYT4wKXthLmI9YS5jPWEuZD1hLmU9YS5mPW51bGwKYS5hPTAKYS5TKCl9cmV0
+dXJuIG51bGx9LAokUzoxMn0KUC5oRi5wcm90b3R5cGU9eyRpaEY6MX0KUC5EVi5wcm90b3R5cGU9ewok
+MShhKXt2YXIgcwp0LlkuYShhKQpzPWZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1
+cm4gYihjLGQsdGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9fShQLlI0
+LGEsITEpClAuRG0ocywkLnooKSxhKQpyZXR1cm4gc30sCiRTOjR9ClAuUEMucHJvdG90eXBlPXsKJDEo
+YSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9LAokUzo0fQpQLlFTLnByb3RvdHlwZT17CiQxKGEpe3JldHVy
+biBuZXcgUC5yNyh0LksuYShhKSl9LAokUzo0NH0KUC5ucC5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4g
+bmV3IFAuVHoodC5LLmEoYSksdC5hbSl9LAokUzozNn0KUC5VdC5wcm90b3R5cGU9ewokMShhKXtyZXR1
+cm4gbmV3IFAuRTQodC5LLmEoYSkpfSwKJFM6Mzd9ClAuRTQucHJvdG90eXBlPXsKcShhLGIpe2lmKHR5
+cGVvZiBiIT0ic3RyaW5nIiYmdHlwZW9mIGIhPSJudW1iZXIiKXRocm93IEguYihQLnhZKCJwcm9wZXJ0
+eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIixudWxsKSkKcmV0dXJuIFAuZFUodGhpcy5hW2JdKX0sClk1
+KGEsYixjKXtpZih0eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBILmIo
+UC54WSgicHJvcGVydHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIsbnVsbCkpCnRoaXMuYVtiXT1QLndZ
+KGMpfSwKRE4oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgUC5FNCYm
+dGhpcy5hPT09Yi5hfSwKdyhhKXt2YXIgcyxyCnRyeXtzPVN0cmluZyh0aGlzLmEpCnJldHVybiBzfWNh
+dGNoKHIpe0guUnUocikKcz10aGlzLnhiKDApCnJldHVybiBzfX0sClY3KGEsYil7dmFyIHMscj10aGlz
+LmEKaWYoYj09bnVsbClzPW51bGwKZWxzZXtzPUgudDYoYikKcz1QLlBXKG5ldyBILmxKKGIscy5DKCJA
+KDEpIikuYShQLmlHKCkpLHMuQygibEo8MSxAPiIpKSwhMCx0LnopfXJldHVybiBQLmRVKHJbYV0uYXBw
+bHkocixzKSl9LApnaU8oYSl7cmV0dXJuIDB9fQpQLnI3LnByb3RvdHlwZT17fQpQLlR6LnByb3RvdHlw
+ZT17CmNQKGEpe3ZhciBzPXRoaXMscj1hPDB8fGE+PXMuZ0EocykKaWYocil0aHJvdyBILmIoUC5URShh
+LDAscy5nQShzKSxudWxsLG51bGwpKX0sCnEoYSxiKXtpZihILm9rKGIpKXRoaXMuY1AoYikKcmV0dXJu
+IHRoaXMuJHRpLmMuYSh0aGlzLlVyKDAsYikpfSwKWTUoYSxiLGMpe3RoaXMuY1AoYikKdGhpcy5iaCgw
+LGIsYyl9LApnQShhKXt2YXIgcz10aGlzLmEubGVuZ3RoCmlmKHR5cGVvZiBzPT09Im51bWJlciImJnM+
+Pj4wPT09cylyZXR1cm4gcwp0aHJvdyBILmIoUC5QVigiQmFkIEpzQXJyYXkgbGVuZ3RoIikpfSwKJGli
+UToxLAokaWNYOjEsCiRpek06MX0KUC52Zy5wcm90b3R5cGU9ewpZNShhLGIsYyl7cmV0dXJuIHRoaXMu
+ZTQoMCxiLGMpfX0KUC5uZC5wcm90b3R5cGU9eyRpbmQ6MX0KUC5LZS5wcm90b3R5cGU9ewpEKCl7dmFy
+IHMscixxLHAsbz10aGlzLmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpLG49UC5Mcyh0Lk4pCmlmKG89PW51
+bGwpcmV0dXJuIG4KZm9yKHM9by5zcGxpdCgiICIpLHI9cy5sZW5ndGgscT0wO3E8cjsrK3Epe3A9Si5U
+MChzW3FdKQppZihwLmxlbmd0aCE9PTApbi5pKDAscCl9cmV0dXJuIG59LApYKGEpe3RoaXMuYS5zZXRB
+dHRyaWJ1dGUoImNsYXNzIixhLmsoMCwiICIpKX19ClAuaGkucHJvdG90eXBlPXsKZ1AoYSl7cmV0dXJu
+IG5ldyBQLktlKGEpfSwKc2hmKGEsYil7dGhpcy5ZQyhhLGIpfSwKcjYoYSxiLGMsZCl7dmFyIHMscixx
+LHAsbyxuCmlmKGQ9PW51bGwpe3M9SC5RSShbXSx0LnIpCmQ9bmV3IFcudkQocykKQy5ObS5pKHMsVy5U
+dyhudWxsKSkKQy5ObS5pKHMsVy5CbCgpKQpDLk5tLmkocyxuZXcgVy5PdygpKX1jPW5ldyBXLktvKGQp
+CnI9JzxzdmcgdmVyc2lvbj0iMS4xIj4nK0guRWooYikrIjwvc3ZnPiIKcz1kb2N1bWVudApxPXMuYm9k
+eQpxLnRvU3RyaW5nCnA9Qy5SWS5BSChxLHIsYykKbz1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpz
+PW5ldyBXLmU3KHApCm49cy5ncjgocykKZm9yKDtzPW4uZmlyc3RDaGlsZCxzIT1udWxsOylvLmFwcGVu
+ZENoaWxkKHMpCnJldHVybiBvfSwKbnooYSxiLGMsZCxlKXt0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGlu
+dm9rZSBpbnNlcnRBZGphY2VudEh0bWwgb24gU1ZHLiIpKX0sCmdWbChhKXtyZXR1cm4gbmV3IFcuQ3Eo
+YSwiY2xpY2siLCExLHQuUSl9LAokaWhpOjF9ClUuZDIucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEs
+cCxvPXRoaXMsbj10Lk4sbT10LlgsbD1QLkZsKG4sbSksaz1vLmEKaWYoayE9bnVsbCl7cz1ILlFJKFtd
+LHQuZCkKZm9yKHI9ay5sZW5ndGgscT0wO3E8ay5sZW5ndGg7ay5sZW5ndGg9PT1yfHwoMCxILmxrKShr
+KSwrK3Epe3A9a1txXQpzLnB1c2goUC5FRihbImRlc2NyaXB0aW9uIixwLmEsImhyZWYiLHAuYl0sbixt
+KSl9bC5ZNSgwLCJlZGl0cyIscyl9bC5ZNSgwLCJleHBsYW5hdGlvbiIsby5iKQpsLlk1KDAsImxpbmUi
+LG8uYykKbC5ZNSgwLCJkaXNwbGF5UGF0aCIsby5kKQpsLlk1KDAsInVyaVBhdGgiLG8uZSkKbj1vLmYK
+aWYobiE9bnVsbCl7bT1ILlFJKFtdLHQuZCkKZm9yKGs9bi5sZW5ndGgscT0wO3E8bi5sZW5ndGg7bi5s
+ZW5ndGg9PT1rfHwoMCxILmxrKShuKSwrK3EpbS5wdXNoKG5bcV0uTHQoKSkKbC5ZNSgwLCJ0cmFjZXMi
+LG0pfXJldHVybiBsfX0KVS5TZS5wcm90b3R5cGU9ewpMdCgpe3JldHVybiBQLkVGKFsiZGVzY3JpcHRp
+b24iLHRoaXMuYSwiaHJlZiIsdGhpcy5iXSx0Lk4sdC5YKX19ClUuTWwucHJvdG90eXBlPXsKTHQoKXty
+ZXR1cm4gUC5FRihbImhyZWYiLHRoaXMuYSwibGluZSIsdGhpcy5iLCJwYXRoIix0aGlzLmNdLHQuTix0
+LlgpfX0KVS55RC5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxwPUguUUkoW10sdC5kKQpmb3Iocz10
+aGlzLmIscj1zLmxlbmd0aCxxPTA7cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsr
+cSlwLnB1c2goc1txXS5MdCgpKQpyZXR1cm4gUC5FRihbImRlc2NyaXB0aW9uIix0aGlzLmEsImVudHJp
+ZXMiLHBdLHQuTix0LlgpfX0KVS53Yi5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxwPXRoaXMsbz1Q
+LkZsKHQuTix0LlgpCm8uWTUoMCwiZGVzY3JpcHRpb24iLHAuYSkKcz1wLmIKaWYocyE9bnVsbClvLlk1
+KDAsImZ1bmN0aW9uIixzKQpzPXAuYwppZihzIT1udWxsKW8uWTUoMCwibGluayIscy5MdCgpKQpzPXAu
+ZAppZihzLmxlbmd0aCE9PTApe3I9SC50NihzKQpxPXIuQygibEo8MSxaMDxxVSxNaD8+PiIpCm8uWTUo
+MCwiaGludEFjdGlvbnMiLFAuWTEobmV3IEgubEoocyxyLkMoIlowPHFVLE1oPz4oMSkiKS5hKG5ldyBV
+LmIwKCkpLHEpLCEwLHEuQygiYUwuRSIpKSl9cmV0dXJuIG99fQpVLmFOLnByb3RvdHlwZT17CiQxKGEp
+e3JldHVybiBSLm56KHQuRy5hKGEpKX0sCiRTOjM4fQpVLmIwLnByb3RvdHlwZT17CiQxKGEpe3JldHVy
+biB0LkouYShhKS5MdCgpfSwKJFM6Mzl9CkIuajgucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gUC5FRihb
+ImxpbmUiLHRoaXMuYSwiZXhwbGFuYXRpb24iLHRoaXMuYiwib2Zmc2V0Iix0aGlzLmNdLHQuTix0Llgp
+fX0KQi5xcC5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcyxrPXQuTixqPVAu
+Rmwoayx0LngpCmZvcihzPWwuZCxzPXMuZ1B1KHMpLHM9cy5nbShzKSxyPXQuWCxxPXQuZDtzLkYoKTsp
+e3A9cy5nbCgpCm89cC5hCm49SC5RSShbXSxxKQpmb3IocD1KLklUKHAuYik7cC5GKCk7KXttPXAuZ2wo
+KQpuLnB1c2goUC5FRihbImxpbmUiLG0uYSwiZXhwbGFuYXRpb24iLG0uYiwib2Zmc2V0IixtLmNdLGss
+cikpfWouWTUoMCxvLG4pfXJldHVybiBQLkVGKFsicmVnaW9ucyIsbC5hLCJuYXZpZ2F0aW9uQ29udGVu
+dCIsbC5iLCJzb3VyY2VDb2RlIixsLmMsImVkaXRzIixqXSxrLHIpfX0KVC5tUS5wcm90b3R5cGU9e30K
+TC5lLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG8sbixtCnQuQi5hKGEpCnM9dC5GCnI9cy5h
+KHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKcT1MLkc2KHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYp
+CnA9TC5hSyhzLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQpMLkdlKCkKaWYociE9PSIvIil7cz1kb2N1
+bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIpLnRleHRDb250ZW50CnMudG9TdHJpbmcKcz1yIT09Qy54
+Qi5iUyhzKX1lbHNlIHM9ITEKaWYocyl7ci50b1N0cmluZwpMLkc3KHIscSxwLCEwLG5ldyBMLlZXKHIs
+cSxwKSl9cz1kb2N1bWVudApvPXMucXVlcnlTZWxlY3RvcigiLmFwcGx5LW1pZ3JhdGlvbiIpCm8udG9T
+dHJpbmcKbz1KLnFGKG8pCm49by4kdGkKbT1uLkMoIn4oMSk/IikuYShuZXcgTC5vWigpKQp0LlouYShu
+dWxsKQpXLkpFKG8uYSxvLmIsbSwhMSxuLmMpCm49cy5xdWVyeVNlbGVjdG9yKCIucmVydW4tbWlncmF0
+aW9uIikKbi50b1N0cmluZwpuPUoucUYobikKbT1uLiR0aQpXLkpFKG4uYSxuLmIsbS5DKCJ+KDEpPyIp
+LmEobmV3IEwueTgoKSksITEsbS5jKQptPXMucXVlcnlTZWxlY3RvcigiLnJlcG9ydC1wcm9ibGVtIikK
+bS50b1N0cmluZwptPUoucUYobSkKbj1tLiR0aQpXLkpFKG0uYSxtLmIsbi5DKCJ+KDEpPyIpLmEobmV3
+IEwuSGkoKSksITEsbi5jKQpzPXMucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUgLmNsb3NlIikKcy50
+b1N0cmluZwpzPUoucUYocykKbj1zLiR0aQpXLkpFKHMuYSxzLmIsbi5DKCJ+KDEpPyIpLmEobmV3IEwu
+QlQoKSksITEsbi5jKQpuPSQuYzAoKQpuLnRvU3RyaW5nCm49Si5xRihuKQpzPW4uJHRpClcuSkUobi5h
+LG4uYixzLkMoIn4oMSk/IikuYShuZXcgTC5QWSgpKSwhMSxzLmMpfSwKJFM6MTd9CkwuVlcucHJvdG90
+eXBlPXsKJDAoKXtMLkZyKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sCiRTOjB9Ckwub1oucHJvdG90eXBl
+PXsKJDEoYSl7dmFyIHMscixxLHAsbwp0LlYuYShhKQppZihDLm9sLnVzKHdpbmRvdywiVGhpcyB3aWxs
+IGFwcGx5IHRoZSBjaGFuZ2VzIHlvdSd2ZSBwcmV2aWV3ZWQgdG8geW91ciB3b3JraW5nIGRpcmVjdG9y
+eS4gSXQgaXMgcmVjb21tZW5kZWQgeW91IGNvbW1pdCBhbnkgY2hhbmdlcyB5b3UgbWFkZSBiZWZvcmUg
+ZG9pbmcgdGhpcy4iKSl7cz1ILlFJKFtdLHQuZCkKZm9yKHI9JC5JUixxPXIubGVuZ3RoLHA9MDtwPHIu
+bGVuZ3RoO3IubGVuZ3RoPT09cXx8KDAsSC5saykociksKytwKXMucHVzaChyW3BdLkx0KCkpCnM9TC50
+eSgiL2FwcGx5LW1pZ3JhdGlvbiIsUC5FRihbIm5hdmlnYXRpb25UcmVlIixzXSx0Lk4sdC54KSkuVzco
+bmV3IEwuanIoKSx0LlApCm89bmV3IEwucWwoKQp0LmI3LmEobnVsbCkKcj1zLiR0aQpxPSQuWDMKaWYo
+cSE9PUMuTlUpbz1QLlZIKG8scSkKcy54ZihuZXcgUC5GZShuZXcgUC52cyhxLHIpLDIsbnVsbCxvLHIu
+QygiQDwxPiIpLktxKHIuYykuQygiRmU8MSwyPiIpKSl9fSwKJFM6MX0KTC5qci5wcm90b3R5cGU9ewok
+MShhKXt2YXIgcwp0LmZuLmEoYSkKcz1kb2N1bWVudC5ib2R5CnMuY2xhc3NMaXN0LnJlbW92ZSgicHJv
+cG9zZWQiKQpzLmNsYXNzTGlzdC5hZGQoImFwcGxpZWQiKX0sCiRTOjQyfQpMLnFsLnByb3RvdHlwZT17
+CiQyKGEsYil7TC5DMigiQ291bGRuJ3QgYXBwbHkgbWlncmF0aW9uIix0LksuYShhKSxiKX0sCiRTOjQz
+fQpMLnk4LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLnhuKHQuVi5hKGEpKX0sCnhuKGEpe3Zh
+ciBzPTAscj1QLkZYKHQuSCkscT0xLHAsbz1bXSxuLG0sbCxrLGosaQp2YXIgJGFzeW5jJCQxPVAubHoo
+ZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6
+cT0zCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgicmVydW5uaW5nIikKcz02CnJldHVybiBQLmpR
+KEwudHkoIi9yZXJ1bi1taWdyYXRpb24iLG51bGwpLCRhc3luYyQkMSkKY2FzZSA2Om49YwprPW4Kay50
+b1N0cmluZwppZihILnA4KEoueDkoaywic3VjY2VzcyIpKSl0LkYuYSh3aW5kb3cubG9jYXRpb24pLnJl
+bG9hZCgpCmVsc2UgTC5LMCh0LmV3LmEoSi54OShuLCJlcnJvcnMiKSkpCm8ucHVzaCg1KQpzPTQKYnJl
+YWsKY2FzZSAzOnE9MgppPXAKbT1ILlJ1KGkpCmw9SC50cyhpKQpMLkMyKCJGYWlsZWQgdG8gcmVydW4g
+bWlncmF0aW9uIixtLGwpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAyOm89WzFdCmNhc2UgNDpxPTEK
+ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJyZXJ1bm5pbmciKQpzPW8ucG9wKCkKYnJlYWsK
+Y2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBQLmYzKHAscil9fSkKcmV0dXJu
+IFAuREkoJGFzeW5jJCQxLHIpfSwKJFM6N30KTC5IaS5wcm90b3R5cGU9ewokMShhKXt0LlYuYShhKQpD
+Lm9sLlBvKHdpbmRvdyxQLlhkKCJodHRwcyIsImdpdGh1Yi5jb20iLCJkYXJ0LWxhbmcvc2RrL2lzc3Vl
+cy9uZXciLFAuRUYoWyJ0aXRsZSIsIkN1c3RvbWVyLXJlcG9ydGVkIGlzc3VlIHdpdGggTk5CRCBtaWdy
+YXRpb24gdG9vbCIsImxhYmVscyIsdS5kLCJib2R5IiwiIyMjIyBTdGVwcyB0byByZXByb2R1Y2Vcblxu
+IyMjIyBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj9cblxuIyMjIyBXaGF0IGFjdHVhbGx5IGhh
+cHBlbmVkP1xuXG5fU2NyZWVuc2hvdHMgYXJlIGFwcHJlY2lhdGVkX1xuXG4qKkRhcnQgU0RLIHZlcnNp
+b24qKjogIitILkVqKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZGstdmVyc2lvbiIpLnRleHRDb250
+ZW50KSsiXG5cblRoYW5rcyBmb3IgZmlsaW5nIVxuIl0sdC5OLHQueikpLmduRCgpLCJyZXBvcnQtcHJv
+YmxlbSIpfSwKJFM6MX0KTC5CVC5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlYuYShhKQpzPWRvY3Vt
+ZW50LnF1ZXJ5U2VsZWN0b3IoIi5wb3B1cC1wYW5lIikuc3R5bGUKcy5kaXNwbGF5PSJub25lIgpyZXR1
+cm4ibm9uZSJ9LAokUzoxfQpMLlBZLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG8KdC5WLmEo
+YSkKcz0kLkQ5KCkuaW5uZXJUZXh0CnI9dC5oLmEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hdi1w
+YW5lbCBbZGF0YS1uYW1lKj0iJytXLkxqKHMpKyciXScpLnBhcmVudE5vZGUpCnE9ci5xdWVyeVNlbGVj
+dG9yKCIuc3RhdHVzLWljb24iKQpwPSQuSVIKcC50b1N0cmluZwpvPUwueXcocCxzKQppZihvIGluc3Rh
+bmNlb2YgTC5jRCl7cD1vLngKcC50b1N0cmluZ31lbHNlIHA9ITEKaWYocCl7TC5PdChvKQpMLnhuKHEs
+bykKTC5BUihyLG8pfX0sCiRTOjF9CkwuTC5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyLHEscAp0LkIu
+YShhKQpzPXQuRgpyPXMuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lCnIudG9TdHJpbmcKcT1MLkc2
+KHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCnA9TC5hSyhzLmEod2luZG93LmxvY2F0aW9uKS5ocmVm
+KQppZihyLmxlbmd0aD4xKUwuRzcocixxLHAsITEsbnVsbCkKZWxzZXtMLkJFKHIsQi53UigpLCEwKQpM
+LkJYKCImbmJzcDsiLG51bGwpfX0sCiRTOjE3fQpMLld4LnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIs
+cSxwLG89ImNvbGxhcHNlZCIKdC5WLmEoYSkKcz10aGlzLmEKcj1KLllFKHMpCnE9dGhpcy5iCnA9Si5Z
+RShxKQppZighci5nUChzKS50ZygwLG8pKXtyLmdQKHMpLmkoMCxvKQpwLmdQKHEpLmkoMCxvKX1lbHNl
+e3IuZ1AocykuUigwLG8pCnAuZ1AocSkuUigwLG8pfX0sCiRTOjF9CkwuSG8ucHJvdG90eXBlPXsKJDEo
+YSl7dmFyIHM9Si5xRih0LmguYShhKSkscj1zLiR0aSxxPXIuQygifigxKT8iKS5hKG5ldyBMLmROKHRo
+aXMuYSkpCnQuWi5hKG51bGwpClcuSkUocy5hLHMuYixxLCExLHIuYyl9LAokUzozfQpMLmROLnByb3Rv
+dHlwZT17CiQxKGEpe3JldHVybiBMLnQyKHQuVi5hKGEpLHRoaXMuYSl9LAokUzoxfQpMLklDLnByb3Rv
+dHlwZT17CiQxKGEpe3ZhciBzLHIscQp0LmguYShhKQpzPUoucUYoYSkKcj1zLiR0aQpxPXIuQygifigx
+KT8iKS5hKG5ldyBMLnh6KGEsdGhpcy5hKSkKdC5aLmEobnVsbCkKVy5KRShzLmEscy5iLHEsITEsci5j
+KX0sCiRTOjN9CkwueHoucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAKdC5WLmEoYSkKcz10aGlz
+LmEKcj1zLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KHMpKS5PVSgib2Zmc2V0
+IikpCnIudG9TdHJpbmcKcT1QLlFBKHIsbnVsbCkKcz1zLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBX
+LlN5KG5ldyBXLmk3KHMpKS5PVSgibGluZSIpKQpzLnRvU3RyaW5nCnA9UC5RQShzLG51bGwpCnM9dGhp
+cy5iCnMudG9TdHJpbmcKTC5oWChzLHEscCl9LAokUzoxfQpMLkJOLnByb3RvdHlwZT17CiQxKGEpe3Zh
+ciBzPUoucUYodC5oLmEoYSkpLHI9cy4kdGkKci5DKCJ+KDEpPyIpLmEoTC5pUygpKQp0LlouYShudWxs
+KQpXLkpFKHMuYSxzLmIsTC5pUygpLCExLHIuYyl9LAokUzozfQpMLmZDLnByb3RvdHlwZT17CiQxKGEp
+e3QucC5hKGEpCnRoaXMuYS5hTSgwLHRoaXMuYil9LAokUzo0Nn0KTC5UbS5wcm90b3R5cGU9ewokMShh
+KXtILm4oYSkKcmV0dXJuIGEubGVuZ3RoPjQwP0MueEIuTmooYSwwLDQwKSsiLi4uIjphfSwKJFM6Mn0K
+TC5uVC5wcm90b3R5cGU9ewokMCgpe0wuRnIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KTC5O
+WS5wcm90b3R5cGU9ewokMCgpe0wuRnIodGhpcy5hLG51bGwsbnVsbCl9LAokUzowfQpMLnVlLnByb3Rv
+dHlwZT17CiQxKGEpe3QuZi5hKGEpCnJldHVybiBILkVqKGEucSgwLCJzZXZlcml0eSIpKSsiIC0gIitI
+LkVqKGEucSgwLCJtZXNzYWdlIikpKyIgYXQgIitILkVqKGEucSgwLCJsb2NhdGlvbiIpKSsiIC0gKCIr
+SC5FaihhLnEoMCwiY29kZSIpKSsiKSJ9LAokUzo0N30KTC5HSC5wcm90b3R5cGU9ewokMShhKXt0Lmgu
+YShhKQokLnpCKCkKdC5lcy5hKCQub3coKS5xKDAsImhsanMiKSkuVjcoImhpZ2hsaWdodEJsb2NrIixb
+YV0pfSwKJFM6M30KTC5FRS5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyCnQuVi5hKGEpLnByZXZlbnRE
+ZWZhdWx0KCkKcz10aGlzLmEKcj10aGlzLmIKTC5hZih0LkYuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhu
+YW1lLHMsciwhMCxuZXcgTC5RTChzLHIpKQpMLmhYKHRoaXMuYyxzLHIpfSwKJFM6MX0KTC5RTC5wcm90
+b3R5cGU9ewokMCgpe0wuRnIodC5GLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZSx0aGlzLmEsdGhp
+cy5iKX0sCiRTOjB9CkwuVlMucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscj0ic2VsZWN0ZWQtZmlsZSIK
+dC5oLmEoYSkKcz1KLllFKGEpCmlmKGEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcu
+aTcoYSkpLk9VKCJuYW1lIikpPT09dGhpcy5hLmEpcy5nUChhKS5pKDAscikKZWxzZSBzLmdQKGEpLlIo
+MCxyKX0sCiRTOjN9CkwuVEQucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscgp0LlYuYShhKQpzPXRoaXMu
+YQpzd2l0Y2gocy5nTCgpKXtjYXNlIEMuY3c6YnJlYWsKY2FzZSBDLldEOnMubkcoKQpicmVhawpjYXNl
+IEMuWGo6cy5jMigpCmJyZWFrCmNhc2UgQy5kYzpzLmMyKCkKYnJlYWt9cj10aGlzLmIKTC5iTChyLHMp
+CkwueG4odGhpcy5jLHMpCkwuQVIocixzKX0sCiRTOjF9CkwuSWYucHJvdG90eXBlPXsKJDEoYSl7dmFy
+IHMKdC5WLmEoYSkKcz10aGlzLmEKTC5PdChzKQpMLnhuKHRoaXMuYixzKQpMLkFSKHRoaXMuYyxzKX0s
+CiRTOjF9CkwudEIucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEwudDIodC5WLmEoYSksITApfSwKJFM6
+MX0KTC5tMi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5SSSh0LlYuYShhKSl9LApSSShhKXt2
+YXIgcz0wLHI9UC5GWCh0LkgpLHE9MSxwLG89W10sbj10aGlzLG0sbCxrLGosaSxoLGcsZixlCnZhciAk
+YXN5bmMkJDE9UC5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dp
+dGNoKHMpe2Nhc2UgMDpxPTMKaT1kb2N1bWVudAptPUMuQ0QuelEoaS5xdWVyeVNlbGVjdG9yKCIuY29u
+dGVudCIpLnNjcm9sbFRvcCkKaD10Lk4Kcz02CnJldHVybiBQLmpRKEwudHkoTC5RNCgiL2FwcGx5LWhp
+bnQiLFAuRmwoaCxoKSksbi5hLkx0KCkpLCRhc3luYyQkMSkKY2FzZSA2Omg9bi5iCmc9aC5hCmcudG9T
+dHJpbmcKbD1MLlVzKGcpCnM9NwpyZXR1cm4gUC5qUShMLkc3KGwsbnVsbCxoLmIsITEsbnVsbCksJGFz
+eW5jJCQxKQpjYXNlIDc6aS5ib2R5LmNsYXNzTGlzdC5hZGQoIm5lZWRzLXJlcnVuIikKaT1pLnF1ZXJ5
+U2VsZWN0b3IoIi5jb250ZW50IikKaS50b1N0cmluZwppLnNjcm9sbFRvcD1DLmpuLnpRKG0pCnE9MQpz
+PTUKYnJlYWsKY2FzZSAzOnE9MgplPXAKaz1ILlJ1KGUpCmo9SC50cyhlKQpMLkMyKCJjb3VsZG4ndCBh
+cHBseSBoaW50IixrLGopCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55
+QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyQkMSxy
+KX0sCiRTOjd9CkwuUVcucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4gdGhpcy5hKyI6XG4iK3RoaXMuYn0s
+CiRpUno6MX0KTC5YQS5wcm90b3R5cGU9ewpFYihhLGIsYyl7cmV0dXJuITB9LAppMChhKXtyZXR1cm4h
+MH0sCiRpa0Y6MX0KTC52dC5wcm90b3R5cGU9ewpnTCgpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcy5k
+CmlmKGwubGVuZ3RoPT09MClyZXR1cm4gQy5jdwpzPUMuTm0uZ3RIKGwpLmdMKCkKZm9yKHI9bC5sZW5n
+dGgscT0hMCxwPSEwLG89MDtvPGwubGVuZ3RoO2wubGVuZ3RoPT09cnx8KDAsSC5saykobCksKytvKXtu
+PWxbb10uZ0woKQppZihuIT1zKXM9bnVsbAptPW4hPT1DLmN3CmlmKG0mJm4hPT1DLldEKXE9ITEKaWYo
+bSYmbiE9PUMuWGopcD0hMX1pZihzIT1udWxsKXJldHVybiBzCmlmKHEpcmV0dXJuIEMuV0QKaWYocCly
+ZXR1cm4gQy5YagpyZXR1cm4gQy5kY30sCkxWKCl7dmFyIHMscixxLHA9dGhpcy5kCmlmKHAhPW51bGwp
+Zm9yKHM9cC5sZW5ndGgscj0wO3I8czsrK3Ipe3E9cFtyXQppZihxLmI9PT0kKXEuYj10aGlzCmVsc2Ug
+SC52KG5ldyBILmMoIkZpZWxkICdwYXJlbnQnIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIikp
+fX0sCmMyKCl7dmFyIHMscixxLHAsbwpmb3Iocz10aGlzLmQscj1zLmxlbmd0aCxxPTA7cTxzLmxlbmd0
+aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrcSl7cD1zW3FdCmlmKHAgaW5zdGFuY2VvZiBMLnZ0
+KXAuYzIoKQplbHNle2lmKHAgaW5zdGFuY2VvZiBMLmNEKXtvPXAueApvLnRvU3RyaW5nCm89byYmcC5y
+PT09Qy5Yan1lbHNlIG89ITEKaWYobylwLnI9Qy5XRH19fSwKbkcoKXt2YXIgcyxyLHEscCxvCmZvcihz
+PXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsSC5saykocyks
+KytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9mIEwudnQpcC5uRygpCmVsc2V7aWYocCBpbnN0YW5jZW9m
+IEwuY0Qpe289cC54Cm8udG9TdHJpbmcKbz1vJiZwLnI9PT1DLldEfWVsc2Ugbz0hMQppZihvKXAucj1D
+LlhqfX19LApMdCgpe3ZhciBzLHI9UC5GbCh0Lk4sdC5YKQpyLlk1KDAsInR5cGUiLCJkaXJlY3Rvcnki
+KQpyLlk1KDAsIm5hbWUiLHRoaXMuYSkKcz10aGlzLmQKcy50b1N0cmluZwpyLlk1KDAsInN1YnRyZWUi
+LEwuVkQocykpCnM9dGhpcy5jCmlmKHMhPW51bGwpci5ZNSgwLCJwYXRoIixzKQpyZXR1cm4gcn19Ckwu
+Y0QucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyPXRoaXMscT1QLkZsKHQuTix0LlgpCnEuWTUoMCwidHlw
+ZSIsImZpbGUiKQpxLlk1KDAsIm5hbWUiLHIuYSkKcz1yLmMKaWYocyE9bnVsbClxLlk1KDAsInBhdGgi
+LHMpCnM9ci5kCmlmKHMhPW51bGwpcS5ZNSgwLCJocmVmIixzKQpzPXIuZQppZihzIT1udWxsKXEuWTUo
+MCwiZWRpdENvdW50IixzKQpzPXIuZgppZihzIT1udWxsKXEuWTUoMCwid2FzRXhwbGljaXRseU9wdGVk
+T3V0IixzKQpzPXIucgppZihzIT1udWxsKXEuWTUoMCwibWlncmF0aW9uU3RhdHVzIixzLmEpCnM9ci54
+CmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXNDYW5CZUNoYW5nZWQiLHMpCnJldHVybiBx
+fSwKZ0woKXtyZXR1cm4gdGhpcy5yfX0KTC5EOC5wcm90b3R5cGU9e30KTC5POS5wcm90b3R5cGU9ewp3
+KGEpe3JldHVybiB0aGlzLmJ9fQpMLkdiLnByb3RvdHlwZT17CncoYSl7cmV0dXJuIHRoaXMuYn19ClIu
+TEwucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gUC5FRihbIm5vZGVJZCIsdGhpcy5iLCJraW5kIix0aGlz
+LmEuYV0sdC5OLHQuWCl9fQpSLk1ELnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0LmdwLmEoYSkuYT09
+PXRoaXMuYS5xKDAsImtpbmQiKX0sCiRTOjQ4fQpSLkg3LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIHRo
+aXMuYn19Ck0ubEkucHJvdG90eXBlPXsKV08oYSxiKXt2YXIgcyxyLHE9dC5kNApNLllGKCJhYnNvbHV0
+ZSIsSC5RSShbYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0scSkpCnM9dGhpcy5hCnM9cy5Z
+cihiKT4wJiYhcy5oSyhiKQppZihzKXJldHVybiBiCnM9RC5hYigpCnI9SC5RSShbcyxiLG51bGwsbnVs
+bCxudWxsLG51bGwsbnVsbCxudWxsXSxxKQpNLllGKCJqb2luIixyKQpyZXR1cm4gdGhpcy5JUChuZXcg
+SC51NihyLHQuZUopKX0sCnpmKGEpe3ZhciBzLHIscT1YLkNMKGEsdGhpcy5hKQpxLkl4KCkKcz1xLmQK
+cj1zLmxlbmd0aAppZihyPT09MCl7cz1xLmIKcmV0dXJuIHM9PW51bGw/Ii4iOnN9aWYocj09PTEpe3M9
+cS5iCnJldHVybiBzPT1udWxsPyIuIjpzfWlmKDA+PXIpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpz
+PXEuZQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnEuSXgoKQpyZXR1cm4g
+cS53KDApfSwKSVAoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGoKdC5PLmEoYSkKZm9yKHM9YS4kdGks
+cj1zLkMoImEyKGNYLkUpIikuYShuZXcgTS5xNygpKSxxPWEuZ20oYSkscz1uZXcgSC5TTyhxLHIscy5D
+KCJTTzxjWC5FPiIpKSxyPXRoaXMuYSxwPSExLG89ITEsbj0iIjtzLkYoKTspe209cS5nbCgpCmlmKHIu
+aEsobSkmJm8pe2w9WC5DTChtLHIpCms9bi5jaGFyQ29kZUF0KDApPT0wP246bgpuPUMueEIuTmooayww
+LHIuU3AoaywhMCkpCmwuYj1uCmlmKHIuZHMobikpQy5ObS5ZNShsLmUsMCxyLmdtSSgpKQpuPSIiK2wu
+dygwKX1lbHNlIGlmKHIuWXIobSk+MCl7bz0hci5oSyhtKQpuPSIiK219ZWxzZXtqPW0ubGVuZ3RoCmlm
+KGohPT0wKXtpZigwPj1qKXJldHVybiBILk9IKG0sMCkKaj1yLlVkKG1bMF0pfWVsc2Ugaj0hMQppZigh
+ailpZihwKW4rPXIuZ21JKCkKbis9bX1wPXIuZHMobSl9cmV0dXJuIG4uY2hhckNvZGVBdCgwKT09MD9u
+Om59LApvNShhKXt2YXIgcwppZighdGhpcy55MyhhKSlyZXR1cm4gYQpzPVguQ0woYSx0aGlzLmEpCnMu
+clIoKQpyZXR1cm4gcy53KDApfSwKeTMoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMuYSxqPWsu
+WXIoYSkKaWYoaiE9PTApe2lmKGs9PT0kLktrKCkpZm9yKHM9MDtzPGo7KytzKWlmKEMueEIuVyhhLHMp
+PT09NDcpcmV0dXJuITAKcj1qCnE9NDd9ZWxzZXtyPTAKcT1udWxsfWZvcihwPW5ldyBILnFqKGEpLmEs
+bz1wLmxlbmd0aCxzPXIsbj1udWxsO3M8bzsrK3Msbj1xLHE9bSl7bT1DLnhCLk8ocCxzKQppZihrLnI0
+KG0pKXtpZihrPT09JC5LaygpJiZtPT09NDcpcmV0dXJuITAKaWYocSE9bnVsbCYmay5yNChxKSlyZXR1
+cm4hMAppZihxPT09NDYpbD1uPT1udWxsfHxuPT09NDZ8fGsucjQobikKZWxzZSBsPSExCmlmKGwpcmV0
+dXJuITB9fWlmKHE9PW51bGwpcmV0dXJuITAKaWYoay5yNChxKSlyZXR1cm4hMAppZihxPT09NDYpaz1u
+PT1udWxsfHxrLnI0KG4pfHxuPT09NDYKZWxzZSBrPSExCmlmKGspcmV0dXJuITAKcmV0dXJuITF9LApI
+UChhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcyxrPSdVbmFibGUgdG8gZmluZCBhIHBhdGggdG8g
+IicKYj1sLldPKDAsYikKcz1sLmEKaWYocy5ZcihiKTw9MCYmcy5ZcihhKT4wKXJldHVybiBsLm81KGEp
+CmlmKHMuWXIoYSk8PTB8fHMuaEsoYSkpYT1sLldPKDAsYSkKaWYocy5ZcihhKTw9MCYmcy5ZcihiKT4w
+KXRocm93IEguYihYLkk3KGsrYSsnIiBmcm9tICInK2IrJyIuJykpCnI9WC5DTChiLHMpCnIuclIoKQpx
+PVguQ0woYSxzKQpxLnJSKCkKcD1yLmQKbz1wLmxlbmd0aAppZihvIT09MCl7aWYoMD49bylyZXR1cm4g
+SC5PSChwLDApCnA9Si5STShwWzBdLCIuIil9ZWxzZSBwPSExCmlmKHApcmV0dXJuIHEudygwKQpwPXIu
+YgpvPXEuYgppZihwIT1vKXA9cD09bnVsbHx8bz09bnVsbHx8IXMuTmMocCxvKQplbHNlIHA9ITEKaWYo
+cClyZXR1cm4gcS53KDApCndoaWxlKCEwKXtwPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtuPXEuZApt
+PW4ubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1vKXJldHVybiBILk9IKHAsMCkKcD1wWzBdCmlmKDA+PW0p
+cmV0dXJuIEguT0gobiwwKQpuPXMuTmMocCxuWzBdKQpwPW59ZWxzZSBwPSExfWVsc2UgcD0hMQppZigh
+cClicmVhawpDLk5tLlc0KHIuZCwwKQpDLk5tLlc0KHIuZSwxKQpDLk5tLlc0KHEuZCwwKQpDLk5tLlc0
+KHEuZSwxKX1wPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtpZigwPj1vKXJldHVybiBILk9IKHAsMCkK
+cD1KLlJNKHBbMF0sIi4uIil9ZWxzZSBwPSExCmlmKHApdGhyb3cgSC5iKFguSTcoaythKyciIGZyb20g
+IicrYisnIi4nKSkKcD10Lk4KQy5ObS5VRyhxLmQsMCxQLk84KHIuZC5sZW5ndGgsIi4uIiwhMSxwKSkK
+Qy5ObS5ZNShxLmUsMCwiIikKQy5ObS5VRyhxLmUsMSxQLk84KHIuZC5sZW5ndGgscy5nbUkoKSwhMSxw
+KSkKcz1xLmQKcD1zLmxlbmd0aAppZihwPT09MClyZXR1cm4iLiIKaWYocD4xJiZKLlJNKEMuTm0uZ3Ja
+KHMpLCIuIikpe3M9cS5kCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcz1x
+LmUKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQppZigwPj1zLmxlbmd0aCly
+ZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCkMuTm0uaShzLCIiKX1xLmI9IiIKcS5JeCgpCnJldHVybiBx
+LncoMCl9fQpNLnE3LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBILm4oYSkhPT0iIn0sCiRTOjZ9Ck0u
+Tm8ucHJvdG90eXBlPXsKJDEoYSl7SC5rKGEpCnJldHVybiBhPT1udWxsPyJudWxsIjonIicrYSsnIid9
+LAokUzo0OX0KQi5mdi5wcm90b3R5cGU9ewp4WihhKXt2YXIgcyxyPXRoaXMuWXIoYSkKaWYocj4wKXJl
+dHVybiBDLnhCLk5qKGEsMCxyKQppZih0aGlzLmhLKGEpKXtpZigwPj1hLmxlbmd0aClyZXR1cm4gSC5P
+SChhLDApCnM9YVswXX1lbHNlIHM9bnVsbApyZXR1cm4gc30sCk5jKGEsYil7cmV0dXJuIGE9PT1ifX0K
+WC5XRC5wcm90b3R5cGU9ewpJeCgpe3ZhciBzLHIscT10aGlzCndoaWxlKCEwKXtzPXEuZAppZighKHMu
+bGVuZ3RoIT09MCYmSi5STShDLk5tLmdyWihzKSwiIikpKWJyZWFrCnM9cS5kCmlmKDA+PXMubGVuZ3Ro
+KXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0go
+cywtMSkKcy5wb3AoKX1zPXEuZQpyPXMubGVuZ3RoCmlmKHIhPT0wKUMuTm0uWTUocyxyLTEsIiIpfSwK
+clIoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9SC5RSShbXSx0LnMpCmZvcihzPW0uZCxyPXMubGVu
+Z3RoLHE9MCxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrcCl7bz1zW3Bd
+Cm49Si5pYShvKQppZighKG4uRE4obywiLiIpfHxuLkROKG8sIiIpKSlpZihuLkROKG8sIi4uIikpe249
+bC5sZW5ndGgKaWYobiE9PTApe2lmKDA+PW4pcmV0dXJuIEguT0gobCwtMSkKbC5wb3AoKX1lbHNlICsr
+cX1lbHNlIEMuTm0uaShsLG8pfWlmKG0uYj09bnVsbClDLk5tLlVHKGwsMCxQLk84KHEsIi4uIiwhMSx0
+Lk4pKQppZihsLmxlbmd0aD09PTAmJm0uYj09bnVsbClDLk5tLmkobCwiLiIpCm0uc25KKGwpCnM9bS5h
+Cm0uc1BoKFAuTzgobC5sZW5ndGgrMSxzLmdtSSgpLCEwLHQuTikpCnI9bS5iCmlmKHI9PW51bGx8fGwu
+bGVuZ3RoPT09MHx8IXMuZHMocikpQy5ObS5ZNShtLmUsMCwiIikKcj1tLmIKaWYociE9bnVsbCYmcz09
+PSQuS2soKSl7ci50b1N0cmluZwptLmI9SC55cyhyLCIvIiwiXFwiKX1tLkl4KCl9LAp3KGEpe3ZhciBz
+LHIscT10aGlzLHA9cS5iCnA9cCE9bnVsbD8iIitwOiIiCmZvcihzPTA7czxxLmQubGVuZ3RoOysrcyl7
+cj1xLmUKaWYocz49ci5sZW5ndGgpcmV0dXJuIEguT0gocixzKQpyPXArSC5FaihyW3NdKQpwPXEuZApp
+ZihzPj1wLmxlbmd0aClyZXR1cm4gSC5PSChwLHMpCnA9citILkVqKHBbc10pfXArPUguRWooQy5ObS5n
+cloocS5lKSkKcmV0dXJuIHAuY2hhckNvZGVBdCgwKT09MD9wOnB9LApzbkooYSl7dGhpcy5kPXQuRC5h
+KGEpfSwKc1BoKGEpe3RoaXMuZT10LkQuYShhKX19ClguZHYucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4i
+UGF0aEV4Y2VwdGlvbjogIit0aGlzLmF9LAokaVJ6OjF9Ck8uekwucHJvdG90eXBlPXsKdyhhKXtyZXR1
+cm4gdGhpcy5nb2ModGhpcyl9fQpFLk9GLnByb3RvdHlwZT17ClVkKGEpe3JldHVybiBDLnhCLnRnKGEs
+Ii8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd9LApkcyhhKXt2YXIgcz1hLmxlbmd0aApyZXR1cm4gcyE9
+PTAmJkMueEIuTyhhLHMtMSkhPT00N30sClNwKGEsYil7aWYoYS5sZW5ndGghPT0wJiZDLnhCLlcoYSww
+KT09PTQ3KXJldHVybiAxCnJldHVybiAwfSwKWXIoYSl7cmV0dXJuIHRoaXMuU3AoYSwhMSl9LApoSyhh
+KXtyZXR1cm4hMX0sCmdvYygpe3JldHVybiJwb3NpeCJ9LApnbUkoKXtyZXR1cm4iLyJ9fQpGLnJ1LnBy
+b3RvdHlwZT17ClVkKGEpe3JldHVybiBDLnhCLnRnKGEsIi8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd9
+LApkcyhhKXt2YXIgcz1hLmxlbmd0aAppZihzPT09MClyZXR1cm4hMQppZihDLnhCLk8oYSxzLTEpIT09
+NDcpcmV0dXJuITAKcmV0dXJuIEMueEIuVGMoYSwiOi8vIikmJnRoaXMuWXIoYSk9PT1zfSwKU3AoYSxi
+KXt2YXIgcyxyLHEscCxvPWEubGVuZ3RoCmlmKG89PT0wKXJldHVybiAwCmlmKEMueEIuVyhhLDApPT09
+NDcpcmV0dXJuIDEKZm9yKHM9MDtzPG87KytzKXtyPUMueEIuVyhhLHMpCmlmKHI9PT00NylyZXR1cm4g
+MAppZihyPT09NTgpe2lmKHM9PT0wKXJldHVybiAwCnE9Qy54Qi5YVShhLCIvIixDLnhCLlFpKGEsIi8v
+IixzKzEpP3MrMzpzKQppZihxPD0wKXJldHVybiBvCmlmKCFifHxvPHErMylyZXR1cm4gcQppZighQy54
+Qi5uKGEsImZpbGU6Ly8iKSlyZXR1cm4gcQppZighQi5ZdShhLHErMSkpcmV0dXJuIHEKcD1xKzMKcmV0
+dXJuIG89PT1wP3A6cSs0fX1yZXR1cm4gMH0sCllyKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEso
+YSl7cmV0dXJuIGEubGVuZ3RoIT09MCYmQy54Qi5XKGEsMCk9PT00N30sCmdvYygpe3JldHVybiJ1cmwi
+fSwKZ21JKCl7cmV0dXJuIi8ifX0KTC5JVi5wcm90b3R5cGU9ewpVZChhKXtyZXR1cm4gQy54Qi50Zyhh
+LCIvIil9LApyNChhKXtyZXR1cm4gYT09PTQ3fHxhPT09OTJ9LApkcyhhKXt2YXIgcz1hLmxlbmd0aApp
+ZihzPT09MClyZXR1cm4hMQpzPUMueEIuTyhhLHMtMSkKcmV0dXJuIShzPT09NDd8fHM9PT05Mil9LApT
+cChhLGIpe3ZhciBzLHIscT1hLmxlbmd0aAppZihxPT09MClyZXR1cm4gMApzPUMueEIuVyhhLDApCmlm
+KHM9PT00NylyZXR1cm4gMQppZihzPT09OTIpe2lmKHE8Mnx8Qy54Qi5XKGEsMSkhPT05MilyZXR1cm4g
+MQpyPUMueEIuWFUoYSwiXFwiLDIpCmlmKHI+MCl7cj1DLnhCLlhVKGEsIlxcIixyKzEpCmlmKHI+MCly
+ZXR1cm4gcn1yZXR1cm4gcX1pZihxPDMpcmV0dXJuIDAKaWYoIUIuT1MocykpcmV0dXJuIDAKaWYoQy54
+Qi5XKGEsMSkhPT01OClyZXR1cm4gMApxPUMueEIuVyhhLDIpCmlmKCEocT09PTQ3fHxxPT09OTIpKXJl
+dHVybiAwCnJldHVybiAzfSwKWXIoYSl7cmV0dXJuIHRoaXMuU3AoYSwhMSl9LApoSyhhKXtyZXR1cm4g
+dGhpcy5ZcihhKT09PTF9LApPdChhLGIpe3ZhciBzCmlmKGE9PT1iKXJldHVybiEwCmlmKGE9PT00Nyly
+ZXR1cm4gYj09PTkyCmlmKGE9PT05MilyZXR1cm4gYj09PTQ3CmlmKChhXmIpIT09MzIpcmV0dXJuITEK
+cz1hfDMyCnJldHVybiBzPj05NyYmczw9MTIyfSwKTmMoYSxiKXt2YXIgcyxyCmlmKGE9PT1iKXJldHVy
+biEwCnM9YS5sZW5ndGgKaWYocyE9PWIubGVuZ3RoKXJldHVybiExCmZvcihyPTA7cjxzOysrcilpZigh
+dGhpcy5PdChDLnhCLlcoYSxyKSxDLnhCLlcoYixyKSkpcmV0dXJuITEKcmV0dXJuITB9LApnb2MoKXty
+ZXR1cm4id2luZG93cyJ9LApnbUkoKXtyZXR1cm4iXFwifX07KGZ1bmN0aW9uIGFsaWFzZXMoKXt2YXIg
+cz1KLkd2LnByb3RvdHlwZQpzLlU9cy53CnM9Si5NRi5wcm90b3R5cGUKcy50PXMudwpzPVAuY1gucHJv
+dG90eXBlCnMuR0c9cy5ldgpzPVAuTWgucHJvdG90eXBlCnMueGI9cy53CnM9Vy5jdi5wcm90b3R5cGUK
+cy5EVz1zLnI2CnM9Vy5tNi5wcm90b3R5cGUKcy5qRj1zLkViCnM9UC5FNC5wcm90b3R5cGUKcy5Vcj1z
+LnEKcy5lND1zLlk1CnM9UC52Zy5wcm90b3R5cGUKcy5iaD1zLlk1fSkoKTsoZnVuY3Rpb24gaW5zdGFs
+bFRlYXJPZmZzKCl7dmFyIHM9aHVua0hlbHBlcnMuX3N0YXRpY18xLHI9aHVua0hlbHBlcnMuX3N0YXRp
+Y18wLHE9aHVua0hlbHBlcnMuaW5zdGFsbEluc3RhbmNlVGVhck9mZixwPWh1bmtIZWxwZXJzLmluc3Rh
+bGxTdGF0aWNUZWFyT2ZmLG89aHVua0hlbHBlcnMuX2luc3RhbmNlXzF1CnMoUCwiRVgiLCJaViIsNSkK
+cyhQLCJ5dCIsIm9BIiw1KQpzKFAsInFXIiwiQnoiLDUpCnIoUCwiVUkiLCJlTiIsMCkKcShQLlBmLnBy
+b3RvdHlwZSwiZ1lKIiwwLDEsbnVsbCxbIiQyIiwiJDEiXSxbIncwIiwicG0iXSw0MCwwLDApCnMoUCwi
+Q3kiLCJOQyIsNCkKcyhQLCJQSCIsIk10IiwyKQpwKFcsInBTIiw0LG51bGwsWyIkNCJdLFsicUQiXSwx
+NCwwKQpwKFcsIlY0Iiw0LG51bGwsWyIkNCJdLFsibloiXSwxNCwwKQpvKFAuQXMucHJvdG90eXBlLCJn
+dU0iLCJWIiwyKQpzKFAsImlHIiwid1kiLDUyKQpzKFAsIncwIiwiZFUiLDM1KQpzKEwsImlTIiwiaTYi
+LDEpfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgcz1odW5rSGVscGVycy5taXhpbixyPWh1
+bmtIZWxwZXJzLmluaGVyaXQscT1odW5rSGVscGVycy5pbmhlcml0TWFueQpyKFAuTWgsbnVsbCkKcShQ
+Lk1oLFtILkZLLEouR3YsSi5tMSxQLmNYLEguZVQsUC5YUyxQLm5ZLEguYTcsUC5BbixILkZ1LEguSkIs
+SC5TVSxILlJlLEgud3YsUC5QbixILldVLEguTEksSC5UcCxILmY5LEgudGUsSC5icSxILlhPLEgua3Is
+UC5ZayxILnZoLEguTjYsSC5WUixILkVLLEguUGIsSC50USxILlNkLEguSmMsSC5HLFAuVzMsUC5paCxQ
+LkZ5LFAuR1YsUC5DdyxQLlBmLFAuRmUsUC52cyxQLk9NLFAucWgsUC5NTyxQLmtULFAueEksUC5tMCxQ
+LnBSLFAuYm4sUC5sbSxQLmxELFAuS1AsUC5sZixQLldZLFAuVWssUC5TaCxQLlJ3LFAuYnosUC5pUCxQ
+Lms1LFAuS1ksUC5DRCxQLmFFLFAuTjMsUC5jOCxQLlpkLFAuTSxQLkRuLFAuUEUsUC5VZixXLmlkLFcu
+RmssVy5KUSxXLkdtLFcudkQsVy5tNixXLk93LFcuVzksVy5kVyxXLm1rLFcuS28sUC5pSixQLkU0LFUu
+ZDIsVS5TZSxVLk1sLFUueUQsVS53YixCLmo4LEIucXAsVC5tUSxMLlhBLEwuRDgsTC5POSxMLkdiLFIu
+TEwsUi5INyxNLmxJLE8uekwsWC5XRCxYLmR2XSkKcShKLkd2LFtKLnlFLEoud2UsSi5NRixKLmpkLEou
+cUksSi5EcixILkVULFcuRDAsVy5BeixXLkxlLFcuTmgsVy5hZSxXLklCLFcubjcsVy5lYSxXLmJyLFcu
+U2csVy51OCxXLks3LFcuWFcsUC5oRl0pCnEoSi5NRixbSi5pQyxKLmtkLEouYzVdKQpyKEouUG8sSi5q
+ZCkKcShKLnFJLFtKLmJVLEoua0RdKQpxKFAuY1gsW0guQlIsSC5iUSxILmkxLEguVTUsSC5BTSxILnU2
+LEguWFIsUC5tVyxILnVuXSkKcShILkJSLFtILlp5LEguUUNdKQpyKEgub2wsSC5aeSkKcihILlVxLEgu
+UUMpCnIoSC5qVixILlVxKQpxKFAuWFMsW0guYyxQLkV6LEguYXosSC52VixILkVxLFAuQzYsSC5rUyxQ
+LlVkLFAuRixQLkFULFAubXAsUC51YixQLmRzLFAubGosUC5VVixQLnAsTC5RV10pCnIoUC51eSxQLm5Z
+KQpxKFAudXksW0gudzIsVy53eixXLmU3XSkKcihILnFqLEgudzIpCnEoSC5iUSxbSC5hTCxILk1CLEgu
+aTVdKQpxKEguYUwsW0gubkgsSC5sSixQLmk4XSkKcihILnh5LEguaTEpCnEoUC5BbixbSC5NSCxILlNP
+LEguVTFdKQpyKEguZDUsSC5BTSkKcihQLlJVLFAuUG4pCnIoUC5HaixQLlJVKQpyKEguUEQsUC5HaikK
+cihILkxQLEguV1UpCnEoSC5UcCxbSC5FMSxILkF5LEgubGMsSC5kQyxILlZYLFAudGgsUC5oYSxQLldN
+LFAucFYsUC5qWixQLkI1LFAuT1IsUC55USxQLlZDLFAuUlosUC5jNixQLnFkLFcuQ3YsVy52TixXLlV2
+LFcuRWcsVy5FbyxXLldrLFcuSUEsUC5HRSxQLk43LFAudVEsUC5EVixQLlBDLFAuUVMsUC5ucCxQLlV0
+LFUuYU4sVS5iMCxMLmUsTC5vWixMLmpyLEwueTgsTC5IaSxMLkJULEwuUFksTC5MLEwuV3gsTC5IbyxM
+LmROLEwuSUMsTC54eixMLkJOLEwuZkMsTC5UbSxMLnVlLEwuR0gsTC5FRSxMLlZTLEwuVEQsTC5JZixM
+LnRCLEwubTIsUi5NRCxNLnE3LE0uTm9dKQpxKEguRTEsW0guQ2osSC53TixQLlNYLFAuR3MsUC5VNyxQ
+LnJhLFAudGksUC5XRixQLm4xLFAuY1MsUC5KVCxQLk1FLFAueTUsUC55SSxXLktTLFcuQTMsVy5mbSxQ
+LkUyLFAuamcsTC5xbF0pCnIoSC5XMCxQLkV6KQpxKEgubGMsW0guengsSC5yVF0pCnIoSC5rWSxQLkM2
+KQpyKFAuaWwsUC5ZaykKcShQLmlsLFtILk41LFAudXcsVy5jZixXLlN5XSkKcShQLm1XLFtILktXLFAu
+cTRdKQpyKEguTFosSC5FVCkKcShILkxaLFtILlJHLEguV0JdKQpyKEguVlAsSC5SRykKcihILkRnLEgu
+VlApCnIoSC5aRyxILldCKQpyKEguUGcsSC5aRykKcShILlBnLFtILnhqLEguZEUsSC5aQSxILmRULEgu
+UHEsSC5lRSxILlY2XSkKcihILmlNLEgua1MpCnEoSC5BeSxbUC5WcyxQLkZ0LFAueUgsUC5kYSxQLm9R
+LFAudnIsUC5ydCxQLktGLFAuWkwsUC5SVCxQLnJxLFAuUlcsUC51TyxQLkV2LFAuVnAsUC54cixQLk56
+LEwuVlcsTC5uVCxMLk5ZLEwuUUxdKQpyKFAuWmYsUC5QZikKcihQLkppLFAubTApCnIoUC5YdixQLnBS
+KQpyKFAuYjYsUC5YdikKcihQLlZqLFAuV1kpCnEoUC5VayxbUC5DVixQLlppLFAuYnldKQpyKFAud0ks
+UC5rVCkKcShQLndJLFtQLlU4LFAub2osUC5NeCxQLkUzLFAuR1ldKQpyKFAuSzgsUC5VZCkKcihQLnR1
+LFAuU2gpCnIoUC51NSxQLlppKQpxKFAuQVQsW1AuYkosUC5lWV0pCnIoUC5xZSxQLkRuKQpxKFcuRDAs
+W1cuS1YsVy53YSxXLks1LFcuQ21dKQpxKFcuS1YsW1cuY3YsVy5ueCxXLlFGLFcuQ1FdKQpxKFcuY3Ys
+W1cucUUsUC5oaV0pCnEoVy5xRSxbVy5HaCxXLmZZLFcuclosVy5RUCxXLmg0LFcuU04sVy5scCxXLlRi
+LFcuSXYsVy5XUCxXLnlZXSkKcihXLm9KLFcuTGUpCnIoVy5oSCxXLkF6KQpyKFcuVmIsVy5RRikKcihX
+LmZKLFcud2EpCnEoVy5lYSxbVy53NixXLmV3XSkKcihXLkFqLFcudzYpCnIoVy5yQixXLks3KQpyKFcu
+QkgsVy5yQikKcihXLnc0LFcuSUIpCnIoVy5vYSxXLlhXKQpyKFcucmgsVy5vYSkKcihXLmk3LFcuY2Yp
+CnIoUC5BcyxQLlZqKQpxKFAuQXMsW1cuSTQsUC5LZV0pCnIoVy5STyxQLnFoKQpyKFcuQ3EsVy5STykK
+cihXLnhDLFAuTU8pCnIoVy5jdCxXLm02KQpyKFAuQmYsUC5pSikKcShQLkU0LFtQLnI3LFAudmddKQpy
+KFAuVHosUC52ZykKcihQLm5kLFAuaGkpCnEoTC5EOCxbTC52dCxMLmNEXSkKcihCLmZ2LE8uekwpCnEo
+Qi5mdixbRS5PRixGLnJ1LEwuSVZdKQpzKEgudzIsSC5SZSkKcyhILlFDLFAubEQpCnMoSC5SRyxQLmxE
+KQpzKEguVlAsSC5TVSkKcyhILldCLFAubEQpCnMoSC5aRyxILlNVKQpzKFAublksUC5sRCkKcyhQLldZ
+LFAubGYpCnMoUC5SVSxQLktQKQpzKFAucFIsUC5sZikKcyhXLkxlLFcuaWQpCnMoVy5LNyxQLmxEKQpz
+KFcuckIsVy5HbSkKcyhXLlhXLFAubEQpCnMoVy5vYSxXLkdtKQpzKFAudmcsUC5sRCl9KSgpCnZhciB2
+PXt0eXBlVW5pdmVyc2U6e2VDOm5ldyBNYXAoKSx0Ujp7fSxlVDp7fSx0UFY6e30sc0VBOltdfSxtYW5n
+bGVkR2xvYmFsTmFtZXM6e0lqOiJpbnQiLENQOiJkb3VibGUiLFpaOiJudW0iLHFVOiJTdHJpbmciLGEy
+OiJib29sIixjODoiTnVsbCIsek06Ikxpc3QifSxtYW5nbGVkTmFtZXM6e30sdHlwZXM6WyJ+KCkiLCJ+
+KEFqKSIsInFVKHFVKSIsIn4oY3YpIiwiQChAKSIsIn4ofigpKSIsImEyKHFVKSIsImI4PH4+KEFqKSIs
+In4ocVUscVUpIiwifihNaD8sTWg/KSIsIkAoKSIsIn4ocVUsQCkiLCJ+KHh1PHFVPikiLCJjOChAKSIs
+ImEyKGN2LHFVLHFVLEpRKSIsImM4KCkiLCJhMihrRikiLCJjOChlYSkiLCJ+KG42LHFVLElqKSIsIn4o
+cVVbQF0pIiwiSWooSWosSWopIiwiQChxVSkiLCJ+KHFVLHFVPykiLCJuNihALEApIiwifihxVSxJaiki
+LCJhMihLVikiLCJaMDxxVSxxVT4oWjA8cVUscVU+LHFVKSIsIn4oZWEpIiwifihHRCxAKSIsInZzPEA+
+KEApIiwifihLVixLVj8pIiwifihALEApIiwiYzgoQCxAKSIsImEyKHh1PHFVPikiLCJjOChNaCxHeiki
+LCJNaD8oQCkiLCJUejxAPihAKSIsIkU0KEApIiwiTEwoQCkiLCJaMDxxVSxNaD8+KExMKSIsIn4oTWhb
+R3o/XSkiLCJjOCh+KCkpIiwiYzgoWjA8cVUsTWg/Pj8pIiwiYzgoTWgsQCkiLCJyNyhAKSIsIn4oSWos
+QCkiLCJ+KGV3KSIsInFVKFowPEAsQD4pIiwiYTIoSDcpIiwicVUocVU/KSIsIkAoQCxxVSkiLCJ+KEAp
+IiwiTWg/KE1oPykiLCJjOChALEd6KSJdLGludGVyY2VwdG9yc0J5VGFnOm51bGwsbGVhZlRhZ3M6bnVs
+bCxhcnJheVJ0aTpTeW1ib2woIiR0aSIpfQpILnhiKHYudHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3si
+aUMiOiJNRiIsImtkIjoiTUYiLCJjNSI6Ik1GIiwicngiOiJlYSIsImU1IjoiZWEiLCJZMCI6ImhpIiwi
+dHAiOiJoaSIsIkc4IjoiZXciLCJNciI6InFFIiwiZUwiOiJxRSIsIkkwIjoiS1YiLCJocyI6IktWIiwi
+WGciOiJRRiIsIm5yIjoiQWoiLCJ5NCI6Inc2IiwiYVAiOiJDbSIsInhjIjoibngiLCJrSiI6Im54Iiwi
+elUiOiJEZyIsImRmIjoiRVQiLCJ5RSI6eyJhMiI6W119LCJ3ZSI6eyJjOCI6W119LCJNRiI6eyJ2bSI6
+W119LCJqZCI6eyJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwiUG8iOnsiamQiOlsiMSJd
+LCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwibTEiOnsiQW4iOlsiMSJdfSwicUkiOnsi
+Q1AiOltdLCJaWiI6W119LCJiVSI6eyJDUCI6W10sIklqIjpbXSwiWloiOltdfSwia0QiOnsiQ1AiOltd
+LCJaWiI6W119LCJEciI6eyJxVSI6W10sInZYIjpbXX0sIkJSIjp7ImNYIjpbIjIiXX0sImVUIjp7IkFu
+IjpbIjIiXX0sIlp5Ijp7IkJSIjpbIjEiLCIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwib2wiOnsi
+WnkiOlsiMSIsIjIiXSwiQlIiOlsiMSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImNYLkUiOiIy
+In0sIlVxIjp7ImxEIjpbIjIiXSwiek0iOlsiMiJdLCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNY
+IjpbIjIiXX0sImpWIjp7IlVxIjpbIjEiLCIyIl0sImxEIjpbIjIiXSwiek0iOlsiMiJdLCJCUiI6WyIx
+IiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwibEQuRSI6IjIiLCJjWC5FIjoiMiJ9LCJjIjp7IlhT
+IjpbXX0sInFqIjp7ImxEIjpbIklqIl0sIlJlIjpbIklqIl0sInpNIjpbIklqIl0sImJRIjpbIklqIl0s
+ImNYIjpbIklqIl0sImxELkUiOiJJaiIsIlJlLkUiOiJJaiJ9LCJiUSI6eyJjWCI6WyIxIl19LCJhTCI6
+eyJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm5IIjp7ImFMIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIx
+Il0sImFMLkUiOiIxIiwiY1guRSI6IjEifSwiYTciOnsiQW4iOlsiMSJdfSwiaTEiOnsiY1giOlsiMiJd
+LCJjWC5FIjoiMiJ9LCJ4eSI6eyJpMSI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiY1gu
+RSI6IjIifSwiTUgiOnsiQW4iOlsiMiJdfSwibEoiOnsiYUwiOlsiMiJdLCJiUSI6WyIyIl0sImNYIjpb
+IjIiXSwiYUwuRSI6IjIiLCJjWC5FIjoiMiJ9LCJVNSI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIlNP
+Ijp7IkFuIjpbIjEiXX0sIkFNIjp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiZDUiOnsiQU0iOlsiMSJd
+LCJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiVTEiOnsiQW4iOlsiMSJdfSwiTUIiOnsi
+YlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkZ1Ijp7IkFuIjpbIjEiXX0sInU2Ijp7ImNY
+IjpbIjEiXSwiY1guRSI6IjEifSwiSkIiOnsiQW4iOlsiMSJdfSwidzIiOnsibEQiOlsiMSJdLCJSZSI6
+WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJ3diI6eyJHRCI6W119LCJQRCI6
+eyJHaiI6WyIxIiwiMiJdLCJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJd
+LCJaMCI6WyIxIiwiMiJdfSwiV1UiOnsiWjAiOlsiMSIsIjIiXX0sIkxQIjp7IldVIjpbIjEiLCIyIl0s
+IlowIjpbIjEiLCIyIl19LCJYUiI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkxJIjp7InZRIjpbXX0s
+IlcwIjp7IkV6IjpbXSwiWFMiOltdfSwiYXoiOnsiWFMiOltdfSwidlYiOnsiWFMiOltdfSwidGUiOnsi
+UnoiOltdfSwiWE8iOnsiR3oiOltdfSwiVHAiOnsiRUgiOltdfSwiQXkiOnsiRUgiOltdfSwiRTEiOnsi
+RUgiOltdfSwibGMiOnsiRUgiOltdfSwiengiOnsiRUgiOltdfSwiclQiOnsiRUgiOltdfSwiRXEiOnsi
+WFMiOltdfSwia1kiOnsiWFMiOltdfSwiTjUiOnsiWWsiOlsiMSIsIjIiXSwiRm8iOlsiMSIsIjIiXSwi
+WjAiOlsiMSIsIjIiXSwiWWsuSyI6IjEiLCJZay5WIjoiMiJ9LCJpNSI6eyJiUSI6WyIxIl0sImNYIjpb
+IjEiXSwiY1guRSI6IjEifSwiTjYiOnsiQW4iOlsiMSJdfSwiVlIiOnsid0wiOltdLCJ2WCI6W119LCJF
+SyI6eyJpYiI6W10sIk9kIjpbXX0sIktXIjp7ImNYIjpbImliIl0sImNYLkUiOiJpYiJ9LCJQYiI6eyJB
+biI6WyJpYiJdfSwidFEiOnsiT2QiOltdfSwidW4iOnsiY1giOlsiT2QiXSwiY1guRSI6Ik9kIn0sIlNk
+Ijp7IkFuIjpbIk9kIl19LCJFVCI6eyJBUyI6W119LCJMWiI6eyJYaiI6WyIxIl0sIkVUIjpbXSwiQVMi
+OltdfSwiRGciOnsibEQiOlsiQ1AiXSwiWGoiOlsiQ1AiXSwiek0iOlsiQ1AiXSwiRVQiOltdLCJiUSI6
+WyJDUCJdLCJBUyI6W10sImNYIjpbIkNQIl0sIlNVIjpbIkNQIl0sImxELkUiOiJDUCJ9LCJQZyI6eyJs
+RCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpb
+XSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXX0sInhqIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpN
+IjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJd
+LCJsRC5FIjoiSWoifSwiZEUiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQi
+OltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9
+LCJaQSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklq
+Il0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sImRUIjp7ImxEIjpb
+IklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJj
+WCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiUHEiOnsibEQiOlsiSWoiXSwiWGoiOlsi
+SWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNV
+IjpbIklqIl0sImxELkUiOiJJaiJ9LCJlRSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJ
+aiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQu
+RSI6IklqIn0sIlY2Ijp7ImxEIjpbIklqIl0sIm42IjpbXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwi
+RVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJ
+aiJ9LCJrUyI6eyJYUyI6W119LCJpTSI6eyJFeiI6W10sIlhTIjpbXX0sInZzIjp7ImI4IjpbIjEiXX0s
+IkdWIjp7IkFuIjpbIjEiXX0sInE0Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiQ3ciOnsiWFMiOltd
+fSwiWmYiOnsiUGYiOlsiMSJdfSwibTAiOnsiUW0iOltdfSwiSmkiOnsibTAiOltdLCJRbSI6W119LCJi
+NiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImxmLkUiOiIxIn0s
+ImxtIjp7IkFuIjpbIjEiXX0sIm1XIjp7ImNYIjpbIjEiXX0sInV5Ijp7ImxEIjpbIjEiXSwiek0iOlsi
+MSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sImlsIjp7IllrIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIy
+Il19LCJZayI6eyJaMCI6WyIxIiwiMiJdfSwiUG4iOnsiWjAiOlsiMSIsIjIiXX0sIkdqIjp7IlJVIjpb
+IjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJWaiI6
+eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJYdiI6eyJsZiI6WyIx
+Il0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJ1dyI6eyJZayI6WyJxVSIsIkAiXSwi
+WjAiOlsicVUiLCJAIl0sIllrLksiOiJxVSIsIllrLlYiOiJAIn0sImk4Ijp7ImFMIjpbInFVIl0sImJR
+IjpbInFVIl0sImNYIjpbInFVIl0sImFMLkUiOiJxVSIsImNYLkUiOiJxVSJ9LCJDViI6eyJVayI6WyJ6
+TTxJaj4iLCJxVSJdLCJVay5TIjoiek08SWo+In0sIlU4Ijp7IndJIjpbInpNPElqPiIsInFVIl19LCJa
+aSI6eyJVayI6WyJxVSIsInpNPElqPiJdfSwiVWQiOnsiWFMiOltdfSwiSzgiOnsiWFMiOltdfSwiYnki
+OnsiVWsiOlsiTWg/IiwicVUiXSwiVWsuUyI6Ik1oPyJ9LCJvaiI6eyJ3SSI6WyJNaD8iLCJxVSJdfSwi
+TXgiOnsid0kiOlsicVUiLCJNaD8iXX0sInU1Ijp7IlVrIjpbInFVIiwiek08SWo+Il0sIlVrLlMiOiJx
+VSJ9LCJFMyI6eyJ3SSI6WyJxVSIsInpNPElqPiJdfSwiR1kiOnsid0kiOlsiek08SWo+IiwicVUiXX0s
+IkNQIjp7IlpaIjpbXX0sIklqIjp7IlpaIjpbXX0sInpNIjp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwi
+aWIiOnsiT2QiOltdfSwieHUiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJxVSI6eyJ2WCI6W119LCJD
+NiI6eyJYUyI6W119LCJFeiI6eyJYUyI6W119LCJGIjp7IlhTIjpbXX0sIkFUIjp7IlhTIjpbXX0sImJK
+Ijp7IlhTIjpbXX0sImVZIjp7IlhTIjpbXX0sIm1wIjp7IlhTIjpbXX0sInViIjp7IlhTIjpbXX0sImRz
+Ijp7IlhTIjpbXX0sImxqIjp7IlhTIjpbXX0sIlVWIjp7IlhTIjpbXX0sIms1Ijp7IlhTIjpbXX0sIktZ
+Ijp7IlhTIjpbXX0sInAiOnsiWFMiOltdfSwiQ0QiOnsiUnoiOltdfSwiYUUiOnsiUnoiOltdfSwiWmQi
+OnsiR3oiOltdfSwiTSI6eyJCTCI6W119LCJEbiI6eyJpRCI6W119LCJVZiI6eyJpRCI6W119LCJxZSI6
+eyJpRCI6W119LCJjdiI6eyJLViI6W10sIkQwIjpbXX0sImZKIjp7IkQwIjpbXX0sIkFqIjp7ImVhIjpb
+XX0sIktWIjp7IkQwIjpbXX0sImV3Ijp7ImVhIjpbXX0sIkpRIjp7ImtGIjpbXX0sInFFIjp7ImN2Ijpb
+XSwiS1YiOltdLCJEMCI6W119LCJHaCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiZlkiOnsiY3Yi
+OltdLCJLViI6W10sIkQwIjpbXX0sInJaIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJRUCI6eyJj
+diI6W10sIktWIjpbXSwiRDAiOltdfSwibngiOnsiS1YiOltdLCJEMCI6W119LCJRRiI6eyJLViI6W10s
+IkQwIjpbXX0sIklCIjp7InRuIjpbIlpaIl19LCJ3eiI6eyJsRCI6WyIxIl0sInpNIjpbIjEiXSwiYlEi
+OlsiMSJdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sImhIIjp7IkF6IjpbXX0sImg0Ijp7ImN2IjpbXSwi
+S1YiOltdLCJEMCI6W119LCJWYiI6eyJLViI6W10sIkQwIjpbXX0sIndhIjp7IkQwIjpbXX0sImU3Ijp7
+ImxEIjpbIktWIl0sInpNIjpbIktWIl0sImJRIjpbIktWIl0sImNYIjpbIktWIl0sImxELkUiOiJLViJ9
+LCJCSCI6eyJsRCI6WyJLViJdLCJHbSI6WyJLViJdLCJ6TSI6WyJLViJdLCJYaiI6WyJLViJdLCJiUSI6
+WyJLViJdLCJjWCI6WyJLViJdLCJsRC5FIjoiS1YiLCJHbS5FIjoiS1YifSwiU04iOnsiY3YiOltdLCJL
+ViI6W10sIkQwIjpbXX0sImxwIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJUYiI6eyJjdiI6W10s
+IktWIjpbXSwiRDAiOltdfSwiSXYiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIldQIjp7ImN2Ijpb
+XSwiS1YiOltdLCJEMCI6W119LCJ5WSI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwidzYiOnsiZWEi
+OltdfSwiSzUiOnsidjYiOltdLCJEMCI6W119LCJDbSI6eyJEMCI6W119LCJDUSI6eyJLViI6W10sIkQw
+IjpbXX0sInc0Ijp7InRuIjpbIlpaIl19LCJyaCI6eyJsRCI6WyJLViJdLCJHbSI6WyJLViJdLCJ6TSI6
+WyJLViJdLCJYaiI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJLViJdLCJsRC5FIjoiS1YiLCJHbS5F
+IjoiS1YifSwiY2YiOnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl19LCJpNyI6eyJZayI6
+WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsuViI6InFVIn0sIlN5Ijp7
+IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdLCJZay5LIjoicVUiLCJZay5WIjoicVUifSwi
+STQiOnsibGYiOlsicVUiXSwieHUiOlsicVUiXSwiYlEiOlsicVUiXSwiY1giOlsicVUiXSwibGYuRSI6
+InFVIn0sIlJPIjp7InFoIjpbIjEiXX0sIkNxIjp7IlJPIjpbIjEiXSwicWgiOlsiMSJdfSwieEMiOnsi
+TU8iOlsiMSJdfSwidkQiOnsia0YiOltdfSwibTYiOnsia0YiOltdfSwiY3QiOnsia0YiOltdfSwiT3ci
+Onsia0YiOltdfSwiVzkiOnsiQW4iOlsiMSJdfSwiZFciOnsidjYiOltdLCJEMCI6W119LCJtayI6eyJ5
+MCI6W119LCJLbyI6eyJvbiI6W119LCJBcyI6eyJsZiI6WyJxVSJdLCJ4dSI6WyJxVSJdLCJiUSI6WyJx
+VSJdLCJjWCI6WyJxVSJdfSwicjciOnsiRTQiOltdfSwiVHoiOnsibEQiOlsiMSJdLCJ6TSI6WyIxIl0s
+ImJRIjpbIjEiXSwiRTQiOltdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sIm5kIjp7ImhpIjpbXSwiY3Yi
+OltdLCJLViI6W10sIkQwIjpbXX0sIktlIjp7ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImJRIjpbInFV
+Il0sImNYIjpbInFVIl0sImxmLkUiOiJxVSJ9LCJoaSI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwi
+UVciOnsiWFMiOltdLCJSeiI6W119LCJYQSI6eyJrRiI6W119LCJ2dCI6eyJEOCI6W119LCJjRCI6eyJE
+OCI6W119LCJkdiI6eyJSeiI6W119LCJPRiI6eyJmdiI6W119LCJydSI6eyJmdiI6W119LCJJViI6eyJm
+diI6W119LCJuNiI6eyJ6TSI6WyJJaiJdLCJiUSI6WyJJaiJdLCJjWCI6WyJJaiJdLCJBUyI6W119fScp
+KQpILkZGKHYudHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3sidzIiOjEsIlFDIjoyLCJMWiI6MSwia1Qi
+OjIsIm1XIjoxLCJ1eSI6MSwiaWwiOjIsIlZqIjoxLCJYdiI6MSwiblkiOjEsIldZIjoxLCJwUiI6MSwi
+dmciOjF9JykpCnZhciB1PXtsOiJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdp
+dGggYSBmcmFnbWVudCBjb21wb25lbnQiLGk6IkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20g
+YSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIsajoiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93
+cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdpdGggYW4gYXV0aG9yaXR5IixjOiJFcnJvciBoYW5k
+bGVyIG11c3QgYWNjZXB0IG9uZSBPYmplY3Qgb3Igb25lIE9iamVjdCBhbmQgYSBTdGFja1RyYWNlIGFz
+IGFyZ3VtZW50cywgYW5kIHJldHVybiBhIHZhbHVlIG9mIHRoZSByZXR1cm5lZCBmdXR1cmUncyB0eXBl
+IixkOiJhcmVhLWFuYWx5emVyLGFuYWx5emVyLW5uYmQtbWlncmF0aW9uLHR5cGUtYnVnIn0KdmFyIHQ9
+KGZ1bmN0aW9uIHJ0aWkoKXt2YXIgcz1ILk4wCnJldHVybnticTpzKCJHaCIpLG46cygiQ3ciKSxjUjpz
+KCJyWiIpLHc6cygiQXoiKSxrOnMoIlFQIiksZ0Y6cygiUEQ8R0QsQD4iKSxXOnMoImJRPEA+IiksaDpz
+KCJjdiIpLG06cygiWFMiKSxCOnMoImVhIiksZzg6cygiUnoiKSxjODpzKCJoSCIpLFk6cygiRUgiKSxp
+OnMoImI4PEA+IiksSjpzKCJMTCIpLGdwOnMoIkg3IiksSTpzKCJTZyIpLG86cygidlEiKSxlaDpzKCJj
+WDxLVj4iKSxPOnMoImNYPHFVPiIpLFI6cygiY1g8QD4iKSxmQTpzKCJqZDxTZT4iKSxnaTpzKCJqZDxq
+OD4iKSxkOnMoImpkPFowPHFVLE1oPz4+IiksZmg6cygiamQ8RDg+IikscjpzKCJqZDxrRj4iKSxzOnMo
+ImpkPHFVPiIpLGhoOnMoImpkPHlEPiIpLGFKOnMoImpkPHdiPiIpLGdOOnMoImpkPG42PiIpLGI6cygi
+amQ8QD4iKSx0OnMoImpkPElqPiIpLGQ0OnMoImpkPHFVPz4iKSxUOnMoIndlIiksZUg6cygidm0iKSx1
+OnMoImM1IiksYVU6cygiWGo8QD4iKSxhbTpzKCJUejxAPiIpLGVvOnMoIk41PEdELEA+IiksZHo6cygi
+aEYiKSxmNDpzKCJ6TTxqOD4iKSx4OnMoInpNPFowPHFVLE1oPz4+IiksZXc6cygiek08TWg+IiksRDpz
+KCJ6TTxxVT4iKSxqOnMoInpNPEA+IiksTDpzKCJ6TTxJaj4iKSxlZTpzKCJ6TTxNaD8+IiksRjpzKCJ1
+OCIpLGg2OnMoIlowPHFVLE1oPiIpLEU6cygiWjA8cVUscVU+IiksZjpzKCJaMDxALEA+IiksRzpzKCJa
+MDxxVSxNaD8+IiksZHY6cygibEo8cVUscVU+IiksZG86cygibEo8cVUsQD4iKSxWOnMoIkFqIiksZEU6
+cygiRVQiKSxBOnMoIktWIiksZjY6cygia0YiKSxQOnMoImM4IiksSzpzKCJNaCIpLHA6cygiZXciKSxx
+OnMoInRuPFpaPiIpLGZ2OnMoIndMIiksY3o6cygiaWIiKSxhTzpzKCJuZCIpLEM6cygieHU8cVU+Iiks
+bDpzKCJHeiIpLE46cygicVUiKSxkRzpzKCJxVShxVSkiKSxnNzpzKCJoaSIpLGZvOnMoIkdEIiksYVc6
+cygieVkiKSxlSzpzKCJFeiIpLGFrOnMoIkFTIiksZ2M6cygibjYiKSxiSTpzKCJrZCIpLGR3OnMoIkdq
+PHFVLHFVPiIpLGREOnMoImlEIiksZUo6cygidTY8cVU+IiksZzQ6cygiSzUiKSxjaTpzKCJ2NiIpLGcy
+OnMoIkNtIiksYmo6cygiWmY8Zko+IiksaDk6cygiQ1EiKSxhYzpzKCJlNyIpLFE6cygiQ3E8QWo+Iiks
+VTpzKCJ3ejxjdj4iKSxhbzpzKCJ2czxmSj4iKSxjOnMoInZzPEA+IiksZko6cygidnM8SWo+IiksY3I6
+cygiSlEiKSx5OnMoImEyIiksYWw6cygiYTIoTWgpIiksZ1I6cygiQ1AiKSx6OnMoIkAiKSxmTzpzKCJA
+KCkiKSx2OnMoIkAoTWgpIiksYTpzKCJAKE1oLEd6KSIpLGJVOnMoIkAoeHU8cVU+KSIpLGRPOnMoIkAo
+cVUpIiksYjg6cygiQChALEApIiksUzpzKCJJaiIpLGF3OnMoIjAmKiIpLF86cygiTWgqIiksY2g6cygi
+RDA/IiksYkc6cygiYjg8Yzg+PyIpLGVzOnMoIkU0PyIpLGJrOnMoInpNPHFVPj8iKSxiTTpzKCJ6TTxA
+Pj8iKSxjWjpzKCJaMDxxVSxxVT4/IiksYzk6cygiWjA8cVUsQD4/IiksZm46cygiWjA8cVUsTWg/Pj8i
+KSxYOnMoIk1oPyIpLGRrOnMoInFVPyIpLGU6cygiRmU8QCxAPj8iKSxnOnMoImJuPyIpLGI3OnMoImEy
+KE1oKT8iKSxidzpzKCJAKGVhKT8iKSxmVjpzKCJNaD8oTWg/LE1oPyk/IiksZEE6cygiTWg/KEApPyIp
+LFo6cygifigpPyIpLGd4OnMoIn4oZXcpPyIpLGRpOnMoIlpaIiksSDpzKCJ+IiksTTpzKCJ+KCkiKSxl
+QTpzKCJ+KHFVLHFVKSIpLGNBOnMoIn4ocVUsQCkiKX19KSgpOyhmdW5jdGlvbiBjb25zdGFudHMoKXt2
+YXIgcz1odW5rSGVscGVycy5tYWtlQ29uc3RMaXN0CkMueG49Vy5HaC5wcm90b3R5cGUKQy5SWT1XLlFQ
+LnByb3RvdHlwZQpDLm1IPVcuYWUucHJvdG90eXBlCkMuQlo9Vy5WYi5wcm90b3R5cGUKQy5EdD1XLmZK
+LnByb3RvdHlwZQpDLk9rPUouR3YucHJvdG90eXBlCkMuTm09Si5qZC5wcm90b3R5cGUKQy5qbj1KLmJV
+LnByb3RvdHlwZQpDLkNEPUoucUkucHJvdG90eXBlCkMueEI9Si5Eci5wcm90b3R5cGUKQy5ERz1KLmM1
+LnByb3RvdHlwZQpDLkV4PVcudTgucHJvdG90eXBlCkMuTkE9SC5WNi5wcm90b3R5cGUKQy50NT1XLkJI
+LnByb3RvdHlwZQpDLkx0PVcuU04ucHJvdG90eXBlCkMuWlE9Si5pQy5wcm90b3R5cGUKQy5JZT1XLlRi
+LnByb3RvdHlwZQpDLnZCPUoua2QucHJvdG90eXBlCkMub2w9Vy5LNS5wcm90b3R5cGUKQy55OD1uZXcg
+UC5VOCgpCkMuaDk9bmV3IFAuQ1YoKQpDLkd3PW5ldyBILkZ1KEguTjAoIkZ1PDAmPiIpKQpDLk80PWZ1
+bmN0aW9uIGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIgcyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJp
+bmcuY2FsbChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKfQpDLllxPWZ1
+bmN0aW9uKCkgewogIHZhciB0b1N0cmluZ0Z1bmN0aW9uID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu
+ZzsKICBmdW5jdGlvbiBnZXRUYWcobykgewogICAgdmFyIHMgPSB0b1N0cmluZ0Z1bmN0aW9uLmNhbGwo
+byk7CiAgICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKICB9CiAgZnVuY3Rpb24g
+Z2V0VW5rbm93blRhZyhvYmplY3QsIHRhZykgewogICAgaWYgKC9eSFRNTFtBLVpdLipFbGVtZW50JC8u
+dGVzdCh0YWcpKSB7CiAgICAgIHZhciBuYW1lID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxsKG9iamVjdCk7
+CiAgICAgIGlmIChuYW1lID09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gbnVsbDsKICAgICAgcmV0
+dXJuICJIVE1MRWxlbWVudCI7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdldFVua25vd25UYWdHZW5lcmlj
+QnJvd3NlcihvYmplY3QsIHRhZykgewogICAgaWYgKHNlbGYuSFRNTEVsZW1lbnQgJiYgb2JqZWN0IGlu
+c3RhbmNlb2YgSFRNTEVsZW1lbnQpIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgcmV0dXJuIGdldFVu
+a25vd25UYWcob2JqZWN0LCB0YWcpOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWcodGFnKSB7
+CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgICBpZiAo
+dHlwZW9mIHdpbmRvd1t0YWddID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAgIHZhciBjb25z
+dHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPSAiZnVuY3Rp
+b24iKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgfQogIGZ1
+bmN0aW9uIGRpc2NyaW1pbmF0b3IodGFnKSB7IHJldHVybiBudWxsOyB9CiAgdmFyIGlzQnJvd3NlciA9
+IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCI7CiAgcmV0dXJuIHsKICAgIGdldFRhZzogZ2V0VGFn
+LAogICAgZ2V0VW5rbm93blRhZzogaXNCcm93c2VyID8gZ2V0VW5rbm93blRhZ0dlbmVyaWNCcm93c2Vy
+IDogZ2V0VW5rbm93blRhZywKICAgIHByb3RvdHlwZUZvclRhZzogcHJvdG90eXBlRm9yVGFnLAogICAg
+ZGlzY3JpbWluYXRvcjogZGlzY3JpbWluYXRvciB9Owp9CkMud2I9ZnVuY3Rpb24oZ2V0VGFnRmFsbGJh
+Y2spIHsKICByZXR1cm4gZnVuY3Rpb24oaG9va3MpIHsKICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9
+ICJvYmplY3QiKSByZXR1cm4gaG9va3M7CiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50Owog
+ICAgaWYgKHVhLmluZGV4T2YoIkR1bXBSZW5kZXJUcmVlIikgPj0gMCkgcmV0dXJuIGhvb2tzOwogICAg
+aWYgKHVhLmluZGV4T2YoIkNocm9tZSIpID49IDApIHsKICAgICAgZnVuY3Rpb24gY29uZmlybShwKSB7
+CiAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT0gIm9iamVjdCIgJiYgd2luZG93W3BdICYmIHdp
+bmRvd1twXS5uYW1lID09IHA7CiAgICAgIH0KICAgICAgaWYgKGNvbmZpcm0oIldpbmRvdyIpICYmIGNv
+bmZpcm0oIkhUTUxFbGVtZW50IikpIHJldHVybiBob29rczsKICAgIH0KICAgIGhvb2tzLmdldFRhZyA9
+IGdldFRhZ0ZhbGxiYWNrOwogIH07Cn0KQy5LVT1mdW5jdGlvbihob29rcykgewogIGlmICh0eXBlb2Yg
+ZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJmdW5jdGlvbiIpIHJldHVybiBob29rczsKICBo
+b29rcy5nZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcoaG9va3MuZ2V0VGFnKTsKfQpD
+LmZRPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcHJv
+dG90eXBlRm9yVGFnID0gaG9va3MucHJvdG90eXBlRm9yVGFnOwogIGZ1bmN0aW9uIGdldFRhZ0ZpeGVk
+KG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICBpZiAodGFnID09ICJEb2N1bWVudCIpIHsK
+ICAgICAgaWYgKCEhby54bWxWZXJzaW9uKSByZXR1cm4gIiFEb2N1bWVudCI7CiAgICAgIHJldHVybiAi
+IUhUTUxEb2N1bWVudCI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlvbiBwcm90b3R5
+cGVGb3JUYWdGaXhlZCh0YWcpIHsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgcmV0dXJuIG51bGw7
+CiAgICByZXR1cm4gcHJvdG90eXBlRm9yVGFnKHRhZyk7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRh
+Z0ZpeGVkOwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0ZpeGVkOwp9CkMu
+ZGs9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9PSAi
+b2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50LmluZGV4T2Yo
+IkZpcmVmb3giKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7
+CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJE
+YXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJHZW9HZW9sb2NhdGlvbiI6ICJHZW9sb2NhdGlv
+biIsCiAgICAiTG9jYXRpb24iOiAiIUxvY2F0aW9uIiwKICAgICJXb3JrZXJNZXNzYWdlRXZlbnQiOiAi
+TWVzc2FnZUV2ZW50IiwKICAgICJYTUxEb2N1bWVudCI6ICIhRG9jdW1lbnQifTsKICBmdW5jdGlvbiBn
+ZXRUYWdGaXJlZm94KG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICByZXR1cm4gcXVpY2tN
+YXBbdGFnXSB8fCB0YWc7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpcmVmb3g7Cn0KQy54aT1m
+dW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmpl
+Y3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5kZXhPZigiVHJp
+ZGVudC8iKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAg
+dmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRh
+VHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1MRERFbGVtZW50IjogIkhUTUxFbGVtZW50IiwK
+ICAgICJIVE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MUGhyYXNlRWxlbWVudCI6
+ICJIVE1MRWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAiR2VvcG9zaXRpb24iCiAgfTsKICBmdW5jdGlv
+biBnZXRUYWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgdmFyIG5ld1RhZyA9IHF1
+aWNrTWFwW3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1cm4gbmV3VGFnOwogICAgaWYgKHRhZyA9PSAi
+T2JqZWN0IikgewogICAgICBpZiAod2luZG93LkRhdGFWaWV3ICYmIChvIGluc3RhbmNlb2Ygd2luZG93
+LkRhdGFWaWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBm
+dW5jdGlvbiBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsKICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRv
+d1t0YWddOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJu
+IGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnSUU7CiAgaG9v
+a3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnSUU7Cn0KQy5pNz1mdW5jdGlvbihob29r
+cykgeyByZXR1cm4gaG9va3M7IH0KCkMuQ3Q9bmV3IFAuYnkoKQpDLkVxPW5ldyBQLms1KCkKQy54TT1u
+ZXcgUC51NSgpCkMuUWs9bmV3IFAuRTMoKQpDLk52PW5ldyBILmtyKCkKQy5OVT1uZXcgUC5KaSgpCkMu
+cGQ9bmV3IFAuWmQoKQpDLkFkPW5ldyBSLkg3KDAsIkhpbnRBY3Rpb25LaW5kLmFkZE51bGxhYmxlSGlu
+dCIpCkMubmU9bmV3IFIuSDcoMSwiSGludEFjdGlvbktpbmQuYWRkTm9uTnVsbGFibGVIaW50IikKQy5t
+eT1uZXcgUi5INygyLCJIaW50QWN0aW9uS2luZC5jaGFuZ2VUb051bGxhYmxlSGludCIpCkMucng9bmV3
+IFIuSDcoMywiSGludEFjdGlvbktpbmQuY2hhbmdlVG9Ob25OdWxsYWJsZUhpbnQiKQpDLndWPW5ldyBS
+Lkg3KDQsIkhpbnRBY3Rpb25LaW5kLnJlbW92ZU51bGxhYmxlSGludCIpCkMuZlI9bmV3IFIuSDcoNSwi
+SGludEFjdGlvbktpbmQucmVtb3ZlTm9uTnVsbGFibGVIaW50IikKQy5BMz1uZXcgUC5NeChudWxsKQpD
+Lm5YPW5ldyBQLm9qKG51bGwpCkMuY3c9bmV3IEwuR2IoMCwiVW5pdE1pZ3JhdGlvblN0YXR1cy5hbHJl
+YWR5TWlncmF0ZWQiKQpDLmRjPW5ldyBMLkdiKDEsIlVuaXRNaWdyYXRpb25TdGF0dXMuaW5kZXRlcm1p
+bmF0ZSIpCkMuV0Q9bmV3IEwuR2IoMiwiVW5pdE1pZ3JhdGlvblN0YXR1cy5taWdyYXRpbmciKQpDLlhq
+PW5ldyBMLkdiKDMsIlVuaXRNaWdyYXRpb25TdGF0dXMub3B0aW5nT3V0IikKQy5sMD1ILlFJKHMoW0Mu
+Y3csQy5kYyxDLldELEMuWGpdKSxILk4wKCJqZDxHYj4iKSkKQy5haz1ILlFJKHMoWzAsMCwzMjc3Niwz
+Mzc5MiwxLDEwMjQwLDAsMF0pLHQudCkKQy5jbT1ILlFJKHMoWyIqOjpjbGFzcyIsIio6OmRpciIsIio6
+OmRyYWdnYWJsZSIsIio6OmhpZGRlbiIsIio6OmlkIiwiKjo6aW5lcnQiLCIqOjppdGVtcHJvcCIsIio6
+Oml0ZW1yZWYiLCIqOjppdGVtc2NvcGUiLCIqOjpsYW5nIiwiKjo6c3BlbGxjaGVjayIsIio6OnRpdGxl
+IiwiKjo6dHJhbnNsYXRlIiwiQTo6YWNjZXNza2V5IiwiQTo6Y29vcmRzIiwiQTo6aHJlZmxhbmciLCJB
+OjpuYW1lIiwiQTo6c2hhcGUiLCJBOjp0YWJpbmRleCIsIkE6OnRhcmdldCIsIkE6OnR5cGUiLCJBUkVB
+OjphY2Nlc3NrZXkiLCJBUkVBOjphbHQiLCJBUkVBOjpjb29yZHMiLCJBUkVBOjpub2hyZWYiLCJBUkVB
+OjpzaGFwZSIsIkFSRUE6OnRhYmluZGV4IiwiQVJFQTo6dGFyZ2V0IiwiQVVESU86OmNvbnRyb2xzIiwi
+QVVESU86Omxvb3AiLCJBVURJTzo6bWVkaWFncm91cCIsIkFVRElPOjptdXRlZCIsIkFVRElPOjpwcmVs
+b2FkIiwiQkRPOjpkaXIiLCJCT0RZOjphbGluayIsIkJPRFk6OmJnY29sb3IiLCJCT0RZOjpsaW5rIiwi
+Qk9EWTo6dGV4dCIsIkJPRFk6OnZsaW5rIiwiQlI6OmNsZWFyIiwiQlVUVE9OOjphY2Nlc3NrZXkiLCJC
+VVRUT046OmRpc2FibGVkIiwiQlVUVE9OOjpuYW1lIiwiQlVUVE9OOjp0YWJpbmRleCIsIkJVVFRPTjo6
+dHlwZSIsIkJVVFRPTjo6dmFsdWUiLCJDQU5WQVM6OmhlaWdodCIsIkNBTlZBUzo6d2lkdGgiLCJDQVBU
+SU9OOjphbGlnbiIsIkNPTDo6YWxpZ24iLCJDT0w6OmNoYXIiLCJDT0w6OmNoYXJvZmYiLCJDT0w6OnNw
+YW4iLCJDT0w6OnZhbGlnbiIsIkNPTDo6d2lkdGgiLCJDT0xHUk9VUDo6YWxpZ24iLCJDT0xHUk9VUDo6
+Y2hhciIsIkNPTEdST1VQOjpjaGFyb2ZmIiwiQ09MR1JPVVA6OnNwYW4iLCJDT0xHUk9VUDo6dmFsaWdu
+IiwiQ09MR1JPVVA6OndpZHRoIiwiQ09NTUFORDo6Y2hlY2tlZCIsIkNPTU1BTkQ6OmNvbW1hbmQiLCJD
+T01NQU5EOjpkaXNhYmxlZCIsIkNPTU1BTkQ6OmxhYmVsIiwiQ09NTUFORDo6cmFkaW9ncm91cCIsIkNP
+TU1BTkQ6OnR5cGUiLCJEQVRBOjp2YWx1ZSIsIkRFTDo6ZGF0ZXRpbWUiLCJERVRBSUxTOjpvcGVuIiwi
+RElSOjpjb21wYWN0IiwiRElWOjphbGlnbiIsIkRMOjpjb21wYWN0IiwiRklFTERTRVQ6OmRpc2FibGVk
+IiwiRk9OVDo6Y29sb3IiLCJGT05UOjpmYWNlIiwiRk9OVDo6c2l6ZSIsIkZPUk06OmFjY2VwdCIsIkZP
+Uk06OmF1dG9jb21wbGV0ZSIsIkZPUk06OmVuY3R5cGUiLCJGT1JNOjptZXRob2QiLCJGT1JNOjpuYW1l
+IiwiRk9STTo6bm92YWxpZGF0ZSIsIkZPUk06OnRhcmdldCIsIkZSQU1FOjpuYW1lIiwiSDE6OmFsaWdu
+IiwiSDI6OmFsaWduIiwiSDM6OmFsaWduIiwiSDQ6OmFsaWduIiwiSDU6OmFsaWduIiwiSDY6OmFsaWdu
+IiwiSFI6OmFsaWduIiwiSFI6Om5vc2hhZGUiLCJIUjo6c2l6ZSIsIkhSOjp3aWR0aCIsIkhUTUw6OnZl
+cnNpb24iLCJJRlJBTUU6OmFsaWduIiwiSUZSQU1FOjpmcmFtZWJvcmRlciIsIklGUkFNRTo6aGVpZ2h0
+IiwiSUZSQU1FOjptYXJnaW5oZWlnaHQiLCJJRlJBTUU6Om1hcmdpbndpZHRoIiwiSUZSQU1FOjp3aWR0
+aCIsIklNRzo6YWxpZ24iLCJJTUc6OmFsdCIsIklNRzo6Ym9yZGVyIiwiSU1HOjpoZWlnaHQiLCJJTUc6
+OmhzcGFjZSIsIklNRzo6aXNtYXAiLCJJTUc6Om5hbWUiLCJJTUc6OnVzZW1hcCIsIklNRzo6dnNwYWNl
+IiwiSU1HOjp3aWR0aCIsIklOUFVUOjphY2NlcHQiLCJJTlBVVDo6YWNjZXNza2V5IiwiSU5QVVQ6OmFs
+aWduIiwiSU5QVVQ6OmFsdCIsIklOUFVUOjphdXRvY29tcGxldGUiLCJJTlBVVDo6YXV0b2ZvY3VzIiwi
+SU5QVVQ6OmNoZWNrZWQiLCJJTlBVVDo6ZGlzYWJsZWQiLCJJTlBVVDo6aW5wdXRtb2RlIiwiSU5QVVQ6
+OmlzbWFwIiwiSU5QVVQ6Omxpc3QiLCJJTlBVVDo6bWF4IiwiSU5QVVQ6Om1heGxlbmd0aCIsIklOUFVU
+OjptaW4iLCJJTlBVVDo6bXVsdGlwbGUiLCJJTlBVVDo6bmFtZSIsIklOUFVUOjpwbGFjZWhvbGRlciIs
+IklOUFVUOjpyZWFkb25seSIsIklOUFVUOjpyZXF1aXJlZCIsIklOUFVUOjpzaXplIiwiSU5QVVQ6OnN0
+ZXAiLCJJTlBVVDo6dGFiaW5kZXgiLCJJTlBVVDo6dHlwZSIsIklOUFVUOjp1c2VtYXAiLCJJTlBVVDo6
+dmFsdWUiLCJJTlM6OmRhdGV0aW1lIiwiS0VZR0VOOjpkaXNhYmxlZCIsIktFWUdFTjo6a2V5dHlwZSIs
+IktFWUdFTjo6bmFtZSIsIkxBQkVMOjphY2Nlc3NrZXkiLCJMQUJFTDo6Zm9yIiwiTEVHRU5EOjphY2Nl
+c3NrZXkiLCJMRUdFTkQ6OmFsaWduIiwiTEk6OnR5cGUiLCJMSTo6dmFsdWUiLCJMSU5LOjpzaXplcyIs
+Ik1BUDo6bmFtZSIsIk1FTlU6OmNvbXBhY3QiLCJNRU5VOjpsYWJlbCIsIk1FTlU6OnR5cGUiLCJNRVRF
+Ujo6aGlnaCIsIk1FVEVSOjpsb3ciLCJNRVRFUjo6bWF4IiwiTUVURVI6Om1pbiIsIk1FVEVSOjp2YWx1
+ZSIsIk9CSkVDVDo6dHlwZW11c3RtYXRjaCIsIk9MOjpjb21wYWN0IiwiT0w6OnJldmVyc2VkIiwiT0w6
+OnN0YXJ0IiwiT0w6OnR5cGUiLCJPUFRHUk9VUDo6ZGlzYWJsZWQiLCJPUFRHUk9VUDo6bGFiZWwiLCJP
+UFRJT046OmRpc2FibGVkIiwiT1BUSU9OOjpsYWJlbCIsIk9QVElPTjo6c2VsZWN0ZWQiLCJPUFRJT046
+OnZhbHVlIiwiT1VUUFVUOjpmb3IiLCJPVVRQVVQ6Om5hbWUiLCJQOjphbGlnbiIsIlBSRTo6d2lkdGgi
+LCJQUk9HUkVTUzo6bWF4IiwiUFJPR1JFU1M6Om1pbiIsIlBST0dSRVNTOjp2YWx1ZSIsIlNFTEVDVDo6
+YXV0b2NvbXBsZXRlIiwiU0VMRUNUOjpkaXNhYmxlZCIsIlNFTEVDVDo6bXVsdGlwbGUiLCJTRUxFQ1Q6
+Om5hbWUiLCJTRUxFQ1Q6OnJlcXVpcmVkIiwiU0VMRUNUOjpzaXplIiwiU0VMRUNUOjp0YWJpbmRleCIs
+IlNPVVJDRTo6dHlwZSIsIlRBQkxFOjphbGlnbiIsIlRBQkxFOjpiZ2NvbG9yIiwiVEFCTEU6OmJvcmRl
+ciIsIlRBQkxFOjpjZWxscGFkZGluZyIsIlRBQkxFOjpjZWxsc3BhY2luZyIsIlRBQkxFOjpmcmFtZSIs
+IlRBQkxFOjpydWxlcyIsIlRBQkxFOjpzdW1tYXJ5IiwiVEFCTEU6OndpZHRoIiwiVEJPRFk6OmFsaWdu
+IiwiVEJPRFk6OmNoYXIiLCJUQk9EWTo6Y2hhcm9mZiIsIlRCT0RZOjp2YWxpZ24iLCJURDo6YWJiciIs
+IlREOjphbGlnbiIsIlREOjpheGlzIiwiVEQ6OmJnY29sb3IiLCJURDo6Y2hhciIsIlREOjpjaGFyb2Zm
+IiwiVEQ6OmNvbHNwYW4iLCJURDo6aGVhZGVycyIsIlREOjpoZWlnaHQiLCJURDo6bm93cmFwIiwiVEQ6
+OnJvd3NwYW4iLCJURDo6c2NvcGUiLCJURDo6dmFsaWduIiwiVEQ6OndpZHRoIiwiVEVYVEFSRUE6OmFj
+Y2Vzc2tleSIsIlRFWFRBUkVBOjphdXRvY29tcGxldGUiLCJURVhUQVJFQTo6Y29scyIsIlRFWFRBUkVB
+OjpkaXNhYmxlZCIsIlRFWFRBUkVBOjppbnB1dG1vZGUiLCJURVhUQVJFQTo6bmFtZSIsIlRFWFRBUkVB
+OjpwbGFjZWhvbGRlciIsIlRFWFRBUkVBOjpyZWFkb25seSIsIlRFWFRBUkVBOjpyZXF1aXJlZCIsIlRF
+WFRBUkVBOjpyb3dzIiwiVEVYVEFSRUE6OnRhYmluZGV4IiwiVEVYVEFSRUE6OndyYXAiLCJURk9PVDo6
+YWxpZ24iLCJURk9PVDo6Y2hhciIsIlRGT09UOjpjaGFyb2ZmIiwiVEZPT1Q6OnZhbGlnbiIsIlRIOjph
+YmJyIiwiVEg6OmFsaWduIiwiVEg6OmF4aXMiLCJUSDo6Ymdjb2xvciIsIlRIOjpjaGFyIiwiVEg6OmNo
+YXJvZmYiLCJUSDo6Y29sc3BhbiIsIlRIOjpoZWFkZXJzIiwiVEg6OmhlaWdodCIsIlRIOjpub3dyYXAi
+LCJUSDo6cm93c3BhbiIsIlRIOjpzY29wZSIsIlRIOjp2YWxpZ24iLCJUSDo6d2lkdGgiLCJUSEVBRDo6
+YWxpZ24iLCJUSEVBRDo6Y2hhciIsIlRIRUFEOjpjaGFyb2ZmIiwiVEhFQUQ6OnZhbGlnbiIsIlRSOjph
+bGlnbiIsIlRSOjpiZ2NvbG9yIiwiVFI6OmNoYXIiLCJUUjo6Y2hhcm9mZiIsIlRSOjp2YWxpZ24iLCJU
+UkFDSzo6ZGVmYXVsdCIsIlRSQUNLOjpraW5kIiwiVFJBQ0s6OmxhYmVsIiwiVFJBQ0s6OnNyY2xhbmci
+LCJVTDo6Y29tcGFjdCIsIlVMOjp0eXBlIiwiVklERU86OmNvbnRyb2xzIiwiVklERU86OmhlaWdodCIs
+IlZJREVPOjpsb29wIiwiVklERU86Om1lZGlhZ3JvdXAiLCJWSURFTzo6bXV0ZWQiLCJWSURFTzo6cHJl
+bG9hZCIsIlZJREVPOjp3aWR0aCJdKSx0LnMpCkMuVkM9SC5RSShzKFswLDAsNjU0OTAsNDUwNTUsNjU1
+MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMubUs9SC5RSShzKFswLDAsMjY2MjQsMTAyMyw2NTUz
+NCwyMDQ3LDY1NTM0LDIwNDddKSx0LnQpCkMuU3E9SC5RSShzKFsiSEVBRCIsIkFSRUEiLCJCQVNFIiwi
+QkFTRUZPTlQiLCJCUiIsIkNPTCIsIkNPTEdST1VQIiwiRU1CRUQiLCJGUkFNRSIsIkZSQU1FU0VUIiwi
+SFIiLCJJTUFHRSIsIklNRyIsIklOUFVUIiwiSVNJTkRFWCIsIkxJTksiLCJNRVRBIiwiUEFSQU0iLCJT
+T1VSQ0UiLCJTVFlMRSIsIlRJVExFIiwiV0JSIl0pLHQucykKQy5kbj1ILlFJKHMoW10pLEguTjAoImpk
+PExMPiIpKQpDLnhEPUguUUkocyhbXSksdC5zKQpDLmhVPUguUUkocyhbXSksdC5iKQpDLnRvPUguUUko
+cyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLnJrPUguUUko
+cyhbQy5BZCxDLm5lLEMubXksQy5yeCxDLndWLEMuZlJdKSxILk4wKCJqZDxINz4iKSkKQy5GMz1ILlFJ
+KHMoWzAsMCwyNDU3NiwxMDIzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLmVhPUguUUko
+cyhbMCwwLDMyNzU0LDExMjYzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLlpKPUguUUko
+cyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLldkPUguUUko
+cyhbMCwwLDY1NDkwLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpDLlF4PUguUUko
+cyhbImJpbmQiLCJpZiIsInJlZiIsInJlcGVhdCIsInN5bnRheCJdKSx0LnMpCkMuQkk9SC5RSShzKFsi
+QTo6aHJlZiIsIkFSRUE6OmhyZWYiLCJCTE9DS1FVT1RFOjpjaXRlIiwiQk9EWTo6YmFja2dyb3VuZCIs
+IkNPTU1BTkQ6Omljb24iLCJERUw6OmNpdGUiLCJGT1JNOjphY3Rpb24iLCJJTUc6OnNyYyIsIklOUFVU
+OjpzcmMiLCJJTlM6OmNpdGUiLCJROjpjaXRlIiwiVklERU86OnBvc3RlciJdKSx0LnMpCkMuRHg9bmV3
+IEguTFAoMCx7fSxDLnhELEguTjAoIkxQPHFVLHpNPGo4Pj4iKSkKQy5DTT1uZXcgSC5MUCgwLHt9LEMu
+eEQsSC5OMCgiTFA8cVUscVU+IikpCkMuaUg9SC5RSShzKFtdKSxILk4wKCJqZDxHRD4iKSkKQy5XTz1u
+ZXcgSC5MUCgwLHt9LEMuaUgsSC5OMCgiTFA8R0QsQD4iKSkKQy5ZMj1uZXcgTC5POSgiTmF2aWdhdGlv
+blRyZWVOb2RlVHlwZS5kaXJlY3RvcnkiKQpDLnJmPW5ldyBMLk85KCJOYXZpZ2F0aW9uVHJlZU5vZGVU
+eXBlLmZpbGUiKQpDLlRlPW5ldyBILnd2KCJjYWxsIikKQy5vRT1uZXcgUC5HWSghMSkKQy53UT1uZXcg
+UC5GeShudWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC56bT1udWxsCiQueWo9MAok
+LmkwPW51bGwKJC5BbD1udWxsCiQuTkY9bnVsbAokLlRYPW51bGwKJC54Nz1udWxsCiQubnc9bnVsbAok
+LnZ2PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4PW51bGwKJC5tZz1udWxsCiQuVUQ9ITEKJC5Y
+Mz1DLk5VCiQueGc9SC5RSShbXSxILk4wKCJqZDxNaD4iKSkKJC54bz1udWxsCiQuQk89bnVsbAokLmx0
+PW51bGwKJC5FVT1udWxsCiQub3I9UC5GbCh0Lk4sdC5ZKQokLklSPW51bGwKJC5JNj1udWxsCiQuRmY9
+bnVsbH0pKCk7KGZ1bmN0aW9uIGxhenlJbml0aWFsaXplcnMoKXt2YXIgcz1odW5rSGVscGVycy5sYXp5
+RmluYWwscj1odW5rSGVscGVycy5sYXp5CnMoJCwiZmEiLCJ6IixmdW5jdGlvbigpe3JldHVybiBILlln
+KCJfJGRhcnRfZGFydENsb3N1cmUiKX0pCnMoJCwiS3EiLCJTbiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5j
+TShILlM3KHsKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iJHJlY2VpdmVyJCJ9fSkpfSkKcygkLCJ4
+cSIsImxxIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoeyRtZXRob2QkOm51bGwsCnRvU3RyaW5n
+OmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKX0pCnMoJCwiUjEiLCJOOSIsZnVuY3Rpb24o
+KXtyZXR1cm4gSC5jTShILlM3KG51bGwpKX0pCnMoJCwiZk4iLCJpSSIsZnVuY3Rpb24oKXtyZXR1cm4g
+SC5jTShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7bnVsbC4k
+bWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMo
+JCwicWkiLCJVTiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KHZvaWQgMCkpfSkKcygkLCJwdiIs
+IlpoIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dmFyICRhcmd1bWVudHNFeHByJD0i
+JGFyZ3VtZW50cyQiCnRyeXsodm9pZCAwKS4kbWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEp
+e3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwia3EiLCJyTiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5j
+TShILk1qKG51bGwpKX0pCnMoJCwidHQiLCJjMyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShmdW5jdGlv
+bigpe3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwi
+ZHQiLCJISyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILk1qKHZvaWQgMCkpfSkKcygkLCJBNyIsInIx
+IixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5eyh2b2lkIDApLiRtZXRob2QkfWNh
+dGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwiV2MiLCJ1dCIsZnVuY3Rpb24oKXtyZXR1
+cm4gUC5PaigpfSkKcygkLCJraCIsInJmIixmdW5jdGlvbigpe3JldHVybiBuZXcgUC54cigpLiQwKCl9
+KQpzKCQsImRIIiwiSEciLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQLk56KCkuJDAoKX0pCnMoJCwiaGoi
+LCJWNyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludDhBcnJheShILlhGKEguUUkoWy0yLC0yLC0yLC0y
 LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y
-LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0xLC0yLC0yLC0yLC0y
-LC0yLDYyLC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0yLC0yLC0yLC0x
-LC0yLC0yLC0yLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTks
-MjAsMjEsMjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIsNjMsLTIsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMs
-MzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsLTIsLTIs
-LTIsLTIsLTJdLHQudCkpKX0pCnMoJCwiWWUiLCJ3USIsZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHBy
-b2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9
-PSJbb2JqZWN0IHByb2Nlc3NdIiYmcHJvY2Vzcy5wbGF0Zm9ybT09IndpbjMyIn0pCnMoJCwibWYiLCJ6
-NCIsZnVuY3Rpb24oKXtyZXR1cm4gUC5udSgiXltcXC1cXC4wLTlBLVpfYS16fl0qJCIpfSkKcygkLCJP
-USIsInZaIixmdW5jdGlvbigpe3JldHVybiBQLktOKCl9KQpzKCQsIlNDIiwiQU4iLGZ1bmN0aW9uKCl7
-cmV0dXJuIFAudE0oWyJBIiwiQUJCUiIsIkFDUk9OWU0iLCJBRERSRVNTIiwiQVJFQSIsIkFSVElDTEUi
-LCJBU0lERSIsIkFVRElPIiwiQiIsIkJESSIsIkJETyIsIkJJRyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJV
-VFRPTiIsIkNBTlZBUyIsIkNBUFRJT04iLCJDRU5URVIiLCJDSVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdS
-T1VQIiwiQ09NTUFORCIsIkRBVEEiLCJEQVRBTElTVCIsIkREIiwiREVMIiwiREVUQUlMUyIsIkRGTiIs
-IkRJUiIsIkRJViIsIkRMIiwiRFQiLCJFTSIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIs
-IkZPTlQiLCJGT09URVIiLCJGT1JNIiwiSDEiLCJIMiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiSEVBREVS
-IiwiSEdST1VQIiwiSFIiLCJJIiwiSUZSQU1FIiwiSU1HIiwiSU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJF
-TCIsIkxFR0VORCIsIkxJIiwiTUFQIiwiTUFSSyIsIk1FTlUiLCJNRVRFUiIsIk5BViIsIk5PQlIiLCJP
-TCIsIk9QVEdST1VQIiwiT1BUSU9OIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlBST0dSRVNTIiwiUSIsIlMi
-LCJTQU1QIiwiU0VDVElPTiIsIlNFTEVDVCIsIlNNQUxMIiwiU09VUkNFIiwiU1BBTiIsIlNUUklLRSIs
-IlNUUk9ORyIsIlNVQiIsIlNVTU1BUlkiLCJTVVAiLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURVhUQVJF
-QSIsIlRGT09UIiwiVEgiLCJUSEVBRCIsIlRJTUUiLCJUUiIsIlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJW
-QVIiLCJWSURFTyIsIldCUiJdLHQuTil9KQpzKCQsIlg0IiwiaEciLGZ1bmN0aW9uKCl7cmV0dXJuIFAu
-bnUoIl5cXFMrJCIpfSkKcygkLCJ3TyIsIm93IixmdW5jdGlvbigpe3JldHVybiBQLk5EKHNlbGYpfSkK
-cygkLCJrdCIsIlI4IixmdW5jdGlvbigpe3JldHVybiBILllnKCJfJGRhcnRfZGFydE9iamVjdCIpfSkK
-cygkLCJmSyIsImtJIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBEYXJ0T2JqZWN0KGEpe3RoaXMu
-bz1hfX0pCnMoJCwicXQiLCJ6QiIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFQubVEoKX0pCnMoJCwiT2wi
-LCJVRSIsZnVuY3Rpb24oKXtyZXR1cm4gUC5oSyhDLm9sLmdtVyhXLngzKCkpLmhyZWYpLmdoWSgpLnEo
-MCwiYXV0aFRva2VuIil9KQpzKCQsImhUIiwieVAiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVy
-eVNlbGVjdG9yKCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50Iil9KQpzKCQsIlc2IiwiaEwiLGZ1bmN0
-aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVu
-dCIpfSkKcygkLCJUUiIsIkRXIixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3Rvcigi
-Zm9vdGVyIil9KQpzKCQsIkVZIiwiZmkiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVj
-dG9yKCJoZWFkZXIiKX0pCnMoJCwiYkEiLCJjMCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5
-U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24iKX0pCnMoJCwidDAiLCJiTiIsZnVuY3Rp
-b24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24t
-bGFiZWwiKX0pCnMoJCwiYXYiLCJEOSIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0
-b3IoIiN1bml0LW5hbWUiKX0pCnIoJCwiZmUiLCJLRyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwuWEEo
-KX0pCnMoJCwiZW8iLCJuVSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0ubEkoSC5OMCgiZnYiKS5hKCQu
-SGsoKSkpfSkKcygkLCJ5ciIsImJEIixmdW5jdGlvbigpe3JldHVybiBuZXcgRS5PRihQLm51KCIvIiks
-UC5udSgiW14vXSQiKSxQLm51KCJeLyIpKX0pCnMoJCwiTWsiLCJLayIsZnVuY3Rpb24oKXtyZXR1cm4g
-bmV3IEwuSVYoUC5udSgiWy9cXFxcXSIpLFAubnUoIlteL1xcXFxdJCIpLFAubnUoIl4oXFxcXFxcXFxb
-XlxcXFxdK1xcXFxbXlxcXFwvXSt8W2EtekEtWl06Wy9cXFxcXSkiKSxQLm51KCJeWy9cXFxcXSg/IVsv
-XFxcXF0pIikpfSkKcygkLCJhayIsIkViIixmdW5jdGlvbigpe3JldHVybiBuZXcgRi5ydShQLm51KCIv
-IiksUC5udSgiKF5bYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL3xbXi9dKSQiKSxQLm51KCJbYS16QS1a
-XVstKy5hLXpBLVpcXGRdKjovL1teL10qIiksUC5udSgiXi8iKSl9KQpzKCQsImxzIiwiSGsiLGZ1bmN0
-aW9uKCl7cmV0dXJuIE8uUmgoKX0pfSkoKTsoZnVuY3Rpb24gbmF0aXZlU3VwcG9ydCgpeyFmdW5jdGlv
-bigpe3ZhciBzPWZ1bmN0aW9uKGEpe3ZhciBtPXt9Cm1bYV09MQpyZXR1cm4gT2JqZWN0LmtleXMoaHVu
-a0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChtKSlbMF19CnYuZ2V0SXNvbGF0ZVRhZz1mdW5jdGlv
-bihhKXtyZXR1cm4gcygiX19fZGFydF8iK2Erdi5pc29sYXRlVGFnKX0KdmFyIHI9Il9fX2RhcnRfaXNv
-bGF0ZV90YWdzXyIKdmFyIHE9T2JqZWN0W3JdfHwoT2JqZWN0W3JdPU9iamVjdC5jcmVhdGUobnVsbCkp
-CnZhciBwPSJfWnhZeFgiCmZvcih2YXIgbz0wOztvKyspe3ZhciBuPXMocCsiXyIrbysiXyIpCmlmKCEo
-biBpbiBxKSl7cVtuXT0xCnYuaXNvbGF0ZVRhZz1uCmJyZWFrfX12LmRpc3BhdGNoUHJvcGVydHlOYW1l
-PXYuZ2V0SXNvbGF0ZVRhZygiZGlzcGF0Y2hfcmVjb3JkIil9KCkKaHVua0hlbHBlcnMuc2V0T3JVcGRh
-dGVJbnRlcmNlcHRvcnNCeVRhZyh7RE9NRXJyb3I6Si5HdixNZWRpYUVycm9yOkouR3YsTmF2aWdhdG9y
-OkouR3YsTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlOkouR3YsTmF2aWdhdG9yVXNlck1lZGlhRXJy
-b3I6Si5HdixPdmVyY29uc3RyYWluZWRFcnJvcjpKLkd2LFBvc2l0aW9uRXJyb3I6Si5HdixHZW9sb2Nh
-dGlvblBvc2l0aW9uRXJyb3I6Si5HdixSYW5nZTpKLkd2LFNRTEVycm9yOkouR3YsRGF0YVZpZXc6SC5F
-VCxBcnJheUJ1ZmZlclZpZXc6SC5FVCxGbG9hdDMyQXJyYXk6SC5EZyxGbG9hdDY0QXJyYXk6SC5EZyxJ
-bnQxNkFycmF5OkgueGosSW50MzJBcnJheTpILmRFLEludDhBcnJheTpILlpBLFVpbnQxNkFycmF5Okgu
-ZFQsVWludDMyQXJyYXk6SC5QcSxVaW50OENsYW1wZWRBcnJheTpILmVFLENhbnZhc1BpeGVsQXJyYXk6
-SC5lRSxVaW50OEFycmF5OkguVjYsSFRNTEF1ZGlvRWxlbWVudDpXLnFFLEhUTUxCUkVsZW1lbnQ6Vy5x
-RSxIVE1MQnV0dG9uRWxlbWVudDpXLnFFLEhUTUxDYW52YXNFbGVtZW50OlcucUUsSFRNTENvbnRlbnRF
-bGVtZW50OlcucUUsSFRNTERMaXN0RWxlbWVudDpXLnFFLEhUTUxEYXRhRWxlbWVudDpXLnFFLEhUTUxE
-YXRhTGlzdEVsZW1lbnQ6Vy5xRSxIVE1MRGV0YWlsc0VsZW1lbnQ6Vy5xRSxIVE1MRGlhbG9nRWxlbWVu
-dDpXLnFFLEhUTUxEaXZFbGVtZW50OlcucUUsSFRNTEVtYmVkRWxlbWVudDpXLnFFLEhUTUxGaWVsZFNl
-dEVsZW1lbnQ6Vy5xRSxIVE1MSFJFbGVtZW50OlcucUUsSFRNTEhlYWRFbGVtZW50OlcucUUsSFRNTEhl
-YWRpbmdFbGVtZW50OlcucUUsSFRNTEh0bWxFbGVtZW50OlcucUUsSFRNTElGcmFtZUVsZW1lbnQ6Vy5x
-RSxIVE1MSW1hZ2VFbGVtZW50OlcucUUsSFRNTElucHV0RWxlbWVudDpXLnFFLEhUTUxMSUVsZW1lbnQ6
-Vy5xRSxIVE1MTGFiZWxFbGVtZW50OlcucUUsSFRNTExlZ2VuZEVsZW1lbnQ6Vy5xRSxIVE1MTGlua0Vs
-ZW1lbnQ6Vy5xRSxIVE1MTWFwRWxlbWVudDpXLnFFLEhUTUxNZWRpYUVsZW1lbnQ6Vy5xRSxIVE1MTWVu
-dUVsZW1lbnQ6Vy5xRSxIVE1MTWV0YUVsZW1lbnQ6Vy5xRSxIVE1MTWV0ZXJFbGVtZW50OlcucUUsSFRN
-TE1vZEVsZW1lbnQ6Vy5xRSxIVE1MT0xpc3RFbGVtZW50OlcucUUsSFRNTE9iamVjdEVsZW1lbnQ6Vy5x
-RSxIVE1MT3B0R3JvdXBFbGVtZW50OlcucUUsSFRNTE9wdGlvbkVsZW1lbnQ6Vy5xRSxIVE1MT3V0cHV0
-RWxlbWVudDpXLnFFLEhUTUxQYXJhbUVsZW1lbnQ6Vy5xRSxIVE1MUGljdHVyZUVsZW1lbnQ6Vy5xRSxI
-VE1MUHJlRWxlbWVudDpXLnFFLEhUTUxQcm9ncmVzc0VsZW1lbnQ6Vy5xRSxIVE1MUXVvdGVFbGVtZW50
-OlcucUUsSFRNTFNjcmlwdEVsZW1lbnQ6Vy5xRSxIVE1MU2hhZG93RWxlbWVudDpXLnFFLEhUTUxTbG90
-RWxlbWVudDpXLnFFLEhUTUxTb3VyY2VFbGVtZW50OlcucUUsSFRNTFNwYW5FbGVtZW50OlcucUUsSFRN
-TFN0eWxlRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlcucUUsSFRNTFRhYmxlQ2Vs
-bEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVIZWFkZXJD
-ZWxsRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNvbEVsZW1lbnQ6Vy5xRSxIVE1MVGV4dEFyZWFFbGVtZW50
-OlcucUUsSFRNTFRpbWVFbGVtZW50OlcucUUsSFRNTFRpdGxlRWxlbWVudDpXLnFFLEhUTUxUcmFja0Vs
-ZW1lbnQ6Vy5xRSxIVE1MVUxpc3RFbGVtZW50OlcucUUsSFRNTFVua25vd25FbGVtZW50OlcucUUsSFRN
-TFZpZGVvRWxlbWVudDpXLnFFLEhUTUxEaXJlY3RvcnlFbGVtZW50OlcucUUsSFRNTEZvbnRFbGVtZW50
-OlcucUUsSFRNTEZyYW1lRWxlbWVudDpXLnFFLEhUTUxGcmFtZVNldEVsZW1lbnQ6Vy5xRSxIVE1MTWFy
-cXVlZUVsZW1lbnQ6Vy5xRSxIVE1MRWxlbWVudDpXLnFFLEhUTUxBbmNob3JFbGVtZW50OlcuR2gsSFRN
-TEFyZWFFbGVtZW50OlcuZlksSFRNTEJhc2VFbGVtZW50OlcuclosQmxvYjpXLkF6LEhUTUxCb2R5RWxl
-bWVudDpXLlFQLENEQVRBU2VjdGlvbjpXLm54LENoYXJhY3RlckRhdGE6Vy5ueCxDb21tZW50Olcubngs
-UHJvY2Vzc2luZ0luc3RydWN0aW9uOlcubngsVGV4dDpXLm54LENTU1N0eWxlRGVjbGFyYXRpb246Vy5v
-SixNU1N0eWxlQ1NTUHJvcGVydGllczpXLm9KLENTUzJQcm9wZXJ0aWVzOlcub0osWE1MRG9jdW1lbnQ6
-Vy5RRixEb2N1bWVudDpXLlFGLERPTUV4Y2VwdGlvbjpXLk5oLERPTUltcGxlbWVudGF0aW9uOlcuYWUs
-RE9NUmVjdFJlYWRPbmx5OlcuSUIsRE9NVG9rZW5MaXN0OlcubjcsRWxlbWVudDpXLmN2LEFib3J0UGF5
-bWVudEV2ZW50OlcuZWEsQW5pbWF0aW9uRXZlbnQ6Vy5lYSxBbmltYXRpb25QbGF5YmFja0V2ZW50Olcu
-ZWEsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50
-OlcuZWEsQmFja2dyb3VuZEZldGNoRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6Vy5l
-YSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OlcuZWEsQmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OlcuZWEs
-QmVmb3JlVW5sb2FkRXZlbnQ6Vy5lYSxCbG9iRXZlbnQ6Vy5lYSxDYW5NYWtlUGF5bWVudEV2ZW50Olcu
-ZWEsQ2xpcGJvYXJkRXZlbnQ6Vy5lYSxDbG9zZUV2ZW50OlcuZWEsQ3VzdG9tRXZlbnQ6Vy5lYSxEZXZp
-Y2VNb3Rpb25FdmVudDpXLmVhLERldmljZU9yaWVudGF0aW9uRXZlbnQ6Vy5lYSxFcnJvckV2ZW50Olcu
-ZWEsRXh0ZW5kYWJsZUV2ZW50OlcuZWEsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpXLmVhLEZldGNoRXZl
-bnQ6Vy5lYSxGb250RmFjZVNldExvYWRFdmVudDpXLmVhLEZvcmVpZ25GZXRjaEV2ZW50OlcuZWEsR2Ft
-ZXBhZEV2ZW50OlcuZWEsSGFzaENoYW5nZUV2ZW50OlcuZWEsSW5zdGFsbEV2ZW50OlcuZWEsTWVkaWFF
-bmNyeXB0ZWRFdmVudDpXLmVhLE1lZGlhS2V5TWVzc2FnZUV2ZW50OlcuZWEsTWVkaWFRdWVyeUxpc3RF
-dmVudDpXLmVhLE1lZGlhU3RyZWFtRXZlbnQ6Vy5lYSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6Vy5lYSxN
-ZXNzYWdlRXZlbnQ6Vy5lYSxNSURJQ29ubmVjdGlvbkV2ZW50OlcuZWEsTUlESU1lc3NhZ2VFdmVudDpX
-LmVhLE11dGF0aW9uRXZlbnQ6Vy5lYSxOb3RpZmljYXRpb25FdmVudDpXLmVhLFBhZ2VUcmFuc2l0aW9u
-RXZlbnQ6Vy5lYSxQYXltZW50UmVxdWVzdEV2ZW50OlcuZWEsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVu
-dDpXLmVhLFBvcFN0YXRlRXZlbnQ6Vy5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZl
-bnQ6Vy5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDpXLmVhLFByb21pc2VSZWplY3Rp
-b25FdmVudDpXLmVhLFB1c2hFdmVudDpXLmVhLFJUQ0RhdGFDaGFubmVsRXZlbnQ6Vy5lYSxSVENEVE1G
-VG9uZUNoYW5nZUV2ZW50OlcuZWEsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDpXLmVhLFJUQ1RyYWNr
-RXZlbnQ6Vy5lYSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OlcuZWEsU2Vuc29yRXJyb3JFdmVu
-dDpXLmVhLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6Vy5lYSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50Olcu
-ZWEsU3BlZWNoU3ludGhlc2lzRXZlbnQ6Vy5lYSxTdG9yYWdlRXZlbnQ6Vy5lYSxTeW5jRXZlbnQ6Vy5l
-YSxUcmFja0V2ZW50OlcuZWEsVHJhbnNpdGlvbkV2ZW50OlcuZWEsV2ViS2l0VHJhbnNpdGlvbkV2ZW50
-OlcuZWEsVlJEZXZpY2VFdmVudDpXLmVhLFZSRGlzcGxheUV2ZW50OlcuZWEsVlJTZXNzaW9uRXZlbnQ6
-Vy5lYSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OlcuZWEsVVNCQ29ubmVjdGlvbkV2ZW50OlcuZWEs
-SURCVmVyc2lvbkNoYW5nZUV2ZW50OlcuZWEsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6Vy5lYSxPZmZsaW5l
-QXVkaW9Db21wbGV0aW9uRXZlbnQ6Vy5lYSxXZWJHTENvbnRleHRFdmVudDpXLmVhLEV2ZW50OlcuZWEs
-SW5wdXRFdmVudDpXLmVhLFN1Ym1pdEV2ZW50OlcuZWEsRXZlbnRUYXJnZXQ6Vy5EMCxGaWxlOlcuaEgs
-SFRNTEZvcm1FbGVtZW50OlcuaDQsSGlzdG9yeTpXLmJyLEhUTUxEb2N1bWVudDpXLlZiLFhNTEh0dHBS
-ZXF1ZXN0OlcuZkosWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpXLndhLEltYWdlRGF0YTpXLlNnLExv
-Y2F0aW9uOlcudTgsTW91c2VFdmVudDpXLkFqLERyYWdFdmVudDpXLkFqLFBvaW50ZXJFdmVudDpXLkFq
-LFdoZWVsRXZlbnQ6Vy5BaixEb2N1bWVudEZyYWdtZW50OlcuS1YsU2hhZG93Um9vdDpXLktWLERvY3Vt
-ZW50VHlwZTpXLktWLE5vZGU6Vy5LVixOb2RlTGlzdDpXLkJILFJhZGlvTm9kZUxpc3Q6Vy5CSCxIVE1M
-UGFyYWdyYXBoRWxlbWVudDpXLlNOLFByb2dyZXNzRXZlbnQ6Vy5ldyxSZXNvdXJjZVByb2dyZXNzRXZl
-bnQ6Vy5ldyxIVE1MU2VsZWN0RWxlbWVudDpXLmxwLEhUTUxUYWJsZUVsZW1lbnQ6Vy5UYixIVE1MVGFi
-bGVSb3dFbGVtZW50OlcuSXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Vy5XUCxIVE1MVGVtcGxhdGVF
-bGVtZW50OlcueVksQ29tcG9zaXRpb25FdmVudDpXLnc2LEZvY3VzRXZlbnQ6Vy53NixLZXlib2FyZEV2
-ZW50OlcudzYsVGV4dEV2ZW50OlcudzYsVG91Y2hFdmVudDpXLnc2LFVJRXZlbnQ6Vy53NixXaW5kb3c6
-Vy5LNSxET01XaW5kb3c6Vy5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFNlcnZpY2VX
-b3JrZXJHbG9iYWxTY29wZTpXLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOlcuQ20sV29ya2VyR2xv
-YmFsU2NvcGU6Vy5DbSxBdHRyOlcuQ1EsQ2xpZW50UmVjdDpXLnc0LERPTVJlY3Q6Vy53NCxOYW1lZE5v
-ZGVNYXA6Vy5yaCxNb3pOYW1lZEF0dHJNYXA6Vy5yaCxJREJLZXlSYW5nZTpQLmhGLFNWR1NjcmlwdEVs
-ZW1lbnQ6UC5uZCxTVkdBRWxlbWVudDpQLmhpLFNWR0FuaW1hdGVFbGVtZW50OlAuaGksU1ZHQW5pbWF0
-ZU1vdGlvbkVsZW1lbnQ6UC5oaSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpQLmhpLFNWR0FuaW1h
-dGlvbkVsZW1lbnQ6UC5oaSxTVkdDaXJjbGVFbGVtZW50OlAuaGksU1ZHQ2xpcFBhdGhFbGVtZW50OlAu
-aGksU1ZHRGVmc0VsZW1lbnQ6UC5oaSxTVkdEZXNjRWxlbWVudDpQLmhpLFNWR0Rpc2NhcmRFbGVtZW50
-OlAuaGksU1ZHRWxsaXBzZUVsZW1lbnQ6UC5oaSxTVkdGRUJsZW5kRWxlbWVudDpQLmhpLFNWR0ZFQ29s
-b3JNYXRyaXhFbGVtZW50OlAuaGksU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6UC5oaSxTVkdG
-RUNvbXBvc2l0ZUVsZW1lbnQ6UC5oaSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpQLmhpLFNWR0ZF
-RGlmZnVzZUxpZ2h0aW5nRWxlbWVudDpQLmhpLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpQLmhp
-LFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDpQLmhpLFNWR0ZFRmxvb2RFbGVtZW50OlAuaGksU1ZHRkVG
-dW5jQUVsZW1lbnQ6UC5oaSxTVkdGRUZ1bmNCRWxlbWVudDpQLmhpLFNWR0ZFRnVuY0dFbGVtZW50OlAu
-aGksU1ZHRkVGdW5jUkVsZW1lbnQ6UC5oaSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6UC5oaSxTVkdG
-RUltYWdlRWxlbWVudDpQLmhpLFNWR0ZFTWVyZ2VFbGVtZW50OlAuaGksU1ZHRkVNZXJnZU5vZGVFbGVt
-ZW50OlAuaGksU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDpQLmhpLFNWR0ZFT2Zmc2V0RWxlbWVudDpQLmhp
-LFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6UC5oaSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OlAu
-aGksU1ZHRkVTcG90TGlnaHRFbGVtZW50OlAuaGksU1ZHRkVUaWxlRWxlbWVudDpQLmhpLFNWR0ZFVHVy
-YnVsZW5jZUVsZW1lbnQ6UC5oaSxTVkdGaWx0ZXJFbGVtZW50OlAuaGksU1ZHRm9yZWlnbk9iamVjdEVs
-ZW1lbnQ6UC5oaSxTVkdHRWxlbWVudDpQLmhpLFNWR0dlb21ldHJ5RWxlbWVudDpQLmhpLFNWR0dyYXBo
-aWNzRWxlbWVudDpQLmhpLFNWR0ltYWdlRWxlbWVudDpQLmhpLFNWR0xpbmVFbGVtZW50OlAuaGksU1ZH
-TGluZWFyR3JhZGllbnRFbGVtZW50OlAuaGksU1ZHTWFya2VyRWxlbWVudDpQLmhpLFNWR01hc2tFbGVt
-ZW50OlAuaGksU1ZHTWV0YWRhdGFFbGVtZW50OlAuaGksU1ZHUGF0aEVsZW1lbnQ6UC5oaSxTVkdQYXR0
-ZXJuRWxlbWVudDpQLmhpLFNWR1BvbHlnb25FbGVtZW50OlAuaGksU1ZHUG9seWxpbmVFbGVtZW50OlAu
-aGksU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OlAuaGksU1ZHUmVjdEVsZW1lbnQ6UC5oaSxTVkdTZXRF
-bGVtZW50OlAuaGksU1ZHU3RvcEVsZW1lbnQ6UC5oaSxTVkdTdHlsZUVsZW1lbnQ6UC5oaSxTVkdTVkdF
-bGVtZW50OlAuaGksU1ZHU3dpdGNoRWxlbWVudDpQLmhpLFNWR1N5bWJvbEVsZW1lbnQ6UC5oaSxTVkdU
-U3BhbkVsZW1lbnQ6UC5oaSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6UC5oaSxTVkdUZXh0RWxlbWVudDpQ
-LmhpLFNWR1RleHRQYXRoRWxlbWVudDpQLmhpLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6UC5oaSxT
-VkdUaXRsZUVsZW1lbnQ6UC5oaSxTVkdVc2VFbGVtZW50OlAuaGksU1ZHVmlld0VsZW1lbnQ6UC5oaSxT
-VkdHcmFkaWVudEVsZW1lbnQ6UC5oaSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpQ
-LmhpLFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6UC5oaSxTVkdNUGF0aEVsZW1lbnQ6UC5oaSxTVkdFbGVt
-ZW50OlAuaGl9KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLE1l
-ZGlhRXJyb3I6dHJ1ZSxOYXZpZ2F0b3I6dHJ1ZSxOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6dHJ1
-ZSxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjp0cnVlLE92ZXJjb25zdHJhaW5lZEVycm9yOnRydWUsUG9z
-aXRpb25FcnJvcjp0cnVlLEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcjp0cnVlLFJhbmdlOnRydWUsU1FM
-RXJyb3I6dHJ1ZSxEYXRhVmlldzp0cnVlLEFycmF5QnVmZmVyVmlldzpmYWxzZSxGbG9hdDMyQXJyYXk6
-dHJ1ZSxGbG9hdDY0QXJyYXk6dHJ1ZSxJbnQxNkFycmF5OnRydWUsSW50MzJBcnJheTp0cnVlLEludDhB
-cnJheTp0cnVlLFVpbnQxNkFycmF5OnRydWUsVWludDMyQXJyYXk6dHJ1ZSxVaW50OENsYW1wZWRBcnJh
-eTp0cnVlLENhbnZhc1BpeGVsQXJyYXk6dHJ1ZSxVaW50OEFycmF5OmZhbHNlLEhUTUxBdWRpb0VsZW1l
-bnQ6dHJ1ZSxIVE1MQlJFbGVtZW50OnRydWUsSFRNTEJ1dHRvbkVsZW1lbnQ6dHJ1ZSxIVE1MQ2FudmFz
-RWxlbWVudDp0cnVlLEhUTUxDb250ZW50RWxlbWVudDp0cnVlLEhUTUxETGlzdEVsZW1lbnQ6dHJ1ZSxI
-VE1MRGF0YUVsZW1lbnQ6dHJ1ZSxIVE1MRGF0YUxpc3RFbGVtZW50OnRydWUsSFRNTERldGFpbHNFbGVt
-ZW50OnRydWUsSFRNTERpYWxvZ0VsZW1lbnQ6dHJ1ZSxIVE1MRGl2RWxlbWVudDp0cnVlLEhUTUxFbWJl
-ZEVsZW1lbnQ6dHJ1ZSxIVE1MRmllbGRTZXRFbGVtZW50OnRydWUsSFRNTEhSRWxlbWVudDp0cnVlLEhU
-TUxIZWFkRWxlbWVudDp0cnVlLEhUTUxIZWFkaW5nRWxlbWVudDp0cnVlLEhUTUxIdG1sRWxlbWVudDp0
-cnVlLEhUTUxJRnJhbWVFbGVtZW50OnRydWUsSFRNTEltYWdlRWxlbWVudDp0cnVlLEhUTUxJbnB1dEVs
-ZW1lbnQ6dHJ1ZSxIVE1MTElFbGVtZW50OnRydWUsSFRNTExhYmVsRWxlbWVudDp0cnVlLEhUTUxMZWdl
-bmRFbGVtZW50OnRydWUsSFRNTExpbmtFbGVtZW50OnRydWUsSFRNTE1hcEVsZW1lbnQ6dHJ1ZSxIVE1M
-TWVkaWFFbGVtZW50OnRydWUsSFRNTE1lbnVFbGVtZW50OnRydWUsSFRNTE1ldGFFbGVtZW50OnRydWUs
-SFRNTE1ldGVyRWxlbWVudDp0cnVlLEhUTUxNb2RFbGVtZW50OnRydWUsSFRNTE9MaXN0RWxlbWVudDp0
-cnVlLEhUTUxPYmplY3RFbGVtZW50OnRydWUsSFRNTE9wdEdyb3VwRWxlbWVudDp0cnVlLEhUTUxPcHRp
-b25FbGVtZW50OnRydWUsSFRNTE91dHB1dEVsZW1lbnQ6dHJ1ZSxIVE1MUGFyYW1FbGVtZW50OnRydWUs
-SFRNTFBpY3R1cmVFbGVtZW50OnRydWUsSFRNTFByZUVsZW1lbnQ6dHJ1ZSxIVE1MUHJvZ3Jlc3NFbGVt
-ZW50OnRydWUsSFRNTFF1b3RlRWxlbWVudDp0cnVlLEhUTUxTY3JpcHRFbGVtZW50OnRydWUsSFRNTFNo
-YWRvd0VsZW1lbnQ6dHJ1ZSxIVE1MU2xvdEVsZW1lbnQ6dHJ1ZSxIVE1MU291cmNlRWxlbWVudDp0cnVl
-LEhUTUxTcGFuRWxlbWVudDp0cnVlLEhUTUxTdHlsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDYXB0aW9u
-RWxlbWVudDp0cnVlLEhUTUxUYWJsZUNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlRGF0YUNlbGxFbGVt
-ZW50OnRydWUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDb2xFbGVtZW50
-OnRydWUsSFRNTFRleHRBcmVhRWxlbWVudDp0cnVlLEhUTUxUaW1lRWxlbWVudDp0cnVlLEhUTUxUaXRs
-ZUVsZW1lbnQ6dHJ1ZSxIVE1MVHJhY2tFbGVtZW50OnRydWUsSFRNTFVMaXN0RWxlbWVudDp0cnVlLEhU
-TUxVbmtub3duRWxlbWVudDp0cnVlLEhUTUxWaWRlb0VsZW1lbnQ6dHJ1ZSxIVE1MRGlyZWN0b3J5RWxl
-bWVudDp0cnVlLEhUTUxGb250RWxlbWVudDp0cnVlLEhUTUxGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MRnJh
-bWVTZXRFbGVtZW50OnRydWUsSFRNTE1hcnF1ZWVFbGVtZW50OnRydWUsSFRNTEVsZW1lbnQ6ZmFsc2Us
-SFRNTEFuY2hvckVsZW1lbnQ6dHJ1ZSxIVE1MQXJlYUVsZW1lbnQ6dHJ1ZSxIVE1MQmFzZUVsZW1lbnQ6
-dHJ1ZSxCbG9iOmZhbHNlLEhUTUxCb2R5RWxlbWVudDp0cnVlLENEQVRBU2VjdGlvbjp0cnVlLENoYXJh
-Y3RlckRhdGE6dHJ1ZSxDb21tZW50OnRydWUsUHJvY2Vzc2luZ0luc3RydWN0aW9uOnRydWUsVGV4dDp0
-cnVlLENTU1N0eWxlRGVjbGFyYXRpb246dHJ1ZSxNU1N0eWxlQ1NTUHJvcGVydGllczp0cnVlLENTUzJQ
-cm9wZXJ0aWVzOnRydWUsWE1MRG9jdW1lbnQ6dHJ1ZSxEb2N1bWVudDpmYWxzZSxET01FeGNlcHRpb246
-dHJ1ZSxET01JbXBsZW1lbnRhdGlvbjp0cnVlLERPTVJlY3RSZWFkT25seTpmYWxzZSxET01Ub2tlbkxp
-c3Q6dHJ1ZSxFbGVtZW50OmZhbHNlLEFib3J0UGF5bWVudEV2ZW50OnRydWUsQW5pbWF0aW9uRXZlbnQ6
-dHJ1ZSxBbmltYXRpb25QbGF5YmFja0V2ZW50OnRydWUsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6
-dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRXZlbnQ6dHJ1
-ZSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OnRydWUs
-QmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OnRydWUsQmVmb3JlVW5sb2FkRXZlbnQ6dHJ1ZSxCbG9iRXZl
-bnQ6dHJ1ZSxDYW5NYWtlUGF5bWVudEV2ZW50OnRydWUsQ2xpcGJvYXJkRXZlbnQ6dHJ1ZSxDbG9zZUV2
-ZW50OnRydWUsQ3VzdG9tRXZlbnQ6dHJ1ZSxEZXZpY2VNb3Rpb25FdmVudDp0cnVlLERldmljZU9yaWVu
-dGF0aW9uRXZlbnQ6dHJ1ZSxFcnJvckV2ZW50OnRydWUsRXh0ZW5kYWJsZUV2ZW50OnRydWUsRXh0ZW5k
-YWJsZU1lc3NhZ2VFdmVudDp0cnVlLEZldGNoRXZlbnQ6dHJ1ZSxGb250RmFjZVNldExvYWRFdmVudDp0
-cnVlLEZvcmVpZ25GZXRjaEV2ZW50OnRydWUsR2FtZXBhZEV2ZW50OnRydWUsSGFzaENoYW5nZUV2ZW50
-OnRydWUsSW5zdGFsbEV2ZW50OnRydWUsTWVkaWFFbmNyeXB0ZWRFdmVudDp0cnVlLE1lZGlhS2V5TWVz
-c2FnZUV2ZW50OnRydWUsTWVkaWFRdWVyeUxpc3RFdmVudDp0cnVlLE1lZGlhU3RyZWFtRXZlbnQ6dHJ1
-ZSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6dHJ1ZSxNZXNzYWdlRXZlbnQ6dHJ1ZSxNSURJQ29ubmVjdGlv
-bkV2ZW50OnRydWUsTUlESU1lc3NhZ2VFdmVudDp0cnVlLE11dGF0aW9uRXZlbnQ6dHJ1ZSxOb3RpZmlj
-YXRpb25FdmVudDp0cnVlLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdEV2ZW50
-OnRydWUsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDp0cnVlLFBvcFN0YXRlRXZlbnQ6dHJ1ZSxQcmVz
-ZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9u
-Q2xvc2VFdmVudDp0cnVlLFByb21pc2VSZWplY3Rpb25FdmVudDp0cnVlLFB1c2hFdmVudDp0cnVlLFJU
-Q0RhdGFDaGFubmVsRXZlbnQ6dHJ1ZSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OnRydWUsUlRDUGVlckNv
-bm5lY3Rpb25JY2VFdmVudDp0cnVlLFJUQ1RyYWNrRXZlbnQ6dHJ1ZSxTZWN1cml0eVBvbGljeVZpb2xh
-dGlvbkV2ZW50OnRydWUsU2Vuc29yRXJyb3JFdmVudDp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6
-dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OnRydWUsU3BlZWNoU3ludGhlc2lzRXZlbnQ6dHJ1ZSxT
-dG9yYWdlRXZlbnQ6dHJ1ZSxTeW5jRXZlbnQ6dHJ1ZSxUcmFja0V2ZW50OnRydWUsVHJhbnNpdGlvbkV2
-ZW50OnRydWUsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OnRydWUsVlJEZXZpY2VFdmVudDp0cnVlLFZSRGlz
-cGxheUV2ZW50OnRydWUsVlJTZXNzaW9uRXZlbnQ6dHJ1ZSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50
-OnRydWUsVVNCQ29ubmVjdGlvbkV2ZW50OnRydWUsSURCVmVyc2lvbkNoYW5nZUV2ZW50OnRydWUsQXVk
-aW9Qcm9jZXNzaW5nRXZlbnQ6dHJ1ZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6dHJ1ZSxXZWJH
-TENvbnRleHRFdmVudDp0cnVlLEV2ZW50OmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsU3VibWl0RXZlbnQ6
-ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsRmlsZTp0cnVlLEhUTUxGb3JtRWxlbWVudDp0cnVlLEhpc3Rv
-cnk6dHJ1ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxYTUxIdHRwUmVxdWVzdDp0cnVlLFhNTEh0dHBSZXF1ZXN0
-RXZlbnRUYXJnZXQ6ZmFsc2UsSW1hZ2VEYXRhOnRydWUsTG9jYXRpb246dHJ1ZSxNb3VzZUV2ZW50OnRy
-dWUsRHJhZ0V2ZW50OnRydWUsUG9pbnRlckV2ZW50OnRydWUsV2hlZWxFdmVudDp0cnVlLERvY3VtZW50
-RnJhZ21lbnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsRG9jdW1lbnRUeXBlOnRydWUsTm9kZTpmYWxzZSxO
-b2RlTGlzdDp0cnVlLFJhZGlvTm9kZUxpc3Q6dHJ1ZSxIVE1MUGFyYWdyYXBoRWxlbWVudDp0cnVlLFBy
-b2dyZXNzRXZlbnQ6dHJ1ZSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6dHJ1ZSxIVE1MU2VsZWN0RWxlbWVu
-dDp0cnVlLEhUTUxUYWJsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVSb3dFbGVtZW50OnRydWUsSFRNTFRh
-YmxlU2VjdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGVtcGxhdGVFbGVtZW50OnRydWUsQ29tcG9zaXRpb25F
-dmVudDp0cnVlLEZvY3VzRXZlbnQ6dHJ1ZSxLZXlib2FyZEV2ZW50OnRydWUsVGV4dEV2ZW50OnRydWUs
-VG91Y2hFdmVudDp0cnVlLFVJRXZlbnQ6ZmFsc2UsV2luZG93OnRydWUsRE9NV2luZG93OnRydWUsRGVk
-aWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxT
-aGFyZWRXb3JrZXJHbG9iYWxTY29wZTp0cnVlLFdvcmtlckdsb2JhbFNjb3BlOnRydWUsQXR0cjp0cnVl
-LENsaWVudFJlY3Q6dHJ1ZSxET01SZWN0OnRydWUsTmFtZWROb2RlTWFwOnRydWUsTW96TmFtZWRBdHRy
-TWFwOnRydWUsSURCS2V5UmFuZ2U6dHJ1ZSxTVkdTY3JpcHRFbGVtZW50OnRydWUsU1ZHQUVsZW1lbnQ6
-dHJ1ZSxTVkdBbmltYXRlRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OnRydWUsU1ZH
-QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRpb25FbGVtZW50OnRydWUsU1ZHQ2ly
-Y2xlRWxlbWVudDp0cnVlLFNWR0NsaXBQYXRoRWxlbWVudDp0cnVlLFNWR0RlZnNFbGVtZW50OnRydWUs
-U1ZHRGVzY0VsZW1lbnQ6dHJ1ZSxTVkdEaXNjYXJkRWxlbWVudDp0cnVlLFNWR0VsbGlwc2VFbGVtZW50
-OnRydWUsU1ZHRkVCbGVuZEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDp0cnVlLFNW
-R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OnRydWUsU1ZHRkVDb21wb3NpdGVFbGVtZW50OnRydWUs
-U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
-dHJ1ZSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6dHJ1ZSxTVkdGRURpc3RhbnRMaWdodEVsZW1l
-bnQ6dHJ1ZSxTVkdGRUZsb29kRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0FFbGVtZW50OnRydWUsU1ZHRkVG
-dW5jQkVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNHRWxlbWVudDp0cnVlLFNWR0ZFRnVuY1JFbGVtZW50OnRy
-dWUsU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OnRydWUsU1ZHRkVJbWFnZUVsZW1lbnQ6dHJ1ZSxTVkdG
-RU1lcmdlRWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDp0cnVlLFNWR0ZFTW9ycGhvbG9n
-eUVsZW1lbnQ6dHJ1ZSxTVkdGRU9mZnNldEVsZW1lbnQ6dHJ1ZSxTVkdGRVBvaW50TGlnaHRFbGVtZW50
-OnRydWUsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDp0cnVlLFNWR0ZFU3BvdExpZ2h0RWxlbWVu
-dDp0cnVlLFNWR0ZFVGlsZUVsZW1lbnQ6dHJ1ZSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OnRydWUsU1ZH
-RmlsdGVyRWxlbWVudDp0cnVlLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OnRydWUsU1ZHR0VsZW1lbnQ6
-dHJ1ZSxTVkdHZW9tZXRyeUVsZW1lbnQ6dHJ1ZSxTVkdHcmFwaGljc0VsZW1lbnQ6dHJ1ZSxTVkdJbWFn
-ZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lRWxlbWVudDp0cnVlLFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDp0
-cnVlLFNWR01hcmtlckVsZW1lbnQ6dHJ1ZSxTVkdNYXNrRWxlbWVudDp0cnVlLFNWR01ldGFkYXRhRWxl
-bWVudDp0cnVlLFNWR1BhdGhFbGVtZW50OnRydWUsU1ZHUGF0dGVybkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5
-Z29uRWxlbWVudDp0cnVlLFNWR1BvbHlsaW5lRWxlbWVudDp0cnVlLFNWR1JhZGlhbEdyYWRpZW50RWxl
-bWVudDp0cnVlLFNWR1JlY3RFbGVtZW50OnRydWUsU1ZHU2V0RWxlbWVudDp0cnVlLFNWR1N0b3BFbGVt
-ZW50OnRydWUsU1ZHU3R5bGVFbGVtZW50OnRydWUsU1ZHU1ZHRWxlbWVudDp0cnVlLFNWR1N3aXRjaEVs
-ZW1lbnQ6dHJ1ZSxTVkdTeW1ib2xFbGVtZW50OnRydWUsU1ZHVFNwYW5FbGVtZW50OnRydWUsU1ZHVGV4
-dENvbnRlbnRFbGVtZW50OnRydWUsU1ZHVGV4dEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0UGF0aEVsZW1lbnQ6
-dHJ1ZSxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OnRydWUsU1ZHVGl0bGVFbGVtZW50OnRydWUsU1ZH
-VXNlRWxlbWVudDp0cnVlLFNWR1ZpZXdFbGVtZW50OnRydWUsU1ZHR3JhZGllbnRFbGVtZW50OnRydWUs
-U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdGRURyb3BTaGFkb3dFbGVt
-ZW50OnRydWUsU1ZHTVBhdGhFbGVtZW50OnRydWUsU1ZHRWxlbWVudDpmYWxzZX0pCkguTFouJG5hdGl2
-ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5SRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0i
-QXJyYXlCdWZmZXJWaWV3IgpILlZQLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXci
-CkguRGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5XQi4kbmF0aXZlU3Vw
-ZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlpHLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJh
-eUJ1ZmZlclZpZXciCkguUGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyJ9KSgp
-CmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QodykKY29udmVydFRvRmFzdE9iamVjdCgkKTsoZnVuY3Rpb24o
-YSl7aWYodHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe2EobnVsbCkKcmV0dXJufWlmKHR5cGVv
-ZiBkb2N1bWVudC5jdXJyZW50U2NyaXB0IT0idW5kZWZpbmVkIil7YShkb2N1bWVudC5jdXJyZW50U2Ny
-aXB0KQpyZXR1cm59dmFyIHM9ZG9jdW1lbnQuc2NyaXB0cwpmdW5jdGlvbiBvbkxvYWQoYil7Zm9yKHZh
-ciBxPTA7cTxzLmxlbmd0aDsrK3Epc1txXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixvbkxvYWQs
-ZmFsc2UpCmEoYi50YXJnZXQpfWZvcih2YXIgcj0wO3I8cy5sZW5ndGg7KytyKXNbcl0uYWRkRXZlbnRM
-aXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKX0pKGZ1bmN0aW9uKGEpe3YuY3VycmVudFNjcmlwdD1h
-CnZhciBzPUwuSXEKaWYodHlwZW9mIGRhcnRNYWluUnVubmVyPT09ImZ1bmN0aW9uIilkYXJ0TWFpblJ1
-bm5lcihzLFtdKQplbHNlIHMoW10pfSl9KSgpCi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pZ3JhdGlvbi5q
-cy5tYXAK
+LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0xLC0yLC0yLC0yLC0yLC0yLDYy
+LC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0yLC0yLC0yLC0xLC0yLC0y
+LC0yLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEs
+MjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIsNjMsLTIsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUs
+MzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsLTIsLTIsLTIsLTIs
+LTJdLHQudCkpKX0pCnMoJCwiWWUiLCJ3USIsZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3Mh
+PSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PSJbb2Jq
+ZWN0IHByb2Nlc3NdIiYmcHJvY2Vzcy5wbGF0Zm9ybT09IndpbjMyIn0pCnMoJCwibWYiLCJ6NCIsZnVu
+Y3Rpb24oKXtyZXR1cm4gUC5udSgiXltcXC1cXC4wLTlBLVpfYS16fl0qJCIpfSkKcygkLCJPUSIsInZa
+IixmdW5jdGlvbigpe3JldHVybiBQLktOKCl9KQpzKCQsIlNDIiwiQU4iLGZ1bmN0aW9uKCl7cmV0dXJu
+IFAudE0oWyJBIiwiQUJCUiIsIkFDUk9OWU0iLCJBRERSRVNTIiwiQVJFQSIsIkFSVElDTEUiLCJBU0lE
+RSIsIkFVRElPIiwiQiIsIkJESSIsIkJETyIsIkJJRyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJVVFRPTiIs
+IkNBTlZBUyIsIkNBUFRJT04iLCJDRU5URVIiLCJDSVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdST1VQIiwi
+Q09NTUFORCIsIkRBVEEiLCJEQVRBTElTVCIsIkREIiwiREVMIiwiREVUQUlMUyIsIkRGTiIsIkRJUiIs
+IkRJViIsIkRMIiwiRFQiLCJFTSIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPTlQi
+LCJGT09URVIiLCJGT1JNIiwiSDEiLCJIMiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiSEVBREVSIiwiSEdS
+T1VQIiwiSFIiLCJJIiwiSUZSQU1FIiwiSU1HIiwiSU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJFTCIsIkxF
+R0VORCIsIkxJIiwiTUFQIiwiTUFSSyIsIk1FTlUiLCJNRVRFUiIsIk5BViIsIk5PQlIiLCJPTCIsIk9Q
+VEdST1VQIiwiT1BUSU9OIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlBST0dSRVNTIiwiUSIsIlMiLCJTQU1Q
+IiwiU0VDVElPTiIsIlNFTEVDVCIsIlNNQUxMIiwiU09VUkNFIiwiU1BBTiIsIlNUUklLRSIsIlNUUk9O
+RyIsIlNVQiIsIlNVTU1BUlkiLCJTVVAiLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURVhUQVJFQSIsIlRG
+T09UIiwiVEgiLCJUSEVBRCIsIlRJTUUiLCJUUiIsIlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJWQVIiLCJW
+SURFTyIsIldCUiJdLHQuTil9KQpzKCQsIlg0IiwiaEciLGZ1bmN0aW9uKCl7cmV0dXJuIFAubnUoIl5c
+XFMrJCIpfSkKcygkLCJ3TyIsIm93IixmdW5jdGlvbigpe3JldHVybiBQLk5EKHNlbGYpfSkKcygkLCJr
+dCIsIlI4IixmdW5jdGlvbigpe3JldHVybiBILllnKCJfJGRhcnRfZGFydE9iamVjdCIpfSkKcygkLCJm
+SyIsImtJIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBEYXJ0T2JqZWN0KGEpe3RoaXMubz1hfX0p
+CnMoJCwicXQiLCJ6QiIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFQubVEoKX0pCnMoJCwiT2wiLCJVRSIs
+ZnVuY3Rpb24oKXtyZXR1cm4gUC5oSyhDLm9sLmdtVyhXLngzKCkpLmhyZWYpLmdoWSgpLnEoMCwiYXV0
+aFRva2VuIil9KQpzKCQsImhUIiwieVAiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVj
+dG9yKCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50Iil9KQpzKCQsIlc2IiwiaEwiLGZ1bmN0aW9uKCl7
+cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIpfSkK
+cygkLCJUUiIsIkRXIixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3RvcigiZm9vdGVy
+Iil9KQpzKCQsIkVZIiwiZmkiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCJo
+ZWFkZXIiKX0pCnMoJCwiYkEiLCJjMCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0
+b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24iKX0pCnMoJCwidDAiLCJiTiIsZnVuY3Rpb24oKXty
+ZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24tbGFiZWwi
+KX0pCnMoJCwiYXYiLCJEOSIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiN1
+bml0LW5hbWUiKX0pCnIoJCwiZmUiLCJLRyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwuWEEoKX0pCnMo
+JCwiZW8iLCJuVSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0ubEkoSC5OMCgiZnYiKS5hKCQuSGsoKSkp
+fSkKcygkLCJ5ciIsImJEIixmdW5jdGlvbigpe3JldHVybiBuZXcgRS5PRihQLm51KCIvIiksUC5udSgi
+W14vXSQiKSxQLm51KCJeLyIpKX0pCnMoJCwiTWsiLCJLayIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwu
+SVYoUC5udSgiWy9cXFxcXSIpLFAubnUoIlteL1xcXFxdJCIpLFAubnUoIl4oXFxcXFxcXFxbXlxcXFxd
+K1xcXFxbXlxcXFwvXSt8W2EtekEtWl06Wy9cXFxcXSkiKSxQLm51KCJeWy9cXFxcXSg/IVsvXFxcXF0p
+IikpfSkKcygkLCJhayIsIkViIixmdW5jdGlvbigpe3JldHVybiBuZXcgRi5ydShQLm51KCIvIiksUC5u
+dSgiKF5bYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL3xbXi9dKSQiKSxQLm51KCJbYS16QS1aXVstKy5h
+LXpBLVpcXGRdKjovL1teL10qIiksUC5udSgiXi8iKSl9KQpzKCQsImxzIiwiSGsiLGZ1bmN0aW9uKCl7
+cmV0dXJuIE8uUmgoKX0pfSkoKTsoZnVuY3Rpb24gbmF0aXZlU3VwcG9ydCgpeyFmdW5jdGlvbigpe3Zh
+ciBzPWZ1bmN0aW9uKGEpe3ZhciBtPXt9Cm1bYV09MQpyZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBl
+cnMuY29udmVydFRvRmFzdE9iamVjdChtKSlbMF19CnYuZ2V0SXNvbGF0ZVRhZz1mdW5jdGlvbihhKXty
+ZXR1cm4gcygiX19fZGFydF8iK2Erdi5pc29sYXRlVGFnKX0KdmFyIHI9Il9fX2RhcnRfaXNvbGF0ZV90
+YWdzXyIKdmFyIHE9T2JqZWN0W3JdfHwoT2JqZWN0W3JdPU9iamVjdC5jcmVhdGUobnVsbCkpCnZhciBw
+PSJfWnhZeFgiCmZvcih2YXIgbz0wOztvKyspe3ZhciBuPXMocCsiXyIrbysiXyIpCmlmKCEobiBpbiBx
+KSl7cVtuXT0xCnYuaXNvbGF0ZVRhZz1uCmJyZWFrfX12LmRpc3BhdGNoUHJvcGVydHlOYW1lPXYuZ2V0
+SXNvbGF0ZVRhZygiZGlzcGF0Y2hfcmVjb3JkIil9KCkKaHVua0hlbHBlcnMuc2V0T3JVcGRhdGVJbnRl
+cmNlcHRvcnNCeVRhZyh7RE9NRXJyb3I6Si5HdixNZWRpYUVycm9yOkouR3YsTmF2aWdhdG9yOkouR3Ys
+TmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlOkouR3YsTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6Si5H
+dixPdmVyY29uc3RyYWluZWRFcnJvcjpKLkd2LFBvc2l0aW9uRXJyb3I6Si5HdixHZW9sb2NhdGlvblBv
+c2l0aW9uRXJyb3I6Si5HdixSYW5nZTpKLkd2LFNRTEVycm9yOkouR3YsRGF0YVZpZXc6SC5FVCxBcnJh
+eUJ1ZmZlclZpZXc6SC5FVCxGbG9hdDMyQXJyYXk6SC5EZyxGbG9hdDY0QXJyYXk6SC5EZyxJbnQxNkFy
+cmF5OkgueGosSW50MzJBcnJheTpILmRFLEludDhBcnJheTpILlpBLFVpbnQxNkFycmF5OkguZFQsVWlu
+dDMyQXJyYXk6SC5QcSxVaW50OENsYW1wZWRBcnJheTpILmVFLENhbnZhc1BpeGVsQXJyYXk6SC5lRSxV
+aW50OEFycmF5OkguVjYsSFRNTEF1ZGlvRWxlbWVudDpXLnFFLEhUTUxCUkVsZW1lbnQ6Vy5xRSxIVE1M
+QnV0dG9uRWxlbWVudDpXLnFFLEhUTUxDYW52YXNFbGVtZW50OlcucUUsSFRNTENvbnRlbnRFbGVtZW50
+OlcucUUsSFRNTERMaXN0RWxlbWVudDpXLnFFLEhUTUxEYXRhRWxlbWVudDpXLnFFLEhUTUxEYXRhTGlz
+dEVsZW1lbnQ6Vy5xRSxIVE1MRGV0YWlsc0VsZW1lbnQ6Vy5xRSxIVE1MRGlhbG9nRWxlbWVudDpXLnFF
+LEhUTUxEaXZFbGVtZW50OlcucUUsSFRNTEVtYmVkRWxlbWVudDpXLnFFLEhUTUxGaWVsZFNldEVsZW1l
+bnQ6Vy5xRSxIVE1MSFJFbGVtZW50OlcucUUsSFRNTEhlYWRFbGVtZW50OlcucUUsSFRNTEhlYWRpbmdF
+bGVtZW50OlcucUUsSFRNTEh0bWxFbGVtZW50OlcucUUsSFRNTElGcmFtZUVsZW1lbnQ6Vy5xRSxIVE1M
+SW1hZ2VFbGVtZW50OlcucUUsSFRNTElucHV0RWxlbWVudDpXLnFFLEhUTUxMSUVsZW1lbnQ6Vy5xRSxI
+VE1MTGFiZWxFbGVtZW50OlcucUUsSFRNTExlZ2VuZEVsZW1lbnQ6Vy5xRSxIVE1MTGlua0VsZW1lbnQ6
+Vy5xRSxIVE1MTWFwRWxlbWVudDpXLnFFLEhUTUxNZWRpYUVsZW1lbnQ6Vy5xRSxIVE1MTWVudUVsZW1l
+bnQ6Vy5xRSxIVE1MTWV0YUVsZW1lbnQ6Vy5xRSxIVE1MTWV0ZXJFbGVtZW50OlcucUUsSFRNTE1vZEVs
+ZW1lbnQ6Vy5xRSxIVE1MT0xpc3RFbGVtZW50OlcucUUsSFRNTE9iamVjdEVsZW1lbnQ6Vy5xRSxIVE1M
+T3B0R3JvdXBFbGVtZW50OlcucUUsSFRNTE9wdGlvbkVsZW1lbnQ6Vy5xRSxIVE1MT3V0cHV0RWxlbWVu
+dDpXLnFFLEhUTUxQYXJhbUVsZW1lbnQ6Vy5xRSxIVE1MUGljdHVyZUVsZW1lbnQ6Vy5xRSxIVE1MUHJl
+RWxlbWVudDpXLnFFLEhUTUxQcm9ncmVzc0VsZW1lbnQ6Vy5xRSxIVE1MUXVvdGVFbGVtZW50OlcucUUs
+SFRNTFNjcmlwdEVsZW1lbnQ6Vy5xRSxIVE1MU2hhZG93RWxlbWVudDpXLnFFLEhUTUxTbG90RWxlbWVu
+dDpXLnFFLEhUTUxTb3VyY2VFbGVtZW50OlcucUUsSFRNTFNwYW5FbGVtZW50OlcucUUsSFRNTFN0eWxl
+RWxlbWVudDpXLnFFLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlcucUUsSFRNTFRhYmxlQ2VsbEVsZW1l
+bnQ6Vy5xRSxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVIZWFkZXJDZWxsRWxl
+bWVudDpXLnFFLEhUTUxUYWJsZUNvbEVsZW1lbnQ6Vy5xRSxIVE1MVGV4dEFyZWFFbGVtZW50OlcucUUs
+SFRNTFRpbWVFbGVtZW50OlcucUUsSFRNTFRpdGxlRWxlbWVudDpXLnFFLEhUTUxUcmFja0VsZW1lbnQ6
+Vy5xRSxIVE1MVUxpc3RFbGVtZW50OlcucUUsSFRNTFVua25vd25FbGVtZW50OlcucUUsSFRNTFZpZGVv
+RWxlbWVudDpXLnFFLEhUTUxEaXJlY3RvcnlFbGVtZW50OlcucUUsSFRNTEZvbnRFbGVtZW50OlcucUUs
+SFRNTEZyYW1lRWxlbWVudDpXLnFFLEhUTUxGcmFtZVNldEVsZW1lbnQ6Vy5xRSxIVE1MTWFycXVlZUVs
+ZW1lbnQ6Vy5xRSxIVE1MRWxlbWVudDpXLnFFLEhUTUxBbmNob3JFbGVtZW50OlcuR2gsSFRNTEFyZWFF
+bGVtZW50OlcuZlksSFRNTEJhc2VFbGVtZW50OlcuclosQmxvYjpXLkF6LEhUTUxCb2R5RWxlbWVudDpX
+LlFQLENEQVRBU2VjdGlvbjpXLm54LENoYXJhY3RlckRhdGE6Vy5ueCxDb21tZW50OlcubngsUHJvY2Vz
+c2luZ0luc3RydWN0aW9uOlcubngsVGV4dDpXLm54LENTU1N0eWxlRGVjbGFyYXRpb246Vy5vSixNU1N0
+eWxlQ1NTUHJvcGVydGllczpXLm9KLENTUzJQcm9wZXJ0aWVzOlcub0osWE1MRG9jdW1lbnQ6Vy5RRixE
+b2N1bWVudDpXLlFGLERPTUV4Y2VwdGlvbjpXLk5oLERPTUltcGxlbWVudGF0aW9uOlcuYWUsRE9NUmVj
+dFJlYWRPbmx5OlcuSUIsRE9NVG9rZW5MaXN0OlcubjcsRWxlbWVudDpXLmN2LEFib3J0UGF5bWVudEV2
+ZW50OlcuZWEsQW5pbWF0aW9uRXZlbnQ6Vy5lYSxBbmltYXRpb25QbGF5YmFja0V2ZW50OlcuZWEsQXBw
+bGljYXRpb25DYWNoZUVycm9yRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OlcuZWEs
+QmFja2dyb3VuZEZldGNoRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6Vy5lYSxCYWNr
+Z3JvdW5kRmV0Y2hlZEV2ZW50OlcuZWEsQmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OlcuZWEsQmVmb3Jl
+VW5sb2FkRXZlbnQ6Vy5lYSxCbG9iRXZlbnQ6Vy5lYSxDYW5NYWtlUGF5bWVudEV2ZW50OlcuZWEsQ2xp
+cGJvYXJkRXZlbnQ6Vy5lYSxDbG9zZUV2ZW50OlcuZWEsQ3VzdG9tRXZlbnQ6Vy5lYSxEZXZpY2VNb3Rp
+b25FdmVudDpXLmVhLERldmljZU9yaWVudGF0aW9uRXZlbnQ6Vy5lYSxFcnJvckV2ZW50OlcuZWEsRXh0
+ZW5kYWJsZUV2ZW50OlcuZWEsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpXLmVhLEZldGNoRXZlbnQ6Vy5l
+YSxGb250RmFjZVNldExvYWRFdmVudDpXLmVhLEZvcmVpZ25GZXRjaEV2ZW50OlcuZWEsR2FtZXBhZEV2
+ZW50OlcuZWEsSGFzaENoYW5nZUV2ZW50OlcuZWEsSW5zdGFsbEV2ZW50OlcuZWEsTWVkaWFFbmNyeXB0
+ZWRFdmVudDpXLmVhLE1lZGlhS2V5TWVzc2FnZUV2ZW50OlcuZWEsTWVkaWFRdWVyeUxpc3RFdmVudDpX
+LmVhLE1lZGlhU3RyZWFtRXZlbnQ6Vy5lYSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6Vy5lYSxNZXNzYWdl
+RXZlbnQ6Vy5lYSxNSURJQ29ubmVjdGlvbkV2ZW50OlcuZWEsTUlESU1lc3NhZ2VFdmVudDpXLmVhLE11
+dGF0aW9uRXZlbnQ6Vy5lYSxOb3RpZmljYXRpb25FdmVudDpXLmVhLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6
+Vy5lYSxQYXltZW50UmVxdWVzdEV2ZW50OlcuZWEsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDpXLmVh
+LFBvcFN0YXRlRXZlbnQ6Vy5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6Vy5l
+YSxQcmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDpXLmVhLFByb21pc2VSZWplY3Rpb25FdmVu
+dDpXLmVhLFB1c2hFdmVudDpXLmVhLFJUQ0RhdGFDaGFubmVsRXZlbnQ6Vy5lYSxSVENEVE1GVG9uZUNo
+YW5nZUV2ZW50OlcuZWEsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDpXLmVhLFJUQ1RyYWNrRXZlbnQ6
+Vy5lYSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OlcuZWEsU2Vuc29yRXJyb3JFdmVudDpXLmVh
+LFNwZWVjaFJlY29nbml0aW9uRXJyb3I6Vy5lYSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OlcuZWEsU3Bl
+ZWNoU3ludGhlc2lzRXZlbnQ6Vy5lYSxTdG9yYWdlRXZlbnQ6Vy5lYSxTeW5jRXZlbnQ6Vy5lYSxUcmFj
+a0V2ZW50OlcuZWEsVHJhbnNpdGlvbkV2ZW50OlcuZWEsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OlcuZWEs
+VlJEZXZpY2VFdmVudDpXLmVhLFZSRGlzcGxheUV2ZW50OlcuZWEsVlJTZXNzaW9uRXZlbnQ6Vy5lYSxN
+b2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OlcuZWEsVVNCQ29ubmVjdGlvbkV2ZW50OlcuZWEsSURCVmVy
+c2lvbkNoYW5nZUV2ZW50OlcuZWEsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6Vy5lYSxPZmZsaW5lQXVkaW9D
+b21wbGV0aW9uRXZlbnQ6Vy5lYSxXZWJHTENvbnRleHRFdmVudDpXLmVhLEV2ZW50OlcuZWEsSW5wdXRF
+dmVudDpXLmVhLFN1Ym1pdEV2ZW50OlcuZWEsRXZlbnRUYXJnZXQ6Vy5EMCxGaWxlOlcuaEgsSFRNTEZv
+cm1FbGVtZW50OlcuaDQsSGlzdG9yeTpXLmJyLEhUTUxEb2N1bWVudDpXLlZiLFhNTEh0dHBSZXF1ZXN0
+OlcuZkosWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpXLndhLEltYWdlRGF0YTpXLlNnLExvY2F0aW9u
+OlcudTgsTW91c2VFdmVudDpXLkFqLERyYWdFdmVudDpXLkFqLFBvaW50ZXJFdmVudDpXLkFqLFdoZWVs
+RXZlbnQ6Vy5BaixEb2N1bWVudEZyYWdtZW50OlcuS1YsU2hhZG93Um9vdDpXLktWLERvY3VtZW50VHlw
+ZTpXLktWLE5vZGU6Vy5LVixOb2RlTGlzdDpXLkJILFJhZGlvTm9kZUxpc3Q6Vy5CSCxIVE1MUGFyYWdy
+YXBoRWxlbWVudDpXLlNOLFByb2dyZXNzRXZlbnQ6Vy5ldyxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6Vy5l
+dyxIVE1MU2VsZWN0RWxlbWVudDpXLmxwLEhUTUxUYWJsZUVsZW1lbnQ6Vy5UYixIVE1MVGFibGVSb3dF
+bGVtZW50OlcuSXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Vy5XUCxIVE1MVGVtcGxhdGVFbGVtZW50
+OlcueVksQ29tcG9zaXRpb25FdmVudDpXLnc2LEZvY3VzRXZlbnQ6Vy53NixLZXlib2FyZEV2ZW50Olcu
+dzYsVGV4dEV2ZW50OlcudzYsVG91Y2hFdmVudDpXLnc2LFVJRXZlbnQ6Vy53NixXaW5kb3c6Vy5LNSxE
+T01XaW5kb3c6Vy5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFNlcnZpY2VXb3JrZXJH
+bG9iYWxTY29wZTpXLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOlcuQ20sV29ya2VyR2xvYmFsU2Nv
+cGU6Vy5DbSxBdHRyOlcuQ1EsQ2xpZW50UmVjdDpXLnc0LERPTVJlY3Q6Vy53NCxOYW1lZE5vZGVNYXA6
+Vy5yaCxNb3pOYW1lZEF0dHJNYXA6Vy5yaCxJREJLZXlSYW5nZTpQLmhGLFNWR1NjcmlwdEVsZW1lbnQ6
+UC5uZCxTVkdBRWxlbWVudDpQLmhpLFNWR0FuaW1hdGVFbGVtZW50OlAuaGksU1ZHQW5pbWF0ZU1vdGlv
+bkVsZW1lbnQ6UC5oaSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpQLmhpLFNWR0FuaW1hdGlvbkVs
+ZW1lbnQ6UC5oaSxTVkdDaXJjbGVFbGVtZW50OlAuaGksU1ZHQ2xpcFBhdGhFbGVtZW50OlAuaGksU1ZH
+RGVmc0VsZW1lbnQ6UC5oaSxTVkdEZXNjRWxlbWVudDpQLmhpLFNWR0Rpc2NhcmRFbGVtZW50OlAuaGks
+U1ZHRWxsaXBzZUVsZW1lbnQ6UC5oaSxTVkdGRUJsZW5kRWxlbWVudDpQLmhpLFNWR0ZFQ29sb3JNYXRy
+aXhFbGVtZW50OlAuaGksU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6UC5oaSxTVkdGRUNvbXBv
+c2l0ZUVsZW1lbnQ6UC5oaSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpQLmhpLFNWR0ZFRGlmZnVz
+ZUxpZ2h0aW5nRWxlbWVudDpQLmhpLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpQLmhpLFNWR0ZF
+RGlzdGFudExpZ2h0RWxlbWVudDpQLmhpLFNWR0ZFRmxvb2RFbGVtZW50OlAuaGksU1ZHRkVGdW5jQUVs
+ZW1lbnQ6UC5oaSxTVkdGRUZ1bmNCRWxlbWVudDpQLmhpLFNWR0ZFRnVuY0dFbGVtZW50OlAuaGksU1ZH
+RkVGdW5jUkVsZW1lbnQ6UC5oaSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6UC5oaSxTVkdGRUltYWdl
+RWxlbWVudDpQLmhpLFNWR0ZFTWVyZ2VFbGVtZW50OlAuaGksU1ZHRkVNZXJnZU5vZGVFbGVtZW50OlAu
+aGksU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDpQLmhpLFNWR0ZFT2Zmc2V0RWxlbWVudDpQLmhpLFNWR0ZF
+UG9pbnRMaWdodEVsZW1lbnQ6UC5oaSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OlAuaGksU1ZH
+RkVTcG90TGlnaHRFbGVtZW50OlAuaGksU1ZHRkVUaWxlRWxlbWVudDpQLmhpLFNWR0ZFVHVyYnVsZW5j
+ZUVsZW1lbnQ6UC5oaSxTVkdGaWx0ZXJFbGVtZW50OlAuaGksU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
+UC5oaSxTVkdHRWxlbWVudDpQLmhpLFNWR0dlb21ldHJ5RWxlbWVudDpQLmhpLFNWR0dyYXBoaWNzRWxl
+bWVudDpQLmhpLFNWR0ltYWdlRWxlbWVudDpQLmhpLFNWR0xpbmVFbGVtZW50OlAuaGksU1ZHTGluZWFy
+R3JhZGllbnRFbGVtZW50OlAuaGksU1ZHTWFya2VyRWxlbWVudDpQLmhpLFNWR01hc2tFbGVtZW50OlAu
+aGksU1ZHTWV0YWRhdGFFbGVtZW50OlAuaGksU1ZHUGF0aEVsZW1lbnQ6UC5oaSxTVkdQYXR0ZXJuRWxl
+bWVudDpQLmhpLFNWR1BvbHlnb25FbGVtZW50OlAuaGksU1ZHUG9seWxpbmVFbGVtZW50OlAuaGksU1ZH
+UmFkaWFsR3JhZGllbnRFbGVtZW50OlAuaGksU1ZHUmVjdEVsZW1lbnQ6UC5oaSxTVkdTZXRFbGVtZW50
+OlAuaGksU1ZHU3RvcEVsZW1lbnQ6UC5oaSxTVkdTdHlsZUVsZW1lbnQ6UC5oaSxTVkdTVkdFbGVtZW50
+OlAuaGksU1ZHU3dpdGNoRWxlbWVudDpQLmhpLFNWR1N5bWJvbEVsZW1lbnQ6UC5oaSxTVkdUU3BhbkVs
+ZW1lbnQ6UC5oaSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6UC5oaSxTVkdUZXh0RWxlbWVudDpQLmhpLFNW
+R1RleHRQYXRoRWxlbWVudDpQLmhpLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6UC5oaSxTVkdUaXRs
+ZUVsZW1lbnQ6UC5oaSxTVkdVc2VFbGVtZW50OlAuaGksU1ZHVmlld0VsZW1lbnQ6UC5oaSxTVkdHcmFk
+aWVudEVsZW1lbnQ6UC5oaSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpQLmhpLFNW
+R0ZFRHJvcFNoYWRvd0VsZW1lbnQ6UC5oaSxTVkdNUGF0aEVsZW1lbnQ6UC5oaSxTVkdFbGVtZW50OlAu
+aGl9KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLE1lZGlhRXJy
+b3I6dHJ1ZSxOYXZpZ2F0b3I6dHJ1ZSxOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6dHJ1ZSxOYXZp
+Z2F0b3JVc2VyTWVkaWFFcnJvcjp0cnVlLE92ZXJjb25zdHJhaW5lZEVycm9yOnRydWUsUG9zaXRpb25F
+cnJvcjp0cnVlLEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcjp0cnVlLFJhbmdlOnRydWUsU1FMRXJyb3I6
+dHJ1ZSxEYXRhVmlldzp0cnVlLEFycmF5QnVmZmVyVmlldzpmYWxzZSxGbG9hdDMyQXJyYXk6dHJ1ZSxG
+bG9hdDY0QXJyYXk6dHJ1ZSxJbnQxNkFycmF5OnRydWUsSW50MzJBcnJheTp0cnVlLEludDhBcnJheTp0
+cnVlLFVpbnQxNkFycmF5OnRydWUsVWludDMyQXJyYXk6dHJ1ZSxVaW50OENsYW1wZWRBcnJheTp0cnVl
+LENhbnZhc1BpeGVsQXJyYXk6dHJ1ZSxVaW50OEFycmF5OmZhbHNlLEhUTUxBdWRpb0VsZW1lbnQ6dHJ1
+ZSxIVE1MQlJFbGVtZW50OnRydWUsSFRNTEJ1dHRvbkVsZW1lbnQ6dHJ1ZSxIVE1MQ2FudmFzRWxlbWVu
+dDp0cnVlLEhUTUxDb250ZW50RWxlbWVudDp0cnVlLEhUTUxETGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MRGF0
+YUVsZW1lbnQ6dHJ1ZSxIVE1MRGF0YUxpc3RFbGVtZW50OnRydWUsSFRNTERldGFpbHNFbGVtZW50OnRy
+dWUsSFRNTERpYWxvZ0VsZW1lbnQ6dHJ1ZSxIVE1MRGl2RWxlbWVudDp0cnVlLEhUTUxFbWJlZEVsZW1l
+bnQ6dHJ1ZSxIVE1MRmllbGRTZXRFbGVtZW50OnRydWUsSFRNTEhSRWxlbWVudDp0cnVlLEhUTUxIZWFk
+RWxlbWVudDp0cnVlLEhUTUxIZWFkaW5nRWxlbWVudDp0cnVlLEhUTUxIdG1sRWxlbWVudDp0cnVlLEhU
+TUxJRnJhbWVFbGVtZW50OnRydWUsSFRNTEltYWdlRWxlbWVudDp0cnVlLEhUTUxJbnB1dEVsZW1lbnQ6
+dHJ1ZSxIVE1MTElFbGVtZW50OnRydWUsSFRNTExhYmVsRWxlbWVudDp0cnVlLEhUTUxMZWdlbmRFbGVt
+ZW50OnRydWUsSFRNTExpbmtFbGVtZW50OnRydWUsSFRNTE1hcEVsZW1lbnQ6dHJ1ZSxIVE1MTWVkaWFF
+bGVtZW50OnRydWUsSFRNTE1lbnVFbGVtZW50OnRydWUsSFRNTE1ldGFFbGVtZW50OnRydWUsSFRNTE1l
+dGVyRWxlbWVudDp0cnVlLEhUTUxNb2RFbGVtZW50OnRydWUsSFRNTE9MaXN0RWxlbWVudDp0cnVlLEhU
+TUxPYmplY3RFbGVtZW50OnRydWUsSFRNTE9wdEdyb3VwRWxlbWVudDp0cnVlLEhUTUxPcHRpb25FbGVt
+ZW50OnRydWUsSFRNTE91dHB1dEVsZW1lbnQ6dHJ1ZSxIVE1MUGFyYW1FbGVtZW50OnRydWUsSFRNTFBp
+Y3R1cmVFbGVtZW50OnRydWUsSFRNTFByZUVsZW1lbnQ6dHJ1ZSxIVE1MUHJvZ3Jlc3NFbGVtZW50OnRy
+dWUsSFRNTFF1b3RlRWxlbWVudDp0cnVlLEhUTUxTY3JpcHRFbGVtZW50OnRydWUsSFRNTFNoYWRvd0Vs
+ZW1lbnQ6dHJ1ZSxIVE1MU2xvdEVsZW1lbnQ6dHJ1ZSxIVE1MU291cmNlRWxlbWVudDp0cnVlLEhUTUxT
+cGFuRWxlbWVudDp0cnVlLEhUTUxTdHlsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDYXB0aW9uRWxlbWVu
+dDp0cnVlLEhUTUxUYWJsZUNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50OnRy
+dWUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDb2xFbGVtZW50OnRydWUs
+SFRNTFRleHRBcmVhRWxlbWVudDp0cnVlLEhUTUxUaW1lRWxlbWVudDp0cnVlLEhUTUxUaXRsZUVsZW1l
+bnQ6dHJ1ZSxIVE1MVHJhY2tFbGVtZW50OnRydWUsSFRNTFVMaXN0RWxlbWVudDp0cnVlLEhUTUxVbmtu
+b3duRWxlbWVudDp0cnVlLEhUTUxWaWRlb0VsZW1lbnQ6dHJ1ZSxIVE1MRGlyZWN0b3J5RWxlbWVudDp0
+cnVlLEhUTUxGb250RWxlbWVudDp0cnVlLEhUTUxGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MRnJhbWVTZXRF
+bGVtZW50OnRydWUsSFRNTE1hcnF1ZWVFbGVtZW50OnRydWUsSFRNTEVsZW1lbnQ6ZmFsc2UsSFRNTEFu
+Y2hvckVsZW1lbnQ6dHJ1ZSxIVE1MQXJlYUVsZW1lbnQ6dHJ1ZSxIVE1MQmFzZUVsZW1lbnQ6dHJ1ZSxC
+bG9iOmZhbHNlLEhUTUxCb2R5RWxlbWVudDp0cnVlLENEQVRBU2VjdGlvbjp0cnVlLENoYXJhY3RlckRh
+dGE6dHJ1ZSxDb21tZW50OnRydWUsUHJvY2Vzc2luZ0luc3RydWN0aW9uOnRydWUsVGV4dDp0cnVlLENT
+U1N0eWxlRGVjbGFyYXRpb246dHJ1ZSxNU1N0eWxlQ1NTUHJvcGVydGllczp0cnVlLENTUzJQcm9wZXJ0
+aWVzOnRydWUsWE1MRG9jdW1lbnQ6dHJ1ZSxEb2N1bWVudDpmYWxzZSxET01FeGNlcHRpb246dHJ1ZSxE
+T01JbXBsZW1lbnRhdGlvbjp0cnVlLERPTVJlY3RSZWFkT25seTpmYWxzZSxET01Ub2tlbkxpc3Q6dHJ1
+ZSxFbGVtZW50OmZhbHNlLEFib3J0UGF5bWVudEV2ZW50OnRydWUsQW5pbWF0aW9uRXZlbnQ6dHJ1ZSxB
+bmltYXRpb25QbGF5YmFja0V2ZW50OnRydWUsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6dHJ1ZSxC
+YWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRXZlbnQ6dHJ1ZSxCYWNr
+Z3JvdW5kRmV0Y2hGYWlsRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OnRydWUsQmVmb3Jl
+SW5zdGFsbFByb21wdEV2ZW50OnRydWUsQmVmb3JlVW5sb2FkRXZlbnQ6dHJ1ZSxCbG9iRXZlbnQ6dHJ1
+ZSxDYW5NYWtlUGF5bWVudEV2ZW50OnRydWUsQ2xpcGJvYXJkRXZlbnQ6dHJ1ZSxDbG9zZUV2ZW50OnRy
+dWUsQ3VzdG9tRXZlbnQ6dHJ1ZSxEZXZpY2VNb3Rpb25FdmVudDp0cnVlLERldmljZU9yaWVudGF0aW9u
+RXZlbnQ6dHJ1ZSxFcnJvckV2ZW50OnRydWUsRXh0ZW5kYWJsZUV2ZW50OnRydWUsRXh0ZW5kYWJsZU1l
+c3NhZ2VFdmVudDp0cnVlLEZldGNoRXZlbnQ6dHJ1ZSxGb250RmFjZVNldExvYWRFdmVudDp0cnVlLEZv
+cmVpZ25GZXRjaEV2ZW50OnRydWUsR2FtZXBhZEV2ZW50OnRydWUsSGFzaENoYW5nZUV2ZW50OnRydWUs
+SW5zdGFsbEV2ZW50OnRydWUsTWVkaWFFbmNyeXB0ZWRFdmVudDp0cnVlLE1lZGlhS2V5TWVzc2FnZUV2
+ZW50OnRydWUsTWVkaWFRdWVyeUxpc3RFdmVudDp0cnVlLE1lZGlhU3RyZWFtRXZlbnQ6dHJ1ZSxNZWRp
+YVN0cmVhbVRyYWNrRXZlbnQ6dHJ1ZSxNZXNzYWdlRXZlbnQ6dHJ1ZSxNSURJQ29ubmVjdGlvbkV2ZW50
+OnRydWUsTUlESU1lc3NhZ2VFdmVudDp0cnVlLE11dGF0aW9uRXZlbnQ6dHJ1ZSxOb3RpZmljYXRpb25F
+dmVudDp0cnVlLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdEV2ZW50OnRydWUs
+UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDp0cnVlLFBvcFN0YXRlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRp
+b25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VF
+dmVudDp0cnVlLFByb21pc2VSZWplY3Rpb25FdmVudDp0cnVlLFB1c2hFdmVudDp0cnVlLFJUQ0RhdGFD
+aGFubmVsRXZlbnQ6dHJ1ZSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OnRydWUsUlRDUGVlckNvbm5lY3Rp
+b25JY2VFdmVudDp0cnVlLFJUQ1RyYWNrRXZlbnQ6dHJ1ZSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2
+ZW50OnRydWUsU2Vuc29yRXJyb3JFdmVudDp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6dHJ1ZSxT
+cGVlY2hSZWNvZ25pdGlvbkV2ZW50OnRydWUsU3BlZWNoU3ludGhlc2lzRXZlbnQ6dHJ1ZSxTdG9yYWdl
+RXZlbnQ6dHJ1ZSxTeW5jRXZlbnQ6dHJ1ZSxUcmFja0V2ZW50OnRydWUsVHJhbnNpdGlvbkV2ZW50OnRy
+dWUsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OnRydWUsVlJEZXZpY2VFdmVudDp0cnVlLFZSRGlzcGxheUV2
+ZW50OnRydWUsVlJTZXNzaW9uRXZlbnQ6dHJ1ZSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OnRydWUs
+VVNCQ29ubmVjdGlvbkV2ZW50OnRydWUsSURCVmVyc2lvbkNoYW5nZUV2ZW50OnRydWUsQXVkaW9Qcm9j
+ZXNzaW5nRXZlbnQ6dHJ1ZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6dHJ1ZSxXZWJHTENvbnRl
+eHRFdmVudDp0cnVlLEV2ZW50OmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsU3VibWl0RXZlbnQ6ZmFsc2Us
+RXZlbnRUYXJnZXQ6ZmFsc2UsRmlsZTp0cnVlLEhUTUxGb3JtRWxlbWVudDp0cnVlLEhpc3Rvcnk6dHJ1
+ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxYTUxIdHRwUmVxdWVzdDp0cnVlLFhNTEh0dHBSZXF1ZXN0RXZlbnRU
+YXJnZXQ6ZmFsc2UsSW1hZ2VEYXRhOnRydWUsTG9jYXRpb246dHJ1ZSxNb3VzZUV2ZW50OnRydWUsRHJh
+Z0V2ZW50OnRydWUsUG9pbnRlckV2ZW50OnRydWUsV2hlZWxFdmVudDp0cnVlLERvY3VtZW50RnJhZ21l
+bnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsRG9jdW1lbnRUeXBlOnRydWUsTm9kZTpmYWxzZSxOb2RlTGlz
+dDp0cnVlLFJhZGlvTm9kZUxpc3Q6dHJ1ZSxIVE1MUGFyYWdyYXBoRWxlbWVudDp0cnVlLFByb2dyZXNz
+RXZlbnQ6dHJ1ZSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6dHJ1ZSxIVE1MU2VsZWN0RWxlbWVudDp0cnVl
+LEhUTUxUYWJsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVSb3dFbGVtZW50OnRydWUsSFRNTFRhYmxlU2Vj
+dGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGVtcGxhdGVFbGVtZW50OnRydWUsQ29tcG9zaXRpb25FdmVudDp0
+cnVlLEZvY3VzRXZlbnQ6dHJ1ZSxLZXlib2FyZEV2ZW50OnRydWUsVGV4dEV2ZW50OnRydWUsVG91Y2hF
+dmVudDp0cnVlLFVJRXZlbnQ6ZmFsc2UsV2luZG93OnRydWUsRE9NV2luZG93OnRydWUsRGVkaWNhdGVk
+V29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTaGFyZWRX
+b3JrZXJHbG9iYWxTY29wZTp0cnVlLFdvcmtlckdsb2JhbFNjb3BlOnRydWUsQXR0cjp0cnVlLENsaWVu
+dFJlY3Q6dHJ1ZSxET01SZWN0OnRydWUsTmFtZWROb2RlTWFwOnRydWUsTW96TmFtZWRBdHRyTWFwOnRy
+dWUsSURCS2V5UmFuZ2U6dHJ1ZSxTVkdTY3JpcHRFbGVtZW50OnRydWUsU1ZHQUVsZW1lbnQ6dHJ1ZSxT
+VkdBbmltYXRlRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OnRydWUsU1ZHQW5pbWF0
+ZVRyYW5zZm9ybUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRpb25FbGVtZW50OnRydWUsU1ZHQ2lyY2xlRWxl
+bWVudDp0cnVlLFNWR0NsaXBQYXRoRWxlbWVudDp0cnVlLFNWR0RlZnNFbGVtZW50OnRydWUsU1ZHRGVz
+Y0VsZW1lbnQ6dHJ1ZSxTVkdEaXNjYXJkRWxlbWVudDp0cnVlLFNWR0VsbGlwc2VFbGVtZW50OnRydWUs
+U1ZHRkVCbGVuZEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDp0cnVlLFNWR0ZFQ29t
+cG9uZW50VHJhbnNmZXJFbGVtZW50OnRydWUsU1ZHRkVDb21wb3NpdGVFbGVtZW50OnRydWUsU1ZHRkVD
+b252b2x2ZU1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6dHJ1ZSxT
+VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6dHJ1ZSxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6dHJ1
+ZSxTVkdGRUZsb29kRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0FFbGVtZW50OnRydWUsU1ZHRkVGdW5jQkVs
+ZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNHRWxlbWVudDp0cnVlLFNWR0ZFRnVuY1JFbGVtZW50OnRydWUsU1ZH
+RkVHYXVzc2lhbkJsdXJFbGVtZW50OnRydWUsU1ZHRkVJbWFnZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1lcmdl
+RWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDp0cnVlLFNWR0ZFTW9ycGhvbG9neUVsZW1l
+bnQ6dHJ1ZSxTVkdGRU9mZnNldEVsZW1lbnQ6dHJ1ZSxTVkdGRVBvaW50TGlnaHRFbGVtZW50OnRydWUs
+U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDp0cnVlLFNWR0ZFU3BvdExpZ2h0RWxlbWVudDp0cnVl
+LFNWR0ZFVGlsZUVsZW1lbnQ6dHJ1ZSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OnRydWUsU1ZHRmlsdGVy
+RWxlbWVudDp0cnVlLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OnRydWUsU1ZHR0VsZW1lbnQ6dHJ1ZSxT
+VkdHZW9tZXRyeUVsZW1lbnQ6dHJ1ZSxTVkdHcmFwaGljc0VsZW1lbnQ6dHJ1ZSxTVkdJbWFnZUVsZW1l
+bnQ6dHJ1ZSxTVkdMaW5lRWxlbWVudDp0cnVlLFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDp0cnVlLFNW
+R01hcmtlckVsZW1lbnQ6dHJ1ZSxTVkdNYXNrRWxlbWVudDp0cnVlLFNWR01ldGFkYXRhRWxlbWVudDp0
+cnVlLFNWR1BhdGhFbGVtZW50OnRydWUsU1ZHUGF0dGVybkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5Z29uRWxl
+bWVudDp0cnVlLFNWR1BvbHlsaW5lRWxlbWVudDp0cnVlLFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDp0
+cnVlLFNWR1JlY3RFbGVtZW50OnRydWUsU1ZHU2V0RWxlbWVudDp0cnVlLFNWR1N0b3BFbGVtZW50OnRy
+dWUsU1ZHU3R5bGVFbGVtZW50OnRydWUsU1ZHU1ZHRWxlbWVudDp0cnVlLFNWR1N3aXRjaEVsZW1lbnQ6
+dHJ1ZSxTVkdTeW1ib2xFbGVtZW50OnRydWUsU1ZHVFNwYW5FbGVtZW50OnRydWUsU1ZHVGV4dENvbnRl
+bnRFbGVtZW50OnRydWUsU1ZHVGV4dEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0UGF0aEVsZW1lbnQ6dHJ1ZSxT
+VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OnRydWUsU1ZHVGl0bGVFbGVtZW50OnRydWUsU1ZHVXNlRWxl
+bWVudDp0cnVlLFNWR1ZpZXdFbGVtZW50OnRydWUsU1ZHR3JhZGllbnRFbGVtZW50OnRydWUsU1ZHQ29t
+cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdGRURyb3BTaGFkb3dFbGVtZW50OnRy
+dWUsU1ZHTVBhdGhFbGVtZW50OnRydWUsU1ZHRWxlbWVudDpmYWxzZX0pCkguTFouJG5hdGl2ZVN1cGVy
+Y2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5SRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlC
+dWZmZXJWaWV3IgpILlZQLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkguRGcu
+JG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5XQi4kbmF0aXZlU3VwZXJjbGFz
+c1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlpHLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZl
+clZpZXciCkguUGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyJ9KSgpCmNvbnZl
+cnRBbGxUb0Zhc3RPYmplY3QodykKY29udmVydFRvRmFzdE9iamVjdCgkKTsoZnVuY3Rpb24oYSl7aWYo
+dHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe2EobnVsbCkKcmV0dXJufWlmKHR5cGVvZiBkb2N1
+bWVudC5jdXJyZW50U2NyaXB0IT0idW5kZWZpbmVkIil7YShkb2N1bWVudC5jdXJyZW50U2NyaXB0KQpy
+ZXR1cm59dmFyIHM9ZG9jdW1lbnQuc2NyaXB0cwpmdW5jdGlvbiBvbkxvYWQoYil7Zm9yKHZhciBxPTA7
+cTxzLmxlbmd0aDsrK3Epc1txXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixvbkxvYWQsZmFsc2Up
+CmEoYi50YXJnZXQpfWZvcih2YXIgcj0wO3I8cy5sZW5ndGg7KytyKXNbcl0uYWRkRXZlbnRMaXN0ZW5l
+cigibG9hZCIsb25Mb2FkLGZhbHNlKX0pKGZ1bmN0aW9uKGEpe3YuY3VycmVudFNjcmlwdD1hCnZhciBz
+PUwuSXEKaWYodHlwZW9mIGRhcnRNYWluUnVubmVyPT09ImZ1bmN0aW9uIilkYXJ0TWFpblJ1bm5lcihz
+LFtdKQplbHNlIHMoW10pfSl9KSgpCi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pZ3JhdGlvbi5qcy5tYXAK
 ''';
diff --git a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
index 05b4c7d..9be3101 100644
--- a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
@@ -939,8 +939,7 @@
     } else if (entity is NavigationTreeFileNode) {
       if (enablePartialMigration) {
         var statusIcon = createIcon()..classes.add('status-icon');
-        if (entity is NavigationTreeFileNode &&
-            !entity.migrationStatusCanBeChanged!) {
+        if (!entity.migrationStatusCanBeChanged!) {
           statusIcon.classes.add('disabled');
         }
         updateIconsForNode(statusIcon, entity);
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index b50bed1..05cb79d 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -465,9 +465,13 @@
         _variables!.recordDecoratedElementType(
             declaredElement.variable, decoratedType.returnType);
       } else {
-        _variables!.recordDecoratedElementType(
-            declaredElement.variable, decoratedType.positionalParameters![0],
+        var type = decoratedType.positionalParameters![0];
+        _variables!.recordDecoratedElementType(declaredElement.variable, type,
             soft: true);
+        if (_hasAngularChildAnnotation(node.metadata)) {
+          _graph.makeNullable(
+              type!.node!, AngularAnnotationOrigin(source, node));
+        }
       }
     }
     return null;
@@ -668,6 +672,12 @@
       _variables!.recordDecoratedElementType(declaredElement, type);
       variable.initializer?.accept(this);
     }
+    var parent = node.parent;
+    if (parent is FieldDeclaration) {
+      if (_hasAngularChildAnnotation(parent.metadata)) {
+        _graph.makeNullable(type!.node!, AngularAnnotationOrigin(source, node));
+      }
+    }
     return null;
   }
 
@@ -794,6 +804,15 @@
       _handleNullabilityHint(node, decoratedType);
     }
     _variables!.recordDecoratedElementType(declaredElement, decoratedType);
+    for (var annotation in node.metadata) {
+      var element = annotation.element;
+      if (element is ConstructorElement &&
+          element.enclosingElement.name == 'Optional' &&
+          _isAngularUri(element.librarySource.uri)) {
+        _graph.makeNullable(
+            decoratedType!.node!, AngularAnnotationOrigin(source, node));
+      }
+    }
     if (declaredElement.isNamed) {
       _namedParameters![declaredElement.name] = decoratedType;
     } else {
@@ -884,6 +903,35 @@
         .recordDecoratedDirectSupertypes(declaredElement, decoratedSupertypes);
   }
 
+  /// Determines if the given [metadata] contains a reference to one of the
+  /// Angular annotations `ViewChild` or `ContentChild`, either of which implies
+  /// nullability of the underlying property.
+  bool _hasAngularChildAnnotation(NodeList<Annotation> metadata) {
+    for (var annotation in metadata) {
+      var element = annotation.element;
+      if (element is ConstructorElement) {
+        var name = element.enclosingElement.name;
+        if ((name == 'ViewChild' || name == 'ContentChild') &&
+            _isAngularUri(element.librarySource.uri)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /// Determines whether the given [uri] comes from the Angular package.
+  bool _isAngularUri(Uri uri) {
+    if (uri.scheme != 'package') return false;
+    var packageName = uri.pathSegments[0];
+    if (packageName == 'angular') return true;
+    if (packageName == 'third_party.dart_src.angular.angular') {
+      // This name is used for angular development internally at Google.
+      return true;
+    }
+    return false;
+  }
+
   T _pushNullabilityNodeTarget<T>(
       NullabilityNodeTarget target, T Function() fn) {
     NullabilityNodeTarget? previousTarget = _target;
diff --git a/pkg/nnbd_migration/lib/src/potential_modification.dart b/pkg/nnbd_migration/lib/src/potential_modification.dart
index 50ee51a..3becf56 100644
--- a/pkg/nnbd_migration/lib/src/potential_modification.dart
+++ b/pkg/nnbd_migration/lib/src/potential_modification.dart
@@ -27,7 +27,7 @@
       return ConditionalModification._(
           node.offset,
           node.end,
-          node is Statement,
+          true,
           discard,
           _KeepNode(node.condition),
           _KeepNode(node.thenStatement),
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index 4e7b83e..88ee434 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -45,6 +45,33 @@
 
   String get testsPath => '$homePath/tests';
 
+  /// Makes a mock version of the Angular package available for unit testing.
+  ///
+  /// If optional argument [internalUris] is `true`, the mock Angular package
+  /// will be located in a package called `third_party.dart_src.angular.angular`
+  /// (as it is in Google3), and `package:angular` will simply re-export it;
+  /// this allows the test to reflect usage in internal sources.
+  void addAngularPackage({bool internalUris = false}) {
+    addPackageFile(
+        internalUris ? 'third_party.dart_src.angular.angular' : 'angular',
+        'angular.dart', '''
+class ContentChild {
+  const ContentChild(Object selector, {Object? read});
+}
+class Optional {
+  const Optional();
+}
+class ViewChild {
+  const ViewChild(Object selector, {Object? read});
+}
+''');
+    if (internalUris) {
+      addPackageFile('angular', 'angular.dart', '''
+export 'package:third_party.dart_src.angular.angular/angular.dart';
+''');
+    }
+  }
+
   void addBuiltValuePackage() {
     addPackageFile('built_value', 'built_value.dart', '''
 abstract class Built<V extends Built<V, B>, B extends Builder<V, B>> {}
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index cc1bc01..5307de5 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -356,6 +356,181 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_angular_contentChild_field() async {
+    addAngularPackage();
+    var content = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ContentChild('foo')
+  Element bar;
+}
+''';
+    var expected = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ContentChild('foo')
+  Element? bar;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_optional_constructor_param() async {
+    addAngularPackage();
+    var content = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  MyComponent(@Optional() String foo);
+}
+''';
+    var expected = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  MyComponent(@Optional() String? foo);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_optional_constructor_param_field_formal() async {
+    addAngularPackage();
+    var content = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  String foo;
+  MyComponent(@Optional() this.foo);
+}
+''';
+    var expected = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  String? foo;
+  MyComponent(@Optional() this.foo);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_optional_constructor_param_internal() async {
+    addAngularPackage(internalUris: true);
+    var content = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  MyComponent(@Optional() String foo);
+}
+''';
+    var expected = '''
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  MyComponent(@Optional() String? foo);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_viewChild_field() async {
+    addAngularPackage();
+    var content = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ViewChild('foo')
+  Element bar;
+}
+''';
+    var expected = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ViewChild('foo')
+  Element? bar;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_viewChild_field_internal() async {
+    addAngularPackage(internalUris: true);
+    var content = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ViewChild('foo')
+  Element bar;
+}
+''';
+    var expected = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  // Initialize this.bar in the constructor just so the migration tool doesn't
+  // decide to make it nullable due to the lack of initializer.
+  MyComponent(this.bar);
+
+  @ViewChild('foo')
+  Element? bar;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_angular_viewChild_setter() async {
+    addAngularPackage();
+    var content = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  @ViewChild('foo')
+  set bar(Element element) {}
+}
+''';
+    var expected = '''
+import 'dart:html';
+import 'package:angular/angular.dart';
+
+class MyComponent {
+  @ViewChild('foo')
+  set bar(Element? element) {}
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_argumentError_checkNotNull_implies_non_null_intent() async {
     var content = '''
 void f(int i) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 8386f5a..a196360 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -134,6 +134,7 @@
 dds/test/dap/integration/*: Slow, Pass
 
 [ $runtime != vm ]
+dart2js_info/test/*: SkipByDesign # Only meant to run on vm
 dds/test/*: SkipByDesign # Only meant to run on vm
 dev_compiler/test/options/*: SkipByDesign
 front_end/test/hot_reload_e2e_test: Skip
diff --git a/pkg/smith/lib/builder.dart b/pkg/smith/lib/builder.dart
index 2772be2..ebe550c 100644
--- a/pkg/smith/lib/builder.dart
+++ b/pkg/smith/lib/builder.dart
@@ -21,13 +21,13 @@
   final String script;
   final List<String> arguments;
   final Map<String, String> environment;
-  final String fileSet;
-  final int shards;
+  final String? fileSet;
+  final int? shards;
   final bool isTestRunner;
-  final Configuration testedConfiguration;
+  final Configuration? testedConfiguration;
 
-  Step(this.name, String script, this.arguments, this.environment, this.fileSet,
-      this.shards, this.isTestRunner, this.testedConfiguration)
+  Step(this.name, String? script, this.arguments, this.environment,
+      this.fileSet, this.shards, this.isTestRunner, this.testedConfiguration)
       : script = script ?? testScriptName;
 
   static const testScriptName = "tools/test.py";
@@ -36,14 +36,14 @@
 
   /// Create a [Step] from the 'step template' [map], values for supported
   /// variables [configuration], and the list of supported named configurations.
-  static Step parse(Map map, Map<String, String> configuration,
+  static Step parse(Map map, Map<String, String?> configuration,
       List<Configuration> configurations) {
-    var arguments = (map["arguments"] as List ?? [])
+    var arguments = (map["arguments"] as List? ?? [])
         .map((argument) => _expandVariables(argument as String, configuration))
         .toList();
     var testedConfigurations = <Configuration>[];
-    var script = map["script"] as String ?? testScriptName;
-    var isTestRunner = map["testRunner"] as bool ?? false;
+    var script = map["script"] as String? ?? testScriptName;
+    var isTestRunner = map["testRunner"] as bool? ?? false;
     if (script == testScriptName || isTestRunner) {
       // TODO(karlklose): replace with argument parser that can handle all
       // arguments to test.py.
@@ -78,8 +78,8 @@
         script,
         arguments,
         <String, String>{...?map["environment"]},
-        map["fileset"] as String,
-        map["shards"] as int,
+        map["fileset"] as String?,
+        map["shards"] as int?,
         isTestRunner,
         testedConfigurations.isEmpty ? null : testedConfigurations.single);
   }
@@ -92,13 +92,13 @@
 /// the test matrix.
 class Builder {
   final String name;
-  final String description;
+  final String? description;
   final List<Step> steps;
-  final System system;
-  final Mode mode;
-  final Architecture arch;
-  final Sanitizer sanitizer;
-  final Runtime runtime;
+  final System? system;
+  final Mode? mode;
+  final Architecture? arch;
+  final Sanitizer? sanitizer;
+  final Runtime? runtime;
   final Set<Configuration> testedConfigurations;
 
   Builder(this.name, this.description, this.steps, this.system, this.mode,
@@ -111,7 +111,7 @@
   /// `${arch}`, and `${runtime}. The values for these variables are inferred
   /// from the builder's name.
   static Builder parse(String builderName, List<Map> steps,
-      List<Configuration> configurations, String description) {
+      List<Configuration> configurations, String? description) {
     var builderParts = builderName.split("-");
     var systemName = _findPart(builderParts, System.names, 'linux');
     var modeName = _findPart(builderParts, Mode.names, 'release');
@@ -146,7 +146,7 @@
 
 /// Tries to replace a variable named [variableName] with [value] and throws
 /// and exception if the variable is used but `value == null`.
-String _tryReplace(String string, String variableName, String value) {
+String _tryReplace(String string, String variableName, String? value) {
   var variable = "\${$variableName}";
   if (string.contains(variable)) {
     if (value == null) {
@@ -160,7 +160,7 @@
 
 /// Replace the use of supported variable names with the their value given
 /// in [values] and throws an exception if an unsupported variable name is used.
-String _expandVariables(String string, Map<String, String> values) {
+String _expandVariables(String string, Map<String, String?> values) {
   for (var variable in ["system", "mode", "arch", "sanitizer", "runtime"]) {
     string = _tryReplace(string, variable, values[variable]);
   }
@@ -171,17 +171,19 @@
   return steps
       .where((step) => step.isTestStep)
       .map((step) => step.testedConfiguration)
+      .whereType<Configuration>()
       .toSet();
 }
 
-T _findIfNotNull<T>(T Function(String) find, String name) {
+T? _findIfNotNull<T>(T Function(String) find, String? name) {
   return name != null ? find(name) : null;
 }
 
-String _findPart(List<String> builderParts, List<String> parts,
-    [String fallback]) {
-  return builderParts.firstWhere((part) => parts.contains(part),
-      orElse: () => fallback);
+String? _findPart(List<String> builderParts, List<String> parts,
+    [String? fallback]) {
+  return builderParts
+      .cast<String?>()
+      .firstWhere((part) => parts.contains(part), orElse: () => fallback);
 }
 
 List<Builder> parseBuilders(
@@ -189,7 +191,7 @@
   var builders = <Builder>[];
   var names = <String>{};
   for (var builderConfiguration in builderConfigurations) {
-    var meta = builderConfiguration["meta"] as Map ?? <String, String>{};
+    var meta = builderConfiguration["meta"] as Map? ?? <String, String>{};
     var builderNames = <String>[...?builderConfiguration["builders"]];
     var steps = <Map>[...?builderConfiguration["steps"]];
     for (var builderName in builderNames) {
@@ -197,7 +199,7 @@
         throw FormatException('Duplicate builder name: "$builderName"');
       }
       builders.add(Builder.parse(
-          builderName, steps, configurations, meta["description"] as String));
+          builderName, steps, configurations, meta["description"] as String?));
     }
   }
   return builders;
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 0c4138a..5861fbf 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -117,10 +117,10 @@
     var words = name.split("-").toSet();
     var optionsCopy = Map.of(optionsJson);
 
-    T enumOption<T extends NamedEnum>(
+    T? enumOption<T extends NamedEnum>(
         String option, List<String> allowed, T Function(String) parse) {
       // Look up the value from the words in the name.
-      T fromName;
+      T? fromName;
       for (var value in allowed) {
         // Don't treat "none" as matchable since it's ambiguous as to whether
         // it refers to compiler or runtime.
@@ -137,7 +137,7 @@
       }
 
       // Look up the value from the options.
-      T fromOption;
+      T? fromOption;
       if (optionsCopy.containsKey(option)) {
         fromOption = parse(optionsCopy[option] as String);
         optionsCopy.remove(option);
@@ -157,7 +157,7 @@
       return fromName ?? fromOption;
     }
 
-    bool boolOption(String option) {
+    bool? boolOption(String option) {
       if (!optionsCopy.containsKey(option)) return null;
 
       var value = optionsCopy.remove(option);
@@ -166,10 +166,10 @@
         throw FormatException('Option "$option" had value "$value", which is '
             'not a bool.');
       }
-      return value as bool;
+      return value;
     }
 
-    int intOption(String option) {
+    int? intOption(String option) {
       if (!optionsCopy.containsKey(option)) return null;
 
       var value = optionsCopy.remove(option);
@@ -178,10 +178,10 @@
         throw FormatException('Option "$option" had value "$value", which is '
             'not an int.');
       }
-      return value as int;
+      return value;
     }
 
-    String stringOption(String option) {
+    String? stringOption(String option) {
       if (!optionsCopy.containsKey(option)) return null;
 
       var value = optionsCopy.remove(option);
@@ -190,10 +190,10 @@
         throw FormatException('Option "$option" had value "$value", which is '
             'not a string.');
       }
-      return value as String;
+      return value;
     }
 
-    List<String> stringListOption(String option) {
+    List<String>? stringListOption(String option) {
       if (!optionsCopy.containsKey(option)) return null;
 
       var value = optionsCopy.remove(option);
@@ -202,7 +202,7 @@
         throw FormatException('Option "$option" had value "$value", which is '
             'not a List.');
       }
-      return List<String>.from(value as List);
+      return List<String>.from(value);
     }
 
     // Extract options from the name and map.
@@ -340,27 +340,27 @@
 
   Configuration(this.name, this.architecture, this.compiler, this.mode,
       this.runtime, this.system,
-      {NnbdMode nnbdMode,
-      Sanitizer sanitizer,
-      String babel,
-      String builderTag,
-      List<String> genKernelOptions,
-      List<String> vmOptions,
-      List<String> dart2jsOptions,
-      List<String> experiments,
-      int timeout,
-      bool enableAsserts,
-      bool isChecked,
-      bool isCsp,
-      bool isHostChecked,
-      bool isMinified,
-      bool useAnalyzerCfe,
-      bool useAnalyzerFastaParser,
-      bool useElf,
-      bool useHotReload,
-      bool useHotReloadRollback,
-      bool useSdk,
-      bool useQemu})
+      {NnbdMode? nnbdMode,
+      Sanitizer? sanitizer,
+      String? babel,
+      String? builderTag,
+      List<String>? genKernelOptions,
+      List<String>? vmOptions,
+      List<String>? dart2jsOptions,
+      List<String>? experiments,
+      int? timeout,
+      bool? enableAsserts,
+      bool? isChecked,
+      bool? isCsp,
+      bool? isHostChecked,
+      bool? isMinified,
+      bool? useAnalyzerCfe,
+      bool? useAnalyzerFastaParser,
+      bool? useElf,
+      bool? useHotReload,
+      bool? useHotReloadRollback,
+      bool? useSdk,
+      bool? useQemu})
       : nnbdMode = nnbdMode ?? NnbdMode.legacy,
         sanitizer = sanitizer ?? Sanitizer.none,
         babel = babel ?? "",
diff --git a/pkg/smith/lib/test_matrix.dart b/pkg/smith/lib/test_matrix.dart
index 3d10b21..0af1ca8 100644
--- a/pkg/smith/lib/test_matrix.dart
+++ b/pkg/smith/lib/test_matrix.dart
@@ -22,7 +22,7 @@
 
   static TestMatrix fromJson(Map<String, dynamic> json) {
     var configurationsJson =
-        json["configurations"] as Map<String, dynamic> ?? <String, dynamic>{};
+        json["configurations"] as Map<String, dynamic>? ?? <String, dynamic>{};
 
     // Keep track of the configurations and which templates they were expanded
     // from.
@@ -60,8 +60,8 @@
     var testedOn = <Configuration, Builder>{};
     for (var builder in builders) {
       for (var configuration in builder.testedConfigurations) {
-        if (testedOn.containsKey(configuration)) {
-          var other = testedOn[configuration];
+        var other = testedOn[configuration];
+        if (other != null) {
           throw FormatException('Configuration "${configuration.name}" is '
               'tested on both "${builder.name}" and "${other.name}"');
         } else {
diff --git a/pkg/smith/pubspec.yaml b/pkg/smith/pubspec.yaml
index 551d7e5..de47131 100644
--- a/pkg/smith/pubspec.yaml
+++ b/pkg/smith/pubspec.yaml
@@ -3,7 +3,7 @@
 # This package is not intended for consumption on pub.dev. DO NOT publish.
 publish_to: none
 environment:
-  sdk: "^2.3.0"
+  sdk: "^2.12.0"
 dev_dependencies:
   expect:
     path: ../expect
diff --git a/pkg/smith/test/builder_test.dart b/pkg/smith/test/builder_test.dart
index 2f1c2be..d1c022e 100644
--- a/pkg/smith/test/builder_test.dart
+++ b/pkg/smith/test/builder_test.dart
@@ -29,7 +29,7 @@
         "arguments": ["-nfoo-x64-none-debug-d8-linux"]
       }, {}, configurations);
       expect(step.isTestStep, isTrue);
-      expect(step.testedConfiguration.name, "foo-x64-none-debug-d8-linux");
+      expect(step.testedConfiguration?.name, "foo-x64-none-debug-d8-linux");
     });
     test("custom test runner step", () {
       var step = Step.parse({
@@ -39,7 +39,7 @@
         "arguments": ["-nfoo-x64-none-debug-d8-linux"]
       }, {}, configurations);
       expect(step.isTestStep, isTrue);
-      expect(step.testedConfiguration.name, "foo-x64-none-debug-d8-linux");
+      expect(step.testedConfiguration?.name, "foo-x64-none-debug-d8-linux");
     });
     test("implicit test step", () {
       var step = Step.parse({
@@ -47,7 +47,7 @@
         "arguments": ["-nfoo-x64-none-debug-d8-linux"]
       }, {}, configurations);
       expect(step.isTestStep, isTrue);
-      expect(step.testedConfiguration.name, "foo-x64-none-debug-d8-linux");
+      expect(step.testedConfiguration?.name, "foo-x64-none-debug-d8-linux");
     });
     test("a step can only test one configuration", () {
       expectFormatError(
@@ -69,7 +69,7 @@
         "arguments": ["--named_configuration foo-x64-none-debug-d8-linux"]
       }, {}, configurations);
       expect(step.isTestStep, isTrue);
-      expect(step.testedConfiguration.name, "foo-x64-none-debug-d8-linux");
+      expect(step.testedConfiguration?.name, "foo-x64-none-debug-d8-linux");
     });
     test("a test step using multiple values for the argument", () {
       expectFormatError(
@@ -89,7 +89,7 @@
         "arguments": ["-nfoo-x64-none-debug-d8-linux", "--bar", "-b=az"]
       }, {}, configurations);
       expect(step.isTestStep, isTrue);
-      expect(step.testedConfiguration.name, "foo-x64-none-debug-d8-linux");
+      expect(step.testedConfiguration?.name, "foo-x64-none-debug-d8-linux");
     });
     test("in non-test steps, argument -n can have arbitrary values", () {
       var step = Step.parse({
@@ -229,6 +229,6 @@
     var step = builder.steps[0];
     expect(step.isTestStep, isTrue);
   }
-  expect(builders.map((b) => b.steps[0].testedConfiguration.name).toList(),
+  expect(builders.map((b) => b.steps[0].testedConfiguration!.name).toList(),
       equals(expectedConfigurations));
 }
diff --git a/pkg/status_file/bin/lint.dart b/pkg/status_file/bin/lint.dart
index 17b84f47..fd9f6a0a 100644
--- a/pkg/status_file/bin/lint.dart
+++ b/pkg/status_file/bin/lint.dart
@@ -56,10 +56,11 @@
 }
 
 void lintStdIn({bool checkForDisjunctions = false}) {
-  List<String> strings = <String>[];
-  String readString;
+  var strings = <String>[];
   try {
-    while (null != (readString = stdin.readLineSync())) {
+    while (true) {
+      var readString = stdin.readLineSync();
+      if (readString == null) break;
       strings.add(readString);
     }
   } on StdinException {
@@ -126,7 +127,7 @@
     print("");
     return true;
   }
-  if (statusFile.path != null && statusFile.path.isNotEmpty) {
+  if (statusFile.path.isNotEmpty) {
     print("${statusFile.path}");
   }
   var errors = lintingErrors.toList();
diff --git a/pkg/status_file/bin/remove_non_essential_entries.dart b/pkg/status_file/bin/remove_non_essential_entries.dart
index 409fbcd..8f481c0 100644
--- a/pkg/status_file/bin/remove_non_essential_entries.dart
+++ b/pkg/status_file/bin/remove_non_essential_entries.dart
@@ -33,8 +33,9 @@
 import 'package:args/args.dart';
 import 'package:status_file/canonical_status_file.dart';
 import 'package:status_file/expectation.dart';
+import 'package:status_file/src/expression.dart';
 
-StatusEntry filterExpectations(
+StatusEntry? filterExpectations(
     StatusEntry entry, List<Expectation> expectationsToKeep) {
   List<Expectation> remaining = entry.expectations
       .where(
@@ -45,14 +46,14 @@
       : StatusEntry(entry.path, entry.lineNumber, remaining, entry.comment);
 }
 
-Map<String, Map<int, String>> issues;
+late Map<String, Map<int, String>> issues;
 
 String getIssueState(String project, int issue) {
-  Map projectIssues = issues[project];
+  var projectIssues = issues[project];
   if (projectIssues == null) {
     throw "Cannot find project $project, not one of {${issues.keys.join(",")}}";
   }
-  String state = projectIssues[issue] ?? "";
+  var state = projectIssues[issue] ?? "";
   return "\t$state";
 }
 
@@ -61,7 +62,7 @@
 // sorted by issue number then timestamp ascending.
 //
 // The first line is expected to contain the field names and is skipped.
-void parseIssueFile() async {
+Future<void> parseIssueFile() async {
   issues = {};
   String issuesLog = await File("issues.log").readAsString();
   List<String> lines = issuesLog.split("\n");
@@ -91,13 +92,13 @@
 ];
 
 String getIssueText(String comment, bool resolveState) {
-  int issue;
-  String prefix;
-  String project;
-  for (RegExp pattern in co19IssuePatterns) {
-    Match match = pattern.firstMatch(comment);
+  int? issue;
+  late String prefix;
+  late String project;
+  for (var pattern in co19IssuePatterns) {
+    var match = pattern.firstMatch(comment);
     if (match != null) {
-      issue = int.tryParse(match[1]);
+      issue = int.tryParse(match[1]!);
       if (issue != null) {
         prefix = "https://github.com/dart-lang/co19/issues/";
         project = "dart-lang/co19";
@@ -106,10 +107,10 @@
     }
   }
   if (issue == null) {
-    for (RegExp pattern in sdkIssuePatterns) {
-      Match match = pattern.firstMatch(comment);
+    for (var pattern in sdkIssuePatterns) {
+      var match = pattern.firstMatch(comment);
       if (match != null) {
-        issue = int.tryParse(match[1]);
+        issue = int.tryParse(match[1]!);
         if (issue != null) {
           prefix = "https://dartbug.com/";
           project = "dart-lang/sdk";
@@ -119,7 +120,7 @@
     }
   }
   if (issue != null) {
-    String state = resolveState ? getIssueState(project, issue) : "";
+    var state = resolveState ? getIssueState(project, issue) : "";
     return "$prefix$issue$state";
   } else {
     return "";
@@ -143,7 +144,7 @@
         entries.add(entry);
         hasStatusEntries = true;
       } else if (entry is StatusEntry) {
-        StatusEntry newEntry = entry;
+        StatusEntry? newEntry = entry;
         if (entry.comment == null) {
           newEntry = filterExpectations(entry, expectationsToKeep);
         } else if (removeComments) {
@@ -155,8 +156,9 @@
             String expectations = entry.expectations.toString();
             // Remove '[' and ']'.
             expectations = expectations.substring(1, expectations.length - 1);
-            String conditionPrefix =
-                section.condition != null ? "${section.condition}" : "";
+            String conditionPrefix = section.condition != Expression.always
+                ? "${section.condition}"
+                : "";
             String issueText = await getIssueText(comment, resolveIssueState);
             String statusLine = "$conditionPrefix\t$testName\t$expectations"
                 "\t$comment\t$issueText";
@@ -171,16 +173,18 @@
         throw "Unknown entry type ${entry.runtimeType}";
       }
     }
-    bool isDefaultSection = section.condition == null;
+
+    var isDefaultSection = section.condition == Expression.always;
     if (hasStatusEntries ||
         (isDefaultSection && section.sectionHeaderComments.isNotEmpty)) {
-      StatusSection newSection =
+      var newSection =
           StatusSection(section.condition, -1, section.sectionHeaderComments);
       newSection.entries.addAll(entries);
       sections.add(newSection);
     }
   }
-  StatusFile newStatusFile = StatusFile(statusFile.path);
+
+  var newStatusFile = StatusFile(statusFile.path);
   newStatusFile.sections.addAll(sections);
   return newStatusFile;
 }
diff --git a/pkg/status_file/lib/canonical_status_file.dart b/pkg/status_file/lib/canonical_status_file.dart
index 6f7f134..c20924f 100644
--- a/pkg/status_file/lib/canonical_status_file.dart
+++ b/pkg/status_file/lib/canonical_status_file.dart
@@ -95,7 +95,7 @@
 
     /// Checks if [currentLine] is a comment and returns the first regular
     /// expression match, or null otherwise.
-    Match commentEntryMatch(int currentLine) {
+    Match? commentEntryMatch(int currentLine) {
       if (currentLine < 1 || currentLine > lines.length) {
         return null;
       }
@@ -104,7 +104,7 @@
 
     /// Finds a section header on [currentLine] if the line is in range of
     /// [lines].
-    Match sectionHeaderMatch(int currentLine) {
+    Match? sectionHeaderMatch(int currentLine) {
       if (currentLine < 1 || currentLine > lines.length) {
         return null;
       }
@@ -178,14 +178,14 @@
     // The current section whose rules are being parsed. Initialized to an
     // implicit section that matches everything.
     StatusSection section =
-        new StatusSection(null, -1, implicitSectionHeaderComments);
+        new StatusSection(Expression.always, -1, implicitSectionHeaderComments);
     section.entries.addAll(entries);
     sections.add(section);
 
     for (; _lineCount <= lines.length; _lineCount++) {
       var line = lines[_lineCount - 1];
 
-      fail(String message, [List<String> errors]) {
+      fail(String message, [List<String>? errors]) {
         throw new SyntaxError(_shortPath, _lineCount, line, message, errors);
       }
 
@@ -199,7 +199,7 @@
       var match = _sectionPattern.firstMatch(line);
       if (match != null) {
         try {
-          var condition = Expression.parse(match[1].trim());
+          var condition = Expression.parse(match[1]!.trim());
           section =
               new StatusSection(condition, _lineCount, sectionHeaderComments);
           sections.add(section);
@@ -214,10 +214,10 @@
       // If it is in a new entry we should add to the current section.
       match = _entryPattern.firstMatch(line);
       if (match != null) {
-        var path = match[1].trim();
+        var path = match[1]!.trim();
         var expectations = <Expectation>[];
         // split expectations
-        match[2].split(",").forEach((name) {
+        match[2]!.split(",").forEach((name) {
           try {
             expectations.add(Expectation.find(name.trim()));
           } on ArgumentError {
@@ -229,7 +229,7 @@
               .add(new StatusEntry(path, _lineCount, expectations, null));
         } else {
           section.entries.add(new StatusEntry(
-              path, _lineCount, expectations, new Comment(match[3])));
+              path, _lineCount, expectations, new Comment(match[3]!)));
         }
         continue;
       }
@@ -264,8 +264,6 @@
   /// Throws a [SyntaxError] on the first found error.
   void validate(Environment environment) {
     for (var section in sections) {
-      if (section.condition == null) continue;
-
       var errors = <String>[];
       section.condition.validate(environment, errors);
 
@@ -299,8 +297,8 @@
 class StatusSection {
   /// The expression that determines when this section is applied.
   ///
-  /// May be `null` for paths that appear before any section header in the file.
-  /// In that case, the section always applies.
+  /// Will be [Expression.always] for paths that appear before any section
+  /// header in the file. In that case, the section always applies.
   final Expression condition;
 
   /// The one-based line number where the section appears in the file.
@@ -311,8 +309,7 @@
   final List<Entry> sectionHeaderComments;
 
   /// Returns true if this section should apply in the given [environment].
-  bool isEnabled(Environment environment) =>
-      condition == null || condition.evaluate(environment);
+  bool isEnabled(Environment environment) => condition.evaluate(environment);
 
   bool isEmpty() => !entries.any((entry) => entry is StatusEntry);
 
@@ -322,8 +319,8 @@
   String toString() {
     var buffer = new StringBuffer();
     sectionHeaderComments.forEach(buffer.writeln);
-    if (condition != null) {
-      buffer.writeln("[ ${condition} ]");
+    if (condition != Expression.always) {
+      buffer.writeln("[ $condition ]");
     }
     entries.forEach(buffer.writeln);
     return buffer.toString();
@@ -336,10 +333,10 @@
   Comment(this._comment);
 
   /// Returns the issue number embedded in [comment] or `null` if there is none.
-  int issueNumber(String comment) {
+  int? issueNumber(String comment) {
     var match = _issuePattern.firstMatch(comment);
     if (match == null) return null;
-    return int.parse(match[1]);
+    return int.parse(match[1]!);
   }
 
   @override
@@ -377,7 +374,7 @@
 class StatusEntry extends Entry {
   final String path;
   final List<Expectation> expectations;
-  final Comment comment;
+  final Comment? comment;
 
   StatusEntry(this.path, lineNumber, this.expectations, this.comment)
       : super(lineNumber);
diff --git a/pkg/status_file/lib/environment.dart b/pkg/status_file/lib/environment.dart
index 89e20ac..602c2a0 100644
--- a/pkg/status_file/lib/environment.dart
+++ b/pkg/status_file/lib/environment.dart
@@ -12,5 +12,5 @@
   void validate(String name, String value, List<String> errors);
 
   /// Looks up the value of the variable with [name].
-  String lookUp(String name);
+  String? lookUp(String name);
 }
diff --git a/pkg/status_file/lib/expectation.dart b/pkg/status_file/lib/expectation.dart
index 93979fb..6a0223c 100644
--- a/pkg/status_file/lib/expectation.dart
+++ b/pkg/status_file/lib/expectation.dart
@@ -206,17 +206,17 @@
   }
 
   final String _name;
-  final Expectation _group;
+  final Expectation? _group;
 
   /// Whether this expectation is a test outcome. If not, it's a "meta marker".
   final bool isOutcome;
 
-  Expectation._(this._name, {Expectation group, bool isMeta: false})
+  Expectation._(this._name, {Expectation? group, bool isMeta: false})
       : _group = group,
         isOutcome = !isMeta;
 
   bool canBeOutcomeOf(Expectation expectation) {
-    var outcome = this;
+    Expectation? outcome = this;
     if (outcome == ignore) return true;
 
     while (outcome != null) {
diff --git a/pkg/status_file/lib/src/disjunctive.dart b/pkg/status_file/lib/src/disjunctive.dart
index b94f17d..b768f69 100644
--- a/pkg/status_file/lib/src/disjunctive.dart
+++ b/pkg/status_file/lib/src/disjunctive.dart
@@ -102,14 +102,14 @@
   });
   var combinedMinSets = _combineMinSets(
       clauses.map((e) => [new LogicExpression.and(e)]).toList(), []);
-  List<List<Expression>> minCover = _findMinCover(combinedMinSets, []);
+  List<List<LogicExpression>> minCover = _findMinCover(combinedMinSets, []);
   var finalOperands = minCover.map((minSet) => _reduceMinSet(minSet)).toList();
   return new LogicExpression.or(finalOperands).normalize();
 }
 
 /// Computes all assignments of literals that make the [expression] evaluate to
 /// true.
-List<Expression> _satisfiableMinTerms(Expression expression) {
+List<Expression>? _satisfiableMinTerms(Expression expression) {
   var variables = _getVariables(expression);
   bool hasNotSatisfiableAssignment = false;
   List<Expression> satisfiableTerms = <Expression>[];
@@ -142,7 +142,7 @@
 /// which the [variables] was found.
 class TruthTableEnvironment extends Environment {
   final List<Expression> variables;
-  int configuration;
+  int configuration = -1;
 
   TruthTableEnvironment(this.variables);
 
@@ -172,10 +172,10 @@
 /// Combines [minSets] recursively as long as possible. Prime implicants (those
 /// that cannot be reduced further) are kept track of in [primeImplicants]. When
 /// finished the function returns all combined min sets.
-List<List<Expression>> _combineMinSets(
-    List<List<Expression>> minSets, List<List<Expression>> primeImplicants) {
+List<List<LogicExpression>> _combineMinSets(List<List<LogicExpression>> minSets,
+    List<List<LogicExpression>> primeImplicants) {
   List<List<LogicExpression>> combined = <List<LogicExpression>>[];
-  var addedInThisIteration = new Set<List<Expression>>();
+  var addedInThisIteration = new Set<List<LogicExpression>>();
   for (var i = 0; i < minSets.length; i++) {
     var minSet = minSets[i];
     var combinedMinSet = false;
@@ -262,8 +262,9 @@
 /// minimum set cover is NP-hard, and we are not trying to be really cleaver
 /// here. The implicants that cover only a single truth assignment can be
 /// directly added to [cover].
-List<List<Expression>> _findMinCover(
-    List<List<Expression>> primaryImplicants, List<List<Expression>> cover) {
+List<List<LogicExpression>> _findMinCover(
+    List<List<LogicExpression>> primaryImplicants,
+    List<List<LogicExpression>> cover) {
   var minCover = primaryImplicants.toList()..addAll(cover);
   if (cover.isEmpty) {
     var allImplicants = primaryImplicants.toList();
@@ -332,9 +333,9 @@
 
 /// Finds the first occurrence of [expressionToFind] in [expressions] or
 /// returns null.
-Expression _findFirst<Expression>(
+Expression? _findFirst<Expression>(
     expressionToFind, List<Expression> expressions) {
-  return expressions.firstWhere(
+  return expressions.cast<Expression?>().firstWhere(
       (otherExpression) => expressionToFind.compareTo(otherExpression) == 0,
       orElse: () => null);
 }
diff --git a/pkg/status_file/lib/src/expression.dart b/pkg/status_file/lib/src/expression.dart
index 16a5bbd..9baf6aa 100644
--- a/pkg/status_file/lib/src/expression.dart
+++ b/pkg/status_file/lib/src/expression.dart
@@ -9,6 +9,11 @@
 
 /// A parsed Boolean expression AST.
 abstract class Expression implements Comparable<Expression> {
+  /// An expression that always evaluates to true.
+  ///
+  /// Used for the section at the top of a status file with no expression.
+  static const Expression always = _AlwaysExpression();
+
   /// Parses Boolean expressions in a .status file for Dart.
   ///
   /// The grammar is:
@@ -26,6 +31,8 @@
   static Expression parse(String expression) =>
       new _ExpressionParser(expression).parse();
 
+  const Expression();
+
   /// Validates that this expression does not contain any invalid uses of
   /// variables.
   ///
@@ -111,6 +118,29 @@
   }
 }
 
+/// An expression that always evaluates to true.
+///
+/// Used for the implicit section at the top of a status file that always
+/// matches.
+class _AlwaysExpression extends Expression {
+  const _AlwaysExpression();
+
+  @override
+  int _compareToMyType(covariant _AlwaysExpression other) => 0;
+
+  @override
+  int get _typeComparison => 0;
+
+  @override
+  bool evaluate(Environment environment) => true;
+
+  @override
+  Expression normalize() => this;
+
+  @override
+  void validate(Environment environment, List<String> errors) {}
+}
+
 /// Tests whether a given variable is or is not equal some literal value, as in:
 /// ```
 /// $variable == someValue
@@ -156,7 +186,7 @@
 
   // Comparisons come before variables so that "$compiler == ..." and
   // "$runtime == ..." appear on the left in status expressions.
-  int get _typeComparison => 0;
+  int get _typeComparison => 1;
 
   String toString() => "\$${left.name} ${negate ? '!=' : '=='} $right";
 }
@@ -203,7 +233,7 @@
     return _compareBool(negate, other.negate);
   }
 
-  int get _typeComparison => 1;
+  int get _typeComparison => 2;
 
   String toString() => "${negate ? "!" : ""}\$${variable.name}";
 }
@@ -237,7 +267,7 @@
     }
   }
 
-  Expression normalize() {
+  LogicExpression normalize() {
     // Normalize the order of the clauses. Since there is no short-circuiting,
     // a || b means the same as b || a. Picking a standard order lets us
     // identify and collapse identical expressions that only differ by clause
@@ -281,7 +311,7 @@
     return 0;
   }
 
-  int get _typeComparison => 2;
+  int get _typeComparison => 3;
 
   String toString() {
     String parenthesize(Expression operand) {
@@ -365,7 +395,7 @@
           "Expected identifier in expression, got ${_scanner.current}");
     }
 
-    var left = new Variable(_scanner.current);
+    var left = new Variable(_scanner.current!);
     _scanner.advance();
 
     if (!negate &&
@@ -378,7 +408,7 @@
             "Expected value in expression, got ${_scanner.current}");
       }
 
-      var right = _scanner.advance();
+      var right = _scanner.advance()!;
       return new ComparisonExpression(left, right, isNotEquals);
     } else {
       return new VariableExpression(left, negate: negate);
@@ -401,7 +431,7 @@
   /// The token strings being iterated.
   final Iterator<String> tokenIterator;
 
-  String current;
+  String? current;
 
   _Scanner(String expression) : tokenIterator = tokenize(expression).iterator {
     advance();
@@ -414,7 +444,7 @@
 
     return _tokenPattern
         .allMatches(expression)
-        .map((match) => match[0])
+        .map((match) => match[0]!)
         .toList();
   }
 
@@ -424,7 +454,7 @@
   // All non-identifier tokens are one or two characters,
   // so a longer token must be an identifier.
   bool get isIdentifier =>
-      current.length > 2 || _identifierPattern.hasMatch(current);
+      current!.length > 2 || _identifierPattern.hasMatch(current!);
 
   /// If the current token is [token], consumes it and returns `true`.
   bool match(String token) {
@@ -435,7 +465,7 @@
   }
 
   /// Consumes the current token and returns it.
-  String advance() {
+  String? advance() {
     var previous = current;
     current = tokenIterator.moveNext() ? tokenIterator.current : null;
     return previous;
diff --git a/pkg/status_file/lib/status_file.dart b/pkg/status_file/lib/status_file.dart
index debc28f..86a37a5 100644
--- a/pkg/status_file/lib/status_file.dart
+++ b/pkg/status_file/lib/status_file.dart
@@ -45,7 +45,7 @@
 class StatusFile {
   final String path;
   final List<StatusSection> sections = [];
-  final List<String> _comments = [];
+  final List<String?> _comments = [];
 
   int _lineCount = 0;
 
@@ -58,13 +58,10 @@
     var lines = new File(path).readAsLinesSync();
     _comments.length = lines.length + 1;
 
-    // The current section whose rules are being parsed.
-    StatusSection section;
-
     for (var line in lines) {
       _lineCount++;
 
-      fail(String message, [List<String> errors]) {
+      fail(String message, [List<String>? errors]) {
         throw new SyntaxError(_shortPath, _lineCount, line, message, errors);
       }
 
@@ -86,9 +83,8 @@
       var match = _sectionPattern.firstMatch(source);
       if (match != null) {
         try {
-          var condition = Expression.parse(match[1].trim());
-          section = new StatusSection(condition, _lineCount);
-          sections.add(section);
+          var condition = Expression.parse(match[1]!.trim());
+          sections.add(new StatusSection(condition, _lineCount));
         } on FormatException {
           fail("Status expression syntax error");
         }
@@ -98,10 +94,10 @@
       // Otherwise, it should be a new entry under the current section.
       match = _entryPattern.firstMatch(source);
       if (match != null) {
-        var path = match[1].trim();
+        var path = match[1]!.trim();
         // TODO(whesse): Handle test names ending in a wildcard (*).
         var expectations = <Expectation>[];
-        for (var name in match[2].split(",")) {
+        for (var name in match[2]!.split(",")) {
           name = name.trim();
           try {
             expectations.add(Expectation.find(name));
@@ -114,12 +110,11 @@
 
         // If we haven't found a section header yet, create an implicit section
         // that matches everything.
-        if (section == null) {
-          section = new StatusSection(null, -1);
-          sections.add(section);
+        if (sections.isEmpty) {
+          sections.add(new StatusSection(Expression.always, -1));
         }
 
-        section.entries
+        sections.last.entries
             .add(new StatusEntry(path, _lineCount, expectations, issue));
         continue;
       }
@@ -138,8 +133,6 @@
     // TODO(rnystrom): It would be more useful if it reported all of the errors
     // instead of stopping on the first.
     for (var section in sections) {
-      if (section.condition == null) continue;
-
       var errors = <String>[];
       section.condition.validate(environment, errors);
 
@@ -158,11 +151,11 @@
   }
 
   /// Returns the issue number embedded in [comment] or `null` if there is none.
-  int _issueNumber(String comment) {
+  int? _issueNumber(String comment) {
     var match = _issuePattern.firstMatch(comment);
     if (match == null) return null;
 
-    return int.parse(match[1]);
+    return int.parse(match[1]!);
   }
 
   String toString() {
@@ -192,7 +185,7 @@
     var lastLine = 0;
     var needBlankLine = false;
 
-    void writeLine(String text, int line) {
+    void writeLine(String? text, int line) {
       var comment = _comments[line];
       if (text == null && comment == null) {
         // There's no comment on this line, so it's blank.
@@ -216,17 +209,15 @@
     }
 
     void writeText(String text, int line) {
-      if (line != null) {
-        while (++lastLine < line) {
-          writeLine(null, lastLine);
-        }
+      while (++lastLine < line) {
+        writeLine(null, lastLine);
       }
 
       writeLine(text, line);
     }
 
     for (var section in sections) {
-      if (section.condition != null) {
+      if (section.condition != Expression.always) {
         writeText("[ ${section.condition} ]", section.lineNumber);
       }
 
@@ -254,8 +245,8 @@
 class StatusSection {
   /// The expression that determines when this section is applied.
   ///
-  /// May be `null` for paths that appear before any section header in the file.
-  /// In that case, the section always applies.
+  /// Will be [Expression.always] for paths that appear before any section
+  /// header in the file. In that case, the section always applies.
   final Expression condition;
 
   /// The one-based line number where the entry appears in the file.
@@ -264,8 +255,7 @@
   final List<StatusEntry> entries = [];
 
   /// Returns true if this section should apply in the given [environment].
-  bool isEnabled(Environment environment) =>
-      condition == null || condition.evaluate(environment);
+  bool isEnabled(Environment environment) => condition.evaluate(environment);
 
   StatusSection(this.condition, this.lineNumber);
 }
@@ -278,7 +268,7 @@
   final int lineNumber;
 
   final List<Expectation> expectations;
-  final int issue;
+  final int? issue;
 
   StatusEntry(this.path, this.lineNumber, this.expectations, this.issue);
 }
@@ -289,7 +279,7 @@
   final int lineNumber;
   final String line;
   final String message;
-  final List<String> errors;
+  final List<String>? errors;
 
   SyntaxError(this.file, this.lineNumber, this.line, this.message, this.errors);
 
@@ -298,10 +288,8 @@
     buffer.writeln('$message in "$file" line $lineNumber:');
     buffer.writeln(line);
 
-    if (errors != null) {
-      for (var error in errors) {
-        buffer.writeln("- ${error.replaceAll('\n', '\n  ')}");
-      }
+    for (var error in errors ?? const []) {
+      buffer.writeln("- ${error.replaceAll('\n', '\n  ')}");
     }
 
     return buffer.toString().trimRight();
diff --git a/pkg/status_file/lib/status_file_linter.dart b/pkg/status_file/lib/status_file_linter.dart
index d1282ab..7f1e29b 100644
--- a/pkg/status_file/lib/status_file_linter.dart
+++ b/pkg/status_file/lib/status_file_linter.dart
@@ -115,10 +115,9 @@
 
 /// Checks that each section expression have been normalized.
 Iterable<LintingError> lintNormalizedSection(StatusSection section) {
-  if (section.condition == null) return const [];
   var nonNormalized = section.condition.toString();
   var normalized = section.condition.normalize().toString();
-  if (section.condition.toString() != normalized) {
+  if (nonNormalized != normalized) {
     return [
       new LintingError(
           section.lineNumber,
@@ -184,11 +183,11 @@
   if (witness != null) {
     return [
       new LintingError(
-          witness.second.lineNumber,
+          witness.second!.lineNumber,
           "Section expressions are not correctly ordered in file. "
-          "'${witness.first.condition}' on line ${witness.first.lineNumber} "
-          "should come before '${witness.second.condition}' at line "
-          "${witness.second.lineNumber}.")
+          "'${witness.first!.condition}' on line ${witness.first!.lineNumber} "
+          "should come before '${witness.second!.condition}' at line "
+          "${witness.second!.lineNumber}.")
     ];
   }
   return [];
@@ -198,14 +197,12 @@
 Iterable<LintingError> lintSectionHeaderDuplicates(
     List<StatusSection> sections) {
   var errors = <LintingError>[];
-  var sorted = sections.where((section) => section.condition != null).toList()
+  var sorted = sections.toList()
     ..sort((a, b) => a.condition.compareTo(b.condition));
   for (var i = 1; i < sorted.length; i++) {
     var section = sorted[i];
     var previousSection = sorted[i - 1];
-    if (section.condition != null &&
-        previousSection.condition != null &&
-        section.condition.compareTo(previousSection.condition) == 0) {
+    if (section.condition.compareTo(previousSection.condition) == 0) {
       errors.add(new LintingError(
           section.lineNumber,
           "The condition "
@@ -216,7 +213,7 @@
   return errors;
 }
 
-ListNotEqualWitness<T> _findNotEqualWitness<T>(List<T> first, List<T> second) {
+ListNotEqualWitness<T>? _findNotEqualWitness<T>(List<T> first, List<T> second) {
   if (first.isEmpty && second.isEmpty) {
     return null;
   }
@@ -233,7 +230,7 @@
 }
 
 class ListNotEqualWitness<T> {
-  final T first;
-  final T second;
+  final T? first;
+  final T? second;
   ListNotEqualWitness(this.first, this.second);
 }
diff --git a/pkg/status_file/lib/status_file_normalizer.dart b/pkg/status_file/lib/status_file_normalizer.dart
index 71d90e3..73e1727 100644
--- a/pkg/status_file/lib/status_file_normalizer.dart
+++ b/pkg/status_file/lib/status_file_normalizer.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 'package:status_file/src/expression.dart';
+
 import 'canonical_status_file.dart';
 import 'dart:convert';
 
@@ -52,10 +54,9 @@
   List<StatusSection> newSections = [];
   // Copy over all sections and normalize all the expressions.
   oldStatusFile.sections.forEach((section) {
-    if (section.condition != null && section.isEmpty()) {
-      return;
-    }
-    if (section.condition != null) {
+    if (section.condition != Expression.always) {
+      if (section.isEmpty()) return;
+
       newSections.add(new StatusSection(section.condition.normalize(),
           section.lineNumber, section.sectionHeaderComments)
         ..entries.addAll(section.entries));
@@ -63,23 +64,17 @@
       newSections.add(section);
     }
   });
+
   // Sort the headers
-  newSections.sort((a, b) {
-    if (a.condition == null) {
-      return -1;
-    } else if (b.condition == null) {
-      return 1;
-    }
-    return a.condition.compareTo(b.condition);
-  });
+  newSections.sort((a, b) => a.condition.compareTo(b.condition));
+
   // See if we can combine section headers by simple comparison.
-  StatusFile newStatusFile = new StatusFile(statusFile.path);
+  var newStatusFile = new StatusFile(statusFile.path);
   newStatusFile.sections.add(newSections[0]);
   for (var i = 1; i < newSections.length; i++) {
     var previousSection = newSections[i - 1];
     var currentSection = newSections[i];
-    if (previousSection.condition != null &&
-        previousSection.condition.compareTo(currentSection.condition) == 0) {
+    if (previousSection.condition.compareTo(currentSection.condition) == 0) {
       newStatusFile.sections.last.entries.addAll(currentSection.entries);
     } else {
       newStatusFile.sections.add(currentSection);
diff --git a/pkg/status_file/pubspec.yaml b/pkg/status_file/pubspec.yaml
index ae78d40..1536b63 100644
--- a/pkg/status_file/pubspec.yaml
+++ b/pkg/status_file/pubspec.yaml
@@ -2,7 +2,7 @@
 # This package is not intended for consumption on pub.dev. DO NOT publish.
 publish_to: none
 environment:
-  sdk: "^2.3.0"
+  sdk: "^2.12.0"
 dependencies:
   path: "^1.4.0"
   args: "^1.4.4"
diff --git a/pkg/status_file/test/linter_test.dart b/pkg/status_file/test/linter_test.dart
index dcd6e06..f97b6ca 100644
--- a/pkg/status_file/test/linter_test.dart
+++ b/pkg/status_file/test/linter_test.dart
@@ -100,7 +100,7 @@
 vm/tests: Skip # this comment is valid
 """,
       "Error at line 1: Expression contains '||'. Please split the expression "
-      "into multiple separate sections.",
+          "into multiple separate sections.",
       disjunctions: true);
 }
 
@@ -118,7 +118,7 @@
 a_test: Pass
 """,
       "Error at line 1: Test paths are not alphabetically ordered in "
-      "section. a_test should come before vm/tests.");
+          "section. a_test should come before vm/tests.");
 }
 
 void testCheckForAlphabeticalOrderingOfPaths_okOrdering() {
@@ -139,7 +139,7 @@
 xyz_test: Skip
 """,
       "Error at line 1: The status entry 'a_test: Pass' is duplicated on lines "
-      "2 and 3.");
+          "2 and 3.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidRuntimeBeforeCompiler() {
@@ -148,7 +148,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$compiler == dart2js "
-      r"&& $runtime == ff' but was '$runtime == ff && $compiler == dart2js'.");
+          r"&& $runtime == ff' but was '$runtime == ff && $compiler == dart2js'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidRuntimeBeforeMode() {
@@ -157,7 +157,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$mode == debug && "
-      r"$runtime == ff' but was '$runtime == ff && $mode == debug'.");
+          r"$runtime == ff' but was '$runtime == ff && $mode == debug'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidSystemBeforeMode() {
@@ -166,7 +166,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$mode == debug && "
-      r"$system == win' but was '$system == win && $mode == debug'.");
+          r"$system == win' but was '$system == win && $mode == debug'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidStrongBeforeKernel() {
@@ -175,7 +175,7 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '!$kernel && !$strong' "
-      r"but was '!$strong && !$kernel'.");
+          r"but was '!$strong && !$kernel'.");
 }
 
 void testCheckForCorrectOrderingInSections_invalidOrdering() {
@@ -184,8 +184,8 @@
 a_test: Pass
 """,
       r"Error at line 1: Condition expression should be '$builder_tag == "
-      r"strong && $compiler == dart2js && !$browser' but was "
-      r"'$compiler == dart2js && $builder_tag == strong && !$browser'.");
+          r"strong && $compiler == dart2js && !$browser' but was "
+          r"'$compiler == dart2js && $builder_tag == strong && !$browser'.");
 }
 
 void testCheckForCorrectOrderingInSections_okOrdering() {
@@ -203,8 +203,8 @@
 a_test: Pass
 """,
       r"Error at line 1: Section expressions are not correctly ordered in file."
-      r" '$compiler == dart2js' on line 4 should come before '$runtime == ff' "
-      r"at line 1.");
+          r" '$compiler == dart2js' on line 4 should come before '$runtime == ff' "
+          r"at line 1.");
 }
 
 void checkLintNormalizedSection_invalidAlphabeticalOrderingVariableArguments() {
@@ -216,8 +216,8 @@
 a_test: Pass
 """,
       r"Error at line 1: Section expressions are not correctly ordered in file."
-      r" '$runtime == chrome' on line 4 should come before '$runtime == ff' at "
-      r"line 1.");
+          r" '$runtime == chrome' on line 4 should come before '$runtime == ff' at "
+          r"line 1.");
 }
 
 void checkLintNormalizedSection_invalidOrderingWithNotEqual() {
@@ -233,8 +233,8 @@
 a_test: Pass
 """,
       r"Error at line 4: Section expressions are not correctly ordered in file."
-      r" '$runtime == ff' on line 7 should come before '$runtime != ff' at "
-      r"line 4.");
+          r" '$runtime == ff' on line 7 should come before '$runtime != ff' at "
+          r"line 4.");
 }
 
 void checkLintNormalizedSection_invalidOrderingWithNegation() {
@@ -251,7 +251,7 @@
 
 """,
       r"Error at line 4: Section expressions are not correctly ordered in file."
-      r" '$checked' on line 7 should come before '!$checked' at line 4.");
+          r" '$checked' on line 7 should come before '!$checked' at line 4.");
 }
 
 void checkLintNormalizedSection_correctOrdering() {
@@ -285,5 +285,5 @@
 a_test: Pass
 """,
       r"Error at line 4: The condition '!$browser' is duplicated on lines 1 "
-      r"and 4.");
+          r"and 4.");
 }
diff --git a/pkg/status_file/test/normalize_test.dart b/pkg/status_file/test/normalize_test.dart
index 92869c3..27c5985 100644
--- a/pkg/status_file/test/normalize_test.dart
+++ b/pkg/status_file/test/normalize_test.dart
@@ -69,8 +69,8 @@
         "$entriesInNormalized. Those two numbers are not the same.");
   }
   for (var section in original.sections) {
-    section.entries.where((entry) => entry is StatusEntry).forEach((entry) =>
-        findInStatusFile(normalized, entry, section.condition?.normalize(),
+    section.entries.whereType<StatusEntry>().forEach((entry) =>
+        findInStatusFile(normalized, entry, section.condition.normalize(),
             warnOnDuplicateHeader: warnOnDuplicateHeader));
   }
 }
@@ -87,12 +87,7 @@
     {bool warnOnDuplicateHeader = false}) {
   int foundEntryPosition = -1;
   for (var section in statusFile.sections) {
-    if (section.condition == null && condition != null ||
-        section.condition != null && condition == null) {
-      continue;
-    }
-    if (section.condition != null &&
-        section.condition.normalize().compareTo(condition) != 0) {
+    if (section.condition.normalize().compareTo(condition) != 0) {
       continue;
     }
     var matchingEntries = section.entries
diff --git a/pkg/status_file/test/repo_status_files_test.dart b/pkg/status_file/test/repo_status_files_test.dart
index 9f14fe7..fccd043 100644
--- a/pkg/status_file/test/repo_status_files_test.dart
+++ b/pkg/status_file/test/repo_status_files_test.dart
@@ -19,8 +19,8 @@
       if (!entry.path.endsWith(".status")) continue;
       try {
         new StatusFile.read(entry.path);
-      } catch (err) {
-        Expect.fail("Could not parse '${entry.path}'.\n$err");
+      } catch (err, stack) {
+        Expect.fail("Could not parse '${entry.path}'.\n$err\n$stack");
       }
     }
   }
diff --git a/pkg/status_file/test/status_expression_dnf_test.dart b/pkg/status_file/test/status_expression_dnf_test.dart
index 475b664..546395a 100644
--- a/pkg/status_file/test/status_expression_dnf_test.dart
+++ b/pkg/status_file/test/status_expression_dnf_test.dart
@@ -55,13 +55,13 @@
   // https://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm
   shouldDnfTo(
       r"$a && !$b && !$c && !$d || $a && !$b && !$c && $d || "
-      r"$a && !$b && $c && !$d || $a && !$b && $c && $d",
+          r"$a && !$b && $c && !$d || $a && !$b && $c && $d",
       r"$a && !$b");
 
   shouldDnfTo(
       r"!$a && $b && !$c && !$d || $a && !$b && !$c && !$d || "
-      r"$a && !$b && $c && !$d || $a && !$b && $c && $d || $a && $b && !$c && !$d ||"
-      r" $a && $b && $c && $d || $a && !$b && !$c && $d || $a && $b && $c && !$d",
+          r"$a && !$b && $c && !$d || $a && !$b && $c && $d || $a && $b && !$c && !$d ||"
+          r" $a && $b && $c && $d || $a && !$b && !$c && $d || $a && $b && $c && !$d",
       r"$a && !$b || $a && $c || $b && !$c && !$d");
 
   // Test that an expression is converted to dnf and minified correctly.
diff --git a/pkg/status_file/test/status_expression_test.dart b/pkg/status_file/test/status_expression_test.dart
index 7fb224a..b79d57b 100644
--- a/pkg/status_file/test/status_expression_test.dart
+++ b/pkg/status_file/test/status_expression_test.dart
@@ -17,7 +17,7 @@
   }
 
   /// Looks up the value of the variable with [name].
-  String lookUp(String name) => _values[name];
+  String? lookUp(String name) => _values[name];
 
   operator []=(String key, String value) => _values[key] = value;
 }
@@ -33,8 +33,8 @@
 }
 
 void testExpression() {
-  var expression = Expression
-      .parse(r" $mode == debug && ($arch == chromium || $arch == dartc) ");
+  var expression = Expression.parse(
+      r" $mode == debug && ($arch == chromium || $arch == dartc) ");
   Expect.equals(r"$mode == debug && ($arch == chromium || $arch == dartc)",
       expression.toString());
 
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index 053dcbd..23be296 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -112,32 +112,27 @@
         parser, "Must provide at least one flag for an operation to perform.");
   }
 
-  if (results.rest.length != 1) {
-    _usageError(
-        parser, "Must provide a file path or glob for which tests to update.");
-  }
+  for (var result in results.rest) {
+    // Allow tests to be specified without the extension for compatibility with
+    // the regular test runner syntax.
+    if (!result.endsWith(".dart")) {
+      result += ".dart";
+    }
 
-  var result = results.rest.single;
+    // Allow tests to be specified either relative to the "tests" directory
+    // or relative to the current directory.
+    var root = result.startsWith("tests") ? "." : "tests";
+    var glob = Glob(result, recursive: true);
+    for (var entry in glob.listSync(root: root)) {
+      if (!entry.path.endsWith(".dart")) continue;
 
-  // Allow tests to be specified without the extension for compatibility with
-  // the regular test runner syntax.
-  if (!result.endsWith(".dart")) {
-    result += ".dart";
-  }
-
-  // Allow tests to be specified either relative to the "tests" directory
-  // or relative to the current directory.
-  var root = result.startsWith("tests") ? "." : "tests";
-  var glob = Glob(result, recursive: true);
-  for (var entry in glob.listSync(root: root)) {
-    if (!entry.path.endsWith(".dart")) continue;
-
-    if (entry is pkg_file.File) {
-      await _processFile(entry,
-          dryRun: dryRun,
-          includeContext: includeContext,
-          remove: removeSources,
-          insert: insertSources);
+      if (entry is pkg_file.File) {
+        await _processFile(entry,
+            dryRun: dryRun,
+            includeContext: includeContext,
+            remove: removeSources,
+            insert: insertSources);
+      }
     }
   }
 }
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 01def63..5847891 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -50,22 +50,20 @@
   bool get supportsSetLiterals => false;
 
   @override
-  int get enabledLateLowerings => flags.forceLateLoweringsForTesting;
+  int get enabledLateLowerings => LateLowering.none;
 
   @override
-  bool get supportsLateLoweringSentinel =>
-      flags.forceLateLoweringSentinelForTesting;
+  bool get supportsLateLoweringSentinel => false;
 
   @override
-  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+  bool get useStaticFieldLowering => false;
 
   @override
-  bool get supportsExplicitGetterCalls =>
-      !flags.forceNoExplicitGetterCallsForTesting;
+  bool get supportsExplicitGetterCalls => true;
 
   @override
   int get enabledConstructorTearOffLowerings =>
-      flags.forceConstructorTearOffLoweringForTesting;
+      ConstructorTearOffLowering.typedefs;
 
   @override
   String get name => 'vm';
diff --git a/pkg/vm/lib/transformations/ffi_native.dart b/pkg/vm/lib/transformations/ffi_native.dart
index e666652..ff405f8 100644
--- a/pkg/vm/lib/transformations/ffi_native.dart
+++ b/pkg/vm/lib/transformations/ffi_native.dart
@@ -143,7 +143,16 @@
         fileUri: currentLibrary!.fileUri,
         getterReference: currentLibraryIndex?.lookupGetterReference(fieldName))
       ..fileOffset = node.fileOffset;
-    currentLibrary!.addField(funcPtrField);
+    // 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(
diff --git a/pkg/vm/lib/transformations/lowering.dart b/pkg/vm/lib/transformations/lowering.dart
index d776f33..f9e8fe3 100644
--- a/pkg/vm/lib/transformations/lowering.dart
+++ b/pkg/vm/lib/transformations/lowering.dart
@@ -51,6 +51,12 @@
 
   @override
   defaultMember(Member node) {
+    if (node is Procedure && node.isRedirectingFactory) {
+      // Keep bodies of redirecting factories unchanged because
+      // front-end expects them to have a certain shape.
+      return node;
+    }
+
     _currentMember = node;
     _cachedStaticTypeContext = null;
 
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index 0611379..d41fa98 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -8,8 +8,6 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/library_index.dart' show LibraryIndex;
-import 'package:front_end/src/api_unstable/vm.dart'
-    show getRedirectingFactoryBody;
 
 import 'calls.dart';
 import 'types.dart';
@@ -74,26 +72,6 @@
     var type = _annotationsDefineRoot(proc.annotations);
     if (type == null) return;
 
-    if (proc.isRedirectingFactory) {
-      if (type != PragmaEntryPointType.CallOnly &&
-          type != PragmaEntryPointType.Default) {
-        throw "Error: factory $proc doesn't have a setter or getter";
-      }
-      Member target = proc;
-      while (target is Procedure && target.isRedirectingFactory) {
-        target = getRedirectingFactoryBody(target)!.target!;
-        assert(
-            (target is Procedure && target.isFactory) || target is Constructor);
-      }
-      entryPoints
-          .addRawCall(new DirectSelector(target, callKind: CallKind.Method));
-      if (target is Constructor) {
-        entryPoints.addAllocatedClass(target.enclosingClass);
-      }
-      nativeCodeOracle.setMemberReferencedFromNativeCode(target);
-      return;
-    }
-
     void addSelector(CallKind ck) {
       entryPoints.addRawCall(proc.isInstanceMember
           ? new InterfaceSelector(proc, callKind: ck)
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 9905fcc..de63cee 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -608,7 +608,6 @@
         "${member}${fieldSummaryType == FieldSummaryType.kFieldGuard ? " (guard)" : ""}";
     debugPrint("===== $summaryName =====");
     assert(!member.isAbstract);
-    assert(!(member is Procedure && member.isRedirectingFactory));
 
     _protobufHandler?.beforeSummaryCreation(member);
 
@@ -1596,7 +1595,7 @@
         return _handleIndexingIntoListConstant(constant);
       }
     }
-    assert(target is Procedure && !target.isGetter);
+    assert(!target.isGetter);
     // TODO(alexmarkov): overloaded arithmetic operators
     final result = _makeCall(
         node,
@@ -2477,17 +2476,7 @@
     return new ConcreteType(resultClass.cls, null, constant);
   }
 
-  @override
-  Type visitStaticTearOffConstant(StaticTearOffConstant constant) {
-    final Procedure member = constant.target;
-    summaryCollector._entryPointsListener
-        .addRawCall(new DirectSelector(member));
-    summaryCollector._entryPointsListener.recordTearOff(member);
-    return _getStaticType(constant);
-  }
-
-  @override
-  Type visitConstructorTearOffConstant(ConstructorTearOffConstant constant) {
+  Type _visitTearOffConstant(TearOffConstant constant) {
     final Member member = constant.target;
     summaryCollector._entryPointsListener
         .addRawCall(new DirectSelector(member));
@@ -2500,6 +2489,19 @@
   }
 
   @override
+  Type visitStaticTearOffConstant(StaticTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
+  Type visitConstructorTearOffConstant(ConstructorTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
+  Type visitRedirectingFactoryTearOffConstant(
+          RedirectingFactoryTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
   Type visitInstantiationConstant(InstantiationConstant constant) {
     constant.tearOffConstant.accept(this);
     return _getStaticType(constant);
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index e964f61..5634a76 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -315,9 +315,15 @@
     Constant? constantValue;
     bool isInt = false;
 
-    final nullable = type is NullableType;
+    // Note: the explicit type `bool` is needed because the checked-in version
+    // of the CFE that we use for bootstrapping doesn't yet have constructor
+    // tearoffs enabled, and the fix for bug
+    // https://github.com/dart-lang/language/issues/1785 only takes effect when
+    // constructor tearoffs are enabled.  TODO(paulberry): remove the type after
+    // the bootstrap CFE enables constructor tearoffs.
+    final bool nullable = type is NullableType;
     if (nullable) {
-      type = (type as NullableType).baseType;
+      type = type.baseType;
     }
 
     if (nullable && type == const EmptyType()) {
@@ -1944,6 +1950,12 @@
   }
 
   @override
+  visitRedirectingFactoryTearOffConstant(
+      RedirectingFactoryTearOffConstant constant) {
+    shaker.addUsedMember(constant.target);
+  }
+
+  @override
   visitInstantiationConstant(InstantiationConstant constant) {
     analyzeConstant(constant.tearOffConstant);
   }
diff --git a/pkg/vm/test/common_test_utils.dart b/pkg/vm/test/common_test_utils.dart
index 1ff586a..ed5b3f5 100644
--- a/pkg/vm/test/common_test_utils.dart
+++ b/pkg/vm/test/common_test_utils.dart
@@ -10,6 +10,7 @@
         CompilerOptions,
         DiagnosticMessage,
         computePlatformBinariesLocation,
+        kernelForModule,
         kernelForProgram,
         parseExperimentalArguments,
         parseExperimentalFlags;
@@ -39,34 +40,53 @@
     bool enableSuperMixins = false,
     List<String>? experimentalFlags,
     Map<String, String>? environmentDefines,
-    Uri? packagesFileUri}) async {
-  final platformKernel =
-      computePlatformBinariesLocation().resolve('vm_platform_strong.dill');
-  target ??= new TestingVmTarget(new TargetFlags())
-    ..enableSuperMixins = enableSuperMixins;
-  environmentDefines ??= <String, String>{};
-  final options = new CompilerOptions()
-    ..target = target
-    ..additionalDills = <Uri>[platformKernel]
-    ..environmentDefines = environmentDefines
-    ..packagesFileUri = packagesFileUri
-    ..explicitExperimentalFlags =
-        parseExperimentalFlags(parseExperimentalArguments(experimentalFlags),
-            onError: (String message) {
-      throw message;
-    })
-    ..onDiagnostic = (DiagnosticMessage message) {
-      fail("Compilation error: ${message.plainTextFormatted.join('\n')}");
-    };
+    Uri? packagesFileUri,
+    List<Uri>? linkedDependencies}) async {
+  Directory? tempDirectory;
+  try {
+    final platformKernel =
+        computePlatformBinariesLocation().resolve('vm_platform_strong.dill');
+    target ??= new TestingVmTarget(new TargetFlags())
+      ..enableSuperMixins = enableSuperMixins;
+    environmentDefines ??= <String, String>{};
+    final options = new CompilerOptions()
+      ..target = target
+      ..additionalDills = <Uri>[platformKernel]
+      ..environmentDefines = environmentDefines
+      ..packagesFileUri = packagesFileUri
+      ..explicitExperimentalFlags =
+          parseExperimentalFlags(parseExperimentalArguments(experimentalFlags),
+              onError: (String message) {
+        throw message;
+      })
+      ..onDiagnostic = (DiagnosticMessage message) {
+        fail("Compilation error: ${message.plainTextFormatted.join('\n')}");
+      };
+    if (linkedDependencies != null) {
+      final Component component =
+          (await kernelForModule(linkedDependencies, options)).component!;
+      tempDirectory = await Directory.systemTemp.createTemp();
+      Uri uri = tempDirectory.uri.resolve("generated.dill");
+      File generated = new File.fromUri(uri);
+      IOSink sink = generated.openWrite();
+      try {
+        new BinaryPrinter(sink).writeComponentFile(component);
+      } finally {
+        await sink.close();
+      }
+      options..additionalDills = <Uri>[platformKernel, uri];
+    }
 
-  final Component component =
-      (await kernelForProgram(sourceUri, options))!.component!;
+    final Component component =
+        (await kernelForProgram(sourceUri, options))!.component!;
 
-  // Make sure the library name is the same and does not depend on the order
-  // of test cases.
-  component.mainMethod!.enclosingLibrary.name = '#lib';
-
-  return component;
+    // Make sure the library name is the same and does not depend on the order
+    // of test cases.
+    component.mainMethod!.enclosingLibrary.name = '#lib';
+    return component;
+  } finally {
+    await tempDirectory?.delete(recursive: true);
+  }
 }
 
 String kernelLibraryToString(Library library) {
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 5b175e4..700a506 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -1423,8 +1423,7 @@
         "0",
       ], callback: (RemoteVm remoteVm) async {
         for (int q = 0; q < 10; q++) {
-          var reloadResult = await remoteVm.reload(partial1Dill.uri);
-          expect(reloadResult is Map, isTrue);
+          Map reloadResult = await remoteVm.reload(partial1Dill.uri);
           expect(reloadResult["success"], equals(true));
 
           await remoteVm.forceGc();
@@ -1457,7 +1456,6 @@
           await deletePossibleBreakpoint(remoteVm, breakpoint);
 
           reloadResult = await remoteVm.reload(partial2Dill.uri);
-          expect(reloadResult is Map, isTrue);
           expect(reloadResult["success"], equals(true));
 
           await remoteVm.forceGc();
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index 0fee483..f52fb1f 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -8,6 +8,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
+import 'package:front_end/src/api_unstable/vm.dart';
 import 'package:test/test.dart';
 import 'package:vm/transformations/pragma.dart'
     show ConstantPragmaAnnotationParser;
@@ -16,13 +17,14 @@
 
 import '../../common_test_utils.dart';
 
-final String pkgVmDir = Platform.script.resolve('../../..').toFilePath();
+final Uri pkgVmDir = Platform.script.resolve('../../..');
 
-runTestCase(Uri source, bool enableNullSafety) async {
+runTestCase(
+    Uri source, bool enableNullSafety, List<Uri>? linkedDependencies) async {
   final target =
       new TestingVmTarget(new TargetFlags(enableNullSafety: enableNullSafety));
-  Component component =
-      await compileTestCaseToKernelProgram(source, target: target);
+  Component component = await compileTestCaseToKernelProgram(source,
+      target: target, linkedDependencies: linkedDependencies);
 
   final coreTypes = new CoreTypes(component);
 
@@ -32,6 +34,8 @@
 
   String actual = kernelLibraryToString(component.mainMethod!.enclosingLibrary);
 
+  Set<Library> dependencies = {};
+
   // Tests in /protobuf_handler consist of multiple libraries.
   // Include libraries with protobuf generated messages into the result.
   if (source.toString().contains('/protobuf_handler/')) {
@@ -39,12 +43,23 @@
       if (lib.importUri
           .toString()
           .contains('/protobuf_handler/lib/generated/')) {
-        lib.name ??= lib.importUri.pathSegments.last;
-        actual += kernelLibraryToString(lib);
+        dependencies.add(lib);
       }
     }
+  }
+  for (var lib in component.libraries) {
+    if (lib.fileUri.path.endsWith('.lib.dart')) {
+      dependencies.add(lib);
+    }
+  }
+
+  if (dependencies.isNotEmpty) {
+    for (var lib in dependencies) {
+      lib.name ??= lib.importUri.pathSegments.last;
+      actual += kernelLibraryToString(lib);
+    }
     // Remove library paths.
-    actual = actual.replaceAll(Uri.file(pkgVmDir).toString(), 'file:pkg/vm');
+    actual = actual.replaceAll(pkgVmDir.toString(), 'file:pkg/vm/');
   }
 
   compareResultWithExpectationsFile(source, actual);
@@ -59,21 +74,57 @@
   return null;
 }
 
+class TestOptions {
+  /// List of libraries the should be precompiled to .dill before compiling the
+  /// main library from source.
+  static const Option<List<String>?> linked =
+      Option('--linked', StringListValue());
+
+  /// If set, the test should be compiled with sound null safety.
+  static const Option<bool> nnbdStrong =
+      Option('--nnbd-strong', BoolValue(false));
+
+  static const List<Option> options = [linked, nnbdStrong];
+}
+
 main(List<String> args) {
   final testNameFilter = argsTestName(args);
 
   group('transform-component', () {
-    final testCasesDir = new Directory(
-        pkgVmDir + '/testcases/transformations/type_flow/transformer');
+    final testCasesDir = new Directory.fromUri(
+        pkgVmDir.resolve('testcases/transformations/type_flow/transformer/'));
 
     for (var entry
         in testCasesDir.listSync(recursive: true, followLinks: false)) {
       final path = entry.path;
       if (path.endsWith('.dart') &&
           !path.endsWith('.pb.dart') &&
-          (testNameFilter == null || path.contains(testNameFilter))) {
-        final bool enableNullSafety = path.endsWith('_nnbd_strong.dart');
-        test(path, () => runTestCase(entry.uri, enableNullSafety));
+          !path.endsWith('.lib.dart')) {
+        String name = entry.uri.pathSegments.last;
+        if (testNameFilter != null && !path.contains(testNameFilter)) {
+          print('Skipping ${name}');
+          continue;
+        }
+        List<Uri>? linkDependencies;
+        bool enableNullSafety = path.endsWith('_nnbd_strong.dart');
+
+        File optionsFile = new File('${path}.options');
+        if (optionsFile.existsSync()) {
+          ParsedOptions parsedOptions = ParsedOptions.parse(
+              ParsedOptions.readOptionsFile(optionsFile.readAsStringSync()),
+              TestOptions.options);
+          List<String>? linked = TestOptions.linked.read(parsedOptions);
+          if (linked != null) {
+            linkDependencies =
+                linked.map((String name) => entry.uri.resolve(name)).toList();
+          }
+          if (TestOptions.nnbdStrong.read(parsedOptions)) {
+            enableNullSafety = true;
+          }
+        }
+
+        test(path,
+            () => runTestCase(entry.uri, enableNullSafety, linkDependencies));
       }
     }
   }, timeout: Timeout.none);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart
new file mode 100644
index 0000000..bec8996
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart
@@ -0,0 +1,14 @@
+// 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 'const_default.lib.dart';
+
+test(Class c) {
+  c.method2();
+}
+
+main() {
+  dynamic dyn = null;
+  //test(dyn);
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect
new file mode 100644
index 0000000..15faad67
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect
@@ -0,0 +1,11 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/const_default.lib.dart";
+
+static method main() → dynamic {
+  dynamic dyn = null;
+}
+library const_default.lib.dart /*isNonNullableByDefault*/;
+import self as self;
+
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.options b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.options
new file mode 100644
index 0000000..4b185bc
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.options
@@ -0,0 +1 @@
+--linked=const_default.lib.dart
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.lib.dart
new file mode 100644
index 0000000..53f72f0
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.lib.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.
+
+class Constant {
+  final int _field;
+
+  const Constant._(this._field);
+
+  static const Constant a = const Constant._(0);
+}
+
+abstract class Interface {
+  Future<void> method({Constant c: Constant.a});
+  Future<void> method2();
+}
+
+class Class implements Interface {
+  Future<void> method({c: Constant.a}) async {}
+  Future<void> method2() async {}
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart
new file mode 100644
index 0000000..602299f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.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.
+
+import 'enum_from_lib_used_as_type.lib.dart';
+
+main() {
+  List list = [];
+  if (list.isNotEmpty) {
+    new Class().method(null as dynamic);
+  }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..0e15b41
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -0,0 +1,28 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "enum_from_lib_used_as_type.lib.dart" as lib;
+import "dart:_internal" as _in;
+
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.lib.dart";
+
+static method main() → dynamic {
+  core::List<dynamic> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
+  if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}{core::bool}) {
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.lib.dart::Class.method] [@vm.inferred-type.metadata=!? (skip check)] new lib::Class::•().{lib::Class::method}(_in::unsafeCast<lib::Enum>(_in::unsafeCast<dynamic>(null))){(lib::Enum) → core::int};
+  }
+}
+library enum_from_lib_used_as_type.lib.dart /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Enum extends core::Object implements core::Enum {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3267]  abstract get /*isLegacy*/ index() → core::int;
+}
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3268,getterSelectorId:3269]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+    return [@vm.inferred-type.metadata=!] e.{self::Enum::index}{core::int};
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.options b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.options
new file mode 100644
index 0000000..86efd12
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.options
@@ -0,0 +1 @@
+--linked=enum_from_lib_used_as_type.lib.dart
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.lib.dart
new file mode 100644
index 0000000..951e2e9
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.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.
+
+enum Enum { a }
+
+class Class {
+  int method(Enum e) => e.index;
+}
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
index a079cbe..30e6574 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
@@ -7,6 +7,9 @@
   constructor •() → self::A
     : super core::Object::•()
     ;
+  @#C3
+  static factory foo() → self::A
+    return new self::B::•();
 }
 class B extends self::A {
   constructor •() → self::B
@@ -17,11 +20,16 @@
   constructor •() → self::C
     : super core::Object::•()
     ;
+  @#C3
+  static factory bar() → self::C
+    return [@vm.inferred-type.metadata=#lib::E] self::D::baz();
 }
 abstract class D extends self::C {
   constructor •() → self::D
     : super self::C::•()
     ;
+  static factory baz() → self::D
+    return new self::E::•();
 }
 class E extends self::D {
   constructor •() → self::E
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart
new file mode 100644
index 0000000..1abc669
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.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 'tree_shake_enum_from_lib.lib.dart';
+
+enum UnusedEnum { a, b }
+enum UsedEnum {
+  unusedValue,
+  usedValue,
+}
+
+usedMethod(UnusedInterface c) {
+  c.usedInterfaceField = c.usedInterfaceField;
+}
+
+unusedMethod() {}
+
+class UnusedInterface {
+  int? usedInterfaceField;
+
+  UnusedInterface(this.usedInterfaceField);
+}
+
+class UsedClass implements UnusedInterface {
+  int? unusedField;
+  int? usedField;
+  int? usedInterfaceField;
+}
+
+class UnusedClass {}
+
+main() {
+  usedMethod(new UsedClass()..usedField);
+  UsedEnum.usedValue;
+  List<UnusedEnum> list = [];
+  if (list.isNotEmpty) {
+    new ConstClass().method(null as dynamic);
+  }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..1f84d00
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -0,0 +1,59 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "tree_shake_enum_from_lib.lib.dart" as lib;
+import "dart:_internal" as _in;
+
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.lib.dart";
+
+abstract class UnusedEnum extends core::Object implements core::Enum {
+}
+class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
+[@vm.inferred-type.metadata=dart.core::_OneByteString (value: "UsedEnum.usedValue")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
+    return [@vm.direct-call.metadata=#lib::UsedEnum._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "UsedEnum.usedValue")] this.{self::UsedEnum::_name}{core::String};
+}
+abstract class UnusedInterface extends core::Object {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract set /*isLegacy*/ usedInterfaceField(core::int? value) → void;
+}
+class UsedClass extends core::Object implements self::UnusedInterface {
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  field core::int? usedField = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  field core::int? usedInterfaceField = null;
+  synthetic constructor •() → self::UsedClass
+    : super core::Object::•()
+    ;
+}
+static method usedMethod([@vm.inferred-type.metadata=#lib::UsedClass] self::UnusedInterface c) → dynamic {
+  [@vm.direct-call.metadata=#lib::UsedClass.usedInterfaceField] [@vm.inferred-type.metadata=!? (skip check)] c.{self::UnusedInterface::usedInterfaceField} = [@vm.direct-call.metadata=#lib::UsedClass.usedInterfaceField] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] c.{self::UnusedInterface::usedInterfaceField}{core::int?};
+}
+static method main() → dynamic {
+  self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
+    [@vm.direct-call.metadata=#lib::UsedClass.usedField] #t1.{self::UsedClass::usedField}{core::int?};
+  } =>#t1);
+  #C3;
+  core::List<self::UnusedEnum> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::UnusedEnum>] core::_GrowableList::•<self::UnusedEnum>(0);
+  if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}{core::bool}) {
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.lib.dart::ConstClass.method] [@vm.inferred-type.metadata=!? (skip check)] new lib::ConstClass::•().{lib::ConstClass::method}(_in::unsafeCast<lib::ConstEnum>(_in::unsafeCast<dynamic>(null))){(lib::ConstEnum) → core::int};
+  }
+}
+constants  {
+  #C1 = 1
+  #C2 = "UsedEnum.usedValue"
+  #C3 = self::UsedEnum {index:#C1, _name:#C2}
+}
+library tree_shake_enum_from_lib.lib.dart /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class ConstEnum extends core::Object implements core::Enum {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3273]  abstract get /*isLegacy*/ index() → core::int;
+}
+class ConstClass extends core::Object {
+  synthetic constructor •() → self::ConstClass
+    : super core::Object::•()
+    ;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3274,getterSelectorId:3275]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+    return [@vm.inferred-type.metadata=!] e.{self::ConstEnum::index}{core::int};
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.options b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.options
new file mode 100644
index 0000000..ea4f34c
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.options
@@ -0,0 +1 @@
+--linked=tree_shake_enum_from_lib.lib.dart
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.lib.dart
new file mode 100644
index 0000000..af82d68
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.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.
+
+enum ConstEnum { value }
+
+class ConstClass {
+  int method(ConstEnum e) => e.index;
+}
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.dart
new file mode 100644
index 0000000..28a4c67
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.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.
+
+import 'tree_shake_field.lib.dart';
+
+class Class implements Interface {
+  int? field1;
+  int? field2;
+  int? field3;
+}
+
+void method(Interface i) {
+  i.field2 = i.field1;
+  i.field3 = i.field3;
+}
+
+main() {
+  method(new Class());
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.dart.expect
new file mode 100644
index 0000000..92a3b9a
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.dart.expect
@@ -0,0 +1,32 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "tree_shake_field.lib.dart" as lib;
+
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.lib.dart";
+
+class Class extends core::Object implements lib::Interface {
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  field core::int? field1 = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  field core::int? field3 = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]  set /*isLegacy*/ field2(core::int? value) → void;
+}
+static method method([@vm.inferred-type.metadata=#lib::Class] lib::Interface i) → void {
+  [@vm.direct-call.metadata=#lib::Class.field2] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field2} = [@vm.direct-call.metadata=#lib::Class.field1] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field1}{core::int?};
+  [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field3} = [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field3}{core::int?};
+}
+static method main() → dynamic {
+  self::method(new self::Class::•());
+}
+library tree_shake_field.lib.dart /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  abstract get /*isLegacy*/ field1() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]  abstract set /*isLegacy*/ field2(core::int? value) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract get /*isLegacy*/ field3() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract set /*isLegacy*/ field3(core::int? value) → void;
+}
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main_lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.lib.dart
similarity index 100%
rename from pkg/front_end/testcases/aot/tree_shake_field_from_lib/main_lib.dart
rename to pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.lib.dart
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart
new file mode 100644
index 0000000..28a4c67
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.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.
+
+import 'tree_shake_field.lib.dart';
+
+class Class implements Interface {
+  int? field1;
+  int? field2;
+  int? field3;
+}
+
+void method(Interface i) {
+  i.field2 = i.field1;
+  i.field3 = i.field3;
+}
+
+main() {
+  method(new Class());
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.expect
new file mode 100644
index 0000000..92a3b9a
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.expect
@@ -0,0 +1,32 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "tree_shake_field.lib.dart" as lib;
+
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field.lib.dart";
+
+class Class extends core::Object implements lib::Interface {
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  field core::int? field1 = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  field core::int? field3 = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]  set /*isLegacy*/ field2(core::int? value) → void;
+}
+static method method([@vm.inferred-type.metadata=#lib::Class] lib::Interface i) → void {
+  [@vm.direct-call.metadata=#lib::Class.field2] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field2} = [@vm.direct-call.metadata=#lib::Class.field1] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field1}{core::int?};
+  [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field3} = [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field3}{core::int?};
+}
+static method main() → dynamic {
+  self::method(new self::Class::•());
+}
+library tree_shake_field.lib.dart /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  abstract get /*isLegacy*/ field1() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]  abstract set /*isLegacy*/ field2(core::int? value) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract get /*isLegacy*/ field3() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract set /*isLegacy*/ field3(core::int? value) → void;
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.options b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.options
new file mode 100644
index 0000000..6e1fb8f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_field_linked.dart.options
@@ -0,0 +1 @@
+--linked=tree_shake_field.lib.dart
\ No newline at end of file
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 3c1a964..6b3803c 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 7.3.0
+- Update to version `3.51` of the spec.
+- Added optional `reportLines` parameter to `getSourceReport` RPC.
+
 ## 7.1.1
 - Update to version `3.48` of the spec.
 - Added `shows` and `hides` properties to `LibraryDependency`.
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index 5e787ed..383674e 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.49
+version=3.51
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 77ce904..277b463 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.49.0';
+const String vmServiceVersion = '3.51.0';
 
 /// @optional
 const String optional = 'optional';
@@ -817,6 +817,13 @@
   /// compilation error, which could terminate the running Dart program. If this
   /// parameter is not provided, it is considered to have the value `false`.
   ///
+  /// The `reportLines` parameter changes the token positions in
+  /// `SourceReportRange.possibleBreakpoints` and `SourceReportCoverage` to be
+  /// line numbers. This is designed to reduce the number of RPCs that need to
+  /// be performed in the case that the client is only interested in line
+  /// numbers. If this parameter is not provided, it is considered to have the
+  /// value `false`.
+  ///
   /// If `isolateId` refers to an isolate which has exited, then the `Collected`
   /// [Sentinel] is returned.
   ///
@@ -831,6 +838,7 @@
     int? tokenPos,
     int? endTokenPos,
     bool? forceCompile,
+    bool? reportLines,
   });
 
   /// The `getVersion` RPC is used to determine what version of the Service
@@ -1429,6 +1437,7 @@
             tokenPos: params['tokenPos'],
             endTokenPos: params['endTokenPos'],
             forceCompile: params['forceCompile'],
+            reportLines: params['reportLines'],
           );
           break;
         case 'getVersion':
@@ -1929,6 +1938,7 @@
     int? tokenPos,
     int? endTokenPos,
     bool? forceCompile,
+    bool? reportLines,
   }) =>
       _call('getSourceReport', {
         'isolateId': isolateId,
@@ -1937,6 +1947,7 @@
         if (tokenPos != null) 'tokenPos': tokenPos,
         if (endTokenPos != null) 'endTokenPos': endTokenPos,
         if (forceCompile != null) 'forceCompile': forceCompile,
+        if (reportLines != null) 'reportLines': reportLines,
       });
 
   @override
@@ -7287,12 +7298,12 @@
   static SourceReportCoverage? parse(Map<String, dynamic>? json) =>
       json == null ? null : SourceReportCoverage._fromJson(json);
 
-  /// A list of token positions in a SourceReportRange which have been executed.
-  /// The list is sorted.
+  /// A list of token positions (or line numbers if reportLines was enabled) in
+  /// a SourceReportRange which have been executed.  The list is sorted.
   List<int>? hits;
 
-  /// A list of token positions in a SourceReportRange which have not been
-  /// executed.  The list is sorted.
+  /// A list of token positions (or line numbers if reportLines was enabled) in
+  /// a SourceReportRange which have not been executed.  The list is sorted.
   List<int>? misses;
 
   SourceReportCoverage({
@@ -7352,9 +7363,9 @@
   SourceReportCoverage? coverage;
 
   /// Possible breakpoint information for this range, represented as a sorted
-  /// list of token positions.  Provided only when the when the
-  /// PossibleBreakpoint report has been requested and the range has been
-  /// compiled.
+  /// list of token positions (or line numbers if reportLines was enabled).
+  /// Provided only when the when the PossibleBreakpoint report has been
+  /// requested and the range has been compiled.
   @optional
   List<int>? possibleBreakpoints;
 
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index 5aad6b6..85b7cad 100644
--- a/pkg/vm_service/pubspec.yaml
+++ b/pkg/vm_service/pubspec.yaml
@@ -3,7 +3,7 @@
   A library to communicate with a service implementing the Dart VM
   service protocol.
 
-version: 7.1.1
+version: 7.3.0
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
 
diff --git a/pkg/vm_service/test/coverage_leaf_function_test.dart b/pkg/vm_service/test/coverage_leaf_function_test.dart
index fd15551..36b9a88 100644
--- a/pkg/vm_service/test/coverage_leaf_function_test.dart
+++ b/pkg/vm_service/test/coverage_leaf_function_test.dart
@@ -27,9 +27,9 @@
   return true;
 }
 
-var tests = <IsolateTest>[
-  hasStoppedAtBreakpoint,
-  (VmService service, IsolateRef isolateRef) async {
+IsolateTest coverageTest(Map<String, dynamic> expectedRange,
+    {required bool reportLines}) {
+  return (VmService service, IsolateRef isolateRef) async {
     final isolateId = isolateRef.id!;
     final isolate = await service.getIsolate(isolateId);
     final stack = await service.getStack(isolateId);
@@ -43,8 +43,31 @@
     FuncRef funcRef =
         root.functions!.singleWhere((f) => f.name == 'leafFunction');
     Func func = await service.getObject(isolateId, funcRef.id!) as Func;
+    final location = func.location!;
 
-    final expectedRange = {
+    final report = await service.getSourceReport(
+      isolateId,
+      [SourceReportKind.kCoverage],
+      scriptId: location.script!.id,
+      tokenPos: location.tokenPos,
+      endTokenPos: location.endTokenPos,
+      forceCompile: true,
+      reportLines: reportLines,
+    );
+    expect(report.ranges!.length, 1);
+    expect(report.ranges![0].toJson(), expectedRange);
+    expect(report.scripts!.length, 1);
+    expect(
+      report.scripts![0].uri,
+      endsWith('coverage_leaf_function_test.dart'),
+    );
+  };
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  coverageTest(
+    {
       'scriptIndex': 0,
       'startPos': 397,
       'endPos': 447,
@@ -53,39 +76,26 @@
         'hits': [],
         'misses': [397]
       }
-    };
-    final location = func.location!;
-
-    final report = await service.getSourceReport(
-        isolateId, [SourceReportKind.kCoverage],
-        scriptId: location.script!.id,
-        tokenPos: location.tokenPos,
-        endTokenPos: location.endTokenPos,
-        forceCompile: true);
-    expect(report.ranges!.length, 1);
-    expect(report.ranges![0].toJson(), expectedRange);
-    expect(report.scripts!.length, 1);
-    expect(
-        report.scripts![0].uri, endsWith('coverage_leaf_function_test.dart'));
-  },
+    },
+    reportLines: false,
+  ),
+  coverageTest(
+    {
+      'scriptIndex': 0,
+      'startPos': 397,
+      'endPos': 447,
+      'compiled': true,
+      'coverage': {
+        'hits': [],
+        'misses': [11]
+      }
+    },
+    reportLines: true,
+  ),
   resumeIsolate,
   hasStoppedAtBreakpoint,
-  (VmService service, IsolateRef isolateRef) async {
-    final isolateId = isolateRef.id!;
-    final isolate = await service.getIsolate(isolateId);
-    final stack = await service.getStack(isolateId);
-
-    // Make sure we are in the right place.
-    expect(stack.frames!.length, greaterThanOrEqualTo(1));
-    expect(stack.frames![0].function!.name, 'testFunction');
-
-    final Library root =
-        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
-    FuncRef funcRef =
-        root.functions!.singleWhere((f) => f.name == 'leafFunction');
-    Func func = await service.getObject(isolateId, funcRef.id!) as Func;
-
-    var expectedRange = {
+  coverageTest(
+    {
       'scriptIndex': 0,
       'startPos': 397,
       'endPos': 447,
@@ -94,21 +104,22 @@
         'hits': [397],
         'misses': []
       }
-    };
-
-    final location = func.location!;
-    final report = await service.getSourceReport(
-        isolateId, [SourceReportKind.kCoverage],
-        scriptId: location.script!.id,
-        tokenPos: location.tokenPos,
-        endTokenPos: location.endTokenPos,
-        forceCompile: true);
-    expect(report.ranges!.length, 1);
-    expect(report.ranges![0].toJson(), expectedRange);
-    expect(report.scripts!.length, 1);
-    expect(
-        report.scripts![0].uri, endsWith('coverage_leaf_function_test.dart'));
-  },
+    },
+    reportLines: false,
+  ),
+  coverageTest(
+    {
+      'scriptIndex': 0,
+      'startPos': 397,
+      'endPos': 447,
+      'compiled': true,
+      'coverage': {
+        'hits': [11],
+        'misses': []
+      }
+    },
+    reportLines: true,
+  ),
 ];
 
 main([args = const <String>[]]) => runIsolateTests(
diff --git a/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart b/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
index c69323d..fb97b82 100644
--- a/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
+++ b/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
@@ -2,6 +2,11 @@
 // for 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:developer';
+import 'dart:io';
 import 'dart:isolate';
 import 'package:test/test.dart';
 import 'package:vm_service/vm_service.dart' as service;
@@ -9,31 +14,33 @@
 import 'common/service_test_common.dart';
 import 'common/test_helper.dart';
 
-foo(void _) async {
-  print('non system isolate started');
-  while (true) {}
-}
-
 testMain() async {
-  await Isolate.spawn<void>(foo, null);
-  print('started system isolate main');
-  while (true) {}
+  await Isolate.spawnUri(Platform.script, ['--selftest'], null,
+      debugName: 'foo');
 }
 
-var tests = <VMTest>[
-  (service.VmService service) async {
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (service.VmService service, _) async {
     final vm = await service.getVM();
     expect(vm.isolates!.length, 1);
     expect(vm.isolates!.first.name, 'foo');
     expect(vm.systemIsolates!.length, greaterThanOrEqualTo(1));
     expect(vm.systemIsolates!.where((e) => e.name == 'main').isNotEmpty, true);
-  }
+  },
+  resumeIsolate,
 ];
 
-main([args = const <String>[]]) => runVMTests(
-      args,
-      tests,
-      'mark_main_isolate_as_system_isolate_test.dart',
-      testeeConcurrent: testMain,
-      extraArgs: ['--mark-main-isolate-as-system-isolate'],
-    );
+main([args = const <String>[]]) {
+  if (args.length > 0 && args[0] == '--selftest') {
+    debugger();
+    return;
+  }
+  return runIsolateTests(
+    args,
+    tests,
+    'mark_main_isolate_as_system_isolate_test.dart',
+    testeeConcurrent: testMain,
+    extraArgs: ['--mark-main-isolate-as-system-isolate'],
+  );
+}
diff --git a/pkg/vm_snapshot_analysis/test/utils.dart b/pkg/vm_snapshot_analysis/test/utils.dart
index 1163ae7..0d52b80 100644
--- a/pkg/vm_snapshot_analysis/test/utils.dart
+++ b/pkg/vm_snapshot_analysis/test/utils.dart
@@ -8,16 +8,15 @@
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
-final dart2native = () {
+final dartCompile = () {
   final sdkBin = path.dirname(Platform.executable);
-  final dart2native =
-      path.join(sdkBin, Platform.isWindows ? 'dart2native.bat' : 'dart2native');
+  final dartCmd = path.join(sdkBin, Platform.isWindows ? 'dart.exe' : 'dart');
 
-  if (!File(dart2native).existsSync()) {
-    throw 'Failed to locate dart2native in the SDK';
+  if (!File(dartCmd).existsSync()) {
+    throw 'Failed to locate `dart` in the SDK';
   }
 
-  return path.canonicalize(dart2native);
+  return path.canonicalize(dartCmd);
 }();
 
 class AotSnapshot {
@@ -61,6 +60,8 @@
     ];
 
     final args = [
+      'compile',
+      'exe',
       '-o',
       snapshot.outputBinary,
       '--packages=$packages',
@@ -69,12 +70,12 @@
     ];
 
     // Compile input.dart to native and output instruction sizes.
-    final result = await Process.run(dart2native, args);
+    final result = await Process.run(dartCompile, args);
 
     expect(result.exitCode, equals(0), reason: '''
 Compilation completed with exit code ${result.exitCode}.
 
-Command line: $dart2native ${args.join(' ')}
+Command line: $dartCompile ${args.join(' ')}
 
 stdout: ${result.stdout}
 stderr: ${result.stderr}
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index 3016678..dd25e81 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -212,7 +212,10 @@
 
     if (is_fuchsia) {
       # safe-stack does not work with the interpreter.
-      cflags += [ "-fno-sanitize=safe-stack" ]
+      cflags += [
+        "-fno-sanitize=safe-stack",
+        "-Wno-deprecated-copy",
+      ]
     }
   }
 }
diff --git a/runtime/PRESUBMIT.py b/runtime/PRESUBMIT.py
index 210b951..2077f5a 100644
--- a/runtime/PRESUBMIT.py
+++ b/runtime/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -5,8 +6,8 @@
 import os
 import cpplint
 import re
-import StringIO
 
+USE_PYTHON3 = True
 
 # memcpy does not handle overlapping memory regions. Even though this
 # is well documented it seems to be used in error quite often. To avoid
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 438cec8..167ad39 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -131,6 +131,10 @@
     sources = [
       "elf_loader.cc",
       "elf_loader.h",
+      "virtual_memory.h",
+      "virtual_memory_fuchsia.cc",
+      "virtual_memory_posix.cc",
+      "virtual_memory_win.cc",
     ]
     deps = invoker.deps
   }
@@ -905,6 +909,7 @@
     ":dart_snapshot_cc",
     ":standalone_dart_io",
     "..:libdart_precompiler",
+    "//third_party/boringssl",  # for secure_socket_utils_test
     "//third_party/zlib",
   ]
   include_dirs = [
@@ -972,9 +977,9 @@
   }
 }
 
-shared_library("test_extension") {
+shared_library("entrypoints_verification_test") {
   deps = [ ":dart" ]
-  sources = [ "test_extension.c" ]
+  sources = [ "entrypoints_verification_test.cc" ]
   include_dirs = [ ".." ]
   defines = [
     # The only effect of DART_SHARED_LIB is to export the Dart API.
@@ -984,26 +989,7 @@
     cflags = [ "-fPIC" ]
   }
   if (is_win) {
-    sources += [ "test_extension_dllmain_win.cc" ]
-    libs = [ "dart.lib" ]
-    abs_root_out_dir = rebase_path(root_out_dir)
-    ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
-  }
-}
-
-shared_library("entrypoints_verification_test_extension") {
-  deps = [ ":dart" ]
-  sources = [ "entrypoints_verification_test_extension.cc" ]
-  include_dirs = [ ".." ]
-  defines = [
-    # The only effect of DART_SHARED_LIB is to export the Dart API.
-    "DART_SHARED_LIB",
-  ]
-  if (is_linux || is_android) {
-    cflags = [ "-fPIC" ]
-  }
-  if (is_win) {
-    sources += [ "entrypoints_verification_test_extension_dllmain_win.cc" ]
+    # TODO(dartbug.com/40579): This wrongly links in dart.exe on precompiled.
     libs = [ "dart.lib" ]
     abs_root_out_dir = rebase_path(root_out_dir)
     ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
@@ -1065,26 +1051,6 @@
   }
 }
 
-shared_library("sample_extension") {
-  deps = [ ":dart" ]
-  sources = [ "../../samples/sample_extension/sample_extension.cc" ]
-  include_dirs = [ ".." ]
-  defines = [
-    # The only effect of DART_SHARED_LIB is to export the Dart API.
-    "DART_SHARED_LIB",
-  ]
-  if (is_linux || is_android) {
-    cflags = [ "-fPIC" ]
-  }
-  if (is_win) {
-    sources +=
-        [ "../../samples/sample_extension/sample_extension_dllmain_win.cc" ]
-    libs = [ "dart.lib" ]
-    abs_root_out_dir = rebase_path(root_out_dir)
-    ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
-  }
-}
-
 # DartLibFuzzer only "exists" for restricted configurations.
 if (defined(is_linux) && is_linux && defined(is_asan) && is_asan &&
     (dart_target_arch == "x64" || dart_target_arch == "arm64")) {
diff --git a/runtime/bin/builtin_impl_sources.gni b/runtime/bin/builtin_impl_sources.gni
index d1f7d95..470f0b5 100644
--- a/runtime/bin/builtin_impl_sources.gni
+++ b/runtime/bin/builtin_impl_sources.gni
@@ -4,7 +4,7 @@
 
 # This file contains all C++ sources for the dart:_builtin library and
 # some of the C++ sources for the dart:io library.  The rest are in
-# io_impl_sources.gypi.
+# io_impl_sources.gni.
 
 builtin_impl_sources = [
   "crypto.cc",
@@ -25,13 +25,6 @@
   "directory_win.cc",
   "exe_utils.cc",
   "exe_utils.h",
-  "extensions.cc",
-  "extensions.h",
-  "extensions_android.cc",
-  "extensions_fuchsia.cc",
-  "extensions_linux.cc",
-  "extensions_macos.cc",
-  "extensions_win.cc",
   "fdutils.h",
   "fdutils_android.cc",
   "fdutils_fuchsia.cc",
diff --git a/runtime/bin/dartdev_isolate.cc b/runtime/bin/dartdev_isolate.cc
index 468ef64..62701b7 100644
--- a/runtime/bin/dartdev_isolate.cc
+++ b/runtime/bin/dartdev_isolate.cc
@@ -36,6 +36,7 @@
 DartDevIsolate::DartDevRunner DartDevIsolate::runner_ =
     DartDevIsolate::DartDevRunner();
 bool DartDevIsolate::should_run_dart_dev_ = false;
+bool DartDevIsolate::print_usage_error_ = false;
 Monitor* DartDevIsolate::DartDevRunner::monitor_ = new Monitor();
 DartDevIsolate::DartDev_Result DartDevIsolate::DartDevRunner::result_ =
     DartDevIsolate::DartDev_Result_Unknown;
@@ -98,6 +99,13 @@
   package_config_override_ = packages_file;
   script_ = script;
 
+  // We've encountered an error during preliminary argument parsing so we'll
+  // output the standard help message and exit with an error code.
+  if (print_usage_error_) {
+    dart_options_->Reset();
+    dart_options_->AddArgument("--help");
+  }
+
   MonitorLocker locker(monitor_);
   int result = Thread::Start("DartDev Runner", RunCallback,
                              reinterpret_cast<uword>(this));
@@ -170,7 +178,9 @@
 
       // If we're given a non-zero exit code, DartDev is signaling for us to
       // shutdown.
-      Process::SetGlobalExitCode(dartdev_exit_code);
+      int32_t exit_code =
+          print_usage_error_ ? kErrorExitCode : dartdev_exit_code;
+      Process::SetGlobalExitCode(exit_code);
 
       // If DartDev hasn't signaled for us to do anything else, we can assume
       // there's nothing else for the VM to run and that we can exit.
diff --git a/runtime/bin/dartdev_isolate.h b/runtime/bin/dartdev_isolate.h
index a25664c..a6382f6 100644
--- a/runtime/bin/dartdev_isolate.h
+++ b/runtime/bin/dartdev_isolate.h
@@ -39,6 +39,11 @@
     should_run_dart_dev_ = enable;
   }
 
+  static void PrintUsageErrorOnRun() {
+    set_should_run_dart_dev(true);
+    print_usage_error_ = true;
+  }
+
   static bool should_run_dart_dev() { return should_run_dart_dev_; }
 
   // Attempts to find the path of the DartDev kernel file.
@@ -95,6 +100,7 @@
 
   static DartDevRunner runner_;
   static bool should_run_dart_dev_;
+  static bool print_usage_error_;
 
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(DartDevIsolate);
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 9f60f2a..560c7cd 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -6,7 +6,6 @@
 
 #include "bin/crypto.h"
 #include "bin/directory.h"
-#include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/io_buffer.h"
 #include "bin/namespace.h"
@@ -34,7 +33,6 @@
 
 const char* DartUtils::original_working_directory = NULL;
 const char* const DartUtils::kDartScheme = "dart:";
-const char* const DartUtils::kDartExtensionScheme = "dart-ext:";
 const char* const DartUtils::kAsyncLibURL = "dart:async";
 const char* const DartUtils::kBuiltinLibURL = "dart:_builtin";
 const char* const DartUtils::kCoreLibURL = "dart:core";
@@ -227,14 +225,6 @@
   return (strncmp(url_name, kHttpScheme, kHttpSchemeLen) == 0);
 }
 
-bool DartUtils::IsDartExtensionSchemeURL(const char* url_name) {
-  static const intptr_t kDartExtensionSchemeLen = strlen(kDartExtensionScheme);
-  // If the URL starts with "dart-ext:" then it is considered as a special
-  // extension library URL which is handled differently from other URLs.
-  return (strncmp(url_name, kDartExtensionScheme, kDartExtensionSchemeLen) ==
-          0);
-}
-
 bool DartUtils::IsDartIOLibURL(const char* url_name) {
   return (strcmp(url_name, kIOLibURL) == 0);
 }
@@ -931,6 +921,16 @@
   return cobject;
 }
 
+Dart_CObject* CObject::NewNativePointer(intptr_t ptr,
+                                        intptr_t size,
+                                        Dart_HandleFinalizer callback) {
+  Dart_CObject* cobject = New(Dart_CObject_kNativePointer);
+  cobject->value.as_native_pointer.ptr = ptr;
+  cobject->value.as_native_pointer.size = size;
+  cobject->value.as_native_pointer.callback = callback;
+  return cobject;
+}
+
 Dart_CObject* CObject::NewIOBuffer(int64_t length) {
   // Make sure that we do not have an integer overflow here. Actual check
   // against max elements will be done at the time of writing, as the constant
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 7ff1580..6fc2d3f 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -146,7 +146,6 @@
                                     const char* name,
                                     const char* val);
   static bool IsDartSchemeURL(const char* url_name);
-  static bool IsDartExtensionSchemeURL(const char* url_name);
   static bool IsDartIOLibURL(const char* url_name);
   static bool IsDartCLILibURL(const char* url_name);
   static bool IsDartHttpLibURL(const char* url_name);
@@ -253,7 +252,6 @@
   static const char* original_working_directory;
 
   static const char* const kDartScheme;
-  static const char* const kDartExtensionScheme;
   static const char* const kAsyncLibURL;
   static const char* const kBuiltinLibURL;
   static const char* const kCoreLibURL;
@@ -351,6 +349,9 @@
                                              uint8_t* data,
                                              void* peer,
                                              Dart_HandleFinalizer callback);
+  static Dart_CObject* NewNativePointer(intptr_t ptr,
+                                        intptr_t size,
+                                        Dart_HandleFinalizer callback);
 
   static Dart_CObject* NewIOBuffer(int64_t length);
   static void ShrinkIOBuffer(Dart_CObject* cobject, int64_t new_length);
@@ -579,6 +580,20 @@
   DISALLOW_COPY_AND_ASSIGN(CObjectExternalUint8Array);
 };
 
+class CObjectNativePointer : public CObject {
+ public:
+  DECLARE_COBJECT_CONSTRUCTORS(NativePointer)
+
+  intptr_t Ptr() const { return cobject_->value.as_native_pointer.ptr; }
+  intptr_t Size() const { return cobject_->value.as_native_pointer.size; }
+  Dart_HandleFinalizer Callback() const {
+    return cobject_->value.as_native_pointer.callback;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CObjectNativePointer);
+};
+
 class ScopedBlockingCall {
  public:
   ScopedBlockingCall() { Dart_ThreadDisableProfiling(); }
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index a5710f1..b6c27fa 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -221,6 +221,7 @@
       *exit_code = kDartFrontendErrorExitCode;
       break;
     case Dart_KernelCompilationStatus_Unknown:
+    case Dart_KernelCompilationStatus_MsgFailed:
       free(result.kernel);
       *error = result.error;  // Copy error message.
       *exit_code = kErrorExitCode;
diff --git a/runtime/bin/elf_loader.cc b/runtime/bin/elf_loader.cc
index 43b152d..a5ff8c0 100644
--- a/runtime/bin/elf_loader.cc
+++ b/runtime/bin/elf_loader.cc
@@ -2,13 +2,9 @@
 // for 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 <bin/elf_loader.h>
-#include <bin/file.h>
-#include <platform/elf.h>
-#include <platform/globals.h>
-#include <vm/cpu.h>
-#include <vm/virtual_memory.h>
+#include "bin/elf_loader.h"
 
+#include "platform/globals.h"
 #if defined(DART_HOST_OS_FUCHSIA)
 #include <sys/mman.h>
 #endif
@@ -16,6 +12,10 @@
 #include <memory>
 #include <utility>
 
+#include "bin/file.h"
+#include "bin/virtual_memory.h"
+#include "platform/elf.h"
+
 namespace dart {
 namespace bin {
 
@@ -369,7 +369,6 @@
 bool LoadedElf::LoadSegments() {
   // Calculate the total amount of virtual memory needed.
   uword total_memory = 0;
-  uword maximum_alignment = PageSize();
   for (uword i = 0; i < header_.num_program_headers; ++i) {
     const dart::elf::ProgramHeader header = program_table_[i];
 
@@ -381,14 +380,12 @@
         total_memory);
     CHECK_ERROR(Utils::IsPowerOfTwo(header.alignment),
                 "Alignment must be a power of two.");
-    maximum_alignment =
-        Utils::Maximum(maximum_alignment, static_cast<uword>(header.alignment));
   }
   total_memory = Utils::RoundUp(total_memory, PageSize());
 
-  base_.reset(VirtualMemory::AllocateAligned(
-      total_memory, /*alignment=*/maximum_alignment,
-      /*is_executable=*/false, "dart-compiled-image"));
+  base_.reset(VirtualMemory::Allocate(total_memory,
+                                      /*is_executable=*/false,
+                                      "dart-compiled-image"));
   CHECK_ERROR(base_ != nullptr, "Could not reserve virtual memory.");
 
   for (uword i = 0; i < header_.num_program_headers; ++i) {
diff --git a/runtime/bin/entrypoints_verification_test.cc b/runtime/bin/entrypoints_verification_test.cc
new file mode 100644
index 0000000..869dfd6
--- /dev/null
+++ b/runtime/bin/entrypoints_verification_test.cc
@@ -0,0 +1,173 @@
+// 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.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+// TODO(dartbug.com/40579): This requires static linking to either link
+// dart.exe or dart_precompiled_runtime.exe on Windows.
+// The sample currently fails on Windows in AOT mode.
+#include "include/dart_api.h"
+#include "include/dart_native_api.h"
+
+#define CHECK(H)                                                               \
+  do {                                                                         \
+    Dart_Handle __handle__ = H;                                                \
+    if (Dart_IsError(__handle__)) {                                            \
+      const char* message = Dart_GetError(__handle__);                         \
+      fprintf(stderr, "Check \"" #H "\" failed: %s", message);                 \
+      abort();                                                                 \
+    }                                                                          \
+  } while (false)
+
+#define ASSERT(E)                                                              \
+  if (!(E)) {                                                                  \
+    fprintf(stderr, "Assertion \"" #E "\" failed at %s:%d!\n", __FILE__,       \
+            __LINE__);                                                         \
+    abort();                                                                   \
+  }
+
+static bool is_dart_precompiled_runtime = true;
+
+// Some invalid accesses are allowed in AOT since we don't retain @pragma
+// annotations. Therefore we skip the negative tests in AOT.
+#define FAIL(name, result)                                                     \
+  if (!is_dart_precompiled_runtime) {                                          \
+    Fail(name, result);                                                        \
+  }
+
+void Fail(const char* name, Dart_Handle result) {
+  ASSERT(Dart_IsApiError(result));
+  const char* error = Dart_GetError(result);
+  ASSERT(strstr(error, name));
+  ASSERT(strstr(error, "It is illegal to access"));
+}
+
+#define FAIL_INVOKE_FIELD(name, result)                                        \
+  if (!is_dart_precompiled_runtime) {                                          \
+    FailInvokeField(name, result);                                             \
+  }
+
+static void FailInvokeField(const char* name, Dart_Handle result) {
+  ASSERT(Dart_IsApiError(result));
+  const char* error = Dart_GetError(result);
+  ASSERT(strstr(error, name));
+  ASSERT(strstr(error, "Entry-points do not allow invoking fields"));
+}
+
+static void FailClosurizeConstructor(const char* name, Dart_Handle result) {
+  ASSERT(Dart_IsUnhandledExceptionError(result));
+  const char* error = Dart_GetError(result);
+  ASSERT(strstr(error, name));
+  ASSERT(strstr(error, "No static getter"));
+}
+
+static void TestFields(Dart_Handle target) {
+  FAIL("fld0", Dart_GetField(target, Dart_NewStringFromCString("fld0")));
+  FAIL("fld0",
+       Dart_SetField(target, Dart_NewStringFromCString("fld0"), Dart_Null()));
+
+  FAIL_INVOKE_FIELD(
+      "fld0",
+      Dart_Invoke(target, Dart_NewStringFromCString("fld0"), 0, nullptr));
+
+  CHECK(Dart_GetField(target, Dart_NewStringFromCString("fld1")));
+  CHECK(Dart_SetField(target, Dart_NewStringFromCString("fld1"), Dart_Null()));
+  FAIL_INVOKE_FIELD(
+      "fld1",
+      Dart_Invoke(target, Dart_NewStringFromCString("fld1"), 0, nullptr));
+
+  CHECK(Dart_GetField(target, Dart_NewStringFromCString("fld2")));
+  FAIL("fld2",
+       Dart_SetField(target, Dart_NewStringFromCString("fld2"), Dart_Null()));
+  FAIL_INVOKE_FIELD(
+      "fld2",
+      Dart_Invoke(target, Dart_NewStringFromCString("fld2"), 0, nullptr));
+
+  FAIL("fld3", Dart_GetField(target, Dart_NewStringFromCString("fld3")));
+  CHECK(Dart_SetField(target, Dart_NewStringFromCString("fld3"), Dart_Null()));
+  FAIL_INVOKE_FIELD(
+      "fld3",
+      Dart_Invoke(target, Dart_NewStringFromCString("fld3"), 0, nullptr));
+}
+
+DART_EXPORT void RunTests() {
+  is_dart_precompiled_runtime = Dart_IsPrecompiledRuntime();
+
+  Dart_Handle lib = Dart_RootLibrary();
+
+  //////// Test allocation and constructor invocation.
+
+  FAIL("C", Dart_GetClass(lib, Dart_NewStringFromCString("C")));
+
+  Dart_Handle D_class = Dart_GetClass(lib, Dart_NewStringFromCString("D"));
+  CHECK(D_class);
+
+  CHECK(Dart_Allocate(D_class));
+
+  FAIL("D.", Dart_New(D_class, Dart_Null(), 0, nullptr));
+
+  CHECK(Dart_New(D_class, Dart_NewStringFromCString("defined"), 0, nullptr));
+  Dart_Handle D =
+      Dart_New(D_class, Dart_NewStringFromCString("fact"), 0, nullptr);
+  CHECK(D);
+
+  //////// Test actions against methods
+
+  FailClosurizeConstructor(
+      "defined", Dart_GetField(D_class, Dart_NewStringFromCString("defined")));
+  FailClosurizeConstructor(
+      "fact", Dart_GetField(D_class, Dart_NewStringFromCString("fact")));
+
+  FAIL("fn0", Dart_Invoke(D, Dart_NewStringFromCString("fn0"), 0, nullptr));
+
+  CHECK(Dart_Invoke(D, Dart_NewStringFromCString("fn1"), 0, nullptr));
+  FAIL("fn1", Dart_Invoke(D, Dart_NewStringFromCString("fn1_get"), 0, nullptr));
+  CHECK(Dart_Invoke(D, Dart_NewStringFromCString("fn1_call"), 0, nullptr));
+
+  FAIL("fn0", Dart_GetField(D, Dart_NewStringFromCString("fn0")));
+
+  CHECK(Dart_GetField(D, Dart_NewStringFromCString("fn1")));
+  CHECK(Dart_GetField(D, Dart_NewStringFromCString("fn1_get")));
+  FAIL("fn1", Dart_GetField(D, Dart_NewStringFromCString("fn1_call")));
+
+  FAIL("fn2",
+       Dart_Invoke(D_class, Dart_NewStringFromCString("fn2"), 0, nullptr));
+
+  CHECK(Dart_Invoke(D_class, Dart_NewStringFromCString("fn3"), 0, nullptr));
+  CHECK(
+      Dart_Invoke(D_class, Dart_NewStringFromCString("fn3_call"), 0, nullptr));
+  FAIL("fn3",
+       Dart_Invoke(D_class, Dart_NewStringFromCString("fn3_get"), 0, nullptr));
+
+  FAIL("fn2", Dart_GetField(D_class, Dart_NewStringFromCString("fn2")));
+
+  CHECK(Dart_GetField(D_class, Dart_NewStringFromCString("fn3")));
+  FAIL("fn3_call",
+       Dart_GetField(D_class, Dart_NewStringFromCString("fn3_call")));
+  CHECK(Dart_GetField(D_class, Dart_NewStringFromCString("fn3_get")));
+
+  FAIL("fn0", Dart_Invoke(lib, Dart_NewStringFromCString("fn0"), 0, nullptr));
+
+  CHECK(Dart_Invoke(lib, Dart_NewStringFromCString("fn1"), 0, nullptr));
+  FAIL("fn1",
+       Dart_Invoke(lib, Dart_NewStringFromCString("fn1_get"), 0, nullptr));
+  CHECK(Dart_Invoke(lib, Dart_NewStringFromCString("fn1_call"), 0, nullptr));
+
+  FAIL("fn0", Dart_GetField(lib, Dart_NewStringFromCString("fn0")));
+
+  CHECK(Dart_GetField(lib, Dart_NewStringFromCString("fn1")));
+  CHECK(Dart_GetField(lib, Dart_NewStringFromCString("fn1_get")));
+  FAIL("fn1", Dart_GetField(lib, Dart_NewStringFromCString("fn1_call")));
+
+  //////// Test actions against fields
+
+  TestFields(D);
+
+  Dart_Handle F_class = Dart_GetClass(lib, Dart_NewStringFromCString("F"));
+  TestFields(F_class);
+
+  TestFields(lib);
+}
diff --git a/runtime/bin/entrypoints_verification_test_extension.cc b/runtime/bin/entrypoints_verification_test_extension.cc
deleted file mode 100644
index c2c9adb..0000000
--- a/runtime/bin/entrypoints_verification_test_extension.cc
+++ /dev/null
@@ -1,194 +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.
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "./include/dart_api.h"
-#include "./include/dart_native_api.h"
-
-#define CHECK(H)                                                               \
-  do {                                                                         \
-    Dart_Handle __handle__ = H;                                                \
-    if (Dart_IsError(__handle__)) {                                            \
-      const char* message = Dart_GetError(__handle__);                         \
-      fprintf(stderr, "Check \"" #H "\" failed: %s", message);                 \
-      abort();                                                                 \
-    }                                                                          \
-  } while (false)
-
-#define ASSERT(E)                                                              \
-  if (!(E)) {                                                                  \
-    fprintf(stderr, "Assertion \"" #E "\" failed at %s:%d!\n", __FILE__,       \
-            __LINE__);                                                         \
-    abort();                                                                   \
-  }
-
-bool isDartPrecompiledRuntime = true;
-
-// Some invalid accesses are allowed in AOT since we don't retain @pragma
-// annotations. Therefore we skip the negative tests in AOT.
-#define FAIL(name, result)                                                     \
-  if (!isDartPrecompiledRuntime) {                                             \
-    Fail(name, result);                                                        \
-  }
-
-void Fail(const char* name, Dart_Handle result) {
-  ASSERT(Dart_IsApiError(result));
-  const char* error = Dart_GetError(result);
-  ASSERT(strstr(error, name));
-  ASSERT(strstr(error, "It is illegal to access"));
-}
-
-#define FAIL_INVOKE_FIELD(name, result)                                        \
-  if (!isDartPrecompiledRuntime) {                                             \
-    FailInvokeField(name, result);                                             \
-  }
-
-void FailInvokeField(const char* name, Dart_Handle result) {
-  ASSERT(Dart_IsApiError(result));
-  const char* error = Dart_GetError(result);
-  ASSERT(strstr(error, name));
-  ASSERT(strstr(error, "Entry-points do not allow invoking fields"));
-}
-
-void FailClosurizeConstructor(const char* name, Dart_Handle result) {
-  ASSERT(Dart_IsUnhandledExceptionError(result));
-  const char* error = Dart_GetError(result);
-  ASSERT(strstr(error, name));
-  ASSERT(strstr(error, "No static getter"));
-}
-
-void TestFields(Dart_Handle target) {
-  FAIL("fld0", Dart_GetField(target, Dart_NewStringFromCString("fld0")));
-  FAIL("fld0",
-       Dart_SetField(target, Dart_NewStringFromCString("fld0"), Dart_Null()));
-
-  FAIL_INVOKE_FIELD(
-      "fld0",
-      Dart_Invoke(target, Dart_NewStringFromCString("fld0"), 0, nullptr));
-
-  CHECK(Dart_GetField(target, Dart_NewStringFromCString("fld1")));
-  CHECK(Dart_SetField(target, Dart_NewStringFromCString("fld1"), Dart_Null()));
-  FAIL_INVOKE_FIELD(
-      "fld1",
-      Dart_Invoke(target, Dart_NewStringFromCString("fld1"), 0, nullptr));
-
-  CHECK(Dart_GetField(target, Dart_NewStringFromCString("fld2")));
-  FAIL("fld2",
-       Dart_SetField(target, Dart_NewStringFromCString("fld2"), Dart_Null()));
-  FAIL_INVOKE_FIELD(
-      "fld2",
-      Dart_Invoke(target, Dart_NewStringFromCString("fld2"), 0, nullptr));
-
-  FAIL("fld3", Dart_GetField(target, Dart_NewStringFromCString("fld3")));
-  CHECK(Dart_SetField(target, Dart_NewStringFromCString("fld3"), Dart_Null()));
-  FAIL_INVOKE_FIELD(
-      "fld3",
-      Dart_Invoke(target, Dart_NewStringFromCString("fld3"), 0, nullptr));
-}
-
-void RunTests(Dart_NativeArguments arguments) {
-  Dart_Handle lib = Dart_RootLibrary();
-
-  //////// Test allocation and constructor invocation.
-
-  FAIL("C", Dart_GetClass(lib, Dart_NewStringFromCString("C")));
-
-  Dart_Handle D_class = Dart_GetClass(lib, Dart_NewStringFromCString("D"));
-  CHECK(D_class);
-
-  CHECK(Dart_Allocate(D_class));
-
-  FAIL("D.", Dart_New(D_class, Dart_Null(), 0, nullptr));
-
-  CHECK(Dart_New(D_class, Dart_NewStringFromCString("defined"), 0, nullptr));
-  Dart_Handle D =
-      Dart_New(D_class, Dart_NewStringFromCString("fact"), 0, nullptr);
-  CHECK(D);
-
-  //////// Test actions against methods
-
-  FailClosurizeConstructor(
-      "defined", Dart_GetField(D_class, Dart_NewStringFromCString("defined")));
-  FailClosurizeConstructor(
-      "fact", Dart_GetField(D_class, Dart_NewStringFromCString("fact")));
-
-  FAIL("fn0", Dart_Invoke(D, Dart_NewStringFromCString("fn0"), 0, nullptr));
-
-  CHECK(Dart_Invoke(D, Dart_NewStringFromCString("fn1"), 0, nullptr));
-  FAIL("fn1", Dart_Invoke(D, Dart_NewStringFromCString("fn1_get"), 0, nullptr));
-  CHECK(Dart_Invoke(D, Dart_NewStringFromCString("fn1_call"), 0, nullptr));
-
-  FAIL("fn0", Dart_GetField(D, Dart_NewStringFromCString("fn0")));
-
-  CHECK(Dart_GetField(D, Dart_NewStringFromCString("fn1")));
-  CHECK(Dart_GetField(D, Dart_NewStringFromCString("fn1_get")));
-  FAIL("fn1", Dart_GetField(D, Dart_NewStringFromCString("fn1_call")));
-
-  FAIL("fn2",
-       Dart_Invoke(D_class, Dart_NewStringFromCString("fn2"), 0, nullptr));
-
-  CHECK(Dart_Invoke(D_class, Dart_NewStringFromCString("fn3"), 0, nullptr));
-  CHECK(
-      Dart_Invoke(D_class, Dart_NewStringFromCString("fn3_call"), 0, nullptr));
-  FAIL("fn3",
-       Dart_Invoke(D_class, Dart_NewStringFromCString("fn3_get"), 0, nullptr));
-
-  FAIL("fn2", Dart_GetField(D_class, Dart_NewStringFromCString("fn2")));
-
-  CHECK(Dart_GetField(D_class, Dart_NewStringFromCString("fn3")));
-  FAIL("fn3_call",
-       Dart_GetField(D_class, Dart_NewStringFromCString("fn3_call")));
-  CHECK(Dart_GetField(D_class, Dart_NewStringFromCString("fn3_get")));
-
-  FAIL("fn0", Dart_Invoke(lib, Dart_NewStringFromCString("fn0"), 0, nullptr));
-
-  CHECK(Dart_Invoke(lib, Dart_NewStringFromCString("fn1"), 0, nullptr));
-  FAIL("fn1",
-       Dart_Invoke(lib, Dart_NewStringFromCString("fn1_get"), 0, nullptr));
-  CHECK(Dart_Invoke(lib, Dart_NewStringFromCString("fn1_call"), 0, nullptr));
-
-  FAIL("fn0", Dart_GetField(lib, Dart_NewStringFromCString("fn0")));
-
-  CHECK(Dart_GetField(lib, Dart_NewStringFromCString("fn1")));
-  CHECK(Dart_GetField(lib, Dart_NewStringFromCString("fn1_get")));
-  FAIL("fn1", Dart_GetField(lib, Dart_NewStringFromCString("fn1_call")));
-
-  //////// Test actions against fields
-
-  TestFields(D);
-
-  Dart_Handle F_class = Dart_GetClass(lib, Dart_NewStringFromCString("F"));
-  TestFields(F_class);
-
-  TestFields(lib);
-}
-
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope) {
-  if (auto_setup_scope == NULL) {
-    return NULL;
-  }
-  *auto_setup_scope = true;
-  return RunTests;
-}
-
-DART_EXPORT Dart_Handle
-entrypoints_verification_test_extension_Init(Dart_Handle parent_library) {
-  isDartPrecompiledRuntime = Dart_IsPrecompiledRuntime();
-
-  if (Dart_IsError(parent_library)) {
-    return parent_library;
-  }
-
-  Dart_Handle result_code =
-      Dart_SetNativeResolver(parent_library, ResolveName, NULL);
-  if (Dart_IsError(result_code)) {
-    return result_code;
-  }
-
-  return Dart_Null();
-}
diff --git a/runtime/bin/entrypoints_verification_test_extension_dllmain_win.cc b/runtime/bin/entrypoints_verification_test_extension_dllmain_win.cc
deleted file mode 100644
index 8ff69ee..0000000
--- a/runtime/bin/entrypoints_verification_test_extension_dllmain_win.cc
+++ /dev/null
@@ -1,15 +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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_WINDOWS)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>  // NOLINT
-
-BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved) {
-  return true;
-}
-
-#endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/bin/eventhandler.h b/runtime/bin/eventhandler.h
index c6c8686..e2635e0 100644
--- a/runtime/bin/eventhandler.h
+++ b/runtime/bin/eventhandler.h
@@ -32,6 +32,7 @@
   kSetEventMaskCommand = 12,
   kListeningSocket = 16,
   kPipe = 17,
+  kSignalSocket = 18,
 };
 
 // clang-format off
@@ -54,6 +55,8 @@
      (data & ~(1 << kInEvent | 1 << kOutEvent | 1 << kCloseEvent)) == 0)
 #define IS_LISTENING_SOCKET(data)                                              \
     ((data & (1 << kListeningSocket)) != 0)  // NOLINT
+#define IS_SIGNAL_SOCKET(data)                                                 \
+    ((data & (1 << kSignalSocket)) != 0)  // NOLINT
 #define TOKEN_COUNT(data) (data & ((1 << kCloseCommand) - 1))
 // clang-format on
 
diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc
index b6dfc17..65ec9eb 100644
--- a/runtime/bin/eventhandler_android.cc
+++ b/runtime/bin/eventhandler_android.cc
@@ -20,6 +20,7 @@
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
 #include "bin/lockers.h"
+#include "bin/process.h"
 #include "bin/socket.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
@@ -212,6 +213,9 @@
       } else if (IS_COMMAND(msg[i].data, kCloseCommand)) {
         // Close the socket and free system resources and move on to next
         // message.
+        if (IS_SIGNAL_SOCKET(msg[i].data)) {
+          Process::ClearSignalHandlerByFd(di->fd(), socket->isolate_port());
+        }
         intptr_t old_mask = di->Mask();
         Dart_Port port = msg[i].dart_port;
         if (port != ILLEGAL_PORT) {
diff --git a/runtime/bin/eventhandler_linux.cc b/runtime/bin/eventhandler_linux.cc
index ac9deb5..fd8297c 100644
--- a/runtime/bin/eventhandler_linux.cc
+++ b/runtime/bin/eventhandler_linux.cc
@@ -21,6 +21,7 @@
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
 #include "bin/lockers.h"
+#include "bin/process.h"
 #include "bin/socket.h"
 #include "bin/thread.h"
 #include "platform/syslog.h"
@@ -221,6 +222,9 @@
       } else if (IS_COMMAND(msg[i].data, kCloseCommand)) {
         // Close the socket and free system resources and move on to next
         // message.
+        if (IS_SIGNAL_SOCKET(msg[i].data)) {
+          Process::ClearSignalHandlerByFd(di->fd(), socket->isolate_port());
+        }
         intptr_t old_mask = di->Mask();
         Dart_Port port = msg[i].dart_port;
         if (port != ILLEGAL_PORT) {
diff --git a/runtime/bin/eventhandler_macos.cc b/runtime/bin/eventhandler_macos.cc
index ee8f0fb..e425b87 100644
--- a/runtime/bin/eventhandler_macos.cc
+++ b/runtime/bin/eventhandler_macos.cc
@@ -19,6 +19,7 @@
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
 #include "bin/lockers.h"
+#include "bin/process.h"
 #include "bin/socket.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
@@ -228,6 +229,9 @@
       } else if (IS_COMMAND(msg[i].data, kCloseCommand)) {
         // Close the socket and free system resources and move on to next
         // message.
+        if (IS_SIGNAL_SOCKET(msg[i].data)) {
+          Process::ClearSignalHandlerByFd(di->fd(), socket->isolate_port());
+        }
         intptr_t old_mask = di->Mask();
         Dart_Port port = msg[i].dart_port;
         if (port != ILLEGAL_PORT) {
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc
index abdba9a..2c254d8 100644
--- a/runtime/bin/eventhandler_win.cc
+++ b/runtime/bin/eventhandler_win.cc
@@ -17,6 +17,7 @@
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
 #include "bin/lockers.h"
+#include "bin/process.h"
 #include "bin/socket.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
@@ -1152,6 +1153,9 @@
         ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(handle);
         client_socket->Shutdown(SD_SEND);
       } else if (IS_COMMAND(msg->data, kCloseCommand)) {
+        if (IS_SIGNAL_SOCKET(msg->data)) {
+          Process::ClearSignalHandlerByFd(socket->fd(), socket->isolate_port());
+        }
         handle->SetPortAndMask(msg->dart_port, 0);
         handle->Close();
         socket->CloseFd();
diff --git a/runtime/bin/extensions.cc b/runtime/bin/extensions.cc
deleted file mode 100644
index b33896c..0000000
--- a/runtime/bin/extensions.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-// 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.
-
-#include "bin/extensions.h"
-
-#include <stdio.h>
-
-#include "bin/dartutils.h"
-#include "bin/file.h"
-#include "bin/platform.h"
-#include "bin/utils.h"
-#include "include/dart_api.h"
-#include "platform/assert.h"
-#include "platform/globals.h"
-#include "platform/utils.h"
-
-namespace dart {
-namespace bin {
-
-static char PathSeparator() {
-  const char* sep = File::PathSeparator();
-  ASSERT(strlen(sep) == 1);
-  return sep[0];
-}
-
-void* Extensions::MakePathAndResolve(const char* dir, const char* name) {
-  // First try to find the library with a suffix specifying the architecture.
-  {
-    const char* path_components[] = {
-        dir,
-        Platform::LibraryPrefix(),
-        name,
-        "-",
-        Platform::HostArchitecture(),  // arm
-        ".",
-        Platform::LibraryExtension(),  // so
-        NULL,
-    };
-    const char* library_file = Concatenate(path_components);
-    void* library_handle = LoadExtensionLibrary(library_file);
-    if (library_handle != NULL) {
-      return library_handle;
-    }
-  }
-
-  // Fall back on a library name without the suffix.
-  {
-    const char* path_components[] = {
-        dir,
-        Platform::LibraryPrefix(),
-        name,
-        ".",
-        Platform::LibraryExtension(),  // so
-        NULL,
-    };
-    const char* library_file = Concatenate(path_components);
-    return LoadExtensionLibrary(library_file);
-  }
-}
-
-// IMPORTANT: In the absolute path case, do not extract the filename and search
-// for that by passing it to LoadLibrary. That can lead to confusion in
-// which the absolute path is wrong, and a different version of the library is
-// loaded from the standard location.
-void* Extensions::ResolveAbsPathExtension(const char* extension_path) {
-  const char* last_slash = strrchr(extension_path, PathSeparator()) + 1;
-  char* name = Utils::StrDup(last_slash);
-  char* dir = Utils::StrNDup(extension_path, last_slash - extension_path);
-  void* library_handle = MakePathAndResolve(dir, name);
-  free(dir);
-  free(name);
-  return library_handle;
-}
-
-void* Extensions::ResolveExtension(const char* extension_directory,
-                                   const char* extension_name) {
-  // If the path following dart-ext is an absolute path, then only look for the
-  // library there.
-  if (File::IsAbsolutePath(extension_name)) {
-    return ResolveAbsPathExtension(extension_name);
-  }
-
-  // If the path following dart-ext is just a file name, first look next to
-  // the importing Dart library.
-  void* library_handle =
-      MakePathAndResolve(extension_directory, extension_name);
-  if (library_handle != NULL) {
-    return library_handle;
-  }
-
-  // Then pass the library name down to the platform. E.g. dlopen will do its
-  // own search in standard search locations.
-  return MakePathAndResolve("", extension_name);
-}
-
-Dart_Handle Extensions::LoadExtension(const char* extension_directory,
-                                      const char* extension_name,
-                                      Dart_Handle parent_library) {
-  void* library_handle = ResolveExtension(extension_directory, extension_name);
-  if (library_handle == NULL) {
-    return GetError();
-  }
-
-  const char* extension = extension_name;
-  if (File::IsAbsolutePath(extension_name)) {
-    extension = strrchr(extension_name, PathSeparator()) + 1;
-  }
-
-  const char* strings[] = {extension, "_Init", NULL};
-  const char* init_function_name = Concatenate(strings);
-  void* init_function = ResolveSymbol(library_handle, init_function_name);
-  Dart_Handle result = GetError();
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  ASSERT(init_function != NULL);
-  typedef Dart_Handle (*InitFunctionType)(Dart_Handle import_map);
-  InitFunctionType fn = reinterpret_cast<InitFunctionType>(init_function);
-  return (*fn)(parent_library);
-}
-
-// Concatenates a NULL terminated array of strings.
-// The returned string is scope allocated.
-const char* Extensions::Concatenate(const char** strings) {
-  int size = 1;  // null termination.
-  for (int i = 0; strings[i] != NULL; i++) {
-    size += strlen(strings[i]);
-  }
-  char* result = reinterpret_cast<char*>(Dart_ScopeAllocate(size));
-  int index = 0;
-  for (int i = 0; strings[i] != NULL; i++) {
-    index += snprintf(result + index, size - index, "%s", strings[i]);
-  }
-  ASSERT(index == size - 1);
-  ASSERT(result[size - 1] == '\0');
-  return result;
-}
-
-}  // namespace bin
-}  // namespace dart
diff --git a/runtime/bin/extensions.h b/runtime/bin/extensions.h
deleted file mode 100644
index aba3bff..0000000
--- a/runtime/bin/extensions.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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.
-
-#ifndef RUNTIME_BIN_EXTENSIONS_H_
-#define RUNTIME_BIN_EXTENSIONS_H_
-
-#include "include/dart_api.h"
-#include "platform/globals.h"
-
-namespace dart {
-namespace bin {
-
-class Extensions {
- public:
-  // TODO(whesse): Make extension load from a relative path relative to
-  // the library it is in.  Currently loads from current working directory.
-  static Dart_Handle LoadExtension(const char* extension_directory,
-                                   const char* extension_name,
-                                   Dart_Handle parent_library);
-
-  // Platform-specific implementations.
-  // Don't rename LoadExtensionLibrary to LoadLibrary since on Windows it
-  // conflicts with LoadLibraryW after mangling.
-  static void* LoadExtensionLibrary(const char* library_file);
-  static void* ResolveSymbol(void* lib_handle, const char* symbol);
-  static void UnloadLibrary(void* lib_handle);
-
- private:
-  static Dart_Handle GetError();
-
-  static void* MakePathAndResolve(const char* dir, const char* name);
-  static void* ResolveAbsPathExtension(const char* extension_path);
-  static void* ResolveExtension(const char* extensioion_directory,
-                                const char* extension_name);
-
-  // The returned string is scope allocated.
-  static const char* Concatenate(const char** strings);
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_IMPLICIT_CONSTRUCTORS(Extensions);
-};
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // RUNTIME_BIN_EXTENSIONS_H_
diff --git a/runtime/bin/extensions_android.cc b/runtime/bin/extensions_android.cc
deleted file mode 100644
index f8f153b..0000000
--- a/runtime/bin/extensions_android.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_ANDROID)
-
-#include <dlfcn.h>  // NOLINT
-#include "bin/extensions.h"
-
-#include "platform/assert.h"
-
-namespace dart {
-namespace bin {
-
-void* Extensions::LoadExtensionLibrary(const char* library_file) {
-  return dlopen(library_file, RTLD_LAZY);
-}
-
-void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) {
-  dlerror();
-  return dlsym(lib_handle, symbol);
-}
-
-void Extensions::UnloadLibrary(void* lib_handle) {
-  dlerror();
-  int result = dlclose(lib_handle);
-  ASSERT(result == 0);
-}
-
-Dart_Handle Extensions::GetError() {
-  const char* err_str = dlerror();
-  if (err_str != NULL) {
-    return Dart_NewApiError(err_str);
-  }
-  return Dart_Null();
-}
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // defined(DART_HOST_OS_ANDROID)
diff --git a/runtime/bin/extensions_fuchsia.cc b/runtime/bin/extensions_fuchsia.cc
deleted file mode 100644
index 637533a..0000000
--- a/runtime/bin/extensions_fuchsia.cc
+++ /dev/null
@@ -1,46 +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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_FUCHSIA)
-
-#include "bin/extensions.h"
-
-#include <dlfcn.h>
-#include <fcntl.h>
-#include <lib/fdio/io.h>
-#include <zircon/dlfcn.h>
-
-#include "platform/assert.h"
-
-namespace dart {
-namespace bin {
-
-void* Extensions::LoadExtensionLibrary(const char* library_file) {
-  return dlopen(library_file, RTLD_LAZY);
-}
-
-void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) {
-  dlerror();
-  return dlsym(lib_handle, symbol);
-}
-
-void Extensions::UnloadLibrary(void* lib_handle) {
-  dlerror();
-  int result = dlclose(lib_handle);
-  ASSERT(result == 0);
-}
-
-Dart_Handle Extensions::GetError() {
-  const char* err_str = dlerror();
-  if (err_str != NULL) {
-    return Dart_NewApiError(err_str);
-  }
-  return Dart_Null();
-}
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // defined(DART_HOST_OS_FUCHSIA)
diff --git a/runtime/bin/extensions_linux.cc b/runtime/bin/extensions_linux.cc
deleted file mode 100644
index d0f3d0f..0000000
--- a/runtime/bin/extensions_linux.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_LINUX)
-
-#include <dlfcn.h>  // NOLINT
-#include "bin/extensions.h"
-
-#include "platform/assert.h"
-
-namespace dart {
-namespace bin {
-
-void* Extensions::LoadExtensionLibrary(const char* library_file) {
-  return dlopen(library_file, RTLD_LAZY);
-}
-
-void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) {
-  dlerror();
-  return dlsym(lib_handle, symbol);
-}
-
-void Extensions::UnloadLibrary(void* lib_handle) {
-  dlerror();
-  int result = dlclose(lib_handle);
-  ASSERT(result == 0);
-}
-
-Dart_Handle Extensions::GetError() {
-  const char* err_str = dlerror();
-  if (err_str != NULL) {
-    return Dart_NewApiError(err_str);
-  }
-  return Dart_Null();
-}
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // defined(DART_HOST_OS_LINUX)
diff --git a/runtime/bin/extensions_macos.cc b/runtime/bin/extensions_macos.cc
deleted file mode 100644
index b5be677..0000000
--- a/runtime/bin/extensions_macos.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_MACOS)
-
-#include <dlfcn.h>  // NOLINT
-#include "bin/extensions.h"
-
-#include "platform/assert.h"
-
-namespace dart {
-namespace bin {
-
-void* Extensions::LoadExtensionLibrary(const char* library_file) {
-  return dlopen(library_file, RTLD_LAZY);
-}
-
-void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) {
-  dlerror();
-  return dlsym(lib_handle, symbol);
-}
-
-void Extensions::UnloadLibrary(void* lib_handle) {
-  dlerror();
-  int result = dlclose(lib_handle);
-  ASSERT(result == 0);
-}
-
-Dart_Handle Extensions::GetError() {
-  const char* err_str = dlerror();
-  if (err_str != NULL) {
-    return Dart_NewApiError(err_str);
-  }
-  return Dart_Null();
-}
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // defined(DART_HOST_OS_MACOS)
diff --git a/runtime/bin/extensions_win.cc b/runtime/bin/extensions_win.cc
deleted file mode 100644
index d17d843..0000000
--- a/runtime/bin/extensions_win.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_WINDOWS)
-
-#include "bin/extensions.h"
-#include "bin/utils.h"
-#include "bin/utils_win.h"
-#include "platform/assert.h"
-
-namespace dart {
-namespace bin {
-
-void* Extensions::LoadExtensionLibrary(const char* library_file) {
-  SetLastError(0);
-
-  // Convert to wchar_t string.
-  int name_len = MultiByteToWideChar(CP_UTF8, 0, library_file, -1, NULL, 0);
-  wchar_t* name;
-  name = new wchar_t[name_len];
-  MultiByteToWideChar(CP_UTF8, 0, library_file, -1, name, name_len);
-
-  void* ext = LoadLibraryW(name);
-  delete[] name;
-  return ext;
-}
-
-void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) {
-  SetLastError(0);
-  return reinterpret_cast<void*>(
-      GetProcAddress(reinterpret_cast<HMODULE>(lib_handle), symbol));
-}
-
-void Extensions::UnloadLibrary(void* lib_handle) {
-  SetLastError(0);
-  BOOL result = FreeLibrary(reinterpret_cast<HMODULE>(lib_handle));
-  ASSERT(result);
-}
-
-Dart_Handle Extensions::GetError() {
-  int last_error = GetLastError();
-  if (last_error != 0) {
-    OSError err;
-    return Dart_NewApiError(err.message());
-  }
-  return Dart_Null();
-}
-
-}  // namespace bin
-}  // namespace dart
-
-#endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 8e377a1..fad12cf 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -923,8 +923,8 @@
   if (file == NULL) {
     return CObject::NewOSError();
   }
-  return new CObjectIntptr(
-      CObject::NewIntptr(reinterpret_cast<intptr_t>(file)));
+  return new CObjectNativePointer(CObject::NewNativePointer(
+      reinterpret_cast<intptr_t>(file), sizeof(*file), ReleaseFile));
 }
 
 CObject* File::DeleteRequest(const CObjectArray& request) {
diff --git a/runtime/bin/io_impl_sources.gni b/runtime/bin/io_impl_sources.gni
index 846c775..8c368bb 100644
--- a/runtime/bin/io_impl_sources.gni
+++ b/runtime/bin/io_impl_sources.gni
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # This file contains some C++ sources for the dart:io library.  The other
-# implementation files are in builtin_impl_sources.gypi.
+# implementation files are in builtin_impl_sources.gni.
 io_impl_sources = [
   "console.h",
   "console_posix.cc",
@@ -109,4 +109,7 @@
   "typed_data_utils.h",
 ]
 
-io_impl_tests = [ "platform_macos_test.cc" ]
+io_impl_tests = [
+  "platform_macos_test.cc",
+  "secure_socket_utils_test.cc",
+]
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index df166696..045bf33 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -8,7 +8,6 @@
 #include "bin/dartutils.h"
 #include "bin/dfe.h"
 #include "bin/error_exit.h"
-#include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/gzip.h"
 #include "bin/lockers.h"
@@ -49,97 +48,6 @@
                      DartUtils::NewString("_Init"), kNumArgs, dart_args);
 }
 
-static bool PathContainsSeparator(const char* path) {
-  return (strchr(path, '/') != NULL) ||
-         ((strncmp(File::PathSeparator(), "/", 1) != 0) &&
-          (strstr(path, File::PathSeparator()) != NULL));
-}
-
-#define RETURN_ERROR(result)                                                   \
-  if (Dart_IsError(result)) return result;
-
-Dart_Handle Loader::LoadImportExtension(const char* url_string,
-                                        Dart_Handle library) {
-  const char* lib_uri_str = NULL;
-  Dart_Handle lib_uri = Dart_LibraryResolvedUrl(library);
-  ASSERT(!Dart_IsError(lib_uri));
-  Dart_Handle result = Dart_StringToCString(lib_uri, &lib_uri_str);
-  RETURN_ERROR(result);
-
-  UriDecoder decoder(lib_uri_str);
-  lib_uri_str = decoder.decoded();
-
-  if (strncmp(lib_uri_str, "http://", 7) == 0 ||
-      strncmp(lib_uri_str, "https://", 8) == 0 ||
-      strncmp(lib_uri_str, "data://", 7) == 0) {
-    return DartUtils::NewError(
-        "Cannot load native extensions over http: or https: or data: %s",
-        lib_uri_str);
-  }
-
-  char* lib_path = NULL;
-  if (strncmp(lib_uri_str, "file://", 7) == 0) {
-    auto path = File::UriToPath(lib_uri_str);
-    lib_path = DartUtils::DirName(path.get());
-  } else {
-    lib_path = Utils::StrDup(lib_uri_str);
-  }
-
-  const char* path = DartUtils::RemoveScheme(url_string);
-  if (!File::IsAbsolutePath(path) && PathContainsSeparator(path)) {
-    free(lib_path);
-    return DartUtils::NewError(
-        "Native extension path must be absolute, or simply the file name: %s",
-        path);
-  }
-
-  result = Extensions::LoadExtension(lib_path, path, library);
-  free(lib_path);
-  return result;
-}
-
-Dart_Handle Loader::ReloadNativeExtensions() {
-  Dart_Handle scheme =
-      Dart_NewStringFromCString(DartUtils::kDartExtensionScheme);
-  Dart_Handle extension_imports = Dart_GetImportsOfScheme(scheme);
-  RETURN_ERROR(extension_imports);
-
-  intptr_t length = -1;
-  Dart_Handle result = Dart_ListLength(extension_imports, &length);
-  RETURN_ERROR(result);
-  Dart_Handle* import_handles = reinterpret_cast<Dart_Handle*>(
-      Dart_ScopeAllocate(sizeof(Dart_Handle) * length));
-  result = Dart_ListGetRange(extension_imports, 0, length, import_handles);
-  RETURN_ERROR(result);
-  for (intptr_t i = 0; i < length; i += 2) {
-    Dart_Handle importer = import_handles[i];
-    Dart_Handle importee = import_handles[i + 1];
-
-    const char* extension_uri = NULL;
-    result = Dart_StringToCString(Dart_LibraryUrl(importee), &extension_uri);
-    RETURN_ERROR(result);
-    const char* extension_path = DartUtils::RemoveScheme(extension_uri);
-
-    const char* lib_uri = NULL;
-    result = Dart_StringToCString(Dart_LibraryUrl(importer), &lib_uri);
-    RETURN_ERROR(result);
-
-    char* lib_path = NULL;
-    if (strncmp(lib_uri, "file://", 7) == 0) {
-      auto path = File::UriToPath(lib_uri);
-      lib_path = DartUtils::DirName(path.get());
-    } else {
-      lib_path = Utils::StrDup(lib_uri);
-    }
-
-    result = Extensions::LoadExtension(lib_path, extension_path, importer);
-    free(lib_path);
-    RETURN_ERROR(result);
-  }
-
-  return Dart_True();
-}
-
 #if !defined(DART_PRECOMPILED_RUNTIME)
 static void MallocFinalizer(void* isolate_callback_data, void* peer) {
   free(peer);
@@ -185,13 +93,6 @@
                               MallocFinalizer);
     return result;
   }
-  if (tag == Dart_kImportExtensionTag) {
-    if (!DartUtils::IsDartExtensionSchemeURL(url_string)) {
-      return DartUtils::NewError(
-          "Native extensions must use the dart-ext: scheme : %s", url_string);
-    }
-    return Loader::LoadImportExtension(url_string, library);
-  }
   if (dfe.CanUseDartFrontend() && dfe.UseDartFrontend() &&
       (tag == Dart_kImportTag)) {
     // E.g., IsolateMirror.loadUri.
diff --git a/runtime/bin/loader.h b/runtime/bin/loader.h
index a9f436d..3afaa03 100644
--- a/runtime/bin/loader.h
+++ b/runtime/bin/loader.h
@@ -20,8 +20,6 @@
   static Dart_Handle InitForSnapshot(const char* snapshot_uri,
                                      IsolateData* isolate_data);
 
-  static Dart_Handle ReloadNativeExtensions();
-
   // A static tag handler that hides all usage of a loader for an isolate.
   static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
                                        Dart_Handle library,
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index a288a79..d3ca835 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -16,7 +16,6 @@
 #include "bin/dfe.h"
 #include "bin/error_exit.h"
 #include "bin/eventhandler.h"
-#include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/gzip.h"
 #include "bin/isolate_data.h"
@@ -238,11 +237,6 @@
     }
   }
 
-  if (isolate_run_app_snapshot) {
-    result = Loader::ReloadNativeExtensions();
-    if (Dart_IsError(result)) goto failed;
-  }
-
   Dart_ExitScope();
   return true;
 
@@ -325,11 +319,6 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
   if (isolate_run_app_snapshot) {
-    Dart_Handle result = Loader::ReloadNativeExtensions();
-    CHECK_RESULT(result);
-  }
-
-  if (isolate_run_app_snapshot) {
     Dart_Handle result = Loader::InitForSnapshot(script_uri, isolate_data);
     CHECK_RESULT(result);
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -369,10 +358,15 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   }
 
-  if (Options::gen_snapshot_kind() == kAppJIT) {
+  if (Options::gen_snapshot_kind() == kAppJIT && !isolate_run_app_snapshot) {
     // If we sort, we must do it for all isolates, not just the main isolate,
     // otherwise isolates related by spawnFunction will disagree on CIDs and
-    // cannot correctly send each other messages.
+    // cannot correctly send each other messages. If we run from an app
+    // snapshot, things are already sorted, and other isolate created by
+    // spawnFunction will also load from the same snapshot. Sorting such isolate
+    // is counter-productive because it invalidates their code.
+    // After we switch to always using isolate groups, this be changed to
+    // `generating-app-jit && is_main_isolate`.
     result = Dart_SortClasses();
     CHECK_RESULT(result);
   }
@@ -928,6 +922,19 @@
 void RunMainIsolate(const char* script_name,
                     const char* package_config_override,
                     CommandLineOptions* dart_options) {
+  if (script_name != NULL) {
+    const char* base_name = strrchr(script_name, '/');
+    if (base_name == NULL) {
+      base_name = script_name;
+    } else {
+      base_name++;  // Skip '/'.
+    }
+    const intptr_t kMaxNameLength = 64;
+    char name[kMaxNameLength];
+    Utils::SNPrint(name, kMaxNameLength, "dart:%s", base_name);
+    Platform::SetProcessName(name);
+  }
+
   // Call CreateIsolateGroupAndSetup which creates an isolate and loads up
   // the specified application script.
   char* error = NULL;
@@ -1157,6 +1164,8 @@
         }
         Platform::Exit(0);
       } else {
+        // This usage error case will only be invoked when
+        // Options::disable_dart_dev() is false.
         Options::PrintUsage();
         Platform::Exit(kErrorExitCode);
       }
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 108fc91..44386ec 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -127,19 +127,19 @@
                       hot_reload_rollback_test_mode_callback);
 
 void Options::PrintVersion() {
-  Syslog::PrintErr("Dart SDK version: %s\n", Dart_VersionString());
+  Syslog::Print("Dart SDK version: %s\n", Dart_VersionString());
 }
 
 // clang-format off
 void Options::PrintUsage() {
-  Syslog::PrintErr(
+  Syslog::Print(
       "Usage: dart [<vm-flags>] <dart-script-file> [<script-arguments>]\n"
       "\n"
       "Executes the Dart script <dart-script-file> with "
       "the given list of <script-arguments>.\n"
       "\n");
   if (!Options::verbose_option()) {
-    Syslog::PrintErr(
+    Syslog::Print(
 "Common VM flags:\n"
 "--enable-asserts\n"
 "  Enable assert statements.\n"
@@ -176,7 +176,7 @@
 "--version\n"
 "  Print the SDK version.\n");
   } else {
-    Syslog::PrintErr(
+    Syslog::Print(
 "Supported options:\n"
 "--enable-asserts\n"
 "  Enable assert statements.\n"
@@ -526,24 +526,40 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   }
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  else if (!Options::disable_dart_dev() &&  // NOLINT
-           ((Options::help_option() && !Options::verbose_option()) ||
-            (argc == 1))) {
-    DartDevIsolate::set_should_run_dart_dev(true);
-    // Let DartDev handle the default help message.
-    dart_options->AddArgument("help");
-    return true;
-  } else if (!Options::disable_dart_dev() &&
-             (enable_dartdev_analytics || disable_dartdev_analytics)) {
-    // The analytics flags are a special case as we don't have a target script
-    // or DartDev command but we still want to launch DartDev.
-    DartDevIsolate::set_should_run_dart_dev(true);
-    dart_options->AddArgument(enable_dartdev_analytics ? "--enable-analytics"
-                                                       : "--disable-analytics");
-    return true;
+  else if (!Options::disable_dart_dev()) {  // NOLINT
+    // Handles following invocation arguments:
+    //   - dart help
+    //   - dart --help
+    //   - dart
+    if (((Options::help_option() && !Options::verbose_option()) ||
+         (argc == 1))) {
+      DartDevIsolate::set_should_run_dart_dev(true);
+      // Let DartDev handle the default help message.
+      dart_options->AddArgument("help");
+      return true;
+    }
+    // Handles cases where only analytics flags are provided. We need to start
+    // the DartDev isolate to set this state.
+    else if (enable_dartdev_analytics || disable_dartdev_analytics) {  // NOLINT
+      // The analytics flags are a special case as we don't have a target script
+      // or DartDev command but we still want to launch DartDev.
+      DartDevIsolate::set_should_run_dart_dev(true);
+      dart_options->AddArgument(enable_dartdev_analytics
+                                    ? "--enable-analytics"
+                                    : "--disable-analytics");
+      return true;
+    }
+    // Let the VM handle '--version' and '--help --disable-dart-dev'.
+    // Otherwise, we'll launch the DartDev isolate to print its help message
+    // and set an error exit code.
+    else if (!Options::help_option() && !Options::version_option()) {  // NOLINT
+      DartDevIsolate::PrintUsageErrorOnRun();
+      return true;
+    }
+    return false;
   }
-
-#endif    // !defined(DART_PRECOMPILED_RUNTIME)
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+  // Handle argument parsing errors.
   else {  // NOLINT
     return false;
   }
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index a34db67..68723c2 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.h
@@ -108,6 +108,8 @@
   static int GetScriptIndex() { return script_index_; }
   static char** GetArgv() { return argv_; }
 
+  static void SetProcessName(const char* name);
+
   DART_NORETURN static void Exit(int exit_code);
 
   static void SetCoreDumpResourceLimit(int value);
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index a9a5cda..dbbae40 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -7,13 +7,14 @@
 
 #include "bin/platform.h"
 
-#include <errno.h>        // NOLINT
-#include <signal.h>       // NOLINT
-#include <string.h>       // NOLINT
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/prctl.h>
 #include <sys/resource.h>
 #include <sys/system_properties.h>
-#include <sys/utsname.h>  // NOLINT
-#include <unistd.h>       // NOLINT
+#include <sys/utsname.h>
+#include <unistd.h>
 
 #include "bin/console.h"
 #include "bin/file.h"
@@ -158,6 +159,10 @@
   return File::ReadLinkInto("/proc/self/exe", result, result_size);
 }
 
+void Platform::SetProcessName(const char* name) {
+  prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name), 0, 0, 0);  // NOLINT
+}
+
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
   Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_fuchsia.cc b/runtime/bin/platform_fuchsia.cc
index 47c1907..2c12818 100644
--- a/runtime/bin/platform_fuchsia.cc
+++ b/runtime/bin/platform_fuchsia.cc
@@ -150,6 +150,11 @@
   return -1;
 }
 
+void Platform::SetProcessName(const char* name) {
+  zx_object_set_property(zx_process_self(), ZX_PROP_NAME, name,
+                         Utils::Minimum(strlen(name), ZX_MAX_NAME_LEN));
+}
+
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
   Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index adbfac1..84cf46c 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -7,12 +7,13 @@
 
 #include "bin/platform.h"
 
-#include <errno.h>        // NOLINT
-#include <signal.h>       // NOLINT
-#include <string.h>       // NOLINT
-#include <sys/resource.h>  // NOLINT
-#include <sys/utsname.h>  // NOLINT
-#include <unistd.h>       // NOLINT
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <sys/utsname.h>
+#include <unistd.h>
 
 #include "bin/console.h"
 #include "bin/file.h"
@@ -165,6 +166,10 @@
   return File::ReadLinkInto("/proc/self/exe", result, result_size);
 }
 
+void Platform::SetProcessName(const char* name) {
+  prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name), 0, 0, 0);  // NOLINT
+}
+
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
   Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 8083949..26f40a4 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -328,6 +328,8 @@
   return path_size;
 }
 
+void Platform::SetProcessName(const char* name) {}
+
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
   Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 515a569..b407cd2 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -302,6 +302,8 @@
   return -1;
 }
 
+void Platform::SetProcessName(const char* name) {}
+
 void Platform::Exit(int exit_code) {
   // Restore the console's output code page
   Console::RestoreConfig();
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 9513513..ccd8144 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -109,7 +109,8 @@
   // vm/cc tests to randomly time out due to inability to shut service-isolate
   // down.
   // Issue(https://dartbug.com/37741):
-  if (strcmp(run_filter, "DartAPI_InvokeVMServiceMethod") != 0) {
+  if ((strcmp(run_filter, "DartAPI_InvokeVMServiceMethod") != 0) &&
+      (strcmp(run_filter, "DartAPI_InvokeVMServiceMethod_Loop") != 0)) {
     return nullptr;
   }
 
diff --git a/runtime/bin/secure_socket_utils.cc b/runtime/bin/secure_socket_utils.cc
index ce38f8f..ad738e97 100644
--- a/runtime/bin/secure_socket_utils.cc
+++ b/runtime/bin/secure_socket_utils.cc
@@ -89,6 +89,22 @@
   SecureSocketUtils::CheckStatusSSL(status, type, message, NULL);
 }
 
+bool SecureSocketUtils::IsCurrentTimeInsideCertValidDateRange(X509* root_cert) {
+  ASN1_TIME* not_before = X509_get_notBefore(root_cert);
+  ASN1_TIME* not_after = X509_get_notAfter(root_cert);
+  int days_since_valid = 0;
+  int secs_since_valid = 0;
+  int days_before_invalid = 0;
+  int secs_before_invalid = 0;
+  // nullptr indicates current date/time
+  ASN1_TIME_diff(&days_since_valid, &secs_since_valid, not_before,
+                 /*to=*/nullptr);
+  ASN1_TIME_diff(&days_before_invalid, &secs_before_invalid,
+                 /*from=*/nullptr, not_after);
+  return days_since_valid >= 0 && secs_since_valid >= 0 &&
+         days_before_invalid >= 0 && secs_before_invalid >= 0;
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/secure_socket_utils.h b/runtime/bin/secure_socket_utils.h
index ddbd2b6..e8e306e 100644
--- a/runtime/bin/secure_socket_utils.h
+++ b/runtime/bin/secure_socket_utils.h
@@ -39,6 +39,8 @@
 
   static void CheckStatus(int status, const char* type, const char* message);
 
+  static bool IsCurrentTimeInsideCertValidDateRange(X509* root_cert);
+
   static bool NoPEMStartLine() {
     uint32_t last_error = ERR_peek_last_error();
     return (ERR_GET_LIB(last_error) == ERR_LIB_PEM) &&
diff --git a/runtime/bin/secure_socket_utils_test.cc b/runtime/bin/secure_socket_utils_test.cc
new file mode 100644
index 0000000..89bbb12
--- /dev/null
+++ b/runtime/bin/secure_socket_utils_test.cc
@@ -0,0 +1,152 @@
+// 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.
+
+#if !defined(DART_IO_SECURE_SOCKET_DISABLED)
+
+#include <openssl/bio.h>
+#include <openssl/ssl.h>
+#include <openssl/x509.h>
+
+#include "bin/secure_socket_utils.h"
+#include "platform/globals.h"
+#include "vm/unit_test.h"
+
+namespace dart {
+namespace bin {
+
+TEST_CASE(SecureSocketUtils_CertNotYetValid) {
+  const char* valid_after_2121 =
+      "-----BEGIN CERTIFICATE-----\n"
+      "MIIFbzCCA1egAwIBAgIUO6PLWc8zatZF5Cc07uYdjDy4UGowDQYJKoZIhvcNAQEL\n"
+      "BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\n"
+      "GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAiGA8yMTIxMDgwMTE3MDUwNFoYDzIx\n"
+      "MzEwNzMwMTcwNTA0WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0\n"
+      "ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG\n"
+      "9w0BAQEFAAOCAg8AMIICCgKCAgEAvgmd8v2K4ngOI/dOa/sn63uetG9sUhzTdViO\n"
+      "87q7s4XeFmziS3BMQyMqTmrIHJAKuZp66ZH6ZOno54UX2KedI4hf0He3NbAitGgI\n"
+      "o6z/WBglH+ByORUEU1Yzh03akja5C8Hp9IUpC6PGJEolPsZeoBMZs1bCxwD9miHy\n"
+      "bs/NYsUGsDJwUZFEW2UTjYuyeTPSdkIgoZIPCp8tp9E6jy7fb2H2XE0Z+rJ4rU/e\n"
+      "0aQ1Q7gNBnBWrJAGgYfQj9XbFx6nNEW6XUBqIV/uUmz9y64pMQ21I9e64Qn5KHDo\n"
+      "08CzQ651dGY1GJkziUuQITkPN4EqS6D5R74ruTJW0lp/cg7RNPoTAXBXI+Nqz7WE\n"
+      "bscerDKFGgaAZ8WXqvwpHqwGeiilZT/OwSwjrN8zaW6eLljAStGhLgn6j/Te8rfW\n"
+      "9+AGSjesJ8dJ+dppFG8A+1Auvtii12Jk8hj/IM/udt5ZLs6meSOYPeNF3UqHrA7s\n"
+      "O39KsMy7ppFQPwBBXgKZMXQlt6uMmi/2s/OHXZRpf7c09n6+3NKYutMsYHO6SrlD\n"
+      "hYcWdpjlv632O5WAdjehohDLfYLugsPPt/hJC3UAA8QfNrEXVHx3D2qgowLB9Brx\n"
+      "zC7aT/0rmVQu2wXvekc8tIRUnDgr8tLjSuEyj9nBb7cWUOWi/1YiEb5T1x7/zyhP\n"
+      "5p8g8l8CAwEAAaNTMFEwHQYDVR0OBBYEFN1Mf9EDYiYYds9IB9qvOYEmDhs5MB8G\n"
+      "A1UdIwQYMBaAFN1Mf9EDYiYYds9IB9qvOYEmDhs5MA8GA1UdEwEB/wQFMAMBAf8w\n"
+      "DQYJKoZIhvcNAQELBQADggIBAA8DjwXFECGFKPNc//kTSUUcMxRLORBH/oSe2hml\n"
+      "dNRtjkVHWcPDsn5Md0cM6e0kOXw2AEqRK9keYN/27JGHBvzu1MbzSHd1czeGx46d\n"
+      "5QI5MyI0U8iiYoW8IJURrnAuD+9yS6O4b7c9qnTwwdsAy98gzfWZbrb++mgoWDrt\n"
+      "Ma4V1zKMUZYezV95zlBmB9sKxbJlLP6pMGPENsbNuqB1KK8uAYnd4YYdEx97lt7o\n"
+      "SeUySohZQasheI73jJuYdDwqDcGCtRvwaOyDuOsDZVNqjNiqiI3aaGVII2lNbjOO\n"
+      "g85pN4pWB+1b3wdEt+c5VETYX3SiJNOyhy3rp68liegeeNVTgNdp5vSxmogWxtCN\n"
+      "uv6uim0Lw//Ezz6acc15CLdaS1msS2V/5Ogk7/cYEajtWp8l7/dy9Gf8ekzRBaET\n"
+      "3vw7sla+YhsUI+NZQG79gfkDfYmRMpW6djaWgY9c5l/NJ8ev1ZQWj1i5t4w7lW5h\n"
+      "3wB8qVV7BQ3zY36iEes4hvmXmykCOgQ2yXTOVZVhKYAxoaRMgkJSWL9rsPvmHEM8\n"
+      "b3gjUC/5nwTzLZAw0iYLtPpSnFwhprZPPWF+k5FQAx/UQ+0qjqY8EbfWLzexm+7P\n"
+      "Sm35NlpFHH6vyyj48RVYQcw8KvDvbuUwjiauydhYCCLoQVdywec8d3fUu6NdBusm\n"
+      "q8uu\n"
+      "-----END CERTIFICATE-----\n";
+  size_t len = strlen(valid_after_2121);
+  BIO* cert_bio = BIO_new(BIO_s_mem());
+  BIO_write(cert_bio, valid_after_2121, len);
+  X509* cert_X509 = PEM_read_bio_X509(cert_bio, NULL, NULL, NULL);
+  EXPECT(cert_X509 != nullptr);
+  EXPECT(!SecureSocketUtils::IsCurrentTimeInsideCertValidDateRange(cert_X509));
+  BIO_free(cert_bio);
+  X509_free(cert_X509);
+}
+
+TEST_CASE(SecureSocketUtils_CertValid) {
+  const char* valid_in_2021 =
+      "-----BEGIN CERTIFICATE-----\n"
+      "MIIFbTCCA1WgAwIBAgIUFmzKjF/PfpFX+5+pF1LXzbFzL/4wDQYJKoZIhvcNAQEL\n"
+      "BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\n"
+      "GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yMTA4MjUxNzA1NTNaGA8yMTIx\n"
+      "MDgwMTE3MDU1M1owRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx\n"
+      "ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCAiIwDQYJKoZIhvcN\n"
+      "AQEBBQADggIPADCCAgoCggIBAMdupz2RQB1fHii6EACZq8MPbDk+xoxHb111Z85C\n"
+      "VK47tC+Sn16DmWKwmcMp7mbPIO8jUSJOk8FrZWsSFZ9xBzXb/H2W6kFNb8XqKyhH\n"
+      "vweeTekPuONrpJIqBJiIEXqyMoxiqwbtl38ZVo5DwFvc8mriFVYapMLb3DKQxOMR\n"
+      "uM32R40VVf1S/LcYab/UTdxdtoI6MINv5SFsmp7Cd+8nUMXdetCTdlu5aoHSTUE0\n"
+      "EzsYG4WTQqi3WpvnTuFlFq4LLd7NYmWUoiUJiB5u7vSEZM91u/eGtOm9Y7OzwJUp\n"
+      "Obv3hEIrNS0c/qXuG89+7vlcW5AqJkyWhNgoMRXFXYlqPFKWwYOU0t/vjSlFlB3u\n"
+      "8a0zNur6d95IC/9XSGFgW3FYnEzTPiorR8y/dbw8P5ioP2yMrm1b6v+TlyOyQ3Hu\n"
+      "gCKJy7Ah1IpUG7wefZIpTN8CaumusUwJdCcGBPfwyOD1yvF8UyETJ5ZB7JC7jXgj\n"
+      "KUpytSeN79m15s+ksn6tS9uLqTHr3Yr7J7ha3m2UO4gl2QOa20/fdmenVqEsq+Z7\n"
+      "1PuDaitEVaCQE3/286rwNQPgoDgDbIckZOzOzYq0b3lZZBlSZRpcsrBEf3KJIz9Y\n"
+      "X5R5bLvw/qtCVjHDankA2EqMYKf9LBCLkQ0GUMpu3aS7xZhn4A6tIcqtRpe1+ruZ\n"
+      "k5GdAgMBAAGjUzBRMB0GA1UdDgQWBBRzt8cxhCiZoLnnKWgLDt5nPctfYTAfBgNV\n"
+      "HSMEGDAWgBRzt8cxhCiZoLnnKWgLDt5nPctfYTAPBgNVHRMBAf8EBTADAQH/MA0G\n"
+      "CSqGSIb3DQEBCwUAA4ICAQCUzlwgMiwnNo4VM2FCroJpGP/8gEsMcUUpfeQnKALm\n"
+      "MudiNPWVQk7uHeAKXvzoSlq/7/ZYKqlXxqiNXhkawnBl0lyR4Bnj8GbQMkujZzUS\n"
+      "EUI5UlPqlvy4WJw9ybgPPyl5D/0D7dkK0xAVxMktjaCGKtPQ/UCY2APxyoISmhSl\n"
+      "0+ql1YpHM1XIty/mzlTAIZ7bnbKDPA3J3OjaCP0Skhf2g4Wkch3+6Wx5xfYnyRv1\n"
+      "UbihStrvN1dH9d+D642C45qpRa2l3GJvDxdyr6xSa3l9IajUYbpMFe0yymuxqWhX\n"
+      "bDLi0ouKmowKNiiqUmUEJhJBbt/XdTIeeyTcaz2ZHVmMU9E72OhsjzxAvajoDBv9\n"
+      "FJ3THlLlh7iHBv24Hghx5V6FCliO6uLUdLB1d8WNUtEWdzf17ZlPqRIkjSY+6kSJ\n"
+      "dNwQhl5kYL0caOKWvEEP9f2HondKxtVpYGHgtKvcvCj/hz8UCk9R3odcwweq48RK\n"
+      "fKNRHy3nQfWttSSbBH8SwSmtX2VesMu6jMcqwU/8YSrWTJa/5UexlNR9qRrDnhya\n"
+      "kqZCaETfx15LUkPPuyn+z76z2+hNW0VDpnUVRystHHkDz+q2cbH/bsfY47Et0Bsb\n"
+      "TozWCPRzEkmzTTaAZLtqXa5MzWsZweBzK5owXlOPTD2eo1UphgtOqsKPE/RB/Qgq\n"
+      "dw==\n"
+      "-----END CERTIFICATE-----\n";
+  size_t len = strlen(valid_in_2021);
+  BIO* cert_bio = BIO_new(BIO_s_mem());
+  BIO_write(cert_bio, valid_in_2021, len);
+  X509* cert_X509 = PEM_read_bio_X509(cert_bio, NULL, NULL, NULL);
+  EXPECT(cert_X509 != nullptr);
+  EXPECT(SecureSocketUtils::IsCurrentTimeInsideCertValidDateRange(cert_X509));
+  BIO_free(cert_bio);
+  X509_free(cert_X509);
+}
+
+TEST_CASE(SecureSocketUtils_CertAlreadyExpired) {
+  const char* valid_before_2021 =
+      "-----BEGIN CERTIFICATE-----\n"
+      "MIIFazCCA1OgAwIBAgIUY+S+GbniK1WC9821VgAJusuF33UwDQYJKoZIhvcNAQEL\n"
+      "BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\n"
+      "GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDA4MjUxNzAyNDFaFw0yMDA5\n"
+      "MjQxNzAyNDFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw\n"
+      "HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEB\n"
+      "AQUAA4ICDwAwggIKAoICAQDNfCrlXNeGKpF0PHzjkG5UfsSYvwfNUTqnzC3AkTMY\n"
+      "AZyyqDCA780TPZH48aZ/QFegFdIBUkEijFLuRKUqAv5jHxaVhMQcr5ujdCAJWT+e\n"
+      "5jc0cvukdWnFFqZwJWur4/3RsUnaWXY+oDk0pGuZD7VeNm9PTi1pQogwAivhSynM\n"
+      "YxCq0cO0JPM0Dr7ks99V1gDWrEOqjJGeEzvRlwdx+GPkvMvmrSHxWOphN/ji2MRx\n"
+      "tZ0T5FrrrGEtfp8gtTe5q5V+di1GvbuE6Y+MVYGIJeu3yqHkoh/TTS9Ex+QRm9nh\n"
+      "QM1Pm4hi2PofSSEdj15cUw6vfPJWewZiytcVJFTt2in1YuYufZMwPLP/ylnAQLkM\n"
+      "dq3TIF1g4ym9xLgQ/ZgnMX6g6ReOqG/1Au5InPUXMo3n56N959gQD1K8J2C4xtQP\n"
+      "MxrDAbGuYOmCterPAmW4aIVgbxIXwEK7lzTZyHUOvwjNaEfu0fuVOd9NC2B+g8So\n"
+      "I188ty96/BVwQO5bAzGekJn9xHVcTUU067b5zNfCpo4XGKaKVNGGR+AXhtjRXbrX\n"
+      "N9/BOHdABlV5W32HkhT4fr/BSSp/UyCnBZRPvLcI3Nvraok8snn/eGt6IW3y171O\n"
+      "3tYx4Gz7+M2K/T1rMuujVXOx6srtZ8oQIqFgZTR0sKKsim1umHAmoTJrG3wEOlUs\n"
+      "awIDAQABo1MwUTAdBgNVHQ4EFgQUzTOEhm+P6rWyBkKAkctA9FvheC8wHwYDVR0j\n"
+      "BBgwFoAUzTOEhm+P6rWyBkKAkctA9FvheC8wDwYDVR0TAQH/BAUwAwEB/zANBgkq\n"
+      "hkiG9w0BAQsFAAOCAgEABYYIBheuGRbmRhsS39zy0jDhqmDbsyIFd3/NoMZ+WvW4\n"
+      "NFcVRATalIX6ScXl7RGs1p855OiqOHij1tCzBClZXZ1zWD2v0KfWMFjR/S79HJOI\n"
+      "w3RGaMvALUJtOCz5in5Odryuo3GBkxKNonS+HAjnrWosqBCorerjn/TdIscTbA6h\n"
+      "7Iwy5umyyY63E69ehD7aANc/mxk++BWdAs3kPSXMI7PDpWUW5WV0hPUpe3sf0eY8\n"
+      "skfXa+UJ2qDmVkMmHUIOhi92zTRv6ROQXGY52JhHZOFSFxvqjWkk1M8q6Vm2ln2s\n"
+      "2GUa2j4emp+zti2JuFAwDgEK8wyqlq14hA8hTHL27mxpht990QGAU+qmcfhUf/qd\n"
+      "cIPkbz53Dpezzd96SuHQyjALaTbEw2vis9WpsejOKiaAp8264t0DgtLUndj4wVfC\n"
+      "3xti1jubmouUEdbNh7bnDfXxdxuAECFzhEG9mrosnTemuUVQSXIyrNfHRKDEaGv1\n"
+      "zh2Jij4HI+OKnJuao/9vsbNPib7k8tR0JKbXZD3HvOfQi5wMtlCUedu9eZ3Cq9Mu\n"
+      "1NwIwFoSU5pwO4PopiYL2hAEJXd0SN6TnWZThU28qTulrCb8enNU6BfkokTlkmYs\n"
+      "HUzvFarVyhKbQkyD/P3ckC/p2mg9aE7iLO5wTY1gegcSDF4R4479t/aDWMmevis=\n"
+      "-----END CERTIFICATE-----\n";
+  size_t len = strlen(valid_before_2021);
+  BIO* cert_bio = BIO_new(BIO_s_mem());
+  BIO_write(cert_bio, valid_before_2021, len);
+  X509* cert_X509 = PEM_read_bio_X509(cert_bio, NULL, NULL, NULL);
+  EXPECT(cert_X509 != nullptr);
+  EXPECT(!SecureSocketUtils::IsCurrentTimeInsideCertValidDateRange(cert_X509));
+  BIO_free(cert_bio);
+  X509_free(cert_X509);
+}
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // !defined(DART_IO_SECURE_SOCKET_DISABLED)
diff --git a/runtime/bin/security_context.cc b/runtime/bin/security_context.cc
index 4ea0f10..d2cd927 100644
--- a/runtime/bin/security_context.cc
+++ b/runtime/bin/security_context.cc
@@ -122,7 +122,11 @@
 
 static intptr_t EstimateX509Size(X509* certificate) {
   intptr_t length = i2d_X509(certificate, NULL);
-  return length > 0 ? length : 0;
+  length = length > 0 ? length : 0;
+  // An X509 is a tree of structures, which are either opaque or will be opaque
+  // in the future. Estimate the overhead to 512 bytes by rounding up
+  // sizeof(X509) + sizeof(X509_CINF).
+  return length + 512;
 }
 
 // Returns the handle for a Dart object wrapping the X509 certificate object.
@@ -154,7 +158,7 @@
     return status;
   }
   const intptr_t approximate_size_of_certificate =
-      sizeof(*certificate) + EstimateX509Size(certificate);
+      EstimateX509Size(certificate);
   ASSERT(approximate_size_of_certificate > 0);
   Dart_NewFinalizableHandle(result, reinterpret_cast<void*>(certificate),
                             approximate_size_of_certificate,
diff --git a/runtime/bin/security_context_win.cc b/runtime/bin/security_context_win.cc
index f61ae55..2be09d4 100644
--- a/runtime/bin/security_context_win.cc
+++ b/runtime/bin/security_context_win.cc
@@ -111,6 +111,14 @@
       Syslog::Print("\n");
     }
 
+    if (!SecureSocketUtils::IsCurrentTimeInsideCertValidDateRange(root_cert)) {
+      if (SSL_LOG_STATUS) {
+        Syslog::Print("...certificate is outside of its valid date range\n");
+      }
+      X509_free(root_cert);
+      continue;
+    }
+
     int status = X509_STORE_add_cert(store, root_cert);
     if (status == 0) {
       int error = ERR_get_error();
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index 7361612..cf9589a 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -10,7 +10,6 @@
 #include "bin/dfe.h"
 #include "bin/elf_loader.h"
 #include "bin/error_exit.h"
-#include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/platform.h"
 #include "include/dart_api.h"
@@ -276,7 +275,7 @@
         isolate_snapshot_data_(isolate_snapshot_data),
         isolate_snapshot_instructions_(isolate_snapshot_instructions) {}
 
-  ~DylibAppSnapshot() { Extensions::UnloadLibrary(library_); }
+  ~DylibAppSnapshot() { Utils::UnloadDynamicLibrary(library_); }
 
   void SetBuffers(const uint8_t** vm_data_buffer,
                   const uint8_t** vm_instructions_buffer,
@@ -297,26 +296,29 @@
 };
 
 static AppSnapshot* TryReadAppSnapshotDynamicLibrary(const char* script_name) {
-  void* library = Extensions::LoadExtensionLibrary(script_name);
-  if (library == NULL) {
-    return NULL;
+  void* library = Utils::LoadDynamicLibrary(script_name);
+  if (library == nullptr) {
+    return nullptr;
   }
 
   const uint8_t* vm_data_buffer = reinterpret_cast<const uint8_t*>(
-      Extensions::ResolveSymbol(library, kVmSnapshotDataCSymbol));
+      Utils::ResolveSymbolInDynamicLibrary(library, kVmSnapshotDataCSymbol));
 
-  const uint8_t* vm_instructions_buffer = reinterpret_cast<const uint8_t*>(
-      Extensions::ResolveSymbol(library, kVmSnapshotInstructionsCSymbol));
+  const uint8_t* vm_instructions_buffer =
+      reinterpret_cast<const uint8_t*>(Utils::ResolveSymbolInDynamicLibrary(
+          library, kVmSnapshotInstructionsCSymbol));
 
-  const uint8_t* isolate_data_buffer = reinterpret_cast<const uint8_t*>(
-      Extensions::ResolveSymbol(library, kIsolateSnapshotDataCSymbol));
-  if (isolate_data_buffer == NULL) {
+  const uint8_t* isolate_data_buffer =
+      reinterpret_cast<const uint8_t*>(Utils::ResolveSymbolInDynamicLibrary(
+          library, kIsolateSnapshotDataCSymbol));
+  if (isolate_data_buffer == nullptr) {
     FATAL1("Failed to resolve symbol '%s'\n", kIsolateSnapshotDataCSymbol);
   }
 
-  const uint8_t* isolate_instructions_buffer = reinterpret_cast<const uint8_t*>(
-      Extensions::ResolveSymbol(library, kIsolateSnapshotInstructionsCSymbol));
-  if (isolate_instructions_buffer == NULL) {
+  const uint8_t* isolate_instructions_buffer =
+      reinterpret_cast<const uint8_t*>(Utils::ResolveSymbolInDynamicLibrary(
+          library, kIsolateSnapshotInstructionsCSymbol));
+  if (isolate_instructions_buffer == nullptr) {
     FATAL1("Failed to resolve symbol '%s'\n",
            kIsolateSnapshotInstructionsCSymbol);
   }
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index 1f39427c..a781353 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -607,11 +607,6 @@
   ASSERT(data_buffer != nullptr);
   memmove(data_buffer, recv_buffer, bytes_read);
 
-  // Memory Sanitizer complains addr not being initialized, which is done
-  // through RecvFrom().
-  // Issue: https://github.com/google/sanitizers/issues/1201
-  MSAN_UNPOISON(&addr, sizeof(RawAddr));
-
   // Get the port and clear it in the sockaddr structure.
   int port = SocketAddress::GetAddrPort(addr);
   // TODO(21403): Add checks for AF_UNIX, if unix domain sockets
@@ -1258,24 +1253,20 @@
 
 static void NormalSocketFinalizer(void* isolate_data, void* data) {
   Socket* socket = reinterpret_cast<Socket*>(data);
-  if (socket->fd() >= 0) {
-    const int64_t flags = 1 << kCloseCommand;
-    socket->Retain();
-    EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
-                                 socket->port(), flags);
-  }
-  socket->Release();
+  const int64_t flags = 1 << kCloseCommand;
+  socket->Retain();  // Bump reference till we send the message.
+  EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
+                               socket->port(), flags);
+  socket->Release();  // Release the reference we just added above.
 }
 
 static void ListeningSocketFinalizer(void* isolate_data, void* data) {
   Socket* socket = reinterpret_cast<Socket*>(data);
-  if (socket->fd() >= 0) {
-    const int64_t flags = (1 << kListeningSocket) | (1 << kCloseCommand);
-    socket->Retain();
-    EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
-                                 socket->port(), flags);
-  }
-  socket->Release();
+  const int64_t flags = (1 << kListeningSocket) | (1 << kCloseCommand);
+  socket->Retain();  // Bump reference till we send the message.
+  EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
+                               socket->port(), flags);
+  socket->Release();  // Release the reference we just added above.
 }
 
 static void StdioSocketFinalizer(void* isolate_data, void* data) {
@@ -1288,15 +1279,11 @@
 
 static void SignalSocketFinalizer(void* isolate_data, void* data) {
   Socket* socket = reinterpret_cast<Socket*>(data);
-  if (socket->fd() >= 0) {
-    Process::ClearSignalHandlerByFd(socket->fd(), socket->isolate_port());
-    const int64_t flags = 1 << kCloseCommand;
-    socket->Retain();
-    EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
-                                 socket->port(), flags);
-  }
-
-  socket->Release();
+  const int64_t flags = (1 << kSignalSocket) | (1 << kCloseCommand);
+  socket->Retain();  // Bump reference till we send the message.
+  EventHandler::SendFromNative(reinterpret_cast<intptr_t>(socket),
+                               socket->port(), flags);
+  socket->Release();  // Release the reference we just added above.
 }
 
 void Socket::ReuseSocketIdNativeField(Dart_Handle handle,
diff --git a/runtime/bin/test_extension.c b/runtime/bin/test_extension.c
deleted file mode 100644
index d0c50c5..0000000
--- a/runtime/bin/test_extension.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 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.
- */
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "include/dart_api.h"
-
-#if defined(ASSERT)
-#error ASSERT already defined!
-#endif
-
-
-/* Native methods. */
-void IfNull(Dart_NativeArguments arguments) {
-  Dart_Handle object = Dart_GetNativeArgument(arguments, 0);
-  if (Dart_IsNull(object)) {
-    Dart_SetReturnValue(arguments, Dart_GetNativeArgument(arguments, 1));
-  } else {
-    Dart_SetReturnValue(arguments, object);
-  }
-}
-
-
-void ThrowMeTheBall(Dart_NativeArguments arguments) {
-  Dart_Handle object = Dart_GetNativeArgument(arguments, 0);
-  Dart_ThrowException(object);
-}
-
-
-/* Native resolver for the extension library. */
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope) {
-  /* assert(Dart_IsString(name)); */
-  const char* c_name;
-  Dart_Handle check_error;
-
-  if (auto_setup_scope == NULL) {
-    return NULL;
-  }
-  *auto_setup_scope = 1;
-  check_error = Dart_StringToCString(name, &c_name);
-  if (Dart_IsError(check_error)) {
-    Dart_PropagateError(check_error);
-  }
-  if ((strcmp("TestExtension_IfNull", c_name) == 0) && (argc == 2)) {
-    return IfNull;
-  }
-  if ((strcmp("TestExtension_ThrowMeTheBall", c_name) == 0) && (argc == 1)) {
-    return ThrowMeTheBall;
-  }
-  return NULL;
-}
-
-
-/* Native entry point for the extension library. */
-DART_EXPORT Dart_Handle test_extension_Init(Dart_Handle parent_library) {
-  Dart_Handle result_code;
-  if (Dart_IsError(parent_library)) {
-    return parent_library;
-  }
-
-  result_code = Dart_SetNativeResolver(parent_library, ResolveName, NULL);
-  if (Dart_IsError(result_code)) {
-    return result_code;
-  }
-
-  return parent_library;
-}
diff --git a/runtime/bin/test_extension_dllmain_win.cc b/runtime/bin/test_extension_dllmain_win.cc
deleted file mode 100644
index 161913b..0000000
--- a/runtime/bin/test_extension_dllmain_win.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// 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.
-
-#include "platform/globals.h"
-#if defined(DART_HOST_OS_WINDOWS)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>  // NOLINT
-
-BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved) {
-  return true;
-}
-
-#endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/bin/virtual_memory.h b/runtime/bin/virtual_memory.h
new file mode 100644
index 0000000..3ec25ed
--- /dev/null
+++ b/runtime/bin/virtual_memory.h
@@ -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.
+
+#ifndef RUNTIME_BIN_VIRTUAL_MEMORY_H_
+#define RUNTIME_BIN_VIRTUAL_MEMORY_H_
+
+#include "platform/allocation.h"
+#include "platform/globals.h"
+
+namespace dart {
+namespace bin {
+
+class VirtualMemory {
+ public:
+  enum Protection {
+    kNoAccess,
+    kReadOnly,
+    kReadWrite,
+    kReadExecute,
+    kReadWriteExecute
+  };
+
+  // The reserved memory is unmapped on destruction.
+  ~VirtualMemory();
+
+  void release() {
+    address_ = nullptr;
+    size_ = 0;
+  }
+
+  uword start() const { return reinterpret_cast<uword>(address_); }
+  uword end() const { return reinterpret_cast<uword>(address_) + size_; }
+  void* address() const { return address_; }
+  intptr_t size() const { return size_; }
+
+  // Changes the protection of the virtual memory area.
+  static void Protect(void* address, intptr_t size, Protection mode);
+  void Protect(Protection mode) { return Protect(address(), size(), mode); }
+
+  // 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,
+                                 bool is_executable,
+                                 const char* name);
+
+  static void Init() { page_size_ = CalculatePageSize(); }
+
+  // Returns the cached page size. Use only if Init() has been called.
+  static intptr_t PageSize() {
+    ASSERT(page_size_ != 0);
+    return page_size_;
+  }
+
+ private:
+  static intptr_t CalculatePageSize();
+
+  // These constructors are only used internally when reserving new virtual
+  // spaces. They do not reserve any virtual address space on their own.
+  VirtualMemory(void* address, size_t size) : address_(address), size_(size) {}
+
+  void* address_;
+  size_t size_;
+
+  static uword page_size_;
+
+  DISALLOW_IMPLICIT_CONSTRUCTORS(VirtualMemory);
+};
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // RUNTIME_BIN_VIRTUAL_MEMORY_H_
diff --git a/runtime/bin/virtual_memory_fuchsia.cc b/runtime/bin/virtual_memory_fuchsia.cc
new file mode 100644
index 0000000..2ba42b5
--- /dev/null
+++ b/runtime/bin/virtual_memory_fuchsia.cc
@@ -0,0 +1,110 @@
+// 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_FUCHSIA)
+
+#include "bin/virtual_memory.h"
+
+#include <zircon/process.h>
+#include <zircon/status.h>
+#include <zircon/syscalls.h>
+
+#include "platform/assert.h"
+#include "platform/utils.h"
+
+namespace dart {
+namespace bin {
+
+uword VirtualMemory::page_size_ = 0;
+
+intptr_t VirtualMemory::CalculatePageSize() {
+  const intptr_t page_size = getpagesize();
+  ASSERT(page_size != 0);
+  ASSERT(Utils::IsPowerOfTwo(page_size));
+  return page_size;
+}
+
+VirtualMemory* VirtualMemory::Allocate(intptr_t size,
+                                       bool is_executable,
+                                       const char* name) {
+  ASSERT(Utils::IsAligned(size, page_size_));
+  zx_handle_t vmar = zx_vmar_root_self();
+  zx_handle_t vmo = ZX_HANDLE_INVALID;
+  zx_status_t status = zx_vmo_create(size, 0u, &vmo);
+  if (status != ZX_OK) {
+    return nullptr;
+  }
+
+  if (name != nullptr) {
+    zx_object_set_property(vmo, ZX_PROP_NAME, name, strlen(name));
+  }
+
+  if (is_executable) {
+    // Add ZX_RIGHT_EXECUTE permission to VMO, so it can be mapped
+    // into memory as executable (now or later).
+    status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo);
+    if (status != ZX_OK) {
+      zx_handle_close(vmo);
+      return nullptr;
+    }
+  }
+
+  const zx_vm_option_t region_options =
+      ZX_VM_PERM_READ | ZX_VM_PERM_WRITE |
+      (is_executable ? ZX_VM_PERM_EXECUTE : 0);
+  uword base;
+  status = zx_vmar_map(vmar, region_options, 0, vmo, 0u, size, &base);
+  zx_handle_close(vmo);
+  if (status != ZX_OK) {
+    return nullptr;
+  }
+
+  return new VirtualMemory(reinterpret_cast<void*>(base), size);
+}
+
+VirtualMemory::~VirtualMemory() {
+  if (address_ != nullptr) {
+    zx_status_t status = zx_vmar_unmap(
+        zx_vmar_root_self(), reinterpret_cast<uword>(address_), size_);
+    if (status != ZX_OK) {
+      FATAL("zx_vmar_unmap failed: %s\n", zx_status_get_string(status));
+    }
+  }
+}
+
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+  const uword start_address = reinterpret_cast<uword>(address);
+  const uword end_address = start_address + size;
+  const uword page_address = Utils::RoundDown(start_address, PageSize());
+  uint32_t prot = 0;
+  switch (mode) {
+    case kNoAccess:
+      prot = 0;
+      break;
+    case kReadOnly:
+      prot = ZX_VM_PERM_READ;
+      break;
+    case kReadWrite:
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE;
+      break;
+    case kReadExecute:
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_EXECUTE;
+      break;
+    case kReadWriteExecute:
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE | ZX_VM_PERM_EXECUTE;
+      break;
+  }
+  zx_status_t status = zx_vmar_protect(zx_vmar_root_self(), prot, page_address,
+                                       end_address - page_address);
+  if (status != ZX_OK) {
+    FATAL("zx_vmar_protect(0x%lx, 0x%lx) failed: %s\n", page_address,
+          end_address - page_address, zx_status_get_string(status));
+  }
+}
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // defined(DART_HOST_OS_FUCHSIA)
diff --git a/runtime/bin/virtual_memory_posix.cc b/runtime/bin/virtual_memory_posix.cc
new file mode 100644
index 0000000..3618564
--- /dev/null
+++ b/runtime/bin/virtual_memory_posix.cc
@@ -0,0 +1,110 @@
+// 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_ANDROID) || defined(DART_HOST_OS_LINUX) ||            \
+    defined(DART_HOST_OS_MACOS)
+
+#include "bin/virtual_memory.h"
+
+#include <errno.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include "platform/assert.h"
+#include "platform/utils.h"
+
+namespace dart {
+namespace bin {
+
+// standard MAP_FAILED causes "error: use of old-style cast" as it
+// defines MAP_FAILED as ((void *) -1)
+#undef MAP_FAILED
+#define MAP_FAILED reinterpret_cast<void*>(-1)
+
+uword VirtualMemory::page_size_ = 0;
+
+intptr_t VirtualMemory::CalculatePageSize() {
+  const intptr_t page_size = getpagesize();
+  ASSERT(page_size != 0);
+  ASSERT(Utils::IsPowerOfTwo(page_size));
+  return page_size;
+}
+
+VirtualMemory* VirtualMemory::Allocate(intptr_t size,
+                                       bool is_executable,
+                                       const char* name) {
+  ASSERT(Utils::IsAligned(size, PageSize()));
+
+  const int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
+
+  int map_flags = MAP_PRIVATE | MAP_ANONYMOUS;
+#if (defined(DART_HOST_OS_MACOS) && !defined(DART_HOST_OS_IOS))
+  if (is_executable && IsAtLeastOS10_14()) {
+    map_flags |= MAP_JIT;
+  }
+#endif  // defined(DART_HOST_OS_MACOS)
+
+  // Some 64-bit microarchitectures store only the low 32-bits of targets as
+  // part of indirect branch prediction, predicting that the target's upper bits
+  // will be same as the call instruction's address. This leads to misprediction
+  // for indirect calls crossing a 4GB boundary. We ask mmap to place our
+  // generated code near the VM binary to avoid this.
+  void* hint = is_executable ? reinterpret_cast<void*>(&Allocate) : nullptr;
+  void* address = mmap(hint, size, prot, map_flags, -1, 0);
+  if (address == MAP_FAILED) {
+    return nullptr;
+  }
+  return new VirtualMemory(address, size);
+}
+
+VirtualMemory::~VirtualMemory() {
+  if (address_ != nullptr) {
+    if (munmap(address_, size_) != 0) {
+      int error = errno;
+      const int kBufferSize = 1024;
+      char error_buf[kBufferSize];
+      FATAL("munmap error: %d (%s)", error,
+            Utils::StrError(error, error_buf, kBufferSize));
+    }
+  }
+}
+
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+  uword start_address = reinterpret_cast<uword>(address);
+  uword end_address = start_address + size;
+  uword page_address = Utils::RoundDown(start_address, PageSize());
+  int prot = 0;
+  switch (mode) {
+    case kNoAccess:
+      prot = PROT_NONE;
+      break;
+    case kReadOnly:
+      prot = PROT_READ;
+      break;
+    case kReadWrite:
+      prot = PROT_READ | PROT_WRITE;
+      break;
+    case kReadExecute:
+      prot = PROT_READ | PROT_EXEC;
+      break;
+    case kReadWriteExecute:
+      prot = PROT_READ | PROT_WRITE | PROT_EXEC;
+      break;
+  }
+  if (mprotect(reinterpret_cast<void*>(page_address),
+               end_address - page_address, prot) != 0) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    FATAL("mprotect error: %d (%s)", error,
+          Utils::StrError(error, error_buf, kBufferSize));
+  }
+}
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX) ||     \
+        // defined(DART_HOST_OS_MACOS)
diff --git a/runtime/bin/virtual_memory_win.cc b/runtime/bin/virtual_memory_win.cc
new file mode 100644
index 0000000..b6075ed
--- /dev/null
+++ b/runtime/bin/virtual_memory_win.cc
@@ -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.
+
+#include "platform/globals.h"
+#if defined(DART_HOST_OS_WINDOWS)
+
+#include "bin/virtual_memory.h"
+
+#include "platform/assert.h"
+#include "platform/utils.h"
+
+namespace dart {
+namespace bin {
+
+uword VirtualMemory::page_size_ = 0;
+
+intptr_t VirtualMemory::CalculatePageSize() {
+  SYSTEM_INFO info;
+  GetSystemInfo(&info);
+  const intptr_t page_size = info.dwPageSize;
+  ASSERT(page_size != 0);
+  ASSERT(Utils::IsPowerOfTwo(page_size));
+  return page_size;
+}
+
+VirtualMemory* VirtualMemory::Allocate(intptr_t size,
+                                       bool is_executable,
+                                       const char* name) {
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  int prot = is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE;
+  void* address = VirtualAlloc(nullptr, size, MEM_RESERVE | MEM_COMMIT, prot);
+  if (address == nullptr) {
+    return nullptr;
+  }
+  return new VirtualMemory(address, size);
+}
+
+VirtualMemory::~VirtualMemory() {
+  if (address_ != nullptr) {
+    if (VirtualFree(address_, 0, MEM_RELEASE) == 0) {
+      FATAL("VirtualFree failed: Error code %d\n", GetLastError());
+    }
+  }
+}
+
+void VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
+  uword start_address = reinterpret_cast<uword>(address);
+  uword end_address = start_address + size;
+  uword page_address = Utils::RoundDown(start_address, PageSize());
+  DWORD prot = 0;
+  switch (mode) {
+    case kNoAccess:
+      prot = PAGE_NOACCESS;
+      break;
+    case kReadOnly:
+      prot = PAGE_READONLY;
+      break;
+    case kReadWrite:
+      prot = PAGE_READWRITE;
+      break;
+    case kReadExecute:
+      prot = PAGE_EXECUTE_READ;
+      break;
+    case kReadWriteExecute:
+      prot = PAGE_EXECUTE_READWRITE;
+      break;
+  }
+  DWORD old_prot = 0;
+  if (VirtualProtect(reinterpret_cast<void*>(page_address),
+                     end_address - page_address, prot, &old_prot) == 0) {
+    FATAL("VirtualProtect failed %d\n", GetLastError());
+  }
+}
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/docs/aot_binary_size_analysis.md b/runtime/docs/aot_binary_size_analysis.md
index 04a8e41..50d82be 100644
--- a/runtime/docs/aot_binary_size_analysis.md
+++ b/runtime/docs/aot_binary_size_analysis.md
@@ -13,7 +13,7 @@
 scripts (e.g. `pkg/vm/tool/precompiler2`):
 
 ```
-% tools/build.py -mrelease -ax64 runtime_kernel dart_precompiled_runtime
+% tools/build.py -mrelease -ax64 runtime dart_precompiled_runtime
 % pkg/vm/tool/precompiler2 --print-instructions-sizes-to=hello_sizes.json hello.dart hello.dart.aot
 ```
 
@@ -59,7 +59,7 @@
 scripts (e.g. `pkg/vm/tool/precompiler2`):
 
 ```
-% tools/build.py -mrelease -ax64 runtime_kernel dart_precompiled_runtime
+% tools/build.py -mrelease -ax64 runtime dart_precompiled_runtime
 % pkg/vm/tool/precompiler2 --write-v8-snapshot-profile-to=hello.heapsnapshot hello.dart hello.dart.aot
 ```
 
diff --git a/runtime/docs/dwarf_stack_traces.md b/runtime/docs/dwarf_stack_traces.md
index e1f6c5e..03b74d2 100644
--- a/runtime/docs/dwarf_stack_traces.md
+++ b/runtime/docs/dwarf_stack_traces.md
@@ -46,7 +46,7 @@
 `--dwarf-stack-traces` in a 64-bit Linux development environment:
 
 ```bash
-$ python3 tools/build.py -a x64 -m release runtime_kernel runtime_precompiled
+$ python3 tools/build.py -a x64 -m release runtime runtime_precompiled
 
 $ pkg/vm/tool/gen_kernel --platform out/ReleaseX64/vm_platform_strong.dill -o throws.dill throws.dart
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index a328eb7..861a87f 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3136,7 +3136,6 @@
   Dart_kCanonicalizeUrl = 0,
   Dart_kImportTag,
   Dart_kKernelTag,
-  Dart_kImportExtensionTag,
 } Dart_LibraryTag;
 
 /**
@@ -3171,10 +3170,6 @@
  * script tags. The return value should be an error or a TypedData containing
  * the kernel bytes.
  *
- * Dart_kImportExtensionTag
- *
- * This tag is used to load an external import (shared object file). The
- * extension path must have the scheme 'dart-ext:'.
  */
 typedef Dart_Handle (*Dart_LibraryTagHandler)(
     Dart_LibraryTag tag,
@@ -3538,6 +3533,7 @@
   Dart_KernelCompilationStatus_Ok = 0,
   Dart_KernelCompilationStatus_Error = 1,
   Dart_KernelCompilationStatus_Crash = 2,
+  Dart_KernelCompilationStatus_MsgFailed = 3,
 } Dart_KernelCompilationStatus;
 
 typedef struct {
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index a40c522..f99fff1 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -45,6 +45,7 @@
   Dart_CObject_kExternalTypedData,
   Dart_CObject_kSendPort,
   Dart_CObject_kCapability,
+  Dart_CObject_kNativePointer,
   Dart_CObject_kUnsupported,
   Dart_CObject_kNumberOfTypes
 } Dart_CObject_Type;
@@ -70,16 +71,21 @@
     } as_array;
     struct {
       Dart_TypedData_Type type;
-      intptr_t length;
+      intptr_t length; /* in elements, not bytes */
       uint8_t* values;
     } as_typed_data;
     struct {
       Dart_TypedData_Type type;
-      intptr_t length;
+      intptr_t length; /* in elements, not bytes */
       uint8_t* data;
       void* peer;
       Dart_HandleFinalizer callback;
     } as_external_typed_data;
+    struct {
+      intptr_t ptr;
+      intptr_t size;
+      Dart_HandleFinalizer callback;
+    } as_native_pointer;
   } value;
 } Dart_CObject;
 // This struct is versioned by DART_API_DL_MAJOR_VERSION, bump the version when
diff --git a/runtime/include/dart_tools_api.h b/runtime/include/dart_tools_api.h
index 7d40798..f36ec6b 100644
--- a/runtime/include/dart_tools_api.h
+++ b/runtime/include/dart_tools_api.h
@@ -385,42 +385,6 @@
  */
 DART_EXPORT int64_t Dart_TimelineGetTicksFrequency();
 
-/** Timeline stream for Dart API calls */
-#define DART_TIMELINE_STREAM_API (1 << 0)
-/** Timeline stream for compiler events */
-#define DART_TIMELINE_STREAM_COMPILER (1 << 1)
-/** Timeline stream for Dart provided events */
-#define DART_TIMELINE_STREAM_DART (1 << 2)
-/** Timeline stream for debugger provided events */
-#define DART_TIMELINE_STREAM_DEBUGGER (1 << 3)
-/** Timeline stream for embedder provided events */
-#define DART_TIMELINE_STREAM_EMBEDDER (1 << 4)
-/** Timeline stream for GC events */
-#define DART_TIMELINE_STREAM_GC (1 << 5)
-/** Timeline stream for isolate events */
-#define DART_TIMELINE_STREAM_ISOLATE (1 << 6)
-/** Timeline stream for VM events */
-#define DART_TIMELINE_STREAM_VM (1 << 7)
-
-/** All timeline streams */
-#define DART_TIMELINE_STREAM_ALL                                               \
-  (DART_TIMELINE_STREAM_API | DART_TIMELINE_STREAM_COMPILER |                  \
-   DART_TIMELINE_STREAM_DART | DART_TIMELINE_STREAM_DEBUGGER |                 \
-   DART_TIMELINE_STREAM_EMBEDDER | DART_TIMELINE_STREAM_GC |                   \
-   DART_TIMELINE_STREAM_ISOLATE | DART_TIMELINE_STREAM_VM)
-
-/** Disable all timeline stream recording */
-#define DART_TIMELINE_STREAM_DISABLE 0
-
-/**
- * Start recording timeline events for the entire VM (including all isolates).
- *
- * \param stream_mask A bitmask of streams that should be recorded.
- *
- * NOTE: Calling with 0 disables recording of all streams.
- */
-DART_EXPORT void Dart_GlobalTimelineSetRecordedStreams(int64_t stream_mask);
-
 typedef enum {
   Dart_Timeline_Event_Begin,          // Phase = 'B'.
   Dart_Timeline_Event_End,            // Phase = 'E'.
diff --git a/runtime/lib/class_id.cc b/runtime/lib/class_id.cc
deleted file mode 100644
index c0f5295..0000000
--- a/runtime/lib/class_id.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for 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/assert.h"
-#include "vm/bootstrap_natives.h"
-
-namespace dart {
-
-DEFINE_NATIVE_ENTRY(ClassID_getID, 0, 1) {
-  const Instance& instance =
-      Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
-  return Smi::New(instance.GetClassId());
-}
-
-}  // namespace dart
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index bc7c33b..a731707 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -67,23 +67,6 @@
   return Double::New(left / right);
 }
 
-static IntegerPtr DoubleToInteger(double val, const char* error_msg) {
-  if (isinf(val) || isnan(val)) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, String::Handle(String::New(error_msg)));
-    Exceptions::ThrowByType(Exceptions::kUnsupported, args);
-  }
-  int64_t ival = 0;
-  if (val <= static_cast<double>(kMinInt64)) {
-    ival = kMinInt64;
-  } else if (val >= static_cast<double>(kMaxInt64)) {
-    ival = kMaxInt64;
-  } else {  // Representable in int64_t.
-    ival = static_cast<int64_t>(val);
-  }
-  return Integer::New(ival);
-}
-
 DEFINE_NATIVE_ENTRY(Double_hashCode, 0, 1) {
   double val = Double::CheckedHandle(zone, arguments->NativeArgAt(0)).value();
   if (FLAG_trace_intrinsified_natives) {
@@ -101,17 +84,6 @@
   return Smi::New(((uval >> 32) ^ (uval)) & kSmiMax);
 }
 
-DEFINE_NATIVE_ENTRY(Double_trunc_div, 0, 2) {
-  double left = Double::CheckedHandle(zone, arguments->NativeArgAt(0)).value();
-  GET_NON_NULL_NATIVE_ARGUMENT(Double, right_object, arguments->NativeArgAt(1));
-  double right = right_object.value();
-  if (FLAG_trace_intrinsified_natives) {
-    OS::PrintErr("Double_trunc_div %f ~/ %f\n", left, right);
-  }
-  return DoubleToInteger(trunc(left / right),
-                         "Result of truncating division is Infinity or NaN");
-}
-
 DEFINE_NATIVE_ENTRY(Double_modulo, 0, 2) {
   double left = Double::CheckedHandle(zone, arguments->NativeArgAt(0)).value();
   GET_NON_NULL_NATIVE_ARGUMENT(Double, right_object, arguments->NativeArgAt(1));
@@ -187,7 +159,7 @@
 
 DEFINE_NATIVE_ENTRY(Double_toInt, 0, 1) {
   const Double& arg = Double::CheckedHandle(zone, arguments->NativeArgAt(0));
-  return DoubleToInteger(arg.value(), "Infinity or NaN toInt");
+  return DoubleToInteger(zone, arg.value());
 }
 
 DEFINE_NATIVE_ENTRY(Double_parse, 0, 3) {
diff --git a/runtime/lib/ffi_dynamic_library.cc b/runtime/lib/ffi_dynamic_library.cc
index b2f8c37..afb94aa 100644
--- a/runtime/lib/ffi_dynamic_library.cc
+++ b/runtime/lib/ffi_dynamic_library.cc
@@ -8,71 +8,52 @@
 #include "vm/globals.h"
 #include "vm/native_entry.h"
 
-#if !defined(DART_HOST_OS_LINUX) && !defined(DART_HOST_OS_MACOS) &&            \
-    !defined(DART_HOST_OS_ANDROID) && !defined(DART_HOST_OS_FUCHSIA)
-// TODO(dacoharkes): Implement dynamic libraries for other targets & merge the
-// implementation with:
-// - runtime/bin/extensions.h
-// - runtime/bin/extensions_linux.cc
-// TODO(dacoharkes): Make the code from bin available in a manner similar to
-// runtime/vm/dart.h Dart_FileReadCallback.
-#else
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
 #include <dlfcn.h>
 #endif
 
 namespace dart {
 
-static void* LoadExtensionLibrary(const char* library_file) {
-#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
-    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
-  void* handle = dlopen(library_file, RTLD_LAZY);
-  if (handle == nullptr) {
-    char* error = dlerror();
+static void* LoadDynamicLibrary(const char* library_file) {
+  char* error = nullptr;
+  void* handle = Utils::LoadDynamicLibrary(library_file, &error);
+  if (error != nullptr) {
     const String& msg = String::Handle(String::NewFormatted(
-        "Failed to load dynamic library '%s': %s", library_file, error));
+        "Failed to load dynamic library '%s': %s",
+        library_file != nullptr ? library_file : "<process>", error));
+    free(error);
     Exceptions::ThrowArgumentError(msg);
   }
-
   return handle;
-#elif defined(DART_HOST_OS_WINDOWS)
-  SetLastError(0);  // Clear any errors.
+}
 
-  void* ext;
-
-  if (library_file == nullptr) {
-    ext = GetModuleHandle(nullptr);
-  } else {
-    // Convert to wchar_t string.
-    const int name_len =
-        MultiByteToWideChar(CP_UTF8, 0, library_file, -1, NULL, 0);
-    wchar_t* name = new wchar_t[name_len];
-    MultiByteToWideChar(CP_UTF8, 0, library_file, -1, name, name_len);
-
-    ext = LoadLibraryW(name);
-    delete[] name;
-  }
-
-  if (ext == nullptr) {
-    const int error = GetLastError();
+static void* ResolveSymbol(void* handle, const char* symbol) {
+  char* error = nullptr;
+  void* result = Utils::ResolveSymbolInDynamicLibrary(handle, symbol, &error);
+  if (error != nullptr) {
     const String& msg = String::Handle(String::NewFormatted(
-        "Failed to load dynamic library '%s': %i", library_file, error));
+        "Failed to lookup symbol '%s': %s", symbol, error));
+    free(error);
     Exceptions::ThrowArgumentError(msg);
   }
+  return result;
+}
 
-  return ext;
-#else
-  const Array& args = Array::Handle(Array::New(1));
-  args.SetAt(0,
-             String::Handle(String::New(
-                 "The dart:ffi library is not available on this platform.")));
-  Exceptions::ThrowByType(Exceptions::kUnsupported, args);
-#endif
+static bool SymbolExists(void* handle, const char* symbol) {
+  char* error = nullptr;
+  Utils::ResolveSymbolInDynamicLibrary(handle, symbol, &error);
+  if (error != nullptr) {
+    free(error);
+    return false;
+  }
+  return true;
 }
 
 DEFINE_NATIVE_ENTRY(Ffi_dl_open, 0, 1) {
   GET_NON_NULL_NATIVE_ARGUMENT(String, lib_path, arguments->NativeArgAt(0));
 
-  void* handle = LoadExtensionLibrary(lib_path.ToCString());
+  void* handle = LoadDynamicLibrary(lib_path.ToCString());
 
   return DynamicLibrary::New(handle);
 }
@@ -91,39 +72,7 @@
 }
 
 DEFINE_NATIVE_ENTRY(Ffi_dl_executableLibrary, 0, 0) {
-  return DynamicLibrary::New(LoadExtensionLibrary(nullptr));
-}
-
-static void* ResolveSymbol(void* handle, const char* symbol) {
-#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
-    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
-  dlerror();  // Clear any errors.
-  void* pointer = dlsym(handle, symbol);
-  char* error = dlerror();
-  if (error != nullptr) {
-    const String& msg = String::Handle(
-        String::NewFormatted("Failed to lookup symbol (%s)", error));
-    Exceptions::ThrowArgumentError(msg);
-  }
-  return pointer;
-#elif defined(DART_HOST_OS_WINDOWS)
-  SetLastError(0);
-  void* pointer = reinterpret_cast<void*>(
-      GetProcAddress(reinterpret_cast<HMODULE>(handle), symbol));
-  if (pointer == nullptr) {
-    const int error = GetLastError();
-    const String& msg = String::Handle(
-        String::NewFormatted("Failed to lookup symbol (%i)", error));
-    Exceptions::ThrowArgumentError(msg);
-  }
-  return pointer;
-#else
-  const Array& args = Array::Handle(Array::New(1));
-  args.SetAt(0,
-             String::Handle(String::New(
-                 "The dart:ffi library is not available on this platform.")));
-  Exceptions::ThrowByType(Exceptions::kUnsupported, args);
-#endif
+  return DynamicLibrary::New(LoadDynamicLibrary(nullptr));
 }
 
 DEFINE_NATIVE_ENTRY(Ffi_dl_lookup, 1, 2) {
@@ -147,25 +96,6 @@
   return Integer::NewFromUint64(handle);
 }
 
-static bool SymbolExists(void* handle, const char* symbol) {
-#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
-    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
-  dlerror();  // Clear previous error, if any.
-  dlsym(handle, symbol);
-  // Checking whether dlsym returns a nullptr is not enough, as the value of
-  // the symbol could actually be NULL. Check the error condition instead.
-  return dlerror() == nullptr;
-#elif defined(DART_HOST_OS_WINDOWS)
-  return GetProcAddress(reinterpret_cast<HMODULE>(handle), symbol) != nullptr;
-#else
-  const Array& args = Array::Handle(Array::New(1));
-  args.SetAt(0,
-             String::Handle(String::New(
-                 "The dart:ffi library is not available on this platform.")));
-  Exceptions::ThrowByType(Exceptions::kUnsupported, args);
-#endif
-}
-
 DEFINE_NATIVE_ENTRY(Ffi_dl_providesSymbol, 0, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(DynamicLibrary, dlib, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, argSymbolName,
diff --git a/runtime/lib/function.cc b/runtime/lib/function.cc
index 53ff1e6..77800d4 100644
--- a/runtime/lib/function.cc
+++ b/runtime/lib/function.cc
@@ -40,34 +40,45 @@
     return false;
   }
   const auto& other_closure = Closure::Cast(other);
-  // Check that the delayed type argument vectors match.
-  if (receiver.delayed_type_arguments() !=
-      other_closure.delayed_type_arguments()) {
-    // Mismatches should only happen when a generic function is involved.
-    ASSERT(Function::Handle(receiver.function()).IsGeneric() ||
-           Function::Handle(other_closure.function()).IsGeneric());
-    return false;
-  }
-  // Closures that are not implicit instance closures are unique.
+  // Closures that are not implicit closures (tear-offs) are unique.
   const auto& func_a = Function::Handle(zone, receiver.function());
-  if (!func_a.IsImplicitInstanceClosureFunction()) {
+  if (!func_a.IsImplicitClosureFunction()) {
     return false;
   }
   const auto& func_b = Function::Handle(zone, other_closure.function());
-  if (!func_b.IsImplicitInstanceClosureFunction()) {
+  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.name() != func_b.name() || func_a.Owner() != func_b.Owner() ||
+       func_a.is_static() != func_b.is_static())) {
     return false;
   }
-  // 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);
+  // Check that the delayed type argument vectors match.
+  if (receiver.delayed_type_arguments() !=
+      other_closure.delayed_type_arguments()) {
+    // Mismatches should only happen when a generic function is involved.
+    ASSERT(func_a.IsGeneric() || func_b.IsGeneric());
+    const auto& type_args_a =
+        TypeArguments::Handle(zone, receiver.delayed_type_arguments());
+    const auto& type_args_b =
+        TypeArguments::Handle(zone, other_closure.delayed_type_arguments());
+    if (type_args_a.IsNull() || type_args_b.IsNull() ||
+        (type_args_a.Length() != type_args_b.Length()) ||
+        !type_args_a.IsEquivalent(type_args_b, TypeEquality::kSyntactical)) {
+      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);
+  }
+  return true;
 }
 
 DEFINE_NATIVE_ENTRY(Closure_equals, 0, 2) {
diff --git a/runtime/lib/internal_sources.gni b/runtime/lib/internal_sources.gni
deleted file mode 100644
index b16eafe..0000000
--- a/runtime/lib/internal_sources.gni
+++ /dev/null
@@ -1,6 +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.
-
-# Sources that patch the library "dart:_internal".
-internal_runtime_cc_files = [ "class_id.cc" ]
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 0b72f7f..5dfb8b8 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -108,28 +108,16 @@
 
   const Dart_Port destination_port_id = port.Id();
   const bool can_send_any_object = isolate->origin_id() == port.origin_id();
-
-  if (ApiObjectConverter::CanConvert(obj.ptr())) {
-    PortMap::PostMessage(
-        Message::New(destination_port_id, obj.ptr(), Message::kNormalPriority));
-  } else {
-    const bool same_group = FLAG_enable_isolate_groups &&
-                            PortMap::IsReceiverInThisIsolateGroup(
-                                destination_port_id, isolate->group());
-    if (same_group) {
-      const auto& copy = Object::Handle(CopyMutableObjectGraph(obj));
-      auto handle = isolate->group()->api_state()->AllocatePersistentHandle();
-      handle->set_ptr(copy.ptr());
-      std::unique_ptr<Message> message(
-          new Message(destination_port_id, handle, Message::kNormalPriority));
-      PortMap::PostMessage(std::move(message));
-    } else {
-      // TODO(turnidge): Throw an exception when the return value is false?
-      PortMap::PostMessage(WriteMessage(can_send_any_object, obj,
-                                        destination_port_id,
-                                        Message::kNormalPriority));
-    }
-  }
+  // We have to check whether the reciever has the same isolate group (e.g.
+  // native message handlers such as an IOService handler does not but does
+  // share the same origin port).
+  const bool same_group =
+      FLAG_enable_isolate_groups && PortMap::IsReceiverInThisIsolateGroup(
+                                        destination_port_id, isolate->group());
+  // TODO(turnidge): Throw an exception when the return value is false?
+  PortMap::PostMessage(WriteMessage(can_send_any_object, same_group, obj,
+                                    destination_port_id,
+                                    Message::kNormalPriority));
   return Object::null();
 }
 
@@ -299,8 +287,12 @@
   Object& validated_result = Object::Handle(zone);
   const Object& msg_obj = Object::Handle(zone, obj.ptr());
   validated_result = ValidateMessageObject(zone, isolate, msg_obj);
-  // msg_array = [<message>, <object-in-message-to-rehash>]
-  const Array& msg_array = Array::Handle(zone, Array::New(2));
+  // msg_array = [
+  //     <message>,
+  //     <collection-lib-objects-to-rehash>,
+  //     <core-lib-objects-to-rehash>,
+  // ]
+  const Array& msg_array = Array::Handle(zone, Array::New(3));
   msg_array.SetAt(0, msg_obj);
   if (validated_result.IsUnhandledException()) {
     Exceptions::PropagateError(Error::Cast(validated_result));
@@ -328,6 +320,7 @@
                     Dart_Port origin_id,
                     const char* script_url,
                     const Function& func,
+                    PersistentHandle* closure_tuple_handle,
                     SerializedObjectBuffer* message_buffer,
                     const char* package_config,
                     bool paused,
@@ -362,14 +355,20 @@
   const char* class_name() const { return class_name_; }
   const char* function_name() const { return function_name_; }
   const char* debug_name() const { return debug_name_; }
-  bool is_spawn_uri() const { return library_url_ == nullptr; }
+  bool is_spawn_uri() const {
+    return library_url_ == nullptr &&         // No top-level entrypoint.
+           closure_tuple_handle_ == nullptr;  // No closure entrypoint.
+  }
   bool paused() const { return paused_; }
   bool errors_are_fatal() const { return errors_are_fatal_; }
   Dart_IsolateFlags* isolate_flags() { return &isolate_flags_; }
+  PersistentHandle* closure_tuple_handle() const {
+    return closure_tuple_handle_;
+  }
 
   ObjectPtr ResolveFunction();
-  InstancePtr BuildArgs(Thread* thread);
-  InstancePtr BuildMessage(Thread* thread);
+  ObjectPtr BuildArgs(Thread* thread);
+  ObjectPtr BuildMessage(Thread* thread);
 
   IsolateGroup* isolate_group() const { return isolate_group_; }
 
@@ -385,6 +384,7 @@
   const char* class_name_ = nullptr;
   const char* function_name_ = nullptr;
   const char* debug_name_;
+  PersistentHandle* closure_tuple_handle_ = nullptr;
   IsolateGroup* isolate_group_;
   std::unique_ptr<Message> serialized_args_;
   std::unique_ptr<Message> serialized_message_;
@@ -405,6 +405,7 @@
                                      Dart_Port origin_id,
                                      const char* script_url,
                                      const Function& func,
+                                     PersistentHandle* closure_tuple_handle,
                                      SerializedObjectBuffer* message_buffer,
                                      const char* package_config,
                                      bool paused,
@@ -420,25 +421,34 @@
       script_url_(script_url),
       package_config_(package_config),
       debug_name_(debug_name),
+      closure_tuple_handle_(closure_tuple_handle),
       isolate_group_(isolate_group),
       serialized_args_(nullptr),
       serialized_message_(message_buffer->StealMessage()),
       paused_(paused),
       errors_are_fatal_(errors_are_fatal) {
+  // Either we have a top-level function or we have a closure.
+  ASSERT((closure_tuple_handle_ != nullptr) == func.IsNull());
+
   auto thread = Thread::Current();
   auto isolate = thread->isolate();
-  auto zone = thread->zone();
-  const auto& cls = Class::Handle(zone, func.Owner());
-  const auto& lib = Library::Handle(zone, cls.library());
-  const auto& lib_url = String::Handle(zone, lib.url());
-  library_url_ = NewConstChar(lib_url.ToCString());
 
-  String& func_name = String::Handle(zone);
-  func_name = func.name();
-  function_name_ = NewConstChar(String::ScrubName(func_name));
-  if (!cls.IsTopLevel()) {
-    const auto& class_name = String::Handle(zone, cls.Name());
-    class_name_ = NewConstChar(class_name.ToCString());
+  if (!func.IsNull()) {
+    auto zone = thread->zone();
+    const auto& cls = Class::Handle(zone, func.Owner());
+    const auto& lib = Library::Handle(zone, cls.library());
+    const auto& lib_url = String::Handle(zone, lib.url());
+    library_url_ = NewConstChar(lib_url.ToCString());
+
+    String& func_name = String::Handle(zone);
+    func_name = func.name();
+    function_name_ = NewConstChar(String::ScrubName(func_name));
+    if (!cls.IsTopLevel()) {
+      const auto& class_name = String::Handle(zone, cls.Name());
+      class_name_ = NewConstChar(class_name.ToCString());
+    }
+  } else {
+    ASSERT(closure_tuple_handle != nullptr);
   }
 
   // Inherit flags from spawning isolate.
@@ -455,14 +465,14 @@
                                      Dart_Port on_exit_port,
                                      Dart_Port on_error_port,
                                      const char* debug_name,
-                                     IsolateGroup* group)
+                                     IsolateGroup* isolate_group)
     : parent_port_(parent_port),
       on_exit_port_(on_exit_port),
       on_error_port_(on_error_port),
       script_url_(script_url),
       package_config_(package_config),
       debug_name_(debug_name),
-      isolate_group_(group),
+      isolate_group_(isolate_group),
       serialized_args_(args_buffer->StealMessage()),
       serialized_message_(message_buffer->StealMessage()),
       isolate_flags_(),
@@ -565,26 +575,29 @@
   return func.ptr();
 }
 
-static InstancePtr DeserializeMessage(Thread* thread, Message* message) {
+static ObjectPtr DeserializeMessage(Thread* thread, Message* message) {
   if (message == NULL) {
-    return Instance::null();
+    return Object::null();
   }
-  Zone* zone = thread->zone();
   if (message->IsRaw()) {
-    return Instance::RawCast(message->raw_obj());
+    return Object::RawCast(message->raw_obj());
   } else {
-    const Object& obj = Object::Handle(zone, ReadMessage(thread, message));
-    ASSERT(!obj.IsError());
-    return Instance::RawCast(obj.ptr());
+    return ReadMessage(thread, message);
   }
 }
 
-InstancePtr IsolateSpawnState::BuildArgs(Thread* thread) {
-  return DeserializeMessage(thread, serialized_args_.get());
+ObjectPtr IsolateSpawnState::BuildArgs(Thread* thread) {
+  const Object& result =
+      Object::Handle(DeserializeMessage(thread, serialized_args_.get()));
+  serialized_args_.reset();
+  return result.ptr();
 }
 
-InstancePtr IsolateSpawnState::BuildMessage(Thread* thread) {
-  return DeserializeMessage(thread, serialized_message_.get());
+ObjectPtr IsolateSpawnState::BuildMessage(Thread* thread) {
+  const Object& result =
+      Object::Handle(DeserializeMessage(thread, serialized_message_.get()));
+  serialized_message_.reset();
+  return result.ptr();
 }
 
 static void ThrowIsolateSpawnException(const String& message) {
@@ -668,7 +681,7 @@
     parent_isolate_ = nullptr;
 
     if (isolate == nullptr) {
-      FailedSpawn(error);
+      FailedSpawn(error, false);
       free(error);
       return;
     }
@@ -676,8 +689,8 @@
     void* child_isolate_data = nullptr;
     const bool success = initialize_callback(&child_isolate_data, &error);
     if (!success) {
-      Dart_ShutdownIsolate();
       FailedSpawn(error);
+      Dart_ShutdownIsolate();
       free(error);
       return;
     }
@@ -707,6 +720,7 @@
     }
 
     if (!success) {
+      state_ = nullptr;
       Dart_ShutdownIsolate();
       return;
     }
@@ -739,26 +753,53 @@
   bool EnqueueEntrypointInvocationAndNotifySpawner(Thread* thread) {
     auto isolate = thread->isolate();
     auto zone = thread->zone();
+    const bool is_spawn_uri = state_->is_spawn_uri();
 
     // Step 1) Resolve the entrypoint function.
-    auto& result = Object::Handle(zone, state_->ResolveFunction());
-    const bool is_spawn_uri = state_->is_spawn_uri();
-    if (result.IsError()) {
-      ASSERT(is_spawn_uri);
-      ReportError("Failed to resolve entrypoint function.");
-      return false;
+    auto& entrypoint_closure = Closure::Handle(zone);
+    if (state_->closure_tuple_handle() != nullptr) {
+      const auto& result = Object::Handle(
+          zone,
+          ReadObjectGraphCopyMessage(thread, state_->closure_tuple_handle()));
+      if (result.IsError()) {
+        ReportError(
+            "Failed to deserialize the passed entrypoint to the new isolate.");
+        return false;
+      }
+      entrypoint_closure = Closure::RawCast(result.ptr());
+    } else {
+      const auto& result = Object::Handle(zone, state_->ResolveFunction());
+      if (result.IsError()) {
+        ASSERT(is_spawn_uri);
+        ReportError("Failed to resolve entrypoint function.");
+        return false;
+      }
+      ASSERT(result.IsFunction());
+      auto& func = Function::Handle(zone, Function::Cast(result).ptr());
+      func = func.ImplicitClosureFunction();
+      entrypoint_closure = func.ImplicitStaticClosure();
     }
-    ASSERT(result.IsFunction());
-    auto& func = Function::Handle(zone, Function::Cast(result).ptr());
-    func = func.ImplicitClosureFunction();
-    const auto& entrypoint_closure =
-        Object::Handle(zone, func.ImplicitStaticClosure());
 
     // Step 2) Enqueue delayed invocation of entrypoint callback.
+    const auto& args_obj = Object::Handle(zone, state_->BuildArgs(thread));
+    if (args_obj.IsError()) {
+      ReportError(
+          "Failed to deserialize the passed arguments to the new isolate.");
+      return false;
+    }
+    ASSERT(args_obj.IsNull() || args_obj.IsInstance());
+    const auto& message_obj =
+        Object::Handle(zone, state_->BuildMessage(thread));
+    if (message_obj.IsError()) {
+      ReportError(
+          "Failed to deserialize the passed arguments to the new isolate.");
+      return false;
+    }
+    ASSERT(message_obj.IsNull() || message_obj.IsInstance());
     const Array& args = Array::Handle(zone, Array::New(4));
     args.SetAt(0, entrypoint_closure);
-    args.SetAt(1, Instance::Handle(zone, state_->BuildArgs(thread)));
-    args.SetAt(2, Instance::Handle(zone, state_->BuildMessage(thread)));
+    args.SetAt(1, args_obj);
+    args.SetAt(2, message_obj);
     args.SetAt(3, is_spawn_uri ? Bool::True() : Bool::False());
 
     const auto& lib = Library::Handle(zone, Library::IsolateLibrary());
@@ -766,7 +807,8 @@
     const auto& entry_point =
         Function::Handle(zone, lib.LookupLocalFunction(entry_name));
     ASSERT(entry_point.IsFunction() && !entry_point.IsNull());
-    result = DartEntry::InvokeFunction(entry_point, args);
+    const auto& result =
+        Object::Handle(zone, DartEntry::InvokeFunction(entry_point, args));
     if (result.IsError()) {
       ReportError("Failed to enqueue delayed entrypoint invocation.");
       return false;
@@ -794,18 +836,33 @@
     {
       // If parent isolate died, we ignore the fact that we cannot notify it.
       PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
-                                        message, state_->parent_port(),
+                                        /* same_group */ false, message,
+                                        state_->parent_port(),
                                         Message::kNormalPriority));
     }
 
     return true;
   }
 
-  void FailedSpawn(const char* error) {
+  void FailedSpawn(const char* error, bool has_current_isolate = true) {
     ReportError(error != nullptr
                     ? error
                     : "Unknown error occured during Isolate spawning.");
-    state_ = nullptr;
+    // Destruction of [IsolateSpawnState] may cause destruction of [Message]
+    // which make need to delete persistent handles (which requires a current
+    // isolate group).
+    if (has_current_isolate) {
+      ASSERT(IsolateGroup::Current() == state_->isolate_group());
+      state_ = nullptr;
+    } else {
+      ASSERT(IsolateGroup::Current() == nullptr);
+      const bool kBypassSafepoint = false;
+      const bool result = Thread::EnterIsolateGroupAsHelper(
+          state_->isolate_group(), Thread::kUnknownTask, kBypassSafepoint);
+      ASSERT(result);
+      state_ = nullptr;
+      Thread::ExitIsolateGroupAsHelper(kBypassSafepoint);
+    }
   }
 
   void ReportError(const char* error) {
@@ -833,67 +890,87 @@
   return result;
 }
 
-DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 11) {
+static FunctionPtr GetTopLevelFunction(Zone* zone, const Instance& closure) {
+  if (closure.IsClosure()) {
+    auto& func = Function::Handle(zone);
+    func = Closure::Cast(closure).function();
+    if (func.IsImplicitClosureFunction() && func.is_static()) {
+      ASSERT(Closure::Cast(closure).context() == Context::null());
+      // Get the parent function so that we get the right function name.
+      return func.parent_function();
+    }
+  }
+  return Function::null();
+}
+
+DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 10) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
-  GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(2));
+  GET_NON_NULL_NATIVE_ARGUMENT(Closure, closure, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(3));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(4));
   GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(5));
   GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(6));
   GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(7));
   GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
-  GET_NATIVE_ARGUMENT(Bool, newIsolateGroup, arguments->NativeArgAt(9));
-  GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(10));
+  GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(9));
 
-  if (closure.IsClosure()) {
-    Function& func = Function::Handle();
-    func = Closure::Cast(closure).function();
-    if (func.IsImplicitClosureFunction() && func.is_static()) {
-#if defined(DEBUG)
-      Context& ctx = Context::Handle();
-      ctx = Closure::Cast(closure).context();
-      ASSERT(ctx.IsNull());
-#endif
-      // Get the parent function so that we get the right function name.
-      func = func.parent_function();
-
-      bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
-      Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
-      Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
-
-      // We first try to serialize the message.  In case the message is not
-      // serializable this will throw an exception.
-      SerializedObjectBuffer message_buffer;
-      {
-        message_buffer.set_message(WriteMessage(
-            /* can_send_any_object */ true, message, ILLEGAL_PORT,
-            Message::kNormalPriority));
-      }
-
-      const char* utf8_package_config =
-          packageConfig.IsNull() ? NULL : String2UTF8(packageConfig);
-      const char* utf8_debug_name =
-          debugName.IsNull() ? NULL : String2UTF8(debugName);
-      const bool in_new_isolate_group = newIsolateGroup.value();
-
-      std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
-          port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
-          &message_buffer, utf8_package_config, paused.value(), fatal_errors,
-          on_exit_port, on_error_port, utf8_debug_name,
-          in_new_isolate_group ? nullptr : isolate->group()));
-
-      // Since this is a call to Isolate.spawn, copy the parent isolate's code.
-      state->isolate_flags()->copy_parent_code = true;
-
-      isolate->group()->thread_pool()->Run<SpawnIsolateTask>(isolate,
-                                                             std::move(state));
-      return Object::null();
+  const auto& func = Function::Handle(zone, GetTopLevelFunction(zone, closure));
+  PersistentHandle* closure_tuple_handle = nullptr;
+  if (func.IsNull()) {
+    if (!FLAG_enable_isolate_groups) {
+      const String& msg = String::Handle(String::New(
+          "Isolate.spawn expects to be passed a static or top-level function"));
+      Exceptions::ThrowArgumentError(msg);
+    } else {
+      // We have a non-toplevel closure that we might need to copy.
+      // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
+      const auto& closure_copy_tuple = Object::Handle(
+          zone, CopyMutableObjectGraph(closure));  // Throws if it fails.
+      ASSERT(closure_copy_tuple.IsArray());
+      ASSERT(Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0))
+                 .IsClosure());
+      closure_tuple_handle =
+          isolate->group()->api_state()->AllocatePersistentHandle();
+      closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
     }
   }
-  const String& msg = String::Handle(String::New(
-      "Isolate.spawn expects to be passed a static or top-level function"));
-  Exceptions::ThrowArgumentError(msg);
+
+  bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
+  Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
+  Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
+
+  // We first try to serialize the message.  In case the message is not
+  // serializable this will throw an exception.
+  SerializedObjectBuffer message_buffer;
+  message_buffer.set_message(WriteMessage(
+      /* can_send_any_object */ true,
+      /* same_group */ FLAG_enable_isolate_groups, message, ILLEGAL_PORT,
+      Message::kNormalPriority));
+
+  const char* utf8_package_config =
+      packageConfig.IsNull() ? NULL : String2UTF8(packageConfig);
+  const char* utf8_debug_name =
+      debugName.IsNull() ? NULL : String2UTF8(debugName);
+  if (closure_tuple_handle != nullptr && utf8_debug_name == nullptr) {
+    ASSERT(func.IsNull());
+
+    const auto& closure_function = Function::Handle(zone, closure.function());
+    utf8_debug_name =
+        NewConstChar(closure_function.QualifiedUserVisibleNameCString());
+  }
+
+  std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
+      port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
+      closure_tuple_handle, &message_buffer, utf8_package_config,
+      paused.value(), fatal_errors, on_exit_port, on_error_port,
+      utf8_debug_name, isolate->group()));
+
+  // Since this is a call to Isolate.spawn, copy the parent isolate's code.
+  state->isolate_flags()->copy_parent_code = true;
+
+  isolate->group()->thread_pool()->Run<SpawnIsolateTask>(isolate,
+                                                         std::move(state));
   return Object::null();
 }
 
@@ -951,13 +1028,14 @@
   SerializedObjectBuffer arguments_buffer;
   SerializedObjectBuffer message_buffer;
   {
-    arguments_buffer.set_message(WriteMessage(/* can_send_any_object */ false,
-                                              args, ILLEGAL_PORT,
-                                              Message::kNormalPriority));
+    arguments_buffer.set_message(WriteMessage(
+        /* can_send_any_object */ false,
+        /* same_group */ false, args, ILLEGAL_PORT, Message::kNormalPriority));
   }
   {
     message_buffer.set_message(WriteMessage(/* can_send_any_object */ false,
-                                            message, ILLEGAL_PORT,
+                                            /* same_group */ false, message,
+                                            ILLEGAL_PORT,
                                             Message::kNormalPriority));
   }
 
@@ -1031,8 +1109,9 @@
   // Ensure message writer (and it's resources, e.g. forwarding tables) are
   // cleaned up before handling interrupts.
   {
-    PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false, msg,
-                                      port.Id(), Message::kOOBPriority));
+    PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
+                                      /* same_group */ false, msg, port.Id(),
+                                      Message::kOOBPriority));
   }
 
   // Drain interrupts before running so any IMMEDIATE operations on the current
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 10fc93a..02f2592 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -88,7 +88,18 @@
     return Type::Double();
   } else if (instance.IsType() || instance.IsFunctionType()) {
     return Type::DartTypeType();
+  } else if (IsArrayClassId(instance.GetClassId())) {
+    const auto& cls = Class::Handle(
+        zone, thread->isolate_group()->object_store()->list_class());
+    const auto& type_arguments =
+        TypeArguments::Handle(zone, instance.GetTypeArguments());
+    const auto& type = Type::Handle(
+        zone,
+        Type::New(cls, type_arguments, Nullability::kNonNullable, Heap::kNew));
+    type.SetIsFinalized();
+    return type.Canonicalize(thread, nullptr);
   }
+
   return instance.GetType(Heap::kNew);
 }
 
@@ -101,14 +112,18 @@
   if (left_cid != right_cid) {
     if (IsIntegerClassId(left_cid)) {
       return IsIntegerClassId(right_cid);
-    }
-    if (IsStringClassId(left_cid)) {
+    } else if (IsStringClassId(left_cid)) {
       return IsStringClassId(right_cid);
-    }
-    if (IsTypeClassId(left_cid)) {
+    } else if (IsTypeClassId(left_cid)) {
       return IsTypeClassId(right_cid);
+    } else if (IsArrayClassId(left_cid)) {
+      if (!IsArrayClassId(right_cid)) {
+        return false;
+      }
+      // Still need to check type arguments.
+    } else {
+      return false;
     }
-    return false;
   }
 
   if (left_cid == kClosureCid) {
@@ -175,14 +190,15 @@
   const bool is_instance_of = instance.IsInstanceOf(
       type, instantiator_type_arguments, function_type_arguments);
   if (FLAG_trace_type_checks) {
+    LogBlock lb;
     const char* result_str = is_instance_of ? "true" : "false";
-    OS::PrintErr("Native Object.instanceOf: result %s\n", result_str);
+    THR_Print("Native Object.instanceOf: result %s\n", result_str);
     const AbstractType& instance_type =
         AbstractType::Handle(zone, instance.GetType(Heap::kNew));
-    OS::PrintErr("  instance type: %s\n",
-                 String::Handle(zone, instance_type.Name()).ToCString());
-    OS::PrintErr("  test type: %s\n",
-                 String::Handle(zone, type.Name()).ToCString());
+    THR_Print("  instance type: %s\n",
+              String::Handle(zone, instance_type.Name()).ToCString());
+    THR_Print("  test type: %s\n",
+              String::Handle(zone, type.Name()).ToCString());
   }
   return Bool::Get(is_instance_of).ptr();
 }
diff --git a/runtime/lib/vmservice.cc b/runtime/lib/vmservice.cc
index 51ff5ea..f3dba9a 100644
--- a/runtime/lib/vmservice.cc
+++ b/runtime/lib/vmservice.cc
@@ -62,7 +62,7 @@
   // Serialize message.
   // TODO(turnidge): Throw an exception when the return value is false?
   bool result = PortMap::PostMessage(WriteMessage(
-      /* can_send_any_object */ false, message, sp.Id(),
+      /* can_send_any_object */ false, /* same_group */ false, message, sp.Id(),
       Message::kOOBPriority));
   return Bool::Get(result).ptr();
 #else
diff --git a/runtime/observatory/lib/src/elements/heap_snapshot.dart b/runtime/observatory/lib/src/elements/heap_snapshot.dart
index 1ddb59e..0aae569 100644
--- a/runtime/observatory/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/heap_snapshot.dart
@@ -642,6 +642,7 @@
     var blob = new Blob(_snapshotA!.chunks, 'application/octet-stream');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-heap-${now.year}-${now.month}-${now.day}.bin';
@@ -1197,7 +1198,7 @@
 
   static Iterable _getChildrenSuccessor(nodeDynamic) {
     SnapshotObject node = nodeDynamic;
-    return node.successors.take(kMaxChildren).toList();
+    return node.successors.toList();
   }
 
   static Iterable _getChildrenPredecessor(nodeDynamic) {
diff --git a/runtime/observatory/lib/src/elements/process_snapshot.dart b/runtime/observatory/lib/src/elements/process_snapshot.dart
index 66ad120..3c64441 100644
--- a/runtime/observatory/lib/src/elements/process_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/process_snapshot.dart
@@ -134,6 +134,7 @@
     var blob = new Blob([jsonEncode(_snapshotA)], 'application/json');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-process-${now.year}-${now.month}-${now.day}.json';
diff --git a/runtime/observatory/lib/src/elements/timeline/dashboard.dart b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
index d3c7e4b..5aca24a 100644
--- a/runtime/observatory/lib/src/elements/timeline/dashboard.dart
+++ b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
@@ -91,6 +91,7 @@
     if (_content == null) {
       _content = new DivElement()..classes = ['content-centered-big'];
     }
+    // ignore: unsafe_html
     _frame!.src = _makeFrameUrl();
     _content!.children = <Element>[
       new HeadingElement.h2()
diff --git a/runtime/observatory/lib/src/elements/timeline_page.dart b/runtime/observatory/lib/src/elements/timeline_page.dart
index 2a17e2b..d4b1a26 100644
--- a/runtime/observatory/lib/src/elements/timeline_page.dart
+++ b/runtime/observatory/lib/src/elements/timeline_page.dart
@@ -185,6 +185,7 @@
                 "This VM is forwarding timeline events to Fuchsia's system tracing. See the ",
           new AnchorElement()
             ..text = "Fuchsia Tracing Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://fuchsia.dev/fuchsia-src/development/tracing",
           new SpanElement()..text = ".",
         ];
@@ -200,6 +201,7 @@
                 "This VM is forwarding timeline events to Android's systrace. See the ",
           new AnchorElement()
             ..text = "systrace usage guide"
+            // ignore: unsafe_html
             ..href =
                 "https://developer.android.com/studio/command-line/systrace",
           new SpanElement()..text = ".",
@@ -217,6 +219,7 @@
                     "To track these events, open 'Instruments' and add the 'os_signpost' Filter. See the ",
           new AnchorElement()
             ..text = "Instruments Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://help.apple.com/instruments",
           new SpanElement()..text = ".",
         ];
diff --git a/runtime/observatory/lib/src/elements/view_footer.dart b/runtime/observatory/lib/src/elements/view_footer.dart
index 4d52516..1c8505b 100644
--- a/runtime/observatory/lib/src/elements/view_footer.dart
+++ b/runtime/observatory/lib/src/elements/view_footer.dart
@@ -38,9 +38,11 @@
   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/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 7d83c71..df4a4cd 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -676,8 +676,6 @@
   String targetCPU = 'unknown';
   String embedder = 'unknown';
   int architectureBits = 0;
-  bool assertsEnabled = false;
-  bool typeChecksEnabled = false;
   int nativeZoneMemoryUsage = 0;
   int pid = 0;
   int mallocUsed = 0;
@@ -1050,8 +1048,6 @@
     maxRSS = map['_maxRSS'];
     currentRSS = map['_currentRSS'];
     profileVM = map['_profilerMode'] == 'VM';
-    assertsEnabled = map['_assertsEnabled'];
-    typeChecksEnabled = map['_typeChecksEnabled'];
     _removeDeadIsolates([
       ...map['isolates'],
       ...map['systemIsolates'],
@@ -1550,7 +1546,7 @@
       // There are sometimes isolate refs in ServiceEvents.
       return vm.getFromMap(map);
     }
-    String mapId = map['id'];
+    String? mapId = map['id'];
     var obj = (mapId != null) ? _cache[mapId] : null;
     if (obj != null) {
       obj.updateFromServiceMap(map);
@@ -1559,7 +1555,7 @@
     // Build the object from the map directly.
     obj = ServiceObject._fromMap(this, map);
     if ((obj != null) && obj.canCache) {
-      _cache[mapId] = obj;
+      _cache[mapId!] = obj;
     }
     return obj;
   }
diff --git a/runtime/observatory/tests/service/breakpoint_gc_test.dart b/runtime/observatory/tests/service/breakpoint_gc_test.dart
new file mode 100644
index 0000000..6e11cbf
--- /dev/null
+++ b/runtime/observatory/tests/service/breakpoint_gc_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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE_A = 16;
+const int LINE_B = 19;
+const int LINE_C = 22;
+const String file = "breakpoint_gc_test.dart";
+
+foo() => 42;
+
+testeeMain() {
+  foo(); // static call
+
+  dynamic list = [1, 2, 3];
+  list.clear(); // instance call
+  print(list);
+
+  dynamic local = list; // debug step check = runtime call
+  return local;
+}
+
+Future forceGC(isolate) async {
+  await isolate.invokeRpcNoUpgrade("_collectAllGarbage", {});
+}
+
+var tests = <IsolateTest>[
+  hasPausedAtStart,
+  setBreakpointAtUriAndLine(file, LINE_A), // at `foo()`
+  setBreakpointAtUriAndLine(file, LINE_B), // at `list.clear()`
+  setBreakpointAtUriAndLine(file, LINE_C), // at `local = list`
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  forceGC, // Should not crash
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  forceGC, // Should not crash
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  forceGC, // Should not crash
+  resumeIsolate,
+];
+
+main(args) {
+  runIsolateTestsSynchronous(args, tests,
+      testeeConcurrent: testeeMain, pause_on_start: true);
+}
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 6bec5f1..340b046 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'], 50);
+    expect(result['minor'], 51);
     expect(result['_privateMajor'], 0);
     expect(result['_privateMinor'], 0);
   },
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index d0bfa3e..ac5e9d7 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -112,8 +112,11 @@
     expect(arguments, isA<Map>());
     expect(arguments['isolateGroupId'], isA<String>());
     if (!const ['GC', 'Compiler', 'CompilerVerbose'].contains(event['cat']) &&
-        !const ['FinishTopLevelClassLoading', 'FinishClassLoading']
-            .contains(event['name'])) {
+        !const [
+          'FinishTopLevelClassLoading',
+          'FinishClassLoading',
+          'ProcessPendingClasses'
+        ].contains(event['name'])) {
       expect(arguments['isolateId'], isA<String>());
     }
   }
@@ -188,8 +191,14 @@
       .where((String arg) => !arg.contains('optimization-counter-threshold'))
       .toList();
 
+  // We first compile the testee to kernel and run the subprocess on the kernel
+  // file. That avoids cases where the testee has to run a lot of code in the
+  // kernel-isolate (e.g. due to ia32's kernel-service not being app-jit
+  // trained). We do that because otherwise the --complete-timeline will collect
+  // a lot of data, possibly leading to OOMs or timeouts.
   await runVMTests(args, tests,
       testeeBefore: primeTimeline,
       extraArgs: ['--complete-timeline'],
-      executableArgs: executableArgs);
+      executableArgs: executableArgs,
+      compileToKernelFirst: true);
 }
diff --git a/runtime/observatory/tests/service/object_graph_isolate_group_test.dart b/runtime/observatory/tests/service/object_graph_isolate_group_test.dart
new file mode 100644
index 0000000..d325f75
--- /dev/null
+++ b/runtime/observatory/tests/service/object_graph_isolate_group_test.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.
+
+// VMOptions=--enable_isolate_groups
+
+import 'dart:isolate' as isolate;
+import 'package:observatory/object_graph.dart';
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
+import 'test_helper.dart';
+
+// Make sure these fields are not removed by the tree shaker.
+@pragma("vm:entry-point")
+dynamic bigGlobal;
+
+child(message) {
+  var bigString = message[0] as String;
+  var replyPort = message[1] as isolate.SendPort;
+  bigGlobal = bigString;
+  replyPort.send(null);
+  new isolate.RawReceivePort(); // Keep child alive.
+}
+
+void script() {
+  var bigString = "x" * (1 << 20);
+  var port;
+  for (var i = 0; i < 2; i++) {
+    port = new isolate.RawReceivePort((_) => port.close());
+    isolate.Isolate.spawn(child, [bigString, port.sendPort]);
+  }
+  bigGlobal = bigString;
+  print("Ready");
+}
+
+var tests = <IsolateTest>[
+  (Isolate isolate) async {
+    var graph = await isolate.fetchHeapSnapshot().done;
+
+    // We are assuming the big string is the largest in the heap, and that it
+    // was shared/pass-by-pointer.
+    List<SnapshotObject> strings = graph.objects
+        .where((SnapshotObject obj) => obj.klass.name == "_OneByteString")
+        .toList();
+    strings.sort((u, v) => v.shallowSize - u.shallowSize);
+    SnapshotObject bigString = strings[0];
+    print("bigString: $bigString");
+    expect(bigString.shallowSize, greaterThanOrEqualTo(1 << 20));
+
+    int matchingPredecessors = 0;
+    for (SnapshotObject predecessor in bigString.predecessors) {
+      print("predecessor $predecessor ${predecessor.label}");
+      if (predecessor.label.contains("bigGlobal") &&
+          predecessor.klass.name.contains("Isolate")) {
+        matchingPredecessors++;
+      }
+    }
+
+    for (SnapshotObject object in graph.objects) {
+      if (object.klass.name.contains("Isolate")) {
+        print("$object / ${object.description}");
+      }
+    }
+
+    // Parent and two children. Seeing all 3 means we visited all the field tables.
+    expect(matchingPredecessors, equals(3));
+  }
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory/tests/service/object_graph_vm_test.dart b/runtime/observatory/tests/service/object_graph_vm_test.dart
index a4bf3fe..8a8e7ec 100644
--- a/runtime/observatory/tests/service/object_graph_vm_test.dart
+++ b/runtime/observatory/tests/service/object_graph_vm_test.dart
@@ -90,8 +90,8 @@
       int internalSum = 0;
       int externalSum = 0;
       for (SnapshotObject instance in klass.instances) {
-        if (instance == graph.root) {
-          // The root may have 0 self size.
+        if (instance == graph.root || instance.klass.name.contains("Isolate")) {
+          // The root and fake root subdivisions have 0 self size.
           expect(instance.internalSize, greaterThanOrEqualTo(0));
           expect(instance.externalSize, greaterThanOrEqualTo(0));
           expect(instance.shallowSize, greaterThanOrEqualTo(0));
@@ -122,8 +122,8 @@
     int internalSum = 0;
     int externalSum = 0;
     for (SnapshotObject instance in graph.objects) {
-      if (instance == graph.root) {
-        // The root may have 0 self size.
+      if (instance == graph.root || instance.klass.name.contains("Isolate")) {
+        // The root and fake root subdivisions have 0 self size.
         expect(instance.internalSize, greaterThanOrEqualTo(0));
         expect(instance.externalSize, greaterThanOrEqualTo(0));
         expect(instance.shallowSize, greaterThanOrEqualTo(0));
diff --git a/runtime/observatory/tests/service/regress_46419_test.dart b/runtime/observatory/tests/service/regress_46419_test.dart
new file mode 100644
index 0000000..9e1ef46
--- /dev/null
+++ b/runtime/observatory/tests/service/regress_46419_test.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.
+// VMOptions=--verbose-debug
+
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+// DO NOT REORDER BEYOND THIS POINT
+bool testing = false;
+void printSync() {
+  print('sync');
+  if (testing) {
+    // We'll never reach this code, but setting a breakpoint here will result in
+    // the breakpoint being resolved below at line 25.
+    print('unreachable'); // line 18, bp1
+  }
+}
+
+printSyncStar() sync* {
+  // We'll end up resolving breakpoint 1 to this location instead of at line 15
+  // if #46419 regresses.
+  print('sync*');
+}
+
+testeeDo() {
+  printSync();
+  final iterator = printSyncStar();
+
+  print('middle'); // Line 32, bp2
+
+  iterator.toList();
+}
+// END DO NOT REORDER SECTION
+
+late Breakpoint bp1;
+late Breakpoint bp2;
+
+final tests = <IsolateTest>[
+  hasPausedAtStart,
+  (Isolate isolate) async {
+    await isolate.rootLibrary.load();
+    final script = isolate.rootLibrary.scripts[0];
+
+    bp1 = await isolate.addBreakpoint(script, 18);
+    print("BP1 - $bp1");
+    expect(bp1, isNotNull);
+    expect(bp1 is Breakpoint, isTrue);
+    bp2 = await isolate.addBreakpoint(script, 32);
+    print("BP2 - $bp2");
+    expect(bp2, isNotNull);
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    final stream = await isolate.vm.getEventStream(VM.kDebugStream);
+    await for (ServiceEvent event in stream) {
+      if (event.kind == ServiceEvent.kPauseBreakpoint) {
+        var bp = event.breakpoint;
+        print('Hit $bp');
+        expect(bp, bp2);
+        await isolate.resume();
+        break;
+      }
+    }
+  }
+];
+
+void main([args = const []]) => runIsolateTests(
+      args,
+      tests,
+      testeeConcurrent: testeeDo,
+      pause_on_start: true,
+    );
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 3baefe9..c6e2222 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -27,7 +27,6 @@
 coverage_optimized_function_test: Pass, Slow
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
 evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
-get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
 pause_on_exception_from_slow_path_test: Pass, Slow
 pause_on_unhandled_async_exceptions2_test: Pass, Slow
 
@@ -53,6 +52,7 @@
 break_on_function_many_child_isolates_test: SkipByDesign # Debugger is disabled in AOT mode.
 break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_gc_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -163,6 +163,7 @@
 regress_28443_test: SkipByDesign # Debugger is disabled in AOT mode.
 regress_28980_test: SkipByDesign # Debugger is disabled in AOT mode.
 regress_34841_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_46419_test: SkipByDesign # Debugger is disabled in AOT mode.
 reload_sources_test: SkipByDesign # Hot reload is disabled in AOT mode.
 rewind_optimized_out_test: SkipByDesign # Debugger is disabled in AOT mode.
 rewind_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -212,6 +213,9 @@
 [ $arch != simarm && $arch != simarm64 && $arch != simarm64c && $compiler == dartk ]
 complex_reload_test: RuntimeError
 
+[ $compiler == app_jitk && $system == linux ]
+get_vm_timeline_rpc_test: Skip # Timeout.
+
 [ $compiler == dartk && $mode == debug ]
 isolate_lifecycle_test: Skip # Flaky.
 pause_idle_isolate_test: Skip # Flaky
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index 0369d53..487c098 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -7,8 +7,10 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
+
 import 'package:dds/dds.dart';
 import 'package:observatory/service_io.dart';
+import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'service_test_common.dart';
 export 'service_test_common.dart' show DDSTest, IsolateTest, VMTest;
@@ -94,7 +96,8 @@
   final _processCompleter = Completer<void>();
   bool killedByTester = false;
 
-  _ServiceTesteeLauncher() : args = [Platform.script.toFilePath()] {}
+  _ServiceTesteeLauncher({String? script})
+      : args = [script ?? Platform.script.toFilePath()] {}
 
   // Spawn the testee process.
   Future<Process> _spawnProcess(
@@ -343,6 +346,7 @@
     bool testeeControlsServer: false,
     bool enableDds: true,
     bool enableService: true,
+    bool compileToKernelFirst: false,
     int port = 0,
   }) {
     if (executableArgs == null) {
@@ -352,6 +356,7 @@
     late WebSocketVM vm;
     late _ServiceTesteeLauncher process;
     bool testsDone = false;
+    final tempDir = Directory.systemTemp.createTempSync('testee_dill');
 
     ignoreLateException(Function f) async {
       try {
@@ -369,7 +374,26 @@
     setUp(
       () => ignoreLateException(
         () async {
-          process = _ServiceTesteeLauncher();
+          String testeePath = Platform.script.toFilePath();
+          if (compileToKernelFirst && testeePath.endsWith('.dart')) {
+            final testeePathDill = path.join(tempDir.path, 'testee.dill');
+            final ProcessResult result =
+                await Process.run(Platform.executable, [
+              '--snapshot-kind=kernel',
+              '--snapshot=$testeePathDill',
+              ...Platform.executableArguments,
+              testeePath,
+            ]);
+            if (result.exitCode != 0) {
+              throw 'Failed to compile testee to kernel:\n'
+                  'stdout: ${result.stdout}\n'
+                  'stderr: ${result.stderr}\n'
+                  'exitCode: ${result.exitCode}\n';
+            }
+            testeePath = testeePathDill;
+          }
+
+          process = _ServiceTesteeLauncher(script: testeePath);
           await process
               .launch(
                   pause_on_start,
@@ -611,6 +635,7 @@
     bool enable_service_port_fallback: false,
     bool enableDds: true,
     bool enableService: true,
+    bool compileToKernelFirst: false,
     int port = 0,
     List<String>? extraArgs,
     List<String>? executableArgs}) async {
@@ -633,6 +658,7 @@
       enable_service_port_fallback: enable_service_port_fallback,
       enableDds: enableDds,
       enableService: enableService,
+      compileToKernelFirst: compileToKernelFirst,
       port: port,
     );
   }
diff --git a/runtime/observatory_2/lib/src/elements/heap_snapshot.dart b/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
index bfe8412..3ab4f6c 100644
--- a/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
@@ -642,6 +642,7 @@
     var blob = new Blob(_snapshotA.chunks, 'application/octet-stream');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-heap-${now.year}-${now.month}-${now.day}.bin';
@@ -1196,7 +1197,7 @@
 
   static Iterable _getChildrenSuccessor(nodeDynamic) {
     SnapshotObject node = nodeDynamic;
-    return node.successors.take(kMaxChildren).toList();
+    return node.successors.toList();
   }
 
   static Iterable _getChildrenPredecessor(nodeDynamic) {
diff --git a/runtime/observatory_2/lib/src/elements/process_snapshot.dart b/runtime/observatory_2/lib/src/elements/process_snapshot.dart
index 82593da..c3798c8 100644
--- a/runtime/observatory_2/lib/src/elements/process_snapshot.dart
+++ b/runtime/observatory_2/lib/src/elements/process_snapshot.dart
@@ -134,6 +134,7 @@
     var blob = new Blob([jsonEncode(_snapshotA)], 'application/json');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-process-${now.year}-${now.month}-${now.day}.json';
diff --git a/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart b/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
index 8826324..6e54478 100644
--- a/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
+++ b/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
@@ -91,6 +91,7 @@
     if (_content == null) {
       _content = new DivElement()..classes = ['content-centered-big'];
     }
+    // ignore: unsafe_html
     _frame.src = _makeFrameUrl();
     _content.children = <Element>[
       new HeadingElement.h2()
diff --git a/runtime/observatory_2/lib/src/elements/timeline_page.dart b/runtime/observatory_2/lib/src/elements/timeline_page.dart
index d16c393..aed6e5a 100644
--- a/runtime/observatory_2/lib/src/elements/timeline_page.dart
+++ b/runtime/observatory_2/lib/src/elements/timeline_page.dart
@@ -184,6 +184,7 @@
                 "This VM is forwarding timeline events to Fuchsia's system tracing. See the ",
           new AnchorElement()
             ..text = "Fuchsia Tracing Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://fuchsia.dev/fuchsia-src/development/tracing",
           new SpanElement()..text = ".",
         ];
@@ -199,6 +200,7 @@
                 "This VM is forwarding timeline events to Android's systrace. See the ",
           new AnchorElement()
             ..text = "systrace usage guide"
+            // ignore: unsafe_html
             ..href =
                 "https://developer.android.com/studio/command-line/systrace",
           new SpanElement()..text = ".",
@@ -216,6 +218,7 @@
                     "To track these events, open 'Instruments' and add the 'os_signpost' Filter. See the ",
           new AnchorElement()
             ..text = "Instruments Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://help.apple.com/instruments",
           new SpanElement()..text = ".",
         ];
diff --git a/runtime/observatory_2/lib/src/elements/view_footer.dart b/runtime/observatory_2/lib/src/elements/view_footer.dart
index d3fddb7..2f02451 100644
--- a/runtime/observatory_2/lib/src/elements/view_footer.dart
+++ b/runtime/observatory_2/lib/src/elements/view_footer.dart
@@ -38,9 +38,11 @@
   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/service/object.dart b/runtime/observatory_2/lib/src/service/object.dart
index 14d72c2..5e220dc 100644
--- a/runtime/observatory_2/lib/src/service/object.dart
+++ b/runtime/observatory_2/lib/src/service/object.dart
@@ -677,8 +677,6 @@
   String targetCPU;
   String embedder;
   int architectureBits;
-  bool assertsEnabled = false;
-  bool typeChecksEnabled = false;
   int nativeZoneMemoryUsage = 0;
   int pid = 0;
   int mallocUsed = 0;
@@ -1053,8 +1051,6 @@
     maxRSS = map['_maxRSS'];
     currentRSS = map['_currentRSS'];
     profileVM = map['_profilerMode'] == 'VM';
-    assertsEnabled = map['_assertsEnabled'];
-    typeChecksEnabled = map['_typeChecksEnabled'];
     _removeDeadIsolates([
       ...map['isolates'],
       ...map['systemIsolates'],
diff --git a/runtime/observatory_2/tests/service_2/breakpoint_gc_test.dart b/runtime/observatory_2/tests/service_2/breakpoint_gc_test.dart
new file mode 100644
index 0000000..6e11cbf
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/breakpoint_gc_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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE_A = 16;
+const int LINE_B = 19;
+const int LINE_C = 22;
+const String file = "breakpoint_gc_test.dart";
+
+foo() => 42;
+
+testeeMain() {
+  foo(); // static call
+
+  dynamic list = [1, 2, 3];
+  list.clear(); // instance call
+  print(list);
+
+  dynamic local = list; // debug step check = runtime call
+  return local;
+}
+
+Future forceGC(isolate) async {
+  await isolate.invokeRpcNoUpgrade("_collectAllGarbage", {});
+}
+
+var tests = <IsolateTest>[
+  hasPausedAtStart,
+  setBreakpointAtUriAndLine(file, LINE_A), // at `foo()`
+  setBreakpointAtUriAndLine(file, LINE_B), // at `list.clear()`
+  setBreakpointAtUriAndLine(file, LINE_C), // at `local = list`
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  forceGC, // Should not crash
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  forceGC, // Should not crash
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  forceGC, // Should not crash
+  resumeIsolate,
+];
+
+main(args) {
+  runIsolateTestsSynchronous(args, tests,
+      testeeConcurrent: testeeMain, pause_on_start: true);
+}
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 31490bf..9b7cdf5 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(50));
+    expect(result['minor'], equals(51));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/observatory_2/tests/service_2/get_vm_timeline_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_vm_timeline_rpc_test.dart
index 94e2654..38d088e 100644
--- a/runtime/observatory_2/tests/service_2/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_vm_timeline_rpc_test.dart
@@ -112,8 +112,11 @@
     expect(arguments, isA<Map>());
     expect(arguments['isolateGroupId'], isA<String>());
     if (!const ['GC', 'Compiler', 'CompilerVerbose'].contains(event['cat']) &&
-        !const ['FinishTopLevelClassLoading', 'FinishClassLoading']
-            .contains(event['name'])) {
+        !const [
+          'FinishTopLevelClassLoading',
+          'FinishClassLoading',
+          'ProcessPendingClasses'
+        ].contains(event['name'])) {
       expect(arguments['isolateId'], isA<String>());
     }
   }
@@ -188,8 +191,14 @@
       .where((String arg) => !arg.contains('optimization-counter-threshold'))
       .toList();
 
+  // We first compile the testee to kernel and run the subprocess on the kernel
+  // file. That avoids cases where the testee has to run a lot of code in the
+  // kernel-isolate (e.g. due to ia32's kernel-service not being app-jit
+  // trained). We do that because otherwise the --complete-timeline will collect
+  // a lot of data, possibly leading to OOMs or timeouts.
   await runVMTests(args, tests,
       testeeBefore: primeTimeline,
       extraArgs: ['--complete-timeline'],
-      executableArgs: executableArgs);
+      executableArgs: executableArgs,
+      compileToKernelFirst: true);
 }
diff --git a/runtime/observatory_2/tests/service_2/object_graph_isolate_group_test.dart b/runtime/observatory_2/tests/service_2/object_graph_isolate_group_test.dart
new file mode 100644
index 0000000..b9ddf82
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/object_graph_isolate_group_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.
+
+// VMOptions=--enable_isolate_groups
+
+// @dart = 2.7
+
+import 'dart:isolate' as isolate;
+import 'package:observatory_2/object_graph.dart';
+import 'package:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+import 'test_helper.dart';
+
+// Make sure these fields are not removed by the tree shaker.
+@pragma("vm:entry-point")
+dynamic bigGlobal;
+
+child(message) {
+  var bigString = message[0] as String;
+  var replyPort = message[1] as isolate.SendPort;
+  bigGlobal = bigString;
+  replyPort.send(null);
+  new isolate.RawReceivePort(); // Keep child alive.
+}
+
+void script() {
+  var bigString = "x" * (1 << 20);
+  var port;
+  for (var i = 0; i < 2; i++) {
+    port = new isolate.RawReceivePort((_) => port.close());
+    isolate.Isolate.spawn(child, [bigString, port.sendPort]);
+  }
+  bigGlobal = bigString;
+  print("Ready");
+}
+
+var tests = <IsolateTest>[
+  (Isolate isolate) async {
+    var graph = await isolate.fetchHeapSnapshot().done;
+
+    // We are assuming the big string is the largest in the heap, and that it
+    // was shared/pass-by-pointer.
+    List<SnapshotObject> strings = graph.objects
+        .where((SnapshotObject obj) => obj.klass.name == "_OneByteString")
+        .toList();
+    strings.sort((u, v) => v.shallowSize - u.shallowSize);
+    SnapshotObject bigString = strings[0];
+    print("bigString: $bigString");
+    expect(bigString.shallowSize, greaterThanOrEqualTo(1 << 20));
+
+    int matchingPredecessors = 0;
+    for (SnapshotObject predecessor in bigString.predecessors) {
+      print("predecessor $predecessor ${predecessor.label}");
+      if (predecessor.label.contains("bigGlobal") &&
+          predecessor.klass.name.contains("Isolate")) {
+        matchingPredecessors++;
+      }
+    }
+
+    for (SnapshotObject object in graph.objects) {
+      if (object.klass.name.contains("Isolate")) {
+        print("$object / ${object.description}");
+      }
+    }
+
+    // Parent and two children. Seeing all 3 means we visited all the field tables.
+    expect(matchingPredecessors, equals(3));
+  }
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory_2/tests/service_2/object_graph_vm_test.dart b/runtime/observatory_2/tests/service_2/object_graph_vm_test.dart
index d1cb655..81be62e 100644
--- a/runtime/observatory_2/tests/service_2/object_graph_vm_test.dart
+++ b/runtime/observatory_2/tests/service_2/object_graph_vm_test.dart
@@ -90,8 +90,8 @@
       int internalSum = 0;
       int externalSum = 0;
       for (SnapshotObject instance in klass.instances) {
-        if (instance == graph.root) {
-          // The root may have 0 self size.
+        if (instance == graph.root || instance.klass.name.contains("Isolate")) {
+          // The root and fake root subdivisions have 0 self size.
           expect(instance.internalSize, greaterThanOrEqualTo(0));
           expect(instance.externalSize, greaterThanOrEqualTo(0));
           expect(instance.shallowSize, greaterThanOrEqualTo(0));
@@ -122,8 +122,8 @@
     int internalSum = 0;
     int externalSum = 0;
     for (SnapshotObject instance in graph.objects) {
-      if (instance == graph.root) {
-        // The root may have 0 self size.
+      if (instance == graph.root || instance.klass.name.contains("Isolate")) {
+        // The root and fake root subdivisions have 0 self size.
         expect(instance.internalSize, greaterThanOrEqualTo(0));
         expect(instance.externalSize, greaterThanOrEqualTo(0));
         expect(instance.shallowSize, greaterThanOrEqualTo(0));
diff --git a/runtime/observatory_2/tests/service_2/regress_46419_test.dart b/runtime/observatory_2/tests/service_2/regress_46419_test.dart
new file mode 100644
index 0000000..9a80e0b
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/regress_46419_test.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.
+// VMOptions=--verbose-debug
+
+import 'package:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+// DO NOT REORDER BEYOND THIS POINT
+bool testing = false;
+void printSync() {
+  print('sync');
+  if (testing) {
+    // We'll never reach this code, but setting a breakpoint here will result in
+    // the breakpoint being resolved below at line 25.
+    print('unreachable'); // line 18, bp1
+  }
+}
+
+printSyncStar() sync* {
+  // We'll end up resolving breakpoint 1 to this location instead of at line 15
+  // if #46419 regresses.
+  print('sync*');
+}
+
+testeeDo() {
+  printSync();
+  final iterator = printSyncStar();
+
+  print('middle'); // Line 32, bp2
+
+  iterator.toList();
+}
+// END DO NOT REORDER SECTION
+
+Breakpoint bp1;
+Breakpoint bp2;
+
+final tests = <IsolateTest>[
+  hasPausedAtStart,
+  (Isolate isolate) async {
+    await isolate.rootLibrary.load();
+    final script = isolate.rootLibrary.scripts[0];
+
+    bp1 = await isolate.addBreakpoint(script, 18);
+    print("BP1 - $bp1");
+    expect(bp1, isNotNull);
+    expect(bp1 is Breakpoint, isTrue);
+    bp2 = await isolate.addBreakpoint(script, 32);
+    print("BP2 - $bp2");
+    expect(bp2, isNotNull);
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    final stream = await isolate.vm.getEventStream(VM.kDebugStream);
+    await for (ServiceEvent event in stream) {
+      if (event.kind == ServiceEvent.kPauseBreakpoint) {
+        var bp = event.breakpoint;
+        print('Hit $bp');
+        expect(bp, bp2);
+        await isolate.resume();
+        break;
+      }
+    }
+  }
+];
+
+void main([args = const []]) => runIsolateTests(
+      args,
+      tests,
+      testeeConcurrent: testeeDo,
+      pause_on_start: true,
+    );
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 1fb2444..83eb2d1 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -27,7 +27,6 @@
 coverage_optimized_function_test: Pass, Slow
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
 evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
-get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
 pause_on_exception_from_slow_path_test: Pass, Slow
 pause_on_unhandled_async_exceptions2_test: Pass, Slow
 
@@ -53,6 +52,7 @@
 break_on_function_many_child_isolates_test: SkipByDesign # Debugger is disabled in AOT mode.
 break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_gc_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -163,6 +163,7 @@
 regress_28443_test: SkipByDesign # Debugger is disabled in AOT mode.
 regress_28980_test: SkipByDesign # Debugger is disabled in AOT mode.
 regress_34841_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_46419_test: SkipByDesign # Debugger is disabled in AOT mode.
 reload_sources_test: SkipByDesign # Hot reload is disabled in AOT mode.
 rewind_optimized_out_test: SkipByDesign # Debugger is disabled in AOT mode.
 rewind_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -212,6 +213,9 @@
 [ $arch != simarm && $arch != simarm64 && $arch != simarm64c && $compiler == dartk ]
 complex_reload_test: RuntimeError
 
+[ $compiler == app_jitk && $system == linux ]
+get_vm_timeline_rpc_test: Skip # Timeout.
+
 [ $compiler == dartk && $mode == debug ]
 isolate_lifecycle_test: Skip # Flaky.
 pause_idle_isolate_test: Skip # Flaky
diff --git a/runtime/observatory_2/tests/service_2/test_helper.dart b/runtime/observatory_2/tests/service_2/test_helper.dart
index 570e830..86e7b13 100644
--- a/runtime/observatory_2/tests/service_2/test_helper.dart
+++ b/runtime/observatory_2/tests/service_2/test_helper.dart
@@ -9,8 +9,10 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
+
 import 'package:dds/dds.dart';
 import 'package:observatory_2/service_io.dart';
+import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'service_test_common.dart';
 export 'service_test_common.dart' show DDSTest, IsolateTest, VMTest;
@@ -96,7 +98,8 @@
   final _processCompleter = Completer<void>();
   bool killedByTester = false;
 
-  _ServiceTesteeLauncher() : args = [Platform.script.toFilePath()] {}
+  _ServiceTesteeLauncher({String script})
+      : args = [script ?? Platform.script.toFilePath()] {}
 
   // Spawn the testee process.
   Future<Process> _spawnProcess(
@@ -341,6 +344,7 @@
     bool testeeControlsServer: false,
     bool enableDds: true,
     bool enableService: true,
+    bool compileToKernelFirst: false,
     int port = 0,
   }) {
     if (executableArgs == null) {
@@ -350,6 +354,7 @@
     WebSocketVM vm;
     _ServiceTesteeLauncher process;
     bool testsDone = false;
+    final tempDir = Directory.systemTemp.createTempSync('testee_dill');
 
     ignoreLateException(Function f) async {
       try {
@@ -367,7 +372,26 @@
     setUp(
       () => ignoreLateException(
         () async {
-          process = _ServiceTesteeLauncher();
+          String testeePath = Platform.script.toFilePath();
+          if (compileToKernelFirst && testeePath.endsWith('.dart')) {
+            final testeePathDill = path.join(tempDir.path, 'testee.dill');
+            final ProcessResult result =
+                await Process.run(Platform.executable, [
+              '--snapshot-kind=kernel',
+              '--snapshot=$testeePathDill',
+              ...Platform.executableArguments,
+              testeePath,
+            ]);
+            if (result.exitCode != 0) {
+              throw 'Failed to compile testee to kernel:\n'
+                  'stdout: ${result.stdout}\n'
+                  'stderr: ${result.stderr}\n'
+                  'exitCode: ${result.exitCode}\n';
+            }
+            testeePath = testeePathDill;
+          }
+
+          process = _ServiceTesteeLauncher(script: testeePath);
           await process
               .launch(
                   pause_on_start,
@@ -411,6 +435,7 @@
             await dds?.shutdown();
           }
           process.requestExit();
+          tempDir.deleteSync(recursive: true);
         },
       ),
     );
@@ -609,6 +634,7 @@
     bool enable_service_port_fallback: false,
     bool enableDds: true,
     bool enableService: true,
+    bool compileToKernelFirst: false,
     int port = 0,
     List<String> extraArgs,
     List<String> executableArgs}) async {
@@ -631,6 +657,7 @@
       enable_service_port_fallback: enable_service_port_fallback,
       enableDds: enableDds,
       enableService: enableService,
+      compileToKernelFirst: compileToKernelFirst,
       port: port,
     );
   }
diff --git a/runtime/platform/assert.cc b/runtime/platform/assert.cc
index 5c7bf0b..c865467 100644
--- a/runtime/platform/assert.cc
+++ b/runtime/platform/assert.cc
@@ -18,7 +18,7 @@
 
 void DynamicAssertionHelper::Print(const char* format,
                                    va_list arguments,
-                                   bool will_abort /* = false */) {
+                                   bool will_abort /* = false */) const {
   // Take only the last 1KB of the file name if it is longer.
   const intptr_t file_len = strlen(file_);
   const intptr_t file_offset = (file_len > (1 * KB)) ? file_len - (1 * KB) : 0;
@@ -43,7 +43,7 @@
 #endif  // defined(DART_HOST_OS_ANDROID)
 }
 
-void Assert::Fail(const char* format, ...) {
+void Assert::Fail(const char* format, ...) const {
   va_list arguments;
   va_start(arguments, format);
   Print(format, arguments, /*will_abort=*/true);
@@ -55,7 +55,7 @@
   abort();
 }
 
-void Expect::Fail(const char* format, ...) {
+void Expect::Fail(const char* format, ...) const {
   va_list arguments;
   va_start(arguments, format);
   Print(format, arguments);
diff --git a/runtime/platform/assert.h b/runtime/platform/assert.h
index bdf73c5..ce4d0cc 100644
--- a/runtime/platform/assert.h
+++ b/runtime/platform/assert.h
@@ -30,7 +30,9 @@
       : file_(file), line_(line) {}
 
  protected:
-  void Print(const char* format, va_list arguments, bool will_abort = false);
+  void Print(const char* format,
+             va_list arguments,
+             bool will_abort = false) const;
 
   const char* const file_;
   const int line_;
@@ -42,7 +44,7 @@
  public:
   Assert(const char* file, int line) : DynamicAssertionHelper(file, line) {}
 
-  DART_NORETURN void Fail(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
+  DART_NORETURN void Fail(const char* format, ...) const PRINTF_ATTRIBUTE(2, 3);
 
   template <typename T>
   T NotNull(const T p);
@@ -52,7 +54,7 @@
  public:
   Expect(const char* file, int line) : DynamicAssertionHelper(file, line) {}
 
-  void Fail(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
+  void Fail(const char* format, ...) const PRINTF_ATTRIBUTE(2, 3);
 
 #if defined(TESTING)
   template <typename E, typename A>
diff --git a/runtime/platform/utils.cc b/runtime/platform/utils.cc
index d04c3a8..c93c84b 100644
--- a/runtime/platform/utils.cc
+++ b/runtime/platform/utils.cc
@@ -7,6 +7,11 @@
 #include "platform/allocation.h"
 #include "platform/globals.h"
 
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
+#include <dlfcn.h>
+#endif
+
 namespace dart {
 
 // Implementation is from "Hacker's Delight" by Henry S. Warren, Jr.,
@@ -347,4 +352,95 @@
   return std::unique_ptr<char, decltype(std::free)*>{str, std::free};
 }
 
+static void GetLastErrorAsString(char** error) {
+  if (error == nullptr) return;  // Nothing to do.
+
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
+  const char* status = dlerror();
+  *error = status != nullptr ? strdup(status) : nullptr;
+#elif defined(DART_HOST_OS_WINDOWS)
+  const int status = GetLastError();
+  *error = status != 0 ? Utils::SCreate("error code %i", error) : nullptr;
+#else
+  *error = Utils::StrDup("loading dynamic libraries is not supported");
+#endif
+}
+
+void* Utils::LoadDynamicLibrary(const char* library_path, char** error) {
+  void* handle = nullptr;
+
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
+  handle = dlopen(library_path, RTLD_LAZY);
+#elif defined(DART_HOST_OS_WINDOWS)
+  SetLastError(0);  // Clear any errors.
+
+  if (library_path == nullptr) {
+    handle = GetModuleHandle(nullptr);
+  } else {
+    // Convert to wchar_t string.
+    const int name_len = MultiByteToWideChar(
+        CP_UTF8, /*dwFlags=*/0, library_path, /*cbMultiByte=*/-1, nullptr, 0);
+    if (name_len != 0) {
+      std::unique_ptr<wchar_t[]> name(new wchar_t[name_len]);
+      const int written_len =
+          MultiByteToWideChar(CP_UTF8, /*dwFlags=*/0, library_path,
+                              /*cbMultiByte=*/-1, name.get(), name_len);
+      RELEASE_ASSERT(written_len == name_len);
+      handle = LoadLibraryW(name.get());
+    }
+  }
+#endif
+
+  if (handle == nullptr) {
+    GetLastErrorAsString(error);
+  }
+
+  return handle;
+}
+
+void* Utils::ResolveSymbolInDynamicLibrary(void* library_handle,
+                                           const char* symbol,
+                                           char** error) {
+  void* result = nullptr;
+
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
+  dlerror();  // Clear any errors.
+  result = dlsym(library_handle, symbol);
+  // Note: nullptr might be a valid return from dlsym. Must call dlerror
+  // to differentiate.
+  GetLastErrorAsString(error);
+  return result;
+#elif defined(DART_HOST_OS_WINDOWS)
+  SetLastError(0);
+  result = reinterpret_cast<void*>(
+      GetProcAddress(reinterpret_cast<HMODULE>(library_handle), symbol));
+#endif
+
+  if (result == nullptr) {
+    GetLastErrorAsString(error);
+  }
+
+  return result;
+}
+
+void Utils::UnloadDynamicLibrary(void* library_handle, char** error) {
+  bool ok = false;
+
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_FUCHSIA)
+  ok = dlclose(library_handle) == 0;
+#elif defined(DART_HOST_OS_WINDOWS)
+  SetLastError(0);  // Clear any errors.
+
+  ok = FreeLibrary(reinterpret_cast<HMODULE>(library_handle));
+#endif
+
+  if (!ok) {
+    GetLastErrorAsString(error);
+  }
+}
+
 }  // namespace dart
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 84366eb..0e7a462 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -479,6 +479,33 @@
 
   // Returns str in a unique_ptr with free used as its deleter.
   static CStringUniquePtr CreateCStringUniquePtr(char* str);
+
+  // Load dynamic library from the given |library_path| and return the
+  // library handle. |library_path| can be |nullptr| in which case
+  // library handle representing the executable is returned.
+  // If an error occurs returns |nullptr| and populates
+  // |error| (if provided) with an error message (caller must free this message
+  // when it is no longer needed).
+  static void* LoadDynamicLibrary(const char* library_path,
+                                  char** error = nullptr);
+
+  // Resolve the given |symbol| within the library referenced by the
+  // given |library_handle|.
+  // If an error occurs populates |error| (if provided) with an error message
+  // (caller must free this message when it is no longer needed).
+  // Note: on some platforms |nullptr| is a valid value for a symbol, so to
+  // check if resolution succeeded one must instead provide non-null |error|
+  // and then check if it was populated with an error message.
+  static void* ResolveSymbolInDynamicLibrary(void* library_handle,
+                                             const char* symbol,
+                                             char** error = nullptr);
+
+  // Unload the library referenced by the given |library_handle|.
+  // If an error occurs returns |nullptr| and populates
+  // |error| (if provided) with an error message (caller must free this message
+  // when it is no longer needed).
+  static void UnloadDynamicLibrary(void* library_handle,
+                                   char** error = nullptr);
 };
 
 }  // namespace dart
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 7981ebb..80ae9a9 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -321,11 +321,6 @@
     "../../../tests/corelib/num_parse_test.dart",
     "../../../tests/corelib/num_sign_test.dart",
     "../../../tests/corelib/num_try_parse_test.dart",
-    "../../../tests/corelib/queue_first_test.dart",
-    "../../../tests/corelib/queue_iterator_test.dart",
-    "../../../tests/corelib/queue_last_test.dart",
-    "../../../tests/corelib/queue_single_test.dart",
-    "../../../tests/corelib/queue_test.dart",
     "../../../tests/corelib/range_error_test.dart",
     "../../../tests/corelib/reg_exp1_test.dart",
     "../../../tests/corelib/reg_exp5_test.dart",
@@ -3103,6 +3098,11 @@
     "../../../tests/lib/collection/hash_set_test.dart",
     "../../../tests/lib/collection/linked_list_test.dart",
     "../../../tests/lib/collection/list_test.dart",
+    "../../../tests/lib/collection/queue_first_test.dart",
+    "../../../tests/lib/collection/queue_iterator_test.dart",
+    "../../../tests/lib/collection/queue_last_test.dart",
+    "../../../tests/lib/collection/queue_single_test.dart",
+    "../../../tests/lib/collection/queue_test.dart",
     "../../../tests/lib/convert/ascii_test.dart",
     "../../../tests/lib/convert/base64_test.dart",
     "../../../tests/lib/convert/chunked_conversion1_test.dart",
@@ -3528,7 +3528,6 @@
     "../vm/dart_2/unboxed_param_tear_off_test.dart",
     "../vm/dart_2/unboxed_param_test.dart",
     "../vm/dart_2/unboxed_retval_test.dart",
-    "../vm/dart_2/unsigned_shift_right_test.dart",
     "../vm/dart_2/wrap_around_in_range_analysis_test.dart",
     "../../../tests/corelib_2/apply2_test.dart",
     "../../../tests/corelib_2/apply3_test.dart",
@@ -3735,11 +3734,6 @@
     "../../../tests/corelib_2/num_parse_test.dart",
     "../../../tests/corelib_2/num_sign_test.dart",
     "../../../tests/corelib_2/num_try_parse_test.dart",
-    "../../../tests/corelib_2/queue_first_test.dart",
-    "../../../tests/corelib_2/queue_iterator_test.dart",
-    "../../../tests/corelib_2/queue_last_test.dart",
-    "../../../tests/corelib_2/queue_single_test.dart",
-    "../../../tests/corelib_2/queue_test.dart",
     "../../../tests/corelib_2/range_error_test.dart",
     "../../../tests/corelib_2/reg_exp1_test.dart",
     "../../../tests/corelib_2/reg_exp4_test.dart",
@@ -6444,6 +6438,11 @@
     "../../../tests/lib_2/collection/hash_set_test.dart",
     "../../../tests/lib_2/collection/linked_list_test.dart",
     "../../../tests/lib_2/collection/list_test.dart",
+    "../../../tests/lib_2/collection/queue_first_test.dart",
+    "../../../tests/lib_2/collection/queue_iterator_test.dart",
+    "../../../tests/lib_2/collection/queue_last_test.dart",
+    "../../../tests/lib_2/collection/queue_single_test.dart",
+    "../../../tests/lib_2/collection/queue_test.dart",
     "../../../tests/lib_2/convert/ascii_test.dart",
     "../../../tests/lib_2/convert/base64_test.dart",
     "../../../tests/lib_2/convert/chunked_conversion1_test.dart",
diff --git a/runtime/tests/vm/dart/entrypoints_verification_test.dart b/runtime/tests/vm/dart/entrypoints_verification_test.dart
new file mode 100644
index 0000000..a64e347
--- /dev/null
+++ b/runtime/tests/vm/dart/entrypoints_verification_test.dart
@@ -0,0 +1,105 @@
+// 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.
+//
+// VMOptions=--verify-entry-points=true
+// SharedObjects=entrypoints_verification_test
+
+import 'dart:ffi';
+import './dylib_utils.dart';
+
+main() {
+  final helper = dlopenPlatformSpecific('entrypoints_verification_test');
+  final runTest =
+      helper.lookupFunction<Void Function(), void Function()>('RunTests');
+  runTest();
+
+  new C();
+  new D();
+}
+
+class C {}
+
+@pragma("vm:entry-point")
+class D {
+  D();
+
+  @pragma("vm:entry-point")
+  D.defined();
+
+  @pragma("vm:entry-point")
+  factory D.fact() => E.ctor();
+
+  void fn0() {}
+
+  @pragma("vm:entry-point")
+  void fn1() {}
+
+  @pragma("vm:entry-point", "get")
+  void fn1_get() {}
+
+  @pragma("vm:entry-point", "call")
+  void fn1_call() {}
+
+  static void fn2() {}
+
+  @pragma("vm:entry-point")
+  static void fn3() {}
+
+  @pragma("vm:entry-point", "call")
+  static void fn3_call() {}
+
+  @pragma("vm:entry-point", "get")
+  static void fn3_get() {}
+
+  void Function()? fld0;
+
+  @pragma("vm:entry-point")
+  void Function()? fld1;
+
+  @pragma("vm:entry-point", "get")
+  void Function()? fld2;
+
+  @pragma("vm:entry-point", "set")
+  void Function()? fld3;
+}
+
+void fn0() {}
+
+@pragma("vm:entry-point")
+void fn1() {}
+
+@pragma("vm:entry-point", "get")
+void fn1_get() {}
+
+@pragma("vm:entry-point", "call")
+void fn1_call() {}
+
+class E extends D {
+  E.ctor();
+}
+
+@pragma("vm:entry-point")
+class F {
+  static void Function()? fld0;
+
+  @pragma("vm:entry-point")
+  static void Function()? fld1;
+
+  @pragma("vm:entry-point", "get")
+  static void Function()? fld2;
+
+  @pragma("vm:entry-point", "set")
+  static void Function()? fld3;
+}
+
+void Function()? fld0;
+
+@pragma("vm:entry-point")
+void Function()? fld1;
+
+@pragma("vm:entry-point", "get")
+void Function()? fld2;
+
+@pragma("vm:entry-point", "set")
+void Function()? fld3;
diff --git a/runtime/tests/vm/dart/have_same_runtime_type_test.dart b/runtime/tests/vm/dart/have_same_runtime_type_test.dart
new file mode 100644
index 0000000..b7ade2a
--- /dev/null
+++ b/runtime/tests/vm/dart/have_same_runtime_type_test.dart
@@ -0,0 +1,32 @@
+// 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 for corner cases of 'a.runtimeType == b.runtimeType' pattern
+// which is recognized and optimized in AOT mode.
+
+import "package:expect/expect.dart";
+
+@pragma('vm:never-inline')
+Object getType(Object obj) => obj.runtimeType;
+
+@pragma('vm:never-inline')
+void test(bool expected, Object a, Object b) {
+  bool result1 = getType(a) == getType(b);
+  bool result2 = a.runtimeType == b.runtimeType;
+  Expect.equals(expected, result1);
+  Expect.equals(expected, result2);
+}
+
+typedef Func = void Function();
+
+void main() {
+  test(true, 0x7fffffffffffffff, int.parse('42'));
+  test(true, 'hi', String.fromCharCode(1114111));
+  test(false, 'hi', 1);
+  test(true, List, Func);
+  test(true, <int>[1], const <int>[2]);
+  test(true, const <String>[], List<String>.filled(1, ''));
+  test(true, <String>[]..add('hi'), List<String>.filled(2, ''));
+  test(false, <int>[], <String>[]);
+}
diff --git a/runtime/tests/vm/dart/isolates/closure_entrypoint_test.dart b/runtime/tests/vm/dart/isolates/closure_entrypoint_test.dart
new file mode 100644
index 0000000..b855c4f
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/closure_entrypoint_test.dart
@@ -0,0 +1,111 @@
+// 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.
+
+// VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy
+// VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation
+
+// The tests in this file will only succeed when isolate groups are enabled
+// (hence the VMOptions above).
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'fast_object_copy_test.dart' show ClassWithNativeFields;
+
+class HashThrower {
+  static bool throwOnHashCode = true;
+
+  const HashThrower();
+
+  int get hashCode => throwOnHashCode ? throw 'failing' : 2;
+  bool operator ==(other) => identical(this, other);
+}
+
+Future testWithClosure<T>(
+    void Function(SendPort) entrypoint, T expectedResult) async {
+  final rp = ReceivePort();
+  try {
+    await Isolate.spawn(entrypoint, rp.sendPort);
+    Expect.equals(expectedResult, await rp.first);
+  } finally {
+    rp.close();
+  }
+}
+
+class ClosureEntrypointTester {
+  int instanceValue = 42;
+
+  void send42(SendPort sendPort) => sendPort.send(42);
+
+  Future run() async {
+    await noCapturedVariablesTest();
+    await capturedInt();
+    await capturedInstanceInt();
+    await captureThisViaMethodTearOff();
+    await captureInvalidObject();
+    await captureRehashThrower();
+  }
+
+  Future noCapturedVariablesTest() async {
+    print('noCapturedVariablesTest');
+    await testWithClosure((SendPort s) => s.send(42), 42);
+  }
+
+  Future capturedInt() async {
+    print('capturedInt');
+    int value = 42;
+    await testWithClosure((SendPort s) => s.send(value), 42);
+  }
+
+  Future capturedInstanceInt() async {
+    print('capturedInstanceValue');
+    await testWithClosure((SendPort s) => s.send(this.instanceValue), 42);
+  }
+
+  Future captureThisViaMethodTearOff() async {
+    print('captureThisViaMethodTearOff');
+    await testWithClosure(send42, 42);
+  }
+
+  Future captureInvalidObject() async {
+    print('captureInvalidObject');
+    final invalidObject = ClassWithNativeFields();
+    send42(SendPort sendPort) {
+      '$invalidObject'; // Use an object that cannot be copied.
+      sendPort.send(42);
+    }
+
+    throwsAsync<ArgumentError>(() => testWithClosure(send42, 42));
+  }
+
+  Future captureRehashThrower() async {
+    print('captureRehashThrower');
+    HashThrower.throwOnHashCode = false;
+    final hashThrower = {HashThrower()};
+    send42(SendPort sendPort) {
+      '$hashThrower'; // Use an object that cannot be deserialized.
+      sendPort.send(42);
+    }
+
+    throwsAsync<IsolateSpawnException>(() => testWithClosure(send42, 42));
+  }
+
+  Future throwsAsync<T>(Future Function() fun) async {
+    try {
+      await fun();
+    } catch (e) {
+      if (e is T) return;
+      rethrow;
+    }
+    throw 'Function failed to throw ArgumentError';
+  }
+}
+
+main() async {
+  await ClosureEntrypointTester().run();
+}
diff --git a/runtime/tests/vm/dart/isolates/closures_without_captured_variables_test.dart b/runtime/tests/vm/dart/isolates/closures_without_captured_variables_test.dart
new file mode 100644
index 0000000..d7970cc
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/closures_without_captured_variables_test.dart
@@ -0,0 +1,95 @@
+// 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.
+
+// VMOptions=--enable-isolate-groups
+
+// The tests in this file will only succeed when isolate groups are enabled
+// (hence the VMOptions above).
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'fast_object_copy_test.dart' show ClassWithNativeFields;
+
+main() async {
+  final rp = ReceivePort();
+
+  testNormalEnclosingFunction(rp);
+  testNormalNestedEnclosingFunction(rp);
+  testNormalNestedEnclosingFunction2(rp);
+
+  final si = StreamIterator(rp);
+  for (int i = 0; i < 3; ++i) {
+    Expect.isTrue(await si.moveNext());
+    Expect.equals(42, (si.current)());
+  }
+  si.cancel(); // closes the port
+}
+
+testNormalEnclosingFunction(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+
+  captureInvalidObject() => invalidObject;
+  captureNormalObject() => normalObject;
+  captureNothing() => 42;
+
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+  // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+  // Should not throw, since the [captureNothing] closure should not have a
+  // parent context and therefore not transitively refer [rp].
+  rp.sendPort.send(captureNothing);
+}
+
+testNormalNestedEnclosingFunction(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+  nested() {
+    captureInvalidObject() => invalidObject;
+    captureNormalObject() => normalObject;
+    captureNothing() => 42;
+
+    Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+    // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+    Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+    // Should not throw, since the [captureNothing] closure should not have a
+    // parent context and therefore not transitively refer [rp].
+    rp.sendPort.send(captureNothing);
+  }
+
+  nested();
+}
+
+testNormalNestedEnclosingFunction2(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+
+  captureInvalidObject() {
+    local() => invalidObject;
+    return local;
+  }
+
+  captureNormalObject() {
+    local() => normalObject;
+    return local;
+  }
+
+  captureNothing() => 42;
+
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+  // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+  // Should not throw, since the [captureNothing] closure should not have a
+  // parent context and therefore not transitively refer [rp].
+  rp.sendPort.send(captureNothing);
+}
diff --git a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
index 2fa4962..f4005be 100644
--- a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // SharedObjects=ffi_test_functions
-// VMOptions=
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
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 dc684dc..20b5557 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart
@@ -19,6 +19,14 @@
 import 'fast_object_copy_test.dart'
     show UserObject, SendReceiveTestBase, notAllocatableInTLAB;
 
+topLevelClosure(a, b) {}
+topLevelClosureG<T>(T a, T b) {}
+Type getType<T>() => T;
+
+class A<T> {
+  dynamic m<H>(T a, H b) => this;
+}
+
 // When running with isolate groups enabled, we can share all of the following
 // objects.
 final sharableObjects = [
@@ -32,6 +40,36 @@
     rp.close();
     return sp;
   })(),
+  () {
+    innerClosure(a, b) {}
+    return innerClosure;
+  }(),
+  () {
+    innerClosureG<T>(T a, T b) {}
+    return innerClosureG;
+  }(),
+  () {
+    innerClosureG<T>() {
+      innerClosureG2<H>(T a, H b) {}
+      return innerClosureG2;
+    }
+
+    return innerClosureG<int>();
+  }(),
+  () {
+    innerClosureG<T>(T a, T b) {}
+    final Function(int, int) partialInstantiatedInnerClosure = innerClosureG;
+    return partialInstantiatedInnerClosure;
+  }(),
+  () {
+    return topLevelClosureG;
+  }(),
+  () {
+    final Function(int, int) partialInstantiatedInnerClosure = topLevelClosureG;
+    return partialInstantiatedInnerClosure;
+  }(),
+  getType<void Function(int, double, Object)>(),
+  getType<T Function<T>(int, double, T)>(),
   const [1, 2, 3],
   const {1: 1, 2: 2, 3: 2},
   const {1, 2, 3},
@@ -40,13 +78,40 @@
   Int32x4(1, 2, 3, 4),
 ];
 
+final copyableClosures = <dynamic>[
+  () {
+    final a = A<int>();
+    final Function<T>(int, T) genericMethod = a.m;
+    return genericMethod;
+  }(),
+  () {
+    final a = A<int>();
+    final Function(int, double) partialInstantiatedMethod = a.m;
+    return partialInstantiatedMethod;
+  }(),
+  () {
+    final a = Object();
+    dynamic inner() => a;
+    return inner;
+  }(),
+  () {
+    foo(var arg) {
+      return () => arg;
+    }
+
+    return foo(1);
+  }(),
+];
+
 class SendReceiveTest extends SendReceiveTestBase {
   Future runTests() async {
     await testSharable();
     await testSharable2();
+    await testCopyableClosures();
   }
 
   Future testSharable() async {
+    print('testSharable');
     final sharableObjectsCopy = await sendReceive([
       ...sharableObjects,
     ]);
@@ -57,6 +122,7 @@
   }
 
   Future testSharable2() async {
+    print('testSharable2');
     final sharableObjectsCopy = await sendReceive([
       notAllocatableInTLAB,
       ...sharableObjects,
@@ -68,6 +134,27 @@
       Expect.identical(sharableObjects[i], sharableObjectsCopy[i + 1]);
     }
   }
+
+  Future testCopyableClosures() async {
+    print('testCopyableClosures');
+    final copy = await sendReceive([
+      notAllocatableInTLAB,
+      ...copyableClosures,
+    ]);
+    for (int i = 0; i < copyableClosures.length; ++i) {
+      Expect.notIdentical(copyableClosures[i], copy[1 + i]);
+      Expect.equals(copyableClosures[i].runtimeType, copy[1 + i].runtimeType);
+    }
+
+    final copy2 = await sendReceive([
+      ...copyableClosures,
+      notAllocatableInTLAB,
+    ]);
+    for (int i = 0; i < copyableClosures.length; ++i) {
+      Expect.notIdentical(copyableClosures[i], copy2[i]);
+      Expect.equals(copyableClosures[i].runtimeType, copy2[i].runtimeType);
+    }
+  }
 }
 
 main() async {
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 dda2b0f..8509db3 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_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=
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
@@ -24,7 +24,9 @@
 
 import 'package:expect/expect.dart';
 
-class ClassWithNativeFields extends NativeFieldWrapperClass1 {}
+class ClassWithNativeFields extends NativeFieldWrapperClass1 {
+  void m() {}
+}
 
 final Uint8List largeExternalTypedData =
     File(Platform.resolvedExecutable).readAsBytesSync()..[0] = 42;
@@ -219,6 +221,10 @@
 
     await testFastOnly();
     await testSlowOnly();
+
+    await testWeakProperty();
+
+    await testForbiddenClosures();
   }
 
   Future testTransferrable() async {
@@ -579,6 +585,101 @@
           await sendReceive([notAllocatableInTLAB, smallContainer]));
     }
   }
+
+  Future testWeakProperty() async {
+    final key = Object();
+    final expando1 = Expando();
+    final expando2 = Expando();
+    final expando3 = Expando();
+    final expando4 = Expando();
+    expando1[key] = expando2;
+    expando2[expando2] = expando3;
+    expando3[expando3] = expando4;
+    expando4[expando4] = {'foo': 'bar'};
+
+    {
+      final result = await sendReceive([
+        key,
+        expando1,
+      ]);
+      final keyCopy = result[0];
+      final expando1Copy = result[1] as Expando;
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        expando1,
+        key,
+      ]);
+      final expando1Copy = result[0] as Expando;
+      final keyCopy = result[1];
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        expando1,
+        notAllocatableInTLAB,
+        key,
+      ]);
+      final expando1Copy = result[0] as Expando;
+      final keyCopy = result[2];
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        key,
+        notAllocatableInTLAB,
+        expando1,
+      ]);
+      final keyCopy = result[0];
+      final expando1Copy = result[2] as Expando;
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+  }
+
+  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));
+    }
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(() => sendPort.send([closure]));
+    }
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(
+          () => sendPort.send([notAllocatableInTLAB, closure]));
+    }
+  }
 }
 
 main() async {
diff --git a/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart b/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart
deleted file mode 100644
index 946cbf9..0000000
--- a/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart
+++ /dev/null
@@ -1,25 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  // We don't run this test in our artificial hot reload mode, because it would
-  // create too many threads during the reload (one per isolate), which can
-  // cause this test or other concurrently executing tests to Crash due to
-  // unability of `pthread_create` to create a new thread.
-  if (isArtificialReloadMode) return;
-
-  final rp = ReceivePort();
-  final int n = 18;
-  await spawnInDetachedGroup(fibonacciRecursive, [rp.sendPort, n]);
-  Expect.equals(4181, await rp.first);
-}
diff --git a/runtime/tests/vm/dart/isolates/internal.dart b/runtime/tests/vm/dart/isolates/internal.dart
index 0d63ccc..ec854b0 100644
--- a/runtime/tests/vm/dart/isolates/internal.dart
+++ b/runtime/tests/vm/dart/isolates/internal.dart
@@ -7,78 +7,6 @@
 import 'dart:async';
 import 'dart:_internal' as dart_internal;
 
-/// Similar to `Isolate.spawn<T>()` but supports `newIsolateGroup`.
-Future<Isolate> internalSpawn<T>(void entryPoint(T message), T message,
-    {SendPort? onExit,
-    SendPort? onError,
-    bool newIsolateGroup = false,
-    String? debugName}) async {
-  final packageConfig = null;
-  final paused = false;
-  final bool errorsAreFatal = true;
-  final readyPort = new RawReceivePort();
-  try {
-    dart_internal.spawnFunction(
-        readyPort.sendPort,
-        Platform.script.toString(),
-        entryPoint,
-        message,
-        paused,
-        errorsAreFatal,
-        onExit,
-        onError,
-        packageConfig,
-        newIsolateGroup,
-        debugName);
-    return await _spawnCommon(readyPort);
-  } catch (e, st) {
-    readyPort.close();
-    return await new Future<Isolate>.error(e, st);
-  }
-}
-
-/// A copy of `dart:isolate`s internal `Isolate._spawnCommon()`.
-Future<Isolate> _spawnCommon(RawReceivePort readyPort) {
-  final completer = new Completer<Isolate>.sync();
-  readyPort.handler = (readyMessage) {
-    readyPort.close();
-    if (readyMessage is List && readyMessage.length == 2) {
-      SendPort controlPort = readyMessage[0];
-      List capabilities = readyMessage[1];
-      completer.complete(new Isolate(controlPort,
-          pauseCapability: capabilities[0],
-          terminateCapability: capabilities[1]));
-    } else if (readyMessage is String) {
-      // We encountered an error while starting the new isolate.
-      completer.completeError(new IsolateSpawnException(
-          'Unable to spawn isolate: ${readyMessage}'));
-    } else {
-      // This shouldn't happen.
-      completer.completeError(new IsolateSpawnException(
-          "Internal error: unexpected format for ready message: "
-          "'${readyMessage}'"));
-    }
-  };
-  return completer.future;
-}
-
-/// Spawns the [staticClosure] in a detached isolate group.
-Future<Isolate> spawnInDetachedGroup<T>(
-    void staticClosure(T message), T message,
-    {SendPort? onExit, SendPort? onError}) {
-  return _IG0([staticClosure, message]);
-}
-
-// This is the isolate group of "main". We spawn another one.
-_IG0(args) => internalSpawn(_IG1, args, newIsolateGroup: true);
-
-// This is an intermediate isolate group. The actual code we run in a new IG and
-// this one will die.
-_IG1(args) => internalSpawn(_IG2, args, newIsolateGroup: true);
-
-// Run the actual code
-_IG2(args) => args[0](args[1]);
-
 extension SendPortSendAndExit on SendPort {
   void sendAndExit(var message) {
     dart_internal.sendAndExit(this, message);
diff --git a/runtime/tests/vm/dart/isolates/long_regexp_process_oob_messages_test.dart b/runtime/tests/vm/dart/isolates/long_regexp_process_oob_messages_test.dart
new file mode 100644
index 0000000..404b978
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/long_regexp_process_oob_messages_test.dart
@@ -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.
+
+import 'dart:isolate';
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+worker(SendPort sendPort) {
+  final re = RegExp(r'(x+)*y');
+  final s = 'x' * 100 + '';
+  sendPort.send('worker started');
+  print(re.allMatches(s).iterator.moveNext());
+}
+
+main() async {
+  asyncStart();
+  ReceivePort onExit = ReceivePort();
+  ReceivePort workerStarted = ReceivePort();
+  final isolate = await Isolate.spawn(worker, workerStarted.sendPort,
+      onExit: onExit.sendPort, errorsAreFatal: true);
+  await workerStarted.first;
+  print('worker started, now killing worker');
+  isolate.kill(priority: Isolate.immediate);
+  await onExit.first;
+  print('worker exited');
+  asyncEnd();
+}
diff --git a/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart b/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart
deleted file mode 100644
index 915c102..0000000
--- a/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart
+++ /dev/null
@@ -1,19 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursive, [rp.sendPort, count]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart b/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart
deleted file mode 100644
index a3fb967..0000000
--- a/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart
+++ /dev/null
@@ -1,19 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursiveTailCall, [rp.sendPort, count, 0]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart/isolates/test_utils.dart b/runtime/tests/vm/dart/isolates/test_utils.dart
index 4e1d929..7c5da81 100644
--- a/runtime/tests/vm/dart/isolates/test_utils.dart
+++ b/runtime/tests/vm/dart/isolates/test_utils.dart
@@ -8,6 +8,9 @@
 
 import 'internal.dart';
 
+export '../../../../../benchmarks/IsolateFibonacci/dart/IsolateFibonacci.dart'
+  show fibonacciRecursive;
+
 final bool isDebugMode = Platform.script.path.contains('Debug');
 final bool isSimulator = Platform.script.path.contains('SIM');
 final bool isArtificialReloadMode = Platform.executableArguments.any((arg) => [
@@ -44,26 +47,6 @@
   }
 }
 
-// Implements recursive summation via tail calls:
-//   fib(n) => n <= 1 ? 1
-//                    : fib(n-1) + fib(n-2);
-Future fibonacciRecursive(List args) async {
-  final SendPort port = args[0];
-  final n = args[1];
-  if (n <= 1) {
-    port.send(1);
-    return;
-  }
-  final left = ReceivePort();
-  final right = ReceivePort();
-  await Future.wait([
-    Isolate.spawn(fibonacciRecursive, [left.sendPort, n - 1]),
-    Isolate.spawn(fibonacciRecursive, [right.sendPort, n - 2]),
-  ]);
-  final results = await Future.wait([left.first, right.first]);
-  port.send(results[0] + results[1]);
-}
-
 enum Command { kRun, kRunAndClose, kClose }
 
 abstract class RingElement {
diff --git a/runtime/tests/vm/dart/redirection_type_shuffling_test.dart b/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
index 0567a24..d937ba1 100644
--- a/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
+++ b/runtime/tests/vm/dart/redirection_type_shuffling_test.dart
@@ -7,14 +7,14 @@
 
 class G<A extends int, B extends String> {
   G();
-  factory G.swap() = G<B,A>;  //# 00: compile-time error
-  factory G.retain() = G<A,B>;
+  factory G.swap() = G<B, A>; //# 00: compile-time error
+  factory G.retain() = G<A, B>;
 }
 
 main() {
   ClassMirror cm = reflect(new G<int, String>()).type;
 
-  Expect.isTrue(cm.newInstance(#retain, []).reflectee is G<int,String>);
+  Expect.isTrue(cm.newInstance(#retain, []).reflectee is G<int, String>);
 
-  Expect.isTrue(cm.newInstance(#swap, []).reflectee is G<String,int>);  //# 00: dynamic type error
+  Expect.isTrue(cm.newInstance(#swap, []).reflectee is G<String, int>); //# 00: continued
 }
diff --git a/runtime/tests/vm/dart/regress_46790_test.dart b/runtime/tests/vm/dart/regress_46790_test.dart
new file mode 100644
index 0000000..ba2cfa5
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46790_test.dart
@@ -0,0 +1,120 @@
+// 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.
+
+/// VMOptions=--stacktrace_every=137 --deterministic
+
+// Reduced from
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+//   dart dartfuzz.dart --seed 2528999334 --no-fp --no-ffi --no-flat
+
+int var73 = -9223372034707292159;
+String var81 = 'E4yq0';
+Map<Expando<int>, int> var531 = <Expando<int>,int>{
+  Expando<int>('NX') : 2147483648,
+  Expando<int>('Gy') : 0,
+  Expando<int>('DDp670v') : 40,
+  Expando<int>('zS(') : -9223372036854775807
+};
+Map<Map<bool, int>, Expando<int>> var1077 = <Map<bool, int>,Expando<int>>{
+  <bool,int>{
+    true : -74,
+    false : -65,
+    true : 7
+  } : Expando<int>('cteN2')
+};
+Map<MapEntry<int, int>, int> var1791 = <MapEntry<int, int>,int>{
+  MapEntry<int, int>(31, 45) : 13,
+  MapEntry<int, int>(10, 37) : 43
+};
+Map<MapEntry<String, bool>, int> var1911 = <MapEntry<String, bool>,int>{
+  MapEntry<String, bool>('uD', false) : 47,
+  MapEntry<String, bool>('LdL', false) : -11,
+  MapEntry<String, bool>('RO(9', false) : -92,
+  MapEntry<String, bool>('', true) : -9223372032559808513,
+  MapEntry<String, bool>('F6eH', false) : -9223372032559808512,
+  MapEntry<String, bool>('d', false) : -39
+};
+Map<MapEntry<String, int>, int>? var1972 = null;
+Map<MapEntry<String, String>, MapEntry<int, bool>> var2077 = <MapEntry<String, String>,MapEntry<int, bool>>{
+  MapEntry<String, String>('M', '') : MapEntry<int, bool>(1, true),
+  new MapEntry<String, String>('n8)mj', '') : MapEntry<int, bool>(24, true),
+  MapEntry<String, String>('', 'q9KjW') : MapEntry<int, bool>(21, false),
+  MapEntry<String, String>('C', 'k5x') : new MapEntry<int, bool>(21, false)
+};
+MapEntry<Expando<bool>, Map<String, bool>> var2287 = MapEntry<Expando<bool>, Map<String, bool>>(Expando<bool>('5E\u{1f600}\u2665'), <String,bool>{
+  'w\u266537L' : true,
+  'Rfu' : false,
+  ')JI+q&' : true,
+  'Z)@a\u2665V' : true,
+  '3+3WP' : true
+});
+MapEntry<Map<bool, String>, Expando<bool>>? var2918 = MapEntry<Map<bool, String>, Expando<bool>>(<bool,String>{
+  true : '3rVO( ',
+  true : '+9psp57'
+}, Expando<bool>('d'));
+MapEntry<Map<int, bool>, Map<int, String>>? var3006 = MapEntry<Map<int, bool>, Map<int, String>>(<int,bool>{
+  18 : false,
+  -32 : true,
+  -32 : false,
+  31 : false,
+  -50 : false
+}, <int,String>{
+  -37 : '',
+  12 : 'viG4s',
+  4294967297 : '\u2665YGL12',
+  11 : 'G',
+  31 : 'hdQ',
+  -2147483649 : 'JMsv'
+});
+
+MapEntry<MapEntry<bool, int>, Map<String, int>>? var3430 = MapEntry<MapEntry<bool, int>, Map<String, int>>(MapEntry<bool, int>(true, 29), <String,int>{
+  'k' : -31,
+  '' : 0,
+  '\u{1f600}u3IJ ' : 12,
+  '' : -89,
+  'G&5' : 39
+});
+
+class X0 {
+  Map<MapEntry<String, int>, int>? foo0_1(int par1){
+    if (par1 >= 49) {
+      return var1972;
+    }
+
+    {
+      int loc0 = 0;
+      do {
+        var2077.forEach((loc1, loc2){});
+      } while (++loc0 < 41);
+    }
+
+    for (int loc0 = 0; loc0 < 49; loc0++) {
+      try {
+        var3430 = MapEntry<MapEntry<bool, int>, Map<String, int>>(MapEntry<bool, int>(true, 11), <String,int>{
+          'tocS' : (true ? var73 : var1911[MapEntry<String, bool>('CZ\u2665G4Ra', true)]!),
+          '\u{1f600}UnA#' : var531[var1077[const <bool,int>{
+            false : -73
+          }]!]!,
+        });
+      } catch (exception, stackTrace) {
+        var3006 = var3006;
+        var2918 = var2918;
+      }
+
+      var1791.forEach((loc2, loc3){});
+    }
+
+    return foo0_1(par1 + 1);
+  }
+}
+
+
+main() {
+  try {
+    X0().foo0_1(0);
+  } catch (e, st) {
+    print('X0().foo0_1 throws');
+  }
+}
diff --git a/runtime/tests/vm/dart/regress_46796_test.dart b/runtime/tests/vm/dart/regress_46796_test.dart
new file mode 100644
index 0000000..f28f740
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46796_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_slow_path
+
+class RawSocketEvent {}
+
+class Stream<T> {}
+
+class _RawSocket extends Stream<RawSocketEvent> {
+  int field1 = 512;
+  int field2 = -512;
+
+  _RawSocket() {
+    blackhole(_onSubscriptionStateChange);
+  }
+
+  void _onSubscriptionStateChange<T>() {
+    print("blah");
+  }
+}
+
+@pragma("vm:never-inline")
+blackhole(x) {}
+
+main() {
+  for (var i = 0; i < 10000000; i++) {
+    blackhole(new _RawSocket());
+  }
+}
diff --git a/runtime/tests/vm/dart/regress_46797_test.dart b/runtime/tests/vm/dart/regress_46797_test.dart
new file mode 100644
index 0000000..ceb5f0a
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46797_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.
+
+// VMOptions=--optimization-counter-threshold=100
+
+int var74 = -43;
+
+@pragma("vm:never-inline")
+foo(int var74) {
+  if (var74 >>> 0xC == 675872701) {
+    print("side-effect");
+  }
+}
+
+main() {
+  for (var i = 0; i < 200; i++) {
+    foo(43);
+  }
+  foo(-43);
+}
diff --git a/runtime/tests/vm/dart/regress_46798_test.dart b/runtime/tests/vm/dart/regress_46798_test.dart
new file mode 100644
index 0000000..1e82ffc
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46798_test.dart
@@ -0,0 +1,26 @@
+// 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/46798.
+// Verifies that compiler can handle LoadIndexed from AllocateObject.
+
+// VMOptions=--deterministic --optimization_counter_threshold=100
+
+import 'package:expect/expect.dart';
+
+bool foo(Object other) => other is String && other.codeUnitAt(0) == 5;
+
+int x = 0;
+
+void bar(bool cond) {
+  if (cond || foo(MapEntry<int, int>(1, 1))) {
+    ++x;
+  }
+}
+
+void main() {
+  for (int i = 0; i < 1000; ++i) foo('abc');
+  for (int i = 0; i < 1000; ++i) bar(false);
+  Expect.equals(0, x);
+}
diff --git a/runtime/tests/vm/dart/regress_46799_test.dart b/runtime/tests/vm/dart/regress_46799_test.dart
new file mode 100644
index 0000000..0d44c95
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46799_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.
+
+// Reduced from
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+//   dart dartfuzz.dart --seed 1052527605 --no-fp --no-ffi --flat
+
+bool var31 = bool.hasEnvironment('z');
+
+@pragma('vm:never-inline')
+num foo0() {
+  print(var31);
+  return -4294967296;
+}
+
+main() {
+  print(((-67) ~/ (var31 ? -83 : foo0())));
+}
diff --git a/runtime/tests/vm/dart/regress_46878_test.dart b/runtime/tests/vm/dart/regress_46878_test.dart
new file mode 100644
index 0000000..6ef37bc
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46878_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+main() async {
+  // In the main isolate we don't want to throw.
+  Foo.throwOnHashCode = false;
+
+  final onError = ReceivePort()
+    ..listen((error) {
+      print('Child isolate error: $error');
+    });
+  final onExit = ReceivePort();
+  var spawnError;
+  try {
+    await Isolate.spawn(
+        other,
+        // Rehashing of this map on receiver side will throw.
+        {Foo(): 1},
+        onError: onError.sendPort,
+        onExit: onExit.sendPort);
+
+    await onExit.first;
+  } on IsolateSpawnException catch (error) {
+    spawnError = error;
+  } finally {
+    onError.close();
+    onExit.close();
+  }
+  Expect.contains(
+      'Unable to spawn isolate: Failed to deserialize the passed arguments to the new isolate',
+      '$spawnError');
+}
+
+class Foo {
+  static bool throwOnHashCode = true;
+
+  int get hashCode => throwOnHashCode ? (throw 'rehashing error') : 1;
+}
+
+other(message) {}
diff --git a/runtime/tests/vm/dart/regress_46980_test.dart b/runtime/tests/vm/dart/regress_46980_test.dart
new file mode 100644
index 0000000..a923ba8
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46980_test.dart
@@ -0,0 +1,42 @@
+// 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.
+
+// VMOptions=--deterministic
+
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+//   dart dartfuzz.dart --seed 929450448 --no-fp --no-ffi --no-flat
+
+import 'dart:collection';
+import 'dart:typed_data';
+
+MapEntry<List<int>, Map<String, String>>? var0 =
+    MapEntry<List<int>, Map<String, String>>(
+        Uint16List.fromList(<int>[-25]), <String, String>{
+  '': 'p8',
+  'VGiZ+x': 'n6\u{1f600}',
+  'j': 'hrNI',
+  '3@kX)\u{1f600}': 'TW+Z',
+  'D': '\u2665Yqu',
+  'wzBa\u{1f600}h': '-k'
+});
+num? var78 = 29;
+MapEntry<String, int> var141 = MapEntry<String, int>('\u{1f600}', 16);
+
+MapEntry<Map<bool, int>, MapEntry<bool, int>>? var2896 =
+    MapEntry<Map<bool, int>, MapEntry<bool, int>>(<bool, int>{
+  true: -79,
+  false: 13,
+  true: 35,
+  true: -84,
+  false: -9223372034707292159
+}, MapEntry<bool, int>(true, 0));
+
+main() {
+  for (var i = 0; i < 1848; i++) {
+    print(var2896);
+  }
+
+  print('$var0\n$var78\n$var141\n');
+}
diff --git a/runtime/tests/vm/dart/regress_47010_test.dart b/runtime/tests/vm/dart/regress_47010_test.dart
new file mode 100644
index 0000000..108ead2
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_47010_test.dart
@@ -0,0 +1,285 @@
+// 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.
+
+// VMOptions=--use_slow_path --deterministic
+
+// Reduced from:
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+//   dart dartfuzz.dart --seed 1339276199 --no-fp --no-ffi --no-flat
+// @dart=2.14
+
+import 'dart:collection';
+import 'dart:typed_data';
+
+MapEntry<Map<bool, int>, List<String>>? var0 =
+    MapEntry<Map<bool, int>, List<String>>(
+        <bool, int>{true: -32, true: 47, false: -11, false: 9, false: -69},
+        <String>['n', 'Rz!4\u2665']);
+Uint8List? var9 = Uint8List.fromList(Uint64List.fromList(
+    Int64List.fromList(Int16List.fromList(Int16List.fromList(Uint8List(38))))));
+Uint8ClampedList var10 = Uint8ClampedList.fromList(
+    Int32List.fromList(Uint64List.fromList(<int>[-27, -74])));
+Uint8ClampedList? var11 = Uint8ClampedList(31);
+Int16List var12 = Int16List(5);
+Int16List? var13 = Int16List(44);
+Uint16List var14 = Uint16List.fromList(<int>[-96, 24, -43, -9]);
+Uint16List? var15 = Uint16List.fromList(Int8List.fromList(Int32List(34)));
+Int32List var16 = Int32List(7);
+Int32List? var17 =
+    Int32List.fromList(<int>[-67, if (false) -98 else -36, -4294967295]);
+Uint32List var18 = Uint32List(28);
+Uint32List? var19 = Uint32List(18);
+Int64List var20 = Int64List.fromList(Uint64List.fromList(Uint16List(47)));
+Int64List? var21 = Int64List(1);
+Uint64List var22 = Uint64List(49);
+Uint64List? var23 = Uint64List(43);
+Int32x4List var24 = Int32x4List(45);
+Int32x4List? var25 = Int32x4List(46);
+Int32x4 var26 = Int32x4(46, 24, 23, 15);
+Int32x4? var27 = Int32x4(20, 28, 20, 2);
+Deprecated var28 = Deprecated('G-Ki');
+Deprecated? var29 = Deprecated('#Ww');
+Provisional var30 = Provisional();
+Provisional? var31 = Provisional();
+bool var32 = bool.fromEnvironment('');
+bool? var33 = bool.hasEnvironment('P9LY');
+Duration var34 = Duration();
+Duration? var35 = Duration();
+Error var36 = Error();
+Error? var37 = Error();
+AssertionError var38 = AssertionError(17);
+AssertionError? var39 = AssertionError(8);
+TypeError var40 = TypeError();
+TypeError? var41 = TypeError();
+CastError var42 = CastError();
+CastError? var43 = new CastError();
+NullThrownError var44 = NullThrownError();
+NullThrownError? var45 = new NullThrownError();
+ArgumentError var46 = ArgumentError.value(22, 'K90\u{1f600}QtS', 33);
+ArgumentError? var47 = ArgumentError.notNull(')');
+RangeError var48 = RangeError.range(2, 23, 36, 'H', 'w&');
+RangeError? var49 = new RangeError(22);
+IndexError var50 = IndexError(15, 14, 'ZuC', '#1z9xJ', 1);
+IndexError? var51 = IndexError(14, 36, 'V(', '9Jf!0\u2665', 2);
+FallThroughError var52 = FallThroughError();
+FallThroughError? var53 = FallThroughError();
+AbstractClassInstantiationError var54 = AbstractClassInstantiationError('J!');
+AbstractClassInstantiationError? var55 =
+    AbstractClassInstantiationError('L48ynpV');
+UnsupportedError var56 = UnsupportedError('5txzg');
+UnsupportedError? var57 = UnsupportedError('W4vVdfv');
+UnimplementedError var58 = UnimplementedError('pK00TI\u2665');
+UnimplementedError? var59 = UnimplementedError('J(teto2');
+StateError var60 = StateError('L\u2665');
+StateError? var61 = StateError('e\u2665mykMK');
+ConcurrentModificationError var62 = new ConcurrentModificationError(22);
+ConcurrentModificationError? var63 = ConcurrentModificationError(7);
+StackOverflowError var64 = StackOverflowError();
+StackOverflowError? var65 = new StackOverflowError();
+CyclicInitializationError var66 = CyclicInitializationError('\u{1f600}');
+CyclicInitializationError? var67 = CyclicInitializationError('C');
+Exception var68 = Exception(14);
+Exception? var69 = Exception(40);
+FormatException var70 = FormatException('\u{1f600}lv32', 21, 28);
+FormatException? var71 = FormatException('e', 19, 12);
+IntegerDivisionByZeroException var72 = IntegerDivisionByZeroException();
+IntegerDivisionByZeroException? var73 = IntegerDivisionByZeroException();
+int var74 = 40;
+int? var75 = -44;
+Null var76 = null;
+Null? var77 = null;
+num var78 = 42;
+num? var79 = -85;
+RegExp var80 = new RegExp('M5O');
+RegExp? var81 = RegExp('Fs2');
+String var82 = 'W6';
+String? var83 = 'h';
+Runes var84 = Runes('+');
+Runes? var85 = Runes('');
+RuneIterator var86 = RuneIterator('\u2665w');
+RuneIterator? var87 = new RuneIterator('iNEK\u{1f600}');
+StringBuffer var88 = StringBuffer(47);
+StringBuffer? var89 = StringBuffer(5);
+Symbol var90 = new Symbol('q\u{1f600}');
+Symbol? var91 = new Symbol('&j5');
+Expando<bool> var92 = Expando<bool>(' ');
+Expando<bool>? var93 = Expando<bool>('f5B');
+Expando<int> var94 = Expando<int>('');
+Expando<int>? var95 = Expando<int>('\u{1f600}1AwU\u2665C');
+Expando<String> var96 = Expando<String>('Xzj(d');
+Expando<String>? var97 = Expando<String>('Ulsd');
+List<bool> var98 = <bool>[false, false, false];
+List<bool>? var99 = <bool>[false, false, false, true];
+List<int> var100 = Uint8ClampedList(17);
+List<int>? var101 = Uint8ClampedList(40);
+List<String> var102 = <String>['Y h', 'f', '\u{1f600}ip dQ', ')p', '2Qo'];
+List<String>? var103 = <String>[
+  'BQ(6-',
+  '\u{1f600}6\u2665yJaC',
+  '3wa',
+  'VJ',
+  'k',
+  ''
+];
+Set<bool> var104 = <bool>{false, true, false};
+Set<bool>? var105 = <bool>{false, true, false, true, false, false};
+Set<int> var106 = <int>{44, 11};
+Set<int>? var107 = <int>{if (false) -94, 35};
+Set<String> var108 = <String>{''};
+Set<String>? var109 = <String>{'4'};
+Map<bool, bool> var110 = <bool, bool>{
+  false: true,
+  false: true,
+  false: true,
+  true: false
+};
+Map<bool, bool>? var111 = <bool, bool>{
+  false: false,
+  true: false,
+  false: false,
+  true: false
+};
+Map<bool, int> var112 = <bool, int>{
+  true: 35,
+  true: -4,
+  true: -14,
+  false: 30,
+  false: -25
+};
+Map<bool, int>? var113 = null;
+Map<bool, String> var114 = <bool, String>{
+  false: '7d',
+  false: '\u{1f600}sv+',
+  false: 'aY',
+  false: 'dt'
+};
+Map<bool, String>? var115 = <bool, String>{
+  false: '',
+  false: '(G7\u{1f600}TBN',
+  true: '',
+  true: 'zZ-\u{1f600}\u2665)X',
+  false: ')-9',
+  false: ''
+};
+Map<int, bool> var116 = <int, bool>{
+  3: true,
+  10: true,
+  -59: true,
+  15: false,
+  -36: true
+};
+Map<int, bool>? var117 = <int, bool>{16: false, 0: false};
+Map<int, int> var118 = <int, int>{
+  -92: 29,
+  -12: 40,
+  -29: -26,
+  -21: 1,
+  13: 28,
+  28: -44
+};
+Map<int, int>? var119 = <int, int>{-54: -37};
+Map<int, String> var120 = <int, String>{-80: '', -62: 'h', 40: 'C\u2665FVU'};
+Map<int, String>? var121 = <int, String>{
+  ...<int, String>{
+    -8: 'S\u{1f600}kjRb',
+    23: '4',
+    -9223372034707292160: '',
+    28: 'uz',
+    -69: '@'
+  },
+  -53: 'nU6f',
+  -5: '',
+  -9223372034707292159: '',
+  20: 'h7EB+'
+};
+Map<String, bool> var122 = <String, bool>{'8+G': false};
+Map<String, bool>? var123 = <String, bool>{'rM9m6k': true, '2': true};
+Map<String, int> var124 = <String, int>{'Z+p@\u2665Ww': -55};
+Map<String, int>? var125 = <String, int>{'9': -2147483647, 'uQ': 40};
+Map<String, String> var126 = <String, String>{
+  'Q!': ' V\u{1f600}A2\u{1f600}',
+  'z': '\u2665)',
+  'cM@7\u{1f600}': 'XUT',
+  'oLoh': 'bLPrZ',
+  'YmR67nj': 'BdeuR'
+};
+Map<String, String>? var127 = <String, String>{'nOsSM1': '3 @yIj'};
+MapEntry<bool, bool> var128 = MapEntry<bool, bool>(true, false);
+MapEntry<bool, bool>? var129 = MapEntry<bool, bool>(true, false);
+MapEntry<bool, int> var130 = MapEntry<bool, int>(false, 13);
+MapEntry<bool, int>? var131 = MapEntry<bool, int>(true, 31);
+MapEntry<bool, String> var132 =
+    MapEntry<bool, String>(true, '\u26653KE\u{1f600}');
+MapEntry<bool, String>? var133 = MapEntry<bool, String>(false, 'd');
+MapEntry<int, bool> var134 = MapEntry<int, bool>(46, true);
+MapEntry<int, bool>? var135 = MapEntry<int, bool>(34, false);
+MapEntry<int, int> var136 = MapEntry<int, int>(22, 30);
+MapEntry<int, int>? var137 = MapEntry<int, int>(30, 48);
+MapEntry<int, String> var138 = MapEntry<int, String>(46, 'by#@-nv');
+MapEntry<int, String>? var139 = MapEntry<int, String>(49, 'N@KF');
+MapEntry<String, bool> var140 =
+    MapEntry<String, bool>('\u{1f600}km\u2665', true);
+MapEntry<String, bool>? var141 = new MapEntry<String, bool>('7PZX', false);
+MapEntry<String, int> var142 = new MapEntry<String, int>('OE', 27);
+
+Map<String, Map<String, bool>> var446 = <String, Map<String, bool>>{
+  'YJ\u{1f600}': <String, bool>{'BcKzE': true, 'Cz1A+n': false, '': true},
+  'u!KEz9I': <String, bool>{
+    '\u26653Hjr': true,
+    '-\u{1f600}': true,
+    '': true,
+    ')-': false,
+    'ygN': true
+  },
+  '+R6': <String, bool>{'ta\u2665dKu)': true, 'rao9j': true},
+  'YGXS!': <String, bool>{
+    '': false,
+    '6R': false,
+    '': true,
+    'MV\u{1f600} PP': true
+  }
+};
+Map<MapEntry<String, int>, Map<int, bool>> var2000 =
+    <MapEntry<String, int>, Map<int, bool>>{
+  new MapEntry<String, int>('', 7): <int, bool>{
+    -55: true,
+    4294967295: false,
+    48: true,
+    -1: true,
+    -96: false
+  },
+  MapEntry<String, int>('ORLVr', 1): <int, bool>{
+    -21: false,
+    4294967297: false,
+    -12: false,
+    -84: false
+  }
+};
+
+void foo1_Extension0() {
+  var446.forEach((loc0, loc1) {
+    for (int loc2 = 0; loc2 < 34; loc2++) {
+      print(<MapEntry<bool, bool>, String>{
+        MapEntry<bool, bool>(true, false): 'pqKqb',
+        MapEntry<bool, bool>(true, true): 'Fkx',
+        MapEntry<bool, bool>(true, false): '',
+        MapEntry<bool, bool>(false, true): 'fJvVWOW',
+        MapEntry<bool, bool>(false, true): 'q\u2665NR',
+        MapEntry<bool, bool>(false, true): '\u2665'
+      });
+      var2000.forEach((loc3, loc4) {
+        print(MapEntry<Map<bool, String>, MapEntry<int, bool>>(
+            <bool, String>{false: 'L'}, MapEntry<int, bool>(42, false)));
+      });
+    }
+  });
+}
+
+main() {
+  foo1_Extension0();
+
+  print(
+      '$var0\n$var9\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var29\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var54\n$var55\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n$var76\n$var77\n$var78\n$var79\n$var80\n$var81\n$var82\n$var83\n$var84\n$var85\n$var86\n$var87\n$var88\n$var89\n$var90\n$var91\n$var92\n$var93\n$var94\n$var95\n$var96\n$var97\n$var98\n$var99\n$var100\n$var101\n$var102\n$var103\n$var104\n$var105\n$var106\n$var107\n$var108\n$var109\n$var110\n$var111\n$var112\n$var113\n$var114\n$var115\n$var116\n$var117\n$var118\n$var119\n$var120\n$var121\n$var122\n$var123\n$var124\n$var125\n$var126\n$var127\n$var128\n$var129\n$var130\n$var131\n$var132\n');
+}
diff --git a/runtime/tests/vm/dart/spawn_shutdown_test.dart b/runtime/tests/vm/dart/spawn_shutdown_test.dart
index 6e42f3e..d47db32 100644
--- a/runtime/tests/vm/dart/spawn_shutdown_test.dart
+++ b/runtime/tests/vm/dart/spawn_shutdown_test.dart
@@ -1,9 +1,10 @@
 // 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.
-// VMOptions=--enable-asserts
 
-import 'dart:async';
+// VMOptions=--enable-asserts --enable-isolate-groups
+// VMOptions=--enable-asserts --no-enable-isolate-groups
+
 import 'dart:io';
 import 'dart:isolate';
 
diff --git a/runtime/tests/vm/dart/write_traces_to_invalid_file_test.dart b/runtime/tests/vm/dart/write_traces_to_invalid_file_test.dart
new file mode 100644
index 0000000..86df8d0
--- /dev/null
+++ b/runtime/tests/vm/dart/write_traces_to_invalid_file_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// VMOptions=--print_instructions_sizes-to=no/such/path
+// VMOptions=--timeline_dir=no/such/path
+// VMOptions=--trace_precompiler_to=no/such/path
+// VMOptions=--write_code_comments_as_synthetic_source_to=no/such/path
+// VMOptions=--write_retained_reasons_to=no/such/path
+// VMOptions=--write_v8_snapshot_profile-to=no/such/path
+
+main() {
+  print("Just checking we don't crash.");
+}
diff --git a/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart b/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart
index 37071f9..e1c8124 100644
--- a/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart
+++ b/runtime/tests/vm/dart_2/appjit_cha_deopt_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.
 
+// @dart = 2.9
+
 // OtherResources=appjit_cha_deopt_test_body.dart
 // VMOptions=--optimization-counter-threshold=100 --deterministic
 
diff --git a/runtime/tests/vm/dart_2/appjit_cha_deopt_test_body.dart b/runtime/tests/vm/dart_2/appjit_cha_deopt_test_body.dart
index c59f720..917f652 100644
--- a/runtime/tests/vm/dart_2/appjit_cha_deopt_test_body.dart
+++ b/runtime/tests/vm/dart_2/appjit_cha_deopt_test_body.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.
 
+// @dart = 2.9
+
 // Verify that app-jit snapshot contains dependencies between classes and CHA
 // optimized code.
 
diff --git a/runtime/tests/vm/dart_2/appjit_determinism_test.dart b/runtime/tests/vm/dart_2/appjit_determinism_test.dart
index f5116a8..b77b988 100644
--- a/runtime/tests/vm/dart_2/appjit_determinism_test.dart
+++ b/runtime/tests/vm/dart_2/appjit_determinism_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.
 
+// @dart = 2.9
+
 // Verify creating an app-jit snapshot twice generates the same bits.
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/appjit_load_static_licm_test.dart b/runtime/tests/vm/dart_2/appjit_load_static_licm_test.dart
index 804e30c..ff7b8a2 100644
--- a/runtime/tests/vm/dart_2/appjit_load_static_licm_test.dart
+++ b/runtime/tests/vm/dart_2/appjit_load_static_licm_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.
 
+// @dart = 2.9
+
 // OtherResources=appjit_load_static_licm_test_body.dart
 
 // Verify that app-jit snapshot contains dependencies between classes and CHA
diff --git a/runtime/tests/vm/dart_2/appjit_load_static_licm_test_body.dart b/runtime/tests/vm/dart_2/appjit_load_static_licm_test_body.dart
index 4006853..b391803 100644
--- a/runtime/tests/vm/dart_2/appjit_load_static_licm_test_body.dart
+++ b/runtime/tests/vm/dart_2/appjit_load_static_licm_test_body.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.
 
+// @dart = 2.9
+
 // Verify that LoadStaticField IL instruction can't be hoisted above
 // InitStaticField instruction.
 
diff --git a/runtime/tests/vm/dart_2/async_igoto_threshold_flag_test.dart b/runtime/tests/vm/dart_2/async_igoto_threshold_flag_test.dart
index 20c864f..abd9846 100644
--- a/runtime/tests/vm/dart_2/async_igoto_threshold_flag_test.dart
+++ b/runtime/tests/vm/dart_2/async_igoto_threshold_flag_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.
 
+// @dart = 2.9
+
 // This test is ensuring that the flag for --async-igoto-threshold is handled.
 // - -1 means igoto-based async is disabled.
 // - All other values sets the threshold for after how many continuations we
diff --git a/runtime/tests/vm/dart_2/b162922506_test.dart b/runtime/tests/vm/dart_2/b162922506_test.dart
index bb7d8b7..89c4b1f 100644
--- a/runtime/tests/vm/dart_2/b162922506_test.dart
+++ b/runtime/tests/vm/dart_2/b162922506_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.
 
+// @dart = 2.9
+
 // Regression test for b/162922506: verify that compiler does not use signed
 // 16-bit integers to store class ids for slots.
 
diff --git a/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart b/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart
index b7d734d..fee9478 100644
--- a/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart
+++ b/runtime/tests/vm/dart_2/bare_instructions_trampolines_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.
 
+// @dart = 2.9
+
 // VMOptions=--always-generate-trampolines-for-testing --use-bare-instructions
 
 // We use a reasonable sized test and run it with the above options.
diff --git a/runtime/tests/vm/dart_2/boxmint_test.dart b/runtime/tests/vm/dart_2/boxmint_test.dart
index bcc90b0..21d3065 100644
--- a/runtime/tests/vm/dart_2/boxmint_test.dart
+++ b/runtime/tests/vm/dart_2/boxmint_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.
 
+// @dart = 2.9
+
 // Test case that tests boxing mint
 
 // VMOptions=--optimization_counter_threshold=10 --deterministic --use-slow-path --shared-slow-path-triggers-gc --stacktrace_filter=foobar
diff --git a/runtime/tests/vm/dart_2/byte_array_optimized_test.dart b/runtime/tests/vm/dart_2/byte_array_optimized_test.dart
index ca3b432..73e5e3d 100644
--- a/runtime/tests/vm/dart_2/byte_array_optimized_test.dart
+++ b/runtime/tests/vm/dart_2/byte_array_optimized_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation
 
+// @dart = 2.9
+
 // Library tag to be able to run in html test framework.
 library byte_array_test;
 
diff --git a/runtime/tests/vm/dart_2/byte_array_test.dart b/runtime/tests/vm/dart_2/byte_array_test.dart
index 441681f..d1f7eb9 100644
--- a/runtime/tests/vm/dart_2/byte_array_test.dart
+++ b/runtime/tests/vm/dart_2/byte_array_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation
 
+// @dart = 2.9
+
 // Library tag to be able to run in html test framework.
 library byte_array_test;
 
diff --git a/runtime/tests/vm/dart_2/callee_side_type_checks_test.dart b/runtime/tests/vm/dart_2/callee_side_type_checks_test.dart
index 5a8dfaf..ecac508 100644
--- a/runtime/tests/vm/dart_2/callee_side_type_checks_test.dart
+++ b/runtime/tests/vm/dart_2/callee_side_type_checks_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.
 
+// @dart = 2.9
+
 // VMOptions=--reify-generic-functions
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/catch_entry_state_test.dart b/runtime/tests/vm/dart_2/catch_entry_state_test.dart
index 9f5fd6e..6e3fc2b 100644
--- a/runtime/tests/vm/dart_2/catch_entry_state_test.dart
+++ b/runtime/tests/vm/dart_2/catch_entry_state_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--no-background-compilation --optimization-counter-threshold=100
 
+// @dart = 2.9
+
 // Verify that runtime correctly materializes unboxed variables on the catch
 // entry in optimized code.
 
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test.dart
index 5f18af8..228e1b5 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--dwarf-stack-traces --save-debugging-info=async_lazy_debug.so --lazy-async-stacks --no-use-bare-instructions
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_test.dart
index 26805f1..ff202c8 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_test.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--lazy-async-stacks
 
+// @dart = 2.9
+
 import 'dart:async';
 
 import 'utils.dart';
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test.dart
index c9dbb09..a84014e 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--dwarf-stack-traces --save-debugging-info=async_no_causal_debug.so --no-lazy-async-stacks
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_test.dart
index 84848c9..3afda58 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_test.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--no-lazy-async-stacks
 
+// @dart = 2.9
+
 import 'dart:async';
 
 import 'utils.dart';
diff --git a/runtime/tests/vm/dart_2/causal_stacks/sync_async_start_pkg_test_test.dart b/runtime/tests/vm/dart_2/causal_stacks/sync_async_start_pkg_test_test.dart
index 7015fe0..8f29b8c 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/sync_async_start_pkg_test_test.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/sync_async_start_pkg_test_test.dart
@@ -6,6 +6,8 @@
 // when lazy async stacks are enabled by dropping frames below a synchronous
 // start to an async function.
 
+// @dart = 2.9
+
 import "package:test/test.dart";
 import "package:stack_trace/src/stack_zone_specification.dart";
 
diff --git a/runtime/tests/vm/dart_2/causal_stacks/utils.dart b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
index 4f02afc..cd46b03 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
@@ -306,8 +308,8 @@
 Future<void> doTestsNoCausalNoLazy([String debugInfoFilename]) async {
   {
     final expected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'^#1      allYield3 \(.*/utils.dart:41(:3)?\)$',
       r'^#2      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -319,13 +321,13 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'^#1      noYields3 \(.*/utils.dart:54(:3)?\)$',
-      r'^#2      noYields3 \(.*/utils.dart:53(:23)?\)$',
-      r'^#3      noYields2 \(.*/utils.dart:50(:9)?\)$',
-      r'^#4      noYields2 \(.*/utils.dart:49(:23)?\)$',
-      r'^#5      noYields \(.*/utils.dart:46(:9)?\)$',
-      r'^#6      noYields \(.*/utils.dart:45(:22)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'^#1      noYields3 \(.*/utils.dart:56(:3)?\)$',
+      r'^#2      noYields3 \(.*/utils.dart:55(:23)?\)$',
+      r'^#3      noYields2 \(.*/utils.dart:52(:9)?\)$',
+      r'^#4      noYields2 \(.*/utils.dart:51(:23)?\)$',
+      r'^#5      noYields \(.*/utils.dart:48(:9)?\)$',
+      r'^#6      noYields \(.*/utils.dart:47(:22)?\)$',
     ];
     final postfix = const <String>[
       r'^#9      doTestsNoCausalNoLazy ',
@@ -367,7 +369,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -379,7 +381,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -391,7 +393,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -403,8 +405,8 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwSync \(.+/utils.dart:16(:3)?\)$',
-      r'^#1      asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+      r'^#0      throwSync \(.+/utils.dart:18(:3)?\)$',
+      r'^#1      asyncStarThrowSync \(.+/utils.dart:114(:11)?\)$',
       r'^#2      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -419,7 +421,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -434,7 +436,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -448,8 +450,8 @@
 
   {
     final expected = const <String>[
-      r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+      r'#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'#1      allYield3 \(.*/utils.dart:41(:3)?\)$',
       r'#2      _rootRunUnary ',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -461,7 +463,7 @@
 
   {
     final expected = const <String>[
-      r'#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -473,7 +475,7 @@
 
   {
     final expected = const <String>[
-      r'#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -485,7 +487,7 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^#1      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -498,8 +500,8 @@
 
   {
     final expected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'^#1      futureThen.<anonymous closure> \(.*/utils.dart:187(:5)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'^#1      futureThen.<anonymous closure> \(.*/utils.dart:189(:5)?\)$',
       r'^#2      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
@@ -515,12 +517,12 @@
   // allYield
   {
     final allYieldExpected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'^#1      allYield3 \(.*/utils.dart:41(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      allYield2 \(.*/utils.dart:34(:3)?\)$',
+      r'^#2      allYield2 \(.*/utils.dart:36(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#3      allYield \(.*/utils.dart:29(:3)?\)$',
+      r'^#3      allYield \(.*/utils.dart:31(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -564,10 +566,10 @@
   // noYields
   {
     final noYieldsExpected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'^#1      noYields3 \(.*/utils.dart:54(:3)?\)$',
-      r'^#2      noYields2 \(.*/utils.dart:50(:9)?\)$',
-      r'^#3      noYields \(.*/utils.dart:46(:9)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'^#1      noYields3 \(.*/utils.dart:56(:3)?\)$',
+      r'^#2      noYields2 \(.*/utils.dart:52(:9)?\)$',
+      r'^#3      noYields \(.*/utils.dart:48(:9)?\)$',
     ];
     await doTestAwait(
         noYields,
@@ -607,11 +609,11 @@
   // mixedYields
   {
     final mixedYieldsExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      mixedYields2 \(.*/utils.dart:66(:3)?\)$',
+      r'^#1      mixedYields2 \(.*/utils.dart:68(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      mixedYields \(.*/utils.dart:61(:3)?\)$',
+      r'^#2      mixedYields \(.*/utils.dart:63(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -655,11 +657,11 @@
   // syncSuffix
   {
     final syncSuffixExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
+      r'^#1      syncSuffix2 \(.*/utils.dart:84(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      syncSuffix \(.*/utils.dart:77(:3)?\)$',
+      r'^#2      syncSuffix \(.*/utils.dart:79(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -703,11 +705,11 @@
   // nonAsyncNoStack
   {
     final nonAsyncNoStackExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
+      r'^#1      nonAsyncNoStack1 \(.*/utils.dart:97(:36)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+      r'^#2      nonAsyncNoStack \(.*/utils.dart:95(:35)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -751,10 +753,10 @@
   // awaitEveryAsyncStarThrowSync
   {
     final asyncStarThrowSyncExpected = const <String>[
-      r'^#0      throwSync \(.+/utils.dart:16(:3)?\)$',
-      r'^#1      asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+      r'^#0      throwSync \(.+/utils.dart:18(:3)?\)$',
+      r'^#1      asyncStarThrowSync \(.+/utils.dart:114(:11)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
+      r'^#2      awaitEveryAsyncStarThrowSync \(.+/utils.dart:106(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -798,11 +800,11 @@
   // awaitEveryAsyncStarThrowAsync
   {
     final asyncStarThrowAsyncExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+      r'^#1      asyncStarThrowAsync \(.*/utils.dart:128(:5)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
+      r'^#2      awaitEveryAsyncStarThrowAsync \(.+/utils.dart:119(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -846,9 +848,9 @@
   // listenAsyncStarThrowAsync
   {
     final listenAsyncStartExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+      r'^#1      asyncStarThrowAsync \(.*/utils.dart:128(:5)?\)$',
       r'^<asynchronous suspension>$',
       r'^#2      listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
       r'^<asynchronous suspension>$',
@@ -864,14 +866,14 @@
   // customErrorZone
   {
     final customErrorZoneExpected = const <String>[
-      r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
-      r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+      r'#0      throwSync \(.*/utils.dart:18(:3)?\)$',
+      r'#1      allYield3 \(.*/utils.dart:41(:3)?\)$',
       r'<asynchronous suspension>$',
-      r'#2      allYield2 \(.*/utils.dart:34(:3)?\)$',
+      r'#2      allYield2 \(.*/utils.dart:36(:3)?\)$',
       r'<asynchronous suspension>$',
-      r'#3      allYield \(.*/utils.dart:29(:3)?\)$',
+      r'#3      allYield \(.*/utils.dart:31(:3)?\)$',
       r'<asynchronous suspension>$',
-      r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
+      r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:146(:5)?\)$',
       r'<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -885,7 +887,7 @@
   // awaitTimeout
   {
     final awaitTimeoutExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
       r'^#1      Future.timeout.<anonymous closure> \(dart:async/future_impl.dart',
       r'^<asynchronous suspension>$',
@@ -933,7 +935,7 @@
   // awaitWait
   {
     final awaitWaitExpected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
       r'^#1      Future.wait.<anonymous closure> \(dart:async/future.dart',
       r'^<asynchronous suspension>$',
@@ -981,7 +983,7 @@
   // futureSyncWhenComplete
   {
     final expected = const <String>[
-      r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+      r'^#0      throwAsync \(.*/utils.dart:23(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
@@ -1025,7 +1027,7 @@
   // futureThen
   {
     final expected = const <String>[
-      r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+      r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
       r'^#1      futureThen.<anonymous closure> ',
       r'^<asynchronous suspension>$',
     ];
diff --git a/runtime/tests/vm/dart_2/data_uri_import_test.dart b/runtime/tests/vm/dart_2/data_uri_import_test.dart
index ec23fb5..5f6634e 100644
--- a/runtime/tests/vm/dart_2/data_uri_import_test.dart
+++ b/runtime/tests/vm/dart_2/data_uri_import_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.
 
+// @dart = 2.9
+
 // foo() => 42;
 import 'data:application/dart;charset=utf-8,foo%28%29%20%3D%3E%2042%3B'; //# percentencoded: ok
 import 'data:text/plain;charset=utf-8,foo%28%29%20%3D%3E%2042%3B';  //# wrongmime: ok
diff --git a/runtime/tests/vm/dart_2/data_uri_spawn_test.dart b/runtime/tests/vm/dart_2/data_uri_spawn_test.dart
index 3e045a9..005a48a 100644
--- a/runtime/tests/vm/dart_2/data_uri_spawn_test.dart
+++ b/runtime/tests/vm/dart_2/data_uri_spawn_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.
 
+// @dart = 2.9
+
 import "dart:isolate";
 
 import "package:async_helper/async_helper.dart";
diff --git a/runtime/tests/vm/dart_2/deferred_isolate_test.dart b/runtime/tests/vm/dart_2/deferred_isolate_test.dart
index 94be755..ccfcbba 100644
--- a/runtime/tests/vm/dart_2/deferred_isolate_test.dart
+++ b/runtime/tests/vm/dart_2/deferred_isolate_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.
 
+// @dart = 2.9
+
 // Verify deferred library status is per-isolate, not per-isolate-group.
 
 // VMOptions=--enable-isolate-groups
diff --git a/runtime/tests/vm/dart_2/deferred_loading_and_weak_serialization_references_test.dart b/runtime/tests/vm/dart_2/deferred_loading_and_weak_serialization_references_test.dart
index 7447a06..d0c7722 100644
--- a/runtime/tests/vm/dart_2/deferred_loading_and_weak_serialization_references_test.dart
+++ b/runtime/tests/vm/dart_2/deferred_loading_and_weak_serialization_references_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.
 
+// @dart = 2.9
+
 // These flags can cause WeakSerializationReferences to replace the owner of
 // some Code, which must be accounted for in AssignLoadingUnitsCodeVisitor.
 
diff --git a/runtime/tests/vm/dart_2/deferred_loading_call_modes_test.dart b/runtime/tests/vm/dart_2/deferred_loading_call_modes_test.dart
index 8fa1e45..e513770 100644
--- a/runtime/tests/vm/dart_2/deferred_loading_call_modes_test.dart
+++ b/runtime/tests/vm/dart_2/deferred_loading_call_modes_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.
 
+// @dart = 2.9
+
 // VMOptions=--use_bare_instructions=false
 // VMOptions=--use_bare_instructions=true --use_table_dispatch=false
 // VMOptions=--use_bare_instructions=true --use_table_dispatch=true
diff --git a/runtime/tests/vm/dart_2/deopt/allocate_array_test.dart b/runtime/tests/vm/dart_2/deopt/allocate_array_test.dart
index eb06336..4de688d 100644
--- a/runtime/tests/vm/dart_2/deopt/allocate_array_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/allocate_array_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --no-inline-alloc --use-slow-path --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=AllocateArray
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/allocate_context_test.dart b/runtime/tests/vm/dart_2/deopt/allocate_context_test.dart
index c52abc0..3f72b24 100644
--- a/runtime/tests/vm/dart_2/deopt/allocate_context_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/allocate_context_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --no-inline-alloc --use-slow-path --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=AllocateContext
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/allocate_object_test.dart b/runtime/tests/vm/dart_2/deopt/allocate_object_test.dart
index efcd883..1a9a9a8 100644
--- a/runtime/tests/vm/dart_2/deopt/allocate_object_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/allocate_object_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --no-inline-alloc --use-slow-path --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=AllocateObject
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/allocate_typed_data_test.dart b/runtime/tests/vm/dart_2/deopt/allocate_typed_data_test.dart
index 6556661..f889137 100644
--- a/runtime/tests/vm/dart_2/deopt/allocate_typed_data_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/allocate_typed_data_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --no-inline-alloc --use-slow-path --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=AllocateTypedData
 
 import 'dart:typed_data';
diff --git a/runtime/tests/vm/dart_2/deopt/assert_subtype_test.dart b/runtime/tests/vm/dart_2/deopt/assert_subtype_test.dart
index 964aa7d..8810f8c 100644
--- a/runtime/tests/vm/dart_2/deopt/assert_subtype_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/assert_subtype_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=SubtypeCheck
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/clone_context_test.dart b/runtime/tests/vm/dart_2/deopt/clone_context_test.dart
index 5320404..1e62c6c 100644
--- a/runtime/tests/vm/dart_2/deopt/clone_context_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/clone_context_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --no-inline-alloc --use-slow-path --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=CloneContext
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/indirect_goto_regress_46399_test.dart b/runtime/tests/vm/dart_2/deopt/indirect_goto_regress_46399_test.dart
index f28ef6b..b417332 100644
--- a/runtime/tests/vm/dart_2/deopt/indirect_goto_regress_46399_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/indirect_goto_regress_46399_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --deoptimize-on-runtime-call-every=1 --optimization-counter-threshold=1
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/deopt/instantiate_type_arguments_test.dart b/runtime/tests/vm/dart_2/deopt/instantiate_type_arguments_test.dart
index 4426064..ff5f1df 100644
--- a/runtime/tests/vm/dart_2/deopt/instantiate_type_arguments_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/instantiate_type_arguments_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=InstantiateTypeArguments
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/instantiate_type_test.dart b/runtime/tests/vm/dart_2/deopt/instantiate_type_test.dart
index 2ae579e..4c01b62 100644
--- a/runtime/tests/vm/dart_2/deopt/instantiate_type_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/instantiate_type_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --deoptimize-on-runtime-call-every=1 --deterministic --optimization-counter-threshold=1 --deoptimize-on-runtime-call-name-filter=InstantiateType
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46070_test.dart b/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46070_test.dart
index 959c792..bcac86c 100644
--- a/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46070_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46070_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --deoptimize-on-runtime-call-every=3 --optimization-counter-threshold=10
 
 main() {
diff --git a/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46446_test.dart b/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46446_test.dart
index 02db828..c897ab00 100644
--- a/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46446_test.dart
+++ b/runtime/tests/vm/dart_2/deopt/restart_call_on_deopt_regress_46446_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.
 
+// @dart = 2.9
+
 // VMOptions=--disable-dart-dev --use-slow-path --deoptimize-on-runtime-call-every=3 --optimization-counter-threshold=10 --deterministic
 
 import 'dart:collection';
diff --git a/runtime/tests/vm/dart_2/disassemble_aot_test.dart b/runtime/tests/vm/dart_2/disassemble_aot_test.dart
index 80a32c3..fd4e55e 100644
--- a/runtime/tests/vm/dart_2/disassemble_aot_test.dart
+++ b/runtime/tests/vm/dart_2/disassemble_aot_test.dart
@@ -6,6 +6,8 @@
 //
 // Tests proper object recognition in disassembler.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/disassemble_determinism_test.dart b/runtime/tests/vm/dart_2/disassemble_determinism_test.dart
index 682787c..b2d9521 100644
--- a/runtime/tests/vm/dart_2/disassemble_determinism_test.dart
+++ b/runtime/tests/vm/dart_2/disassemble_determinism_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.
 
+// @dart = 2.9
+
 // Verify running with --disassemble --disassemble-relative produces
 // deterministic output. This is useful for removing noise when tracking down
 // the effects of compiler changes.
diff --git a/runtime/tests/vm/dart_2/double_field_assignment_test.dart b/runtime/tests/vm/dart_2/double_field_assignment_test.dart
index ba95348..ff47867 100644
--- a/runtime/tests/vm/dart_2/double_field_assignment_test.dart
+++ b/runtime/tests/vm/dart_2/double_field_assignment_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.
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 final bool alwaysTrue = int.parse('1') == 1;
diff --git a/runtime/tests/vm/dart_2/double_materialize_test.dart b/runtime/tests/vm/dart_2/double_materialize_test.dart
index e1fa1b3..4d654a1 100644
--- a/runtime/tests/vm/dart_2/double_materialize_test.dart
+++ b/runtime/tests/vm/dart_2/double_materialize_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/double_to_smi_test.dart b/runtime/tests/vm/dart_2/double_to_smi_test.dart
index 06d6139..ae9d5da 100644
--- a/runtime/tests/vm/dart_2/double_to_smi_test.dart
+++ b/runtime/tests/vm/dart_2/double_to_smi_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/dylib_utils.dart b/runtime/tests/vm/dart_2/dylib_utils.dart
index 083e941..af0b6d5 100644
--- a/runtime/tests/vm/dart_2/dylib_utils.dart
+++ b/runtime/tests/vm/dart_2/dylib_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.
 
+// @dart = 2.9
+
 import 'dart:ffi' as ffi;
 import 'dart:io' show Platform;
 
diff --git a/runtime/tests/vm/dart_2/emit_aot_size_info_flag_test.dart b/runtime/tests/vm/dart_2/emit_aot_size_info_flag_test.dart
index 229178f..0b28d08 100644
--- a/runtime/tests/vm/dart_2/emit_aot_size_info_flag_test.dart
+++ b/runtime/tests/vm/dart_2/emit_aot_size_info_flag_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.
 
+// @dart = 2.9
+
 import "dart:async";
 import "dart:io";
 import "dart:convert";
diff --git a/runtime/tests/vm/dart_2/entrypoints/aot/static_this_test.dart b/runtime/tests/vm/dart_2/entrypoints/aot/static_this_test.dart
index f46906f..6b39bbd 100644
--- a/runtime/tests/vm/dart_2/entrypoints/aot/static_this_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/aot/static_this_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--enable-testing-pragmas -Denable_inlining=true
 
+// @dart = 2.9
+
 import '../static_this.dart';
 
 main(args) => test(args);
diff --git a/runtime/tests/vm/dart_2/entrypoints/aot/super_test.dart b/runtime/tests/vm/dart_2/entrypoints/aot/super_test.dart
index fae9243..a68f00f 100644
--- a/runtime/tests/vm/dart_2/entrypoints/aot/super_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/aot/super_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--enable-testing-pragmas -Denable_inlining=true
 
+// @dart = 2.9
+
 import "../super.dart";
 
 main(args) => test(args);
diff --git a/runtime/tests/vm/dart_2/entrypoints/common.dart b/runtime/tests/vm/dart_2/entrypoints/common.dart
index 19c01b4..9510608 100644
--- a/runtime/tests/vm/dart_2/entrypoints/common.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/common.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.
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 // We want to run each test with and without inlining of the target functions.
diff --git a/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_optional_this_test.dart b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_optional_this_test.dart
index 3599dba..eb7c8d6 100644
--- a/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_optional_this_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_optional_this_test.dart
@@ -6,6 +6,8 @@
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 --compilation-counter-threshold=1
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=1
 
+// @dart = 2.9
+
 // Test that 'PolymorphicInstanceCall's against "this" go through the unchecked
 // entrypoint. The use of optional arguments here encourages prologue sharing
 // between the entrypoints.
diff --git a/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_this_test.dart b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_this_test.dart
index 5793419..37f5a66 100644
--- a/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_this_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_this_test.dart
@@ -6,6 +6,8 @@
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 --compilation-counter-threshold=1
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=1
 
+// @dart = 2.9
+
 // Test that 'PolymorphicInstanceCall's against "this" go through the unchecked
 // entrypoint.
 
diff --git a/runtime/tests/vm/dart_2/entrypoints/jit/static_this_test.dart b/runtime/tests/vm/dart_2/entrypoints/jit/static_this_test.dart
index 29094e4..bfdc0f8 100644
--- a/runtime/tests/vm/dart_2/entrypoints/jit/static_this_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/static_this_test.dart
@@ -6,6 +6,8 @@
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=5 -Denable_inlining=true --compilation-counter-threshold=5
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=5
 
+// @dart = 2.9
+
 import '../static_this.dart';
 
 main(args) => test(args);
diff --git a/runtime/tests/vm/dart_2/entrypoints/jit/super_test.dart b/runtime/tests/vm/dart_2/entrypoints/jit/super_test.dart
index be8d2d9..bccaa31 100644
--- a/runtime/tests/vm/dart_2/entrypoints/jit/super_test.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/super_test.dart
@@ -6,6 +6,8 @@
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=5 --compilation-counter-threshold=5
 // VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=5
 
+// @dart = 2.9
+
 import "../super.dart";
 
 main(args) => test(args);
diff --git a/runtime/tests/vm/dart_2/entrypoints/static_this.dart b/runtime/tests/vm/dart_2/entrypoints/static_this.dart
index 38a8307..f203395 100644
--- a/runtime/tests/vm/dart_2/entrypoints/static_this.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/static_this.dart
@@ -4,6 +4,8 @@
 //
 // Test that 'StaticCall's against "this" go through the unchecked entry-point.
 
+// @dart = 2.9
+
 import "common.dart";
 import "package:expect/expect.dart";
 
diff --git a/runtime/tests/vm/dart_2/entrypoints/super.dart b/runtime/tests/vm/dart_2/entrypoints/super.dart
index 2ba7af0..0fb1c23e 100644
--- a/runtime/tests/vm/dart_2/entrypoints/super.dart
+++ b/runtime/tests/vm/dart_2/entrypoints/super.dart
@@ -4,6 +4,8 @@
 //
 // Test that 'StaticCall's against "super" go through the unchecked entrypoint.
 
+// @dart = 2.9
+
 import "common.dart";
 import "package:expect/expect.dart";
 
diff --git a/runtime/tests/vm/dart_2/entrypoints_verification_test.dart b/runtime/tests/vm/dart_2/entrypoints_verification_test.dart
new file mode 100644
index 0000000..9cb4d08
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints_verification_test.dart
@@ -0,0 +1,107 @@
+// 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.
+//
+// VMOptions=--verify-entry-points=true
+// SharedObjects=entrypoints_verification_test
+
+// @dart = 2.9
+
+import 'dart:ffi';
+import './dylib_utils.dart';
+
+main() {
+  final helper = dlopenPlatformSpecific('entrypoints_verification_test');
+  final runTest =
+      helper.lookupFunction<Void Function(), void Function()>('RunTests');
+  runTest();
+
+  new C();
+  new D();
+}
+
+class C {}
+
+@pragma("vm:entry-point")
+class D {
+  D();
+
+  @pragma("vm:entry-point")
+  D.defined();
+
+  @pragma("vm:entry-point")
+  factory D.fact() => E.ctor();
+
+  void fn0() {}
+
+  @pragma("vm:entry-point")
+  void fn1() {}
+
+  @pragma("vm:entry-point", "get")
+  void fn1_get() {}
+
+  @pragma("vm:entry-point", "call")
+  void fn1_call() {}
+
+  static void fn2() {}
+
+  @pragma("vm:entry-point")
+  static void fn3() {}
+
+  @pragma("vm:entry-point", "call")
+  static void fn3_call() {}
+
+  @pragma("vm:entry-point", "get")
+  static void fn3_get() {}
+
+  void Function() fld0;
+
+  @pragma("vm:entry-point")
+  void Function() fld1;
+
+  @pragma("vm:entry-point", "get")
+  void Function() fld2;
+
+  @pragma("vm:entry-point", "set")
+  void Function() fld3;
+}
+
+void fn0() {}
+
+@pragma("vm:entry-point")
+void fn1() {}
+
+@pragma("vm:entry-point", "get")
+void fn1_get() {}
+
+@pragma("vm:entry-point", "call")
+void fn1_call() {}
+
+class E extends D {
+  E.ctor();
+}
+
+@pragma("vm:entry-point")
+class F {
+  static void Function() fld0;
+
+  @pragma("vm:entry-point")
+  static void Function() fld1;
+
+  @pragma("vm:entry-point", "get")
+  static void Function() fld2;
+
+  @pragma("vm:entry-point", "set")
+  static void Function() fld3;
+}
+
+void Function() fld0;
+
+@pragma("vm:entry-point")
+void Function() fld1;
+
+@pragma("vm:entry-point", "get")
+void Function() fld2;
+
+@pragma("vm:entry-point", "set")
+void Function() fld3;
diff --git a/runtime/tests/vm/dart_2/error_messages_in_null_checks_test.dart b/runtime/tests/vm/dart_2/error_messages_in_null_checks_test.dart
index bd114cb..ed66c1b 100644
--- a/runtime/tests/vm/dart_2/error_messages_in_null_checks_test.dart
+++ b/runtime/tests/vm/dart_2/error_messages_in_null_checks_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.
 
+// @dart = 2.9
+
 // This test verifies that NoSuchMethodError thrown from null checks
 // corresponding to devirtualized calls in AOT mode have detailed messages
 // (dartbug.com/32863).
diff --git a/runtime/tests/vm/dart_2/error_stacktrace_test.dart b/runtime/tests/vm/dart_2/error_stacktrace_test.dart
index 533aed5..a2c90c3 100644
--- a/runtime/tests/vm/dart_2/error_stacktrace_test.dart
+++ b/runtime/tests/vm/dart_2/error_stacktrace_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // Test that the full stacktrace in an error object matches the stacktrace
 // handed to the catch clause.
+
+// @dart = 2.9
 library test.error_stacktrace;
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/extension_names_test.dart b/runtime/tests/vm/dart_2/extension_names_test.dart
index 77414da..6f16cee 100644
--- a/runtime/tests/vm/dart_2/extension_names_test.dart
+++ b/runtime/tests/vm/dart_2/extension_names_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.
 
+// @dart = 2.9
+
 // Test that ensures stack traces have user friendly names from extension
 // functions.
 
diff --git a/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart b/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart
index a38966d..ca8893a 100644
--- a/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart
+++ b/runtime/tests/vm/dart_2/extension_unnamed_names_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.
 
+// @dart = 2.9
+
 // Test that ensures stack traces have user friendly names from extension
 // functions.
 
diff --git a/runtime/tests/vm/dart_2/flutter_regress_82278_2_test.dart b/runtime/tests/vm/dart_2/flutter_regress_82278_2_test.dart
index 09fe2eb..8e6307f 100644
--- a/runtime/tests/vm/dart_2/flutter_regress_82278_2_test.dart
+++ b/runtime/tests/vm/dart_2/flutter_regress_82278_2_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 dynamic global;
diff --git a/runtime/tests/vm/dart_2/flutter_regress_82278_test.dart b/runtime/tests/vm/dart_2/flutter_regress_82278_test.dart
index 3170ab4..13f18e6 100644
--- a/runtime/tests/vm/dart_2/flutter_regress_82278_test.dart
+++ b/runtime/tests/vm/dart_2/flutter_regress_82278_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class Foo {
diff --git a/runtime/tests/vm/dart_2/flutter_regression67803_test.dart b/runtime/tests/vm/dart_2/flutter_regression67803_test.dart
index 71abd70..06e3836 100644
--- a/runtime/tests/vm/dart_2/flutter_regression67803_test.dart
+++ b/runtime/tests/vm/dart_2/flutter_regression67803_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 final bool kTrue = int.parse('1') == 1;
diff --git a/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart b/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart
index 198ba7c..e70618d 100644
--- a/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart
+++ b/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart
@@ -2,6 +2,8 @@
 // Program generated as:
 //   dart dartfuzz.dart --seed 3608420507
 
+// @dart = 2.9
+
 bool var0 = false;
 bool var1 = false;
 int var2 = -49;
diff --git a/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_script.dart b/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_script.dart
index d36bd7f..731a177 100644
--- a/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_script.dart
+++ b/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_script.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.
 
+// @dart = 2.9
+
 import 'dart:developer';
 import 'dart:isolate' as I;
 
diff --git a/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_test.dart b/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_test.dart
index bea28ff..5310fcd 100644
--- a/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_test.dart
+++ b/runtime/tests/vm/dart_2/gen_snapshot_include_resolved_urls_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.
 
+// @dart = 2.9
+
 import "dart:async";
 import "dart:io";
 import "dart:convert";
diff --git a/runtime/tests/vm/dart_2/generic_check_bound_slow_path_test.dart b/runtime/tests/vm/dart_2/generic_check_bound_slow_path_test.dart
index 7290b2f..f7fca3c 100644
--- a/runtime/tests/vm/dart_2/generic_check_bound_slow_path_test.dart
+++ b/runtime/tests/vm/dart_2/generic_check_bound_slow_path_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.
 
+// @dart = 2.9
+
 // VMOptions=--shared_slow_path_triggers_gc
 
 import 'dart:typed_data';
diff --git a/runtime/tests/vm/dart_2/generic_field_invocation_test.dart b/runtime/tests/vm/dart_2/generic_field_invocation_test.dart
index 6149695..b82944e 100644
--- a/runtime/tests/vm/dart_2/generic_field_invocation_test.dart
+++ b/runtime/tests/vm/dart_2/generic_field_invocation_test.dart
@@ -7,6 +7,8 @@
 //
 // VMOptions=--no-lazy-dispatchers
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/runtime/tests/vm/dart_2/have_same_runtime_type_test.dart b/runtime/tests/vm/dart_2/have_same_runtime_type_test.dart
new file mode 100644
index 0000000..119e40f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/have_same_runtime_type_test.dart
@@ -0,0 +1,34 @@
+// 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 for corner cases of 'a.runtimeType == b.runtimeType' pattern
+// which is recognized and optimized in AOT mode.
+
+// @dart = 2.9
+
+import "package:expect/expect.dart";
+
+@pragma('vm:never-inline')
+Object getType(Object obj) => obj.runtimeType;
+
+@pragma('vm:never-inline')
+void test(bool expected, Object a, Object b) {
+  bool result1 = getType(a) == getType(b);
+  bool result2 = a.runtimeType == b.runtimeType;
+  Expect.equals(expected, result1);
+  Expect.equals(expected, result2);
+}
+
+typedef Func = void Function();
+
+void main() {
+  test(true, 0x7fffffffffffffff, int.parse('42'));
+  test(true, 'hi', String.fromCharCode(1114111));
+  test(false, 'hi', 1);
+  test(true, List, Func);
+  test(true, <int>[1], const <int>[2]);
+  test(true, const <String>[], List<String>.filled(1, ''));
+  test(true, <String>[]..add('hi'), List<String>.filled(2, ''));
+  test(false, <int>[], <String>[]);
+}
diff --git a/runtime/tests/vm/dart_2/hello_fuchsia_test.dart b/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
index 818ee25..028a293 100644
--- a/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
+++ b/runtime/tests/vm/dart_2/hello_fuchsia_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.
 
+// @dart = 2.9
+
 import "dart:async";
 import "dart:convert";
 import "dart:io";
diff --git a/runtime/tests/vm/dart_2/hello_world_test.dart b/runtime/tests/vm/dart_2/hello_world_test.dart
index 8c9c377..f01c3e7 100644
--- a/runtime/tests/vm/dart_2/hello_world_test.dart
+++ b/runtime/tests/vm/dart_2/hello_world_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.
 
+// @dart = 2.9
+
 // Classic "Hello, world!". Used in the VM build (runtime/bin/BUILD.gn) as
 // a tiny script for precompilation.
 
diff --git a/runtime/tests/vm/dart_2/in_memory_elf_test.dart b/runtime/tests/vm/dart_2/in_memory_elf_test.dart
index 958dd73..2df831c 100644
--- a/runtime/tests/vm/dart_2/in_memory_elf_test.dart
+++ b/runtime/tests/vm/dart_2/in_memory_elf_test.dart
@@ -7,6 +7,8 @@
 // Tests the in-memory ELF loader, which loads an ELF image without an
 // underlying file.
 
+// @dart = 2.9
+
 main() {
   print("Test successful.");
 }
diff --git a/runtime/tests/vm/dart_2/incompatible_loading_unit_1.dart b/runtime/tests/vm/dart_2/incompatible_loading_unit_1.dart
index 35b3947..a99a4e0 100644
--- a/runtime/tests/vm/dart_2/incompatible_loading_unit_1.dart
+++ b/runtime/tests/vm/dart_2/incompatible_loading_unit_1.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.
 
+// @dart = 2.9
+
 import "incompatible_loading_unit_1_deferred.dart" deferred as lib;
 
 main() async {
diff --git a/runtime/tests/vm/dart_2/incompatible_loading_unit_1_deferred.dart b/runtime/tests/vm/dart_2/incompatible_loading_unit_1_deferred.dart
index c0b9a03..bf93bdf 100644
--- a/runtime/tests/vm/dart_2/incompatible_loading_unit_1_deferred.dart
+++ b/runtime/tests/vm/dart_2/incompatible_loading_unit_1_deferred.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.
 
+// @dart = 2.9
+
 void foo() {
   print("One!");
 }
diff --git a/runtime/tests/vm/dart_2/incompatible_loading_unit_2.dart b/runtime/tests/vm/dart_2/incompatible_loading_unit_2.dart
index 7a352f6c..132ccc4 100644
--- a/runtime/tests/vm/dart_2/incompatible_loading_unit_2.dart
+++ b/runtime/tests/vm/dart_2/incompatible_loading_unit_2.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.
 
+// @dart = 2.9
+
 import "incompatible_loading_unit_2_deferred.dart" deferred as lib;
 
 main() async {
diff --git a/runtime/tests/vm/dart_2/incompatible_loading_unit_2_deferred.dart b/runtime/tests/vm/dart_2/incompatible_loading_unit_2_deferred.dart
index 2dc3b7a..bd830aa 100644
--- a/runtime/tests/vm/dart_2/incompatible_loading_unit_2_deferred.dart
+++ b/runtime/tests/vm/dart_2/incompatible_loading_unit_2_deferred.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.
 
+// @dart = 2.9
+
 void foo() {
   print("Two!");
 }
diff --git a/runtime/tests/vm/dart_2/incompatible_loading_unit_test.dart b/runtime/tests/vm/dart_2/incompatible_loading_unit_test.dart
index 73a7a6d..7ea0a2d 100644
--- a/runtime/tests/vm/dart_2/incompatible_loading_unit_test.dart
+++ b/runtime/tests/vm/dart_2/incompatible_loading_unit_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.
 
+// @dart = 2.9
+
 import "dart:convert";
 import "dart:io";
 
diff --git a/runtime/tests/vm/dart_2/inline_stack_frame_test.dart b/runtime/tests/vm/dart_2/inline_stack_frame_test.dart
index 68c8584..9bb24e9 100644
--- a/runtime/tests/vm/dart_2/inline_stack_frame_test.dart
+++ b/runtime/tests/vm/dart_2/inline_stack_frame_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation
 
 // This test tries to verify that we produce the correct stack trace when
diff --git a/runtime/tests/vm/dart_2/internal_platform_library_import_test.dart b/runtime/tests/vm/dart_2/internal_platform_library_import_test.dart
index 7f99459..89539c8 100644
--- a/runtime/tests/vm/dart_2/internal_platform_library_import_test.dart
+++ b/runtime/tests/vm/dart_2/internal_platform_library_import_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.
 
+// @dart = 2.9
+
 import 'dart:_internal';
 
 void main(List<String> args) {
diff --git a/runtime/tests/vm/dart_2/isolate_send_function_types_test.dart b/runtime/tests/vm/dart_2/isolate_send_function_types_test.dart
index 8075c8b..556327c 100644
--- a/runtime/tests/vm/dart_2/isolate_send_function_types_test.dart
+++ b/runtime/tests/vm/dart_2/isolate_send_function_types_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.
 //
+
+// @dart = 2.9
 import 'dart:async';
 import 'dart:isolate';
 
diff --git a/runtime/tests/vm/dart_2/isolate_send_regex_test.dart b/runtime/tests/vm/dart_2/isolate_send_regex_test.dart
index cac6d09..065ca17 100644
--- a/runtime/tests/vm/dart_2/isolate_send_regex_test.dart
+++ b/runtime/tests/vm/dart_2/isolate_send_regex_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.
 //
+
+// @dart = 2.9
 import 'dart:isolate';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/isolates/closure_entrypoint_test.dart b/runtime/tests/vm/dart_2/isolates/closure_entrypoint_test.dart
new file mode 100644
index 0000000..4fa05c9
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/closure_entrypoint_test.dart
@@ -0,0 +1,113 @@
+// 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.
+
+// VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy
+// VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation
+
+// The tests in this file will only succeed when isolate groups are enabled
+// (hence the VMOptions above).
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'fast_object_copy_test.dart' show ClassWithNativeFields;
+
+class HashThrower {
+  static bool throwOnHashCode = true;
+
+  const HashThrower();
+
+  int get hashCode => throwOnHashCode ? throw 'failing' : 2;
+  bool operator ==(other) => identical(this, other);
+}
+
+Future testWithClosure<T>(
+    void Function(SendPort) entrypoint, T expectedResult) async {
+  final rp = ReceivePort();
+  try {
+    await Isolate.spawn(entrypoint, rp.sendPort);
+    Expect.equals(expectedResult, await rp.first);
+  } finally {
+    rp.close();
+  }
+}
+
+class ClosureEntrypointTester {
+  int instanceValue = 42;
+
+  void send42(SendPort sendPort) => sendPort.send(42);
+
+  Future run() async {
+    await noCapturedVariablesTest();
+    await capturedInt();
+    await capturedInstanceInt();
+    await captureThisViaMethodTearOff();
+    await captureInvalidObject();
+    await captureRehashThrower();
+  }
+
+  Future noCapturedVariablesTest() async {
+    print('noCapturedVariablesTest');
+    await testWithClosure((SendPort s) => s.send(42), 42);
+  }
+
+  Future capturedInt() async {
+    print('capturedInt');
+    int value = 42;
+    await testWithClosure((SendPort s) => s.send(value), 42);
+  }
+
+  Future capturedInstanceInt() async {
+    print('capturedInstanceValue');
+    await testWithClosure((SendPort s) => s.send(this.instanceValue), 42);
+  }
+
+  Future captureThisViaMethodTearOff() async {
+    print('captureThisViaMethodTearOff');
+    await testWithClosure(send42, 42);
+  }
+
+  Future captureInvalidObject() async {
+    print('captureInvalidObject');
+    final invalidObject = ClassWithNativeFields();
+    send42(SendPort sendPort) {
+      '$invalidObject'; // Use an object that cannot be copied.
+      sendPort.send(42);
+    }
+
+    throwsAsync<ArgumentError>(() => testWithClosure(send42, 42));
+  }
+
+  Future captureRehashThrower() async {
+    print('captureRehashThrower');
+    HashThrower.throwOnHashCode = false;
+    final hashThrower = {HashThrower()};
+    send42(SendPort sendPort) {
+      '$hashThrower'; // Use an object that cannot be deserialized.
+      sendPort.send(42);
+    }
+
+    throwsAsync<IsolateSpawnException>(() => testWithClosure(send42, 42));
+  }
+
+  Future throwsAsync<T>(Future Function() fun) async {
+    try {
+      await fun();
+    } catch (e) {
+      if (e is T) return;
+      rethrow;
+    }
+    throw 'Function failed to throw ArgumentError';
+  }
+}
+
+main() async {
+  await ClosureEntrypointTester().run();
+}
diff --git a/runtime/tests/vm/dart_2/isolates/closures_without_captured_variables_test.dart b/runtime/tests/vm/dart_2/isolates/closures_without_captured_variables_test.dart
new file mode 100644
index 0000000..3f714b6
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/closures_without_captured_variables_test.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.
+
+// VMOptions=--enable-isolate-groups
+
+// The tests in this file will only succeed when isolate groups are enabled
+// (hence the VMOptions above).
+
+// @dart=2.9
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'fast_object_copy_test.dart' show ClassWithNativeFields;
+
+main() async {
+  final rp = ReceivePort();
+
+  testNormalEnclosingFunction(rp);
+  testNormalNestedEnclosingFunction(rp);
+  testNormalNestedEnclosingFunction2(rp);
+
+  final si = StreamIterator(rp);
+  for (int i = 0; i < 3; ++i) {
+    Expect.isTrue(await si.moveNext());
+    Expect.equals(42, (si.current)());
+  }
+  si.cancel(); // closes the port
+}
+
+testNormalEnclosingFunction(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+
+  captureInvalidObject() => invalidObject;
+  captureNormalObject() => normalObject;
+  captureNothing() => 42;
+
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+  // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+  // Should not throw, since the [captureNothing] closure should not have a
+  // parent context and therefore not transitively refer [rp].
+  rp.sendPort.send(captureNothing);
+}
+
+testNormalNestedEnclosingFunction(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+  nested() {
+    captureInvalidObject() => invalidObject;
+    captureNormalObject() => normalObject;
+    captureNothing() => 42;
+
+    Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+    // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+    Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+    // Should not throw, since the [captureNothing] closure should not have a
+    // parent context and therefore not transitively refer [rp].
+    rp.sendPort.send(captureNothing);
+  }
+
+  nested();
+}
+
+testNormalNestedEnclosingFunction2(ReceivePort rp) {
+  final invalidObject = ClassWithNativeFields();
+  final normalObject = Object();
+
+  captureInvalidObject() {
+    local() => invalidObject;
+    return local;
+  }
+
+  captureNormalObject() {
+    local() => normalObject;
+    return local;
+  }
+
+  captureNothing() => 42;
+
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureInvalidObject));
+
+  // TODO(http://dartbug.com/36983): Avoid capturing more than needed.
+  Expect.throwsArgumentError(() => rp.sendPort.send(captureNormalObject));
+
+  // Should not throw, since the [captureNothing] closure should not have a
+  // parent context and therefore not transitively refer [rp].
+  rp.sendPort.send(captureNothing);
+}
diff --git a/runtime/tests/vm/dart_2/isolates/concurrency_stress_sanity_test.dart b/runtime/tests/vm/dart_2/isolates/concurrency_stress_sanity_test.dart
index 3af1a18..b8ab05e 100644
--- a/runtime/tests/vm/dart_2/isolates/concurrency_stress_sanity_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/concurrency_stress_sanity_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.
 
+// @dart = 2.9
+
 import 'dart:convert';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
index 8b92de1..0a2fd1c 100644
--- a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.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.
 
+// @dart = 2.9
+
 // SharedObjects=ffi_test_functions
-// VMOptions=
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/isolates/enum_isolate_regress41824_test.dart b/runtime/tests/vm/dart_2/isolates/enum_isolate_regress41824_test.dart
index 902d5ef..cdcc9d5 100644
--- a/runtime/tests/vm/dart_2/isolates/enum_isolate_regress41824_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/enum_isolate_regress41824_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:isolate';
 
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 dc684dc..a0aa022 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
@@ -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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation
@@ -19,6 +21,14 @@
 import 'fast_object_copy_test.dart'
     show UserObject, SendReceiveTestBase, notAllocatableInTLAB;
 
+topLevelClosure(a, b) {}
+topLevelClosureG<T>(T a, T b) {}
+Type getType<T>() => T;
+
+class A<T> {
+  dynamic m<H>(T a, H b) => this;
+}
+
 // When running with isolate groups enabled, we can share all of the following
 // objects.
 final sharableObjects = [
@@ -32,6 +42,35 @@
     rp.close();
     return sp;
   })(),
+  () {
+    innerClosure(a, b) {}
+    return innerClosure;
+  }(),
+  () {
+    innerClosureG<T>(T a, T b) {}
+    return innerClosureG;
+  }(),
+  () {
+    innerClosureG<T>() {
+      innerClosureG2<H>(T a, H b) {}
+      return innerClosureG2;
+    }
+
+    return innerClosureG<int>();
+  }(),
+  () {
+    innerClosureG<T>(T a, T b) {}
+    final Function(int, int) partialInstantiatedInnerClosure = innerClosureG;
+    return partialInstantiatedInnerClosure;
+  }(),
+  () {
+    return topLevelClosureG;
+  }(),
+  () {
+    final Function(int, int) partialInstantiatedInnerClosure = topLevelClosureG;
+    return partialInstantiatedInnerClosure;
+  }(),
+  getType<void Function(int, double, Object)>(),
   const [1, 2, 3],
   const {1: 1, 2: 2, 3: 2},
   const {1, 2, 3},
@@ -40,13 +79,40 @@
   Int32x4(1, 2, 3, 4),
 ];
 
+final copyableClosures = <dynamic>[
+  () {
+    final a = A<int>();
+    final Function<T>(int, T) genericMethod = a.m;
+    return genericMethod;
+  }(),
+  () {
+    final a = A<int>();
+    final Function(int, double) partialInstantiatedMethod = a.m;
+    return partialInstantiatedMethod;
+  }(),
+  () {
+    final a = Object();
+    dynamic inner() => a;
+    return inner;
+  }(),
+  () {
+    foo(var arg) {
+      return () => arg;
+    }
+
+    return foo(1);
+  }(),
+];
+
 class SendReceiveTest extends SendReceiveTestBase {
   Future runTests() async {
     await testSharable();
     await testSharable2();
+    await testCopyableClosures();
   }
 
   Future testSharable() async {
+    print('testSharable');
     final sharableObjectsCopy = await sendReceive([
       ...sharableObjects,
     ]);
@@ -57,6 +123,7 @@
   }
 
   Future testSharable2() async {
+    print('testSharable2');
     final sharableObjectsCopy = await sendReceive([
       notAllocatableInTLAB,
       ...sharableObjects,
@@ -68,6 +135,27 @@
       Expect.identical(sharableObjects[i], sharableObjectsCopy[i + 1]);
     }
   }
+
+  Future testCopyableClosures() async {
+    print('testCopyableClosures');
+    final copy = await sendReceive([
+      notAllocatableInTLAB,
+      ...copyableClosures,
+    ]);
+    for (int i = 0; i < copyableClosures.length; ++i) {
+      Expect.notIdentical(copyableClosures[i], copy[1 + i]);
+      Expect.equals(copyableClosures[i].runtimeType, copy[1 + i].runtimeType);
+    }
+
+    final copy2 = await sendReceive([
+      ...copyableClosures,
+      notAllocatableInTLAB,
+    ]);
+    for (int i = 0; i < copyableClosures.length; ++i) {
+      Expect.notIdentical(copyableClosures[i], copy2[i]);
+      Expect.equals(copyableClosures[i].runtimeType, copy2[i].runtimeType);
+    }
+  }
 }
 
 main() async {
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 87bbc26..bad2e3a 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
@@ -2,7 +2,9 @@
 // for 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=
+// @dart = 2.9
+
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --enable-fast-object-copy
 // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
@@ -24,7 +26,9 @@
 
 import 'package:expect/expect.dart';
 
-class ClassWithNativeFields extends NativeFieldWrapperClass1 {}
+class ClassWithNativeFields extends NativeFieldWrapperClass1 {
+  void m() {}
+}
 
 final Uint8List largeExternalTypedData =
     File(Platform.resolvedExecutable).readAsBytesSync()..[0] = 42;
@@ -219,6 +223,10 @@
 
     await testFastOnly();
     await testSlowOnly();
+
+    await testWeakProperty();
+
+    await testForbiddenClosures();
   }
 
   Future testTransferrable() async {
@@ -579,6 +587,101 @@
           await sendReceive([notAllocatableInTLAB, smallContainer]));
     }
   }
+
+  Future testWeakProperty() async {
+    final key = Object();
+    final expando1 = Expando();
+    final expando2 = Expando();
+    final expando3 = Expando();
+    final expando4 = Expando();
+    expando1[key] = expando2;
+    expando2[expando2] = expando3;
+    expando3[expando3] = expando4;
+    expando4[expando4] = {'foo': 'bar'};
+
+    {
+      final result = await sendReceive([
+        key,
+        expando1,
+      ]);
+      final keyCopy = result[0];
+      final expando1Copy = result[1] as Expando;
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        expando1,
+        key,
+      ]);
+      final expando1Copy = result[0] as Expando;
+      final keyCopy = result[1];
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        expando1,
+        notAllocatableInTLAB,
+        key,
+      ]);
+      final expando1Copy = result[0] as Expando;
+      final keyCopy = result[2];
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+    {
+      final result = await sendReceive([
+        key,
+        notAllocatableInTLAB,
+        expando1,
+      ]);
+      final keyCopy = result[0];
+      final expando1Copy = result[2] as Expando;
+      final expando2Copy = expando1Copy[keyCopy] as Expando;
+      final expando3Copy = expando2Copy[expando2Copy] as Expando;
+      final expando4Copy = expando3Copy[expando3Copy] as Expando;
+      Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']);
+    }
+  }
+
+  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));
+    }
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(() => sendPort.send([closure]));
+    }
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(
+          () => sendPort.send([notAllocatableInTLAB, closure]));
+    }
+  }
 }
 
 main() async {
diff --git a/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart
deleted file mode 100644
index 946cbf9..0000000
--- a/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart
+++ /dev/null
@@ -1,25 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  // We don't run this test in our artificial hot reload mode, because it would
-  // create too many threads during the reload (one per isolate), which can
-  // cause this test or other concurrently executing tests to Crash due to
-  // unability of `pthread_create` to create a new thread.
-  if (isArtificialReloadMode) return;
-
-  final rp = ReceivePort();
-  final int n = 18;
-  await spawnInDetachedGroup(fibonacciRecursive, [rp.sendPort, n]);
-  Expect.equals(4181, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/fibonacci_call_test.dart b/runtime/tests/vm/dart_2/isolates/fibonacci_call_test.dart
index daf66e0..7a097a2 100644
--- a/runtime/tests/vm/dart_2/isolates/fibonacci_call_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/fibonacci_call_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:isolate';
diff --git a/runtime/tests/vm/dart_2/isolates/internal.dart b/runtime/tests/vm/dart_2/isolates/internal.dart
index 961f23f..1742a43 100644
--- a/runtime/tests/vm/dart_2/isolates/internal.dart
+++ b/runtime/tests/vm/dart_2/isolates/internal.dart
@@ -2,84 +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.
 
+// @dart = 2.9
+
 import 'dart:io';
 import 'dart:isolate';
 import 'dart:async';
 import 'dart:_internal' as dart_internal;
 
-/// Similar to `Isolate.spawn<T>()` but supports `newIsolateGroup`.
-Future<Isolate> internalSpawn<T>(void entryPoint(T message), T message,
-    {SendPort onExit,
-    SendPort onError,
-    bool newIsolateGroup,
-    String debugName}) async {
-  newIsolateGroup ??= false;
-  final packageConfig = null;
-  final paused = false;
-  final bool errorsAreFatal = null;
-  final readyPort = new RawReceivePort();
-  try {
-    dart_internal.spawnFunction(
-        readyPort.sendPort,
-        Platform.script.toString(),
-        entryPoint,
-        message,
-        paused,
-        errorsAreFatal,
-        onExit,
-        onError,
-        packageConfig,
-        newIsolateGroup,
-        debugName);
-    return await _spawnCommon(readyPort);
-  } catch (e, st) {
-    readyPort.close();
-    return await new Future<Isolate>.error(e, st);
-  }
-}
-
-/// A copy of `dart:isolate`s internal `Isolate._spawnCommon()`.
-Future<Isolate> _spawnCommon(RawReceivePort readyPort) {
-  final completer = new Completer<Isolate>.sync();
-  readyPort.handler = (readyMessage) {
-    readyPort.close();
-    if (readyMessage is List && readyMessage.length == 2) {
-      SendPort controlPort = readyMessage[0];
-      List capabilities = readyMessage[1];
-      completer.complete(new Isolate(controlPort,
-          pauseCapability: capabilities[0],
-          terminateCapability: capabilities[1]));
-    } else if (readyMessage is String) {
-      // We encountered an error while starting the new isolate.
-      completer.completeError(new IsolateSpawnException(
-          'Unable to spawn isolate: ${readyMessage}'));
-    } else {
-      // This shouldn't happen.
-      completer.completeError(new IsolateSpawnException(
-          "Internal error: unexpected format for ready message: "
-          "'${readyMessage}'"));
-    }
-  };
-  return completer.future;
-}
-
-/// Spawns the [staticClosure] in a detached isolate group.
-Future<Isolate> spawnInDetachedGroup<T>(
-    void staticClosure(T message), T message,
-    {SendPort onExit, SendPort onError}) async {
-  _IG0([staticClosure, message]);
-}
-
-// This is the isolate group of "main". We spawn another one.
-_IG0(args) => internalSpawn(_IG1, args, newIsolateGroup: true);
-
-// This is an intermediate isolate group. The actual code we run in a new IG and
-// this one will die.
-_IG1(args) => internalSpawn(_IG2, args, newIsolateGroup: true);
-
-// Run the actual code
-_IG2(args) => args[0](args[1]);
-
 extension SendPortSendAndExit on SendPort {
   void sendAndExit(var message) {
     dart_internal.sendAndExit(this, message);
diff --git a/runtime/tests/vm/dart_2/isolates/limited_active_mutator_test.dart b/runtime/tests/vm/dart_2/isolates/limited_active_mutator_test.dart
index f56e9ee..a99e4ee 100644
--- a/runtime/tests/vm/dart_2/isolates/limited_active_mutator_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/limited_active_mutator_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification --disable-thread-pool-limit
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/isolates/long_regexp_process_oob_messages_test.dart b/runtime/tests/vm/dart_2/isolates/long_regexp_process_oob_messages_test.dart
new file mode 100644
index 0000000..404b978
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/long_regexp_process_oob_messages_test.dart
@@ -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.
+
+import 'dart:isolate';
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+worker(SendPort sendPort) {
+  final re = RegExp(r'(x+)*y');
+  final s = 'x' * 100 + '';
+  sendPort.send('worker started');
+  print(re.allMatches(s).iterator.moveNext());
+}
+
+main() async {
+  asyncStart();
+  ReceivePort onExit = ReceivePort();
+  ReceivePort workerStarted = ReceivePort();
+  final isolate = await Isolate.spawn(worker, workerStarted.sendPort,
+      onExit: onExit.sendPort, errorsAreFatal: true);
+  await workerStarted.first;
+  print('worker started, now killing worker');
+  isolate.kill(priority: Isolate.immediate);
+  await onExit.first;
+  print('worker exited');
+  asyncEnd();
+}
diff --git a/runtime/tests/vm/dart_2/isolates/regress_46539_test.dart b/runtime/tests/vm/dart_2/isolates/regress_46539_test.dart
index 0814f0d..0f16901 100644
--- a/runtime/tests/vm/dart_2/isolates/regress_46539_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/regress_46539_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization-filter=foo --enable-isolate-groups --no-use-osr --optimization-counter-threshold=1 --deterministic
 
 // Important: This is a regression test for a concurrency issue, if this test
diff --git a/runtime/tests/vm/dart_2/isolates/reload_active_stack_test.dart b/runtime/tests/vm/dart_2/isolates/reload_active_stack_test.dart
index 615941f..9e546f8 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_active_stack_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_active_stack_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'reload_utils.dart';
diff --git a/runtime/tests/vm/dart_2/isolates/reload_many_isolates_live_and_die_test.dart b/runtime/tests/vm/dart_2/isolates/reload_many_isolates_live_and_die_test.dart
index 7cfcbf6..7a0f2e6 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_many_isolates_live_and_die_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_many_isolates_live_and_die_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/isolates/reload_many_isolates_test.dart b/runtime/tests/vm/dart_2/isolates/reload_many_isolates_test.dart
index 70ff30c..2e85608 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_many_isolates_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_many_isolates_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'reload_utils.dart';
diff --git a/runtime/tests/vm/dart_2/isolates/reload_no_active_stack_test.dart b/runtime/tests/vm/dart_2/isolates/reload_no_active_stack_test.dart
index a681d0a..28e4fce 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_no_active_stack_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_no_active_stack_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'reload_utils.dart';
diff --git a/runtime/tests/vm/dart_2/isolates/reload_utils.dart b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
index 4a664b7..f9ba12f 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_utils.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 import 'dart:convert';
diff --git a/runtime/tests/vm/dart_2/isolates/ring_gc_sendAndExit_test.dart b/runtime/tests/vm/dart_2/isolates/ring_gc_sendAndExit_test.dart
index 74b6820..56b636c 100644
--- a/runtime/tests/vm/dart_2/isolates/ring_gc_sendAndExit_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/ring_gc_sendAndExit_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:math' as math;
diff --git a/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart b/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart
index c27cd6c..908d1a3 100644
--- a/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/ring_gc_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart b/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart
index f2a85ea..4474a3f 100644
--- a/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/spawn_function_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart
deleted file mode 100644
index 915c102..0000000
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart
+++ /dev/null
@@ -1,19 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursive, [rp.sendPort, count]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_test.dart
index 89bcc58..0aba961 100644
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:isolate';
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart
deleted file mode 100644
index a3fb967..0000000
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart
+++ /dev/null
@@ -1,19 +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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursiveTailCall, [rp.sendPort, count, 0]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_test.dart
index 866b8f3..85b6f0e 100644
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:isolate';
diff --git a/runtime/tests/vm/dart_2/isolates/test_utils.dart b/runtime/tests/vm/dart_2/isolates/test_utils.dart
index fdf47d7..0c93f3d 100644
--- a/runtime/tests/vm/dart_2/isolates/test_utils.dart
+++ b/runtime/tests/vm/dart_2/isolates/test_utils.dart
@@ -2,12 +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:async';
 import 'dart:io';
 import 'dart:isolate';
 
 import 'internal.dart';
 
+export '../../../../../benchmarks/IsolateFibonacci/dart2/IsolateFibonacci.dart'
+  show fibonacciRecursive;
+
 final bool isDebugMode = Platform.script.path.contains('Debug');
 final bool isSimulator = Platform.script.path.contains('SIM');
 final bool isArtificialReloadMode = Platform.executableArguments.any((arg) => [
@@ -44,26 +49,6 @@
   }
 }
 
-// Implements recursive summation via tail calls:
-//   fib(n) => n <= 1 ? 1
-//                    : fib(n-1) + fib(n-2);
-Future fibonacciRecursive(List args) async {
-  final SendPort port = args[0];
-  final n = args[1];
-  if (n <= 1) {
-    port.send(1);
-    return;
-  }
-  final left = ReceivePort();
-  final right = ReceivePort();
-  await Future.wait([
-    Isolate.spawn(fibonacciRecursive, [left.sendPort, n - 1]),
-    Isolate.spawn(fibonacciRecursive, [right.sendPort, n - 2]),
-  ]);
-  final results = await Future.wait([left.first, right.first]);
-  port.send(results[0] + results[1]);
-}
-
 enum Command { kRun, kRunAndClose, kClose }
 
 abstract class RingElement {
diff --git a/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart b/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart
index 695fda2..f54a9ce 100644
--- a/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/thread_pool_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.
 
+// @dart = 2.9
+
 // SharedObjects=ffi_test_functions
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
diff --git a/runtime/tests/vm/dart_2/issue32950_test.dart b/runtime/tests/vm/dart_2/issue32950_test.dart
index 7e14a7f..b3f38fc 100644
--- a/runtime/tests/vm/dart_2/issue32950_test.dart
+++ b/runtime/tests/vm/dart_2/issue32950_test.dart
@@ -1,3 +1,5 @@
+
+// @dart = 2.9
 import 'dart:isolate';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/issue_31959_31960_test.dart b/runtime/tests/vm/dart_2/issue_31959_31960_test.dart
index d63a16f..9f79c7c 100644
--- a/runtime/tests/vm/dart_2/issue_31959_31960_test.dart
+++ b/runtime/tests/vm/dart_2/issue_31959_31960_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
diff --git a/runtime/tests/vm/dart_2/kernel_determinism_test.dart b/runtime/tests/vm/dart_2/kernel_determinism_test.dart
index ed3ab3d..061e37d 100644
--- a/runtime/tests/vm/dart_2/kernel_determinism_test.dart
+++ b/runtime/tests/vm/dart_2/kernel_determinism_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.
 
+// @dart = 2.9
+
 // Verify creating an incremental kernel file twice generates the same bits.
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/licm_and_assert_strengthening_test.dart b/runtime/tests/vm/dart_2/licm_and_assert_strengthening_test.dart
index a1c962e..a3c26bf 100644
--- a/runtime/tests/vm/dart_2/licm_and_assert_strengthening_test.dart
+++ b/runtime/tests/vm/dart_2/licm_and_assert_strengthening_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--optimization-counter-threshold=10 --no-background-compilation
 
+// @dart = 2.9
+
 // This test checks for obscure interaction between LICM and AssertAssignable
 // strengthening performed by Type Propagator. The later would use deopt_id
 // from an environment attached to AssertAssignable, and this deopt id under
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_script.dart b/runtime/tests/vm/dart_2/minimal_kernel_script.dart
index ea3070c..aadd0cf 100644
--- a/runtime/tests/vm/dart_2/minimal_kernel_script.dart
+++ b/runtime/tests/vm/dart_2/minimal_kernel_script.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.
 
+// @dart = 2.9
+
 import "dart:convert";
 
 main(List<String> args) {
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_test.dart b/runtime/tests/vm/dart_2/minimal_kernel_test.dart
index 0c7722c..aad41a9 100644
--- a/runtime/tests/vm/dart_2/minimal_kernel_test.dart
+++ b/runtime/tests/vm/dart_2/minimal_kernel_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.
 
+// @dart = 2.9
+
 // OtherResources=minimal_kernel_script.dart
 
 // Tests that dill file produced with --minimal-kernel option
diff --git a/runtime/tests/vm/dart_2/named_params_shaking_test.dart b/runtime/tests/vm/dart_2/named_params_shaking_test.dart
index b941651..8a7debf 100644
--- a/runtime/tests/vm/dart_2/named_params_shaking_test.dart
+++ b/runtime/tests/vm/dart_2/named_params_shaking_test.dart
@@ -4,6 +4,8 @@
 //
 // Test that optimization of named parameters doesn't change evaluation order.
 
+// @dart = 2.9
+
 import 'dart:math';
 import 'package:expect/expect.dart';
 
diff --git a/runtime/tests/vm/dart_2/non_smi_receiver_assert_assignable_test.dart b/runtime/tests/vm/dart_2/non_smi_receiver_assert_assignable_test.dart
index b6b5814..2f810d3 100644
--- a/runtime/tests/vm/dart_2/non_smi_receiver_assert_assignable_test.dart
+++ b/runtime/tests/vm/dart_2/non_smi_receiver_assert_assignable_test.dart
@@ -1,3 +1,5 @@
+
+// @dart = 2.9
 class A {}
 
 class B extends A {}
diff --git a/runtime/tests/vm/dart_2/null_checks_with_dwarf_stack_traces_test.dart b/runtime/tests/vm/dart_2/null_checks_with_dwarf_stack_traces_test.dart
index e8dfe76..0b20fb4 100644
--- a/runtime/tests/vm/dart_2/null_checks_with_dwarf_stack_traces_test.dart
+++ b/runtime/tests/vm/dart_2/null_checks_with_dwarf_stack_traces_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.
 
+// @dart = 2.9
+
 // VMOptions=--dwarf-stack-traces
 
 // This test verifies that null checks are handled correctly
diff --git a/runtime/tests/vm/dart_2/null_float32x4_simd_ops_test.dart b/runtime/tests/vm/dart_2/null_float32x4_simd_ops_test.dart
index d3fcc68..b01ca52 100644
--- a/runtime/tests/vm/dart_2/null_float32x4_simd_ops_test.dart
+++ b/runtime/tests/vm/dart_2/null_float32x4_simd_ops_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.
 
+// @dart = 2.9
+
 import "dart:math";
 import "dart:typed_data";
 
diff --git a/runtime/tests/vm/dart_2/null_float64x2_simd_ops_test.dart b/runtime/tests/vm/dart_2/null_float64x2_simd_ops_test.dart
index 35e06bbd..76814d3 100644
--- a/runtime/tests/vm/dart_2/null_float64x2_simd_ops_test.dart
+++ b/runtime/tests/vm/dart_2/null_float64x2_simd_ops_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.
 
+// @dart = 2.9
+
 import "dart:math";
 import "dart:typed_data";
 
diff --git a/runtime/tests/vm/dart_2/null_safety_autodetection_in_kernel_compiler_test.dart b/runtime/tests/vm/dart_2/null_safety_autodetection_in_kernel_compiler_test.dart
index 1c13f65..c22e750 100644
--- a/runtime/tests/vm/dart_2/null_safety_autodetection_in_kernel_compiler_test.dart
+++ b/runtime/tests/vm/dart_2/null_safety_autodetection_in_kernel_compiler_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.
 
+// @dart = 2.9
+
 // Tests auto-detection of null safety mode in gen_kernel tool.
 
 import 'dart:io' show File, Platform;
diff --git a/runtime/tests/vm/dart_2/optimized_stacktrace_line_and_column_test.dart b/runtime/tests/vm/dart_2/optimized_stacktrace_line_and_column_test.dart
index 83dd0f7..2653a63 100644
--- a/runtime/tests/vm/dart_2/optimized_stacktrace_line_and_column_test.dart
+++ b/runtime/tests/vm/dart_2/optimized_stacktrace_line_and_column_test.dart
@@ -1,14 +1,18 @@
 // 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.
+
+// @dart = 2.9
+
 // Test correct source positions in stack trace with optimized functions.
+
 import "package:expect/expect.dart";
 
 // (1) Test normal exception.
 foo(x) => bar(x);
 
 bar(x) {
-  if (x == null) throw 42; // throw at position 11:18
+  if (x == null) throw 42; // throw at position 15:18
   return x + 1;
 }
 
@@ -22,7 +26,7 @@
     print(s);
     Expect.isFalse(s.contains("-1:-1"), "A");
     RegExp regex = new RegExp(
-        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:11(:18)*");
+        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:15(:18)*");
     Expect.isTrue(regex.hasMatch(s), s);
   }
 
@@ -36,7 +40,7 @@
     print(s);
     Expect.isFalse(s.contains("-1:-1"), "C");
     RegExp regex = new RegExp(
-        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:11(:18)*");
+        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:15(:18)*");
     Expect.isTrue(regex.hasMatch(s), "D");
   }
 }
diff --git a/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart b/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
index 43e5fde..1b41645 100644
--- a/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
+++ b/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
@@ -1,14 +1,18 @@
 // 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.
+
+// @dart = 2.9
+
 // Test correct source positions in stack trace with optimized functions.
+
 import "package:expect/expect.dart";
 
 // (1) Test normal exception.
 foo(x) => bar(x);
 
 bar(x) {
-  if (x == null) throw 42; // throw at position 11:18
+  if (x == null) throw 42; // throw at position 15:18
   return x + 1;
 }
 
@@ -22,7 +26,7 @@
     print(s);
     Expect.isFalse(s.contains("-1:-1"), "A");
     RegExp regex =
-        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:11");
+        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:15");
     Expect.isTrue(regex.hasMatch(s), "B");
   }
 
@@ -36,7 +40,7 @@
     print(s);
     Expect.isFalse(s.contains("-1:-1"), "C");
     RegExp regex =
-        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:11");
+        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:15");
     Expect.isTrue(regex.hasMatch(s), "D");
   }
 }
diff --git a/runtime/tests/vm/dart_2/print_flow_graph_determinism_test.dart b/runtime/tests/vm/dart_2/print_flow_graph_determinism_test.dart
index 7b2eae5..3960636 100644
--- a/runtime/tests/vm/dart_2/print_flow_graph_determinism_test.dart
+++ b/runtime/tests/vm/dart_2/print_flow_graph_determinism_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.
 
+// @dart = 2.9
+
 // Verify running with --print-flow-graph produces deterministic output. This is
 // useful for removing noise when tracking down the effects of compiler changes.
 
diff --git a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
index 5372d3d..7632067 100644
--- a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
+++ b/runtime/tests/vm/dart_2/product_aot_kernel_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.
 
+// @dart = 2.9
+
 // This test ensures that certain core libraries are "empty" in product mode (thereby
 // ensuring the right conditional pragma annotations were used).
 
diff --git a/runtime/tests/vm/dart_2/random_walk_fuzzer.dart b/runtime/tests/vm/dart_2/random_walk_fuzzer.dart
index 60a5765..e077692 100644
--- a/runtime/tests/vm/dart_2/random_walk_fuzzer.dart
+++ b/runtime/tests/vm/dart_2/random_walk_fuzzer.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.
 
+// @dart = 2.9
+
 // Random-walk fuzzer for the Dart VM.
 //
 // Start with all the classes and libraries and various interesting values.
diff --git a/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart b/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart
index 0567a24..7df8ad7 100644
--- a/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart
+++ b/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart
@@ -2,19 +2,21 @@
 // for 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:mirrors";
 import "package:expect/expect.dart";
 
 class G<A extends int, B extends String> {
   G();
-  factory G.swap() = G<B,A>;  //# 00: compile-time error
-  factory G.retain() = G<A,B>;
+  factory G.swap() = G<B, A>; //# 00: compile-time error
+  factory G.retain() = G<A, B>;
 }
 
 main() {
   ClassMirror cm = reflect(new G<int, String>()).type;
 
-  Expect.isTrue(cm.newInstance(#retain, []).reflectee is G<int,String>);
+  Expect.isTrue(cm.newInstance(#retain, []).reflectee is G<int, String>);
 
-  Expect.isTrue(cm.newInstance(#swap, []).reflectee is G<String,int>);  //# 00: dynamic type error
+  Expect.isTrue(cm.newInstance(#swap, []).reflectee is G<String, int>); //# 00: continued
 }
diff --git a/runtime/tests/vm/dart_2/regress29620_test.dart b/runtime/tests/vm/dart_2/regress29620_test.dart
index b41f3b7..164734d 100644
--- a/runtime/tests/vm/dart_2/regress29620_test.dart
+++ b/runtime/tests/vm/dart_2/regress29620_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/29620: check that decision to deoptimize
 // and decisions which parts of the instruction to emit use the same
 // range information for instruction inputs.
diff --git a/runtime/tests/vm/dart_2/regress29846_test.dart b/runtime/tests/vm/dart_2/regress29846_test.dart
index 9657e9a..f11427b 100644
--- a/runtime/tests/vm/dart_2/regress29846_test.dart
+++ b/runtime/tests/vm/dart_2/regress29846_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/29846: check that range-based
 // CheckClassId is generated correctly.
 
diff --git a/runtime/tests/vm/dart_2/regress30853_test.dart b/runtime/tests/vm/dart_2/regress30853_test.dart
index a514edf..62da3c3 100644
--- a/runtime/tests/vm/dart_2/regress30853_test.dart
+++ b/runtime/tests/vm/dart_2/regress30853_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/30853: check that we assign correct range
 // to Uint32 operations when creating them from Int64 operations.
 
diff --git a/runtime/tests/vm/dart_2/regress32508_test.dart b/runtime/tests/vm/dart_2/regress32508_test.dart
index 37319c2..bda7613 100644
--- a/runtime/tests/vm/dart_2/regress32508_test.dart
+++ b/runtime/tests/vm/dart_2/regress32508_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/32508: check that type test which takes
 // a value of a guarded _Closure field is performed correctly.
 
diff --git a/runtime/tests/vm/dart_2/regress32597_2_test.dart b/runtime/tests/vm/dart_2/regress32597_2_test.dart
index 9081470..d8e3f27 100644
--- a/runtime/tests/vm/dart_2/regress32597_2_test.dart
+++ b/runtime/tests/vm/dart_2/regress32597_2_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/32597: incorrect type was assigned to phi
 // in strong mode.
 
diff --git a/runtime/tests/vm/dart_2/regress32597_test.dart b/runtime/tests/vm/dart_2/regress32597_test.dart
index 969af09..eabf7f6 100644
--- a/runtime/tests/vm/dart_2/regress32597_test.dart
+++ b/runtime/tests/vm/dart_2/regress32597_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/32597: incorrect type was assigned to phi
 // in strong mode.
 
diff --git a/runtime/tests/vm/dart_2/regress32619_test.dart b/runtime/tests/vm/dart_2/regress32619_test.dart
index 3659926..fe1897a 100644
--- a/runtime/tests/vm/dart_2/regress32619_test.dart
+++ b/runtime/tests/vm/dart_2/regress32619_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/32619: incorrect widening of smis to int32.
 
 // VMOptions=--optimization-counter-threshold=5 --no-background-compilation
diff --git a/runtime/tests/vm/dart_2/regress36953_test.dart b/runtime/tests/vm/dart_2/regress36953_test.dart
index 617049b..91a8bd7 100644
--- a/runtime/tests/vm/dart_2/regress36953_test.dart
+++ b/runtime/tests/vm/dart_2/regress36953_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/36953: check that phi is inserted correctly
 // when try block has no normal exit.
 
diff --git a/runtime/tests/vm/dart_2/regress38467_test.dart b/runtime/tests/vm/dart_2/regress38467_test.dart
index 5bf5086..4b31f7a 100644
--- a/runtime/tests/vm/dart_2/regress38467_test.dart
+++ b/runtime/tests/vm/dart_2/regress38467_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/38467: check that we don't consider
 // list[const] to be an access via constant index when list is (potentially)
 // a view.
diff --git a/runtime/tests/vm/dart_2/regress38654_test.dart b/runtime/tests/vm/dart_2/regress38654_test.dart
index 4aed202..ad5b1da 100644
--- a/runtime/tests/vm/dart_2/regress38654_test.dart
+++ b/runtime/tests/vm/dart_2/regress38654_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.
 
+// @dart = 2.9
+
 // See https://github.com/dart-lang/sdk/issues/38654 for context.
 
 // The Dart Project Fuzz Tester (1.53).
diff --git a/runtime/tests/vm/dart_2/regress38965_test.dart b/runtime/tests/vm/dart_2/regress38965_test.dart
index ef9f4fd..53ccdc1 100644
--- a/runtime/tests/vm/dart_2/regress38965_test.dart
+++ b/runtime/tests/vm/dart_2/regress38965_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.
 
+// @dart = 2.9
+
 // Regression test for dartbug.com/38965.
 
 int a = -1;
diff --git a/runtime/tests/vm/dart_2/regress38979_test.dart b/runtime/tests/vm/dart_2/regress38979_test.dart
index b128249..f962598 100644
--- a/runtime/tests/vm/dart_2/regress38979_test.dart
+++ b/runtime/tests/vm/dart_2/regress38979_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.
 
+// @dart = 2.9
+
 // Verifies that compiler doesn't crash on a particular piece of code.
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/regress40189_test.dart b/runtime/tests/vm/dart_2/regress40189_test.dart
index f857e5b..cbc9f45 100644
--- a/runtime/tests/vm/dart_2/regress40189_test.dart
+++ b/runtime/tests/vm/dart_2/regress40189_test.dart
@@ -4,6 +4,8 @@
 //
 // VMOptions=--lazy-async-stacks
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 import 'dart:collection';
diff --git a/runtime/tests/vm/dart_2/regress43666_test.dart b/runtime/tests/vm/dart_2/regress43666_test.dart
index 49bb218..8c3fa95 100644
--- a/runtime/tests/vm/dart_2/regress43666_test.dart
+++ b/runtime/tests/vm/dart_2/regress43666_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class Foo {
diff --git a/runtime/tests/vm/dart_2/regress45047_test.dart b/runtime/tests/vm/dart_2/regress45047_test.dart
index 4d2f083..18baa81 100644
--- a/runtime/tests/vm/dart_2/regress45047_test.dart
+++ b/runtime/tests/vm/dart_2/regress45047_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.
 
+// @dart = 2.9
+
 // Verify that socket connection gracefully closes if cancelled.
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/regress_33999_test.dart b/runtime/tests/vm/dart_2/regress_33999_test.dart
index e7e9e89..22f272d 100644
--- a/runtime/tests/vm/dart_2/regress_33999_test.dart
+++ b/runtime/tests/vm/dart_2/regress_33999_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.
 
+// @dart = 2.9
+
 // Test checking that canonicalization rules for AssertAssignable IL
 // instructions take into account that these instructions can be
 // on unreachable code paths.
diff --git a/runtime/tests/vm/dart_2/regress_34755_test.dart b/runtime/tests/vm/dart_2/regress_34755_test.dart
index c13cfcf..f7367c5 100644
--- a/runtime/tests/vm/dart_2/regress_34755_test.dart
+++ b/runtime/tests/vm/dart_2/regress_34755_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.
 
+// @dart = 2.9
+
 // Test checking that null is handled correctly at the call-sites that
 // are tracking static type exactness.
 
diff --git a/runtime/tests/vm/dart_2/regress_35481_test.dart b/runtime/tests/vm/dart_2/regress_35481_test.dart
index 21fd2ed..580b43d 100644
--- a/runtime/tests/vm/dart_2/regress_35481_test.dart
+++ b/runtime/tests/vm/dart_2/regress_35481_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.
 
+// @dart = 2.9
+
 // Test checking that inlines replacing binding instructions with non-binding
 // instructions do not cause the compiler to crash due to not appropriately
 // replacing uses of the original binding instruction.
diff --git a/runtime/tests/vm/dart_2/regress_35887_test.dart b/runtime/tests/vm/dart_2/regress_35887_test.dart
index b0018fb..35f84d8 100644
--- a/runtime/tests/vm/dart_2/regress_35887_test.dart
+++ b/runtime/tests/vm/dart_2/regress_35887_test.dart
@@ -10,6 +10,8 @@
 //
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class Value {
diff --git a/runtime/tests/vm/dart_2/regress_36374_test.dart b/runtime/tests/vm/dart_2/regress_36374_test.dart
index 45df0f1..4076a2e 100644
--- a/runtime/tests/vm/dart_2/regress_36374_test.dart
+++ b/runtime/tests/vm/dart_2/regress_36374_test.dart
@@ -10,6 +10,8 @@
 //
 // VMOptions=--optimization_counter_threshold=10 --deterministic
 
+// @dart = 2.9
+
 class Foo {
   Foo(int x);
 }
diff --git a/runtime/tests/vm/dart_2/regress_36590_test.dart b/runtime/tests/vm/dart_2/regress_36590_test.dart
index 645c45b..f3f85b4 100644
--- a/runtime/tests/vm/dart_2/regress_36590_test.dart
+++ b/runtime/tests/vm/dart_2/regress_36590_test.dart
@@ -11,6 +11,8 @@
 //
 // VMOptions=--deterministic
 
+// @dart = 2.9
+
 var var6 = [1, 2, 3];
 
 void bar() {}
diff --git a/runtime/tests/vm/dart_2/regress_36636_test.dart b/runtime/tests/vm/dart_2/regress_36636_test.dart
index 1daf616..1c41d17 100644
--- a/runtime/tests/vm/dart_2/regress_36636_test.dart
+++ b/runtime/tests/vm/dart_2/regress_36636_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.
 
+// @dart = 2.9
+
 // VMOptions=--intrinsify=false --no-use-vfp
 
 main() {}
diff --git a/runtime/tests/vm/dart_2/regress_37382_test.dart b/runtime/tests/vm/dart_2/regress_37382_test.dart
index 0a25345..7b90a0d 100644
--- a/runtime/tests/vm/dart_2/regress_37382_test.dart
+++ b/runtime/tests/vm/dart_2/regress_37382_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 void expectType(Type type, Pattern text) {
diff --git a/runtime/tests/vm/dart_2/regress_38182_test.dart b/runtime/tests/vm/dart_2/regress_38182_test.dart
index 952bee4..d8ab807 100644
--- a/runtime/tests/vm/dart_2/regress_38182_test.dart
+++ b/runtime/tests/vm/dart_2/regress_38182_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.
 
+// @dart = 2.9
+
 // VMOptions=--stacktrace_every=1 --deterministic
 
 void foo1(par) {
diff --git a/runtime/tests/vm/dart_2/regress_38700_test.dart b/runtime/tests/vm/dart_2/regress_38700_test.dart
index cc6c0ee..7e8ea59 100644
--- a/runtime/tests/vm/dart_2/regress_38700_test.dart
+++ b/runtime/tests/vm/dart_2/regress_38700_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 Map<String, num> map = {'a': 1};
diff --git a/runtime/tests/vm/dart_2/regress_38743_test.dart b/runtime/tests/vm/dart_2/regress_38743_test.dart
index f10dd93..9ea4f76 100644
--- a/runtime/tests/vm/dart_2/regress_38743_test.dart
+++ b/runtime/tests/vm/dart_2/regress_38743_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.
 
+// @dart = 2.9
+
 // VMOptions=--stacktrace_every=1 --deterministic --optimization-counter-threshold=6 --optimization-filter=baz
 
 // Regression test for https://github.com/dart-lang/sdk/issues/38743.
diff --git a/runtime/tests/vm/dart_2/regress_39152_test.dart b/runtime/tests/vm/dart_2/regress_39152_test.dart
index 343df24..7e32ff7 100644
--- a/runtime/tests/vm/dart_2/regress_39152_test.dart
+++ b/runtime/tests/vm/dart_2/regress_39152_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/39152.
 // Verifies that unused object allocation doesn't cause crashes
 // during SSA construction in AOT.
diff --git a/runtime/tests/vm/dart_2/regress_39168_part1.dart b/runtime/tests/vm/dart_2/regress_39168_part1.dart
index 9f40bf1..2cff841 100644
--- a/runtime/tests/vm/dart_2/regress_39168_part1.dart
+++ b/runtime/tests/vm/dart_2/regress_39168_part1.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.
 
+// @dart = 2.9
+
 part of regress_39168;
 
 // This class is not used and tree-shaken.
diff --git a/runtime/tests/vm/dart_2/regress_39168_part2.dart b/runtime/tests/vm/dart_2/regress_39168_part2.dart
index 787f700..cff99ff 100644
--- a/runtime/tests/vm/dart_2/regress_39168_part2.dart
+++ b/runtime/tests/vm/dart_2/regress_39168_part2.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.
 
+// @dart = 2.9
+
 part of regress_39168;
 
 class B {}
diff --git a/runtime/tests/vm/dart_2/regress_39168_test.dart b/runtime/tests/vm/dart_2/regress_39168_test.dart
index cf24d83..da45d6a 100644
--- a/runtime/tests/vm/dart_2/regress_39168_test.dart
+++ b/runtime/tests/vm/dart_2/regress_39168_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/39168.
 // Verifies that AOT compiler can handle synthetic code without line numbers
 // (mixin application in regress_39168_part1.dart).
diff --git a/runtime/tests/vm/dart_2/regress_39520_test.dart b/runtime/tests/vm/dart_2/regress_39520_test.dart
index caf65ee..eb3b5d9 100644
--- a/runtime/tests/vm/dart_2/regress_39520_test.dart
+++ b/runtime/tests/vm/dart_2/regress_39520_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=1 --deterministic
 
 // Regression test for https://github.com/dart-lang/sdk/issues/39520.
diff --git a/runtime/tests/vm/dart_2/regress_39811_test.dart b/runtime/tests/vm/dart_2/regress_39811_test.dart
index 7fdc005..e7fbe84 100644
--- a/runtime/tests/vm/dart_2/regress_39811_test.dart
+++ b/runtime/tests/vm/dart_2/regress_39811_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.
 
+// @dart = 2.9
+
 // VMOptions=--use-slow-path
 
 import 'dart:math';
diff --git a/runtime/tests/vm/dart_2/regress_39905_test.dart b/runtime/tests/vm/dart_2/regress_39905_test.dart
index 42a4531..1bbb7a8 100644
--- a/runtime/tests/vm/dart_2/regress_39905_test.dart
+++ b/runtime/tests/vm/dart_2/regress_39905_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --deterministic
 
 // Regression test for https://github.com/dart-lang/sdk/issues/39905.
diff --git a/runtime/tests/vm/dart_2/regress_40462_test.dart b/runtime/tests/vm/dart_2/regress_40462_test.dart
index d4e9122..e3b7916 100644
--- a/runtime/tests/vm/dart_2/regress_40462_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40462_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/40462
 // VMOptions=--deoptimize_every=140 --optimization_level=3 --use-slow-path --old_gen_heap_size=128
 
diff --git a/runtime/tests/vm/dart_2/regress_40635_test.dart b/runtime/tests/vm/dart_2/regress_40635_test.dart
index eeb643f..64864fe 100644
--- a/runtime/tests/vm/dart_2/regress_40635_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40635_test.dart
@@ -9,6 +9,8 @@
 //
 // VMOptions=--dedup-instructions
 
+// @dart = 2.9
+
 import 'hello_world_test.dart' as other;
 
 main() => other.main();
diff --git a/runtime/tests/vm/dart_2/regress_40710_test.dart b/runtime/tests/vm/dart_2/regress_40710_test.dart
index 162cbae..69ea072 100644
--- a/runtime/tests/vm/dart_2/regress_40710_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40710_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --deterministic
 
 // Regression test for https://dartbug.com/40710.
diff --git a/runtime/tests/vm/dart_2/regress_40753_test.dart b/runtime/tests/vm/dart_2/regress_40753_test.dart
index f257d3e..cce55d8 100644
--- a/runtime/tests/vm/dart_2/regress_40753_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40753_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization-filter=var50 --deoptimize-every=1
 
 final var50 = Expando<int>('expando');
diff --git a/runtime/tests/vm/dart_2/regress_40754_test.dart b/runtime/tests/vm/dart_2/regress_40754_test.dart
index a532eb2..281eb98 100644
--- a/runtime/tests/vm/dart_2/regress_40754_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40754_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --optimization_counter_threshold=1
 
 // A phi can have Smi type but non-Smi bounds if it is dominated by a smi check
diff --git a/runtime/tests/vm/dart_2/regress_40809_test.dart b/runtime/tests/vm/dart_2/regress_40809_test.dart
index 49bb8cf..c92dee8 100644
--- a/runtime/tests/vm/dart_2/regress_40809_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40809_test.dart
@@ -5,6 +5,8 @@
 // Test that ensure that we correctly handle this reference from within the
 // try/catch even if it is captured.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 var f;
diff --git a/runtime/tests/vm/dart_2/regress_40964_test.dart b/runtime/tests/vm/dart_2/regress_40964_test.dart
index df3a4d7..4620d16 100644
--- a/runtime/tests/vm/dart_2/regress_40964_test.dart
+++ b/runtime/tests/vm/dart_2/regress_40964_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.
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 class A<T> {
diff --git a/runtime/tests/vm/dart_2/regress_41971_test.dart b/runtime/tests/vm/dart_2/regress_41971_test.dart
index 59212ad..39b7082 100644
--- a/runtime/tests/vm/dart_2/regress_41971_test.dart
+++ b/runtime/tests/vm/dart_2/regress_41971_test.dart
@@ -6,6 +6,8 @@
 // representation requirements for uses of a definition that is being
 // folded away.
 
+// @dart = 2.9
+
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/regress_42065_test.dart b/runtime/tests/vm/dart_2/regress_42065_test.dart
index 28079af..c43a5b5 100644
--- a/runtime/tests/vm/dart_2/regress_42065_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42065_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.
 
+// @dart = 2.9
+
 // Verifies that compiler doesn't crash while inlining recognized method
 // when receiver is a dead code.
 // Regression test for https://github.com/dart-lang/sdk/issues/42065.
diff --git a/runtime/tests/vm/dart_2/regress_42067_test.dart b/runtime/tests/vm/dart_2/regress_42067_test.dart
index 21f87c8..68efaef 100644
--- a/runtime/tests/vm/dart_2/regress_42067_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42067_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --optimization_counter_threshold=100
 
 // Verifies correct code is generated for Float64x2.fromFloat32x4 in case of
diff --git a/runtime/tests/vm/dart_2/regress_42202_test.dart b/runtime/tests/vm/dart_2/regress_42202_test.dart
index 0c75e00..e42a244 100644
--- a/runtime/tests/vm/dart_2/regress_42202_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42202_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.
 
+// @dart = 2.9
+
 // Verifies that AOT compiler doesn't crash when handling a polymorphic call to
 // operator== when receiver is a dead code (result of inlined call of a method
 // which doesn't return).
diff --git a/runtime/tests/vm/dart_2/regress_42418_1_test.dart b/runtime/tests/vm/dart_2/regress_42418_1_test.dart
index 65d7485..12a441c 100644
--- a/runtime/tests/vm/dart_2/regress_42418_1_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42418_1_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.
 
+// @dart = 2.9
+
 import 'dart:math';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/regress_42418_2_test.dart b/runtime/tests/vm/dart_2/regress_42418_2_test.dart
index 824ac78..69cb99a 100644
--- a/runtime/tests/vm/dart_2/regress_42418_2_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42418_2_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.
 
+// @dart = 2.9
+
 import 'dart:math';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/regress_42799_test.dart b/runtime/tests/vm/dart_2/regress_42799_test.dart
index c091da7..d3c973ee 100644
--- a/runtime/tests/vm/dart_2/regress_42799_test.dart
+++ b/runtime/tests/vm/dart_2/regress_42799_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.
 
+// @dart = 2.9
+
 // Verifies that AOT compiler doesn't crash when constant folding 'is'
 // test for a value which is a result of unreachable code
 // (result of inlined call of a method which doesn't return).
diff --git a/runtime/tests/vm/dart_2/regress_43464_test.dart b/runtime/tests/vm/dart_2/regress_43464_test.dart
index 43a3c113..295391e 100644
--- a/runtime/tests/vm/dart_2/regress_43464_test.dart
+++ b/runtime/tests/vm/dart_2/regress_43464_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class A {}
diff --git a/runtime/tests/vm/dart_2/regress_43679_test.dart b/runtime/tests/vm/dart_2/regress_43679_test.dart
index 9738391..02fe280 100644
--- a/runtime/tests/vm/dart_2/regress_43679_test.dart
+++ b/runtime/tests/vm/dart_2/regress_43679_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --optimization_counter_threshold=80
 
 // Verifies that JIT compiler doesn't crash when typed data allocation is
diff --git a/runtime/tests/vm/dart_2/regress_43682_test.dart b/runtime/tests/vm/dart_2/regress_43682_test.dart
index 15924b1..a0c3c1a 100644
--- a/runtime/tests/vm/dart_2/regress_43682_test.dart
+++ b/runtime/tests/vm/dart_2/regress_43682_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --optimization_counter_threshold=20
 
 // Verifies that SSA construction doesn't crash when handling a Phi
diff --git a/runtime/tests/vm/dart_2/regress_44342_test.dart b/runtime/tests/vm/dart_2/regress_44342_test.dart
index 98514fc..7aad000 100644
--- a/runtime/tests/vm/dart_2/regress_44342_test.dart
+++ b/runtime/tests/vm/dart_2/regress_44342_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic --optimization_counter_threshold=100
 
 // Verifies that class of a constant participates in CHA decisions.
diff --git a/runtime/tests/vm/dart_2/regress_44563_test.dart b/runtime/tests/vm/dart_2/regress_44563_test.dart
index 6b1baa6..357bed6 100644
--- a/runtime/tests/vm/dart_2/regress_44563_test.dart
+++ b/runtime/tests/vm/dart_2/regress_44563_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.
 
+// @dart = 2.9
+
 // Verifies that unboxing info is attached to a member with unreachable body,
 // which is still used as an interface target.
 // Regression test for https://github.com/dart-lang/sdk/issues/44563.
diff --git a/runtime/tests/vm/dart_2/regress_45014_test.dart b/runtime/tests/vm/dart_2/regress_45014_test.dart
index 31ccddc..ee1bc96 100644
--- a/runtime/tests/vm/dart_2/regress_45014_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45014_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.
 
+// @dart = 2.9
+
 main() {
   neverForInExpressionType();        //# 01: runtime error
 }
diff --git a/runtime/tests/vm/dart_2/regress_45207_test.dart b/runtime/tests/vm/dart_2/regress_45207_test.dart
index 9f01648..a61b433 100644
--- a/runtime/tests/vm/dart_2/regress_45207_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45207_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.
 
+// @dart = 2.9
+
 // VMOptions=--deterministic  --optimization-counter-threshold=100 --deoptimize-on-runtime-call-name-filter=TypeCheck --deoptimize-on-runtime-call-every=1 --max-subtype-cache-entries=0
 
 main() {
diff --git a/runtime/tests/vm/dart_2/regress_45306_test.dart b/runtime/tests/vm/dart_2/regress_45306_test.dart
index 36af440..140d2de 100644
--- a/runtime/tests/vm/dart_2/regress_45306_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45306_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/45306.
 // Verifies that ScopeBuilder doesn't crash on an async closure inside
 // instance field initializer.
diff --git a/runtime/tests/vm/dart_2/regress_45631_test.dart b/runtime/tests/vm/dart_2/regress_45631_test.dart
index b6166cd..73862b3 100644
--- a/runtime/tests/vm/dart_2/regress_45631_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45631_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/45631.
 // Verifies that compiler doesn't reuse the same Slot for captured local
 // variables with the same name and offset.
diff --git a/runtime/tests/vm/dart_2/regress_45898_test.dart b/runtime/tests/vm/dart_2/regress_45898_test.dart
index fef076b..7de2387 100644
--- a/runtime/tests/vm/dart_2/regress_45898_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45898_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/regress_45966_test.dart b/runtime/tests/vm/dart_2/regress_45966_test.dart
index 402d07c..40a5d08 100644
--- a/runtime/tests/vm/dart_2/regress_45966_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45966_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/45966.
 // Verifies that compiler doesn't crash if Typedef is only used from
 // function type of a call.
diff --git a/runtime/tests/vm/dart_2/regress_45968_test.dart b/runtime/tests/vm/dart_2/regress_45968_test.dart
index 80cff1f..a469e2e 100644
--- a/runtime/tests/vm/dart_2/regress_45968_test.dart
+++ b/runtime/tests/vm/dart_2/regress_45968_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/dart-lang/sdk/issues/45968.
 // Verifies that compiler doesn't crash if annotation references field
 // which is replaced with a getter.
diff --git a/runtime/tests/vm/dart_2/regress_46796_test.dart b/runtime/tests/vm/dart_2/regress_46796_test.dart
new file mode 100644
index 0000000..5c11b5b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_46796_test.dart
@@ -0,0 +1,34 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_slow_path
+
+// @dart = 2.9
+
+class RawSocketEvent {}
+
+class Stream<T> {}
+
+class _RawSocket extends Stream<RawSocketEvent> {
+  int field1 = 512;
+  int field2 = -512;
+
+  _RawSocket() {
+    blackhole(_onSubscriptionStateChange);
+  }
+
+  void _onSubscriptionStateChange<T>() {
+    print("blah");
+  }
+}
+
+@pragma("vm:never-inline")
+blackhole(x) {}
+
+main() {
+  for (var i = 0; i < 10000000; i++) {
+    blackhole(new _RawSocket());
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_46798_test.dart b/runtime/tests/vm/dart_2/regress_46798_test.dart
new file mode 100644
index 0000000..1c226d8
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_46798_test.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.9
+
+// Regression test for https://github.com/dart-lang/sdk/issues/46798.
+// Verifies that compiler can handle LoadIndexed from AllocateObject.
+
+// VMOptions=--deterministic --optimization_counter_threshold=100
+
+import 'package:expect/expect.dart';
+
+bool foo(Object other) => other is String && other.codeUnitAt(0) == 5;
+
+int x = 0;
+
+void bar(bool cond) {
+  if (cond || foo(MapEntry<int, int>(1, 1))) {
+    ++x;
+  }
+}
+
+void main() {
+  for (int i = 0; i < 1000; ++i) foo('abc');
+  for (int i = 0; i < 1000; ++i) bar(false);
+  Expect.equals(0, x);
+}
diff --git a/runtime/tests/vm/dart_2/regress_46799_test.dart b/runtime/tests/vm/dart_2/regress_46799_test.dart
new file mode 100644
index 0000000..0d44c95
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_46799_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.
+
+// Reduced from
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+//   dart dartfuzz.dart --seed 1052527605 --no-fp --no-ffi --flat
+
+bool var31 = bool.hasEnvironment('z');
+
+@pragma('vm:never-inline')
+num foo0() {
+  print(var31);
+  return -4294967296;
+}
+
+main() {
+  print(((-67) ~/ (var31 ? -83 : foo0())));
+}
diff --git a/runtime/tests/vm/dart_2/regress_46878_test.dart b/runtime/tests/vm/dart_2/regress_46878_test.dart
new file mode 100644
index 0000000..6ef37bc
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_46878_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+main() async {
+  // In the main isolate we don't want to throw.
+  Foo.throwOnHashCode = false;
+
+  final onError = ReceivePort()
+    ..listen((error) {
+      print('Child isolate error: $error');
+    });
+  final onExit = ReceivePort();
+  var spawnError;
+  try {
+    await Isolate.spawn(
+        other,
+        // Rehashing of this map on receiver side will throw.
+        {Foo(): 1},
+        onError: onError.sendPort,
+        onExit: onExit.sendPort);
+
+    await onExit.first;
+  } on IsolateSpawnException catch (error) {
+    spawnError = error;
+  } finally {
+    onError.close();
+    onExit.close();
+  }
+  Expect.contains(
+      'Unable to spawn isolate: Failed to deserialize the passed arguments to the new isolate',
+      '$spawnError');
+}
+
+class Foo {
+  static bool throwOnHashCode = true;
+
+  int get hashCode => throwOnHashCode ? (throw 'rehashing error') : 1;
+}
+
+other(message) {}
diff --git a/runtime/tests/vm/dart_2/regress_big_regexp_test.dart b/runtime/tests/vm/dart_2/regress_big_regexp_test.dart
index 13e2689..1ef005d 100644
--- a/runtime/tests/vm/dart_2/regress_big_regexp_test.dart
+++ b/runtime/tests/vm/dart_2/regress_big_regexp_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.
 
+// @dart = 2.9
+
 // Verifies that RegExp compilation doesn't crash on a huge source string.
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/regress_flutter16182_test.dart b/runtime/tests/vm/dart_2/regress_flutter16182_test.dart
index 81c386e..27ae15d 100644
--- a/runtime/tests/vm/dart_2/regress_flutter16182_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter16182_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/flutter/flutter/issues/16182
 // Verifies that TFA correctly handles calls via fields/getters.
 
diff --git a/runtime/tests/vm/dart_2/regress_flutter20122_test.dart b/runtime/tests/vm/dart_2/regress_flutter20122_test.dart
index 8693c63..98c0640 100644
--- a/runtime/tests/vm/dart_2/regress_flutter20122_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter20122_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/flutter/flutter/issues/20122
 // Verifies that identityHashCode for strings does not interfere
 // with normal hashCode.
diff --git a/runtime/tests/vm/dart_2/regress_flutter35121_test.dart b/runtime/tests/vm/dart_2/regress_flutter35121_test.dart
index a4d21b6..7ea32e4 100644
--- a/runtime/tests/vm/dart_2/regress_flutter35121_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter35121_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.
 
+// @dart = 2.9
+
 // This is a regression test for
 // https://github.com/flutter/flutter/issues/35121
 
diff --git a/runtime/tests/vm/dart_2/regress_flutter51298_test.dart b/runtime/tests/vm/dart_2/regress_flutter51298_test.dart
index 9e7bb8c..6056dea 100644
--- a/runtime/tests/vm/dart_2/regress_flutter51298_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter51298_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.
 
+// @dart = 2.9
+
 // VMOptions=--async_igoto_threshold=0 --optimization_counter_threshold=10 --deterministic
 
 // Regression test for https://github.com/flutter/flutter/issues/51298.
diff --git a/runtime/tests/vm/dart_2/regress_flutter76919_test.dart b/runtime/tests/vm/dart_2/regress_flutter76919_test.dart
index 669641a..3ee205b 100644
--- a/runtime/tests/vm/dart_2/regress_flutter76919_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter76919_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.
 
+// @dart = 2.9
+
 // Regression test for https://github.com/flutter/flutter/issues/76919
 // Verifies that we don't try to strengthen an environmentless assertion
 // with a class check in AOT mode which crashes AOT compiler.
diff --git a/runtime/tests/vm/dart_2/regress_flutter83094_test.dart b/runtime/tests/vm/dart_2/regress_flutter83094_test.dart
index 2572019..803550a 100644
--- a/runtime/tests/vm/dart_2/regress_flutter83094_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter83094_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.
 
+// @dart = 2.9
+
 // Verifies that compiler doesn't crash due to incompatible types
 // when unboxing input of a Phi.
 // Regression test for https://github.com/flutter/flutter/issues/83094.
diff --git a/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart b/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart
index 79c5614..eb7a828 100644
--- a/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart
@@ -4,6 +4,8 @@
 //
 // Check that we correctly handle FutureOr<T> when computing if a location
 // of the given static type can contain Smi or not.
+
+// @dart = 2.9
 import 'dart:async';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/regress_flutter_63560_test.dart b/runtime/tests/vm/dart_2/regress_flutter_63560_test.dart
index 717e814..ab8acaf 100644
--- a/runtime/tests/vm/dart_2/regress_flutter_63560_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter_63560_test.dart
@@ -6,6 +6,8 @@
 // has deeply nested calls.
 // Regression test for https://github.com/flutter/flutter/issues/63560.
 // Generated using the following:
+
+// @dart = 2.9
 /*
 void main() {
   final N = 1000;
diff --git a/runtime/tests/vm/dart_2/regress_flutter_64526_test.dart b/runtime/tests/vm/dart_2/regress_flutter_64526_test.dart
index efdc0ad..e97da59 100644
--- a/runtime/tests/vm/dart_2/regress_flutter_64526_test.dart
+++ b/runtime/tests/vm/dart_2/regress_flutter_64526_test.dart
@@ -5,6 +5,8 @@
 // Tests that functions with large number of optional positional parameters
 // are compiled correctly and don't overflow instruction encoding.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 class CCC {
diff --git a/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart b/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart
index 368a98b..31d65f9 100644
--- a/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart
+++ b/runtime/tests/vm/dart_2/regress_lsl_with_constant_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.
 
+// @dart = 2.9
+
 // Regression test which checks that shift left with constant operand compiles
 // correctly even if narrowed to Int32 shift.
 
diff --git a/runtime/tests/vm/dart_2/regress_range_analysis_shift_test.dart b/runtime/tests/vm/dart_2/regress_range_analysis_shift_test.dart
index f30a370..d5ac728 100644
--- a/runtime/tests/vm/dart_2/regress_range_analysis_shift_test.dart
+++ b/runtime/tests/vm/dart_2/regress_range_analysis_shift_test.dart
@@ -7,6 +7,8 @@
 // Test that SpeculativeInt64ShiftOp's range is correctly inferred when the RHS
 // is a nullable smi.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 int getShift(List<String> args) {
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 8442c38..d8e037f 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
@@ -4,6 +4,8 @@
 //
 // VMOptions=--deterministic --optimization-counter-threshold=10 --unbox-numeric-fields
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 const magicDouble = 42.0;
diff --git a/runtime/tests/vm/dart_2/run_appended_aot_snapshot_test.dart b/runtime/tests/vm/dart_2/run_appended_aot_snapshot_test.dart
index a931e48..608ae3d 100644
--- a/runtime/tests/vm/dart_2/run_appended_aot_snapshot_test.dart
+++ b/runtime/tests/vm/dart_2/run_appended_aot_snapshot_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 import 'dart:typed_data';
diff --git a/runtime/tests/vm/dart_2/scavenger_abort_2_test.dart b/runtime/tests/vm/dart_2/scavenger_abort_2_test.dart
index e3183da..08c1666 100644
--- a/runtime/tests/vm/dart_2/scavenger_abort_2_test.dart
+++ b/runtime/tests/vm/dart_2/scavenger_abort_2_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.
 
+// @dart = 2.9
+
 import "dart:io";
 import "package:expect/expect.dart";
 
diff --git a/runtime/tests/vm/dart_2/scavenger_abort_test.dart b/runtime/tests/vm/dart_2/scavenger_abort_test.dart
index ee3b38d..9f3ce1e0 100644
--- a/runtime/tests/vm/dart_2/scavenger_abort_test.dart
+++ b/runtime/tests/vm/dart_2/scavenger_abort_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.
 
+// @dart = 2.9
+
 import "dart:io";
 import "package:expect/expect.dart";
 
diff --git a/runtime/tests/vm/dart_2/sdk_hash_test.dart b/runtime/tests/vm/dart_2/sdk_hash_test.dart
index 5030445..19fe165 100644
--- a/runtime/tests/vm/dart_2/sdk_hash_test.dart
+++ b/runtime/tests/vm/dart_2/sdk_hash_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/runtime/tests/vm/dart_2/send_instantiated_fun_test.dart b/runtime/tests/vm/dart_2/send_instantiated_fun_test.dart
index 751e8f8..72b47f8 100644
--- a/runtime/tests/vm/dart_2/send_instantiated_fun_test.dart
+++ b/runtime/tests/vm/dart_2/send_instantiated_fun_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.
 
+// @dart = 2.9
+
 // Verify that partially instantiated generic function remains instantiated
 // after received via ReceivePort.
 
diff --git a/runtime/tests/vm/dart_2/sendandexit_test.dart b/runtime/tests/vm/dart_2/sendandexit_test.dart
index 58e02c6..f64b1ee 100644
--- a/runtime/tests/vm/dart_2/sendandexit_test.dart
+++ b/runtime/tests/vm/dart_2/sendandexit_test.dart
@@ -6,6 +6,8 @@
 //
 // Validates functionality of sendAndExit.
 
+// @dart = 2.9
+
 import 'dart:_internal' show sendAndExit;
 import 'dart:async';
 import 'dart:isolate';
diff --git a/runtime/tests/vm/dart_2/single_target_and_method_extractors2_test.dart b/runtime/tests/vm/dart_2/single_target_and_method_extractors2_test.dart
index 09d44a0..31219d3 100644
--- a/runtime/tests/vm/dart_2/single_target_and_method_extractors2_test.dart
+++ b/runtime/tests/vm/dart_2/single_target_and_method_extractors2_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.
 
+// @dart = 2.9
+
 // This test verifies that AOT compiler is correctly handling method extractors
 // when resolving targets of method invocations.
 
diff --git a/runtime/tests/vm/dart_2/single_target_and_method_extractors_test.dart b/runtime/tests/vm/dart_2/single_target_and_method_extractors_test.dart
index eb82966..062d7e0 100644
--- a/runtime/tests/vm/dart_2/single_target_and_method_extractors_test.dart
+++ b/runtime/tests/vm/dart_2/single_target_and_method_extractors_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.
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 // Note: below we are using tear-offs instead of calling methods directly
diff --git a/runtime/tests/vm/dart_2/slow_path_shared_stub_test.dart b/runtime/tests/vm/dart_2/slow_path_shared_stub_test.dart
index 7c50e88..be7b675 100644
--- a/runtime/tests/vm/dart_2/slow_path_shared_stub_test.dart
+++ b/runtime/tests/vm/dart_2/slow_path_shared_stub_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc --no-use-vfp
 
diff --git a/runtime/tests/vm/dart_2/snapshot_depfile_test.dart b/runtime/tests/vm/dart_2/snapshot_depfile_test.dart
index 1465b17..115c260 100644
--- a/runtime/tests/vm/dart_2/snapshot_depfile_test.dart
+++ b/runtime/tests/vm/dart_2/snapshot_depfile_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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/snapshot_test_helper.dart b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
index ddbd803..b57d04d 100644
--- a/runtime/tests/vm/dart_2/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart_2/snapshot_test_helper.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.
 
+// @dart = 2.9
+
 import 'dart:async';
 import 'dart:io';
 import 'dart:math';
diff --git a/runtime/tests/vm/dart_2/snapshot_version_test.dart b/runtime/tests/vm/dart_2/snapshot_version_test.dart
index 2dcde10..2e271a2 100644
--- a/runtime/tests/vm/dart_2/snapshot_version_test.dart
+++ b/runtime/tests/vm/dart_2/snapshot_version_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.
 
+// @dart = 2.9
+
 import "dart:io";
 import "package:expect/expect.dart";
 
diff --git a/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart b/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart
index 3a89e80..c87cf77 100644
--- a/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart
+++ b/runtime/tests/vm/dart_2/spawn_infinite_loop_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
diff --git a/runtime/tests/vm/dart_2/spawn_shutdown_test.dart b/runtime/tests/vm/dart_2/spawn_shutdown_test.dart
index 6e42f3e..4c4eb86 100644
--- a/runtime/tests/vm/dart_2/spawn_shutdown_test.dart
+++ b/runtime/tests/vm/dart_2/spawn_shutdown_test.dart
@@ -1,9 +1,12 @@
 // 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.
-// VMOptions=--enable-asserts
 
-import 'dart:async';
+// VMOptions=--enable-asserts --enable-isolate-groups
+// VMOptions=--enable-asserts --no-enable-isolate-groups
+
+// @dart = 2.9
+
 import 'dart:io';
 import 'dart:isolate';
 
diff --git a/runtime/tests/vm/dart_2/spawnuri_snapshot_test.dart b/runtime/tests/vm/dart_2/spawnuri_snapshot_test.dart
index f0ed02f..fd9a709 100644
--- a/runtime/tests/vm/dart_2/spawnuri_snapshot_test.dart
+++ b/runtime/tests/vm/dart_2/spawnuri_snapshot_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.
 
+// @dart = 2.9
+
 // Check spawnUri accepts any program format that `dart` accepts. Currently this
 // is source, kernel, AppJIT (blob container) and AppAOT (ELF).
 
diff --git a/runtime/tests/vm/dart_2/split_aot_kernel_generation2_test.dart b/runtime/tests/vm/dart_2/split_aot_kernel_generation2_test.dart
index 5d49f2c..5a8aeb8 100644
--- a/runtime/tests/vm/dart_2/split_aot_kernel_generation2_test.dart
+++ b/runtime/tests/vm/dart_2/split_aot_kernel_generation2_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.
 
+// @dart = 2.9
+
 // OtherResources=../../../../tests/language_2/mixin/regress_flutter_55345_test.dart
 
 // Runs regress_flutter_55345_test.dart using AOT kernel generation split into
diff --git a/runtime/tests/vm/dart_2/split_aot_kernel_generation_test.dart b/runtime/tests/vm/dart_2/split_aot_kernel_generation_test.dart
index 1f8d33b..7646544 100644
--- a/runtime/tests/vm/dart_2/split_aot_kernel_generation_test.dart
+++ b/runtime/tests/vm/dart_2/split_aot_kernel_generation_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.
 
+// @dart = 2.9
+
 // OtherResources=splay_test.dart
 
 // Tests AOT kernel generation split into 2 steps using '--from-dill' option.
diff --git a/runtime/tests/vm/dart_2/split_literals.dart b/runtime/tests/vm/dart_2/split_literals.dart
index b71e9bd..3321a93 100644
--- a/runtime/tests/vm/dart_2/split_literals.dart
+++ b/runtime/tests/vm/dart_2/split_literals.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.
 
+// @dart = 2.9
+
 import "split_literals_deferred.dart" deferred as lib;
 
 class Box {
diff --git a/runtime/tests/vm/dart_2/split_literals_deferred.dart b/runtime/tests/vm/dart_2/split_literals_deferred.dart
index 015ae1d..b2f94b2 100644
--- a/runtime/tests/vm/dart_2/split_literals_deferred.dart
+++ b/runtime/tests/vm/dart_2/split_literals_deferred.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.
 
+// @dart = 2.9
+
 import "split_literals.dart";
 
 void foo() {
diff --git a/runtime/tests/vm/dart_2/split_literals_test.dart b/runtime/tests/vm/dart_2/split_literals_test.dart
index 076e27a..05fcff2 100644
--- a/runtime/tests/vm/dart_2/split_literals_test.dart
+++ b/runtime/tests/vm/dart_2/split_literals_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.
 
+// @dart = 2.9
+
 import "dart:convert";
 import "dart:io";
 
diff --git a/runtime/tests/vm/dart_2/stack_overflow_shared_test.dart b/runtime/tests/vm/dart_2/stack_overflow_shared_test.dart
index 56fa08c..5e18e63 100644
--- a/runtime/tests/vm/dart_2/stack_overflow_shared_test.dart
+++ b/runtime/tests/vm/dart_2/stack_overflow_shared_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc --stacktrace_filter=filter_me
 
 // This tests the stackmaps and environments for safepoints corresponding to
diff --git a/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart b/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart
index 04371a3..a80f071 100644
--- a/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart
+++ b/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart
@@ -1,6 +1,8 @@
 // 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
 import "package:expect/expect.dart";
 
 mixin Bar {
diff --git a/runtime/tests/vm/dart_2/switchable_call_monomorphic_regression_42517_test.dart b/runtime/tests/vm/dart_2/switchable_call_monomorphic_regression_42517_test.dart
index a3c8ffa..af48843 100644
--- a/runtime/tests/vm/dart_2/switchable_call_monomorphic_regression_42517_test.dart
+++ b/runtime/tests/vm/dart_2/switchable_call_monomorphic_regression_42517_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 final dynamic l = <dynamic>[A(), B()];
diff --git a/runtime/tests/vm/dart_2/switchable_call_single_target_regression_42517_test.dart b/runtime/tests/vm/dart_2/switchable_call_single_target_regression_42517_test.dart
index 868ab75..4c782db 100644
--- a/runtime/tests/vm/dart_2/switchable_call_single_target_regression_42517_test.dart
+++ b/runtime/tests/vm/dart_2/switchable_call_single_target_regression_42517_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 final dynamic l = <dynamic>[A(), A1(), B()];
diff --git a/runtime/tests/vm/dart_2/thread_priority_linux_test.dart b/runtime/tests/vm/dart_2/thread_priority_linux_test.dart
index 63a9168..93cf05a 100644
--- a/runtime/tests/vm/dart_2/thread_priority_linux_test.dart
+++ b/runtime/tests/vm/dart_2/thread_priority_linux_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.
 
+// @dart = 2.9
+
 // VMOptions=--worker-thread-priority=12
 
 import 'dart:ffi';
diff --git a/runtime/tests/vm/dart_2/thread_priority_macos_test.dart b/runtime/tests/vm/dart_2/thread_priority_macos_test.dart
index f1574cf..df60323 100644
--- a/runtime/tests/vm/dart_2/thread_priority_macos_test.dart
+++ b/runtime/tests/vm/dart_2/thread_priority_macos_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.
 
+// @dart = 2.9
+
 // VMOptions=--worker-thread-priority=15
 
 import 'dart:ffi';
diff --git a/runtime/tests/vm/dart_2/thread_priority_windows_test.dart b/runtime/tests/vm/dart_2/thread_priority_windows_test.dart
index a1c31f7..1ec1eef 100644
--- a/runtime/tests/vm/dart_2/thread_priority_windows_test.dart
+++ b/runtime/tests/vm/dart_2/thread_priority_windows_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.
 
+// @dart = 2.9
+
 // VMOptions=--worker-thread-priority=-2
 // A priority of -2 means THREAD_PRIORITY_LOWEST on windows
 
diff --git a/runtime/tests/vm/dart_2/transferable_allocations_test.dart b/runtime/tests/vm/dart_2/transferable_allocations_test.dart
index ec61786..824350f 100644
--- a/runtime/tests/vm/dart_2/transferable_allocations_test.dart
+++ b/runtime/tests/vm/dart_2/transferable_allocations_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.
 
+// @dart = 2.9
+
 // Verifies that Transferable (external old space) objects are promptly gc'ed.
 // The test will run out of ia32 3GB heap allocation if objects are not gc'ed.
 
diff --git a/runtime/tests/vm/dart_2/transferable_test.dart b/runtime/tests/vm/dart_2/transferable_test.dart
index 8daf5a0..e08040e 100644
--- a/runtime/tests/vm/dart_2/transferable_test.dart
+++ b/runtime/tests/vm/dart_2/transferable_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
diff --git a/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart b/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart
index 8e95792..f84b48b 100644
--- a/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart
+++ b/runtime/tests/vm/dart_2/transferable_throws_oom_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.
 
+// @dart = 2.9
+
 // Customize ASAN options for this test with 'allocator_may_return_null=1' as
 // it tries to allocate a large memory buffer.
 // Environment=ASAN_OPTIONS=handle_segv=0:detect_stack_use_after_return=1:allocator_may_return_null=1
diff --git a/runtime/tests/vm/dart_2/transferable_throws_test.dart b/runtime/tests/vm/dart_2/transferable_throws_test.dart
index fcb5bf7..320ec01 100644
--- a/runtime/tests/vm/dart_2/transferable_throws_test.dart
+++ b/runtime/tests/vm/dart_2/transferable_throws_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.
 
+// @dart = 2.9
+
 // VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
diff --git a/runtime/tests/vm/dart_2/trigger_gc_in_native_test.dart b/runtime/tests/vm/dart_2/trigger_gc_in_native_test.dart
index 4205fa6..f18fe04 100644
--- a/runtime/tests/vm/dart_2/trigger_gc_in_native_test.dart
+++ b/runtime/tests/vm/dart_2/trigger_gc_in_native_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.
 
+// @dart = 2.9
+
 // VMOptions=--no_concurrent_mark --no_concurrent_sweep
 // VMOptions=--no_concurrent_mark --concurrent_sweep
 // VMOptions=--no_concurrent_mark --use_compactor
diff --git a/runtime/tests/vm/dart_2/truncating_ints_test.dart b/runtime/tests/vm/dart_2/truncating_ints_test.dart
index a988482..f062b38 100644
--- a/runtime/tests/vm/dart_2/truncating_ints_test.dart
+++ b/runtime/tests/vm/dart_2/truncating_ints_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.
 
+// @dart = 2.9
+
 // VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
 
 // Test for truncating (wrap-around) integer arithmetic.
diff --git a/runtime/tests/vm/dart_2/tts_regression39716_test.dart b/runtime/tests/vm/dart_2/tts_regression39716_test.dart
index 782f3fa..a762f55 100644
--- a/runtime/tests/vm/dart_2/tts_regression39716_test.dart
+++ b/runtime/tests/vm/dart_2/tts_regression39716_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 main() {
diff --git a/runtime/tests/vm/dart_2/type_argument_factory_constructor_test.dart b/runtime/tests/vm/dart_2/type_argument_factory_constructor_test.dart
index 58bac74..c788378 100644
--- a/runtime/tests/vm/dart_2/type_argument_factory_constructor_test.dart
+++ b/runtime/tests/vm/dart_2/type_argument_factory_constructor_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.
 
+// @dart = 2.9
+
 // Regression test for Issue https://github.com/dart-lang/sdk/issues/37264.
 typedef SomeCb = T Function<T>(T val);
 
diff --git a/runtime/tests/vm/dart_2/typed_data_vfp_regress_42745_test.dart b/runtime/tests/vm/dart_2/typed_data_vfp_regress_42745_test.dart
index 294f0ea..77ad067 100644
--- a/runtime/tests/vm/dart_2/typed_data_vfp_regress_42745_test.dart
+++ b/runtime/tests/vm/dart_2/typed_data_vfp_regress_42745_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // VMOptions=--no-use-vfp
 
+// @dart = 2.9
+
 import 'dart:typed_data';
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/unboxed_fields_type_args_test.dart b/runtime/tests/vm/dart_2/unboxed_fields_type_args_test.dart
index d19c5e9..5eca439 100644
--- a/runtime/tests/vm/dart_2/unboxed_fields_type_args_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_fields_type_args_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.
 
+// @dart = 2.9
+
 import 'dart:typed_data';
 import 'dart:async';
 import 'dart:isolate';
diff --git a/runtime/tests/vm/dart_2/unboxed_implicit_accessors_test.dart b/runtime/tests/vm/dart_2/unboxed_implicit_accessors_test.dart
index 08eea3a..5220bb7 100644
--- a/runtime/tests/vm/dart_2/unboxed_implicit_accessors_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_implicit_accessors_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.
 
+// @dart = 2.9
+
 final l = <I>[A(), B(42, 4.2)];
 final l2 = <I2>[A2(), B2(42, 4.2)];
 
diff --git a/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart b/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart
index 79fd30f..9a03275 100644
--- a/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_many_fields_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.
 
+// @dart = 2.9
+
 import 'dart:_internal' show VMInternalsForTesting;
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart_2/unboxed_param_args_descriptor_test.dart b/runtime/tests/vm/dart_2/unboxed_param_args_descriptor_test.dart
index 6606fc4..499301b 100644
--- a/runtime/tests/vm/dart_2/unboxed_param_args_descriptor_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_param_args_descriptor_test.dart
@@ -4,6 +4,8 @@
 //
 // SharedObjects=ffi_test_functions
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'dylib_utils.dart';
diff --git a/runtime/tests/vm/dart_2/unboxed_param_tear_off_test.dart b/runtime/tests/vm/dart_2/unboxed_param_tear_off_test.dart
index 4ef1f7f..310f784 100644
--- a/runtime/tests/vm/dart_2/unboxed_param_tear_off_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_param_tear_off_test.dart
@@ -4,6 +4,8 @@
 //
 // SharedObjects=ffi_test_functions
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'dylib_utils.dart';
diff --git a/runtime/tests/vm/dart_2/unboxed_param_test.dart b/runtime/tests/vm/dart_2/unboxed_param_test.dart
index 0ce12da..9c0ec59 100644
--- a/runtime/tests/vm/dart_2/unboxed_param_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_param_test.dart
@@ -4,6 +4,8 @@
 //
 // SharedObjects=ffi_test_functions
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'dylib_utils.dart';
diff --git a/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart b/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart
index 91ad154..b7db8dc 100644
--- a/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart
+++ b/runtime/tests/vm/dart_2/unboxed_parameter_helper.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.
 
+// @dart = 2.9
+
 import 'dart:typed_data';
 
 @pragma('vm:never-inline')
diff --git a/runtime/tests/vm/dart_2/unboxed_retval_test.dart b/runtime/tests/vm/dart_2/unboxed_retval_test.dart
index 6132480..edfc043 100644
--- a/runtime/tests/vm/dart_2/unboxed_retval_test.dart
+++ b/runtime/tests/vm/dart_2/unboxed_retval_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.
 
+// @dart = 2.9
+
 import 'package:expect/expect.dart';
 
 import 'unboxed_parameter_helper.dart';
diff --git a/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart b/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart
deleted file mode 100644
index 24195d6..0000000
--- a/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart
+++ /dev/null
@@ -1,153 +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.
-
-// VMOptions=--deterministic --optimization_counter_threshold=50
-// VMOptions=--no-intrinsify
-
-// Test int.operator>>> in case of Smi range overflow and deoptimization.
-
-import "package:expect/expect.dart";
-
-@pragma('vm:never-inline')
-void test1(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test2(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test3(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test4(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test5(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test6(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test7(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test8(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test9(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test10(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test11(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test12(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test13(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-@pragma('vm:never-inline')
-void test14(int a, int b, int expected) {
-  Expect.equals(expected, a >>> b);
-}
-
-void testCornerCases() {
-  // Make sure test methods are optimized.
-  for (int i = 0; i < 100; ++i) {
-    test1(1, 1, 0);
-    test2(1, 1, 0);
-    test3(1, 1, 0);
-    test4(1, 1, 0);
-    test5(1, 1, 0);
-    test6(1, 1, 0);
-    test7(1, 1, 0);
-    test8(1, 1, 0);
-    test9(1, 1, 0);
-    test10(1, 1, 0);
-    test11(1, 1, 0);
-    test12(1, 1, 0);
-    test13(1, 1, 0);
-    test14(1, 1, 0);
-  }
-  // Run tests, may trigger deoptimization.
-  for (int i = 0; i < 100; ++i) {
-    test1(0xffffffffffffffff, 1, 0x7fffffffffffffff);
-    test2(0xffffffffffffabcd, 1, 0x7fffffffffffd5e6);
-    test3(0xffffffffffffffff, 31, 0x1ffffffff);
-    test4(0xffffffffffffffff, 32, 0xffffffff);
-    test5(0xfedcba9876543210, 32, 0xfedcba98);
-    test6(0xffffffffffffffff, 34, 0x3fffffff);
-    test7(0xffffffffffffffff, 56, 0xff);
-    test8(0xfeffffffffffabcd, 56, 0xfe);
-    test9(0xffffffffffffffff, 63, 0x1);
-    test10(0xffffffffffffffff, 64, 0);
-    test11(0xffffffffffffffff, 70, 0);
-    test12(0x8000000000000000, 1, 0x4000000000000000);
-    test13(0x7fedcba987654321, 1, 0x3ff6e5d4c3b2a190);
-    test14(0x7fedcba987654321, 40, 0x7fedcb);
-  }
-}
-
-void testSingleOneBit() {
-  for (int i = 0; i <= 63; ++i) {
-    final int x = 1 << i;
-    for (int j = 0; j <= 127; ++j) {
-      Expect.equals((j > i) ? 0 : 1 << (i - j), x >>> j);
-    }
-  }
-}
-
-void testSingleZeroBit() {
-  for (int i = 0; i <= 63; ++i) {
-    final int x = ~(1 << i);
-    for (int j = 0; j <= 127; ++j) {
-      if (j >= 64) {
-        Expect.equals(0, x >>> j);
-      } else {
-        final int mask = (1 << (64 - j)) - 1;
-        if (j > i) {
-          Expect.equals(mask, x >>> j);
-        } else {
-          Expect.equals(mask & ~(1 << (i - j)), x >>> j);
-        }
-      }
-    }
-  }
-}
-
-main() {
-  testCornerCases();
-
-  for (int i = 0; i < 100; ++i) {
-    testSingleOneBit();
-    testSingleZeroBit();
-  }
-}
diff --git a/runtime/tests/vm/dart_2/use_bare_instructions_flag_test.dart b/runtime/tests/vm/dart_2/use_bare_instructions_flag_test.dart
index eead3b6..52b958f 100644
--- a/runtime/tests/vm/dart_2/use_bare_instructions_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_bare_instructions_flag_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.
 
+// @dart = 2.9
+
 // This test is ensuring that the flag for --use-bare-instructions given at
 // AOT compile-time will be used at runtime (irrespective if other values were
 // passed to the runtime).
diff --git a/runtime/tests/vm/dart_2/use_code_comments_flag_test.dart b/runtime/tests/vm/dart_2/use_code_comments_flag_test.dart
index cc3968c..bf22c08 100644
--- a/runtime/tests/vm/dart_2/use_code_comments_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_code_comments_flag_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.
 
+// @dart = 2.9
+
 // This test is ensuring that the flag for --code-comments given at
 // AOT compile-time will be used at runtime (irrespective if other values were
 // passed to the runtime).
diff --git a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_program.dart b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_program.dart
index c422f18..a4e399e 100644
--- a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_program.dart
+++ b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_program.dart
@@ -4,6 +4,8 @@
 // Test that the full stacktrace in an error object matches the stacktrace
 // handed to the catch clause.
 
+// @dart = 2.9
+
 import "package:expect/expect.dart";
 
 class C {
diff --git a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
index b73ef75..5850250 100644
--- a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_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.
 
+// @dart = 2.9
+
 // This test ensures that the flag for --dwarf-stack-traces given at AOT
 // compile-time will be used at runtime (irrespective if other values were
 // passed to the runtime).
diff --git a/runtime/tests/vm/dart_2/use_flag_test_helper.dart b/runtime/tests/vm/dart_2/use_flag_test_helper.dart
index 650a9bf..b408f42 100644
--- a/runtime/tests/vm/dart_2/use_flag_test_helper.dart
+++ b/runtime/tests/vm/dart_2/use_flag_test_helper.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.
 
+// @dart = 2.9
+
 import 'dart:convert';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/use_resolve_dwarf_paths_flag_test.dart b/runtime/tests/vm/dart_2/use_resolve_dwarf_paths_flag_test.dart
index 8b00996..cd0ed39 100644
--- a/runtime/tests/vm/dart_2/use_resolve_dwarf_paths_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_resolve_dwarf_paths_flag_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.
 
+// @dart = 2.9
+
 // This test checks that --resolve-dwarf-paths outputs absolute and relative
 // paths in DWARF information.
 
diff --git a/runtime/tests/vm/dart_2/use_save_debugging_info_flag_test.dart b/runtime/tests/vm/dart_2/use_save_debugging_info_flag_test.dart
index 1a21971..cc8f9b4 100644
--- a/runtime/tests/vm/dart_2/use_save_debugging_info_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_save_debugging_info_flag_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.
 
+// @dart = 2.9
+
 // This test ensures that the AOT compiler can generate debugging information
 // for stripped ELF output, and that using the debugging information to look
 // up stripped stack trace information matches the non-stripped version.
diff --git a/runtime/tests/vm/dart_2/use_strip_flag_test.dart b/runtime/tests/vm/dart_2/use_strip_flag_test.dart
index 385fb36..a552ea0 100644
--- a/runtime/tests/vm/dart_2/use_strip_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_strip_flag_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.
 
+// @dart = 2.9
+
 // This test ensures that the AOT compiler can generate stripped versions of
 // ELF and assembly output. This test is currently very weak, in that it just
 // checks that the stripped version is strictly smaller than the unstripped one.
diff --git a/runtime/tests/vm/dart_2/use_trace_precompiler_flag_test.dart b/runtime/tests/vm/dart_2/use_trace_precompiler_flag_test.dart
index 7ea2d60..4a054e8 100644
--- a/runtime/tests/vm/dart_2/use_trace_precompiler_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_trace_precompiler_flag_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.
 
+// @dart = 2.9
+
 // This test ensures that --trace-precompiler runs without issue and prints
 // valid JSON for reasons to retain objects.
 
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 23be14f..37057d8 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
@@ -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.
 
+// @dart = 2.9
+
 import 'dart:convert';
 import 'dart:io';
 
diff --git a/runtime/tests/vm/dart_2/wrap_around_in_range_analysis_test.dart b/runtime/tests/vm/dart_2/wrap_around_in_range_analysis_test.dart
index 67fc82d..265320c 100644
--- a/runtime/tests/vm/dart_2/wrap_around_in_range_analysis_test.dart
+++ b/runtime/tests/vm/dart_2/wrap_around_in_range_analysis_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.
 
+// @dart = 2.9
+
 // Test for overflow (wrap-around) during computations in range analysis.
 
 import "package:expect/expect.dart";
diff --git a/runtime/tests/vm/dart_2/write_barrier_register_clobber_test.dart b/runtime/tests/vm/dart_2/write_barrier_register_clobber_test.dart
index ceff211..248d965 100644
--- a/runtime/tests/vm/dart_2/write_barrier_register_clobber_test.dart
+++ b/runtime/tests/vm/dart_2/write_barrier_register_clobber_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.
 
+// @dart = 2.9
+
 // This test attempts to verify that write barrier slow path does not
 // clobber any live values.
 
diff --git a/runtime/tests/vm/dart_2/write_traces_to_invalid_file_test.dart b/runtime/tests/vm/dart_2/write_traces_to_invalid_file_test.dart
new file mode 100644
index 0000000..5d51641
--- /dev/null
+++ b/runtime/tests/vm/dart_2/write_traces_to_invalid_file_test.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.
+
+// VMOptions=--print_instructions_sizes-to=no/such/path
+// VMOptions=--timeline_dir=no/such/path
+// VMOptions=--trace_precompiler_to=no/such/path
+// VMOptions=--write_code_comments_as_synthetic_source_to=no/such/path
+// VMOptions=--write_retained_reasons_to=no/such/path
+// VMOptions=--write_v8_snapshot_profile-to=no/such/path
+
+// @dart = 2.9
+
+main() {
+  print("Just checking we don't crash.");
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 41a7490..3ca14d8 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -12,6 +12,7 @@
 cc/IsolateReload_PendingUnqualifiedCall_InstanceToStatic: Fail # Issue 32981
 cc/IsolateReload_PendingUnqualifiedCall_StaticToInstance: Fail # Issue 32981
 dart/boxmint_test: Pass, Slow # Uses slow path
+dart/byte_array_optimized_test: Pass, Slow
 dart/data_uri_import_test/none: SkipByDesign
 dart/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
 dart/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
@@ -24,6 +25,7 @@
 dart/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
 dart/use_bare_instructions_flag_test: Pass, Slow # Spawns several subprocesses
 dart_2/boxmint_test: Pass, Slow # Uses slow path
+dart_2/byte_array_optimized_test: Pass, Slow
 dart_2/data_uri_import_test/none: SkipByDesign
 dart_2/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
 dart_2/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
@@ -71,18 +73,11 @@
 dart_2/trigger_gc_in_native_test: Skip # This test crashes on the bot, but not locally, and infrastructure repeatly fails to locate its coredump.
 
 [ $compiler == app_jitk ]
-dart/redirection_type_shuffling_test/none: RuntimeError
 dart/snapshot_version_test: RuntimeError
-dart_2/redirection_type_shuffling_test/none: RuntimeError
 dart_2/snapshot_version_test: RuntimeError
 
 [ $compiler == dartk ]
-cc/DartAPI_New: Fail # Issue #33041
 cc/IsolateReload_LibraryLookup: Fail, Crash # Issue 32190
-dart/redirection_type_shuffling_test/00: RuntimeError, Pass
-dart/redirection_type_shuffling_test/none: RuntimeError
-dart_2/redirection_type_shuffling_test/00: RuntimeError, Pass
-dart_2/redirection_type_shuffling_test/none: RuntimeError
 
 [ $compiler != dartk ]
 cc/IsolateReload_KernelIncrementalCompile: SkipByDesign
@@ -100,10 +95,12 @@
 [ $compiler == dartkp ]
 dart/causal_stacks/async_throws_stack_no_causal_non_symbolic_test: SkipByDesign # --no-lazy... does nothing on precompiler.
 dart/causal_stacks/async_throws_stack_no_causal_test: SkipByDesign # --no-lazy... does nothing on precompiler.
+dart/redirection_type_shuffling_test: SkipByDesign # Uses dart:mirrors.
 dart/scavenger_abort_test: SkipSlow
 dart/v8_snapshot_profile_writer_test: Pass, Slow # Can be slow due to re-invoking the precompiler.
 dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test: SkipByDesign # --no-lazy... does nothing on precompiler.
 dart_2/causal_stacks/async_throws_stack_no_causal_test: SkipByDesign # --no-lazy... does nothing on precompiler.
+dart_2/redirection_type_shuffling_test: SkipByDesign # Uses dart:mirrors.
 dart_2/scavenger_abort_test: SkipSlow
 dart_2/v8_snapshot_profile_writer_test: Pass, Slow # Can be slow due to re-invoking the precompiler.
 
@@ -141,9 +138,7 @@
 cc/CreateMirrorSystem: SkipByDesign # Imports dart:mirrors
 cc/StandaloneSnapshotSize: SkipByDesign # Imports dart:mirrors
 dart/gen_snapshot_include_resolved_urls_test: SkipByDesign # Script URLs not included in product gen_snapshot
-dart/redirection_type_shuffling_test: SkipByDesign # Imports dart:mirrors
 dart_2/gen_snapshot_include_resolved_urls_test: SkipByDesign # Script URLs not included in product gen_snapshot
-dart_2/redirection_type_shuffling_test: SkipByDesign # Imports dart:mirrors
 
 [ $nnbd == legacy ]
 dart/*: SkipByDesign # Migrated tests are not supposed to run on non-NNBD bots.
@@ -242,10 +237,6 @@
 [ $compiler == dartk && $system == windows ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
 
-[ $compiler == dartk && $checked ]
-dart/redirection_type_shuffling_test/00: Pass # Works in --checked mode but not in --strong mode.
-dart_2/redirection_type_shuffling_test/00: Pass # Works in --checked mode but not in --strong mode.
-
 [ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
 dart/appjit*: SkipSlow # DFE too slow
 dart/b162922506_test: SkipSlow # Generates large input file
@@ -282,14 +273,14 @@
 
 [ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
 dart/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
-dart/regress_45898_test: Pass, Slow
 dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
+
+[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $builder_tag == tsan) ]
+dart/regress_45898_test: Pass, Slow
 dart_2/regress_45898_test: Pass, Slow
 
 [ $compiler == dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
-dart/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
 dart/spawn_shutdown_test: SkipSlow
-dart_2/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
 dart_2/spawn_shutdown_test: SkipSlow
 
 [ $mode == debug && $system == windows ]
@@ -378,6 +369,10 @@
 dart/thread_priority_linux_test: SkipByDesign
 dart_2/thread_priority_linux_test: SkipByDesign
 
+[ $arch != x64 || $system != linux || $hot_reload || $compiler != dartk && $compiler != dartkp ]
+dart/entrypoints_verification_test: SkipByDesign # Enough to test on x64 Linux.
+dart_2/entrypoints_verification_test: SkipByDesign # Enough to test on x64 Linux.
+
 [ $builder_tag == crossword || $builder_tag == crossword_ast ]
 dart/emit_aot_size_info_flag_test: SkipByDesign # The test itself cannot determine the location of gen_snapshot (only tools/test.py knows where it is).
 dart/gen_snapshot_include_resolved_urls_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot.
diff --git a/runtime/tools/dartfuzz/dartfuzz.dart b/runtime/tools/dartfuzz/dartfuzz.dart
index be82ace..c2e2d6c 100644
--- a/runtime/tools/dartfuzz/dartfuzz.dart
+++ b/runtime/tools/dartfuzz/dartfuzz.dart
@@ -14,7 +14,7 @@
 // Version of DartFuzz. Increase this each time changes are made
 // to preserve the property that a given version of DartFuzz yields
 // the same fuzzed program for a deterministic random seed.
-const String version = '1.91';
+const String version = '1.92';
 
 // Restriction on statements and expressions.
 const int stmtDepth = 1;
@@ -1003,11 +1003,10 @@
 
         emitNewline();
         emitTryCatchFinally(() {
-          var body = '';
           for (var i = 0; i < globalVars.length; i++) {
-            body += '\$$varName$i\\n';
+            emitPrint('$varName$i: \$$varName$i');
+            emitNewline();
           }
-          emitPrint('$body');
         }, () => emitPrint('print() throws'));
       });
 
@@ -1100,7 +1099,7 @@
     }
     emitIndentation();
     // Emit a variable of the lhs type.
-    final emittedVar = emitVar(0, tp, isLhs: true)!;
+    final emittedVar = emitVar(0, tp, isLhs: true, assignOp: assignOp)!;
     var rhsFilter = RhsFilter.fromDartType(tp, emittedVar);
     emit(' $assignOp ');
     // Select one of the possible rhs types for the given lhs type and assign
@@ -1142,9 +1141,12 @@
 
   // Emit a throw statement.
   bool emitThrow() {
-    var tp = oneOfSet(dartType.allTypes);
+    var tp;
+    do {
+      tp = oneOfSet(dartType.allTypes).toNonNullable();
+    } while (tp == DartType.NULL);
     emitLn('throw ', newline: false);
-    emitExpr(0, tp.toNonNullable(), includeSemicolon: true);
+    emitExpr(0, tp, includeSemicolon: true);
     return false;
   }
 
@@ -1890,12 +1892,20 @@
   }
 
   String? emitSubscriptedVar(int depth, DartType tp,
-      {bool isLhs = false, RhsFilter? rhsFilter}) {
+      {bool isLhs = false, String? assignOp, RhsFilter? rhsFilter}) {
     String? ret;
     // Check if type tp is an indexable element of some other type.
     if (dartType.isIndexableElementType(tp)) {
       // Select a list or map type that contains elements of type tp.
-      final iterType = oneOfSet(dartType.indexableElementTypes(tp));
+      var iterType = oneOfSet(dartType.indexableElementTypes(tp));
+      // For `collection[key] <op>= value` to work, collection must not be a
+      // Map or Expando because their subscript operators return a nullable
+      // type.
+      if (assignOp != null && assignOp != "=") {
+        while (!DartType.isListType(iterType)) {
+          iterType = oneOfSet(dartType.indexableElementTypes(tp));
+        }
+      }
       // Get the index type for the respective list or map type.
       final indexType = dartType.indexType(iterType);
       // Emit a variable of the selected list or map type.
@@ -1920,14 +1930,14 @@
   }
 
   String? emitVar(int depth, DartType tp,
-      {bool isLhs = false, RhsFilter? rhsFilter}) {
+      {bool isLhs = false, String? assignOp, RhsFilter? rhsFilter}) {
     switch (choose(2)) {
       case 0:
         return emitScalarVar(tp, isLhs: isLhs, rhsFilter: rhsFilter);
         break;
       default:
         return emitSubscriptedVar(depth, tp,
-            isLhs: isLhs, rhsFilter: rhsFilter);
+            isLhs: isLhs, assignOp: assignOp, rhsFilter: rhsFilter);
         break;
     }
   }
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 55db0a7..69dfc4b 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -25,7 +25,6 @@
 import("../lib/core_sources.gni")
 import("../lib/developer_sources.gni")
 import("../lib/ffi_sources.gni")
-import("../lib/internal_sources.gni")
 import("../lib/isolate_sources.gni")
 import("../lib/math_sources.gni")
 import("../lib/mirrors_sources.gni")
@@ -109,6 +108,12 @@
   sources = vm_sources + rebase_path(compiler_api_sources, ".", "./compiler/") +
             rebase_path(disassembler_sources, ".", "./compiler/") +
             rebase_path(heap_sources, ".", "./heap/")
+  if (is_android) {
+    # Android specific workaround for a kernel bug. This source file can't
+    # go into vm_sources list because it will break Windows build which
+    # uses different assembler syntax.
+    sources += [ "thread_interrupter_android_arm.S" ]
+  }
   include_dirs = [ ".." ]
 }
 
@@ -147,10 +152,10 @@
   }
   include_dirs = [ ".." ]
   allsources = async_runtime_cc_files + core_runtime_cc_files +
-               developer_runtime_cc_files + internal_runtime_cc_files +
-               isolate_runtime_cc_files + math_runtime_cc_files +
-               mirrors_runtime_cc_files + typed_data_runtime_cc_files +
-               vmservice_runtime_cc_files + ffi_runtime_cc_files
+               developer_runtime_cc_files + isolate_runtime_cc_files +
+               math_runtime_cc_files + mirrors_runtime_cc_files +
+               typed_data_runtime_cc_files + vmservice_runtime_cc_files +
+               ffi_runtime_cc_files
   sources = [ "bootstrap.cc" ] + rebase_path(allsources, ".", "../lib")
   snapshot_sources = []
 }
diff --git a/runtime/vm/allocation.h b/runtime/vm/allocation.h
index fc4be72..fd1bdfa 100644
--- a/runtime/vm/allocation.h
+++ b/runtime/vm/allocation.h
@@ -75,4 +75,8 @@
 
 }  // namespace dart
 
+// Prevent use of `new (zone) DoesNotExtendZoneAllocated()`, which places the
+// DoesNotExtendZoneAllocated on top of the Zone.
+void* operator new(size_t size, dart::Zone* zone) = delete;
+
 #endif  // RUNTIME_VM_ALLOCATION_H_
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 2b5683b..2fe4811 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -519,8 +519,8 @@
   for (intptr_t i = 0; i < kLoopCount; i++) {
     StackZone zone(thread);
     std::unique_ptr<Message> message =
-        WriteMessage(/* can_send_any_object */ true, null_object, ILLEGAL_PORT,
-                     Message::kNormalPriority);
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                     null_object, ILLEGAL_PORT, Message::kNormalPriority);
 
     // Read object back from the snapshot.
     ReadMessage(thread, message.get());
@@ -541,8 +541,8 @@
   for (intptr_t i = 0; i < kLoopCount; i++) {
     StackZone zone(thread);
     std::unique_ptr<Message> message =
-        WriteMessage(/* can_send_any_object */ true, smi_object, ILLEGAL_PORT,
-                     Message::kNormalPriority);
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                     smi_object, ILLEGAL_PORT, Message::kNormalPriority);
 
     // Read object back from the snapshot.
     ReadMessage(thread, message.get());
@@ -565,8 +565,8 @@
   for (intptr_t i = 0; i < kLoopCount; i++) {
     StackZone zone(thread);
     std::unique_ptr<Message> message = WriteMessage(
-        /* can_send_any_object */ true, array_object, ILLEGAL_PORT,
-        Message::kNormalPriority);
+        /* can_send_any_object */ true, /* same_group */ false, array_object,
+        ILLEGAL_PORT, Message::kNormalPriority);
 
     // Read object back from the snapshot.
     ReadMessage(thread, message.get());
@@ -598,8 +598,8 @@
   for (intptr_t i = 0; i < kLoopCount; i++) {
     StackZone zone(thread);
     std::unique_ptr<Message> message =
-        WriteMessage(/* can_send_any_object */ true, map, ILLEGAL_PORT,
-                     Message::kNormalPriority);
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                     map, ILLEGAL_PORT, Message::kNormalPriority);
 
     // Read object back from the snapshot.
     ReadMessage(thread, message.get());
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index e9710df6..4911d25 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -89,7 +89,6 @@
   V(Double_sub, 2)                                                             \
   V(Double_mul, 2)                                                             \
   V(Double_div, 2)                                                             \
-  V(Double_trunc_div, 2)                                                       \
   V(Double_remainder, 2)                                                       \
   V(Double_modulo, 2)                                                          \
   V(Double_greaterThanFromInteger, 2)                                          \
@@ -317,7 +316,7 @@
   V(Int32x4_setFlagZ, 2)                                                       \
   V(Int32x4_setFlagW, 2)                                                       \
   V(Int32x4_select, 3)                                                         \
-  V(Isolate_spawnFunction, 11)                                                 \
+  V(Isolate_spawnFunction, 10)                                                 \
   V(Isolate_spawnUri, 12)                                                      \
   V(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0)                         \
   V(Isolate_getCurrentRootUriStr, 0)                                           \
@@ -357,7 +356,6 @@
   V(UserTag_defaultTag, 0)                                                     \
   V(UserTag_makeCurrent, 1)                                                    \
   V(Profiler_getCurrentTag, 0)                                                 \
-  V(ClassID_getID, 1)                                                          \
   V(VMService_SendIsolateServiceMessage, 2)                                    \
   V(VMService_SendRootServiceMessage, 1)                                       \
   V(VMService_SendObjectRootServiceMessage, 1)                                 \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 8e2fb4b..c858051 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1381,6 +1381,7 @@
 
 void ClassFinalizer::SortClasses() {
   auto T = Thread::Current();
+  StackZone stack_zone(T);
   auto Z = T->zone();
   auto IG = T->isolate_group();
 
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 5a41a68..e7f7cbc 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -17,7 +17,9 @@
 // Size of the class-id part of the object header. See UntaggedObject.
 typedef uint16_t ClassIdTagType;
 
-#define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY_NOR_MAP(V)                   \
+// Classes that are not subclasses of Instance and only handled by the VM,
+// but do not require any special handling other than being a predefined class.
+#define CLASS_LIST_INTERNAL_ONLY(V)                                            \
   V(Class)                                                                     \
   V(PatchClass)                                                                \
   V(Function)                                                                  \
@@ -55,7 +57,12 @@
   V(ApiError)                                                                  \
   V(LanguageError)                                                             \
   V(UnhandledException)                                                        \
-  V(UnwindError)                                                               \
+  V(UnwindError)
+
+// Classes that are subclasses of Instance and neither part of a specific cid
+// grouping like strings, arrays, etc. nor require special handling outside of
+// being a predefined class.
+#define CLASS_LIST_INSTANCE_SINGLETONS(V)                                      \
   V(Instance)                                                                  \
   V(LibraryPrefix)                                                             \
   V(TypeArguments)                                                             \
@@ -71,7 +78,6 @@
   V(Mint)                                                                      \
   V(Double)                                                                    \
   V(Bool)                                                                      \
-  V(GrowableObjectArray)                                                       \
   V(Float32x4)                                                                 \
   V(Int32x4)                                                                   \
   V(Float64x2)                                                                 \
@@ -92,16 +98,23 @@
   V(UserTag)                                                                   \
   V(TransferableTypedData)
 
+#define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY_NOR_MAP(V)                   \
+  CLASS_LIST_INTERNAL_ONLY(V) CLASS_LIST_INSTANCE_SINGLETONS(V)
+
 // TODO(http://dartbug.com/45908): Add ImmutableLinkedHashMap.
 #define CLASS_LIST_MAPS(V) V(LinkedHashMap)
 
 // TODO(http://dartbug.com/45908): Add ImmutableLinkedHashSet.
 #define CLASS_LIST_SETS(V) V(LinkedHashSet)
 
-#define CLASS_LIST_ARRAYS(V)                                                   \
+#define CLASS_LIST_FIXED_LENGTH_ARRAYS(V)                                      \
   V(Array)                                                                     \
   V(ImmutableArray)
 
+#define CLASS_LIST_ARRAYS(V)                                                   \
+  CLASS_LIST_FIXED_LENGTH_ARRAYS(V)                                            \
+  V(GrowableObjectArray)
+
 #define CLASS_LIST_STRINGS(V)                                                  \
   V(String)                                                                    \
   V(OneByteString)                                                             \
@@ -172,6 +185,7 @@
   V(LinkedHashMap)                                                             \
   V(LinkedHashSet)                                                             \
   V(Array)                                                                     \
+  V(GrowableObjectArray)                                                       \
   V(String)
 
 #define CLASS_LIST_NO_OBJECT(V)                                                \
@@ -189,6 +203,10 @@
   // Illegal class id.
   kIllegalCid = 0,
 
+  // Pseudo class id for native pointers, the heap should never see an
+  // object with this class id.
+  kNativePointer,
+
   // The following entries describes classes for pseudo-objects in the heap
   // that should never be reachable from live objects. Free list elements
   // maintain the free list for old space, and forwarding corpses are used to
@@ -234,6 +252,7 @@
 
 // Class Id predicates.
 
+bool IsInternalOnlyClassId(intptr_t index);
 bool IsErrorClassId(intptr_t index);
 bool IsNumberClassId(intptr_t index);
 bool IsIntegerClassId(intptr_t index);
@@ -252,13 +271,37 @@
 bool IsInternalVMdefinedClassId(intptr_t index);
 bool IsImplicitFieldClassId(intptr_t index);
 
+// Should be used for looping over non-Object internal-only cids.
+constexpr intptr_t kFirstInternalOnlyCid = kClassCid;
+constexpr intptr_t kLastInternalOnlyCid = kUnwindErrorCid;
+// Use the currently surrounding cids to check that no new classes have been
+// added to the beginning or end of CLASS_LIST_INTERNAL_ONLY without adjusting
+// the above definitions.
+COMPILE_ASSERT(kFirstInternalOnlyCid == kObjectCid + 1);
+COMPILE_ASSERT(kInstanceCid == kLastInternalOnlyCid + 1);
+
+// Returns true for any class id that either does not correspond to a real
+// class, like kIllegalCid or kForwardingCorpse, or that is internal to the VM
+// and should not be exposed directly to user code.
+inline bool IsInternalOnlyClassId(intptr_t index) {
+  // Fix the condition below if these become non-contiguous.
+  COMPILE_ASSERT(kIllegalCid + 1 == kNativePointer &&
+                 kIllegalCid + 2 == kFreeListElement &&
+                 kIllegalCid + 3 == kForwardingCorpse &&
+                 kIllegalCid + 4 == kObjectCid &&
+                 kIllegalCid + 5 == kFirstInternalOnlyCid);
+  return index <= kLastInternalOnlyCid;
+}
+
 inline bool IsErrorClassId(intptr_t index) {
   // Make sure this function is updated when new Error types are added.
-  COMPILE_ASSERT(
-      kApiErrorCid == kErrorCid + 1 && kLanguageErrorCid == kErrorCid + 2 &&
-      kUnhandledExceptionCid == kErrorCid + 3 &&
-      kUnwindErrorCid == kErrorCid + 4 && kInstanceCid == kErrorCid + 5);
-  return (index >= kErrorCid && index < kInstanceCid);
+  COMPILE_ASSERT(kApiErrorCid == kErrorCid + 1 &&
+                 kLanguageErrorCid == kErrorCid + 2 &&
+                 kUnhandledExceptionCid == kErrorCid + 3 &&
+                 kUnwindErrorCid == kErrorCid + 4 &&
+                 // Change if needed for detecting a new error added at the end.
+                 kLastInternalOnlyCid == kUnwindErrorCid);
+  return (index >= kErrorCid && index <= kUnwindErrorCid);
 }
 
 inline bool IsNumberClassId(intptr_t index) {
@@ -293,11 +336,15 @@
           index == kExternalTwoByteStringCid);
 }
 
+inline bool IsArrayClassId(intptr_t index) {
+  COMPILE_ASSERT(kImmutableArrayCid == kArrayCid + 1);
+  COMPILE_ASSERT(kGrowableObjectArrayCid == kArrayCid + 2);
+  return (index >= kArrayCid && index <= kGrowableObjectArrayCid);
+}
+
 inline bool IsBuiltinListClassId(intptr_t index) {
   // Make sure this function is updated when new builtin List types are added.
-  COMPILE_ASSERT(kImmutableArrayCid == kArrayCid + 1);
-  return ((index >= kArrayCid && index <= kImmutableArrayCid) ||
-          (index == kGrowableObjectArrayCid) || IsTypedDataBaseClassId(index) ||
+  return (IsArrayClassId(index) || IsTypedDataBaseClassId(index) ||
           (index == kByteBufferCid));
 }
 
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index b5491bb..a1c58c0 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -39,7 +39,8 @@
         calloc(capacity_, sizeof(RelaxedAtomic<intptr_t>)));
     // The following cids don't have a corresponding class object in Dart code.
     // We therefore need to initialize them eagerly.
-    for (intptr_t i = kObjectCid; i < kInstanceCid; i++) {
+    COMPILE_ASSERT(kFirstInternalOnlyCid == kObjectCid + 1);
+    for (intptr_t i = kObjectCid; i <= kLastInternalOnlyCid; i++) {
       table[i] = vm_shared_class_table->SizeAt(i);
     }
     table[kTypeArgumentsCid] = vm_shared_class_table->SizeAt(kTypeArgumentsCid);
@@ -105,7 +106,8 @@
         static_cast<ClassPtr*>(calloc(capacity_, sizeof(ClassPtr)));
     // The following cids don't have a corresponding class object in Dart code.
     // We therefore need to initialize them eagerly.
-    for (intptr_t i = kObjectCid; i < kInstanceCid; i++) {
+    COMPILE_ASSERT(kFirstInternalOnlyCid == kObjectCid + 1);
+    for (intptr_t i = kObjectCid; i <= kLastInternalOnlyCid; i++) {
       table[i] = vm_class_table->At(i);
     }
     table[kTypeArgumentsCid] = vm_class_table->At(kTypeArgumentsCid);
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index b3beb4d..40b0a98 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -59,7 +59,7 @@
 // StorageTrait for HashTable which allows to create hash tables backed by
 // zone memory. Used to compute cluster order for canonical clusters.
 struct GrowableArrayStorageTraits {
-  class Array {
+  class Array : public ZoneAllocated {
    public:
     explicit Array(Zone* zone, intptr_t length)
         : length_(length), array_(zone->Alloc<ObjectPtr>(length)) {}
@@ -5152,202 +5152,145 @@
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-class OneByteStringSerializationCluster : public SerializationCluster {
+class StringSerializationCluster
+    : public CanonicalSetSerializationCluster<CanonicalStringSet,
+                                              String,
+                                              StringPtr> {
  public:
-  explicit OneByteStringSerializationCluster(bool is_canonical)
-      : SerializationCluster("OneByteString",
-                             kOneByteStringCid,
-                             kSizeVaries,
-                             is_canonical) {}
-  ~OneByteStringSerializationCluster() {}
+  // To distinguish one and two byte strings, we put a bit in the length to
+  // indicate which it is. The length is an unsigned SMI, so we actually have
+  // two spare bits available. Keep in sync with DecodeLengthAndCid.
+  static intptr_t EncodeLengthAndCid(intptr_t length, intptr_t cid) {
+    ASSERT(cid == kOneByteStringCid || cid == kTwoByteStringCid);
+    ASSERT(length <= compiler::target::kSmiMax);
+    return (length << 1) | (cid == kTwoByteStringCid ? 0x1 : 0x0);
+  }
+
+  explicit StringSerializationCluster(bool is_canonical,
+                                      bool represents_canonical_set)
+      : CanonicalSetSerializationCluster(kStringCid,
+                                         is_canonical,
+                                         represents_canonical_set,
+                                         "String",
+                                         kSizeVaries) {}
+  ~StringSerializationCluster() {}
 
   void Trace(Serializer* s, ObjectPtr object) {
-    OneByteStringPtr str = static_cast<OneByteStringPtr>(object);
+    StringPtr str = static_cast<StringPtr>(object);
     objects_.Add(str);
   }
 
   void WriteAlloc(Serializer* s) {
     const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
+    ReorderObjects(s);
     for (intptr_t i = 0; i < count; i++) {
-      OneByteStringPtr str = objects_[i];
+      StringPtr str = objects_[i];
       s->AssignRef(str);
       AutoTraceObject(str);
+      const intptr_t cid = str->GetClassId();
       const intptr_t length = Smi::Value(str->untag()->length());
-      s->WriteUnsigned(length);
+      const intptr_t encoded = EncodeLengthAndCid(length, cid);
+      s->WriteUnsigned(encoded);
       target_memory_size_ +=
-          compiler::target::OneByteString::InstanceSize(length);
+          cid == kOneByteStringCid
+              ? compiler::target::OneByteString::InstanceSize(length)
+              : compiler::target::TwoByteString::InstanceSize(length);
     }
+    WriteCanonicalSetLayout(s);
   }
 
   void WriteFill(Serializer* s) {
     const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
-      OneByteStringPtr str = objects_[i];
+      StringPtr str = objects_[i];
       AutoTraceObject(str);
+      const intptr_t cid = str->GetClassId();
       const intptr_t length = Smi::Value(str->untag()->length());
-      ASSERT(length <= compiler::target::kSmiMax);
-      s->WriteUnsigned(length);
-      s->WriteBytes(str->untag()->data(), length);
+      const intptr_t encoded = EncodeLengthAndCid(length, cid);
+      s->WriteUnsigned(encoded);
+      if (cid == kOneByteStringCid) {
+        s->WriteBytes(static_cast<OneByteStringPtr>(str)->untag()->data(),
+                      length);
+      } else {
+        s->WriteBytes(reinterpret_cast<uint8_t*>(
+                          static_cast<TwoByteStringPtr>(str)->untag()->data()),
+                      length * 2);
+      }
     }
   }
-
- private:
-  GrowableArray<OneByteStringPtr> objects_;
 };
 #endif  // !DART_PRECOMPILED_RUNTIME
 
-class StringDeserializationCluster : public DeserializationCluster {
- protected:
-  StringDeserializationCluster(const char* name, bool is_canonical)
-      : DeserializationCluster(name, is_canonical) {}
-
+class StringDeserializationCluster
+    : public CanonicalSetDeserializationCluster<CanonicalStringSet> {
  public:
-#if defined(DART_PRECOMPILED_RUNTIME)
-  void PostLoad(Deserializer* d, const Array& refs, bool primary) {
-    if (!primary && is_canonical()) {
-      auto Z = d->zone();
-      auto isolate_group = d->isolate_group();
-      SafepointMutexLocker ml(isolate_group->constant_canonicalization_mutex());
-      CanonicalStringSet table(Z,
-                               isolate_group->object_store()->symbol_table());
-      String& str = String::Handle(Z);
-      String& str2 = String::Handle(Z);
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
-        str ^= refs.At(i);
-        str2 ^= table.InsertOrGet(str);
-        if (str.ptr() == str2.ptr()) {
-          str.SetCanonical();
-        } else {
-          refs.SetAt(i, str2);
+  static intptr_t DecodeLengthAndCid(intptr_t encoded, intptr_t* out_cid) {
+    *out_cid = (encoded & 0x1) != 0 ? kTwoByteStringCid : kOneByteStringCid;
+    return encoded >> 1;
+  }
+
+  static intptr_t InstanceSize(intptr_t length, intptr_t cid) {
+    return cid == kOneByteStringCid ? OneByteString::InstanceSize(length)
+                                    : TwoByteString::InstanceSize(length);
+  }
+
+  explicit StringDeserializationCluster(bool is_canonical, bool is_root_unit)
+      : CanonicalSetDeserializationCluster(is_canonical,
+                                           is_root_unit,
+                                           "String") {}
+  ~StringDeserializationCluster() {}
+
+  void ReadAlloc(Deserializer* d) {
+    start_index_ = d->next_index();
+    PageSpace* old_space = d->heap()->old_space();
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      const intptr_t encoded = d->ReadUnsigned();
+      intptr_t cid = 0;
+      const intptr_t length = DecodeLengthAndCid(encoded, &cid);
+      d->AssignRef(old_space->AllocateSnapshot(InstanceSize(length, cid)));
+    }
+    stop_index_ = d->next_index();
+    BuildCanonicalSetFromLayout(d);
+  }
+
+  void ReadFill(Deserializer* d, bool primary) {
+    for (intptr_t id = start_index_; id < stop_index_; id++) {
+      StringPtr str = static_cast<StringPtr>(d->Ref(id));
+      const intptr_t encoded = d->ReadUnsigned();
+      intptr_t cid = 0;
+      const intptr_t length = DecodeLengthAndCid(encoded, &cid);
+      Deserializer::InitializeHeader(str, cid, InstanceSize(length, cid),
+                                     primary && is_canonical());
+      str->untag()->length_ = Smi::New(length);
+      StringHasher hasher;
+      if (cid == kOneByteStringCid) {
+        for (intptr_t j = 0; j < length; j++) {
+          uint8_t code_unit = d->Read<uint8_t>();
+          static_cast<OneByteStringPtr>(str)->untag()->data()[j] = code_unit;
+          hasher.Add(code_unit);
+        }
+      } else {
+        for (intptr_t j = 0; j < length; j++) {
+          uint16_t code_unit = d->Read<uint8_t>();
+          code_unit = code_unit | (d->Read<uint8_t>() << 8);
+          static_cast<TwoByteStringPtr>(str)->untag()->data()[j] = code_unit;
+          hasher.Add(code_unit);
         }
       }
-      isolate_group->object_store()->set_symbol_table(table.Release());
-    }
-  }
-#endif
-};
-
-class OneByteStringDeserializationCluster
-    : public StringDeserializationCluster {
- public:
-  explicit OneByteStringDeserializationCluster(bool is_canonical)
-      : StringDeserializationCluster("OneByteString", is_canonical) {}
-  ~OneByteStringDeserializationCluster() {}
-
-  void ReadAlloc(Deserializer* d) {
-    start_index_ = d->next_index();
-    PageSpace* old_space = d->heap()->old_space();
-    const intptr_t count = d->ReadUnsigned();
-    for (intptr_t i = 0; i < count; i++) {
-      const intptr_t length = d->ReadUnsigned();
-      d->AssignRef(
-          old_space->AllocateSnapshot(OneByteString::InstanceSize(length)));
-    }
-    stop_index_ = d->next_index();
-  }
-
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      OneByteStringPtr str = static_cast<OneByteStringPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
-      Deserializer::InitializeHeader(str, kOneByteStringCid,
-                                     OneByteString::InstanceSize(length),
-                                     primary && is_canonical());
-      str->untag()->length_ = Smi::New(length);
-      StringHasher hasher;
-      for (intptr_t j = 0; j < length; j++) {
-        uint8_t code_unit = d->Read<uint8_t>();
-        str->untag()->data()[j] = code_unit;
-        hasher.Add(code_unit);
-      }
       String::SetCachedHash(str, hasher.Finalize());
     }
   }
-};
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-class TwoByteStringSerializationCluster : public SerializationCluster {
- public:
-  explicit TwoByteStringSerializationCluster(bool is_canonical)
-      : SerializationCluster("TwoByteString",
-                             kTwoByteStringCid,
-                             kSizeVaries,
-                             is_canonical) {}
-  ~TwoByteStringSerializationCluster() {}
-
-  void Trace(Serializer* s, ObjectPtr object) {
-    TwoByteStringPtr str = static_cast<TwoByteStringPtr>(object);
-    objects_.Add(str);
-  }
-
-  void WriteAlloc(Serializer* s) {
-    const intptr_t count = objects_.length();
-    s->WriteUnsigned(count);
-    for (intptr_t i = 0; i < count; i++) {
-      TwoByteStringPtr str = objects_[i];
-      s->AssignRef(str);
-      AutoTraceObject(str);
-      const intptr_t length = Smi::Value(str->untag()->length());
-      s->WriteUnsigned(length);
-      target_memory_size_ +=
-          compiler::target::TwoByteString::InstanceSize(length);
-    }
-  }
-
-  void WriteFill(Serializer* s) {
-    const intptr_t count = objects_.length();
-    for (intptr_t i = 0; i < count; i++) {
-      TwoByteStringPtr str = objects_[i];
-      AutoTraceObject(str);
-      const intptr_t length = Smi::Value(str->untag()->length());
-      ASSERT(length <= (compiler::target::kSmiMax / 2));
-      s->WriteUnsigned(length);
-      s->WriteBytes(reinterpret_cast<uint8_t*>(str->untag()->data()),
-                    length * 2);
-    }
-  }
-
- private:
-  GrowableArray<TwoByteStringPtr> objects_;
-};
-#endif  // !DART_PRECOMPILED_RUNTIME
-
-class TwoByteStringDeserializationCluster
-    : public StringDeserializationCluster {
- public:
-  explicit TwoByteStringDeserializationCluster(bool is_canonical)
-      : StringDeserializationCluster("TwoByteString", is_canonical) {}
-  ~TwoByteStringDeserializationCluster() {}
-
-  void ReadAlloc(Deserializer* d) {
-    start_index_ = d->next_index();
-    PageSpace* old_space = d->heap()->old_space();
-    const intptr_t count = d->ReadUnsigned();
-    for (intptr_t i = 0; i < count; i++) {
-      const intptr_t length = d->ReadUnsigned();
-      d->AssignRef(
-          old_space->AllocateSnapshot(TwoByteString::InstanceSize(length)));
-    }
-    stop_index_ = d->next_index();
-  }
-
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TwoByteStringPtr str = static_cast<TwoByteStringPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
-      Deserializer::InitializeHeader(str, kTwoByteStringCid,
-                                     TwoByteString::InstanceSize(length),
-                                     primary && is_canonical());
-      str->untag()->length_ = Smi::New(length);
-      StringHasher hasher;
-      for (intptr_t j = 0; j < length; j++) {
-        uint16_t code_unit = d->Read<uint8_t>();
-        code_unit = code_unit | (d->Read<uint8_t>() << 8);
-        str->untag()->data()[j] = code_unit;
-        hasher.Add(code_unit);
+  void PostLoad(Deserializer* d, const Array& refs, bool primary) {
+    if (!table_.IsNull()) {
+      auto object_store = d->isolate_group()->object_store();
+      VerifyCanonicalSet(d, refs, Array::Handle(object_store->symbol_table()));
+      object_store->set_symbol_table(table_);
+      if (d->isolate_group() == Dart::vm_isolate_group()) {
+        Symbols::InitFromSnapshot(d->isolate_group());
       }
-      String::SetCachedHash(str, hasher.Finalize());
     }
   }
 };
@@ -5427,7 +5370,8 @@
                      "<empty subtype entries>");
 
     ClassTable* table = s->isolate_group()->class_table();
-    for (intptr_t cid = kClassCid; cid < kInstanceCid; cid++) {
+    for (intptr_t cid = kFirstInternalOnlyCid; cid <= kLastInternalOnlyCid;
+         cid++) {
       // Error, CallSiteData has no class object.
       if (cid != kErrorCid && cid != kCallSiteDataCid) {
         ASSERT(table->HasValidClassAt(cid));
@@ -5534,7 +5478,8 @@
     d->AddBaseObject(SubtypeTestCache::cached_array_);
 
     ClassTable* table = d->isolate_group()->class_table();
-    for (intptr_t cid = kClassCid; cid <= kUnwindErrorCid; cid++) {
+    for (intptr_t cid = kFirstInternalOnlyCid; cid <= kLastInternalOnlyCid;
+         cid++) {
       // Error, CallSiteData has no class object.
       if (cid != kErrorCid && cid != kCallSiteDataCid) {
         ASSERT(table->HasValidClassAt(cid));
@@ -5612,16 +5557,8 @@
         saved_canonical_type_arguments_(Array::Handle()),
         saved_canonical_type_parameters_(Array::Handle()) {
     saved_symbol_table_ = object_store->symbol_table();
-    if (Snapshot::IncludesStringsInROData(snapshot_kind)) {
-      object_store->set_symbol_table(
-          Array::Handle(HashTables::New<CanonicalStringSet>(4)));
-    } else {
-#if defined(DART_PRECOMPILER)
-      if (FLAG_precompiled_mode) {
-        HashTables::Weaken(saved_symbol_table_);
-      }
-#endif
-    }
+    object_store->set_symbol_table(
+        Array::Handle(HashTables::New<CanonicalStringSet>(4)));
     saved_canonical_types_ = object_store->canonical_types();
     object_store->set_canonical_types(
         Array::Handle(HashTables::New<CanonicalTypeSet>(4)));
@@ -6331,8 +6268,9 @@
     case kCompressedStackMapsCid:
       return "CompressedStackMaps";
     case kStringCid:
-      RELEASE_ASSERT(current_loading_unit_id_ <= LoadingUnit::kRootId);
-      return "CanonicalString";
+      return current_loading_unit_id_ <= LoadingUnit::kRootId
+                 ? "CanonicalString"
+                 : nullptr;
     case kOneByteStringCid:
       return current_loading_unit_id_ <= LoadingUnit::kRootId
                  ? "OneByteStringCid"
@@ -6480,10 +6418,9 @@
     case kImmutableArrayCid:
       return new (Z)
           ArraySerializationCluster(is_canonical, kImmutableArrayCid);
-    case kOneByteStringCid:
-      return new (Z) OneByteStringSerializationCluster(is_canonical);
-    case kTwoByteStringCid:
-      return new (Z) TwoByteStringSerializationCluster(is_canonical);
+    case kStringCid:
+      return new (Z) StringSerializationCluster(
+          is_canonical, cluster_represents_canonical_set && !vm_);
     case kWeakSerializationReferenceCid:
 #if defined(DART_PRECOMPILER)
       ASSERT(kind_ == Snapshot::kFullAOT);
@@ -6690,9 +6627,7 @@
     cid = object->GetClassId();
     is_canonical = object->untag()->IsCanonical();
   }
-  if (Snapshot::IncludesStringsInROData(kind_) && is_canonical &&
-      IsStringClassId(cid) &&
-      current_loading_unit_id_ <= LoadingUnit::kRootId) {
+  if (IsStringClassId(cid)) {
     cid = kStringCid;
   }
 
@@ -7257,15 +7192,12 @@
             RODataDeserializationCluster(is_canonical, !is_non_root_unit_, cid);
       case kOneByteStringCid:
       case kTwoByteStringCid:
+      case kStringCid:
         if (!is_non_root_unit_) {
           return new (Z) RODataDeserializationCluster(is_canonical,
                                                       !is_non_root_unit_, cid);
         }
         break;
-      case kStringCid:
-        RELEASE_ASSERT(!is_non_root_unit_);
-        return new (Z)
-            RODataDeserializationCluster(is_canonical, !is_non_root_unit_, cid);
     }
   }
 #endif
@@ -7397,10 +7329,10 @@
     case kImmutableArrayCid:
       return new (Z)
           ArrayDeserializationCluster(is_canonical, kImmutableArrayCid);
-    case kOneByteStringCid:
-      return new (Z) OneByteStringDeserializationCluster(is_canonical);
-    case kTwoByteStringCid:
-      return new (Z) TwoByteStringDeserializationCluster(is_canonical);
+    case kStringCid:
+      return new (Z) StringDeserializationCluster(
+          is_canonical,
+          !is_non_root_unit_ && isolate_group() != Dart::vm_isolate_group());
     default:
       break;
   }
diff --git a/runtime/vm/compiler/aot/dispatch_table_generator.cc b/runtime/vm/compiler/aot/dispatch_table_generator.cc
index 2198ae7..42a8d8a 100644
--- a/runtime/vm/compiler/aot/dispatch_table_generator.cc
+++ b/runtime/vm/compiler/aot/dispatch_table_generator.cc
@@ -98,7 +98,7 @@
       : selector_(selector),
         class_ranges_(zone, 0),
         ranges_(zone, 0),
-        code_(Code::Handle(zone)) {}
+        code_(Code::ZoneHandle(zone)) {}
 
   TableSelector* selector() const { return selector_; }
 
@@ -408,6 +408,7 @@
 void DispatchTableGenerator::Initialize(ClassTable* table) {
   classes_ = table;
 
+  HANDLESCOPE(Thread::Current());
   ReadTableSelectorInfo();
   NumberSelectors();
   SetupSelectorRows();
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 35ca895..ec5c09d 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -174,15 +174,20 @@
   explicit RetainedReasonsWriter(Zone* zone)
       : zone_(zone), retained_reasons_map_(zone) {}
 
-  void Init(const char* filename) {
-    if (filename == nullptr) return;
-    const auto file_open = Dart::file_open_callback();
-    if (file_open == nullptr) return;
+  bool Init(const char* filename) {
+    if (filename == nullptr) return false;
 
-    const auto file = file_open(filename, /*write=*/true);
+    if ((Dart::file_write_callback() == nullptr) ||
+        (Dart::file_open_callback() == nullptr) ||
+        (Dart::file_close_callback() == nullptr)) {
+      OS::PrintErr("warning: Could not access file callbacks.");
+      return false;
+    }
+
+    void* file = Dart::file_open_callback()(filename, /*write=*/true);
     if (file == nullptr) {
-      OS::PrintErr("Failed to open file %s\n", filename);
-      return;
+      OS::PrintErr("warning: Failed to write retained reasons: %s\n", filename);
+      return false;
     }
 
     file_ = file;
@@ -191,6 +196,7 @@
     // and printed at one point. This avoids having to keep otherwise
     // unneeded information around.
     writer_.OpenArray();
+    return true;
   }
 
   void AddDropped(const Object& obj) {
@@ -446,8 +452,7 @@
     zone_ = stack_zone.GetZone();
     RetainedReasonsWriter reasons_writer(zone_);
 
-    if (FLAG_write_retained_reasons_to != nullptr) {
-      reasons_writer.Init(FLAG_write_retained_reasons_to);
+    if (reasons_writer.Init(FLAG_write_retained_reasons_to)) {
       retained_reasons_writer_ = &reasons_writer;
     }
 
@@ -652,7 +657,7 @@
       ProgramVisitor::Dedup(T);
     }
 
-    if (FLAG_write_retained_reasons_to != nullptr) {
+    if (retained_reasons_writer_ != nullptr) {
       reasons_writer.Write();
       retained_reasons_writer_ = nullptr;
     }
@@ -718,6 +723,7 @@
 }
 
 void Precompiler::AddRoots() {
+  HANDLESCOPE(T);
   // Note that <rootlibrary>.main is not a root. The appropriate main will be
   // discovered through _getMainClosure.
 
@@ -776,6 +782,7 @@
 }
 
 void Precompiler::CollectCallbackFields() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Class& cls = Class::Handle(Z);
   Class& subcls = Class::Handle(Z);
@@ -790,6 +797,7 @@
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -843,6 +851,7 @@
 }
 
 void Precompiler::ProcessFunction(const Function& function) {
+  HANDLESCOPE(T);
   const intptr_t gop_offset =
       FLAG_use_bare_instructions ? global_object_pool_builder()->CurrentLength()
                                  : 0;
@@ -1462,6 +1471,7 @@
 
 // Adds all values annotated with @pragma('vm:entry-point') as roots.
 void Precompiler::AddAnnotatedRoots() {
+  HANDLESCOPE(T);
   auto& lib = Library::Handle(Z);
   auto& cls = Class::Handle(Z);
   auto& members = Array::Handle(Z);
@@ -1480,6 +1490,7 @@
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -1592,6 +1603,7 @@
 }
 
 void Precompiler::CheckForNewDynamicFunctions() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Class& cls = Class::Handle(Z);
   Array& functions = Array::Handle(Z);
@@ -1604,6 +1616,7 @@
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -1769,6 +1782,7 @@
   if (!FLAG_collect_dynamic_function_names) {
     return;
   }
+  HANDLESCOPE(T);
   auto& lib = Library::Handle(Z);
   auto& cls = Class::Handle(Z);
   auto& functions = Array::Handle(Z);
@@ -1781,6 +1795,7 @@
   Table table(HashTables::New<Table>(100));
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -1873,6 +1888,7 @@
 }
 
 void Precompiler::TraceForRetainedFunctions() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Class& cls = Class::Handle(Z);
   Array& functions = Array::Handle(Z);
@@ -1884,6 +1900,7 @@
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -1969,6 +1986,7 @@
 void Precompiler::FinalizeDispatchTable() {
   PRECOMPILER_TIMER_SCOPE(this, FinalizeDispatchTable);
   if (!FLAG_use_bare_instructions || !FLAG_use_table_dispatch) return;
+  HANDLESCOPE(T);
   // Build the entries used to serialize the dispatch table before
   // dropping functions, as we may clear references to Code objects.
   const auto& entries =
@@ -2083,6 +2101,7 @@
 }
 
 void Precompiler::DropFunctions() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Class& cls = Class::Handle(Z);
   Array& functions = Array::Handle(Z);
@@ -2163,6 +2182,7 @@
   auto& desc = Array::Handle(Z);
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -2232,6 +2252,7 @@
 }
 
 void Precompiler::DropFields() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Class& cls = Class::Handle(Z);
   Array& fields = Array::Handle(Z);
@@ -2242,6 +2263,7 @@
   SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -2294,6 +2316,7 @@
 
 void Precompiler::AttachOptimizedTypeTestingStub() {
   PRECOMPILER_TIMER_SCOPE(this, AttachOptimizedTypeTestingStub);
+  HANDLESCOPE(T);
   IsolateGroup::Current()->heap()->CollectAllGarbage();
   GrowableHandlePtrArray<const AbstractType> types(Z, 200);
   {
@@ -2359,6 +2382,7 @@
 }
 
 void Precompiler::TraceTypesFromRetainedClasses() {
+  HANDLESCOPE(T);
   auto& lib = Library::Handle(Z);
   auto& cls = Class::Handle(Z);
   auto& members = Array::Handle(Z);
@@ -2370,6 +2394,7 @@
   SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
     while (it.HasNext()) {
       cls = it.GetNextClass();
@@ -2445,6 +2470,7 @@
 }
 
 void Precompiler::DropMetadata() {
+  HANDLESCOPE(T);
   SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
 
   Library& lib = Library::Handle(Z);
@@ -2455,6 +2481,7 @@
 }
 
 void Precompiler::DropLibraryEntries() {
+  HANDLESCOPE(T);
   Library& lib = Library::Handle(Z);
   Array& dict = Array::Handle(Z);
   Object& entry = Object::Handle(Z);
@@ -2501,6 +2528,7 @@
 }
 
 void Precompiler::DropClasses() {
+  HANDLESCOPE(T);
   Class& cls = Class::Handle(Z);
   Array& constants = Array::Handle(Z);
   GrowableObjectArray& implementors = GrowableObjectArray::Handle(Z);
@@ -2587,6 +2615,7 @@
 }
 
 void Precompiler::DropLibraries() {
+  HANDLESCOPE(T);
   const GrowableObjectArray& retained_libraries =
       GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
   const Library& root_lib =
@@ -2596,6 +2625,7 @@
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
+    HANDLESCOPE(T);
     intptr_t entries = 0;
     DictionaryIterator it(lib);
     while (it.HasNext()) {
@@ -2824,6 +2854,7 @@
     return;
   }
 
+  HANDLESCOPE(T);
   DiscardCodeVisitor visitor(Z, functions_to_retain_,
                              functions_called_dynamically_);
   ProgramVisitor::WalkProgram(Z, IG, &visitor);
diff --git a/runtime/vm/compiler/aot/precompiler_tracer.cc b/runtime/vm/compiler/aot/precompiler_tracer.cc
index 40f6f58..72fcfdd 100644
--- a/runtime/vm/compiler/aot/precompiler_tracer.cc
+++ b/runtime/vm/compiler/aot/precompiler_tracer.cc
@@ -18,15 +18,22 @@
 
 PrecompilerTracer* PrecompilerTracer::StartTracingIfRequested(
     Precompiler* precompiler) {
-  if (FLAG_trace_precompiler_to != nullptr &&
-      Dart::file_write_callback() != nullptr &&
-      Dart::file_open_callback() != nullptr &&
-      Dart::file_close_callback() != nullptr) {
-    return new PrecompilerTracer(
-        precompiler, Dart::file_open_callback()(FLAG_trace_precompiler_to,
-                                                /*write=*/true));
+  const char* filename = FLAG_trace_precompiler_to;
+  if (filename == nullptr) {
+    return nullptr;
   }
-  return nullptr;
+  if ((Dart::file_write_callback() == nullptr) ||
+      (Dart::file_open_callback() == nullptr) ||
+      (Dart::file_close_callback() == nullptr)) {
+    OS::PrintErr("warning: Could not access file callbacks.");
+    return nullptr;
+  }
+  void* file = Dart::file_open_callback()(filename, /*write=*/true);
+  if (file == NULL) {
+    OS::PrintErr("warning: Failed to write precompiler trace: %s\n", filename);
+    return nullptr;
+  }
+  return new PrecompilerTracer(precompiler, file);
 }
 
 PrecompilerTracer::PrecompilerTracer(Precompiler* precompiler, void* stream)
diff --git a/runtime/vm/compiler/asm_intrinsifier.h b/runtime/vm/compiler/asm_intrinsifier.h
index 4745bad..d4e45e7 100644
--- a/runtime/vm/compiler/asm_intrinsifier.h
+++ b/runtime/vm/compiler/asm_intrinsifier.h
@@ -28,12 +28,6 @@
 class Label;
 
 class AsmIntrinsifier : public AllStatic {
- public:
-  static intptr_t ParameterSlotFromSp();
-
-  static void IntrinsicCallPrologue(Assembler* assembler);
-  static void IntrinsicCallEpilogue(Assembler* assembler);
-
  private:
   friend class Intrinsifier;
 
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 375c454..f29a90a 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -24,28 +24,6 @@
 
 #define __ assembler->
 
-intptr_t AsmIntrinsifier::ParameterSlotFromSp() {
-  return -1;
-}
-
-void AsmIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-
-  // Save LR by moving it to a callee saved temporary register.
-  __ Comment("IntrinsicCallPrologue");
-  SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(
-      __ mov(CALLEE_SAVED_TEMP, Operand(LR)));
-}
-
-void AsmIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  // Restore LR.
-  __ Comment("IntrinsicCallEpilogue");
-  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(
-      __ mov(LR, Operand(CALLEE_SAVED_TEMP)));
-}
-
 // Allocate a GrowableObjectArray:: using the backing array specified.
 // On stack: type argument (+1), data (+0).
 void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
@@ -1014,31 +992,6 @@
   }
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  if (TargetCPUFeatures::vfp_supported()) {
-    Label fall_through;
-
-    __ ldr(R0, Address(SP, 0 * target::kWordSize));
-    __ LoadDFromOffset(D0, R0, target::Double::value_offset() - kHeapObjectTag);
-
-    // Explicit NaN check, since ARM gives an FPU exception if you try to
-    // convert NaN to an int.
-    __ vcmpd(D0, D0);
-    __ vmstat();
-    __ b(normal_ir_body, VS);
-
-    __ vcvtid(S0, D0);
-    __ vmovrs(R0, S0);
-    // Overflow is signaled with minint.
-    // Check for overflow and that it fits into Smi.
-    __ CompareImmediate(R0, 0xC0000000);
-    __ SmiTag(R0, PL);
-    READS_RETURN_ADDRESS_FROM_LR(__ bx(LR, PL));
-    __ Bind(normal_ir_body);
-  }
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
@@ -1085,28 +1038,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::MathSqrt(Assembler* assembler, Label* normal_ir_body) {
-  if (TargetCPUFeatures::vfp_supported()) {
-    Label is_smi, double_op;
-    TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
-    // Argument is double and is in R0.
-    __ LoadDFromOffset(D1, R0, target::Double::value_offset() - kHeapObjectTag);
-    __ Bind(&double_op);
-    __ vsqrtd(D0, D1);
-    const Class& double_class = DoubleClass();
-    __ TryAllocate(double_class, normal_ir_body, Assembler::kFarJump, R0,
-                   R1);  // Result register.
-    __ StoreDToOffset(D0, R0, target::Double::value_offset() - kHeapObjectTag);
-    __ Ret();
-    __ Bind(&is_smi);
-    __ SmiUntag(R0);
-    __ vmovsr(S0, R0);
-    __ vcvtdi(D1, S0);
-    __ b(&double_op);
-    __ Bind(normal_ir_body);
-  }
-}
-
 //    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
 //    _state[kSTATE_LO] = state & _MASK_32;
 //    _state[kSTATE_HI] = state >> 32;
@@ -1198,6 +1129,14 @@
              kIfNotInRange, target);
 }
 
+static void JumpIfNotList(Assembler* assembler,
+                          Register cid,
+                          Register tmp,
+                          Label* target) {
+  RangeCheck(assembler, cid, tmp, kArrayCid, kGrowableObjectArrayCid,
+             kIfNotInRange, target);
+}
+
 static void JumpIfType(Assembler* assembler,
                        Register cid,
                        Register tmp,
@@ -1284,7 +1223,7 @@
                                Register scratch,
                                bool testing_instance_cids) {
   Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+      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);
@@ -1310,7 +1249,8 @@
   __ b(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
-  // different representations) or two integer types or two type types.
+  // different representations), two integer types, two list types or two type
+  // types.
   __ Bind(&different_cids);
   __ CompareImmediate(cid1, kNumPredefinedCids);
   __ b(not_equal, HI);
@@ -1335,9 +1275,20 @@
 
   if (testing_instance_cids) {
     __ Bind(&not_integer_or_string);
+    // Check if both are List types.
+    JumpIfNotList(assembler, cid1, scratch, &not_integer_or_string_or_list);
+
+    // First type is a List. Check if the second is a List too.
+    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);
+
+    __ 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 Type.
+    // or integer or List or Type.
     JumpIfNotType(assembler, cid1, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 36cb205..df3c817 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -24,31 +24,6 @@
 
 #define __ assembler->
 
-intptr_t AsmIntrinsifier::ParameterSlotFromSp() {
-  return -1;
-}
-
-void AsmIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(!IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP2));
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP2 != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP2 != ARGS_DESC_REG);
-
-  __ Comment("IntrinsicCallPrologue");
-  SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(__ mov(CALLEE_SAVED_TEMP, LR));
-  __ mov(CALLEE_SAVED_TEMP2, ARGS_DESC_REG);
-}
-
-void AsmIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  __ Comment("IntrinsicCallEpilogue");
-  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(__ mov(LR, CALLEE_SAVED_TEMP));
-  __ mov(ARGS_DESC_REG, CALLEE_SAVED_TEMP2);
-}
-
 // Allocate a GrowableObjectArray:: using the backing array specified.
 // On stack: type argument (+1), data (+0).
 void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
@@ -1158,35 +1133,6 @@
   __ ret();
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ ldr(R0, Address(SP, 0 * target::kWordSize));
-  __ LoadDFieldFromOffset(V0, R0, target::Double::value_offset());
-
-  // Explicit NaN check, since ARM gives an FPU exception if you try to
-  // convert NaN to an int.
-  __ fcmpd(V0, V0);
-  __ b(normal_ir_body, VS);
-
-  __ fcvtzdsx(R0, V0);
-
-#if !defined(DART_COMPRESSED_POINTERS)
-  // Overflow is signaled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ CompareImmediate(R0, 0xC000000000000000);
-  __ b(normal_ir_body, MI);
-#else
-  // Overflow is signaled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ AsrImmediate(TMP, R0, 30);
-  __ cmp(TMP, Operand(R0, ASR, 63));
-  __ b(normal_ir_body, NE);
-#endif
-  __ SmiTag(R0);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
@@ -1237,24 +1183,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::MathSqrt(Assembler* assembler, Label* normal_ir_body) {
-  Label is_smi, double_op;
-  TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
-  // Argument is double and is in R0.
-  __ LoadDFieldFromOffset(V1, R0, target::Double::value_offset());
-  __ Bind(&double_op);
-  __ fsqrtd(V0, V1);
-  const Class& double_class = DoubleClass();
-  __ TryAllocate(double_class, normal_ir_body, Assembler::kFarJump, R0, R1);
-  __ StoreDFieldToOffset(V0, R0, target::Double::value_offset());
-  __ ret();
-  __ Bind(&is_smi);
-  __ SmiUntag(R0);
-  __ scvtfdx(V1, R0);
-  __ b(&double_op);
-  __ Bind(normal_ir_body);
-}
-
 //    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
 //    _state[kSTATE_LO] = state & _MASK_32;
 //    _state[kSTATE_HI] = state >> 32;
@@ -1342,6 +1270,14 @@
              kIfNotInRange, target);
 }
 
+static void JumpIfNotList(Assembler* assembler,
+                          Register cid,
+                          Register tmp,
+                          Label* target) {
+  RangeCheck(assembler, cid, tmp, kArrayCid, kGrowableObjectArrayCid,
+             kIfNotInRange, target);
+}
+
 static void JumpIfType(Assembler* assembler,
                        Register cid,
                        Register tmp,
@@ -1432,7 +1368,7 @@
                                Register scratch,
                                bool testing_instance_cids) {
   Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+      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);
@@ -1458,7 +1394,8 @@
   __ b(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
-  // different representations) or two integer types or two type types.
+  // different representations), two integer types, two list types or two type
+  // types.
   __ Bind(&different_cids);
   __ CompareImmediate(cid1, kNumPredefinedCids);
   __ b(not_equal, HI);
@@ -1483,9 +1420,20 @@
 
   if (testing_instance_cids) {
     __ Bind(&not_integer_or_string);
+    // Check if both are List types.
+    JumpIfNotList(assembler, cid1, scratch, &not_integer_or_string_or_list);
+
+    // First type is a List. Check if the second is a List too.
+    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);
+
+    __ 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 Type.
+    // or integer or List or Type.
     JumpIfNotType(assembler, cid1, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index a17f7a8..7cb2f54 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -31,22 +31,6 @@
 
 #define __ assembler->
 
-intptr_t AsmIntrinsifier::ParameterSlotFromSp() {
-  return 0;
-}
-
-void AsmIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-
-  assembler->Comment("IntrinsicCallPrologue");
-  assembler->movl(CALLEE_SAVED_TEMP, ARGS_DESC_REG);
-}
-
-void AsmIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  assembler->Comment("IntrinsicCallEpilogue");
-  assembler->movl(ARGS_DESC_REG, CALLEE_SAVED_TEMP);
-}
-
 // Allocate a GrowableObjectArray:: using the backing array specified.
 // On stack: type argument (+2), data (+1), return-address (+0).
 void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
@@ -1125,20 +1109,6 @@
   __ jmp(&is_false, Assembler::kNearJump);
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ movl(EAX, Address(ESP, +1 * target::kWordSize));
-  __ movsd(XMM0, FieldAddress(EAX, target::Double::value_offset()));
-  __ cvttsd2si(EAX, XMM0);
-  // Overflow is signalled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ cmpl(EAX, Immediate(0xC0000000));
-  __ j(NEGATIVE, normal_ir_body, Assembler::kNearJump);
-  __ SmiTag(EAX);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
@@ -1177,27 +1147,6 @@
   __ Bind(normal_ir_body);
 }
 
-// Argument type is not known
-void AsmIntrinsifier::MathSqrt(Assembler* assembler, Label* normal_ir_body) {
-  Label is_smi, double_op;
-  TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
-  // Argument is double and is in EAX.
-  __ movsd(XMM1, FieldAddress(EAX, target::Double::value_offset()));
-  __ Bind(&double_op);
-  __ sqrtsd(XMM0, XMM1);
-  const Class& double_class = DoubleClass();
-  __ TryAllocate(double_class, normal_ir_body, Assembler::kNearJump,
-                 EAX,  // Result register.
-                 EBX);
-  __ movsd(FieldAddress(EAX, target::Double::value_offset()), XMM0);
-  __ ret();
-  __ Bind(&is_smi);
-  __ SmiUntag(EAX);
-  __ cvtsi2sd(XMM1, EAX);
-  __ jmp(&double_op);
-  __ Bind(normal_ir_body);
-}
-
 //    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
 //    _state[kSTATE_LO] = state & _MASK_32;
 //    _state[kSTATE_HI] = state >> 32;
@@ -1281,6 +1230,11 @@
              kIfNotInRange, target);
 }
 
+static void JumpIfNotList(Assembler* assembler, Register cid, Label* target) {
+  RangeCheck(assembler, cid, kArrayCid, kGrowableObjectArrayCid, kIfNotInRange,
+             target);
+}
+
 static void JumpIfType(Assembler* assembler, Register cid, Label* target) {
   RangeCheck(assembler, cid, kTypeCid, kFunctionTypeCid, kIfInRange, target);
 }
@@ -1370,7 +1324,7 @@
                                Register scratch,
                                bool testing_instance_cids) {
   Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+      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));
@@ -1392,11 +1346,12 @@
           scratch,
           target::Class::host_type_arguments_field_offset_in_words_offset()));
   __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+  __ j(NOT_EQUAL, &equal_cids_but_generic);
   __ jmp(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
-  // different representations) or two integer types or two type types.
+  // different representations), two integer types, two list types or two type
+  // types.
   __ Bind(&different_cids);
   __ cmpl(cid1, Immediate(kNumPredefinedCids));
   __ j(ABOVE_EQUAL, not_equal);
@@ -1406,25 +1361,42 @@
   JumpIfNotInteger(assembler, scratch, &not_integer);
 
   // First type is an integer. Check if the second is an integer too.
-  JumpIfInteger(assembler, cid2, equal);
+  __ movl(scratch, cid2);
+  JumpIfInteger(assembler, scratch, equal);
   // Integer types are only equivalent to other integer types.
   __ jmp(not_equal);
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1,
+  __ movl(scratch, cid1);
+  JumpIfNotString(assembler, scratch,
                   testing_instance_cids ? &not_integer_or_string : not_equal);
 
   // First type is a String. Check if the second is a String too.
-  JumpIfString(assembler, cid2, equal);
+  __ movl(scratch, cid2);
+  JumpIfString(assembler, scratch, equal);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
   if (testing_instance_cids) {
     __ Bind(&not_integer_or_string);
+    // Check if both are List types.
+    __ movl(scratch, cid1);
+    JumpIfNotList(assembler, scratch, &not_integer_or_string_or_list);
+
+    // First type is a List. Check if the second is a List too.
+    __ movl(scratch, cid2);
+    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);
+
+    __ 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 Type.
+    // or integer or List or Type.
     JumpIfNotType(assembler, cid1, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index b7109e8..8a57264 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -24,26 +24,6 @@
 
 #define __ assembler->
 
-intptr_t AsmIntrinsifier::ParameterSlotFromSp() {
-  return 0;
-}
-
-void AsmIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(!IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-
-  assembler->Comment("IntrinsicCallPrologue");
-  assembler->movq(CALLEE_SAVED_TEMP, ARGS_DESC_REG);
-}
-
-void AsmIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  assembler->Comment("IntrinsicCallEpilogue");
-  assembler->movq(ARGS_DESC_REG, CALLEE_SAVED_TEMP);
-}
-
 // Allocate a GrowableObjectArray using the backing array specified.
 // On stack: type argument (+2), data (+1), return-address (+0).
 void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
@@ -1026,21 +1006,6 @@
   __ jmp(&is_false, Assembler::kNearJump);
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ movq(RAX, Address(RSP, +1 * target::kWordSize));
-  __ movsd(XMM0, FieldAddress(RAX, target::Double::value_offset()));
-  __ OBJ(cvttsd2si)(RAX, XMM0);
-  // Overflow is signalled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ movq(RCX, RAX);
-  __ OBJ(shl)(RCX, Immediate(1));
-  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
-  __ SmiTag(RAX);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
@@ -1080,26 +1045,6 @@
   __ Bind(normal_ir_body);
 }
 
-void AsmIntrinsifier::MathSqrt(Assembler* assembler, Label* normal_ir_body) {
-  Label is_smi, double_op;
-  TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
-  // Argument is double and is in RAX.
-  __ movsd(XMM1, FieldAddress(RAX, target::Double::value_offset()));
-  __ Bind(&double_op);
-  __ sqrtsd(XMM0, XMM1);
-  const Class& double_class = DoubleClass();
-  __ TryAllocate(double_class, normal_ir_body, Assembler::kFarJump,
-                 RAX,  // Result register.
-                 R13);
-  __ movsd(FieldAddress(RAX, target::Double::value_offset()), XMM0);
-  __ ret();
-  __ Bind(&is_smi);
-  __ SmiUntag(RAX);
-  __ OBJ(cvtsi2sd)(XMM1, RAX);
-  __ jmp(&double_op);
-  __ Bind(normal_ir_body);
-}
-
 //    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
 //    _state[kSTATE_LO] = state & _MASK_32;
 //    _state[kSTATE_HI] = state >> 32;
@@ -1184,6 +1129,11 @@
              kIfNotInRange, target);
 }
 
+static void JumpIfNotList(Assembler* assembler, Register cid, Label* target) {
+  RangeCheck(assembler, cid, kArrayCid, kGrowableObjectArrayCid, kIfNotInRange,
+             target);
+}
+
 static void JumpIfType(Assembler* assembler, Register cid, Label* target) {
   RangeCheck(assembler, cid, kTypeCid, kFunctionTypeCid, kIfInRange, target);
 }
@@ -1275,7 +1225,7 @@
                                Register scratch,
                                bool testing_instance_cids) {
   Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+      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));
@@ -1297,11 +1247,12 @@
           scratch,
           target::Class::host_type_arguments_field_offset_in_words_offset()));
   __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+  __ j(NOT_EQUAL, &equal_cids_but_generic);
   __ jmp(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
-  // different representations) or two integer types or two type types.
+  // different representations), two integer types, two list types or two type
+  // types.
   __ Bind(&different_cids);
   __ cmpq(cid1, Immediate(kNumPredefinedCids));
   __ j(ABOVE_EQUAL, not_equal);
@@ -1311,25 +1262,42 @@
   JumpIfNotInteger(assembler, scratch, &not_integer);
 
   // First type is an integer. Check if the second is an integer too.
-  JumpIfInteger(assembler, cid2, equal);
+  __ movq(scratch, cid2);
+  JumpIfInteger(assembler, scratch, equal);
   // Integer types are only equivalent to other integer types.
   __ jmp(not_equal);
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1,
+  __ movq(scratch, cid1);
+  JumpIfNotString(assembler, scratch,
                   testing_instance_cids ? &not_integer_or_string : not_equal);
 
   // First type is a String. Check if the second is a String too.
-  JumpIfString(assembler, cid2, equal);
+  __ movq(scratch, cid2);
+  JumpIfString(assembler, scratch, equal);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
   if (testing_instance_cids) {
     __ Bind(&not_integer_or_string);
+    // Check if both are List types.
+    __ movq(scratch, cid1);
+    JumpIfNotList(assembler, scratch, &not_integer_or_string_or_list);
+
+    // First type is a List. Check if the second is a List too.
+    __ movq(scratch, cid2);
+    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);
+
+    __ 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 Type.
+    // or integer or List or Type.
     JumpIfNotType(assembler, cid1, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index c41b62d..abb82a1 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -1041,6 +1041,18 @@
                       int32_t offset,
                       Condition cond = AL);
 
+  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
+    LoadDFromOffset(EvenDRegisterOf(dst), base, offset);
+  }
+  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
+    StoreDToOffset(EvenDRegisterOf(src), base, offset);
+  }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      vmovd(EvenDRegisterOf(dst), EvenDRegisterOf(src));
+    }
+  }
+
   void LoadMultipleDFromOffset(DRegister first,
                                intptr_t count,
                                Register base,
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 596ee9d..3826473 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -1808,6 +1808,18 @@
     StoreQToOffset(src, base, offset - kHeapObjectTag);
   }
 
+  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
+    LoadDFromOffset(dst, base, offset);
+  }
+  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
+    StoreDToOffset(src, base, offset);
+  }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      fmovdd(dst, src);
+    }
+  }
+
   void LoadCompressed(Register dest, const Address& slot);
   void LoadCompressedFromOffset(Register dest, Register base, int32_t offset);
   void LoadCompressedSmi(Register dest, const Address& slot);
diff --git a/runtime/vm/compiler/assembler/assembler_base.cc b/runtime/vm/compiler/assembler/assembler_base.cc
index 45e6a6f..9dbd0ff 100644
--- a/runtime/vm/compiler/assembler/assembler_base.cc
+++ b/runtime/vm/compiler/assembler/assembler_base.cc
@@ -299,7 +299,8 @@
 }
 
 bool AssemblerBase::EmittingComments() {
-  return FLAG_code_comments || FLAG_disassemble || FLAG_disassemble_optimized;
+  return FLAG_code_comments || FLAG_disassemble || FLAG_disassemble_optimized ||
+         FLAG_disassemble_stubs;
 }
 
 void AssemblerBase::Stop(const char* message) {
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 3726cbc..091b2a1 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -654,6 +654,19 @@
   void StoreMemoryValue(Register src, Register base, int32_t offset) {
     movl(Address(base, offset), src);
   }
+
+  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
+    movsd(dst, Address(base, offset));
+  }
+  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
+    movsd(Address(base, offset), src);
+  }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      movaps(dst, src);
+    }
+  }
+
   void LoadAcquire(Register dst, Register address, int32_t offset = 0) {
     // On intel loads have load-acquire behavior (i.e. loads are not re-ordered
     // with other loads).
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 27b45dd..e32a0a4 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -1028,6 +1028,18 @@
     movq(Address(base, offset), src);
   }
 
+  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
+    movsd(dst, Address(base, offset));
+  }
+  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
+    movsd(Address(base, offset), src);
+  }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      movaps(dst, src);
+    }
+  }
+
 #if defined(USING_THREAD_SANITIZER)
   void TsanLoadAcquire(Address addr);
   void TsanStoreRelease(Address addr);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 5ecdd9e..d920a61 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -564,7 +564,7 @@
 
 static bool IsPusher(Instruction* instr) {
   if (auto def = instr->AsDefinition()) {
-    return def->HasTemp();
+    return def->HasTemp() && (instr->representation() == kTagged);
   }
   return false;
 }
@@ -771,6 +771,7 @@
     assembler()->set_lr_state(lr_state);
 #endif  // defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
     set_current_instruction(slow_path->instruction());
+    set_current_block(current_instruction_->GetBlock());
     SpecialStatsBegin(stats_tag);
     BeginCodeSourceRange(slow_path->instruction()->source());
     DEBUG_ONLY(current_instruction_ = slow_path->instruction());
@@ -779,6 +780,7 @@
     EndCodeSourceRange(slow_path->instruction()->source());
     SpecialStatsEnd(stats_tag);
     set_current_instruction(nullptr);
+    set_current_block(nullptr);
   }
   // All code generated by deferred deopt info is treated as in the root
   // function.
@@ -1531,13 +1533,11 @@
     Register class_id_reg,
     compiler::Label* is_instance_lbl) {
   assembler()->Comment("ListTypeCheck");
-  compiler::Label unknown;
-  GrowableArray<intptr_t> args;
-  args.Add(kArrayCid);
-  args.Add(kGrowableObjectArrayCid);
-  args.Add(kImmutableArrayCid);
-  CheckClassIds(class_id_reg, args, is_instance_lbl, &unknown);
-  assembler()->Bind(&unknown);
+  COMPILE_ASSERT((kImmutableArrayCid == kArrayCid + 1) &&
+                 (kGrowableObjectArrayCid == kArrayCid + 2));
+  CidRangeVector ranges;
+  ranges.Add({kArrayCid, kGrowableObjectArrayCid});
+  GenerateCidRangesCheck(assembler(), class_id_reg, ranges, is_instance_lbl);
 }
 
 void FlowGraphCompiler::EmitComment(Instruction* instr) {
@@ -1568,6 +1568,18 @@
   return kNoRegister;
 }
 
+// Allocate a FPU register that is not explictly blocked.
+static FpuRegister AllocateFreeFpuRegister(bool* blocked_registers) {
+  for (intptr_t regno = 0; regno < kNumberOfFpuRegisters; regno++) {
+    if (!blocked_registers[regno]) {
+      blocked_registers[regno] = true;
+      return static_cast<FpuRegister>(regno);
+    }
+  }
+  UNREACHABLE();
+  return kNoFpuRegister;
+}
+
 void FlowGraphCompiler::AllocateRegistersLocally(Instruction* instr) {
   ASSERT(!is_optimizing());
   instr->InitializeLocationSummary(zone(), false);  // Not optimizing.
@@ -1575,13 +1587,15 @@
   LocationSummary* locs = instr->locs();
 
   bool blocked_registers[kNumberOfCpuRegisters];
+  bool blocked_fpu_registers[kNumberOfFpuRegisters];
 
   // Connect input with peephole output for some special cases. All other
   // cases are handled by simply allocating registers and generating code.
   if (top_of_stack_ != nullptr) {
     const intptr_t p = locs->input_count() - 1;
     Location peephole = top_of_stack_->locs()->out(0);
-    if (locs->in(p).IsUnallocated() || locs->in(p).IsConstant()) {
+    if ((instr->RequiredInputRepresentation(p) == kTagged) &&
+        (locs->in(p).IsUnallocated() || locs->in(p).IsConstant())) {
       // If input is unallocated, match with an output register, if set. Also,
       // if input is a direct constant, but the peephole output is a register,
       // use that register to avoid wasting the already generated code.
@@ -1596,6 +1610,9 @@
   for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
     blocked_registers[i] = (kDartAvailableCpuRegs & (1 << i)) == 0;
   }
+  for (intptr_t i = 0; i < kNumberOfFpuRegisters; i++) {
+    blocked_fpu_registers[i] = false;
+  }
 
   // Mark all fixed input, temp and output registers as used.
   for (intptr_t i = 0; i < locs->input_count(); i++) {
@@ -1604,6 +1621,10 @@
       // Check that a register is not specified twice in the summary.
       ASSERT(!blocked_registers[loc.reg()]);
       blocked_registers[loc.reg()] = true;
+    } else if (loc.IsFpuRegister()) {
+      // Check that a register is not specified twice in the summary.
+      ASSERT(!blocked_fpu_registers[loc.fpu_reg()]);
+      blocked_fpu_registers[loc.fpu_reg()] = true;
     }
   }
 
@@ -1613,6 +1634,10 @@
       // Check that a register is not specified twice in the summary.
       ASSERT(!blocked_registers[loc.reg()]);
       blocked_registers[loc.reg()] = true;
+    } else if (loc.IsFpuRegister()) {
+      // Check that a register is not specified twice in the summary.
+      ASSERT(!blocked_fpu_registers[loc.fpu_reg()]);
+      blocked_fpu_registers[loc.fpu_reg()] = true;
     }
   }
 
@@ -1620,23 +1645,50 @@
     // Fixed output registers are allowed to overlap with
     // temps and inputs.
     blocked_registers[locs->out(0).reg()] = true;
+  } else if (locs->out(0).IsFpuRegister()) {
+    // Fixed output registers are allowed to overlap with
+    // temps and inputs.
+    blocked_fpu_registers[locs->out(0).fpu_reg()] = true;
   }
 
   // Allocate all unallocated input locations.
   const bool should_pop = !instr->IsPushArgument();
+  Register fpu_unboxing_temp = kNoRegister;
   for (intptr_t i = locs->input_count() - 1; i >= 0; i--) {
     Location loc = locs->in(i);
     Register reg = kNoRegister;
+    FpuRegister fpu_reg = kNoFpuRegister;
     if (loc.IsRegister()) {
       reg = loc.reg();
+    } else if (loc.IsFpuRegister()) {
+      fpu_reg = loc.fpu_reg();
     } else if (loc.IsUnallocated()) {
-      ASSERT((loc.policy() == Location::kRequiresRegister) ||
-             (loc.policy() == Location::kWritableRegister) ||
-             (loc.policy() == Location::kPrefersRegister) ||
-             (loc.policy() == Location::kAny));
-      reg = AllocateFreeRegister(blocked_registers);
-      locs->set_in(i, Location::RegisterLocation(reg));
+      switch (loc.policy()) {
+        case Location::kRequiresRegister:
+        case Location::kWritableRegister:
+        case Location::kPrefersRegister:
+        case Location::kAny:
+          reg = AllocateFreeRegister(blocked_registers);
+          locs->set_in(i, Location::RegisterLocation(reg));
+          break;
+        case Location::kRequiresFpuRegister:
+          fpu_reg = AllocateFreeFpuRegister(blocked_fpu_registers);
+          locs->set_in(i, Location::FpuRegisterLocation(fpu_reg));
+          break;
+        default:
+          UNREACHABLE();
+      }
     }
+
+    if (fpu_reg != kNoFpuRegister) {
+      ASSERT(reg == kNoRegister);
+      // Allocate temporary CPU register for unboxing, but only once.
+      if (fpu_unboxing_temp == kNoRegister) {
+        fpu_unboxing_temp = AllocateFreeRegister(blocked_registers);
+      }
+      reg = fpu_unboxing_temp;
+    }
+
     ASSERT(reg != kNoRegister || loc.IsConstant());
 
     // Inputs are consumed from the simulated frame (or a peephole push/pop).
@@ -1646,7 +1698,8 @@
         if (!loc.IsConstant()) {
           // Moves top of stack location of the peephole into the required
           // input. None of the required moves needs a temp register allocator.
-          EmitMove(locs->in(i), top_of_stack_->locs()->out(0), nullptr);
+          EmitMove(Location::RegisterLocation(reg),
+                   top_of_stack_->locs()->out(0), nullptr);
         }
         top_of_stack_ = nullptr;  // consumed!
       } else if (loc.IsConstant()) {
@@ -1654,6 +1707,24 @@
       } else {
         assembler()->PopRegister(reg);
       }
+      if (!loc.IsConstant()) {
+        switch (instr->RequiredInputRepresentation(i)) {
+          case kUnboxedDouble:
+            ASSERT(fpu_reg != kNoFpuRegister);
+            ASSERT(instr->SpeculativeModeOfInput(i) ==
+                   Instruction::kNotSpeculative);
+            assembler()->LoadUnboxedDouble(
+                fpu_reg, reg,
+                compiler::target::Double::value_offset() - kHeapObjectTag);
+            break;
+          default:
+            // No automatic unboxing for other representations.
+            ASSERT(fpu_reg == kNoFpuRegister);
+            break;
+        }
+      }
+    } else {
+      ASSERT(fpu_reg == kNoFpuRegister);
     }
   }
 
@@ -1661,9 +1732,20 @@
   for (intptr_t i = 0; i < locs->temp_count(); i++) {
     Location loc = locs->temp(i);
     if (loc.IsUnallocated()) {
-      ASSERT(loc.policy() == Location::kRequiresRegister);
-      loc = Location::RegisterLocation(AllocateFreeRegister(blocked_registers));
-      locs->set_temp(i, loc);
+      switch (loc.policy()) {
+        case Location::kRequiresRegister:
+          loc = Location::RegisterLocation(
+              AllocateFreeRegister(blocked_registers));
+          locs->set_temp(i, loc);
+          break;
+        case Location::kRequiresFpuRegister:
+          loc = Location::FpuRegisterLocation(
+              AllocateFreeFpuRegister(blocked_fpu_registers));
+          locs->set_temp(i, loc);
+          break;
+        default:
+          UNREACHABLE();
+      }
     }
   }
 
@@ -1681,6 +1763,9 @@
         result_location = locs->in(0);
         break;
       case Location::kRequiresFpuRegister:
+        result_location = Location::FpuRegisterLocation(
+            AllocateFreeFpuRegister(blocked_fpu_registers));
+        break;
       case Location::kRequiresStackSlot:
         UNREACHABLE();
         break;
@@ -2349,7 +2434,7 @@
   // If there are no valid class ranges, the check will fail.  If we are
   // supposed to fall-through in the positive case, we'll explicitly jump to
   // the [outside_range_lbl].
-  if (cid_ranges.length() == 1 && cid_ranges[0].IsIllegalRange()) {
+  if (cid_ranges.is_empty()) {
     if (fall_through_if_inside) {
       assembler->Jump(outside_range_lbl);
     }
@@ -3104,17 +3189,11 @@
 
 void FlowGraphCompiler::FrameStatePush(Definition* defn) {
   Representation rep = defn->representation();
-  if ((rep == kUnboxedDouble) || (rep == kUnboxedFloat64x2) ||
-      (rep == kUnboxedFloat32x4)) {
-    // The LoadField instruction may lie about its representation in unoptimized
-    // code for Dart fields because Definition::representation() can't depend on
-    // the type of compilation but MakeLocationSummary and EmitNativeCode can.
-    ASSERT(defn->IsLoadField() &&
-           defn->AsLoadField()->IsUnboxedDartFieldLoad());
-    ASSERT(defn->locs()->out(0).IsRegister());
+  ASSERT(!is_optimizing());
+  if ((rep == kUnboxedDouble) && defn->locs()->out(0).IsFpuRegister()) {
+    // Output value is boxed in the instruction epilogue.
     rep = kTagged;
   }
-  ASSERT(!is_optimizing());
   ASSERT((rep == kTagged) || (rep == kUntagged) ||
          RepresentationUtils::IsUnboxedInteger(rep));
   ASSERT(rep != kUntagged || flow_graph_.IsIrregexpFunction());
@@ -3184,10 +3263,18 @@
       (compiler->CurrentTryIndex() != kInvalidTryIndex)) {
     Environment* env =
         compiler->SlowPathEnvironmentFor(instruction(), num_args);
-    if (FLAG_precompiled_mode) {
+    // TODO(47044): Should be able to say `FLAG_precompiled_mode` instead.
+    if (CompilerState::Current().is_aot()) {
       compiler->RecordCatchEntryMoves(env, try_index_);
-    } else if (env != nullptr) {
+    } else if (compiler->is_optimizing()) {
+      ASSERT(env != nullptr);
       compiler->AddSlowPathDeoptInfo(deopt_id, env);
+    } else {
+      ASSERT(env == nullptr);
+      const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
+      // Add deoptimization continuation point.
+      compiler->AddCurrentDescriptor(UntaggedPcDescriptors::kDeopt,
+                                     deopt_id_after, instruction()->source());
     }
   }
   if (!use_shared_stub) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 0171f8b..c49546e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -298,6 +298,17 @@
   const Register result_;
 };
 
+class DoubleToIntegerSlowPath : public TemplateSlowPathCode<Instruction> {
+ public:
+  DoubleToIntegerSlowPath(Instruction* instruction, FpuRegister value_reg)
+      : TemplateSlowPathCode(instruction), value_reg_(value_reg) {}
+
+  virtual void EmitNativeCode(FlowGraphCompiler* compiler);
+
+ private:
+  FpuRegister value_reg_;
+};
+
 // Slow path code which calls runtime entry to throw an exception.
 class ThrowErrorSlowPathCode : public TemplateSlowPathCode<Instruction> {
  public:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 2e5a194..746b275 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -241,7 +241,22 @@
   }
   Definition* defn = instr->AsDefinition();
   if ((defn != NULL) && defn->HasTemp()) {
-    __ Push(defn->locs()->out(0).reg());
+    const Location value = defn->locs()->out(0);
+    if (value.IsRegister()) {
+      __ PushRegister(value.reg());
+    } else if (value.IsFpuRegister()) {
+      ASSERT(instr->representation() == kUnboxedDouble);
+      // In unoptimized code at instruction epilogue the only
+      // live register is an output register.
+      instr->locs()->live_registers()->Clear();
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
+      GenerateNonLazyDeoptableStubCall(
+          InstructionSource(),  // No token position.
+          StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
+      __ PushRegister(BoxDoubleStubABI::kResultReg);
+    } else {
+      UNREACHABLE();
+    }
   }
 }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index d7b3759..4cc8af9 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -232,7 +232,22 @@
   }
   Definition* defn = instr->AsDefinition();
   if ((defn != NULL) && defn->HasTemp()) {
-    __ Push(defn->locs()->out(0).reg());
+    const Location value = defn->locs()->out(0);
+    if (value.IsRegister()) {
+      __ PushRegister(value.reg());
+    } else if (value.IsFpuRegister()) {
+      ASSERT(instr->representation() == kUnboxedDouble);
+      // In unoptimized code at instruction epilogue the only
+      // live register is an output register.
+      instr->locs()->live_registers()->Clear();
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
+      GenerateNonLazyDeoptableStubCall(
+          InstructionSource(),  // No token position.
+          StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
+      __ PushRegister(BoxDoubleStubABI::kResultReg);
+    } else {
+      UNREACHABLE();
+    }
   }
 }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 4634363..5201548 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -363,7 +363,17 @@
   if ((defn != NULL) && defn->HasTemp()) {
     Location value = defn->locs()->out(0);
     if (value.IsRegister()) {
-      __ pushl(value.reg());
+      __ PushRegister(value.reg());
+    } else if (value.IsFpuRegister()) {
+      ASSERT(instr->representation() == kUnboxedDouble);
+      // In unoptimized code at instruction epilogue the only
+      // live register is an output register.
+      instr->locs()->live_registers()->Clear();
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
+      GenerateNonLazyDeoptableStubCall(
+          InstructionSource(),  // No token position.
+          StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
+      __ PushRegister(BoxDoubleStubABI::kResultReg);
     } else if (value.IsConstant()) {
       __ PushObject(value.constant());
     } else {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 6092741..0dcad25 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -235,7 +235,17 @@
   if ((defn != NULL) && defn->HasTemp()) {
     Location value = defn->locs()->out(0);
     if (value.IsRegister()) {
-      __ pushq(value.reg());
+      __ PushRegister(value.reg());
+    } else if (value.IsFpuRegister()) {
+      ASSERT(instr->representation() == kUnboxedDouble);
+      // In unoptimized code at instruction epilogue the only
+      // live register is an output register.
+      instr->locs()->live_registers()->Clear();
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
+      GenerateNonLazyDeoptableStubCall(
+          InstructionSource(),  // No token position.
+          StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
+      __ PushRegister(BoxDoubleStubABI::kResultReg);
     } else if (value.IsConstant()) {
       __ PushObject(value.constant());
     } else {
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 527fa42..d15f357 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -54,31 +54,16 @@
 DECLARE_FLAG(bool, inline_alloc);
 DECLARE_FLAG(bool, use_slow_path);
 
-class SubclassFinder {
+class SubtypeFinder {
  public:
-  SubclassFinder(Zone* zone,
-                 GrowableArray<intptr_t>* cids,
-                 bool include_abstract)
+  SubtypeFinder(Zone* zone,
+                GrowableArray<intptr_t>* cids,
+                bool include_abstract)
       : array_handles_(zone),
         class_handles_(zone),
         cids_(cids),
         include_abstract_(include_abstract) {}
 
-  void ScanSubClasses(const Class& klass) {
-    if (include_abstract_ || !klass.is_abstract()) {
-      cids_->Add(klass.id());
-    }
-    ScopedHandle<GrowableObjectArray> array(&array_handles_);
-    ScopedHandle<Class> subclass(&class_handles_);
-    *array = klass.direct_subclasses();
-    if (!array->IsNull()) {
-      for (intptr_t i = 0; i < array->Length(); ++i) {
-        *subclass ^= array->At(i);
-        ScanSubClasses(*subclass);
-      }
-    }
-  }
-
   void ScanImplementorClasses(const Class& klass) {
     // An implementor of [klass] is
     //    * the [klass] itself.
@@ -133,154 +118,120 @@
   }
   CidRangeVector& ranges = (*cid_ranges)[klass.id()];
   if (ranges.length() == 0) {
-    if (!FLAG_precompiled_mode) {
-      BuildRangesForJIT(table, &ranges, klass, /*use_subtype_test=*/true,
-                        include_abstract, exclude_null);
-    } else {
-      BuildRangesFor(table, &ranges, klass, /*use_subtype_test=*/true,
-                     include_abstract, exclude_null);
-    }
+    BuildRangesFor(table, &ranges, klass, include_abstract, exclude_null);
   }
   return ranges;
 }
 
-const CidRangeVector& HierarchyInfo::SubclassRangesForClass(
-    const Class& klass) {
-  ClassTable* table = thread()->isolate_group()->class_table();
-  const intptr_t cid_count = table->NumCids();
-  if (cid_subclass_ranges_ == nullptr) {
-    cid_subclass_ranges_.reset(new CidRangeVector[cid_count]);
+class CidCheckerForRanges : public ValueObject {
+ public:
+  CidCheckerForRanges(Thread* thread,
+                      ClassTable* table,
+                      const Class& cls,
+                      bool include_abstract,
+                      bool exclude_null)
+      : thread_(thread),
+        table_(table),
+        supertype_(AbstractType::Handle(zone(), cls.RareType())),
+        include_abstract_(include_abstract),
+        exclude_null_(exclude_null),
+        to_check_(Class::Handle(zone())),
+        subtype_(AbstractType::Handle(zone())) {}
+
+  bool MayInclude(intptr_t cid) {
+    if (!table_->HasValidClassAt(cid)) return true;
+    if (cid == kTypeArgumentsCid) return true;
+    if (cid == kVoidCid) return true;
+    if (cid == kDynamicCid) return true;
+    if (cid == kNeverCid) return true;
+    if (!exclude_null_ && cid == kNullCid) return true;
+    to_check_ = table_->At(cid);
+    ASSERT(!to_check_.IsNull());
+    if (!include_abstract_ && to_check_.is_abstract()) return true;
+    return to_check_.IsTopLevel();
   }
 
-  CidRangeVector& ranges = cid_subclass_ranges_[klass.id()];
-  if (ranges.length() == 0) {
-    if (!FLAG_precompiled_mode) {
-      BuildRangesForJIT(table, &ranges, klass,
-                        /*use_subtype_test=*/true,
-                        /*include_abstract=*/false,
-                        /*exclude_null=*/false);
-    } else {
-      BuildRangesFor(table, &ranges, klass,
-                     /*use_subtype_test=*/false,
-                     /*include_abstract=*/false,
-                     /*exclude_null=*/false);
-    }
+  bool MustInclude(intptr_t cid) {
+    ASSERT(!MayInclude(cid));
+    if (cid == kNullCid) return false;
+    to_check_ = table_->At(cid);
+    subtype_ = to_check_.RareType();
+    // Create local zone because deep hierarchies may allocate lots of handles.
+    StackZone stack_zone(thread_);
+    HANDLESCOPE(thread_);
+    return subtype_.IsSubtypeOf(supertype_, Heap::kNew);
   }
-  return ranges;
-}
+
+ private:
+  Zone* zone() const { return thread_->zone(); }
+
+  Thread* const thread_;
+  ClassTable* const table_;
+  const AbstractType& supertype_;
+  const bool include_abstract_;
+  const bool exclude_null_;
+  Class& to_check_;
+  AbstractType& subtype_;
+};
 
 // Build the ranges either for:
 //    "<obj> as <Type>", or
 //    "<obj> is <Type>"
-void HierarchyInfo::BuildRangesFor(ClassTable* table,
-                                   CidRangeVector* ranges,
-                                   const Class& klass,
-                                   bool use_subtype_test,
-                                   bool include_abstract,
-                                   bool exclude_null) {
-  Zone* zone = thread()->zone();
-  ClassTable* class_table = thread()->isolate_group()->class_table();
-
-  // Only really used if `use_subtype_test == true`.
-  const Type& dst_type = Type::Handle(zone, Type::RawCast(klass.RareType()));
-  AbstractType& cls_type = AbstractType::Handle(zone);
-
-  Class& cls = Class::Handle(zone);
-  AbstractType& super_type = AbstractType::Handle(zone);
-  const intptr_t cid_count = table->NumCids();
-
+void HierarchyInfo::BuildRangesUsingClassTableFor(ClassTable* table,
+                                                  CidRangeVector* ranges,
+                                                  const Class& klass,
+                                                  bool include_abstract,
+                                                  bool exclude_null) {
+  CidCheckerForRanges checker(thread(), table, klass, include_abstract,
+                              exclude_null);
   // Iterate over all cids to find the ones to be included in the ranges.
+  const intptr_t cid_count = table->NumCids();
   intptr_t start = -1;
   intptr_t end = -1;
   for (intptr_t cid = kInstanceCid; cid < cid_count; ++cid) {
-    // Create local zone because deep hierarchies may allocate lots of handles
-    // within one iteration of this loop.
-    StackZone stack_zone(thread());
-    HANDLESCOPE(thread());
-
     // Some cases are "don't care", i.e., they may or may not be included,
     // whatever yields the least number of ranges for efficiency.
-    if (!table->HasValidClassAt(cid)) continue;
-    if (cid == kTypeArgumentsCid) continue;
-    if (cid == kVoidCid) continue;
-    if (cid == kDynamicCid) continue;
-    if (cid == kNeverCid) continue;
-    if (cid == kNullCid && !exclude_null) continue;
-    cls = table->At(cid);
-    if (!include_abstract && cls.is_abstract()) continue;
-    if (cls.IsTopLevel()) continue;
-
-    // We are either interested in [CidRange]es of subclasses or subtypes.
-    bool test_succeeded = false;
-    if (cid == kNullCid) {
-      ASSERT(exclude_null);
-      test_succeeded = false;
-    } else if (use_subtype_test) {
-      cls_type = cls.RareType();
-      test_succeeded = cls_type.IsSubtypeOf(dst_type, Heap::kNew);
-    } else {
-      while (!cls.IsObjectClass()) {
-        if (cls.ptr() == klass.ptr()) {
-          test_succeeded = true;
-          break;
-        }
-        super_type = cls.super_type();
-        const intptr_t type_class_id = super_type.type_class_id();
-        cls = class_table->At(type_class_id);
-      }
-    }
-
-    if (test_succeeded) {
+    if (checker.MayInclude(cid)) continue;
+    if (checker.MustInclude(cid)) {
       // On success, open a new or continue any open range.
       if (start == -1) start = cid;
       end = cid;
     } else if (start != -1) {
       // On failure, close any open range from start to end
       // (the latter is the most recent succesful "do-care" cid).
-      ASSERT(start <= end);
-      CidRange range(start, end);
-      ranges->Add(range);
-      start = -1;
-      end = -1;
+      ranges->Add({start, end});
+      start = end = -1;
     }
   }
 
-  // Construct last range (either close open one, or add invalid).
+  // Construct last range if there is a open one.
   if (start != -1) {
-    ASSERT(start <= end);
-    CidRange range(start, end);
-    ranges->Add(range);
-  } else if (ranges->length() == 0) {
-    CidRange range;
-    ASSERT(range.IsIllegalRange());
-    ranges->Add(range);
+    ranges->Add({start, end});
   }
 }
 
-void HierarchyInfo::BuildRangesForJIT(ClassTable* table,
-                                      CidRangeVector* ranges,
-                                      const Class& dst_klass,
-                                      bool use_subtype_test,
-                                      bool include_abstract,
-                                      bool exclude_null) {
-  if (dst_klass.InVMIsolateHeap()) {
-    BuildRangesFor(table, ranges, dst_klass, use_subtype_test, include_abstract,
-                   exclude_null);
+void HierarchyInfo::BuildRangesFor(ClassTable* table,
+                                   CidRangeVector* ranges,
+                                   const Class& dst_klass,
+                                   bool include_abstract,
+                                   bool exclude_null) {
+  // Use the class table in cases where the direct subclasses and implementors
+  // are not filled out.
+  if (dst_klass.InVMIsolateHeap() || dst_klass.id() == kInstanceCid) {
+    BuildRangesUsingClassTableFor(table, ranges, dst_klass, include_abstract,
+                                  exclude_null);
     return;
   }
 
   Zone* zone = thread()->zone();
   GrowableArray<intptr_t> cids;
-  SubclassFinder finder(zone, &cids, include_abstract);
+  SubtypeFinder finder(zone, &cids, include_abstract);
   {
     SafepointReadRwLocker ml(thread(),
                              thread()->isolate_group()->program_lock());
-    if (use_subtype_test) {
-      finder.ScanImplementorClasses(dst_klass);
-    } else {
-      finder.ScanSubClasses(dst_klass);
-    }
+    finder.ScanImplementorClasses(dst_klass);
   }
+  if (cids.is_empty()) return;
 
   // Sort all collected cids.
   intptr_t* cids_array = cids.data();
@@ -296,68 +247,57 @@
         });
 
   // Build ranges of all the cids.
-  Class& klass = Class::Handle();
+  CidCheckerForRanges checker(thread(), table, dst_klass, include_abstract,
+                              exclude_null);
   intptr_t left_cid = -1;
-  intptr_t last_cid = -1;
+  intptr_t right_cid = -1;
+  intptr_t previous_cid = -1;
   for (intptr_t i = 0; i < cids.length(); ++i) {
-    if (left_cid == -1) {
-      left_cid = last_cid = cids[i];
-    } else {
-      const intptr_t current_cid = cids[i];
+    const intptr_t current_cid = cids[i];
+    if (current_cid == previous_cid) continue;  // Skip duplicates.
 
-      // Skip duplicates.
-      if (current_cid == last_cid) continue;
+    // We sorted, after all!
+    RELEASE_ASSERT(previous_cid < current_cid);
 
-      // Consecutive numbers cids are ok.
-      if (current_cid == (last_cid + 1)) {
-        last_cid = current_cid;
-      } else {
-        // We sorted, after all!
-        RELEASE_ASSERT(last_cid < current_cid);
-
-        intptr_t j = last_cid + 1;
-        for (; j < current_cid; ++j) {
-          if (table->HasValidClassAt(j)) {
-            klass = table->At(j);
-            if (!klass.IsTopLevel()) {
-              // If we care about abstract classes also, we cannot skip over any
-              // arbitrary abstract class, only those which are subtypes.
-              if (include_abstract) {
-                break;
-              }
-
-              // If the class is concrete we cannot skip over it.
-              if (!klass.is_abstract()) {
-                break;
-              }
-            }
-          }
-        }
-
-        if (current_cid == j) {
-          // If there's only abstract cids between [last_cid] and the
-          // [current_cid] then we connect them.
-          last_cid = current_cid;
-        } else {
-          // Finish the current open cid range and start a new one.
-          ranges->Add(CidRange{left_cid, last_cid});
-          left_cid = last_cid = current_cid;
+    if (left_cid != -1) {
+      ASSERT(previous_cid != -1);
+      // Check the cids between the previous cid from cids and this one.
+      for (intptr_t j = previous_cid + 1; j < current_cid; ++j) {
+        // Stop if we find a do-care class before reaching the current cid.
+        if (!checker.MayInclude(j)) {
+          ranges->Add({left_cid, right_cid});
+          left_cid = right_cid = -1;
+          break;
         }
       }
     }
+    previous_cid = current_cid;
+
+    if (checker.MayInclude(current_cid)) continue;
+    if (checker.MustInclude(current_cid)) {
+      if (left_cid == -1) {
+        // Open a new range starting at this cid.
+        left_cid = current_cid;
+      }
+      right_cid = current_cid;
+    } else if (left_cid != -1) {
+      // Close the existing range.
+      ranges->Add({left_cid, right_cid});
+      left_cid = right_cid = -1;
+    }
   }
 
   // If there is an open cid-range which we haven't finished yet, we'll
   // complete it.
   if (left_cid != -1) {
-    ranges->Add(CidRange{left_cid, last_cid});
+    ranges->Add(CidRange{left_cid, right_cid});
   }
 }
 
 bool HierarchyInfo::CanUseSubtypeRangeCheckFor(const AbstractType& type) {
   ASSERT(type.IsFinalized());
 
-  if (!type.IsInstantiated() || !type.IsType() || type.IsDartFunctionType()) {
+  if (!type.IsInstantiated() || !type.IsType()) {
     return false;
   }
 
@@ -429,17 +369,6 @@
   ASSERT(type_class.NumTypeParameters() > 0 &&
          type.arguments() != TypeArguments::null());
 
-  // If the type class is implemented the different implementations might have
-  // their type argument vector stored at different offsets and we can therefore
-  // not perform our optimized [CidRange]-based implementation.
-  //
-  // TODO(kustermann): If the class is implemented but all implementations
-  // store the instantator type argument vector at the same offset we can
-  // still do it!
-  if (type_class.is_implemented()) {
-    return false;
-  }
-
   const TypeArguments& ta =
       TypeArguments::Handle(zone, Type::Cast(type).arguments());
   ASSERT(ta.Length() == num_type_arguments);
@@ -477,11 +406,10 @@
                               /*exclude_null=*/true);
     if (ranges.length() == 1) {
       const CidRangeValue& range = ranges[0];
-      if (!range.IsIllegalRange()) {
-        *lower_limit = range.cid_start;
-        *upper_limit = range.cid_end;
-        return true;
-      }
+      ASSERT(!range.IsIllegalRange());
+      *lower_limit = range.cid_start;
+      *upper_limit = range.cid_end;
+      return true;
     }
   }
   return false;
@@ -975,7 +903,7 @@
 }
 
 Representation LoadFieldInstr::representation() const {
-  if (IsUnboxedDartFieldLoad()) {
+  if (IsUnboxedDartFieldLoad() && CompilerState::Current().is_optimizing()) {
     return FlowGraph::UnboxedFieldRepresentationOf(slot().field());
   }
   return slot().representation();
@@ -1050,7 +978,7 @@
     // The instance is always tagged.
     return kTagged;
   }
-  if (IsUnboxedDartFieldStore()) {
+  if (IsUnboxedDartFieldStore() && CompilerState::Current().is_optimizing()) {
     return FlowGraph::UnboxedFieldRepresentationOf(slot().field());
   }
   return slot().representation();
@@ -5675,6 +5603,29 @@
   }
 }
 
+void DoubleToIntegerSlowPath::EmitNativeCode(FlowGraphCompiler* compiler) {
+  __ Comment("DoubleToIntegerSlowPath");
+  __ Bind(entry_label());
+
+  LocationSummary* locs = instruction()->locs();
+  locs->live_registers()->Remove(locs->out(0));
+
+  compiler->SaveLiveRegisters(locs);
+
+  auto slow_path_env =
+      compiler->SlowPathEnvironmentFor(instruction(), /*num_slow_path_args=*/0);
+
+  __ MoveUnboxedDouble(DoubleToIntegerStubABI::kInputReg, value_reg_);
+  compiler->GenerateStubCall(instruction()->source(),
+                             StubCode::DoubleToInteger(),
+                             UntaggedPcDescriptors::kOther, locs,
+                             instruction()->deopt_id(), slow_path_env);
+  __ MoveRegister(instruction()->locs()->out(0).reg(),
+                  DoubleToIntegerStubABI::kResultReg);
+  compiler->RestoreLiveRegisters(instruction()->locs());
+  __ Jump(exit_label());
+}
+
 void RangeErrorSlowPath::EmitSharedStubCall(FlowGraphCompiler* compiler,
                                             bool save_fpu_registers) {
 #if defined(TARGET_ARCH_IA32)
@@ -6250,10 +6201,7 @@
   switch (kind) {
     case MethodRecognizer::kDoubleTruncate:
     case MethodRecognizer::kDoubleFloor:
-    case MethodRecognizer::kDoubleCeil: {
-      ASSERT(!TargetCPUFeatures::double_truncate_round_supported());
-      return 1;
-    }
+    case MethodRecognizer::kDoubleCeil:
     case MethodRecognizer::kDoubleRound:
     case MethodRecognizer::kMathAtan:
     case MethodRecognizer::kMathTan:
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 7699857..f28d741 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -5,6 +5,7 @@
 #ifndef RUNTIME_VM_COMPILER_BACKEND_IL_H_
 #define RUNTIME_VM_COMPILER_BACKEND_IL_H_
 
+#include "vm/hash_map.h"
 #if defined(DART_PRECOMPILED_RUNTIME)
 #error "AOT runtime should not use compiler sources (including header files)"
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
@@ -247,17 +248,19 @@
         cid_subtype_ranges_nullable_(),
         cid_subtype_ranges_abstract_nullable_(),
         cid_subtype_ranges_nonnullable_(),
-        cid_subtype_ranges_abstract_nonnullable_(),
-        cid_subclass_ranges_() {
+        cid_subtype_ranges_abstract_nonnullable_() {
     thread->set_hierarchy_info(this);
   }
 
   ~HierarchyInfo() { thread()->set_hierarchy_info(NULL); }
 
+  // Returned from FindBestTAVOffset and SplitOnConsistentTypeArguments
+  // to denote a failure to find a compatible concrete, finalized class.
+  static const intptr_t kNoCompatibleTAVOffset = 0;
+
   const CidRangeVector& SubtypeRangesForClass(const Class& klass,
                                               bool include_abstract,
                                               bool exclude_null);
-  const CidRangeVector& SubclassRangesForClass(const Class& klass);
 
   bool InstanceOfHasClassRange(const AbstractType& type,
                                intptr_t* lower_limit,
@@ -283,31 +286,34 @@
 
  private:
   // Does not use any hierarchy information available in the system but computes
-  // it via O(n) class table traversal. The boolean parameters denote:
-  //   use_subtype_test : if set, IsSubtypeOf() is used to compute inclusion
+  // it via O(n) class table traversal.
+  //
+  // The boolean parameters denote:
+  //   include_abstract : if set, include abstract types (don't care otherwise)
+  //   exclude_null     : if set, exclude null types (don't care otherwise)
+  void BuildRangesUsingClassTableFor(ClassTable* table,
+                                     CidRangeVector* ranges,
+                                     const Class& klass,
+                                     bool include_abstract,
+                                     bool exclude_null);
+
+  // Uses hierarchy information stored in the [Class]'s direct_subclasses() and
+  // direct_implementors() arrays, unless that information is not available
+  // in which case we fall back to the class table.
+  //
+  // The boolean parameters denote:
   //   include_abstract : if set, include abstract types (don't care otherwise)
   //   exclude_null     : if set, exclude null types (don't care otherwise)
   void BuildRangesFor(ClassTable* table,
                       CidRangeVector* ranges,
                       const Class& klass,
-                      bool use_subtype_test,
                       bool include_abstract,
                       bool exclude_null);
 
-  // In JIT mode we use hierarchy information stored in the [RawClass]s
-  // direct_subclasses_/direct_implementors_ arrays.
-  void BuildRangesForJIT(ClassTable* table,
-                         CidRangeVector* ranges,
-                         const Class& klass,
-                         bool use_subtype_test,
-                         bool include_abstract,
-                         bool exclude_null);
-
   std::unique_ptr<CidRangeVector[]> cid_subtype_ranges_nullable_;
   std::unique_ptr<CidRangeVector[]> cid_subtype_ranges_abstract_nullable_;
   std::unique_ptr<CidRangeVector[]> cid_subtype_ranges_nonnullable_;
   std::unique_ptr<CidRangeVector[]> cid_subtype_ranges_abstract_nonnullable_;
-  std::unique_ptr<CidRangeVector[]> cid_subclass_ranges_;
 };
 
 // An embedded container with N elements of type T.  Used (with partial
@@ -772,8 +778,7 @@
   // the inlining ID to that; instead, treat it as unset.
   explicit Instruction(const InstructionSource& source,
                        intptr_t deopt_id = DeoptId::kNone)
-      : deopt_id_(deopt_id),
-        inlining_id_(source.inlining_id) {}
+      : deopt_id_(deopt_id), inlining_id_(source.inlining_id) {}
 
   explicit Instruction(intptr_t deopt_id = DeoptId::kNone)
       : Instruction(InstructionSource(), deopt_id) {}
@@ -1502,7 +1507,6 @@
 
   DEFINE_INSTRUCTION_TYPE_CHECK(BlockEntry)
 
-
  protected:
   BlockEntryInstr(intptr_t block_id,
                   intptr_t try_index,
@@ -5295,7 +5299,6 @@
   virtual bool HasUnknownSideEffects() const { return true; }
   virtual Instruction* Canonicalize(FlowGraph* flow_graph);
 
-
  private:
   const TokenPosition token_pos_;
   const UntaggedPcDescriptors::Kind stub_kind_;
@@ -6171,6 +6174,8 @@
       : AllocationInstr(source, deopt_id),
         cls_(cls),
         type_arguments_(type_arguments) {
+    ASSERT(cls.IsZoneHandle());
+    ASSERT(!cls.IsNull());
     ASSERT((cls.NumTypeArguments() > 0) == (type_arguments != nullptr));
     if (type_arguments != nullptr) {
       SetInputAt(kTypeArgumentsPos, type_arguments);
@@ -7325,6 +7330,11 @@
     return kUnboxedDouble;
   }
 
+  virtual SpeculativeMode SpeculativeModeOfInput(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kNotSpeculative;
+  }
+
   virtual intptr_t DeoptimizationTarget() const {
     // Direct access since this instruction cannot deoptimize, and the deopt-id
     // was inherited from another instruction that could deoptimize.
@@ -8304,31 +8314,39 @@
   DISALLOW_COPY_AND_ASSIGN(Int64ToDoubleInstr);
 };
 
-class DoubleToIntegerInstr : public TemplateDefinition<1, Throws> {
+class DoubleToIntegerInstr : public TemplateDefinition<1, Throws, Pure> {
  public:
-  DoubleToIntegerInstr(Value* value, InstanceCallInstr* instance_call)
-      : TemplateDefinition(instance_call->deopt_id()),
-        instance_call_(instance_call) {
+  DoubleToIntegerInstr(Value* value, intptr_t deopt_id)
+      : TemplateDefinition(deopt_id) {
     SetInputAt(0, value);
   }
 
   Value* value() const { return inputs_[0]; }
-  InstanceCallInstr* instance_call() const { return instance_call_; }
 
   DECLARE_INSTRUCTION(DoubleToInteger)
   virtual CompileType ComputeType() const;
 
+  virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kUnboxedDouble;
+  }
+
+  virtual SpeculativeMode SpeculativeModeOfInput(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kNotSpeculative;
+  }
+
   virtual bool ComputeCanDeoptimize() const {
     return !CompilerState::Current().is_aot();
   }
 
+  virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
+
   virtual bool HasUnknownSideEffects() const { return false; }
 
-  virtual bool CanCallDart() const { return true; }
+  virtual bool AttributesEqual(const Instruction& other) const { return true; }
 
  private:
-  InstanceCallInstr* instance_call_;
-
   DISALLOW_COPY_AND_ASSIGN(DoubleToIntegerInstr);
 };
 
@@ -8386,6 +8404,11 @@
     return kUnboxedDouble;
   }
 
+  virtual SpeculativeMode SpeculativeModeOfInput(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kNotSpeculative;
+  }
+
   virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
 
   virtual bool AttributesEqual(const Instruction& other) const {
@@ -8504,6 +8527,11 @@
     return kUnboxedDouble;
   }
 
+  virtual SpeculativeMode SpeculativeModeOfInput(intptr_t idx) const {
+    ASSERT((0 <= idx) && (idx < InputCount()));
+    return kNotSpeculative;
+  }
+
   virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
 
   virtual intptr_t InputCount() const { return inputs_->length(); }
@@ -8772,7 +8800,6 @@
 
   virtual Value* RedefinedValue() const;
 
-
   PRINT_OPERANDS_TO_SUPPORT
 
  private:
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 5ede916..7b56c73 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -5838,53 +5838,35 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(R1));
-  result->set_out(0, Location::RegisterLocation(R0));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const Register result = locs()->out(0).reg();
-  const Register value_obj = locs()->in(0).reg();
-  ASSERT(result == R0);
-  ASSERT(result != value_obj);
-  __ LoadDFromOffset(DTMP, value_obj,
-                     compiler::target::Double::value_offset() - kHeapObjectTag);
+  const DRegister value_double = EvenDRegisterOf(locs()->in(0).fpu_reg());
 
-  compiler::Label done, do_call;
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, locs()->in(0).fpu_reg());
+  compiler->AddSlowPathCode(slow_path);
+
   // First check for NaN. Checking for minint after the conversion doesn't work
   // on ARM because vcvtid gives 0 for NaN.
-  __ vcmpd(DTMP, DTMP);
+  __ vcmpd(value_double, value_double);
   __ vmstat();
-  __ b(&do_call, VS);
+  __ b(slow_path->entry_label(), VS);
 
-  __ vcvtid(STMP, DTMP);
+  __ vcvtid(STMP, value_double);
   __ vmovrs(result, STMP);
   // Overflow is signaled with minint.
-
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC0000000);
-  __ SmiTag(result, PL);
-  __ b(&done, PL);
-
-  __ Bind(&do_call);
-  __ Push(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ b(slow_path->entry_label(), MI);
+  __ SmiTag(result);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 9484c260..cf075b0 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -3541,8 +3541,8 @@
         const intptr_t kCountLimit = 0x3F;
         intptr_t value = Smi::Cast(constant).Value();
         ASSERT((value >= 0) && (value <= kCountLimit));
-        __ SmiUntag(left);
-        __ LsrImmediate(result, left, value);
+        __ SmiUntag(result, left);
+        __ LsrImmediate(result, result, value);
         if (deopt != nullptr) {
           __ SmiTagAndBranchIfOverflow(result, deopt);
         } else {
@@ -4894,57 +4894,41 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(R1));
-  result->set_out(0, Location::RegisterLocation(R0));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const Register result = locs()->out(0).reg();
-  const Register value_obj = locs()->in(0).reg();
-  ASSERT(result == R0);
-  ASSERT(result != value_obj);
-  __ LoadDFieldFromOffset(VTMP, value_obj, Double::value_offset());
+  const VRegister value_double = locs()->in(0).fpu_reg();
 
-  compiler::Label do_call, done;
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   // First check for NaN. Checking for minint after the conversion doesn't work
   // on ARM64 because fcvtzds gives 0 for NaN.
-  __ fcmpd(VTMP, VTMP);
-  __ b(&do_call, VS);
+  __ fcmpd(value_double, value_double);
+  __ b(slow_path->entry_label(), VS);
 
-  __ fcvtzdsx(result, VTMP);
+  __ fcvtzdsx(result, value_double);
   // Overflow is signaled with minint.
 
 #if !defined(DART_COMPRESSED_POINTERS)
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC000000000000000);
-  __ b(&do_call, MI);
+  __ b(slow_path->entry_label(), MI);
 #else
   // Check for overflow and that it fits into Smi.
   __ AsrImmediate(TMP, result, 30);
   __ cmp(TMP, compiler::Operand(result, ASR, 63));
-  __ b(&do_call, NE);
+  __ b(slow_path->entry_label(), NE);
 #endif
   __ SmiTag(result);
-  __ b(&done);
-  __ Bind(&do_call);
-  __ Push(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index ee1ab8c..687529e 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -5010,45 +5010,28 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(ECX));
-  result->set_out(0, Location::RegisterLocation(EAX));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register value_obj = locs()->in(0).reg();
-  XmmRegister value_double = FpuTMP;
-  ASSERT(result == EAX);
-  ASSERT(result != value_obj);
-  __ movsd(value_double,
-           compiler::FieldAddress(value_obj, Double::value_offset()));
+  const Register result = locs()->out(0).reg();
+  const XmmRegister value_double = locs()->in(0).fpu_reg();
+
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   __ cvttsd2si(result, value_double);
   // Overflow is signalled with minint.
-  compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
   __ cmpl(result, compiler::Immediate(0xC0000000));
-  __ j(NEGATIVE, &do_call, compiler::Assembler::kNearJump);
+  __ j(NEGATIVE, slow_path->entry_label());
   __ SmiTag(result);
-  __ jmp(&done);
-  __ Bind(&do_call);
-  __ pushl(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_test.cc b/runtime/vm/compiler/backend/il_test.cc
index 1e2e053..260d17d 100644
--- a/runtime/vm/compiler/backend/il_test.cc
+++ b/runtime/vm/compiler/backend/il_test.cc
@@ -6,7 +6,9 @@
 
 #include <vector>
 
+#include "platform/text_buffer.h"
 #include "platform/utils.h"
+#include "vm/class_id.h"
 #include "vm/compiler/backend/block_builder.h"
 #include "vm/compiler/backend/il_printer.h"
 #include "vm/compiler/backend/il_test_helper.h"
@@ -375,4 +377,231 @@
   EXPECT(!unbox->ComputeCanDeoptimize());  // Previously this reverted to true.
 }
 
+static void WriteCidTo(intptr_t cid, BaseTextBuffer* buffer) {
+  ClassTable* const class_table = IsolateGroup::Current()->class_table();
+  buffer->Printf("%" Pd "", cid);
+  if (class_table->HasValidClassAt(cid)) {
+    const auto& cls = Class::Handle(class_table->At(cid));
+    buffer->Printf(" (%s", cls.ScrubbedNameCString());
+    if (cls.is_abstract()) {
+      buffer->AddString(", abstract");
+    }
+    buffer->AddString(")");
+  }
+}
+
+static void WriteCidRangeVectorTo(const CidRangeVector& ranges,
+                                  BaseTextBuffer* buffer) {
+  if (ranges.is_empty()) {
+    buffer->AddString("empty CidRangeVector");
+    return;
+  }
+  buffer->AddString("non-empty CidRangeVector:\n");
+  for (const auto& range : ranges) {
+    for (intptr_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      buffer->AddString("  * ");
+      WriteCidTo(cid, buffer);
+      buffer->AddString("\n");
+    }
+  }
+}
+
+static bool ExpectRangesContainCid(const Expect& expect,
+                                   const CidRangeVector& ranges,
+                                   intptr_t expected) {
+  for (const auto& range : ranges) {
+    for (intptr_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      if (expected == cid) return true;
+    }
+  }
+  TextBuffer buffer(128);
+  buffer.AddString("Expected CidRangeVector to include cid ");
+  WriteCidTo(expected, &buffer);
+  expect.Fail("%s", buffer.buffer());
+  return false;
+}
+
+static void RangesContainExpectedCids(const Expect& expect,
+                                      const CidRangeVector& ranges,
+                                      const GrowableArray<intptr_t>& expected) {
+  ASSERT(!ranges.is_empty());
+  ASSERT(!expected.is_empty());
+  {
+    TextBuffer buffer(128);
+    buffer.AddString("Checking that ");
+    WriteCidRangeVectorTo(ranges, &buffer);
+    buffer.AddString("includes cids:\n");
+    for (const intptr_t cid : expected) {
+      buffer.AddString("  * ");
+      WriteCidTo(cid, &buffer);
+      buffer.AddString("\n");
+    }
+    THR_Print("%s", buffer.buffer());
+  }
+  bool all_found = true;
+  for (const intptr_t cid : expected) {
+    if (!ExpectRangesContainCid(expect, ranges, cid)) {
+      all_found = false;
+    }
+  }
+  if (all_found) {
+    THR_Print("All expected cids included.\n\n");
+  }
+}
+
+#define RANGES_CONTAIN_EXPECTED_CIDS(ranges, cids)                             \
+  RangesContainExpectedCids(dart::Expect(__FILE__, __LINE__), ranges, cids)
+
+ISOLATE_UNIT_TEST_CASE(HierarchyInfo_Object_Subtype) {
+  HierarchyInfo hi(thread);
+  const auto& type =
+      Type::Handle(IsolateGroup::Current()->object_store()->object_type());
+  const bool is_nullable = Instance::NullIsAssignableTo(type);
+  EXPECT(hi.CanUseSubtypeRangeCheckFor(type));
+  const auto& cls = Class::Handle(type.type_class());
+
+  ClassTable* const class_table = thread->isolate_group()->class_table();
+  const intptr_t num_cids = class_table->NumCids();
+  auto& to_check = Class::Handle(thread->zone());
+  auto& rare_type = AbstractType::Handle(thread->zone());
+
+  GrowableArray<intptr_t> expected_concrete_cids;
+  GrowableArray<intptr_t> expected_abstract_cids;
+  for (intptr_t cid = kInstanceCid; cid < num_cids; cid++) {
+    if (!class_table->HasValidClassAt(cid)) continue;
+    if (cid == kNullCid && is_nullable) continue;
+    to_check = class_table->At(cid);
+    // Only add concrete classes.
+    if (to_check.is_abstract()) {
+      expected_abstract_cids.Add(cid);
+    } else {
+      expected_concrete_cids.Add(cid);
+    }
+    if (cid != kTypeArgumentsCid) {  // Cannot call RareType() on this.
+      rare_type = to_check.RareType();
+      EXPECT(rare_type.IsSubtypeOf(type, Heap::kNew));
+    }
+  }
+
+  const CidRangeVector& concrete_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/false, /*exclude_null=*/!is_nullable);
+  RANGES_CONTAIN_EXPECTED_CIDS(concrete_range, expected_concrete_cids);
+
+  GrowableArray<intptr_t> expected_cids;
+  expected_cids.AddArray(expected_concrete_cids);
+  expected_cids.AddArray(expected_abstract_cids);
+  const CidRangeVector& abstract_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/true, /*exclude_null=*/!is_nullable);
+  RANGES_CONTAIN_EXPECTED_CIDS(abstract_range, expected_cids);
+}
+
+ISOLATE_UNIT_TEST_CASE(HierarchyInfo_Function_Subtype) {
+  HierarchyInfo hi(thread);
+  const auto& type =
+      Type::Handle(IsolateGroup::Current()->object_store()->function_type());
+  EXPECT(hi.CanUseSubtypeRangeCheckFor(type));
+  const auto& cls = Class::Handle(type.type_class());
+
+  GrowableArray<intptr_t> expected_concrete_cids;
+  expected_concrete_cids.Add(kClosureCid);
+
+  GrowableArray<intptr_t> expected_abstract_cids;
+  expected_abstract_cids.Add(type.type_class_id());
+
+  const CidRangeVector& concrete_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/false, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(concrete_range, expected_concrete_cids);
+
+  GrowableArray<intptr_t> expected_cids;
+  expected_cids.AddArray(expected_concrete_cids);
+  expected_cids.AddArray(expected_abstract_cids);
+  const CidRangeVector& abstract_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/true, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(abstract_range, expected_cids);
+}
+
+ISOLATE_UNIT_TEST_CASE(HierarchyInfo_Num_Subtype) {
+  HierarchyInfo hi(thread);
+  const auto& num_type = Type::Handle(Type::Number());
+  const auto& int_type = Type::Handle(Type::IntType());
+  const auto& double_type = Type::Handle(Type::Double());
+  EXPECT(hi.CanUseSubtypeRangeCheckFor(num_type));
+  const auto& cls = Class::Handle(num_type.type_class());
+
+  GrowableArray<intptr_t> expected_concrete_cids;
+  expected_concrete_cids.Add(kSmiCid);
+  expected_concrete_cids.Add(kMintCid);
+  expected_concrete_cids.Add(kDoubleCid);
+
+  GrowableArray<intptr_t> expected_abstract_cids;
+  expected_abstract_cids.Add(num_type.type_class_id());
+  expected_abstract_cids.Add(int_type.type_class_id());
+  expected_abstract_cids.Add(double_type.type_class_id());
+
+  const CidRangeVector& concrete_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/false, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(concrete_range, expected_concrete_cids);
+
+  GrowableArray<intptr_t> expected_cids;
+  expected_cids.AddArray(expected_concrete_cids);
+  expected_cids.AddArray(expected_abstract_cids);
+  const CidRangeVector& abstract_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/true, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(abstract_range, expected_cids);
+}
+
+ISOLATE_UNIT_TEST_CASE(HierarchyInfo_Int_Subtype) {
+  HierarchyInfo hi(thread);
+  const auto& type = Type::Handle(Type::IntType());
+  EXPECT(hi.CanUseSubtypeRangeCheckFor(type));
+  const auto& cls = Class::Handle(type.type_class());
+
+  GrowableArray<intptr_t> expected_concrete_cids;
+  expected_concrete_cids.Add(kSmiCid);
+  expected_concrete_cids.Add(kMintCid);
+
+  GrowableArray<intptr_t> expected_abstract_cids;
+  expected_abstract_cids.Add(type.type_class_id());
+
+  const CidRangeVector& concrete_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/false, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(concrete_range, expected_concrete_cids);
+
+  GrowableArray<intptr_t> expected_cids;
+  expected_cids.AddArray(expected_concrete_cids);
+  expected_cids.AddArray(expected_abstract_cids);
+  const CidRangeVector& abstract_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/true, /*exclude_null=*/true);
+  RANGES_CONTAIN_EXPECTED_CIDS(abstract_range, expected_cids);
+}
+
+ISOLATE_UNIT_TEST_CASE(HierarchyInfo_String_Subtype) {
+  HierarchyInfo hi(thread);
+  const auto& type = Type::Handle(Type::StringType());
+  EXPECT(hi.CanUseSubtypeRangeCheckFor(type));
+  const auto& cls = Class::Handle(type.type_class());
+
+  GrowableArray<intptr_t> expected_concrete_cids;
+  expected_concrete_cids.Add(kOneByteStringCid);
+  expected_concrete_cids.Add(kTwoByteStringCid);
+  expected_concrete_cids.Add(kExternalOneByteStringCid);
+  expected_concrete_cids.Add(kExternalTwoByteStringCid);
+
+  GrowableArray<intptr_t> expected_abstract_cids;
+  expected_abstract_cids.Add(type.type_class_id());
+
+  const CidRangeVector& concrete_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/false, /*exclude_null=*/true);
+  THR_Print("Checking concrete subtype ranges for String\n");
+  RANGES_CONTAIN_EXPECTED_CIDS(concrete_range, expected_concrete_cids);
+
+  GrowableArray<intptr_t> expected_cids;
+  expected_cids.AddArray(expected_concrete_cids);
+  expected_cids.AddArray(expected_abstract_cids);
+  const CidRangeVector& abstract_range = hi.SubtypeRangesForClass(
+      cls, /*include_abstract=*/true, /*exclude_null=*/true);
+  THR_Print("Checking concrete and abstract subtype ranges for String\n");
+  RANGES_CONTAIN_EXPECTED_CIDS(abstract_range, expected_cids);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/compiler/backend/il_test_helper.cc b/runtime/vm/compiler/backend/il_test_helper.cc
index de02bc4..5d332bc 100644
--- a/runtime/vm/compiler/backend/il_test_helper.cc
+++ b/runtime/vm/compiler/backend/il_test_helper.cc
@@ -36,6 +36,21 @@
   return lib.ptr();
 }
 
+#if !defined(PRODUCT)
+LibraryPtr ReloadTestScript(const char* script) {
+  Dart_Handle api_lib;
+  {
+    TransitionVMToNative transition(Thread::Current());
+    api_lib = TestCase::ReloadTestScript(script);
+    EXPECT_VALID(api_lib);
+  }
+  auto& lib = Library::Handle();
+  lib ^= Api::UnwrapHandle(api_lib);
+  EXPECT(!lib.IsNull());
+  return lib.ptr();
+}
+#endif
+
 FunctionPtr GetFunction(const Library& lib, const char* name) {
   Thread* thread = Thread::Current();
   const auto& func = Function::Handle(lib.LookupFunctionAllowPrivate(
diff --git a/runtime/vm/compiler/backend/il_test_helper.h b/runtime/vm/compiler/backend/il_test_helper.h
index b42febd..73f32bf 100644
--- a/runtime/vm/compiler/backend/il_test_helper.h
+++ b/runtime/vm/compiler/backend/il_test_helper.h
@@ -56,6 +56,8 @@
                           Dart_NativeEntryResolver resolver = nullptr,
                           const char* lib_uri = RESOLVED_USER_TEST_URI);
 
+NOT_IN_PRODUCT(LibraryPtr ReloadTestScript(const char* script));
+
 FunctionPtr GetFunction(const Library& lib, const char* name);
 ClassPtr GetClass(const Library& lib, const char* name);
 TypeParameterPtr GetClassTypeParameter(const Class& klass, intptr_t index);
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index bdde81c..da9b346 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -4198,14 +4198,14 @@
   ASSERT(value == result);
   __ SmiUntag(value);
   __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
-  __ movsxw(result, compiler::Address(value, TIMES_2, Mint::value_offset()));
+  __ movsxd(result, compiler::Address(value, TIMES_2, Mint::value_offset()));
 #else
   ASSERT(value != result);
   // Cannot speculatively untag with value == result because it erases the
   // upper bits needed to dereference when it is a Mint.
   __ SmiUntagAndSignExtend(result, value);
   __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
-  __ movsxw(result, compiler::FieldAddress(value, Mint::value_offset()));
+  __ movsxd(result, compiler::FieldAddress(value, Mint::value_offset()));
 #endif
   __ Bind(&done);
 }
@@ -5202,49 +5202,32 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 1;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(RCX));
-  result->set_out(0, Location::RegisterLocation(RAX));
-  result->set_temp(0, Location::RegisterLocation(RBX));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
+  result->set_temp(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register value_obj = locs()->in(0).reg();
-  Register temp = locs()->temp(0).reg();
-  XmmRegister value_double = FpuTMP;
-  ASSERT(result == RAX);
-  ASSERT(result != value_obj);
+  const Register result = locs()->out(0).reg();
+  const Register temp = locs()->temp(0).reg();
+  const XmmRegister value_double = locs()->in(0).fpu_reg();
   ASSERT(result != temp);
-  __ movsd(value_double,
-           compiler::FieldAddress(value_obj, Double::value_offset()));
+
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   __ OBJ(cvttsd2si)(result, value_double);
   // Overflow is signalled with minint.
-  compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
   __ movq(temp, result);
   __ OBJ(shl)(temp, compiler::Immediate(1));
-  __ j(OVERFLOW, &do_call, compiler::Assembler::kNearJump);
+  __ j(OVERFLOW, slow_path->entry_label());
   __ SmiTag(result);
-  __ jmp(&done);
-  __ Bind(&do_call);
-  __ pushq(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
@@ -5290,6 +5273,11 @@
 void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister value = locs()->in(0).fpu_reg();
   XmmRegister result = locs()->out(0).fpu_reg();
+  if (value != result) {
+    // Clear full register to avoid false dependency due to
+    // a partial access to XMM register in roundsd instruction.
+    __ xorps(result, result);
+  }
   switch (recognized_kind()) {
     case MethodRecognizer::kDoubleTruncate:
       __ roundsd(result, value, compiler::Assembler::kRoundToZero);
@@ -5339,30 +5327,36 @@
                                                                bool opt) const {
   // Calling convention on x64 uses XMM0 and XMM1 to pass the first two
   // double arguments and XMM0 to return the result.
-  //
-  // TODO(sjindel): allow XMM0 to be used. Requires refactoring InvokeDoublePow
-  // to allow input 1/output register to be equal.
-  ASSERT((InputCount() == 1) || (InputCount() == 2));
-  const intptr_t kNumTemps =
-      (recognized_kind() == MethodRecognizer::kMathDoublePow) ? 4 : 1;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
   ASSERT(R13 != CALLEE_SAVED_TEMP);
   ASSERT(((1 << R13) & CallingConventions::kCalleeSaveCpuRegisters) != 0);
-  result->set_temp(0, Location::RegisterLocation(R13));
-  result->set_in(0, Location::FpuRegisterLocation(XMM2));
-  if (InputCount() == 2) {
-    result->set_in(1, Location::FpuRegisterLocation(XMM1));
-  }
+
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
+    ASSERT(InputCount() == 2);
+    const intptr_t kNumTemps = 4;
+    LocationSummary* result = new (zone)
+        LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
+    result->set_in(0, Location::FpuRegisterLocation(XMM2));
+    result->set_in(1, Location::FpuRegisterLocation(XMM1));
+    result->set_temp(0, Location::RegisterLocation(R13));
     // Temp index 1.
     result->set_temp(1, Location::RegisterLocation(RAX));
     // Temp index 2.
     result->set_temp(2, Location::FpuRegisterLocation(XMM4));
     // Block XMM0 for the calling convention.
     result->set_temp(3, Location::FpuRegisterLocation(XMM0));
+    result->set_out(0, Location::FpuRegisterLocation(XMM3));
+    return result;
   }
-  result->set_out(0, Location::FpuRegisterLocation(XMM3));
+  ASSERT((InputCount() == 1) || (InputCount() == 2));
+  const intptr_t kNumTemps = 1;
+  LocationSummary* result = new (zone)
+      LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
+  result->set_temp(0, Location::RegisterLocation(R13));
+  result->set_in(0, Location::FpuRegisterLocation(XMM0));
+  if (InputCount() == 2) {
+    result->set_in(1, Location::FpuRegisterLocation(XMM1));
+  }
+  result->set_out(0, Location::FpuRegisterLocation(XMM0));
   return result;
 }
 
@@ -5504,17 +5498,20 @@
     InvokeDoublePow(compiler, this);
     return;
   }
-  // Save RSP.
-  __ movq(locs()->temp(kSavedSpTempIndex).reg(), RSP);
-  __ ReserveAlignedFrameSpace(0);
-  __ movaps(XMM0, locs()->in(0).fpu_reg());
+
+  ASSERT(locs()->in(0).fpu_reg() == XMM0);
   if (InputCount() == 2) {
     ASSERT(locs()->in(1).fpu_reg() == XMM1);
   }
 
+  // Save RSP.
+  __ movq(locs()->temp(kSavedSpTempIndex).reg(), RSP);
+  __ ReserveAlignedFrameSpace(0);
+
   ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), InputCount());
-  __ movaps(locs()->out(0).fpu_reg(), XMM0);
+  ASSERT(locs()->out(0).fpu_reg() == XMM0);
+
   // Restore RSP.
   __ movq(RSP, locs()->temp(kSavedSpTempIndex).reg());
 }
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 1b2d1d4..112430d 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3524,54 +3524,6 @@
   return true;
 }
 
-static bool InlineMathCFunction(FlowGraph* flow_graph,
-                                Instruction* call,
-                                MethodRecognizer::Kind kind,
-                                GraphEntryInstr* graph_entry,
-                                FunctionEntryInstr** entry,
-                                Instruction** last,
-                                Definition** result) {
-  if (!CanUnboxDouble()) {
-    return false;
-  }
-
-  for (intptr_t i = 0; i < call->ArgumentCount(); i++) {
-    if (call->ArgumentAt(i)->Type()->ToCid() != kDoubleCid) {
-      return false;
-    }
-  }
-
-  *entry =
-      new (Z) FunctionEntryInstr(graph_entry, flow_graph->allocate_block_id(),
-                                 call->GetBlock()->try_index(), DeoptId::kNone);
-  (*entry)->InheritDeoptTarget(Z, call);
-  Instruction* cursor = *entry;
-
-  switch (kind) {
-    case MethodRecognizer::kMathSqrt: {
-      *last = new (Z)
-          MathUnaryInstr(MathUnaryInstr::kSqrt,
-                         new (Z) Value(call->ArgumentAt(0)), call->deopt_id());
-      break;
-    }
-    default: {
-      ZoneGrowableArray<Value*>* args =
-          new (Z) ZoneGrowableArray<Value*>(call->ArgumentCount());
-      for (intptr_t i = 0; i < call->ArgumentCount(); i++) {
-        args->Add(new (Z) Value(call->ArgumentAt(i)));
-      }
-      *last = new (Z) InvokeMathCFunctionInstr(args, call->deopt_id(), kind,
-                                               call->source());
-      break;
-    }
-  }
-  flow_graph->AppendTo(cursor, *last,
-                       call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
-                       FlowGraph::kValue);
-  *result = (*last)->AsDefinition();
-  return true;
-}
-
 static Instruction* InlineMul(FlowGraph* flow_graph,
                               Instruction* cursor,
                               Definition* x,
@@ -4021,20 +3973,6 @@
       return InlineSimdOp(flow_graph, is_dynamic_call, call, receiver, kind,
                           graph_entry, entry, last, result);
 
-    case MethodRecognizer::kMathSqrt:
-    case MethodRecognizer::kMathDoublePow:
-    case MethodRecognizer::kMathSin:
-    case MethodRecognizer::kMathCos:
-    case MethodRecognizer::kMathTan:
-    case MethodRecognizer::kMathAsin:
-    case MethodRecognizer::kMathAcos:
-    case MethodRecognizer::kMathAtan:
-    case MethodRecognizer::kMathAtan2:
-    case MethodRecognizer::kMathExp:
-    case MethodRecognizer::kMathLog:
-      return InlineMathCFunction(flow_graph, call, kind, graph_entry, entry,
-                                 last, result);
-
     case MethodRecognizer::kMathIntPow:
       return InlineMathIntPow(flow_graph, call, graph_entry, entry, last,
                               result);
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index 11ffcdb..dd01b09 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -543,6 +543,8 @@
 
   bool IsEmpty() const { return data_ == 0; }
 
+  void Clear() { data_ = 0; }
+
   intptr_t data() const { return data_; }
 
  private:
@@ -705,6 +707,12 @@
   intptr_t cpu_registers() const { return cpu_registers_.data(); }
   intptr_t fpu_registers() const { return fpu_registers_.data(); }
 
+  void Clear() {
+    cpu_registers_.Clear();
+    fpu_registers_.Clear();
+    untagged_cpu_registers_.Clear();
+  }
+
  private:
   SmallSet<Register> cpu_registers_;
   SmallSet<Register> untagged_cpu_registers_;
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index ad6fa8a..d85727d 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -2074,7 +2074,11 @@
               slot = &store->slot();
             } else if (use->instruction()->IsLoadIndexed() ||
                        use->instruction()->IsStoreIndexed()) {
-              ASSERT(alloc->IsArrayAllocation());
+              if (!alloc->IsArrayAllocation()) {
+                // Non-array allocations can be accessed with LoadIndexed
+                // and StoreIndex in the unreachable code.
+                continue;
+              }
               if (alloc->IsAllocateTypedData()) {
                 // Typed data payload elements are unboxed and initialized to
                 // zero, so don't forward a tagged null value.
diff --git a/runtime/vm/compiler/backend/redundancy_elimination_test.cc b/runtime/vm/compiler/backend/redundancy_elimination_test.cc
index 2668f1d..23ffde4 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination_test.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination_test.cc
@@ -219,7 +219,7 @@
   const Library& lib =
       Library::Handle(LoadTestScript(script_chars, NoopNativeLookup));
 
-  const Class& cls = Class::Handle(
+  const Class& cls = Class::ZoneHandle(
       lib.LookupLocalClass(String::Handle(Symbols::New(thread, "K"))));
   const Error& err = Error::Handle(cls.EnsureIsFinalized(thread));
   EXPECT(err.IsNull());
@@ -383,7 +383,7 @@
   const Library& lib =
       Library::Handle(LoadTestScript(script_chars, NoopNativeLookup));
 
-  const Class& cls = Class::Handle(
+  const Class& cls = Class::ZoneHandle(
       lib.LookupLocalClass(String::Handle(Symbols::New(thread, "K"))));
   const Error& err = Error::Handle(cls.EnsureIsFinalized(thread));
   EXPECT(err.IsNull());
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 06edf78..7adbe17 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -256,9 +256,7 @@
   CompileType result = CompileType::None();
   for (intptr_t i = 0, n = cids.length(); i < n; i++) {
     CidRange* cid_range = cids.At(i);
-    if (cid_range->IsIllegalRange()) {
-      return;
-    }
+    ASSERT(!cid_range->IsIllegalRange());
     for (intptr_t cid = cid_range->cid_start; cid <= cid_range->cid_end;
          cid++) {
       CompileType tp = CompileType::FromCid(cid);
@@ -821,7 +819,7 @@
 
     // VM-internal objects don't have a compile-type. Return dynamic-type
     // in this case.
-    if ((cid_ < kInstanceCid) || (cid_ == kTypeArgumentsCid)) {
+    if (IsInternalOnlyClassId(cid_) || cid_ == kTypeArgumentsCid) {
       type_ = &Object::dynamic_type();
       return type_;
     }
@@ -1348,8 +1346,9 @@
   // TODO(alexmarkov): calculate type of InstanceCallInstr eagerly
   // (in optimized mode) and avoid keeping separate result_type.
   CompileType* inferred_type = result_type();
-  if ((inferred_type != NULL) &&
-      (inferred_type->ToNullableCid() != kDynamicCid)) {
+  if ((inferred_type != nullptr) &&
+      ((inferred_type->ToNullableCid() != kDynamicCid) ||
+       (!inferred_type->ToAbstractType()->IsDynamicType()))) {
     TraceStrongModeType(this, inferred_type);
     return *inferred_type;
   }
@@ -1441,8 +1440,11 @@
   if (is_known_list_constructor()) {
     return ComputeListFactoryType(inferred_type, ArgumentValueAt(0));
   }
-  if ((inferred_type != NULL) &&
-      (inferred_type->ToNullableCid() != kDynamicCid)) {
+
+  if ((inferred_type != nullptr) &&
+      ((inferred_type->ToNullableCid() != kDynamicCid) ||
+       (!inferred_type->ToAbstractType()->IsDynamicType()))) {
+    TraceStrongModeType(this, inferred_type);
     return *inferred_type;
   }
 
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index d386935..84df214 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -968,21 +968,6 @@
   return TryInlineImplicitInstanceGetter(call);
 }
 
-void CallSpecializer::ReplaceWithMathCFunction(
-    InstanceCallInstr* call,
-    MethodRecognizer::Kind recognized_kind) {
-  ASSERT(call->type_args_len() == 0);
-  AddReceiverCheck(call);
-  ZoneGrowableArray<Value*>* args =
-      new (Z) ZoneGrowableArray<Value*>(call->ArgumentCount());
-  for (intptr_t i = 0; i < call->ArgumentCount(); i++) {
-    args->Add(new (Z) Value(call->ArgumentAt(i)));
-  }
-  InvokeMathCFunctionInstr* invoke = new (Z) InvokeMathCFunctionInstr(
-      args, call->deopt_id(), recognized_kind, call->source());
-  ReplaceCall(call, invoke);
-}
-
 // Inline only simple, frequently called core library methods.
 bool CallSpecializer::TryInlineInstanceMethod(InstanceCallInstr* call) {
   const CallTargets& targets = call->Targets();
@@ -1025,7 +1010,8 @@
         Definition* d2i_instr = NULL;
         if (ic_data.HasDeoptReason(ICData::kDeoptDoubleToSmi)) {
           // Do not repeatedly deoptimize because result didn't fit into Smi.
-          d2i_instr = new (Z) DoubleToIntegerInstr(new (Z) Value(input), call);
+          d2i_instr = new (Z)
+              DoubleToIntegerInstr(new (Z) Value(input), call->deopt_id());
         } else {
           // Optimistically assume result fits into Smi.
           d2i_instr =
@@ -1034,23 +1020,6 @@
         ReplaceCall(call, d2i_instr);
         return true;
       }
-      case MethodRecognizer::kDoubleMod:
-      case MethodRecognizer::kDoubleRound:
-        ReplaceWithMathCFunction(call, recognized_kind);
-        return true;
-      case MethodRecognizer::kDoubleTruncate:
-      case MethodRecognizer::kDoubleFloor:
-      case MethodRecognizer::kDoubleCeil:
-        if (!TargetCPUFeatures::double_truncate_round_supported()) {
-          ReplaceWithMathCFunction(call, recognized_kind);
-        } else {
-          AddReceiverCheck(call);
-          DoubleToDoubleInstr* d2d_instr =
-              new (Z) DoubleToDoubleInstr(new (Z) Value(call->ArgumentAt(0)),
-                                          recognized_kind, call->deopt_id());
-          ReplaceCall(call, d2d_instr);
-        }
-        return true;
       default:
         break;
     }
diff --git a/runtime/vm/compiler/call_specializer.h b/runtime/vm/compiler/call_specializer.h
index e82a69c..7e84402 100644
--- a/runtime/vm/compiler/call_specializer.h
+++ b/runtime/vm/compiler/call_specializer.h
@@ -172,9 +172,6 @@
   bool TryOptimizeInstanceOfUsingStaticTypes(InstanceCallInstr* call,
                                              const AbstractType& type);
 
-  void ReplaceWithMathCFunction(InstanceCallInstr* call,
-                                MethodRecognizer::Kind recognized_kind);
-
   bool TryStringLengthOneEquality(InstanceCallInstr* call, Token::Kind op_kind);
 
   void SpecializePolymorphicInstanceCall(PolymorphicInstanceCallInstr* call);
diff --git a/runtime/vm/compiler/cha.cc b/runtime/vm/compiler/cha.cc
index 790c237..06888b6 100644
--- a/runtime/vm/compiler/cha.cc
+++ b/runtime/vm/compiler/cha.cc
@@ -32,7 +32,7 @@
 
 bool CHA::HasSubclasses(const Class& cls) {
   ASSERT(!cls.IsNull());
-  ASSERT(cls.id() >= kInstanceCid);
+  ASSERT(!IsInternalOnlyClassId(cls.id()));
   // Can't track dependencies for classes on the VM heap since those are
   // read-only.
   // TODO(fschneider): Enable tracking of CHA dependent code for VM heap
diff --git a/runtime/vm/compiler/compiler_sources.gni b/runtime/vm/compiler/compiler_sources.gni
index 05fd213..1005791 100644
--- a/runtime/vm/compiler/compiler_sources.gni
+++ b/runtime/vm/compiler/compiler_sources.gni
@@ -127,10 +127,6 @@
   "frontend/scope_builder.h",
   "graph_intrinsifier.cc",
   "graph_intrinsifier.h",
-  "graph_intrinsifier_arm.cc",
-  "graph_intrinsifier_arm64.cc",
-  "graph_intrinsifier_ia32.cc",
-  "graph_intrinsifier_x64.cc",
   "intrinsifier.cc",
   "intrinsifier.h",
   "jit/jit_call_specializer.cc",
@@ -146,9 +142,6 @@
   "stub_code_compiler_arm64.cc",
   "stub_code_compiler_ia32.cc",
   "stub_code_compiler_x64.cc",
-  "type_testing_stubs_arm.cc",
-  "type_testing_stubs_arm64.cc",
-  "type_testing_stubs_x64.cc",
   "write_barrier_elimination.cc",
   "write_barrier_elimination.h",
 ]
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index 4c3a5cf..a34ae49 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -1054,11 +1054,14 @@
   return instructions;
 }
 
-Fragment BaseFlowGraphBuilder::CheckNullOptimized(TokenPosition position,
-                                                  const String& function_name) {
+Fragment BaseFlowGraphBuilder::CheckNullOptimized(
+    const String& function_name,
+    CheckNullInstr::ExceptionType exception_type,
+    TokenPosition position) {
   Value* value = Pop();
-  CheckNullInstr* check_null = new (Z) CheckNullInstr(
-      value, function_name, GetNextDeoptId(), InstructionSource(position));
+  CheckNullInstr* check_null =
+      new (Z) CheckNullInstr(value, function_name, GetNextDeoptId(),
+                             InstructionSource(position), exception_type);
   Push(check_null);  // Use the redefinition.
   return Fragment(check_null);
 }
@@ -1193,5 +1196,39 @@
   return instructions;
 }
 
+Fragment BaseFlowGraphBuilder::InvokeMathCFunction(
+    MethodRecognizer::Kind recognized_kind,
+    intptr_t num_inputs) {
+  InputsArray* args = GetArguments(num_inputs);
+  auto* instr = new (Z)
+      InvokeMathCFunctionInstr(args, GetNextDeoptId(), recognized_kind,
+                               InstructionSource(TokenPosition::kNoSource));
+  Push(instr);
+  return Fragment(instr);
+}
+
+Fragment BaseFlowGraphBuilder::DoubleToDouble(
+    MethodRecognizer::Kind recognized_kind) {
+  Value* value = Pop();
+  auto* instr =
+      new (Z) DoubleToDoubleInstr(value, recognized_kind, GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
+Fragment BaseFlowGraphBuilder::DoubleToInteger() {
+  Value* value = Pop();
+  auto* instr = new (Z) DoubleToIntegerInstr(value, GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
+Fragment BaseFlowGraphBuilder::MathUnary(MathUnaryInstr::MathUnaryKind kind) {
+  Value* value = Pop();
+  auto* instr = new (Z) MathUnaryInstr(kind, value, GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
 }  // 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 edad1e4..93875e0 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -384,13 +384,20 @@
 
   // Pops the top of the stack, checks it for null, and pushes the result on
   // the stack to create a data dependency.
-  // 'function_name' is a selector which is being called (reported in
-  // NoSuchMethod message).
+  //
   // Note that the result can currently only be used in optimized code, because
   // optimized code uses FlowGraph::RemoveRedefinitions to remove the
   // redefinitions, while unoptimized code does not.
-  Fragment CheckNullOptimized(TokenPosition position,
-                              const String& function_name);
+  Fragment CheckNullOptimized(
+      const String& name,
+      CheckNullInstr::ExceptionType exception_type,
+      TokenPosition position = TokenPosition::kNoSource);
+  Fragment CheckNullOptimized(
+      const String& function_name,
+      TokenPosition position = TokenPosition::kNoSource) {
+    return CheckNullOptimized(function_name, CheckNullInstr::kNoSuchMethod,
+                              position);
+  }
 
   // Records extra unchecked entry point 'unchecked_entry' in 'graph_entry'.
   void RecordUncheckedEntryPoint(GraphEntryInstr* graph_entry,
@@ -436,6 +443,20 @@
   // Sets raw parameter variables to inferred constant values.
   Fragment InitConstantParameters();
 
+  Fragment InvokeMathCFunction(MethodRecognizer::Kind recognized_kind,
+                               intptr_t num_inputs);
+
+  // Pops double value and converts it to double as specified
+  // by the recognized method (kDoubleTruncate,
+  // kDoubleFloor or kDoubleCeil).
+  Fragment DoubleToDouble(MethodRecognizer::Kind recognized_kind);
+
+  // Pops double value and converts it to int.
+  Fragment DoubleToInteger();
+
+  // Pops double value and applies unary math operation.
+  Fragment MathUnary(MathUnaryInstr::MathUnaryKind kind);
+
   // Returns whether this function has a saved arguments descriptor array.
   bool has_saved_args_desc_array() {
     return function_.HasSavedArgumentsDescriptor();
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 6040fb1..22efe3c 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -345,15 +345,9 @@
                               type_arguments, function, context, Heap::kOld);
       break;
     }
-    case kStaticTearOffConstant: {
-      const NameIndex index = reader.ReadCanonicalNameReference();
-      Function& function =
-          Function::Handle(Z, H.LookupStaticMethodByKernelProcedure(index));
-      function = function.ImplicitClosureFunction();
-      instance = function.ImplicitStaticClosure();
-      break;
-    }
-    case kConstructorTearOffConstant: {
+    case kStaticTearOffConstant:
+    case kConstructorTearOffConstant:
+    case kRedirectingFactoryTearOffConstant: {
       const NameIndex index = reader.ReadCanonicalNameReference();
       Function& function = Function::Handle(Z);
       if (H.IsConstructor(index)) {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 257ee0e..7464bef 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -988,7 +988,7 @@
     case UntaggedFunction::kSetterFunction:
     case UntaggedFunction::kClosureFunction:
     case UntaggedFunction::kConstructor: {
-      if (B->IsRecognizedMethodForFlowGraph(function)) {
+      if (FlowGraphBuilder::IsRecognizedMethodForFlowGraph(function)) {
         return B->BuildGraphOfRecognizedMethod(function);
       }
       return BuildGraphOfFunction(function.IsGenerativeConstructor());
@@ -2007,6 +2007,11 @@
   TokenPosition pos = ReadPosition();
   if (position != NULL) *position = pos;
   const String& message = H.DartString(ReadStringReference());
+  Tag tag = ReadTag();  // read (first part of) expression.
+  if (tag == kSomething) {
+    SkipExpression();  // read (rest of) expression.
+  }
+
   // Invalid expression message has pointer to the source code, no need to
   // report it twice.
   H.ReportError(script(), TokenPosition::kNoSource, "%s", message.ToCString());
@@ -5247,7 +5252,7 @@
     bool has_valid_annotation,
     bool has_pragma,
     intptr_t func_decl_offset) {
-  intptr_t offset = ReaderOffset();
+  const intptr_t offset = ReaderOffset();
 
   FunctionNodeHelper function_node_helper(this);
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
@@ -5346,7 +5351,11 @@
           function.set_is_inlinable(!FLAG_lazy_async_stacks);
         }
 
-        function.set_end_token_pos(function_node_helper.end_position_);
+        // If the start token position is synthetic, the end token position
+        // should be as well.
+        function.set_end_token_pos(
+            position.IsReal() ? function_node_helper.end_position_ : position);
+
         LocalScope* scope = scopes()->function_scopes[i].scope;
         const ContextScope& context_scope = ContextScope::Handle(
             Z, scope->PreserveOuterScope(flow_graph_builder_->context_depth_));
@@ -5376,7 +5385,11 @@
 
   Fragment instructions;
   instructions += Constant(function);
-  instructions += LoadLocal(parsed_function()->current_context_var());
+  if (scopes()->IsClosureWithEmptyContext(offset)) {
+    instructions += NullConstant();
+  } else {
+    instructions += LoadLocal(parsed_function()->current_context_var());
+  }
   instructions += flow_graph_builder_->AllocateClosure();
   LocalVariable* closure = MakeTemporary();
 
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 805e37d..d55f1c2 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -351,6 +351,9 @@
     case kInvalidExpression:
       ReadPosition();
       CalculateStringReferenceFingerprint();
+      if (ReadTag() == kSomething) {
+        CalculateExpressionFingerprint();  // read expression.
+      }
       return;
     case kVariableGet:
       ReadPosition();                          // read position.
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 68cdb57..ad2f103 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -8,6 +8,7 @@
 #include "platform/globals.h"
 #include "vm/class_id.h"
 #include "vm/compiler/aot/precompiler.h"
+#include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/backend/il.h"
 #include "vm/compiler/backend/il_printer.h"
 #include "vm/compiler/backend/locations.h"
@@ -891,6 +892,24 @@
     case MethodRecognizer::kUtf8DecoderScan:
     case MethodRecognizer::kHas63BitSmis:
       return true;
+    case MethodRecognizer::kDoubleToInteger:
+    case MethodRecognizer::kDoubleMod:
+    case MethodRecognizer::kDoubleRound:
+    case MethodRecognizer::kDoubleTruncate:
+    case MethodRecognizer::kDoubleFloor:
+    case MethodRecognizer::kDoubleCeil:
+    case MethodRecognizer::kMathDoublePow:
+    case MethodRecognizer::kMathSin:
+    case MethodRecognizer::kMathCos:
+    case MethodRecognizer::kMathTan:
+    case MethodRecognizer::kMathAsin:
+    case MethodRecognizer::kMathAcos:
+    case MethodRecognizer::kMathAtan:
+    case MethodRecognizer::kMathAtan2:
+    case MethodRecognizer::kMathExp:
+    case MethodRecognizer::kMathLog:
+    case MethodRecognizer::kMathSqrt:
+      return FlowGraphCompiler::SupportsUnboxedDoubles();
     default:
       return false;
   }
@@ -1032,14 +1051,14 @@
       break;
 
     case MethodRecognizer::kObjectEquals:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StrictCompare(Token::kEQ_STRICT);
       break;
     case MethodRecognizer::kStringBaseLength:
     case MethodRecognizer::kStringBaseIsEmpty:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::String_length());
       if (kind == MethodRecognizer::kStringBaseIsEmpty) {
@@ -1048,41 +1067,41 @@
       }
       break;
     case MethodRecognizer::kGrowableArrayLength:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::GrowableObjectArray_length());
       break;
     case MethodRecognizer::kObjectArrayLength:
     case MethodRecognizer::kImmutableArrayLength:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::Array_length());
       break;
     case MethodRecognizer::kTypedListBaseLength:
     case MethodRecognizer::kByteDataViewLength:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::TypedDataBase_length());
       break;
     case MethodRecognizer::kByteDataViewOffsetInBytes:
     case MethodRecognizer::kTypedDataViewOffsetInBytes:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::TypedDataView_offset_in_bytes());
       break;
     case MethodRecognizer::kByteDataViewTypedData:
     case MethodRecognizer::kTypedDataViewTypedData:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::TypedDataView_data());
       break;
     case MethodRecognizer::kClassIDgetID:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadClassId();
       break;
     case MethodRecognizer::kGrowableArrayCapacity:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::GrowableObjectArray_data());
       body += LoadNativeField(Slot::Array_length());
@@ -1157,7 +1176,7 @@
       body += CreateArray();
       break;
     case MethodRecognizer::kCopyRangeFromUint8ListToOneByteString:
-      ASSERT(function.NumParameters() == 5);
+      ASSERT_EQUAL(function.NumParameters(), 5);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += LoadLocal(parsed_function_->RawParameterVariable(2));
@@ -1167,36 +1186,36 @@
       body += NullConstant();
       break;
     case MethodRecognizer::kLinkedHashBase_getIndex:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_index());
       break;
     case MethodRecognizer::kLinkedHashBase_setIndex:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::LinkedHashBase_index());
       body += NullConstant();
       break;
     case MethodRecognizer::kLinkedHashBase_getData:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_data());
       break;
     case MethodRecognizer::kLinkedHashBase_setData:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::LinkedHashBase_data());
       body += NullConstant();
       break;
     case MethodRecognizer::kLinkedHashBase_getHashMask:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_hash_mask());
       break;
     case MethodRecognizer::kLinkedHashBase_setHashMask:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::LinkedHashBase_hash_mask(),
@@ -1205,12 +1224,12 @@
       body += NullConstant();
       break;
     case MethodRecognizer::kLinkedHashBase_getUsedData:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_used_data());
       break;
     case MethodRecognizer::kLinkedHashBase_setUsedData:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::LinkedHashBase_used_data(),
@@ -1219,12 +1238,12 @@
       body += NullConstant();
       break;
     case MethodRecognizer::kLinkedHashBase_getDeletedKeys:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_deleted_keys());
       break;
     case MethodRecognizer::kLinkedHashBase_setDeletedKeys:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::LinkedHashBase_deleted_keys(),
@@ -1233,53 +1252,51 @@
       body += NullConstant();
       break;
     case MethodRecognizer::kWeakProperty_getKey:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::WeakProperty_key());
       break;
     case MethodRecognizer::kWeakProperty_setKey:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::WeakProperty_key());
       body += NullConstant();
       break;
     case MethodRecognizer::kWeakProperty_getValue:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::WeakProperty_value());
       break;
     case MethodRecognizer::kWeakProperty_setValue:
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadLocal(parsed_function_->RawParameterVariable(1));
       body += StoreNativeField(Slot::WeakProperty_value());
       body += NullConstant();
       break;
     case MethodRecognizer::kUtf8DecoderScan:
-      ASSERT(function.NumParameters() == 5);
+      ASSERT_EQUAL(function.NumParameters(), 5);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // decoder
       body += LoadLocal(parsed_function_->RawParameterVariable(1));  // bytes
       body += LoadLocal(parsed_function_->RawParameterVariable(2));  // start
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       body += UnboxTruncate(kUnboxedIntPtr);
       body += LoadLocal(parsed_function_->RawParameterVariable(3));  // end
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       body += UnboxTruncate(kUnboxedIntPtr);
       body += LoadLocal(parsed_function_->RawParameterVariable(4));  // table
       body += Utf8Scan();
       body += Box(kUnboxedIntPtr);
       break;
     case MethodRecognizer::kReachabilityFence:
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += ReachabilityFence();
       body += NullConstant();
       break;
     case MethodRecognizer::kFfiAbi:
-      ASSERT(function.NumParameters() == 0);
+      ASSERT_EQUAL(function.NumParameters(), 0);
       body += IntConstant(static_cast<int64_t>(compiler::ffi::TargetAbi()));
       break;
     case MethodRecognizer::kFfiLoadInt8:
@@ -1303,18 +1320,16 @@
       const classid_t typed_data_cid =
           compiler::ffi::ElementTypedDataCid(ffi_type_arg_cid);
 
-      ASSERT(function.NumParameters() == 2);
+      ASSERT_EQUAL(function.NumParameters(), 2);
       LocalVariable* arg_pointer = parsed_function_->RawParameterVariable(0);
       LocalVariable* arg_offset = parsed_function_->RawParameterVariable(1);
 
       body += LoadLocal(arg_offset);
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       LocalVariable* arg_offset_not_null = MakeTemporary();
 
       body += LoadLocal(arg_pointer);
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // No GC from here til LoadIndexed.
       body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
       body += LoadLocal(arg_offset_not_null);
@@ -1411,8 +1426,7 @@
         // Pointer<Pointer<X>> as argument, and (2) the bound on the pointer
         // type parameter guarantees X is an interface type.
         body += LoadLocal(arg_pointer);
-        body += CheckNullOptimized(TokenPosition::kNoSource,
-                                   String::ZoneHandle(Z, function.name()));
+        body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
         body += LoadNativeField(
             Slot::GetTypeArgumentsSlotFor(thread_, pointer_class));
         body += NullConstant();  // function_type_args.
@@ -1420,19 +1434,16 @@
         body += Drop();
       }
 
-      ASSERT(function.NumParameters() == 3);
+      ASSERT_EQUAL(function.NumParameters(), 3);
       body += LoadLocal(arg_offset);
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       LocalVariable* arg_offset_not_null = MakeTemporary();
       body += LoadLocal(arg_value);
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       LocalVariable* arg_value_not_null = MakeTemporary();
 
       body += LoadLocal(arg_pointer);  // Pointer.
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // No GC from here til StoreIndexed.
       body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
       body += LoadLocal(arg_offset_not_null);
@@ -1465,21 +1476,19 @@
           Class::ZoneHandle(H.zone(), class_table->At(kFfiPointerCid));
 
       ASSERT(function.NumTypeParameters() == 1);
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawTypeArgumentsVariable());
       body += AllocateObject(TokenPosition::kNoSource, pointer_class, 1);
       body += LoadLocal(MakeTemporary());  // Duplicate Pointer.
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // Address.
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       body += UnboxTruncate(kUnboxedFfiIntPtr);
       body += StoreNativeField(Slot::Pointer_data_field());
     } break;
     case MethodRecognizer::kFfiGetAddress: {
-      ASSERT(function.NumParameters() == 1);
+      ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // Pointer.
-      body += CheckNullOptimized(TokenPosition::kNoSource,
-                                 String::ZoneHandle(Z, function.name()));
+      body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // This can only be Pointer, so it is always safe to LoadUntagged.
       body += LoadUntagged(compiler::target::Pointer::data_field_offset());
       body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
@@ -1498,14 +1507,50 @@
       // Load TypedDataArray from Instance Handle implementing
       // NativeFieldWrapper.
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // Object.
-      body += CheckNullOptimized(TokenPosition::kNoSource, name);
+      body += CheckNullOptimized(name);
       body += LoadNativeField(Slot::Instance_native_fields_array());  // Fields.
-      body += CheckNullOptimized(TokenPosition::kNoSource, name);
+      body += CheckNullOptimized(name);
       // Load the native field at index.
       body += IntConstant(0);  // Index.
       body += LoadIndexed(kIntPtrCid);
       body += Box(kUnboxedIntPtr);
     } break;
+    case MethodRecognizer::kDoubleToInteger: {
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += DoubleToInteger();
+    } break;
+    case MethodRecognizer::kDoubleMod:
+    case MethodRecognizer::kDoubleRound:
+    case MethodRecognizer::kDoubleTruncate:
+    case MethodRecognizer::kDoubleFloor:
+    case MethodRecognizer::kDoubleCeil:
+    case MethodRecognizer::kMathDoublePow:
+    case MethodRecognizer::kMathSin:
+    case MethodRecognizer::kMathCos:
+    case MethodRecognizer::kMathTan:
+    case MethodRecognizer::kMathAsin:
+    case MethodRecognizer::kMathAcos:
+    case MethodRecognizer::kMathAtan:
+    case MethodRecognizer::kMathAtan2:
+    case MethodRecognizer::kMathExp:
+    case MethodRecognizer::kMathLog: {
+      for (intptr_t i = 0, n = function.NumParameters(); i < n; ++i) {
+        body += LoadLocal(parsed_function_->RawParameterVariable(i));
+      }
+      if (!CompilerState::Current().is_aot() &&
+          TargetCPUFeatures::double_truncate_round_supported() &&
+          ((kind == MethodRecognizer::kDoubleTruncate) ||
+           (kind == MethodRecognizer::kDoubleFloor) ||
+           (kind == MethodRecognizer::kDoubleCeil))) {
+        body += DoubleToDouble(kind);
+      } else {
+        body += InvokeMathCFunction(kind, function.NumParameters());
+      }
+    } break;
+    case MethodRecognizer::kMathSqrt: {
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += MathUnary(MathUnaryInstr::kSqrt);
+    } break;
     default: {
       UNREACHABLE();
       break;
@@ -3450,7 +3495,7 @@
 
   // Push receiver.
   if (target.IsGenerativeConstructor()) {
-    const Class& cls = Class::Handle(Z, target.Owner());
+    const Class& cls = Class::ZoneHandle(Z, target.Owner());
     if (cls.NumTypeArguments() > 0) {
       if (!function.IsGeneric()) {
         Type& cls_type = Type::Handle(Z, cls.DeclarationType());
@@ -4307,10 +4352,10 @@
     function_body += LoadLocal(
         parsed_function_->ParameterVariable(kFirstArgumentParameterOffset + i));
     // Check for 'null'.
-    // TODO(36780): Mention the param name instead of function reciever.
-    function_body +=
-        CheckNullOptimized(TokenPosition::kNoSource,
-                           String::ZoneHandle(Z, marshaller.function_name()));
+    function_body += CheckNullOptimized(
+        String::ZoneHandle(
+            Z, function.ParameterNameAt(kFirstArgumentParameterOffset + i)),
+        CheckNullInstr::kArgumentError);
     function_body += StoreLocal(
         TokenPosition::kNoSource,
         parsed_function_->ParameterVariable(kFirstArgumentParameterOffset + i));
@@ -4489,8 +4534,8 @@
     body += IntConstant(0);
   } else if (!marshaller.IsHandle(compiler::ffi::kResultIndex)) {
     body +=
-        CheckNullOptimized(TokenPosition::kNoSource,
-                           String::ZoneHandle(Z, marshaller.function_name()));
+        CheckNullOptimized(String::ZoneHandle(Z, String::New("return_value")),
+                           CheckNullInstr::kArgumentError);
   }
 
   if (marshaller.IsCompound(compiler::ffi::kResultIndex)) {
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index f9d1a6e..20c5b77c 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -65,6 +65,10 @@
 
   FlowGraph* BuildGraph();
 
+  // Returns true if given [function] is recognized for flow
+  // graph building and its body is expressed in a custom-built IL.
+  static bool IsRecognizedMethodForFlowGraph(const Function& function);
+
  private:
   BlockEntryInstr* BuildPrologue(BlockEntryInstr* normal_entry,
                                  PrologueInfo* prologue_info);
@@ -145,8 +149,6 @@
   Fragment NativeFunctionBody(const Function& function,
                               LocalVariable* first_parameter);
 
-  // Every recognized method has a body expressed in IL.
-  bool IsRecognizedMethodForFlowGraph(const Function& function);
   FlowGraph* BuildGraphOfRecognizedMethod(const Function& function);
 
   Fragment BuildTypedDataViewFactoryConstructor(const Function& function,
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 99a51ea..a3b4dc2 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2297,6 +2297,9 @@
     case kInvalidExpression:
       ReadPosition();
       SkipStringReference();
+      if (ReadTag() == kSomething) {
+        SkipExpression();  // read expression.
+      }
       return;
     case kVariableGet:
       ReadPosition();          // read position.
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 0205fe4..f103f14 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -651,6 +651,9 @@
     case kInvalidExpression:
       helper_.ReadPosition();
       helper_.SkipStringReference();
+      if (helper_.ReadTag() == kSomething) {
+        VisitExpression();  // read expression.
+      }
       return;
     case kVariableGet: {
       helper_.ReadPosition();  // read position.
@@ -1489,7 +1492,7 @@
 
 void ScopeBuilder::HandleLocalFunction(intptr_t parent_kernel_offset) {
   // "Peek" ahead into the function node
-  intptr_t offset = helper_.ReaderOffset();
+  const intptr_t offset = helper_.ReaderOffset();
 
   FunctionNodeHelper function_node_helper(&helper_);
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
@@ -1531,6 +1534,14 @@
 
   VisitFunctionNode();  // read function node.
 
+  // Remember if this closure and all closures nested within it don't
+  // capture any variables from outer scopes.
+  if (scope_->function_level() == 1) {
+    if (scope_->NumCapturedVariables() == 0) {
+      result_->closure_offsets_without_captures.Add(offset);
+    }
+  }
+
   ExitScope(function_node_helper.position_, function_node_helper.end_position_);
   depth_ = saved_depth_state;
   current_function_scope_ = saved_function_scope;
diff --git a/runtime/vm/compiler/frontend/scope_builder.h b/runtime/vm/compiler/frontend/scope_builder.h
index 1531508..9805939 100644
--- a/runtime/vm/compiler/frontend/scope_builder.h
+++ b/runtime/vm/compiler/frontend/scope_builder.h
@@ -189,6 +189,15 @@
         yield_context_variable(NULL),
         raw_variable_counter_(0) {}
 
+  bool IsClosureWithEmptyContext(intptr_t function_node_offset) {
+    for (intptr_t i = 0; i < closure_offsets_without_captures.length(); ++i) {
+      if (closure_offsets_without_captures[i] == function_node_offset) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   IntMap<LocalVariable*> locals;
   IntMap<LocalScope*> scopes;
   GrowableArray<FunctionScope> function_scopes;
@@ -230,6 +239,10 @@
   // For-in iterators, one per for-in nesting level.
   GrowableArray<LocalVariable*> iterator_variables;
 
+  // Remembers closure function kernel offsets that do not capture any
+  // variables.
+  GrowableArray<intptr_t> closure_offsets_without_captures;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(ScopeBuildingResult);
 };
diff --git a/runtime/vm/compiler/graph_intrinsifier.cc b/runtime/vm/compiler/graph_intrinsifier.cc
index 49287d4..85ed2b5 100644
--- a/runtime/vm/compiler/graph_intrinsifier.cc
+++ b/runtime/vm/compiler/graph_intrinsifier.cc
@@ -62,11 +62,6 @@
       if (instr->IsParallelMove()) {
         compiler->parallel_move_resolver()->EmitNativeCode(
             instr->AsParallelMove());
-      } else if (instr->IsInvokeMathCFunction()) {
-        ASSERT(instr->locs() != NULL);
-        GraphIntrinsifier::IntrinsicCallPrologue(compiler->assembler());
-        instr->EmitNativeCode(compiler);
-        GraphIntrinsifier::IntrinsicCallEpilogue(compiler->assembler());
       } else {
         ASSERT(instr->locs() != NULL);
         // Calls are not supported in intrinsics code.
@@ -1050,111 +1045,6 @@
   return true;
 }
 
-static bool BuildInvokeMathCFunction(FlowGraph* flow_graph,
-                                     MethodRecognizer::Kind kind,
-                                     intptr_t num_parameters = 1) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
-    return false;
-  }
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  ZoneGrowableArray<Value*>* args =
-      new ZoneGrowableArray<Value*>(num_parameters);
-
-  for (intptr_t i = 0; i < num_parameters; i++) {
-    Definition* value = builder.AddParameter(i, /*with_frame=*/false);
-    Definition* unboxed_value = ConvertOrUnboxDoubleParameter(
-        &builder, value, i, /* is_checked = */ false);
-    if (unboxed_value == nullptr) {
-      return false;
-    }
-    args->Add(new Value(unboxed_value));
-  }
-
-  Definition* unboxed_result =
-      builder.AddDefinition(new InvokeMathCFunctionInstr(
-          args, DeoptId::kNone, kind, builder.Source()));
-  Definition* result =
-      CreateBoxedResultIfNeeded(&builder, unboxed_result, kUnboxedDouble);
-  builder.AddReturn(new Value(result));
-
-  return true;
-}
-
-bool GraphIntrinsifier::Build_MathSin(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathSin);
-}
-
-bool GraphIntrinsifier::Build_MathCos(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathCos);
-}
-
-bool GraphIntrinsifier::Build_MathTan(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathTan);
-}
-
-bool GraphIntrinsifier::Build_MathAsin(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAsin);
-}
-
-bool GraphIntrinsifier::Build_MathAcos(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAcos);
-}
-
-bool GraphIntrinsifier::Build_MathAtan(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAtan);
-}
-
-bool GraphIntrinsifier::Build_MathAtan2(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAtan2,
-                                  /* num_parameters = */ 2);
-}
-
-bool GraphIntrinsifier::Build_MathExp(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathExp);
-}
-
-bool GraphIntrinsifier::Build_MathLog(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathLog);
-}
-
-bool GraphIntrinsifier::Build_DoubleMod(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleMod,
-                                  /* num_parameters = */ 2);
-}
-
-bool GraphIntrinsifier::Build_DoubleCeil(FlowGraph* flow_graph) {
-  // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
-  // way.
-  if (TargetCPUFeatures::double_truncate_round_supported()) return false;
-
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleCeil);
-}
-
-bool GraphIntrinsifier::Build_DoubleFloor(FlowGraph* flow_graph) {
-  // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
-  // way.
-  if (TargetCPUFeatures::double_truncate_round_supported()) return false;
-
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleFloor);
-}
-
-bool GraphIntrinsifier::Build_DoubleTruncate(FlowGraph* flow_graph) {
-  // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
-  // way.
-  if (TargetCPUFeatures::double_truncate_round_supported()) return false;
-
-  return BuildInvokeMathCFunction(flow_graph,
-                                  MethodRecognizer::kDoubleTruncate);
-}
-
-bool GraphIntrinsifier::Build_DoubleRound(FlowGraph* flow_graph) {
-  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleRound);
-}
-
 bool GraphIntrinsifier::Build_ImplicitGetter(FlowGraph* flow_graph) {
   // This code will only be invoked if our assumptions have been met (see
   // [Intrinsifier::CanIntrinsifyFieldAccessor])
diff --git a/runtime/vm/compiler/graph_intrinsifier.h b/runtime/vm/compiler/graph_intrinsifier.h
index 3104d2f..69d57d8 100644
--- a/runtime/vm/compiler/graph_intrinsifier.h
+++ b/runtime/vm/compiler/graph_intrinsifier.h
@@ -26,14 +26,9 @@
 
 class GraphIntrinsifier : public AllStatic {
  public:
-  static intptr_t ParameterSlotFromSp();
-
   static bool GraphIntrinsify(const ParsedFunction& parsed_function,
                               FlowGraphCompiler* compiler);
 
-  static void IntrinsicCallPrologue(Assembler* assembler);
-  static void IntrinsicCallEpilogue(Assembler* assembler);
-
  private:
 #define DECLARE_FUNCTION(class_name, function_name, enum_name, fp)             \
   static void enum_name(Assembler* assembler, Label* normal_ir_body);
diff --git a/runtime/vm/compiler/graph_intrinsifier_arm.cc b/runtime/vm/compiler/graph_intrinsifier_arm.cc
deleted file mode 100644
index baea3aa..0000000
--- a/runtime/vm/compiler/graph_intrinsifier_arm.cc
+++ /dev/null
@@ -1,43 +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.
-
-#include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM.
-#if defined(TARGET_ARCH_ARM)
-
-#include "vm/compiler/assembler/assembler.h"
-#include "vm/compiler/graph_intrinsifier.h"
-
-namespace dart {
-namespace compiler {
-
-#define __ assembler->
-
-intptr_t GraphIntrinsifier::ParameterSlotFromSp() {
-  return -1;
-}
-
-void GraphIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-
-  // Save LR by moving it to a callee saved temporary register.
-  __ Comment("IntrinsicCallPrologue");
-  SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(
-      __ mov(CALLEE_SAVED_TEMP, Operand(LR)));
-}
-
-void GraphIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  // Restore LR.
-  __ Comment("IntrinsicCallEpilogue");
-  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(
-      __ mov(LR, Operand(CALLEE_SAVED_TEMP)));
-}
-
-#undef __
-
-}  // namespace compiler
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_ARM)
diff --git a/runtime/vm/compiler/graph_intrinsifier_arm64.cc b/runtime/vm/compiler/graph_intrinsifier_arm64.cc
deleted file mode 100644
index 27be6fa..0000000
--- a/runtime/vm/compiler/graph_intrinsifier_arm64.cc
+++ /dev/null
@@ -1,46 +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.
-
-#include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM64.
-#if defined(TARGET_ARCH_ARM64)
-
-#include "vm/compiler/assembler/assembler.h"
-#include "vm/compiler/graph_intrinsifier.h"
-
-namespace dart {
-namespace compiler {
-
-#define __ assembler->
-
-intptr_t GraphIntrinsifier::ParameterSlotFromSp() {
-  return -1;
-}
-
-void GraphIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(!IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP2));
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP2 != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP2 != ARGS_DESC_REG);
-
-  __ Comment("IntrinsicCallPrologue");
-  SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(__ mov(CALLEE_SAVED_TEMP, LR));
-  __ mov(CALLEE_SAVED_TEMP2, ARGS_DESC_REG);
-}
-
-void GraphIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  __ Comment("IntrinsicCallEpilogue");
-  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(__ mov(LR, CALLEE_SAVED_TEMP));
-  __ mov(ARGS_DESC_REG, CALLEE_SAVED_TEMP2);
-}
-
-#undef __
-
-}  // namespace compiler
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_ARM64)
diff --git a/runtime/vm/compiler/graph_intrinsifier_ia32.cc b/runtime/vm/compiler/graph_intrinsifier_ia32.cc
deleted file mode 100644
index 6e29ff5..0000000
--- a/runtime/vm/compiler/graph_intrinsifier_ia32.cc
+++ /dev/null
@@ -1,37 +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.
-
-#include "vm/globals.h"  // Needed here to get TARGET_ARCH_IA32.
-#if defined(TARGET_ARCH_IA32)
-
-#include "vm/compiler/assembler/assembler.h"
-#include "vm/compiler/graph_intrinsifier.h"
-
-namespace dart {
-namespace compiler {
-
-#define __ assembler->
-
-intptr_t GraphIntrinsifier::ParameterSlotFromSp() {
-  return 0;
-}
-
-void GraphIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-
-  assembler->Comment("IntrinsicCallPrologue");
-  assembler->movl(CALLEE_SAVED_TEMP, ARGS_DESC_REG);
-}
-
-void GraphIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  assembler->Comment("IntrinsicCallEpilogue");
-  assembler->movl(ARGS_DESC_REG, CALLEE_SAVED_TEMP);
-}
-
-#undef __
-
-}  // namespace compiler
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_IA32)
diff --git a/runtime/vm/compiler/graph_intrinsifier_x64.cc b/runtime/vm/compiler/graph_intrinsifier_x64.cc
deleted file mode 100644
index e1479a8..0000000
--- a/runtime/vm/compiler/graph_intrinsifier_x64.cc
+++ /dev/null
@@ -1,41 +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.
-
-#include "vm/globals.h"  // Needed here to get TARGET_ARCH_X64.
-#if defined(TARGET_ARCH_X64)
-
-#include "vm/compiler/assembler/assembler.h"
-#include "vm/compiler/graph_intrinsifier.h"
-
-namespace dart {
-namespace compiler {
-
-#define __ assembler->
-
-intptr_t GraphIntrinsifier::ParameterSlotFromSp() {
-  return 0;
-}
-
-void GraphIntrinsifier::IntrinsicCallPrologue(Assembler* assembler) {
-  COMPILE_ASSERT(IsAbiPreservedRegister(CODE_REG));
-  COMPILE_ASSERT(!IsAbiPreservedRegister(ARGS_DESC_REG));
-  COMPILE_ASSERT(IsAbiPreservedRegister(CALLEE_SAVED_TEMP));
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != CODE_REG);
-  COMPILE_ASSERT(CALLEE_SAVED_TEMP != ARGS_DESC_REG);
-
-  assembler->Comment("IntrinsicCallPrologue");
-  assembler->movq(CALLEE_SAVED_TEMP, ARGS_DESC_REG);
-}
-
-void GraphIntrinsifier::IntrinsicCallEpilogue(Assembler* assembler) {
-  assembler->Comment("IntrinsicCallEpilogue");
-  assembler->movq(ARGS_DESC_REG, CALLEE_SAVED_TEMP);
-}
-
-#undef __
-
-}  // namespace compiler
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_X64)
diff --git a/runtime/vm/compiler/intrinsifier.cc b/runtime/vm/compiler/intrinsifier.cc
index bce561c..f343f73 100644
--- a/runtime/vm/compiler/intrinsifier.cc
+++ b/runtime/vm/compiler/intrinsifier.cc
@@ -173,7 +173,6 @@
 
 static const IntrinsicDesc math_intrinsics[] = {
   MATH_LIB_INTRINSIC_LIST(DEFINE_INTRINSIC)
-  GRAPH_MATH_LIB_INTRINSIC_LIST(DEFINE_INTRINSIC)
   {nullptr, nullptr},
 };
 
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 9680f0b..3142cb9 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -87,10 +87,26 @@
   V(_Double, _sub, DoubleSub, 0x28474c2e)                                      \
   V(_Double, _mul, DoubleMul, 0x1f98c76c)                                      \
   V(_Double, _div, DoubleDiv, 0x287d3791)                                      \
+  V(_Double, _modulo, DoubleMod, 0xfdb397ef)                                   \
+  V(_Double, ceilToDouble, DoubleCeil, 0x5f1bced9)                             \
+  V(_Double, floorToDouble, DoubleFloor, 0x54b4cb48)                           \
+  V(_Double, roundToDouble, DoubleRound, 0x5649ca00)                           \
+  V(_Double, toInt, DoubleToInteger, 0x676f20a9)                               \
+  V(_Double, truncateToDouble, DoubleTruncate, 0x62d48659)                     \
   V(::, min, MathMin, 0x504a28df)                                              \
   V(::, max, MathMax, 0xead7161a)                                              \
   V(::, _doublePow, MathDoublePow, 0x989f3334)                                 \
   V(::, _intPow, MathIntPow, 0x68b6021e)                                       \
+  V(::, _sin, MathSin, 0x17dacdc4)                                             \
+  V(::, _cos, MathCos, 0xf4948106)                                             \
+  V(::, _tan, MathTan, 0xeb1a58f8)                                             \
+  V(::, _asin, MathAsin, 0x29e4d95f)                                           \
+  V(::, _acos, MathAcos, 0x200aa49c)                                           \
+  V(::, _atan, MathAtan, 0x10fa64b3)                                           \
+  V(::, _atan2, MathAtan2, 0x58d4f514)                                         \
+  V(::, _sqrt, MathSqrt, 0x03183751)                                           \
+  V(::, _exp, MathExp, 0x00f50391)                                             \
+  V(::, _log, MathLog, 0x09ae8823)                                             \
   V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1845792b)        \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3b64002)                      \
   V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x13a552c3)                    \
@@ -267,23 +283,10 @@
   V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xb6764495)             \
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xfecba6b3)          \
   V(_IntegerImplementation, <<, Integer_shl, 0x2d855b02)                       \
-  V(_Double, toInt, DoubleToInteger, 0x676f1ce8)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(::, sqrt, MathSqrt, 0x1c9a16a2)                                            \
   V(_Random, _nextState, Random_nextState, 0x7207677d)                         \
 
-#define GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                       \
-  V(::, sin, MathSin, 0xb79dea09)                                              \
-  V(::, cos, MathCos, 0x81a51dbd)                                              \
-  V(::, tan, MathTan, 0x64bc50f3)                                              \
-  V(::, asin, MathAsin, 0x7d26f0d4)                                            \
-  V(::, acos, MathAcos, 0xc3879f8b)                                            \
-  V(::, atan, MathAtan, 0xb5c4223e)                                            \
-  V(::, atan2, MathAtan2, 0xc03b8b85)                                          \
-  V(::, exp, MathExp, 0x7f5f1a67)                                              \
-  V(::, log, MathLog, 0xebc3f443)                                              \
-
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
   V(_Int8List, [], Int8ArrayGetIndexed, 0x35f3fab6)                            \
   V(_Int8List, []=, Int8ArraySetIndexed, 0x6e4fdaa7)                           \
@@ -366,16 +369,10 @@
   V(_IntegerImplementation, >>, Integer_sar, 0x4a3615a7)                       \
   V(_IntegerImplementation, >>>, Integer_shr, 0x2bac5209)                      \
   V(_Double, unary-, DoubleFlipSignBit, 0x3d39082b)                            \
-  V(_Double, truncateToDouble, DoubleTruncate, 0x62d48298)                     \
-  V(_Double, roundToDouble, DoubleRound, 0x5649c63f)                           \
-  V(_Double, floorToDouble, DoubleFloor, 0x54b4c787)                           \
-  V(_Double, ceilToDouble, DoubleCeil, 0x5f1bcb18)                             \
-  V(_Double, _modulo, DoubleMod, 0xfdb3942e)
 
 #define GRAPH_INTRINSICS_LIST(V)                                               \
   GRAPH_CORE_INTRINSICS_LIST(V)                                                \
   GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                          \
-  GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                             \
 
 #define DEVELOPER_LIB_INTRINSIC_LIST(V)                                        \
   V(::, _getDefaultTag, UserTag_defaultTag, 0x6c19c8a5)                        \
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 52642b1..ba5d79b 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1105,6 +1105,7 @@
   static word stack_limit_offset();
   static word saved_stack_limit_offset();
   static word unboxed_int64_runtime_arg_offset();
+  static word unboxed_double_runtime_arg_offset();
 
   static word callback_code_offset();
   static word callback_stack_return_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 99f76c0..8598191 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -184,17 +184,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 20;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 28;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 20;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 24;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 28;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 8;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 16;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 36;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 16;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 40;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 20;
@@ -244,154 +244,154 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 368;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    732;
+    748;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    736;
+    752;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 120;
+    Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 264;
+    Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 280;
+    Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 188;
+    Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 284;
+    Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 192;
+    Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 288;
+    Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 772;
+    Thread_allocate_object_slow_stub_offset = 204;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 108;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 268;
+    Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 780;
+    Thread_call_to_runtime_stub_offset = 144;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 796;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    308;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
+    316;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    312;
+    320;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    228;
+    236;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    348;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 344;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 248;
+    Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    752;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 252;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 256;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 316;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 124;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 356;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    352;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 364;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    740;
-static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 132;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     768;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 260;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 264;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 324;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 136;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 132;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 368;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 364;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    360;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 372;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    756;
+static constexpr dart::compiler::target::word
+    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_group_offset = 784;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 232;
+    Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 236;
+    Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 244;
+    Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 300;
+    Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 304;
+    Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 208;
+    Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 744;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 748;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    756;
+    772;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 240;
+    Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 320;
+    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_saved_stack_limit_offset =
     60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     80;
 static constexpr dart::compiler::target::word
@@ -400,17 +400,19 @@
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 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_write_barrier_code_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 260;
+    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;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 760;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 764;
+    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;
@@ -470,7 +472,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        700, 704, 708, 712, 716, -1, 720, -1, 724, 728, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -727,17 +729,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 40;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 52;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 72;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 32;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 24;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 40;
@@ -788,156 +790,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1480;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1488;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1576;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1520;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1496;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1544;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1520;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1584;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1504;
+    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 = 1512;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1528;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -946,18 +948,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1544;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -1018,8 +1022,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -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;
@@ -1275,17 +1279,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 20;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 28;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 20;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 24;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 28;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 8;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 16;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 36;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 16;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 40;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 20;
@@ -1335,154 +1339,154 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 368;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    700;
+    716;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    704;
+    720;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 120;
+    Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 264;
+    Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 280;
+    Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 188;
+    Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 284;
+    Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 192;
+    Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 288;
+    Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 740;
+    Thread_allocate_object_slow_stub_offset = 204;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 756;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 108;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 268;
+    Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 748;
+    Thread_call_to_runtime_stub_offset = 144;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 764;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    308;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
+    316;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    312;
+    320;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    228;
+    236;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    348;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 344;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 248;
+    Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    720;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 252;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 256;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 316;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 124;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 356;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    352;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 364;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    708;
-static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 132;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     736;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 260;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 264;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 324;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 136;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 132;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 368;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 364;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    360;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 372;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    724;
+static constexpr dart::compiler::target::word
+    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_group_offset = 752;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 232;
+    Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 236;
+    Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 244;
+    Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 300;
+    Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 304;
+    Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 208;
+    Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 712;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 728;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 716;
+    Thread_saved_shadow_call_stack_offset = 732;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    724;
+    740;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 240;
+    Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 320;
+    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_saved_stack_limit_offset =
     60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     80;
 static constexpr dart::compiler::target::word
@@ -1491,17 +1495,19 @@
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 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_write_barrier_code_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 260;
+    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;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 728;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 732;
+    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;
@@ -1815,17 +1821,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 40;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 52;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 72;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 32;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 24;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 40;
@@ -1876,156 +1882,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1544;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1584;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1560;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1608;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1584;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1616;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1568;
+    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 = 1576;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1592;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -2034,18 +2040,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1608;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2106,9 +2114,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 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;
@@ -2364,17 +2372,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 40;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 52;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 72;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 32;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 16;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 24;
@@ -2425,156 +2433,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1480;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1488;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1576;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1520;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1496;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1544;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1520;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1584;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1504;
+    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 = 1512;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1528;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -2583,18 +2591,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1544;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2655,8 +2665,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -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;
@@ -2912,17 +2922,17 @@
 static constexpr dart::compiler::target::word ICData_owner_offset = 40;
 static constexpr dart::compiler::target::word ICData_state_bits_offset = 52;
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
-static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
-static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
-static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
+static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
 static constexpr dart::compiler::target::word
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 72;
-static constexpr dart::compiler::target::word Isolate_user_tag_offset = 32;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 16;
 static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 24;
@@ -2973,156 +2983,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1544;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1584;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1560;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1608;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1584;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1616;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1568;
+    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 = 1576;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1592;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -3131,18 +3141,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1608;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -3203,9 +3215,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 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;
@@ -3517,154 +3529,154 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 368;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    732;
+    748;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    736;
+    752;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 120;
+    Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 264;
+    Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 280;
+    Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 188;
+    Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 284;
+    Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 192;
+    Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 288;
+    Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 772;
+    Thread_allocate_object_slow_stub_offset = 204;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 108;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 268;
+    Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 780;
+    Thread_call_to_runtime_stub_offset = 144;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 796;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    308;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
+    316;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    312;
+    320;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    228;
+    236;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    348;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 344;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 248;
+    Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    752;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 252;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 256;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 316;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 124;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 356;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    352;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 364;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    740;
-static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 132;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     768;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 260;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 264;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 324;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 136;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 132;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 368;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 364;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    360;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 372;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    756;
+static constexpr dart::compiler::target::word
+    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_group_offset = 784;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 232;
+    Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 236;
+    Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 244;
+    Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 300;
+    Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 304;
+    Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 208;
+    Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 744;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 748;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    756;
+    772;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 240;
+    Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 320;
+    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_saved_stack_limit_offset =
     60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     80;
 static constexpr dart::compiler::target::word
@@ -3673,17 +3685,19 @@
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 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_write_barrier_code_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 260;
+    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;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 760;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 764;
+    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;
@@ -3743,7 +3757,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        700, 704, 708, 712, 716, -1, 720, -1, 724, 728, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -4055,156 +4069,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1480;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1488;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1576;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1520;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1496;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1544;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1520;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1584;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1504;
+    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 = 1512;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1528;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -4213,18 +4227,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1544;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -4285,8 +4301,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -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;
@@ -4596,154 +4612,154 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 368;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    700;
+    716;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    704;
+    720;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 120;
+    Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 264;
+    Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 280;
+    Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 188;
+    Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 284;
+    Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 192;
+    Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 288;
+    Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 740;
+    Thread_allocate_object_slow_stub_offset = 204;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 756;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 108;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 268;
+    Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 748;
+    Thread_call_to_runtime_stub_offset = 144;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 764;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    308;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
+    316;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    312;
+    320;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    228;
+    236;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    348;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 344;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 248;
+    Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    720;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 252;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 256;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 316;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 124;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 356;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    352;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 364;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    708;
-static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 132;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     736;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 260;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 264;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 324;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 136;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 132;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 368;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 364;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    360;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 372;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    724;
+static constexpr dart::compiler::target::word
+    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_group_offset = 752;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 232;
+    Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 236;
+    Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 244;
+    Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 300;
+    Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 304;
+    Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 208;
+    Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 712;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 728;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 716;
+    Thread_saved_shadow_call_stack_offset = 732;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    724;
+    740;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 240;
+    Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 320;
+    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_saved_stack_limit_offset =
     60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     80;
 static constexpr dart::compiler::target::word
@@ -4752,17 +4768,19 @@
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 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_write_barrier_code_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 260;
+    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;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 728;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 732;
+    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;
@@ -5131,156 +5149,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1544;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1584;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1560;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1608;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1584;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1616;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1568;
+    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 = 1576;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1592;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -5289,18 +5307,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1608;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5361,9 +5381,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 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;
@@ -5674,156 +5694,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1480;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1488;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1576;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1520;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1496;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1544;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1520;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1584;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1504;
+    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 = 1512;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1528;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -5832,18 +5852,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1544;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5904,8 +5926,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -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;
@@ -6216,156 +6238,156 @@
 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 = 728;
+    Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1544;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1552;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    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;
+    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;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 272;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     616;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    624;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    456;
 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 = 112;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1584;
-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_float_zerow_address_offset = 720;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1560;
+    Thread_double_negate_address_offset = 688;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1608;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 632;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 256;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 720;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    704;
+static constexpr dart::compiler::target::word
+    Thread_float_zerow_address_offset = 728;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1584;
+static constexpr dart::compiler::target::word
+    Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1616;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    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 = 272;
+    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 = 296;
+    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 = 288;
+    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 = 312;
+    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 = 304;
+    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 = 328;
+    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 = 320;
+    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 = 344;
+    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 = 336;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+    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 = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1568;
+    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 = 1576;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1592;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 632;
+    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 = 584;
+    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 = 400;
+    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 = 576;
+    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 = 392;
+    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
@@ -6374,18 +6396,20 @@
 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 =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    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 =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1608;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -6446,9 +6470,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 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;
@@ -6720,11 +6744,11 @@
 static constexpr dart::compiler::target::word AOT_ICData_state_bits_offset = 20;
 static constexpr dart::compiler::target::word AOT_Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word AOT_Isolate_current_tag_offset =
-    20;
-static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     24;
-static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     28;
+static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+    32;
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_object_store_offset = 20;
 static constexpr dart::compiler::target::word
@@ -6732,8 +6756,8 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 16;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    36;
-static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 16;
+    40;
+static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     12;
 static constexpr dart::compiler::target::word
@@ -6795,148 +6819,148 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 368;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 732;
+    AOT_Thread_active_exception_offset = 748;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 736;
+    AOT_Thread_active_stacktrace_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 120;
+    AOT_Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 264;
+    AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 280;
+    AOT_Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 188;
+    AOT_Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 284;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 288;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 196;
+    AOT_Thread_allocate_object_slow_stub_offset = 204;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    772;
+    788;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 332;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    112;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 108;
+    120;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 268;
+    AOT_Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 136;
+    AOT_Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    780;
+    796;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    308;
+    316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 312;
+    AOT_Thread_deoptimize_entry_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 228;
+    AOT_Thread_deoptimize_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 348;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 344;
+    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_enter_safepoint_stub_offset = 248;
+    AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 752;
+    AOT_Thread_execution_state_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 252;
+    AOT_Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 256;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 316;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 128;
+    AOT_Thread_fix_allocation_stub_code_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 124;
+    AOT_Thread_fix_callers_target_code_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 360;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 356;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 352;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 364;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 740;
+    AOT_Thread_global_object_pool_offset = 756;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 132;
+    AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 768;
+    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_group_offset =
-    784;
+    800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 300;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 304;
+    AOT_Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 208;
+    AOT_Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        140;
+        148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 744;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 748;
+    AOT_Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 756;
+    AOT_Thread_safepoint_state_offset = 772;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 240;
+    AOT_Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 320;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -6944,13 +6968,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 80;
 static constexpr dart::compiler::target::word
@@ -6960,18 +6984,20 @@
     20;
 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_write_barrier_code_offset = 116;
+    AOT_Thread_write_barrier_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 260;
+    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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    760;
+    776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 764;
+    AOT_Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7044,7 +7070,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        700, 704, 708, 712, 716, -1, 720, -1, 724, 728, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -7327,11 +7353,11 @@
 static constexpr dart::compiler::target::word AOT_ICData_state_bits_offset = 40;
 static constexpr dart::compiler::target::word AOT_Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word AOT_Isolate_current_tag_offset =
-    40;
-static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
-static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+    64;
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_object_store_offset = 40;
 static constexpr dart::compiler::target::word
@@ -7339,8 +7365,8 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    72;
-static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 32;
+    80;
+static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     24;
 static constexpr dart::compiler::target::word
@@ -7402,149 +7428,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1480;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1488;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1576;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1520;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1496;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1552;
+    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 =
-    1584;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1504;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1512;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1528;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -7552,13 +7578,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -7568,18 +7594,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1544;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7653,8 +7681,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -7940,11 +7968,11 @@
 static constexpr dart::compiler::target::word AOT_ICData_state_bits_offset = 40;
 static constexpr dart::compiler::target::word AOT_Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word AOT_Isolate_current_tag_offset =
-    40;
-static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
-static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+    64;
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_object_store_offset = 40;
 static constexpr dart::compiler::target::word
@@ -7952,8 +7980,8 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    72;
-static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 32;
+    80;
+static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     24;
 static constexpr dart::compiler::target::word
@@ -8015,149 +8043,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1544;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1552;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1584;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1560;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1616;
+    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 =
-    1648;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1568;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1576;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1592;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -8165,13 +8193,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -8181,18 +8209,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8266,9 +8296,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8550,11 +8580,11 @@
 static constexpr dart::compiler::target::word AOT_ICData_state_bits_offset = 40;
 static constexpr dart::compiler::target::word AOT_Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word AOT_Isolate_current_tag_offset =
-    40;
-static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
-static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+    64;
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_object_store_offset = 40;
 static constexpr dart::compiler::target::word
@@ -8562,8 +8592,8 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    72;
-static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 32;
+    80;
+static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -8625,149 +8655,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1480;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1488;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1576;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1520;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1496;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1552;
+    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 =
-    1584;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1504;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1512;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1528;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -8775,13 +8805,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -8791,18 +8821,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1544;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8876,8 +8908,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9159,11 +9191,11 @@
 static constexpr dart::compiler::target::word AOT_ICData_state_bits_offset = 40;
 static constexpr dart::compiler::target::word AOT_Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word AOT_Isolate_current_tag_offset =
-    40;
-static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
-static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
+    64;
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_object_store_offset = 40;
 static constexpr dart::compiler::target::word
@@ -9171,8 +9203,8 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    72;
-static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 32;
+    80;
+static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -9234,149 +9266,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1544;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1552;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1584;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1560;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1616;
+    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 =
-    1648;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1568;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1576;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1592;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -9384,13 +9416,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -9400,18 +9432,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -9485,9 +9519,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9839,148 +9873,148 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 368;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 732;
+    AOT_Thread_active_exception_offset = 748;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 736;
+    AOT_Thread_active_stacktrace_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 120;
+    AOT_Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 264;
+    AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 272;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 280;
+    AOT_Thread_allocate_object_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 188;
+    AOT_Thread_allocate_object_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 284;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 288;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 196;
+    AOT_Thread_allocate_object_slow_stub_offset = 204;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    772;
+    788;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 332;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    112;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 108;
+    120;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 324;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 268;
+    AOT_Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 136;
+    AOT_Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    780;
+    796;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    308;
+    316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    224;
+    232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 312;
+    AOT_Thread_deoptimize_entry_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 228;
+    AOT_Thread_deoptimize_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 348;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 344;
+    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_enter_safepoint_stub_offset = 248;
+    AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 752;
+    AOT_Thread_execution_state_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 252;
+    AOT_Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 256;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 316;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 128;
+    AOT_Thread_fix_allocation_stub_code_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 124;
+    AOT_Thread_fix_callers_target_code_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 360;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 356;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 352;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 364;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 740;
+    AOT_Thread_global_object_pool_offset = 756;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 132;
+    AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 768;
+    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_group_offset =
-    784;
+    800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 300;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 304;
+    AOT_Thread_switchable_call_miss_entry_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 208;
+    AOT_Thread_switchable_call_miss_stub_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 328;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        140;
+        148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 744;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 748;
+    AOT_Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 756;
+    AOT_Thread_safepoint_state_offset = 772;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 240;
+    AOT_Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 320;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -9988,13 +10022,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 292;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 80;
 static constexpr dart::compiler::target::word
@@ -10004,18 +10038,20 @@
     20;
 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_write_barrier_code_offset = 116;
+    AOT_Thread_write_barrier_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 260;
+    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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    760;
+    776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 764;
+    AOT_Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10088,7 +10124,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        700, 704, 708, 712, 716, -1, 720, -1, 724, 728, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -10439,149 +10475,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1480;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1488;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1576;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1520;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1496;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1552;
+    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 =
-    1584;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1504;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1512;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1528;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -10589,13 +10625,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -10605,18 +10641,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1544;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10690,8 +10728,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11045,149 +11083,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1544;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1552;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1584;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1560;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1616;
+    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 =
-    1648;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1568;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1576;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1592;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -11195,13 +11233,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -11211,18 +11249,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11296,9 +11336,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11648,149 +11688,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1480;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1488;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1560;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1576;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1520;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1496;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1552;
+    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 =
-    1584;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1504;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1512;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1528;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -11798,13 +11838,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -11814,18 +11854,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1536;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1544;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11899,8 +11941,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, -1,   -1,   1424, 1432,
-        1440, 1448, 1456, -1,   1464, 1472, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12250,149 +12292,149 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 728;
+    AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1544;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1552;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1624;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    216;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
+    224;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    616;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 688;
+    AOT_Thread_double_abs_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 680;
+    AOT_Thread_double_negate_address_offset = 688;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1584;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 712;
+    AOT_Thread_float_absolute_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 704;
+    AOT_Thread_float_negate_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 696;
+    AOT_Thread_float_not_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 720;
+    AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1560;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1616;
+    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 =
-    1648;
+    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 = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    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 = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 416;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+    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 = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    200;
+    208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 664;
+    AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1568;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1576;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1592;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 632;
+    AOT_Thread_slow_type_test_entry_point_offset = 640;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -12400,13 +12442,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
@@ -12416,18 +12458,20 @@
     40;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+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;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
+    AOT_Thread_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 520;
 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;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1600;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -12501,9 +12545,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472,
-        1480, 1488, 1496, 1504, -1,   -1,   -1,   -1,   1512, 1520, -1,
-        -1,   1528, 1536, 1544, -1,   -1,   -1,   -1,   -1,   -1};
+        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};
 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/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index 940f48d..2954ccb7 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -275,6 +275,7 @@
   FIELD(Thread, top_offset)                                                    \
   FIELD(Thread, top_resource_offset)                                           \
   FIELD(Thread, unboxed_int64_runtime_arg_offset)                              \
+  FIELD(Thread, unboxed_double_runtime_arg_offset)                             \
   FIELD(Thread, vm_tag_offset)                                                 \
   FIELD(Thread, write_barrier_code_offset)                                     \
   FIELD(Thread, write_barrier_entry_point_offset)                              \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index 64edf34..7b3e42e 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -1022,6 +1022,51 @@
 
 #undef EMIT_BOX_ALLOCATION
 
+void StubCodeCompiler::GenerateBoxDoubleStub(Assembler* assembler) {
+#if defined(TARGET_ARCH_ARM)
+  if (!TargetCPUFeatures::vfp_supported()) {
+    __ Breakpoint();
+    return;
+  }
+#endif  // defined(TARGET_ARCH_ARM)
+  Label call_runtime;
+  if (!FLAG_use_slow_path && FLAG_inline_alloc) {
+    __ TryAllocate(compiler::DoubleClass(), &call_runtime,
+                   compiler::Assembler::kFarJump, BoxDoubleStubABI::kResultReg,
+                   BoxDoubleStubABI::kTempReg);
+    __ StoreUnboxedDouble(
+        BoxDoubleStubABI::kValueReg, BoxDoubleStubABI::kResultReg,
+        compiler::target::Double::value_offset() - kHeapObjectTag);
+    __ Ret();
+  }
+  __ Bind(&call_runtime);
+  __ EnterStubFrame();
+  __ PushObject(NullObject()); /* Make room for result. */
+  __ StoreUnboxedDouble(BoxDoubleStubABI::kValueReg, THR,
+                        target::Thread::unboxed_double_runtime_arg_offset());
+  __ CallRuntime(kBoxDoubleRuntimeEntry, 0);
+  __ PopRegister(BoxDoubleStubABI::kResultReg);
+  __ LeaveStubFrame();
+  __ Ret();
+}
+
+void StubCodeCompiler::GenerateDoubleToIntegerStub(Assembler* assembler) {
+#if defined(TARGET_ARCH_ARM)
+  if (!TargetCPUFeatures::vfp_supported()) {
+    __ Breakpoint();
+    return;
+  }
+#endif  // defined(TARGET_ARCH_ARM)
+  __ EnterStubFrame();
+  __ StoreUnboxedDouble(DoubleToIntegerStubABI::kInputReg, THR,
+                        target::Thread::unboxed_double_runtime_arg_offset());
+  __ PushObject(NullObject()); /* Make room for result. */
+  __ CallRuntime(kDoubleToIntegerRuntimeEntry, 0);
+  __ PopRegister(DoubleToIntegerStubABI::kResultReg);
+  __ LeaveStubFrame();
+  __ Ret();
+}
+
 }  // namespace compiler
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index 7a139c4..11775fc 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -243,16 +243,18 @@
   // Allocate context.
   {
     Label done, slow_path;
-    __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
-                        &slow_path,
-                        R0,  // instance
-                        R1,  // end address
-                        R2, R3);
-    __ ldr(R1, Address(THR, target::Thread::object_null_offset()));
-    __ str(R1, FieldAddress(R0, target::Context::parent_offset()));
-    __ LoadImmediate(R1, 1);
-    __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()));
-    __ b(&done);
+    if (!FLAG_use_slow_path && FLAG_inline_alloc) {
+      __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
+                          &slow_path,
+                          R0,  // instance
+                          R1,  // end address
+                          R2, R3);
+      __ ldr(R1, Address(THR, target::Thread::object_null_offset()));
+      __ str(R1, FieldAddress(R0, target::Context::parent_offset()));
+      __ LoadImmediate(R1, 1);
+      __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()));
+      __ b(&done);
+    }
 
     __ Bind(&slow_path);
 
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 8694eb4..128d968 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -472,7 +472,7 @@
   __ cmp(R4, Operand(0));
   __ b(&no_type_args, EQ);
   __ ldr(R0, Address(FP, kReceiverOffset * target::kWordSize));
-  __ ldr(R3, Address(R0, R4));
+  __ LoadCompressed(R3, Address(R0, R4));
   __ Bind(&no_type_args);
 
   // Push type arguments & extracted method.
@@ -482,16 +482,18 @@
   // Allocate context.
   {
     Label done, slow_path;
-    __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
-                        &slow_path,
-                        R0,  // instance
-                        R1,  // end address
-                        R2, R3);
-    __ ldr(R1, Address(THR, target::Thread::object_null_offset()));
-    __ str(R1, FieldAddress(R0, target::Context::parent_offset()));
-    __ LoadImmediate(R1, 1);
-    __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()));
-    __ b(&done);
+    if (!FLAG_use_slow_path && FLAG_inline_alloc) {
+      __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
+                          &slow_path,
+                          R0,  // instance
+                          R1,  // end address
+                          R2, R3);
+      __ ldr(R1, Address(THR, target::Thread::object_null_offset()));
+      __ str(R1, FieldAddress(R0, target::Context::parent_offset()));
+      __ LoadImmediate(R1, 1);
+      __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()));
+      __ b(&done);
+    }
 
     __ Bind(&slow_path);
 
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 74405e0..096d3c7 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -417,7 +417,7 @@
   __ cmpq(RDX, Immediate(0));
   __ j(EQUAL, &no_type_args, Assembler::kNearJump);
   __ movq(RAX, Address(RBP, target::kWordSize * kReceiverOffsetInWords));
-  __ movq(RCX, Address(RAX, RDX, TIMES_1, 0));
+  __ LoadCompressed(RCX, Address(RAX, RDX, TIMES_1, 0));
   __ Bind(&no_type_args);
   __ pushq(RCX);
 
@@ -427,16 +427,18 @@
   // Allocate context.
   {
     Label done, slow_path;
-    __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
-                        &slow_path, Assembler::kFarJump,
-                        RAX,  // instance
-                        RSI,  // end address
-                        RDI);
-    __ movq(RSI, Address(THR, target::Thread::object_null_offset()));
-    __ movq(FieldAddress(RAX, target::Context::parent_offset()), RSI);
-    __ movq(FieldAddress(RAX, target::Context::num_variables_offset()),
-            Immediate(1));
-    __ jmp(&done);
+    if (!FLAG_use_slow_path && FLAG_inline_alloc) {
+      __ TryAllocateArray(kContextCid, target::Context::InstanceSize(1),
+                          &slow_path, Assembler::kFarJump,
+                          RAX,  // instance
+                          RSI,  // end address
+                          RDI);
+      __ movq(RSI, Address(THR, target::Thread::object_null_offset()));
+      __ movq(FieldAddress(RAX, target::Context::parent_offset()), RSI);
+      __ movq(FieldAddress(RAX, target::Context::num_variables_offset()),
+              Immediate(1));
+      __ jmp(&done);
+    }
 
     __ Bind(&slow_path);
 
@@ -2724,13 +2726,11 @@
   __ Stop("No debugging in PRODUCT mode");
 #else
   __ EnterStubFrame();
-  __ pushq(RDX);           // Preserve receiver.
   __ pushq(RBX);           // Preserve IC data.
   __ pushq(Immediate(0));  // Result slot.
   __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
   __ popq(CODE_REG);  // Original stub.
   __ popq(RBX);       // Restore IC data.
-  __ popq(RDX);       // Restore receiver.
   __ LeaveStubFrame();
 
   __ movq(RAX, FieldAddress(CODE_REG, target::Code::entry_point_offset()));
diff --git a/runtime/vm/compiler/type_testing_stubs_arm.cc b/runtime/vm/compiler/type_testing_stubs_arm.cc
deleted file mode 100644
index ccd9d36..0000000
--- a/runtime/vm/compiler/type_testing_stubs_arm.cc
+++ /dev/null
@@ -1,29 +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.
-
-#include "vm/globals.h"
-
-#if defined(TARGET_ARCH_ARM) && !defined(DART_PRECOMPILED_RUNTIME)
-
-#include "vm/type_testing_stubs.h"
-
-#define __ assembler->
-
-namespace dart {
-
-void TypeTestingStubGenerator::BuildOptimizedTypeTestStub(
-    compiler::Assembler* assembler,
-    compiler::UnresolvedPcRelativeCalls* unresolved_calls,
-    const Code& slow_type_test_stub,
-    HierarchyInfo* hi,
-    const Type& type,
-    const Class& type_class) {
-  BuildOptimizedTypeTestStubFastCases(assembler, hi, type, type_class);
-  __ Branch(compiler::Address(
-      THR, compiler::target::Thread::slow_type_test_entry_point_offset()));
-}
-
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_ARM) && !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/compiler/type_testing_stubs_arm64.cc b/runtime/vm/compiler/type_testing_stubs_arm64.cc
deleted file mode 100644
index 850b198..0000000
--- a/runtime/vm/compiler/type_testing_stubs_arm64.cc
+++ /dev/null
@@ -1,32 +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.
-
-#include "vm/globals.h"
-
-#if defined(TARGET_ARCH_ARM64) && !defined(DART_PRECOMPILED_RUNTIME)
-
-#include "vm/type_testing_stubs.h"
-
-#define __ assembler->
-
-namespace dart {
-
-void TypeTestingStubGenerator::BuildOptimizedTypeTestStub(
-    compiler::Assembler* assembler,
-    compiler::UnresolvedPcRelativeCalls* unresolved_calls,
-    const Code& slow_type_test_stub,
-    HierarchyInfo* hi,
-    const Type& type,
-    const Class& type_class) {
-  BuildOptimizedTypeTestStubFastCases(assembler, hi, type, type_class);
-  __ ldr(
-      TMP,
-      compiler::Address(
-          THR, compiler::target::Thread::slow_type_test_entry_point_offset()));
-  __ br(TMP);
-}
-
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/compiler/type_testing_stubs_x64.cc b/runtime/vm/compiler/type_testing_stubs_x64.cc
deleted file mode 100644
index 7722cee..0000000
--- a/runtime/vm/compiler/type_testing_stubs_x64.cc
+++ /dev/null
@@ -1,29 +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.
-
-#include "vm/globals.h"
-
-#if defined(TARGET_ARCH_X64) && !defined(DART_PRECOMPILED_RUNTIME)
-
-#include "vm/type_testing_stubs.h"
-
-#define __ assembler->
-
-namespace dart {
-
-void TypeTestingStubGenerator::BuildOptimizedTypeTestStub(
-    compiler::Assembler* assembler,
-    compiler::UnresolvedPcRelativeCalls* unresolved_calls,
-    const Code& slow_type_test_stub,
-    HierarchyInfo* hi,
-    const Type& type,
-    const Class& type_class) {
-  BuildOptimizedTypeTestStubFastCases(assembler, hi, type, type_class);
-  __ jmp(compiler::Address(
-      THR, compiler::target::Thread::slow_type_test_entry_point_offset()));
-}
-
-}  // namespace dart
-
-#endif  // defined(TARGET_ARCH_X64) && !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 00f5670..05f2342 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -487,6 +487,19 @@
   static const Register kLengthReg = R4;
 };
 
+// ABI for BoxDoubleStub.
+struct BoxDoubleStubABI {
+  static const FpuRegister kValueReg = Q0;
+  static const Register kTempReg = R1;
+  static const Register kResultReg = R0;
+};
+
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = Q0;
+  static const Register kResultReg = R0;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 4700efa..c661cc2 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -327,6 +327,19 @@
   static const Register kLengthReg = R4;
 };
 
+// ABI for BoxDoubleStub.
+struct BoxDoubleStubABI {
+  static const FpuRegister kValueReg = V0;
+  static const Register kTempReg = R1;
+  static const Register kResultReg = R0;
+};
+
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = V0;
+  static const Register kResultReg = R0;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index e727643..5bbb8e6 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -226,6 +226,19 @@
   static const Register kLengthReg = kResultReg;
 };
 
+// ABI for BoxDoubleStub.
+struct BoxDoubleStubABI {
+  static const FpuRegister kValueReg = XMM0;
+  static const Register kTempReg = EBX;
+  static const Register kResultReg = EAX;
+};
+
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = XMM0;
+  static const Register kResultReg = EAX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 6e7c80b..73296ae 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -299,6 +299,19 @@
   static const Register kLengthReg = kResultReg;
 };
 
+// ABI for BoxDoubleStub.
+struct BoxDoubleStubABI {
+  static const FpuRegister kValueReg = XMM0;
+  static const Register kTempReg = RBX;
+  static const Register kResultReg = RAX;
+};
+
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = XMM0;
+  static const Register kResultReg = RAX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/cpu_x64.h b/runtime/vm/cpu_x64.h
index 6e6cf83..d0d1a14 100644
--- a/runtime/vm/cpu_x64.h
+++ b/runtime/vm/cpu_x64.h
@@ -61,7 +61,9 @@
   static bool sse4_1_supported() { return HostCPUFeatures::sse4_1_supported(); }
   static bool popcnt_supported() { return HostCPUFeatures::popcnt_supported(); }
   static bool abm_supported() { return HostCPUFeatures::abm_supported(); }
-  static bool double_truncate_round_supported() { return false; }
+  static bool double_truncate_round_supported() {
+    return HostCPUFeatures::sse4_1_supported();
+  }
 };
 
 }  // namespace dart
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index a3e59b2..7655866 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -90,6 +90,91 @@
   DISALLOW_COPY_AND_ASSIGN(ReadOnlyHandles);
 };
 
+class DartInitializationState {
+ public:
+  enum class InitializationState {
+    kUnInitialized = 0,
+    kInitializing = 1,
+    kInitialized = 2,
+    kCleaningup = 3,
+  };
+
+  DartInitializationState()
+      : state_(InitializationState::kUnInitialized),
+        in_use_(false),
+        lock_(nullptr) {
+    lock_ = new Monitor();
+  }
+  ~DartInitializationState() {}
+
+  bool SetInitializing() {
+    MonitorLocker ml(lock_);
+    if (state_ != InitializationState::kUnInitialized || in_use_) {
+      return false;
+    }
+    state_ = InitializationState::kInitializing;
+    return true;
+  }
+
+  void ResetInitializing() {
+    MonitorLocker ml(lock_);
+    ASSERT((state_ == InitializationState::kInitializing) && !in_use_);
+    state_ = InitializationState::kUnInitialized;
+  }
+
+  void SetInitialized() {
+    MonitorLocker ml(lock_);
+    ASSERT((state_ == InitializationState::kInitializing) && !in_use_);
+    state_ = InitializationState::kInitialized;
+  }
+
+  bool IsInitialized() const {
+    MonitorLocker ml(lock_);
+    return (state_ == InitializationState::kInitialized);
+  }
+
+  bool SetCleaningup() {
+    MonitorLocker ml(lock_);
+    if (state_ != InitializationState::kInitialized) {
+      return false;
+    }
+    state_ = InitializationState::kCleaningup;
+    return true;
+  }
+
+  void SetUnInitialized() {
+    MonitorLocker ml(lock_);
+    ASSERT(state_ == InitializationState::kCleaningup);
+    while (in_use_) {
+      ml.Wait();
+    }
+    state_ = InitializationState::kUnInitialized;
+  }
+
+  bool SetInUse() {
+    MonitorLocker ml(lock_);
+    if (state_ != InitializationState::kInitialized) {
+      return false;
+    }
+    in_use_ = true;
+    return true;
+  }
+
+  void ResetInUse() {
+    MonitorLocker ml(lock_);
+    ASSERT((state_ == InitializationState::kInitialized) ||
+           (state_ == InitializationState::kCleaningup));
+    in_use_ = false;
+    ml.NotifyAll();
+  }
+
+ private:
+  InitializationState state_;
+  bool in_use_;
+  Monitor* lock_;
+};
+static DartInitializationState init_state_;
+
 static void CheckOffsets() {
 #if !defined(IS_SIMARM_X64)
   // These offsets are embedded in precompiled instructions. We need the
@@ -180,26 +265,29 @@
 #endif  // !defined(IS_SIMARM_X64)
 }
 
-char* Dart::Init(const uint8_t* vm_isolate_snapshot,
-                 const uint8_t* instructions_snapshot,
-                 Dart_IsolateGroupCreateCallback create_group,
-                 Dart_InitializeIsolateCallback initialize_isolate,
-                 Dart_IsolateShutdownCallback shutdown,
-                 Dart_IsolateCleanupCallback cleanup,
-                 Dart_IsolateGroupCleanupCallback cleanup_group,
-                 Dart_ThreadExitCallback thread_exit,
-                 Dart_FileOpenCallback file_open,
-                 Dart_FileReadCallback file_read,
-                 Dart_FileWriteCallback file_write,
-                 Dart_FileCloseCallback file_close,
-                 Dart_EntropySource entropy_source,
-                 Dart_GetVMServiceAssetsArchive get_service_assets,
-                 bool start_kernel_isolate,
-                 Dart_CodeObserver* observer) {
+char* Dart::DartInit(const uint8_t* vm_isolate_snapshot,
+                     const uint8_t* instructions_snapshot,
+                     Dart_IsolateGroupCreateCallback create_group,
+                     Dart_InitializeIsolateCallback initialize_isolate,
+                     Dart_IsolateShutdownCallback shutdown,
+                     Dart_IsolateCleanupCallback cleanup,
+                     Dart_IsolateGroupCleanupCallback cleanup_group,
+                     Dart_ThreadExitCallback thread_exit,
+                     Dart_FileOpenCallback file_open,
+                     Dart_FileReadCallback file_read,
+                     Dart_FileWriteCallback file_write,
+                     Dart_FileCloseCallback file_close,
+                     Dart_EntropySource entropy_source,
+                     Dart_GetVMServiceAssetsArchive get_service_assets,
+                     bool start_kernel_isolate,
+                     Dart_CodeObserver* observer) {
   CheckOffsets();
-  // TODO(iposva): Fix race condition here.
-  if (vm_isolate_ != NULL || !Flags::Initialized()) {
-    return Utils::StrDup("VM already initialized or flags not initialized.");
+
+  if (!Flags::Initialized()) {
+    return Utils::StrDup("VM initialization failed-VM Flags not initialized.");
+  }
+  if (vm_isolate_ != NULL) {
+    return Utils::StrDup("VM initialization is in an inconsistent state.");
   }
 
   const Snapshot* snapshot = nullptr;
@@ -439,6 +527,41 @@
   return NULL;
 }
 
+char* Dart::Init(const uint8_t* vm_isolate_snapshot,
+                 const uint8_t* instructions_snapshot,
+                 Dart_IsolateGroupCreateCallback create_group,
+                 Dart_InitializeIsolateCallback initialize_isolate,
+                 Dart_IsolateShutdownCallback shutdown,
+                 Dart_IsolateCleanupCallback cleanup,
+                 Dart_IsolateGroupCleanupCallback cleanup_group,
+                 Dart_ThreadExitCallback thread_exit,
+                 Dart_FileOpenCallback file_open,
+                 Dart_FileReadCallback file_read,
+                 Dart_FileWriteCallback file_write,
+                 Dart_FileCloseCallback file_close,
+                 Dart_EntropySource entropy_source,
+                 Dart_GetVMServiceAssetsArchive get_service_assets,
+                 bool start_kernel_isolate,
+                 Dart_CodeObserver* observer) {
+  if (!init_state_.SetInitializing()) {
+    return Utils::StrDup(
+        "Bad VM initialization state, "
+        "already initialized or "
+        "multiple threads initializing the VM.");
+  }
+  char* retval = DartInit(vm_isolate_snapshot, instructions_snapshot,
+                          create_group, initialize_isolate, shutdown, cleanup,
+                          cleanup_group, thread_exit, file_open, file_read,
+                          file_write, file_close, entropy_source,
+                          get_service_assets, start_kernel_isolate, observer);
+  if (retval != NULL) {
+    init_state_.ResetInitializing();
+    return retval;
+  }
+  init_state_.SetInitialized();
+  return NULL;
+}
+
 static void DumpAliveIsolates(intptr_t num_attempts,
                               bool only_aplication_isolates) {
   IsolateGroup::ForEach([&](IsolateGroup* group) {
@@ -501,9 +624,10 @@
 
 char* Dart::Cleanup() {
   ASSERT(Isolate::Current() == NULL);
-  if (vm_isolate_ == NULL) {
+  if (!init_state_.SetCleaningup()) {
     return Utils::StrDup("VM already terminated.");
   }
+  ASSERT(vm_isolate_ != NULL);
 
   if (FLAG_trace_shutdown) {
     OS::PrintErr("[+%" Pd64 "ms] SHUTDOWN: Starting shutdown\n",
@@ -592,6 +716,7 @@
     OS::PrintErr("[+%" Pd64 "ms] SHUTDOWN: Deleting thread pool\n",
                  UptimeMillis());
   }
+  init_state_.SetUnInitialized();
   thread_pool_->Shutdown();
   delete thread_pool_;
   thread_pool_ = NULL;
@@ -681,6 +806,18 @@
   return NULL;
 }
 
+bool Dart::IsInitialized() {
+  return init_state_.IsInitialized();
+}
+
+bool Dart::SetActiveApiCall() {
+  return init_state_.SetInUse();
+}
+
+void Dart::ResetActiveApiCall() {
+  init_state_.ResetInUse();
+}
+
 Isolate* Dart::CreateIsolate(const char* name_prefix,
                              const Dart_IsolateFlags& api_flags,
                              IsolateGroup* isolate_group) {
@@ -928,8 +1065,7 @@
   }
 #if !defined(PRODUCT)
   ServiceIsolate::MaybeMakeServiceIsolate(I);
-  if (!ServiceIsolate::IsServiceIsolate(I) &&
-      !KernelIsolate::IsKernelIsolate(I)) {
+  if (!Isolate::IsSystemIsolate(I)) {
     I->message_handler()->set_should_pause_on_start(
         FLAG_pause_isolates_on_start);
     I->message_handler()->set_should_pause_on_exit(FLAG_pause_isolates_on_exit);
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index b0776be..c22f1f0 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -9,6 +9,8 @@
 #include "include/dart_tools_api.h"
 #include "vm/allocation.h"
 #include "vm/isolate.h"
+#include "vm/lockers.h"
+#include "vm/os_thread.h"
 #include "vm/snapshot.h"
 
 namespace dart {
@@ -48,6 +50,13 @@
   // (caller owns error message and has to free it).
   static char* Cleanup();
 
+  // Returns true if the VM is initialized.
+  static bool IsInitialized();
+
+  // Used to Indicate that a Dart API call is active.
+  static bool SetActiveApiCall();
+  static void ResetActiveApiCall();
+
   static Isolate* CreateIsolate(const char* name_prefix,
                                 const Dart_IsolateFlags& api_flags,
                                 IsolateGroup* isolate_group);
@@ -149,6 +158,23 @@
   static Dart_GCEventCallback gc_event_callback() { return gc_event_callback_; }
 
  private:
+  static char* DartInit(const uint8_t* vm_snapshot_data,
+                        const uint8_t* vm_snapshot_instructions,
+                        Dart_IsolateGroupCreateCallback create_group,
+                        Dart_InitializeIsolateCallback initialize_isolate,
+                        Dart_IsolateShutdownCallback shutdown,
+                        Dart_IsolateCleanupCallback cleanup,
+                        Dart_IsolateGroupCleanupCallback cleanup_group,
+                        Dart_ThreadExitCallback thread_exit,
+                        Dart_FileOpenCallback file_open,
+                        Dart_FileReadCallback file_read,
+                        Dart_FileWriteCallback file_write,
+                        Dart_FileCloseCallback file_close,
+                        Dart_EntropySource entropy_source,
+                        Dart_GetVMServiceAssetsArchive get_service_assets,
+                        bool start_kernel_isolate,
+                        Dart_CodeObserver* observer);
+
   static constexpr const char* kVmIsolateName = "vm-isolate";
 
   static void WaitForIsolateShutdown();
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 86cd097..5d21abf 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1972,6 +1972,7 @@
 
 DART_EXPORT Dart_Handle Dart_RunLoop() {
   Isolate* I;
+  bool result;
   {
     Thread* T = Thread::Current();
     I = T->isolate();
@@ -1988,14 +1989,21 @@
     RunLoopData data;
     data.monitor = &monitor;
     data.done = false;
-    I->message_handler()->Run(I->group()->thread_pool(), NULL, RunLoopDone,
-                              reinterpret_cast<uword>(&data));
-    while (!data.done) {
-      ml.Wait();
+    result =
+        I->message_handler()->Run(I->group()->thread_pool(), NULL, RunLoopDone,
+                                  reinterpret_cast<uword>(&data));
+    if (result) {
+      while (!data.done) {
+        ml.Wait();
+      }
     }
   }
   ::Dart_EnterIsolate(Api::CastIsolate(I));
-  if (I->sticky_error() != Object::null()) {
+  if (!result) {
+    Thread* T = Thread::Current();
+    TransitionNativeToVM transition(T);
+    return Api::NewError("Run method in isolate message handler failed");
+  } else if (I->sticky_error() != Object::null()) {
     Thread* T = Thread::Current();
     TransitionNativeToVM transition(T);
     return Api::NewHandle(T, I->StealStickyError());
@@ -2164,8 +2172,8 @@
 
   const Object& object = Object::Handle(Z, Api::UnwrapHandle(handle));
   return PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
-                                           object, port_id,
-                                           Message::kNormalPriority));
+                                           /* same_group */ false, object,
+                                           port_id, Message::kNormalPriority));
 }
 
 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) {
@@ -6310,31 +6318,6 @@
   return OS::GetCurrentMonotonicFrequency();
 }
 
-DART_EXPORT void Dart_GlobalTimelineSetRecordedStreams(int64_t stream_mask) {
-#if defined(SUPPORT_TIMELINE)
-  const bool api_enabled = (stream_mask & DART_TIMELINE_STREAM_API) != 0;
-  const bool compiler_enabled =
-      (stream_mask & DART_TIMELINE_STREAM_COMPILER) != 0;
-  const bool dart_enabled = (stream_mask & DART_TIMELINE_STREAM_DART) != 0;
-  const bool debugger_enabled =
-      (stream_mask & DART_TIMELINE_STREAM_DEBUGGER) != 0;
-  const bool embedder_enabled =
-      (stream_mask & DART_TIMELINE_STREAM_EMBEDDER) != 0;
-  const bool gc_enabled = (stream_mask & DART_TIMELINE_STREAM_GC) != 0;
-  const bool isolate_enabled =
-      (stream_mask & DART_TIMELINE_STREAM_ISOLATE) != 0;
-  const bool vm_enabled = (stream_mask & DART_TIMELINE_STREAM_VM) != 0;
-  Timeline::SetStreamAPIEnabled(api_enabled);
-  Timeline::SetStreamCompilerEnabled(compiler_enabled);
-  Timeline::SetStreamDartEnabled(dart_enabled);
-  Timeline::SetStreamDebuggerEnabled(debugger_enabled);
-  Timeline::SetStreamEmbedderEnabled(embedder_enabled);
-  Timeline::SetStreamGCEnabled(gc_enabled);
-  Timeline::SetStreamIsolateEnabled(isolate_enabled);
-  Timeline::SetStreamVMEnabled(vm_enabled);
-#endif
-}
-
 DART_EXPORT void Dart_TimelineEvent(const char* label,
                                     int64_t timestamp0,
                                     int64_t timestamp1_or_async_id,
@@ -6349,54 +6332,57 @@
   if (type > Dart_Timeline_Event_Flow_End) {
     return;
   }
+  if (!Dart::SetActiveApiCall()) {
+    return;
+  }
   TimelineStream* stream = Timeline::GetEmbedderStream();
   ASSERT(stream != NULL);
   TimelineEvent* event = stream->StartEvent();
-  if (event == NULL) {
-    return;
+  if (event != NULL) {
+    switch (type) {
+      case Dart_Timeline_Event_Begin:
+        event->Begin(label, timestamp0);
+        break;
+      case Dart_Timeline_Event_End:
+        event->End(label, timestamp0);
+        break;
+      case Dart_Timeline_Event_Instant:
+        event->Instant(label, timestamp0);
+        break;
+      case Dart_Timeline_Event_Duration:
+        event->Duration(label, timestamp0, timestamp1_or_async_id);
+        break;
+      case Dart_Timeline_Event_Async_Begin:
+        event->AsyncBegin(label, timestamp1_or_async_id, timestamp0);
+        break;
+      case Dart_Timeline_Event_Async_End:
+        event->AsyncEnd(label, timestamp1_or_async_id, timestamp0);
+        break;
+      case Dart_Timeline_Event_Async_Instant:
+        event->AsyncInstant(label, timestamp1_or_async_id, timestamp0);
+        break;
+      case Dart_Timeline_Event_Counter:
+        event->Counter(label, timestamp0);
+        break;
+      case Dart_Timeline_Event_Flow_Begin:
+        event->FlowBegin(label, timestamp1_or_async_id, timestamp0);
+        break;
+      case Dart_Timeline_Event_Flow_Step:
+        event->FlowStep(label, timestamp1_or_async_id, timestamp0);
+        break;
+      case Dart_Timeline_Event_Flow_End:
+        event->FlowEnd(label, timestamp1_or_async_id, timestamp0);
+        break;
+      default:
+        FATAL("Unknown Dart_Timeline_Event_Type");
+    }
+    event->SetNumArguments(argument_count);
+    for (intptr_t i = 0; i < argument_count; i++) {
+      event->CopyArgument(i, argument_names[i], argument_values[i]);
+    }
+    event->Complete();
   }
-  switch (type) {
-    case Dart_Timeline_Event_Begin:
-      event->Begin(label, timestamp0);
-      break;
-    case Dart_Timeline_Event_End:
-      event->End(label, timestamp0);
-      break;
-    case Dart_Timeline_Event_Instant:
-      event->Instant(label, timestamp0);
-      break;
-    case Dart_Timeline_Event_Duration:
-      event->Duration(label, timestamp0, timestamp1_or_async_id);
-      break;
-    case Dart_Timeline_Event_Async_Begin:
-      event->AsyncBegin(label, timestamp1_or_async_id, timestamp0);
-      break;
-    case Dart_Timeline_Event_Async_End:
-      event->AsyncEnd(label, timestamp1_or_async_id, timestamp0);
-      break;
-    case Dart_Timeline_Event_Async_Instant:
-      event->AsyncInstant(label, timestamp1_or_async_id, timestamp0);
-      break;
-    case Dart_Timeline_Event_Counter:
-      event->Counter(label, timestamp0);
-      break;
-    case Dart_Timeline_Event_Flow_Begin:
-      event->FlowBegin(label, timestamp1_or_async_id, timestamp0);
-      break;
-    case Dart_Timeline_Event_Flow_Step:
-      event->FlowStep(label, timestamp1_or_async_id, timestamp0);
-      break;
-    case Dart_Timeline_Event_Flow_End:
-      event->FlowEnd(label, timestamp1_or_async_id, timestamp0);
-      break;
-    default:
-      FATAL("Unknown Dart_Timeline_Event_Type");
-  }
-  event->SetNumArguments(argument_count);
-  for (intptr_t i = 0; i < argument_count; i++) {
-    event->CopyArgument(i, argument_names[i], argument_values[i]);
-  }
-  event->Complete();
+  Dart::ResetActiveApiCall();
 #endif
 }
 
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index cefda8b..bd5d3e9 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -212,7 +212,7 @@
 
   // Returns true if the handle holds a Dart Instance.
   static bool IsInstance(Dart_Handle handle) {
-    return (ClassId(handle) >= kInstanceCid);
+    return !IsInternalOnlyClassId(ClassId(handle));
   }
 
   // Returns true if the handle is non-dangling.
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index b61e6c2..fc1877f 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -24,6 +24,7 @@
 namespace dart {
 
 DECLARE_FLAG(bool, verify_acquired_data);
+DECLARE_FLAG(bool, complete_timeline);
 
 #ifndef PRODUCT
 
@@ -9305,13 +9306,13 @@
 
 TEST_CASE(DartAPI_InvokeVMServiceMethod) {
   char buffer[1024];
-  snprintf(buffer, sizeof(buffer),
-           R"({
-               "jsonrpc": 2.0,
-               "id": "foo",
-               "method": "getVM",
-               "params": { }
-              })");
+  Utils::SNPrint(buffer, sizeof(buffer),
+                 R"({
+                  "jsonrpc": 2.0,
+                  "id": "foo",
+                  "method": "getVM",
+                  "params": { }
+                 })");
   uint8_t* response_json = nullptr;
   intptr_t response_json_length = 0;
   char* error = nullptr;
@@ -9361,6 +9362,152 @@
   EXPECT(result == Dart_True());
 }
 
+static Monitor* loop_test_lock = new Monitor();
+static bool loop_test_exit = false;
+static bool loop_reset_count = false;
+
+#if !defined(PRODUCT)
+static void InvokeServiceMessages(uword param) {
+  char buffer[1024];
+  Utils::SNPrint(buffer, sizeof(buffer),
+                 R"({
+                  "jsonrpc": 2.0,
+                  "id": "foo",
+                  "method": "getVM",
+                  "params": { }
+                 })");
+  uint8_t* response_json = nullptr;
+  intptr_t response_json_length = 0;
+  char* error = nullptr;
+  uint32_t count = 0;
+  do {
+    error = nullptr;
+    response_json = nullptr;
+    response_json_length = 0;
+    const bool success = Dart_InvokeVMServiceMethod(
+        reinterpret_cast<uint8_t*>(buffer), strlen(buffer), &response_json,
+        &response_json_length, &error);
+    if (success) {
+      MonitorLocker ml(loop_test_lock);
+      EXPECT(error == nullptr);
+      free(response_json);
+      if (count == 10) {
+        loop_test_exit = true;
+        ml.Notify();
+      }
+      count++;
+    } else {
+      free(error);
+    }
+  } while (count < 100);
+}
+
+TEST_CASE(DartAPI_InvokeVMServiceMethod_Loop) {
+  MonitorLocker ml(loop_test_lock);
+  loop_test_exit = false;
+  loop_reset_count = false;
+  OSThread::Start("InvokeServiceMessages", InvokeServiceMessages, 0);
+  while (!loop_test_exit) {
+    ml.Wait();
+  }
+}
+#endif  // !defined(PRODUCT)
+
+static void HandleResponse(Dart_Port dest_port_id, Dart_CObject* message) {
+  printf("Response received\n");
+}
+
+static void CreateNativePorts(uword param) {
+  uint32_t count = 0;
+  do {
+    const Dart_Port port_id = Dart_NewNativePort("tst", &HandleResponse, false);
+    if (port_id != ILLEGAL_PORT) {
+      Dart_CloseNativePort(port_id);
+      MonitorLocker ml(loop_test_lock);
+      if (count == 10) {
+        loop_test_exit = true;
+        ml.Notify();
+      }
+      count++;
+    }
+  } while (count < 100);
+}
+
+TEST_CASE(DartAPI_NativePort_Loop) {
+  MonitorLocker ml(loop_test_lock);
+  loop_test_exit = false;
+  loop_reset_count = false;
+  OSThread::Start("NativePort", CreateNativePorts, 0);
+  while (!loop_test_exit) {
+    ml.Wait();
+  }
+}
+
+#if !defined(PRODUCT)
+static void CreateTimelineEvents(uword param) {
+  {
+    MonitorLocker ml(loop_test_lock);
+    loop_test_exit = true;
+    ml.Notify();
+  }
+  do {
+    Dart_TimelineEvent("T1", 0, 1, Dart_Timeline_Event_Begin, 0, NULL, NULL);
+    Dart_TimelineEvent("T1", 0, 9, Dart_Timeline_Event_End, 0, NULL, NULL);
+    Dart_TimelineEvent("T2", 0, 1, Dart_Timeline_Event_Instant, 0, NULL, NULL);
+    Dart_TimelineEvent("T3", 0, 2, Dart_Timeline_Event_Duration, 0, NULL, NULL);
+    Dart_TimelineEvent("T4", 0, 3, Dart_Timeline_Event_Async_Begin, 0, NULL,
+                       NULL);
+    Dart_TimelineEvent("T4", 9, 3, Dart_Timeline_Event_Async_End, 0, NULL,
+                       NULL);
+    Dart_TimelineEvent("T5", 1, 4, Dart_Timeline_Event_Async_Instant, 0, NULL,
+                       NULL);
+    Dart_TimelineEvent("T7", 1, 4, Dart_Timeline_Event_Counter, 0, NULL, NULL);
+    Dart_TimelineEvent("T8", 1, 4, Dart_Timeline_Event_Flow_Begin, 0, NULL,
+                       NULL);
+    Dart_TimelineEvent("T8", 1, 4, Dart_Timeline_Event_Flow_Step, 0, NULL,
+                       NULL);
+    Dart_TimelineEvent("T8", 1, 4, Dart_Timeline_Event_Flow_End, 0, NULL, NULL);
+  } while (true);
+}
+
+UNIT_TEST_CASE(DartAPI_TimelineEvents_Loop) {
+  EXPECT(Dart_SetVMFlags(TesterState::argc, TesterState::argv) == nullptr);
+  FLAG_complete_timeline = true;
+  Dart_InitializeParams params;
+  memset(&params, 0, sizeof(Dart_InitializeParams));
+  params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
+  params.vm_snapshot_data = TesterState::vm_snapshot_data;
+  params.create_group = TesterState::create_callback;
+  params.shutdown_isolate = TesterState::shutdown_callback;
+  params.cleanup_group = TesterState::group_cleanup_callback;
+  params.start_kernel_isolate = true;
+  char* result = nullptr;
+
+  result = Dart_Initialize(&params);
+  EXPECT(result == nullptr);
+  {
+    MonitorLocker ml(loop_test_lock);
+    loop_test_exit = false;
+    loop_reset_count = false;
+    OSThread::Start("TimelineEvents", CreateTimelineEvents, 0);
+    while (!loop_test_exit) {
+      printf("VM waiting for notification\n");
+      ml.Wait();
+    }
+    loop_test_exit = false;
+  }
+  result = Dart_Cleanup();
+  EXPECT(result == nullptr);
+  for (intptr_t i = 0; i < 50; i++) {
+    EXPECT(Dart_SetVMFlags(TesterState::argc, TesterState::argv) == nullptr);
+    result = Dart_Initialize(&params);
+    EXPECT(result == nullptr);
+    result = Dart_Cleanup();
+    EXPECT(result == nullptr);
+  }
+}
+#endif  // !defined(PRODUCT)
+
 static intptr_t EchoInt(double x) {
   return x;
 }
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index f062909..9037441 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -727,7 +727,7 @@
   return result.ptr();
 }
 
-ObjectPtr DartLibraryCalls::HandleMessage(const Object& handler,
+ObjectPtr DartLibraryCalls::HandleMessage(Dart_Port port_id,
                                           const Instance& message) {
   auto thread = Thread::Current();
   auto zone = thread->zone();
@@ -743,7 +743,7 @@
     args = Array::New(kNumArguments);
     isolate->isolate_object_store()->set_dart_args_2(args);
   }
-  args.SetAt(0, handler);
+  args.SetAt(0, Integer::Handle(zone, Integer::New(port_id)));
   args.SetAt(1, message);
 #if !defined(PRODUCT)
   if (isolate->debugger()->IsStepping()) {
@@ -753,10 +753,9 @@
     isolate->debugger()->SetResumeAction(Debugger::kStepInto);
   }
 #endif
-  const Object& result =
+  const Object& handler =
       Object::Handle(zone, DartEntry::InvokeFunction(function, args));
-  ASSERT(result.IsNull() || result.IsError());
-  return result.ptr();
+  return handler.ptr();
 }
 
 ObjectPtr DartLibraryCalls::DrainMicrotaskQueue() {
@@ -786,24 +785,36 @@
   return result.ptr();
 }
 
-ObjectPtr DartLibraryCalls::RehashObjects(
-    Thread* thread,
-    const Object& array_or_growable_array) {
+static ObjectPtr RehashObjects(Zone* zone,
+                               const Library& library,
+                               const Object& array_or_growable_array) {
   ASSERT(array_or_growable_array.IsArray() ||
          array_or_growable_array.IsGrowableObjectArray());
-
-  auto zone = thread->zone();
-  const Library& collections_lib =
-      Library::Handle(zone, Library::CollectionLibrary());
-  const Function& rehashing_function = Function::Handle(
-      zone,
-      collections_lib.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
+  const auto& rehashing_function = Function::Handle(
+      zone, library.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
   ASSERT(!rehashing_function.IsNull());
 
-  const Array& arguments = Array::Handle(zone, Array::New(1));
+  const auto& arguments = Array::Handle(zone, Array::New(1));
   arguments.SetAt(0, array_or_growable_array);
 
   return DartEntry::InvokeFunction(rehashing_function, arguments);
 }
 
+ObjectPtr DartLibraryCalls::RehashObjectsInDartCollection(
+    Thread* thread,
+    const Object& array_or_growable_array) {
+  auto zone = thread->zone();
+  const auto& collections_lib =
+      Library::Handle(zone, Library::CollectionLibrary());
+  return RehashObjects(zone, collections_lib, array_or_growable_array);
+}
+
+ObjectPtr DartLibraryCalls::RehashObjectsInDartCore(
+    Thread* thread,
+    const Object& array_or_growable_array) {
+  auto zone = thread->zone();
+  const auto& core_lib = Library::Handle(zone, Library::CoreLibrary());
+  return RehashObjects(zone, core_lib, array_or_growable_array);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 5740337..6ec9067 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -291,12 +291,13 @@
   // Returns the handler if one has been registered for this port id.
   static ObjectPtr LookupHandler(Dart_Port port_id);
 
+  // Returns handler on success, an ErrorPtr on failure, null if can't find
+  // handler for this port id.
+  static ObjectPtr HandleMessage(Dart_Port port_id, const Instance& message);
+
   // Returns a list of open ReceivePorts.
   static ObjectPtr LookupOpenPorts();
 
-  // Returns null on success, an ErrorPtr on failure.
-  static ObjectPtr HandleMessage(const Object& handler,
-                                 const Instance& dart_message);
 
   // Returns null on success, an ErrorPtr on failure.
   static ObjectPtr DrainMicrotaskQueue();
@@ -306,9 +307,15 @@
   // Returns null on success, an ErrorPtr on failure.
   static ObjectPtr EnsureScheduleImmediate();
 
-  // Runs the `_rehashObjects()` function.
-  static ObjectPtr RehashObjects(Thread* thread,
-                                 const Object& array_or_growable_array);
+  // Runs the `_rehashObjects()` function in `dart:collection`.
+  static ObjectPtr RehashObjectsInDartCollection(
+      Thread* thread,
+      const Object& array_or_growable_array);
+
+  // Runs the `_rehashObjects()` function in `dart:core`.
+  static ObjectPtr RehashObjectsInDartCore(
+      Thread* thread,
+      const Object& array_or_growable_array);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 71d09e7..c02e4fb 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -132,7 +132,8 @@
   ASSERT(script_url.Equals(func_url));
 #endif  // defined(DEBUG)
   ASSERT(!IsLatent());
-  ASSERT(token_pos.IsWithin(func.token_pos(), func.end_token_pos()));
+  ASSERT(func.is_generated_body() ||
+         token_pos.IsWithin(func.token_pos(), func.end_token_pos()));
   ASSERT(func.is_debuggable());
   token_pos_.store(token_pos);
   end_token_pos_.store(token_pos);
@@ -3249,12 +3250,7 @@
   }
 
   // There is no local function within function that contains the
-  // breakpoint token position. Resolve the breakpoint if necessary
-  // and set the code breakpoints.
-  if (!location->EnsureIsResolved(function, token_pos)) {
-    // Failed to resolve breakpoint location for some reason
-    return false;
-  }
+  // breakpoint token position.
   return true;
 }
 
@@ -3262,6 +3258,27 @@
   if (!function.is_debuggable()) {
     return;
   }
+  Function& resolved_function = Function::Handle(function.ptr());
+  // Synchronous generators have the form:
+  //
+  // user_func sync* {
+  //   :sync_op_gen() {
+  //     :sync_op(..) yielding {
+  //       // ...
+  //     }
+  //   }
+  // }
+  //
+  // Setting a breakpoint in a sync* function should result in a code
+  // breakpoint being inserted into the synthetic :sync_op(..) function node.
+  // In order to ensure we're setting the breakpoint in the right function,
+  // we need to be able to check against the token positions of the
+  // non-synthetic function. Note, we only check for the innermost synthetic
+  // method as this is where the user's code will execute.
+  if (function.IsSyncGenClosure()) {
+    resolved_function ^= function.parent_function();
+    resolved_function ^= resolved_function.parent_function();
+  }
   auto thread = Thread::Current();
   auto zone = thread->zone();
 
@@ -3275,7 +3292,9 @@
   RELEASE_ASSERT(thread->IsInStoppedMutatorsScope());
   for (intptr_t i = 0; i < breakpoint_locations_.length(); i++) {
     BreakpointLocation* location = breakpoint_locations_.At(i);
-    if (EnsureLocationIsInFunction(zone, function, location)) {
+    if (EnsureLocationIsInFunction(zone, resolved_function, location)) {
+      // Ensure the location is resolved for the original function.
+      location->EnsureIsResolved(function, location->token_pos());
       if (FLAG_verbose_debug) {
         Breakpoint* bpt = location->breakpoints();
         while (bpt != NULL) {
diff --git a/runtime/vm/double_conversion.cc b/runtime/vm/double_conversion.cc
index 7357658..55b7836 100644
--- a/runtime/vm/double_conversion.cc
+++ b/runtime/vm/double_conversion.cc
@@ -175,4 +175,21 @@
   return (parsed_count == length);
 }
 
+IntegerPtr DoubleToInteger(Zone* zone, double val) {
+  if (isinf(val) || isnan(val)) {
+    const Array& args = Array::Handle(zone, Array::New(1));
+    args.SetAt(0, String::Handle(zone, String::New("Infinity or NaN toInt")));
+    Exceptions::ThrowByType(Exceptions::kUnsupported, args);
+  }
+  int64_t ival = 0;
+  if (val <= static_cast<double>(kMinInt64)) {
+    ival = kMinInt64;
+  } else if (val >= static_cast<double>(kMaxInt64)) {
+    ival = kMaxInt64;
+  } else {  // Representable in int64_t.
+    ival = static_cast<int64_t>(val);
+  }
+  return Integer::New(ival);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/double_conversion.h b/runtime/vm/double_conversion.h
index 27a8172..6fbe380 100644
--- a/runtime/vm/double_conversion.h
+++ b/runtime/vm/double_conversion.h
@@ -24,6 +24,8 @@
 
 bool CStringToDouble(const char* str, intptr_t length, double* result);
 
+IntegerPtr DoubleToInteger(Zone* zone, double val);
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_DOUBLE_CONVERSION_H_
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index 000bab4c..4f98848 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -650,16 +650,17 @@
   auto file_close = Dart::file_close_callback();
   if ((file_open == nullptr) || (file_write == nullptr) ||
       (file_close == nullptr)) {
+    OS::PrintErr("warning: Could not access file callbacks.");
     return;
   }
 
   TextBuffer comments_buffer(128 * KB);
 
-  auto comments_file = file_open(
-      FLAG_write_code_comments_as_synthetic_source_to, /*write=*/true);
+  const char* filename = FLAG_write_code_comments_as_synthetic_source_to;
+  void* comments_file = file_open(filename, /*write=*/true);
   if (comments_file == nullptr) {
-    OS::PrintErr("Failed to open file %s\n",
-                 FLAG_write_code_comments_as_synthetic_source_to);
+    OS::PrintErr("warning: Failed to write code comments source: %s\n",
+                 filename);
     return;
   }
 
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index db937ad..2ea7550 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -1139,8 +1139,6 @@
       break;
   }
 
-  Thread* thread = Thread::Current();
-  NoReloadScope no_reload_scope(thread);
   return DartLibraryCalls::InstanceCreate(library, *class_name,
                                           *constructor_name, arguments);
 }
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index c1467f5..5ebf334 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -6,7 +6,7 @@
 // Instead modify 'tools/experimental_features.yaml' and run
 // 'dart tools/generate_experimental_flags.dart' to update.
 //
-// Current version: 2.14.0
+// Current version: 2.15.0
 
 #include "vm/experimental_features.h"
 
@@ -18,15 +18,7 @@
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature) {
   constexpr bool kFeatureValues[] = {
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
+      true, true, true, true, true, true, true, true, true, true,
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureValues));
   return kFeatureValues[static_cast<int>(feature)];
@@ -34,15 +26,16 @@
 
 const char* GetExperimentalFeatureName(ExperimentalFeature feature) {
   constexpr const char* kFeatureNames[] = {
-    "nonfunction-type-aliases",
-    "non-nullable",
-    "extension-methods",
-    "constant-update-2018",
-    "control-flow-collections",
-    "generic-metadata",
-    "set-literals",
-    "spread-collections",
-    "triple-shift",
+      "nonfunction-type-aliases",
+      "non-nullable",
+      "extension-methods",
+      "constant-update-2018",
+      "control-flow-collections",
+      "generic-metadata",
+      "set-literals",
+      "spread-collections",
+      "triple-shift",
+      "constructor-tearoffs",
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureNames));
   return kFeatureNames[static_cast<int>(feature)];
diff --git a/runtime/vm/experimental_features.h b/runtime/vm/experimental_features.h
index ba0588d..c1db176 100644
--- a/runtime/vm/experimental_features.h
+++ b/runtime/vm/experimental_features.h
@@ -6,7 +6,7 @@
 // Instead modify 'tools/experimental_features.yaml' and run
 // 'dart tools/generate_experimental_flags.dart' to update.
 //
-// Current version: 2.14.0
+// Current version: 2.15.0
 
 #ifndef RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
 #define RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
@@ -23,6 +23,7 @@
   set_literals,
   spread_collections,
   triple_shift,
+  constructor_tearoffs,
 };
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature);
diff --git a/runtime/vm/ffi_callback_trampolines.cc b/runtime/vm/ffi_callback_trampolines.cc
index 25057e0..8cc1946 100644
--- a/runtime/vm/ffi_callback_trampolines.cc
+++ b/runtime/vm/ffi_callback_trampolines.cc
@@ -14,8 +14,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, disassemble_stubs);
-
 #if !defined(DART_PRECOMPILED_RUNTIME)
 uword NativeCallbackTrampolines::TrampolineForId(int32_t callback_id) {
 #if defined(DART_PRECOMPILER)
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 543b601..b5f86e7 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -35,6 +35,7 @@
   P(disassemble, bool, false, "Disassemble dart code.")                        \
   P(disassemble_optimized, bool, false, "Disassemble optimized code.")         \
   P(disassemble_relative, bool, false, "Use offsets instead of absolute PCs")  \
+  P(disassemble_stubs, bool, false, "Disassemble generated stubs.")            \
   P(support_disassembler, bool, true, "Support the disassembler.")
 #else
 #define DISASSEMBLE_FLAGS(P, R, C, D)                                          \
@@ -42,6 +43,7 @@
   R(disassemble_optimized, false, bool, false, "Disassemble optimized code.")  \
   R(disassemble_relative, false, bool, false,                                  \
     "Use offsets instead of absolute PCs")                                     \
+  R(disassemble_stubs, false, bool, false, "Disassemble generated stubs.")     \
   R(support_disassembler, false, bool, true, "Support the disassembler.")
 #endif
 
@@ -194,8 +196,7 @@
   P(retain_code_objects, bool, true,                                           \
     "Serialize all code objects even if not otherwise "                        \
     "needed in the precompiled runtime.")                                      \
-  P(enable_isolate_groups, bool, false,                                        \
-    "Enable isolate group support in AOT.")                                    \
+  P(enable_isolate_groups, bool, true, "Enable isolate group support.")        \
   P(show_invisible_frames, bool, false,                                        \
     "Show invisible frames in stack traces.")                                  \
   D(trace_cha, bool, false, "Trace CHA operations")                            \
diff --git a/runtime/vm/flags.cc b/runtime/vm/flags.cc
index 26ff8e2..49dadd2 100644
--- a/runtime/vm/flags.cc
+++ b/runtime/vm/flags.cc
@@ -113,30 +113,29 @@
     }
     switch (type_) {
       case kBoolean: {
-        OS::PrintErr("%s: %s (%s)\n", name_,
-                     *this->bool_ptr_ ? "true" : "false", comment_);
+        OS::Print("%s: %s (%s)\n", name_, *this->bool_ptr_ ? "true" : "false",
+                  comment_);
         break;
       }
       case kInteger: {
-        OS::PrintErr("%s: %d (%s)\n", name_, *this->int_ptr_, comment_);
+        OS::Print("%s: %d (%s)\n", name_, *this->int_ptr_, comment_);
         break;
       }
       case kUint64: {
-        OS::PrintErr("%s: %" Pu64 " (%s)\n", name_, *this->uint64_ptr_,
-                     comment_);
+        OS::Print("%s: %" Pu64 " (%s)\n", name_, *this->uint64_ptr_, comment_);
         break;
       }
       case kString: {
         if (*this->charp_ptr_ != NULL) {
-          OS::PrintErr("%s: '%s' (%s)\n", name_, *this->charp_ptr_, comment_);
+          OS::Print("%s: '%s' (%s)\n", name_, *this->charp_ptr_, comment_);
         } else {
-          OS::PrintErr("%s: (null) (%s)\n", name_, comment_);
+          OS::Print("%s: (null) (%s)\n", name_, comment_);
         }
         break;
       }
       case kOptionHandler:
       case kFlagHandler: {
-        OS::PrintErr("%s: (%s)\n", name_, comment_);
+        OS::Print("%s: (%s)\n", name_, comment_);
         break;
       }
       default:
@@ -499,7 +498,7 @@
 }
 
 void Flags::PrintFlags() {
-  OS::PrintErr("Flag settings:\n");
+  OS::Print("Flag settings:\n");
   for (intptr_t i = 0; i < num_flags_; ++i) {
     flags_[i]->Print();
   }
diff --git a/runtime/vm/hash_map.h b/runtime/vm/hash_map.h
index ec5ea08..7c0cb4b 100644
--- a/runtime/vm/hash_map.h
+++ b/runtime/vm/hash_map.h
@@ -15,7 +15,8 @@
 template <typename KeyValueTrait, typename B, typename Allocator = Zone>
 class BaseDirectChainedHashMap : public B {
  public:
-  explicit BaseDirectChainedHashMap(Allocator* allocator)
+  explicit BaseDirectChainedHashMap(Allocator* allocator,
+                                    intptr_t initial_size = kInitialSize)
       : array_size_(0),
         lists_size_(0),
         count_(0),
@@ -23,8 +24,9 @@
         lists_(NULL),
         free_list_head_(kNil),
         allocator_(allocator) {
-    ResizeLists(kInitialSize);
-    Resize(kInitialSize);
+    ASSERT(Utils::IsPowerOfTwo(initial_size));
+    ResizeLists(initial_size);
+    Resize(initial_size);
   }
 
   BaseDirectChainedHashMap(const BaseDirectChainedHashMap& other);
@@ -407,9 +409,12 @@
       : BaseDirectChainedHashMap<KeyValueTrait, ValueObject>(
             ASSERT_NOTNULL(ThreadState::Current()->zone())) {}
 
-  explicit DirectChainedHashMap(Zone* zone)
+  explicit DirectChainedHashMap(
+      Zone* zone,
+      intptr_t initial_size = DirectChainedHashMap::kInitialSize)
       : BaseDirectChainedHashMap<KeyValueTrait, ValueObject>(
-            ASSERT_NOTNULL(zone)) {}
+            ASSERT_NOTNULL(zone),
+            initial_size) {}
 
   // There is a current use of the copy constructor in CSEInstructionMap
   // (compiler/backend/redundancy_elimination.cc), so work is needed if we
@@ -425,9 +430,11 @@
 class MallocDirectChainedHashMap
     : public BaseDirectChainedHashMap<KeyValueTrait, MallocAllocated, Malloc> {
  public:
-  MallocDirectChainedHashMap()
-      : BaseDirectChainedHashMap<KeyValueTrait, MallocAllocated, Malloc>(NULL) {
-  }
+  MallocDirectChainedHashMap(
+      intptr_t initial_size = MallocDirectChainedHashMap::kInitialSize)
+      : BaseDirectChainedHashMap<KeyValueTrait, MallocAllocated, Malloc>(
+            NULL,
+            initial_size) {}
 
   // The only use of the copy constructor seems to be in hash_map_test.cc.
   // Not disallowing it for now just in case there are other users.
@@ -446,8 +453,12 @@
   ZoneDirectChainedHashMap()
       : BaseDirectChainedHashMap<KeyValueTrait, ZoneAllocated, Zone>(
             ThreadState::Current()->zone()) {}
-  explicit ZoneDirectChainedHashMap(Zone* zone)
-      : BaseDirectChainedHashMap<KeyValueTrait, ZoneAllocated, Zone>(zone) {}
+  explicit ZoneDirectChainedHashMap(
+      Zone* zone,
+      intptr_t initial_size = ZoneDirectChainedHashMap::kInitialSize)
+      : BaseDirectChainedHashMap<KeyValueTrait, ZoneAllocated, Zone>(
+            zone,
+            initial_size) {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ZoneDirectChainedHashMap);
diff --git a/runtime/vm/heap/become_test.cc b/runtime/vm/heap/become_test.cc
index bddba7f..031e497b 100644
--- a/runtime/vm/heap/become_test.cc
+++ b/runtime/vm/heap/become_test.cc
@@ -73,6 +73,63 @@
   EXPECT_EQ(peer, heap->GetPeer(after_obj.ptr()));
 }
 
+ISOLATE_UNIT_TEST_CASE(BecomeForwardObjectId) {
+  Heap* heap = IsolateGroup::Current()->heap();
+
+  const Array& before_obj = Array::Handle(Array::New(0, Heap::kOld));
+  const Array& after_obj = Array::Handle(Array::New(0, Heap::kOld));
+  EXPECT(before_obj.ptr() != after_obj.ptr());
+
+  intptr_t id = 42;
+  intptr_t no_id = 0;
+  heap->SetObjectId(before_obj.ptr(), id);
+  EXPECT_EQ(id, heap->GetObjectId(before_obj.ptr()));
+  EXPECT_EQ(no_id, heap->GetObjectId(after_obj.ptr()));
+
+  const Array& before = Array::Handle(Array::New(1, Heap::kOld));
+  before.SetAt(0, before_obj);
+  const Array& after = Array::Handle(Array::New(1, Heap::kOld));
+  after.SetAt(0, after_obj);
+  Become::ElementsForwardIdentity(before, after);
+
+  EXPECT(before_obj.ptr() == after_obj.ptr());
+  EXPECT_EQ(id, heap->GetObjectId(before_obj.ptr()));
+  EXPECT_EQ(id, heap->GetObjectId(after_obj.ptr()));
+}
+
+ISOLATE_UNIT_TEST_CASE(BecomeForwardMessageId) {
+  Isolate* isolate = Isolate::Current();
+  isolate->set_forward_table_new(new WeakTable());
+  isolate->set_forward_table_old(new WeakTable());
+
+  const Array& before_obj = Array::Handle(Array::New(0, Heap::kOld));
+  const Array& after_obj = Array::Handle(Array::New(0, Heap::kOld));
+  EXPECT(before_obj.ptr() != after_obj.ptr());
+
+  intptr_t id = 42;
+  intptr_t no_id = 0;
+  isolate->forward_table_old()->SetValueExclusive(before_obj.ptr(), id);
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(before_obj.ptr()));
+  EXPECT_EQ(no_id,
+            isolate->forward_table_old()->GetValueExclusive(after_obj.ptr()));
+
+  const Array& before = Array::Handle(Array::New(1, Heap::kOld));
+  before.SetAt(0, before_obj);
+  const Array& after = Array::Handle(Array::New(1, Heap::kOld));
+  after.SetAt(0, after_obj);
+  Become::ElementsForwardIdentity(before, after);
+
+  EXPECT(before_obj.ptr() == after_obj.ptr());
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(before_obj.ptr()));
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(after_obj.ptr()));
+
+  isolate->set_forward_table_new(nullptr);
+  isolate->set_forward_table_old(nullptr);
+}
+
 ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) {
   const String& new_element = String::Handle(String::New("new", Heap::kNew));
   const String& old_element = String::Handle(String::New("old", Heap::kOld));
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 51c2b28..e8b7bc9 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -920,12 +920,21 @@
     }
   }
 
-  // We only come here during hot reload, in which case we assume that none of
-  // the isolates is in the middle of sending messages.
   isolate_group()->ForEachIsolate(
       [&](Isolate* isolate) {
-        RELEASE_ASSERT(isolate->forward_table_new() == nullptr);
-        RELEASE_ASSERT(isolate->forward_table_old() == nullptr);
+        auto before_table = !before_object->IsSmiOrOldObject()
+                                ? isolate->forward_table_new()
+                                : isolate->forward_table_old();
+        if (before_table != nullptr) {
+          intptr_t entry = before_table->RemoveValueExclusive(before_object);
+          if (entry != 0) {
+            auto after_table = !after_object->IsSmiOrOldObject()
+                                   ? isolate->forward_table_new()
+                                   : isolate->forward_table_old();
+            ASSERT(after_table != nullptr);
+            after_table->SetValueExclusive(after_object, entry);
+          }
+        }
       },
       /*at_safepoint=*/true);
 }
diff --git a/runtime/vm/heap/verifier.cc b/runtime/vm/heap/verifier.cc
index 15b26f5..71ea299 100644
--- a/runtime/vm/heap/verifier.cc
+++ b/runtime/vm/heap/verifier.cc
@@ -117,7 +117,7 @@
   // Therefore we disable the handle verification here.
   const bool old_verify_flag = FLAG_verify_handles;
   FLAG_verify_handles = false;
-  if ((obj->GetClassId() >= kInstanceCid) &&
+  if (!IsInternalOnlyClassId(obj->GetClassId()) &&
       (obj->GetClassId() != kTypeArgumentsCid)) {
     if (obj->untag()->IsCanonical()) {
       instanceHandle_ ^= obj;
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 587267c..3d97c84 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -100,13 +100,7 @@
   if (extra_info_->build_id_offset_ != kNoBuildId) {
     auto const note = reinterpret_cast<elf::Note*>(
         raw_memory_ + extra_info_->build_id_offset_);
-    // Check that we have a final build ID. A non-final build ID will either
-    // have a description length of 0 or an initial byte of 0.
-    auto const description = note->data + note->name_size;
-    auto const length = note->description_size;
-    if (length != 0 && description[0] != 0) {
-      return description;
-    }
+    return note->data + note->name_size;
   }
 #endif
   return nullptr;
@@ -118,13 +112,7 @@
   if (extra_info_->build_id_offset_ != kNoBuildId) {
     auto const note = reinterpret_cast<elf::Note*>(
         raw_memory_ + extra_info_->build_id_offset_);
-    // Check that we have a final build ID. A non-final build ID will either
-    // have a description length of 0 or an initial byte of 0.
-    auto const description = note->data + note->name_size;
-    auto const length = note->description_size;
-    if (length != 0 && description[0] != 0) {
-      return length;
-    }
+    return note->description_size;
   }
 #endif
   return 0;
@@ -403,12 +391,14 @@
   auto file_close = Dart::file_close_callback();
   if ((file_open == nullptr) || (file_write == nullptr) ||
       (file_close == nullptr)) {
+    OS::PrintErr("warning: Could not access file callbacks.");
     return;
   }
 
-  auto file = file_open(FLAG_print_instructions_sizes_to, /*write=*/true);
+  const char* filename = FLAG_print_instructions_sizes_to;
+  void* file = file_open(filename, /*write=*/true);
   if (file == nullptr) {
-    OS::PrintErr("Failed to open file %s\n", FLAG_print_instructions_sizes_to);
+    OS::PrintErr("warning: Failed to write instruction sizes: %s\n", filename);
     return;
   }
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index b1a7315..46cf7f1 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -124,8 +124,8 @@
 
 static std::unique_ptr<Message> SerializeMessage(Dart_Port dest_port,
                                                  const Instance& obj) {
-  return WriteMessage(/* can_send_any_object */ false, obj, dest_port,
-                      Message::kNormalPriority);
+  return WriteMessage(/* can_send_any_object */ false, /* same_group */ false,
+                      obj, dest_port, Message::kNormalPriority);
 }
 
 static std::unique_ptr<Message> SerializeMessage(Zone* zone,
@@ -1007,8 +1007,9 @@
   element = Capability::New(capability);
   msg.SetAt(2, element);
 
-  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false, msg,
-                                    main_port(), Message::kOOBPriority));
+  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
+                                    /* same_group */ false, msg, main_port(),
+                                    Message::kOOBPriority));
 }
 
 void IsolateGroup::set_object_store(ObjectStore* object_store) {
@@ -1306,44 +1307,8 @@
   tbes.CopyArgument(0, "isolateName", I->name());
 #endif
 
-  // If the message is in band we lookup the handler to dispatch to.  If the
-  // receive port was closed, we drop the message without deserializing it.
-  // Illegal port is a special case for artificially enqueued isolate library
-  // messages which are handled in C++ code below.
-  Object& msg_handler = Object::Handle(zone);
-  if (!message->IsOOB() && (message->dest_port() != Message::kIllegalPort)) {
-    msg_handler = DartLibraryCalls::LookupHandler(message->dest_port());
-    if (msg_handler.IsError()) {
-      return ProcessUnhandledException(Error::Cast(msg_handler));
-    }
-    if (msg_handler.IsNull()) {
-      // If the port has been closed then the message will be dropped at this
-      // point. Make sure to post to the delivery failure port in that case.
-      if (message->RedirectToDeliveryFailurePort()) {
-        PortMap::PostMessage(std::move(message));
-      }
-      return kOK;
-    }
-  }
-
   // Parse the message.
-  Object& msg_obj = Object::Handle(zone);
-  if (message->IsPersistentHandle()) {
-    // msg_array = [<message>, <object-in-message-to-rehash>]
-    const auto& msg_array = Array::Handle(
-        zone, Array::RawCast(message->persistent_handle()->ptr()));
-    msg_obj = msg_array.At(0);
-    if (msg_array.At(1) != Object::null()) {
-      const auto& objects_to_rehash = Object::Handle(zone, msg_array.At(1));
-      const auto& result = Object::Handle(
-          zone, DartLibraryCalls::RehashObjects(thread, objects_to_rehash));
-      if (result.ptr() != Object::null()) {
-        msg_obj = result.ptr();
-      }
-    }
-  } else {
-    msg_obj = ReadMessage(thread, message.get());
-  }
+  Object& msg_obj = Object::Handle(zone, ReadMessage(thread, message.get()));
   if (msg_obj.IsError()) {
     // An error occurred while reading the message.
     return ProcessUnhandledException(Error::Cast(msg_obj));
@@ -1429,12 +1394,18 @@
       tbes.CopyArgument(1, "mode", "basic");
     }
 #endif
-    const Object& result =
-        Object::Handle(zone, DartLibraryCalls::HandleMessage(msg_handler, msg));
-    if (result.IsError()) {
-      status = ProcessUnhandledException(Error::Cast(result));
+    const Object& msg_handler = Object::Handle(
+        zone, DartLibraryCalls::HandleMessage(message->dest_port(), msg));
+    if (msg_handler.IsError()) {
+      status = ProcessUnhandledException(Error::Cast(msg_handler));
+    } else if (msg_handler.IsNull()) {
+      // If the port has been closed then the message will be dropped at this
+      // point. Make sure to post to the delivery failure port in that case.
+      if (message->RedirectToDeliveryFailurePort()) {
+        PortMap::PostMessage(std::move(message));
+      }
     } else {
-      ASSERT(result.IsNull());
+      // The handler closure which was used to successfully handle the message.
     }
   }
   return status;
@@ -2393,6 +2364,55 @@
   }
   current_allocation_sample_block_ = current;
 }
+
+void Isolate::FreeSampleBlock(SampleBlock* block) {
+  if (block == nullptr) {
+    return;
+  }
+  SampleBlock* head;
+  // We're pushing the freed sample block to the front of the free_block_list_,
+  // which means the last element of the list will be the oldest freed sample.
+  do {
+    head = free_block_list_.load(std::memory_order_acquire);
+    block->next_free_ = head;
+  } while (!free_block_list_.compare_exchange_weak(head, block,
+                                                   std::memory_order_release));
+}
+
+void Isolate::ProcessFreeSampleBlocks(Thread* thread) {
+  SampleBlock* head = free_block_list_.exchange(nullptr);
+  // Reverse the list before processing so older blocks are streamed and reused
+  // first.
+  SampleBlock* reversed_head = nullptr;
+  while (head != nullptr) {
+    SampleBlock* next = head->next_free_;
+    if (reversed_head == nullptr) {
+      reversed_head = head;
+      reversed_head->next_free_ = nullptr;
+    } else {
+      head->next_free_ = reversed_head;
+      reversed_head = head;
+    }
+    head = next;
+  }
+  head = reversed_head;
+  while (head != nullptr) {
+    if (Service::profiler_stream.enabled() && !IsSystemIsolate(this)) {
+      StackZone zone(thread);
+      HandleScope handle_scope(thread);
+      Profile profile;
+      profile.Build(thread, nullptr, head);
+      ServiceEvent event(this, ServiceEvent::kCpuSamples);
+      event.set_cpu_profile(&profile);
+      Service::HandleEvent(&event);
+    }
+    SampleBlock* next = head->next_free_;
+    head->next_free_ = nullptr;
+    head->evictable_ = true;
+    Profiler::sample_block_buffer()->FreeBlock(head);
+    head = next;
+  }
+}
 #endif  // !defined(PRODUCT)
 
 // static
@@ -2493,6 +2513,25 @@
     ServiceIsolate::SendIsolateShutdownMessage();
 #if !defined(PRODUCT)
     debugger()->Shutdown();
+    // Cleanup profiler state.
+    SampleBlock* cpu_block = current_sample_block();
+    if (cpu_block != nullptr) {
+      cpu_block->release_block();
+    }
+    SampleBlock* allocation_block = current_allocation_sample_block();
+    if (allocation_block != nullptr) {
+      allocation_block->release_block();
+    }
+
+    // Process the previously assigned sample blocks if we're using the
+    // profiler's sample buffer. Some tests create their own SampleBlockBuffer
+    // and handle block processing themselves.
+    if ((cpu_block != nullptr || allocation_block != nullptr) &&
+        Profiler::sample_block_buffer() != nullptr) {
+      StackZone zone(thread);
+      HandleScope handle_scope(thread);
+      Profiler::sample_block_buffer()->ProcessCompletedBlocks();
+    }
 #endif
   }
 
@@ -2551,26 +2590,6 @@
   // requests anymore.
   Thread::ExitIsolate();
 
-#if !defined(PRODUCT)
-  // Cleanup profiler state.
-  SampleBlock* cpu_block = isolate->current_sample_block();
-  if (cpu_block != nullptr) {
-    cpu_block->release_block();
-  }
-  SampleBlock* allocation_block = isolate->current_allocation_sample_block();
-  if (allocation_block != nullptr) {
-    allocation_block->release_block();
-  }
-
-  // Process the previously assigned sample blocks if we're using the
-  // profiler's sample buffer. Some tests create their own SampleBlockBuffer
-  // and handle block processing themselves.
-  if ((cpu_block != nullptr || allocation_block != nullptr) &&
-      Profiler::sample_block_buffer() != nullptr) {
-    Profiler::sample_block_buffer()->ProcessCompletedBlocks();
-  }
-#endif  // !defined(PRODUCT)
-
   // Now it's safe to delete the isolate.
   delete isolate;
 
@@ -2643,16 +2662,18 @@
                                   ValidationPolicy validate_frames) {
   ASSERT(visitor != nullptr);
 
+  // Visit objects in the field table.
+  // N.B.: The heap snapshot writer requires visiting the field table first, so
+  // that the pointer visitation order aligns with order of field name metadata.
+  if (!visitor->trace_values_through_fields()) {
+    field_table()->VisitObjectPointers(visitor);
+  }
+
   // Visit objects in the isolate object store.
   if (isolate_object_store() != nullptr) {
     isolate_object_store()->VisitObjectPointers(visitor);
   }
 
-  // Visit objects in the field table.
-  if (!visitor->trace_values_through_fields()) {
-    field_table()->VisitObjectPointers(visitor);
-  }
-
   visitor->clear_gc_root_type();
   // Visit the objects directly referenced from the isolate structure.
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&current_tag_));
@@ -2660,12 +2681,6 @@
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&ic_miss_code_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&tag_table_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&sticky_error_));
-  if (isolate_group_ != nullptr) {
-    if (isolate_group_->source()->loaded_blobs_ != nullptr) {
-      visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(
-          &(isolate_group_->source()->loaded_blobs_)));
-    }
-  }
 #if !defined(PRODUCT)
   visitor->VisitPointer(
       reinterpret_cast<ObjectPtr*>(&pending_service_extension_calls_));
@@ -2825,14 +2840,19 @@
 
 void IsolateGroup::VisitObjectPointers(ObjectPointerVisitor* visitor,
                                        ValidationPolicy validate_frames) {
+  VisitSharedPointers(visitor);
+  for (Isolate* isolate : isolates_) {
+    isolate->VisitObjectPointers(visitor, validate_frames);
+  }
+  VisitStackPointers(visitor, validate_frames);
+}
+
+void IsolateGroup::VisitSharedPointers(ObjectPointerVisitor* visitor) {
   // if class table is shared, it's stored on isolate group
   if (class_table() != nullptr) {
     // Visit objects in the class table.
     class_table()->VisitObjectPointers(visitor);
   }
-  for (Isolate* isolate : isolates_) {
-    isolate->VisitObjectPointers(visitor, validate_frames);
-  }
   api_state()->VisitObjectPointersUnlocked(visitor);
   // Visit objects in the object store.
   if (object_store() != nullptr) {
@@ -2840,7 +2860,6 @@
   }
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&saved_unlinked_calls_));
   initial_field_table()->VisitObjectPointers(visitor);
-  VisitStackPointers(visitor, validate_frames);
 
   // Visit the boxed_field_list_.
   // 'boxed_field_list_' access via mutator and background compilation threads
@@ -2864,6 +2883,11 @@
         visitor);
   }
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
+
+  if (source()->loaded_blobs_ != nullptr) {
+    visitor->VisitPointer(
+        reinterpret_cast<ObjectPtr*>(&(source()->loaded_blobs_)));
+  }
 }
 
 void IsolateGroup::VisitStackPointers(ObjectPointerVisitor* visitor,
@@ -3291,8 +3315,8 @@
     element = Smi::New(Isolate::kBeforeNextEventAction);
     msg.SetAt(2, element);
     std::unique_ptr<Message> message = WriteMessage(
-        /* can_send_any_object */ false, msg, main_port(),
-        Message::kOOBPriority);
+        /* can_send_any_object */ false, /* same_group */ false, msg,
+        main_port(), Message::kOOBPriority);
     bool posted = PortMap::PostMessage(std::move(message));
     ASSERT(posted);
   }
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index d7c8e5d..d6555b3 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -713,6 +713,7 @@
   // running, and the visitor must not allocate.
   void VisitObjectPointers(ObjectPointerVisitor* visitor,
                            ValidationPolicy validate_frames);
+  void VisitSharedPointers(ObjectPointerVisitor* visitor);
   void VisitStackPointers(ObjectPointerVisitor* visitor,
                           ValidationPolicy validate_frames);
   void VisitObjectIdRingPointers(ObjectPointerVisitor* visitor);
@@ -1098,6 +1099,13 @@
   SampleBlock* current_sample_block() const { return current_sample_block_; }
   void set_current_sample_block(SampleBlock* current);
 
+  void FreeSampleBlock(SampleBlock* block);
+  void ProcessFreeSampleBlocks(Thread* thread);
+  bool should_process_blocks() const {
+    return free_block_list_.load(std::memory_order_relaxed) != nullptr;
+  }
+  std::atomic<SampleBlock*> free_block_list_ = nullptr;
+
   // Returns the current SampleBlock used to track Dart allocation samples.
   //
   // Allocations should only occur on the mutator thread for an isolate, so we
@@ -1766,31 +1774,10 @@
   }
 
  private:
-  friend class DisabledNoActiveIsolateScope;
   Thread* thread_;
   Isolate* saved_isolate_;
 };
 
-// Can be used inside a [NoActiveIsolateScope] to set the current isolate.
-class DisabledNoActiveIsolateScope : public StackResource {
- public:
-  explicit DisabledNoActiveIsolateScope(NoActiveIsolateScope* scope)
-      : StackResource(Thread::Current()),
-        thread_(static_cast<Thread*>(thread())),
-        scope_(scope) {
-    ASSERT(thread_->isolate() == nullptr);
-    thread_->isolate_ = scope_->saved_isolate_;
-  }
-  ~DisabledNoActiveIsolateScope() {
-    ASSERT(thread_->isolate_ == scope_->saved_isolate_);
-    thread_->isolate_ = nullptr;
-  }
-
- private:
-  Thread* thread_;
-  NoActiveIsolateScope* scope_;
-};
-
 }  // namespace dart
 
 #endif  // RUNTIME_VM_ISOLATE_H_
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 182c090..71e5d04 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -530,15 +530,26 @@
   return (a_length - a_cursor);
 }
 
-static void AcceptCompilation(Thread* thread) {
+static ObjectPtr AcceptCompilation(Thread* thread) {
   TransitionVMToNative transition(thread);
   Dart_KernelCompilationResult result = KernelIsolate::AcceptCompilation();
   if (result.status != Dart_KernelCompilationStatus_Ok) {
-    FATAL1(
-        "An error occurred in the CFE while accepting the most recent"
+    if (result.status != Dart_KernelCompilationStatus_MsgFailed) {
+      FATAL1(
+          "An error occurred while accepting the most recent"
+          " compilation results: %s",
+          result.error);
+    }
+    TIR_Print(
+        "An error occurred while accepting the most recent"
         " compilation results: %s",
         result.error);
+    Zone* zone = thread->zone();
+    const auto& error_str = String::Handle(zone, String::New(result.error));
+    free(result.error);
+    return ApiError::New(error_str);
   }
+  return Object::null();
 }
 
 // If [root_script_url] is null, attempt to load from [kernel_buffer].
@@ -639,7 +650,14 @@
     // we have accepted the compilation to clear some state in the incremental
     // compiler.
     if (did_kernel_compilation) {
-      AcceptCompilation(thread);
+      const auto& result = Object::Handle(Z, AcceptCompilation(thread));
+      if (result.IsError()) {
+        const auto& error = Error::Cast(result);
+        AddReasonForCancelling(new Aborted(Z, error));
+        ReportReasonsForCancelling();
+        CommonFinalizeTail(num_old_libs_);
+        return false;
+      }
     }
     TIR_Print("---- SKIPPING RELOAD (No libraries were modified)\n");
     return false;
@@ -704,18 +722,9 @@
   //
   // If loading the hot-reload diff succeeded we'll finalize the loading, which
   // will either commit or reject the reload request.
-  auto& result = Object::Handle(Z);
-  {
-    // We need to set an active isolate while loading kernel. The kernel loader
-    // itself is independent of the current isolate, but if the application
-    // needs native extensions, the kernel loader calls out to the embedder to
-    // load those, which requires currently an active isolate (since embedder
-    // will callback into VM using Dart API).
-    DisabledNoActiveIsolateScope active_isolate_scope(&no_active_isolate_scope);
-
-    result = IG->program_reload_context()->ReloadPhase2LoadKernel(
-        kernel_program.get(), root_lib_url_);
-  }
+  const auto& result =
+      Object::Handle(Z, IG->program_reload_context()->ReloadPhase2LoadKernel(
+                            kernel_program.get(), root_lib_url_));
 
   if (result.IsError()) {
     TIR_Print("---- LOAD FAILED, ABORTING RELOAD\n");
@@ -739,6 +748,17 @@
       heap->CollectAllGarbage(Heap::kLowMemory);
     }
 
+    // If we use the CFE and performed a compilation, we need to notify that
+    // we have accepted the compilation to clear some state in the incremental
+    // compiler.
+    if (did_kernel_compilation) {
+      const auto& result = Object::Handle(Z, AcceptCompilation(thread));
+      if (result.IsError()) {
+        const auto& error = Error::Cast(result);
+        AddReasonForCancelling(new Aborted(Z, error));
+      }
+    }
+
     if (!FLAG_reload_force_rollback && !HasReasonsForCancelling()) {
       TIR_Print("---- COMMITTING RELOAD\n");
       isolate_group_->program_reload_context()->ReloadPhase4CommitPrepare();
@@ -828,13 +848,6 @@
         GrowableObjectArray::Handle(Z, IG->object_store()->libraries())
             .Length();
     CommonFinalizeTail(final_library_count);
-
-    // If we use the CFE and performed a compilation, we need to notify that
-    // we have accepted the compilation to clear some state in the incremental
-    // compiler.
-    if (did_kernel_compilation) {
-      AcceptCompilation(thread);
-    }
   }
 
   // Reenable concurrent marking if it was initially on.
@@ -915,9 +928,7 @@
       if (!ns.IsNull()) {
         target = ns.target();
         target_url = target.url();
-        if (!target_url.StartsWith(Symbols::DartExtensionScheme())) {
-          (*imported_by)[target.index()]->Add(lib.index());
-        }
+        (*imported_by)[target.index()]->Add(lib.index());
       }
     }
 
@@ -2274,7 +2285,10 @@
       instance_ ^= value.ptr();
       if (!instance_.IsAssignableTo(type_, instantiator_type_arguments_,
                                     function_type_arguments_)) {
-        ASSERT(!FLAG_identity_reload);
+        // Even if doing an identity reload, type check can fail if hot reload
+        // happens while constructor is still running and field is not
+        // initialized yet, so it has a null value.
+        ASSERT(!FLAG_identity_reload || instance_.IsNull());
         field.set_needs_load_guard(true);
       } else {
         cache_.AddCheck(instance_cid_or_signature_, type_,
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index fb8c532..fa1b774 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 = 69;
-static const uint32_t kMaxSupportedKernelFormatVersion = 69;
+static const uint32_t kMinSupportedKernelFormatVersion = 70;
+static const uint32_t kMaxSupportedKernelFormatVersion = 70;
 
 // 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 066c7d4..4156252 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -436,7 +436,6 @@
                                  false)),
         next_(NULL),
         prev_(NULL) {
-    ASSERT(port_ != ILLEGAL_PORT);
     RegisterRequest(this);
     result_.status = Dart_KernelCompilationStatus_Unknown;
     result_.error = NULL;
@@ -446,7 +445,9 @@
 
   ~KernelCompilationRequest() {
     UnregisterRequest(this);
-    Dart_CloseNativePort(port_);
+    if (port_ != ILLEGAL_PORT) {
+      Dart_CloseNativePort(port_);
+    }
   }
 
   intptr_t setDillData(Dart_CObject** dills_array,
@@ -481,6 +482,13 @@
       char const* klass,
       bool is_static,
       const MallocGrowableArray<char*>* experimental_flags) {
+    if (port_ == ILLEGAL_PORT) {
+      Dart_KernelCompilationResult result = {};
+      result.status = Dart_KernelCompilationStatus_MsgFailed;
+      result.error =
+          Utils::StrDup("Error Kernel Isolate : unable to create reply port");
+      return result;
+    }
     Thread* thread = Thread::Current();
     TransitionNativeToVM transition(thread);
     Dart_CObject tag;
@@ -709,6 +717,13 @@
       Dart_KernelCompilationVerbosityLevel verbosity) {
     // Build the message for the Kernel isolate.
     // tag is used to specify which operation the frontend should perform.
+    if (port_ == ILLEGAL_PORT) {
+      Dart_KernelCompilationResult result = {};
+      result.status = Dart_KernelCompilationStatus_MsgFailed;
+      result.error =
+          Utils::StrDup("Error Kernel Isolate : unable to create reply port");
+      return result;
+    }
     Dart_CObject tag;
     tag.type = Dart_CObject_kInt32;
     tag.value.as_int32 = request_tag;
@@ -1042,7 +1057,7 @@
   Dart_Port kernel_port = WaitForKernelPort();
   if (kernel_port == ILLEGAL_PORT) {
     Dart_KernelCompilationResult result = {};
-    result.status = Dart_KernelCompilationStatus_Unknown;
+    result.status = Dart_KernelCompilationStatus_MsgFailed;
     result.error = Utils::StrDup("Error while initializing Kernel isolate");
     return result;
   }
@@ -1080,7 +1095,7 @@
   Dart_Port kernel_port = WaitForKernelPort();
   if (kernel_port == ILLEGAL_PORT) {
     Dart_KernelCompilationResult result = {};
-    result.status = Dart_KernelCompilationStatus_Unknown;
+    result.status = Dart_KernelCompilationStatus_MsgFailed;
     result.error = Utils::StrDup("Error while initializing Kernel isolate");
     return result;
   }
@@ -1098,7 +1113,7 @@
   Dart_Port kernel_port = WaitForKernelPort();
   if (kernel_port == ILLEGAL_PORT) {
     Dart_KernelCompilationResult result = {};
-    result.status = Dart_KernelCompilationStatus_Unknown;
+    result.status = Dart_KernelCompilationStatus_MsgFailed;
     result.error = Utils::StrDup("Error while initializing Kernel isolate");
     return result;
   }
@@ -1122,7 +1137,7 @@
   Dart_Port kernel_port = WaitForKernelPort();
   if (kernel_port == ILLEGAL_PORT) {
     Dart_KernelCompilationResult result = {};
-    result.status = Dart_KernelCompilationStatus_Unknown;
+    result.status = Dart_KernelCompilationStatus_MsgFailed;
     result.error = Utils::StrDup("Error while initializing Kernel isolate");
     return result;
   }
@@ -1144,7 +1159,7 @@
   Dart_Port kernel_port = WaitForKernelPort();
   if (kernel_port == ILLEGAL_PORT) {
     Dart_KernelCompilationResult result = {};
-    result.status = Dart_KernelCompilationStatus_Unknown;
+    result.status = Dart_KernelCompilationStatus_MsgFailed;
     result.error = Utils::StrDup("Error while initializing Kernel isolate");
     return result;
   }
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index a45e80c..3c538f6 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -189,7 +189,7 @@
     : program_(program),
       thread_(Thread::Current()),
       zone_(thread_->zone()),
-      isolate_(thread_->isolate()),
+      no_active_isolate_scope_(),
       patch_classes_(Array::ZoneHandle(zone_)),
       active_class_(),
       library_kernel_offset_(-1),  // Set to the correct value in LoadLibrary
@@ -462,7 +462,7 @@
     : program_(NULL),
       thread_(Thread::Current()),
       zone_(thread_->zone()),
-      isolate_(thread_->isolate()),
+      no_active_isolate_scope_(),
       patch_classes_(Array::ZoneHandle(zone_)),
       library_kernel_offset_(data_program_offset),
       kernel_binary_version_(kernel_binary_version),
@@ -590,89 +590,6 @@
   return H.StringEquals(library_name_index, library.ToCString());
 }
 
-void KernelLoader::LoadNativeExtensionLibraries() {
-  const auto& potential_extension_libraries =
-      GrowableObjectArray::Handle(Z, H.GetPotentialExtensionLibraries());
-  if (potential_extension_libraries.IsNull()) {
-    return;
-  }
-
-  // Prepare lazy constant reading.
-  ConstantReader constant_reader(&helper_, &active_class_);
-
-  // Obtain `dart:_internal::ExternalName.name`.
-  EnsureExternalClassIsLookedUp();
-
-  Instance& constant = Instance::Handle(Z);
-  String& uri_path = String::Handle(Z);
-  Library& library = Library::Handle(Z);
-
-  const intptr_t length = potential_extension_libraries.Length();
-  for (intptr_t i = 0; i < length; ++i) {
-    library ^= potential_extension_libraries.At(i);
-
-    helper_.SetOffset(library.kernel_offset());
-
-    LibraryHelper library_helper(&helper_, kernel_binary_version_);
-    library_helper.ReadUntilExcluding(LibraryHelper::kAnnotations);
-
-    const intptr_t annotation_count = helper_.ReadListLength();
-    for (intptr_t j = 0; j < annotation_count; ++j) {
-      uri_path = String::null();
-
-      const intptr_t tag = helper_.PeekTag();
-      if (tag == kConstantExpression) {
-        helper_.ReadByte();      // Skip the tag.
-        helper_.ReadPosition();  // Skip fileOffset.
-        helper_.SkipDartType();  // Skip type.
-
-        // We have a candidate. Let's look if it's an instance of the
-        // ExternalName class.
-        const intptr_t constant_table_index = helper_.ReadUInt();
-        if (constant_reader.IsInstanceConstant(constant_table_index,
-                                               external_name_class_)) {
-          constant = constant_reader.ReadConstant(constant_table_index);
-          ASSERT(constant.clazz() == external_name_class_.ptr());
-          uri_path ^= constant.GetField(external_name_field_);
-        }
-      } else {
-        helper_.SkipExpression();
-      }
-
-      if (uri_path.IsNull()) continue;
-
-      LoadNativeExtension(library, uri_path);
-
-      // Create a dummy library and add it as an import to the current
-      // library. This allows later to discover and reload this native
-      // extension, e.g. when running from an app-jit snapshot.
-      // See Loader::ReloadNativeExtensions(...) which relies on
-      // Dart_GetImportsOfScheme('dart-ext').
-      const auto& native_library = Library::Handle(Library::New(uri_path));
-      library.AddImport(Namespace::Handle(Namespace::New(
-          native_library, Array::null_array(), Array::null_array(), library)));
-    }
-  }
-}
-
-void KernelLoader::LoadNativeExtension(const Library& library,
-                                       const String& uri_path) {
-#if !defined(DART_PRECOMPILER)
-  if (!IG->HasTagHandler()) {
-    H.ReportError("no library handler registered.");
-  }
-
-  I->BlockClassFinalization();
-  const auto& result = Object::Handle(
-      Z, IG->CallTagHandler(Dart_kImportExtensionTag, library, uri_path));
-  I->UnblockClassFinalization();
-
-  if (result.IsError()) {
-    H.ReportError(Error::Cast(result), "library handler failed");
-  }
-#endif
-}
-
 ObjectPtr KernelLoader::LoadProgram(bool process_pending_classes) {
   SafepointWriteRwLocker ml(thread_, thread_->isolate_group()->program_lock());
   ASSERT(kernel_program_info_.constants() == Array::null());
@@ -712,7 +629,6 @@
     kernel_program_info_.set_constants(array);
     H.SetConstants(array);  // for caching
     AnnotateNativeProcedures();
-    LoadNativeExtensionLibraries();
     EvaluateDelayedPragmas();
 
     NameIndex main = program_->main_method();
@@ -730,8 +646,6 @@
 }
 
 void KernelLoader::LoadLibrary(const Library& library) {
-  NoActiveIsolateScope no_active_isolate_scope;
-
   // This will be invoked by VM bootstrapping code.
   SafepointWriteRwLocker ml(thread_, thread_->isolate_group()->program_lock());
 
@@ -958,8 +872,6 @@
         "not allowed");
   }
 
-  NoActiveIsolateScope no_active_isolate_scope;
-
   // Read library index.
   library_kernel_offset_ = library_offset(index);
   correction_offset_ = library_kernel_offset_;
@@ -1774,8 +1686,6 @@
 }
 
 void KernelLoader::FinishLoading(const Class& klass) {
-  NoActiveIsolateScope no_active_isolate_scope;
-
   ASSERT(klass.IsTopLevel() || (klass.kernel_offset() > 0));
 
   Zone* zone = Thread::Current()->zone();
@@ -1946,8 +1856,7 @@
   // additional functions can cause strain on the VM. They are therefore skipped
   // in jit mode and their associated origin function is used instead as
   // interface call target.
-  if (procedure_helper.IsRedirectingFactory() ||
-      (!FLAG_precompiled_mode && procedure_helper.IsMemberSignature())) {
+  if (!FLAG_precompiled_mode && procedure_helper.IsMemberSignature()) {
     helper_.SetOffset(procedure_end);
     return;
   }
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index cd3dbcb..573711f 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -227,8 +227,6 @@
   bool IsClassName(NameIndex name, const String& library, const String& klass);
 
   void AnnotateNativeProcedures();
-  void LoadNativeExtensionLibraries();
-  void LoadNativeExtension(const Library& library, const String& uri_path);
   void EvaluateDelayedPragmas();
 
   void ReadVMAnnotations(const Library& library,
@@ -377,7 +375,7 @@
 
   Thread* thread_;
   Zone* zone_;
-  Isolate* isolate_;
+  NoActiveIsolateScope no_active_isolate_scope_;
   Array& patch_classes_;
   ActiveClass active_class_;
   // This is the offset of the current library within
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc
index 28a89a2..bbb8211 100644
--- a/runtime/vm/message_handler.cc
+++ b/runtime/vm/message_handler.cc
@@ -100,7 +100,7 @@
   // By default, there is no custom message notification.
 }
 
-void MessageHandler::Run(ThreadPool* pool,
+bool MessageHandler::Run(ThreadPool* pool,
                          StartCallback start_callback,
                          EndCallback end_callback,
                          CallbackData data) {
@@ -118,8 +118,15 @@
   end_callback_ = end_callback;
   callback_data_ = data;
   task_running_ = true;
-  const bool launched_successfully = pool_->Run<MessageHandlerTask>(this);
-  ASSERT(launched_successfully);
+  bool result = pool_->Run<MessageHandlerTask>(this);
+  if (!result) {
+    pool_ = nullptr;
+    start_callback_ = nullptr;
+    end_callback_ = nullptr;
+    callback_data_ = 0;
+    task_running_ = false;
+  }
+  return result;
 }
 
 void MessageHandler::PostMessage(std::unique_ptr<Message> message,
diff --git a/runtime/vm/message_handler.h b/runtime/vm/message_handler.h
index 19b5101..715641b 100644
--- a/runtime/vm/message_handler.h
+++ b/runtime/vm/message_handler.h
@@ -48,7 +48,10 @@
   // no longer has any live ports.  Abnormal termination occurs when
   // HandleMessage() indicates that an error has occurred during
   // message processing.
-  void Run(ThreadPool* pool,
+
+  // Returns false if the handler terminated abnormally, otherwise it
+  // returns true.
+  bool Run(ThreadPool* pool,
            StartCallback start_callback,
            EndCallback end_callback,
            CallbackData data);
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index 3eca655..b2ff598 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -19,6 +19,7 @@
 #include "vm/heap/weak_table.h"
 #include "vm/longjump.h"
 #include "vm/object.h"
+#include "vm/object_graph_copy.h"
 #include "vm/object_store.h"
 #include "vm/symbols.h"
 #include "vm/type_testing_stubs.h"
@@ -483,7 +484,7 @@
   Array& maps = Array::Handle(d->zone(), d->refs());
   maps = maps.Slice(start_index_, stop_index_ - start_index_,
                     /*with_type_argument=*/false);
-  return DartLibraryCalls::RehashObjects(d->thread(), maps);
+  return DartLibraryCalls::RehashObjectsInDartCollection(d->thread(), maps);
 }
 
 class ClassMessageSerializationCluster : public MessageSerializationCluster {
@@ -780,13 +781,17 @@
     objects_.Add(instance);
 
     const intptr_t next_field_offset = next_field_offset_;
+#if defined(DART_PRECOMPILED_RUNTIME)
     const auto unboxed_fields_bitmap =
         s->isolate_group()->shared_class_table()->GetUnboxedFieldsMapAt(cid_);
+#endif
     for (intptr_t offset = Instance::NextFieldOffset();
          offset < next_field_offset; offset += kCompressedWordSize) {
+#if defined(DART_PRECOMPILED_RUNTIME)
       if (unboxed_fields_bitmap.Get(offset / kCompressedWordSize)) {
         continue;
       }
+#endif
       s->Push(reinterpret_cast<CompressedObjectPtr*>(
                   reinterpret_cast<uword>(instance->untag()) + offset)
                   ->Decompress(instance->untag()->heap_base()));
@@ -810,20 +815,24 @@
       Instance* instance = objects_[i];
 
       const intptr_t next_field_offset = next_field_offset_;
+#if defined(DART_PRECOMPILED_RUNTIME)
       const auto unboxed_fields_bitmap =
           s->isolate_group()->shared_class_table()->GetUnboxedFieldsMapAt(cid_);
+#endif
       for (intptr_t offset = Instance::NextFieldOffset();
            offset < next_field_offset; offset += kCompressedWordSize) {
+#if defined(DART_PRECOMPILED_RUNTIME)
         if (unboxed_fields_bitmap.Get(offset / kCompressedWordSize)) {
           // Writes 32 bits of the unboxed value at a time
           const uword value = *reinterpret_cast<compressed_uword*>(
               reinterpret_cast<uword>(instance->untag()) + offset);
           s->WriteWordWith32BitWrites(value);
-        } else {
-          s->WriteRef(reinterpret_cast<CompressedObjectPtr*>(
-                          reinterpret_cast<uword>(instance->untag()) + offset)
-                          ->Decompress(instance->untag()->heap_base()));
+          continue;
         }
+#endif
+        s->WriteRef(reinterpret_cast<CompressedObjectPtr*>(
+                        reinterpret_cast<uword>(instance->untag()) + offset)
+                        ->Decompress(instance->untag()->heap_base()));
       }
     }
   }
@@ -853,37 +862,44 @@
 
   void ReadEdges(MessageDeserializer* d) {
     const intptr_t next_field_offset = cls_.host_next_field_offset();
-    const intptr_t type_argument_field_offset =
-        cls_.host_type_arguments_field_offset();
+#if defined(DART_PRECOMPILED_RUNTIME)
     const auto unboxed_fields_bitmap =
         d->isolate_group()->shared_class_table()->GetUnboxedFieldsMapAt(
             cls_.id());
+#else
+    const intptr_t type_argument_field_offset =
+        cls_.host_type_arguments_field_offset();
     const bool use_field_guards = d->isolate_group()->use_field_guards();
     const Array& field_map = Array::Handle(d->zone(), cls_.OffsetToFieldMap());
+    Field& field = Field::Handle(d->zone());
+#endif
     Instance& instance = Instance::Handle(d->zone());
     Object& value = Object::Handle(d->zone());
-    Field& field = Field::Handle(d->zone());
 
     for (intptr_t id = start_index_; id < stop_index_; id++) {
       instance ^= d->Ref(id);
       for (intptr_t offset = Instance::NextFieldOffset();
            offset < next_field_offset; offset += kCompressedWordSize) {
+#if defined(DART_PRECOMPILED_RUNTIME)
         if (unboxed_fields_bitmap.Get(offset / kCompressedWordSize)) {
           compressed_uword* p = reinterpret_cast<compressed_uword*>(
               reinterpret_cast<uword>(instance.untag()) + offset);
           // Reads 32 bits of the unboxed value at a time
           *p = d->ReadWordWith32BitReads();
-        } else {
-          value = d->ReadRef();
-          instance.SetFieldAtOffset(offset, value);
-          if (use_field_guards && (offset != type_argument_field_offset) &&
-              (value.ptr() != Object::sentinel().ptr())) {
-            field ^= field_map.At(offset >> kCompressedWordSizeLog2);
-            ASSERT(!field.IsNull());
-            ASSERT(field.HostOffset() == offset);
-            field.RecordStore(value);
-          }
+          continue;
         }
+#endif
+        value = d->ReadRef();
+        instance.SetFieldAtOffset(offset, value);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+        if (use_field_guards && (offset != type_argument_field_offset) &&
+            (value.ptr() != Object::sentinel().ptr())) {
+          field ^= field_map.At(offset >> kCompressedWordSizeLog2);
+          ASSERT(!field.IsNull());
+          ASSERT(field.HostOffset() == offset);
+          field.RecordStore(value);
+        }
+#endif
       }
     }
   }
@@ -901,18 +917,14 @@
     }
 
     if (cls_.ptr() == d->isolate_group()->object_store()->expando_class()) {
-      Instance& instance = Instance::Handle(d->zone());
-      const String& selector = Library::PrivateCoreLibName(Symbols::_rehash());
-      Array& args = Array::Handle(d->zone(), Array::New(1));
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      const auto& expandos =
+          Array::Handle(d->zone(), Array::New(stop_index_ - start_index_));
+      auto& instance = Instance::Handle(d->zone());
+      for (intptr_t i = start_index_, j = 0; i < stop_index_; i++, j++) {
         instance ^= d->Ref(i);
-        args.SetAt(0, instance);
-        ObjectPtr error = instance.Invoke(selector, args, Object::empty_array(),
-                                          false, false);
-        if (error != Object::null()) {
-          return error;
-        }
+        expandos.SetAt(j, instance);
       }
+      return DartLibraryCalls::RehashObjectsInDartCore(d->thread(), expandos);
     }
     return nullptr;
   }
@@ -1631,7 +1643,7 @@
       Dart_CObject* data = d->Allocate(Dart_CObject_kTypedData);
       intptr_t length = d->ReadUnsigned();
       data->value.as_typed_data.type = type;
-      data->value.as_typed_data.length = length * element_size;
+      data->value.as_typed_data.length = length;
       if (length == 0) {
         data->value.as_typed_data.values = NULL;
       } else {
@@ -1741,7 +1753,6 @@
   }
 
   void ReadNodesApi(ApiMessageDeserializer* d) {
-    intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid_);
     Dart_TypedData_Type type;
     switch (cid_) {
       case kExternalTypedDataInt8ArrayCid:
@@ -1796,7 +1807,7 @@
       intptr_t length = d->ReadUnsigned();
       FinalizableData finalizable_data = d->finalizable_data()->Get();
       data->value.as_typed_data.type = type;
-      data->value.as_typed_data.length = length * element_size;
+      data->value.as_typed_data.length = length;
       data->value.as_typed_data.values =
           reinterpret_cast<uint8_t*>(finalizable_data.data);
       d->AssignRef(data);
@@ -1807,6 +1818,65 @@
   const intptr_t cid_;
 };
 
+class NativePointerMessageSerializationCluster
+    : public MessageSerializationCluster {
+ public:
+  explicit NativePointerMessageSerializationCluster(Zone* zone)
+      : MessageSerializationCluster("NativePointer",
+                                    MessagePhase::kNonCanonicalInstances,
+                                    kNativePointer),
+        objects_(zone, 0) {}
+  ~NativePointerMessageSerializationCluster() {}
+
+  void Trace(MessageSerializer* s, Object* object) { UNREACHABLE(); }
+
+  void WriteNodes(MessageSerializer* s) { UNREACHABLE(); }
+
+  void TraceApi(ApiMessageSerializer* s, Dart_CObject* object) {
+    objects_.Add(object);
+  }
+
+  void WriteNodesApi(ApiMessageSerializer* s) {
+    intptr_t count = objects_.length();
+    s->WriteUnsigned(count);
+    for (intptr_t i = 0; i < count; i++) {
+      Dart_CObject* data = objects_[i];
+      s->AssignRef(data);
+
+      s->finalizable_data()->Put(
+          data->value.as_native_pointer.size,
+          reinterpret_cast<void*>(data->value.as_native_pointer.ptr),
+          reinterpret_cast<void*>(data->value.as_native_pointer.ptr),
+          data->value.as_native_pointer.callback);
+    }
+  }
+
+ private:
+  GrowableArray<Dart_CObject*> objects_;
+};
+
+class NativePointerMessageDeserializationCluster
+    : public MessageDeserializationCluster {
+ public:
+  NativePointerMessageDeserializationCluster()
+      : MessageDeserializationCluster("NativePointer"), cid_(kNativePointer) {}
+  ~NativePointerMessageDeserializationCluster() {}
+
+  void ReadNodes(MessageDeserializer* d) {
+    intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      FinalizableData finalizable_data = d->finalizable_data()->Take();
+      intptr_t ptr = reinterpret_cast<intptr_t>(finalizable_data.data);
+      d->AssignRef(Integer::New(ptr));
+    }
+  }
+
+  void ReadNodesApi(ApiMessageDeserializer* d) { UNREACHABLE(); }
+
+ private:
+  const intptr_t cid_;
+};
+
 class TypedDataViewMessageSerializationCluster
     : public MessageSerializationCluster {
  public:
@@ -1905,7 +1975,6 @@
   }
 
   void PostLoadApi(ApiMessageDeserializer* d) {
-    intptr_t element_size = TypedDataView::ElementSizeInBytes(cid_);
     Dart_TypedData_Type type;
     switch (cid_) {
       case kTypedDataInt8ArrayViewCid:
@@ -1959,22 +2028,10 @@
       if (view->typed_data->type == Dart_CObject_kTypedData) {
         view->type = Dart_CObject_kTypedData;
         view->value.as_typed_data.type = type;
-        //            view->typed_data->value.as_typed_data.type;
-        view->value.as_typed_data.length =
-            view->length->value.as_int32 * element_size;
+        view->value.as_typed_data.length = view->length->value.as_int32;
         view->value.as_typed_data.values =
             view->typed_data->value.as_typed_data.values +
             view->offset_in_bytes->value.as_int32;
-      } else if (view->typed_data->type == Dart_CObject_kExternalTypedData) {
-        UNREACHABLE();  ///???
-        view->type = Dart_CObject_kTypedData;
-        view->value.as_typed_data.type = type;
-        //            view->typed_data->value.as_external_typed_data.type;
-        view->value.as_typed_data.length =
-            view->length->value.as_int32 * element_size;
-        view->value.as_typed_data.values =
-            view->typed_data->value.as_external_typed_data.data +
-            view->offset_in_bytes->value.as_int32;
       } else {
         UNREACHABLE();
       }
@@ -3009,22 +3066,20 @@
   }
 
     ILLEGAL(FunctionType)
-    ILLEGAL(DynamicLibrary)
     ILLEGAL(MirrorReference)
-    ILLEGAL(Pointer)
     ILLEGAL(ReceivePort)
     ILLEGAL(StackTrace)
     ILLEGAL(UserTag)
-#undef ILLEGAL
 
-    switch (cid) {
-#define ILLEGAL(type) case kFfi##type##Cid:
-      CLASS_LIST_FFI(ILLEGAL)
+    // From "dart:ffi" we handle only Pointer/DynamicLibrary specially, since
+    // those are the only non-abstract classes (so we avoid checking more cids
+    // here that cannot happen in reality)
+    ILLEGAL(DynamicLibrary)
+    ILLEGAL(Pointer)
+    ILLEGAL(FfiDynamicLibrary)
+    ILLEGAL(FfiPointer)
+
 #undef ILLEGAL
-      IllegalObject(*object,
-                    "Native objects (from dart:ffi) such as Pointers and "
-                    "Structs cannot be passed between isolates.");
-    }
 
     if (cid >= kNumPredefinedCids || cid == kInstanceCid ||
         cid == kByteBufferCid) {
@@ -3191,6 +3246,9 @@
     case Dart_CObject_kCapability:
       cid = kCapabilityCid;
       break;
+    case Dart_CObject_kNativePointer:
+      cid = kNativePointer;
+      break;
     default:
       return Fail("invalid Dart_CObject type");
   }
@@ -3244,6 +3302,8 @@
   }
 
   switch (cid) {
+    case kNativePointer:
+      return new (Z) NativePointerMessageSerializationCluster(Z);
     case kClassCid:
       return new (Z) ClassMessageSerializationCluster();
     case kTypeArgumentsCid:
@@ -3328,6 +3388,9 @@
   }
 
   switch (cid) {
+    case kNativePointer:
+      ASSERT(!is_canonical);
+      return new (Z) NativePointerMessageDeserializationCluster();
     case kClassCid:
       ASSERT(!is_canonical);
       return new (Z) ClassMessageDeserializationCluster();
@@ -3604,11 +3667,18 @@
 }
 
 std::unique_ptr<Message> WriteMessage(bool can_send_any_object,
+                                      bool same_group,
                                       const Object& obj,
                                       Dart_Port dest_port,
                                       Message::Priority priority) {
   if (ApiObjectConverter::CanConvert(obj.ptr())) {
     return Message::New(dest_port, obj.ptr(), priority);
+  } else if (same_group) {
+    const Object& copy = Object::Handle(CopyMutableObjectGraph(obj));
+    auto handle =
+        IsolateGroup::Current()->api_state()->AllocatePersistentHandle();
+    handle->set_ptr(copy.ptr());
+    return std::make_unique<Message>(dest_port, handle, priority);
   }
 
   Thread* thread = Thread::Current();
@@ -3652,9 +3722,43 @@
   return serializer.Finish(dest_port, priority);
 }
 
+ObjectPtr ReadObjectGraphCopyMessage(Thread* thread, PersistentHandle* handle) {
+  // msg_array = [
+  //     <message>,
+  //     <collection-lib-objects-to-rehash>,
+  //     <core-lib-objects-to-rehash>,
+  // ]
+  Zone* zone = thread->zone();
+  Object& msg_obj = Object::Handle(zone);
+  const auto& msg_array = Array::Handle(zone, Array::RawCast(handle->ptr()));
+  ASSERT(msg_array.Length() == 3);
+  msg_obj = msg_array.At(0);
+  if (msg_array.At(1) != Object::null()) {
+    const auto& objects_to_rehash = Object::Handle(zone, msg_array.At(1));
+    auto& result = Object::Handle(zone);
+    result = DartLibraryCalls::RehashObjectsInDartCollection(thread,
+                                                             objects_to_rehash);
+    if (result.ptr() != Object::null()) {
+      msg_obj = result.ptr();
+    }
+  }
+  if (msg_array.At(2) != Object::null()) {
+    const auto& objects_to_rehash = Object::Handle(zone, msg_array.At(2));
+    auto& result = Object::Handle(zone);
+    result =
+        DartLibraryCalls::RehashObjectsInDartCore(thread, objects_to_rehash);
+    if (result.ptr() != Object::null()) {
+      msg_obj = result.ptr();
+    }
+  }
+  return msg_obj.ptr();
+}
+
 ObjectPtr ReadMessage(Thread* thread, Message* message) {
   if (message->IsRaw()) {
     return message->raw_obj();
+  } else if (message->IsPersistentHandle()) {
+    return ReadObjectGraphCopyMessage(thread, message->persistent_handle());
   } else {
     RELEASE_ASSERT(message->IsSnapshot());
     MessageDeserializer deserializer(thread, message);
diff --git a/runtime/vm/message_snapshot.h b/runtime/vm/message_snapshot.h
index d06640e..a584748 100644
--- a/runtime/vm/message_snapshot.h
+++ b/runtime/vm/message_snapshot.h
@@ -14,6 +14,7 @@
 namespace dart {
 
 std::unique_ptr<Message> WriteMessage(bool can_send_any_object,
+                                      bool same_group,
                                       const Object& obj,
                                       Dart_Port dest_port,
                                       Message::Priority priority);
@@ -23,6 +24,8 @@
                                          Dart_Port dest_port,
                                          Message::Priority priority);
 
+ObjectPtr ReadObjectGraphCopyMessage(Thread* thread, PersistentHandle* handle);
+
 ObjectPtr ReadMessage(Thread* thread, Message* message);
 
 Dart_CObject* ReadApiMessage(Zone* zone, Message* message);
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 132ac95..793accb 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -82,13 +82,22 @@
                  CURRENT_FUNC);
     return ILLEGAL_PORT;
   }
+  if (!Dart::SetActiveApiCall()) {
+    return ILLEGAL_PORT;
+  }
   // Start the native port without a current isolate.
   IsolateLeaveScope saver(Isolate::Current());
 
   NativeMessageHandler* nmh = new NativeMessageHandler(name, handler);
   Dart_Port port_id = PortMap::CreatePort(nmh);
-  PortMap::SetPortState(port_id, PortMap::kLivePort);
-  nmh->Run(Dart::thread_pool(), NULL, NULL, 0);
+  if (port_id != ILLEGAL_PORT) {
+    PortMap::SetPortState(port_id, PortMap::kLivePort);
+    if (!nmh->Run(Dart::thread_pool(), NULL, NULL, 0)) {
+      PortMap::ClosePort(port_id);
+      port_id = ILLEGAL_PORT;
+    }
+  }
+  Dart::ResetActiveApiCall();
   return port_id;
 }
 
@@ -112,6 +121,11 @@
   ASSERT(isolate == nullptr || !isolate->is_service_isolate());
   IsolateLeaveScope saver(isolate);
 
+  if (!Dart::IsInitialized()) {
+    *error = ::dart::Utils::StrDup("VM Service is not active.");
+    return false;
+  }
+
   // We only allow one isolate reload at a time.  If this turns out to be on the
   // critical path, we can change it to have a global datastructure which is
   // mapping the reply ports to receive buffers.
@@ -155,9 +169,21 @@
   if (ServiceIsolate::SendServiceRpc(request_json, request_json_length, port,
                                      error)) {
     // We posted successfully and expect the vm-service to send the reply, so
-    // we will wait for it now.
-    auto wait_result = monitor.Wait();
-    ASSERT(wait_result == Monitor::kNotified);
+    // we will wait for it now. Since the service isolate could have shutdown
+    // after we sent the message we make sure to wake up periodically and
+    // check to see if the service isolate has shutdown.
+    do {
+      auto wait_result = monitor.Wait(1000); /* milliseconds */
+      if (wait_result == Monitor::kNotified) {
+        break;
+      }
+      if (!ServiceIsolate::IsRunning()) {
+        // Service Isolate has shutdown while we were waiting for a reply,
+        // We will not get a reply anymore, cleanup and return an error.
+        Dart_CloseNativePort(port);
+        return false;
+      }
+    } while (true);
 
     // The caller takes ownership of the data.
     *response_json = result_bytes;
@@ -235,7 +261,10 @@
 
 DART_EXPORT void* Dart_ExecuteInternalCommand(const char* command, void* arg) {
   if (strcmp(command, "gc-on-nth-allocation") == 0) {
-    TransitionNativeToVM _(Thread::Current());
+    Thread* const thread = Thread::Current();
+    Isolate* isolate = (thread == NULL) ? NULL : thread->isolate();
+    CHECK_ISOLATE(isolate);
+    TransitionNativeToVM _(thread);
     intptr_t argument = reinterpret_cast<intptr_t>(arg);
     ASSERT(argument > 0);
     IsolateGroup::Current()->heap()->CollectOnNthAllocation(argument);
@@ -243,7 +272,10 @@
 
   } else if (strcmp(command, "gc-now") == 0) {
     ASSERT(arg == nullptr);  // Don't pass an argument to this command.
-    TransitionNativeToVM _(Thread::Current());
+    Thread* const thread = Thread::Current();
+    Isolate* isolate = (thread == NULL) ? NULL : thread->isolate();
+    CHECK_ISOLATE(isolate);
+    TransitionNativeToVM _(thread);
     IsolateGroup::Current()->heap()->CollectAllGarbage();
     return nullptr;
 
@@ -255,6 +287,7 @@
 
   } else if (strcmp(command, "is-mutator-in-native") == 0) {
     Isolate* const isolate = reinterpret_cast<Isolate*>(arg);
+    CHECK_ISOLATE(isolate);
     if (isolate->mutator_thread()->execution_state_cross_thread_for_testing() ==
         Thread::kThreadInNative) {
       return arg;
@@ -265,7 +298,9 @@
   } else if (strcmp(command, "run-in-safepoint-and-rw-code") == 0) {
     const RunInSafepointAndRWCodeArgs* const args =
         reinterpret_cast<RunInSafepointAndRWCodeArgs*>(arg);
-    Thread::EnterIsolateAsHelper(args->isolate, Thread::TaskKind::kUnknownTask);
+    Isolate* const isolate = args->isolate;
+    CHECK_ISOLATE(isolate);
+    Thread::EnterIsolateAsHelper(isolate, Thread::TaskKind::kUnknownTask);
     Thread* const thread = Thread::Current();
     {
       GcSafepointOperationScope scope(thread);
diff --git a/runtime/vm/native_function.h b/runtime/vm/native_function.h
index f5db8fe..a5953bd 100644
--- a/runtime/vm/native_function.h
+++ b/runtime/vm/native_function.h
@@ -18,7 +18,7 @@
 //  - bootstrap natives, which are called directly from stub code. The callee is
 //    responsible for safepoint transitions and setting up handle scopes as
 //    needed. Only VM-defined natives are bootstrap natives; they cannot be
-//    defined by embedders or native extensions.
+//    defined by embedders.
 //  - no scope natives, which are called through a wrapper function. The wrapper
 //    function handles the safepoint transition. The callee is responsible for
 //    setting up API scopes as needed.
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 30650c6..8344d4b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -607,6 +607,7 @@
     builtin_vtables_[k##clazz##Cid] = fake_handle.vtable();                    \
   }
   CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY_NOR_MAP(INIT_VTABLE)
+  INIT_VTABLE(GrowableObjectArray)
 #undef INIT_VTABLE
 
 #define INIT_VTABLE(clazz)                                                     \
@@ -630,7 +631,7 @@
     Array fake_handle;                                                         \
     builtin_vtables_[k##clazz##Cid] = fake_handle.vtable();                    \
   }
-  CLASS_LIST_ARRAYS(INIT_VTABLE)
+  CLASS_LIST_FIXED_LENGTH_ARRAYS(INIT_VTABLE)
 #undef INIT_VTABLE
 
 #define INIT_VTABLE(clazz)                                                     \
@@ -2952,7 +2953,7 @@
   result.set_num_type_arguments_unsafe(0);
   result.set_num_native_fields(0);
   result.set_state_bits(0);
-  if ((FakeObject::kClassId < kInstanceCid) ||
+  if (IsInternalOnlyClassId(FakeObject::kClassId) ||
       (FakeObject::kClassId == kTypeArgumentsCid)) {
     // VM internal classes are done. There is no finalization needed or
     // possible in this case.
@@ -4465,7 +4466,7 @@
     const Array& arguments,
     const TypeArguments& type_arguments) const {
   ASSERT(Thread::Current()->IsMutatorThread());
-  if (id() < kInstanceCid || id() == kTypeArgumentsCid) {
+  if (IsInternalOnlyClassId(id()) || (id() == kTypeArgumentsCid)) {
     const Instance& exception = Instance::Handle(String::New(
         "Expressions can be evaluated only with regular Dart instances"));
     const Instance& stacktrace = Instance::Handle();
@@ -5496,6 +5497,12 @@
       }
       return true;
     }
+
+    // _Closure <: Function
+    if (this_class.IsClosureClass() && other_class.IsDartFunctionClass()) {
+      return true;
+    }
+
     // Check for 'direct super type' specified in the implements clause
     // and check for transitivity at the same time.
     Array& interfaces = Array::Handle(zone, this_class.interfaces());
@@ -9351,9 +9358,9 @@
   closure_signature.FinalizeNameArray();
   closure_function.InheritKernelOffsetFrom(*this);
 
-  // Change covariant parameter types to either Object? for an opted-in implicit
-  // closure or to Object* for a legacy implicit closure.
   if (!is_static() && !IsConstructor()) {
+    // Change covariant parameter types to either Object? for an opted-in
+    // implicit closure or to Object* for a legacy implicit closure.
     BitVector is_covariant(zone, NumParameters());
     BitVector is_generic_covariant_impl(zone, NumParameters());
     kernel::ReadParameterCovariance(*this, &is_covariant,
@@ -9372,6 +9379,22 @@
         closure_signature.SetParameterTypeAt(i, object_type);
       }
     }
+  } else if (IsConstructor() && closure_signature.IsGeneric()) {
+    // Instantiate types of parameters as they may reference
+    // class type parameters.
+    const auto& instantiator_type_args = TypeArguments::Handle(
+        zone, AbstractType::Handle(zone, closure_signature.result_type())
+                  .arguments());
+    auto& param_type = AbstractType::Handle(zone);
+    for (intptr_t i = kClosure; i < num_params; ++i) {
+      param_type = closure_signature.ParameterTypeAt(i);
+      if (!param_type.IsInstantiated()) {
+        param_type = param_type.InstantiateFrom(instantiator_type_args,
+                                                Object::null_type_arguments(),
+                                                kAllFree, Heap::kOld);
+        closure_signature.SetParameterTypeAt(i, param_type);
+      }
+    }
   }
   ASSERT(!closure_signature.IsFinalized());
   closure_signature ^= ClassFinalizer::FinalizeType(closure_signature);
@@ -11381,48 +11404,93 @@
   return true;
 }
 
-// Given the type G<T0, ..., Tn> and class C<U0, ..., Un> find path to C at G.
-// This path can be used to compute type arguments of C at G.
-//
-// Note: we are relying on the restriction that the same class can only occur
-// once among the supertype.
-static bool FindInstantiationOf(const Type& type,
+bool Class::FindInstantiationOf(Zone* zone,
                                 const Class& cls,
                                 GrowableArray<const AbstractType*>* path,
-                                bool consider_only_super_classes) {
-  if (type.type_class() == cls.ptr()) {
+                                bool consider_only_super_classes) const {
+  ASSERT(cls.is_type_finalized());
+  if (cls.ptr() == ptr()) {
     return true;  // Found instantiation.
   }
 
-  Class& cls2 = Class::Handle();
-  AbstractType& super_type = AbstractType::Handle();
-  super_type = cls.super_type();
-  if (!super_type.IsNull() && !super_type.IsObjectType()) {
-    cls2 = super_type.type_class();
-    path->Add(&super_type);
-    if (FindInstantiationOf(type, cls2, path, consider_only_super_classes)) {
+  Class& cls2 = Class::Handle(zone);
+  AbstractType& super = AbstractType::Handle(zone, super_type());
+  if (!super.IsNull() && !super.IsObjectType()) {
+    cls2 = super.type_class();
+    if (path != nullptr) {
+      path->Add(&super);
+    }
+    if (cls2.FindInstantiationOf(zone, cls, path,
+                                 consider_only_super_classes)) {
       return true;  // Found instantiation.
     }
-    path->RemoveLast();
-  }
-
-  if (!consider_only_super_classes) {
-    Array& super_interfaces = Array::Handle(cls.interfaces());
-    for (intptr_t i = 0; i < super_interfaces.Length(); i++) {
-      super_type ^= super_interfaces.At(i);
-      cls2 = super_type.type_class();
-      path->Add(&super_type);
-      if (FindInstantiationOf(type, cls2, path,
-                              /*consider_only_supertypes=*/false)) {
-        return true;  // Found instantiation.
-      }
+    if (path != nullptr) {
       path->RemoveLast();
     }
   }
 
+  if (!consider_only_super_classes) {
+    Array& super_interfaces = Array::Handle(zone, interfaces());
+    for (intptr_t i = 0; i < super_interfaces.Length(); i++) {
+      super ^= super_interfaces.At(i);
+      cls2 = super.type_class();
+      if (path != nullptr) {
+        path->Add(&super);
+      }
+      if (cls2.FindInstantiationOf(zone, cls, path)) {
+        return true;  // Found instantiation.
+      }
+      if (path != nullptr) {
+        path->RemoveLast();
+      }
+    }
+  }
+
   return false;  // Not found.
 }
 
+bool Class::FindInstantiationOf(Zone* zone,
+                                const Type& type,
+                                GrowableArray<const AbstractType*>* path,
+                                bool consider_only_super_classes) const {
+  return FindInstantiationOf(zone, Class::Handle(zone, type.type_class()), path,
+                             consider_only_super_classes);
+}
+
+TypePtr Class::GetInstantiationOf(Zone* zone, const Class& cls) const {
+  if (ptr() == cls.ptr()) {
+    return DeclarationType();
+  }
+  if (FindInstantiationOf(zone, cls, /*consider_only_super_classes=*/true)) {
+    // Since [cls] is a superclass of [this], use [cls]'s declaration type.
+    return cls.DeclarationType();
+  }
+  const auto& decl_type = Type::Handle(zone, DeclarationType());
+  GrowableArray<const AbstractType*> path(zone, 0);
+  if (!FindInstantiationOf(zone, cls, &path)) {
+    return Type::null();
+  }
+  ASSERT(!path.is_empty());
+  auto& calculated_type = Type::Handle(zone, decl_type.ptr());
+  auto& calculated_type_args =
+      TypeArguments::Handle(zone, calculated_type.arguments());
+  for (auto* const type : path) {
+    calculated_type ^= type->ptr();
+    if (!calculated_type.IsInstantiated()) {
+      calculated_type ^= calculated_type.InstantiateFrom(
+          calculated_type_args, Object::null_type_arguments(), kAllFree,
+          Heap::kNew);
+    }
+    calculated_type_args = calculated_type.arguments();
+  }
+  ASSERT_EQUAL(calculated_type.type_class_id(), cls.id());
+  return calculated_type.ptr();
+}
+
+TypePtr Class::GetInstantiationOf(Zone* zone, const Type& type) const {
+  return GetInstantiationOf(zone, Class::Handle(zone, type.type_class()));
+}
+
 void Field::SetStaticValue(const Object& value) const {
   auto thread = Thread::Current();
   ASSERT(thread->IsMutatorThread());
@@ -11460,21 +11528,22 @@
   ASSERT(value.ptr() != Object::sentinel().ptr());
   ASSERT(value.ptr() != Object::transition_sentinel().ptr());
 
+  Zone* const zone = Thread::Current()->zone();
   const TypeArguments& static_type_args =
-      TypeArguments::Handle(static_type.arguments());
+      TypeArguments::Handle(zone, static_type.arguments());
 
-  TypeArguments& args = TypeArguments::Handle();
+  TypeArguments& args = TypeArguments::Handle(zone);
 
   ASSERT(static_type.IsFinalized());
-  const Class& cls = Class::Handle(value.clazz());
+  const Class& cls = Class::Handle(zone, value.clazz());
   GrowableArray<const AbstractType*> path(10);
 
   bool is_super_class = true;
-  if (!FindInstantiationOf(static_type, cls, &path,
-                           /*consider_only_super_classes=*/true)) {
+  if (!cls.FindInstantiationOf(zone, static_type, &path,
+                               /*consider_only_super_classes=*/true)) {
     is_super_class = false;
-    bool found_super_interface = FindInstantiationOf(
-        static_type, cls, &path, /*consider_only_super_classes=*/false);
+    bool found_super_interface =
+        cls.FindInstantiationOf(zone, static_type, &path);
     ASSERT(found_super_interface);
   }
 
@@ -11506,7 +11575,7 @@
   // To compute C<X0, ..., Xn> at G we walk the chain backwards and
   // instantiate Si using type parameters of S{i-1} which gives us a type
   // depending on type parameters of S{i-2}.
-  AbstractType& type = AbstractType::Handle(path.Last()->ptr());
+  AbstractType& type = AbstractType::Handle(zone, path.Last()->ptr());
   for (intptr_t i = path.length() - 2; (i >= 0) && !type.IsInstantiated();
        i--) {
     args = path[i]->arguments();
@@ -11544,19 +11613,19 @@
   const intptr_t num_type_params = cls.NumTypeParameters();
   bool trivial_case =
       (num_type_params ==
-       Class::Handle(static_type.type_class()).NumTypeParameters()) &&
+       Class::Handle(zone, static_type.type_class()).NumTypeParameters()) &&
       (value.GetTypeArguments() == static_type.arguments());
   if (!trivial_case && FLAG_trace_field_guards) {
     THR_Print("Not a simple case: %" Pd " vs %" Pd
               " type parameters, %s vs %s type arguments\n",
               num_type_params,
-              Class::Handle(static_type.type_class()).NumTypeParameters(),
+              Class::Handle(zone, static_type.type_class()).NumTypeParameters(),
               SafeTypeArgumentsToCString(
-                  TypeArguments::Handle(value.GetTypeArguments())),
+                  TypeArguments::Handle(zone, value.GetTypeArguments())),
               SafeTypeArgumentsToCString(static_type_args));
   }
 
-  AbstractType& type_arg = AbstractType::Handle();
+  AbstractType& type_arg = AbstractType::Handle(zone);
   args = type.arguments();
   for (intptr_t i = 0; (i < num_type_params) && trivial_case; i++) {
     type_arg = args.TypeAt(i);
@@ -12719,7 +12788,6 @@
 }
 
 ArrayPtr Library::LoadedScripts() const {
-  ASSERT(Thread::Current()->IsMutatorThread());
   // We compute the list of loaded scripts lazily. The result is
   // cached in loaded_scripts_.
   if (loaded_scripts() == Array::null()) {
@@ -13080,35 +13148,7 @@
 }
 
 void Library::DropDependenciesAndCaches() const {
-  // We need to preserve the "dart-ext:" imports because they are used by
-  // Loader::ReloadNativeExtensions().
-  intptr_t native_import_count = 0;
-  Array& imports = Array::Handle(untag()->imports());
-  Namespace& ns = Namespace::Handle();
-  Library& lib = Library::Handle();
-  String& url = String::Handle();
-  for (int i = 0; i < imports.Length(); ++i) {
-    ns = Namespace::RawCast(imports.At(i));
-    if (ns.IsNull()) continue;
-    lib = ns.target();
-    url = lib.url();
-    if (url.StartsWith(Symbols::DartExtensionScheme())) {
-      native_import_count++;
-    }
-  }
-  Array& new_imports =
-      Array::Handle(Array::New(native_import_count, Heap::kOld));
-  for (int i = 0, j = 0; i < imports.Length(); ++i) {
-    ns = Namespace::RawCast(imports.At(i));
-    if (ns.IsNull()) continue;
-    lib = ns.target();
-    url = lib.url();
-    if (url.StartsWith(Symbols::DartExtensionScheme())) {
-      new_imports.SetAt(j++, ns);
-    }
-  }
-
-  untag()->set_imports(new_imports.ptr());
+  untag()->set_imports(Object::empty_array().ptr());
   untag()->set_exports(Object::empty_array().ptr());
   StoreNonPointer(&untag()->num_imports_, 0);
   untag()->set_resolved_names(Array::null());
@@ -13599,11 +13639,13 @@
         zone, String::New("Kernel isolate returned ill-formed kernel.")));
   }
 
-  kernel::KernelLoader loader(kernel_pgm.get(),
-                              /*uri_to_source_table=*/nullptr);
-  auto& result = Object::Handle(
-      zone, loader.LoadExpressionEvaluationFunction(library_url, klass));
-  kernel_pgm.reset();
+  auto& result = Object::Handle(zone);
+  {
+    kernel::KernelLoader loader(kernel_pgm.get(),
+                                /*uri_to_source_table=*/nullptr);
+    result = loader.LoadExpressionEvaluationFunction(library_url, klass);
+    kernel_pgm.reset();
+  }
 
   if (result.IsError()) return result.ptr();
 
@@ -14445,7 +14487,6 @@
   all_libs.Clear();
   all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
   MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
-  GRAPH_MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
 
 #undef CHECK_FINGERPRINTS_INNER
 #undef CHECK_FINGERPRINTS
@@ -15774,12 +15815,15 @@
   return count;
 }
 
-void ICData::WriteSentinel(const Array& data, intptr_t test_entry_length) {
+void ICData::WriteSentinel(const Array& data,
+                           intptr_t test_entry_length,
+                           const Object& back_ref) {
   ASSERT(!data.IsNull());
   RELEASE_ASSERT(smi_illegal_cid().Value() == kIllegalCid);
-  for (intptr_t i = 1; i <= test_entry_length; i++) {
+  for (intptr_t i = 2; i <= test_entry_length; i++) {
     data.SetAt(data.Length() - i, smi_illegal_cid());
   }
+  data.SetAt(data.Length() - 1, back_ref);
 }
 
 #if defined(DEBUG)
@@ -15825,6 +15869,11 @@
   for (intptr_t i = start; i < end; i++) {
     data.SetAt(i, smi_illegal_cid());
   }
+  // The last slot in the last entry of the [ICData::entries_] is a back-ref to
+  // the [ICData] itself.
+  if (index == (len - 1)) {
+    data.SetAt(end - 1, *this);
+  }
 }
 
 void ICData::ClearCountAt(intptr_t index,
@@ -15985,7 +16034,7 @@
   // Grow the array and write the new final sentinel into place.
   const intptr_t new_len = data.Length() + TestEntryLength();
   data = Array::Grow(data, new_len, Heap::kOld);
-  WriteSentinel(data, TestEntryLength());
+  WriteSentinel(data, TestEntryLength(), *this);
   return data.ptr();
 }
 
@@ -16113,7 +16162,8 @@
   data = entries();
   const intptr_t entry_length = TestEntryLength();
   intptr_t data_pos = index * TestEntryLength();
-  for (intptr_t i = 0; i < entry_length; i++) {
+  const intptr_t kBackRefLen = (index == (Length() - 1)) ? 1 : 0;
+  for (intptr_t i = 0; i < entry_length - kBackRefLen; i++) {
     if (data.At(data_pos++) != smi_illegal_cid().ptr()) {
       return false;
     }
@@ -16349,7 +16399,7 @@
 
     pos += result.TestEntryLength();
   }
-  WriteSentinel(data, result.TestEntryLength());
+  WriteSentinel(data, result.TestEntryLength(), result);
   result.set_entries(data);
   ASSERT(result.NumberOfChecksIs(aggregate.length()));
   return result.ptr();
@@ -16419,7 +16469,8 @@
   // IC data array must be null terminated (sentinel entry).
   const intptr_t len = TestEntryLengthFor(num_args_tested, tracking_exactness);
   const Array& array = Array::Handle(Array::New(len, Heap::kOld));
-  WriteSentinel(array, len);
+  // Only empty [ICData]s are allowed to have a non-ICData backref.
+  WriteSentinel(array, len, /*back_ref=*/smi_illegal_cid());
   array.MakeImmutable();
   return array.ptr();
 }
@@ -16548,7 +16599,7 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   array.SetAt(CountIndexFor(num_args_tested), Object::smi_zero());
 #endif
-  WriteSentinel(array, entry_len);
+  WriteSentinel(array, entry_len, result);
 
   result.set_entries(array);
 
@@ -16632,6 +16683,26 @@
 }
 #endif
 
+ICDataPtr ICData::ICDataOfEntriesArray(const Array& array) {
+  const auto& back_ref = Object::Handle(array.At(array.Length() - 1));
+  if (back_ref.ptr() == smi_illegal_cid().ptr()) {
+    // The ICData must be empty.
+#if defined(DEBUG)
+    const int kMaxTestEntryLen = TestEntryLengthFor(2, true);
+    ASSERT(array.Length() <= kMaxTestEntryLen);
+    for (intptr_t i = 0; i < array.Length(); ++i) {
+      ASSERT(array.At(i) == Object::sentinel().ptr());
+    }
+#endif
+    return ICData::null();
+  }
+  const auto& ic_data = ICData::Cast(back_ref);
+#if defined(DEBUG)
+  ic_data.IsSentinelAt(ic_data.Length() - 1);
+#endif
+  return ic_data.ptr();
+}
+
 const char* WeakSerializationReference::ToCString() const {
   return Object::Handle(target()).ToCString();
 }
@@ -18335,6 +18406,32 @@
   set_cache(Array::Handle(cached_array_));
 }
 
+bool SubtypeTestCache::Equals(const SubtypeTestCache& other) const {
+  ASSERT(Thread::Current()
+             ->isolate_group()
+             ->subtype_test_cache_mutex()
+             ->IsOwnedByCurrentThread());
+  if (ptr() == other.ptr()) {
+    return true;
+  }
+  return Array::Handle(cache()).Equals(Array::Handle(other.cache()));
+}
+
+SubtypeTestCachePtr SubtypeTestCache::Copy(Thread* thread) const {
+  ASSERT(thread->isolate_group()
+             ->subtype_test_cache_mutex()
+             ->IsOwnedByCurrentThread());
+  if (IsNull()) {
+    return SubtypeTestCache::null();
+  }
+  Zone* const zone = thread->zone();
+  const auto& result = SubtypeTestCache::Handle(zone, SubtypeTestCache::New());
+  // STC caches are copied on write, so no need to copy the array.
+  const auto& entry_cache = Array::Handle(zone, cache());
+  result.set_cache(entry_cache);
+  return result.ptr();
+}
+
 const char* SubtypeTestCache::ToCString() const {
   auto const zone = Thread::Current()->zone();
   ZoneTextBuffer buffer(zone);
@@ -20334,35 +20431,31 @@
     return false;
   }
   // Function types cannot be handled by Class::IsSubtypeOf().
-  const bool other_is_dart_function_type = other.IsDartFunctionType();
-  if (other_is_dart_function_type || other.IsFunctionType()) {
-    if (IsFunctionType()) {
+  if (IsFunctionType()) {
+    // Any type that can be the type of a closure is a subtype of Function or
+    // non-nullable Object.
+    if (other.IsObjectType() || other.IsDartFunctionType()) {
+      return !isolate_group->use_strict_null_safety_checks() || !IsNullable() ||
+             !other.IsNonNullable();
+    }
+    if (other.IsFunctionType()) {
+      // Check for two function types.
       if (isolate_group->use_strict_null_safety_checks() && IsNullable() &&
           other.IsNonNullable()) {
         return false;
       }
-      if (other_is_dart_function_type) {
-        return true;
-      }
-      // Check for two function types.
       return FunctionType::Cast(*this).IsSubtypeOf(FunctionType::Cast(other),
                                                    space);
     }
-    if (other.IsFunctionType()) {
-      // [this] is not a function type. Therefore, non-function type [this]
-      // cannot be a subtype of function type [other].
-      // This check is needed to avoid falling through to class-based type
-      // tests, which yield incorrect result if [this] = _Closure class,
-      // and [other] is a function type, because class of a function type is
-      // also _Closure.
-      return false;
-    }
-  }
-  if (IsFunctionType()) {
     // Apply additional subtyping rules if 'other' is 'FutureOr'.
     if (IsSubtypeOfFutureOr(zone, other, space, trail)) {
       return true;
     }
+    // All possible supertypes for FunctionType have been checked.
+    return false;
+  } else if (other.IsFunctionType()) {
+    // FunctionTypes can only be subtyped by other FunctionTypes, so don't
+    // fall through to class-based type tests.
     return false;
   }
   const Class& type_cls = Class::Handle(zone, type_class());
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index ce45815..3b9d8ec 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -291,6 +291,11 @@
   using UntaggedObjectType = UntaggedObject;
   using ObjectPtrType = ObjectPtr;
 
+  // We use 30 bits for the hash code so hashes in a snapshot taken on a
+  // 64-bit architecture stay in Smi range when loaded on a 32-bit
+  // architecture.
+  static const intptr_t kHashBits = 30;
+
   static ObjectPtr RawCast(ObjectPtr obj) { return obj; }
 
   virtual ~Object() {}
@@ -1265,6 +1270,71 @@
   }
   void set_interfaces(const Array& value) const;
 
+  // Returns whether a path from [this] to [cls] can be found, where the first
+  // element is a direct supertype of [this], each following element is a direct
+  // supertype of the previous element and the final element has [cls] as its
+  // type class. If [this] and [cls] are the same class, then the path is empty.
+  //
+  // If [path] is not nullptr, then the elements of the path are added to it.
+  // This path can then be used to compute type arguments of [cls] given type
+  // arguments for an instance of [this].
+  //
+  // Note: There may be multiple paths to [cls], but the result of applying each
+  // path must be equal to the other results.
+  bool FindInstantiationOf(Zone* zone,
+                           const Class& cls,
+                           GrowableArray<const AbstractType*>* path,
+                           bool consider_only_super_classes = false) const;
+  bool FindInstantiationOf(Zone* zone,
+                           const Class& cls,
+                           bool consider_only_super_classes = false) const {
+    return FindInstantiationOf(zone, cls, /*path=*/nullptr,
+                               consider_only_super_classes);
+  }
+
+  // Returns whether a path from [this] to [type] can be found, where the first
+  // element is a direct supertype of [this], each following element is a direct
+  // supertype of the previous element and the final element has the same type
+  // class as [type]. If [this] is the type class of [type], then the path is
+  // empty.
+  //
+  // If [path] is not nullptr, then the elements of the path are added to it.
+  // This path can then be used to compute type arguments of [type]'s type
+  // class given type arguments for an instance of [this].
+  //
+  // Note: There may be multiple paths to [type]'s type class, but the result of
+  // applying each path must be equal to the other results.
+  bool FindInstantiationOf(Zone* zone,
+                           const Type& type,
+                           GrowableArray<const AbstractType*>* path,
+                           bool consider_only_super_classes = false) const;
+  bool FindInstantiationOf(Zone* zone,
+                           const Type& type,
+                           bool consider_only_super_classes = false) const {
+    return FindInstantiationOf(zone, type, /*path=*/nullptr,
+                               consider_only_super_classes);
+  }
+
+  // If [this] is a subtype of a type with type class [cls], then this
+  // returns [cls]<X_0, ..., X_n>, where n is the number of type arguments for
+  // [cls] and where each type argument X_k is either instantiated or has free
+  // class type parameters corresponding to the type parameters of [this].
+  // Thus, given an instance of [this], the result can be instantiated
+  // with the instance type arguments to get the type of the instance.
+  //
+  // If [this] is not a subtype of a type with type class [cls], returns null.
+  TypePtr GetInstantiationOf(Zone* zone, const Class& cls) const;
+
+  // If [this] is a subtype of [type], then this returns [cls]<X_0, ..., X_n>,
+  // where [cls] is the type class of [type], n is the number of type arguments
+  // for [cls], and where each type argument X_k is either instantiated or has
+  // free class type parameters corresponding to the type parameters of [this].
+  // Thus, given an instance of [this], the result can be instantiated with the
+  // instance type arguments to get the type of the instance.
+  //
+  // If [this] is not a subtype of a type with type class [cls], returns null.
+  TypePtr GetInstantiationOf(Zone* zone, const Type& type) const;
+
 #if !defined(PRODUCT) || !defined(DART_PRECOMPILED_RUNTIME)
   // Returns the list of classes directly implementing this class.
   GrowableObjectArrayPtr direct_implementors() const {
@@ -2309,6 +2379,12 @@
   // Generates a new ICData with descriptor and data array copied (deep clone).
   static ICDataPtr Clone(const ICData& from);
 
+  // Gets the [ICData] from the [ICData::entries_] array (which stores a back
+  // ref).
+  //
+  // May return `null` if the [ICData] is empty.
+  static ICDataPtr ICDataOfEntriesArray(const Array& array);
+
   static intptr_t TestEntryLengthFor(intptr_t num_args,
                                      bool tracking_exactness);
 
@@ -2468,7 +2544,9 @@
                                  RebindRule rebind_rule,
                                  const AbstractType& receiver_type);
 
-  static void WriteSentinel(const Array& data, intptr_t test_entry_length);
+  static void WriteSentinel(const Array& data,
+                            intptr_t test_entry_length,
+                            const Object& back_ref);
 
   // A cache of VM heap allocated preinitialized empty ic data entry arrays.
   static ArrayPtr cached_icdata_arrays_[kCachedICDataArrayCount];
@@ -5808,8 +5886,6 @@
 
 class CompressedStackMaps : public Object {
  public:
-  static const intptr_t kHashBits = 30;
-
   uintptr_t payload_size() const { return PayloadSizeOf(ptr()); }
   static uintptr_t PayloadSizeOf(const CompressedStackMapsPtr raw) {
     return UntaggedCompressedStackMaps::SizeField::decode(
@@ -7056,6 +7132,12 @@
                                  const char* line_prefix = nullptr) const;
   void Reset() const;
 
+  // Tests that [other] contains the same entries in the same order.
+  bool Equals(const SubtypeTestCache& other) const;
+
+  // Creates a separate copy of the current STC contents.
+  SubtypeTestCachePtr Copy(Thread* thread) const;
+
   static SubtypeTestCachePtr New();
 
   static intptr_t InstanceSize() {
@@ -7623,11 +7705,6 @@
 // A TypeArguments is an array of AbstractType.
 class TypeArguments : public Instance {
  public:
-  // We use 30 bits for the hash code so hashes in a snapshot taken on a
-  // 64-bit architecture stay in Smi range when loaded on a 32-bit
-  // architecture.
-  static const intptr_t kHashBits = 30;
-
   // Hash value for a type argument vector consisting solely of dynamic types.
   static const intptr_t kAllDynamicHash = 1;
 
@@ -7898,11 +7975,6 @@
 // Subclasses of AbstractType are Type and TypeParameter.
 class AbstractType : public Instance {
  public:
-  // We use 30 bits for the hash code so hashes in a snapshot taken on a
-  // 64-bit architecture stay in Smi range when loaded on a 32-bit
-  // architecture.
-  static const intptr_t kHashBits = 30;
-
   virtual bool IsFinalized() const;
   virtual void SetIsFinalized() const;
   virtual bool IsBeingFinalized() const;
@@ -9136,11 +9208,6 @@
 // String may not be '\0' terminated.
 class String : public Instance {
  public:
-  // We use 30 bits for the hash code so hashes in a snapshot taken on a
-  // 64-bit architecture stay in Smi range when loaded on a 32-bit
-  // architecture.
-  static const intptr_t kHashBits = 30;
-
   static const intptr_t kOneByteChar = 1;
   static const intptr_t kTwoByteChar = 2;
 
@@ -9990,11 +10057,6 @@
 
 class Array : public Instance {
  public:
-  // We use 30 bits for the hash code so hashes in a snapshot taken on a
-  // 64-bit architecture stay in Smi range when loaded on a 32-bit
-  // architecture.
-  static const intptr_t kHashBits = 30;
-
   // Returns `true` if we use card marking for arrays of length [array_length].
   static bool UseCardMarkingForAllocation(const intptr_t array_length) {
     return Array::InstanceSize(array_length) > Heap::kNewAllocatableSize;
@@ -10036,6 +10098,10 @@
     return memcmp(a->untag()->data(), b->untag()->data(),
                   kBytesPerElement * length) == 0;
   }
+  bool Equals(const Array& other) const {
+    NoSafepointScope scope;
+    return Equals(ptr(), other.ptr());
+  }
 
   static CompressedObjectPtr* DataOf(ArrayPtr array) {
     return array->untag()->data();
@@ -10146,6 +10212,9 @@
                                   bool unique = false);
 
   ArrayPtr Slice(intptr_t start, intptr_t count, bool with_type_argument) const;
+  ArrayPtr Copy() const {
+    return Slice(0, Length(), /*with_type_argument=*/true);
+  }
 
  protected:
   static ArrayPtr New(intptr_t class_id,
@@ -10544,11 +10613,6 @@
 
 class TypedData : public TypedDataBase {
  public:
-  // We use 30 bits for the hash code so hashes in a snapshot taken on a
-  // 64-bit architecture stay in Smi range when loaded on a 32-bit
-  // architecture.
-  static const intptr_t kHashBits = 30;
-
   virtual bool CanonicalizeEquals(const Instance& other) const;
   virtual uint32_t CanonicalizeHash() const;
 
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index e05b2ef..749c0f3 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -24,7 +24,7 @@
 static bool IsUserClass(intptr_t cid) {
   if (cid == kContextCid) return true;
   if (cid == kTypeArgumentsCid) return false;
-  return cid >= kInstanceCid;
+  return !IsInternalOnlyClassId(cid);
 }
 
 // The state of a pre-order, depth-first traversal of an object graph.
@@ -812,8 +812,6 @@
         HandleVisitor(Thread::Current()),
         writer_(writer) {}
 
-  virtual bool trace_values_through_fields() const { return true; }
-
   void VisitObject(ObjectPtr obj) {
     if (obj->IsPseudoObject()) return;
 
@@ -865,6 +863,13 @@
 
 static const intptr_t kMaxStringElements = 128;
 
+enum ExtraCids {
+  kRootExtraCid = 1,  // 1-origin
+  kIsolateExtraCid = 2,
+
+  kNumExtraCids = 2,
+};
+
 class Pass2Visitor : public ObjectVisitor,
                      public ObjectPointerVisitor,
                      public HandleVisitor {
@@ -876,13 +881,11 @@
         isolate_group_(thread()->isolate_group()),
         writer_(writer) {}
 
-  virtual bool trace_values_through_fields() const { return true; }
-
   void VisitObject(ObjectPtr obj) {
     if (obj->IsPseudoObject()) return;
 
     intptr_t cid = obj->GetClassId();
-    writer_->WriteUnsigned(cid);
+    writer_->WriteUnsigned(cid + kNumExtraCids);
     writer_->WriteUnsigned(discount_sizes_ ? 0 : obj->untag()->HeapSize());
 
     if (cid == kNullCid) {
@@ -891,6 +894,16 @@
       writer_->WriteUnsigned(kBoolData);
       writer_->WriteUnsigned(
           static_cast<uintptr_t>(static_cast<BoolPtr>(obj)->untag()->value_));
+    } else if (cid == kSentinelCid) {
+      if (obj == Object::sentinel().ptr()) {
+        writer_->WriteUnsigned(kNameData);
+        writer_->WriteUtf8("uninitialized");
+      } else if (obj == Object::transition_sentinel().ptr()) {
+        writer_->WriteUnsigned(kNameData);
+        writer_->WriteUtf8("initializing");
+      } else {
+        writer_->WriteUnsigned(kNoData);
+      }
     } else if (cid == kSmiCid) {
       UNREACHABLE();
     } else if (cid == kMintCid) {
@@ -1073,6 +1086,16 @@
     }
   }
 
+  void CountExtraRefs(intptr_t count) {
+    ASSERT(!writing_);
+    counted_ += count;
+  }
+  void WriteExtraRef(intptr_t oid) {
+    ASSERT(writing_);
+    written_++;
+    writer_->WriteUnsigned(oid);
+  }
+
  private:
   IsolateGroup* isolate_group_;
   HeapSnapshotWriter* const writer_;
@@ -1105,6 +1128,36 @@
   DISALLOW_COPY_AND_ASSIGN(Pass3Visitor);
 };
 
+class CollectStaticFieldNames : public ObjectVisitor {
+ public:
+  CollectStaticFieldNames(intptr_t field_table_size,
+                          const char** field_table_names)
+      : ObjectVisitor(),
+        field_table_size_(field_table_size),
+        field_table_names_(field_table_names),
+        field_(Field::Handle()) {}
+
+  void VisitObject(ObjectPtr obj) {
+    if (obj->IsField()) {
+      field_ ^= obj;
+      if (field_.is_static()) {
+        intptr_t id = field_.field_id();
+        if (id > 0) {
+          ASSERT(id < field_table_size_);
+          field_table_names_[id] = field_.UserVisibleNameCString();
+        }
+      }
+    }
+  }
+
+ private:
+  intptr_t field_table_size_;
+  const char** field_table_names_;
+  Field& field_;
+
+  DISALLOW_COPY_AND_ASSIGN(CollectStaticFieldNames);
+};
+
 void HeapSnapshotWriter::Write() {
   HeapIterationScope iteration(thread());
 
@@ -1134,7 +1187,46 @@
     Array& fields = Array::Handle();
     Field& field = Field::Handle();
 
-    WriteUnsigned(class_count_);
+    intptr_t field_table_size = isolate()->field_table()->NumFieldIds();
+    const char** field_table_names =
+        thread()->zone()->Alloc<const char*>(field_table_size);
+    for (intptr_t i = 0; i < field_table_size; i++) {
+      field_table_names[i] = nullptr;
+    }
+    {
+      CollectStaticFieldNames visitor(field_table_size, field_table_names);
+      iteration.IterateObjects(&visitor);
+    }
+
+    WriteUnsigned(class_count_ + kNumExtraCids);
+    {
+      ASSERT(kRootExtraCid == 1);
+      WriteUnsigned(0);   // Flags
+      WriteUtf8("Root");  // Name
+      WriteUtf8("");      // Library name
+      WriteUtf8("");      // Library uri
+      WriteUtf8("");      // Reserved
+      WriteUnsigned(0);   // Field count
+    }
+    {
+      ASSERT(kIsolateExtraCid == 2);
+      WriteUnsigned(0);      // Flags
+      WriteUtf8("Isolate");  // Name
+      WriteUtf8("");         // Library name
+      WriteUtf8("");         // Library uri
+      WriteUtf8("");         // Reserved
+
+      WriteUnsigned(field_table_size);  // Field count
+      for (intptr_t i = 0; i < field_table_size; i++) {
+        intptr_t flags = 1;  // Strong.
+        WriteUnsigned(flags);
+        WriteUnsigned(i);  // Index.
+        const char* name = field_table_names[i];
+        WriteUtf8(name == nullptr ? "" : name);
+        WriteUtf8("");  // Reserved
+      }
+    }
+    ASSERT(kNumExtraCids == 2);
     for (intptr_t cid = 1; cid <= class_count_; cid++) {
       if (!class_table->HasValidClassAt(cid)) {
         WriteUnsigned(0);  // Flags
@@ -1227,13 +1319,22 @@
 
   SetupCountingPages();
 
+  intptr_t num_isolates = 0;
   {
     Pass1Visitor visitor(this);
 
-    // Root "object".
+    // Root "objects".
     ++object_count_;
-    isolate()->VisitObjectPointers(&visitor,
-                                   ValidationPolicy::kDontValidateFrames);
+    isolate_group()->VisitSharedPointers(&visitor);
+    isolate_group()->ForEachIsolate(
+        [&](Isolate* isolate) {
+          ++object_count_;
+          isolate->VisitObjectPointers(&visitor,
+                                       ValidationPolicy::kDontValidateFrames);
+          ++num_isolates;
+        },
+        /*at_safepoint=*/true);
+    CountReferences(num_isolates);
 
     // Heap objects.
     iteration.IterateVMIsolateObjects(&visitor);
@@ -1249,16 +1350,35 @@
     WriteUnsigned(reference_count_);
     WriteUnsigned(object_count_);
 
-    // Root "object".
-    WriteUnsigned(0);  // cid
-    WriteUnsigned(0);  // shallowSize
-    WriteUnsigned(kNoData);
-    visitor.DoCount();
-    isolate()->VisitObjectPointers(&visitor,
-                                   ValidationPolicy::kDontValidateFrames);
-    visitor.DoWrite();
-    isolate()->VisitObjectPointers(&visitor,
-                                   ValidationPolicy::kDontValidateFrames);
+    // Root "objects".
+    {
+      WriteUnsigned(kRootExtraCid);
+      WriteUnsigned(0);  // shallowSize
+      WriteUnsigned(kNoData);
+      visitor.DoCount();
+      isolate_group()->VisitSharedPointers(&visitor);
+      visitor.CountExtraRefs(num_isolates);
+      visitor.DoWrite();
+      isolate_group()->VisitSharedPointers(&visitor);
+      for (intptr_t i = 0; i < num_isolates; i++) {
+        visitor.WriteExtraRef(i + 2);  // 0 = sentinel, 1 = root, 2+ = isolates
+      }
+    }
+    isolate_group()->ForEachIsolate(
+        [&](Isolate* isolate) {
+          WriteUnsigned(kIsolateExtraCid);
+          WriteUnsigned(0);  // shallowSize
+          WriteUnsigned(kNameData);
+          WriteUtf8(
+              OS::SCreate(thread()->zone(), "%" Pd64, isolate->main_port()));
+          visitor.DoCount();
+          isolate->VisitObjectPointers(&visitor,
+                                       ValidationPolicy::kDontValidateFrames);
+          visitor.DoWrite();
+          isolate->VisitObjectPointers(&visitor,
+                                       ValidationPolicy::kDontValidateFrames);
+        },
+        /*at_safepoint=*/true);
 
     // Heap objects.
     visitor.set_discount_sizes(true);
@@ -1277,6 +1397,8 @@
 
     // Handle root object.
     WriteUnsigned(0);
+    isolate_group()->ForEachIsolate([&](Isolate* isolate) { WriteUnsigned(0); },
+                                    /*at_safepoint=*/true);
 
     // Handle visit rest of the objects.
     iteration.IterateVMIsolateObjects(&visitor);
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 7b9189f..f5d8bc5 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -3,11 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "vm/object_graph_copy.h"
+
 #include "vm/dart_api_state.h"
 #include "vm/flags.h"
 #include "vm/heap/weak_table.h"
 #include "vm/longjump.h"
 #include "vm/object.h"
+#include "vm/object_store.h"
 #include "vm/snapshot.h"
 #include "vm/symbols.h"
 
@@ -27,7 +29,6 @@
   V(Code)                                                                      \
   V(CodeSourceMap)                                                             \
   V(CompressedStackMaps)                                                       \
-  V(Context)                                                                   \
   V(ContextScope)                                                              \
   V(DynamicLibrary)                                                            \
   V(Error)                                                                     \
@@ -79,7 +80,6 @@
   V(UnlinkedCall)                                                              \
   V(UnwindError)                                                               \
   V(UserTag)                                                                   \
-  V(WeakProperty)                                                              \
   V(WeakSerializationReference)
 
 namespace dart {
@@ -137,7 +137,7 @@
 }
 
 DART_FORCE_INLINE
-static bool CanShareObject(uword tags) {
+static bool CanShareObject(ObjectPtr obj, uword tags) {
   if ((tags & UntaggedObject::CanonicalBit::mask_in_place()) != 0) {
     return true;
   }
@@ -163,6 +163,11 @@
   if (cid == kCapabilityCid) return true;
   if (cid == kRegExpCid) return true;
 
+  if (cid == kClosureCid) {
+    // We can share a closure iff it doesn't close over any state.
+    return Closure::RawCast(obj)->untag()->context() == Object::null();
+  }
+
   return false;
 }
 
@@ -240,7 +245,9 @@
 DART_FORCE_INLINE
 ObjectPtr AllocateObject(intptr_t cid, intptr_t size) {
 #if defined(DART_COMPRESSED_POINTERS)
-  const bool compressed = true;
+  // TODO(rmacnak): Can be changed unconditionally to `true` once Contexts
+  // are compressed.
+  const bool compressed = cid != kContextCid;
 #else
   const bool compressed = false;
 #endif
@@ -258,6 +265,9 @@
   if (cid == kArrayCid) {
     static_cast<UntaggedArray*>(to.untag())->length_ =
         static_cast<UntaggedArray*>(from.untag())->length_;
+  } else if (cid == kContextCid) {
+    static_cast<UntaggedContext*>(to.untag())->num_variables_ =
+        static_cast<UntaggedContext*>(from.untag())->num_variables_;
   } else if (IsTypedDataClassId(cid)) {
     static_cast<UntaggedTypedDataBase*>(to.untag())->length_ =
         static_cast<UntaggedTypedDataBase*>(from.untag())->length_;
@@ -353,7 +363,8 @@
       : ForwardMapBase(thread),
         raw_from_to_(thread->zone(), 20),
         raw_transferables_from_to_(thread->zone(), 0),
-        raw_objects_to_rehash_(thread->zone(), 0) {
+        raw_objects_to_rehash_(thread->zone(), 0),
+        raw_expandos_to_rehash_(thread->zone(), 0) {
     raw_from_to_.Resize(2);
     raw_from_to_[0] = Object::null();
     raw_from_to_[1] = Object::null();
@@ -381,11 +392,13 @@
     raw_transferables_from_to_.Add(from);
     raw_transferables_from_to_.Add(to);
   }
+  void AddWeakProperty(WeakPropertyPtr from) { raw_weak_properties_.Add(from); }
   void AddExternalTypedData(ExternalTypedDataPtr to) {
     raw_external_typed_data_to_.Add(to);
   }
 
   void AddObjectToRehash(ObjectPtr to) { raw_objects_to_rehash_.Add(to); }
+  void AddExpandoToRehash(ObjectPtr to) { raw_expandos_to_rehash_.Add(to); }
 
  private:
   friend class FastObjectCopy;
@@ -395,6 +408,8 @@
   GrowableArray<TransferableTypedDataPtr> raw_transferables_from_to_;
   GrowableArray<ExternalTypedDataPtr> raw_external_typed_data_to_;
   GrowableArray<ObjectPtr> raw_objects_to_rehash_;
+  GrowableArray<ObjectPtr> raw_expandos_to_rehash_;
+  GrowableArray<WeakPropertyPtr> raw_weak_properties_;
   intptr_t fill_cursor_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(FastForwardMap);
@@ -432,14 +447,18 @@
     transferables_from_to_.Add(&TransferableTypedData::Handle(from.ptr()));
     transferables_from_to_.Add(&TransferableTypedData::Handle(to.ptr()));
   }
-
+  void AddWeakProperty(const WeakProperty& from) {
+    weak_properties_.Add(&WeakProperty::Handle(from.ptr()));
+  }
   void AddExternalTypedData(ExternalTypedDataPtr to) {
     external_typed_data_.Add(&ExternalTypedData::Handle(to));
   }
-
   void AddObjectToRehash(const Object& to) {
     objects_to_rehash_.Add(&Object::Handle(to.ptr()));
   }
+  void AddExpandoToRehash(const Object& to) {
+    expandos_to_rehash_.Add(&Object::Handle(to.ptr()));
+  }
 
   void FinalizeTransferables() {
     for (intptr_t i = 0; i < transferables_from_to_.length(); i += 2) {
@@ -464,6 +483,8 @@
   GrowableArray<const TransferableTypedData*> transferables_from_to_;
   GrowableArray<const ExternalTypedData*> external_typed_data_;
   GrowableArray<const Object*> objects_to_rehash_;
+  GrowableArray<const Object*> expandos_to_rehash_;
+  GrowableArray<const WeakProperty*> weak_properties_;
   intptr_t fill_cursor_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(SlowForwardMap);
@@ -478,7 +499,9 @@
         heap_(thread->isolate_group()->heap()),
         class_table_(thread->isolate_group()->class_table()),
         new_space_(heap_->new_space()),
-        tmp_(Object::Handle(thread->zone())) {}
+        tmp_(Object::Handle(thread->zone())),
+        expando_cid_(Class::GetClassId(
+            thread->isolate_group()->object_store()->expando_class())) {}
   ~ObjectCopyBase() {}
 
  protected:
@@ -548,7 +571,10 @@
           Class::NumNativeFieldsOf(class_table_->At(cid)) != 0;
       if (has_native_fields) {
         exception_msg_ =
-            "Illegal argument in isolate message: (object has native fields)";
+            OS::SCreate(zone_,
+                        "Illegal argument in isolate message: (object extends "
+                        "NativeWrapper - %s)",
+                        Class::Handle(class_table_->At(cid)).ToCString());
         return false;
       }
       return true;
@@ -562,22 +588,18 @@
   }
 
     switch (cid) {
+      // From "dart:ffi" we handle only Pointer/DynamicLibrary specially, since
+      // 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(FfiDynamicLibrary)
+      HANDLE_ILLEGAL_CASE(FfiPointer)
+      HANDLE_ILLEGAL_CASE(FunctionType)
       HANDLE_ILLEGAL_CASE(MirrorReference)
       HANDLE_ILLEGAL_CASE(ReceivePort)
       HANDLE_ILLEGAL_CASE(StackTrace)
       HANDLE_ILLEGAL_CASE(UserTag)
-      HANDLE_ILLEGAL_CASE(DynamicLibrary)
-      HANDLE_ILLEGAL_CASE(Pointer)
-      case kClosureCid: {
-        if (!Function::IsImplicitStaticClosureFunction(
-                Closure::FunctionOf(Closure::RawCast(object)))) {
-          exception_msg_ =
-              "Illegal argument in isolate message: (object is a closure)";
-          return false;
-        }
-        ASSERT(Closure::ContextOf(Closure::RawCast(object)) == Object::null());
-        return true;
-      }
       default:
         return true;
     }
@@ -590,6 +612,7 @@
   ClassTable* class_table_;
   Scavenger* new_space_;
   Object& tmp_;
+  intptr_t expando_cid_;
 
   const char* exception_msg_ = nullptr;
 };
@@ -643,6 +666,16 @@
     }
   }
 
+  void ForwardContextPointers(intptr_t context_length,
+                              ObjectPtr src,
+                              ObjectPtr dst,
+                              intptr_t offset,
+                              intptr_t end_offset) {
+    for (; offset < end_offset; offset += kWordSize) {
+      ForwardPointer(src, dst, offset);
+    }
+  }
+
   DART_FORCE_INLINE
   void ForwardCompressedPointer(ObjectPtr src, ObjectPtr dst, intptr_t offset) {
     auto value = LoadCompressedPointer(src, offset);
@@ -652,7 +685,7 @@
     }
     auto value_decompressed = value.Decompress(heap_base_);
     const uword tags = TagsFromUntaggedObject(value_decompressed.untag());
-    if (CanShareObject(tags)) {
+    if (CanShareObject(value_decompressed, tags)) {
       StoreCompressedPointerNoBarrier(dst, offset, value);
       return;
     }
@@ -670,10 +703,40 @@
       return;
     }
 
-    auto to = Forward(tags, value.Decompress(heap_base_));
+    auto to = Forward(tags, value_decompressed);
     StoreCompressedPointerNoBarrier(dst, offset, to);
   }
 
+  // TODO(rmacnak): Can be removed if Contexts are compressed.
+  DART_FORCE_INLINE
+  void ForwardPointer(ObjectPtr src, ObjectPtr dst, intptr_t offset) {
+    auto value = LoadPointer(src, offset);
+    if (!value.IsHeapObject()) {
+      StorePointerNoBarrier(dst, offset, value);
+      return;
+    }
+    const uword tags = TagsFromUntaggedObject(value.untag());
+    if (CanShareObject(value, tags)) {
+      StorePointerNoBarrier(dst, offset, value);
+      return;
+    }
+
+    ObjectPtr existing_to = fast_forward_map_.ForwardedObject(value);
+    if (existing_to != Marker()) {
+      StorePointerNoBarrier(dst, offset, existing_to);
+      return;
+    }
+
+    if (UNLIKELY(!CanCopyObject(tags, value))) {
+      ASSERT(exception_msg_ != nullptr);
+      StorePointerNoBarrier(dst, offset, Object::null());
+      return;
+    }
+
+    auto to = Forward(tags, value);
+    StorePointerNoBarrier(dst, offset, to);
+  }
+
   ObjectPtr Forward(uword tags, ObjectPtr from) {
     const intptr_t header_size = UntaggedObject::SizeTag::decode(tags);
     const auto cid = UntaggedObject::ClassIdTag::decode(tags);
@@ -708,9 +771,15 @@
                            TransferableTypedDataPtr to) {
     fast_forward_map_.AddTransferable(from, to);
   }
+  void EnqueueWeakProperty(WeakPropertyPtr from) {
+    fast_forward_map_.AddWeakProperty(from);
+  }
   void EnqueueObjectToRehash(ObjectPtr to) {
     fast_forward_map_.AddObjectToRehash(to);
   }
+  void EnqueueExpandoToRehash(ObjectPtr to) {
+    fast_forward_map_.AddExpandoToRehash(to);
+  }
 
   static void StoreCompressedArrayPointers(intptr_t array_length,
                                            ObjectPtr src,
@@ -792,6 +861,16 @@
     }
   }
 
+  void ForwardContextPointers(intptr_t context_length,
+                              const Object& src,
+                              const Object& dst,
+                              intptr_t offset,
+                              intptr_t end_offset) {
+    for (; offset < end_offset; offset += kWordSize) {
+      ForwardPointer(src, dst, offset);
+    }
+  }
+
   DART_FORCE_INLINE
   void ForwardCompressedLargeArrayPointer(const Object& src,
                                           const Object& dst,
@@ -804,7 +883,7 @@
 
     auto value_decompressed = value.Decompress(heap_base_);
     const uword tags = TagsFromUntaggedObject(value_decompressed.untag());
-    if (CanShareObject(tags)) {
+    if (CanShareObject(value_decompressed, tags)) {
       StoreCompressedLargeArrayPointerBarrier(dst.ptr(), offset,
                                               value_decompressed);
       return;
@@ -839,7 +918,7 @@
     }
     auto value_decompressed = value.Decompress(heap_base_);
     const uword tags = TagsFromUntaggedObject(value_decompressed.untag());
-    if (CanShareObject(tags)) {
+    if (CanShareObject(value_decompressed, tags)) {
       StoreCompressedPointerBarrier(dst.ptr(), offset, value_decompressed);
       return;
     }
@@ -861,6 +940,37 @@
     tmp_ = Forward(tags, tmp_);  // Only this can cause allocation.
     StoreCompressedPointerBarrier(dst.ptr(), offset, tmp_.ptr());
   }
+
+  // TODO(rmacnak): Can be removed if Contexts are compressed.
+  DART_FORCE_INLINE
+  void ForwardPointer(const Object& src, const Object& dst, intptr_t offset) {
+    auto value = LoadPointer(src.ptr(), offset);
+    if (!value.IsHeapObject()) {
+      StorePointerNoBarrier(dst.ptr(), offset, value);
+      return;
+    }
+    const uword tags = TagsFromUntaggedObject(value.untag());
+    if (CanShareObject(value, tags)) {
+      StorePointerBarrier(dst.ptr(), offset, value);
+      return;
+    }
+
+    ObjectPtr existing_to = slow_forward_map_.ForwardedObject(value);
+    if (existing_to != Marker()) {
+      StorePointerBarrier(dst.ptr(), offset, existing_to);
+      return;
+    }
+
+    if (UNLIKELY(!CanCopyObject(tags, value))) {
+      ASSERT(exception_msg_ != nullptr);
+      StorePointerNoBarrier(dst.ptr(), offset, Object::null());
+      return;
+    }
+
+    tmp_ = value;
+    tmp_ = Forward(tags, tmp_);  // Only this can cause allocation.
+    StorePointerBarrier(dst.ptr(), offset, tmp_.ptr());
+  }
   ObjectPtr Forward(uword tags, const Object& from) {
     const intptr_t cid = UntaggedObject::ClassIdTag::decode(tags);
     intptr_t size = UntaggedObject::SizeTag::decode(tags);
@@ -888,9 +998,15 @@
                            const TransferableTypedData& to) {
     slow_forward_map_.AddTransferable(from, to);
   }
+  void EnqueueWeakProperty(const WeakProperty& from) {
+    slow_forward_map_.AddWeakProperty(from);
+  }
   void EnqueueObjectToRehash(const Object& to) {
     slow_forward_map_.AddObjectToRehash(to);
   }
+  void EnqueueExpandoToRehash(const Object& to) {
+    slow_forward_map_.AddExpandoToRehash(to);
+  }
 
   void StoreCompressedArrayPointers(intptr_t array_length,
                                     const Object& src,
@@ -968,6 +1084,7 @@
 
       CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY_NOR_MAP(COPY_TO)
       COPY_TO(Array)
+      COPY_TO(GrowableObjectArray)
       COPY_TO(LinkedHashMap)
       COPY_TO(LinkedHashSet)
 #undef COPY_TO
@@ -1041,6 +1158,19 @@
                             UntagClosure(from)->entry_point_);
   }
 
+  void CopyContext(typename Types::Context from, typename Types::Context to) {
+    const intptr_t length = Context::NumVariables(Types::GetContextPtr(from));
+
+    UntagContext(to)->num_variables_ = UntagContext(from)->num_variables_;
+
+    // TODO(rmacnak): Should use ForwardCompressedPointer once contexts are
+    // compressed.
+    Base::ForwardPointer(from, to, OFFSET_OF(UntaggedContext, parent_));
+    Base::ForwardContextPointers(
+        length, from, to, Context::variable_offset(0),
+        Context::variable_offset(0) + kWordSize * length);
+  }
+
   void CopyArray(typename Types::Array from, typename Types::Array to) {
     const intptr_t length = Smi::Value(UntagArray(from)->length());
     Base::StoreCompressedArrayPointers(
@@ -1136,6 +1266,7 @@
     CopyLinkedHashBase<2, typename Types::LinkedHashMap>(
         from, to, UntagLinkedHashMap(from), UntagLinkedHashMap(to));
   }
+
   void CopyLinkedHashSet(typename Types::LinkedHashSet from,
                          typename Types::LinkedHashSet to) {
     CopyLinkedHashBase<1, typename Types::LinkedHashSet>(
@@ -1205,7 +1336,17 @@
     raw_to->offset_in_bytes_ = raw_from->offset_in_bytes_;
     raw_to->data_ = nullptr;
 
-    if (raw_to->typed_data_.Decompress(Base::heap_base_) == Object::null()) {
+    auto forwarded_backing_store =
+        raw_to->typed_data_.Decompress(Base::heap_base_);
+    if (forwarded_backing_store == Marker() ||
+        forwarded_backing_store == Object::null()) {
+      // Ensure the backing store is never "sentinel" - the scavenger doesn't
+      // like it.
+      Base::StoreCompressedPointerNoBarrier(
+          Types::GetTypedDataViewPtr(to),
+          OFFSET_OF(UntaggedTypedDataView, typed_data_), Object::null());
+      raw_to->length_ = 0;
+      raw_to->offset_in_bytes_ = 0;
       ASSERT(Base::exception_msg_ != nullptr);
       return;
     }
@@ -1257,6 +1398,20 @@
     Base::EnqueueTransferable(from, to);
   }
 
+  void CopyWeakProperty(typename Types::WeakProperty from,
+                        typename Types::WeakProperty to) {
+    // We store `null`s as keys/values and let the main algorithm know that
+    // we should check reachability of the key again after the fixpoint (if it
+    // became reachable, forward the key/value).
+    Base::StoreCompressedPointerNoBarrier(Types::GetWeakPropertyPtr(to),
+                                          OFFSET_OF(UntaggedWeakProperty, key_),
+                                          Object::null());
+    Base::StoreCompressedPointerNoBarrier(
+        Types::GetWeakPropertyPtr(to), OFFSET_OF(UntaggedWeakProperty, value_),
+        Object::null());
+    Base::EnqueueWeakProperty(from);
+  }
+
 #define DEFINE_UNSUPPORTED(clazz)                                              \
   void Copy##clazz(typename Types::clazz from, typename Types::clazz to) {     \
     FATAL("Objects of type " #clazz " should not occur in object graphs");     \
@@ -1291,33 +1446,85 @@
     if (root_copy == Marker()) {
       return root_copy;
     }
-    while (fast_forward_map_.fill_cursor_ <
-           fast_forward_map_.raw_from_to_.length()) {
-      const intptr_t index = fast_forward_map_.fill_cursor_;
-      ObjectPtr from = fast_forward_map_.raw_from_to_[index];
-      ObjectPtr to = fast_forward_map_.raw_from_to_[index + 1];
-      FastCopyObject(from, to);
-      if (exception_msg_ != nullptr) {
-        return root_copy;
+    auto& from_weak_property = WeakProperty::Handle(zone_);
+    auto& to_weak_property = WeakProperty::Handle(zone_);
+    auto& weak_property_key = Object::Handle(zone_);
+    while (true) {
+      if (fast_forward_map_.fill_cursor_ ==
+          fast_forward_map_.raw_from_to_.length()) {
+        break;
       }
-      fast_forward_map_.fill_cursor_ += 2;
+
+      // Run fixpoint to copy all objects.
+      while (fast_forward_map_.fill_cursor_ <
+             fast_forward_map_.raw_from_to_.length()) {
+        const intptr_t index = fast_forward_map_.fill_cursor_;
+        ObjectPtr from = fast_forward_map_.raw_from_to_[index];
+        ObjectPtr to = fast_forward_map_.raw_from_to_[index + 1];
+        FastCopyObject(from, to);
+        if (exception_msg_ != nullptr) {
+          return root_copy;
+        }
+        fast_forward_map_.fill_cursor_ += 2;
+      }
+
+      // Possibly forward values of [WeakProperty]s if keys became reachable.
+      intptr_t i = 0;
+      auto& weak_properties = fast_forward_map_.raw_weak_properties_;
+      while (i < weak_properties.length()) {
+        from_weak_property = weak_properties[i];
+        weak_property_key =
+            fast_forward_map_.ForwardedObject(from_weak_property.key());
+        if (weak_property_key.ptr() != Marker()) {
+          to_weak_property ^=
+              fast_forward_map_.ForwardedObject(from_weak_property.ptr());
+
+          // The key became reachable so we'll change the forwarded
+          // [WeakProperty]'s key to the new key (it is `null` at this point).
+          to_weak_property.set_key(weak_property_key);
+
+          // Since the key has become strongly reachable in the copied graph,
+          // we'll also need to forward the value.
+          ForwardCompressedPointer(from_weak_property.ptr(),
+                                   to_weak_property.ptr(),
+                                   OFFSET_OF(UntaggedWeakProperty, value_));
+
+          // We don't need to process this [WeakProperty] again.
+          const intptr_t last = weak_properties.length() - 1;
+          if (i < last) {
+            weak_properties[i] = weak_properties[last];
+            weak_properties.SetLength(last);
+            continue;
+          }
+        }
+        i++;
+      }
     }
     if (root_copy != Marker()) {
-      TryBuildArrayOfObjectsToRehash();
+      ObjectPtr array;
+      array = TryBuildArrayOfObjectsToRehash(
+          fast_forward_map_.raw_objects_to_rehash_);
+      if (array == Marker()) return root_copy;
+      raw_objects_to_rehash_ = Array::RawCast(array);
+
+      array = TryBuildArrayOfObjectsToRehash(
+          fast_forward_map_.raw_expandos_to_rehash_);
+      if (array == Marker()) return root_copy;
+      raw_expandos_to_rehash_ = Array::RawCast(array);
     }
     return root_copy;
   }
 
-  void TryBuildArrayOfObjectsToRehash() {
-    const auto& objects_to_rehash = fast_forward_map_.raw_objects_to_rehash_;
+  ObjectPtr TryBuildArrayOfObjectsToRehash(
+      const GrowableArray<ObjectPtr>& objects_to_rehash) {
     const intptr_t length = objects_to_rehash.length();
-    if (length == 0) return;
+    if (length == 0) return Object::null();
 
     const intptr_t size = Array::InstanceSize(length);
     const uword array_addr = new_space_->TryAllocate(thread_, size);
     if (array_addr == 0) {
       exception_msg_ = kFastAllocationFailed;
-      return;
+      return Marker();
     }
 
     const uword header_size =
@@ -1333,7 +1540,7 @@
     for (intptr_t i = 0; i < length; ++i) {
       array_data[i] = objects_to_rehash[i];
     }
-    raw_objects_to_rehash_ = array;
+    return array;
   }
 
  private:
@@ -1365,15 +1572,21 @@
 #else
     CopyUserdefinedInstance(Instance::RawCast(from), Instance::RawCast(to));
 #endif
+    if (cid == expando_cid_) {
+      EnqueueExpandoToRehash(to);
+    }
   }
 
   ArrayPtr raw_objects_to_rehash_ = Array::null();
+  ArrayPtr raw_expandos_to_rehash_ = Array::null();
 };
 
 class SlowObjectCopy : public ObjectCopy<SlowObjectCopyBase> {
  public:
   explicit SlowObjectCopy(Thread* thread)
-      : ObjectCopy(thread), objects_to_rehash_(Array::Handle(thread->zone())) {}
+      : ObjectCopy(thread),
+        objects_to_rehash_(Array::Handle(thread->zone())),
+        expandos_to_rehash_(Array::Handle(thread->zone())) {}
   ~SlowObjectCopy() {}
 
   ObjectPtr ContinueCopyGraphSlow(const Object& root,
@@ -1383,32 +1596,76 @@
       root_copy = Forward(TagsFromUntaggedObject(root.ptr().untag()), root);
     }
 
+    WeakProperty& weak_property = WeakProperty::Handle(Z);
     Object& from = Object::Handle(Z);
     Object& to = Object::Handle(Z);
-    while (slow_forward_map_.fill_cursor_ <
-           slow_forward_map_.from_to_.length()) {
-      const intptr_t index = slow_forward_map_.fill_cursor_;
-      from = slow_forward_map_.from_to_[index]->ptr();
-      to = slow_forward_map_.from_to_[index + 1]->ptr();
-      CopyObject(from, to);
-      slow_forward_map_.fill_cursor_ += 2;
-      if (exception_msg_ != nullptr) {
-        return Marker();
+    while (true) {
+      if (slow_forward_map_.fill_cursor_ ==
+          slow_forward_map_.from_to_.length()) {
+        break;
+      }
+
+      // Run fixpoint to copy all objects.
+      while (slow_forward_map_.fill_cursor_ <
+             slow_forward_map_.from_to_.length()) {
+        const intptr_t index = slow_forward_map_.fill_cursor_;
+        from = slow_forward_map_.from_to_[index]->ptr();
+        to = slow_forward_map_.from_to_[index + 1]->ptr();
+        CopyObject(from, to);
+        slow_forward_map_.fill_cursor_ += 2;
+        if (exception_msg_ != nullptr) {
+          return Marker();
+        }
+      }
+
+      // Possibly forward values of [WeakProperty]s if keys became reachable.
+      intptr_t i = 0;
+      auto& weak_properties = slow_forward_map_.weak_properties_;
+      while (i < weak_properties.length()) {
+        const auto& from_weak_property = *weak_properties[i];
+        to = slow_forward_map_.ForwardedObject(from_weak_property.key());
+        if (to.ptr() != Marker()) {
+          weak_property ^=
+              slow_forward_map_.ForwardedObject(from_weak_property.ptr());
+
+          // The key became reachable so we'll change the forwarded
+          // [WeakProperty]'s key to the new key (it is `null` at this point).
+          weak_property.set_key(to);
+
+          // Since the key has become strongly reachable in the copied graph,
+          // we'll also need to forward the value.
+          ForwardCompressedPointer(from_weak_property, weak_property,
+                                   OFFSET_OF(UntaggedWeakProperty, value_));
+
+          // We don't need to process this [WeakProperty] again.
+          const intptr_t last = weak_properties.length() - 1;
+          if (i < last) {
+            weak_properties[i] = weak_properties[last];
+            weak_properties.SetLength(last);
+            continue;
+          }
+        }
+        i++;
       }
     }
-    BuildArrayOfObjectsToRehash();
+
+    objects_to_rehash_ =
+        BuildArrayOfObjectsToRehash(slow_forward_map_.objects_to_rehash_);
+    expandos_to_rehash_ =
+        BuildArrayOfObjectsToRehash(slow_forward_map_.expandos_to_rehash_);
     return root_copy.ptr();
   }
 
-  void BuildArrayOfObjectsToRehash() {
-    const auto& objects_to_rehash = slow_forward_map_.objects_to_rehash_;
+  ArrayPtr BuildArrayOfObjectsToRehash(
+      const GrowableArray<const Object*>& objects_to_rehash) {
     const intptr_t length = objects_to_rehash.length();
-    if (length == 0) return;
+    if (length == 0) return Array::null();
 
-    objects_to_rehash_ = Array::New(length);
+    const auto& array = Array::Handle(zone_, Array::New(length));
     for (intptr_t i = 0; i < length; ++i) {
-      objects_to_rehash_.SetAt(i, *objects_to_rehash[i]);
+      array.SetAt(i, *objects_to_rehash[i]);
     }
+    return array.ptr();
   }
 
  private:
@@ -1429,9 +1686,13 @@
 #else
     CopyUserdefinedInstance(from, to);
 #endif
+    if (cid == expando_cid_) {
+      EnqueueExpandoToRehash(to);
+    }
   }
 
   Array& objects_to_rehash_;
+  Array& expandos_to_rehash_;
 };
 
 class ObjectGraphCopier {
@@ -1449,7 +1710,12 @@
     thread_->isolate()->set_forward_table_old(nullptr);
   }
 
-  // Result will be [<msg>, <objects-in-msg-to-rehash>]
+  // Result will be
+  //   [
+  //     <message>,
+  //     <collection-lib-objects-to-rehash>,
+  //     <core-lib-objects-to-rehash>,
+  //   ]
   ObjectPtr CopyObjectGraph(const Object& root) {
     const char* volatile exception_msg = nullptr;
     auto& result = Object::Handle(zone_);
@@ -1492,13 +1758,13 @@
  private:
   ObjectPtr CopyObjectGraphInternal(const Object& root,
                                     const char* volatile* exception_msg) {
-    const auto& result_array = Array::Handle(zone_, Array::New(2));
+    const auto& result_array = Array::Handle(zone_, Array::New(3));
     if (!root.ptr()->IsHeapObject()) {
       result_array.SetAt(0, root);
       return result_array.ptr();
     }
     const uword tags = TagsFromUntaggedObject(root.ptr().untag());
-    if (CanShareObject(tags)) {
+    if (CanShareObject(root.ptr(), tags)) {
       result_array.SetAt(0, root);
       return result_array.ptr();
     }
@@ -1523,6 +1789,8 @@
             result_array.SetAt(0, result);
             fast_object_copy_.tmp_ = fast_object_copy_.raw_objects_to_rehash_;
             result_array.SetAt(1, fast_object_copy_.tmp_);
+            fast_object_copy_.tmp_ = fast_object_copy_.raw_expandos_to_rehash_;
+            result_array.SetAt(2, fast_object_copy_.tmp_);
             HandlifyExternalTypedData();
             HandlifyTransferables();
             return result_array.ptr();
@@ -1563,6 +1831,7 @@
 
     result_array.SetAt(0, result);
     result_array.SetAt(1, slow_object_copy_.objects_to_rehash_);
+    result_array.SetAt(2, slow_object_copy_.expandos_to_rehash_);
     return result_array.ptr();
   }
 
@@ -1572,8 +1841,10 @@
 
     MakeUninitializedNewSpaceObjectsGCSafe();
     HandlifyTransferables();
+    HandlifyWeakProperties();
     HandlifyExternalTypedData();
     HandlifyObjectsToReHash();
+    HandlifyExpandosToReHash();
     HandlifyFromToObjects();
     slow_forward_map.fill_cursor_ = fast_forward_map.fill_cursor_;
   }
@@ -1598,46 +1869,35 @@
     }
   }
   void HandlifyTransferables() {
-    auto& raw_transferables =
-        fast_object_copy_.fast_forward_map_.raw_transferables_from_to_;
-    const auto length = raw_transferables.length();
-    if (length > 0) {
-      auto& transferables =
-          slow_object_copy_.slow_forward_map_.transferables_from_to_;
-      transferables.Resize(length);
-      for (intptr_t i = 0; i < length; i++) {
-        transferables[i] =
-            &TransferableTypedData::Handle(Z, raw_transferables[i]);
-      }
-      raw_transferables.Clear();
-    }
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_transferables_from_to_,
+             &slow_object_copy_.slow_forward_map_.transferables_from_to_);
+  }
+  void HandlifyWeakProperties() {
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_weak_properties_,
+             &slow_object_copy_.slow_forward_map_.weak_properties_);
   }
   void HandlifyExternalTypedData() {
-    auto& raw_external_typed_data =
-        fast_object_copy_.fast_forward_map_.raw_external_typed_data_to_;
-    const auto length = raw_external_typed_data.length();
-    if (length > 0) {
-      auto& external_typed_data =
-          slow_object_copy_.slow_forward_map_.external_typed_data_;
-      external_typed_data.Resize(length);
-      for (intptr_t i = 0; i < length; i++) {
-        external_typed_data[i] =
-            &ExternalTypedData::Handle(Z, raw_external_typed_data[i]);
-      }
-      raw_external_typed_data.Clear();
-    }
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_external_typed_data_to_,
+             &slow_object_copy_.slow_forward_map_.external_typed_data_);
   }
   void HandlifyObjectsToReHash() {
-    auto& fast_forward_map = fast_object_copy_.fast_forward_map_;
-    auto& slow_forward_map = slow_object_copy_.slow_forward_map_;
-    const auto length = fast_forward_map.raw_transferables_from_to_.length();
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_objects_to_rehash_,
+             &slow_object_copy_.slow_forward_map_.objects_to_rehash_);
+  }
+  void HandlifyExpandosToReHash() {
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_expandos_to_rehash_,
+             &slow_object_copy_.slow_forward_map_.expandos_to_rehash_);
+  }
+  template <typename RawType, typename HandleType>
+  void Handlify(GrowableArray<RawType>* from,
+                GrowableArray<const HandleType*>* to) {
+    const auto length = from->length();
     if (length > 0) {
-      slow_forward_map.objects_to_rehash_.Resize(length);
+      to->Resize(length);
       for (intptr_t i = 0; i < length; i++) {
-        slow_forward_map.objects_to_rehash_[i] =
-            &Object::Handle(Z, fast_forward_map.raw_objects_to_rehash_[i]);
+        (*to)[i] = &HandleType::Handle(Z, (*from)[i]);
       }
-      fast_forward_map.raw_objects_to_rehash_.Clear();
+      from->Clear();
     }
   }
   void HandlifyFromToObjects() {
diff --git a/runtime/vm/object_graph_copy.h b/runtime/vm/object_graph_copy.h
index b33c3e4..e7efa5a 100644
--- a/runtime/vm/object_graph_copy.h
+++ b/runtime/vm/object_graph_copy.h
@@ -13,9 +13,13 @@
 // Makes a transitive copy of the object graph referenced by [object]. Will not
 // copy objects that can be safely shared - due to being immutable.
 //
-// The result will be an array of length 2 of the format
+// The result will be an array of length 3 of the format
 //
-//   [<copy-of-root>, <array-of-objects-to-rehash / null>]
+//   [
+//     <message>,
+//     <collection-lib-objects-to-rehash>,
+//     <core-lib-objects-to-rehash>,
+//   ]
 //
 // If the array of objects to rehash is not `null` the receiver should re-hash
 // those objects.
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index 7fe26f1..b2037d9 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -60,8 +60,9 @@
       ic_data_(ICData::Handle(zone)) {}
 
 void CallSiteResetter::ResetCaches(const Code& code) {
-  // Iterate over the Code's object pool and reset all ICDatas and
-  // SubtypeTestCaches.
+  // Iterate over the Code's object pool and reset all ICDatas.
+  // SubtypeTestCaches are reset during the same heap traversal as type
+  // testing stub deoptimization.
 #ifdef TARGET_ARCH_IA32
   // IA32 does not have an object pool, but, we can iterate over all
   // embedded objects by using the variable length data section.
@@ -83,8 +84,6 @@
     object_ = raw_object;
     if (object_.IsICData()) {
       Reset(ICData::Cast(object_));
-    } else if (object_.IsSubtypeTestCache()) {
-      SubtypeTestCache::Cast(object_).Reset();
     }
   }
 #else
@@ -186,8 +185,6 @@
     object_ = pool.ObjectAt(i);
     if (object_.IsICData()) {
       Reset(ICData::Cast(object_));
-    } else if (object_.IsSubtypeTestCache()) {
-      SubtypeTestCache::Cast(object_).Reset();
     }
   }
 }
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 93cfc12..fbb1527 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -5304,4 +5304,228 @@
   EXPECT(!m.IsSubtypeOf(t, Heap::kNew));
 }
 
+static void FinalizeAndCanonicalize(AbstractType* type) {
+  *type ^= ClassFinalizer::FinalizeType(*type);
+  ASSERT(type->IsCanonical());
+}
+
+static void CheckSubtypeRelation(const Expect& expect,
+                                 const AbstractType& sub,
+                                 const AbstractType& super,
+                                 bool is_subtype) {
+  if (sub.IsSubtypeOf(super, Heap::kNew) != is_subtype) {
+    TextBuffer buffer(128);
+    buffer.AddString("Expected ");
+    sub.PrintName(Object::kScrubbedName, &buffer);
+    buffer.Printf(" to %s a subtype of ", is_subtype ? "be" : "not be");
+    super.PrintName(Object::kScrubbedName, &buffer);
+    expect.Fail("%s", buffer.buffer());
+  }
+}
+
+#define EXPECT_SUBTYPE(sub, super)                                             \
+  CheckSubtypeRelation(Expect(__FILE__, __LINE__), sub, super, true);
+#define EXPECT_NOT_SUBTYPE(sub, super)                                         \
+  CheckSubtypeRelation(Expect(__FILE__, __LINE__), sub, super, false);
+
+ISOLATE_UNIT_TEST_CASE(ClosureType_SubtypeOfFunctionType) {
+  const auto& closure_class =
+      Class::Handle(IsolateGroup::Current()->object_store()->closure_class());
+  const auto& closure_type = Type::Handle(closure_class.DeclarationType());
+  auto& closure_type_nullable = Type::Handle(
+      closure_type.ToNullability(Nullability::kNullable, Heap::kNew));
+  FinalizeAndCanonicalize(&closure_type_nullable);
+  auto& closure_type_legacy = Type::Handle(
+      closure_type.ToNullability(Nullability::kLegacy, Heap::kNew));
+  FinalizeAndCanonicalize(&closure_type_legacy);
+  auto& closure_type_nonnullable = Type::Handle(
+      closure_type.ToNullability(Nullability::kNonNullable, Heap::kNew));
+  FinalizeAndCanonicalize(&closure_type_nonnullable);
+
+  const auto& function_type =
+      Type::Handle(IsolateGroup::Current()->object_store()->function_type());
+  auto& function_type_nullable = Type::Handle(
+      function_type.ToNullability(Nullability::kNullable, Heap::kNew));
+  FinalizeAndCanonicalize(&function_type_nullable);
+  auto& function_type_legacy = Type::Handle(
+      function_type.ToNullability(Nullability::kLegacy, Heap::kNew));
+  FinalizeAndCanonicalize(&function_type_legacy);
+  auto& function_type_nonnullable = Type::Handle(
+      function_type.ToNullability(Nullability::kNonNullable, Heap::kNew));
+  FinalizeAndCanonicalize(&function_type_nonnullable);
+
+  EXPECT_SUBTYPE(closure_type_nonnullable, function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_nonnullable, function_type_legacy);
+  EXPECT_SUBTYPE(closure_type_nonnullable, function_type_nonnullable);
+  EXPECT_SUBTYPE(closure_type_legacy, function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_legacy, function_type_legacy);
+  EXPECT_SUBTYPE(closure_type_legacy, function_type_nonnullable);
+  EXPECT_SUBTYPE(closure_type_nullable, function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_nullable, function_type_legacy);
+  // Nullable types are not a subtype of non-nullable types in strict mode.
+  if (IsolateGroup::Current()->use_strict_null_safety_checks()) {
+    EXPECT_NOT_SUBTYPE(closure_type_nullable, function_type_nonnullable);
+  } else {
+    EXPECT_SUBTYPE(closure_type_nullable, function_type_nonnullable);
+  }
+
+  const auto& async_lib = Library::Handle(Library::AsyncLibrary());
+  const auto& future_or_class =
+      Class::Handle(async_lib.LookupClass(Symbols::FutureOr()));
+  auto& tav_function_nullable = TypeArguments::Handle(TypeArguments::New(1));
+  tav_function_nullable.SetTypeAt(0, function_type_nullable);
+  tav_function_nullable = tav_function_nullable.Canonicalize(thread, nullptr);
+  auto& tav_function_legacy = TypeArguments::Handle(TypeArguments::New(1));
+  tav_function_legacy.SetTypeAt(0, function_type_legacy);
+  tav_function_legacy = tav_function_legacy.Canonicalize(thread, nullptr);
+  auto& tav_function_nonnullable = TypeArguments::Handle(TypeArguments::New(1));
+  tav_function_nonnullable.SetTypeAt(0, function_type_nonnullable);
+  tav_function_nonnullable =
+      tav_function_nonnullable.Canonicalize(thread, nullptr);
+
+  auto& future_or_function_type_nullable =
+      Type::Handle(Type::New(future_or_class, tav_function_nullable));
+  FinalizeAndCanonicalize(&future_or_function_type_nullable);
+  auto& future_or_function_type_legacy =
+      Type::Handle(Type::New(future_or_class, tav_function_legacy));
+  FinalizeAndCanonicalize(&future_or_function_type_legacy);
+  auto& future_or_function_type_nonnullable =
+      Type::Handle(Type::New(future_or_class, tav_function_nonnullable));
+  FinalizeAndCanonicalize(&future_or_function_type_nonnullable);
+
+  EXPECT_SUBTYPE(closure_type_nonnullable, future_or_function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_nonnullable, future_or_function_type_legacy);
+  EXPECT_SUBTYPE(closure_type_nonnullable, future_or_function_type_nonnullable);
+  EXPECT_SUBTYPE(closure_type_legacy, future_or_function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_legacy, future_or_function_type_legacy);
+  EXPECT_SUBTYPE(closure_type_legacy, future_or_function_type_nonnullable);
+  EXPECT_SUBTYPE(closure_type_nullable, future_or_function_type_nullable);
+  EXPECT_SUBTYPE(closure_type_nullable, future_or_function_type_legacy);
+  // Nullable types are not a subtype of non-nullable types in strict mode.
+  if (IsolateGroup::Current()->use_strict_null_safety_checks()) {
+    EXPECT_NOT_SUBTYPE(closure_type_nullable,
+                       future_or_function_type_nonnullable);
+  } else {
+    EXPECT_SUBTYPE(closure_type_nullable, future_or_function_type_nonnullable);
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(FunctionType_IsSubtypeOfNonNullableObject) {
+  const auto& type_object = Type::Handle(
+      IsolateGroup::Current()->object_store()->non_nullable_object_type());
+
+  auto& type_function_int_nullary =
+      FunctionType::Handle(FunctionType::New(0, Nullability::kNonNullable));
+  type_function_int_nullary.set_result_type(Type::Handle(Type::IntType()));
+  FinalizeAndCanonicalize(&type_function_int_nullary);
+
+  auto& type_nullable_function_int_nullary =
+      FunctionType::Handle(type_function_int_nullary.ToNullability(
+          Nullability::kNullable, Heap::kOld));
+  FinalizeAndCanonicalize(&type_nullable_function_int_nullary);
+
+  EXPECT_SUBTYPE(type_function_int_nullary, type_object);
+  if (IsolateGroup::Current()->use_strict_null_safety_checks()) {
+    EXPECT_NOT_SUBTYPE(type_nullable_function_int_nullary, type_object);
+  } else {
+    EXPECT_SUBTYPE(type_nullable_function_int_nullary, type_object);
+  }
+}
+
+#undef EXPECT_NOT_SUBTYPE
+#undef EXPECT_SUBTYPE
+
+TEST_CASE(Class_GetInstantiationOf) {
+  const char* kScript = R"(
+    class B<T> {}
+    class A1<X, Y> implements B<List<Y>> {}
+    class A2<X, Y> extends A1<Y, X> {}
+  )";
+  Dart_Handle api_lib = TestCase::LoadTestScript(kScript, nullptr);
+  EXPECT_VALID(api_lib);
+  TransitionNativeToVM transition(thread);
+  Zone* const zone = thread->zone();
+
+  const auto& root_lib =
+      Library::CheckedHandle(zone, Api::UnwrapHandle(api_lib));
+  EXPECT(!root_lib.IsNull());
+  const auto& class_b = Class::Handle(zone, GetClass(root_lib, "B"));
+  const auto& class_a1 = Class::Handle(zone, GetClass(root_lib, "A1"));
+  const auto& class_a2 = Class::Handle(zone, GetClass(root_lib, "A2"));
+
+  const auto& core_lib = Library::Handle(zone, Library::CoreLibrary());
+  const auto& class_list = Class::Handle(zone, GetClass(core_lib, "List"));
+
+  auto expect_type_equal = [](const AbstractType& expected,
+                              const AbstractType& got) {
+    if (got.Equals(expected)) return;
+    TextBuffer buffer(128);
+    buffer.AddString("Expected type ");
+    expected.PrintName(Object::kScrubbedName, &buffer);
+    buffer.AddString(", got ");
+    got.PrintName(Object::kScrubbedName, &buffer);
+    dart::Expect(__FILE__, __LINE__).Fail("%s", buffer.buffer());
+  };
+
+  const auto& decl_type_b = Type::Handle(zone, class_b.DeclarationType());
+  const auto& decl_type_list = Type::Handle(zone, class_list.DeclarationType());
+  const auto& null_tav = Object::null_type_arguments();
+
+  // Test that A1.GetInstantiationOf(B) returns B<List<A1::Y>>.
+  {
+    const auto& decl_type_a1 = Type::Handle(zone, class_a1.DeclarationType());
+    const auto& decl_type_args_a1 =
+        TypeArguments::Handle(zone, decl_type_a1.arguments());
+    const auto& type_arg_a1_y =
+        TypeParameter::CheckedHandle(zone, decl_type_args_a1.TypeAt(1));
+    auto& tav_a1_y = TypeArguments::Handle(TypeArguments::New(1));
+    tav_a1_y.SetTypeAt(0, type_arg_a1_y);
+    tav_a1_y = tav_a1_y.Canonicalize(thread, nullptr);
+    auto& type_list_a1_y = Type::CheckedHandle(
+        zone, decl_type_list.InstantiateFrom(tav_a1_y, null_tav, kAllFree,
+                                             Heap::kNew));
+    type_list_a1_y ^= type_list_a1_y.Canonicalize(thread, nullptr);
+    auto& tav_list_a1_y = TypeArguments::Handle(TypeArguments::New(1));
+    tav_list_a1_y.SetTypeAt(0, type_list_a1_y);
+    tav_list_a1_y = tav_list_a1_y.Canonicalize(thread, nullptr);
+    auto& type_b_list_a1_y = Type::CheckedHandle(
+        zone, decl_type_b.InstantiateFrom(tav_list_a1_y, null_tav, kAllFree,
+                                          Heap::kNew));
+    type_b_list_a1_y ^= type_b_list_a1_y.Canonicalize(thread, nullptr);
+
+    const auto& inst_b_a1 =
+        Type::Handle(zone, class_a1.GetInstantiationOf(zone, class_b));
+    EXPECT(!inst_b_a1.IsNull());
+    expect_type_equal(type_b_list_a1_y, inst_b_a1);
+  }
+
+  // Test that A2.GetInstantiationOf(B) returns B<List<A2::X>>.
+  {
+    const auto& decl_type_a2 = Type::Handle(zone, class_a2.DeclarationType());
+    const auto& decl_type_args_a2 =
+        TypeArguments::Handle(zone, decl_type_a2.arguments());
+    const auto& type_arg_a2_x =
+        TypeParameter::CheckedHandle(zone, decl_type_args_a2.TypeAt(1));
+    auto& tav_a2_x = TypeArguments::Handle(TypeArguments::New(1));
+    tav_a2_x.SetTypeAt(0, type_arg_a2_x);
+    tav_a2_x = tav_a2_x.Canonicalize(thread, nullptr);
+    auto& type_list_a2_x = Type::CheckedHandle(
+        zone, decl_type_list.InstantiateFrom(tav_a2_x, null_tav, kAllFree,
+                                             Heap::kNew));
+    type_list_a2_x ^= type_list_a2_x.Canonicalize(thread, nullptr);
+    auto& tav_list_a2_x = TypeArguments::Handle(TypeArguments::New(1));
+    tav_list_a2_x.SetTypeAt(0, type_list_a2_x);
+    tav_list_a2_x = tav_list_a2_x.Canonicalize(thread, nullptr);
+    auto& type_b_list_a2_x = Type::CheckedHandle(
+        zone, decl_type_b.InstantiateFrom(tav_list_a2_x, null_tav, kAllFree,
+                                          Heap::kNew));
+    type_b_list_a2_x ^= type_b_list_a2_x.Canonicalize(thread, nullptr);
+
+    const auto& inst_b_a2 =
+        Type::Handle(zone, class_a2.GetInstantiationOf(zone, class_b));
+    EXPECT(!inst_b_a2.IsNull());
+    expect_type_equal(type_b_list_a2_x, inst_b_a2);
+  }
+}
+
 }  // namespace dart
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index dca5003..7601cdc 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -62,7 +62,6 @@
   friend class MutexLocker;
   friend class SafepointMutexLocker;
   friend class OSThreadIterator;
-  friend class TimelineEventBlockIterator;
   friend class TimelineEventRecorder;
   friend class PageSpace;
   friend void Dart_TestMutex();
diff --git a/runtime/vm/port.cc b/runtime/vm/port.cc
index a671373..51029ae 100644
--- a/runtime/vm/port.cc
+++ b/runtime/vm/port.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "include/dart_api.h"
 #include "platform/utils.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_entry.h"
@@ -40,6 +41,8 @@
 Dart_Port PortMap::AllocatePort() {
   Dart_Port result;
 
+  ASSERT(mutex_->IsOwnedByCurrentThread());
+
   // Keep getting new values while we have an illegal port number or the port
   // number is already in use.
   do {
@@ -68,6 +71,9 @@
 
 void PortMap::SetPortState(Dart_Port port, PortState state) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return;
+  }
 
   auto it = ports_->TryLookup(port);
   ASSERT(it != ports_->end());
@@ -93,6 +99,10 @@
 Dart_Port PortMap::CreatePort(MessageHandler* handler) {
   ASSERT(handler != NULL);
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return ILLEGAL_PORT;
+  }
+
 #if defined(DEBUG)
   handler->CheckAccess();
 #endif
@@ -126,6 +136,9 @@
   MessageHandler* handler = NULL;
   {
     MutexLocker ml(mutex_);
+    if (ports_ == nullptr) {
+      return false;
+    }
     auto it = ports_->TryLookup(port);
     if (it == ports_->end()) {
       return false;
@@ -165,6 +178,9 @@
 void PortMap::ClosePorts(MessageHandler* handler) {
   {
     MutexLocker ml(mutex_);
+    if (ports_ == nullptr) {
+      return;
+    }
     // The MessageHandler::ports_ is only accessed by [PortMap], it is guarded
     // by the [PortMap::mutex_] we already hold.
     for (auto isolate_it = handler->ports_.begin();
@@ -189,6 +205,9 @@
 bool PortMap::PostMessage(std::unique_ptr<Message> message,
                           bool before_events) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return false;
+  }
   auto it = ports_->TryLookup(message->dest_port());
   if (it == ports_->end()) {
     // Ownership of external data remains with the poster.
@@ -203,6 +222,9 @@
 
 bool PortMap::IsLocalPort(Dart_Port id) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return false;
+  }
   auto it = ports_->TryLookup(id);
   if (it == ports_->end()) {
     // Port does not exist.
@@ -216,6 +238,9 @@
 
 bool PortMap::IsLivePort(Dart_Port id) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return false;
+  }
   auto it = ports_->TryLookup(id);
   if (it == ports_->end()) {
     // Port does not exist.
@@ -228,6 +253,9 @@
 
 Isolate* PortMap::GetIsolate(Dart_Port id) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return nullptr;
+  }
   auto it = ports_->TryLookup(id);
   if (it == ports_->end()) {
     // Port does not exist.
@@ -241,6 +269,9 @@
 bool PortMap::IsReceiverInThisIsolateGroup(Dart_Port receiver,
                                            IsolateGroup* group) {
   MutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return false;
+  }
   auto it = ports_->TryLookup(receiver);
   if (it == ports_->end()) return false;
   auto isolate = (*it).handler->isolate();
@@ -249,7 +280,6 @@
 }
 
 void PortMap::Init() {
-  // TODO(bkonyi): don't keep ports_ after Dart_Cleanup.
   if (mutex_ == NULL) {
     mutex_ = new Mutex();
   }
@@ -276,11 +306,12 @@
   }
   ports_->Rebalance();
 
+  // Grab the mutex and delete the port set.
+  MutexLocker ml(mutex_);
   delete prng_;
   prng_ = NULL;
-  // TODO(bkonyi): find out why deleting map_ sometimes causes crashes.
-  // delete ports_;
-  // ports_ = nullptr;
+  delete ports_;
+  ports_ = nullptr;
 }
 
 void PortMap::PrintPortsForMessageHandler(MessageHandler* handler,
@@ -292,6 +323,9 @@
   {
     JSONArray ports(&jsobj, "ports");
     SafepointMutexLocker ml(mutex_);
+    if (ports_ == nullptr) {
+      return;
+    }
     for (auto& entry : *ports_) {
       if (entry.handler == handler) {
         if (entry.state == kLivePort) {
@@ -309,6 +343,9 @@
 
 void PortMap::DebugDumpForMessageHandler(MessageHandler* handler) {
   SafepointMutexLocker ml(mutex_);
+  if (ports_ == nullptr) {
+    return;
+  }
   Object& msg_handler = Object::Handle();
   for (auto& entry : *ports_) {
     if (entry.handler == handler) {
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index fae638f..2d8b2a5 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -66,6 +66,13 @@
 AllocationSampleBuffer* Profiler::allocation_sample_buffer_ = nullptr;
 ProfilerCounters Profiler::counters_ = {};
 
+bool SampleBlockProcessor::initialized_ = false;
+bool SampleBlockProcessor::shutdown_ = false;
+bool SampleBlockProcessor::thread_running_ = false;
+ThreadJoinId SampleBlockProcessor::processor_thread_id_ =
+    OSThread::kInvalidThreadJoinId;
+Monitor* SampleBlockProcessor::monitor_ = nullptr;
+
 void Profiler::Init() {
   // Place some sane restrictions on user controlled flags.
   SetSampleDepth(FLAG_max_profile_depth);
@@ -83,6 +90,8 @@
   }
   ThreadInterrupter::Init();
   ThreadInterrupter::Startup();
+  SampleBlockProcessor::Init();
+  SampleBlockProcessor::Startup();
   initialized_ = true;
 }
 
@@ -113,6 +122,7 @@
   }
   ASSERT(initialized_);
   ThreadInterrupter::Cleanup();
+  SampleBlockProcessor::Cleanup();
   SampleBlockCleanupVisitor visitor;
   Isolate::VisitIsolates(&visitor);
   initialized_ = false;
@@ -223,21 +233,9 @@
 
 void SampleBlockBuffer::ProcessCompletedBlocks() {
   Thread* thread = Thread::Current();
+  DisableThreadInterruptsScope dtis(thread);
   int64_t start = Dart_TimelineGetMicros();
-  for (intptr_t i = 0; i < capacity_; ++i) {
-    SampleBlock* block = &blocks_[i];
-    if (block->is_full() && !block->evictable()) {
-      if (Service::profiler_stream.enabled()) {
-        Profile profile(block->owner());
-        profile.Build(thread, nullptr, block);
-        ServiceEvent event(block->owner(), ServiceEvent::kCpuSamples);
-        event.set_cpu_profile(&profile);
-        Service::HandleEvent(&event);
-      }
-      block->evictable_ = true;
-      FreeBlock(block);
-    }
-  }
+  thread->isolate()->ProcessFreeSampleBlocks(thread);
   int64_t end = Dart_TimelineGetMicros();
   Dart_TimelineEvent("SampleBlockBuffer::ProcessCompletedBlocks", start, end,
                      Dart_Timeline_Event_Duration, 0, nullptr, nullptr);
@@ -306,12 +304,6 @@
   Sample* sample = nullptr;
   if (block != nullptr) {
     sample = block->ReserveSample();
-    if (sample != nullptr && block->is_full()) {
-      // TODO(bkonyi): remove once streaming is re-enabled.
-      // https://github.com/dart-lang/sdk/issues/46825
-      block->evictable_ = true;
-      FreeBlock(block);
-    }
   }
   if (sample != nullptr) {
     return sample;
@@ -326,6 +318,7 @@
       return nullptr;
     }
     isolate->set_current_allocation_sample_block(next);
+    isolate->FreeSampleBlock(block);
   } else {
     MutexLocker locker(isolate->current_sample_block_lock());
     next = ReserveSampleBlock();
@@ -334,13 +327,14 @@
       return nullptr;
     }
     isolate->set_current_sample_block(next);
+    isolate->FreeSampleBlock(block);
   }
   next->set_is_allocation_block(allocation_sample);
 
-  can_process_block_.store(true);
-  // TODO(bkonyi): re-enable after block streaming is fixed.
-  // See https://github.com/dart-lang/sdk/issues/46825
-  // isolate->mutator_thread()->ScheduleInterrupts(Thread::kVMInterrupt);
+  bool scheduled = can_process_block_.exchange(true);
+  if (!scheduled) {
+    isolate->mutator_thread()->ScheduleInterrupts(Thread::kVMInterrupt);
+  }
   return ReserveSampleImpl(isolate, allocation_sample);
 }
 
@@ -1825,6 +1819,94 @@
   ASSERT(code_lookup_table_ != NULL);
 }
 
+void SampleBlockProcessor::Init() {
+  ASSERT(!initialized_);
+  if (monitor_ == nullptr) {
+    monitor_ = new Monitor();
+  }
+  ASSERT(monitor_ != nullptr);
+  initialized_ = true;
+  shutdown_ = false;
+}
+
+void SampleBlockProcessor::Startup() {
+  ASSERT(initialized_);
+  ASSERT(processor_thread_id_ == OSThread::kInvalidThreadJoinId);
+  MonitorLocker startup_ml(monitor_);
+  OSThread::Start("Dart Profiler SampleBlockProcessor", ThreadMain, 0);
+  while (!thread_running_) {
+    startup_ml.Wait();
+  }
+  ASSERT(processor_thread_id_ != OSThread::kInvalidThreadJoinId);
+}
+
+void SampleBlockProcessor::Cleanup() {
+  {
+    MonitorLocker shutdown_ml(monitor_);
+    if (shutdown_) {
+      // Already shutdown.
+      return;
+    }
+    shutdown_ = true;
+    // Notify.
+    shutdown_ml.Notify();
+    ASSERT(initialized_);
+  }
+
+  // Join the thread.
+  ASSERT(processor_thread_id_ != OSThread::kInvalidThreadJoinId);
+  OSThread::Join(processor_thread_id_);
+  processor_thread_id_ = OSThread::kInvalidThreadJoinId;
+  initialized_ = false;
+  ASSERT(!thread_running_);
+}
+
+class SampleBlockProcessorVisitor : public IsolateVisitor {
+ public:
+  SampleBlockProcessorVisitor() = default;
+  virtual ~SampleBlockProcessorVisitor() = default;
+
+  void VisitIsolate(Isolate* isolate) {
+    if (!isolate->should_process_blocks()) {
+      return;
+    }
+    Thread::EnterIsolateAsHelper(isolate, Thread::kSampleBlockTask);
+    Thread* thread = Thread::Current();
+    {
+      DisableThreadInterruptsScope dtis(thread);
+      isolate->ProcessFreeSampleBlocks(thread);
+    }
+    Thread::ExitIsolateAsHelper();
+  }
+};
+
+void SampleBlockProcessor::ThreadMain(uword parameters) {
+  ASSERT(initialized_);
+  {
+    // Signal to main thread we are ready.
+    MonitorLocker startup_ml(monitor_);
+    OSThread* os_thread = OSThread::Current();
+    ASSERT(os_thread != NULL);
+    processor_thread_id_ = OSThread::GetCurrentThreadJoinId(os_thread);
+    thread_running_ = true;
+    startup_ml.Notify();
+  }
+
+  SampleBlockProcessorVisitor visitor;
+  MonitorLocker wait_ml(monitor_);
+  // Wakeup every 100ms.
+  const int64_t wakeup_interval = 1000 * 100;
+  while (true) {
+    wait_ml.WaitMicros(wakeup_interval);
+    if (shutdown_) {
+      break;
+    }
+    Isolate::VisitIsolates(&visitor);
+  }
+  // Signal to main thread we are exiting.
+  thread_running_ = false;
+}
+
 #endif  // !PRODUCT
 
 }  // namespace dart
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index dd30bcc..5455e7b 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.h
@@ -73,6 +73,9 @@
   static SampleBlockBuffer* sample_block_buffer() {
     return sample_block_buffer_;
   }
+  static void set_sample_block_buffer(SampleBlockBuffer* buffer) {
+    sample_block_buffer_ = buffer;
+  }
   static AllocationSampleBuffer* allocation_sample_buffer() {
     return allocation_sample_buffer_;
   }
@@ -408,9 +411,9 @@
     kTruncatedTraceBit = 5,
     kClassAllocationSampleBit = 6,
     kContinuationSampleBit = 7,
-    kThreadTaskBit = 8,  // 6 bits.
-    kMetadataBit = 14,   // 16 bits.
-    kNextFreeBit = 30,
+    kThreadTaskBit = 8,  // 7 bits.
+    kMetadataBit = 15,   // 16 bits.
+    kNextFreeBit = 31,
   };
   class HeadSampleBit : public BitField<uint32_t, bool, kHeadSampleBit, 1> {};
   class LeafFrameIsDart
@@ -426,7 +429,7 @@
   class ContinuationSampleBit
       : public BitField<uint32_t, bool, kContinuationSampleBit, 1> {};
   class ThreadTaskBit
-      : public BitField<uint32_t, Thread::TaskKind, kThreadTaskBit, 6> {};
+      : public BitField<uint32_t, Thread::TaskKind, kThreadTaskBit, 7> {};
   class MetadataBits : public BitField<uint32_t, intptr_t, kMetadataBit, 16> {};
 
   int64_t timestamp_;
@@ -710,7 +713,7 @@
 class SampleBlock : public SampleBuffer {
  public:
   // The default number of samples per block. Overridden by some tests.
-  static const intptr_t kSamplesPerBlock = 1000;
+  static const intptr_t kSamplesPerBlock = 100;
 
   SampleBlock() = default;
   virtual ~SampleBlock() = default;
@@ -765,13 +768,14 @@
 
  private:
   friend class SampleBlockBuffer;
+  friend class Isolate;
 
   DISALLOW_COPY_AND_ASSIGN(SampleBlock);
 };
 
 class SampleBlockBuffer : public ProcessedSampleBufferBuilder {
  public:
-  static const intptr_t kDefaultBlockCount = 60;
+  static const intptr_t kDefaultBlockCount = 600;
 
   // Creates a SampleBlockBuffer with a predetermined number of blocks.
   //
@@ -864,6 +868,8 @@
   // Sample buffer management.
   VirtualMemory* memory_;
   Sample* sample_buffer_;
+
+  friend class Isolate;
   DISALLOW_COPY_AND_ASSIGN(SampleBlockBuffer);
 };
 
@@ -1037,6 +1043,24 @@
   DISALLOW_COPY_AND_ASSIGN(ProcessedSampleBuffer);
 };
 
+class SampleBlockProcessor : public AllStatic {
+ public:
+  static void Init();
+
+  static void Startup();
+  static void Cleanup();
+
+ private:
+  static const intptr_t kMaxThreads = 4096;
+  static bool initialized_;
+  static bool shutdown_;
+  static bool thread_running_;
+  static ThreadJoinId processor_thread_id_;
+  static Monitor* monitor_;
+
+  static void ThreadMain(uword parameters);
+};
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_PROFILER_H_
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index e9f333e..6836e9d 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1450,9 +1450,8 @@
   ProfileInfoKind info_kind_;
 };  // ProfileBuilder.
 
-Profile::Profile(Isolate* isolate)
-    : isolate_(isolate),
-      zone_(Thread::Current()->zone()),
+Profile::Profile()
+    : zone_(Thread::Current()->zone()),
       samples_(NULL),
       live_code_(NULL),
       dead_code_(NULL),
@@ -1461,9 +1460,7 @@
       dead_code_index_offset_(-1),
       tag_code_index_offset_(-1),
       min_time_(kMaxInt64),
-      max_time_(0) {
-  ASSERT(isolate_ != NULL);
-}
+      max_time_(0) {}
 
 void Profile::Build(Thread* thread,
                     SampleFilter* filter,
@@ -1765,14 +1762,12 @@
                                     SampleFilter* filter,
                                     ProcessedSampleBufferBuilder* buffer,
                                     bool include_code_samples) {
-  Isolate* isolate = thread->isolate();
-
   // We should bail out in service.cc if the profiler is disabled.
   ASSERT(buffer != nullptr);
 
   StackZone zone(thread);
   HANDLESCOPE(thread);
-  Profile profile(isolate);
+  Profile profile;
   profile.Build(thread, filter, buffer);
   profile.PrintProfileJSON(stream, include_code_samples);
 }
diff --git a/runtime/vm/profiler_service.h b/runtime/vm/profiler_service.h
index 1c02db3..a9df89b 100644
--- a/runtime/vm/profiler_service.h
+++ b/runtime/vm/profiler_service.h
@@ -364,7 +364,7 @@
 // a zone must be created that lives longer than this object.
 class Profile : public ValueObject {
  public:
-  explicit Profile(Isolate* isolate);
+  Profile();
 
   // Build a filtered model using |filter|.
   void Build(Thread* thread,
@@ -403,7 +403,6 @@
                                intptr_t frame_index);
   void PrintSamplesJSON(JSONObject* obj, bool code_samples);
 
-  Isolate* isolate_;
   Zone* zone_;
   ProcessedSampleBuffer* samples_;
   ProfileCodeTable* live_code_;
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 1171458..987787c 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -102,9 +102,30 @@
   buffer->VisitSamples(visitor);
 }
 
+class SampleBlockBufferOverrideScope {
+ public:
+  explicit SampleBlockBufferOverrideScope(SampleBlockBuffer* buffer)
+      : override_(buffer) {
+    orig_ = Profiler::sample_block_buffer();
+    Profiler::set_sample_block_buffer(override_);
+  }
+
+  ~SampleBlockBufferOverrideScope() {
+    Profiler::set_sample_block_buffer(orig_);
+    delete override_;
+  }
+
+ private:
+  SampleBlockBuffer* orig_;
+  SampleBlockBuffer* override_;
+};
+
 TEST_CASE(Profiler_SampleBufferWrapTest) {
   Isolate* isolate = Isolate::Current();
-  SampleBlockBuffer* sample_buffer = new SampleBlockBuffer(3, 1);
+
+  SampleBlockBufferOverrideScope sbbos(new SampleBlockBuffer(3, 1));
+  SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
+
   Dart_Port i = 123;
   ProfileSampleBufferTestHelper visitor(i);
 
@@ -142,12 +163,14 @@
     MutexLocker ml(isolate->current_sample_block_lock());
     isolate->set_current_sample_block(nullptr);
   }
-  delete sample_buffer;
 }
 
 TEST_CASE(Profiler_SampleBufferIterateTest) {
   Isolate* isolate = Isolate::Current();
-  SampleBlockBuffer* sample_buffer = new SampleBlockBuffer(3, 1);
+
+  SampleBlockBufferOverrideScope sbbos(new SampleBlockBuffer(3, 1));
+  SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
+
   Dart_Port i = 123;
   ProfileSampleBufferTestHelper visitor(i);
 
@@ -182,7 +205,6 @@
     MutexLocker ml(isolate->current_sample_block_lock());
     isolate->set_current_sample_block(nullptr);
   }
-  delete sample_buffer;
 }
 
 TEST_CASE(Profiler_AllocationSampleTest) {
@@ -480,7 +502,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     // Filter for the class in the time range.
     AllocationFilter filter(isolate->main_port(), class_a.id(),
                             before_allocations_micros,
@@ -510,7 +532,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id(),
                             Dart_TimelineGetMicros(), 16000);
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -555,10 +577,9 @@
   // with each node.
   {
     Thread* thread = Thread::Current();
-    Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
 
     // Filter for the class in the time range.
     NativeAllocationSampleFilter filter(before_allocations_micros,
@@ -595,10 +616,9 @@
   // freed above is marked as free and is no longer reported.
   {
     Thread* thread = Thread::Current();
-    Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
 
     // Filter for the class in the time range.
     NativeAllocationSampleFilter filter(before_allocations_micros,
@@ -611,10 +631,9 @@
   // Query with a time filter where no allocations occurred.
   {
     Thread* thread = Thread::Current();
-    Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     NativeAllocationSampleFilter filter(Dart_TimelineGetMicros(), 16000);
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples because none occured within
@@ -660,7 +679,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -677,7 +696,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation sample.
@@ -707,7 +726,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -745,7 +764,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -765,7 +784,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have three allocation samples.
@@ -820,7 +839,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -840,7 +859,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have three allocation samples.
@@ -890,7 +909,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -903,7 +922,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation sample.
@@ -925,7 +944,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -952,7 +971,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -965,7 +984,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation sample.
@@ -987,7 +1006,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1009,7 +1028,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples, since empty
@@ -1039,7 +1058,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1052,7 +1071,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation sample.
@@ -1072,7 +1091,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1112,7 +1131,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), closure_class.id());
     filter.set_enable_vm_ticks(true);
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1136,7 +1155,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), closure_class.id());
     filter.set_enable_vm_ticks(true);
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1167,7 +1186,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1180,7 +1199,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation sample.
@@ -1202,7 +1221,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1215,7 +1234,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should now have two allocation samples.
@@ -1247,7 +1266,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1260,7 +1279,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1280,7 +1299,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1293,7 +1312,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should now have two allocation samples.
@@ -1325,7 +1344,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1338,7 +1357,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1364,7 +1383,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should still only have one allocation sample.
@@ -1377,7 +1396,7 @@
   {
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should now have two allocation samples.
@@ -1433,7 +1452,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1451,7 +1470,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have 50,000 allocation samples.
@@ -1580,7 +1599,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have no allocation samples.
@@ -1597,7 +1616,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     EXPECT_EQ(1, profile.sample_count());
@@ -1673,7 +1692,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have 1 allocation sample.
@@ -1768,7 +1787,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
@@ -1850,7 +1869,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
@@ -1928,7 +1947,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
@@ -2038,7 +2057,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
@@ -2133,7 +2152,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
@@ -2251,7 +2270,7 @@
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
     HANDLESCOPE(thread);
-    Profile profile(isolate);
+    Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
     // We should have one allocation samples.
diff --git a/runtime/vm/program_visitor.cc b/runtime/vm/program_visitor.cc
index 6eb0c25..0a07b1e 100644
--- a/runtime/vm/program_visitor.cc
+++ b/runtime/vm/program_visitor.cc
@@ -346,7 +346,7 @@
   DirectChainedHashMap<S> canonical_objects_;
 };
 
-void ProgramVisitor::BindStaticCalls(Zone* zone, IsolateGroup* isolate_group) {
+void ProgramVisitor::BindStaticCalls(Thread* thread) {
   class BindStaticCallsVisitor : public CodeVisitor {
    public:
     explicit BindStaticCallsVisitor(Zone* zone)
@@ -422,17 +422,19 @@
     Code& target_code_;
   };
 
-  BindStaticCallsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  BindStaticCallsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 DECLARE_FLAG(charp, trace_precompiler_to);
 DECLARE_FLAG(charp, write_v8_snapshot_profile_to);
 
-void ProgramVisitor::ShareMegamorphicBuckets(Zone* zone,
-                                             IsolateGroup* isolate_group) {
+void ProgramVisitor::ShareMegamorphicBuckets(Thread* thread) {
+  StackZone stack_zone(thread);
+  Zone* zone = thread->zone();
   const GrowableObjectArray& table = GrowableObjectArray::Handle(
-      zone, isolate_group->object_store()->megamorphic_cache_table());
+      zone, thread->isolate_group()->object_store()->megamorphic_cache_table());
   if (table.IsNull()) return;
   MegamorphicCache& cache = MegamorphicCache::Handle(zone);
 
@@ -467,7 +469,7 @@
     ASSERT(it.current_spill_slot_bit_count_ >= 0);
   }
 
-  static const intptr_t kHashBits = 30;
+  static constexpr intptr_t kHashBits = Object::kHashBits;
 
   uword Hash() {
     if (hash_ != 0) return hash_;
@@ -562,9 +564,7 @@
 
 typedef DirectChainedHashMap<StackMapEntryKeyIntValueTrait> StackMapEntryIntMap;
 
-void ProgramVisitor::NormalizeAndDedupCompressedStackMaps(
-    Zone* zone,
-    IsolateGroup* isolate_group) {
+void ProgramVisitor::NormalizeAndDedupCompressedStackMaps(Thread* thread) {
   // Walks all the CSMs in Code objects and collects their entry information
   // for consolidation.
   class CollectStackMapEntriesVisitor : public CodeVisitor {
@@ -724,9 +724,10 @@
     CompressedStackMaps& maps_;
   };
 
-  NormalizeAndDedupCompressedStackMapsVisitor dedup_visitor(zone,
-                                                            isolate_group);
-  WalkProgram(zone, isolate_group, &dedup_visitor);
+  StackZone stack_zone(thread);
+  NormalizeAndDedupCompressedStackMapsVisitor visitor(thread->zone(),
+                                                      thread->isolate_group());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 class PcDescriptorsKeyValueTrait {
@@ -747,15 +748,13 @@
   }
 };
 
-void ProgramVisitor::DedupPcDescriptors(Zone* zone,
-                                        IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupPcDescriptors(Thread* thread) {
   class DedupPcDescriptorsVisitor
       : public CodeVisitor,
         public Dedupper<PcDescriptors, PcDescriptorsKeyValueTrait> {
    public:
     explicit DedupPcDescriptorsVisitor(Zone* zone)
-        : Dedupper(zone),
-          pc_descriptor_(PcDescriptors::Handle(zone)) {
+        : Dedupper(zone), pc_descriptor_(PcDescriptors::Handle(zone)) {
       if (Snapshot::IncludesCode(Dart::vm_snapshot_kind())) {
         // Prefer existing objects in the VM isolate.
         AddVMBaseObjects();
@@ -772,8 +771,9 @@
     PcDescriptors& pc_descriptor_;
   };
 
-  DedupPcDescriptorsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  DedupPcDescriptorsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 class TypedDataKeyValueTrait {
@@ -802,8 +802,7 @@
   bool IsCorrectType(const Object& obj) const { return obj.IsTypedData(); }
 };
 
-void ProgramVisitor::DedupDeoptEntries(Zone* zone,
-                                       IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupDeoptEntries(Thread* thread) {
   class DedupDeoptEntriesVisitor : public CodeVisitor,
                                    public TypedDataDedupper {
    public:
@@ -837,13 +836,14 @@
   };
 
   if (FLAG_precompiled_mode) return;
-  DedupDeoptEntriesVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+
+  StackZone stack_zone(thread);
+  DedupDeoptEntriesVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 #if defined(DART_PRECOMPILER)
-void ProgramVisitor::DedupCatchEntryMovesMaps(Zone* zone,
-                                              IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupCatchEntryMovesMaps(Thread* thread) {
   class DedupCatchEntryMovesMapsVisitor : public CodeVisitor,
                                           public TypedDataDedupper {
    public:
@@ -862,8 +862,10 @@
   };
 
   if (!FLAG_precompiled_mode) return;
-  DedupCatchEntryMovesMapsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+
+  StackZone stack_zone(thread);
+  DedupCatchEntryMovesMapsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 class UnlinkedCallKeyValueTrait {
@@ -884,8 +886,7 @@
   }
 };
 
-void ProgramVisitor::DedupUnlinkedCalls(Zone* zone,
-                                        IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupUnlinkedCalls(Thread* thread) {
   class DedupUnlinkedCallsVisitor
       : public CodeVisitor,
         public Dedupper<UnlinkedCall, UnlinkedCallKeyValueTrait> {
@@ -925,7 +926,8 @@
 
   if (!FLAG_precompiled_mode) return;
 
-  DedupUnlinkedCallsVisitor deduper(zone, isolate_group);
+  StackZone stack_zone(thread);
+  DedupUnlinkedCallsVisitor visitor(thread->zone(), thread->isolate_group());
 
   // Note: in bare instructions mode we can still have object pools attached
   // to code objects and these pools need to be deduplicated.
@@ -936,11 +938,11 @@
   if (!FLAG_use_bare_instructions ||
       FLAG_write_v8_snapshot_profile_to != nullptr ||
       FLAG_trace_precompiler_to != nullptr) {
-    WalkProgram(zone, isolate_group, &deduper);
+    WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
   }
 }
 
-void ProgramVisitor::PruneSubclasses(Zone* zone, IsolateGroup* isolate_group) {
+void ProgramVisitor::PruneSubclasses(Thread* thread) {
   class PruneSubclassesVisitor : public ClassVisitor {
    public:
     explicit PruneSubclassesVisitor(Zone* zone)
@@ -997,9 +999,10 @@
     GrowableObjectArray& null_list_;
   };
 
-  PruneSubclassesVisitor visitor(zone);
-  SafepointWriteRwLocker ml(Thread::Current(), isolate_group->program_lock());
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  PruneSubclassesVisitor visitor(thread->zone());
+  SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 #endif  // defined(DART_PRECOMPILER)
 
@@ -1025,8 +1028,7 @@
   }
 };
 
-void ProgramVisitor::DedupCodeSourceMaps(Zone* zone,
-                                         IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupCodeSourceMaps(Thread* thread) {
   class DedupCodeSourceMapsVisitor
       : public CodeVisitor,
         public Dedupper<CodeSourceMap, CodeSourceMapKeyValueTrait> {
@@ -1049,8 +1051,9 @@
     CodeSourceMap& code_source_map_;
   };
 
-  DedupCodeSourceMapsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  DedupCodeSourceMapsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 class ArrayKeyValueTrait {
@@ -1079,7 +1082,7 @@
   }
 };
 
-void ProgramVisitor::DedupLists(Zone* zone, IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupLists(Thread* thread) {
   class DedupListsVisitor : public CodeVisitor,
                             public Dedupper<Array, ArrayKeyValueTrait> {
    public:
@@ -1123,8 +1126,9 @@
     Field& field_;
   };
 
-  DedupListsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  DedupListsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 // Traits for comparing two [Instructions] objects for equality, which is
@@ -1209,8 +1213,7 @@
 };
 #endif
 
-void ProgramVisitor::DedupInstructions(Zone* zone,
-                                       IsolateGroup* isolate_group) {
+void ProgramVisitor::DedupInstructions(Thread* thread) {
   class DedupInstructionsVisitor
       : public CodeVisitor,
         public Dedupper<Instructions, InstructionsKeyValueTrait>,
@@ -1298,33 +1301,31 @@
   };
 
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    DedupInstructionsWithSameMetadataVisitor visitor(zone);
-    return WalkProgram(zone, isolate_group, &visitor);
+    StackZone stack_zone(thread);
+    DedupInstructionsWithSameMetadataVisitor visitor(thread->zone());
+    WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
+    return;
   }
 #endif  // defined(DART_PRECOMPILER)
 
-  DedupInstructionsVisitor visitor(zone);
-  WalkProgram(zone, isolate_group, &visitor);
+  StackZone stack_zone(thread);
+  DedupInstructionsVisitor visitor(thread->zone());
+  WalkProgram(thread->zone(), thread->isolate_group(), &visitor);
 }
 
 void ProgramVisitor::Dedup(Thread* thread) {
-  auto const isolate_group = thread->isolate_group();
-  StackZone stack_zone(thread);
-  HANDLESCOPE(thread);
-  auto const zone = thread->zone();
-
-  BindStaticCalls(zone, isolate_group);
-  ShareMegamorphicBuckets(zone, isolate_group);
-  NormalizeAndDedupCompressedStackMaps(zone, isolate_group);
-  DedupPcDescriptors(zone, isolate_group);
-  DedupDeoptEntries(zone, isolate_group);
+  BindStaticCalls(thread);
+  ShareMegamorphicBuckets(thread);
+  NormalizeAndDedupCompressedStackMaps(thread);
+  DedupPcDescriptors(thread);
+  DedupDeoptEntries(thread);
 #if defined(DART_PRECOMPILER)
-  DedupCatchEntryMovesMaps(zone, isolate_group);
-  DedupUnlinkedCalls(zone, isolate_group);
-  PruneSubclasses(zone, isolate_group);
+  DedupCatchEntryMovesMaps(thread);
+  DedupUnlinkedCalls(thread);
+  PruneSubclasses(thread);
 #endif
-  DedupCodeSourceMaps(zone, isolate_group);
-  DedupLists(zone, isolate_group);
+  DedupCodeSourceMaps(thread);
+  DedupLists(thread);
 
   // Reduces binary size but obfuscates profiler results.
   if (FLAG_dedup_instructions) {
@@ -1347,7 +1348,7 @@
     if (FLAG_precompiled_mode && !FLAG_use_bare_instructions) return;
 #endif
 
-    DedupInstructions(zone, isolate_group);
+    DedupInstructions(thread);
   }
 }
 
@@ -1420,8 +1421,7 @@
 
 void ProgramVisitor::AssignUnits(Thread* thread) {
   StackZone stack_zone(thread);
-  HANDLESCOPE(thread);
-  Zone* zone = thread->zone();
+  Zone* zone = stack_zone.GetZone();
 
   // VM stubs.
   Instructions& inst = Instructions::Handle(zone);
diff --git a/runtime/vm/program_visitor.h b/runtime/vm/program_visitor.h
index fa57326..b743e0a 100644
--- a/runtime/vm/program_visitor.h
+++ b/runtime/vm/program_visitor.h
@@ -106,20 +106,19 @@
 #endif
 
  private:
-  static void BindStaticCalls(Zone* zone, IsolateGroup* isolate_group);
-  static void ShareMegamorphicBuckets(Zone* zone, IsolateGroup* isolate_group);
-  static void NormalizeAndDedupCompressedStackMaps(Zone* zone,
-                                                   IsolateGroup* isolate_group);
-  static void DedupPcDescriptors(Zone* zone, IsolateGroup* isolate_group);
-  static void DedupDeoptEntries(Zone* zone, IsolateGroup* isolate_group);
+  static void BindStaticCalls(Thread* thread);
+  static void ShareMegamorphicBuckets(Thread* thread);
+  static void NormalizeAndDedupCompressedStackMaps(Thread* thread);
+  static void DedupPcDescriptors(Thread* thread);
+  static void DedupDeoptEntries(Thread* thread);
 #if defined(DART_PRECOMPILER)
-  static void DedupCatchEntryMovesMaps(Zone* zone, IsolateGroup* isolate_group);
-  static void DedupUnlinkedCalls(Zone* zone, IsolateGroup* isolate_group);
-  static void PruneSubclasses(Zone* zone, IsolateGroup* isolate_group);
+  static void DedupCatchEntryMovesMaps(Thread* thread);
+  static void DedupUnlinkedCalls(Thread* thread);
+  static void PruneSubclasses(Thread* thread);
 #endif
-  static void DedupCodeSourceMaps(Zone* zone, IsolateGroup* isolate_group);
-  static void DedupLists(Zone* zone, IsolateGroup* isolate_group);
-  static void DedupInstructions(Zone* zone, IsolateGroup* isolate_group);
+  static void DedupCodeSourceMaps(Thread* thread);
+  static void DedupLists(Thread* thread);
+  static void DedupInstructions(Thread* thread);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 885d79d..5fd0641 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2179,6 +2179,9 @@
   VARIABLE_POINTER_FIELDS(ObjectPtr, element, data)
 
   friend class Object;
+  friend void UpdateLengthField(intptr_t,
+                                ObjectPtr,
+                                ObjectPtr);  // num_variables_
 };
 
 class UntaggedContextScope : public UntaggedObject {
@@ -2725,10 +2728,6 @@
 
  private:
   friend class Library;
-  friend class OneByteStringSerializationCluster;
-  friend class TwoByteStringSerializationCluster;
-  friend class OneByteStringDeserializationCluster;
-  friend class TwoByteStringDeserializationCluster;
   friend class RODataSerializationCluster;
   friend class ImageWriter;
 };
@@ -2743,6 +2742,8 @@
 
   friend class RODataSerializationCluster;
   friend class String;
+  friend class StringDeserializationCluster;
+  friend class StringSerializationCluster;
 };
 
 class UntaggedTwoByteString : public UntaggedString {
@@ -2755,6 +2756,8 @@
 
   friend class RODataSerializationCluster;
   friend class String;
+  friend class StringDeserializationCluster;
+  friend class StringSerializationCluster;
 };
 
 // Abstract base class for RawTypedData/RawExternalTypedData/RawTypedDataView/
@@ -3206,6 +3209,8 @@
   friend class Scavenger;
   template <bool>
   friend class ScavengerVisitorBase;
+  friend class FastObjectCopy;  // For OFFSET_OF
+  friend class SlowObjectCopy;  // For OFFSET_OF
 };
 
 // MirrorReferences are used by mirrors to hold reflectees that are VM
diff --git a/runtime/vm/raw_object_fields.cc b/runtime/vm/raw_object_fields.cc
index 0c64af6..186f510 100644
--- a/runtime/vm/raw_object_fields.cc
+++ b/runtime/vm/raw_object_fields.cc
@@ -156,15 +156,23 @@
   F(String, length_)                                                           \
   F(Array, type_arguments_)                                                    \
   F(Array, length_)                                                            \
+  F(ImmutableArray, type_arguments_)                                           \
+  F(ImmutableArray, length_)                                                   \
   F(GrowableObjectArray, type_arguments_)                                      \
   F(GrowableObjectArray, length_)                                              \
   F(GrowableObjectArray, data_)                                                \
-  F(LinkedHashBase, type_arguments_)                                           \
-  F(LinkedHashBase, index_)                                                    \
-  F(LinkedHashBase, hash_mask_)                                                \
-  F(LinkedHashBase, data_)                                                     \
-  F(LinkedHashBase, used_data_)                                                \
-  F(LinkedHashBase, deleted_keys_)                                             \
+  F(LinkedHashMap, type_arguments_)                                            \
+  F(LinkedHashMap, index_)                                                     \
+  F(LinkedHashMap, hash_mask_)                                                 \
+  F(LinkedHashMap, data_)                                                      \
+  F(LinkedHashMap, used_data_)                                                 \
+  F(LinkedHashSet, deleted_keys_)                                              \
+  F(LinkedHashSet, type_arguments_)                                            \
+  F(LinkedHashSet, index_)                                                     \
+  F(LinkedHashSet, hash_mask_)                                                 \
+  F(LinkedHashSet, data_)                                                      \
+  F(LinkedHashSet, used_data_)                                                 \
+  F(LinkedHashSet, deleted_keys_)                                              \
   F(TypedData, length_)                                                        \
   F(ExternalTypedData, length_)                                                \
   F(ReceivePort, send_port_)                                                   \
diff --git a/runtime/vm/regexp_assembler_bytecode.cc b/runtime/vm/regexp_assembler_bytecode.cc
index 708297a..dd8bd53 100644
--- a/runtime/vm/regexp_assembler_bytecode.cc
+++ b/runtime/vm/regexp_assembler_bytecode.cc
@@ -468,13 +468,13 @@
          (regexp.num_bracket_expressions() + 1) * 2;
 }
 
-static IrregexpInterpreter::IrregexpResult ExecRaw(const RegExp& regexp,
-                                                   const String& subject,
-                                                   intptr_t index,
-                                                   bool sticky,
-                                                   int32_t* output,
-                                                   intptr_t output_size,
-                                                   Zone* zone) {
+static ObjectPtr ExecRaw(const RegExp& regexp,
+                         const String& subject,
+                         intptr_t index,
+                         bool sticky,
+                         int32_t* output,
+                         intptr_t output_size,
+                         Zone* zone) {
   bool is_one_byte =
       subject.IsOneByteString() || subject.IsExternalOneByteString();
 
@@ -493,29 +493,26 @@
   const TypedData& bytecode =
       TypedData::Handle(zone, regexp.bytecode(is_one_byte, sticky));
   ASSERT(!bytecode.IsNull());
-  IrregexpInterpreter::IrregexpResult result =
-      IrregexpInterpreter::Match(bytecode, subject, raw_output, index, zone);
+  const Object& result = Object::Handle(
+      zone, IrregexpInterpreter::Match(bytecode, subject, raw_output, index));
 
-  if (result == IrregexpInterpreter::RE_SUCCESS) {
+  if (result.ptr() == Bool::True().ptr()) {
     // Copy capture results to the start of the registers array.
     memmove(output, raw_output, number_of_capture_registers * sizeof(int32_t));
   }
-  if (result == IrregexpInterpreter::RE_EXCEPTION) {
-    Thread* thread = Thread::Current();
-    auto isolate_group = thread->isolate_group();
-    const Instance& exception =
-        Instance::Handle(isolate_group->object_store()->stack_overflow());
-    Exceptions::Throw(thread, exception);
+  if (result.ptr() == Object::null()) {
+    // Exception during regexp processing
+    Exceptions::ThrowStackOverflow();
     UNREACHABLE();
   }
-  return result;
+  return result.ptr();
 }
 
-InstancePtr BytecodeRegExpMacroAssembler::Interpret(const RegExp& regexp,
-                                                    const String& subject,
-                                                    const Smi& start_index,
-                                                    bool sticky,
-                                                    Zone* zone) {
+ObjectPtr BytecodeRegExpMacroAssembler::Interpret(const RegExp& regexp,
+                                                  const String& subject,
+                                                  const Smi& start_index,
+                                                  bool sticky,
+                                                  Zone* zone) {
   intptr_t required_registers = Prepare(regexp, subject, sticky, zone);
   if (required_registers < 0) {
     // Compiling failed with an exception.
@@ -525,11 +522,10 @@
   // V8 uses a shared copy on the isolate when smaller than some threshold.
   int32_t* output_registers = zone->Alloc<int32_t>(required_registers);
 
-  IrregexpInterpreter::IrregexpResult result =
-      ExecRaw(regexp, subject, start_index.Value(), sticky, output_registers,
-              required_registers, zone);
-
-  if (result == IrregexpInterpreter::RE_SUCCESS) {
+  const Object& result =
+      Object::Handle(zone, ExecRaw(regexp, subject, start_index.Value(), sticky,
+                                   output_registers, required_registers, zone));
+  if (result.ptr() == Bool::True().ptr()) {
     intptr_t capture_count = regexp.num_bracket_expressions();
     intptr_t capture_register_count = (capture_count + 1) * 2;
     ASSERT(required_registers >= capture_register_count);
@@ -553,10 +549,15 @@
 
     return result.ptr();
   }
-  if (result == IrregexpInterpreter::RE_EXCEPTION) {
+  if (result.ptr() == Object::null()) {
+    // internal exception
     UNREACHABLE();
   }
-  ASSERT(result == IrregexpInterpreter::RE_FAILURE);
+  if (result.IsError()) {
+    Exceptions::PropagateError(Error::Cast(result));
+    UNREACHABLE();
+  }
+  ASSERT(result.ptr() == Bool::False().ptr());
   return Instance::null();
 }
 
diff --git a/runtime/vm/regexp_assembler_bytecode.h b/runtime/vm/regexp_assembler_bytecode.h
index cdedaa1..6bb8f94 100644
--- a/runtime/vm/regexp_assembler_bytecode.h
+++ b/runtime/vm/regexp_assembler_bytecode.h
@@ -107,11 +107,11 @@
   virtual void PrintBlocks() { UNIMPLEMENTED(); }
   /////
 
-  static InstancePtr Interpret(const RegExp& regexp,
-                               const String& str,
-                               const Smi& start_index,
-                               bool is_sticky,
-                               Zone* zone);
+  static ObjectPtr Interpret(const RegExp& regexp,
+                             const String& str,
+                             const Smi& start_index,
+                             bool is_sticky,
+                             Zone* zone);
 
  private:
   void Expand();
diff --git a/runtime/vm/regexp_interpreter.cc b/runtime/vm/regexp_interpreter.cc
index eb0a243..610ac03 100644
--- a/runtime/vm/regexp_interpreter.cc
+++ b/runtime/vm/regexp_interpreter.cc
@@ -4,11 +4,12 @@
 
 // A simple interpreter for the Irregexp byte code.
 
-#include "vm/regexp_interpreter.h"
-
 #include <memory>
 #include <utility>
 
+#include "heap/safepoint.h"
+#include "vm/regexp_interpreter.h"
+
 #include "platform/unicode.h"
 #include "vm/object.h"
 #include "vm/regexp_assembler.h"
@@ -134,7 +135,7 @@
 // matching terminates.
 class BacktrackStack {
  public:
-  explicit BacktrackStack(Zone* zone) {
+  BacktrackStack() {
     memory_ = Isolate::Current()->TakeRegexpBacktrackStack();
     // Note: using malloc here has a potential of triggering jemalloc/tcmalloc
     // bugs which cause application to leak memory and eventually OOM.
@@ -146,15 +147,16 @@
           sizeof(intptr_t) * kBacktrackStackSize, /*is_executable=*/false,
           "regexp-backtrack-stack"));
     }
-    if (memory_ == nullptr) {
-      OUT_OF_MEMORY();
-    }
   }
 
   ~BacktrackStack() {
-    Isolate::Current()->CacheRegexpBacktrackStack(std::move(memory_));
+    if (memory_ != nullptr) {
+      Isolate::Current()->CacheRegexpBacktrackStack(std::move(memory_));
+    }
   }
 
+  bool out_of_memory() const { return memory_ == nullptr; }
+
   intptr_t* data() const {
     return reinterpret_cast<intptr_t*>(memory_->address());
   }
@@ -169,18 +171,22 @@
   DISALLOW_COPY_AND_ASSIGN(BacktrackStack);
 };
 
+// Returns True if success, False if failure, Null if internal exception,
+// Error if VM error needs to be propagated up the callchain.
 template <typename Char>
-static IrregexpInterpreter::IrregexpResult RawMatch(const uint8_t* code_base,
-                                                    const String& subject,
-                                                    int32_t* registers,
-                                                    intptr_t current,
-                                                    uint32_t current_char,
-                                                    Zone* zone) {
-  const uint8_t* pc = code_base;
+static ObjectPtr RawMatch(const TypedData& bytecode,
+                          const String& subject,
+                          int32_t* registers,
+                          intptr_t current,
+                          uint32_t current_char) {
   // BacktrackStack ensures that the memory allocated for the backtracking stack
   // is returned to the system or cached if there is no stack being cached at
   // the moment.
-  BacktrackStack backtrack_stack(zone);
+  BacktrackStack backtrack_stack;
+  if (backtrack_stack.out_of_memory()) {
+    Exceptions::ThrowOOM();
+    UNREACHABLE();
+  }
   intptr_t* backtrack_stack_base = backtrack_stack.data();
   intptr_t* backtrack_sp = backtrack_stack_base;
   intptr_t backtrack_stack_space = backtrack_stack.max_size();
@@ -196,482 +202,506 @@
     OS::PrintErr("Start irregexp bytecode interpreter\n");
   }
 #endif
+  const auto thread = Thread::Current();
+  const uint8_t* code_base;
+  const uint8_t* pc;
+  {
+    NoSafepointScope no_safepoint;
+    code_base = reinterpret_cast<uint8_t*>(bytecode.DataAddr(0));
+    pc = code_base;
+  }
   while (true) {
-    int32_t insn = Load32Aligned(pc);
-    switch (insn & BYTECODE_MASK) {
-      BYTECODE(BREAK)
-      UNREACHABLE();
-      return IrregexpInterpreter::RE_FAILURE;
-      BYTECODE(PUSH_CP)
-      if (--backtrack_stack_space < 0) {
-        return IrregexpInterpreter::RE_EXCEPTION;
+    if (UNLIKELY(thread->HasScheduledInterrupts())) {
+      intptr_t pc_offset = pc - code_base;
+      ErrorPtr error = thread->HandleInterrupts();
+      if (error != Object::null()) {
+        // Needs to be propagated to the Dart native invoking the
+        // regex matcher.
+        return error;
       }
-      *backtrack_sp++ = current;
-      pc += BC_PUSH_CP_LENGTH;
-      break;
-      BYTECODE(PUSH_BT)
-      if (--backtrack_stack_space < 0) {
-        return IrregexpInterpreter::RE_EXCEPTION;
-      }
-      *backtrack_sp++ = Load32Aligned(pc + 4);
-      pc += BC_PUSH_BT_LENGTH;
-      break;
-      BYTECODE(PUSH_REGISTER)
-      if (--backtrack_stack_space < 0) {
-        return IrregexpInterpreter::RE_EXCEPTION;
-      }
-      *backtrack_sp++ = registers[insn >> BYTECODE_SHIFT];
-      pc += BC_PUSH_REGISTER_LENGTH;
-      break;
-      BYTECODE(SET_REGISTER)
-      registers[insn >> BYTECODE_SHIFT] = Load32Aligned(pc + 4);
-      pc += BC_SET_REGISTER_LENGTH;
-      break;
-      BYTECODE(ADVANCE_REGISTER)
-      registers[insn >> BYTECODE_SHIFT] += Load32Aligned(pc + 4);
-      pc += BC_ADVANCE_REGISTER_LENGTH;
-      break;
-      BYTECODE(SET_REGISTER_TO_CP)
-      registers[insn >> BYTECODE_SHIFT] = current + Load32Aligned(pc + 4);
-      pc += BC_SET_REGISTER_TO_CP_LENGTH;
-      break;
-      BYTECODE(SET_CP_TO_REGISTER)
-      current = registers[insn >> BYTECODE_SHIFT];
-      pc += BC_SET_CP_TO_REGISTER_LENGTH;
-      break;
-      BYTECODE(SET_REGISTER_TO_SP)
-      registers[insn >> BYTECODE_SHIFT] =
-          static_cast<int>(backtrack_sp - backtrack_stack_base);
-      pc += BC_SET_REGISTER_TO_SP_LENGTH;
-      break;
-      BYTECODE(SET_SP_TO_REGISTER)
-      backtrack_sp = backtrack_stack_base + registers[insn >> BYTECODE_SHIFT];
-      backtrack_stack_space =
-          backtrack_stack.max_size() -
-          static_cast<int>(backtrack_sp - backtrack_stack_base);
-      pc += BC_SET_SP_TO_REGISTER_LENGTH;
-      break;
-      BYTECODE(POP_CP)
-      backtrack_stack_space++;
-      --backtrack_sp;
-      current = *backtrack_sp;
-      pc += BC_POP_CP_LENGTH;
-      break;
-      BYTECODE(POP_BT)
-      backtrack_stack_space++;
-      --backtrack_sp;
-      pc = code_base + *backtrack_sp;
-      break;
-      BYTECODE(POP_REGISTER)
-      backtrack_stack_space++;
-      --backtrack_sp;
-      registers[insn >> BYTECODE_SHIFT] = *backtrack_sp;
-      pc += BC_POP_REGISTER_LENGTH;
-      break;
-      BYTECODE(FAIL)
-      return IrregexpInterpreter::RE_FAILURE;
-      BYTECODE(SUCCEED)
-      return IrregexpInterpreter::RE_SUCCESS;
-      BYTECODE(ADVANCE_CP)
-      current += insn >> BYTECODE_SHIFT;
-      pc += BC_ADVANCE_CP_LENGTH;
-      break;
-      BYTECODE(GOTO)
-      pc = code_base + Load32Aligned(pc + 4);
-      break;
-      BYTECODE(ADVANCE_CP_AND_GOTO)
-      current += insn >> BYTECODE_SHIFT;
-      pc = code_base + Load32Aligned(pc + 4);
-      break;
-      BYTECODE(CHECK_GREEDY)
-      if (current == backtrack_sp[-1]) {
-        backtrack_sp--;
+      NoSafepointScope no_safepoint;
+      code_base = reinterpret_cast<uint8_t*>(bytecode.DataAddr(0));
+      pc = code_base + pc_offset;
+    }
+    NoSafepointScope no_safepoint;
+    bool check_for_safepoint_now = false;
+    while (!check_for_safepoint_now) {
+      int32_t insn = Load32Aligned(pc);
+      switch (insn & BYTECODE_MASK) {
+        BYTECODE(BREAK)
+        UNREACHABLE();
+        return Bool::False().ptr();
+        BYTECODE(PUSH_CP)
+        if (--backtrack_stack_space < 0) {
+          return Object::null();
+        }
+        *backtrack_sp++ = current;
+        pc += BC_PUSH_CP_LENGTH;
+        break;
+        BYTECODE(PUSH_BT)
+        if (--backtrack_stack_space < 0) {
+          return Object::null();
+        }
+        *backtrack_sp++ = Load32Aligned(pc + 4);
+        pc += BC_PUSH_BT_LENGTH;
+        break;
+        BYTECODE(PUSH_REGISTER)
+        if (--backtrack_stack_space < 0) {
+          return Object::null();
+        }
+        *backtrack_sp++ = registers[insn >> BYTECODE_SHIFT];
+        pc += BC_PUSH_REGISTER_LENGTH;
+        break;
+        BYTECODE(SET_REGISTER)
+        registers[insn >> BYTECODE_SHIFT] = Load32Aligned(pc + 4);
+        pc += BC_SET_REGISTER_LENGTH;
+        break;
+        BYTECODE(ADVANCE_REGISTER)
+        registers[insn >> BYTECODE_SHIFT] += Load32Aligned(pc + 4);
+        pc += BC_ADVANCE_REGISTER_LENGTH;
+        break;
+        BYTECODE(SET_REGISTER_TO_CP)
+        registers[insn >> BYTECODE_SHIFT] = current + Load32Aligned(pc + 4);
+        pc += BC_SET_REGISTER_TO_CP_LENGTH;
+        break;
+        BYTECODE(SET_CP_TO_REGISTER)
+        current = registers[insn >> BYTECODE_SHIFT];
+        pc += BC_SET_CP_TO_REGISTER_LENGTH;
+        break;
+        BYTECODE(SET_REGISTER_TO_SP)
+        registers[insn >> BYTECODE_SHIFT] =
+            static_cast<int>(backtrack_sp - backtrack_stack_base);
+        pc += BC_SET_REGISTER_TO_SP_LENGTH;
+        break;
+        BYTECODE(SET_SP_TO_REGISTER)
+        backtrack_sp = backtrack_stack_base + registers[insn >> BYTECODE_SHIFT];
+        backtrack_stack_space =
+            backtrack_stack.max_size() -
+            static_cast<int>(backtrack_sp - backtrack_stack_base);
+        pc += BC_SET_SP_TO_REGISTER_LENGTH;
+        break;
+        BYTECODE(POP_CP)
         backtrack_stack_space++;
+        --backtrack_sp;
+        current = *backtrack_sp;
+        pc += BC_POP_CP_LENGTH;
+        break;
+        BYTECODE(POP_BT)
+        backtrack_stack_space++;
+        --backtrack_sp;
+        pc = code_base + *backtrack_sp;
+        // This should match check cadence in JIT irregexp implementation.
+        check_for_safepoint_now = true;
+        break;
+        BYTECODE(POP_REGISTER)
+        backtrack_stack_space++;
+        --backtrack_sp;
+        registers[insn >> BYTECODE_SHIFT] = *backtrack_sp;
+        pc += BC_POP_REGISTER_LENGTH;
+        break;
+        BYTECODE(FAIL)
+        return Bool::False().ptr();
+        BYTECODE(SUCCEED)
+        return Bool::True().ptr();
+        BYTECODE(ADVANCE_CP)
+        current += insn >> BYTECODE_SHIFT;
+        pc += BC_ADVANCE_CP_LENGTH;
+        break;
+        BYTECODE(GOTO)
         pc = code_base + Load32Aligned(pc + 4);
-      } else {
-        pc += BC_CHECK_GREEDY_LENGTH;
-      }
-      break;
-      BYTECODE(LOAD_CURRENT_CHAR) {
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        if (pos < 0 || pos >= subject_length) {
+        break;
+        BYTECODE(ADVANCE_CP_AND_GOTO)
+        current += insn >> BYTECODE_SHIFT;
+        pc = code_base + Load32Aligned(pc + 4);
+        break;
+        BYTECODE(CHECK_GREEDY)
+        if (current == backtrack_sp[-1]) {
+          backtrack_sp--;
+          backtrack_stack_space++;
           pc = code_base + Load32Aligned(pc + 4);
         } else {
-          current_char = subject.CharAt(pos);
-          pc += BC_LOAD_CURRENT_CHAR_LENGTH;
+          pc += BC_CHECK_GREEDY_LENGTH;
         }
         break;
-      }
-      BYTECODE(LOAD_CURRENT_CHAR_UNCHECKED) {
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        current_char = subject.CharAt(pos);
-        pc += BC_LOAD_CURRENT_CHAR_UNCHECKED_LENGTH;
-        break;
-      }
-      BYTECODE(LOAD_2_CURRENT_CHARS) {
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        if (pos + 2 > subject_length) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
+        BYTECODE(LOAD_CURRENT_CHAR) {
+          int pos = current + (insn >> BYTECODE_SHIFT);
+          if (pos < 0 || pos >= subject_length) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            current_char = subject.CharAt(pos);
+            pc += BC_LOAD_CURRENT_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(LOAD_CURRENT_CHAR_UNCHECKED) {
+          int pos = current + (insn >> BYTECODE_SHIFT);
+          current_char = subject.CharAt(pos);
+          pc += BC_LOAD_CURRENT_CHAR_UNCHECKED_LENGTH;
+          break;
+        }
+        BYTECODE(LOAD_2_CURRENT_CHARS) {
+          int pos = current + (insn >> BYTECODE_SHIFT);
+          if (pos + 2 > subject_length) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            Char next = subject.CharAt(pos + 1);
+            current_char =
+                subject.CharAt(pos) | (next << (kBitsPerByte * sizeof(Char)));
+            pc += BC_LOAD_2_CURRENT_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(LOAD_2_CURRENT_CHARS_UNCHECKED) {
+          int pos = current + (insn >> BYTECODE_SHIFT);
           Char next = subject.CharAt(pos + 1);
           current_char =
               subject.CharAt(pos) | (next << (kBitsPerByte * sizeof(Char)));
-          pc += BC_LOAD_2_CURRENT_CHARS_LENGTH;
+          pc += BC_LOAD_2_CURRENT_CHARS_UNCHECKED_LENGTH;
+          break;
         }
-        break;
-      }
-      BYTECODE(LOAD_2_CURRENT_CHARS_UNCHECKED) {
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        Char next = subject.CharAt(pos + 1);
-        current_char =
-            subject.CharAt(pos) | (next << (kBitsPerByte * sizeof(Char)));
-        pc += BC_LOAD_2_CURRENT_CHARS_UNCHECKED_LENGTH;
-        break;
-      }
-      BYTECODE(LOAD_4_CURRENT_CHARS) {
-        ASSERT(sizeof(Char) == 1);
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        if (pos + 4 > subject_length) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
+        BYTECODE(LOAD_4_CURRENT_CHARS) {
+          ASSERT(sizeof(Char) == 1);
+          int pos = current + (insn >> BYTECODE_SHIFT);
+          if (pos + 4 > subject_length) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            Char next1 = subject.CharAt(pos + 1);
+            Char next2 = subject.CharAt(pos + 2);
+            Char next3 = subject.CharAt(pos + 3);
+            current_char = (subject.CharAt(pos) | (next1 << 8) | (next2 << 16) |
+                            (next3 << 24));
+            pc += BC_LOAD_4_CURRENT_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(LOAD_4_CURRENT_CHARS_UNCHECKED) {
+          ASSERT(sizeof(Char) == 1);
+          int pos = current + (insn >> BYTECODE_SHIFT);
           Char next1 = subject.CharAt(pos + 1);
           Char next2 = subject.CharAt(pos + 2);
           Char next3 = subject.CharAt(pos + 3);
           current_char = (subject.CharAt(pos) | (next1 << 8) | (next2 << 16) |
                           (next3 << 24));
-          pc += BC_LOAD_4_CURRENT_CHARS_LENGTH;
+          pc += BC_LOAD_4_CURRENT_CHARS_UNCHECKED_LENGTH;
+          break;
         }
-        break;
-      }
-      BYTECODE(LOAD_4_CURRENT_CHARS_UNCHECKED) {
-        ASSERT(sizeof(Char) == 1);
-        int pos = current + (insn >> BYTECODE_SHIFT);
-        Char next1 = subject.CharAt(pos + 1);
-        Char next2 = subject.CharAt(pos + 2);
-        Char next3 = subject.CharAt(pos + 3);
-        current_char = (subject.CharAt(pos) | (next1 << 8) | (next2 << 16) |
-                        (next3 << 24));
-        pc += BC_LOAD_4_CURRENT_CHARS_UNCHECKED_LENGTH;
-        break;
-      }
-      BYTECODE(CHECK_4_CHARS) {
-        uint32_t c = Load32Aligned(pc + 4);
-        if (c == current_char) {
+        BYTECODE(CHECK_4_CHARS) {
+          uint32_t c = Load32Aligned(pc + 4);
+          if (c == current_char) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_CHECK_4_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_CHAR) {
+          uint32_t c = (insn >> BYTECODE_SHIFT);
+          if (c == current_char) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            pc += BC_CHECK_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_NOT_4_CHARS) {
+          uint32_t c = Load32Aligned(pc + 4);
+          if (c != current_char) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_CHECK_NOT_4_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_NOT_CHAR) {
+          uint32_t c = (insn >> BYTECODE_SHIFT);
+          if (c != current_char) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            pc += BC_CHECK_NOT_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(AND_CHECK_4_CHARS) {
+          uint32_t c = Load32Aligned(pc + 4);
+          if (c == (current_char & Load32Aligned(pc + 8))) {
+            pc = code_base + Load32Aligned(pc + 12);
+          } else {
+            pc += BC_AND_CHECK_4_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(AND_CHECK_CHAR) {
+          uint32_t c = (insn >> BYTECODE_SHIFT);
+          if (c == (current_char & Load32Aligned(pc + 4))) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_AND_CHECK_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(AND_CHECK_NOT_4_CHARS) {
+          uint32_t c = Load32Aligned(pc + 4);
+          if (c != (current_char & Load32Aligned(pc + 8))) {
+            pc = code_base + Load32Aligned(pc + 12);
+          } else {
+            pc += BC_AND_CHECK_NOT_4_CHARS_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(AND_CHECK_NOT_CHAR) {
+          uint32_t c = (insn >> BYTECODE_SHIFT);
+          if (c != (current_char & Load32Aligned(pc + 4))) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_AND_CHECK_NOT_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(MINUS_AND_CHECK_NOT_CHAR) {
+          uint32_t c = (insn >> BYTECODE_SHIFT);
+          uint32_t minus = Load16Aligned(pc + 4);
+          uint32_t mask = Load16Aligned(pc + 6);
+          if (c != ((current_char - minus) & mask)) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_MINUS_AND_CHECK_NOT_CHAR_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_CHAR_IN_RANGE) {
+          uint32_t from = Load16Aligned(pc + 4);
+          uint32_t to = Load16Aligned(pc + 6);
+          if (from <= current_char && current_char <= to) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_CHECK_CHAR_IN_RANGE_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_CHAR_NOT_IN_RANGE) {
+          uint32_t from = Load16Aligned(pc + 4);
+          uint32_t to = Load16Aligned(pc + 6);
+          if (from > current_char || current_char > to) {
+            pc = code_base + Load32Aligned(pc + 8);
+          } else {
+            pc += BC_CHECK_CHAR_NOT_IN_RANGE_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_BIT_IN_TABLE) {
+          int mask = RegExpMacroAssembler::kTableMask;
+          uint8_t b = pc[8 + ((current_char & mask) >> kBitsPerByteLog2)];
+          int bit = (current_char & (kBitsPerByte - 1));
+          if ((b & (1 << bit)) != 0) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            pc += BC_CHECK_BIT_IN_TABLE_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_LT) {
+          uint32_t limit = (insn >> BYTECODE_SHIFT);
+          if (current_char < limit) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            pc += BC_CHECK_LT_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_GT) {
+          uint32_t limit = (insn >> BYTECODE_SHIFT);
+          if (current_char > limit) {
+            pc = code_base + Load32Aligned(pc + 4);
+          } else {
+            pc += BC_CHECK_GT_LENGTH;
+          }
+          break;
+        }
+        BYTECODE(CHECK_REGISTER_LT)
+        if (registers[insn >> BYTECODE_SHIFT] < Load32Aligned(pc + 4)) {
           pc = code_base + Load32Aligned(pc + 8);
         } else {
-          pc += BC_CHECK_4_CHARS_LENGTH;
+          pc += BC_CHECK_REGISTER_LT_LENGTH;
         }
         break;
-      }
-      BYTECODE(CHECK_CHAR) {
-        uint32_t c = (insn >> BYTECODE_SHIFT);
-        if (c == current_char) {
+        BYTECODE(CHECK_REGISTER_GE)
+        if (registers[insn >> BYTECODE_SHIFT] >= Load32Aligned(pc + 4)) {
+          pc = code_base + Load32Aligned(pc + 8);
+        } else {
+          pc += BC_CHECK_REGISTER_GE_LENGTH;
+        }
+        break;
+        BYTECODE(CHECK_REGISTER_EQ_POS)
+        if (registers[insn >> BYTECODE_SHIFT] == current) {
           pc = code_base + Load32Aligned(pc + 4);
         } else {
-          pc += BC_CHECK_CHAR_LENGTH;
+          pc += BC_CHECK_REGISTER_EQ_POS_LENGTH;
         }
         break;
-      }
-      BYTECODE(CHECK_NOT_4_CHARS) {
-        uint32_t c = Load32Aligned(pc + 4);
-        if (c != current_char) {
+        BYTECODE(CHECK_NOT_REGS_EQUAL)
+        if (registers[insn >> BYTECODE_SHIFT] ==
+            registers[Load32Aligned(pc + 4)]) {
+          pc += BC_CHECK_NOT_REGS_EQUAL_LENGTH;
+        } else {
           pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_CHECK_NOT_4_CHARS_LENGTH;
         }
         break;
-      }
-      BYTECODE(CHECK_NOT_CHAR) {
-        uint32_t c = (insn >> BYTECODE_SHIFT);
-        if (c != current_char) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
-          pc += BC_CHECK_NOT_CHAR_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(AND_CHECK_4_CHARS) {
-        uint32_t c = Load32Aligned(pc + 4);
-        if (c == (current_char & Load32Aligned(pc + 8))) {
-          pc = code_base + Load32Aligned(pc + 12);
-        } else {
-          pc += BC_AND_CHECK_4_CHARS_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(AND_CHECK_CHAR) {
-        uint32_t c = (insn >> BYTECODE_SHIFT);
-        if (c == (current_char & Load32Aligned(pc + 4))) {
-          pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_AND_CHECK_CHAR_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(AND_CHECK_NOT_4_CHARS) {
-        uint32_t c = Load32Aligned(pc + 4);
-        if (c != (current_char & Load32Aligned(pc + 8))) {
-          pc = code_base + Load32Aligned(pc + 12);
-        } else {
-          pc += BC_AND_CHECK_NOT_4_CHARS_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(AND_CHECK_NOT_CHAR) {
-        uint32_t c = (insn >> BYTECODE_SHIFT);
-        if (c != (current_char & Load32Aligned(pc + 4))) {
-          pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_AND_CHECK_NOT_CHAR_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(MINUS_AND_CHECK_NOT_CHAR) {
-        uint32_t c = (insn >> BYTECODE_SHIFT);
-        uint32_t minus = Load16Aligned(pc + 4);
-        uint32_t mask = Load16Aligned(pc + 6);
-        if (c != ((current_char - minus) & mask)) {
-          pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_MINUS_AND_CHECK_NOT_CHAR_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_CHAR_IN_RANGE) {
-        uint32_t from = Load16Aligned(pc + 4);
-        uint32_t to = Load16Aligned(pc + 6);
-        if (from <= current_char && current_char <= to) {
-          pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_CHECK_CHAR_IN_RANGE_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_CHAR_NOT_IN_RANGE) {
-        uint32_t from = Load16Aligned(pc + 4);
-        uint32_t to = Load16Aligned(pc + 6);
-        if (from > current_char || current_char > to) {
-          pc = code_base + Load32Aligned(pc + 8);
-        } else {
-          pc += BC_CHECK_CHAR_NOT_IN_RANGE_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_BIT_IN_TABLE) {
-        int mask = RegExpMacroAssembler::kTableMask;
-        uint8_t b = pc[8 + ((current_char & mask) >> kBitsPerByteLog2)];
-        int bit = (current_char & (kBitsPerByte - 1));
-        if ((b & (1 << bit)) != 0) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
-          pc += BC_CHECK_BIT_IN_TABLE_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_LT) {
-        uint32_t limit = (insn >> BYTECODE_SHIFT);
-        if (current_char < limit) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
-          pc += BC_CHECK_LT_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_GT) {
-        uint32_t limit = (insn >> BYTECODE_SHIFT);
-        if (current_char > limit) {
-          pc = code_base + Load32Aligned(pc + 4);
-        } else {
-          pc += BC_CHECK_GT_LENGTH;
-        }
-        break;
-      }
-      BYTECODE(CHECK_REGISTER_LT)
-      if (registers[insn >> BYTECODE_SHIFT] < Load32Aligned(pc + 4)) {
-        pc = code_base + Load32Aligned(pc + 8);
-      } else {
-        pc += BC_CHECK_REGISTER_LT_LENGTH;
-      }
-      break;
-      BYTECODE(CHECK_REGISTER_GE)
-      if (registers[insn >> BYTECODE_SHIFT] >= Load32Aligned(pc + 4)) {
-        pc = code_base + Load32Aligned(pc + 8);
-      } else {
-        pc += BC_CHECK_REGISTER_GE_LENGTH;
-      }
-      break;
-      BYTECODE(CHECK_REGISTER_EQ_POS)
-      if (registers[insn >> BYTECODE_SHIFT] == current) {
-        pc = code_base + Load32Aligned(pc + 4);
-      } else {
-        pc += BC_CHECK_REGISTER_EQ_POS_LENGTH;
-      }
-      break;
-      BYTECODE(CHECK_NOT_REGS_EQUAL)
-      if (registers[insn >> BYTECODE_SHIFT] ==
-          registers[Load32Aligned(pc + 4)]) {
-        pc += BC_CHECK_NOT_REGS_EQUAL_LENGTH;
-      } else {
-        pc = code_base + Load32Aligned(pc + 8);
-      }
-      break;
-      BYTECODE(CHECK_NOT_BACK_REF) {
-        int from = registers[insn >> BYTECODE_SHIFT];
-        int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
-        if (from < 0 || len <= 0) {
+        BYTECODE(CHECK_NOT_BACK_REF) {
+          int from = registers[insn >> BYTECODE_SHIFT];
+          int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
+          if (from < 0 || len <= 0) {
+            pc += BC_CHECK_NOT_BACK_REF_LENGTH;
+            break;
+          }
+          if (current + len > subject_length) {
+            pc = code_base + Load32Aligned(pc + 4);
+            break;
+          } else {
+            int i;
+            for (i = 0; i < len; i++) {
+              if (subject.CharAt(from + i) != subject.CharAt(current + i)) {
+                pc = code_base + Load32Aligned(pc + 4);
+                break;
+              }
+            }
+            if (i < len) break;
+            current += len;
+          }
           pc += BC_CHECK_NOT_BACK_REF_LENGTH;
           break;
         }
-        if (current + len > subject_length) {
-          pc = code_base + Load32Aligned(pc + 4);
-          break;
-        } else {
-          int i;
-          for (i = 0; i < len; i++) {
-            if (subject.CharAt(from + i) != subject.CharAt(current + i)) {
+        BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_UNICODE)
+        FALL_THROUGH;
+        BYTECODE(CHECK_NOT_BACK_REF_NO_CASE) {
+          const bool unicode =
+              (insn & BYTECODE_MASK) == BC_CHECK_NOT_BACK_REF_NO_CASE_UNICODE;
+          int from = registers[insn >> BYTECODE_SHIFT];
+          int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
+          if (from < 0 || len <= 0) {
+            pc += BC_CHECK_NOT_BACK_REF_NO_CASE_LENGTH;
+            break;
+          }
+          if (current + len > subject_length) {
+            pc = code_base + Load32Aligned(pc + 4);
+            break;
+          } else {
+            if (BackRefMatchesNoCase<Char>(&canonicalize, from, current, len,
+                                           subject, unicode)) {
+              current += len;
+              pc += BC_CHECK_NOT_BACK_REF_NO_CASE_LENGTH;
+            } else {
               pc = code_base + Load32Aligned(pc + 4);
-              break;
             }
           }
-          if (i < len) break;
-          current += len;
-        }
-        pc += BC_CHECK_NOT_BACK_REF_LENGTH;
-        break;
-      }
-      BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_UNICODE)
-      FALL_THROUGH;
-      BYTECODE(CHECK_NOT_BACK_REF_NO_CASE) {
-        const bool unicode =
-            (insn & BYTECODE_MASK) == BC_CHECK_NOT_BACK_REF_NO_CASE_UNICODE;
-        int from = registers[insn >> BYTECODE_SHIFT];
-        int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
-        if (from < 0 || len <= 0) {
-          pc += BC_CHECK_NOT_BACK_REF_NO_CASE_LENGTH;
           break;
         }
-        if (current + len > subject_length) {
-          pc = code_base + Load32Aligned(pc + 4);
-          break;
-        } else {
-          if (BackRefMatchesNoCase<Char>(&canonicalize, from, current, len,
-                                         subject, unicode)) {
-            current += len;
-            pc += BC_CHECK_NOT_BACK_REF_NO_CASE_LENGTH;
-          } else {
-            pc = code_base + Load32Aligned(pc + 4);
+        BYTECODE(CHECK_NOT_BACK_REF_BACKWARD) {
+          const int from = registers[insn >> BYTECODE_SHIFT];
+          const int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
+          if (from < 0 || len <= 0) {
+            pc += BC_CHECK_NOT_BACK_REF_BACKWARD_LENGTH;
+            break;
           }
-        }
-        break;
-      }
-      BYTECODE(CHECK_NOT_BACK_REF_BACKWARD) {
-        const int from = registers[insn >> BYTECODE_SHIFT];
-        const int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
-        if (from < 0 || len <= 0) {
+          if ((current - len) < 0) {
+            pc = code_base + Load32Aligned(pc + 4);
+            break;
+          } else {
+            // When looking behind, the string to match (if it is there) lies
+            // before the current position, so we will check the [len]
+            // characters before the current position, excluding the current
+            // position itself.
+            const int start = current - len;
+            int i;
+            for (i = 0; i < len; i++) {
+              if (subject.CharAt(from + i) != subject.CharAt(start + i)) {
+                pc = code_base + Load32Aligned(pc + 4);
+                break;
+              }
+            }
+            if (i < len) break;
+            current -= len;
+          }
           pc += BC_CHECK_NOT_BACK_REF_BACKWARD_LENGTH;
           break;
         }
-        if ((current - len) < 0) {
-          pc = code_base + Load32Aligned(pc + 4);
-          break;
-        } else {
-          // When looking behind, the string to match (if it is there) lies
-          // before the current position, so we will check the [len] characters
-          // before the current position, excluding the current position itself.
-          const int start = current - len;
-          int i;
-          for (i = 0; i < len; i++) {
-            if (subject.CharAt(from + i) != subject.CharAt(start + i)) {
+        BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_UNICODE_BACKWARD)
+        FALL_THROUGH;
+        BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_BACKWARD) {
+          bool unicode = (insn & BYTECODE_MASK) ==
+                         BC_CHECK_NOT_BACK_REF_NO_CASE_UNICODE_BACKWARD;
+          int from = registers[insn >> BYTECODE_SHIFT];
+          int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
+          if (from < 0 || len <= 0) {
+            pc += BC_CHECK_NOT_BACK_REF_NO_CASE_BACKWARD_LENGTH;
+            break;
+          }
+          if (current < len) {
+            pc = code_base + Load32Aligned(pc + 4);
+            break;
+          } else {
+            if (BackRefMatchesNoCase<Char>(&canonicalize, from, current - len,
+                                           len, subject, unicode)) {
+              current -= len;
+              pc += BC_CHECK_NOT_BACK_REF_NO_CASE_BACKWARD_LENGTH;
+            } else {
               pc = code_base + Load32Aligned(pc + 4);
-              break;
             }
           }
-          if (i < len) break;
-          current -= len;
-        }
-        pc += BC_CHECK_NOT_BACK_REF_BACKWARD_LENGTH;
-        break;
-      }
-      BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_UNICODE_BACKWARD)
-      FALL_THROUGH;
-      BYTECODE(CHECK_NOT_BACK_REF_NO_CASE_BACKWARD) {
-        bool unicode = (insn & BYTECODE_MASK) ==
-                       BC_CHECK_NOT_BACK_REF_NO_CASE_UNICODE_BACKWARD;
-        int from = registers[insn >> BYTECODE_SHIFT];
-        int len = registers[(insn >> BYTECODE_SHIFT) + 1] - from;
-        if (from < 0 || len <= 0) {
-          pc += BC_CHECK_NOT_BACK_REF_NO_CASE_BACKWARD_LENGTH;
           break;
         }
-        if (current < len) {
+        BYTECODE(CHECK_AT_START)
+        if (current == 0) {
           pc = code_base + Load32Aligned(pc + 4);
-          break;
         } else {
-          if (BackRefMatchesNoCase<Char>(&canonicalize, from, current - len,
-                                         len, subject, unicode)) {
-            current -= len;
-            pc += BC_CHECK_NOT_BACK_REF_NO_CASE_BACKWARD_LENGTH;
+          pc += BC_CHECK_AT_START_LENGTH;
+        }
+        break;
+        BYTECODE(CHECK_NOT_AT_START) {
+          const int32_t cp_offset = insn >> BYTECODE_SHIFT;
+          if (current + cp_offset == 0) {
+            pc += BC_CHECK_NOT_AT_START_LENGTH;
           } else {
             pc = code_base + Load32Aligned(pc + 4);
           }
+          break;
         }
-        break;
-      }
-      BYTECODE(CHECK_AT_START)
-      if (current == 0) {
-        pc = code_base + Load32Aligned(pc + 4);
-      } else {
-        pc += BC_CHECK_AT_START_LENGTH;
-      }
-      break;
-      BYTECODE(CHECK_NOT_AT_START) {
-        const int32_t cp_offset = insn >> BYTECODE_SHIFT;
-        if (current + cp_offset == 0) {
-          pc += BC_CHECK_NOT_AT_START_LENGTH;
-        } else {
-          pc = code_base + Load32Aligned(pc + 4);
+        BYTECODE(SET_CURRENT_POSITION_FROM_END) {
+          int by = static_cast<uint32_t>(insn) >> BYTECODE_SHIFT;
+          if (subject_length - current > by) {
+            current = subject_length - by;
+            current_char = subject.CharAt(current - 1);
+          }
+          pc += BC_SET_CURRENT_POSITION_FROM_END_LENGTH;
+          break;
         }
-        break;
+        default:
+          UNREACHABLE();
+          break;
       }
-      BYTECODE(SET_CURRENT_POSITION_FROM_END) {
-        int by = static_cast<uint32_t>(insn) >> BYTECODE_SHIFT;
-        if (subject_length - current > by) {
-          current = subject_length - by;
-          current_char = subject.CharAt(current - 1);
-        }
-        pc += BC_SET_CURRENT_POSITION_FROM_END_LENGTH;
-        break;
-      }
-      default:
-        UNREACHABLE();
-        break;
     }
   }
 }
 
-IrregexpInterpreter::IrregexpResult IrregexpInterpreter::Match(
-    const TypedData& bytecode,
-    const String& subject,
-    int32_t* registers,
-    intptr_t start_position,
-    Zone* zone) {
-  NoSafepointScope no_safepoint;
-  const uint8_t* code_base = reinterpret_cast<uint8_t*>(bytecode.DataAddr(0));
-
+// Returns True if success, False if failure, Null if internal exception,
+// Error if VM error needs to be propagated up the callchain.
+ObjectPtr IrregexpInterpreter::Match(const TypedData& bytecode,
+                                     const String& subject,
+                                     int32_t* registers,
+                                     intptr_t start_position) {
   uint16_t previous_char = '\n';
   if (start_position != 0) {
     previous_char = subject.CharAt(start_position - 1);
   }
 
   if (subject.IsOneByteString() || subject.IsExternalOneByteString()) {
-    return RawMatch<uint8_t>(code_base, subject, registers, start_position,
-                             previous_char, zone);
+    return RawMatch<uint8_t>(bytecode, subject, registers, start_position,
+                             previous_char);
   } else if (subject.IsTwoByteString() || subject.IsExternalTwoByteString()) {
-    return RawMatch<uint16_t>(code_base, subject, registers, start_position,
-                              previous_char, zone);
+    return RawMatch<uint16_t>(bytecode, subject, registers, start_position,
+                              previous_char);
   } else {
     UNREACHABLE();
-    return IrregexpInterpreter::RE_FAILURE;
+    return Bool::False().ptr();
   }
 }
 
diff --git a/runtime/vm/regexp_interpreter.h b/runtime/vm/regexp_interpreter.h
index 9e4e567..a42bd95 100644
--- a/runtime/vm/regexp_interpreter.h
+++ b/runtime/vm/regexp_interpreter.h
@@ -15,13 +15,13 @@
 
 class IrregexpInterpreter : public AllStatic {
  public:
-  enum IrregexpResult { RE_FAILURE = 0, RE_SUCCESS = 1, RE_EXCEPTION = -1 };
-
-  static IrregexpResult Match(const TypedData& bytecode,
-                              const String& subject,
-                              int32_t* captures,
-                              intptr_t start_position,
-                              Zone* zone);
+  // Returns True in case of a success, False in case of a failure,
+  // Null in case of internal exception,
+  // Error in case VM error has to propagated up to the caller.
+  static ObjectPtr Match(const TypedData& bytecode,
+                         const String& subject,
+                         int32_t* captures,
+                         intptr_t start_position);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index b23182e..5ef43b9 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -14,6 +14,7 @@
 #include "vm/dart_api_state.h"
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
+#include "vm/double_conversion.h"
 #include "vm/exceptions.h"
 #include "vm/flags.h"
 #include "vm/heap/verifier.h"
@@ -143,7 +144,19 @@
   Exceptions::ThrowByType(Exceptions::kRange, args);
 }
 
-static void NullErrorHelper(Zone* zone, const String& selector) {
+static void NullErrorHelper(Zone* zone,
+                            const String& selector,
+                            bool is_param_name = false) {
+  if (is_param_name) {
+    const String& error = String::Handle(
+        selector.IsNull()
+            ? String::New("argument value is null")
+            : String::NewFormatted("argument value for '%s' is null",
+                                   selector.ToCString()));
+    Exceptions::ThrowArgumentError(error);
+    return;
+  }
+
   // If the selector is null, this must be a null check that wasn't due to a
   // method invocation, so was due to the null check operator.
   if (selector.IsNull()) {
@@ -177,7 +190,10 @@
   Exceptions::ThrowByType(Exceptions::kNoSuchMethod, args);
 }
 
-static void DoThrowNullError(Isolate* isolate, Thread* thread, Zone* zone) {
+static void DoThrowNullError(Isolate* isolate,
+                             Thread* thread,
+                             Zone* zone,
+                             bool is_param) {
   DartFrameIterator iterator(thread,
                              StackFrameIterator::kNoCrossThreadIteration);
   const StackFrame* caller_frame = iterator.NextFrame();
@@ -204,11 +220,11 @@
     member_name = Symbols::OptimizedOut().ptr();
   }
 
-  NullErrorHelper(zone, member_name);
+  NullErrorHelper(zone, member_name, is_param);
 }
 
 DEFINE_RUNTIME_ENTRY(NullError, 0) {
-  DoThrowNullError(isolate, thread, zone);
+  DoThrowNullError(isolate, thread, zone, /*is_param=*/false);
 }
 
 // Collects information about pointers within the top |kMaxSlotsCollected|
@@ -257,7 +273,7 @@
     RELEASE_ASSERT(caller_frame->IsDartFrame());
     ReportImpossibleNullError(cid.Value(), caller_frame, thread);
   }
-  DoThrowNullError(isolate, thread, zone);
+  DoThrowNullError(isolate, thread, zone, /*is_param=*/false);
 }
 
 DEFINE_RUNTIME_ENTRY(NullErrorWithSelector, 1) {
@@ -270,8 +286,7 @@
 }
 
 DEFINE_RUNTIME_ENTRY(ArgumentNullError, 0) {
-  const String& error = String::Handle(String::New("argument value is null"));
-  Exceptions::ThrowArgumentError(error);
+  DoThrowNullError(isolate, thread, zone, /*is_param=*/true);
 }
 
 DEFINE_RUNTIME_ENTRY(ArgumentError, 1) {
@@ -286,6 +301,12 @@
   Exceptions::ThrowArgumentError(value);
 }
 
+DEFINE_RUNTIME_ENTRY(DoubleToInteger, 0) {
+  // Unboxed value is passed through a dedicated slot in Thread.
+  const double val = arguments.thread()->unboxed_double_runtime_arg();
+  arguments.SetReturn(Integer::Handle(zone, DoubleToInteger(zone, val)));
+}
+
 DEFINE_RUNTIME_ENTRY(IntegerDivisionByZeroException, 0) {
   const Array& args = Array::Handle(zone, Array::New(0));
   Exceptions::ThrowByType(Exceptions::kIntegerDivisionByZeroException, args);
@@ -344,6 +365,11 @@
   arguments.SetReturn(Object::Handle(zone, Double::New(0.0)));
 }
 
+DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(BoxDouble, 0) {
+  const double val = thread->unboxed_double_runtime_arg();
+  arguments.SetReturn(Object::Handle(zone, Double::New(val)));
+}
+
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateMint, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
     isolate->group()->heap()->CollectAllGarbage();
@@ -559,21 +585,22 @@
   StackFrame* caller_frame = iterator.NextFrame();
   ASSERT(caller_frame != NULL);
 
-  OS::PrintErr("SubtypeCheck: '%s' %d %s '%s' %d (pc: %#" Px ").\n",
-               String::Handle(subtype.Name()).ToCString(),
-               subtype.type_class_id(), result ? "is" : "is !",
-               String::Handle(supertype.Name()).ToCString(),
-               supertype.type_class_id(), caller_frame->pc());
+  LogBlock lb;
+  THR_Print("SubtypeCheck: '%s' %d %s '%s' %d (pc: %#" Px ").\n",
+            String::Handle(subtype.Name()).ToCString(), subtype.type_class_id(),
+            result ? "is" : "is !",
+            String::Handle(supertype.Name()).ToCString(),
+            supertype.type_class_id(), caller_frame->pc());
 
   const Function& function =
       Function::Handle(caller_frame->LookupDartFunction());
   if (function.HasSavedArgumentsDescriptor()) {
     const auto& args_desc_array = Array::Handle(function.saved_args_desc());
     const ArgumentsDescriptor args_desc(args_desc_array);
-    OS::PrintErr(" -> Function %s [%s]\n", function.ToFullyQualifiedCString(),
-                 args_desc.ToCString());
+    THR_Print(" -> Function %s [%s]\n", function.ToFullyQualifiedCString(),
+              args_desc.ToCString());
   } else {
-    OS::PrintErr(" -> Function %s\n", function.ToFullyQualifiedCString());
+    THR_Print(" -> Function %s\n", function.ToFullyQualifiedCString());
   }
 }
 
@@ -687,33 +714,34 @@
       AbstractType::Handle(instance.GetType(Heap::kNew));
   ASSERT(instance_type.IsInstantiated() ||
          (instance.IsClosure() && instance_type.IsInstantiated(kCurrentClass)));
+  LogBlock lb;
   if (type.IsInstantiated()) {
-    OS::PrintErr("%s: '%s' %d %s '%s' %d (pc: %#" Px ").\n", message,
-                 String::Handle(instance_type.Name()).ToCString(),
-                 instance_type.type_class_id(),
-                 (result.ptr() == Bool::True().ptr()) ? "is" : "is !",
-                 String::Handle(type.Name()).ToCString(), type.type_class_id(),
-                 caller_frame->pc());
+    THR_Print("%s: '%s' %d %s '%s' %d (pc: %#" Px ").\n", message,
+              String::Handle(instance_type.Name()).ToCString(),
+              instance_type.type_class_id(),
+              (result.ptr() == Bool::True().ptr()) ? "is" : "is !",
+              String::Handle(type.Name()).ToCString(), type.type_class_id(),
+              caller_frame->pc());
   } else {
     // Instantiate type before printing.
     const AbstractType& instantiated_type = AbstractType::Handle(
         type.InstantiateFrom(instantiator_type_arguments,
                              function_type_arguments, kAllFree, Heap::kOld));
-    OS::PrintErr("%s: '%s' %s '%s' instantiated from '%s' (pc: %#" Px ").\n",
-                 message, String::Handle(instance_type.Name()).ToCString(),
-                 (result.ptr() == Bool::True().ptr()) ? "is" : "is !",
-                 String::Handle(instantiated_type.Name()).ToCString(),
-                 String::Handle(type.Name()).ToCString(), caller_frame->pc());
+    THR_Print("%s: '%s' %s '%s' instantiated from '%s' (pc: %#" Px ").\n",
+              message, String::Handle(instance_type.Name()).ToCString(),
+              (result.ptr() == Bool::True().ptr()) ? "is" : "is !",
+              String::Handle(instantiated_type.Name()).ToCString(),
+              String::Handle(type.Name()).ToCString(), caller_frame->pc());
   }
   const Function& function =
       Function::Handle(caller_frame->LookupDartFunction());
   if (function.HasSavedArgumentsDescriptor()) {
     const auto& args_desc_array = Array::Handle(function.saved_args_desc());
     const ArgumentsDescriptor args_desc(args_desc_array);
-    OS::PrintErr(" -> Function %s [%s]\n", function.ToFullyQualifiedCString(),
-                 args_desc.ToCString());
+    THR_Print(" -> Function %s [%s]\n", function.ToFullyQualifiedCString(),
+              args_desc.ToCString());
   } else {
-    OS::PrintErr(" -> Function %s\n", function.ToFullyQualifiedCString());
+    THR_Print(" -> Function %s\n", function.ToFullyQualifiedCString());
   }
 }
 
@@ -799,7 +827,7 @@
         static_cast<uword>(instance_parent_function_type_arguments.ptr()),
         static_cast<uword>(instance_delayed_type_arguments.ptr()),
         static_cast<uword>(result.ptr()));
-    OS::PrintErr("%s", buffer.buffer());
+    THR_Print("%s", buffer.buffer());
   }
   {
     SafepointMutexLocker ml(
@@ -808,9 +836,8 @@
     const intptr_t len = new_cache.NumberOfChecks();
     if (len >= FLAG_max_subtype_cache_entries) {
       if (FLAG_trace_type_checks) {
-        OS::PrintErr(
-            "Not updating subtype test cache as its length reached %d\n",
-            FLAG_max_subtype_cache_entries);
+        THR_Print("Not updating subtype test cache as its length reached %d\n",
+                  FLAG_max_subtype_cache_entries);
       }
       return;
     }
@@ -827,7 +854,7 @@
                       static_cast<uword>(new_cache.ptr()), colliding_index);
         buffer.Printf("    entry: ");
         new_cache.WriteEntryToBuffer(zone, &buffer, colliding_index, "      ");
-        OS::PrintErr("%s\n", buffer.buffer());
+        THR_Print("%s\n", buffer.buffer());
       }
       if (!FLAG_enable_isolate_groups) {
         FATAL("Duplicate subtype test cache entry");
@@ -852,7 +879,7 @@
                     static_cast<uword>(new_cache.ptr()), len);
       buffer.Printf("    new entry: ");
       new_cache.WriteEntryToBuffer(zone, &buffer, len, "      ");
-      OS::PrintErr("%s\n", buffer.buffer());
+      THR_Print("%s\n", buffer.buffer());
     }
   }
 }
@@ -904,7 +931,7 @@
 DEFINE_RUNTIME_ENTRY(TypeCheck, 7) {
   const Instance& src_instance =
       Instance::CheckedHandle(zone, arguments.ArgAt(0));
-  AbstractType& dst_type =
+  const AbstractType& dst_type =
       AbstractType::CheckedHandle(zone, arguments.ArgAt(1));
   const TypeArguments& instantiator_type_arguments =
       TypeArguments::CheckedHandle(zone, arguments.ArgAt(2));
@@ -1005,15 +1032,17 @@
     ASSERT(!dst_name.IsNull());
     // Throw a dynamic type error.
     const TokenPosition location = GetCallerLocation();
-    const AbstractType& src_type =
+    const auto& src_type =
         AbstractType::Handle(zone, src_instance.GetType(Heap::kNew));
-    if (!dst_type.IsInstantiated()) {
+    auto& reported_type = AbstractType::Handle(zone, dst_type.ptr());
+    if (!reported_type.IsInstantiated()) {
       // Instantiate dst_type before reporting the error.
-      dst_type = dst_type.InstantiateFrom(instantiator_type_arguments,
-                                          function_type_arguments, kAllFree,
-                                          Heap::kNew);
+      reported_type = reported_type.InstantiateFrom(instantiator_type_arguments,
+                                                    function_type_arguments,
+                                                    kAllFree, Heap::kNew);
     }
-    Exceptions::CreateAndThrowTypeError(location, src_type, dst_type, dst_name);
+    Exceptions::CreateAndThrowTypeError(location, src_type, reported_type,
+                                        dst_name);
     UNREACHABLE();
   }
 
@@ -1021,67 +1050,74 @@
 #if !defined(TARGET_ARCH_IA32)
   bool would_update_cache_if_not_lazy = false;
 #if !defined(DART_PRECOMPILED_RUNTIME)
+  // Checks against type parameters are done by loading the corresponding type
+  // argument at runtime and calling the type argument's TTS. Thus, we install
+  // specialized TTSes on the type argument, not the parameter itself.
+  auto& tts_type = AbstractType::Handle(zone, dst_type.ptr());
+  if (tts_type.IsTypeParameter()) {
+    const auto& param = TypeParameter::Cast(tts_type);
+    tts_type = param.GetFromTypeArguments(instantiator_type_arguments,
+                                          function_type_arguments);
+  }
+  ASSERT(!tts_type.IsTypeParameter());
+
   if (mode == kTypeCheckFromLazySpecializeStub) {
-    // Checks against type parameters are done by loading the value of the type
-    // parameter and calling its type testing stub.
-    // So we have to install a specialized TTS on the value of the type
-    // parameter, not the parameter itself.
-    if (dst_type.IsTypeParameter()) {
-      dst_type = TypeParameter::Cast(dst_type).GetFromTypeArguments(
-          instantiator_type_arguments, function_type_arguments);
-    }
     if (FLAG_trace_type_checks) {
-      OS::PrintErr("  Specializing type testing stub for %s\n",
-                   dst_type.ToCString());
+      THR_Print("  Specializing type testing stub for %s\n",
+                tts_type.ToCString());
     }
-    TypeTestingStubGenerator::SpecializeStubFor(thread, dst_type);
+    const Code& code = Code::Handle(
+        zone, TypeTestingStubGenerator::SpecializeStubFor(thread, tts_type));
+    tts_type.SetTypeTestingStub(code);
 
     // Only create the cache if we failed to create a specialized TTS and doing
     // the same check would cause an update to the cache.
     would_update_cache_if_not_lazy =
         (!src_instance.IsNull() &&
-         dst_type.type_test_stub() ==
+         tts_type.type_test_stub() ==
              StubCode::DefaultNullableTypeTest().ptr()) ||
-        dst_type.type_test_stub() == StubCode::DefaultTypeTest().ptr();
+        tts_type.type_test_stub() == StubCode::DefaultTypeTest().ptr();
     should_update_cache = would_update_cache_if_not_lazy && cache.IsNull();
   }
 
-  // Fast path of type testing stub wasn't able to handle given type, yet it
-  // passed the type check. It means that fast-path was using outdated cid
-  // ranges and new classes appeared since the stub was generated.
-  // Re-generate the stub.
-  if ((mode == kTypeCheckFromSlowStub) && dst_type.IsType() &&
-      (TypeTestingStubGenerator::DefaultCodeForType(dst_type, /*lazy=*/false) !=
-       dst_type.type_test_stub()) &&
-      dst_type.IsInstantiated()) {
+  // Since dst_type is not a top type or type parameter, then the only default
+  // stubs it can use are DefaultTypeTest or DefaultNullableTypeTest.
+  if ((mode == kTypeCheckFromSlowStub) &&
+      (tts_type.type_test_stub() != StubCode::DefaultNullableTypeTest().ptr() &&
+       tts_type.type_test_stub() != StubCode::DefaultTypeTest().ptr())) {
+    // The specialized type testing stub returned a false negative. That means
+    // the specialization may have been generated using outdated cid ranges and
+    // new classes appeared since the stub was generated. Try respecializing.
     if (FLAG_trace_type_checks) {
-      OS::PrintErr("  Rebuilding type testing stub for %s\n",
-                   dst_type.ToCString());
+      THR_Print("  Rebuilding type testing stub for %s\n",
+                tts_type.ToCString());
     }
-#if defined(DEBUG)
-    const auto& old_code = Code::Handle(dst_type.type_test_stub());
-#endif
-    TypeTestingStubGenerator::SpecializeStubFor(thread, dst_type);
-#if defined(DEBUG)
-    ASSERT(old_code.ptr() != dst_type.type_test_stub());
+    const auto& old_code = Code::Handle(zone, tts_type.type_test_stub());
+    const auto& new_code = Code::Handle(
+        zone, TypeTestingStubGenerator::SpecializeStubFor(thread, tts_type));
+    ASSERT(old_code.ptr() != new_code.ptr());
+    // A specialized stub should always respecialize to a non-default stub.
+    ASSERT(new_code.ptr() != StubCode::DefaultNullableTypeTest().ptr() &&
+           new_code.ptr() != StubCode::DefaultTypeTest().ptr());
     const auto& old_instructions =
         Instructions::Handle(old_code.instructions());
-    const auto& new_code = Code::Handle(dst_type.type_test_stub());
     const auto& new_instructions =
         Instructions::Handle(new_code.instructions());
     // Check if specialization produced exactly the same sequence of
-    // instructions. If it did then we have a bug in the TTS code
-    // generation code: we know that old code could not handle src_instance
-    // which means new code would not be able to handle it either
-    // (because the code is exactly the same) and will fall through into
-    // runtime again given a similar instance and again ask compiler to
-    // specialize the stub, which would produce the same code again and
-    // so on - leading to a serious performance problem if this type check
-    // is hot.
-    ASSERT(!old_instructions.Equals(new_instructions));
-#endif
-    // Only create the cache when we come from a normal stub.
-    should_update_cache = false;
+    // instructions. If it did, then we have a false negative, which can
+    // happen in some cases involving uninstantiated types. In these cases,
+    // update the cache, because the only case in which these false negatives
+    // could possibly turn into true positives is with reloads, which clear
+    // all the SubtypeTestCaches.
+    should_update_cache = old_instructions.Equals(new_instructions);
+    if (FLAG_trace_type_checks) {
+      THR_Print("  %s rebuilt type testing stub for %s\n",
+                should_update_cache ? "Discarding" : "Installing",
+                tts_type.ToCString());
+    }
+    if (!should_update_cache) {
+      tts_type.SetTypeTestingStub(new_code);
+    }
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 #endif  // !defined(TARGET_ARCH_IA32)
@@ -1103,7 +1139,6 @@
           ObjectPool::Handle(zone, caller_code.GetObjectPool());
       TypeTestingStubCallPattern tts_pattern(caller_frame->pc());
       const intptr_t stc_pool_idx = tts_pattern.GetSubtypeTestCachePoolIndex();
-
       // Ensure we do have a STC (lazily create it if not) and all threads use
       // the same STC.
       {
@@ -1112,6 +1147,12 @@
         if (cache.IsNull()) {
           cache = SubtypeTestCache::New();
           pool.SetObjectAt<std::memory_order_release>(stc_pool_idx, cache);
+          if (FLAG_trace_type_checks) {
+            THR_Print("  Installed new subtype test cache %#" Px
+                      " at index %" Pd " of pool for %s\n",
+                      static_cast<uword>(cache.ptr()), stc_pool_idx,
+                      caller_code.ToCString());
+          }
         }
       }
 #else
@@ -1677,7 +1718,7 @@
 
   void DoUnlinkedCallAOT(const UnlinkedCall& unlinked,
                          const Function& target_function);
-  void DoMonomorphicMissAOT(const Object& data,
+  void DoMonomorphicMissAOT(const Object& old_data,
                             const Function& target_function);
   void DoSingleTargetMissAOT(const SingleTargetCache& data,
                              const Function& target_function);
@@ -1692,7 +1733,7 @@
                      const Code& old_target,
                      const Function& target_function);
 
-  void DoMonomorphicMissJIT(const Object& data,
+  void DoMonomorphicMissJIT(const Object& old_data,
                             const Function& target_function);
   void DoICDataMissJIT(const ICData& data,
                        const Object& old_data,
@@ -1817,36 +1858,16 @@
 }
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-static ICDataPtr FindICDataForInstanceCall(Zone* zone,
-                                           const Code& code,
-                                           uword pc) {
-  uword pc_offset = pc - code.PayloadStart();
-  const PcDescriptors& descriptors =
-      PcDescriptors::Handle(zone, code.pc_descriptors());
-  PcDescriptors::Iterator iter(descriptors, UntaggedPcDescriptors::kIcCall);
-  intptr_t deopt_id = -1;
-  while (iter.MoveNext()) {
-    if (iter.PcOffset() == pc_offset) {
-      deopt_id = iter.DeoptId();
-      break;
-    }
-  }
-  ASSERT(deopt_id != -1);
-  return Function::Handle(zone, code.function()).FindICData(deopt_id);
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 #if defined(DART_PRECOMPILED_RUNTIME)
 void PatchableCallHandler::DoMonomorphicMissAOT(
-    const Object& data,
+    const Object& old_data,
     const Function& target_function) {
   classid_t old_expected_cid;
-  if (data.IsSmi()) {
-    old_expected_cid = Smi::Cast(data).Value();
+  if (old_data.IsSmi()) {
+    old_expected_cid = Smi::Cast(old_data).Value();
   } else {
-    RELEASE_ASSERT(data.IsMonomorphicSmiableCall());
-    old_expected_cid = MonomorphicSmiableCall::Cast(data).expected_cid();
+    RELEASE_ASSERT(old_data.IsMonomorphicSmiableCall());
+    old_expected_cid = MonomorphicSmiableCall::Cast(old_data).expected_cid();
   }
   const bool is_monomorphic_hit = old_expected_cid == receiver().GetClassId();
   const auto& old_receiver_class = Class::Handle(
@@ -1900,24 +1921,53 @@
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
 void PatchableCallHandler::DoMonomorphicMissJIT(
-    const Object& data,
+    const Object& old_data,
     const Function& target_function) {
-  const ICData& ic_data = ICData::Handle(
-      zone_,
-      FindICDataForInstanceCall(zone_, caller_code_, caller_frame_->pc()));
-  RELEASE_ASSERT(!ic_data.IsNull());
+  // Monomorphic calls use the ICData::entries() as their data.
+  const auto& old_ic_data_entries = Array::Cast(old_data);
+  // Any non-empty ICData::entries() has a backref to it's ICData.
+  const auto& ic_data =
+      ICData::Handle(zone_, ICData::ICDataOfEntriesArray(old_ic_data_entries));
+
+  // The target didn't change, so we can stay inside monomorphic state.
+  if (ic_data.NumberOfChecksIs(1) &&
+      (ic_data.GetReceiverClassIdAt(0) == receiver().GetClassId())) {
+    // We got a miss because the old target code got disabled.
+    // Notice the reverse is not true: If the old code got disabled, the call
+    // might still have a different receiver then last time and possibly a
+    // different target.
+    ASSERT(miss_handler_ == MissHandler::kFixCallersTargetMonomorphic ||
+           !IsolateGroup::Current()->ContainsOnlyOneIsolate());
+
+    // No need to update ICData - it's already up-to-date.
+
+    if (FLAG_trace_ic) {
+      OS::PrintErr("Instance call at %" Px
+                   " updating code (old code was disabled)\n",
+                   caller_frame_->pc());
+    }
+
+    // We stay in monomorphic state, patch the code object and reload the icdata
+    // entries array.
+    const auto& code = Code::Handle(zone_, target_function.EnsureHasCode());
+    const auto& data = Object::Handle(zone_, ic_data.entries());
+    CodePatcher::PatchInstanceCallAt(caller_frame_->pc(), caller_code_, data,
+                                     code);
+    ReturnJIT(code, data, target_function);
+    return;
+  }
 
   ASSERT(ic_data.NumArgsTested() == 1);
   const Code& stub = ic_data.is_tracking_exactness()
                          ? StubCode::OneArgCheckInlineCacheWithExactnessCheck()
                          : StubCode::OneArgCheckInlineCache();
-  CodePatcher::PatchInstanceCallAt(caller_frame_->pc(), caller_code_, ic_data,
-                                   stub);
   if (FLAG_trace_ic) {
     OS::PrintErr("Instance call at %" Px
-                 " switching to polymorphic dispatch, %s\n",
+                 " switching monomorphic to polymorphic dispatch, %s\n",
                  caller_frame_->pc(), ic_data.ToCString());
   }
+  CodePatcher::PatchInstanceCallAt(caller_frame_->pc(), caller_code_, ic_data,
+                                   stub);
 
   ASSERT(caller_arguments_.length() == 1);
   UpdateICDataWithTarget(ic_data, target_function);
@@ -2216,14 +2266,13 @@
     }
 #else
     case kArrayCid: {
-      // ICData three-element array: Smi(receiver CID), Smi(count),
-      // Function(target). It is the Array from ICData::entries_.
-      const auto& ic_data = ICData::Handle(
-          zone_,
-          FindICDataForInstanceCall(zone_, caller_code_, caller_frame_->pc()));
-      RELEASE_ASSERT(!ic_data.IsNull());
-      name_ = ic_data.target_name();
+      // Monomorphic calls use the ICData::entries() as their data.
+      const auto& ic_data_entries = Array::Cast(data);
+      // Any non-empty ICData::entries() has a backref to it's ICData.
+      const auto& ic_data =
+          ICData::Handle(zone_, ICData::ICDataOfEntriesArray(ic_data_entries));
       args_descriptor_ = ic_data.arguments_descriptor();
+      name_ = ic_data.target_name();
       break;
     }
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index f22572c..0fa921a 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -18,9 +18,11 @@
   V(AllocateClosure)                                                           \
   V(AllocateContext)                                                           \
   V(AllocateObject)                                                            \
+  V(BoxDouble)                                                                 \
   V(BreakpointRuntimeHandler)                                                  \
   V(SingleStepHandler)                                                         \
   V(CloneContext)                                                              \
+  V(DoubleToInteger)                                                           \
   V(FixCallersTarget)                                                          \
   V(FixCallersTargetMonomorphic)                                               \
   V(FixAllocationStubTarget)                                                   \
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index b2545cf..7a966ac 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -403,7 +403,8 @@
       desc.info.declaration_pos = context_scope.DeclarationTokenIndexAt(i);
       desc.info.begin_pos = begin_token_pos();
       desc.info.end_pos = end_token_pos();
-      ASSERT(desc.info.begin_pos <= desc.info.end_pos);
+      ASSERT((desc.info.begin_pos.IsReal() != desc.info.end_pos.IsReal()) ||
+             (desc.info.begin_pos <= desc.info.end_pos));
       desc.info.set_index(context_scope.ContextIndexAt(i));
       vars.Add(desc);
     }
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index b9552b5..2b43622 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -2786,7 +2786,7 @@
         isStatic = false;
       }
       if (!cls.IsTopLevel() &&
-          (cls.id() < kInstanceCid || cls.id() == kTypeArgumentsCid)) {
+          (IsInternalOnlyClassId(cls.id()) || cls.id() == kTypeArgumentsCid)) {
         js->PrintError(
             kInvalidParams,
             "Expressions can be evaluated only with regular Dart instances");
@@ -3353,6 +3353,9 @@
     compile_mode = SourceReport::kForceCompile;
   }
 
+  bool report_lines =
+      BoolParameter::Parse(js->LookupParam("reportLines"), false);
+
   Script& script = Script::Handle();
   intptr_t start_pos = UIntParameter::Parse(js->LookupParam("tokenPos"));
   intptr_t end_pos = UIntParameter::Parse(js->LookupParam("endTokenPos"));
@@ -3383,7 +3386,7 @@
       return;
     }
   }
-  SourceReport report(report_set, compile_mode);
+  SourceReport report(report_set, compile_mode, report_lines);
   report.PrintJSON(js, script, TokenPosition::Deserialize(start_pos),
                    TokenPosition::Deserialize(end_pos));
 #endif  // !DART_PRECOMPILED_RUNTIME
@@ -5170,7 +5173,8 @@
 #define DEFINE_ADD_VALUE_F_CID(clazz) DEFINE_ADD_VALUE_F(k##clazz##Cid)
   {
     JSONArray internals(&map, "<VM Internals>");
-    for (intptr_t id = kClassCid; id < kInstanceCid; ++id) {
+    for (intptr_t id = kFirstInternalOnlyCid; id <= kLastInternalOnlyCid;
+         ++id) {
       DEFINE_ADD_VALUE_F(id);
     }
     DEFINE_ADD_VALUE_F_CID(LibraryPrefix);
@@ -5207,7 +5211,6 @@
   {
     JSONArray internals(&map, "List");
     CLASS_LIST_ARRAYS(DEFINE_ADD_VALUE_F_CID)
-    DEFINE_ADD_VALUE_F_CID(GrowableObjectArray)
     DEFINE_ADD_VALUE_F_CID(ByteBuffer)
   }
   {
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 4c87d36..38583b1 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 50
+#define SERVICE_PROTOCOL_MINOR_VERSION 51
 
 class Array;
 class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 6e29e0f..1581c44 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1,8 +1,8 @@
-# Dart VM Service Protocol 3.49
+# Dart VM Service Protocol 3.51
 
 > Please post feedback to the [observatory-discuss group][discuss-list]
 
-This document describes of _version 3.49_ of the Dart VM Service Protocol. This
+This document describes of _version 3.51_ 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.
@@ -429,7 +429,7 @@
 the web socket connection request to DDS. If DDS disconnects from the VM service,
 the VM service will once again start accepting incoming web socket connections.
 
-The VM service forwards the web socket connection by issuing a redirect 
+The VM service forwards the web socket connection by issuing a redirect
 
 ### Protocol Extensions
 
@@ -1059,7 +1059,8 @@
                                       string scriptId [optional],
                                       int tokenPos [optional],
                                       int endTokenPos [optional],
-                                      bool forceCompile [optional])
+                                      bool forceCompile [optional],
+                                      bool reportLines [optional])
 ```
 
 The _getSourceReport_ RPC is used to generate a set of reports tied to
@@ -1095,6 +1096,12 @@
 program.  If this parameter is not provided, it is considered to have
 the value _false_.
 
+The _reportLines_ parameter changes the token positions in
+_SourceReportRange.possibleBreakpoints_ and _SourceReportCoverage_ to be line
+numbers. This is designed to reduce the number of RPCs that need to be performed
+in the case that the client is only interested in line numbers. If this
+parameter is not provided, it is considered to have the value _false_.
+
 If _isolateId_ refers to an isolate which has exited, then the
 _Collected_ [Sentinel](#sentinel) is returned.
 
@@ -3291,9 +3298,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
@@ -3781,12 +3787,12 @@
 
 ```
 class SourceReportCoverage {
-  // A list of token positions in a SourceReportRange which have been
-  // executed.  The list is sorted.
+  // A list of token positions (or line numbers if reportLines was enabled) in a
+  // SourceReportRange which have been executed.  The list is sorted.
   int[] hits;
 
-  // A list of token positions in a SourceReportRange which have not been
-  // executed.  The list is sorted.
+  // A list of token positions (or line numbers if reportLines was enabled) in a
+  // SourceReportRange which have not been executed.  The list is sorted.
   int[] misses;
 }
 ```
@@ -3836,9 +3842,9 @@
   SourceReportCoverage coverage [optional];
 
   // Possible breakpoint information for this range, represented as a
-  // sorted list of token positions.  Provided only when the when the
-  // PossibleBreakpoint report has been requested and the range has been
-  // compiled.
+  // sorted list of token positions (or line numbers if reportLines was
+  // enabled).  Provided only when the when the PossibleBreakpoint report has
+  // been requested and the range has been compiled.
   int[] possibleBreakpoints [optional];
 }
 ```
@@ -4176,5 +4182,6 @@
 3.48 | Added `Profiler` stream, `UserTagChanged` event kind, and `updatedTag` and `previousTag` properties to `Event`.
 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.
 
 [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 d840e7b..418aa3a 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -92,8 +92,9 @@
       sp, VM_SERVICE_SERVER_INFO_MESSAGE_ID, false /* ignored */,
       Bool::Handle() /* ignored */));
   ASSERT(!message.IsNull());
-  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false, message,
-                                    port_, Message::kNormalPriority));
+  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
+                                    /* same_group */ false, message, port_,
+                                    Message::kNormalPriority));
 }
 
 void ServiceIsolate::ControlWebServer(const SendPort& sp,
@@ -102,8 +103,9 @@
   const Array& message = Array::Handle(MakeServerControlMessage(
       sp, VM_SERVICE_WEB_SERVER_CONTROL_MESSAGE_ID, enable, silenceOutput));
   ASSERT(!message.IsNull());
-  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false, message,
-                                    port_, Message::kNormalPriority));
+  PortMap::PostMessage(WriteMessage(/* can_send_any_object */ false,
+                                    /* same_group */ false, message, port_,
+                                    Message::kNormalPriority));
 }
 
 void ServiceIsolate::SetServerAddress(const char* address) {
@@ -186,11 +188,14 @@
   request.value.as_array.length = ARRAY_SIZE(request_array);
   ServiceIsolate::WaitForServiceIsolateStartup();
   Dart_Port service_port = ServiceIsolate::Port();
-
-  const bool success = Dart_PostCObject(service_port, &request);
-
-  if (!success && error != nullptr) {
-    if (service_port == ILLEGAL_PORT) {
+  bool success = false;
+  if (service_port != ILLEGAL_PORT) {
+    success = Dart_PostCObject(service_port, &request);
+    if (!success && error != nullptr) {
+      *error = Utils::StrDup("Was unable to post message to service isolate.");
+    }
+  } else {
+    if (error != nullptr) {
       if (startup_failure_reason_ != nullptr) {
         *error = OS::SCreate(/*zone=*/nullptr,
                              "Service isolate failed to start up: %s.",
@@ -198,11 +203,8 @@
       } else {
         *error = Utils::StrDup("No service isolate port was found.");
       }
-    } else {
-      *error = Utils::StrDup("Was unable to post message to service isolate.");
     }
   }
-
   return success;
 }
 
@@ -228,7 +230,8 @@
                  name.ToCString(), Dart_GetMainPortId());
   }
   return PortMap::PostMessage(WriteMessage(
-      /* can_send_any_object */ false, list, port_, Message::kNormalPriority));
+      /* can_send_any_object */ false, /* same_group */ false, list, port_,
+      Message::kNormalPriority));
 }
 
 bool ServiceIsolate::SendIsolateShutdownMessage() {
@@ -253,7 +256,8 @@
                  name.ToCString(), Dart_GetMainPortId());
   }
   return PortMap::PostMessage(WriteMessage(
-      /* can_send_any_object */ false, list, port_, Message::kNormalPriority));
+      /* can_send_any_object */ false, /* same_group */ false, list, port_,
+      Message::kNormalPriority));
 }
 
 void ServiceIsolate::SendServiceExitMessage() {
@@ -314,6 +318,8 @@
   MonitorLocker ml(monitor_);
   ASSERT(state_ == kStarted || state_ == kStopping);
   state_ = kStopped;
+  port_ = ILLEGAL_PORT;
+  isolate_ = nullptr;
   ml.NotifyAll();
 }
 
@@ -328,6 +334,7 @@
   MonitorLocker ml(monitor_);
   ASSERT(state_ == kStarting);
   state_ = kStopped;
+  port_ = ILLEGAL_PORT;
   startup_failure_reason_ = error;
   ml.NotifyAll();
 }
diff --git a/runtime/vm/signal_handler.h b/runtime/vm/signal_handler.h
index 22821d3..cabe149 100644
--- a/runtime/vm/signal_handler.h
+++ b/runtime/vm/signal_handler.h
@@ -38,84 +38,19 @@
 #include <ucontext.h>  // NOLINT
 #endif
 
-// Old linux kernels on ARM might require a trampoline to
-// work around incorrect Thumb -> ARM transitions. See SignalHandlerTrampoline
-// below for more details.
-#if defined(HOST_ARCH_ARM) &&                                                  \
-    (defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_ANDROID)) &&          \
-    !defined(__thumb__)
-#define USE_SIGNAL_HANDLER_TRAMPOLINE
-#endif
-
 namespace dart {
 
 typedef void (*SignalAction)(int signal, siginfo_t* info, void* context);
 
 class SignalHandler : public AllStatic {
  public:
-  template <SignalAction action>
-  static void Install() {
-#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
-    InstallImpl(SignalHandlerTrampoline<action>);
-#else
-    InstallImpl(action);
-#endif  // defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
-  }
+  static void Install(SignalAction action);
   static void Remove();
   static uintptr_t GetProgramCounter(const mcontext_t& mcontext);
   static uintptr_t GetFramePointer(const mcontext_t& mcontext);
   static uintptr_t GetCStackPointer(const mcontext_t& mcontext);
   static uintptr_t GetDartStackPointer(const mcontext_t& mcontext);
   static uintptr_t GetLinkRegister(const mcontext_t& mcontext);
-
- private:
-  static void InstallImpl(SignalAction action);
-
-#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
-  // Work around for a bug in old kernels (only fixed in 3.18 Android kernel):
-  //
-  // Kernel does not clear If-Then execution state bits when entering ARM signal
-  // handler which violates requirements imposed by ARM architecture reference.
-  // Some CPUs look at these bits even while in ARM mode which causes them
-  // to skip some instructions in the prologue of the signal handler.
-  //
-  // To work around the issue we insert enough NOPs in the prologue to ensure
-  // that no actual instructions are skipped and then branch to the actual
-  // signal handler.
-  //
-  // For the kernel patch that fixes the issue see:
-  // http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6ecf830e5029598732e04067e325d946097519cb
-  //
-  // Note: this function is marked "naked" because we must guarantee that
-  // our NOPs occur before any compiler generated prologue.
-  template <SignalAction action>
-  static __attribute__((naked)) void SignalHandlerTrampoline(int signal,
-                                                             siginfo_t* info,
-                                                             void* context_) {
-    // IT (If-Then) instruction makes up to four instructions that follow it
-    // conditional.
-    // Note: clobber all register so that compiler does not attempt to hoist
-    // anything from the next assembly block past this one.
-    asm volatile("nop; nop; nop; nop;"
-                 :
-                 :
-                 : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
-                   "r10", "r11", "r12", "r13", "r14", "memory");
-
-    // Tail-call into the actual signal handler.
-    //
-    // Note: this code is split into a separate inline assembly block because
-    // any code that compiler generates to satisfy register constraints must
-    // be generated after four NOPs.
-    //
-    // Note: there is no portable way to specify that we want to have
-    // signal, info and context_ in r0 - r2 respectively. So we just mark them
-    // as clobbered and hope that compiler does not emit any code that uses
-    // these registers to satisfy action constraint (we tested on clang and
-    // the generated code looks like one would expect).
-    asm volatile("bx %0;" : : "r"(action) : "r0", "r1", "r2", "memory");
-  }
-#endif  // defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
 };
 
 #undef USE_SIGNAL_HANDLER_TRAMPOLINE
diff --git a/runtime/vm/signal_handler_android.cc b/runtime/vm/signal_handler_android.cc
index 47c2ded..2fba54a 100644
--- a/runtime/vm/signal_handler_android.cc
+++ b/runtime/vm/signal_handler_android.cc
@@ -94,7 +94,7 @@
   return lr;
 }
 
-void SignalHandler::InstallImpl(SignalAction action) {
+void SignalHandler::Install(SignalAction action) {
   // Bionic implementation of setjmp temporary mangles SP register
   // in place which breaks signal delivery on the thread stack - when
   // kernel tries to deliver SIGPROF and we are in the middle of
diff --git a/runtime/vm/signal_handler_fuchsia.cc b/runtime/vm/signal_handler_fuchsia.cc
index 3a2f161..9e1ddee 100644
--- a/runtime/vm/signal_handler_fuchsia.cc
+++ b/runtime/vm/signal_handler_fuchsia.cc
@@ -36,7 +36,7 @@
   return 0;
 }
 
-void SignalHandler::InstallImpl(SignalAction action) {
+void SignalHandler::Install(SignalAction action) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/signal_handler_linux.cc b/runtime/vm/signal_handler_linux.cc
index ae75730..1979da4 100644
--- a/runtime/vm/signal_handler_linux.cc
+++ b/runtime/vm/signal_handler_linux.cc
@@ -94,7 +94,7 @@
   return lr;
 }
 
-void SignalHandler::InstallImpl(SignalAction action) {
+void SignalHandler::Install(SignalAction action) {
   struct sigaction act = {};
   act.sa_handler = NULL;
   act.sa_sigaction = action;
diff --git a/runtime/vm/signal_handler_macos.cc b/runtime/vm/signal_handler_macos.cc
index 71ad84f..70e5319 100644
--- a/runtime/vm/signal_handler_macos.cc
+++ b/runtime/vm/signal_handler_macos.cc
@@ -90,7 +90,7 @@
   return lr;
 }
 
-void SignalHandler::InstallImpl(SignalAction action) {
+void SignalHandler::Install(SignalAction action) {
   struct sigaction act = {};
   act.sa_handler = NULL;
   act.sa_sigaction = action;
diff --git a/runtime/vm/signal_handler_win.cc b/runtime/vm/signal_handler_win.cc
index 254164c..4463eb9 100644
--- a/runtime/vm/signal_handler_win.cc
+++ b/runtime/vm/signal_handler_win.cc
@@ -33,7 +33,7 @@
   return 0;
 }
 
-void SignalHandler::InstallImpl(SignalAction action) {
+void SignalHandler::Install(SignalAction action) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 8affadb..d42c2da 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -129,8 +129,8 @@
   // Write snapshot with object content.
   const Object& null_object = Object::Handle();
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, null_object, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   null_object, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   const Object& serialized_object =
@@ -151,8 +151,8 @@
   // Write snapshot with object content.
   const Smi& smi = Smi::Handle(Smi::New(124));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, smi, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false, smi,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   const Object& serialized_object =
@@ -174,8 +174,8 @@
   // Write snapshot with object content.
   const Smi& smi = Smi::Handle(Smi::New(-1));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, smi, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false, smi,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   const Object& serialized_object =
@@ -194,8 +194,8 @@
 Dart_CObject* SerializeAndDeserializeMint(Zone* zone, const Mint& mint) {
   // Write snapshot with object content.
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, mint, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false, mint,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   {
     // Switch to a regular zone, where VM handle allocation is allowed.
@@ -265,8 +265,8 @@
   // Write snapshot with object content.
   const Double& dbl = Double::Handle(Double::New(101.29));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, dbl, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false, dbl,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   const Object& serialized_object =
@@ -288,7 +288,7 @@
   // Write snapshot with true object.
   const Bool& bl = Bool::True();
   std::unique_ptr<Message> message = WriteMessage(
-      /* can_send_any_object */ true, bl, ILLEGAL_PORT,
+      /* can_send_any_object */ true, /* same_group */ false, bl, ILLEGAL_PORT,
       Message::kNormalPriority);
 
   // Read object back from the snapshot.
@@ -313,7 +313,7 @@
   // Write snapshot with false object.
   const Bool& bl = Bool::False();
   std::unique_ptr<Message> message = WriteMessage(
-      /* can_send_any_object */ true, bl, ILLEGAL_PORT,
+      /* can_send_any_object */ true, /* same_group */ false, bl, ILLEGAL_PORT,
       Message::kNormalPriority);
 
   // Read object back from the snapshot.
@@ -334,8 +334,8 @@
   // Write snapshot with object content.
   const Capability& capability = Capability::Handle(Capability::New(12345));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, capability, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   capability, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   Capability& obj = Capability::Handle();
@@ -357,8 +357,8 @@
   {                                                                            \
     const Object& before = Object::Handle(object);                             \
     std::unique_ptr<Message> message =                                         \
-        WriteMessage(/* can_send_any_object */ true, before, ILLEGAL_PORT,     \
-                     Message::kNormalPriority);                                \
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,   \
+                     before, ILLEGAL_PORT, Message::kNormalPriority);          \
     const Object& after = Object::Handle(ReadMessage(thread, message.get()));  \
     EXPECT(before.ptr() == after.ptr());                                       \
   }
@@ -384,8 +384,8 @@
   // Write snapshot with object content.
   String& str = String::Handle(String::New(cstr));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, str, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false, str,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   String& serialized_str = String::Handle();
@@ -425,8 +425,8 @@
     array.SetAt(i, smi);
   }
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, array, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   array, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   Array& serialized_array = Array::Handle();
@@ -458,8 +458,8 @@
     array.SetAt(i, smi);
   }
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, array, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   array, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   Array& serialized_array = Array::Handle();
@@ -537,8 +537,8 @@
   const int kArrayLength = 0;
   Array& array = Array::Handle(Array::New(kArrayLength));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, array, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   array, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   Array& serialized_array = Array::Handle();
@@ -563,8 +563,8 @@
     typed_data.SetUint8(i, i);
   }
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, typed_data, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   typed_data, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   TypedData& serialized_typed_data = TypedData::Handle();
@@ -593,8 +593,8 @@
       array.Set##darttype((i * scale), i);                                     \
     }                                                                          \
     std::unique_ptr<Message> message =                                         \
-        WriteMessage(/* can_send_any_object */ true, array, ILLEGAL_PORT,      \
-                     Message::kNormalPriority);                                \
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,   \
+                     array, ILLEGAL_PORT, Message::kNormalPriority);           \
     TypedData& serialized_array = TypedData::Handle();                         \
     serialized_array ^= ReadMessage(thread, message.get());                    \
     for (int i = 0; i < kArrayLength; i++) {                                   \
@@ -613,8 +613,8 @@
                                reinterpret_cast<uint8_t*>(data), length));     \
     intptr_t scale = array.ElementSizeInBytes();                               \
     std::unique_ptr<Message> message =                                         \
-        WriteMessage(/* can_send_any_object */ true, array, ILLEGAL_PORT,      \
-                     Message::kNormalPriority);                                \
+        WriteMessage(/* can_send_any_object */ true, /* same_group */ false,   \
+                     array, ILLEGAL_PORT, Message::kNormalPriority);           \
     ExternalTypedData& serialized_array = ExternalTypedData::Handle();         \
     serialized_array ^= ReadMessage(thread, message.get());                    \
     for (int i = 0; i < length; i++) {                                         \
@@ -655,8 +655,8 @@
   TypedData& typed_data = TypedData::Handle(
       TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength));
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ true, typed_data, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ true, /* same_group */ false,
+                   typed_data, ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot.
   TypedData& serialized_typed_data = TypedData::Handle();
@@ -772,8 +772,8 @@
   Object& obj = Object::Handle(Api::UnwrapHandle(result));
 
   // Serialize the object into a message.
-  return WriteMessage(/* can_send_any_object */ false, obj, ILLEGAL_PORT,
-                      Message::kNormalPriority);
+  return WriteMessage(/* can_send_any_object */ false, /* same_group */ false,
+                      obj, ILLEGAL_PORT, Message::kNormalPriority);
 }
 
 static void CheckString(Dart_Handle dart_string, const char* expected) {
@@ -781,8 +781,8 @@
   String& str = String::Handle();
   str ^= Api::UnwrapHandle(dart_string);
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ false, str, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ false, /* same_group */ false, str,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot into a C structure.
   ApiNativeScope scope;
@@ -798,8 +798,8 @@
   String& str = String::Handle();
   str ^= Api::UnwrapHandle(dart_string);
   std::unique_ptr<Message> message =
-      WriteMessage(/* can_send_any_object */ false, str, ILLEGAL_PORT,
-                   Message::kNormalPriority);
+      WriteMessage(/* can_send_any_object */ false, /* same_group */ false, str,
+                   ILLEGAL_PORT, Message::kNormalPriority);
 
   // Read object back from the snapshot into a C structure.
   ApiNativeScope scope;
@@ -902,8 +902,8 @@
       Smi& smi = Smi::Handle();
       smi ^= Api::UnwrapHandle(smi_result);
       std::unique_ptr<Message> message =
-          WriteMessage(/* can_send_any_object */ false, smi, ILLEGAL_PORT,
-                       Message::kNormalPriority);
+          WriteMessage(/* can_send_any_object */ false, /* same_group */ false,
+                       smi, ILLEGAL_PORT, Message::kNormalPriority);
 
       // Read object back from the snapshot into a C structure.
       ApiNativeScope scope;
@@ -1776,13 +1776,13 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},       {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 512},      {Dart_TypedData_kUint16, 512},
-          {Dart_TypedData_kInt32, 1024},     {Dart_TypedData_kUint32, 1024},
-          {Dart_TypedData_kInt64, 2048},     {Dart_TypedData_kUint64, 2048},
-          {Dart_TypedData_kFloat32, 1024},   {Dart_TypedData_kFloat64, 2048},
-          {Dart_TypedData_kInt32x4, 4096},   {Dart_TypedData_kFloat32x4, 4096},
-          {Dart_TypedData_kFloat64x2, 4096}, {Dart_TypedData_kInvalid, -1}};
+          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
+          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
+          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
+          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
+          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
+          {Dart_TypedData_kFloat64x2, 256}, {Dart_TypedData_kInvalid, -1}};
 
       int i = 0;
       while (expected[i].type != Dart_TypedData_kInvalid) {
@@ -1804,31 +1804,31 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},       {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 512},      {Dart_TypedData_kUint16, 512},
-          {Dart_TypedData_kInt32, 1024},     {Dart_TypedData_kUint32, 1024},
-          {Dart_TypedData_kInt64, 2048},     {Dart_TypedData_kUint64, 2048},
-          {Dart_TypedData_kFloat32, 1024},   {Dart_TypedData_kFloat64, 2048},
-          {Dart_TypedData_kInt32x4, 4096},   {Dart_TypedData_kFloat32x4, 4096},
-          {Dart_TypedData_kFloat64x2, 4096},
+          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
+          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
+          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
+          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
+          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
+          {Dart_TypedData_kFloat64x2, 256},
 
-          {Dart_TypedData_kInt8, 512},       {Dart_TypedData_kUint8, 512},
-          {Dart_TypedData_kInt8, 1024},      {Dart_TypedData_kUint8, 1024},
-          {Dart_TypedData_kInt8, 2048},      {Dart_TypedData_kUint8, 2048},
-          {Dart_TypedData_kInt8, 1024},      {Dart_TypedData_kUint8, 1024},
-          {Dart_TypedData_kInt8, 2048},      {Dart_TypedData_kUint8, 2048},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 512},      {Dart_TypedData_kUint8, 512},
+          {Dart_TypedData_kInt8, 1024},     {Dart_TypedData_kUint8, 1024},
+          {Dart_TypedData_kInt8, 2048},     {Dart_TypedData_kUint8, 2048},
+          {Dart_TypedData_kInt8, 1024},     {Dart_TypedData_kUint8, 1024},
+          {Dart_TypedData_kInt8, 2048},     {Dart_TypedData_kUint8, 2048},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
 
-          {Dart_TypedData_kInt16, 256},      {Dart_TypedData_kUint16, 256},
-          {Dart_TypedData_kInt16, 1024},     {Dart_TypedData_kUint16, 1024},
-          {Dart_TypedData_kInt16, 2048},     {Dart_TypedData_kUint16, 2048},
-          {Dart_TypedData_kInt16, 1024},     {Dart_TypedData_kUint16, 1024},
-          {Dart_TypedData_kInt16, 2048},     {Dart_TypedData_kUint16, 2048},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
+          {Dart_TypedData_kInt16, 128},     {Dart_TypedData_kUint16, 128},
+          {Dart_TypedData_kInt16, 512},     {Dart_TypedData_kUint16, 512},
+          {Dart_TypedData_kInt16, 1024},    {Dart_TypedData_kUint16, 1024},
+          {Dart_TypedData_kInt16, 512},     {Dart_TypedData_kUint16, 512},
+          {Dart_TypedData_kInt16, 1024},    {Dart_TypedData_kUint16, 1024},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
 
           {Dart_TypedData_kInvalid, -1}};
 
@@ -1852,13 +1852,13 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
-          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
-          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
-          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
-          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
-          {Dart_TypedData_kFloat64x2, 256}, {Dart_TypedData_kInvalid, -1}};
+          {Dart_TypedData_kInt8, 256},     {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 128},    {Dart_TypedData_kUint16, 128},
+          {Dart_TypedData_kInt32, 64},     {Dart_TypedData_kUint32, 64},
+          {Dart_TypedData_kInt64, 32},     {Dart_TypedData_kUint64, 32},
+          {Dart_TypedData_kFloat32, 64},   {Dart_TypedData_kFloat64, 32},
+          {Dart_TypedData_kInt32x4, 16},   {Dart_TypedData_kFloat32x4, 16},
+          {Dart_TypedData_kFloat64x2, 16}, {Dart_TypedData_kInvalid, -1}};
 
       int i = 0;
       while (expected[i].type != Dart_TypedData_kInvalid) {
diff --git a/runtime/vm/source_report.cc b/runtime/vm/source_report.cc
index f999c81..f72a72e 100644
--- a/runtime/vm/source_report.cc
+++ b/runtime/vm/source_report.cc
@@ -22,14 +22,16 @@
 const char* SourceReport::kPossibleBreakpointsStr = "PossibleBreakpoints";
 const char* SourceReport::kProfileStr = "_Profile";
 
-SourceReport::SourceReport(intptr_t report_set, CompileMode compile_mode)
+SourceReport::SourceReport(intptr_t report_set,
+                           CompileMode compile_mode,
+                           bool report_lines)
     : report_set_(report_set),
       compile_mode_(compile_mode),
+      report_lines_(report_lines),
       thread_(NULL),
       script_(NULL),
       start_pos_(TokenPosition::kMinSource),
       end_pos_(TokenPosition::kMaxSource),
-      profile_(Isolate::Current()),
       next_script_index_(0) {}
 
 SourceReport::~SourceReport() {
@@ -219,6 +221,17 @@
   }
 }
 
+intptr_t SourceReport::GetTokenPosOrLine(const Script& script,
+                                         const TokenPosition& token_pos) {
+  if (!report_lines_) {
+    return token_pos.Pos();
+  }
+  intptr_t line = -1;
+  const bool found = script.GetTokenLocation(token_pos, &line);
+  ASSERT(found);
+  return line;
+}
+
 void SourceReport::PrintCoverageData(JSONObject* jsobj,
                                      const Function& function,
                                      const Code& code) {
@@ -231,6 +244,7 @@
   function.RestoreICDataMap(ic_data_array, false /* clone ic-data */);
   const PcDescriptors& descriptors =
       PcDescriptors::Handle(zone(), code.pc_descriptors());
+  const Script& script = Script::Handle(zone(), function.script());
 
   const int kCoverageNone = 0;
   const int kCoverageMiss = 1;
@@ -277,20 +291,24 @@
   JSONObject cov(jsobj, "coverage");
   {
     JSONArray hits(&cov, "hits");
+    TokenPosition pos = begin_pos;
     for (int i = 0; i < func_length; i++) {
       if (coverage[i] == kCoverageHit) {
-        // Add the token position of the hit.
-        hits.AddValue(begin_pos.Pos() + i);
+        // Add the token position or line number of the hit.
+        hits.AddValue(GetTokenPosOrLine(script, pos));
       }
+      pos = pos.Next();
     }
   }
   {
     JSONArray misses(&cov, "misses");
+    TokenPosition pos = begin_pos;
     for (int i = 0; i < func_length; i++) {
       if (coverage[i] == kCoverageMiss) {
-        // Add the token position of the miss.
-        misses.AddValue(begin_pos.Pos() + i);
+        // Add the token position or line number of the miss.
+        misses.AddValue(GetTokenPosOrLine(script, pos));
       }
+      pos = pos.Next();
     }
   }
 }
@@ -312,6 +330,7 @@
 
   const PcDescriptors& descriptors =
       PcDescriptors::Handle(zone(), code.pc_descriptors());
+  const Script& script = Script::Handle(zone(), func.script());
 
   PcDescriptors::Iterator iter(descriptors, kSafepointKind);
   while (iter.MoveNext()) {
@@ -325,11 +344,13 @@
   }
 
   JSONArray bpts(jsobj, "possibleBreakpoints");
+  TokenPosition pos = begin_pos;
   for (int i = 0; i < func_length; i++) {
     if (possible.Contains(i)) {
-      // Add the token position.
-      bpts.AddValue(begin_pos.Pos() + i);
+      // Add the token position or line number.
+      bpts.AddValue(GetTokenPosOrLine(script, pos));
     }
+    pos = pos.Next();
   }
 }
 
@@ -653,7 +674,7 @@
         JSONObject cov(&range, "coverage");
         {
           JSONArray hits(&cov, "hits");
-          hits.AddValue(begin_pos);
+          hits.AddValue(GetTokenPosOrLine(scriptRef, begin_pos));
         }
         {
           JSONArray misses(&cov, "misses");
diff --git a/runtime/vm/source_report.h b/runtime/vm/source_report.h
index a7acf00..070ca0a 100644
--- a/runtime/vm/source_report.h
+++ b/runtime/vm/source_report.h
@@ -38,7 +38,9 @@
 
   // report_set is a bitvector indicating which reports to generate
   // (e.g. kCallSites | kCoverage).
-  explicit SourceReport(intptr_t report_set, CompileMode compile = kNoCompile);
+  explicit SourceReport(intptr_t report_set,
+                        CompileMode compile = kNoCompile,
+                        bool report_lines = false);
   ~SourceReport();
 
   // Generate a source report for (some subrange of) a script.
@@ -66,6 +68,8 @@
   bool ShouldSkipField(const Field& field);
   intptr_t GetScriptIndex(const Script& script);
   bool ScriptIsLoadedByLibrary(const Script& script, const Library& lib);
+  intptr_t GetTokenPosOrLine(const Script& script,
+                             const TokenPosition& token_pos);
 
   void PrintCallSitesData(JSONObject* jsobj,
                           const Function& func,
@@ -126,6 +130,7 @@
 
   intptr_t report_set_;
   CompileMode compile_mode_;
+  bool report_lines_;
   Thread* thread_;
   const Script* script_;
   TokenPosition start_pos_;
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index e9fc6f7..2e35cce 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -162,24 +162,12 @@
 const char* StackFrame::ToCString() const {
   ASSERT(thread_ == Thread::Current());
   Zone* zone = Thread::Current()->zone();
-  if (IsDartFrame()) {
-    const Code& code = Code::Handle(zone, LookupDartCode());
-    ASSERT(!code.IsNull());
-    const auto& owner = Object::Handle(
-        zone, WeakSerializationReference::UnwrapIfTarget(code.owner()));
-    ASSERT(!owner.IsNull());
-    auto const opt = code.IsFunctionCode() && code.is_optimized() ? "*" : "";
-    auto const owner_name =
-        owner.IsFunction() ? Function::Cast(owner).ToFullyQualifiedCString()
-                           : owner.ToCString();
-    return zone->PrintToString("[%-8s : sp(%#" Px ") fp(%#" Px ") pc(%#" Px
-                               ") %s%s ]",
-                               GetName(), sp(), fp(), pc(), opt, owner_name);
-  } else {
-    return zone->PrintToString("[%-8s : sp(%#" Px ") fp(%#" Px ") pc(%#" Px
-                               ")]",
-                               GetName(), sp(), fp(), pc());
-  }
+  const Code& code = Code::Handle(zone, GetCodeObject());
+  ASSERT(!code.IsNull());
+  const char* name =
+      code.QualifiedName(NameFormattingParams(Object::kInternalName));
+  return zone->PrintToString("  pc 0x%" Pp " fp 0x%" Pp " sp 0x%" Pp " %s",
+                             pc(), fp(), sp(), name);
 }
 
 void ExitFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 8a54e72..90576ec 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -22,7 +22,6 @@
 
 namespace dart {
 
-DEFINE_FLAG(bool, disassemble_stubs, false, "Disassemble generated stubs.");
 DECLARE_FLAG(bool, precompiled_mode);
 
 StubCode::StubCodeEntry StubCode::entries_[kNumStubEntries] = {
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index 3eac0b6..66d5212e 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -22,8 +22,6 @@
 class Isolate;
 class ObjectPointerVisitor;
 
-DECLARE_FLAG(bool, disassemble_stubs);
-
 // Is it permitted for the stubs above to refer to Object::null(), which is
 // allocated in the VM isolate and shared across all isolates.
 // However, in cases where a simple GC-safe placeholder is needed on the stack,
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index e63fdd4..64b36a9 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -56,6 +56,7 @@
   V(AllocateObjectParameterized)                                               \
   V(AllocateObjectSlow)                                                        \
   V(AllocateUnhandledException)                                                \
+  V(BoxDouble)                                                                 \
   V(CloneContext)                                                              \
   V(CallToRuntime)                                                             \
   V(LazyCompile)                                                               \
@@ -119,6 +120,7 @@
   V(RangeErrorSharedWithoutFPURegs)                                            \
   V(StackOverflowSharedWithFPURegs)                                            \
   V(StackOverflowSharedWithoutFPURegs)                                         \
+  V(DoubleToInteger)                                                           \
   V(OneArgCheckInlineCacheWithExactnessCheck)                                  \
   V(OneArgOptimizedCheckInlineCacheWithExactnessCheck)                         \
   V(EnterSafepoint)                                                            \
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 76d0070..f5cc31c 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -61,7 +61,6 @@
   V(DartCore, "dart:core")                                                     \
   V(DartDeveloper, "dart:developer")                                           \
   V(DartDeveloperTimeline, "dart.developer.timeline")                          \
-  V(DartExtensionScheme, "dart-ext:")                                          \
   V(DartFfi, "dart:ffi")                                                       \
   V(DartInternal, "dart:_internal")                                            \
   V(DartIsVM, "dart.isVM")                                                     \
@@ -415,7 +414,6 @@
   V(_objectNoSuchMethod, "_objectNoSuchMethod")                                \
   V(_objectToString, "_objectToString")                                        \
   V(_onData, "_onData")                                                        \
-  V(_rehash, "_rehash")                                                        \
   V(_rehashObjects, "_rehashObjects")                                          \
   V(_resultOrListeners, "_resultOrListeners")                                  \
   V(_runExtension, "_runExtension")                                            \
diff --git a/runtime/vm/tagged_pointer.h b/runtime/vm/tagged_pointer.h
index ffd7d32..19444ff 100644
--- a/runtime/vm/tagged_pointer.h
+++ b/runtime/vm/tagged_pointer.h
@@ -109,7 +109,7 @@
   bool IsStringInstance() const { return IsStringClassId(GetClassId()); }
   bool IsRawNull() const { return GetClassId() == kNullCid; }
   bool IsDartInstance() const {
-    return (!IsHeapObject() || (GetClassId() >= kInstanceCid));
+    return (!IsHeapObject() || !IsInternalOnlyClassId(GetClassId()));
   }
   bool IsFreeListElement() const {
     return ((GetClassId() == kFreeListElement));
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 09a3b25..fc74cf2 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -73,6 +73,7 @@
       marking_stack_block_(NULL),
       vm_tag_(0),
       unboxed_int64_runtime_arg_(0),
+      unboxed_double_runtime_arg_(0.0),
       active_exception_(Object::null()),
       active_stacktrace_(Object::null()),
       global_object_pool_(ObjectPool::null()),
@@ -450,11 +451,15 @@
     }
 
 #if !defined(PRODUCT)
-    // Processes completed SampleBlocks and sends CPU sample events over the
-    // service protocol when applicable.
-    SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
-    if (sample_buffer != nullptr && sample_buffer->process_blocks()) {
-      sample_buffer->ProcessCompletedBlocks();
+    // Don't block system isolates to process CPU samples to avoid blocking
+    // them during critical tasks (e.g., initial compilation).
+    if (!Isolate::IsSystemIsolate(isolate())) {
+      // Processes completed SampleBlocks and sends CPU sample events over the
+      // service protocol when applicable.
+      SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
+      if (sample_buffer != nullptr && sample_buffer->process_blocks()) {
+        sample_buffer->ProcessCompletedBlocks();
+      }
     }
 #endif  // !defined(PRODUCT)
   }
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 6e3ff67..8c2aea4 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -273,6 +273,7 @@
     kSweeperTask = 0x8,
     kCompactorTask = 0x10,
     kScavengerTask = 0x20,
+    kSampleBlockTask = 0x40,
   };
   // Converts a TaskKind to its corresponding C-String name.
   static const char* TaskKindToCString(TaskKind kind);
@@ -688,6 +689,15 @@
   static intptr_t unboxed_int64_runtime_arg_offset() {
     return OFFSET_OF(Thread, unboxed_int64_runtime_arg_);
   }
+  double unboxed_double_runtime_arg() const {
+    return unboxed_double_runtime_arg_;
+  }
+  void set_unboxed_double_runtime_arg(double value) {
+    unboxed_double_runtime_arg_ = value;
+  }
+  static intptr_t unboxed_double_runtime_arg_offset() {
+    return OFFSET_OF(Thread, unboxed_double_runtime_arg_);
+  }
 
   GrowableObjectArrayPtr pending_functions();
   void clear_pending_functions();
@@ -1049,11 +1059,12 @@
   MarkingStackBlock* marking_stack_block_;
   MarkingStackBlock* deferred_marking_stack_block_;
   uword volatile vm_tag_;
-  // Memory location dedicated for passing unboxed int64 values from
-  // generated code to runtime.
+  // Memory locations dedicated for passing unboxed int64 and double
+  // values from generated code to runtime.
   // TODO(dartbug.com/33549): Clean this up when unboxed values
   // could be passed as arguments.
   ALIGN8 int64_t unboxed_int64_runtime_arg_;
+  ALIGN8 double unboxed_double_runtime_arg_;
 
 // State that is cached in the TLS for fast access in generated code.
 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value)      \
diff --git a/runtime/vm/thread_interrupter.h b/runtime/vm/thread_interrupter.h
index 954a174..c5d770e 100644
--- a/runtime/vm/thread_interrupter.h
+++ b/runtime/vm/thread_interrupter.h
@@ -120,9 +120,9 @@
     intptr_t old_value = sample_buffer_lock_.load(std::memory_order_relaxed);
     intptr_t new_value;
     do {
-      if (old_value > 0) {
+      while (old_value > 0) {
+        // Spin waiting for outstanding SIGPROFs to complete.
         old_value = sample_buffer_lock_.load(std::memory_order_relaxed);
-        continue;  // Spin waiting for outstanding SIGPROFs to complete.
       }
       new_value = old_value - 1;
     } while (!sample_buffer_lock_.compare_exchange_weak(
diff --git a/runtime/vm/thread_interrupter_android.cc b/runtime/vm/thread_interrupter_android.cc
index 367fa41..dbdd331 100644
--- a/runtime/vm/thread_interrupter_android.cc
+++ b/runtime/vm/thread_interrupter_android.cc
@@ -18,36 +18,48 @@
 
 #ifndef PRODUCT
 
+// Old linux kernels on ARM might require a trampoline to
+// work around incorrect Thumb -> ARM transitions.
+// See thread_interrupted_android_arm.S for more details.
+#if defined(HOST_ARCH_ARM) &&                                                  \
+    (defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_ANDROID)) &&          \
+    !defined(__thumb__)
+#define USE_SIGNAL_HANDLER_TRAMPOLINE
+#endif
+
 DECLARE_FLAG(bool, trace_thread_interrupter);
 
-class ThreadInterrupterAndroid : public AllStatic {
- 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);
+namespace {
+#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
+extern "C" {
+#endif
+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);
+}
+#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
+}  // extern "C"
+#endif
+}  // namespace
 
 bool ThreadInterrupter::IsDebuggerAttached() {
   return false;
@@ -62,9 +74,19 @@
   ASSERT((result == 0) || (result == ESRCH));
 }
 
+#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
+// Defined in thread_interrupted_android_arm.S
+extern "C" void ThreadInterruptSignalHandlerTrampoline(int signal,
+                                                       siginfo_t* info,
+                                                       void* context_);
+#endif
+
 void ThreadInterrupter::InstallSignalHandler() {
-  SignalHandler::Install<
-      ThreadInterrupterAndroid::ThreadInterruptSignalHandler>();
+#if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
+  SignalHandler::Install(&ThreadInterruptSignalHandlerTrampoline);
+#else
+  SignalHandler::Install(&ThreadInterruptSignalHandler);
+#endif
 }
 
 void ThreadInterrupter::RemoveSignalHandler() {
diff --git a/runtime/vm/thread_interrupter_android_arm.S b/runtime/vm/thread_interrupter_android_arm.S
new file mode 100644
index 0000000..7c4a200
--- /dev/null
+++ b/runtime/vm/thread_interrupter_android_arm.S
@@ -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.
+
+// Work around for a bug in old kernels (only fixed in 3.18 Android kernel):
+//
+// Kernel does not clear If-Then execution state bits when entering ARM signal
+// handler which violates requirements imposed by ARM architecture reference.
+// Some CPUs look at these bits even while in ARM mode which causes them
+// to skip some instructions in the prologue of the signal handler.
+//
+// To work around the issue we insert enough NOPs in the prologue to ensure
+// that no actual instructions are skipped and then branch to the actual
+// signal handler.
+//
+// For the kernel patch that fixes the issue see:
+// http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6ecf830e5029598732e04067e325d946097519cb
+//
+
+// Note: can't use DART_* defines here because this file does not include
+// globals.h.
+#if !defined(PRODUCT) && defined(__ARMEL__) && defined(__ANDROID__) &&         \
+    !defined(__thumb__)
+
+.text
+
+.globl ThreadInterruptSignalHandlerTrampoline
+.hidden ThreadInterruptSignalHandlerTrampoline
+.type ThreadInterruptSignalHandlerTrampoline, %function
+ThreadInterruptSignalHandlerTrampoline:
+  // IT (If-Then) instruction makes up to four instructions that follow it
+  // conditional.
+  nop
+  nop
+  nop
+  nop
+  // Tail-call the actual handler.
+  // Note: no need to use interworking because we know that we are not
+  // compiling for Thumb.
+  b ThreadInterruptSignalHandler
+.size ThreadInterruptSignalHandlerTrampoline,.-ThreadInterruptSignalHandlerTrampoline
+
+#endif
diff --git a/runtime/vm/thread_interrupter_linux.cc b/runtime/vm/thread_interrupter_linux.cc
index 300a3dd..ee623db 100644
--- a/runtime/vm/thread_interrupter_linux.cc
+++ b/runtime/vm/thread_interrupter_linux.cc
@@ -62,8 +62,7 @@
 }
 
 void ThreadInterrupter::InstallSignalHandler() {
-  SignalHandler::Install<
-      ThreadInterrupterLinux::ThreadInterruptSignalHandler>();
+  SignalHandler::Install(&ThreadInterrupterLinux::ThreadInterruptSignalHandler);
 }
 
 void ThreadInterrupter::RemoveSignalHandler() {
diff --git a/runtime/vm/thread_interrupter_macos.cc b/runtime/vm/thread_interrupter_macos.cc
index bc81f93..ba9ce5a 100644
--- a/runtime/vm/thread_interrupter_macos.cc
+++ b/runtime/vm/thread_interrupter_macos.cc
@@ -83,8 +83,7 @@
 }
 
 void ThreadInterrupter::InstallSignalHandler() {
-  SignalHandler::Install<
-      ThreadInterrupterMacOS::ThreadInterruptSignalHandler>();
+  SignalHandler::Install(&ThreadInterrupterMacOS::ThreadInterruptSignalHandler);
 }
 
 void ThreadInterrupter::RemoveSignalHandler() {
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index e57fa3b..9c14b8b 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -1052,6 +1052,7 @@
   Dart_FileWriteCallback file_write = Dart::file_write_callback();
   Dart_FileCloseCallback file_close = Dart::file_close_callback();
   if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) {
+    OS::PrintErr("warning: Could not access file callbacks.");
     return;
   }
 
@@ -1062,7 +1063,7 @@
       OS::SCreate(NULL, "%s/dart-timeline-%" Pd ".json", directory, pid);
   void* file = (*file_open)(filename, true);
   if (file == NULL) {
-    OS::PrintErr("Failed to write timeline file: %s\n", filename);
+    OS::PrintErr("warning: Failed to write timeline file: %s\n", filename);
     free(filename);
     return;
   }
@@ -1516,44 +1517,6 @@
 #endif
 }
 
-TimelineEventBlockIterator::TimelineEventBlockIterator(
-    TimelineEventRecorder* recorder)
-    : current_(NULL), recorder_(NULL) {
-  Reset(recorder);
-}
-
-TimelineEventBlockIterator::~TimelineEventBlockIterator() {
-  Reset(NULL);
-}
-
-void TimelineEventBlockIterator::Reset(TimelineEventRecorder* recorder) {
-  // Clear current.
-  current_ = NULL;
-  if (recorder_ != NULL) {
-    // Unlock old recorder.
-    recorder_->lock_.Unlock();
-  }
-  recorder_ = recorder;
-  if (recorder_ == NULL) {
-    return;
-  }
-  // Lock new recorder.
-  recorder_->lock_.Lock();
-  // Queue up first block.
-  current_ = recorder_->GetHeadBlockLocked();
-}
-
-bool TimelineEventBlockIterator::HasNext() const {
-  return current_ != NULL;
-}
-
-TimelineEventBlock* TimelineEventBlockIterator::Next() {
-  ASSERT(current_ != NULL);
-  TimelineEventBlock* r = current_;
-  current_ = current_->next();
-  return r;
-}
-
 void DartTimelineEventHelpers::ReportTaskEvent(Thread* thread,
                                                TimelineEvent* event,
                                                int64_t id,
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 69302aa..b6d1908 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -757,7 +757,6 @@
   int64_t time_high_micros_;
 
   friend class TimelineEvent;
-  friend class TimelineEventBlockIterator;
   friend class TimelineStream;
   friend class TimelineTestHelper;
   friend class Timeline;
@@ -887,25 +886,6 @@
   friend class TimelineTestHelper;
 };
 
-// An iterator for blocks.
-class TimelineEventBlockIterator {
- public:
-  explicit TimelineEventBlockIterator(TimelineEventRecorder* recorder);
-  ~TimelineEventBlockIterator();
-
-  void Reset(TimelineEventRecorder* recorder);
-
-  // Returns false when there are no more blocks.
-  bool HasNext() const;
-
-  // Returns the next block and moves forward.
-  TimelineEventBlock* Next();
-
- private:
-  TimelineEventBlock* current_;
-  TimelineEventRecorder* recorder_;
-};
-
 // The TimelineEventPlatformRecorder records timeline events to a platform
 // specific destination. It's implementation is in the timeline_{linux,...}.cc
 // files.
diff --git a/runtime/vm/type_testing_stubs.cc b/runtime/vm/type_testing_stubs.cc
index 28b108b..a7de67d 100644
--- a/runtime/vm/type_testing_stubs.cc
+++ b/runtime/vm/type_testing_stubs.cc
@@ -5,6 +5,7 @@
 #include <functional>
 
 #include "vm/compiler/assembler/disassembler.h"
+#include "vm/hash_map.h"
 #include "vm/longjump.h"
 #include "vm/object_store.h"
 #include "vm/stub_code.h"
@@ -20,8 +21,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, disassemble_stubs);
-
 TypeTestingStubNamer::TypeTestingStubNamer()
     : lib_(Library::Handle()),
       klass_(Class::Handle()),
@@ -146,13 +145,11 @@
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-void TypeTestingStubGenerator::SpecializeStubFor(Thread* thread,
-                                                 const AbstractType& type) {
+CodePtr TypeTestingStubGenerator::SpecializeStubFor(Thread* thread,
+                                                    const AbstractType& type) {
   HierarchyInfo hi(thread);
   TypeTestingStubGenerator generator;
-  const Code& code =
-      Code::Handle(thread->zone(), generator.OptimizedCodeForType(type));
-  type.SetTypeTestingStub(code);
+  return generator.OptimizedCodeForType(type);
 }
 #endif
 
@@ -310,6 +307,18 @@
   return code.ptr();
 }
 
+void TypeTestingStubGenerator::BuildOptimizedTypeTestStub(
+    compiler::Assembler* assembler,
+    compiler::UnresolvedPcRelativeCalls* unresolved_calls,
+    const Code& slow_type_test_stub,
+    HierarchyInfo* hi,
+    const Type& type,
+    const Class& type_class) {
+  BuildOptimizedTypeTestStubFastCases(assembler, hi, type, type_class);
+  __ Jump(compiler::Address(
+      THR, compiler::target::Thread::slow_type_test_entry_point_offset()));
+}
+
 void TypeTestingStubGenerator::BuildOptimizedTypeTestStubFastCases(
     compiler::Assembler* assembler,
     HierarchyInfo* hi,
@@ -318,28 +327,24 @@
   // These are handled via the TopTypeTypeTestStub!
   ASSERT(!type.IsTopTypeForSubtyping());
 
+  if (type.IsObjectType()) {
+    ASSERT(type.IsNonNullable() &&
+           IsolateGroup::Current()->use_strict_null_safety_checks());
+    compiler::Label is_null;
+    __ CompareObject(TypeTestABI::kInstanceReg, Object::null_object());
+    __ BranchIf(EQUAL, &is_null, compiler::Assembler::kNearJump);
+    __ Ret();
+    __ Bind(&is_null);
+    return;  // No further checks needed.
+  }
+
   // Fast case for 'int' and '_Smi' (which can appear in core libraries).
   if (type.IsIntType() || type.IsSmiType()) {
     compiler::Label non_smi_value;
-    __ BranchIfNotSmi(TypeTestABI::kInstanceReg, &non_smi_value);
+    __ BranchIfNotSmi(TypeTestABI::kInstanceReg, &non_smi_value,
+                      compiler::Assembler::kNearJump);
     __ Ret();
     __ Bind(&non_smi_value);
-  } else if (type.IsDartFunctionType()) {
-    compiler::Label continue_checking;
-    __ CompareImmediate(TTSInternalRegs::kScratchReg, kClosureCid);
-    __ BranchIf(NOT_EQUAL, &continue_checking);
-    __ Ret();
-    __ Bind(&continue_checking);
-
-  } else if (type.IsObjectType()) {
-    ASSERT(type.IsNonNullable() &&
-           IsolateGroup::Current()->use_strict_null_safety_checks());
-    compiler::Label continue_checking;
-    __ CompareObject(TypeTestABI::kInstanceReg, Object::null_object());
-    __ BranchIf(EQUAL, &continue_checking);
-    __ Ret();
-    __ Bind(&continue_checking);
-
   } else {
     // TODO(kustermann): Make more fast cases, e.g. Type::Number()
     // is implemented by Smi.
@@ -352,52 +357,226 @@
         /*include_abstract=*/false,
         /*exclude_null=*/!Instance::NullIsAssignableTo(type));
 
-    const Type& smi_type = Type::Handle(Type::SmiType());
-    const bool smi_is_ok = smi_type.IsSubtypeOf(type, Heap::kNew);
-
-    BuildOptimizedSubtypeRangeCheck(assembler, ranges, smi_is_ok);
+    compiler::Label is_subtype, is_not_subtype;
+    const bool smi_is_ok =
+        Type::Handle(Type::SmiType()).IsSubtypeOf(type, Heap::kNew);
+    if (smi_is_ok) {
+      __ LoadClassIdMayBeSmi(TTSInternalRegs::kScratchReg,
+                             TypeTestABI::kInstanceReg);
+    } else {
+      __ BranchIfSmi(TypeTestABI::kInstanceReg, &is_not_subtype);
+      __ LoadClassId(TTSInternalRegs::kScratchReg, TypeTestABI::kInstanceReg);
+    }
+    BuildOptimizedSubtypeRangeCheck(assembler, ranges,
+                                    TTSInternalRegs::kScratchReg, &is_subtype,
+                                    &is_not_subtype);
+    __ Bind(&is_subtype);
+    __ Ret();
+    __ Bind(&is_not_subtype);
   } else {
-    ASSERT(hi->CanUseGenericSubtypeRangeCheckFor(type));
-
-    const intptr_t num_type_arguments = type_class.NumTypeArguments();
-
-    const TypeArguments& ta = TypeArguments::Handle(type.arguments());
-    ASSERT(ta.Length() == num_type_arguments);
-
     BuildOptimizedSubclassRangeCheckWithTypeArguments(assembler, hi, type,
-                                                      type_class, ta);
+                                                      type_class);
   }
 
   if (Instance::NullIsAssignableTo(type)) {
     // Fast case for 'null'.
     compiler::Label non_null;
     __ CompareObject(TypeTestABI::kInstanceReg, Object::null_object());
-    __ BranchIf(NOT_EQUAL, &non_null);
+    __ BranchIf(NOT_EQUAL, &non_null, compiler::Assembler::kNearJump);
     __ Ret();
     __ Bind(&non_null);
   }
 }
 
+static void CommentCheckedClasses(compiler::Assembler* assembler,
+                                  const CidRangeVector& ranges) {
+  if (!assembler->EmittingComments()) return;
+  Thread* const thread = Thread::Current();
+  ClassTable* const class_table = thread->isolate_group()->class_table();
+  Zone* const zone = thread->zone();
+  if (ranges.is_empty()) {
+    __ Comment("No valid cids to check");
+    return;
+  }
+  if ((ranges.length() == 1) && ranges[0].IsSingleCid()) {
+    const auto& cls = Class::Handle(zone, class_table->At(ranges[0].cid_start));
+    __ Comment("Checking for cid %" Pd " (%s)", cls.id(),
+               cls.ScrubbedNameCString());
+    return;
+  }
+  __ Comment("Checking for concrete finalized classes:");
+  auto& cls = Class::Handle(zone);
+  for (const auto& range : ranges) {
+    ASSERT(!range.IsIllegalRange());
+    for (classid_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      // Invalid entries can be included to keep range count low.
+      if (!class_table->HasValidClassAt(cid)) continue;
+      cls = class_table->At(cid);
+      if (cls.is_abstract()) continue;  // Only output concrete classes.
+      __ Comment(" * %" Pd32 " (%s)", cid, cls.ScrubbedNameCString());
+    }
+  }
+}
+
+// Represents the following needs for runtime checks to see if an instance of
+// [cls] is a subtype of [type] that has type class [type_class]:
+//
+// * kCannotBeChecked: Instances of [cls] cannot be checked with any of the
+//   currently implemented runtime checks, so must fall back on the runtime.
+//
+// * kNotSubtype: A [cls] instance is guaranteed to not be a subtype of [type]
+//   regardless of any instance type arguments.
+//
+// * kCidCheckOnly: A [cls] instance is guaranteed to be a subtype of [type]
+//   regardless of any instance type arguments.
+//
+// * kNeedsFinalization: Checking that an instance of [cls] is a subtype of
+//   [type] requires instance type arguments, but [cls] is not finalized, and
+//   so the appropriate type arguments field offset cannot be determined.
+//
+// * kInstanceTypeArgumentsAreSubtypes: [cls] implements a fully uninstantiated
+//   type with type class [type_class] which can be directly instantiated with
+//   the instance type arguments. Thus, each type argument of [type] should be
+//   compared with the corresponding (index-wise) instance type argument.
+enum class CheckType {
+  kCannotBeChecked,
+  kNotSubtype,
+  kCidCheckOnly,
+  kNeedsFinalization,
+  kInstanceTypeArgumentsAreSubtypes,
+};
+
+// Returns a CheckType describing how to check instances of [to_check] as
+// subtypes of [type].
+static CheckType SubtypeChecksForClass(Zone* zone,
+                                       const Type& type,
+                                       const Class& type_class,
+                                       const Class& to_check) {
+  ASSERT_EQUAL(type.type_class_id(), type_class.id());
+  ASSERT(type_class.is_type_finalized());
+  ASSERT(!to_check.is_abstract());
+  ASSERT(to_check.is_type_finalized());
+  ASSERT(AbstractType::Handle(zone, to_check.RareType())
+             .IsSubtypeOf(AbstractType::Handle(zone, type_class.RareType()),
+                          Heap::kNew));
+  if (!type_class.IsGeneric()) {
+    // All instances of [to_check] are subtypes of [type].
+    return CheckType::kCidCheckOnly;
+  }
+  if (to_check.FindInstantiationOf(zone, type_class,
+                                   /*only_super_classes=*/true)) {
+    // No need to check for type argument consistency, as [to_check] is the same
+    // as or a subclass of [type_class].
+    return to_check.is_finalized()
+               ? CheckType::kInstanceTypeArgumentsAreSubtypes
+               : CheckType::kCannotBeChecked;
+  }
+  auto& calculated_type =
+      AbstractType::Handle(zone, to_check.GetInstantiationOf(zone, type_class));
+  if (calculated_type.IsInstantiated()) {
+    if (type.IsInstantiated()) {
+      return calculated_type.IsSubtypeOf(type, Heap::kNew)
+                 ? CheckType::kCidCheckOnly
+                 : CheckType::kNotSubtype;
+    }
+    // TODO(dartbug.com/46920): Requires walking both types, checking
+    // corresponding instantiated parts at compile time (assuming uninstantiated
+    // parts check successfully) and then creating appropriate runtime checks
+    // for uninstantiated parts of [type].
+    return CheckType::kCannotBeChecked;
+  }
+  if (!to_check.is_finalized()) {
+    return CheckType::kNeedsFinalization;
+  }
+  ASSERT(to_check.NumTypeArguments() > 0);
+  ASSERT(compiler::target::Class::TypeArgumentsFieldOffset(to_check) !=
+         compiler::target::Class::kNoTypeArguments);
+  // If the calculated type arguments are a prefix of the declaration type
+  // arguments, then we can just treat the instance type arguments as if they
+  // were used to instantiate the type class during checking.
+  const auto& decl_type_args = TypeArguments::Handle(
+      zone, Type::Handle(zone, to_check.DeclarationType()).arguments());
+  const auto& calculated_type_args =
+      TypeArguments::Handle(zone, calculated_type.arguments());
+  const bool type_args_consistent = calculated_type_args.IsSubvectorEquivalent(
+      decl_type_args, 0, type_class.NumTypeArguments(),
+      TypeEquality::kCanonical);
+  // TODO(dartbug.com/46920): Currently we require subtyping to be checkable
+  // by comparing the instance type arguments against the type arguments of
+  // [type] piecewise, but we could check other cases as well.
+  return type_args_consistent ? CheckType::kInstanceTypeArgumentsAreSubtypes
+                              : CheckType::kCannotBeChecked;
+}
+
+static void CommentSkippedClasses(compiler::Assembler* assembler,
+                                  const Type& type,
+                                  const Class& type_class,
+                                  const CidRangeVector& ranges) {
+  if (!assembler->EmittingComments() || ranges.is_empty()) return;
+  if (ranges.is_empty()) return;
+  ASSERT(type_class.is_implemented());
+  __ Comment("Not checking the following concrete implementors of %s:",
+             type_class.ScrubbedNameCString());
+  Thread* const thread = Thread::Current();
+  auto* const class_table = thread->isolate_group()->class_table();
+  Zone* const zone = thread->zone();
+  auto& cls = Class::Handle(zone);
+  auto& calculated_type = Type::Handle(zone);
+  for (const auto& range : ranges) {
+    ASSERT(!range.IsIllegalRange());
+    for (classid_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      // Invalid entries can be included to keep range count low.
+      if (!class_table->HasValidClassAt(cid)) continue;
+      cls = class_table->At(cid);
+      if (cls.is_abstract()) continue;  // Only output concrete classes.
+      ASSERT(cls.is_type_finalized());
+      TextBuffer buffer(128);
+      buffer.Printf(" * %" Pd32 "(%s): ", cid, cls.ScrubbedNameCString());
+      switch (SubtypeChecksForClass(zone, type, type_class, cls)) {
+        case CheckType::kCannotBeChecked:
+          calculated_type = cls.GetInstantiationOf(zone, type_class);
+          buffer.AddString("cannot check that ");
+          calculated_type.PrintName(Object::kScrubbedName, &buffer);
+          buffer.AddString(" is a subtype of ");
+          type.PrintName(Object::kScrubbedName, &buffer);
+          break;
+        case CheckType::kNotSubtype:
+          calculated_type = cls.GetInstantiationOf(zone, type_class);
+          calculated_type.PrintName(Object::kScrubbedName, &buffer);
+          buffer.AddString(" is not a subtype of ");
+          type.PrintName(Object::kScrubbedName, &buffer);
+          break;
+        case CheckType::kNeedsFinalization:
+          buffer.AddString("is not finalized");
+          break;
+        case CheckType::kInstanceTypeArgumentsAreSubtypes:
+          buffer.AddString("was not finalized during class splitting");
+          break;
+        default:
+          // Either the CheckType was kCidCheckOnly, which should never happen
+          // since it only requires type finalization, or a new CheckType has
+          // been added.
+          UNREACHABLE();
+          break;
+      }
+      __ Comment("%s", buffer.buffer());
+    }
+  }
+}
+
+// Builds a cid range check for the concrete subclasses and implementors of
+// type. Assumes cid to check is already in TTSInternalRegs::kScratchReg. Falls
+// through or jumps to check_succeeded if the range contains the cid, else
+// jumps to check_failed.
 void TypeTestingStubGenerator::BuildOptimizedSubtypeRangeCheck(
     compiler::Assembler* assembler,
     const CidRangeVector& ranges,
-    bool smi_is_ok) {
-  compiler::Label cid_range_failed, is_subtype;
-
-  if (smi_is_ok) {
-    __ LoadClassIdMayBeSmi(TTSInternalRegs::kScratchReg,
-                           TypeTestABI::kInstanceReg);
-  } else {
-    __ BranchIfSmi(TypeTestABI::kInstanceReg, &cid_range_failed);
-    __ LoadClassId(TTSInternalRegs::kScratchReg, TypeTestABI::kInstanceReg);
-  }
-
+    Register class_id_reg,
+    compiler::Label* check_succeeded,
+    compiler::Label* check_failed) {
+  CommentCheckedClasses(assembler, ranges);
   FlowGraphCompiler::GenerateCidRangesCheck(
-      assembler, TTSInternalRegs::kScratchReg, ranges, &is_subtype,
-      &cid_range_failed, true);
-  __ Bind(&is_subtype);
-  __ Ret();
-  __ Bind(&cid_range_failed);
+      assembler, class_id_reg, ranges, check_succeeded, check_failed, true);
 }
 
 void TypeTestingStubGenerator::
@@ -405,73 +584,348 @@
         compiler::Assembler* assembler,
         HierarchyInfo* hi,
         const Type& type,
-        const Class& type_class,
-        const TypeArguments& ta) {
-  // a) First we make a quick sub*class* cid-range check.
+        const Class& type_class) {
+  ASSERT(hi->CanUseGenericSubtypeRangeCheckFor(type));
   compiler::Label check_failed;
-  ASSERT(!type_class.is_implemented());
-  const CidRangeVector& ranges = hi->SubclassRangesForClass(type_class);
-  BuildOptimizedSubclassRangeCheck(assembler, ranges, &check_failed);
-  // fall through to continue
+  // a) First we perform subtype cid-range checks and load the instance type
+  // arguments based on which check succeeded.
+  __ LoadClassIdMayBeSmi(TTSInternalRegs::kScratchReg,
+                         TypeTestABI::kInstanceReg);
+  compiler::Label load_succeeded;
+  if (BuildLoadInstanceTypeArguments(assembler, hi, type, type_class,
+                                     TTSInternalRegs::kScratchReg,
+                                     TTSInternalRegs::kInstanceTypeArgumentsReg,
+                                     &load_succeeded, &check_failed)) {
+    // Only build type argument checking if any checked cid ranges require it.
+    __ Bind(&load_succeeded);
 
-  // b) Then we'll load the values for the type parameters.
-  __ LoadCompressedFieldFromOffset(
-      TTSInternalRegs::kInstanceTypeArgumentsReg, TypeTestABI::kInstanceReg,
-      compiler::target::Class::TypeArgumentsFieldOffset(type_class));
+    // b) We check for "rare" types, where the instance type arguments are null.
+    //
+    // The kernel frontend should fill in any non-assigned type parameters on
+    // construction with dynamic/Object, so we should never get the null type
+    // argument vector in created instances.
+    //
+    // TODO(kustermann): We could consider not using "null" as type argument
+    // vector representing all-dynamic to avoid this extra check (which will be
+    // uncommon because most Dart code in 2.0 will be strongly typed)!
+    __ CompareObject(TTSInternalRegs::kInstanceTypeArgumentsReg,
+                     Object::null_object());
+    const Type& rare_type = Type::Handle(Type::RawCast(type_class.RareType()));
+    if (rare_type.IsSubtypeOf(type, Heap::kNew)) {
+      compiler::Label process_done;
+      __ BranchIf(NOT_EQUAL, &process_done, compiler::Assembler::kNearJump);
+      __ Ret();
+      __ Bind(&process_done);
+    } else {
+      __ BranchIf(EQUAL, &check_failed);
+    }
 
-  // The kernel frontend should fill in any non-assigned type parameters on
-  // construction with dynamic/Object, so we should never get the null type
-  // argument vector in created instances.
-  //
-  // TODO(kustermann): We could consider not using "null" as type argument
-  // vector representing all-dynamic to avoid this extra check (which will be
-  // uncommon because most Dart code in 2.0 will be strongly typed)!
-  __ CompareObject(TTSInternalRegs::kInstanceTypeArgumentsReg,
-                   Object::null_object());
-  const Type& rare_type = Type::Handle(Type::RawCast(type_class.RareType()));
-  if (rare_type.IsSubtypeOf(type, Heap::kNew)) {
-    compiler::Label process_done;
-    __ BranchIf(NOT_EQUAL, &process_done);
+    // c) Then we'll check each value of the type argument.
+    AbstractType& type_arg = AbstractType::Handle();
+    const TypeArguments& ta = TypeArguments::Handle(type.arguments());
+    const intptr_t num_type_parameters = type_class.NumTypeParameters();
+    const intptr_t num_type_arguments = type_class.NumTypeArguments();
+    ASSERT(ta.Length() >= num_type_arguments);
+    for (intptr_t i = 0; i < num_type_parameters; ++i) {
+      const intptr_t type_param_value_offset_i =
+          num_type_arguments - num_type_parameters + i;
+
+      type_arg = ta.TypeAt(type_param_value_offset_i);
+      ASSERT(type_arg.IsTypeParameter() ||
+             hi->CanUseSubtypeRangeCheckFor(type_arg));
+
+      BuildOptimizedTypeArgumentValueCheck(
+          assembler, hi, type_arg, type_param_value_offset_i, &check_failed);
+    }
     __ Ret();
-    __ Bind(&process_done);
-  } else {
-    __ BranchIf(EQUAL, &check_failed);
   }
 
-  // c) Then we'll check each value of the type argument.
-  AbstractType& type_arg = AbstractType::Handle();
-
-  const intptr_t num_type_parameters = type_class.NumTypeParameters();
-  const intptr_t num_type_arguments = type_class.NumTypeArguments();
-  for (intptr_t i = 0; i < num_type_parameters; ++i) {
-    const intptr_t type_param_value_offset_i =
-        num_type_arguments - num_type_parameters + i;
-
-    type_arg = ta.TypeAt(type_param_value_offset_i);
-    ASSERT(type_arg.IsTypeParameter() ||
-           hi->CanUseSubtypeRangeCheckFor(type_arg));
-
-    BuildOptimizedTypeArgumentValueCheck(
-        assembler, hi, type_arg, type_param_value_offset_i, &check_failed);
-  }
-  __ Ret();
-
   // If anything fails.
   __ Bind(&check_failed);
 }
 
-void TypeTestingStubGenerator::BuildOptimizedSubclassRangeCheck(
-    compiler::Assembler* assembler,
+// Splits [ranges] into multiple ranges in [output], where the concrete,
+// finalized classes in each range share the same type arguments field offset.
+//
+// The first range in [output] contains [type_class], if any do, and otherwise
+// prioritizes ranges that include predefined cids before ranges that only
+// contain user-defined classes.
+//
+// Any cids that do not have valid class table entries, correspond to abstract
+// or unfinalized classes, or have no TAV field offset are treated as don't
+// cares, in that the cid may appear in any of the CidRangeVectors as needed to
+// reduce the number of ranges.
+//
+// Note that CidRangeVectors are MallocGrowableArrays, so the elements in
+// output must be freed after use!
+static void SplitByTypeArgumentsFieldOffset(
+    Thread* T,
+    const Class& type_class,
     const CidRangeVector& ranges,
-    compiler::Label* check_failed) {
-  __ LoadClassIdMayBeSmi(TTSInternalRegs::kScratchReg,
-                         TypeTestABI::kInstanceReg);
+    GrowableArray<CidRangeVector*>* output) {
+  ASSERT(output != nullptr);
+  ASSERT(!ranges.is_empty());
 
-  compiler::Label is_subtype;
-  FlowGraphCompiler::GenerateCidRangesCheck(
-      assembler, TTSInternalRegs::kScratchReg, ranges, &is_subtype,
-      check_failed, true);
-  __ Bind(&is_subtype);
+  Zone* const Z = T->zone();
+  ClassTable* const class_table = T->isolate_group()->class_table();
+  IntMap<CidRangeVector*> offset_map(Z);
+  IntMap<intptr_t> predefined_offsets(Z);
+  IntMap<intptr_t> user_defined_offsets(Z);
+
+  auto add_to_vector = [&](intptr_t tav_offset, const CidRange& range) {
+    if (range.cid_start == -1) return;
+    ASSERT(tav_offset != compiler::target::Class::kNoTypeArguments);
+    if (CidRangeVector* vector = offset_map.Lookup(tav_offset)) {
+      vector->Add(range);
+    } else {
+      vector = new CidRangeVector(1);
+      vector->Add(range);
+      offset_map.Insert(tav_offset, vector);
+    }
+  };
+
+  auto increment_count = [&](intptr_t cid, intptr_t tav_offset) {
+    if (cid <= kNumPredefinedCids) {
+      predefined_offsets.Update(
+          {tav_offset, predefined_offsets.Lookup(tav_offset) + 1});
+    } else if (auto* const kv = predefined_offsets.LookupPair(tav_offset)) {
+      predefined_offsets.Update({kv->key, kv->value + 1});
+    } else {
+      user_defined_offsets.Update(
+          {tav_offset, user_defined_offsets.Lookup(tav_offset) + 1});
+    }
+  };
+
+  // First populate offset_map.
+  auto& cls = Class::Handle(Z);
+  for (const auto& range : ranges) {
+    intptr_t last_offset = compiler::target::Class::kNoTypeArguments;
+    intptr_t cid_start = -1;
+    intptr_t cid_end = -1;
+    for (intptr_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      if (!class_table->HasValidClassAt(cid)) continue;
+      cls = class_table->At(cid);
+      if (cls.is_abstract()) continue;
+      // Only finalized concrete classes are present due to the conditions on
+      // returning kInstanceTypeArgumentsAreSubtypes in SubtypeChecksForClass.
+      ASSERT(cls.is_finalized());
+      const intptr_t tav_offset =
+          compiler::target::Class::TypeArgumentsFieldOffset(cls);
+      if (tav_offset == compiler::target::Class::kNoTypeArguments) continue;
+      if (tav_offset == last_offset && cid_start >= 0) {
+        cid_end = cid;
+        increment_count(cid, tav_offset);
+        continue;
+      }
+      add_to_vector(last_offset, {cid_start, cid_end});
+      last_offset = tav_offset;
+      cid_start = cid_end = cid;
+      increment_count(cid, tav_offset);
+    }
+    add_to_vector(last_offset, {cid_start, cid_end});
+  }
+
+  ASSERT(!offset_map.IsEmpty());
+
+  // Add the CidRangeVector for the type_class's offset, if it has one.
+  if (!type_class.is_abstract() && type_class.is_finalized()) {
+    const intptr_t type_class_offset =
+        compiler::target::Class::TypeArgumentsFieldOffset(type_class);
+    ASSERT(predefined_offsets.LookupPair(type_class_offset) != nullptr ||
+           user_defined_offsets.LookupPair(type_class_offset) != nullptr);
+    CidRangeVector* const vector = offset_map.Lookup(type_class_offset);
+    ASSERT(vector != nullptr);
+    output->Add(vector);
+    // Remove this CidRangeVector from consideration in the following loops.
+    predefined_offsets.Remove(type_class_offset);
+    user_defined_offsets.Remove(type_class_offset);
+  }
+  // Now add CidRangeVectors that include predefined cids.
+  // For now, we do this in an arbitrary order, but we could use the counts
+  // to prioritize offsets that are more shared if desired.
+  auto predefined_it = predefined_offsets.GetIterator();
+  while (auto* const kv = predefined_it.Next()) {
+    CidRangeVector* const vector = offset_map.Lookup(kv->key);
+    ASSERT(vector != nullptr);
+    output->Add(vector);
+  }
+  // Finally, add CidRangeVectors that only include user-defined cids.
+  // For now, we do this in an arbitrary order, but we could use the counts
+  // to prioritize offsets that are more shared if desired.
+  auto user_defined_it = user_defined_offsets.GetIterator();
+  while (auto* const kv = user_defined_it.Next()) {
+    CidRangeVector* const vector = offset_map.Lookup(kv->key);
+    ASSERT(vector != nullptr);
+    output->Add(vector);
+  }
+  ASSERT(output->length() > 0);
+}
+
+// Given [type], its type class [type_class], and a CidRangeVector [ranges],
+// populates the output CidRangeVectors from cids in [ranges], based on what
+// runtime checks are needed to determine whether the runtime type of
+// an instance is a subtype of [type].
+//
+// Concrete, type finalized classes whose cids are added to [cid_check_only]
+// implement a particular instantiation of [type_class] that is guaranteed to
+// be a subtype of [type]. Thus, these instances do not require any checking
+// of type arguments.
+//
+// Concrete, finalized classes whose cids are added to [type_argument_checks]
+// implement a fully uninstantiated version of [type_class] that can be directly
+// instantiated with the type arguments of the class's instance. Thus, each
+// type argument of [type] should be checked against the corresponding
+// instance type argument.
+//
+// Classes whose cids are in [not_checked]:
+// * Instances of the class are guaranteed to not be a subtype of [type].
+// * The class is not finalized.
+// * The subtype relation cannot be checked with our current approach and
+//   thus the stub must fall back to the STC/VM runtime.
+//
+// Any cids that do not have valid class table entries or correspond to
+// abstract classes are treated as don't cares, in that the cid may or may not
+// appear as needed to reduce the number of ranges.
+static void SplitOnTypeArgumentTests(HierarchyInfo* hi,
+                                     const Type& type,
+                                     const Class& type_class,
+                                     const CidRangeVector& ranges,
+                                     CidRangeVector* cid_check_only,
+                                     CidRangeVector* type_argument_checks,
+                                     CidRangeVector* not_checked) {
+  ASSERT(type_class.is_implemented());  // No need to split if not implemented.
+  ASSERT(cid_check_only->is_empty());
+  ASSERT(type_argument_checks->is_empty());
+  ASSERT(not_checked->is_empty());
+  ClassTable* const class_table = hi->thread()->isolate_group()->class_table();
+  Zone* const zone = hi->thread()->zone();
+  auto& to_check = Class::Handle(zone);
+  auto add_cid_range = [&](CheckType check, const CidRange& range) {
+    if (range.cid_start == -1) return;
+    switch (check) {
+      case CheckType::kCidCheckOnly:
+        cid_check_only->Add(range);
+        break;
+      case CheckType::kInstanceTypeArgumentsAreSubtypes:
+        type_argument_checks->Add(range);
+        break;
+      default:
+        not_checked->Add(range);
+    }
+  };
+  for (const auto& range : ranges) {
+    CheckType last_check = CheckType::kCannotBeChecked;
+    classid_t cid_start = -1, cid_end = -1;
+    for (classid_t cid = range.cid_start; cid <= range.cid_end; cid++) {
+      // Invalid entries can be included to keep range count low.
+      if (!class_table->HasValidClassAt(cid)) continue;
+      to_check = class_table->At(cid);
+      if (to_check.is_abstract()) continue;
+      const CheckType current_check =
+          SubtypeChecksForClass(zone, type, type_class, to_check);
+      ASSERT(current_check != CheckType::kInstanceTypeArgumentsAreSubtypes ||
+             to_check.is_finalized());
+      if (last_check == current_check && cid_start >= 0) {
+        cid_end = cid;
+        continue;
+      }
+      add_cid_range(last_check, {cid_start, cid_end});
+      last_check = current_check;
+      cid_start = cid_end = cid;
+    }
+    add_cid_range(last_check, {cid_start, cid_end});
+  }
+}
+
+bool TypeTestingStubGenerator::BuildLoadInstanceTypeArguments(
+    compiler::Assembler* assembler,
+    HierarchyInfo* hi,
+    const Type& type,
+    const Class& type_class,
+    const Register class_id_reg,
+    const Register instance_type_args_reg,
+    compiler::Label* load_succeeded,
+    compiler::Label* load_failed) {
+  const CidRangeVector& ranges =
+      hi->SubtypeRangesForClass(type_class, /*include_abstract=*/false,
+                                !Instance::NullIsAssignableTo(type));
+  if (ranges.is_empty()) {
+    // Fall through and signal type argument checks should not be generated.
+    CommentCheckedClasses(assembler, ranges);
+    return false;
+  }
+  if (!type_class.is_implemented()) {
+    ASSERT(type_class.is_finalized());
+    const intptr_t tav_offset =
+        compiler::target::Class::TypeArgumentsFieldOffset(type_class);
+    compiler::Label is_subtype;
+    BuildOptimizedSubtypeRangeCheck(assembler, ranges, class_id_reg,
+                                    &is_subtype, load_failed);
+    __ Bind(&is_subtype);
+    if (tav_offset != compiler::target::Class::kNoTypeArguments) {
+      // The class and its subclasses have trivially consistent type arguments.
+      __ LoadCompressedFieldFromOffset(instance_type_args_reg,
+                                       TypeTestABI::kInstanceReg, tav_offset);
+      return true;
+    } else {
+      // Not a generic type, so cid checks are sufficient.
+      __ Ret();
+      return false;
+    }
+  }
+  Thread* const T = hi->thread();
+  Zone* const Z = T->zone();
+  CidRangeVector cid_checks_only, type_argument_checks, not_checked;
+  SplitOnTypeArgumentTests(hi, type, type_class, ranges, &cid_checks_only,
+                           &type_argument_checks, &not_checked);
+  if (!cid_checks_only.is_empty()) {
+    compiler::Label is_subtype, keep_looking;
+    compiler::Label* check_failed =
+        type_argument_checks.is_empty() ? load_failed : &keep_looking;
+    BuildOptimizedSubtypeRangeCheck(assembler, cid_checks_only, class_id_reg,
+                                    &is_subtype, check_failed);
+    __ Bind(&is_subtype);
+    __ Ret();
+    __ Bind(&keep_looking);
+  }
+  if (!type_argument_checks.is_empty()) {
+    GrowableArray<CidRangeVector*> vectors;
+    SplitByTypeArgumentsFieldOffset(T, type_class, type_argument_checks,
+                                    &vectors);
+    ASSERT(vectors.length() > 0);
+    ClassTable* const class_table = T->isolate_group()->class_table();
+    auto& cls = Class::Handle(Z);
+    for (intptr_t i = 0; i < vectors.length(); i++) {
+      CidRangeVector* const vector = vectors[i];
+      ASSERT(!vector->is_empty());
+      const intptr_t first_cid = vector->At(0).cid_start;
+      ASSERT(class_table->HasValidClassAt(first_cid));
+      cls = class_table->At(first_cid);
+      ASSERT(cls.is_finalized());
+      const intptr_t tav_offset =
+          compiler::target::Class::TypeArgumentsFieldOffset(cls);
+      compiler::Label load_tav, keep_looking;
+      // For the last vector, just jump to load_failed if the check fails
+      // and avoid emitting a jump to load_succeeded.
+      compiler::Label* check_failed =
+          i < vectors.length() - 1 ? &keep_looking : load_failed;
+      BuildOptimizedSubtypeRangeCheck(assembler, *vector, class_id_reg,
+                                      &load_tav, check_failed);
+      __ Bind(&load_tav);
+      __ LoadCompressedFieldFromOffset(instance_type_args_reg,
+                                       TypeTestABI::kInstanceReg, tav_offset);
+      if (i < vectors.length() - 1) {
+        __ Jump(load_succeeded);
+        __ Bind(&keep_looking);
+      }
+      // Free the CidRangeVector allocated by SplitByTypeArgumentsFieldOffset.
+      delete vector;
+    }
+  }
+  if (!not_checked.is_empty()) {
+    CommentSkippedClasses(assembler, type, type_class, not_checked);
+  }
+  return !type_argument_checks.is_empty();
 }
 
 // Generate code to verify that instance's type argument is a subtype of
@@ -486,9 +940,13 @@
     return;
   }
 
-  // If the upper bound is a type parameter and its value is "dynamic"
-  // we always succeed.
-  compiler::Label is_dynamic;
+  if (assembler->EmittingComments()) {
+    TextBuffer buffer(128);
+    buffer.Printf("Generating check for type argument %" Pd ": ",
+                  type_param_value_offset_i);
+    type_arg.PrintName(Object::kScrubbedName, &buffer);
+    __ Comment("%s", buffer.buffer());
+  }
   if (type_arg.IsTypeParameter()) {
     const TypeParameter& type_param = TypeParameter::Cast(type_arg);
     const Register kTypeArgumentsReg =
@@ -496,9 +954,12 @@
             ? TypeTestABI::kInstantiatorTypeArgumentsReg
             : TypeTestABI::kFunctionTypeArgumentsReg;
 
+    compiler::Label is_dynamic;
     __ CompareObject(kTypeArgumentsReg, Object::null_object());
-    __ BranchIf(EQUAL, &is_dynamic);
+    __ BranchIf(EQUAL, &is_dynamic, compiler::Assembler::kNearJump);
 
+    // TODO(dartbug.com/46920): Currently only canonical equality (identity)
+    // is checked.
     __ LoadCompressedFieldFromOffset(
         TTSInternalRegs::kScratchReg, kTypeArgumentsReg,
         compiler::target::TypeArguments::type_at_offset(type_param.index()));
@@ -508,57 +969,69 @@
         compiler::target::TypeArguments::type_at_offset(
             type_param_value_offset_i));
     __ BranchIf(NOT_EQUAL, check_failed);
+    __ Bind(&is_dynamic);
   } else {
-    const Class& type_class = Class::Handle(type_arg.type_class());
-    const bool null_is_assignable = Instance::NullIsAssignableTo(type_arg);
-    const CidRangeVector& ranges =
-        hi->SubtypeRangesForClass(type_class,
-                                  /*include_abstract=*/true,
-                                  /*exclude_null=*/!null_is_assignable);
-
     __ LoadCompressedFieldFromOffset(
         TTSInternalRegs::kScratchReg,
         TTSInternalRegs::kInstanceTypeArgumentsReg,
         compiler::target::TypeArguments::type_at_offset(
             type_param_value_offset_i));
-    __ LoadCompressedFieldFromOffset(
-        TTSInternalRegs::kScratchReg, TTSInternalRegs::kScratchReg,
-        compiler::target::Type::type_class_id_offset());
-
-    compiler::Label is_subtype;
-    __ SmiUntag(TTSInternalRegs::kScratchReg);
-    if (null_is_assignable) {
-      __ CompareImmediate(TTSInternalRegs::kScratchReg, kNullCid);
-      __ BranchIf(EQUAL, &is_subtype);
-    }
-    // Never is a bottom type.
-    __ CompareImmediate(TTSInternalRegs::kScratchReg, kNeverCid);
-    __ BranchIf(EQUAL, &is_subtype);
-    FlowGraphCompiler::GenerateCidRangesCheck(
-        assembler, TTSInternalRegs::kScratchReg, ranges, &is_subtype,
-        check_failed, true);
-    __ Bind(&is_subtype);
-
-    // Weak NNBD mode uses LEGACY_SUBTYPE which ignores nullability.
-    // We don't need to check nullability of LHS for nullable and legacy RHS
-    // ("Right Legacy", "Right Nullable" rules).
-    if (IsolateGroup::Current()->use_strict_null_safety_checks() &&
-        !type_arg.IsNullable() && !type_arg.IsLegacy()) {
-      // Nullable type is not a subtype of non-nullable type.
-      // TODO(dartbug.com/40736): Allocate a register for instance type argument
-      // and avoid reloading it.
-      __ LoadCompressedFieldFromOffset(
-          TTSInternalRegs::kScratchReg,
-          TTSInternalRegs::kInstanceTypeArgumentsReg,
-          compiler::target::TypeArguments::type_at_offset(
-              type_param_value_offset_i));
+    if (type_arg.IsObjectType()) {
+      // Just check the nullability, since this must be non-nullable Object
+      // and we must be in null safe mode.
+      ASSERT(IsolateGroup::Current()->use_strict_null_safety_checks() &&
+             type_arg.IsNonNullable());
       __ CompareTypeNullabilityWith(TTSInternalRegs::kScratchReg,
                                     compiler::target::Nullability::kNullable);
       __ BranchIf(EQUAL, check_failed);
+    } else {
+      __ LoadCompressedFieldFromOffset(
+          TTSInternalRegs::kScratchReg, TTSInternalRegs::kScratchReg,
+          compiler::target::Type::type_class_id_offset());
+
+      const Class& type_class = Class::Handle(type_arg.type_class());
+      const bool null_is_assignable = Instance::NullIsAssignableTo(type_arg);
+      const CidRangeVector& ranges =
+          hi->SubtypeRangesForClass(type_class,
+                                    /*include_abstract=*/true,
+                                    /*exclude_null=*/!null_is_assignable);
+
+      compiler::Label is_subtype;
+      __ SmiUntag(TTSInternalRegs::kScratchReg);
+      // Never is a bottom type.
+      __ CompareImmediate(TTSInternalRegs::kScratchReg, kNeverCid);
+      __ BranchIf(EQUAL, &is_subtype);
+      if (null_is_assignable) {
+        __ CompareImmediate(TTSInternalRegs::kScratchReg, kNullCid);
+        __ BranchIf(EQUAL, &is_subtype);
+      }
+      compiler::Label check_nullability;
+      BuildOptimizedSubtypeRangeCheck(assembler, ranges,
+                                      TTSInternalRegs::kScratchReg,
+                                      &check_nullability, check_failed);
+      __ Bind(&check_nullability);
+
+      // Weak NNBD mode uses LEGACY_SUBTYPE which ignores nullability.
+      // We don't need to check nullability of LHS for nullable and legacy RHS
+      // ("Right Legacy", "Right Nullable" rules).
+      if (IsolateGroup::Current()->use_strict_null_safety_checks() &&
+          type_arg.IsNonNullable()) {
+        // Nullable type is not a subtype of non-nullable type.
+        // TODO(dartbug.com/40736): Allocate a register for instance type
+        // argument and avoid reloading it.
+        __ LoadCompressedFieldFromOffset(
+            TTSInternalRegs::kScratchReg,
+            TTSInternalRegs::kInstanceTypeArgumentsReg,
+            compiler::target::TypeArguments::type_at_offset(
+                type_param_value_offset_i));
+        __ CompareTypeNullabilityWith(TTSInternalRegs::kScratchReg,
+                                      compiler::target::Nullability::kNullable);
+        __ BranchIf(EQUAL, check_failed);
+      }
+
+      __ Bind(&is_subtype);
     }
   }
-
-  __ Bind(&is_dynamic);
 }
 
 void RegisterTypeArgumentsUse(const Function& function,
@@ -1002,43 +1475,40 @@
 void DeoptimizeTypeTestingStubs() {
   class CollectTypes : public ObjectVisitor {
    public:
-    CollectTypes(GrowableArray<AbstractType*>* types, Zone* zone)
-        : types_(types), object_(Object::Handle(zone)), zone_(zone) {}
+    CollectTypes(Zone* zone, GrowableArray<AbstractType*>* types)
+        : zone_(zone), types_(types), cache_(SubtypeTestCache::Handle(zone)) {}
 
     void VisitObject(ObjectPtr object) {
-      if (object->IsPseudoObject()) {
-        // Cannot even be wrapped in handles.
-        return;
-      }
-      object_ = object;
-      if (object_.IsAbstractType()) {
-        types_->Add(
-            &AbstractType::Handle(zone_, AbstractType::RawCast(object)));
+      // Only types and function types may have optimized TTSes.
+      if (object->IsType() || object->IsFunctionType()) {
+        types_->Add(&AbstractType::CheckedHandle(zone_, object));
+      } else if (object->IsSubtypeTestCache()) {
+        cache_ ^= object;
+        cache_.Reset();
       }
     }
 
    private:
-    GrowableArray<AbstractType*>* types_;
-    Object& object_;
-    Zone* zone_;
+    Zone* const zone_;
+    GrowableArray<AbstractType*>* const types_;
+    TypeTestingStubGenerator generator_;
+    SubtypeTestCache& cache_;
   };
 
   Thread* thread = Thread::Current();
   TIMELINE_DURATION(thread, Isolate, "DeoptimizeTypeTestingStubs");
   HANDLESCOPE(thread);
   Zone* zone = thread->zone();
-  GrowableArray<AbstractType*> types;
+  GrowableArray<AbstractType*> types(zone, 0);
   {
     HeapIterationScope iter(thread);
-    CollectTypes visitor(&types, zone);
+    CollectTypes visitor(zone, &types);
     iter.IterateObjects(&visitor);
   }
-
-  TypeTestingStubGenerator generator;
-  Code& code = Code::Handle(zone);
-  for (intptr_t i = 0; i < types.length(); i++) {
-    code = generator.DefaultCodeForType(*types[i]);
-    types[i]->SetTypeTestingStub(code);
+  auto& stub = Code::Handle(zone);
+  for (auto* const type : types) {
+    stub = TypeTestingStubGenerator::DefaultCodeForType(*type);
+    type->SetTypeTestingStub(stub);
   }
 }
 
diff --git a/runtime/vm/type_testing_stubs.h b/runtime/vm/type_testing_stubs.h
index 7f97d5d..40534c7 100644
--- a/runtime/vm/type_testing_stubs.h
+++ b/runtime/vm/type_testing_stubs.h
@@ -44,7 +44,7 @@
                                     bool lazy_specialize = true);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  static void SpecializeStubFor(Thread* thread, const AbstractType& type);
+  static CodePtr SpecializeStubFor(Thread* thread, const AbstractType& type);
 #endif
 
   TypeTestingStubGenerator();
@@ -73,27 +73,35 @@
 
   static void BuildOptimizedSubtypeRangeCheck(compiler::Assembler* assembler,
                                               const CidRangeVector& ranges,
-                                              bool smi_is_ok);
+                                              Register class_id_reg,
+                                              compiler::Label* check_succeeded,
+                                              compiler::Label* check_failed);
 
   static void BuildOptimizedSubclassRangeCheckWithTypeArguments(
       compiler::Assembler* assembler,
       HierarchyInfo* hi,
       const Type& type,
-      const Class& type_class,
-      const TypeArguments& type_arguments);
+      const Class& type_class);
 
-  static void BuildOptimizedSubclassRangeCheckWithTypeArguments(
+  // Returns whether any cid ranges require type argument checking.
+  //
+  // If any do, then returns from the stub if any checks that do not need
+  // type argument checking succeed, falls through or jumps to load_succeeded if
+  // loading the type arguments succeeds, and otherwise jumps to load_failed.
+  // That is, code that uses the type arguments should follow immediately.
+  //
+  // If none do, then falls through or jumps to load_failed if the checks fail,
+  // else returns from the stub if the checks are successful. That is, code
+  // that handles the failure case (like calling the slow stub) should follow.
+  static bool BuildLoadInstanceTypeArguments(
       compiler::Assembler* assembler,
       HierarchyInfo* hi,
       const Type& type,
       const Class& type_class,
-      const TypeArguments& type_arguments,
       const Register class_id_reg,
-      const Register instance_type_args_reg);
-
-  static void BuildOptimizedSubclassRangeCheck(compiler::Assembler* assembler,
-                                               const CidRangeVector& ranges,
-                                               compiler::Label* check_failed);
+      const Register instance_type_args_reg,
+      compiler::Label* load_succeeded,
+      compiler::Label* load_failed);
 
   static void BuildOptimizedTypeArgumentValueCheck(
       compiler::Assembler* assembler,
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index 15c1682..480c1d0 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -9,6 +9,8 @@
 #include "vm/class_finalizer.h"
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/backend/il_test_helper.h"
+#include "vm/flags.h"
+#include "vm/lockers.h"
 #include "vm/symbols.h"
 #include "vm/type_testing_stubs.h"
 #include "vm/unit_test.h"
@@ -18,6 +20,47 @@
 
 namespace dart {
 
+// FLAG_trace_type_checks is only a non-constant in DEBUG mode, so we only
+// allow tracing of type testing stub tests there.
+#if defined(DEBUG)
+DEFINE_FLAG(bool,
+            trace_type_testing_stub_tests,
+            false,
+            "Trace type checks performed in type testing stub tests");
+#else
+const bool FLAG_trace_type_testing_stub_tests = false;
+#endif
+
+class TraceStubInvocationScope : public ValueObject {
+ public:
+  TraceStubInvocationScope()
+      : old_trace_type_checks_(FLAG_trace_type_checks),
+        old_disassemble_stubs_(FLAG_disassemble_stubs) {
+    if (FLAG_trace_type_testing_stub_tests) {
+#if defined(DEBUG)
+      FLAG_trace_type_checks = true;
+#endif
+#if defined(FORCE_INCLUDE_DISASSEMBLER) || !defined(PRODUCT)
+      FLAG_disassemble_stubs = true;
+#endif
+    }
+  }
+  ~TraceStubInvocationScope() {
+    if (FLAG_trace_type_testing_stub_tests) {
+#if defined(DEBUG)
+      FLAG_trace_type_checks = old_trace_type_checks_;
+#endif
+#if defined(FORCE_INCLUDE_DISASSEMBLER) || !defined(PRODUCT)
+      FLAG_disassemble_stubs = old_disassemble_stubs_;
+#endif
+    }
+  }
+
+ private:
+  const bool old_trace_type_checks_;
+  const bool old_disassemble_stubs_;
+};
+
 #define __ assembler->
 
 static void GenerateInvokeTTSStub(compiler::Assembler* assembler) {
@@ -150,240 +193,508 @@
   *tav = tav->Canonicalize(Thread::Current(), nullptr);
 }
 
-static void RunTTSTest(
-    const Object& instance,
-    const AbstractType& dst_type,
-    const TypeArguments& instantiator_tav,
-    const TypeArguments& function_tav,
-    std::function<void(const Object& result, const SubtypeTestCache& stc)> lazy,
-    std::function<void(const Object& result,
-                       const SubtypeTestCache& stc,
-                       const Smi& abi_regs_modified,
-                       const Smi& rest_regs_modified)> nonlazy) {
-  THR_Print(
-      "TTS_Test(instance=%s, dst_type=%s, instantiator_tav=%s, "
-      "function_tav=%s)\n",
-      instance.ToCString(), dst_type.ToCString(), instantiator_tav.ToCString(),
-      function_tav.ToCString());
-  ASSERT(instantiator_tav.IsNull() || instantiator_tav.IsCanonical());
-  ASSERT(function_tav.IsNull() || function_tav.IsCanonical());
-  auto thread = Thread::Current();
+struct TTSTestCase {
+  const Instance& instance;
+  const TypeArguments& instantiator_tav;
+  const TypeArguments& function_tav;
+  // Whether the result of the test should be a type error.
+  const bool should_fail;
+  // Whether a non-default stub will result from specialization.
+  const bool should_specialize;
+  // Whether the test should not be caught by the TTS, but instead cached
+  // in the TTS. If should_specialize is false, then the test case is cached
+  // in the TTS after any invocation, otherwise only on invocations after
+  // specializations.
+  const bool should_be_false_negative;
+  // Whether the test should cause specialization of a stub that is already
+  // specialized.
+  const bool should_respecialize;
 
-  // Build a stub which will do calling conversion to call TTS stubs.
-  const auto& klass =
-      Class::Handle(thread->isolate_group()->class_table()->At(kInstanceCid));
-  const auto& symbol = String::Handle(
-      Symbols::New(thread, OS::SCreate(thread->zone(), "TTSTest")));
-  const auto& signature = FunctionType::ZoneHandle(FunctionType::New());
-  const auto& function = Function::Handle(Function::New(
-      signature, symbol, UntaggedFunction::kRegularFunction, false, false,
-      false, false, false, klass, TokenPosition::kNoSource));
-  compiler::ObjectPoolBuilder pool_builder;
-  const auto& invoke_tts = Code::Handle(
-      StubCode::Generate("InvokeTTS", &pool_builder, &GenerateInvokeTTSStub));
-  const auto& pool =
-      ObjectPool::Handle(ObjectPool::NewFromBuilder(pool_builder));
-  invoke_tts.set_object_pool(pool.ptr());
-  invoke_tts.set_owner(function);
-  invoke_tts.set_exception_handlers(
-      ExceptionHandlers::Handle(ExceptionHandlers::New(0)));
-
-  EXPECT_EQ(2, pool.Length());
-  const intptr_t kSubtypeTestCacheIndex = 0;
-
-  const auto& arguments_descriptor =
-      Array::Handle(ArgumentsDescriptor::NewBoxed(0, 6));
-  const auto& arguments = Array::Handle(Array::New(6));
-  const auto& abi_regs_modified_box = Array::Handle(Array::New(1));
-  const auto& rest_regs_modified_box = Array::Handle(Array::New(1));
-  arguments.SetAt(0, abi_regs_modified_box);
-  arguments.SetAt(1, rest_regs_modified_box);
-  arguments.SetAt(2, instance);
-  arguments.SetAt(3, instantiator_tav);
-  arguments.SetAt(4, function_tav);
-  arguments.SetAt(5, dst_type);
-
-  // Ensure we have a) uninitialized TTS b) no/empty SubtypeTestCache.
-  auto& instantiated_dst_type = AbstractType::Handle(dst_type.ptr());
-  if (dst_type.IsTypeParameter()) {
-    instantiated_dst_type = TypeParameter::Cast(dst_type).GetFromTypeArguments(
-        instantiator_tav, function_tav);
+  TTSTestCase(const Object& obj,
+              const TypeArguments& i_tav,
+              const TypeArguments& f_tav,
+              bool should_specialize = true,
+              bool should_fail = false,
+              bool should_be_false_negative = false,
+              bool should_respecialize = false)
+      : instance(Instance::Cast(obj)),
+        instantiator_tav(i_tav),
+        function_tav(f_tav),
+        should_fail(should_fail),
+        should_specialize(should_specialize),
+        should_be_false_negative(should_be_false_negative),
+        should_respecialize(should_respecialize) {
+    // Failure is only compatible with should_specialize (for checking
+    // eager specialization a la AOT mode).
+    ASSERT(!should_fail || (!should_be_false_negative && !should_respecialize));
+    // Respecialization can only happen for test cases that would specialize
+    // and which won't end up cached in the TTS.
+    ASSERT(!should_respecialize ||
+           (should_specialize && !should_be_false_negative));
   }
-  instantiated_dst_type.SetTypeTestingStub(StubCode::LazySpecializeTypeTest());
-  EXPECT(instantiated_dst_type.type_test_stub() ==
-         StubCode::LazySpecializeTypeTest().ptr());
-  EXPECT(pool.ObjectAt(kSubtypeTestCacheIndex) == Object::null());
 
-  auto& result = Object::Handle();
-  auto& result2 = Object::Handle();
-  auto& abi_regs_modified = Smi::Handle();
-  auto& rest_regs_modified = Smi::Handle();
-  auto& tts = Code::Handle();
-  auto& tts2 = Code::Handle();
-  auto& stc = SubtypeTestCache::Handle();
-  auto& stc2 = SubtypeTestCache::Handle();
-
-  // First invocation will a) specialize the TTS b) may create SubtypeTestCache
-  result = DartEntry::InvokeCode(invoke_tts, invoke_tts.EntryPoint(),
-                                 arguments_descriptor, arguments, thread);
-  stc ^= pool.ObjectAt(kSubtypeTestCacheIndex);
-  tts = instantiated_dst_type.type_test_stub();
-  if (!result.IsError()) {
-    EXPECT(tts.ptr() != StubCode::LazySpecializeTypeTest().ptr());
+  bool HasSameSTCEntry(const TTSTestCase& other) const {
+    if (instantiator_tav.ptr() != other.instantiator_tav.ptr()) {
+      return false;
+    }
+    if (function_tav.ptr() != other.function_tav.ptr()) {
+      return false;
+    }
+    if (instance.IsClosure() && other.instance.IsClosure()) {
+      const auto& closure = Closure::Cast(instance);
+      const auto& other_closure = Closure::Cast(other.instance);
+      const auto& sig = FunctionType::Handle(
+          Function::Handle(closure.function()).signature());
+      const auto& other_sig = FunctionType::Handle(
+          Function::Handle(other_closure.function()).signature());
+      return sig.ptr() == other_sig.ptr() &&
+             closure.instantiator_type_arguments() ==
+                 other_closure.instantiator_type_arguments() &&
+             closure.function_type_arguments() ==
+                 other_closure.function_type_arguments() &&
+             closure.delayed_type_arguments() ==
+                 other_closure.delayed_type_arguments();
+    }
+    const intptr_t cid = instance.GetClassId();
+    const intptr_t other_cid = other.instance.GetClassId();
+    if (cid != other_cid) {
+      return false;
+    }
+    const auto& cls = Class::Handle(instance.clazz());
+    if (cls.NumTypeArguments() == 0) {
+      return true;
+    }
+    return instance.GetTypeArguments() == other.instance.GetTypeArguments();
   }
-  lazy(result, stc);
 
-  // Second invocation will a) keep TTS b) keep optional SubtypeTestCache
-  result2 = DartEntry::InvokeCode(invoke_tts, invoke_tts.EntryPoint(),
-                                  arguments_descriptor, arguments, thread);
-  stc2 ^= pool.ObjectAt(kSubtypeTestCacheIndex);
-  tts2 = instantiated_dst_type.type_test_stub();
-  abi_regs_modified ^= abi_regs_modified_box.At(0);
-  rest_regs_modified ^= rest_regs_modified_box.At(0);
-  EXPECT(result2.IsError() || !abi_regs_modified.IsNull());
-  EXPECT(tts2.ptr() == tts.ptr());
-  EXPECT(stc2.ptr() == stc.ptr());
-  nonlazy(result2, stc2, abi_regs_modified, rest_regs_modified);
+  bool HasSTCEntry(const SubtypeTestCache& cache,
+                   const AbstractType& dst_type,
+                   Bool* out_result = nullptr,
+                   intptr_t* out_index = nullptr) const {
+    if (cache.IsNull()) return false;
+    SafepointMutexLocker ml(
+        IsolateGroup::Current()->subtype_test_cache_mutex());
+    if (instance.IsClosure()) {
+      const auto& closure = Closure::Cast(instance);
+      const auto& sig = FunctionType::Handle(
+          Function::Handle(closure.function()).signature());
+      const auto& closure_instantiator_type_arguments =
+          TypeArguments::Handle(closure.instantiator_type_arguments());
+      const auto& closure_function_type_arguments =
+          TypeArguments::Handle(closure.function_type_arguments());
+      const auto& closure_delayed_type_arguments =
+          TypeArguments::Handle(closure.delayed_type_arguments());
+      return cache.HasCheck(
+          sig, dst_type, closure_instantiator_type_arguments, instantiator_tav,
+          function_tav, closure_function_type_arguments,
+          closure_delayed_type_arguments, out_index, out_result);
+    }
+    const auto& id_smi = Smi::Handle(Smi::New(instance.GetClassId()));
+    const auto& cls = Class::Handle(instance.clazz());
+    auto& instance_type_arguments = TypeArguments::Handle();
+    if (cls.NumTypeArguments() > 0) {
+      instance_type_arguments = instance.GetTypeArguments();
+    }
+    return cache.HasCheck(id_smi, dst_type, instance_type_arguments,
+                          instantiator_tav, function_tav,
+                          Object::null_type_arguments(),
+                          Object::null_type_arguments(), out_index, out_result);
+  }
 
-  // Third invocation will a) explicitly install TTS beforehand b) keep optional
-  // SubtypeTestCache
-  // (This is to simulate AOT where we don't use lazy specialization but
-  // precompile the TTS)
-  TypeTestingStubGenerator::SpecializeStubFor(thread, instantiated_dst_type);
-  tts = instantiated_dst_type.type_test_stub();
+ private:
+  DISALLOW_ALLOCATION();
+};
 
-  result2 = DartEntry::InvokeCode(invoke_tts, invoke_tts.EntryPoint(),
-                                  arguments_descriptor, arguments, thread);
-  stc2 ^= pool.ObjectAt(kSubtypeTestCacheIndex);
-  tts2 = instantiated_dst_type.type_test_stub();
-  abi_regs_modified ^= abi_regs_modified_box.At(0);
-  rest_regs_modified ^= rest_regs_modified_box.At(0);
-  EXPECT(result2.IsError() || !abi_regs_modified.IsNull());
-  EXPECT(tts2.ptr() == tts.ptr());
-  EXPECT(stc2.ptr() == stc.ptr());
-  nonlazy(result2, stc2, abi_regs_modified, rest_regs_modified);
+// Inherits should_specialize from original.
+static TTSTestCase Failure(const TTSTestCase& original) {
+  return TTSTestCase(original.instance, original.instantiator_tav,
+                     original.function_tav, original.should_specialize,
+                     /*should_fail=*/true,
+                     /*should_be_false_negative=*/false,
+                     /*should_respecialize=*/false);
 }
 
-static void ReportModifiedRegisters(const Smi& modified_registers) {
-  const intptr_t reg_mask = Smi::Cast(modified_registers).Value();
-  for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
-    if (((1 << i) & reg_mask) != 0) {
-      const Register reg = static_cast<Register>(i);
-      dart::Expect(__FILE__, __LINE__)
-          .Fail("%s was modified", RegisterNames::RegisterName(reg));
+// Inherits should_specialize from original.
+static TTSTestCase FalseNegative(const TTSTestCase& original) {
+  return TTSTestCase(original.instance, original.instantiator_tav,
+                     original.function_tav, original.should_specialize,
+                     /*should_fail=*/false,
+                     /*should_be_false_negative=*/true,
+                     /*should_respecialize=*/false);
+}
+
+static TTSTestCase Respecialization(const TTSTestCase& original) {
+  return TTSTestCase(original.instance, original.instantiator_tav,
+                     original.function_tav, /*should_specialize=*/true,
+                     /*should_fail=*/false,
+                     /*should_be_false_negative=*/false,
+                     /*should_respecialize=*/true);
+}
+
+class TTSTestState : public ValueObject {
+ public:
+  TTSTestState(Thread* thread, const AbstractType& type)
+      : thread_(thread),
+        type_(AbstractType::Handle(zone(), type.ptr())),
+        modified_abi_regs_box_(Array::Handle(zone(), Array::New(1))),
+        modified_rest_regs_box_(Array::Handle(zone(), Array::New(1))),
+        tts_invoker_(
+            Code::Handle(zone(), CreateInvocationStub(thread_, zone()))),
+        pool_(ObjectPool::Handle(zone(), tts_invoker_.object_pool())),
+        arguments_descriptor_(
+            Array::Handle(ArgumentsDescriptor::NewBoxed(0, 6))),
+        previous_tts_stub_(Code::Handle(zone())),
+        previous_stc_(SubtypeTestCache::Handle(zone())),
+        last_arguments_(Array::Handle(zone())),
+        last_tested_type_(AbstractType::Handle(zone())),
+        new_tts_stub_(Code::Handle(zone())),
+        last_stc_(SubtypeTestCache::Handle(zone())),
+        last_result_(Object::Handle(zone())) {
+    THR_Print("Creating test state for type %s\n", type.ToCString());
+  }
+
+  Zone* zone() const { return thread_->zone(); }
+  const SubtypeTestCache& last_stc() const { return last_stc_; }
+  // For cases where the STC may have been reset/removed, like reloading.
+  const SubtypeTestCachePtr current_stc() const {
+    return SubtypeTestCache::RawCast(pool_.ObjectAt(kSubtypeTestCacheIndex));
+  }
+
+  AbstractTypePtr TypeToTest(const TTSTestCase& test_case) const {
+    if (type_.IsTypeParameter()) {
+      return TypeParameter::Cast(type_).GetFromTypeArguments(
+          test_case.instantiator_tav, test_case.function_tav);
+    }
+    return type_.ptr();
+  }
+
+  void ClearCache() {
+    pool_.SetObjectAt(kSubtypeTestCacheIndex, Object::null_object());
+  }
+
+  void InvokeEagerlySpecializedStub(const TTSTestCase& test_case) {
+    ASSERT(!test_case.should_respecialize);  // No respecialization possible.
+    last_tested_type_ = TypeToTest(test_case);
+    const auto& default_stub =
+        Code::Handle(zone(), TypeTestingStubGenerator::DefaultCodeForType(
+                                 last_tested_type_, /*lazy_specialize=*/false));
+    previous_tts_stub_ =
+        TypeTestingStubGenerator::SpecializeStubFor(thread_, last_tested_type_);
+    EXPECT_EQ(test_case.should_specialize,
+              previous_tts_stub_.ptr() != default_stub.ptr());
+    last_tested_type_.SetTypeTestingStub(previous_tts_stub_);
+    PrintInvocationHeader(test_case);
+    InvokeStubHelper(test_case);
+    // Treat it as a failure if the stub respecializes, since we're attempting
+    // to simulate AOT mode.
+    EXPECT(previous_tts_stub_.ptr() == new_tts_stub_.ptr());
+    ReportUnexpectedSTCChanges(test_case);
+  }
+
+  void InvokeLazilySpecializedStub(const TTSTestCase& test_case) {
+    ASSERT(!test_case.should_respecialize);  // No respecialization possible.
+    last_tested_type_ = TypeToTest(test_case);
+    const auto& default_stub =
+        Code::Handle(zone(), TypeTestingStubGenerator::DefaultCodeForType(
+                                 last_tested_type_, /*lazy_specialize=*/false));
+    const auto& specializing_stub =
+        Code::Handle(zone(), TypeTestingStubGenerator::DefaultCodeForType(
+                                 last_tested_type_, /*lazy_specialize=*/true));
+    PrintInvocationHeader(test_case);
+    last_tested_type_.SetTypeTestingStub(specializing_stub);
+    InvokeStubHelper(test_case,
+                     /*is_lazy_specialization=*/test_case.should_specialize);
+    if (test_case.should_fail || test_case.instance.IsNull()) {
+      // We only specialize if we go to runtime and the runtime check
+      // succeeds. The lazy specialization stub for nullable types has a
+      // special fast case for null that skips the runtime.
+      EXPECT(new_tts_stub_.ptr() == specializing_stub.ptr());
+    } else if (test_case.should_specialize) {
+      // Specializing test cases should never result in a default TTS.
+      EXPECT(new_tts_stub_.ptr() != default_stub.ptr());
+    } else {
+      // Non-specializing test cases should result in a default TTS.
+      EXPECT(new_tts_stub_.ptr() == default_stub.ptr());
+    }
+    ReportUnexpectedSTCChanges(
+        test_case, /*is_lazy_specialization=*/test_case.should_specialize);
+  }
+
+  void InvokeExistingStub(const TTSTestCase& test_case) {
+    last_tested_type_ = TypeToTest(test_case);
+    PrintInvocationHeader(test_case);
+    InvokeStubHelper(test_case);
+    // Only respecialization should result in a new stub.
+    EXPECT_EQ(test_case.should_respecialize,
+              previous_tts_stub_.ptr() != new_tts_stub_.ptr());
+    ReportUnexpectedSTCChanges(test_case);
+  }
+
+ private:
+  static constexpr intptr_t kSubtypeTestCacheIndex = 0;
+
+  SmiPtr modified_abi_regs() const {
+    if (modified_abi_regs_box_.At(0)->IsHeapObject()) return Smi::null();
+    return Smi::RawCast(modified_abi_regs_box_.At(0));
+  }
+  SmiPtr modified_rest_regs() const {
+    if (modified_rest_regs_box_.At(0)->IsHeapObject()) return Smi::null();
+    return Smi::RawCast(modified_rest_regs_box_.At(0));
+  }
+
+  void PrintInvocationHeader(const TTSTestCase& test_case) {
+    LogBlock lb;
+    const auto& tts = Code::Handle(zone(), last_tested_type_.type_test_stub());
+    auto* const stub_name = StubCode::NameOfStub(tts.EntryPoint());
+    THR_Print("Testing %s stub for type %s\n",
+              stub_name == nullptr ? "optimized" : stub_name,
+              last_tested_type_.ToCString());
+    if (last_tested_type_.ptr() != type_.ptr()) {
+      THR_Print("  Original type: %s\n", type_.ToCString());
+    }
+    THR_Print("  Instance: %s\n", test_case.instance.ToCString());
+    THR_Print("  Instantiator TAV: %s\n",
+              test_case.instantiator_tav.ToCString());
+    THR_Print("  Function TAV: %s\n", test_case.function_tav.ToCString());
+    THR_Print("  Should fail: %s\n", test_case.should_fail ? "true" : "false");
+    THR_Print("  Should specialize: %s\n",
+              test_case.should_specialize ? "true" : "false");
+    THR_Print("  Should be false negative: %s\n",
+              test_case.should_be_false_negative ? "true" : "false");
+    THR_Print("  Should respecialize: %s\n",
+              test_case.should_respecialize ? "true" : "false");
+  }
+
+  static CodePtr CreateInvocationStub(Thread* thread, Zone* zone) {
+    const auto& klass = Class::Handle(
+        zone, thread->isolate_group()->class_table()->At(kInstanceCid));
+    const auto& symbol = String::Handle(
+        zone, Symbols::New(thread, OS::SCreate(zone, "TTSTest")));
+    const auto& signature = FunctionType::Handle(zone, FunctionType::New());
+    const auto& function = Function::Handle(
+        zone, Function::New(
+                  signature, symbol, UntaggedFunction::kRegularFunction, false,
+                  false, false, false, false, klass, TokenPosition::kNoSource));
+    compiler::ObjectPoolBuilder pool_builder;
+    const auto& invoke_tts = Code::Handle(
+        zone,
+        StubCode::Generate("InvokeTTS", &pool_builder, &GenerateInvokeTTSStub));
+    const auto& pool =
+        ObjectPool::Handle(zone, ObjectPool::NewFromBuilder(pool_builder));
+    invoke_tts.set_object_pool(pool.ptr());
+    invoke_tts.set_owner(function);
+    invoke_tts.set_exception_handlers(
+        ExceptionHandlers::Handle(zone, ExceptionHandlers::New(0)));
+    EXPECT_EQ(2, pool.Length());
+    return invoke_tts.ptr();
+  }
+
+  void InvokeStubHelper(const TTSTestCase& test_case,
+                        bool is_lazy_specialization = false) {
+    ASSERT(test_case.instantiator_tav.IsNull() ||
+           test_case.instantiator_tav.IsCanonical());
+    ASSERT(test_case.function_tav.IsNull() ||
+           test_case.function_tav.IsCanonical());
+
+    modified_abi_regs_box_.SetAt(0, Object::null_object());
+    modified_rest_regs_box_.SetAt(0, Object::null_object());
+
+    last_arguments_ = Array::New(6);
+    last_arguments_.SetAt(0, modified_abi_regs_box_);
+    last_arguments_.SetAt(1, modified_rest_regs_box_);
+    last_arguments_.SetAt(2, test_case.instance);
+    last_arguments_.SetAt(3, test_case.instantiator_tav);
+    last_arguments_.SetAt(4, test_case.function_tav);
+    last_arguments_.SetAt(5, type_);
+
+    previous_tts_stub_ = last_tested_type_.type_test_stub();
+    previous_stc_ = current_stc();
+    {
+      SafepointMutexLocker ml(
+          thread_->isolate_group()->subtype_test_cache_mutex());
+      previous_stc_ = previous_stc_.Copy(thread_);
+    }
+    {
+      TraceStubInvocationScope scope;
+      last_result_ = DartEntry::InvokeCode(
+          tts_invoker_, tts_invoker_.EntryPoint(), arguments_descriptor_,
+          last_arguments_, thread_);
+    }
+    new_tts_stub_ = last_tested_type_.type_test_stub();
+    last_stc_ = current_stc();
+    EXPECT_EQ(test_case.should_fail, !last_result_.IsNull());
+    if (test_case.should_fail) {
+      EXPECT(last_result_.IsError());
+      EXPECT(last_result_.IsUnhandledException());
+      if (last_result_.IsUnhandledException()) {
+        const auto& error = Instance::Handle(
+            UnhandledException::Cast(last_result_).exception());
+        EXPECT(strstr(error.ToCString(), "_TypeError"));
+      }
+    } else {
+      EXPECT(new_tts_stub_.ptr() != StubCode::LazySpecializeTypeTest().ptr());
+      ReportModifiedRegisters(modified_abi_regs());
+      // If we shouldn't go to the runtime, report any unexpected changes in
+      // non-ABI registers.
+      if (!is_lazy_specialization && !test_case.should_respecialize &&
+          (!test_case.should_be_false_negative ||
+           test_case.HasSTCEntry(previous_stc_, type_))) {
+        ReportModifiedRegisters(modified_rest_regs());
+      }
     }
   }
-}
 
-static void CommonTTSHandledChecks(const Object& result,
-                                   const SubtypeTestCache& stc) {
-  // Ensure the type test succeeded.
-  EXPECT(result.IsNull());
-  // Ensure we didn't fall back to the subtype test cache.
-  EXPECT(stc.IsNull());
-}
+  static void ReportModifiedRegisters(SmiPtr encoded_reg_mask) {
+    if (encoded_reg_mask == Smi::null()) {
+      dart::Expect(__FILE__, __LINE__).Fail("No modified register information");
+      return;
+    }
+    const intptr_t reg_mask = Smi::Value(encoded_reg_mask);
+    for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
+      if (((1 << i) & reg_mask) != 0) {
+        const Register reg = static_cast<Register>(i);
+        dart::Expect(__FILE__, __LINE__)
+            .Fail("%s was modified", RegisterNames::RegisterName(reg));
+      }
+    }
+  }
 
-static void ExpectLazilyHandledViaTTS(const Object& result,
-                                      const SubtypeTestCache& stc) {
-  THR_Print("Testing lazy handled via TTS\n");
-  CommonTTSHandledChecks(result, stc);
-}
+  void ReportMissingOrChangedEntries(const SubtypeTestCache& old_cache,
+                                     const SubtypeTestCache& new_cache) {
+    auto& cid_or_sig = Object::Handle(zone());
+    auto& type = AbstractType::Handle(zone());
+    auto& instance_type_args = TypeArguments::Handle(zone());
+    auto& instantiator_type_args = TypeArguments::Handle(zone());
+    auto& function_type_args = TypeArguments::Handle(zone());
+    auto& instance_parent_type_args = TypeArguments::Handle(zone());
+    auto& instance_delayed_type_args = TypeArguments::Handle(zone());
+    auto& old_result = Bool::Handle(zone());
+    auto& new_result = Bool::Handle(zone());
+    SafepointMutexLocker ml(
+        thread_->isolate_group()->subtype_test_cache_mutex());
+    for (intptr_t i = 0; i < old_cache.NumberOfChecks(); i++) {
+      old_cache.GetCheck(0, &cid_or_sig, &type, &instance_type_args,
+                         &instantiator_type_args, &function_type_args,
+                         &instance_parent_type_args,
+                         &instance_delayed_type_args, &old_result);
+      intptr_t new_index;
+      if (!new_cache.HasCheck(
+              cid_or_sig, type, instance_type_args, instantiator_type_args,
+              function_type_args, instance_parent_type_args,
+              instance_delayed_type_args, &new_index, &new_result)) {
+        dart::Expect(__FILE__, __LINE__)
+            .Fail("New STC is missing check in old STC");
+      }
+      if (old_result.value() != new_result.value()) {
+        dart::Expect(__FILE__, __LINE__)
+            .Fail("New STC has different result from old STC");
+      }
+    }
+  }
 
-static void ExpectHandledViaTTS(const Object& result,
-                                const SubtypeTestCache& stc,
-                                const Smi& abi_regs_modified,
-                                const Smi& rest_regs_modified) {
-  THR_Print("Testing non-lazy handled via TTS\n");
-  CommonTTSHandledChecks(result, stc);
-  // Ensure the TTS abi registers were preserved.
-  ReportModifiedRegisters(abi_regs_modified);
-  // Ensure the non-TTS abi registers were preserved.
-  ReportModifiedRegisters(rest_regs_modified);
-}
+  void ReportUnexpectedSTCChanges(const TTSTestCase& test_case,
+                                  bool is_lazy_specialization = false) {
+    ASSERT(!test_case.should_be_false_negative ||
+           !test_case.should_respecialize);
+    const bool had_stc_entry = test_case.HasSTCEntry(previous_stc_, type_);
+    const bool should_update_stc =
+        !is_lazy_specialization && test_case.should_be_false_negative;
+    if (should_update_stc && !had_stc_entry) {
+      // We should have changed the STC to include the new entry.
+      EXPECT(!last_stc_.IsNull());
+      if (!last_stc_.IsNull()) {
+        EXPECT(previous_stc_.IsNull() ||
+               previous_stc_.cache() != last_stc_.cache());
+        // We only should have added one check.
+        EXPECT_EQ(
+            previous_stc_.IsNull() ? 1 : previous_stc_.NumberOfChecks() + 1,
+            last_stc_.NumberOfChecks());
+        if (!previous_stc_.IsNull()) {
+          // Make sure all the checks in the previous STC are still there.
+          ReportMissingOrChangedEntries(previous_stc_, last_stc_);
+        }
+      }
+    } else {
+      // Whatever STC existed before, if any, should be unchanged.
+      if (previous_stc_.IsNull()) {
+        EXPECT(last_stc_.IsNull());
+      } else {
+        EXPECT(!last_stc_.IsNull() &&
+               previous_stc_.cache() == last_stc_.cache());
+      }
+    }
 
-static void CommonSTCHandledChecks(const Object& result,
-                                   const SubtypeTestCache& stc) {
-  // Ensure the type test succeeded.
-  EXPECT(result.IsNull());
-  // Ensure we did fall back to the subtype test cache.
-  EXPECT(!stc.IsNull());
-  // Ensure the test is marked as succeeding in the STC.
-  EXPECT_EQ(1, stc.NumberOfChecks());
-  SubtypeTestCacheTable entries(Array::Handle(stc.cache()));
-  EXPECT(entries[0].Get<SubtypeTestCache::kTestResult>() ==
-         Object::bool_true().ptr());
-}
+    // False negatives should always be an STC hit when not lazily
+    // (re)specializing. Note that we test the original type, _not_
+    // last_tested_type_.
+    const bool has_stc_entry = test_case.HasSTCEntry(last_stc_, type_);
+    if ((!should_update_stc && has_stc_entry) ||
+        (should_update_stc && !has_stc_entry)) {
+      TextBuffer buffer(128);
+      buffer.Printf(
+          "%s entry for %s, got:",
+          test_case.should_be_false_negative ? "Expected" : "Did not expect",
+          type_.ToCString());
+      if (last_stc_.IsNull()) {
+        buffer.AddString(" null");
+      } else {
+        buffer.AddString("\n");
+        for (intptr_t i = 0; i < last_stc_.NumberOfChecks(); i++) {
+          last_stc_.WriteCurrentEntryToBuffer(zone(), &buffer, i);
+          buffer.AddString("\n");
+        }
+      }
+      dart::Expect(__FILE__, __LINE__).Fail("%s", buffer.buffer());
+    }
+  }
 
-static void ExpectLazilyHandledViaSTC(const Object& result,
-                                      const SubtypeTestCache& stc) {
-  THR_Print("Testing lazy handled via STC\n");
-  CommonSTCHandledChecks(result, stc);
-}
+  Thread* const thread_;
+  const AbstractType& type_;
+  const Array& modified_abi_regs_box_;
+  const Array& modified_rest_regs_box_;
+  const Code& tts_invoker_;
+  const ObjectPool& pool_;
+  const Array& arguments_descriptor_;
+  Code& previous_tts_stub_;
+  SubtypeTestCache& previous_stc_;
+  Array& last_arguments_;
+  AbstractType& last_tested_type_;
+  Code& new_tts_stub_;
+  SubtypeTestCache& last_stc_;
+  Object& last_result_;
+};
 
-static void ExpectHandledViaSTC(const Object& result,
-                                const SubtypeTestCache& stc,
-                                const Smi& abi_regs_modified,
-                                const Smi& rest_regs_modified) {
-  THR_Print("Testing non-lazy handled via STC\n");
-  CommonSTCHandledChecks(result, stc);
-  // Ensure the TTS/STC abi registers were preserved.
-  ReportModifiedRegisters(abi_regs_modified);
-  // Ensure the non-TTS abi registers were preserved.
-  ReportModifiedRegisters(rest_regs_modified);
-}
+// Tests three situations in turn with the test case and with an
+// appropriate null object test:
+// 1) Install the lazy specialization stub for JIT and test.
+// 2) Test again without installing a stub, so using the stub resulting from 1.
+// 3) Install an eagerly specialized stub, similar to AOT mode but keeping any
+//    STC created by the earlier steps, and test.
+static void RunTTSTest(const AbstractType& dst_type,
+                       const TTSTestCase& test_case) {
+  bool null_should_fail = !Instance::NullIsAssignableTo(
+      dst_type, test_case.instantiator_tav, test_case.function_tav);
 
-static void CommonTTSFailureChecks(const Object& result,
-                                   const SubtypeTestCache& stc) {
-  // Ensure we have not updated STC (which we shouldn't do in case the type test
-  // fails, i.e. an exception is thrown).
-  EXPECT(stc.IsNull());
-  // Ensure we get a proper exception for the type test.
-  EXPECT(result.IsUnhandledException());
-  const auto& error =
-      Instance::Handle(UnhandledException::Cast(result).exception());
-  EXPECT(strstr(error.ToCString(), "_TypeError"));
-}
+  const TTSTestCase null_test(
+      Instance::Handle(), test_case.instantiator_tav, test_case.function_tav,
+      test_case.should_specialize, null_should_fail,
+      // Null is never a false negative.
+      /*should_be_false_negative=*/false,
+      // Since null is never a false negative, it can't trigger
+      // respecialization.
+      /*should_respecialize=*/false);
 
-static void ExpectLazilyFailedViaTTS(const Object& result,
-                                     const SubtypeTestCache& stc) {
-  THR_Print("Testing lazy failure via TTS\n");
-  CommonTTSFailureChecks(result, stc);
-}
+  TTSTestState state(Thread::Current(), dst_type);
+  // First check the null case. This should _never_ create an STC.
+  state.InvokeLazilySpecializedStub(null_test);
+  state.InvokeExistingStub(null_test);
+  state.InvokeEagerlySpecializedStub(null_test);
+  EXPECT(state.last_stc().IsNull());
 
-static void ExpectFailedViaTTS(const Object& result,
-                               const SubtypeTestCache& stc,
-                               const Smi& abi_regs_modified,
-                               const Smi& rest_regs_modified) {
-  THR_Print("Testing nonlazy failure via TTS\n");
-  CommonTTSFailureChecks(result, stc);
-  // Registers only need to be preserved on success.
-}
-
-static void CommonSTCFailureChecks(const Object& result,
-                                   const SubtypeTestCache& stc) {
-  // Ensure we have not updated STC (which we shouldn't do in case the type test
-  // fails, i.e. an exception is thrown).
-  EXPECT(stc.IsNull());
-  // Ensure we get a proper exception for the type test.
-  EXPECT(result.IsUnhandledException());
-  const auto& error =
-      Instance::Handle(UnhandledException::Cast(result).exception());
-  EXPECT(strstr(error.ToCString(), "_TypeError"));
-}
-
-static void ExpectLazilyFailedViaSTC(const Object& result,
-                                     const SubtypeTestCache& stc) {
-  THR_Print("Testing lazy failure via STC\n");
-  CommonSTCFailureChecks(result, stc);
-}
-
-static void ExpectFailedViaSTC(const Object& result,
-                               const SubtypeTestCache& stc,
-                               const Smi& abi_regs_modified,
-                               const Smi& rest_regs_modified) {
-  THR_Print("Testing non-lazy failure via STC\n");
-  CommonSTCFailureChecks(result, stc);
-  // Registers only need to be preserved on success.
+  // Now run the actual test case.
+  state.InvokeLazilySpecializedStub(test_case);
+  state.InvokeExistingStub(test_case);
+  state.InvokeEagerlySpecializedStub(test_case);
 }
 
 const char* kSubtypeRangeCheckScript =
@@ -476,48 +787,29 @@
 
   // <...> as A
   const auto& type_a = AbstractType::Handle(class_a.RareType());
-  RunTTSTest(obj_i, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_i2, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_base_int, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_a, type_a, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_a1, type_a, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_a2, type_a, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_b, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_b1, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_b2, type_a, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
+  RunTTSTest(type_a, Failure({obj_i, tav_null, tav_null}));
+  RunTTSTest(type_a, Failure({obj_i2, tav_null, tav_null}));
+  RunTTSTest(type_a, Failure({obj_base_int, tav_null, tav_null}));
+  RunTTSTest(type_a, {obj_a, tav_null, tav_null});
+  RunTTSTest(type_a, {obj_a1, tav_null, tav_null});
+  RunTTSTest(type_a, {obj_a2, tav_null, tav_null});
+  RunTTSTest(type_a, Failure({obj_b, tav_null, tav_null}));
+  RunTTSTest(type_a, Failure({obj_b1, tav_null, tav_null}));
+  RunTTSTest(type_a, Failure({obj_b2, tav_null, tav_null}));
 
   // <...> as Base<Object?>
   auto& type_base = AbstractType::Handle(Type::New(class_base, tav_object));
   FinalizeAndCanonicalize(&type_base);
-  RunTTSTest(obj_i, type_base, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_i2, type_base, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_base_int, type_base, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_base_null, type_base, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_a, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_a1, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_a2, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_b, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_b1, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_b2, type_base, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
+  RunTTSTest(type_base, Failure({obj_i, tav_null, tav_null}));
+  RunTTSTest(type_base, Failure({obj_i2, tav_null, tav_null}));
+  RunTTSTest(type_base, {obj_base_int, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_base_null, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_a, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_a1, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_a2, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_b, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_b1, tav_null, tav_null});
+  RunTTSTest(type_base, {obj_b2, tav_null, tav_null});
 
   // Base<Null|Never> as Base<int?>
   // This is a regression test verifying that we don't fall through into
@@ -532,10 +824,8 @@
   auto& type_base_nullable_int =
       AbstractType::Handle(Type::New(class_base, tav_nullable_int));
   FinalizeAndCanonicalize(&type_base_nullable_int);
-  RunTTSTest(obj_base_null, type_base_nullable_int, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_base_never, type_base_nullable_int, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
+  RunTTSTest(type_base_nullable_int, {obj_base_null, tav_null, tav_null});
+  RunTTSTest(type_base_nullable_int, {obj_base_never, tav_null, tav_null});
 
   if (TestCase::IsNNBD()) {
     // Base<Null|Never> as Base<int>
@@ -549,56 +839,37 @@
         type_base_int.ToNullability(Nullability::kNonNullable, Heap::kNew);
     FinalizeAndCanonicalize(&type_base_int);
     if (IsolateGroup::Current()->null_safety()) {
-      RunTTSTest(obj_base_null, type_base_int, tav_null, tav_null,
-                 ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+      RunTTSTest(type_base_int, Failure({obj_base_null, tav_null, tav_null}));
     }
-    RunTTSTest(obj_base_never, type_base_int, tav_null, tav_null,
-               ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
+    RunTTSTest(type_base_int, {obj_base_never, tav_null, tav_null});
   }
 
   // <...> as I2
   const auto& type_i2 = AbstractType::Handle(class_i2.RareType());
-  RunTTSTest(obj_i, type_i2, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_i2, type_i2, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_base_int, type_i2, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a, type_i2, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_a1, type_i2, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_a2, type_i2, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_b, type_i2, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
-  RunTTSTest(obj_b1, type_i2, tav_null, tav_null, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
-  RunTTSTest(obj_b2, type_i2, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
+  RunTTSTest(type_i2, Failure({obj_i, tav_null, tav_null}));
+  RunTTSTest(type_i2, {obj_i2, tav_null, tav_null});
+  RunTTSTest(type_i2, Failure({obj_base_int, tav_null, tav_null}));
+  RunTTSTest(type_i2, Failure({obj_a, tav_null, tav_null}));
+  RunTTSTest(type_i2, {obj_a1, tav_null, tav_null});
+  RunTTSTest(type_i2, Failure({obj_a2, tav_null, tav_null}));
+  RunTTSTest(type_i2, Failure({obj_b, tav_null, tav_null}));
+  RunTTSTest(type_i2, {obj_b1, tav_null, tav_null});
+  RunTTSTest(type_i2, Failure({obj_b2, tav_null, tav_null}));
 
   // <...> as I<Object, dynamic>
   auto& type_i_object_dynamic =
       AbstractType::Handle(Type::New(class_i, tav_object_dynamic));
   FinalizeAndCanonicalize(&type_i_object_dynamic);
-  RunTTSTest(obj_i, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_i2, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_base_int, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a1, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a2, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_b, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_b1, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_b2, type_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
+  RunTTSTest(type_i_object_dynamic, {obj_i, tav_null, tav_null});
+  RunTTSTest(type_i_object_dynamic, Failure({obj_i2, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic,
+             Failure({obj_base_int, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic, Failure({obj_a, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic, Failure({obj_a1, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic, {obj_a2, tav_null, tav_null});
+  RunTTSTest(type_i_object_dynamic, Failure({obj_b, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic, Failure({obj_b1, tav_null, tav_null}));
+  RunTTSTest(type_i_object_dynamic, {obj_b2, tav_null, tav_null});
 
   // We do not generate TTS for uninstantiated types if we would need to use
   // subtype range checks for the class of the interface type.
@@ -608,34 +879,24 @@
   auto& type_dynamic_t =
       AbstractType::Handle(Type::New(class_i, tav_dynamic_t));
   FinalizeAndCanonicalize(&type_dynamic_t);
-  RunTTSTest(obj_i, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
-  RunTTSTest(obj_i2, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_base_int, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_a, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_a1, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_a2, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
-  RunTTSTest(obj_b, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_b1, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
-  RunTTSTest(obj_b2, type_dynamic_t, tav_object, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
+  RunTTSTest(type_dynamic_t, FalseNegative({obj_i, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_i2, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_base_int, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_a, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_a1, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, FalseNegative({obj_a2, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_b, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, Failure({obj_b1, tav_object, tav_null}));
+  RunTTSTest(type_dynamic_t, FalseNegative({obj_b2, tav_object, tav_null}));
 
   // obj as Object (with null safety)
   auto isolate_group = IsolateGroup::Current();
   if (isolate_group->null_safety()) {
     auto& type_non_nullable_object =
         Type::Handle(isolate_group->object_store()->non_nullable_object_type());
-    RunTTSTest(obj_a, type_non_nullable_object, tav_null, tav_null,
-               ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-    RunTTSTest(Object::null_object(), type_non_nullable_object, tav_null,
-               tav_null, ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+    RunTTSTest(type_non_nullable_object, {obj_a, tav_null, tav_null});
+    RunTTSTest(type_non_nullable_object,
+               Failure({Object::null_object(), tav_null, tav_null}));
   }
 }
 
@@ -730,22 +991,15 @@
   auto& type_base_i_object_dynamic =
       AbstractType::Handle(Type::New(class_base, tav_iod));
   FinalizeAndCanonicalize(&type_base_i_object_dynamic);
-  RunTTSTest(obj_baseb2int, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_baseistringdouble, type_base_i_object_dynamic, tav_null,
-             tav_null, ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_a, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a1, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_a2, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_b, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_b1, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
-  RunTTSTest(obj_b2, type_base_i_object_dynamic, tav_null, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+  RunTTSTest(type_base_i_object_dynamic, {obj_baseb2int, tav_null, tav_null});
+  RunTTSTest(type_base_i_object_dynamic,
+             {obj_baseistringdouble, tav_null, tav_null});
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_a, tav_null, tav_null}));
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_a1, tav_null, tav_null}));
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_a2, tav_null, tav_null}));
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_b, tav_null, tav_null}));
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_b1, tav_null, tav_null}));
+  RunTTSTest(type_base_i_object_dynamic, Failure({obj_b2, tav_null, tav_null}));
 
   // <...> as Base<T>  with T instantiantiator type parameter (T == int)
   const auto& tav_baset = TypeArguments::Handle(TypeArguments::New(1));
@@ -753,10 +1007,8 @@
       0, TypeParameter::Handle(GetClassTypeParameter(class_base, 0)));
   auto& type_base_t = AbstractType::Handle(Type::New(class_base, tav_baset));
   FinalizeAndCanonicalize(&type_base_t);
-  RunTTSTest(obj_base_int, type_base_t, tav_int, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_baseistringdouble, type_base_t, tav_int, tav_null,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+  RunTTSTest(type_base_t, {obj_base_int, tav_int, tav_null});
+  RunTTSTest(type_base_t, Failure({obj_baseistringdouble, tav_int, tav_null}));
 
   // <...> as Base<B>  with B function type parameter
   const auto& tav_baseb = TypeArguments::Handle(TypeArguments::New(1));
@@ -765,18 +1017,17 @@
   auto& type_base_b = AbstractType::Handle(Type::New(class_base, tav_baseb));
   FinalizeAndCanonicalize(&type_base_b);
   // With B == int
-  RunTTSTest(obj_base_int, type_base_b, tav_null, tav_dynamic_int,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_baseistringdouble, type_base_b, tav_null, tav_dynamic_int,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+  RunTTSTest(type_base_b, {obj_base_int, tav_null, tav_dynamic_int});
+  RunTTSTest(type_base_b,
+             Failure({obj_baseistringdouble, tav_null, tav_dynamic_int}));
   // With B == dynamic (null vector)
-  RunTTSTest(obj_base_int, type_base_b, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(obj_i2, type_base_b, tav_null, tav_null, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
+  RunTTSTest(type_base_b, {obj_base_int, tav_null, tav_null});
+  RunTTSTest(type_base_b, Failure({obj_i2, tav_null, tav_null}));
 
-  // We do not generate TTS for uninstantiated types if we would need to use
-  // subtype range checks for the class of the interface type.
+  // We generate TTS for implemented classes and uninstantiated types, but
+  // any class that implements the type class but does not match in both
+  // instance TAV offset and type argument indices is guaranteed to be a
+  // false negative.
   //
   //   obj as I<dynamic, String>       // I is generic & implemented.
   //   obj as Base<A2<T>>              // A2<T> is not instantiated.
@@ -790,10 +1041,9 @@
   type_i_dynamic_string = type_i_dynamic_string.ToNullability(
       Nullability::kNonNullable, Heap::kNew);
   FinalizeAndCanonicalize(&type_i_dynamic_string);
-  RunTTSTest(obj_i, type_i_dynamic_string, tav_null, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
-  RunTTSTest(obj_base_int, type_i_dynamic_string, tav_null, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
+  RunTTSTest(type_i_dynamic_string, {obj_i, tav_null, tav_null});
+  RunTTSTest(type_i_dynamic_string,
+             Failure({obj_base_int, tav_null, tav_null}));
 
   //   <...> as Base<A2<T>>
   const auto& tav_t = TypeArguments::Handle(TypeArguments::New(1));
@@ -808,10 +1058,10 @@
   type_base_a2_t =
       type_base_a2_t.ToNullability(Nullability::kNonNullable, Heap::kNew);
   FinalizeAndCanonicalize(&type_base_a2_t);
-  RunTTSTest(obj_basea2int, type_base_a2_t, tav_null, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
-  RunTTSTest(obj_base_int, type_base_a2_t, tav_null, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
+  RunTTSTest(type_base_a2_t, FalseNegative({obj_basea2int, tav_null, tav_null,
+                                            /*should_specialize=*/false}));
+  RunTTSTest(type_base_a2_t, Failure({obj_base_int, tav_null, tav_null,
+                                      /*should_specialize=*/false}));
 
   //   <...> as Base<A2<A1>>
   const auto& tav_a1 = TypeArguments::Handle(TypeArguments::New(1));
@@ -825,10 +1075,116 @@
   type_base_a2_a1 =
       type_base_a2_a1.ToNullability(Nullability::kNonNullable, Heap::kNew);
   FinalizeAndCanonicalize(&type_base_a2_a1);
-  RunTTSTest(obj_basea2a1, type_base_a2_a1, tav_null, tav_null,
-             ExpectLazilyHandledViaSTC, ExpectHandledViaSTC);
-  RunTTSTest(obj_basea2int, type_base_a2_a1, tav_null, tav_null,
-             ExpectLazilyFailedViaSTC, ExpectFailedViaSTC);
+  RunTTSTest(type_base_a2_a1, FalseNegative({obj_basea2a1, tav_null, tav_null,
+                                             /*should_specialize=*/false}));
+  RunTTSTest(type_base_a2_a1, Failure({obj_basea2int, tav_null, tav_null,
+                                       /*should_specialize=*/false}));
+}
+
+ISOLATE_UNIT_TEST_CASE(TTS_Generic_Implements_Instantiated_Interface) {
+  const char* kScript =
+      R"(
+      abstract class I<T> {}
+      class B<R> implements I<String> {}
+
+      createBInt() => B<int>();
+)";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  const auto& class_i = Class::Handle(GetClass(root_library, "I"));
+  const auto& obj_b_int = Object::Handle(Invoke(root_library, "createBInt"));
+
+  const auto& tav_null = Object::null_type_arguments();
+  auto& tav_string = TypeArguments::Handle(TypeArguments::New(1));
+  tav_string.SetTypeAt(0, Type::Handle(Type::StringType()));
+  CanonicalizeTAV(&tav_string);
+
+  auto& type_i_string = Type::Handle(Type::New(class_i, tav_string));
+  FinalizeAndCanonicalize(&type_i_string);
+  const auto& type_i_t = Type::Handle(class_i.DeclarationType());
+
+  RunTTSTest(type_i_string, {obj_b_int, tav_null, tav_null});
+  // Optimized TTSees don't currently handle the case where the implemented
+  // type is known, but the type being checked requires instantiation at
+  // runtime.
+  RunTTSTest(type_i_t, FalseNegative({obj_b_int, tav_string, tav_null}));
+}
+
+ISOLATE_UNIT_TEST_CASE(TTS_Future) {
+  const char* kScript =
+      R"(
+      import "dart:async";
+
+      createFutureInt() => (() async => 3)();
+)";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  const auto& class_future = Class::Handle(GetClass(root_library, "Future"));
+  const auto& obj_futureint =
+      Object::Handle(Invoke(root_library, "createFutureInt"));
+
+  const auto& type_nullable_object = Type::Handle(
+      IsolateGroup::Current()->object_store()->nullable_object_type());
+  const auto& type_int = Type::Handle(Type::IntType());
+  const auto& type_string = Type::Handle(Type::StringType());
+  const auto& type_num = Type::Handle(Type::Number());
+
+  const auto& tav_null = Object::null_type_arguments();
+  auto& tav_dynamic = TypeArguments::Handle(TypeArguments::New(1));
+  tav_dynamic.SetTypeAt(0, Object::dynamic_type());
+  CanonicalizeTAV(&tav_dynamic);
+  auto& tav_nullable_object = TypeArguments::Handle(TypeArguments::New(1));
+  tav_nullable_object.SetTypeAt(0, type_nullable_object);
+  CanonicalizeTAV(&tav_nullable_object);
+  auto& tav_int = TypeArguments::Handle(TypeArguments::New(1));
+  tav_int.SetTypeAt(0, type_int);
+  CanonicalizeTAV(&tav_int);
+  auto& tav_num = TypeArguments::Handle(TypeArguments::New(1));
+  tav_num.SetTypeAt(0, type_num);
+  CanonicalizeTAV(&tav_num);
+  auto& tav_string = TypeArguments::Handle(TypeArguments::New(1));
+  tav_string.SetTypeAt(0, type_string);
+  CanonicalizeTAV(&tav_string);
+
+  auto& type_future = Type::Handle(Type::New(class_future, tav_null));
+  FinalizeAndCanonicalize(&type_future);
+  auto& type_future_dynamic =
+      Type::Handle(Type::New(class_future, tav_dynamic));
+  FinalizeAndCanonicalize(&type_future_dynamic);
+  auto& type_future_nullable_object =
+      Type::Handle(Type::New(class_future, tav_nullable_object));
+  FinalizeAndCanonicalize(&type_future_nullable_object);
+  auto& type_future_int = Type::Handle(Type::New(class_future, tav_int));
+  FinalizeAndCanonicalize(&type_future_int);
+  auto& type_future_string = Type::Handle(Type::New(class_future, tav_string));
+  FinalizeAndCanonicalize(&type_future_string);
+  auto& type_future_num = Type::Handle(Type::New(class_future, tav_num));
+  FinalizeAndCanonicalize(&type_future_num);
+  auto& type_future_t = Type::Handle(class_future.DeclarationType());
+
+  // Some more tests of generic implemented classes, using Future. Here,
+  // obj is an object of type Future<int>.
+  //
+  //   obj as Future          : Null type args (caught by TTS)
+  //   obj as Future<dynamic> : Canonicalized to same as previous case.
+  //   obj as Future<Object?> : Type arg is top type (caught by TTS)
+  //   obj as Future<int>     : Type arg is the same type (caught by TTS)
+  //   obj as Future<String>  : Type arg is not a subtype (error via runtime)
+  //   obj as Future<num>     : Type arg is a supertype that can be matched
+  //                            with cid range (caught by TTS)
+  //   obj as Future<X>,      : Type arg is a type parameter instantiated with
+  //       X = int            :    ... the same type (caught by TTS)
+  //       X = String         :    ... an unrelated type (error via runtime)
+  //       X = num            :    ... a supertype (caught by STC/runtime)
+  RunTTSTest(type_future, {obj_futureint, tav_null, tav_null});
+  RunTTSTest(type_future_dynamic, {obj_futureint, tav_null, tav_null});
+  RunTTSTest(type_future_nullable_object, {obj_futureint, tav_null, tav_null});
+  RunTTSTest(type_future_int, {obj_futureint, tav_null, tav_null});
+  RunTTSTest(type_future_string, Failure({obj_futureint, tav_null, tav_null}));
+  RunTTSTest(type_future_num, {obj_futureint, tav_null, tav_null});
+  RunTTSTest(type_future_t, {obj_futureint, tav_int, tav_null});
+  RunTTSTest(type_future_t, Failure({obj_futureint, tav_string, tav_null}));
+  RunTTSTest(type_future_t, FalseNegative({obj_futureint, tav_num, tav_null}));
 }
 
 ISOLATE_UNIT_TEST_CASE(TTS_Regress40964) {
@@ -863,12 +1219,10 @@
   const auto& function_tav = TypeArguments::Handle();
 
   // a as B<T> -- a==B<C<int>, T==<C<int>>
-  RunTTSTest(bcint, dst_type, cint_tav, function_tav, ExpectLazilyHandledViaTTS,
-             ExpectHandledViaTTS);
+  RunTTSTest(dst_type, {bcint, cint_tav, function_tav});
 
   // a as B<T> -- a==B<C<num>, T==<C<int>>
-  RunTTSTest(bcnum, dst_type, cint_tav, function_tav, ExpectLazilyFailedViaTTS,
-             ExpectFailedViaTTS);
+  RunTTSTest(dst_type, Failure({bcnum, cint_tav, function_tav}));
 }
 
 ISOLATE_UNIT_TEST_CASE(TTS_TypeParameter) {
@@ -908,34 +1262,521 @@
   const auto& string_instance = String::Handle(String::New("foo"));
 
   THR_Print("Testing int instance, class parameter instantiated to int\n");
-  RunTTSTest(int_instance, dst_type_t, int_tav, string_tav,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
+  RunTTSTest(dst_type_t, {int_instance, int_tav, string_tav});
   THR_Print("\nTesting string instance, class parameter instantiated to int\n");
-  RunTTSTest(string_instance, dst_type_t, int_tav, string_tav,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+  RunTTSTest(dst_type_t, Failure({string_instance, int_tav, string_tav}));
 
   THR_Print(
       "\nTesting string instance, function parameter instantiated to string\n");
-  RunTTSTest(string_instance, dst_type_h, int_tav, string_tav,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
-  RunTTSTest(int_instance, dst_type_h, int_tav, string_tav,
-             ExpectLazilyFailedViaTTS, ExpectFailedViaTTS);
+  RunTTSTest(dst_type_h, {string_instance, int_tav, string_tav});
+  RunTTSTest(dst_type_h, Failure({int_instance, int_tav, string_tav}));
 }
 
 // Check that we generate correct TTS for _Smi type.
 ISOLATE_UNIT_TEST_CASE(TTS_Smi) {
-  const auto& root_library = Library::Handle(Library::CoreLibrary());
-  const auto& smi_class = Class::Handle(GetClass(root_library, "_Smi"));
-  ClassFinalizer::FinalizeTypesInClass(smi_class);
+  const auto& type_smi = Type::Handle(Type::SmiType());
+  const auto& tav_null = Object::null_type_arguments();
 
-  const auto& dst_type = AbstractType::Handle(smi_class.RareType());
-  const auto& tav_null = TypeArguments::Handle(TypeArguments::null());
-
-  THR_Print("\nTesting that instance of _Smi is a subtype of _Smi\n");
-  RunTTSTest(Smi::Handle(Smi::New(0)), dst_type, tav_null, tav_null,
-             ExpectLazilyHandledViaTTS, ExpectHandledViaTTS);
+  // Test on some easy-to-make instances.
+  RunTTSTest(type_smi, {Smi::Handle(Smi::New(0)), tav_null, tav_null});
+  RunTTSTest(type_smi, Failure({Integer::Handle(Integer::New(kMaxInt64)),
+                                tav_null, tav_null}));
+  RunTTSTest(type_smi,
+             Failure({Double::Handle(Double::New(1.0)), tav_null, tav_null}));
+  RunTTSTest(type_smi, Failure({Symbols::Empty(), tav_null, tav_null}));
+  RunTTSTest(type_smi,
+             Failure({Array::Handle(Array::New(1)), tav_null, tav_null}));
 }
 
+// Check that we generate correct TTS for int type.
+ISOLATE_UNIT_TEST_CASE(TTS_Int) {
+  const auto& type_int = Type::Handle(Type::IntType());
+  const auto& tav_null = Object::null_type_arguments();
+
+  // Test on some easy-to-make instances.
+  RunTTSTest(type_int, {Smi::Handle(Smi::New(0)), tav_null, tav_null});
+  RunTTSTest(type_int,
+             {Integer::Handle(Integer::New(kMaxInt64)), tav_null, tav_null});
+  RunTTSTest(type_int,
+             Failure({Double::Handle(Double::New(1.0)), tav_null, tav_null}));
+  RunTTSTest(type_int, Failure({Symbols::Empty(), tav_null, tav_null}));
+  RunTTSTest(type_int,
+             Failure({Array::Handle(Array::New(1)), tav_null, tav_null}));
+}
+
+// Check that we generate correct TTS for num type.
+ISOLATE_UNIT_TEST_CASE(TTS_Num) {
+  const auto& type_num = Type::Handle(Type::Number());
+  const auto& tav_null = Object::null_type_arguments();
+
+  // Test on some easy-to-make instances.
+  RunTTSTest(type_num, {Smi::Handle(Smi::New(0)), tav_null, tav_null});
+  RunTTSTest(type_num,
+             {Integer::Handle(Integer::New(kMaxInt64)), tav_null, tav_null});
+  RunTTSTest(type_num, {Double::Handle(Double::New(1.0)), tav_null, tav_null});
+  RunTTSTest(type_num, Failure({Symbols::Empty(), tav_null, tav_null}));
+  RunTTSTest(type_num,
+             Failure({Array::Handle(Array::New(1)), tav_null, tav_null}));
+}
+
+// Check that we generate correct TTS for Double type.
+ISOLATE_UNIT_TEST_CASE(TTS_Double) {
+  const auto& type_num = Type::Handle(Type::Double());
+  const auto& tav_null = Object::null_type_arguments();
+
+  // Test on some easy-to-make instances.
+  RunTTSTest(type_num, Failure({Smi::Handle(Smi::New(0)), tav_null, tav_null}));
+  RunTTSTest(type_num, Failure({Integer::Handle(Integer::New(kMaxInt64)),
+                                tav_null, tav_null}));
+  RunTTSTest(type_num, {Double::Handle(Double::New(1.0)), tav_null, tav_null});
+  RunTTSTest(type_num, Failure({Symbols::Empty(), tav_null, tav_null}));
+  RunTTSTest(type_num,
+             Failure({Array::Handle(Array::New(1)), tav_null, tav_null}));
+}
+
+// Check that we generate correct TTS for Object type.
+ISOLATE_UNIT_TEST_CASE(TTS_Object) {
+  const auto& type_obj =
+      Type::Handle(IsolateGroup::Current()->object_store()->object_type());
+  const auto& tav_null = Object::null_type_arguments();
+
+  auto make_test_case = [&](const Instance& instance) -> TTSTestCase {
+    if (IsolateGroup::Current()->use_strict_null_safety_checks()) {
+      // The stub for non-nullable object should specialize, but only fails
+      // on null, which is already checked within RunTTSTest.
+      return {instance, tav_null, tav_null};
+    } else {
+      // The default type testing stub for nullable object is the top type
+      // stub, so it should neither specialize _or_ return false negatives.
+      return {instance, tav_null, tav_null, /*should_specialize=*/false};
+    }
+  };
+
+  // Test on some easy-to-make instances.
+  RunTTSTest(type_obj, make_test_case(Smi::Handle(Smi::New(0))));
+  RunTTSTest(type_obj,
+             make_test_case(Integer::Handle(Integer::New(kMaxInt64))));
+  RunTTSTest(type_obj, make_test_case(Double::Handle(Double::New(1.0))));
+  RunTTSTest(type_obj, make_test_case(Symbols::Empty()));
+  RunTTSTest(type_obj, make_test_case(Array::Handle(Array::New(1))));
+}
+
+// Check that we generate correct TTS for type Function (the non-FunctionType
+// version).
+ISOLATE_UNIT_TEST_CASE(TTS_Function) {
+  const char* kScript =
+      R"(
+          class A<T> {}
+
+          createF() => (){};
+          createG() => () => 3;
+          createH() => (int x, String y, {int z : 0}) =>  x + z;
+
+          createAInt() => A<int>();
+          createAFunction() => A<Function>();
+  )";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  const auto& obj_f = Object::Handle(Invoke(root_library, "createF"));
+  const auto& obj_g = Object::Handle(Invoke(root_library, "createG"));
+  const auto& obj_h = Object::Handle(Invoke(root_library, "createH"));
+
+  const auto& tav_null = TypeArguments::Handle(TypeArguments::null());
+  const auto& type_function = Type::Handle(Type::DartFunctionType());
+
+  RunTTSTest(type_function, {obj_f, tav_null, tav_null});
+  RunTTSTest(type_function, {obj_g, tav_null, tav_null});
+  RunTTSTest(type_function, {obj_h, tav_null, tav_null});
+
+  const auto& class_a = Class::Handle(GetClass(root_library, "A"));
+  const auto& obj_a_int = Object::Handle(Invoke(root_library, "createAInt"));
+  const auto& obj_a_function =
+      Object::Handle(Invoke(root_library, "createAFunction"));
+
+  auto& tav_function = TypeArguments::Handle(TypeArguments::New(1));
+  tav_function.SetTypeAt(0, type_function);
+  CanonicalizeTAV(&tav_function);
+  auto& type_a_function = Type::Handle(Type::New(class_a, tav_function));
+  FinalizeAndCanonicalize(&type_a_function);
+
+  RunTTSTest(type_a_function, {obj_a_function, tav_null, tav_null});
+  RunTTSTest(type_a_function, Failure({obj_a_int, tav_null, tav_null}));
+}
+
+ISOLATE_UNIT_TEST_CASE(TTS_Partial) {
+  const char* kScript =
+      R"(
+      class B<T> {}
+      F<A>() {}
+      createB() => B<int>();
+)";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  const auto& class_b = Class::Handle(GetClass(root_library, "B"));
+  const auto& fun_f = Function::Handle(GetFunction(root_library, "F"));
+  const auto& obj_b = Object::Handle(Invoke(root_library, "createB"));
+
+  const auto& tav_null = Object::null_type_arguments();
+  auto& tav_int = TypeArguments::Handle(TypeArguments::New(1));
+  tav_int.SetTypeAt(0, Type::Handle(Type::IntType()));
+  CanonicalizeTAV(&tav_int);
+  auto& tav_object = TypeArguments::Handle(TypeArguments::New(1));
+  tav_object.SetTypeAt(0, Type::Handle(Type::ObjectType()));
+  CanonicalizeTAV(&tav_object);
+  auto& tav_num = TypeArguments::Handle(TypeArguments::New(1));
+  tav_num.SetTypeAt(0, Type::Handle(Type::Number()));
+  CanonicalizeTAV(&tav_num);
+
+  // One case where optimized TTSes can be partial is if the type is
+  // uninstantiated with a type parameter at the same position as one of the
+  // class's type parameters. The type parameter in the type is instantiated at
+  // runtime and compared with the corresponding instance type argument using
+  // pointer equality, which misses the case where the instantiated type
+  // parameter in the type is a supertype of the instance type argument.
+  const auto& type_a =
+      TypeParameter::Handle(GetFunctionTypeParameter(fun_f, 0));
+  auto& tav_a = TypeArguments::Handle(TypeArguments::New(1));
+  tav_a.SetTypeAt(0, type_a);
+  auto& type_b2_a = AbstractType::Handle(Type::New(class_b, tav_a));
+  FinalizeAndCanonicalize(&type_b2_a);
+  TTSTestState state(thread, type_b2_a);
+
+  TTSTestCase positive_test_case{obj_b, tav_null, tav_int};
+  TTSTestCase first_false_negative_test_case =
+      FalseNegative({obj_b, tav_null, tav_object});
+  TTSTestCase second_false_negative_test_case =
+      FalseNegative({obj_b, tav_null, tav_num});
+  // No test case should possibly hit the same STC entry as another.
+  ASSERT(!first_false_negative_test_case.HasSameSTCEntry(positive_test_case));
+  ASSERT(!second_false_negative_test_case.HasSameSTCEntry(positive_test_case));
+  ASSERT(!second_false_negative_test_case.HasSameSTCEntry(
+      first_false_negative_test_case));
+  // The type with the tested stub must be the same in all test cases.
+  ASSERT(state.TypeToTest(positive_test_case) ==
+         state.TypeToTest(first_false_negative_test_case));
+  ASSERT(state.TypeToTest(positive_test_case) ==
+         state.TypeToTest(second_false_negative_test_case));
+
+  // First, test that the positive test case is handled by the TTS.
+  state.InvokeLazilySpecializedStub(positive_test_case);
+  state.InvokeExistingStub(positive_test_case);
+
+  // Now restart, using the false negative test cases.
+  state.ClearCache();
+
+  state.InvokeLazilySpecializedStub(first_false_negative_test_case);
+  state.InvokeExistingStub(first_false_negative_test_case);
+  state.InvokeEagerlySpecializedStub(first_false_negative_test_case);
+
+  state.InvokeExistingStub(positive_test_case);
+  state.InvokeExistingStub(second_false_negative_test_case);
+  state.InvokeExistingStub(first_false_negative_test_case);
+  state.InvokeExistingStub(positive_test_case);
+}
+
+ISOLATE_UNIT_TEST_CASE(TTS_Partial_Incremental) {
+#define FILE_RESOLVE_URI(Uri) "file:///" Uri
+#define FIRST_PARTIAL_LIBRARY_NAME "test-lib"
+#define SECOND_PARTIAL_LIBRARY_NAME "test-lib-2"
+#define THIRD_PARTIAL_LIBRARY_NAME "test-lib-3"
+
+  // Same test script as TTS_Partial.
+  const char* kFirstScript =
+      R"(
+      class B<T> {}
+      createB() => B<int>();
+)";
+
+  // A test script which imports the B class and extend it, to test
+  // respecialization when the hierarchy changes without reloading.
+  const char* kSecondScript =
+      R"(
+      import ")" FIRST_PARTIAL_LIBRARY_NAME R"(";
+      class B2<T> extends B<T> {}
+      createB2() => B2<int>();
+)";
+
+  // Another one to test respecialization a second time.
+  const char* kThirdScript =
+      R"(
+      import ")" FIRST_PARTIAL_LIBRARY_NAME R"(";
+      class B3<T> extends B<T> {}
+      createB3() => B3<int>();
+)";
+
+  const char* kFirstUri = FILE_RESOLVE_URI(FIRST_PARTIAL_LIBRARY_NAME);
+  const char* kSecondUri = FILE_RESOLVE_URI(SECOND_PARTIAL_LIBRARY_NAME);
+  const char* kThirdUri = FILE_RESOLVE_URI(THIRD_PARTIAL_LIBRARY_NAME);
+
+#undef THIRD_PARTIAL_LIBRARY_URI
+#undef SECOND_PARTIAL_LIBRARY_URI
+#undef FIRST_PARTIAL_LIBRARY_URI
+#undef FILE_RESOLVE_URI
+
+  THR_Print("------------------------------------------------------\n");
+  THR_Print("             Loading %s\n", kFirstUri);
+  THR_Print("------------------------------------------------------\n");
+  const auto& first_library = Library::Handle(
+      LoadTestScript(kFirstScript, /*resolver=*/nullptr, kFirstUri));
+
+  const auto& class_b = Class::Handle(GetClass(first_library, "B"));
+  const auto& obj_b = Object::Handle(Invoke(first_library, "createB"));
+
+  const auto& tav_null = Object::null_type_arguments();
+  auto& tav_int = TypeArguments::Handle(TypeArguments::New(1));
+  tav_int.SetTypeAt(0, Type::Handle(Type::IntType()));
+  CanonicalizeTAV(&tav_int);
+  auto& tav_num = TypeArguments::Handle(TypeArguments::New(1));
+  tav_num.SetTypeAt(0, Type::Handle(Type::Number()));
+  CanonicalizeTAV(&tav_num);
+
+  auto& type_b2_t = AbstractType::Handle(class_b.DeclarationType());
+  FinalizeAndCanonicalize(&type_b2_t);
+  TTSTestState state(thread, type_b2_t);
+
+  TTSTestCase first_positive{obj_b, tav_int, tav_null};
+  TTSTestCase first_false_negative = FalseNegative({obj_b, tav_num, tav_null});
+  // No test case should possibly hit the same STC entry as another.
+  ASSERT(!first_false_negative.HasSameSTCEntry(first_positive));
+  // The type with the tested stub must be the same in all test cases.
+  ASSERT(state.TypeToTest(first_positive) ==
+         state.TypeToTest(first_false_negative));
+
+  state.InvokeLazilySpecializedStub(first_false_negative);
+  state.InvokeExistingStub(first_false_negative);
+  state.InvokeEagerlySpecializedStub(first_false_negative);
+
+  state.InvokeExistingStub(first_positive);
+  state.InvokeExistingStub(first_false_negative);
+
+  Array& stc_cache = Array::Handle(
+      state.last_stc().IsNull() ? Array::null() : state.last_stc().cache());
+  THR_Print("------------------------------------------------------\n");
+  THR_Print("             Loading %s\n", kSecondUri);
+  THR_Print("------------------------------------------------------\n");
+  const auto& second_library = Library::Handle(
+      LoadTestScript(kSecondScript, /*resolver=*/nullptr, kSecondUri));
+  // Loading the new library shouldn't invalidate the old STC.
+  EXPECT(state.last_stc().ptr() == state.current_stc());
+  // Loading the new library should not reset the STCs, as no respecialization
+  // should happen yet.
+  EXPECT((state.last_stc().IsNull() && stc_cache.IsNull()) ||
+         stc_cache.ptr() == state.last_stc().cache());
+
+  const auto& obj_b2 = Object::Handle(Invoke(second_library, "createB2"));
+
+  TTSTestCase second_positive{obj_b2, tav_int, tav_null};
+  TTSTestCase second_false_negative =
+      FalseNegative({obj_b2, tav_num, tav_null});
+  // No test case should possibly hit the same STC entry as another.
+  ASSERT(!second_positive.HasSameSTCEntry(second_false_negative));
+  ASSERT(!second_positive.HasSameSTCEntry(first_positive));
+  ASSERT(!second_positive.HasSameSTCEntry(first_false_negative));
+  ASSERT(!second_false_negative.HasSameSTCEntry(first_positive));
+  ASSERT(!second_false_negative.HasSameSTCEntry(first_false_negative));
+  // The type with the tested stub must be the same in all test cases.
+  ASSERT(state.TypeToTest(second_positive) ==
+         state.TypeToTest(second_false_negative));
+  ASSERT(state.TypeToTest(first_positive) == state.TypeToTest(second_positive));
+
+  // Old positive should still be caught by TTS.
+  state.InvokeExistingStub(first_positive);
+  // Same false negative should still be caught by STC and not cause
+  // respecialization.
+  state.InvokeExistingStub(first_false_negative);
+
+  // The new positive should be a false negative at the TTS level that causes
+  // respecialization, as the class hierarchy has changed.
+  state.InvokeExistingStub(Respecialization(second_positive));
+
+  // The first false positive is still in the cache.
+  state.InvokeExistingStub(first_false_negative);
+
+  // This false negative is not yet in the cache.
+  state.InvokeExistingStub(second_false_negative);
+
+  state.InvokeExistingStub(first_positive);
+  state.InvokeExistingStub(second_positive);
+
+  // Now the second false negative is in the cache.
+  state.InvokeExistingStub(second_false_negative);
+
+  stc_cache =
+      state.last_stc().IsNull() ? Array::null() : state.last_stc().cache();
+  THR_Print("------------------------------------------------------\n");
+  THR_Print("             Loading %s\n", kThirdUri);
+  THR_Print("------------------------------------------------------\n");
+  const auto& third_library = Library::Handle(
+      LoadTestScript(kThirdScript, /*resolver=*/nullptr, kThirdUri));
+  // Loading the new library shouldn't invalidate the old STC.
+  EXPECT(state.last_stc().ptr() == state.current_stc());
+  // Loading the new library should not reset the STCs, as no respecialization
+  // should happen yet.
+  EXPECT((state.last_stc().IsNull() && stc_cache.IsNull()) ||
+         stc_cache.ptr() == state.last_stc().cache());
+
+  const auto& obj_b3 = Object::Handle(Invoke(third_library, "createB3"));
+
+  TTSTestCase third_positive{obj_b3, tav_int, tav_null};
+  TTSTestCase third_false_negative = FalseNegative({obj_b3, tav_num, tav_null});
+  // No test case should possibly hit the same STC entry as another.
+  ASSERT(!third_positive.HasSameSTCEntry(third_false_negative));
+  ASSERT(!third_positive.HasSameSTCEntry(first_positive));
+  ASSERT(!third_positive.HasSameSTCEntry(first_false_negative));
+  ASSERT(!third_positive.HasSameSTCEntry(second_positive));
+  ASSERT(!third_positive.HasSameSTCEntry(second_false_negative));
+  ASSERT(!third_false_negative.HasSameSTCEntry(first_positive));
+  ASSERT(!third_false_negative.HasSameSTCEntry(first_false_negative));
+  ASSERT(!third_false_negative.HasSameSTCEntry(second_positive));
+  ASSERT(!third_false_negative.HasSameSTCEntry(second_false_negative));
+  // The type with the tested stub must be the same in all test cases.
+  ASSERT(state.TypeToTest(third_positive) ==
+         state.TypeToTest(third_false_negative));
+  ASSERT(state.TypeToTest(first_positive) == state.TypeToTest(third_positive));
+
+  // Again, cases that have run before should still pass as before without STC
+  // changes/respecialization.
+  state.InvokeExistingStub(first_positive);
+  state.InvokeExistingStub(second_positive);
+  state.InvokeExistingStub(first_false_negative);
+  state.InvokeExistingStub(second_false_negative);
+
+  // Now we lead with the new false negative, to make sure it also triggers
+  // respecialization but doesn't get immediately added to the STC.
+  state.InvokeExistingStub(Respecialization(third_false_negative));
+
+  // True positives still work as before.
+  state.InvokeExistingStub(third_positive);
+  state.InvokeExistingStub(second_positive);
+  state.InvokeExistingStub(first_positive);
+
+  // No additional checks added by rerunning the previous false negatives.
+  state.InvokeExistingStub(first_false_negative);
+  state.InvokeExistingStub(second_false_negative);
+
+  // Now a check is recorded when rerunning the third false negative.
+  state.InvokeExistingStub(third_false_negative);
+}
+
+// TTS deoptimization on reload only happens in non-product mode currently.
+#if !defined(PRODUCT)
+static const char* kLoadedScript =
+    R"(
+          class A<T> {}
+
+          createAInt() => A<int>();
+          createAString() => A<String>();
+  )";
+
+static const char* kReloadedScript =
+    R"(
+          class A<T> {}
+          class A2<T> extends A<T> {}
+
+          createAInt() => A<int>();
+          createAString() => A<String>();
+          createA2Int() => A2<int>();
+          createA2String() => A2<String>();
+  )";
+
+ISOLATE_UNIT_TEST_CASE(TTS_Reload) {
+  auto& root_library = Library::Handle(LoadTestScript(kLoadedScript));
+  const auto& class_a = Class::Handle(GetClass(root_library, "A"));
+  ClassFinalizer::FinalizeTypesInClass(class_a);
+
+  const auto& aint = Object::Handle(Invoke(root_library, "createAInt"));
+  const auto& astring = Object::Handle(Invoke(root_library, "createAString"));
+
+  const auto& tav_null = Object::null_type_arguments();
+  const auto& tav_int =
+      TypeArguments::Handle(Instance::Cast(aint).GetTypeArguments());
+  auto& tav_num = TypeArguments::Handle(TypeArguments::New(1));
+  tav_num.SetTypeAt(0, Type::Handle(Type::Number()));
+  CanonicalizeTAV(&tav_num);
+
+  auto& type_a_int = Type::Handle(Type::New(class_a, tav_int));
+  FinalizeAndCanonicalize(&type_a_int);
+
+  TTSTestState state(thread, type_a_int);
+  state.InvokeLazilySpecializedStub({aint, tav_null, tav_null});
+  state.InvokeExistingStub(Failure({astring, tav_null, tav_null}));
+
+  root_library = ReloadTestScript(kReloadedScript);
+  const auto& a2int = Object::Handle(Invoke(root_library, "createA2Int"));
+  const auto& a2string = Object::Handle(Invoke(root_library, "createA2String"));
+
+  // Reloading resets all type testing stubs to the (possibly lazy specializing)
+  // default stub for that type.
+  EXPECT(type_a_int.type_test_stub() ==
+         TypeTestingStubGenerator::DefaultCodeForType(type_a_int));
+  // Reloading either removes or resets the type teseting cache.
+  EXPECT(state.current_stc() == SubtypeTestCache::null() ||
+         (state.current_stc() == state.last_stc().ptr() &&
+          state.last_stc().NumberOfChecks() == 0));
+
+  state.InvokeExistingStub(Respecialization({aint, tav_null, tav_null}));
+  state.InvokeExistingStub(Failure({astring, tav_null, tav_null}));
+  state.InvokeExistingStub({a2int, tav_null, tav_null});
+  state.InvokeExistingStub(Failure({a2string, tav_null, tav_null}));
+}
+
+ISOLATE_UNIT_TEST_CASE(TTS_Partial_Reload) {
+  auto& root_library = Library::Handle(LoadTestScript(kLoadedScript));
+  const auto& class_a = Class::Handle(GetClass(root_library, "A"));
+  ClassFinalizer::FinalizeTypesInClass(class_a);
+
+  const auto& aint = Object::Handle(Invoke(root_library, "createAInt"));
+  const auto& astring = Object::Handle(Invoke(root_library, "createAString"));
+
+  const auto& tav_null = Object::null_type_arguments();
+  const auto& tav_int =
+      TypeArguments::Handle(Instance::Cast(aint).GetTypeArguments());
+  const auto& tav_string =
+      TypeArguments::Handle(Instance::Cast(astring).GetTypeArguments());
+  auto& tav_num = TypeArguments::Handle(TypeArguments::New(1));
+  tav_num.SetTypeAt(0, Type::Handle(Type::Number()));
+  CanonicalizeTAV(&tav_num);
+
+  // Create a partial TTS to test resets of STCs with false negatives.
+  const auto& type_a_t = Type::Handle(class_a.DeclarationType());
+  TTSTestCase positive1{aint, tav_int, tav_null};
+  TTSTestCase positive2{astring, tav_string, tav_null};
+  TTSTestCase negative1 = Failure({astring, tav_int, tav_null});
+  TTSTestCase negative2 = Failure({aint, tav_string, tav_null});
+  TTSTestCase false_negative = FalseNegative({aint, tav_num, tav_null});
+  TTSTestState state(thread, type_a_t);
+  state.InvokeLazilySpecializedStub(positive1);
+  state.InvokeExistingStub(positive2);
+  state.InvokeExistingStub(negative1);
+  state.InvokeExistingStub(negative2);
+  state.InvokeExistingStub(false_negative);
+
+  root_library = ReloadTestScript(kReloadedScript);
+  const auto& a2int = Object::Handle(Invoke(root_library, "createA2Int"));
+  const auto& a2string = Object::Handle(Invoke(root_library, "createA2String"));
+
+  // Reloading resets all type testing stubs to the (possibly lazy specializing)
+  // default stub for that type.
+  EXPECT(type_a_t.type_test_stub() ==
+         TypeTestingStubGenerator::DefaultCodeForType(type_a_t));
+  // Reloading either removes or resets the type testing cache.
+  EXPECT(state.current_stc() == SubtypeTestCache::null() ||
+         (state.current_stc() == state.last_stc().ptr() &&
+          state.last_stc().NumberOfChecks() == 0));
+
+  state.InvokeExistingStub(Respecialization(positive1));
+  state.InvokeExistingStub(positive2);
+  state.InvokeExistingStub(negative1);
+  state.InvokeExistingStub(negative2);
+  state.InvokeExistingStub(false_negative);
+  state.InvokeExistingStub({a2int, tav_int, tav_null});
+  state.InvokeExistingStub({a2string, tav_string, tav_null});
+  state.InvokeExistingStub(Failure({a2string, tav_int, tav_null}));
+  state.InvokeExistingStub(Failure({a2int, tav_string, tav_null}));
+  state.InvokeExistingStub(FalseNegative({a2int, tav_num, tav_null}));
+}
+#endif  // !defined(PRODUCT)
+
 }  // namespace dart
 
 #endif  // defined(TARGET_ARCH_ARM64) ||  defined(TARGET_ARCH_ARM) ||          \
diff --git a/runtime/vm/v8_snapshot_writer.cc b/runtime/vm/v8_snapshot_writer.cc
index c6e061a..d886122 100644
--- a/runtime/vm/v8_snapshot_writer.cc
+++ b/runtime/vm/v8_snapshot_writer.cc
@@ -16,6 +16,7 @@
 
 V8SnapshotProfileWriter::V8SnapshotProfileWriter(Zone* zone)
     : zone_(zone),
+      nodes_(zone_),
       node_types_(zone_),
       edge_types_(zone_),
       strings_(zone_),
@@ -41,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(zone_));
+          info->ToCString(nullptr, zone_));
   }
   info->type = type_index;
   // Don't overwrite any existing name.
@@ -103,26 +104,30 @@
   return nodes_.Lookup(object_id);
 }
 
-const char* V8SnapshotProfileWriter::NodeInfo::ToCString(Zone* zone) const {
+const char* V8SnapshotProfileWriter::NodeInfo::ToCString(
+    V8SnapshotProfileWriter* profile_writer,
+    Zone* zone) const {
   JSONWriter writer;
-  WriteDebug(&writer);
+  WriteDebug(profile_writer, &writer);
   return OS::SCreate(zone, "%s", writer.buffer()->buffer());
 }
 
-void V8SnapshotProfileWriter::NodeInfo::Write(JSONWriter* writer) const {
+void V8SnapshotProfileWriter::NodeInfo::Write(
+    V8SnapshotProfileWriter* profile_writer,
+    JSONWriter* writer) const {
   ASSERT(id.space() != IdSpace::kInvalid);
   if (type == kInvalidString) {
-    FATAL("No type given for node %s", id.ToCString(profile_writer_->zone_));
+    FATAL("No type given for node %s", id.ToCString(profile_writer->zone_));
   }
   writer->PrintValue(type);
   if (name != kInvalidString) {
     writer->PrintValue(name);
   } else {
-    ASSERT(profile_writer_ != nullptr);
+    ASSERT(profile_writer != nullptr);
     // If we don't already have a name for the node, we lazily create a default
     // one. This is safe since the strings table is written out after the nodes.
-    const intptr_t name = profile_writer_->strings_.AddFormatted(
-        "Unnamed [%s] (nil)", profile_writer_->node_types_.At(type));
+    const intptr_t name = profile_writer->strings_.AddFormatted(
+        "Unnamed [%s] (nil)", profile_writer->node_types_.At(type));
     writer->PrintValue(name);
   }
   id.Write(writer);
@@ -130,17 +135,19 @@
   writer->PrintValue64(edges->Length());
 }
 
-void V8SnapshotProfileWriter::NodeInfo::WriteDebug(JSONWriter* writer) const {
+void V8SnapshotProfileWriter::NodeInfo::WriteDebug(
+    V8SnapshotProfileWriter* profile_writer,
+    JSONWriter* writer) const {
   writer->OpenObject();
   if (type != kInvalidString) {
-    writer->PrintProperty("type", profile_writer_->node_types_.At(type));
+    writer->PrintProperty("type", profile_writer->node_types_.At(type));
   }
   if (name != kInvalidString) {
-    writer->PrintProperty("name", profile_writer_->strings_.At(name));
+    writer->PrintProperty("name", profile_writer->strings_.At(name));
   }
   id.WriteDebug(writer, "id");
   writer->PrintProperty("self_size", self_size);
-  edges->WriteDebug(writer, "edges");
+  edges->WriteDebug(profile_writer, writer, "edges");
   writer->CloseObject();
 }
 
@@ -188,45 +195,52 @@
   }
 }
 
-const char* V8SnapshotProfileWriter::EdgeMap::ToCString(Zone* zone) const {
+const char* V8SnapshotProfileWriter::EdgeMap::ToCString(
+    V8SnapshotProfileWriter* profile_writer,
+    Zone* zone) const {
   JSONWriter writer;
-  WriteDebug(&writer);
+  WriteDebug(profile_writer, &writer);
   return OS::SCreate(zone, "%s", writer.buffer()->buffer());
 }
 
-void V8SnapshotProfileWriter::EdgeMap::WriteDebug(JSONWriter* writer,
-                                                  const char* property) const {
+void V8SnapshotProfileWriter::EdgeMap::WriteDebug(
+    V8SnapshotProfileWriter* profile_writer,
+    JSONWriter* writer,
+    const char* property) const {
   writer->OpenArray(property);
   auto edge_it = GetIterator();
   while (auto const pair = edge_it.Next()) {
-    pair->edge.WriteDebug(writer, pair->target);
+    pair->edge.WriteDebug(profile_writer, writer, pair->target);
   }
   writer->CloseArray();
 }
 
-void V8SnapshotProfileWriter::Edge::Write(JSONWriter* writer,
-                                          const ObjectId& target_id) const {
+void V8SnapshotProfileWriter::Edge::Write(
+    V8SnapshotProfileWriter* profile_writer,
+    JSONWriter* writer,
+    const ObjectId& target_id) const {
   ASSERT(type != Type::kInvalid);
   writer->PrintValue64(static_cast<intptr_t>(type));
   writer->PrintValue64(name_or_offset);
-  auto const target = profile_writer_->nodes_.LookupValue(target_id);
+  auto const target = profile_writer->nodes_.LookupValue(target_id);
   writer->PrintValue64(target.offset());
 }
 
 void V8SnapshotProfileWriter::Edge::WriteDebug(
+    V8SnapshotProfileWriter* profile_writer,
     JSONWriter* writer,
     const ObjectId& target_id) const {
   writer->OpenObject();
   if (type != Type::kInvalid) {
     writer->PrintProperty(
-        "type", profile_writer_->edge_types_.At(static_cast<intptr_t>(type)));
+        "type", profile_writer->edge_types_.At(static_cast<intptr_t>(type)));
   }
   if (type == Type::kProperty) {
-    writer->PrintProperty("name", profile_writer_->strings_.At(name_or_offset));
+    writer->PrintProperty("name", profile_writer->strings_.At(name_or_offset));
   } else {
     writer->PrintProperty64("offset", name_or_offset);
   }
-  auto const target = profile_writer_->nodes_.LookupValue(target_id);
+  auto const target = profile_writer->nodes_.LookupValue(target_id);
   target.id.WriteDebug(writer, "target");
   writer->CloseObject();
 }
@@ -349,14 +363,14 @@
     ASSERT(root != nullptr);
     intptr_t offset = 0;
     root->set_offset(offset);
-    root->Write(writer);
+    root->Write(this, writer);
     offset += kNumNodeFields;
     auto nodes_it = nodes_.GetIterator();
     for (auto entry = nodes_it.Next(); entry != nullptr;
          entry = nodes_it.Next()) {
       if (entry->id == kArtificialRootId) continue;
       entry->set_offset(offset);
-      entry->Write(writer);
+      entry->Write(this, writer);
       offset += kNumNodeFields;
     }
     writer->CloseArray();
@@ -366,7 +380,7 @@
     auto write_edges = [&](const NodeInfo& info) {
       auto edges_it = info.edges->GetIterator();
       while (auto const pair = edges_it.Next()) {
-        pair->edge.Write(writer, pair->target);
+        pair->edge.Write(this, writer, pair->target);
       }
     };
     writer->OpenArray("edges");
@@ -398,13 +412,13 @@
   auto file_close = Dart::file_close_callback();
   if ((file_open == nullptr) || (file_write == nullptr) ||
       (file_close == nullptr)) {
-    OS::PrintErr("Could not access file callbacks to write snapshot profile.");
+    OS::PrintErr("warning: Could not access file callbacks.");
     return;
   }
 
   auto file = file_open(filename, /*write=*/true);
   if (file == nullptr) {
-    OS::PrintErr("Failed to open file %s\n", filename);
+    OS::PrintErr("warning: Failed to write snapshot profile: %s\n", filename);
   } else {
     char* output = nullptr;
     intptr_t output_length = 0;
diff --git a/runtime/vm/v8_snapshot_writer.h b/runtime/vm/v8_snapshot_writer.h
index c69abdc..6cd20bc 100644
--- a/runtime/vm/v8_snapshot_writer.h
+++ b/runtime/vm/v8_snapshot_writer.h
@@ -154,7 +154,7 @@
   static constexpr intptr_t kNumEdgeFields = 3;
 
   struct Edge {
-    enum class Type : intptr_t {
+    enum class Type : int32_t {
       kInvalid = -1,
       kContext = 0,
       kElement = 1,
@@ -177,24 +177,22 @@
     Edge(V8SnapshotProfileWriter* profile_writer,
          Type type,
          intptr_t name_or_offset)
-        : type(type),
-          name_or_offset(name_or_offset),
-          profile_writer_(profile_writer) {}
+        : type(type), name_or_offset(name_or_offset) {}
 
     inline bool operator!=(const Edge& other) {
-      return profile_writer_ != other.profile_writer_ || type != other.type ||
-             name_or_offset != other.name_or_offset;
+      return type != other.type || name_or_offset != other.name_or_offset;
     }
     inline bool operator==(const Edge& other) { return !(*this != other); }
 
-    void Write(JSONWriter* writer, const ObjectId& target_id) const;
-    void WriteDebug(JSONWriter* writer, const ObjectId& target_id) const;
+    void Write(V8SnapshotProfileWriter* profile_writer,
+               JSONWriter* writer,
+               const ObjectId& target_id) const;
+    void WriteDebug(V8SnapshotProfileWriter* profile_writer,
+                    JSONWriter* writer,
+                    const ObjectId& target_id) const;
 
     Type type;
-    intptr_t name_or_offset;
-
-   private:
-    V8SnapshotProfileWriter* profile_writer_;
+    int32_t name_or_offset;
   };
 
   struct EdgeToObjectIdMapTrait {
@@ -219,10 +217,13 @@
 
   struct EdgeMap : public ZoneDirectChainedHashMap<EdgeToObjectIdMapTrait> {
     explicit EdgeMap(Zone* zone)
-        : ZoneDirectChainedHashMap<EdgeToObjectIdMapTrait>(zone) {}
+        : ZoneDirectChainedHashMap<EdgeToObjectIdMapTrait>(zone, 1) {}
 
-    const char* ToCString(Zone* zone) const;
-    void WriteDebug(JSONWriter* writer, const char* property = nullptr) const;
+    const char* ToCString(V8SnapshotProfileWriter* profile_writer,
+                          Zone* zone) const;
+    void WriteDebug(V8SnapshotProfileWriter* profile_writer,
+                    JSONWriter* writer,
+                    const char* property = nullptr) const;
   };
 
   struct NodeInfo {
@@ -232,16 +233,14 @@
              intptr_t type = kInvalidString,
              intptr_t name = kInvalidString)
         : id(id),
-          type(type),
-          name(name),
           edges(new (profile_writer->zone_) EdgeMap(profile_writer->zone_)),
-          profile_writer_(profile_writer) {}
+          type(type),
+          name(name) {}
 
     inline bool operator!=(const NodeInfo& other) {
       return id != other.id || type != other.type || name != other.name ||
              self_size != other.self_size || edges != other.edges ||
-             offset_ != other.offset_ ||
-             profile_writer_ != other.profile_writer_;
+             offset_ != other.offset_;
     }
     inline bool operator==(const NodeInfo& other) { return !(*this != other); }
 
@@ -250,9 +249,12 @@
     }
     bool HasEdge(const Edge& edge) { return edges->HasKey(edge); }
 
-    const char* ToCString(Zone* zone) const;
-    void Write(JSONWriter* writer) const;
-    void WriteDebug(JSONWriter* writer) const;
+    const char* ToCString(V8SnapshotProfileWriter* profile_writer,
+                          Zone* zone) const;
+    void Write(V8SnapshotProfileWriter* profile_writer,
+               JSONWriter* writer) const;
+    void WriteDebug(V8SnapshotProfileWriter* profile_writer,
+                    JSONWriter* writer) const;
 
     intptr_t offset() const { return offset_; }
     void set_offset(intptr_t offset) {
@@ -261,19 +263,16 @@
     }
 
     ObjectId id;
+    EdgeMap* edges = nullptr;
     intptr_t type = kInvalidString;
     intptr_t name = kInvalidString;
     intptr_t self_size = 0;
-    EdgeMap* edges = nullptr;
 
    private:
     // Populated during serialization.
     intptr_t offset_ = -1;
     // 'trace_node_id' isn't supported.
     // 'edge_count' is computed on-demand.
-
-    // Used for debugging prints and creating default names if none given.
-    V8SnapshotProfileWriter* profile_writer_ = nullptr;
   };
 
   NodeInfo* EnsureId(const ObjectId& object_id);
diff --git a/runtime/vm/virtual_memory.h b/runtime/vm/virtual_memory.h
index 54ffc7b..dc9b2d7 100644
--- a/runtime/vm/virtual_memory.h
+++ b/runtime/vm/virtual_memory.h
@@ -76,13 +76,6 @@
 
   static VirtualMemory* ForImagePage(void* pointer, uword size);
 
-  void release() {
-    // Make sure no pages would be leaked.
-    const uword size_ = size();
-    ASSERT(address() == reserved_.pointer() && size_ == reserved_.size());
-    reserved_ = MemoryRegion(nullptr, 0);
-  }
-
  private:
   static intptr_t CalculatePageSize();
 
@@ -90,6 +83,10 @@
   // can give back the virtual memory to the system. Returns true on success.
   static bool FreeSubSegment(void* address, intptr_t size);
 
+  static VirtualMemory* Reserve(intptr_t size, intptr_t alignment);
+  static void Commit(void* address, intptr_t size);
+  static void Decommit(void* address, intptr_t size);
+
   // These constructors are only used internally when reserving new virtual
   // spaces. They do not reserve any virtual address space on their own.
   VirtualMemory(const MemoryRegion& region,
@@ -112,6 +109,7 @@
   MemoryRegion reserved_;
 
   static uword page_size_;
+  static VirtualMemory* compressed_heap_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(VirtualMemory);
 };
diff --git a/runtime/vm/virtual_memory_compressed.cc b/runtime/vm/virtual_memory_compressed.cc
index 7d4b882..a53007a 100644
--- a/runtime/vm/virtual_memory_compressed.cc
+++ b/runtime/vm/virtual_memory_compressed.cc
@@ -11,6 +11,7 @@
 namespace dart {
 
 uword VirtualMemoryCompressedHeap::base_ = 0;
+uword VirtualMemoryCompressedHeap::size_ = 0;
 uint8_t* VirtualMemoryCompressedHeap::pages_ = nullptr;
 uword VirtualMemoryCompressedHeap::minimum_free_page_id_ = 0;
 Mutex* VirtualMemoryCompressedHeap::mutex_ = nullptr;
@@ -34,12 +35,29 @@
   pages_[page_id / 8] &= ~PageMask(page_id);
 }
 
-void VirtualMemoryCompressedHeap::Init(void* compressed_heap_region) {
+void VirtualMemoryCompressedHeap::Init(void* compressed_heap_region,
+                                       size_t size) {
   pages_ = new uint8_t[kCompressedHeapBitmapSize];
   memset(pages_, 0, kCompressedHeapBitmapSize);
+  ASSERT(size > 0);
+  ASSERT(size <= kCompressedHeapSize);
+  for (intptr_t page_id = size / kCompressedHeapPageSize;
+       page_id < kCompressedHeapNumPages; page_id++) {
+    SetPageUsed(page_id);
+  }
   base_ = reinterpret_cast<uword>(compressed_heap_region);
+  size_ = size;
   ASSERT(base_ != 0);
-  ASSERT(Utils::IsAligned(base_, kCompressedHeapSize));
+  ASSERT(size_ != 0);
+  ASSERT(size_ <= kCompressedHeapSize);
+  ASSERT(Utils::IsAligned(base_, kCompressedHeapPageSize));
+  ASSERT(Utils::IsAligned(size_, kCompressedHeapPageSize));
+  // base_ is not necessarily 4GB-aligned, because on some systems we can't make
+  // a large enough reservation to guarentee it. Instead, we have only the
+  // 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));
   mutex_ = new Mutex(NOT_IN_PRODUCT("compressed_heap_mutex"));
 }
 
@@ -47,6 +65,7 @@
   delete[] pages_;
   delete mutex_;
   base_ = 0;
+  size_ = 0;
   pages_ = nullptr;
   minimum_free_page_id_ = 0;
   mutex_ = nullptr;
@@ -123,8 +142,7 @@
 }
 
 bool VirtualMemoryCompressedHeap::Contains(void* address) {
-  return reinterpret_cast<uword>(address) >= base_ &&
-         reinterpret_cast<uword>(address) < base_ + kCompressedHeapSize;
+  return (reinterpret_cast<uword>(address) - base_) < size_;
 }
 
 }  // namespace dart
diff --git a/runtime/vm/virtual_memory_compressed.h b/runtime/vm/virtual_memory_compressed.h
index 0df8b1c..bf6fb4c 100644
--- a/runtime/vm/virtual_memory_compressed.h
+++ b/runtime/vm/virtual_memory_compressed.h
@@ -33,7 +33,7 @@
  public:
   // Initializes the compressed heap. The callee must allocate a region of
   // kCompressedHeapSize bytes, aligned to kCompressedHeapSize.
-  static void Init(void* compressed_heap_region);
+  static void Init(void* compressed_heap_region, size_t size);
 
   // Cleans up the compressed heap. The callee is responsible for freeing the
   // region's memory.
@@ -58,6 +58,7 @@
   static void ClearPageUsed(uword page_id);
 
   static uword base_;
+  static uword size_;
   static uint8_t* pages_;
   static uword minimum_free_page_id_;
   static Mutex* mutex_;
diff --git a/runtime/vm/virtual_memory_fuchsia.cc b/runtime/vm/virtual_memory_fuchsia.cc
index 7f7347d..3eb51e8 100644
--- a/runtime/vm/virtual_memory_fuchsia.cc
+++ b/runtime/vm/virtual_memory_fuchsia.cc
@@ -7,8 +7,6 @@
 
 #include "vm/virtual_memory.h"
 
-#include <sys/mman.h>
-#include <unistd.h>
 #include <zircon/process.h>
 #include <zircon/status.h>
 #include <zircon/syscalls.h>
@@ -160,6 +158,7 @@
     if (status != ZX_OK) {
       LOG_ERR("zx_vmo_replace_as_executable() failed: %s\n",
               zx_status_get_string(status));
+      zx_handle_close(vmo);
       return NULL;
     }
   }
@@ -173,6 +172,7 @@
   if (status != ZX_OK) {
     LOG_ERR("zx_vmar_map(%u, 0x%lx, 0x%lx) failed: %s\n", region_options, base,
             size, zx_status_get_string(status));
+    zx_handle_close(vmo);
     return NULL;
   }
   void* region_ptr = reinterpret_cast<void*>(base);
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index 2d8757da..0134610 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -35,6 +35,10 @@
 #undef MAP_FAILED
 #define MAP_FAILED reinterpret_cast<void*>(-1)
 
+#if defined(DART_HOST_OS_IOS)
+#define LARGE_RESERVATIONS_MAY_FAIL
+#endif
+
 DECLARE_FLAG(bool, dual_map_code);
 DECLARE_FLAG(bool, write_protect_code);
 
@@ -44,6 +48,7 @@
 #endif
 
 uword VirtualMemory::page_size_ = 0;
+VirtualMemory* VirtualMemory::compressed_heap_ = nullptr;
 
 static void unmap(uword start, uword end);
 
@@ -75,31 +80,67 @@
   return page_size;
 }
 
+#if defined(DART_COMPRESSED_POINTERS) && defined(LARGE_RESERVATIONS_MAY_FAIL)
+// Truncate to the largest subregion in [region] that doesn't cross an
+// [alignment] boundary.
+static MemoryRegion ClipToAlignedRegion(MemoryRegion region, size_t alignment) {
+  uword base = region.start();
+  uword aligned_base = Utils::RoundUp(base, alignment);
+  uword size_below =
+      region.end() >= aligned_base ? aligned_base - base : region.size();
+  uword size_above =
+      region.end() >= aligned_base ? region.end() - aligned_base : 0;
+  ASSERT(size_below + size_above == region.size());
+  if (size_below >= size_above) {
+    unmap(aligned_base, aligned_base + size_above);
+    return MemoryRegion(reinterpret_cast<void*>(base), size_below);
+  }
+  unmap(base, base + size_below);
+  if (size_above > alignment) {
+    unmap(aligned_base + alignment, aligned_base + size_above);
+    size_above = alignment;
+  }
+  return MemoryRegion(reinterpret_cast<void*>(aligned_base), size_above);
+}
+#endif  // LARGE_RESERVATIONS_MAY_FAIL
+
 void VirtualMemory::Init() {
-#if defined(DART_COMPRESSED_POINTERS)
-  if (VirtualMemoryCompressedHeap::GetRegion() == nullptr) {
-    void* address = GenericMapAligned(
-        nullptr, PROT_NONE, kCompressedHeapSize, kCompressedHeapAlignment,
-        kCompressedHeapSize + kCompressedHeapAlignment,
-        MAP_PRIVATE | MAP_ANONYMOUS);
-    if (address == nullptr) {
-      int error = errno;
-      const int kBufferSize = 1024;
-      char error_buf[kBufferSize];
-      FATAL2("Failed to reserve region for compressed heap: %d (%s)", error,
-             Utils::StrError(error, error_buf, kBufferSize));
-    }
-    VirtualMemoryCompressedHeap::Init(address);
-  }
-#endif  // defined(DART_COMPRESSED_POINTERS)
-
-  if (page_size_ != 0) {
-    // Already initialized.
-    return;
-  }
-
   page_size_ = CalculatePageSize();
 
+#if defined(DART_COMPRESSED_POINTERS)
+  ASSERT(compressed_heap_ == nullptr);
+#if defined(LARGE_RESERVATIONS_MAY_FAIL)
+  // Try to reserve a region for the compressed heap by requesting decreasing
+  // powers-of-two until one succeeds, and use the largest subregion that does
+  // not cross a 4GB boundary. The subregion itself is not necessarily
+  // 4GB-aligned.
+  for (size_t allocated_size = kCompressedHeapSize + kCompressedHeapAlignment;
+       allocated_size >= kCompressedHeapPageSize; allocated_size >>= 1) {
+    void* address = GenericMapAligned(
+        nullptr, PROT_NONE, allocated_size, kCompressedHeapPageSize,
+        allocated_size + kCompressedHeapPageSize,
+        MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE);
+    if (address == MAP_FAILED) continue;
+
+    MemoryRegion region(address, allocated_size);
+    region = ClipToAlignedRegion(region, kCompressedHeapAlignment);
+    compressed_heap_ = new VirtualMemory(region, region);
+    break;
+  }
+#else
+  compressed_heap_ = Reserve(kCompressedHeapSize, kCompressedHeapAlignment);
+#endif
+  if (compressed_heap_ == nullptr) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    FATAL("Failed to reserve region for compressed heap: %d (%s)", error,
+          Utils::StrError(error, error_buf, kBufferSize));
+  }
+  VirtualMemoryCompressedHeap::Init(compressed_heap_->address(),
+                                    compressed_heap_->size());
+#endif  // defined(DART_COMPRESSED_POINTERS)
+
 #if defined(DUAL_MAPPING_SUPPORTED)
 // Perf is Linux-specific and the flags aren't defined in Product.
 #if defined(DART_TARGET_OS_LINUX) && !defined(PRODUCT)
@@ -159,9 +200,8 @@
 
 void VirtualMemory::Cleanup() {
 #if defined(DART_COMPRESSED_POINTERS)
-  uword heap_base =
-      reinterpret_cast<uword>(VirtualMemoryCompressedHeap::GetRegion());
-  unmap(heap_base, heap_base + kCompressedHeapSize);
+  delete compressed_heap_;
+  compressed_heap_ = nullptr;
   VirtualMemoryCompressedHeap::Cleanup();
 #endif  // defined(DART_COMPRESSED_POINTERS)
 }
@@ -257,9 +297,28 @@
     MemoryRegion region =
         VirtualMemoryCompressedHeap::Allocate(size, alignment);
     if (region.pointer() == nullptr) {
+#if defined(LARGE_RESERVATIONS_MAY_FAIL)
+      // Try a fresh allocation and hope it ends up in the right region. On
+      // macOS/iOS, this works surprisingly often.
+      void* address =
+          GenericMapAligned(nullptr, PROT_READ | PROT_WRITE, size, alignment,
+                            size + alignment, MAP_PRIVATE | MAP_ANONYMOUS);
+      if (address != nullptr) {
+        uword ok_start = Utils::RoundDown(compressed_heap_->start(),
+                                          kCompressedHeapAlignment);
+        uword ok_end = ok_start + kCompressedHeapSize;
+        uword start = reinterpret_cast<uword>(address);
+        uword end = start + size;
+        if ((start >= ok_start) && (end <= ok_end)) {
+          MemoryRegion region(address, size);
+          return new VirtualMemory(region, region);
+        }
+        munmap(address, size);
+      }
+#endif
       return nullptr;
     }
-    mprotect(region.pointer(), region.size(), PROT_READ | PROT_WRITE);
+    Commit(region.pointer(), region.size());
     return new VirtualMemory(region, region);
   }
 #endif  // defined(DART_COMPRESSED_POINTERS)
@@ -359,10 +418,54 @@
   return new VirtualMemory(region, region);
 }
 
+VirtualMemory* VirtualMemory::Reserve(intptr_t size, intptr_t alignment) {
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  ASSERT(Utils::IsPowerOfTwo(alignment));
+  ASSERT(Utils::IsAligned(alignment, PageSize()));
+  intptr_t allocated_size = size + alignment - PageSize();
+  void* address =
+      GenericMapAligned(nullptr, PROT_NONE, size, alignment, allocated_size,
+                        MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE);
+  if (address == nullptr) {
+    return nullptr;
+  }
+  MemoryRegion region(address, size);
+  return new VirtualMemory(region, region);
+}
+
+void VirtualMemory::Commit(void* address, intptr_t size) {
+  ASSERT(Utils::IsAligned(address, PageSize()));
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  void* result = mmap(address, size, PROT_READ | PROT_WRITE,
+                      MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+  if (result == MAP_FAILED) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    FATAL("Failed to commit: %d (%s)", error,
+          Utils::StrError(error, error_buf, kBufferSize));
+  }
+}
+
+void VirtualMemory::Decommit(void* address, intptr_t size) {
+  ASSERT(Utils::IsAligned(address, PageSize()));
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  void* result =
+      mmap(address, size, PROT_NONE,
+           MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_FIXED, -1, 0);
+  if (result == MAP_FAILED) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    FATAL("Failed to decommit: %d (%s)", error,
+          Utils::StrError(error, error_buf, kBufferSize));
+  }
+}
+
 VirtualMemory::~VirtualMemory() {
 #if defined(DART_COMPRESSED_POINTERS)
   if (VirtualMemoryCompressedHeap::Contains(reserved_.pointer())) {
-    madvise(reserved_.pointer(), reserved_.size(), MADV_DONTNEED);
+    Decommit(reserved_.pointer(), reserved_.size());
     VirtualMemoryCompressedHeap::Free(reserved_.pointer(), reserved_.size());
     return;
   }
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc
index e352adc..67f1f63 100644
--- a/runtime/vm/virtual_memory_win.cc
+++ b/runtime/vm/virtual_memory_win.cc
@@ -17,6 +17,7 @@
 DECLARE_FLAG(bool, write_protect_code);
 
 uword VirtualMemory::page_size_ = 0;
+VirtualMemory* VirtualMemory::compressed_heap_ = nullptr;
 
 intptr_t VirtualMemory::CalculatePageSize() {
   SYSTEM_INFO info;
@@ -55,24 +56,21 @@
   page_size_ = CalculatePageSize();
 
 #if defined(DART_COMPRESSED_POINTERS)
-  if (VirtualMemoryCompressedHeap::GetRegion() == nullptr) {
-    void* address =
-        AllocateAlignedImpl(kCompressedHeapSize, kCompressedHeapAlignment,
-                            kCompressedHeapSize + kCompressedHeapAlignment,
-                            PAGE_READWRITE, nullptr);
-    if (address == nullptr) {
-      int error = GetLastError();
-      FATAL("Failed to reserve region for compressed heap: %d", error);
-    }
-    VirtualMemoryCompressedHeap::Init(address);
+  ASSERT(compressed_heap_ == nullptr);
+  compressed_heap_ = Reserve(kCompressedHeapSize, kCompressedHeapAlignment);
+  if (compressed_heap_ == nullptr) {
+    int error = GetLastError();
+    FATAL("Failed to reserve region for compressed heap: %d", error);
   }
+  VirtualMemoryCompressedHeap::Init(compressed_heap_->address(),
+                                    compressed_heap_->size());
 #endif  // defined(DART_COMPRESSED_POINTERS)
 }
 
 void VirtualMemory::Cleanup() {
 #if defined(DART_COMPRESSED_POINTERS)
-  void* heap_base = VirtualMemoryCompressedHeap::GetRegion();
-  VirtualFree(heap_base, kCompressedHeapSize, MEM_RELEASE);
+  delete compressed_heap_;
+  compressed_heap_ = nullptr;
   VirtualMemoryCompressedHeap::Cleanup();
 #endif  // defined(DART_COMPRESSED_POINTERS)
 }
@@ -99,6 +97,7 @@
     if (region.pointer() == nullptr) {
       return nullptr;
     }
+    Commit(region.pointer(), region.size());
     return new VirtualMemory(region, region);
   }
 #endif  // defined(DART_COMPRESSED_POINTERS)
@@ -120,6 +119,44 @@
   return new VirtualMemory(region, reserved);
 }
 
+VirtualMemory* VirtualMemory::Reserve(intptr_t size, intptr_t alignment) {
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  ASSERT(Utils::IsPowerOfTwo(alignment));
+  ASSERT(Utils::IsAligned(alignment, PageSize()));
+  intptr_t reserved_size = size + alignment - PageSize();
+  void* reserved_address =
+      VirtualAlloc(nullptr, reserved_size, MEM_RESERVE, PAGE_NOACCESS);
+  if (reserved_address == nullptr) {
+    return nullptr;
+  }
+
+  void* aligned_address = reinterpret_cast<void*>(
+      Utils::RoundUp(reinterpret_cast<uword>(reserved_address), alignment));
+  MemoryRegion region(aligned_address, size);
+  MemoryRegion reserved(reserved_address, reserved_size);
+  return new VirtualMemory(region, reserved);
+}
+
+void VirtualMemory::Commit(void* address, intptr_t size) {
+  ASSERT(Utils::IsAligned(address, PageSize()));
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  void* result = VirtualAlloc(address, size, MEM_COMMIT, PAGE_READWRITE);
+  if (result == nullptr) {
+    int error = GetLastError();
+    FATAL("Failed to commit: %d\n", error);
+  }
+}
+
+void VirtualMemory::Decommit(void* address, intptr_t size) {
+  ASSERT(Utils::IsAligned(address, PageSize()));
+  ASSERT(Utils::IsAligned(size, PageSize()));
+  bool result = VirtualFree(address, size, MEM_DECOMMIT);
+  if (!result) {
+    int error = GetLastError();
+    FATAL("Failed to decommit: %d\n", error);
+  }
+}
+
 VirtualMemory::~VirtualMemory() {
   // Note that the size of the reserved region might be set to 0 by
   // Truncate(0, true) but that does not actually release the mapping
@@ -127,6 +164,7 @@
   // with original base pointer and MEM_RELEASE.
 #if defined(DART_COMPRESSED_POINTERS)
   if (VirtualMemoryCompressedHeap::Contains(reserved_.pointer())) {
+    Decommit(reserved_.pointer(), reserved_.size());
     VirtualMemoryCompressedHeap::Free(reserved_.pointer(), reserved_.size());
     return;
   }
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index 1679e2c..5fa1efc 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -163,19 +163,17 @@
 // is created within a new thread or ApiNativeScope when calculating high
 // watermarks or memory consumption.
 Zone::Zone()
-    : initial_buffer_(buffer_, kInitialChunkSize),
-      position_(initial_buffer_.start()),
-      limit_(initial_buffer_.end()),
+    : position_(reinterpret_cast<uword>(&buffer_)),
+      limit_(position_ + kInitialChunkSize),
       head_(NULL),
       large_segments_(NULL),
-      handles_(),
-      previous_(NULL) {
+      previous_(NULL),
+      handles_() {
   ASSERT(Utils::IsAligned(position_, kAlignment));
   Segment::IncrementMemoryCapacity(kInitialChunkSize);
 #ifdef DEBUG
   // Zap the entire initial buffer.
-  memset(initial_buffer_.pointer(), kZapUninitializedByte,
-         initial_buffer_.size());
+  memset(&buffer_, kZapUninitializedByte, kInitialChunkSize);
 #endif
 }
 
@@ -198,10 +196,10 @@
   }
 // Reset zone state.
 #ifdef DEBUG
-  memset(initial_buffer_.pointer(), kZapDeletedByte, initial_buffer_.size());
+  memset(&buffer_, kZapDeletedByte, kInitialChunkSize);
 #endif
-  position_ = initial_buffer_.start();
-  limit_ = initial_buffer_.end();
+  position_ = reinterpret_cast<uword>(&buffer_);
+  limit_ = position_ + kInitialChunkSize;
   small_segment_capacity_ = 0;
   head_ = NULL;
   large_segments_ = NULL;
@@ -215,9 +213,9 @@
     size += s->size();
   }
   if (head_ == NULL) {
-    return size + (position_ - initial_buffer_.start());
+    return size + (position_ - reinterpret_cast<uword>(&buffer_));
   }
-  size += initial_buffer_.size();
+  size += kInitialChunkSize;
   for (Segment* s = head_->next(); s != NULL; s = s->next()) {
     size += s->size();
   }
@@ -230,9 +228,9 @@
     size += s->size();
   }
   if (head_ == NULL) {
-    return size + initial_buffer_.size();
+    return size + kInitialChunkSize;
   }
-  size += initial_buffer_.size();
+  size += kInitialChunkSize;
   for (Segment* s = head_; s != NULL; s = s->next()) {
     size += s->size();
   }
diff --git a/runtime/vm/zone.h b/runtime/vm/zone.h
index cb45741..b30f446 100644
--- a/runtime/vm/zone.h
+++ b/runtime/vm/zone.h
@@ -141,14 +141,6 @@
   template <class ElementType>
   static inline void CheckLength(intptr_t len);
 
-  // This buffer is used for allocation before any segments.
-  // This would act as the initial stack allocated chunk so that we don't
-  // end up calling malloc/free on zone scopes that allocate less than
-  // kChunkSize
-  COMPILE_ASSERT(kAlignment <= 8);
-  ALIGN8 uint8_t buffer_[kInitialChunkSize];
-  MemoryRegion initial_buffer_;
-
   // The free region in the current (head) segment or the initial buffer is
   // represented as the half-open interval [position, limit). The 'position'
   // variable is guaranteed to be aligned as dictated by kAlignment.
@@ -169,11 +161,18 @@
   // List of large segments allocated in this zone; may be NULL.
   Segment* large_segments_;
 
+  // Used for chaining zones in order to allow unwinding of stacks.
+  Zone* previous_;
+
   // Structure for managing handles allocation.
   VMHandles handles_;
 
-  // Used for chaining zones in order to allow unwinding of stacks.
-  Zone* previous_;
+  // This buffer is used for allocation before any segments.
+  // This would act as the initial stack allocated chunk so that we don't
+  // end up calling malloc/free on zone scopes that allocate less than
+  // kChunkSize
+  COMPILE_ASSERT(kAlignment <= 8);
+  ALIGN8 uint8_t buffer_[kInitialChunkSize];
 
   friend class StackZone;
   friend class ApiZone;
@@ -274,23 +273,26 @@
                                   intptr_t new_len) {
   CheckLength<ElementType>(new_len);
   const intptr_t kElementSize = sizeof(ElementType);
-  uword old_end = reinterpret_cast<uword>(old_data) + (old_len * kElementSize);
-  // Resize existing allocation if nothing was allocated in between...
-  if (Utils::RoundUp(old_end, kAlignment) == position_) {
-    uword new_end =
-        reinterpret_cast<uword>(old_data) + (new_len * kElementSize);
-    // ...and there is sufficient space.
-    if (new_end <= limit_) {
-      ASSERT(new_len >= old_len);
-      position_ = Utils::RoundUp(new_end, kAlignment);
+  if (old_data != nullptr) {
+    uword old_end =
+        reinterpret_cast<uword>(old_data) + (old_len * kElementSize);
+    // Resize existing allocation if nothing was allocated in between...
+    if (Utils::RoundUp(old_end, kAlignment) == position_) {
+      uword new_end =
+          reinterpret_cast<uword>(old_data) + (new_len * kElementSize);
+      // ...and there is sufficient space.
+      if (new_end <= limit_) {
+        ASSERT(new_len >= old_len);
+        position_ = Utils::RoundUp(new_end, kAlignment);
+        return old_data;
+      }
+    }
+    if (new_len <= old_len) {
       return old_data;
     }
   }
-  if (new_len <= old_len) {
-    return old_data;
-  }
   ElementType* new_data = Alloc<ElementType>(new_len);
-  if (old_data != 0) {
+  if (old_data != nullptr) {
     memmove(reinterpret_cast<void*>(new_data),
             reinterpret_cast<void*>(old_data), old_len * kElementSize);
   }
diff --git a/samples/sample_extension/.gitignore b/samples/sample_extension/.gitignore
deleted file mode 100644
index 518f7dd..0000000
--- a/samples/sample_extension/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/Makefile
-/*.Makefile
-/*.sln
-/*.target.mk
-/*.vcproj
-/*.vcxproj
-/*.vcxproj.filters
-/*.vcxproj.user
-/*.xcodeproj
diff --git a/samples/sample_extension/README.md b/samples/sample_extension/README.md
deleted file mode 100644
index 2e13091..0000000
--- a/samples/sample_extension/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-This directory contains samples of native extensions.
-
-To run the samples, first build both the Dart SDK and the runtime. For example:
-
-```
-$ ./tools/build.py create_sdk runtime
-```
-
-Then execute the sample programs. For example:
-
-```
-$ xcodebuild/ReleaseX64/dart samples/sample_extension/test/sample_extension_test.dart
-```
diff --git a/samples/sample_extension/sample_asynchronous_extension.dart b/samples/sample_extension/sample_asynchronous_extension.dart
deleted file mode 100644
index 7d18902..0000000
--- a/samples/sample_extension/sample_asynchronous_extension.dart
+++ /dev/null
@@ -1,39 +0,0 @@
-// 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.
-
-library sample_asynchronous_extension;
-
-import 'dart:async';
-import 'dart:isolate';
-import 'dart-ext:sample_extension';
-
-// A class caches the native port used to call an asynchronous extension.
-class RandomArray {
-  static SendPort? _port;
-
-  Future<List<int>> randomArray(int seed, int length) {
-    var completer = new Completer<List<int>>();
-    var replyPort = new RawReceivePort();
-    var args = [seed, length, replyPort.sendPort];
-    _servicePort.send(args);
-    replyPort.handler = (result) {
-      replyPort.close();
-      if (result != null) {
-        completer.complete(result);
-      } else {
-        completer.completeError(new Exception("Random array creation failed"));
-      }
-    };
-    return completer.future;
-  }
-
-  SendPort get _servicePort {
-    if (_port == null) {
-      _port = _newServicePort();
-    }
-    return _port!;
-  }
-
-  SendPort _newServicePort() native "RandomArray_ServicePort";
-}
diff --git a/samples/sample_extension/sample_extension.cc b/samples/sample_extension/sample_extension.cc
deleted file mode 100644
index f183d36..0000000
--- a/samples/sample_extension/sample_extension.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// 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.
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "include/dart_api.h"
-#include "include/dart_native_api.h"
-
-
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope);
-
-
-DART_EXPORT Dart_Handle sample_extension_Init(Dart_Handle parent_library) {
-  if (Dart_IsError(parent_library)) {
-    return parent_library;
-  }
-
-  Dart_Handle result_code =
-      Dart_SetNativeResolver(parent_library, ResolveName, NULL);
-  if (Dart_IsError(result_code)) {
-    return result_code;
-  }
-
-  return Dart_Null();
-}
-
-
-Dart_Handle HandleError(Dart_Handle handle) {
-  if (Dart_IsError(handle)) {
-    Dart_PropagateError(handle);
-  }
-  return handle;
-}
-
-
-void SystemRand(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_Handle result = HandleError(Dart_NewInteger(rand()));
-  Dart_SetReturnValue(arguments, result);
-  Dart_ExitScope();
-}
-
-
-void SystemSrand(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  bool success = false;
-  Dart_Handle seed_object = HandleError(Dart_GetNativeArgument(arguments, 0));
-  if (Dart_IsInteger(seed_object)) {
-    bool fits;
-    HandleError(Dart_IntegerFitsIntoInt64(seed_object, &fits));
-    if (fits) {
-      int64_t seed;
-      HandleError(Dart_IntegerToInt64(seed_object, &seed));
-      srand(static_cast<unsigned>(seed));
-      success = true;
-    }
-  }
-  Dart_SetReturnValue(arguments, HandleError(Dart_NewBoolean(success)));
-  Dart_ExitScope();
-}
-
-
-uint8_t* randomArray(int seed, int length) {
-  if (length <= 0 || length > 10000000) {
-    return NULL;
-  }
-  uint8_t* values = reinterpret_cast<uint8_t*>(malloc(length));
-  if (NULL == values) {
-    return NULL;
-  }
-  srand(seed);
-  for (int i = 0; i < length; ++i) {
-    values[i] = rand() % 256;
-  }
-  return values;
-}
-
-
-void wrappedRandomArray(Dart_Port dest_port_id,
-                        Dart_CObject* message) {
-  Dart_Port reply_port_id = ILLEGAL_PORT;
-  if (message->type == Dart_CObject_kArray &&
-      3 == message->value.as_array.length) {
-    // Use .as_array and .as_int32 to access the data in the Dart_CObject.
-    Dart_CObject* param0 = message->value.as_array.values[0];
-    Dart_CObject* param1 = message->value.as_array.values[1];
-    Dart_CObject* param2 = message->value.as_array.values[2];
-    if (param0->type == Dart_CObject_kInt32 &&
-        param1->type == Dart_CObject_kInt32 &&
-        param2->type == Dart_CObject_kSendPort) {
-      int seed = param0->value.as_int32;
-      int length = param1->value.as_int32;
-      reply_port_id = param2->value.as_send_port.id;
-      uint8_t* values = randomArray(seed, length);
-
-      if (values != NULL) {
-        Dart_CObject result;
-        result.type = Dart_CObject_kTypedData;
-        result.value.as_typed_data.type = Dart_TypedData_kUint8;
-        result.value.as_typed_data.values = values;
-        result.value.as_typed_data.length = length;
-        if (Dart_PostCObject(reply_port_id, &result)) {
-          Dart_CObject error;
-          error.type = Dart_CObject_kNull;
-          Dart_PostCObject(reply_port_id, &error);
-        }
-        free(values);
-        // It is OK that result is destroyed when function exits.
-        // Dart_PostCObject has copied its data.
-        return;
-      }
-    }
-  }
-  fprintf(stderr, "Invalid message received, cannot proceed. Aborting the process.\n");
-  abort();
-}
-
-
-void randomArrayServicePort(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_SetReturnValue(arguments, Dart_Null());
-  Dart_Port service_port =
-      Dart_NewNativePort("RandomArrayService", wrappedRandomArray, true);
-  if (service_port != ILLEGAL_PORT) {
-    Dart_Handle send_port = HandleError(Dart_NewSendPort(service_port));
-    Dart_SetReturnValue(arguments, send_port);
-  }
-  Dart_ExitScope();
-}
-
-
-struct FunctionLookup {
-  const char* name;
-  Dart_NativeFunction function;
-};
-
-
-FunctionLookup function_list[] = {
-    {"SystemRand", SystemRand},
-    {"SystemSrand", SystemSrand},
-    {"RandomArray_ServicePort", randomArrayServicePort},
-    {NULL, NULL}};
-
-
-FunctionLookup no_scope_function_list[] = {
-  {"NoScopeSystemRand", SystemRand},
-  {NULL, NULL}
-};
-
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope) {
-  if (!Dart_IsString(name)) {
-    return NULL;
-  }
-  Dart_NativeFunction result = NULL;
-  if (auto_setup_scope == NULL) {
-    return NULL;
-  }
-
-  Dart_EnterScope();
-  const char* cname;
-  HandleError(Dart_StringToCString(name, &cname));
-
-  for (int i=0; function_list[i].name != NULL; ++i) {
-    if (strcmp(function_list[i].name, cname) == 0) {
-      *auto_setup_scope = true;
-      result = function_list[i].function;
-      break;
-    }
-  }
-
-  if (result != NULL) {
-    Dart_ExitScope();
-    return result;
-  }
-
-  for (int i=0; no_scope_function_list[i].name != NULL; ++i) {
-    if (strcmp(no_scope_function_list[i].name, cname) == 0) {
-      *auto_setup_scope = false;
-      result = no_scope_function_list[i].function;
-      break;
-    }
-  }
-
-  Dart_ExitScope();
-  return result;
-}
diff --git a/samples/sample_extension/sample_extension_dllmain_win.cc b/samples/sample_extension/sample_extension_dllmain_win.cc
deleted file mode 100644
index ae42335..0000000
--- a/samples/sample_extension/sample_extension_dllmain_win.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-#if defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-BOOL APIENTRY DllMain(HMODULE module,
-                      DWORD  reason,
-                      LPVOID reserved) {
-  return true;
-}
-
-#endif  // defined(_WIN32)
diff --git a/samples/sample_extension/sample_synchronous_extension.dart b/samples/sample_extension/sample_synchronous_extension.dart
deleted file mode 100644
index 727cd4c..0000000
--- a/samples/sample_extension/sample_synchronous_extension.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-library sample_synchronous_extension;
-
-import 'dart-ext:sample_extension';
-
-// The simplest way to call native code: top-level functions.
-int systemRand() native "SystemRand";
-int noScopeSystemRand() native "NoScopeSystemRand";
-bool systemSrand(int seed) native "SystemSrand";
diff --git a/samples/sample_extension/test/sample_extension_app_snapshot_test.dart b/samples/sample_extension/test/sample_extension_app_snapshot_test.dart
deleted file mode 100644
index 558b108..0000000
--- a/samples/sample_extension/test/sample_extension_app_snapshot_test.dart
+++ /dev/null
@@ -1,16 +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.
-//
-// Dart test program for testing native extensions.
-
-// OtherResources=../sample_synchronous_extension.dart
-// OtherResources=../sample_asynchronous_extension.dart
-// OtherResources=../test_sample_synchronous_extension.dart
-// OtherResources=../test_sample_asynchronous_extension.dart
-
-import 'sample_extension_test_helper.dart';
-
-void main() {
-  testNativeExtensions("app-jit");
-}
diff --git a/samples/sample_extension/test/sample_extension_test.dart b/samples/sample_extension/test/sample_extension_test.dart
deleted file mode 100644
index 4311ff5..0000000
--- a/samples/sample_extension/test/sample_extension_test.dart
+++ /dev/null
@@ -1,11 +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.
-//
-// Dart test program for testing native extensions.
-
-import 'sample_extension_test_helper.dart';
-
-void main() {
-  testNativeExtensions(null /* no snapshot */);
-}
diff --git a/samples/sample_extension/test/sample_extension_test_helper.dart b/samples/sample_extension/test/sample_extension_test_helper.dart
deleted file mode 100644
index a4a78ce..0000000
--- a/samples/sample_extension/test/sample_extension_test_helper.dart
+++ /dev/null
@@ -1,114 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-import 'dart:async';
-import 'dart:io';
-import 'dart:isolate';
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-
-Future copyFileToDirectory(String file, String directory) async {
-  String src = file;
-  String dst = directory;
-  ProcessResult result;
-  switch (Platform.operatingSystem) {
-    case 'linux':
-    case 'macos':
-      result = await Process.run('cp', [src, dst]);
-      break;
-    case 'windows':
-      result = await Process.run('cmd.exe', ['/C', 'copy $src $dst']);
-      break;
-    default:
-      throw 'Unknown operating system ${Platform.operatingSystem}';
-  }
-  if (result.exitCode != 0) {
-    print(result.stdout);
-    print(result.stderr);
-    throw "Failed to copy test file ($file) to temporary directory ($directory)";
-  }
-}
-
-Future run(String program, List<String> arguments) async {
-  print("+ $program ${arguments.join(' ')}");
-  ProcessResult result = await Process.run(program, arguments);
-  if (result.exitCode != 0) {
-    print('Failing process stdout: ${result.stdout}');
-    print('Failing process stderr: ${result.stderr}');
-    print('End failing process stderr');
-    Expect.fail('Test failed with exit code ${result.exitCode}');
-  }
-}
-
-Future runTests(
-    String program, String testDirectory, String? snapshotKind) async {
-  for (var test in [
-    'test_sample_synchronous_extension.dart',
-    'test_sample_asynchronous_extension.dart'
-  ]) {
-    String script = join(testDirectory, test);
-    String snapshot;
-    if (snapshotKind == null) {
-      snapshot = script;
-    } else {
-      snapshot = join(testDirectory, "$test.snapshot");
-      await run(Platform.executable, <String>[
-        ...Platform.executableArguments,
-        '--snapshot=$snapshot',
-        '--snapshot-kind=$snapshotKind',
-        script
-      ]);
-    }
-
-    await run(program, <String>[...Platform.executableArguments, snapshot]);
-  }
-}
-
-Future testNativeExtensions(String? snapshotKind) async {
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('sample_extension_');
-  try {
-    String testDirectory = tempDirectory.path;
-    String sourceDirectory = Platform.script.resolve('..').toFilePath();
-
-    // Copy sample_extension dart files and sample_extension tests to the
-    // temporary test directory.
-    for (var file in [
-      'sample_synchronous_extension.dart',
-      'sample_asynchronous_extension.dart',
-      'test_sample_synchronous_extension.dart',
-      'test_sample_asynchronous_extension.dart'
-    ]) {
-      await copyFileToDirectory(join(sourceDirectory, file), testDirectory);
-    }
-
-    // Test native library resolution when it's next to the binary
-    await runTests(Platform.executable, testDirectory, snapshotKind);
-
-    // Test native library resolution when it's next to the source
-    await copyFileToDirectory(
-        join(
-            buildDirectory,
-            (Platform.isWindows ? '' : 'lib') +
-                'sample_extension' +
-                (Platform.isWindows
-                    ? '.dll'
-                    : Platform.isMacOS
-                        ? '.dylib'
-                        : '.so')),
-        testDirectory);
-    Directory tempBinDirectory = Directory(join(tempDirectory.path, 'dart-bin'))
-      ..createSync();
-    await copyFileToDirectory(Platform.executable, tempBinDirectory.path);
-    String copyPlatformExecutable =
-        join(tempBinDirectory.path, basename(Platform.executable));
-    await runTests(copyPlatformExecutable, testDirectory, snapshotKind);
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
diff --git a/samples/sample_extension/test_sample_asynchronous_extension.dart b/samples/sample_extension/test_sample_asynchronous_extension.dart
deleted file mode 100644
index b1fd419..0000000
--- a/samples/sample_extension/test_sample_asynchronous_extension.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// 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.
-
-library test_sample_extension;
-
-import 'sample_asynchronous_extension.dart';
-
-void check(bool condition, String message) {
-  if (!condition) {
-    throw new StateError(message);
-  }
-}
-
-void main() {
-  RandomArray r = new RandomArray();
-  r.randomArray(17, 100).then((list_100) {
-    r.randomArray(17, 200).then((list_200) {
-      for (var i = 0; i < 100; ++i) {
-        check(list_100[i] == list_200[i], "list_100[i] == list_200[i]");
-      }
-    });
-  });
-
-  // Gets a list of 256000 random uint8 values, using seed 19, and
-  // runs checkNormal on that list.
-  r.randomArray(19, 256000).then(checkNormal);
-}
-
-void checkNormal(List l) {
-  // Count how many times each byte value occurs.  Assert that the counts
-  // are all within a reasonable (six-sigma) range.
-  List<int> counts = new List<int>.filled(256, 0);
-  for (var e in l) {
-    counts[e]++;
-  }
-  new RandomArray().randomArray(18, 256000).then(checkCorrelation(counts));
-}
-
-dynamic Function(List<int>) checkCorrelation(List<int> counts) {
-  return (List<int> l) {
-    List<int> counts_2 = new List<int>.filled(256, 0);
-    for (var e in l) {
-      counts_2[e]++;
-    }
-    var product = 0;
-    for (var i = 0; i < 256; ++i) {
-      check(counts[i] < 1200, "counts[i] < 1200");
-      check(counts_2[i] < 1200, "counts_2[i] < 1200");
-      check(counts[i] > 800, "counts[i] > 800");
-      check(counts[i] > 800, "counts[i] > 800");
-
-      product += counts[i] * counts_2[i];
-    }
-    check(product < 256000000 * 1.001, "product < 256000000 * 1.001");
-    check(product > 256000000 * 0.999, "product > 256000000 * 0.999");
-  };
-}
diff --git a/samples/sample_extension/test_sample_synchronous_extension.dart b/samples/sample_extension/test_sample_synchronous_extension.dart
deleted file mode 100644
index ac17724..0000000
--- a/samples/sample_extension/test_sample_synchronous_extension.dart
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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.
-
-library test_sample_extension;
-
-import 'sample_synchronous_extension.dart';
-
-void check(bool condition, String message) {
-  if (!condition) {
-    throw new StateError(message);
-  }
-}
-
-void checkSystemRand() {
-  systemSrand(17);
-  var x1 = systemRand();
-  var x2 = systemRand();
-  var x3 = systemRand();
-  check(x1 != x2, "x1 != x2");
-  check(x1 != x3, "x1 != x3");
-  check(x2 != x3, "x2 != x3");
-  systemSrand(17);
-  check(x1 == systemRand(), "x1 == systemRand()");
-  check(x2 == systemRand(), "x2 == systemRand()");
-  check(x3 == systemRand(), "x3 == systemRand()");
-  systemSrand(18);
-  check(x1 != systemRand(), "x1 != systemRand()");
-  check(x2 != systemRand(), "x2 != systemRand()");
-  check(x3 != systemRand(), "x3 != systemRand()");
-}
-
-void checkNoScopeSystemRand() {
-  systemSrand(17);
-  var x1 = noScopeSystemRand();
-  var x2 = noScopeSystemRand();
-  var x3 = noScopeSystemRand();
-  check(x1 != x2, "x1 != x2");
-  check(x1 != x3, "x1 != x3");
-  check(x2 != x3, "x2 != x3");
-  systemSrand(17);
-  check(x1 == noScopeSystemRand(), "x1 == noScopeSystemRand()");
-  check(x2 == noScopeSystemRand(), "x2 == noScopeSystemRand()");
-  check(x3 == noScopeSystemRand(), "x3 == noScopeSystemRand()");
-  systemSrand(18);
-  check(x1 != noScopeSystemRand(), "x1 != noScopeSystemRand()");
-  check(x2 != noScopeSystemRand(), "x2 != noScopeSystemRand()");
-  check(x3 != noScopeSystemRand(), "x3 != noScopeSystemRand()");
-}
-
-void main() {
-  checkSystemRand();
-  checkNoScopeSystemRand();
-}
diff --git a/samples_2/sample_extension/.gitignore b/samples_2/sample_extension/.gitignore
deleted file mode 100644
index 518f7dd..0000000
--- a/samples_2/sample_extension/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/Makefile
-/*.Makefile
-/*.sln
-/*.target.mk
-/*.vcproj
-/*.vcxproj
-/*.vcxproj.filters
-/*.vcxproj.user
-/*.xcodeproj
diff --git a/samples_2/sample_extension/README.md b/samples_2/sample_extension/README.md
deleted file mode 100644
index 2e13091..0000000
--- a/samples_2/sample_extension/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-This directory contains samples of native extensions.
-
-To run the samples, first build both the Dart SDK and the runtime. For example:
-
-```
-$ ./tools/build.py create_sdk runtime
-```
-
-Then execute the sample programs. For example:
-
-```
-$ xcodebuild/ReleaseX64/dart samples/sample_extension/test/sample_extension_test.dart
-```
diff --git a/samples_2/sample_extension/sample_asynchronous_extension.dart b/samples_2/sample_extension/sample_asynchronous_extension.dart
deleted file mode 100644
index 541652d..0000000
--- a/samples_2/sample_extension/sample_asynchronous_extension.dart
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library sample_asynchronous_extension;
-
-import 'dart:async';
-import 'dart:isolate';
-import 'dart-ext:sample_extension';
-
-// A class caches the native port used to call an asynchronous extension.
-class RandomArray {
-  static SendPort _port;
-
-  Future<List<int>> randomArray(int seed, int length) {
-    var completer = new Completer<List<int>>();
-    var replyPort = new RawReceivePort();
-    var args = new List(3);
-    args[0] = seed;
-    args[1] = length;
-    args[2] = replyPort.sendPort;
-    _servicePort.send(args);
-    replyPort.handler = (result) {
-      replyPort.close();
-      if (result != null) {
-        completer.complete(result);
-      } else {
-        completer.completeError(new Exception("Random array creation failed"));
-      }
-    };
-    return completer.future;
-  }
-
-  SendPort get _servicePort {
-    if (_port == null) {
-      _port = _newServicePort();
-    }
-    return _port;
-  }
-
-  SendPort _newServicePort() native "RandomArray_ServicePort";
-}
diff --git a/samples_2/sample_extension/sample_extension.cc b/samples_2/sample_extension/sample_extension.cc
deleted file mode 100644
index 2e04cec..0000000
--- a/samples_2/sample_extension/sample_extension.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-// 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.
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "include/dart_api.h"
-#include "include/dart_native_api.h"
-
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope);
-
-DART_EXPORT Dart_Handle sample_extension_Init(Dart_Handle parent_library) {
-  if (Dart_IsError(parent_library)) {
-    return parent_library;
-  }
-
-  Dart_Handle result_code =
-      Dart_SetNativeResolver(parent_library, ResolveName, NULL);
-  if (Dart_IsError(result_code)) {
-    return result_code;
-  }
-
-  return Dart_Null();
-}
-
-Dart_Handle HandleError(Dart_Handle handle) {
-  if (Dart_IsError(handle)) {
-    Dart_PropagateError(handle);
-  }
-  return handle;
-}
-
-void SystemRand(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_Handle result = HandleError(Dart_NewInteger(rand()));
-  Dart_SetReturnValue(arguments, result);
-  Dart_ExitScope();
-}
-
-void SystemSrand(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  bool success = false;
-  Dart_Handle seed_object = HandleError(Dart_GetNativeArgument(arguments, 0));
-  if (Dart_IsInteger(seed_object)) {
-    bool fits;
-    HandleError(Dart_IntegerFitsIntoInt64(seed_object, &fits));
-    if (fits) {
-      int64_t seed;
-      HandleError(Dart_IntegerToInt64(seed_object, &seed));
-      srand(static_cast<unsigned>(seed));
-      success = true;
-    }
-  }
-  Dart_SetReturnValue(arguments, HandleError(Dart_NewBoolean(success)));
-  Dart_ExitScope();
-}
-
-uint8_t* randomArray(int seed, int length) {
-  if (length <= 0 || length > 10000000) {
-    return NULL;
-  }
-  uint8_t* values = reinterpret_cast<uint8_t*>(malloc(length));
-  if (NULL == values) {
-    return NULL;
-  }
-  srand(seed);
-  for (int i = 0; i < length; ++i) {
-    values[i] = rand() % 256;
-  }
-  return values;
-}
-
-void wrappedRandomArray(Dart_Port dest_port_id, Dart_CObject* message) {
-  Dart_Port reply_port_id = ILLEGAL_PORT;
-  if (message->type == Dart_CObject_kArray &&
-      3 == message->value.as_array.length) {
-    // Use .as_array and .as_int32 to access the data in the Dart_CObject.
-    Dart_CObject* param0 = message->value.as_array.values[0];
-    Dart_CObject* param1 = message->value.as_array.values[1];
-    Dart_CObject* param2 = message->value.as_array.values[2];
-    if (param0->type == Dart_CObject_kInt32 &&
-        param1->type == Dart_CObject_kInt32 &&
-        param2->type == Dart_CObject_kSendPort) {
-      int seed = param0->value.as_int32;
-      int length = param1->value.as_int32;
-      reply_port_id = param2->value.as_send_port.id;
-      uint8_t* values = randomArray(seed, length);
-
-      if (values != NULL) {
-        Dart_CObject result;
-        result.type = Dart_CObject_kTypedData;
-        result.value.as_typed_data.type = Dart_TypedData_kUint8;
-        result.value.as_typed_data.values = values;
-        result.value.as_typed_data.length = length;
-        if (Dart_PostCObject(reply_port_id, &result)) {
-          Dart_CObject error;
-          error.type = Dart_CObject_kNull;
-          Dart_PostCObject(reply_port_id, &error);
-        }
-        free(values);
-        // It is OK that result is destroyed when function exits.
-        // Dart_PostCObject has copied its data.
-        return;
-      }
-    }
-  }
-  fprintf(stderr,
-          "Invalid message received, cannot proceed. Aborting the process.\n");
-  abort();
-}
-
-void randomArrayServicePort(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_SetReturnValue(arguments, Dart_Null());
-  Dart_Port service_port =
-      Dart_NewNativePort("RandomArrayService", wrappedRandomArray, true);
-  if (service_port != ILLEGAL_PORT) {
-    Dart_Handle send_port = HandleError(Dart_NewSendPort(service_port));
-    Dart_SetReturnValue(arguments, send_port);
-  }
-  Dart_ExitScope();
-}
-
-struct FunctionLookup {
-  const char* name;
-  Dart_NativeFunction function;
-};
-
-FunctionLookup function_list[] = {
-    {"SystemRand", SystemRand},
-    {"SystemSrand", SystemSrand},
-    {"RandomArray_ServicePort", randomArrayServicePort},
-    {NULL, NULL}};
-
-FunctionLookup no_scope_function_list[] = {{"NoScopeSystemRand", SystemRand},
-                                           {NULL, NULL}};
-
-Dart_NativeFunction ResolveName(Dart_Handle name,
-                                int argc,
-                                bool* auto_setup_scope) {
-  if (!Dart_IsString(name)) {
-    return NULL;
-  }
-  Dart_NativeFunction result = NULL;
-  if (auto_setup_scope == NULL) {
-    return NULL;
-  }
-
-  Dart_EnterScope();
-  const char* cname;
-  HandleError(Dart_StringToCString(name, &cname));
-
-  for (int i = 0; function_list[i].name != NULL; ++i) {
-    if (strcmp(function_list[i].name, cname) == 0) {
-      *auto_setup_scope = true;
-      result = function_list[i].function;
-      break;
-    }
-  }
-
-  if (result != NULL) {
-    Dart_ExitScope();
-    return result;
-  }
-
-  for (int i = 0; no_scope_function_list[i].name != NULL; ++i) {
-    if (strcmp(no_scope_function_list[i].name, cname) == 0) {
-      *auto_setup_scope = false;
-      result = no_scope_function_list[i].function;
-      break;
-    }
-  }
-
-  Dart_ExitScope();
-  return result;
-}
diff --git a/samples_2/sample_extension/sample_extension_dllmain_win.cc b/samples_2/sample_extension/sample_extension_dllmain_win.cc
deleted file mode 100644
index b7b7c57..0000000
--- a/samples_2/sample_extension/sample_extension_dllmain_win.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// 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.
-
-#if defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved) {
-  return true;
-}
-
-#endif  // defined(_WIN32)
diff --git a/samples_2/sample_extension/sample_synchronous_extension.dart b/samples_2/sample_extension/sample_synchronous_extension.dart
deleted file mode 100644
index e5ad660..0000000
--- a/samples_2/sample_extension/sample_synchronous_extension.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library sample_synchronous_extension;
-
-import 'dart-ext:sample_extension';
-
-// The simplest way to call native code: top-level functions.
-int systemRand() native "SystemRand";
-int noScopeSystemRand() native "NoScopeSystemRand";
-bool systemSrand(int seed) native "SystemSrand";
diff --git a/samples_2/sample_extension/test/sample_extension_app_snapshot_test.dart b/samples_2/sample_extension/test/sample_extension_app_snapshot_test.dart
deleted file mode 100644
index b2eb204..0000000
--- a/samples_2/sample_extension/test/sample_extension_app_snapshot_test.dart
+++ /dev/null
@@ -1,18 +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.
-//
-// Dart test program for testing native extensions.
-
-// @dart = 2.9
-
-// OtherResources=../sample_synchronous_extension.dart
-// OtherResources=../sample_asynchronous_extension.dart
-// OtherResources=../test_sample_synchronous_extension.dart
-// OtherResources=../test_sample_asynchronous_extension.dart
-
-import 'sample_extension_test_helper.dart';
-
-void main() {
-  testNativeExtensions("app-jit");
-}
diff --git a/samples_2/sample_extension/test/sample_extension_test.dart b/samples_2/sample_extension/test/sample_extension_test.dart
deleted file mode 100644
index 393463b..0000000
--- a/samples_2/sample_extension/test/sample_extension_test.dart
+++ /dev/null
@@ -1,13 +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.
-//
-// Dart test program for testing native extensions.
-
-// @dart = 2.9
-
-import 'sample_extension_test_helper.dart';
-
-void main() {
-  testNativeExtensions(null /* no snapshot */);
-}
diff --git a/samples_2/sample_extension/test/sample_extension_test_helper.dart b/samples_2/sample_extension/test/sample_extension_test_helper.dart
deleted file mode 100644
index cabbb28..0000000
--- a/samples_2/sample_extension/test/sample_extension_test_helper.dart
+++ /dev/null
@@ -1,116 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-// @dart = 2.9
-
-import 'dart:async';
-import 'dart:io';
-import 'dart:isolate';
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-
-Future copyFileToDirectory(String file, String directory) async {
-  String src = file;
-  String dst = directory;
-  ProcessResult result;
-  switch (Platform.operatingSystem) {
-    case 'linux':
-    case 'macos':
-      result = await Process.run('cp', [src, dst]);
-      break;
-    case 'windows':
-      result = await Process.run('cmd.exe', ['/C', 'copy $src $dst']);
-      break;
-    default:
-      throw 'Unknown operating system ${Platform.operatingSystem}';
-  }
-  if (result.exitCode != 0) {
-    print(result.stdout);
-    print(result.stderr);
-    throw "Failed to copy test file ($file) to temporary directory ($directory)";
-  }
-}
-
-Future run(String program, List<String> arguments) async {
-  print("+ $program ${arguments.join(' ')}");
-  ProcessResult result = await Process.run(program, arguments);
-  if (result.exitCode != 0) {
-    print('Failing process stdout: ${result.stdout}');
-    print('Failing process stderr: ${result.stderr}');
-    print('End failing process stderr');
-    Expect.fail('Test failed with exit code ${result.exitCode}');
-  }
-}
-
-Future runTests(
-    String program, String testDirectory, String snapshotKind) async {
-  for (var test in [
-    'test_sample_synchronous_extension.dart',
-    'test_sample_asynchronous_extension.dart'
-  ]) {
-    String script = join(testDirectory, test);
-    String snapshot;
-    if (snapshotKind == null) {
-      snapshot = script;
-    } else {
-      snapshot = join(testDirectory, "$test.snapshot");
-      await run(Platform.executable, <String>[
-        ...Platform.executableArguments,
-        '--snapshot=$snapshot',
-        '--snapshot-kind=$snapshotKind',
-        script
-      ]);
-    }
-
-    await run(program, <String>[...Platform.executableArguments, snapshot]);
-  }
-}
-
-Future testNativeExtensions(String snapshotKind) async {
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('sample_extension_');
-  try {
-    String testDirectory = tempDirectory.path;
-    String sourceDirectory = Platform.script.resolve('..').toFilePath();
-
-    // Copy sample_extension dart files and sample_extension tests to the
-    // temporary test directory.
-    for (var file in [
-      'sample_synchronous_extension.dart',
-      'sample_asynchronous_extension.dart',
-      'test_sample_synchronous_extension.dart',
-      'test_sample_asynchronous_extension.dart'
-    ]) {
-      await copyFileToDirectory(join(sourceDirectory, file), testDirectory);
-    }
-
-    // Test native library resolution when it's next to the binary
-    await runTests(Platform.executable, testDirectory, snapshotKind);
-
-    // Test native library resolution when it's next to the source
-    await copyFileToDirectory(
-        join(
-            buildDirectory,
-            (Platform.isWindows ? '' : 'lib') +
-                'sample_extension' +
-                (Platform.isWindows
-                    ? '.dll'
-                    : Platform.isMacOS
-                        ? '.dylib'
-                        : '.so')),
-        testDirectory);
-    Directory tempBinDirectory = Directory(join(tempDirectory.path, 'dart-bin'))
-      ..createSync();
-    await copyFileToDirectory(Platform.executable, tempBinDirectory.path);
-    String copyPlatformExecutable =
-        join(tempBinDirectory.path, basename(Platform.executable));
-    await runTests(copyPlatformExecutable, testDirectory, snapshotKind);
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
diff --git a/samples_2/sample_extension/test_sample_asynchronous_extension.dart b/samples_2/sample_extension/test_sample_asynchronous_extension.dart
deleted file mode 100644
index 5ceb7c8..0000000
--- a/samples_2/sample_extension/test_sample_asynchronous_extension.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library test_sample_extension;
-
-import 'sample_asynchronous_extension.dart';
-
-void check(bool condition, String message) {
-  if (!condition) {
-    throw new StateError(message);
-  }
-}
-
-void main() {
-  RandomArray r = new RandomArray();
-  r.randomArray(17, 100).then((list_100) {
-    r.randomArray(17, 200).then((list_200) {
-      for (var i = 0; i < 100; ++i) {
-        check(list_100[i] == list_200[i], "list_100[i] == list_200[i]");
-      }
-    });
-  });
-
-  // Gets a list of 256000 random uint8 values, using seed 19, and
-  // runs checkNormal on that list.
-  r.randomArray(19, 256000).then(checkNormal);
-}
-
-void checkNormal(List l) {
-  // Count how many times each byte value occurs.  Assert that the counts
-  // are all within a reasonable (six-sigma) range.
-  List counts = new List<int>.filled(256, 0);
-  for (var e in l) {
-    counts[e]++;
-  }
-  new RandomArray().randomArray(18, 256000).then(checkCorrelation(counts));
-}
-
-Function checkCorrelation(List counts) {
-  return (List l) {
-    List counts_2 = new List<int>.filled(256, 0);
-    for (var e in l) {
-      counts_2[e]++;
-    }
-    var product = 0;
-    for (var i = 0; i < 256; ++i) {
-      check(counts[i] < 1200, "counts[i] < 1200");
-      check(counts_2[i] < 1200, "counts_2[i] < 1200");
-      check(counts[i] > 800, "counts[i] > 800");
-      check(counts[i] > 800, "counts[i] > 800");
-
-      product += counts[i] * counts_2[i];
-    }
-    check(product < 256000000 * 1.001, "product < 256000000 * 1.001");
-    check(product > 256000000 * 0.999, "product > 256000000 * 0.999");
-  };
-}
diff --git a/samples_2/sample_extension/test_sample_synchronous_extension.dart b/samples_2/sample_extension/test_sample_synchronous_extension.dart
deleted file mode 100644
index 77d2fc3..0000000
--- a/samples_2/sample_extension/test_sample_synchronous_extension.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library test_sample_extension;
-
-import 'sample_synchronous_extension.dart';
-
-void check(bool condition, String message) {
-  if (!condition) {
-    throw new StateError(message);
-  }
-}
-
-void checkSystemRand() {
-  systemSrand(17);
-  var x1 = systemRand();
-  var x2 = systemRand();
-  var x3 = systemRand();
-  check(x1 != x2, "x1 != x2");
-  check(x1 != x3, "x1 != x3");
-  check(x2 != x3, "x2 != x3");
-  systemSrand(17);
-  check(x1 == systemRand(), "x1 == systemRand()");
-  check(x2 == systemRand(), "x2 == systemRand()");
-  check(x3 == systemRand(), "x3 == systemRand()");
-  systemSrand(18);
-  check(x1 != systemRand(), "x1 != systemRand()");
-  check(x2 != systemRand(), "x2 != systemRand()");
-  check(x3 != systemRand(), "x3 != systemRand()");
-}
-
-void checkNoScopeSystemRand() {
-  systemSrand(17);
-  var x1 = noScopeSystemRand();
-  var x2 = noScopeSystemRand();
-  var x3 = noScopeSystemRand();
-  check(x1 != x2, "x1 != x2");
-  check(x1 != x3, "x1 != x3");
-  check(x2 != x3, "x2 != x3");
-  systemSrand(17);
-  check(x1 == noScopeSystemRand(), "x1 == noScopeSystemRand()");
-  check(x2 == noScopeSystemRand(), "x2 == noScopeSystemRand()");
-  check(x3 == noScopeSystemRand(), "x3 == noScopeSystemRand()");
-  systemSrand(18);
-  check(x1 != noScopeSystemRand(), "x1 != noScopeSystemRand()");
-  check(x2 != noScopeSystemRand(), "x2 != noScopeSystemRand()");
-  check(x3 != noScopeSystemRand(), "x3 != noScopeSystemRand()");
-}
-
-void main() {
-  checkSystemRand();
-  checkNoScopeSystemRand();
-}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 7067a89..a505d5c 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -37,7 +37,6 @@
 # ......dartaotruntime or dartaotruntime.exe (executable)
 # ......dartdoc
 # ......dartfmt
-# ......dart2native (if not on ia32)
 # ......dart2js
 # ......dartanalyzer
 # ......dartdevc
@@ -46,7 +45,6 @@
 # ......snapshots/
 # ........analysis_server.dart.snapshot
 # ........dart2js.dart.snapshot
-# ........dart2native.dart.snapshot (if not on ia32)
 # ........dartanalyzer.dart.snapshot
 # ........dartdev.dart.snapshot
 # ........dartdev.dill
@@ -58,7 +56,6 @@
 # ........gen_kernel.dart.snapshot (if not on ia32)
 # ........kernel-service.dart.snapshot
 # ........kernel_worker.dart.snapshot
-# ........pub.dart.snapshot
 # ......resources/
 # ........dartdoc/
 # ...........packages
@@ -142,17 +139,7 @@
     "frontend_server",
     "../utils/kernel-service:frontend_server",
   ],
-  [
-    "pub",
-    "../utils/pub",
-  ],
 ]
-if (dart_target_arch != "ia32") {
-  _platform_sdk_snapshots += [ [
-        "dart2native",
-        "../utils/dart2native:generate_dart2native_snapshot",
-      ] ]
-}
 if (create_kernel_service_snapshot) {
   _platform_sdk_snapshots += [ [
         "kernel-service",
@@ -270,8 +257,8 @@
     {
       target = "copy_${library}_library"
       visibility = [
-        ":copy_platform_sdk_libraries",
         ":copy_full_sdk_libraries",
+        ":copy_platform_sdk_libraries",
       ]
       source = "lib/$library"
       dest = "$root_out_dir/$dart_sdk_output/lib/$library"
@@ -328,7 +315,7 @@
 }
 
 copy("copy_dartaotruntime") {
-  visibility = [ ":copy_dart2native" ]
+  visibility = [ ":group_dart2native" ]
   deps = [ "../runtime/bin:dart_precompiled_runtime_product" ]
   src_dir = get_label_info("../runtime/bin:dart_precompiled_runtime_product",
                            "root_out_dir")
@@ -341,7 +328,7 @@
 }
 
 copy("copy_gen_snapshot") {
-  visibility = [ ":copy_dart2native" ]
+  visibility = [ ":group_dart2native" ]
   deps = [ "../runtime/bin:gen_snapshot_product" ]
   src_dir =
       get_label_info("../runtime/bin:gen_snapshot_product", "root_out_dir")
@@ -352,7 +339,7 @@
 }
 
 copy("copy_vm_platform_strong_product") {
-  visibility = [ ":copy_dart2native" ]
+  visibility = [ ":group_dart2native" ]
   deps = [ "../runtime/vm:vm_platform_product" ]
   src_dir = get_label_info("../runtime/vm:vm_platform_product", "root_out_dir")
   sources = [ "$src_dir/vm_platform_strong_product.dill" ]
@@ -360,27 +347,21 @@
       [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ]
 }
 
-copy("copy_dart2native") {
+copy("copy_gen_kernel_snapshot") {
+  visibility = [ ":group_dart2native" ]
+  deps = [ "../utils/gen_kernel" ]
+  sources = [ "$root_gen_dir/gen_kernel.dart.snapshot" ]
+  outputs =
+      [ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ]
+}
+
+group("group_dart2native") {
   deps = [
     ":copy_dartaotruntime",
     ":copy_gen_kernel_snapshot",
     ":copy_gen_snapshot",
     ":copy_vm_platform_strong_product",
   ]
-  ext = ""
-  if (is_win) {
-    ext = ".bat"
-  }
-  sources = [ "bin/dart2native$ext" ]
-  outputs = [ "$root_out_dir/$dart_sdk_output/bin/{{source_file_part}}" ]
-}
-
-copy("copy_gen_kernel_snapshot") {
-  visibility = [ ":copy_dart2native" ]
-  deps = [ "../utils/gen_kernel" ]
-  sources = [ "$root_gen_dir/gen_kernel.dart.snapshot" ]
-  outputs =
-      [ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ]
 }
 
 # A template for copying the things in _platform_sdk_scripts and
@@ -394,8 +375,8 @@
   }
   copy(target_name) {
     visibility = [
-      ":copy_platform_sdk_scripts",
       ":copy_full_sdk_scripts",
+      ":copy_platform_sdk_scripts",
     ]
     sources = [ "bin/${name}_sdk$ext" ]
     outputs = [ "$root_out_dir/$dart_sdk_output/bin/$name$ext" ]
@@ -411,8 +392,8 @@
 foreach(script, _scripts) {
   copy("copy_${script}_script") {
     visibility = [
-      ":copy_platform_sdk_scripts",
       ":copy_full_sdk_scripts",
+      ":copy_platform_sdk_scripts",
     ]
     ext = ""
     if (is_win) {
@@ -458,8 +439,8 @@
   }
   copy("copy_${snapshot[0]}_snapshot") {
     visibility = [
-      ":copy_platform_sdk_snapshots",
       ":copy_full_sdk_snapshots",
+      ":copy_platform_sdk_snapshots",
     ]
     deps = [ snapshot[1] ]
     sources = [ "$root/${snapshot[0]}.dart.snapshot" ]
@@ -695,8 +676,8 @@
 # This is the main rule to copy libraries in _full_sdk_libraries to lib/
 group("copy_full_sdk_libraries") {
   visibility = [
-    ":create_full_sdk",
     ":copy_libraries",
+    ":create_full_sdk",
   ]
   public_deps = []
   foreach(library, _full_sdk_libraries) {
@@ -796,8 +777,8 @@
 # Parts common to both platform and full SDKs.
 group("create_common_sdk") {
   visibility = [
-    ":create_sdk",
     ":create_platform_sdk",
+    ":create_sdk",
   ]
   public_deps = [
     ":copy_analysis_summaries",
@@ -818,17 +799,17 @@
   ]
 
   # We do not support AOT on ia32 and should therefore not add the
-  # dart2native script (since there is no AOT compiler/runtime available)
+  # dart native compilation files (since there is no AOT compiler/runtime available)
   if (dart_target_arch != "ia32") {
-    public_deps += [ ":copy_dart2native" ]
+    public_deps += [ ":group_dart2native" ]
   }
 }
 
 # Parts specific to the platform SDK.
 group("_create_platform_sdk") {
   visibility = [
-    ":create_sdk",
     ":create_platform_sdk",
+    ":create_sdk",
   ]
   public_deps = [
     ":copy_platform_sdk_libraries",
diff --git a/sdk/bin/dart2native b/sdk/bin/dart2native
deleted file mode 100755
index 6f59f3f..0000000
--- a/sdk/bin/dart2native
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-
-# Run dart2native.dart.snapshot on the Dart VM
-
-echo "Warning: 'dart2native' is deprecated. Please use 'dart compile exe'." 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)"
-SNAPSHOTS_DIR="${BIN_DIR}/snapshots"
-DART="$BIN_DIR/dart"
-
-exec "$DART" "${SNAPSHOTS_DIR}/dart2native.dart.snapshot" "$@"
diff --git a/sdk/bin/dart2native.bat b/sdk/bin/dart2native.bat
deleted file mode 100644
index ca4d8d7..0000000
--- a/sdk/bin/dart2native.bat
+++ /dev/null
@@ -1,45 +0,0 @@
-@echo off
-REM Copyright (c) 2019, 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: 'dart2native' is deprecated. Please use 'dart compile exe'. 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
-
-"%DART%" "%BIN_DIR%\snapshots\dart2native.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 [" 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/pub b/sdk/bin/pub
deleted file mode 100755
index 85ad5d6..0000000
--- a/sdk/bin/pub
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-
-# Run pub.dart on the Dart VM. This script is only used when running pub from
-# within the Dart source repo. The shipped SDK instead uses "pub_sdk", which is
-# renamed to "pub" when the SDK is built.
-
-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/pub.dart.snapshot"
-
-unset VM_OPTIONS
-declare -a VM_OPTIONS
-
-if [[ `uname` == 'Darwin' ]];
-then
-  OUT_DIR="$BIN_DIR"/../../xcodebuild/
-else
-  OUT_DIR="$BIN_DIR"/../../out/
-fi
-
-# Allow extra VM options to be passed in through an environment variable.
-if [[ $DART_VM_OPTIONS ]]; then
-  read -a OPTIONS <<< "$DART_VM_OPTIONS"
-  VM_OPTIONS+=("${OPTIONS[@]}")
-fi
-
-if [ -z "$DART_CONFIGURATION" ];
-then
-  DIRS=$( ls "$OUT_DIR" )
-  # list of possible configurations in decreasing desirability
-  CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32"
-    "ReleaseARM" "ReleaseARM64" "DebugARM" "DebugARM64" )
-  DART_CONFIGURATION="None"
-  for CONFIG in ${CONFIGS[*]}
-  do
-    for DIR in $DIRS;
-    do
-      if [ "$CONFIG" = "$DIR" ];
-      then
-        # choose most desirable configuration that is available and break
-        DART_CONFIGURATION="$DIR"
-        break 2
-      fi
-    done
-  done
-  if [ "$DART_CONFIGURATION" = "None" ]
-  then
-    echo "No valid dart configuration found in $OUT_DIR"
-    exit 1
-  fi
-fi
-
-if [[ `uname` == 'Darwin' ]];
-then
-  BUILD_DIR="$SDK_DIR/../xcodebuild/$DART_CONFIGURATION"
-else
-  BUILD_DIR="$SDK_DIR/../out/$DART_CONFIGURATION"
-fi
-
-# Use the Dart binary in the built SDK so pub can find the version file next
-# to it.
-DART="$BUILD_DIR/dart-sdk/bin/dart"
-
-# Run pub.
-PUB="$SDK_DIR/../third_party/pkg/pub/bin/pub.dart"
-exec "$DART" "--packages=$SDK_DIR/../.packages" "${VM_OPTIONS[@]}" "$PUB" "$@"
diff --git a/sdk/bin/pub_sdk b/sdk/bin/pub_sdk
index 4d29878..17ce14c 100755
--- a/sdk/bin/pub_sdk
+++ b/sdk/bin/pub_sdk
@@ -28,7 +28,7 @@
 
 # Handle the case where dart-sdk/bin has been symlinked to.
 BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
+DART="$BIN_DIR/dart"
 
 unset VM_OPTIONS
 declare -a VM_OPTIONS
@@ -39,12 +39,9 @@
   VM_OPTIONS+=("${OPTIONS[@]}")
 fi
 
-# Run the pub snapshot.
-DART="$BIN_DIR/dart"
-if array_contains "--no-preview-dart-2" "${VM_OPTIONS[@]}"; then
-  echo "Pub no longer supports Dart 1"
-  exit -1
-else
-  SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"
-  exec "$DART" "${VM_OPTIONS[@]}" "$SNAPSHOT" "$@"
+if [ -t 2 ]; then # Only print warning when run in terminal.
+  >&2 echo 'The top level `pub` command is deprecated. Use `dart pub` instead.'
 fi
+
+# Forward to the `dart __deprecatedpub` command.
+exec "$DART" "${VM_OPTIONS[@]}" __deprecated_pub "$@"
diff --git a/sdk/bin/pub_sdk.bat b/sdk/bin/pub_sdk.bat
index 2fe828b..e882aac 100644
--- a/sdk/bin/pub_sdk.bat
+++ b/sdk/bin/pub_sdk.bat
@@ -28,11 +28,8 @@
   )
 )
 
-if defined USING_DART_1 (
-  echo "Pub no longer supports Dart 1"
-) else (
-  "%BIN_DIR%\dart" %VM_OPTIONS% "%BIN_DIR%\snapshots\pub.dart.snapshot" %*
-)
+echo "The top level `pub.bat` command is deprecated. Use `dart pub` instead." 1>&2
+"%BIN_DIR%\dart" %VM_OPTIONS% __deprecated_pub %*
 
 endlocal
 
diff --git a/sdk/lib/_http/http.dart b/sdk/lib/_http/http.dart
index 47e481a..d303412 100644
--- a/sdk/lib/_http/http.dart
+++ b/sdk/lib/_http/http.dart
@@ -391,6 +391,26 @@
   static const acceptEncodingHeader = "accept-encoding";
   static const acceptLanguageHeader = "accept-language";
   static const acceptRangesHeader = "accept-ranges";
+  @Since("2.14")
+  static const accessControlAllowCredentialsHeader =
+      'access-control-allow-credentials';
+  @Since("2.14")
+  static const accessControlAllowHeadersHeader = 'access-control-allow-headers';
+  @Since("2.14")
+  static const accessControlAllowMethodsHeader = 'access-control-allow-methods';
+  @Since("2.14")
+  static const accessControlAllowOriginHeader = 'access-control-allow-origin';
+  @Since("2.14")
+  static const accessControlExposeHeadersHeader =
+      'access-control-expose-headers';
+  @Since("2.14")
+  static const accessControlMaxAgeHeader = 'access-control-max-age';
+  @Since("2.14")
+  static const accessControlRequestHeadersHeader =
+      'access-control-request-headers';
+  @Since("2.14")
+  static const accessControlRequestMethodHeader =
+      'access-control-request-method';
   static const ageHeader = "age";
   static const allowHeader = "allow";
   static const authorizationHeader = "authorization";
@@ -2303,7 +2323,9 @@
   const HttpException(this.message, {this.uri});
 
   String toString() {
-    var b = new StringBuffer()..write('HttpException: ')..write(message);
+    var b = new StringBuffer()
+      ..write('HttpException: ')
+      ..write(message);
     var uri = this.uri;
     if (uri != null) {
       b.write(', uri = $uri');
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
index 1f585c1..41ac9d6 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
@@ -8,9 +8,6 @@
 import 'dart:_interceptors' show JSArray;
 import 'dart:_js_helper'
     show
-        NoInline,
-        NoSideEffects,
-        NoThrows,
         patch,
         LinkedMap,
         IdentityMap,
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
index 148016d..e07844b 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
@@ -12,7 +12,6 @@
         getRuntimeType,
         LinkedMap,
         JSSyntaxRegExp,
-        NoInline,
         notNull,
         nullCheck,
         Primitives,
@@ -903,7 +902,6 @@
 @patch
 class StackTrace {
   @patch
-  @NoInline()
   static StackTrace get current {
     return dart.stackTrace(JS('', 'Error()'));
   }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/annotations.dart b/sdk/lib/_internal/js_dev_runtime/private/annotations.dart
index 9062f31..b2bc4b7 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/annotations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/annotations.dart
@@ -59,17 +59,6 @@
 /// of a variable with null
 const nullCheck = _NullCheck();
 
-/// Tells the optimizing compiler that the annotated method cannot throw.
-/// Requires @NoInline() to function correctly.
-class NoThrows {
-  const NoThrows();
-}
-
-/// Tells the optimizing compiler to not inline the annotated method.
-class NoInline {
-  const NoInline();
-}
-
 /// Marks a class as native and defines its JavaScript name(s).
 class Native {
   final String name;
diff --git a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
index fdc771d..01921c0 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
@@ -178,18 +178,68 @@
         dart.typeName(dart.getReifiedType(this)), this);
   }
 
-  // TODO(jmesserly): remove these once we canonicalize tearoffs.
+  // TODO(nshahan): We can remove these if we canonicalize all tearoffs and no
+  // longer support weak null safety "same type" equality.
   operator ==(other) {
-    if (other == null) return false;
-    var boundObj = JS<Object?>('', '#._boundObject', this);
-    if (boundObj == null) return JS<bool>('!', '# === #', this, other);
-    return JS(
-        'bool',
+    // Basic function values (no generics, no bound instances) are represented
+    // as the original functions so reference equality is sufficient.
+    if (JS<bool>('!', '# === #', this, other)) return true;
+
+    dynamic boundObj;
+    dynamic otherFn;
+    var originalFn = JS('', '#._originalFn', this);
+
+    if (originalFn == null) {
+      // No generic instantiation present.
+      boundObj = JS('', '#._boundObject', this);
+      if (boundObj == null) return false;
+      originalFn = this;
+      otherFn = other;
+    } else {
+      // Generic instantiation was present.
+      var typeArgs = JS('!', '#._typeArgs', this);
+      var otherTypeArgs = JS('', '#._typeArgs', other);
+      // Test if all instantiated type arguments are equal.
+      if (dart.compileTimeFlag('soundNullSafety')) {
+        // The list has been canonicalized on creation so reference equality
+        // is sufficient.
+        if (JS<bool>('!', '# !== #', typeArgs, otherTypeArgs)) return false;
+      } else {
+        // In weak null safety all types arguments must be compared in a way
+        // that is agnostic to legacy.
+        var typeArgCount = JS<int>('!', '#.length', typeArgs);
+        if (JS<bool>('!', '!#', otherTypeArgs) ||
+            typeArgCount != JS('', '#.length', otherTypeArgs)) {
+          return false;
+        }
+        for (var i = 0; i < typeArgCount; i++) {
+          var typeArg = JS('!', '#[#]', typeArgs, i);
+          var otherTypeArg = JS('!', '#[#]', otherTypeArgs, i);
+          // TODO(nshahan) Replace wrapType() with a lighter weight legacy
+          // erasure.
+          if (JS<bool>('!', '# !== #', dart.wrapType(typeArg),
+              dart.wrapType(otherTypeArg))) {
+            return false;
+          }
+        }
+      }
+      boundObj = JS('', '#._boundObject', originalFn);
+      otherFn = JS('', '#._originalFn', other);
+      if (boundObj == null) {
+        // This isn't an instance tearoff, test if the original uninstantiated
+        // methods are equal.
+        return JS<bool>('!', '# === #', originalFn, otherFn);
+      }
+    }
+    // This is an instance tearoff, test if the bound instances and methods
+    // are equal.
+    return JS<bool>(
+        '!',
         '# === #._boundObject && #._boundMethod === #._boundMethod',
         boundObj,
-        other,
-        this,
-        other);
+        otherFn,
+        originalFn,
+        otherFn);
   }
 
   get hashCode {
diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_array.dart b/sdk/lib/_internal/js_dev_runtime/private/js_array.dart
index 3076131..3fe9b22 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/js_array.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/js_array.dart
@@ -576,8 +576,8 @@
   E operator [](int index) {
     // Suppress redundant null checks via JS.
     if (index == null ||
-        JS<int>('!', '#', index) >= JS<int>('!', '#.length', this) ||
-        JS<int>('!', '#', index) < 0) {
+        // This form of the range check correctly rejects NaN.
+        JS<bool>('!', '!(# >= 0 && # < #.length)', index, index, this)) {
       throw diagnoseIndexError(this, index);
     }
     return JS<E>('', '#[#]', this, index);
@@ -586,8 +586,8 @@
   void operator []=(int index, E value) {
     checkMutable('indexed set');
     if (index == null ||
-        JS<int>('!', '#', index) >= JS<int>('!', '#.length', this) ||
-        JS<int>('!', '#', index) < 0) {
+        // This form of the range check correctly rejects NaN.
+        JS<bool>('!', '!(# >= 0 && # < #.length)', index, index, this)) {
       throw diagnoseIndexError(this, index);
     }
     JS('void', r'#[#] = #', this, index, value);
diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
index 08a1e1e..c32af9b 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
@@ -479,7 +479,6 @@
  * Diagnoses an indexing error. Returns the ArgumentError or RangeError that
  * describes the problem.
  */
-@NoInline()
 Error diagnoseIndexError(indexable, int index) {
   int length = indexable.length;
   // The following returns the same error that would be thrown by calling
@@ -495,7 +494,6 @@
  * Diagnoses a range error. Returns the ArgumentError or RangeError that
  * describes the problem.
  */
-@NoInline()
 Error diagnoseRangeError(int? start, int? end, int length) {
   if (start == null) {
     return ArgumentError.value(start, 'start');
@@ -517,7 +515,6 @@
     JS<int>('!', r'#.lastIndexOf(#, #)', receiver, element, start);
 
 /// 'factory' for constructing ArgumentError.value to keep the call sites small.
-@NoInline()
 ArgumentError argumentErrorValue(object) {
   return ArgumentError.value(object);
 }
@@ -539,7 +536,6 @@
   throw AbstractClassInstantiationError(className);
 }
 
-@NoInline()
 throwConcurrentModificationError(collection) {
   throw ConcurrentModificationError(collection);
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_string.dart b/sdk/lib/_internal/js_dev_runtime/private/js_string.dart
index 985c02d..09b54dc 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/js_string.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/js_string.dart
@@ -458,7 +458,11 @@
 
   @notNull
   int compareTo(@nullCheck String other) {
-    return this == other ? 0 : JS<bool>('!', r'# < #', this, other) ? -1 : 1;
+    return this == other
+        ? 0
+        : JS<bool>('!', r'# < #', this, other)
+            ? -1
+            : 1;
   }
 
   // Note: if you change this, also change the function [S].
@@ -495,7 +499,8 @@
 
   @notNull
   String operator [](@nullCheck int index) {
-    if (index >= JS<int>('!', '#.length', this) || index < 0) {
+    // This form of the range check correctly rejects NaN.
+    if (JS<bool>('!', '!(# >= 0 && # < #.length)', index, index, this)) {
       throw diagnoseIndexError(this, index);
     }
     return JS<String>('!', '#[#]', this, index);
diff --git a/sdk/lib/_internal/js_runtime/lib/collection_patch.dart b/sdk/lib/_internal/js_runtime/lib/collection_patch.dart
index 6ff4a1f..b01ebb6 100644
--- a/sdk/lib/_internal/js_runtime/lib/collection_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/collection_patch.dart
@@ -9,9 +9,6 @@
         fillLiteralMap,
         fillLiteralSet,
         InternalMap,
-        NoInline,
-        NoSideEffects,
-        NoThrows,
         patch,
         JsLinkedHashMap,
         LinkedHashMapCell,
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index abd63e2..5726f96 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -17,7 +17,6 @@
         JsLinkedHashMap,
         jsonEncodeNative,
         JSSyntaxRegExp,
-        NoInline,
         objectHashCode,
         patch,
         Primitives,
diff --git a/sdk/lib/_internal/js_runtime/lib/dart2js_runtime_metrics.dart b/sdk/lib/_internal/js_runtime/lib/dart2js_runtime_metrics.dart
new file mode 100644
index 0000000..637d2c7
--- /dev/null
+++ b/sdk/lib/_internal/js_runtime/lib/dart2js_runtime_metrics.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.
+
+library dart2js_runtime_metrics;
+
+import 'dart:_js_helper' show fillLiteralMap, rawStartupMetrics;
+
+/// A collection of metrics for events that happen before `main()` is entered.
+///
+/// The contents of the map depend on the platform. The map values are simple
+/// objects (strings, numbers, Booleans). There is always an entry for the key
+/// `'runtime'` with a [String] value.
+///
+/// This implementation for dart2js has the content (subject to change):
+///
+/// - `runtime`: `'dart2js'`
+///
+/// - `firstMs`: First `performance.now()` reading taken from the main.dart.js
+///   file. This is the earliest time that the script is executing. The script
+///   has already been loaded and parsed (otherwise the script load would fail)
+///   and these earier events may be available from the `performance` API.
+///
+/// - `dartProgramMs`: `performance.now()` immediately inside the large function
+///   with the name 'dartProgram' that wraps all the Dart code, before doing any
+///   program setup actions.
+///
+/// - `callMainMs`: performance.now() just before calling main(), after doing
+///   all program setup actions.
+///
+/// The injected code uses `Date.now()` if `performance.now()` is not defined.
+Map<String, Object> get startupMetrics {
+  final Map<String, Object> result = {'runtime': 'dart2js'};
+  final raw = rawStartupMetrics();
+  fillLiteralMap(raw, result);
+  return result;
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/developer_patch.dart b/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
index e7833f5..feb0d48 100644
--- a/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
@@ -4,7 +4,7 @@
 
 // Patch file for dart:developer library.
 
-import 'dart:_js_helper' show patch, ForceInline;
+import 'dart:_js_helper' show patch;
 import 'dart:_foreign_helper' show JS;
 import 'dart:async' show Zone;
 import 'dart:isolate';
diff --git a/sdk/lib/_internal/js_runtime/lib/instantiation.dart b/sdk/lib/_internal/js_runtime/lib/instantiation.dart
index da3fcbd..38c403d 100644
--- a/sdk/lib/_internal/js_runtime/lib/instantiation.dart
+++ b/sdk/lib/_internal/js_runtime/lib/instantiation.dart
@@ -22,6 +22,13 @@
     }
   }
 
+  bool operator ==(Object other) =>
+      other is Instantiation &&
+      this._genericClosure == other._genericClosure &&
+      this.runtimeType == other.runtimeType;
+
+  int get hashCode => Object.hash(_genericClosure, runtimeType);
+
   /// Returns a list of the bound types.
   List get _types;
 
diff --git a/sdk/lib/_internal/js_runtime/lib/interceptors.dart b/sdk/lib/_internal/js_runtime/lib/interceptors.dart
index 189bb8c..5a062ab 100644
--- a/sdk/lib/_internal/js_runtime/lib/interceptors.dart
+++ b/sdk/lib/_internal/js_runtime/lib/interceptors.dart
@@ -40,8 +40,7 @@
         throwConcurrentModificationError,
         lookupAndCacheInterceptor,
         StringMatch,
-        firstMatchAfter,
-        NoInline;
+        firstMatchAfter;
 
 import 'dart:_foreign_helper'
     show
diff --git a/sdk/lib/_internal/js_runtime/lib/js_array.dart b/sdk/lib/_internal/js_runtime/lib/js_array.dart
index f0024ca..dde10ed 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_array.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_array.dart
@@ -705,14 +705,16 @@
 
   E operator [](int index) {
     if (index is! int) throw diagnoseIndexError(this, index);
-    if (index >= length || index < 0) throw diagnoseIndexError(this, index);
+    // This form of the range test correctly rejects NaN.
+    if (!(index >= 0 && index < length)) throw diagnoseIndexError(this, index);
     return JS('', '#[#]', this, index);
   }
 
   void operator []=(int index, E value) {
     checkMutable('indexed set');
     if (index is! int) throw diagnoseIndexError(this, index);
-    if (index >= length || index < 0) throw diagnoseIndexError(this, index);
+    // This form of the range test correctly rejects NaN.
+    if (!(index >= 0 && index < length)) throw diagnoseIndexError(this, index);
     JS('void', r'#[#] = #', this, index, value);
   }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index fa79c12..b39faed 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -21,6 +21,7 @@
         JsGetName,
         LEAF_TAGS,
         NATIVE_SUPERCLASS_TAG_NAME,
+        STARTUP_METRICS,
         STATIC_FUNCTION_NAME_PROPERTY_NAME,
         TearOffParametersPropertyNames;
 
@@ -3005,3 +3006,7 @@
   assert(args.every((arg) => arg is! Function || isJSFunction(arg)),
       'Dart function requires `allowInterop` to be passed to JavaScript.');
 }
+
+Object? rawStartupMetrics() {
+  return JS('JSArray', '#.a', JS_EMBEDDED_GLOBAL('', STARTUP_METRICS));
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/js_string.dart b/sdk/lib/_internal/js_runtime/lib/js_string.dart
index 6d25e5d..8c8dd55 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_string.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_string.dart
@@ -431,7 +431,11 @@
 
   int compareTo(String other) {
     if (other is! String) throw argumentErrorValue(other);
-    return this == other ? 0 : JS('bool', r'# < #', this, other) ? -1 : 1;
+    return this == other
+        ? 0
+        : JS('bool', r'# < #', this, other)
+            ? -1
+            : 1;
   }
 
   // Note: if you change this, also change the function [S].
@@ -461,7 +465,8 @@
 
   String operator [](int index) {
     if (index is! int) throw diagnoseIndexError(this, index);
-    if (index >= length || index < 0) throw diagnoseIndexError(this, index);
+    // This form of the range test correctly rejects NaN.
+    if (!(index >= 0 && index < length)) throw diagnoseIndexError(this, index);
     return JS('String', '#[#]', this, index);
   }
 }
diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
index ec45847..0334810 100644
--- a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
@@ -179,6 +179,9 @@
 /// This embedded global is used for --experiment-new-rti.
 const RTI_UNIVERSE = 'typeUniverse';
 
+/// An embedded global used to collect and access startup metrics.
+const STARTUP_METRICS = 'sm';
+
 /// Names that are supported by [JS_GET_NAME].
 // TODO(herhut): Make entries lower case (as in fields) and find a better name.
 enum JsGetName {
diff --git a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
index 8e56fe9..b0482a8 100644
--- a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
+++ b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
@@ -153,6 +153,11 @@
       categories: "", documented: false, platforms: DART2JS_PLATFORM),
   "_rti": const LibraryInfo("_internal/js_runtime/lib/rti.dart",
       categories: "", documented: false, platforms: DART2JS_PLATFORM),
+  "_dart2js_runtime_metrics": const LibraryInfo(
+      "_internal/js_runtime/lib/dart2js_runtime_metrics.dart",
+      categories: "",
+      documented: false,
+      platforms: DART2JS_PLATFORM),
   "_interceptors": const LibraryInfo(
       "_internal/js_runtime/lib/interceptors.dart",
       categories: "",
diff --git a/sdk/lib/_internal/vm/lib/class_id.dart b/sdk/lib/_internal/vm/lib/class_id.dart
deleted file mode 100644
index ff9d0b6..0000000
--- a/sdk/lib/_internal/vm/lib/class_id.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// part of "internal_patch.dart";
-
-@pragma("vm:entry-point")
-class ClassID {
-  @pragma("vm:entry-point")
-  @pragma("vm:exact-result-type", "dart:core#_Smi")
-  static int getID(Object value) native "ClassID_getID";
-
-  // VM injects class id constants into this class.
-}
diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart
index cc518e5..26406d3 100644
--- a/sdk/lib/_internal/vm/lib/double.dart
+++ b/sdk/lib/_internal/vm/lib/double.dart
@@ -49,12 +49,9 @@
   double _mul(double other) native "Double_mul";
 
   int operator ~/(num other) {
-    return _trunc_div(other.toDouble());
+    return (this / other.toDouble()).truncate();
   }
 
-  @pragma("vm:non-nullable-result-type")
-  int _trunc_div(double other) native "Double_trunc_div";
-
   @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   @pragma("vm:never-inline")
@@ -70,7 +67,8 @@
     return _modulo(other.toDouble());
   }
 
-  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:exact-result-type", _Double)
   double _modulo(double other) native "Double_modulo";
 
@@ -142,7 +140,7 @@
   }
 
   int _truncDivFromInteger(int other) {
-    return new _Double.fromInteger(other)._trunc_div(this);
+    return (new _Double.fromInteger(other) / this).truncate();
   }
 
   double _moduloFromInteger(int other) {
@@ -184,16 +182,20 @@
   int ceil() => ceilToDouble().toInt();
   int truncate() => truncateToDouble().toInt();
 
-  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:exact-result-type", _Double)
   double roundToDouble() native "Double_round";
-  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:exact-result-type", _Double)
   double floorToDouble() native "Double_floor";
-  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:exact-result-type", _Double)
   double ceilToDouble() native "Double_ceil";
-  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:exact-result-type", _Double)
   double truncateToDouble() native "Double_truncate";
 
@@ -214,7 +216,8 @@
     return this;
   }
 
-  @pragma("vm:recognized", "asm-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:non-nullable-result-type")
   int toInt() native "Double_toInt";
 
diff --git a/sdk/lib/_internal/vm/lib/expando_patch.dart b/sdk/lib/_internal/vm/lib/expando_patch.dart
index 36c65df..f707102 100644
--- a/sdk/lib/_internal/vm/lib/expando_patch.dart
+++ b/sdk/lib/_internal/vm/lib/expando_patch.dart
@@ -4,6 +4,16 @@
 
 // part of "core_patch.dart";
 
+// This function takes care of rehashing of the expandos in [objects]. We
+// do this eagerly after snapshot deserialization.
+@pragma("vm:entry-point", "call")
+void _rehashObjects(List objects) {
+  final int length = objects.length;
+  for (int i = 0; i < length; ++i) {
+    objects[i]._rehash();
+  }
+}
+
 @patch
 @pragma("vm:entry-point")
 class Expando<T> {
@@ -96,7 +106,6 @@
     this[object] = value; // Recursively add the value.
   }
 
-  @pragma("vm:entry-point", "call")
   _rehash() {
     // Determine the population count of the map to allocate an appropriately
     // sized map below.
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index 67501fb..e71c95f 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -176,19 +176,6 @@
 void sendAndExit(SendPort sendPort, var message)
     native "SendPortImpl_sendAndExitInternal_";
 
-void spawnFunction(
-    SendPort readyPort,
-    String uri,
-    Function topLevelFunction,
-    var message,
-    bool paused,
-    bool errorsAreFatal,
-    SendPort? onExit,
-    SendPort? onError,
-    String? packageConfig,
-    bool newIsolateGroup,
-    String? debugName) native "Isolate_spawnFunction";
-
 // Collection of functions which should only be used for testing purposes.
 abstract class VMInternalsForTesting {
   // This function can be used by tests to enforce garbage collection.
diff --git a/sdk/lib/_internal/vm/lib/isolate_patch.dart b/sdk/lib/_internal/vm/lib/isolate_patch.dart
index 9703179..519d188 100644
--- a/sdk/lib/_internal/vm/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/vm/lib/isolate_patch.dart
@@ -14,7 +14,6 @@
 
 import "dart:collection" show HashMap;
 import "dart:typed_data" show ByteBuffer, TypedData, Uint8List;
-import "dart:_internal" show spawnFunction;
 
 /// These are the additional parts of this patch library:
 // part "timer_impl.dart";
@@ -175,14 +174,19 @@
     return _portMap.values.map((e) => e['port']).toList();
   }
 
-  // Called from the VM to dispatch to the handler.
+  // Called from the VM to retrieve  the handler and handle a message.
   @pragma("vm:entry-point", "call")
-  static void _handleMessage(Function handler, var message) {
+  static _handleMessage(int id, var message) {
+    final handler = _portMap[id]?['handler'];
+    if (handler == null) {
+      return null;
+    }
     // TODO(floitsch): this relies on the fact that any exception aborts the
     // VM. Once we have non-fatal global exceptions we need to catch errors
     // so that we can run the immediate callbacks.
     handler(message);
     _runPendingImmediateCallback();
+    return handler;
   }
 
   // Call into the VM to close the VM maintained mappings.
@@ -355,22 +359,11 @@
       script = await Isolate.resolvePackageUri(script);
     }
 
-    const bool newIsolateGroup = false;
     final RawReceivePort readyPort =
         new RawReceivePort(null, 'Isolate.spawn ready');
     try {
-      spawnFunction(
-          readyPort.sendPort,
-          script.toString(),
-          entryPoint,
-          message,
-          paused,
-          errorsAreFatal,
-          onExit,
-          onError,
-          packageConfig,
-          newIsolateGroup,
-          debugName);
+      _spawnFunction(readyPort.sendPort, script.toString(), entryPoint, message,
+          paused, errorsAreFatal, onExit, onError, packageConfig, debugName);
       return await _spawnCommon(readyPort);
     } catch (e, st) {
       readyPort.close();
@@ -378,6 +371,18 @@
     }
   }
 
+  static void _spawnFunction(
+      SendPort readyPort,
+      String uri,
+      Function topLevelFunction,
+      var message,
+      bool paused,
+      bool errorsAreFatal,
+      SendPort? onExit,
+      SendPort? onError,
+      String? packageConfig,
+      String? debugName) native "Isolate_spawnFunction";
+
   @patch
   static Future<Isolate> spawnUri(Uri uri, List<String> args, var message,
       {bool paused = false,
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index 167f3f5..ce3815b 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -121,65 +121,75 @@
 }
 
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double sin(num radians) => _sin(radians.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double cos(num radians) => _cos(radians.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double tan(num radians) => _tan(radians.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double acos(num x) => _acos(x.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double asin(num x) => _asin(x.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double atan(num x) => _atan(x.toDouble());
 @patch
-@pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double sqrt(num x) => _sqrt(x.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double exp(num x) => _exp(x.toDouble());
 @patch
-@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
-@pragma("vm:never-inline")
+@pragma("vm:prefer-inline")
 double log(num x) => _log(x.toDouble());
 
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _atan2(double a, double b) native "Math_atan2";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _sin(double x) native "Math_sin";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _cos(double x) native "Math_cos";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _tan(double x) native "Math_tan";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _acos(double x) native "Math_acos";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _asin(double x) native "Math_asin";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _atan(double x) native "Math_atan";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _sqrt(double x) native "Math_sqrt";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _exp(double x) native "Math_exp";
+@pragma("vm:recognized", "other")
+@pragma("vm:prefer-inline")
 double _log(double x) native "Math_log";
 
 // TODO(iposva): Handle patch methods within a patch class correctly.
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 262b847..7a3c80d 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -1913,28 +1913,24 @@
   /// ```dart
   /// /// Starts listening to [input] and duplicates all non-error events.
   /// StreamSubscription<int> _onListen(Stream<int> input, bool cancelOnError) {
-  ///   late StreamSubscription<String> subscription;
-  ///   // Create controller that forwards pause, resume and cancel events.
-  ///   var controller = new StreamController<String>(
-  ///       onPause: () {
-  ///         subscription.pause();
-  ///       },
-  ///       onResume: () {
-  ///         subscription.resume();
-  ///       },
-  ///       onCancel: () => subscription.cancel(),
-  ///       sync: true); // "sync" is correct here, since events are forwarded.
-  ///
-  ///   // Listen to the provided stream.
-  ///   subscription = input.listen((data) {
-  ///     // Duplicate the data.
-  ///     controller.add(data);
-  ///     controller.add(data);
-  ///   },
-  ///       onError: controller.addError,
-  ///       onDone: controller.close,
-  ///       cancelOnError: cancelOnError);
-  ///
+  ///   // Create the result controller.
+  ///   // Using `sync` is correct here, since only async events are forwarded.
+  ///   var controller = StreamController<int>(sync: true);
+  ///   controller.onListen = () {
+  ///     var subscription = input.listen((data) {
+  ///       // Duplicate the data.
+  ///       controller.add(data);
+  ///       controller.add(data);
+  ///     },
+  ///         onError: controller.addError,
+  ///         onDone: controller.close,
+  ///         cancelOnError: cancelOnError);
+  ///     // Controller forwards pause, resume and cancel events.
+  ///     controller
+  ///       ..onPause = subscription.pause
+  ///       ..onResume = subscription.resume
+  ///       ..onCancel = subscription.cancel;
+  ///   };
   ///   // Return a new [StreamSubscription] by listening to the controller's
   ///   // stream.
   ///   return controller.stream.listen(null);
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index fe6dcf0..8d4bdf9 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -587,8 +587,8 @@
 ///
 /// This is all handled internally by the platform code and most users don't need
 /// to worry about it. However, developers of new asynchronous operations,
-/// provided by the underlying system or through native extensions, must follow
-/// the protocol to be zone compatible.
+/// provided by the underlying system, must follow the protocol to be zone
+/// compatible.
 ///
 /// For convenience, zones provide [bindCallback] (and the corresponding
 /// [bindUnaryCallback] and [bindBinaryCallback]) to make it easier to respect
diff --git a/sdk/lib/cli/cli.dart b/sdk/lib/cli/cli.dart
index 1dc8e0d..223dd68 100644
--- a/sdk/lib/cli/cli.dart
+++ b/sdk/lib/cli/cli.dart
@@ -4,6 +4,8 @@
 
 /// {@category VM}
 /// {@nodoc}
+@Deprecated(
+    "The functionality of this library is incomplete and may be removed in a later version")
 library dart.cli;
 
 import 'dart:async';
diff --git a/sdk/lib/cli/wait_for.dart b/sdk/lib/cli/wait_for.dart
index 58990c8..29e5386 100644
--- a/sdk/lib/cli/wait_for.dart
+++ b/sdk/lib/cli/wait_for.dart
@@ -111,7 +111,33 @@
  * 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")
 T waitFor<T>(Future<T> future, {Duration? timeout}) {
   late T result;
   bool futureCompleted = false;
diff --git a/sdk/lib/collection/collection.dart b/sdk/lib/collection/collection.dart
index ce3d87f..ac592bd 100644
--- a/sdk/lib/collection/collection.dart
+++ b/sdk/lib/collection/collection.dart
@@ -14,6 +14,8 @@
 import 'dart:_internal' hide Symbol;
 import 'dart:math' show Random; // Used by ListMixin.shuffle.
 
+export 'dart:_internal' show DoubleLinkedQueueEntry;
+
 part 'collections.dart';
 part 'hash_map.dart';
 part 'hash_set.dart';
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index fb48484..dcdecb4 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -53,8 +53,7 @@
   /// of [S],
   /// then the returned queue can be used as a `Queue<T>`.
   ///
-  /// Methods like [contains] and [remove]
-  /// which accept one `Object?` as argument,
+  /// Methods which accept `Object?` as argument, like [contains] and [remove],
   /// will pass the argument directly to the this queue's method
   /// without any checks.
   static Queue<T> castFrom<S, T>(Queue<S> source) => CastQueue<S, T>(source);
@@ -70,8 +69,7 @@
   /// and they must be instances of [E] as well to be accepted by
   /// this queue as well.
   ///
-  /// Methods like [contains] and [remove]
-  /// which accept one `Object?` as argument,
+  /// Methods which accept `Object?` as argument, like [contains] and [remove],
   /// will pass the argument directly to the this queue's method
   /// without any checks.
   /// That means that you can do `queueOfStrings.cast<int>().remove("a")`
@@ -121,116 +119,71 @@
   void clear();
 }
 
-class _DoubleLink<Link extends _DoubleLink<Link>> {
-  Link? _previousLink;
-  Link? _nextLink;
-
-  void _link(Link? previous, Link? next) {
-    _nextLink = next;
-    _previousLink = previous;
-    if (previous != null) previous._nextLink = this as Link;
-    if (next != null) next._previousLink = this as Link;
-  }
-
-  void _unlink() {
-    if (_previousLink != null) _previousLink!._nextLink = _nextLink;
-    if (_nextLink != null) _nextLink!._previousLink = _previousLink;
-    _nextLink = null;
-    _previousLink = null;
-  }
-}
-
-/// An entry in a doubly linked list. It contains a pointer to the next
-/// entry, the previous entry, and the boxed element.
-class DoubleLinkedQueueEntry<E> extends _DoubleLink<DoubleLinkedQueueEntry<E>> {
-  // TODO(rnystrom): This needs to be nullable because the subclass
-  // _DoubleLinkedQueueSentinel does not have an element. A cleaner solution is
-  // probably to refactor the class hierarchy so that _DoubleLinkedQueueSentinel
-  // does not inherit an element field.
-  E? _element;
-
-  /// The element in the queue.
-  E get element => _element as E;
-  set element(E element) {
-    _element = element;
-  }
-
-  DoubleLinkedQueueEntry(this._element);
-
-  /// Appends the given [e] as entry just after this entry.
-  void append(E e) {
-    DoubleLinkedQueueEntry<E>(e)._link(this, _nextLink);
-  }
-
-  /// Prepends the given [e] as entry just before this entry.
-  void prepend(E e) {
-    DoubleLinkedQueueEntry<E>(e)._link(_previousLink, this);
-  }
-
-  E remove() {
-    _unlink();
-    return element;
-  }
-
-  /// Returns the previous entry or `null` if there is none.
-  DoubleLinkedQueueEntry<E>? previousEntry() => _previousLink;
-
-  /// Returns the next entry or `null` if there is none.
-  DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink;
-}
-
-/// Interface for the link classes used by [DoubleLinkedQueue].
+/// Interface and base class for the link classes used by [DoubleLinkedQueue].
 ///
 /// Both the [_DoubleLinkedQueueElement] and [_DoubleLinkedQueueSentinel]
 /// implement this interface.
-/// The entry contains a link back to the queue, so calling `append`
-/// or `prepend` can correctly update the element count.
-abstract class _DoubleLinkedQueueEntry<E> extends DoubleLinkedQueueEntry<E> {
-  DoubleLinkedQueue<E>? _queue;
-  _DoubleLinkedQueueEntry(E? element, this._queue) : super(element);
+abstract class _DoubleLinkedQueueEntry<E> {
+  _DoubleLinkedQueueEntry<E>? _previousLink;
+  _DoubleLinkedQueueEntry<E>? _nextLink;
 
-  DoubleLinkedQueueEntry<E>? _asNonSentinelEntry();
-
-  void _append(E e) {
-    _DoubleLinkedQueueElement<E>(e, _queue)._link(this, _nextLink);
+  void _link(
+      _DoubleLinkedQueueEntry<E>? previous, _DoubleLinkedQueueEntry<E>? next) {
+    _nextLink = next;
+    _previousLink = previous;
+    previous?._nextLink = this;
+    next?._previousLink = this;
   }
 
-  void _prepend(E e) {
-    _DoubleLinkedQueueElement<E>(e, _queue)._link(_previousLink, this);
+  void _unlink() {
+    _previousLink?._nextLink = _nextLink;
+    _nextLink?._previousLink = _previousLink;
+    _previousLink = _nextLink = null;
+  }
+
+  _DoubleLinkedQueueElement<E>? _asNonSentinelEntry();
+
+  void _append(E element, DoubleLinkedQueue<E>? queue) {
+    _DoubleLinkedQueueElement<E>(element, queue)._link(this, _nextLink);
+  }
+
+  void _prepend(E element, DoubleLinkedQueue<E>? queue) {
+    _DoubleLinkedQueueElement<E>(element, queue)._link(_previousLink, this);
   }
 
   E _remove();
 
-  E get _element => super._element as E;
-
-  DoubleLinkedQueueEntry<E>? nextEntry() {
-    _DoubleLinkedQueueEntry<E> entry = _nextLink as _DoubleLinkedQueueEntry<E>;
-    return entry._asNonSentinelEntry();
-  }
-
-  DoubleLinkedQueueEntry<E>? previousEntry() {
-    _DoubleLinkedQueueEntry<E> entry =
-        _previousLink as _DoubleLinkedQueueEntry<E>;
-    return entry._asNonSentinelEntry();
-  }
+  E get element;
 }
 
-/// The actual entry type used by the [DoubleLinkedQueue].
+/// Linked list entry used by the [DoubleLinkedQueue] to hold an element.
 ///
-/// The entry contains a reference to the queue, allowing
+/// These entry objects are also exposed by [DoubleLinkedQueue.firstEntry],
+/// [DoubleLinkedQueue.lastEntry] and [DoubleLinkedQueue.forEachEntry].
+///
+/// The entry contains both the [element] (which is mutable to anyone with
+/// access to the entry object) and a reference to the queue, allowing
 /// [append]/[prepend] to update the list length.
-class _DoubleLinkedQueueElement<E> extends _DoubleLinkedQueueEntry<E> {
-  _DoubleLinkedQueueElement(E element, DoubleLinkedQueue<E>? queue)
-      : super(element, queue);
+///
+/// When an entry is removed from its queue, the [_queue] is set to `null`
+/// and will never change again. You can still use the unlinked entry
+/// to create a new list, by calling [append] and [prepend], but it won't
+/// be part of any [DoubleLinkedQueue].
+class _DoubleLinkedQueueElement<E> extends _DoubleLinkedQueueEntry<E>
+    implements DoubleLinkedQueueEntry<E> {
+  DoubleLinkedQueue<E>? _queue;
+  E element;
+
+  _DoubleLinkedQueueElement(this.element, this._queue);
 
   void append(E e) {
-    _append(e);
-    if (_queue != null) _queue!._elementCount++;
+    _append(e, _queue);
+    _queue?._elementCount++;
   }
 
   void prepend(E e) {
-    _prepend(e);
-    if (_queue != null) _queue!._elementCount++;
+    _prepend(e, _queue);
+    _queue?._elementCount++;
   }
 
   E _remove() {
@@ -240,30 +193,43 @@
   }
 
   E remove() {
-    if (_queue != null) _queue!._elementCount--;
+    _queue?._elementCount--;
     return _remove();
   }
 
-  _DoubleLinkedQueueElement<E>? _asNonSentinelEntry() {
-    return this;
-  }
+  _DoubleLinkedQueueElement<E> _asNonSentinelEntry() => this;
+
+  DoubleLinkedQueueEntry<E>? previousEntry() =>
+      _previousLink?._asNonSentinelEntry();
+
+  DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink?._asNonSentinelEntry();
 }
 
-/// A sentinel in a double linked list is used to manipulate the list
-/// at both ends.
-/// A double linked list has exactly one sentinel,
+/// A header object used to hold the two ends of a double linked queue.
+///
+/// A [DoubleLinkedQueue] has exactly one sentinel,
 /// which is the only entry when the list is constructed.
-/// Initially, a sentinel has its next and previous entry point to itself.
-/// A sentinel does not box any user element.
+///
+/// Initially, a sentinel has its next and previous entries point to itself.
+/// Its next and previous links are never `null` after creation, and
+/// the entries linked always form a circular structure with the next link
+/// pointing to the first element of the queue, and the previous link
+/// pointing to the last element of the queue, or both pointing to itself
+/// again if the queue becomes empty.
+///
+/// Implements [_DoubleLinkedQueueEntry._remove] and
+/// [_DoubleLinkedQueueEntry.element] as throwing because
+/// it makes it simple to implement members like [Queue.removeFirst]
+/// or [Queue.first] as throwing on an empty queue.
+///
+/// A sentinel does not contain any user element.
 class _DoubleLinkedQueueSentinel<E> extends _DoubleLinkedQueueEntry<E> {
-  _DoubleLinkedQueueSentinel(DoubleLinkedQueue<E> queue) : super(null, queue) {
+  _DoubleLinkedQueueSentinel() {
     _previousLink = this;
     _nextLink = this;
   }
 
-  DoubleLinkedQueueEntry<E>? _asNonSentinelEntry() {
-    return null;
-  }
+  Null _asNonSentinelEntry() => null;
 
   /// Hit by, e.g., [DoubleLinkedQueue.removeFirst] if the queue is empty.
   E _remove() {
@@ -271,7 +237,7 @@
   }
 
   /// Hit by, e.g., [DoubleLinkedQueue.first] if the queue is empty.
-  E get _element {
+  E get element {
     throw IterableElementError.noElement();
   }
 }
@@ -280,8 +246,8 @@
 ///
 /// Allows constant time add, remove-at-ends and peek operations.
 class DoubleLinkedQueue<E> extends Iterable<E> implements Queue<E> {
-  late _DoubleLinkedQueueSentinel<E> _sentinel =
-      _DoubleLinkedQueueSentinel<E>(this);
+  final _DoubleLinkedQueueSentinel<E> _sentinel =
+      _DoubleLinkedQueueSentinel<E>();
 
   int _elementCount = 0;
 
@@ -320,49 +286,48 @@
   int get length => _elementCount;
 
   void addLast(E value) {
-    _sentinel._prepend(value);
+    _sentinel._prepend(value, this);
     _elementCount++;
   }
 
   void addFirst(E value) {
-    _sentinel._append(value);
+    _sentinel._append(value, this);
     _elementCount++;
   }
 
   void add(E value) {
-    _sentinel._prepend(value);
+    _sentinel._prepend(value, this);
     _elementCount++;
   }
 
   void addAll(Iterable<E> iterable) {
     for (final E value in iterable) {
-      _sentinel._prepend(value);
+      _sentinel._prepend(value, this);
       _elementCount++;
     }
   }
 
   E removeLast() {
-    _DoubleLinkedQueueEntry<E> lastEntry =
-        _sentinel._previousLink as _DoubleLinkedQueueEntry<E>;
-    E result = lastEntry._remove();
+    // Hits sentinel's `_remove` if queue is empty.
+    E result = _sentinel._previousLink!._remove();
     _elementCount--;
     return result;
   }
 
   E removeFirst() {
-    _DoubleLinkedQueueEntry<E> firstEntry =
-        _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
-    E result = firstEntry._remove();
+    // Hits sentinel's `_remove` if queue is empty.
+    E result = _sentinel._nextLink!._remove();
     _elementCount--;
     return result;
   }
 
   bool remove(Object? o) {
-    _DoubleLinkedQueueEntry<E> entry =
-        _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
-    while (!identical(entry, _sentinel)) {
-      bool equals = (entry._element == o);
-      if (!identical(this, entry._queue)) {
+    _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
+    while (true) {
+      var elementEntry = entry._asNonSentinelEntry();
+      if (elementEntry == null) return false;
+      bool equals = (elementEntry.element == o);
+      if (!identical(this, elementEntry._queue)) {
         // Entry must still be in the queue.
         throw ConcurrentModificationError(this);
       }
@@ -371,26 +336,26 @@
         _elementCount--;
         return true;
       }
-      entry = entry._nextLink as _DoubleLinkedQueueEntry<E>;
+      entry = entry._nextLink!;
     }
-    return false;
   }
 
   void _filter(bool test(E element), bool removeMatching) {
-    _DoubleLinkedQueueEntry<E> entry =
-        _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
-    while (!identical(entry, _sentinel)) {
-      bool matches = test(entry._element);
-      if (!identical(this, entry._queue)) {
+    _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
+    while (true) {
+      var elementEntry = entry._asNonSentinelEntry();
+      if (elementEntry == null) return;
+      bool matches = test(elementEntry.element);
+      if (!identical(this, elementEntry._queue)) {
         // Entry must still be in the queue.
         throw ConcurrentModificationError(this);
       }
-      DoubleLinkedQueueEntry<E> next = entry._nextLink!; // Cannot be null.
+      var next = entry._nextLink!; // Cannot be null while entry is in queue.
       if (identical(removeMatching, matches)) {
-        entry._remove();
+        elementEntry._remove();
         _elementCount--;
       }
-      entry = next as _DoubleLinkedQueueEntry<E>;
+      entry = next;
     }
   }
 
@@ -402,22 +367,17 @@
     _filter(test, false);
   }
 
-  E get first {
-    DoubleLinkedQueueEntry<E> firstEntry = _sentinel._nextLink!;
-    return firstEntry._element as E;
-  }
+  // Hits sentinel's `get element` if no element in queue.
+  E get first => _sentinel._nextLink!.element;
 
-  E get last {
-    DoubleLinkedQueueEntry<E> lastEntry = _sentinel._previousLink!;
-    return lastEntry._element as E;
-  }
+  // Hits sentinel's `get element` if no element in queue.
+  E get last => _sentinel._previousLink!.element;
 
   E get single {
     // Note that this throws correctly if the queue is empty
     // because reading the element of the sentinel throws.
     if (identical(_sentinel._nextLink, _sentinel._previousLink)) {
-      DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
-      return entry._element as E;
+      return _sentinel._nextLink!.element;
     }
     throw IterableElementError.tooMany();
   }
@@ -432,9 +392,8 @@
   /// The entry objects can also be accessed using [lastEntry],
   /// and they can be iterated using [DoubleLinkedQueueEntry.nextEntry] and
   /// [DoubleLinkedQueueEntry.previousEntry].
-  DoubleLinkedQueueEntry<E>? firstEntry() {
-    return _sentinel.nextEntry();
-  }
+  DoubleLinkedQueueEntry<E>? firstEntry() =>
+      _sentinel._nextLink!._asNonSentinelEntry();
 
   /// The entry object of the last element in the queue.
   ///
@@ -446,15 +405,22 @@
   /// The entry objects can also be accessed using [firstEntry],
   /// and they can be iterated using [DoubleLinkedQueueEntry.nextEntry] and
   /// [DoubleLinkedQueueEntry.previousEntry].
-  DoubleLinkedQueueEntry<E>? lastEntry() {
-    return _sentinel.previousEntry();
-  }
+  DoubleLinkedQueueEntry<E>? lastEntry() =>
+      _sentinel._previousLink!._asNonSentinelEntry();
 
-  bool get isEmpty {
-    return (identical(_sentinel._nextLink, _sentinel));
-  }
+  bool get isEmpty => identical(_sentinel._nextLink, _sentinel);
 
   void clear() {
+    var cursor = _sentinel._nextLink!;
+    while (true) {
+      var entry = cursor._asNonSentinelEntry();
+      if (entry == null) break;
+      cursor = cursor._nextLink!;
+      entry
+        .._nextLink = null
+        .._previousLink = null
+        .._queue = null;
+    }
     _sentinel._nextLink = _sentinel;
     _sentinel._previousLink = _sentinel;
     _elementCount = 0;
@@ -477,57 +443,59 @@
   /// inserted after the current element before it is removed will not be
   /// visited by the iteration.
   void forEachEntry(void action(DoubleLinkedQueueEntry<E> element)) {
-    _DoubleLinkedQueueEntry<E> entry =
-        _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
-    while (!identical(entry, _sentinel)) {
-      _DoubleLinkedQueueElement<E> element =
-          entry as _DoubleLinkedQueueElement<E>;
-      _DoubleLinkedQueueEntry<E> next =
-          element._nextLink as _DoubleLinkedQueueEntry<E>;
-      // Remember both entry and entry._nextLink.
-      // If someone calls `element.remove()` we continue from `next`.
-      // Otherwise we use the value of entry._nextLink which may have been
-      // updated.
-      action(element);
-      if (identical(this, entry._queue)) {
-        next = entry._nextLink as _DoubleLinkedQueueEntry<E>;
-      } else if (!identical(this, next._queue)) {
+    var cursor = _sentinel._nextLink!;
+    while (true) {
+      var element = cursor._asNonSentinelEntry();
+      if (element == null) break;
+      if (!identical(element._queue, this)) {
         throw ConcurrentModificationError(this);
       }
-      entry = next;
+      cursor = cursor._nextLink!;
+      // Remember both element and element._nextLink (as cursor).
+      // If someone calls `element.remove()` we continue from `next`.
+      // Otherwise we use the value of element._nextLink which may have been
+      // updated.
+      action(element);
+      if (identical(this, element._queue)) {
+        cursor = element._nextLink!;
+      }
     }
   }
 
   _DoubleLinkedQueueIterator<E> get iterator {
-    return _DoubleLinkedQueueIterator<E>(_sentinel);
+    return _DoubleLinkedQueueIterator<E>(this);
   }
 
   String toString() => IterableBase.iterableToFullString(this, '{', '}');
 }
 
 class _DoubleLinkedQueueIterator<E> implements Iterator<E> {
-  _DoubleLinkedQueueSentinel<E>? _sentinel;
-  DoubleLinkedQueueEntry<E>? _nextEntry;
+  /// Queue being iterated. Used for concurrent modification checks.
+  DoubleLinkedQueue<E>? _queue;
+
+  /// Next entry to visit. Set to null when hitting the sentinel.
+  _DoubleLinkedQueueEntry<E>? _nextEntry;
+
+  /// Current element value, when valid.
   E? _current;
 
-  _DoubleLinkedQueueIterator(_DoubleLinkedQueueSentinel<E> sentinel)
-      : _sentinel = sentinel,
-        _nextEntry = sentinel._nextLink;
+  _DoubleLinkedQueueIterator(DoubleLinkedQueue<E> this._queue)
+      : _nextEntry = _queue._sentinel._nextLink;
 
   bool moveNext() {
-    if (identical(_nextEntry, _sentinel)) {
+    var nextElement = _nextEntry?._asNonSentinelEntry();
+    if (nextElement == null) {
+      // Clear everything to not unnecessarily keep values alive.
       _current = null;
       _nextEntry = null;
-      _sentinel = null;
+      _queue = null;
       return false;
     }
-    _DoubleLinkedQueueEntry<E> elementEntry =
-        _nextEntry as _DoubleLinkedQueueEntry<E>;
-    if (!identical(_sentinel!._queue, elementEntry._queue)) {
-      throw ConcurrentModificationError(_sentinel!._queue);
+    if (!identical(_queue, nextElement._queue)) {
+      throw ConcurrentModificationError(_queue);
     }
-    _current = elementEntry._element;
-    _nextEntry = elementEntry._nextLink;
+    _current = nextElement.element;
+    _nextEntry = nextElement._nextLink;
     return true;
   }
 
diff --git a/sdk/lib/core/bool.dart b/sdk/lib/core/bool.dart
index 5f4d6d1..491ce16 100644
--- a/sdk/lib/core/bool.dart
+++ b/sdk/lib/core/bool.dart
@@ -41,6 +41,11 @@
   /// must be consistent across all calls to [String.fromEnvironment],
   /// [int.fromEnvironment], `bool.fromEnvironment` and [bool.hasEnvironment]
   /// in a single program.
+  ///
+  /// This constructor is only guaranteed to work when invoked as `const`.
+  /// It may work as a non-constant invocation on some platforms which
+  /// have access to compiler options at run-time, but most ahead-of-time
+  /// compiled platforms will not have this information.
   // The .fromEnvironment() constructors are special in that we do not want
   // users to call them using "new". We prohibit that by giving them bodies
   // that throw, even though const constructors are not allowed to have bodies.
@@ -76,6 +81,11 @@
   /// must be consistent across all calls to [String.fromEnvironment],
   /// [int.fromEnvironment], [bool.fromEnvironment] and `bool.hasEnvironment`
   /// in a single program.
+  ///
+  /// This constructor is only guaranteed to work when invoked as `const`.
+  /// It may work as a non-constant invocation on some platforms which
+  /// have access to compiler options at run-time, but most ahead-of-time
+  /// compiled platforms will not have this information.
   // The .hasEnvironment() constructor is special in that we do not want
   // users to call them using "new". We prohibit that by giving them bodies
   // that throw, even though const constructors are not allowed to have bodies.
diff --git a/sdk/lib/core/date_time.dart b/sdk/lib/core/date_time.dart
index ab353ba..a3377cd 100644
--- a/sdk/lib/core/date_time.dart
+++ b/sdk/lib/core/date_time.dart
@@ -432,8 +432,8 @@
   /// assert(later.isAfter(now.toUtc()));
   /// assert(later.toUtc().isAfter(now));
   ///
-  /// assert(!now.toUtc().isBefore(now));
-  /// assert(!now.isBefore(now.toUtc()));
+  /// assert(!now.toUtc().isAfter(now));
+  /// assert(!now.isAfter(now.toUtc()));
   /// ```
   external bool isAfter(DateTime other);
 
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart
index 3e5bb4b..9bf2671 100644
--- a/sdk/lib/core/int.dart
+++ b/sdk/lib/core/int.dart
@@ -37,6 +37,11 @@
   /// must be consistent across all calls to [String.fromEnvironment],
   /// `int.fromEnvironment`, [bool.fromEnvironment] and [bool.hasEnvironment]
   /// in a single program.
+  ///
+  /// This constructor is only guaranteed to work when invoked as `const`.
+  /// It may work as a non-constant invocation on some platforms which
+  /// have access to compiler options at run-time, but most ahead-of-time
+  /// compiled platforms will not have this information.
   // The .fromEnvironment() constructors are special in that we do not want
   // users to call them using "new". We prohibit that by giving them bodies
   // that throw, even though const constructors are not allowed to have bodies.
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 6c17632..8ac4701 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -137,7 +137,7 @@
   /// ```dart
   /// List<dynamic> dynList = ...some JSON value...;
   /// List<Map<String, dynamic>> fooList =
-  ///     List.from(dynList.where((x) => x is Map && map["kind"] == "foo"));
+  ///     List.from(dynList.where((x) => x is Map && x["kind"] == "foo"));
   /// ```
   ///
   /// This constructor creates a growable list when [growable] is true;
@@ -188,8 +188,7 @@
   /// of [S],
   /// then the returned list can be used as a `List<T>`.
   ///
-  /// Methods like [contains] and [remove]
-  /// which accept `Object?` as argument
+  /// Methods which accept `Object?` as argument, like [contains] and [remove],
   /// will pass the argument directly to the this list's method
   /// without any checks.
   static List<T> castFrom<S, T>(List<S> source) => CastList<S, T>(source);
@@ -267,8 +266,7 @@
   /// and they must be instances of [E] as well to be accepted by
   /// this list as well.
   ///
-  /// Methods like [contains] and [remove]
-  /// which accept `Object?` as argument
+  /// Methods which accept `Object?` as argument, like [contains] and [remove],
   /// will pass the argument directly to the this list's method
   /// without any checks.
   /// That means that you can do `listOfStrings.cast<int>().remove("a")`
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index f6d36b1..164b6f2 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -164,8 +164,8 @@
   /// and if all entries added to the returned map have [K] keys and [V]] values,
   /// then the returned map can be used as a `Map<K2, V2>`.
   ///
-  /// Methods like [containsKey], [remove] and [operator[]]
-  /// which accept `Object?` as argument
+  /// Methods which accept `Object?` as argument,
+  /// like [containsKey], [remove] and [operator []],
   /// will pass the argument directly to the this map's method
   /// without any checks.
   static Map<K2, V2> castFrom<K, V, K2, V2>(Map<K, V> source) =>
@@ -199,8 +199,8 @@
   /// Entries added to the map must be valid for both a `Map<K, V>` and a
   /// `Map<RK, RV>`.
   ///
-  /// Methods like [containsKey], [remove] and [operator[]]
-  /// which accept `Object?` as argument
+  /// Methods which accept `Object?` as argument,
+  /// like [containsKey], [remove] and [operator []],
   /// will pass the argument directly to the this map's method
   /// without any checks.
   /// That means that you can do `mapWithStringKeys.cast<int,int>().remove("a")`
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
index b19ed8e..d94a58f 100644
--- a/sdk/lib/core/set.dart
+++ b/sdk/lib/core/set.dart
@@ -107,8 +107,8 @@
   /// of [S],
   /// then the returned set can be used as a `Set<T>`.
   ///
-  /// Methods like [contains], [remove] and [removeAll]
-  /// which accept one or more `Object?` as argument,
+  /// Methods which accept one or more `Object?` as argument,
+  /// like [contains], [remove] and [removeAll],
   /// will pass the argument directly to the this set's method
   /// without any checks.
   static Set<T> castFrom<S, T>(Set<S> source, {Set<R> Function<R>()? newSet}) =>
@@ -125,8 +125,8 @@
   /// and they must be instances of [E] as well to be accepted by
   /// this set as well.
   ///
-  /// Methods like [contains], [remove] and [removeAll]
-  /// which accept one or more `Object?` as argument,
+  /// Methods which accept one or more `Object?` as argument,
+  /// like [contains], [remove] and [removeAll],
   /// will pass the argument directly to the this set's method
   /// without any checks.
   /// That means that you can do `setOfStrings.cast<int>().remove("a")`
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index 7c31513..d856ac2 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -151,6 +151,11 @@
   /// must be consistent across all calls to `String.fromEnvironment`,
   /// [int.fromEnvironment], [bool.fromEnvironment] and [bool.hasEnvironment]
   /// in a single program.
+  ///
+  /// This constructor is only guaranteed to work when invoked as `const`.
+  /// It may work as a non-constant invocation on some platforms which
+  /// have access to compiler options at run-time, but most ahead-of-time
+  /// compiled platforms will not have this information.
   // The .fromEnvironment() constructors are special in that we do not want
   // users to call them using "new". We prohibit that by giving them bodies
   // that throw, even though const constructors are not allowed to have bodies.
@@ -314,6 +319,9 @@
   /// string.substring(1);    // 'artlang'
   /// string.substring(1, 4); // 'art'
   /// ```
+  ///
+  /// Both [start] and [end] must be non-negative and no greater than [length], and
+  /// [end], if provided, must be greater than or equal to [start].
   String substring(int start, [int? end]);
 
   /// The string without any leading and trailing whitespace.
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 15695c1..e11e430 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -33,6 +33,7 @@
 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
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -50,7 +51,6 @@
         JSName,
         Native,
         Returns,
-        ForceInline,
         findDispatchTagForInterceptorClass,
         setNativeSubclassDispatchRecord,
         makeLeafDispatchRecord,
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 0e4c898..71f02d9 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -948,3 +948,66 @@
   @Deprecated("Use networkConnectTimeoutError instead")
   static const int NETWORK_CONNECT_TIMEOUT_ERROR = networkConnectTimeoutError;
 }
+
+// Class moved here from dart:collection
+// to allow another, more important, class to implement the interface
+// without having to match the private members.
+
+/// An entry in a doubly linked list.
+///
+/// Such an entry contains an element and a link to the previous or next
+/// entries, if any.
+//
+// This class should have been abstract, but originally wasn't.
+// It's not used itself to interact with the double linked queue class,
+// which uses the `_DoubleLinkedQueueEntry` class and subclasses instead.
+// It's only used as an interface for the
+// `DoubleLinkedQueue.forEach`, `DoubleLinkedQueue.firstEntry` and
+// `DoubleLinkedQueue.lastEntry` members.
+// Still, someone might have based their own double-linked list on this
+// class, so we keep it functional.
+class DoubleLinkedQueueEntry<E> {
+  DoubleLinkedQueueEntry<E>? _previousLink;
+  DoubleLinkedQueueEntry<E>? _nextLink;
+
+  /// The element of the entry in the queue.
+  E element;
+
+  /// Creates a new entry with the given [element].
+  DoubleLinkedQueueEntry(this.element);
+
+  void _link(
+      DoubleLinkedQueueEntry<E>? previous, DoubleLinkedQueueEntry<E>? next) {
+    _nextLink = next;
+    _previousLink = previous;
+    previous?._nextLink = this;
+    next?._previousLink = this;
+  }
+
+  /// Appends the given element [e] as entry just after this entry.
+  void append(E e) {
+    DoubleLinkedQueueEntry<E>(e)._link(this, _nextLink);
+  }
+
+  /// Prepends the given [e] as entry just before this entry.
+  void prepend(E e) {
+    DoubleLinkedQueueEntry<E>(e)._link(_previousLink, this);
+  }
+
+  /// Removes this entry from any chain of entries it is part of.
+  ///
+  /// Returns its element value.
+  E remove() {
+    _previousLink?._nextLink = _nextLink;
+    _nextLink?._previousLink = _previousLink;
+    _nextLink = null;
+    _previousLink = null;
+    return element;
+  }
+
+  /// The previous entry, or `null` if there is none.
+  DoubleLinkedQueueEntry<E>? previousEntry() => _previousLink;
+
+  /// The next entry, or `null` if there is none.
+  DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink;
+}
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index a595503..c1cf9c2 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -235,6 +235,9 @@
       "web_sql": {
         "uri": "web_sql/dart2js/web_sql_dart2js.dart"
       },
+      "_dart2js_runtime_metrics": {
+        "uri": "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
+      },
       "_internal": {
         "uri": "internal/internal.dart",
         "patches": "_internal/js_runtime/lib/internal_patch.dart"
@@ -338,6 +341,9 @@
         "uri": "internal/internal.dart",
         "patches": "_internal/js_runtime/lib/internal_patch.dart"
       },
+      "_dart2js_runtime_metrics": {
+        "uri": "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
+      },
       "_js_helper": {
         "uri": "_internal/js_runtime/lib/js_helper.dart"
       },
@@ -477,4 +483,4 @@
       }
     }
   }
-}
+}
\ No newline at end of file
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index 9a1a1d8..1b92562 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -233,6 +233,9 @@
     web_sql:
       uri: "web_sql/dart2js/web_sql_dart2js.dart"
 
+    _dart2js_runtime_metrics:
+      uri: "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
+
     _internal:
       uri: "internal/internal.dart"
       patches: "_internal/js_runtime/lib/internal_patch.dart"
@@ -334,6 +337,9 @@
       uri: "internal/internal.dart"
       patches: "_internal/js_runtime/lib/internal_patch.dart"
 
+    _dart2js_runtime_metrics:
+      uri: "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
+
     _js_helper:
       uri: "_internal/js_runtime/lib/js_helper.dart"
 
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 0d67353..60c3a7a 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -2,8 +2,18 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Skip # https://github.com/dart-lang/co19/issues/1137
+Language/Libraries_and_Scripts/Scripts/top_level_main_t06: Skip # https://github.com/dart-lang/co19/issues/1137
+LibTest/io/HttpClient/findProxy_A01_t01: Skip # https://github.com/dart-lang/co19/issues/1129
+LibTest/io/HttpClient/findProxy_A01_t02: Skip # https://github.com/dart-lang/co19/issues/1129
+LibTest/io/HttpClient/findProxy_A02_t01: Skip # https://github.com/dart-lang/co19/issues/1129
+LibTest/io/HttpClient/findProxy_A02_t02: Skip # https://github.com/dart-lang/co19/issues/1129
 LibTest/io/RawDatagramSocket/*: Skip # https://github.com/dart-lang/co19/issues/195
 
 [ $compiler == dart2analyzer ]
 LanguageFeatures/nnbd/static/strong/*: SkipByDesign # Strong mode tests should not be run with analyzer
 LanguageFeatures/nnbd/static/weak/*: SkipByDesign # Weak mode tests should not be run with analyzer
+
+[ $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/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 0097562..b16c875 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -59,22 +59,24 @@
 LibTest/io/*: SkipByDesign # dart:io not supported.
 LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
 LibTest/mirrors/*: SkipByDesign # dart:mirrors is not supported
-LibTest/typed_data/ByteBuffer/*: SkipByDesign # not supported on the web
-LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # Uint64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # Uint64 accessor not supported by dart2js
-LibTest/typed_data/Int32x4/operator_OR_A01_t01: SkipByDesign # Bitwise operations in JS are unsigned.
-LibTest/typed_data/Int32x4List/join_A01_t01: SkipByDesign # Different string represrntation on VM and in JS
-LibTest/typed_data/Int32x4List/join_A01_t02: SkipByDesign # Different string represrntation on VM and in JS
+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
+LibTest/typed_data/ByteBuffer/asUint64List_A01_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A02_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A03_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
 LibTest/typed_data/Int64List/*: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/Uint64List/*: SkipByDesign # Uint64List not supported on the web
 
diff --git a/tests/co19_2/co19_2-co19.status b/tests/co19_2/co19_2-co19.status
index 3d7b0c2..ff5abb6 100644
--- a/tests/co19_2/co19_2-co19.status
+++ b/tests/co19_2/co19_2-co19.status
@@ -8,3 +8,9 @@
 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
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Skip # https://github.com/dart-lang/co19/issues/1137
+Language/Libraries_and_Scripts/Scripts/top_level_main_t06: Skip # https://github.com/dart-lang/co19/issues/1137
+
+[ $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 5c38055..177ae2a 100644
--- a/tests/co19_2/co19_2-dart2js.status
+++ b/tests/co19_2/co19_2-dart2js.status
@@ -14,6 +14,26 @@
 Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523.
 LibTest/io/*: SkipByDesign # dart:io not supported.
 LibTest/isolate/*: SkipByDesign # dart:isolate 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
+LibTest/typed_data/ByteBuffer/asUint64List_A01_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A02_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A03_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/Int64List/*: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/Uint64List/*: SkipByDesign # Uint64List not supported on the web
 
 [ $compiler == dart2js && $runtime == d8 ]
 LibTest/html/*: SkipByDesign # d8 is not a browser
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 97150c2..ecde5a5 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -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.
 
+bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+
 [ $compiler == dartdevk ]
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
 
diff --git a/tests/corelib/queue_first_test.dart b/tests/corelib/queue_first_test.dart
deleted file mode 100644
index d0baf99..0000000
--- a/tests/corelib/queue_first_test.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// 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.
-
-library queue.first.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1..add(11)..add(12)..add(13);
-  Queue queue2 = new Queue();
-
-  Expect.equals(11, queue1.first);
-  Expect.throwsStateError(() => queue2.first);
-}
diff --git a/tests/corelib/queue_last_test.dart b/tests/corelib/queue_last_test.dart
deleted file mode 100644
index 3ea2eff..0000000
--- a/tests/corelib/queue_last_test.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// 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.
-
-library queue.last.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1..add(11)..add(12)..add(13);
-  Queue queue2 = new Queue();
-
-  Expect.equals(13, queue1.last);
-  Expect.throwsStateError(() => queue2.last);
-}
diff --git a/tests/corelib/queue_single_test.dart b/tests/corelib/queue_single_test.dart
deleted file mode 100644
index 1ef6b59..0000000
--- a/tests/corelib/queue_single_test.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.
-
-library queue.single.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1.add(42);
-  Queue queue2 = new Queue();
-  queue2..add(11)..add(12)..add(13);
-  Queue queue3 = new Queue();
-
-  Expect.equals(42, queue1.single);
-  Expect.throwsStateError(() => queue2.single);
-  Expect.throwsStateError(() => queue3.single);
-}
diff --git a/tests/corelib/queue_test.dart b/tests/corelib/queue_test.dart
deleted file mode 100644
index a34038e..0000000
--- a/tests/corelib/queue_test.dart
+++ /dev/null
@@ -1,484 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for 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 queue.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection';
-
-abstract class QueueTest {
-  Queue newQueue();
-  Queue newQueueFrom(Iterable iterable);
-
-  void testMain() {
-    Queue queue = newQueue();
-    checkQueue(queue, 0, 0);
-
-    queue.addFirst(1);
-    checkQueue(queue, 1, 1);
-
-    queue.addLast(10);
-    checkQueue(queue, 2, 11);
-
-    Expect.equals(10, queue.removeLast());
-    checkQueue(queue, 1, 1);
-
-    queue.addLast(10);
-    Expect.equals(1, queue.removeFirst());
-    checkQueue(queue, 1, 10);
-
-    queue.addFirst(1);
-    queue.addLast(100);
-    queue.addLast(1000);
-    Expect.equals(1000, queue.removeLast());
-    queue.addLast(1000);
-    checkQueue(queue, 4, 1111);
-
-    queue.removeFirst();
-    checkQueue(queue, 3, 1110);
-
-    dynamic mapTest(dynamic value) {
-      return (value as int) ~/ 10;
-    }
-
-    bool is10(dynamic value) {
-      return (value == 10);
-    }
-
-    Queue mapped = newQueueFrom(queue.map(mapTest));
-    checkQueue(mapped, 3, 111);
-    checkQueue(queue, 3, 1110);
-    Expect.equals(1, mapped.removeFirst());
-    Expect.equals(100, mapped.removeLast());
-    Expect.equals(10, mapped.removeFirst());
-
-    Queue other = newQueueFrom(queue.where(is10));
-    checkQueue(other, 1, 10);
-
-    Expect.equals(true, queue.any(is10));
-
-    bool isInstanceOfInt(dynamic value) {
-      return (value is int);
-    }
-
-    Expect.equals(true, queue.every(isInstanceOfInt));
-
-    Expect.equals(false, queue.every(is10));
-
-    bool is1(dynamic value) {
-      return (value == 1);
-    }
-
-    Expect.equals(false, queue.any(is1));
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-
-    var exception = null;
-    try {
-      queue.removeFirst();
-    } on StateError catch (e) {
-      exception = e;
-    }
-    Expect.equals(true, exception != null);
-    Expect.equals(0, queue.length);
-
-    exception = null;
-    try {
-      queue.removeLast();
-    } on StateError catch (e) {
-      exception = e;
-    }
-    Expect.equals(true, exception != null);
-    Expect.equals(0, queue.length);
-
-    queue.addFirst(1);
-    queue.addFirst(2);
-    Expect.equals(2, queue.first);
-    Expect.equals(1, queue.last);
-
-    queue.addLast(3);
-    Expect.equals(3, queue.last);
-    bool isGreaterThanOne(dynamic value) {
-      return ((value as int) > 1);
-    }
-
-    other = newQueueFrom(queue.where(isGreaterThanOne));
-    checkQueue(other, 2, 5);
-
-    // Cycle through values without ever having large element count.
-    queue = newQueue();
-    queue.add(0);
-    for (int i = 0; i < 255; i++) {
-      queue.add(i + 1);
-      Expect.equals(i, queue.removeFirst());
-    }
-    Expect.equals(255, queue.removeFirst());
-    Expect.isTrue(queue.isEmpty);
-
-    testAddAll();
-    testLengthChanges();
-    testLarge();
-    testFromListToList();
-  }
-
-  void checkQueue(Queue queue, int expectedSize, int expectedSum) {
-    testLength(expectedSize, queue);
-    int sum = 0;
-    void sumElements(dynamic value) {
-      sum += value as int;
-    }
-
-    queue.forEach(sumElements);
-    Expect.equals(expectedSum, sum);
-  }
-
-  testLength(int length, Queue queue) {
-    Expect.equals(length, queue.length);
-    ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
-    ((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
-  }
-
-  void testAddAll() {
-    Set<int> set = new Set<int>.from([1, 2, 4]);
-    Expect.equals(3, set.length);
-
-    Queue queue1 = newQueueFrom(set);
-    Queue queue2 = newQueue();
-    Queue queue3 = newQueue();
-    testLength(3, queue1);
-    testLength(0, queue2);
-    testLength(0, queue3);
-
-    queue2.addAll(set);
-    testLength(3, queue2);
-
-    queue3.addAll(queue1);
-    testLength(3, queue3);
-
-    int sum = 0;
-    void f(dynamic e) {
-      sum += (e as int);
-    }
-
-    set.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue1.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue2.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue3.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    set = new Set<int>.from([]);
-    queue1 = newQueueFrom(set);
-    queue2 = newQueue();
-    queue3 = newQueue();
-
-    queue2.addAll(set);
-    queue3.addAll(queue1);
-
-    Expect.equals(0, set.length);
-    Expect.equals(0, queue1.length);
-    Expect.equals(0, queue2.length);
-    Expect.equals(0, queue3.length);
-  }
-
-  void testLengthChanges() {
-    // Test that the length property is updated properly by
-    // modifications;
-    Queue queue = newQueue();
-    testLength(0, queue);
-
-    for (int i = 1; i <= 10; i++) {
-      queue.add(i);
-      testLength(i, queue);
-    }
-
-    for (int i = 1; i <= 10; i++) {
-      queue.addFirst(11 - i);
-      testLength(10 + i, queue);
-    }
-
-    for (int i = 1; i <= 10; i++) {
-      queue.addLast(i);
-      testLength(20 + i, queue);
-    }
-
-    queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
-    testLength(40, queue);
-
-    for (int i = 1; i <= 5; i++) {
-      Expect.equals(i, queue.removeFirst());
-      testLength(40 - i, queue);
-    }
-
-    for (int i = 1; i <= 5; i++) {
-      Expect.equals(11 - i, queue.removeLast());
-      testLength(35 - i, queue);
-    }
-
-    Expect.isTrue(queue.remove(10));
-    testLength(29, queue);
-    Expect.isFalse(queue.remove(999));
-    testLength(29, queue);
-
-    queue.removeWhere((x) => x == 7);
-    testLength(26, queue);
-
-    queue.retainWhere((x) => x != 3);
-    testLength(23, queue);
-
-    Expect.listEquals(
-        [6, 8, 9, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5],
-        queue.toList());
-
-    // Regression test: http://dartbug.com/16270
-    // This should do nothing, and should not throw.
-    Queue emptyQueue = newQueue();
-    emptyQueue.remove(0);
-  }
-
-  void testLarge() {
-    int N = 10000;
-    Set set = new Set();
-
-    Queue queue = newQueue();
-    Expect.isTrue(queue.isEmpty);
-
-    for (int i = 0; i < N; i++) {
-      queue.add(i);
-      set.add(i);
-    }
-    Expect.equals(N, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    Expect.equals(0, queue.elementAt(0));
-    Expect.equals(N - 1, queue.elementAt(N - 1));
-    Expect.throws(() {
-      queue.elementAt(-1);
-    });
-    Expect.throws(() {
-      queue.elementAt(N);
-    });
-
-    Iterable skip1 = queue.skip(1);
-    Iterable take1 = queue.take(1);
-    Iterable mapped = queue.map((e) => -e);
-
-    for (int i = 0; i < 500; i++) {
-      Expect.equals(i, take1.first);
-      Expect.equals(i, queue.first);
-      Expect.equals(-i, mapped.first);
-      Expect.equals(i + 1, skip1.first);
-      Expect.equals(i, queue.removeFirst());
-      Expect.equals(i + 1, take1.first);
-      Expect.equals(-i - 1, mapped.first);
-      Expect.equals(N - 1 - i, queue.last);
-      Expect.equals(N - 1 - i, queue.removeLast());
-    }
-    Expect.equals(N - 1000, queue.length);
-
-    Expect.isTrue(queue.remove(N >> 1));
-    Expect.equals(N - 1001, queue.length);
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-    Expect.isTrue(queue.isEmpty);
-
-    queue.addAll(set);
-    Expect.equals(N, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    // Iterate.
-    for (var element in queue) {
-      Expect.isTrue(set.contains(element));
-    }
-
-    queue.forEach((element) {
-      Expect.isTrue(set.contains(element));
-    });
-
-    queue.addAll(set);
-    Expect.equals(N * 2, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-    Expect.isTrue(queue.isEmpty);
-  }
-
-  void testFromListToList() {
-    const int N = 256;
-    List list = [];
-    for (int i = 0; i < N; i++) {
-      Queue queue = newQueueFrom(list);
-
-      Expect.equals(list.length, queue.length);
-      List to = queue.toList();
-      Expect.listEquals(list, to);
-
-      queue.add(i);
-      list.add(i);
-      Expect.equals(list.length, queue.length);
-      to = queue.toList();
-      Expect.listEquals(list, to);
-    }
-  }
-}
-
-class ListQueueTest extends QueueTest {
-  Queue newQueue() => new ListQueue();
-  Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements);
-
-  void testMain() {
-    super.testMain();
-    trickyTest();
-  }
-
-  void trickyTest() {
-    // Test behavior around the know growing capacities of a ListQueue.
-    Queue q = new ListQueue();
-
-    for (int i = 0; i < 255; i++) {
-      q.add(i);
-    }
-    for (int i = 0; i < 128; i++) {
-      Expect.equals(i, q.removeFirst());
-    }
-    q.add(255);
-    for (int i = 0; i < 127; i++) {
-      q.add(i);
-    }
-
-    Expect.equals(255, q.length);
-
-    // Remove element at end of internal buffer.
-    q.removeWhere((v) => v == 255);
-    // Remove element at beginning of internal buffer.
-    q.removeWhere((v) => v == 0);
-    // Remove element at both ends of internal buffer.
-    q.removeWhere((v) => v == 254 || v == 1);
-
-    Expect.equals(251, q.length);
-
-    Iterable i255 = new Iterable.generate(255, (x) => x);
-
-    q = new ListQueue();
-    q.addAll(i255);
-    Expect.listEquals(i255.toList(), q.toList());
-
-    q = new ListQueue();
-    q.addAll(i255.toList());
-    Expect.listEquals(i255.toList(), q.toList());
-
-    q = new ListQueue.from(i255);
-    for (int i = 0; i < 128; i++) q.removeFirst();
-    q.add(256);
-    q.add(0);
-    q.addAll(i255.toList());
-    Expect.equals(129 + 255, q.length);
-
-    // Test addAll that requires the queue to grow.
-    q = new ListQueue();
-    q.addAll(i255.take(35));
-    q.addAll(i255.skip(35).take(96));
-    q.addAll(i255.skip(35 + 96));
-    Expect.listEquals(i255.toList(), q.toList());
-  }
-}
-
-class DoubleLinkedQueueTest extends QueueTest {
-  Queue newQueue() => new DoubleLinkedQueue();
-  Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements);
-
-  void testMain() {
-    super.testMain();
-    testQueueElements();
-  }
-
-  void testQueueElements() {
-    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]);
-    DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
-    queue2.addAll(queue1);
-
-    Expect.equals(queue1.length, queue2.length);
-    DoubleLinkedQueueEntry<int>? entry1 = queue1.firstEntry();
-    DoubleLinkedQueueEntry<int>? entry2 = queue2.firstEntry();
-    while (entry1 != null) {
-      Expect.equals(true, !identical(entry1, entry2));
-      entry1 = entry1.nextEntry();
-      entry2 = entry2!.nextEntry();
-    }
-    Expect.equals(null, entry2);
-
-    var firstEntry = queue1.firstEntry()!;
-    var secondEntry = queue1.firstEntry()!.nextEntry()!;
-    var thirdEntry = queue1.lastEntry()!;
-    firstEntry.prepend(4);
-    firstEntry.append(5);
-    secondEntry.prepend(6);
-    secondEntry.append(7);
-    thirdEntry.prepend(8);
-    thirdEntry.append(9);
-    Expect.equals(9, queue1.length);
-    Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]);
-    Expect.equals(1, firstEntry.remove());
-    Expect.equals(2, secondEntry.remove());
-    Expect.equals(3, thirdEntry.remove());
-    Expect.equals(6, queue1.length);
-    Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]);
-  }
-}
-
-void linkEntryTest() {
-  var entry = new DoubleLinkedQueueEntry(42);
-  Expect.equals(null, entry.previousEntry());
-  Expect.equals(null, entry.nextEntry());
-
-  entry.append(37);
-  entry.prepend(87);
-  var prev = entry.previousEntry()!;
-  var next = entry.nextEntry()!;
-  Expect.equals(42, entry.element);
-  Expect.equals(37, next.element);
-  Expect.equals(87, prev.element);
-  Expect.identical(entry, prev.nextEntry());
-  Expect.identical(entry, next.previousEntry());
-  Expect.equals(null, next.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-
-  entry.element = 117;
-  Expect.equals(117, entry.element);
-  Expect.identical(next, entry.nextEntry());
-  Expect.identical(prev, entry.previousEntry());
-
-  Expect.equals(117, entry.remove());
-  Expect.identical(next, prev.nextEntry());
-  Expect.identical(prev, next.previousEntry());
-  Expect.equals(null, next.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-  Expect.equals(37, next.element);
-  Expect.equals(87, prev.element);
-
-  Expect.equals(37, next.remove());
-  Expect.equals(87, prev.element);
-  Expect.equals(null, prev.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-
-  Expect.equals(87, prev.remove());
-}
-
-main() {
-  new DoubleLinkedQueueTest().testMain();
-  new ListQueueTest().testMain();
-  linkEntryTest();
-}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 726b58f..3ee1d12 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -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.
 
+bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+
 [ $compiler == dartdevk ]
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
 
diff --git a/tests/corelib_2/object_hash_test.dart b/tests/corelib_2/object_hash_test.dart
index 3e9e5d8..2e10b45 100644
--- a/tests/corelib_2/object_hash_test.dart
+++ b/tests/corelib_2/object_hash_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.
 
+// @dart=2.9
+
 import "dart:math";
 import "dart:typed_data";
 
diff --git a/tests/corelib_2/queue_first_test.dart b/tests/corelib_2/queue_first_test.dart
deleted file mode 100644
index 63ec6ca..0000000
--- a/tests/corelib_2/queue_first_test.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library queue.first.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1..add(11)..add(12)..add(13);
-  Queue queue2 = new Queue();
-
-  Expect.equals(11, queue1.first);
-  Expect.throwsStateError(() => queue2.first);
-}
diff --git a/tests/corelib_2/queue_last_test.dart b/tests/corelib_2/queue_last_test.dart
deleted file mode 100644
index 3d070da..0000000
--- a/tests/corelib_2/queue_last_test.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library queue.last.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1..add(11)..add(12)..add(13);
-  Queue queue2 = new Queue();
-
-  Expect.equals(13, queue1.last);
-  Expect.throwsStateError(() => queue2.last);
-}
diff --git a/tests/corelib_2/queue_single_test.dart b/tests/corelib_2/queue_single_test.dart
deleted file mode 100644
index c1ebef1..0000000
--- a/tests/corelib_2/queue_single_test.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library queue.single.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
-  Queue<int> queue1 = new Queue<int>();
-  queue1.add(42);
-  Queue queue2 = new Queue();
-  queue2..add(11)..add(12)..add(13);
-  Queue queue3 = new Queue();
-
-  Expect.equals(42, queue1.single);
-  Expect.throwsStateError(() => queue2.single);
-  Expect.throwsStateError(() => queue3.single);
-}
diff --git a/tests/corelib_2/queue_test.dart b/tests/corelib_2/queue_test.dart
deleted file mode 100644
index 08ea375..0000000
--- a/tests/corelib_2/queue_test.dart
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for 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
-
-library queue.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection';
-
-abstract class QueueTest {
-  Queue newQueue();
-  Queue newQueueFrom(Iterable iterable);
-
-  void testMain() {
-    Queue queue = newQueue();
-    checkQueue(queue, 0, 0);
-
-    queue.addFirst(1);
-    checkQueue(queue, 1, 1);
-
-    queue.addLast(10);
-    checkQueue(queue, 2, 11);
-
-    Expect.equals(10, queue.removeLast());
-    checkQueue(queue, 1, 1);
-
-    queue.addLast(10);
-    Expect.equals(1, queue.removeFirst());
-    checkQueue(queue, 1, 10);
-
-    queue.addFirst(1);
-    queue.addLast(100);
-    queue.addLast(1000);
-    Expect.equals(1000, queue.removeLast());
-    queue.addLast(1000);
-    checkQueue(queue, 4, 1111);
-
-    queue.removeFirst();
-    checkQueue(queue, 3, 1110);
-
-    int mapTest(Object value) {
-      return (value as int) ~/ 10;
-    }
-
-    bool is10(Object value) {
-      return (value == 10);
-    }
-
-    Queue mapped = newQueueFrom(queue.map(mapTest));
-    checkQueue(mapped, 3, 111);
-    checkQueue(queue, 3, 1110);
-    Expect.equals(1, mapped.removeFirst());
-    Expect.equals(100, mapped.removeLast());
-    Expect.equals(10, mapped.removeFirst());
-
-    Queue other = newQueueFrom(queue.where(is10));
-    checkQueue(other, 1, 10);
-
-    Expect.equals(true, queue.any(is10));
-
-    bool isInstanceOfInt(Object value) {
-      return (value is int);
-    }
-
-    Expect.equals(true, queue.every(isInstanceOfInt));
-
-    Expect.equals(false, queue.every(is10));
-
-    bool is1(Object value) {
-      return (value == 1);
-    }
-
-    Expect.equals(false, queue.any(is1));
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-
-    var exception = null;
-    try {
-      queue.removeFirst();
-    } on StateError catch (e) {
-      exception = e;
-    }
-    Expect.equals(true, exception != null);
-    Expect.equals(0, queue.length);
-
-    exception = null;
-    try {
-      queue.removeLast();
-    } on StateError catch (e) {
-      exception = e;
-    }
-    Expect.equals(true, exception != null);
-    Expect.equals(0, queue.length);
-
-    queue.addFirst(1);
-    queue.addFirst(2);
-    Expect.equals(2, queue.first);
-    Expect.equals(1, queue.last);
-
-    queue.addLast(3);
-    Expect.equals(3, queue.last);
-    bool isGreaterThanOne(Object value) {
-      return ((value as int) > 1);
-    }
-
-    other = newQueueFrom(queue.where(isGreaterThanOne));
-    checkQueue(other, 2, 5);
-
-    // Cycle through values without ever having large element count.
-    queue = newQueue();
-    queue.add(0);
-    for (int i = 0; i < 255; i++) {
-      queue.add(i + 1);
-      Expect.equals(i, queue.removeFirst());
-    }
-    Expect.equals(255, queue.removeFirst());
-    Expect.isTrue(queue.isEmpty);
-
-    testAddAll();
-    testLengthChanges();
-    testLarge();
-    testFromListToList();
-  }
-
-  void checkQueue(Queue queue, int expectedSize, int expectedSum) {
-    testLength(expectedSize, queue);
-    int sum = 0;
-    void sumElements(Object value) {
-      sum += value as int;
-    }
-
-    queue.forEach(sumElements);
-    Expect.equals(expectedSum, sum);
-  }
-
-  testLength(int length, Queue queue) {
-    Expect.equals(length, queue.length);
-    ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
-    ((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
-  }
-
-  void testAddAll() {
-    Set<int> set = new Set<int>.from([1, 2, 4]);
-    Expect.equals(3, set.length);
-
-    Queue queue1 = newQueueFrom(set);
-    Queue queue2 = newQueue();
-    Queue queue3 = newQueue();
-    testLength(3, queue1);
-    testLength(0, queue2);
-    testLength(0, queue3);
-
-    queue2.addAll(set);
-    testLength(3, queue2);
-
-    queue3.addAll(queue1);
-    testLength(3, queue3);
-
-    int sum = 0;
-    void f(e) {
-      sum += e;
-    }
-
-    ;
-
-    set.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue1.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue2.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    queue3.forEach(f);
-    Expect.equals(7, sum);
-    sum = 0;
-
-    set = new Set<int>.from([]);
-    queue1 = newQueueFrom(set);
-    queue2 = newQueue();
-    queue3 = newQueue();
-
-    queue2.addAll(set);
-    queue3.addAll(queue1);
-
-    Expect.equals(0, set.length);
-    Expect.equals(0, queue1.length);
-    Expect.equals(0, queue2.length);
-    Expect.equals(0, queue3.length);
-  }
-
-  void testLengthChanges() {
-    // Test that the length property is updated properly by
-    // modifications;
-    Queue queue = newQueue();
-    testLength(0, queue);
-
-    for (int i = 1; i <= 10; i++) {
-      queue.add(i);
-      testLength(i, queue);
-    }
-
-    for (int i = 1; i <= 10; i++) {
-      queue.addFirst(11 - i);
-      testLength(10 + i, queue);
-    }
-
-    for (int i = 1; i <= 10; i++) {
-      queue.addLast(i);
-      testLength(20 + i, queue);
-    }
-
-    queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
-    testLength(40, queue);
-
-    for (int i = 1; i <= 5; i++) {
-      Expect.equals(i, queue.removeFirst());
-      testLength(40 - i, queue);
-    }
-
-    for (int i = 1; i <= 5; i++) {
-      Expect.equals(11 - i, queue.removeLast());
-      testLength(35 - i, queue);
-    }
-
-    Expect.isTrue(queue.remove(10));
-    testLength(29, queue);
-    Expect.isFalse(queue.remove(999));
-    testLength(29, queue);
-
-    queue.removeWhere((x) => x == 7);
-    testLength(26, queue);
-
-    queue.retainWhere((x) => x != 3);
-    testLength(23, queue);
-
-    Expect.listEquals(
-        [6, 8, 9, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5],
-        queue.toList());
-
-    // Regression test: http://dartbug.com/16270
-    // These should all do nothing, and should not throw.
-    Queue emptyQueue = newQueue();
-    emptyQueue.remove(0);
-    emptyQueue.removeWhere((x) => null);
-    emptyQueue.retainWhere((x) => null);
-  }
-
-  void testLarge() {
-    int N = 10000;
-    Set set = new Set();
-
-    Queue queue = newQueue();
-    Expect.isTrue(queue.isEmpty);
-
-    for (int i = 0; i < N; i++) {
-      queue.add(i);
-      set.add(i);
-    }
-    Expect.equals(N, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    Expect.equals(0, queue.elementAt(0));
-    Expect.equals(N - 1, queue.elementAt(N - 1));
-    Expect.throws(() {
-      queue.elementAt(-1);
-    });
-    Expect.throws(() {
-      queue.elementAt(N);
-    });
-
-    Iterable skip1 = queue.skip(1);
-    Iterable take1 = queue.take(1);
-    Iterable mapped = queue.map((e) => -e);
-
-    for (int i = 0; i < 500; i++) {
-      Expect.equals(i, take1.first);
-      Expect.equals(i, queue.first);
-      Expect.equals(-i, mapped.first);
-      Expect.equals(i + 1, skip1.first);
-      Expect.equals(i, queue.removeFirst());
-      Expect.equals(i + 1, take1.first);
-      Expect.equals(-i - 1, mapped.first);
-      Expect.equals(N - 1 - i, queue.last);
-      Expect.equals(N - 1 - i, queue.removeLast());
-    }
-    Expect.equals(N - 1000, queue.length);
-
-    Expect.isTrue(queue.remove(N >> 1));
-    Expect.equals(N - 1001, queue.length);
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-    Expect.isTrue(queue.isEmpty);
-
-    queue.addAll(set);
-    Expect.equals(N, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    // Iterate.
-    for (var element in queue) {
-      Expect.isTrue(set.contains(element));
-    }
-
-    queue.forEach((element) {
-      Expect.isTrue(set.contains(element));
-    });
-
-    queue.addAll(set);
-    Expect.equals(N * 2, queue.length);
-    Expect.isFalse(queue.isEmpty);
-
-    queue.clear();
-    Expect.equals(0, queue.length);
-    Expect.isTrue(queue.isEmpty);
-  }
-
-  void testFromListToList() {
-    const int N = 256;
-    List list = [];
-    for (int i = 0; i < N; i++) {
-      Queue queue = newQueueFrom(list);
-
-      Expect.equals(list.length, queue.length);
-      List to = queue.toList();
-      Expect.listEquals(list, to);
-
-      queue.add(i);
-      list.add(i);
-      Expect.equals(list.length, queue.length);
-      to = queue.toList();
-      Expect.listEquals(list, to);
-    }
-  }
-}
-
-class ListQueueTest extends QueueTest {
-  Queue newQueue() => new ListQueue();
-  Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements);
-
-  void testMain() {
-    super.testMain();
-    trickyTest();
-  }
-
-  void trickyTest() {
-    // Test behavior around the know growing capacities of a ListQueue.
-    Queue q = new ListQueue();
-
-    for (int i = 0; i < 255; i++) {
-      q.add(i);
-    }
-    for (int i = 0; i < 128; i++) {
-      Expect.equals(i, q.removeFirst());
-    }
-    q.add(255);
-    for (int i = 0; i < 127; i++) {
-      q.add(i);
-    }
-
-    Expect.equals(255, q.length);
-
-    // Remove element at end of internal buffer.
-    q.removeWhere((v) => v == 255);
-    // Remove element at beginning of internal buffer.
-    q.removeWhere((v) => v == 0);
-    // Remove element at both ends of internal buffer.
-    q.removeWhere((v) => v == 254 || v == 1);
-
-    Expect.equals(251, q.length);
-
-    Iterable i255 = new Iterable.generate(255, (x) => x);
-
-    q = new ListQueue();
-    q.addAll(i255);
-    Expect.listEquals(i255.toList(), q.toList());
-
-    q = new ListQueue();
-    q.addAll(i255.toList());
-    Expect.listEquals(i255.toList(), q.toList());
-
-    q = new ListQueue.from(i255);
-    for (int i = 0; i < 128; i++) q.removeFirst();
-    q.add(256);
-    q.add(0);
-    q.addAll(i255.toList());
-    Expect.equals(129 + 255, q.length);
-
-    // Test addAll that requires the queue to grow.
-    q = new ListQueue();
-    q.addAll(i255.take(35));
-    q.addAll(i255.skip(35).take(96));
-    q.addAll(i255.skip(35 + 96));
-    Expect.listEquals(i255.toList(), q.toList());
-  }
-}
-
-class DoubleLinkedQueueTest extends QueueTest {
-  Queue newQueue() => new DoubleLinkedQueue();
-  Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements);
-
-  void testMain() {
-    super.testMain();
-    testQueueElements();
-  }
-
-  void testQueueElements() {
-    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]);
-    DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
-    queue2.addAll(queue1);
-
-    Expect.equals(queue1.length, queue2.length);
-    DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry();
-    DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry();
-    while (entry1 != null) {
-      Expect.equals(true, !identical(entry1, entry2));
-      entry1 = entry1.nextEntry();
-      entry2 = entry2.nextEntry();
-    }
-    Expect.equals(null, entry2);
-
-    var firstEntry = queue1.firstEntry();
-    var secondEntry = queue1.firstEntry().nextEntry();
-    var thirdEntry = queue1.lastEntry();
-    firstEntry.prepend(4);
-    firstEntry.append(5);
-    secondEntry.prepend(6);
-    secondEntry.append(7);
-    thirdEntry.prepend(8);
-    thirdEntry.append(9);
-    Expect.equals(9, queue1.length);
-    Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]);
-    Expect.equals(1, firstEntry.remove());
-    Expect.equals(2, secondEntry.remove());
-    Expect.equals(3, thirdEntry.remove());
-    Expect.equals(6, queue1.length);
-    Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]);
-  }
-}
-
-void linkEntryTest() {
-  var entry = new DoubleLinkedQueueEntry(42);
-  Expect.equals(null, entry.previousEntry());
-  Expect.equals(null, entry.nextEntry());
-
-  entry.append(37);
-  entry.prepend(87);
-  var prev = entry.previousEntry();
-  var next = entry.nextEntry();
-  Expect.equals(42, entry.element);
-  Expect.equals(37, next.element);
-  Expect.equals(87, prev.element);
-  Expect.identical(entry, prev.nextEntry());
-  Expect.identical(entry, next.previousEntry());
-  Expect.equals(null, next.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-
-  entry.element = 117;
-  Expect.equals(117, entry.element);
-  Expect.identical(next, entry.nextEntry());
-  Expect.identical(prev, entry.previousEntry());
-
-  Expect.equals(117, entry.remove());
-  Expect.identical(next, prev.nextEntry());
-  Expect.identical(prev, next.previousEntry());
-  Expect.equals(null, next.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-  Expect.equals(37, next.element);
-  Expect.equals(87, prev.element);
-
-  Expect.equals(37, next.remove());
-  Expect.equals(87, prev.element);
-  Expect.equals(null, prev.nextEntry());
-  Expect.equals(null, prev.previousEntry());
-
-  Expect.equals(87, prev.remove());
-}
-
-main() {
-  new DoubleLinkedQueueTest().testMain();
-  new ListQueueTest().testMain();
-  linkEntryTest();
-}
diff --git a/tests/ffi/ffi_native_test.dart b/tests/ffi/ffi_native_test.dart
index b700981..12ca0dd 100644
--- a/tests/ffi/ffi_native_test.dart
+++ b/tests/ffi/ffi_native_test.dart
@@ -48,6 +48,17 @@
   external int returnIntPtrMethod(int x);  //# 03: 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 {
+  @FfiNative<Void Function()>('nop')
+  external static void foo();
+}
+class B {
+  @FfiNative<Void Function()>('nop')
+  external static void foo();
+}
+
 void main() {
   // Register test resolver for top-level functions above.
   final root_lib_url = getRootLibraryUrl();
diff --git a/tests/ffi/function_test.dart b/tests/ffi/function_test.dart
index d5fd3c0..6d4c77e 100644
--- a/tests/ffi/function_test.dart
+++ b/tests/ffi/function_test.dart
@@ -39,6 +39,7 @@
     testFloatRounding();
     testVoidReturn();
     testNoArgs();
+    testNativeFunctionNullableInt();
   }
 }
 
@@ -457,3 +458,16 @@
   double result = inventFloatValue();
   Expect.approxEquals(1337.0, result);
 }
+
+void testNativeFunctionNullableInt() {
+  final sumPlus42 = ffiTestFunctions.lookupFunction<
+      Int32 Function(Int32, Int32), int Function(int, int?)>("SumPlus42");
+
+  try {
+    sumPlus42(3, null);
+  } catch (e) {
+    // TODO(http://dartbug.com/47098): Save param names to dwarf.
+    Expect.isTrue(e.toString().contains('ffi_param2') ||
+        e.toString().contains('<optimized out>'));
+  }
+}
diff --git a/tests/ffi_2/function_test.dart b/tests/ffi_2/function_test.dart
index f955bbd..c0f9657 100644
--- a/tests/ffi_2/function_test.dart
+++ b/tests/ffi_2/function_test.dart
@@ -41,6 +41,7 @@
     testFloatRounding();
     testVoidReturn();
     testNoArgs();
+    testNativeFunctionNullableInt();
   }
 }
 
@@ -459,3 +460,16 @@
   double result = inventFloatValue();
   Expect.approxEquals(1337.0, result);
 }
+
+void testNativeFunctionNullableInt() {
+  final sumPlus42 = ffiTestFunctions.lookupFunction<
+      Int32 Function(Int32, Int32), int Function(int, int)>("SumPlus42");
+
+  try {
+    sumPlus42(3, null);
+  } catch (e) {
+    // TODO(http://dartbug.com/47098): Save param names to dwarf.
+    Expect.isTrue(e.toString().contains('ffi_param2') ||
+        e.toString().contains('<optimized out>'));
+  }
+}
diff --git a/tests/language/async/return_types_test.dart b/tests/language/async/return_types_test.dart
index 3de5491..c28aeae 100644
--- a/tests/language/async/return_types_test.dart
+++ b/tests/language/async/return_types_test.dart
@@ -56,8 +56,6 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 // [cfe] 'sync*' and 'async*' can't return a value.
-//^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 }
 
 Stream<int> foo9() async* {
@@ -67,8 +65,6 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 // [cfe] 'sync*' and 'async*' can't return a value.
-//^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 }
 
 test() async {
diff --git a/tests/language/call/constructor_on_unresolvable_class_test.dart b/tests/language/call/constructor_on_unresolvable_class_test.dart
index 6db90ed..6b9012b 100644
--- a/tests/language/call/constructor_on_unresolvable_class_test.dart
+++ b/tests/language/call/constructor_on_unresolvable_class_test.dart
@@ -12,13 +12,13 @@
   new A();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
   new A.foo();
   //  ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A.foo'.
+  // [cfe] Couldn't find constructor 'A.foo'.
   new lib.A();
   //  ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'lib.A'.
+  // [cfe] Couldn't find constructor 'lib.A'.
 }
diff --git a/tests/language/call/nonexistent_constructor_test.dart b/tests/language/call/nonexistent_constructor_test.dart
index 4c129d0..6ef4f94 100644
--- a/tests/language/call/nonexistent_constructor_test.dart
+++ b/tests/language/call/nonexistent_constructor_test.dart
@@ -20,9 +20,9 @@
   new A.bar(foo());
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'A.bar'.
+  // [cfe] Couldn't find constructor 'A.bar'.
   new A();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language/class/keyword_test.dart b/tests/language/class/keyword_test.dart
index 8b07fec..1620ca5 100644
--- a/tests/language/class/keyword_test.dart
+++ b/tests/language/class/keyword_test.dart
@@ -13,15 +13,13 @@
 // [cfe] Expected ';' after this.
 //    ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] 'class' can't be used as an identifier because it's a keyword.
-//    ^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
+// [cfe] 'class' can't be used as an identifier because it's a keyword.
 // [cfe] Setter not found: 'class'.
   print("$class");
   //      ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] 'class' can't be used as an identifier because it's a keyword.
-  //      ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
-  // [cfe] Getter not found: 'class'.
+  // [cfe] 'class' can't be used as an identifier because it's a keyword.
+  // [cfe] Undefined name 'class'.
 }
diff --git a/tests/language/class/variable_shadow_class_test.dart b/tests/language/class/variable_shadow_class_test.dart
index 3fc29e4..065a0df 100644
--- a/tests/language/class/variable_shadow_class_test.dart
+++ b/tests/language/class/variable_shadow_class_test.dart
@@ -17,7 +17,7 @@
     var i = new Test.named(10);
     //          ^^^^
     // [analyzer] COMPILE_TIME_ERROR.PREFIX_SHADOWED_BY_LOCAL_DECLARATION
-    // [cfe] Method not found: 'Test.named'.
+    // [cfe] Couldn't find constructor 'Test.named'.
     Expect.equals(10, i.field);
   }
 
diff --git a/tests/language/closure/identity_equality_tearoff_test.dart b/tests/language/closure/identity_equality_tearoff_test.dart
index cdf7585..549f2d4 100644
--- a/tests/language/closure/identity_equality_tearoff_test.dart
+++ b/tests/language/closure/identity_equality_tearoff_test.dart
@@ -40,6 +40,26 @@
 
   void instanceMethod() {}
   X? genericInstanceMethod<X>() => null;
+
+  // Enable a mixed-in method in `M` that has a superinvocation.
+  int mixedInSuperMethod() => 0;
+}
+
+mixin M on A {
+  void mixedInMethod() {}
+  int mixedInSuperMethod() => super.mixedInSuperMethod() + 1;
+}
+
+class AM extends A with M {
+  int Function() get tearoffSuperMethod => super.mixedInSuperMethod;
+}
+
+class AMM extends AM with M {
+  // Tear off the second copy of M.mixedInSuperMethod
+  // (`tearoffSuperMethod` still tears off the first copy).
+  int Function() get tearoffSuperMethodSecond => super.mixedInSuperMethod;
+  // In this case, `super.` should not make a difference.
+  int Function() get tearoffSuperMethodSecondNoSuper => mixedInSuperMethod;
 }
 
 const cTopLevelFunction = topLevelFunction;
@@ -104,6 +124,7 @@
   checkIdentical(cIntStaticMethod1, vIntStaticMethod2);
   checkIdentical(vIntTopLevelFunction1, vIntTopLevelFunction2);
   checkIdentical(vIntStaticMethod1, vIntStaticMethod2);
+  checkEqual(vIntInstanceMethod1, vIntInstanceMethod2);
 
   const CheckIdentical(topLevelFunction, topLevelFunction);
   const CheckIdentical(A.staticMethod, A.staticMethod);
@@ -268,6 +289,56 @@
   const CheckNotIdentical(cIntTopLevelFunction1, cStringTopLevelFunction);
   const CheckNotIdentical(cIntStaticMethod1, cStringStaticMethod);
 
+  {
+    var am = AM();
+    void Function() vMixedInMethod1 = am.mixedInMethod;
+    void Function() vMixedInMethod2 = am.mixedInMethod;
+    int Function() vMixedInSuperMethod1 = am.mixedInSuperMethod;
+    int Function() vMixedInSuperMethod2 = am.mixedInSuperMethod;
+
+    checkEqual(am.mixedInMethod, am.mixedInMethod);
+    checkEqual(vMixedInMethod1, vMixedInMethod2);
+    checkEqual(am.mixedInSuperMethod, am.mixedInSuperMethod);
+    checkEqual(vMixedInSuperMethod1, vMixedInSuperMethod2);
+  }
+  {
+    var amm = AMM();
+    void Function() vMixedInMethod1 = amm.mixedInMethod;
+    void Function() vMixedInMethod2 = amm.mixedInMethod;
+    int Function() vMixedInSuperMethod1 = amm.tearoffSuperMethod;
+    int Function() vMixedInSuperMethod2 = amm.tearoffSuperMethod;
+    int Function() vMixedInSuperMethodSecond1 = amm.tearoffSuperMethodSecond;
+    int Function() vMixedInSuperMethodSecond2 = amm.tearoffSuperMethodSecond;
+    int Function() vMixedInSuperMethodSecondNoSuper1 =
+        amm.tearoffSuperMethodSecondNoSuper;
+    int Function() vMixedInSuperMethodSecondNoSuper2 =
+        amm.tearoffSuperMethodSecondNoSuper;
+
+    checkEqual(amm.mixedInMethod, amm.mixedInMethod);
+    checkEqual(vMixedInMethod1, vMixedInMethod2);
+
+    checkEqual(amm.tearoffSuperMethod, amm.tearoffSuperMethod);
+    checkEqual(vMixedInSuperMethod1, vMixedInSuperMethod2);
+    checkEqual(amm.tearoffSuperMethodSecond, amm.tearoffSuperMethodSecond);
+    checkEqual(vMixedInSuperMethodSecond1, vMixedInSuperMethodSecond2);
+    checkUnequal(amm.tearoffSuperMethod, amm.tearoffSuperMethodSecond);
+    checkUnequal(vMixedInSuperMethod1, vMixedInSuperMethodSecond2);
+    checkUnequal(amm.tearoffSuperMethodSecond, amm.tearoffSuperMethod);
+    checkUnequal(vMixedInSuperMethodSecond1, vMixedInSuperMethod2);
+
+    checkEqual(amm.tearoffSuperMethodSecondNoSuper,
+        amm.tearoffSuperMethodSecondNoSuper);
+    checkEqual(
+        vMixedInSuperMethodSecondNoSuper1, vMixedInSuperMethodSecondNoSuper2);
+    checkUnequal(amm.tearoffSuperMethod, amm.tearoffSuperMethodSecondNoSuper);
+    checkUnequal(vMixedInSuperMethod1, vMixedInSuperMethodSecondNoSuper2);
+    checkUnequal(amm.tearoffSuperMethodSecondNoSuper, amm.tearoffSuperMethod);
+    checkUnequal(vMixedInSuperMethodSecondNoSuper1, vMixedInSuperMethod2);
+
+    checkEqual(
+        amm.tearoffSuperMethodSecond, amm.tearoffSuperMethodSecondNoSuper);
+  }
+
   <X>() {
     X? Function() vXTopLevelFunction1 = genericTopLevelFunction;
     X? Function() vXStaticMethod1 = A.genericStaticMethod;
@@ -276,6 +347,14 @@
     X? Function() vXInstanceMethod1 = a.genericInstanceMethod;
     X? Function() vXInstanceMethod2 = a.genericInstanceMethod;
 
+    checkEqual(vXTopLevelFunction1, vXTopLevelFunction2);
+    checkEqual(vXStaticMethod1, vXStaticMethod2);
+    checkEqual(vXInstanceMethod1, vXInstanceMethod2);
+
+    checkEqual(vXTopLevelFunction1, vIntTopLevelFunction1);
+    checkEqual(vXStaticMethod1, vIntStaticMethod1);
+    checkEqual(vXInstanceMethod1, vIntInstanceMethod2);
+
     checkUnequal(vXTopLevelFunction1, vXStaticMethod1);
     checkUnequal(vXTopLevelFunction1, vXInstanceMethod1);
     checkUnequal(vXStaticMethod1, vXInstanceMethod1);
diff --git a/tests/language/compile_time_constant/compile_time_constant_test.dart b/tests/language/compile_time_constant/compile_time_constant_test.dart
index 7a06543..a3167813 100644
--- a/tests/language/compile_time_constant/compile_time_constant_test.dart
+++ b/tests/language/compile_time_constant/compile_time_constant_test.dart
@@ -14,10 +14,9 @@
       bar
 //    ^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-// [cfe] Can't access 'this' in a field initializer to read 'bar'.
-//    ^^^
 // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
-// [cfe] Getter not found: 'bar'.
+// [cfe] Can't access 'this' in a field initializer to read 'bar'.
+// [cfe] Undefined name 'bar'.
       -3;
 }
 
diff --git a/tests/language/const/const_locals_constant_locals_test.dart b/tests/language/const/const_locals_constant_locals_test.dart
index 472687b..95a47bb 100644
--- a/tests/language/const/const_locals_constant_locals_test.dart
+++ b/tests/language/const/const_locals_constant_locals_test.dart
@@ -16,13 +16,11 @@
   //         ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] Constant evaluation error:
-  //         ^
   // [cfe] Not a constant expression.
   const c4 = finalField;
   //         ^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] Constant evaluation error:
-  //         ^
   // [cfe] Not a constant expression.
   const c5 = constField;
   const c6 = method();
@@ -33,6 +31,8 @@
   //         ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] New expression is not a constant expression.
+  //             ^
+  // [cfe] New expression is not a constant expression.
   const c8 = const Class();
 }
 
diff --git a/tests/language/const/constructor_syntax_test.dart b/tests/language/const/constructor_syntax_test.dart
index ea34671..898aa6c 100644
--- a/tests/language/const/constructor_syntax_test.dart
+++ b/tests/language/const/constructor_syntax_test.dart
@@ -51,8 +51,8 @@
       // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
       //      ^
       // [cfe] 'field' is a final instance variable that was initialized at the declaration.
-      //      ^
       // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+      // [cfe] Not a constant expression.
       //        ^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.INVALID_CONSTANT
       // [cfe] New expression is not a constant expression.
diff --git a/tests/language/const/factory_member_test.dart b/tests/language/const/factory_member_test.dart
new file mode 100644
index 0000000..5111a47
--- /dev/null
+++ b/tests/language/const/factory_member_test.dart
@@ -0,0 +1,46 @@
+// 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:math';
+import 'package:expect/expect.dart';
+
+abstract class A {
+  A.named(this.x5);
+  const factory A() = B;
+
+  // No constant expression will evaluate to an instance of `A`, so
+  // there is no need to live up to the constant related constraints,
+  // we can have instance variables of various kinds, even mutable:
+
+  final List<Never> x1 = [];
+  abstract String x2;
+  late final int x3 = Random().nextInt(10000);
+  late final int x4;
+  double? x5;
+}
+
+class B implements A {
+  const B([this.x5 = 0.57721566490153286]) : x1 = const [];
+
+  // Implement the interface of `A` appropriately for a constant.
+
+  final List<Never> x1;
+
+  final String x2 = 'B.x2';
+  set x2(String _) {}
+
+  int get x3 => 42;
+
+  int get x4 => -42;
+  set x4(_) {}
+
+  final double? x5;
+  set x5(double? _) {}
+}
+
+void main() {
+  const A();
+  const B(2.1);
+  Expect.isTrue(identical(const B(0.57721566490153286), const A()));
+}
diff --git a/tests/language/const/factory_with_body_test.dart b/tests/language/const/factory_with_body_test.dart
index a9577bb..e540271 100644
--- a/tests/language/const/factory_with_body_test.dart
+++ b/tests/language/const/factory_with_body_test.dart
@@ -15,4 +15,6 @@
 
 main() {
   const ConstFactoryWithBody.one();
+  //    ^
+  // [cfe] Non-redirecting const factory invocation is not a constant expression.
 }
diff --git a/tests/language/const/optional_args_test.dart b/tests/language/const/optional_args_test.dart
index 3d7c779..443c6db 100644
--- a/tests/language/const/optional_args_test.dart
+++ b/tests/language/const/optional_args_test.dart
@@ -14,6 +14,7 @@
 //  ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_CONSTANT_DEFAULT_VALUE
 // [cfe] Constant expression expected.
+// [cfe] Non-constant map literal is not a constant expression.
 
 main() {
   invalid();
diff --git a/tests/language/const/syntax_test.dart b/tests/language/const/syntax_test.dart
index cf1ce3a..41f2818 100644
--- a/tests/language/const/syntax_test.dart
+++ b/tests/language/const/syntax_test.dart
@@ -45,6 +45,8 @@
   //                                       ^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] New expression is not a constant expression.
+  //                                           ^
+  // [cfe] New expression is not a constant expression.
 
   var f4 = B4;
   var f5 = B5;
@@ -60,7 +62,6 @@
 //        ^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_NOT_INITIALIZED
 // [cfe] Field 'F3' should be initialized because its type 'int' doesn't allow null.
-//        ^
 // [cfe] The const variable 'F3' must be initialized.
 //          ^
 // [cfe] The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
@@ -83,10 +84,14 @@
 //         ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//             ^
+// [cfe] New expression is not a constant expression.
 const P3 = new Point(0, 0) + 1;
 //         ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//             ^
+// [cfe] New expression is not a constant expression.
 
 // Check that we cannot have cyclic references in compile time
 // expressions.
@@ -115,8 +120,8 @@
       // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
       //  ^
       // [cfe] 'x' is a final instance variable that was initialized at the declaration.
-      //  ^
       // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+      // [cfe] Not a constant expression.
   ;
   final x = null;
 }
@@ -138,4 +143,6 @@
 //                      ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//                          ^
+// [cfe] New expression is not a constant expression.
 const B5 = identical(1, const Point(1, 2));
diff --git a/tests/language/const_functions/const_functions_const_factory_disabled_test.dart b/tests/language/const_functions/const_functions_const_factory_disabled_test.dart
index e6bf9c6..0215a1d 100644
--- a/tests/language/const_functions/const_functions_const_factory_disabled_test.dart
+++ b/tests/language/const_functions/const_functions_const_factory_disabled_test.dart
@@ -7,6 +7,8 @@
 import "package:expect/expect.dart";
 
 const printConst = MessageType.parse("print");
+//                             ^
+// [cfe] Non-redirecting const factory invocation is not a constant expression.
 
 class MessageType {
   static const print = MessageType._('print');
diff --git a/tests/language/constructor/default_factory2_test.dart b/tests/language/constructor/default_factory2_test.dart
index a8b56b8..3de8111 100644
--- a/tests/language/constructor/default_factory2_test.dart
+++ b/tests/language/constructor/default_factory2_test.dart
@@ -22,6 +22,4 @@
 
 main() {
   var result = new IA<String>();
-  //               ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'Foo' of the type variable 'T' on 'A'.
 }
diff --git a/tests/language/constructor/explicit_instantiation_syntax_test.dart b/tests/language/constructor/explicit_instantiation_syntax_test.dart
new file mode 100644
index 0000000..3b3ddd3
--- /dev/null
+++ b/tests/language/constructor/explicit_instantiation_syntax_test.dart
@@ -0,0 +1,299 @@
+// 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.
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import 'dart:core' hide dynamic;
+import 'dart:core' as core show dynamic;
+
+extension E<X> on X {
+  X operator <(_) => this;
+  X operator >(_) => this;
+  X operator <=(_) => this;
+  X operator >=(_) => this;
+  // X operator ==(_) => this; Member of object, can't be extension method.
+  X operator -(_) => this;
+  X operator +(_) => this;
+  X operator /(_) => this;
+  X operator ~/(_) => this;
+  X operator *(_) => this;
+  X operator %(_) => this;
+  X operator |(_) => this;
+  X operator ^(_) => this;
+  X operator &(_) => this;
+  X operator <<(_) => this;
+  X operator >>>(_) => this;
+  X operator >>(_) => this;
+
+  X operator -() => this;
+  X operator ~() => this;
+  X operator [](_) => this;
+  operator []=(_1, _2) => this;
+}
+
+class C<X, Y> {
+  C();
+  C.named();
+}
+
+void f(_1, _2) {}
+void g(_) {}
+void h(_1, [_2]) {}
+
+int i = 0;
+
+class Test {
+  var x;
+
+  void test() {
+    // Test the behavior of the parser on `id<id,id> ...` where the `...`
+    // stands for each of the tokens in Dart. In each case, additional tokens
+    // are added at the end, if this can make the construct parseable.
+    // `f` is used to force the parse to be two expressions; `g` is used to
+    // force the parse to be one expression; `h` is used to allow both (in
+    // cases where both possibilities must be a dead end).
+
+    f(C<int, int> !true);
+
+    g(C<int, int> != 1);
+
+    f(C<int, int> """ """);
+
+    f(C<int, int> "");
+
+    // `#!` is not a symbol, there's no way to make this work.
+    h(C<int, int> #!); //# 1: syntax error
+
+    f(C<int, int> #foo);
+
+    h(C<int, int> % 1); //# 2: syntax error
+    g((C<int, int>) % 1);
+
+    h(C<int, int> %= 1); //# 3: syntax error
+
+    h(true + C<int, int> && true); //# 4: syntax error
+    g(true + (C<int, int>) && true);
+
+    h(C<int, int> & 1); //# 5: syntax error
+    g((C<int, int>) & 1);
+
+    h(C<int, int> &= 1); //# 6: syntax error
+
+    g(C<int, int>());
+
+    g(C<int, int>);
+
+    h(C<int, int> * 1); //# 7: syntax error
+    g((C<int, int>) * 1);
+
+    h(C<int, int> */ 1); //# 8: syntax error
+
+    h(C<int, int> *= 1); //# 9: syntax error
+
+    h(C<int, int> + 1); //# 10: syntax error
+    g((C<int, int>) + 1);
+
+    f(C<int, int> ++ i);
+
+    h(C<int, int> += 1); //# 11: syntax error
+
+    f(C<int, int> , 1);
+
+    f(C<int, int> - 1);
+
+    f(C<int, int> -- i);
+
+    h(C<int, int> -= 1); //# 12: syntax error
+
+    g(C<int, int> . named());
+
+    g(C<int, int> .. toString());
+
+    h(C<int, int> ...); //# 13: syntax error
+
+    h(C<int, int> ...?); //# 14: syntax error
+
+    h(C<int, int> / 1); //# 15: syntax error
+    g((C<int, int>) / 1);
+
+    g(C<int, int> /**/); //# 16: ok
+    f(C<int, int> /**/ - 1);
+
+    g(C<int, int> //
+        );
+    f(C<int, int> //
+        -
+        1);
+
+    h(C<int, int> /= 1); //# 17: syntax error
+
+    g({C<int, int> : 1});
+
+    C<int, int> ; //# 18: ok
+
+    h(C<int, int> < 1); //# 19: syntax error
+    g((C<int, int>) < 1);
+
+    h(C<int, int> << 1); //# 20: syntax error
+    g((C<int, int>) << 1);
+
+    h(C<int, int> <<= 1); //# 21: syntax error
+
+    h(C<int, int> <= 1); //# 22: syntax error
+    g((C<int, int>) <= 1);
+
+    h(C<int, int> = 1); //# 23: syntax error
+
+    g(C<int, int> == 1);
+
+    h(C<int, int> =>); //# 24: syntax error
+
+    // The operator `>>` is a single token in the grammar.
+    h(C<int, int> > 1); //# 25: syntax error
+    h((C<int, int>) > 1);
+
+    h(true + C<int, int> ? 1 : 1); //# 26: syntax error
+    g(true + (C<int, int>) ? 1 : 1);
+
+    g(C<int, int> ?. toString()); //# 27: syntax error
+    g((C<int, int>) ?. toString()); //# 28: static type warning
+
+    h(C<int, int> ?.. toString()); //# 29: syntax error
+
+    h(C<int, int> ?? 1); //# 30: syntax error
+    g(null + (C<int, int>) ?? 1);
+
+    h(C<int, int> ??= 1); //# 31: syntax error
+
+    h(C<int, int> @deprecated 1); //# 32: syntax error
+
+    f(C<int, int> [ 1 ]);
+
+    f(C<int, int> '');
+
+    f(C<int, int> ''' ''');
+
+    g([ C<int, int> ]);
+
+    h(C<int, int> ^ 1); //# 33: syntax error
+    g((C<int, int>) ^ 1);
+
+    h(C<int, int> ^= 1); //# 34: syntax error
+
+    h(C<int, int> | 1); //# 35: syntax error
+    g((C<int, int>) | 1);
+
+    h(C<int, int> |= 1); //# 36: syntax error
+
+    h(true + C<int, int> || true); //# 37: syntax error
+    g(true + (C<int, int>) || true);
+
+    f(C<int, int> ~ 1);
+
+    h(C<int, int> ~/ 1); //# 38: syntax error
+    g((C<int, int>) ~/ 1);
+
+    h(C<int, int> ~/= 1); //# 39: syntax error
+
+    f(C<int, int> {});
+    g({ C<int, int> });
+
+    // Keywords with no special status.
+    {
+      var async, hide, of, on, show, sync;
+      f(C<int, int> async);
+      f(C<int, int> hide);
+      f(C<int, int> of);
+      f(C<int, int> on);
+      f(C<int, int> show);
+      f(C<int, int> sync);
+    }
+
+    // Contextual reserved words (no special status here).
+    {
+      var await, yield;
+      f(C<int, int> await);
+      f(C<int, int> yield);
+    }
+
+    // Built-in identifiers.
+    {
+      var abstract, as, covariant, deferred, dynamic, export;
+      var extension, external, factory, Function, get, implements;
+      var import, interface, late, library, mixin, operator, part;
+      var required, set, static, typedef;
+      f(C<int, int> abstract);
+      f(C<int, int> as);
+      g((C<int, int>) as core.dynamic);
+      f(C<int, int> covariant);
+      f(C<int, int> deferred);
+      f(C<int, int> dynamic);
+      f(C<int, int> export);
+      f(C<int, int> extension);
+      f(C<int, int> external);
+      f(C<int, int> factory);
+      f(C<int, int> Function);
+      f(C<int, int> get);
+      f(C<int, int> implements);
+      f(C<int, int> import);
+      f(C<int, int> interface);
+      f(C<int, int> late);
+      f(C<int, int> library);
+      f(C<int, int> mixin);
+      f(C<int, int> operator);
+      f(C<int, int> part);
+      f(C<int, int> required);
+      f(C<int, int> set);
+      f(C<int, int> static);
+      f(C<int, int> typedef);
+    }
+
+    // Reserved words.
+    h(C<int, int> assert(true)); //# 40: syntax error
+    switch (1) {
+      case 0: C<int, int> break; //# 41: syntax error
+      C<int, int> case 1: break; //# 42: syntax error
+    }
+    h(C<int, int> catch); //# 43: syntax error
+    h(C<int, int> class D {}); //# 44: syntax error
+    f(C<int, int> const []);
+    while (++i < 10) {
+      C<int, int> continue; //# 45: syntax error
+    }
+    h(C<int, int> default); //# 46: syntax error
+    h(C<int, int> do); //# 47: syntax error
+    h(C<int, int> else); //# 48: syntax error
+    h(C<int, int> enum {}); //# 49: syntax error
+    h(C<int, int> extends C); //# 50: syntax error
+    f(C<int, int> false);
+    h(C<int, int> final); //# 51: syntax error
+    h(C<int, int> finally); //# 52: syntax error
+    h(C<int, int> for); //# 53: syntax error
+    h(C<int, int> if); //# 54: syntax error
+    h(C<int, int> in); //# 55: syntax error
+    h(C<int, int> is Object); //# 56: syntax error
+    g((C<int, int>) is Object);
+    f(C<int, int> new C());
+    f(C<int, int> null);
+    h(C<int, int> rethrow); //# 57: syntax error
+    h(C<int, int> return); //# 58: syntax error
+    f(C<int, int> super.toString);
+    h(C<int, int> switch); //# 59: syntax error
+    f(C<int, int> this.x);
+
+    // Right operand of `>` is a `<bitwiseOrExpression>`, and `throw 0` isn't.
+    h(C<int, int> throw 0); //# 60: syntax error
+
+    f(C<int, int> true);
+    h(C<int, int> try); //# 61: syntax error
+    h(C<int, int> var); //# 62: syntax error
+    h(C<int, int> void); //# 63: syntax error
+    h(C<int, int> while); //# 64: syntax error
+    h(C<int, int> with); //# 65: syntax error
+  }
+}
+
+void main() {
+  Test().test();
+}
diff --git a/tests/language/constructor/named_constructor_test.dart b/tests/language/constructor/named_constructor_test.dart
index 3b8af32..5b37427 100644
--- a/tests/language/constructor/named_constructor_test.dart
+++ b/tests/language/constructor/named_constructor_test.dart
@@ -22,7 +22,7 @@
   // 'Class.named' is not a type:
   new Class.named<int>().value;
   //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //             ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
 
@@ -30,32 +30,33 @@
   new Class<int>.named<int>().value;
   //             ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   new prefix.Class().value;
   // 'prefix' is not a type:
   new prefix<int>.Class().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
+  //              ^
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   new prefix.Class<int>().value;
   // 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 
   new prefix.Class.named().value;
   // 'prefix<int>.Class.named' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class.named().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   // [cfe] Expected '(' after this.
 
 
@@ -65,25 +66,25 @@
   new prefix.Class.named<int>().value;
   //               ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   // 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>.named().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 
 
   // 'prefix<int>.Class.named<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class.named<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   // [cfe] Expected '(' after this.
 
 
@@ -91,14 +92,14 @@
   new prefix.Class<int>.named<int>().value;
   //                    ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   // 'prefix<int>.Class<int>.named<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>.named<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 }
diff --git a/tests/language/constructor/reference_test.dart b/tests/language/constructor/reference_test.dart
index d781ab1..b15338b 100644
--- a/tests/language/constructor/reference_test.dart
+++ b/tests/language/constructor/reference_test.dart
@@ -15,7 +15,7 @@
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //          ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   new Foo<int>();
   new Foo<int>.bar();
   new Foo<int>.bar.baz();
@@ -27,24 +27,21 @@
   // [cfe] The method 'baz' isn't defined for the class 'Foo<int>'.
   new Foo.bar<int>();
   //      ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //         ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   new Foo.bar<int>.baz();
-  //      ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //               ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   new Foo.bar.baz<int>();
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //          ^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-  //          ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
 
   const Foo();
   const Foo.bar();
@@ -52,7 +49,7 @@
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //            ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   const Foo<int>();
   const Foo<int>.bar();
   const Foo<int>.bar.baz();
@@ -64,53 +61,46 @@
   // [cfe] The method 'baz' isn't defined for the class 'Foo<int>'.
   const Foo.bar<int>();
   //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //           ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   const Foo.bar<int>.baz();
-  //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //                 ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   const Foo.bar.baz<int>();
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //            ^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-  //            ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
 
   Foo();
   Foo.bar();
   Foo.bar.baz();
-  //  ^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'bar'.
+//        ^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// [cfe] The method 'baz' isn't defined for the class 'Foo<X> Function<X>()'.
   Foo<int>();
   Foo<int>.bar();
   Foo<int>.bar.baz();
-  // ^^^^^
-  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
-  // [cfe] This requires the 'constructor-tearoffs' language feature to be enabled.
-  //       ^
-  // [cfe] Getter not found: 'bar'.
+  //           ^^^
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+  // [cfe] The method 'baz' isn't defined for the class 'Foo<int> Function()'.
   Foo.bar<int>();
   //  ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   Foo.bar<int>.baz();
-  //  ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-//^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  //           ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+//       ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
+//             ^
+// [cfe] The method 'baz' isn't defined for the class 'Foo<int> Function()'.
   Foo.bar.baz<int>();
-  //  ^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'bar'.
+//        ^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// [cfe] The method 'baz' isn't defined for the class 'Foo<X> Function<X>()'.
 }
diff --git a/tests/language/constructor/tear_off_test.dart b/tests/language/constructor/tear_off_test.dart
index a0764886..f70127d 100644
--- a/tests/language/constructor/tear_off_test.dart
+++ b/tests/language/constructor/tear_off_test.dart
@@ -196,21 +196,21 @@
   testImplicit<GFacRedir<int> Function(int)>(GFacRedir.named, GFacRedir.named);
 
   // Using a type variable, not a constant type expression.
-  // Results are not canonicalized and not equal.
+  // Canonicalization is unspecified, but equality holds.
   (<T>() {
     // Tear off with explicit instantation to the same non-constant type.
-    Expect.notEquals(GGen<T>.new, GGen<T>.new);
-    Expect.notEquals(GGen<T>.named, GGen<T>.named);
-    Expect.notEquals(GGenRedir<T>.new, GGenRedir<T>.new);
-    Expect.notEquals(GGenRedir<T>.named, GGenRedir<T>.named);
-    Expect.notEquals(GFac<T>.new, GFac<T>.new);
-    Expect.notEquals(GFac<T>.named, GFac<T>.named);
-    Expect.notEquals(GFacRedir<T>.new, GFacRedir<T>.new);
-    Expect.notEquals(GFacRedir<T>.named, GFacRedir<T>.named);
+    Expect.equals(GGen<T>.new, GGen<T>.new);
+    Expect.equals(GGen<T>.named, GGen<T>.named);
+    Expect.equals(GGenRedir<T>.new, GGenRedir<T>.new);
+    Expect.equals(GGenRedir<T>.named, GGenRedir<T>.named);
+    Expect.equals(GFac<T>.new, GFac<T>.new);
+    Expect.equals(GFac<T>.named, GFac<T>.named);
+    Expect.equals(GFacRedir<T>.new, GFacRedir<T>.new);
+    Expect.equals(GFacRedir<T>.named, GFacRedir<T>.named);
 
     // Tear off with implicit instantiation to the same non-constant type.
     void testImplicit2<T>(T f1, T f2) {
-      Expect.notEquals(f1, f2);
+      Expect.equals(f1, f2);
     }
 
     testImplicit2<GGen<T> Function(int)>(GGen.new, GGen.new);
diff --git a/tests/language/constructor/unresolved_default_constructor_test.dart b/tests/language/constructor/unresolved_default_constructor_test.dart
index b8b5338..a82b346 100644
--- a/tests/language/constructor/unresolved_default_constructor_test.dart
+++ b/tests/language/constructor/unresolved_default_constructor_test.dart
@@ -16,5 +16,5 @@
   Expect.throws(() => new A());
   //                      ^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language/covariant/override_covariant_both_test.dart b/tests/language/covariant/override_covariant_both_test.dart
new file mode 100644
index 0000000..0a381c7
--- /dev/null
+++ b/tests/language/covariant/override_covariant_both_test.dart
@@ -0,0 +1,508 @@
+// 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 cases where an inherited method has a parameter `p0` that
+// corresponds to a parameter `p1` in the interface, where `p0` and `p1` are
+// both covariant-by-declaration.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(covariant num x) {}
+}
+
+class C0 extends B0 {
+  void m(covariant num x);
+}
+
+abstract class DD0 {
+  void m(covariant Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(num x);
+}
+
+class B1 {
+  void m(covariant int x) {}
+}
+
+class C1 extends B1 {
+  void m(covariant num x);
+}
+
+abstract class DD1 {
+  void m(covariant Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(num x);
+}
+
+class B2 {
+  void m(covariant num x) {}
+}
+
+class C2 extends B2 {
+  void m(covariant int x);
+}
+
+abstract class DD2 {
+  void m(covariant Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(covariant num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(covariant num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(covariant Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(covariant int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(covariant num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(covariant Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(covariant num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(covariant int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(covariant Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(covariant num x) {}
+}
+
+abstract class I6 {
+  void m(covariant num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(covariant Object x);
+}
+
+abstract class J6 {
+  void m(num x);
+}
+
+class D6 extends B6 implements J6, JJ6 {}
+
+class B7 {
+  void m(covariant int x) {}
+}
+
+abstract class I7 {
+  void m(covariant num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(covariant Object x);
+}
+
+abstract class J7 {
+  void m(num x);
+}
+
+class D7 extends B7 implements J7, JJ7 {}
+
+class B8 {
+  void m(covariant num x) {}
+}
+
+abstract class I8 {
+  void m(covariant int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(covariant Object x);
+}
+
+abstract class J8 {
+  void m(int x);
+}
+
+class D8 extends B8 implements J8, JJ8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(covariant num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(covariant num x);
+}
+
+abstract class DD9 {
+  void m(covariant Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(covariant int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(covariant num x);
+}
+
+abstract class DD10 {
+  void m(covariant Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(covariant num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(covariant int x);
+}
+
+abstract class DD11 {
+  void m(covariant Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(covariant num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(covariant num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(covariant Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(covariant int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(covariant num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(covariant Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(covariant num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(covariant int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(covariant Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(covariant num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(covariant num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(covariant Object x);
+}
+
+abstract class J15 {
+  void m(num x);
+}
+
+class D15 extends B15 implements J15, JJ15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(covariant int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(covariant num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(covariant Object x);
+}
+
+abstract class J16 {
+  void m(num x);
+}
+
+class D16 extends B16 implements J16, JJ16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(covariant num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(covariant int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(covariant Object x);
+}
+
+abstract class J17 {
+  void m(int x);
+}
+
+class D17 extends B17 implements J17, JJ17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_class_test.dart b/tests/language/covariant/override_covariant_class_test.dart
new file mode 100644
index 0000000..7de1b69
--- /dev/null
+++ b/tests/language/covariant/override_covariant_class_test.dart
@@ -0,0 +1,525 @@
+// 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 error detection where an inherited method has a parameter `p0`
+// that corresponds to a parameter `p1` in the interface, where `p1` is
+// covariant-by-class and -by-declaration where needed, but `p0` is not.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(num x) {}
+}
+
+abstract class CC0<X extends num> extends B0 {
+  void m(covariant X x);
+}
+
+class C0 extends CC0<num> {}
+
+abstract class DD0<X> {
+  void m(X x);
+}
+
+class D0 extends B0 implements DD0<num> {
+  void m(num x);
+}
+
+// Following the pattern, the classes `B1` .. `D1` are as shown below. They
+// are commented out, because the declaration `CC1.m` is an error, because
+// its parameter has a type which is neither a subtype nor a supertype of
+// the parameter type in `B1.m`. It is not useful to change the bound of `X`
+// in `CC1` to `int`, because that yields a set of classes with exactly the
+// same properties as those of `B0` .. `D0` (just change `num` to `int`
+// everywhere).
+//
+// class B1 {
+//   void m(int x) {}
+// }
+//
+// abstract class CC1<X extends num> extends B1 {
+//   void m(covariant X x);
+// }
+//
+// class C1 extends CC1<int> {}
+//
+// abstract class DD1<X> {
+//   void m(X x);
+// }
+//
+// class D1 extends B1 implements DD1<int> {
+//   void m(int x);
+// }
+
+class B2 {
+  void m(num x) {}
+}
+
+abstract class CC2<X extends int> extends B2 {
+  void m(covariant X x);
+}
+
+class C2 extends CC2<int> {}
+
+abstract class DD2<X> {
+  void m(X x);
+}
+
+class D2 extends B2 implements DD2<int> {
+  void m(num x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(num x) {}
+}
+
+abstract class BB3<X extends num> extends B3 {
+  void m(covariant X x);
+}
+
+class C3 extends BB3<num> {}
+
+abstract class DD3<X extends num> {
+  void m(X x);
+}
+
+class D3 extends BB3<num> implements DD3<num> {}
+
+class B4 {
+  void m(int x) {}
+}
+
+abstract class BB4<X extends int> extends B4 {
+  void m(covariant X x);
+}
+
+class C4 extends BB4<int> {}
+
+abstract class DD4<X extends num> {
+  void m(X x);
+}
+
+class D4 extends BB4<int> implements DD4<int> {}
+
+class B5 {
+  void m(num x) {}
+}
+
+abstract class BB5<X extends int> extends B5 {
+  void m(covariant X x);
+}
+
+class C5 extends BB5<int> {}
+
+abstract class DD5<X extends int> {
+  void m(X x);
+}
+
+class D5 extends BB5<int> implements DD5<int> {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(num x) {}
+}
+
+abstract class I6<X extends num> {
+  void m(X x);
+}
+
+class C6 extends B6 implements I6<num> {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6<X extends num> implements JJ6 {
+  void m(covariant X x);
+}
+
+class D6 extends B6 implements J6<num> {}
+
+class B7 {
+  void m(int x) {}
+}
+
+abstract class I7<X extends num> {
+  void m(X x);
+}
+
+class C7 extends B7 implements I7<int> {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7<X extends num> implements JJ7 {
+  void m(covariant X x);
+}
+
+class D7 extends B7 implements J7<int> {}
+
+class B8 {
+  void m(num x) {}
+}
+
+abstract class I8<X extends int> {
+  void m(X x);
+}
+
+class C8 extends B8 implements I8<int> {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8<X extends int> implements JJ8 {
+  void m(covariant X x);
+}
+
+class D8 extends B8 implements J8<int> {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+abstract class CC9<X extends num> extends B9 {
+  void m(covariant X x);
+}
+
+class C9 extends CC9<num> {}
+
+abstract class DD9<X> {
+  void m(X x);
+}
+
+class D9 extends B9 implements DD9<num> {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+abstract class CC10<X extends int> extends B10 {
+  void m(covariant X x);
+}
+
+class C10 extends CC10<int> {}
+
+abstract class DD10<X> {
+  void m(X x);
+}
+
+class D10 extends B10 implements DD10<int> {
+  void m(int x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+abstract class CC11<X extends int> extends B11 {
+  void m(covariant X x);
+}
+
+class C11 extends CC11<int> {}
+
+abstract class DD11<X> {
+  void m(X x);
+}
+
+class D11 extends B11 implements DD11<int> {
+  void m(num x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12<X extends num> extends B12 {
+  void m(covariant X x);
+}
+
+class C12 extends BB12<num> {}
+
+abstract class DD12<X extends num> {
+  void m(X x);
+}
+
+class D12 extends BB12<num> implements DD12<num> {}
+
+class A13 {}
+
+mixin M13 {
+  void m(int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13<X extends int> extends B13 {
+  void m(covariant X x);
+}
+
+class C13 extends BB13<int> {}
+
+abstract class DD13<X extends num> {
+  void m(X x);
+}
+
+class D13 extends BB13<int> implements DD13<int> {}
+
+class A14 {}
+
+mixin M14 {
+  void m(num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14<X extends int> extends B14 {
+  void m(covariant X x);
+}
+
+class C14 extends BB14<int> {}
+
+abstract class DD14<X extends int> {
+  void m(X x);
+}
+
+class D14 extends BB14<int> implements DD14<int> {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15<X extends num> {
+  void m(X x);
+}
+
+class C15 extends B15 implements I15<num> {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15<X extends num> implements JJ15 {
+  void m(covariant X x);
+}
+
+class D15 extends B15 implements J15<num> {}
+
+class A16 {}
+
+mixin M16 {
+  void m(int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16<X extends num> {
+  void m(X x);
+}
+
+class C16 extends B16 implements I16<int> {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16<X extends num> implements JJ16 {
+  void m(covariant X x);
+}
+
+class D16 extends B16 implements J16<int> {}
+
+class A17 {}
+
+mixin M17 {
+  void m(num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17<X extends int> {
+  void m(X x);
+}
+
+class C17 extends B17 implements I17<int> {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17<X extends int> implements JJ17 {
+  void m(covariant X x);
+}
+
+class D17 extends B17 implements J17<int> {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  CC0<Object?> x0 = C0();
+  Expect.throws(() => x0.m(o));
+  DD0<Object?> y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  // Group 1 was eliminated, see comment containing `class B1`.
+
+  CC2<Object?> x2 = C2();
+  Expect.throws(() => x2.m(o));
+  DD2<Object?> y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  BB3<Object?> x3 = C3();
+  Expect.throws(() => x3.m(o));
+  DD3<Object?> y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  BB4<Object?> x4 = C4();
+  Expect.throws(() => x4.m(o));
+  DD4<Object?> y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  BB5<Object?> x5 = C5();
+  Expect.throws(() => x5.m(o));
+  DD5<Object?> y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  I6<Object?> x6 = C6();
+  Expect.throws(() => x6.m(o));
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  I7<Object?> x7 = C7();
+  Expect.throws(() => x7.m(o));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  I8<Object?> x8 = C8();
+  Expect.throws(() => x8.m(o));
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  CC9<Object?> x9 = C9();
+  Expect.throws(() => x9.m(o));
+  DD9<Object?> y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  CC10<Object?> x10 = C10();
+  Expect.throws(() => x10.m(o));
+  DD10<Object?> y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  CC11<Object?> x11 = C11();
+  Expect.throws(() => x11.m(o));
+  DD11<Object?> y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  BB12<Object?> x12 = C12();
+  Expect.throws(() => x12.m(o));
+  DD12<Object?> y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  BB13<Object?> x13 = C13();
+  Expect.throws(() => x13.m(o));
+  DD13<Object?> y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  BB14<Object?> x14 = C14();
+  Expect.throws(() => x14.m(o));
+  DD14<Object?> y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  I15<Object?> x15 = C15();
+  Expect.throws(() => x15.m(o));
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  I16<Object?> x16 = C16();
+  Expect.throws(() => x16.m(o));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  I17<Object?> x17 = C17();
+  Expect.throws(() => x17.m(o));
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_interface_test.dart b/tests/language/covariant/override_covariant_interface_test.dart
new file mode 100644
index 0000000..c0fdafb
--- /dev/null
+++ b/tests/language/covariant/override_covariant_interface_test.dart
@@ -0,0 +1,511 @@
+// 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 the handling of a situation where an inherited method has a parameter
+// `p0` that corresponds to a parameter `p1` in the interface, where `p1`
+// is covariant-by-declaration, but `p0` is not. In this case, the inherited
+// method may need to be overridden by an implicitly induced stub, because
+// it must perform a dynamic type check on its parameter, and the inherited
+// method doesn't do that.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(num x) {}
+}
+
+class C0 extends B0 {
+  void m(covariant num x);
+}
+
+abstract class DD0 {
+  void m(Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(covariant num x);
+}
+
+class B1 {
+  void m(int x) {}
+}
+
+class C1 extends B1 {
+  void m(covariant num x);
+}
+
+abstract class DD1 {
+  void m(Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(covariant num x);
+}
+
+class B2 {
+  void m(num x) {}
+}
+
+class C2 extends B2 {
+  void m(covariant int x);
+}
+
+abstract class DD2 {
+  void m(Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(covariant int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(covariant num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(covariant num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(covariant int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(num x) {}
+}
+
+abstract class I6 {
+  void m(covariant num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6 implements JJ6 {
+  void m(covariant num x);
+}
+
+class D6 extends B6 implements J6 {}
+
+class B7 {
+  void m(int x) {}
+}
+
+abstract class I7 {
+  void m(covariant num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7 implements JJ7 {
+  void m(covariant num x);
+}
+
+class D7 extends B7 implements J7 {}
+
+class B8 {
+  void m(num x) {}
+}
+
+abstract class I8 {
+  void m(covariant int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8 implements JJ8 {
+  void m(covariant int x);
+}
+
+class D8 extends B8 implements J8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(covariant num x);
+}
+
+abstract class DD9 {
+  void m(Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(covariant num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(covariant num x);
+}
+
+abstract class DD10 {
+  void m(Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(covariant num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(covariant int x);
+}
+
+abstract class DD11 {
+  void m(Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(covariant int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(covariant num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(covariant num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(covariant int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(covariant num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15 implements JJ15 {
+  void m(covariant num x);
+}
+
+class D15 extends B15 implements J15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(covariant num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16 implements JJ16 {
+  void m(covariant num x);
+}
+
+class D16 extends B16 implements J16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(covariant int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17 implements JJ17 {
+  void m(covariant int x);
+}
+
+class D17 extends B17 implements J17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/override_covariant_superclass_test.dart b/tests/language/covariant/override_covariant_superclass_test.dart
new file mode 100644
index 0000000..5c78272
--- /dev/null
+++ b/tests/language/covariant/override_covariant_superclass_test.dart
@@ -0,0 +1,508 @@
+// 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 cases where an inherited method has a parameter `p0` that
+// corresponds to a parameter `p1` in the interface, where `p0` is
+// covariant-by-declaration, but `p1` is not.
+//
+// The library contains groups of classes depending on each other, and there
+// is no connection between the groups. Each group has a number (0 .. 17)
+// which is used at the end of most names in the group. For example, the first
+// group consists of the classes `B0`, `C0`, `DD0`, and `D0`. The group number
+// is shown as `#` in the remainder of this comment.
+//
+// In every group, the classes `C#` and `D#` are concrete leaf classes
+// exhibiting the situation of interest, that is, an inherited implementation
+// of the method `m` as well as a signature for `m` in the interface of the
+// class, with a parameter that has the above-mentioned properties.
+//
+// The parameter type in the implementation and the parameter type in the
+// method signature is (`num`, `num`), (`int`, `num`) and (`num`, `int`),
+// respectively, such that we test a covariant, contravariant and invariant
+// parameter type relationship in the overrides.
+//
+// In every group, the class `B#` contains the implementation of the method
+// `m` which is inherited. Class `A#` and mixin `M#`, present in some groups,
+// are used to provide the method implementation to `B#` using a mixin
+// application.
+//
+// The classes `BB#`, `I#`, `DD#`, `J#`, and `JJ#` are helper classes for `C#`
+// and `#D`.
+//
+// Class `BB#` is a subclass of `B#` and a superclass of `C#` and `D#`; it
+// introduces the method signature of `m` into the superclass chain.
+//
+// Class `DD#` is implemented by `D#`. Classes `I#`, `J#`, and `JJ#` are
+// implemented by `C#` or `D#`. Class `DD#` and `JJ#` ensure that `m` can be
+// called with an argument of type `Object`. Class `I#` and `J#` introduce the
+// method signature to `C#` or `D#` via an `implements` relation.
+//
+// Finally, `main` contains test cases where the dynamic type check is
+// incurred, using variable types and arguments that make the type check
+// fail whenever possible.
+//
+// The comments below about 'Superclass' and 'interface' indicate the way in
+// which the superclass of `C#` and `D#` is structured (it can be a regular
+// class or a mixin), and the way in which the superinterface that provides
+// the method signature is structured (it can be declared in `C#` or `D#`,
+// "immediate", or it can be obtained via an `extends` relation or via an
+// `implements` relation).
+
+import 'package:expect/expect.dart';
+
+// Superclass: regular, interface: immediate.
+
+class B0 {
+  void m(covariant num x) {}
+}
+
+class C0 extends B0 {
+  void m(num x);
+}
+
+abstract class DD0 {
+  void m(Object x);
+}
+
+class D0 extends B0 implements DD0 {
+  void m(num x);
+}
+
+class B1 {
+  void m(covariant int x) {}
+}
+
+class C1 extends B1 {
+  void m(num x);
+}
+
+abstract class DD1 {
+  void m(Object x);
+}
+
+class D1 extends B1 implements DD1 {
+  void m(num x);
+}
+
+class B2 {
+  void m(covariant num x) {}
+}
+
+class C2 extends B2 {
+  void m(int x);
+}
+
+abstract class DD2 {
+  void m(Object x);
+}
+
+class D2 extends B2 implements DD2 {
+  void m(int x);
+}
+
+// Superclass: regular, interface: extends.
+
+class B3 {
+  void m(covariant num x) {}
+}
+
+abstract class BB3 extends B3 {
+  void m(num x);
+}
+
+class C3 extends BB3 {}
+
+abstract class DD3 {
+  void m(Object x);
+}
+
+class D3 extends BB3 implements DD3 {}
+
+class B4 {
+  void m(covariant int x) {}
+}
+
+abstract class BB4 extends B4 {
+  void m(num x);
+}
+
+class C4 extends BB4 {}
+
+abstract class DD4 {
+  void m(Object x);
+}
+
+class D4 extends BB4 implements DD4 {}
+
+class B5 {
+  void m(covariant num x) {}
+}
+
+abstract class BB5 extends B5 {
+  void m(int x);
+}
+
+class C5 extends BB5 {}
+
+abstract class DD5 {
+  void m(Object x);
+}
+
+class D5 extends BB5 implements DD5 {}
+
+// Superclass: regular, interface: implements.
+
+class B6 {
+  void m(covariant num x) {}
+}
+
+abstract class I6 {
+  void m(num x);
+}
+
+class C6 extends B6 implements I6 {}
+
+abstract class JJ6 {
+  void m(Object x);
+}
+
+abstract class J6 {
+  void m(num x);
+}
+
+class D6 extends B6 implements J6, JJ6 {}
+
+class B7 {
+  void m(covariant int x) {}
+}
+
+abstract class I7 {
+  void m(num x);
+}
+
+class C7 extends B7 implements I7 {}
+
+abstract class JJ7 {
+  void m(Object x);
+}
+
+abstract class J7 {
+  void m(num x);
+}
+
+class D7 extends B7 implements J7, JJ7 {}
+
+class B8 {
+  void m(covariant num x) {}
+}
+
+abstract class I8 {
+  void m(int x);
+}
+
+class C8 extends B8 implements I8 {}
+
+abstract class JJ8 {
+  void m(Object x);
+}
+
+abstract class J8 {
+  void m(int x);
+}
+
+class D8 extends B8 implements J8, JJ8 {}
+
+// Superclass: mixed-in, interface: immediate.
+
+class A9 {}
+
+mixin M9 {
+  void m(covariant num x) {}
+}
+
+class B9 extends A9 with M9 {}
+
+class C9 extends B9 {
+  void m(num x);
+}
+
+abstract class DD9 {
+  void m(Object x);
+}
+
+class D9 extends B9 implements DD9 {
+  void m(num x);
+}
+
+class A10 {}
+
+mixin M10 {
+  void m(covariant int x) {}
+}
+
+class B10 extends A10 with M10 {}
+
+class C10 extends B10 {
+  void m(num x);
+}
+
+abstract class DD10 {
+  void m(Object x);
+}
+
+class D10 extends B10 implements DD10 {
+  void m(num x);
+}
+
+class A11 {}
+
+mixin M11 {
+  void m(covariant num x) {}
+}
+
+class B11 extends A11 with M11 {}
+
+class C11 extends B11 {
+  void m(int x);
+}
+
+abstract class DD11 {
+  void m(Object x);
+}
+
+class D11 extends B11 implements DD11 {
+  void m(int x);
+}
+
+// Superclass: mixed-in, interface: extends.
+
+class A12 {}
+
+mixin M12 {
+  void m(covariant num x) {}
+}
+
+class B12 extends A12 with M12 {}
+
+abstract class BB12 extends B12 {
+  void m(num x);
+}
+
+class C12 extends BB12 {}
+
+abstract class DD12 {
+  void m(Object x);
+}
+
+class D12 extends BB12 implements DD12 {}
+
+class A13 {}
+
+mixin M13 {
+  void m(covariant int x) {}
+}
+
+class B13 extends A13 with M13 {}
+
+abstract class BB13 extends B13 {
+  void m(num x);
+}
+
+class C13 extends BB13 {}
+
+abstract class DD13 {
+  void m(Object x);
+}
+
+class D13 extends BB13 implements DD13 {}
+
+class A14 {}
+
+mixin M14 {
+  void m(covariant num x) {}
+}
+
+class B14 extends A14 with M14 {}
+
+abstract class BB14 extends B14 {
+  void m(int x);
+}
+
+class C14 extends BB14 {}
+
+abstract class DD14 {
+  void m(Object x);
+}
+
+class D14 extends BB14 implements DD14 {}
+
+// Superclass: mixed-in, interface: implements.
+
+class A15 {}
+
+mixin M15 {
+  void m(covariant num x) {}
+}
+
+class B15 extends A15 with M15 {}
+
+abstract class I15 {
+  void m(num x);
+}
+
+class C15 extends B15 implements I15 {}
+
+abstract class JJ15 {
+  void m(Object x);
+}
+
+abstract class J15 {
+  void m(num x);
+}
+
+class D15 extends B15 implements J15, JJ15 {}
+
+class A16 {}
+
+mixin M16 {
+  void m(covariant int x) {}
+}
+
+class B16 extends A16 with M16 {}
+
+abstract class I16 {
+  void m(num x);
+}
+
+class C16 extends B16 implements I16 {}
+
+abstract class JJ16 {
+  void m(Object x);
+}
+
+abstract class J16 {
+  void m(num x);
+}
+
+class D16 extends B16 implements J16, JJ16 {}
+
+class A17 {}
+
+mixin M17 {
+  void m(covariant num x) {}
+}
+
+class B17 extends A17 with M17 {}
+
+abstract class I17 {
+  void m(int x);
+}
+
+class C17 extends B17 implements I17 {}
+
+abstract class JJ17 {
+  void m(Object x);
+}
+
+abstract class J17 {
+  void m(int x);
+}
+
+class D17 extends B17 implements J17, JJ17 {}
+
+void main() {
+  // Demonstrate that each leaf class requires and has a dynamic
+  // type check (which is most likely placed in a forwarding stub).
+  const o = Object();
+
+  B0 x0 = C0();
+  x0.m(0.0);
+  DD0 y0 = D0();
+  Expect.throws(() => y0.m(o));
+
+  C1 x1 = C1();
+  Expect.throws(() => x1.m(1.1));
+  DD1 y1 = D1();
+  Expect.throws(() => y1.m(o));
+
+  B2 x2 = C2();
+  x2.m(2.2);
+  DD2 y2 = D2();
+  Expect.throws(() => y2.m(o));
+
+  B3 x3 = C3();
+  x3.m(3.3);
+  DD3 y3 = D3();
+  Expect.throws(() => y3.m(o));
+
+  C4 x4 = C4();
+  Expect.throws(() => x4.m(4.4));
+  DD4 y4 = D4();
+  Expect.throws(() => y4.m(o));
+
+  B5 x5 = C5();
+  x5.m(5.5);
+  DD5 y5 = D5();
+  Expect.throws(() => y5.m(o));
+
+  B6 x6 = C6();
+  x6.m(6.6);
+  JJ6 y6 = D6();
+  Expect.throws(() => y6.m(o));
+
+  C7 x7 = C7();
+  Expect.throws(() => x7.m(7.7));
+  JJ7 y7 = D7();
+  Expect.throws(() => y7.m(o));
+
+  B8 x8 = C8();
+  x8.m(8.8);
+  JJ8 y8 = D8();
+  Expect.throws(() => y8.m(o));
+
+  B9 x9 = C9();
+  x9.m(1.1);
+  DD9 y9 = D9();
+  Expect.throws(() => y9.m(o));
+
+  C10 x10 = C10();
+  Expect.throws(() => x10.m(10.10));
+  DD10 y10 = D10();
+  Expect.throws(() => y10.m(o));
+
+  B11 x11 = C11();
+  x11.m(11.11);
+  DD11 y11 = D11();
+  Expect.throws(() => y11.m(o));
+
+  B12 x12 = C12();
+  x12.m(12.12);
+  DD12 y12 = D12();
+  Expect.throws(() => y12.m(o));
+
+  C13 x13 = C13();
+  Expect.throws(() => x13.m(13.13));
+  DD13 y13 = D13();
+  Expect.throws(() => y13.m(o));
+
+  B14 x14 = C14();
+  x14.m(14.14);
+  DD14 y14 = D14();
+  Expect.throws(() => y14.m(o));
+
+  B15 x15 = C15();
+  x15.m(15.15);
+  JJ15 y15 = D15();
+  Expect.throws(() => y15.m(o));
+
+  C16 x16 = C16();
+  Expect.throws(() => x16.m(16.16));
+  JJ16 y16 = D16();
+  Expect.throws(() => y16.m(o));
+
+  B17 x17 = C17();
+  x17.m(17.17);
+  JJ17 y17 = D17();
+  Expect.throws(() => y17.m(o));
+}
diff --git a/tests/language/covariant/type_parameter_test.dart b/tests/language/covariant/type_parameter_test.dart
index 7bff58b..4bcc97e 100644
--- a/tests/language/covariant/type_parameter_test.dart
+++ b/tests/language/covariant/type_parameter_test.dart
@@ -23,16 +23,18 @@
 main() {
   // Dynamic method calls should always have their type arguments checked.
   dynamic d = new C();
-  Expect.throwsTypeError(() => d.f1<Object>()); //# 01: ok
+  Expect.throwsTypeError(() => d.f1<Object>());
 
-  // Closure calls should have any type arguments marked "genericCovariantImpl"
-  // checked.
+  // Closurization is subject to a caller-side check. The naive static type of
+  // `b.f2` is `void Function<U extends Object>()`, but the run-time type is
+  // `void Function<U extends A>()`, and that is not a subtype of the former.
   B<Object> b = new C();
-  void Function<U extends Object>() f = b.f2;
-  Expect.throwsTypeError(() => f<Object>()); //# 02: ok
+  Expect.throws(() => b.f2);
 
   // Interface calls should have any type arguments marked
   // "genericCovariantImpl" checked provided that the corresponding type
   // argument on the interface target is marked "genericCovariantInterface".
-  Expect.throwsTypeError(() => b.f2<Object>()); //# 03: ok
+  B<A> b2 = new C();
+  Function g = b2.f2;
+  Expect.throwsTypeError(() => g<Object>());
 }
diff --git a/tests/language/deferred/load_library_wrong_args_test.dart b/tests/language/deferred/load_library_wrong_args_test.dart
index 3903e19..78914d7 100644
--- a/tests/language/deferred/load_library_wrong_args_test.dart
+++ b/tests/language/deferred/load_library_wrong_args_test.dart
@@ -3,7 +3,7 @@
 void main() {
   // Loadlibrary should be called without arguments.
   lib.loadLibrary(10);
-//^
+//    ^
 // [cfe] 'loadLibrary' takes no arguments.
 //                ^^
 // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
diff --git a/tests/language/enum/private_test.dart b/tests/language/enum/private_test.dart
index a24fec3..7a8dfa3 100644
--- a/tests/language/enum/private_test.dart
+++ b/tests/language/enum/private_test.dart
@@ -21,5 +21,5 @@
   Expect.throwsNoSuchMethodError(() => Enum2._A);
   //                                         ^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_ENUM_CONSTANT
-  // [cfe] Getter not found: '_A'.
+  // [cfe] Member not found: '_A'.
 }
diff --git a/tests/language/explicit_type_instantiation_parsing_test.dart b/tests/language/explicit_type_instantiation_parsing_test.dart
new file mode 100644
index 0000000..4397a2c
--- /dev/null
+++ b/tests/language/explicit_type_instantiation_parsing_test.dart
@@ -0,0 +1,321 @@
+// 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.
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+// Test parsing around ambiguities in grammar for explicit type instantiation.
+//
+// If an expression is followed by a  `<`
+// which is then followed by potential type arguments and a `>`,
+// it is parsed as type arguments if the next token is one of
+// `)`, `}`, `]`, `:`, `;`, `,`, `(`, `.`, `==` or `!=`.
+// Otherwise it's (attempted) parsed as a `<` infix operator.
+// This decision is made no matter whether what otherwise follows
+// is valid for that choice.
+
+typedef X<_> = Class;
+
+typedef Z<_, __> = Class;
+
+const Object? v = null;
+const dynamic d = null;
+
+class Class {
+  Class([_]);
+  Class.named([_]);
+
+  static Class get instance => Class();
+
+  Class get value => this;
+  Class call([_]) => this;
+}
+
+int f1<X>([_]) => 0;
+int f2<X, Y>([_]) => 0;
+int f3<X, Y, Z>([_]) => 0;
+
+// Type of the instantiation of the functions above.
+typedef F = int Function([Object? _]);
+
+void expect1<T extends Object?>(T? a) {}
+void expect2(Object? a, Object? b) {}
+void expect3(Object? a, Object? b, Object? c) {}
+void expect4(Object? a, Object? b, Object? c, Object? d) {}
+
+// Anything goes!
+// We only care about parsing here, if it parses,
+// all objects support all the operations.
+extension <T extends Object?> on T {
+  T get self => this;
+  dynamic get any => null;
+  Object? operator *(_) => null;
+  Object? operator -(_) => null;
+  Object? operator <(_) => null;
+  Object? operator >(_) => null;
+  Object? operator >>(_) => null;
+  Object? operator >>>(_) => null;
+  Object? operator [](_) => null;
+  Object? call<R, S>([_]) => null;
+  bool get asBool => true;
+  int get prop => 0;
+  set prop(int _) {}
+}
+
+void main() {
+  Object? as = "gotcha!"; // Built-in identifier declared as variable.
+
+  // Validly parsed as type instantiation.
+  // Continuation tokens are: `(`, `.`, `==` and `!=`.
+  expect1<Class>(Z<X, X>(2));
+  expect1<Class>(Z<X, X>.named(2));
+  expect1<Function>(Z<X, X>.named); // constructor tear-off
+  expect1<bool>(Z<X, X> == Class);
+  expect1<bool>(Z<X, X> != Class);
+  // Stop tokens are `)`, `,`, `}`, `]`, `:` and `;`.
+  expect1<Type>(Z<X, X>);
+  expect1<Type>(Z<X, X>,);
+  expect1<Set<Type>>({Z<X, X>});
+  expect1<List<Type>>([Z<X, X>]);
+  expect1<Type>(v.asBool ? Z<X, X> : int);
+  expect1<Map<Type, int>>({Z<X, X>: 1});
+  {
+    Type _ = Z<X, X>;
+  }
+
+  // Validly parsed as generic function instantiation.
+  expect1<int>(f2<X, X>(1));
+  expect1<F>(f2<X, X>.self);
+  expect1<int>(f2<X, X>.self());
+  expect1<bool>(f2<X, X> == null);
+  expect1<bool>(f2<X, X> != null);
+
+  expect1<F>(f2<X, X>);
+  expect1<F>(f2<X, X>,);
+  expect1<Set<F>>({f2<X, X>});
+  expect1<List<F>>([f2<X, X>]);
+  expect1<F>(v.asBool ? f2<X, X> : ([_]) => 2);
+  expect1<Map<F, int>>({f2<X, X> : 2});
+  {
+    F _ = f2<X, X>;
+  }
+
+  // Also works if ending in `>>` or `>>>`
+  expect1<Class>(Z<X, Z<X, X>>(2));
+  expect1<Class>(Z<X, Z<X, X>>.named(2));
+  expect1<Function>(Z<X, Z<X, X>>.named); // constructor tear-off
+  expect1<bool>(Z<X, Z<X, X>> == Class);
+  expect1<bool>(Z<X, Z<X, X>> != Class);
+  // Stop tokens are `)`, `,`, `}`, `]`, `:` and `;`.
+  expect1<Type>(Z<X, Z<X, X>>);
+  expect1<Type>(Z<X, Z<X, X>>,);
+  expect1<Set<Type>>({Z<X, Z<X, X>>});
+  expect1<List<Type>>([Z<X, Z<X, X>>]);
+  expect1<Type>(v.asBool ? Z<X, Z<X, X>> : int);
+  expect1<Map<Type, int>>({Z<X, Z<X, X>> : 1});
+  {
+    Type _ = Z<X, Z<X, X>>;
+  }
+
+  // Validly parsed as generic function instantiation.
+  expect1<int>(f2<X, Z<X, X>>(1));
+  expect1<F>(f2<X, Z<X, X>>.self);
+  expect1<int>(f2<X, Z<X, X>>.self());
+  expect1<bool>(f2<X, Z<X, X>> == null);
+  expect1<bool>(f2<X, Z<X, X>> != null);
+
+  expect1<F>(f2<X, Z<X, X>>);
+  expect1<F>(f2<X, Z<X, X>>,);
+  expect1<Set<F>>({f2<X, Z<X, X>>});
+  expect1<List<F>>([f2<X, Z<X, X>>]);
+  expect1<F>(v.asBool ? f2<X, Z<X, X>> : ([_]) => 2);
+  expect1<Map<F, int>>({f2<X, Z<X, X>> : 2});
+  {
+    F _ = f2<X, Z<X, X>>;
+  }
+
+  expect1<Class>(Z<X, Z<X, Z<X, X>>>(2));
+  expect1<Class>(Z<X, Z<X, Z<X, X>>>.named(2));
+  expect1<Function>(Z<X, Z<X, Z<X, X>>>.named); // constructor tear-off
+  expect1<bool>(Z<X, Z<X, Z<X, X>>> == Class);
+  expect1<bool>(Z<X, Z<X, Z<X, X>>> != Class);
+  // Stop tokens are `)`, `,`, `}`, `]`, `:` and `;`.
+  expect1<Type>(Z<X, Z<X, Z<X, X>>>);
+  expect1<Type>(Z<X, Z<X, Z<X, X>>>,);
+  expect1<Set<Type>>({Z<X, Z<X, Z<X, X>>>});
+  expect1<List<Type>>([Z<X, Z<X, Z<X, X>>>]);
+  expect1<Type>(v.asBool ? Z<X, Z<X, Z<X, X>>> : int);
+  expect1<Map<Type, int>>({Z<X, Z<X, Z<X, X>>>: 1});
+  {
+    Type _ = Z<X, Z<X, Z<X, X>>>;
+  }
+
+  // Validly parsed as generic function instantiation.
+  expect1<int>(f2<X, Z<X, Z<X, X>>>(1));
+  expect1<F>(f2<X, Z<X, Z<X, X>>>.self);
+  expect1<int>(f2<X, Z<X, Z<X, X>>>.self());
+  expect1<bool>(f2<X, Z<X, Z<X, X>>> == null);
+  expect1<bool>(f2<X, Z<X, Z<X, X>>> != null);
+
+  expect1<F>(f2<X, Z<X, Z<X, X>>>);
+  expect1<F>(f2<X, Z<X, Z<X, X>>>,);
+  expect1<Set<F>>({f2<X, Z<X, Z<X, X>>>});
+  expect1<List<F>>([f2<X, Z<X, Z<X, X>>>]);
+  expect1<F>(v.asBool ? f2<X, Z<X, Z<X, X>>> : ([_]) => 2);
+  expect1<Map<F, int>>({f2<X, Z<X, Z<X, X>>> : 2});
+  {
+    F _ = f2<X, Z<X, Z<X, X>>>;
+  }
+
+  // Parsed as instantiation, can't access statics on instantiated type literal.
+  expect1<Class>(Z<X, X>.instance);
+  //                     ^^^^^^^^
+  // [cfe] Cannot access static member on an instantiated generic class.
+  // [analyzer] unspecified
+
+
+  // Not valid <typeList> inside `<..>`, so always parsed as operators.
+  // The expect2 function requires two arguments, so it would be a type
+  // error to parse as type arguments.
+  expect2(Z < X, 2 > (2));
+  expect2(Z < 2, X > (2));
+  expect2(Z < X, 2 > (2));
+  expect2(Z < X, v! > (2));
+  expect3(Z < X, Z < X, 2 >> (2));
+  expect4(Z < X, Z < X, Z < X, 2 >>> (2));
+  // `as` is a built-in identifier, so it cannot be a *type*,
+  // preventing the lookahead from `<` from matching <typeList>,
+  // and therefore it's parsed as an operator.
+  expect2(Z < X, as > (2));
+  expect3(Z < X, Z < X, as >> (2));
+  expect4(Z < X, Z < X, Z < X, as >>> (2));
+
+  // Validly parsed as operators due to disambiguation.
+  expect2(Z < X, X > X);
+  expect2(Z < X, X > 2);
+  expect2(Z < X, X > .2); // That `.` is part of the number literal, not a `.` token.
+  expect2(Z < X, X > -2);
+  expect2(Z < X, X > as);
+  expect2(Z < X, X > [1]);
+  expect2(Z < X, X > ![1].asBool);
+  expect2(Z < X, X > ++[1].prop);
+  expect2(Z < X, X > <int>[1]);
+
+  // Some would be valid as instantiation too, as proven by parenthefication.
+  expect1((Z<X, X>) - 2);
+  expect1((Z<X, X>)[1]);
+  expect1((Z<X, X>)![1].asBool);  // ignore: unnecessary_non_null_assertion
+  //       ^
+  // [cfe] Operand of null-aware operation '!' has type 'Type' which excludes null.
+
+  // Works if the type argument would end in `>>` or `>>>` too.
+  expect3(Z < X, Z < X, X >> X);
+  expect3(Z < X, Z < X, X >> 2);
+  expect3(Z < X, Z < X, X >> .2);
+  expect3(Z < X, Z < X, X >> -2);
+  expect3(Z < X, Z < X, X >> as);
+  expect3(Z < X, Z < X, X >> [1]);
+  expect3(Z < X, Z < X, X >> ![1].asBool);
+  expect3(Z < X, Z < X, X >> ++[1].prop);
+
+  expect4(Z < X, Z < X, Z < X, X >>> X);
+  expect4(Z < X, Z < X, Z < X, X >>> 2);
+  expect4(Z < X, Z < X, Z < X, X >>> .2);
+  expect4(Z < X, Z < X, Z < X, X >>> -2);
+  expect4(Z < X, Z < X, Z < X, X >>> as);
+  expect4(Z < X, Z < X, Z < X, X >>> [1]);
+  expect4(Z < X, Z < X, Z < X, X >>> ![1].asBool);
+  expect4(Z < X, Z < X, Z < X, X >>> ++[1].prop);
+
+  // No valid parsing either way.
+
+  // Content of type arguments not valid types.
+  // Cannot parse as operators since grammar doesn't allow chaining.
+  X<2>(2);
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  X<2>;
+  //  ^
+  // [cfe] Expected an identifier, but got ';'.
+  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  X<2>.instance; // Not type argument.
+  //  ^
+  // [cfe] Expected an identifier, but got '.'.
+  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  X<2>.any;
+  //  ^
+  // [cfe] Expected an identifier, but got '.'.
+  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  // This would be invalid even if `X` had an `any` member. See next.
+  X<X>.any; // Invalid, Class does not have any static `any` member.
+  //   ^^^
+  // [cfe] Member not found: 'any'.
+  // [analyzer] unspecified
+
+  X<X>.instance; // Does have static `instance` member, can't access this way.
+  //   ^^^^^^^^
+  // [cfe] Cannot access static member on an instantiated generic class.
+  // [analyzer] unspecified
+
+  // Parse error.
+
+  X<X>2;
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  // Doesn't parse as operators, would be valid if type arguments.
+
+  // The following `-` forces operators, but those can't parse like this.
+  X<X>-1;
+  // ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  // Parsed as operators on function instantiation too (parsing doesn't know.)
+  f1<X> - 1;
+  //  ^
+  // [cfe] A comparison expression can't be an operand of another comparison expression.
+  // [analyzer] SYNTACTIC_ERROR.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+
+  // Parsed as a generic instantiation, but `v` is not generic function or type.
+  // Would be valid if parsed as operators.
+  expect1(v < X, X > (2));
+  //        ^^^^^^^^
+  // [cfe] unspecified
+  // [analyzer] unspecified
+
+  // Parsed as a generic instantiation, but `d` is not generic function or type.
+  // Being dynamic doesn't help.
+  // Would be valid if parsed as operators.
+  expect1(v < X, X > (2));
+  //        ^^^^^^^^
+  // [cfe] unspecified
+  // [analyzer] unspecified
+
+  // Valid only if parenthesized.
+  expect1((Z < X, X >) * 2);
+
+  // 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
+}
diff --git a/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart b/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
index abb4bb3..db533d6 100644
--- a/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
+++ b/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
@@ -65,7 +65,7 @@
   E0(c0)[0];
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_OPERATOR
-  // [cfe] Getter not found: '[]'.
+  // [cfe] Method not found: '[]'.
   E0(c0)[0] = 0;
 
   c0[0] += 0;
@@ -180,7 +180,6 @@
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
 //   ^
 // [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object?>' and neither is more specific.
-//   ^
 // [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object?>' and neither is more specific.
 
   c1b[0]++;
@@ -188,7 +187,6 @@
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
 //   ^
 // [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object?>' and neither is more specific.
-//   ^
 // [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object?>' and neither is more specific.
 
   C1<Object> c1c = C1<Object>(); // E1A is more specific.
diff --git a/tests/language/factory/and_instance_variable_test.dart b/tests/language/factory/and_instance_variable_test.dart
index b35c290..408cd60 100644
--- a/tests/language/factory/and_instance_variable_test.dart
+++ b/tests/language/factory/and_instance_variable_test.dart
@@ -10,7 +10,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 }
 
 class B implements A {
@@ -21,7 +21,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 
   B() {}
 }
@@ -34,7 +34,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 }
 
 main() {
diff --git a/tests/language/factory/factory_test.dart b/tests/language/factory/factory_test.dart
index 7b0c2a8..56987b9 100644
--- a/tests/language/factory/factory_test.dart
+++ b/tests/language/factory/factory_test.dart
@@ -54,10 +54,7 @@
   LinkFactory._();
 }
 
-
 main() {
   FactoryTest.testMain();
   var a = new Link<int>.create();
-  //          ^
-  // [cfe] Expected 0 type arguments.
 }
diff --git a/tests/language/factory/redirection3_cyclic_test.dart b/tests/language/factory/redirection3_cyclic_test.dart
index ab115cc..289d71b 100644
--- a/tests/language/factory/redirection3_cyclic_test.dart
+++ b/tests/language/factory/redirection3_cyclic_test.dart
@@ -6,8 +6,6 @@
 
 class A {
   factory A.foo() = B;
-  //      ^
-  // [cfe] Cyclic definition of factory 'A.foo'.
 }
 
 class B implements A {
@@ -16,9 +14,13 @@
 
 class C implements B {
   factory C.bar() = C.foo;
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.bar'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   factory C.foo() = C.bar();
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.foo'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   //                  ^^^
diff --git a/tests/language/generic/instantiate_type_variable_test.dart b/tests/language/generic/instantiate_type_variable_test.dart
index 486a95b..d69d8a4 100644
--- a/tests/language/generic/instantiate_type_variable_test.dart
+++ b/tests/language/generic/instantiate_type_variable_test.dart
@@ -10,7 +10,7 @@
     return new T();
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-    // [cfe] Method not found: 'T'.
+    // [cfe] Couldn't find constructor 'T'.
   }
 }
 
diff --git a/tests/language/generic/metadata_in_function_body_test.dart b/tests/language/generic/metadata_in_function_body_test.dart
index 8b64190..de229e5 100644
--- a/tests/language/generic/metadata_in_function_body_test.dart
+++ b/tests/language/generic/metadata_in_function_body_test.dart
@@ -17,11 +17,11 @@
   @C()
   @C<dynamic>()
   //^
-  // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
   // [cfe] An annotation can't use type arguments.
   @C<int>()
   //^
-  // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
   // [cfe] An annotation can't use type arguments.
   int i = 0;
   ignore(i);
diff --git a/tests/language/generic/metadata_test.dart b/tests/language/generic/metadata_test.dart
index 70156d6..851dda9 100644
--- a/tests/language/generic/metadata_test.dart
+++ b/tests/language/generic/metadata_test.dart
@@ -13,10 +13,10 @@
 @C()
 @C<dynamic>()
 //^
-// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
 // [cfe] An annotation can't use type arguments.
 @C<int>()
 //^
-// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
 // [cfe] An annotation can't use type arguments.
 main() {}
diff --git a/tests/language/generic_methods/explicit_instantiated_tearoff_test.dart b/tests/language/generic_methods/explicit_instantiated_tearoff_test.dart
index 5813d60..8028216 100644
--- a/tests/language/generic_methods/explicit_instantiated_tearoff_test.dart
+++ b/tests/language/generic_methods/explicit_instantiated_tearoff_test.dart
@@ -65,12 +65,8 @@
       .expectStaticType<Exactly<int Function(String, [String?])>>();
     this.extInstanceMethod<int, String>
       .expectStaticType<Exactly<int Function(String, [String?])>>();
-
     Expect.identical(staticMethod<int, String>, staticTearOff);
-
-    // Extension instance methods are not equal unless identical.
-    Expect.notEquals(
-        extInstanceMethod<int, String>, this.extInstanceMethod<int, String>);
+    // Extension instance methods do not specify equality.
   }
 }
 
@@ -134,9 +130,7 @@
   Expect.equals(
       o.mixinInstanceMethod<int, String>, o.mixinInstanceMethod<int, String>);
 
-  // Instantiated extension methods are not equal unless they are identical.
-  Expect.notEquals(
-      o.extInstanceMethod<int, String>, o.extInstanceMethod<int, String>);
+  // Instantiated extension methods do not specify equality.
 
   // And not canonicalized where they shouldn't (different types).
   Expect.notEquals(toplevel<int, String>, toplevel<num, String>);
@@ -155,12 +149,10 @@
     Expect.equals(C.staticMethod<T, String>, C.staticMethod<T, String>);
     Expect.equals(M.staticMethod<T, String>, M.staticMethod<T, String>);
     Expect.equals(E.staticMethod<T, String>, E.staticMethod<T, String>);
-    Expect.notEquals(local<T, String>, local<T, String>);
     Expect.equals(toplevel<int, T>, toplevel<int, T>);
     Expect.equals(C.staticMethod<int, T>, C.staticMethod<int, T>);
     Expect.equals(M.staticMethod<int, T>, M.staticMethod<int, T>);
     Expect.equals(E.staticMethod<int, T>, E.staticMethod<int, T>);
-    Expect.notEquals(local<int, T>, local<int, T>);
   }<int>());
 
   o.tearOffsOnThis();
diff --git a/tests/language/if_null/assignment_behavior_test.dart b/tests/language/if_null/assignment_behavior_test.dart
index 144ff7d..ab3f20c 100644
--- a/tests/language/if_null/assignment_behavior_test.dart
+++ b/tests/language/if_null/assignment_behavior_test.dart
@@ -126,7 +126,6 @@
 //  ^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL
 // [cfe] Operand of null-aware operation '??=' has type 'int' which excludes null.
-//  ^
 // [cfe] The setter 'finalOne' isn't defined for the class 'C'.
 //               ^^^^
 // [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
@@ -191,18 +190,15 @@
 //  ^
 // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
 // [cfe] Can't assign to the final variable 'l'.
-//  ^
 // [cfe] Operand of null-aware operation '??=' has type 'int' which excludes null.
-    //    ^^^^
-    // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-    //    ^^^^
-    // [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
+//        ^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+// [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
   }
   C ??= null;
 //^
 // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
 // [cfe] Can't assign to a type literal.
-//^
 // [cfe] Operand of null-aware operation '??=' has type 'Type' which excludes null.
   h ??= null;
 //^
@@ -270,7 +266,7 @@
   check(1, () => h.c?.x ??= bad(), ['h.C.x']);
   //               ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: 'c'.
+  // [cfe] Undefined name 'c'.
   yGetValue = 1;
   check(1, () => C?.x ??= y, ['C.x', 'y', 'C.x=1']);
   //             ^
diff --git a/tests/language/import/combinators2_test.dart b/tests/language/import/combinators2_test.dart
index c1ee2fb..00972fe 100644
--- a/tests/language/import/combinators2_test.dart
+++ b/tests/language/import/combinators2_test.dart
@@ -15,5 +15,5 @@
   print(ugly);
   //    ^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Getter not found: 'ugly'.
+  // [cfe] Undefined name 'ugly'.
 }
diff --git a/tests/language/import/self_test.dart b/tests/language/import/self_test.dart
index f724a60..8c10105 100644
--- a/tests/language/import/self_test.dart
+++ b/tests/language/import/self_test.dart
@@ -19,5 +19,5 @@
   p._x;
   //^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: '_x'.
+  // [cfe] Undefined name '_x'.
 }
diff --git a/tests/language/instance/method2_test.dart b/tests/language/instance/method2_test.dart
index de92967..91e5df0 100644
--- a/tests/language/instance/method2_test.dart
+++ b/tests/language/instance/method2_test.dart
@@ -14,7 +14,7 @@
     return instMethod;
     //     ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-    // [cfe] Getter not found: 'instMethod'.
+    // [cfe] Undefined name 'instMethod'.
   }
 }
 
diff --git a/tests/language/interface/injection2_test.dart b/tests/language/interface/injection2_test.dart
index e49d5bd..dfe39f6 100644
--- a/tests/language/interface/injection2_test.dart
+++ b/tests/language/interface/injection2_test.dart
@@ -22,5 +22,5 @@
 main() {
   Expect.isFalse(new C() is S);
   //                 ^
-  // [cfe] Method not found: 'C'.
+  // [cfe] Couldn't find constructor 'C'.
 }
diff --git a/tests/language/interface/interface_test.dart b/tests/language/interface/interface_test.dart
index b05e0a6..1a825cb 100644
--- a/tests/language/interface/interface_test.dart
+++ b/tests/language/interface/interface_test.dart
@@ -9,7 +9,7 @@
 
 abstract class Bi implements Ai {
   factory Bi() = InterfaceTest;
-  //      ^
+  //             ^
   // [cfe] Factory redirects to class 'InterfaceTest', which is abstract and can't be instantiated.
   //             ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR
diff --git a/tests/language/label/label8_test.dart b/tests/language/label/label8_test.dart
index 5d37693..f03d2a9 100644
--- a/tests/language/label/label8_test.dart
+++ b/tests/language/label/label8_test.dart
@@ -14,26 +14,19 @@
     case 111:
 //  ^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] 'case' can't be used as an identifier because it's a keyword.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
-// [cfe] Expected ';' after this.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Getter not found: 'case'.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.MISSING_STATEMENT
+// [cfe] 'case' can't be used as an identifier because it's a keyword.
+// [cfe] Expected ';' after this.
+// [cfe] Undefined name 'case'.
 //       ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 //          ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-//          ^
 // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got ':'.
-//          ^
 // [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
+// [cfe] Expected an identifier, but got ':'.
 // [cfe] Unexpected token ':'.
       while (false) {
         break L;
diff --git a/tests/language/malformed/malformed_test.dart b/tests/language/malformed/malformed_test.dart
index e4b59a9..eabe11f 100644
--- a/tests/language/malformed/malformed_test.dart
+++ b/tests/language/malformed/malformed_test.dart
@@ -106,11 +106,11 @@
   new undeclared_prefix.Unresolved();
   //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+  // [cfe] Couldn't find constructor 'undeclared_prefix.Unresolved'.
   new undeclared_prefix.Unresolved<int>();
   //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+  // [cfe] Couldn't find constructor 'undeclared_prefix.Unresolved'.
 
   try {
     throw 'foo';
diff --git a/tests/language/metadata/type_parameter_scope_inner_test.dart b/tests/language/metadata/type_parameter_scope_inner_test.dart
new file mode 100644
index 0000000..d88c124
--- /dev/null
+++ b/tests/language/metadata/type_parameter_scope_inner_test.dart
@@ -0,0 +1,66 @@
+// 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 metadata on a type parameter cannot refer to declarations in an
+// inner scope.  See https://github.com/dart-lang/language/issues/1790.
+
+class Annotation {
+  const Annotation(dynamic d);
+}
+
+class Class<@Annotation(foo) T> {
+//                      ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+}
+
+void function<@Annotation(foo) T>(dynamic foo) {
+//                        ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  dynamic foo;
+}
+
+extension Extension<@Annotation(foo) T> on Class<T> {
+//                              ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+
+  void extensionMethod<@Annotation(foo) T, @Annotation(bar) U>() {}
+  //                                                   ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+  // [cfe] Undefined name 'bar'.
+}
+
+class C {
+  void method<@Annotation(foo) T, @Annotation(bar) U>(dynamic foo) {
+  //                      ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+  // [cfe] Undefined name 'foo'.
+    dynamic foo;
+  }
+
+  static void bar() {}
+}
+
+mixin Mixin<@Annotation(foo) T> {
+//                      ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+}
+
+typedef Typedef<@Annotation(foo) T> = void Function<foo>();
+//                          ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
diff --git a/tests/language/metadata/type_parameter_scope_other_test.dart b/tests/language/metadata/type_parameter_scope_other_test.dart
new file mode 100644
index 0000000..d411e2f
--- /dev/null
+++ b/tests/language/metadata/type_parameter_scope_other_test.dart
@@ -0,0 +1,51 @@
+// 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 identifiers in type parameter metadata can refer to other type
+// parameters in the same declaration; they are in scope and take precedence
+// over top level declarations, even if this leads to compile errors.
+
+/// Top level declaration of T; nothing should resolve to this.
+void T() {}
+
+class Annotation {
+  const Annotation(dynamic d);
+}
+
+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.
+
+void function<T, @Annotation(T) U>() {}
+//                           ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
+
+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.
+
+class C {
+  void method<T, @Annotation(T) U>() {}
+  //                         ^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [cfe] Type variables can't be used as constants.
+}
+
+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.
+
+typedef void Typedef1<T, @Annotation(T) U>(T t, U u);
+//                                   ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
+
+typedef Typedef2<T, @Annotation(T) U> = void Function(T t, U u);
+//                              ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
diff --git a/tests/language/method/not_found_test.dart b/tests/language/method/not_found_test.dart
index 883cd6f..3da919c 100644
--- a/tests/language/method/not_found_test.dart
+++ b/tests/language/method/not_found_test.dart
@@ -10,11 +10,10 @@
 // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
   static const field = const B();
   //                         ^
-  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
-  // [cfe] Method not found: 'B'.
-  //                         ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
   // [cfe] Can't access 'this' in a field initializer to read 'B'.
+  // [cfe] Couldn't find constructor 'B'.
 }
 
 class B {
diff --git a/tests/language/mixin/illegal_constructor_test.dart b/tests/language/mixin/illegal_constructor_test.dart
index a4a8723..5b7306d 100644
--- a/tests/language/mixin/illegal_constructor_test.dart
+++ b/tests/language/mixin/illegal_constructor_test.dart
@@ -97,21 +97,21 @@
   new D6();
 
   new C0(1,2,3);
+  //    ^
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   //     ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //    ^^^^^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   new C0.named();
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'C0.named'.
+  // [cfe] Couldn't find constructor 'C0.named'.
   new D0(1,2,3);
+  //    ^
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   //     ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //    ^^^^^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   new D0.named();
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'D0.named'.
+  // [cfe] Couldn't find constructor 'D0.named'.
 }
diff --git a/tests/language/mixin/illegal_static_access_test.dart b/tests/language/mixin/illegal_static_access_test.dart
index 8cd792d..6523d32 100644
--- a/tests/language/mixin/illegal_static_access_test.dart
+++ b/tests/language/mixin/illegal_static_access_test.dart
@@ -21,9 +21,9 @@
   Expect.throwsNoSuchMethodError(() => C.foo());
   //                                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.foo'.
+  // [cfe] Member not found: 'C.foo'.
   Expect.throwsNoSuchMethodError(() => C.bar());
   //                                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.bar'.
+  // [cfe] Member not found: 'C.bar'.
 }
diff --git a/tests/language/new/create_unresolved_type_test.dart b/tests/language/new/create_unresolved_type_test.dart
index 16fb7a6..d908816 100644
--- a/tests/language/new/create_unresolved_type_test.dart
+++ b/tests/language/new/create_unresolved_type_test.dart
@@ -6,5 +6,5 @@
   new F<int>();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'F'.
+  // [cfe] Couldn't find constructor 'F'.
 }
diff --git a/tests/language/new/expression_type_args_test.dart b/tests/language/new/expression_type_args_test.dart
index da303e3..ca4459e 100644
--- a/tests/language/new/expression_type_args_test.dart
+++ b/tests/language/new/expression_type_args_test.dart
@@ -8,13 +8,12 @@
   m1() => new T();
   //          ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'T'.
+  // [cfe] Couldn't find constructor 'T'.
   static m2() => new T();
   //                 ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'T'.
-  //                 ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Couldn't find constructor 'T'.
 
   // OK when used within instance method, but not in static method.
   m3() => new A<T>();
diff --git a/tests/language/new/prefix_test.dart b/tests/language/new/prefix_test.dart
index 8e5c7bc..064f8d9 100644
--- a/tests/language/new/prefix_test.dart
+++ b/tests/language/new/prefix_test.dart
@@ -8,5 +8,5 @@
   return new prefix();
   //         ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix'.
+  // [cfe] Couldn't find constructor 'prefix'.
 }
diff --git a/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart
new file mode 100644
index 0000000..5fd4721
--- /dev/null
+++ b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart
@@ -0,0 +1,202 @@
+// 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.
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import '../../static_type_helper.dart';
+
+// This test checks whether a local boolean variable can be used to perform type
+// promotion, if that variable is implicitly typed.
+//
+// This test confirms that once the "constructor tearoffs" language feature is
+// enabled, initializer expressions on implicitly typed variables are no longer
+// ignored for the purposes of type promotion
+// (i.e. https://github.com/dart-lang/language/issues/1785 is fixed).
+
+parameterUnmodified(int? x) {
+  {
+    late final b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+parameterModifiedLater(int? x, int? y) {
+  x = y;
+  {
+    late final b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+localVariableInitialized(int? y) {
+  int? x = y;
+  {
+    late final b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+localVariableModifiedLater(int? y) {
+  int? x;
+  x = y;
+  {
+    late final b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We don't promote based on the initializers of late locals anyhow, because
+    // we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+main() {
+  parameterUnmodified(null);
+  parameterUnmodified(0);
+  parameterModifiedLater(null, null);
+  parameterModifiedLater(null, 0);
+  localVariableInitialized(null);
+  localVariableInitialized(0);
+  localVariableModifiedLater(null);
+  localVariableModifiedLater(0);
+}
diff --git a/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_test.dart b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_test.dart
new file mode 100644
index 0000000..4038020
--- /dev/null
+++ b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_test.dart
@@ -0,0 +1,205 @@
+// 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.13
+
+import '../../static_type_helper.dart';
+
+// This test checks whether a local boolean variable can be used to perform type
+// promotion, if that variable is implicitly typed.
+//
+// Due to https://github.com/dart-lang/language/issues/1785, initializer
+// expressions on implicitly typed variables are ignored for the purposes of
+// type promotion (however, later assignments to those variables still do
+// influence promotion).  To avoid introducing breaking language changes, we
+// intend to preserve this behavior until a specific Dart language version.
+// This test verifies that for code that is not opted in to the newer behavior,
+// the old (buggy) behavior persists.
+
+parameterUnmodified(int? x) {
+  {
+    late final b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+parameterModifiedLater(int? x, int? y) {
+  x = y;
+  {
+    late final b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+localVariableInitialized(int? y) {
+  int? x = y;
+  {
+    late final b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+localVariableModifiedLater(int? y) {
+  int? x;
+  x = y;
+  {
+    late final b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    late var b = x != null;
+    // We wouldn't promote based on the initializers of late locals anyhow,
+    // because we don't know when they execute.
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    late var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    final b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    final b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+  {
+    var b = x != null;
+    if (b) x.expectStaticType<Exactly<int?>>();
+  }
+  {
+    var b;
+    b = x != null;
+    if (b) x.expectStaticType<Exactly<int>>();
+  }
+}
+
+main() {
+  parameterUnmodified(null);
+  parameterUnmodified(0);
+  parameterModifiedLater(null, null);
+  parameterModifiedLater(null, 0);
+  localVariableInitialized(null);
+  localVariableInitialized(0);
+  localVariableModifiedLater(null);
+  localVariableModifiedLater(0);
+}
diff --git a/tests/language/nonfunction_type_aliases/mixed/usage_object_error_test.dart b/tests/language/nonfunction_type_aliases/mixed/usage_object_error_test.dart
index af098be..686039f 100644
--- a/tests/language/nonfunction_type_aliases/mixed/usage_object_error_test.dart
+++ b/tests/language/nonfunction_type_aliases/mixed/usage_object_error_test.dart
@@ -28,28 +28,27 @@
 abstract class D2 extends C with T {}
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
 
 abstract class D3 implements T {}
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] 'Object' can't be used in both 'extends' and 'implements' clauses.
 
 abstract class D4 = C with T;
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
 
 main() {
   T.named();
 //  ^^^^^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Member not found: 'Object.named'.
 
   T.staticMethod<T>();
 //  ^^^^^^^^^^^^
 // [analyzer] unspecified
-// [cfe] Method not found: 'Object.staticMethod'.
-//  ^^^^^^^^^^^^
-// [cfe] A constructor invocation can't have type arguments on the constructor name.
+// [cfe] A constructor invocation can't have type arguments after the constructor name.
+// [cfe] Member not found: 'Object.staticMethod'.
 }
diff --git a/tests/language/nonfunction_type_aliases/private_names/private_name_static_methods_error_test.dart b/tests/language/nonfunction_type_aliases/private_names/private_name_static_methods_error_test.dart
index 0e77c92..8a10020 100644
--- a/tests/language/nonfunction_type_aliases/private_names/private_name_static_methods_error_test.dart
+++ b/tests/language/nonfunction_type_aliases/private_names/private_name_static_methods_error_test.dart
@@ -14,15 +14,15 @@
     PublicClass._privateStaticMethod();
 //              ^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-// [cfe] Method not found: '_PrivateClass._privateStaticMethod'.
+// [cfe] Member not found: '_PrivateClass._privateStaticMethod'.
     AlsoPublicClass._privateStaticMethod();
 //                  ^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-// [cfe] Method not found: '_PrivateClass._privateStaticMethod'.
+// [cfe] Member not found: '_PrivateClass._privateStaticMethod'.
     PublicGenericClassOfInt._privateStaticMethod();
 //                          ^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-// [cfe] Method not found: '_PrivateGenericClass._privateStaticMethod'.
+// [cfe] Member not found: '_PrivateGenericClass._privateStaticMethod'.
   }
 }
 
diff --git a/tests/language/nonfunction_type_aliases/usage_object_error_test.dart b/tests/language/nonfunction_type_aliases/usage_object_error_test.dart
index 8fad251..373466c 100644
--- a/tests/language/nonfunction_type_aliases/usage_object_error_test.dart
+++ b/tests/language/nonfunction_type_aliases/usage_object_error_test.dart
@@ -25,28 +25,27 @@
 abstract class D2 extends C with T {}
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
 
 abstract class D3 implements T {}
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] 'Object' can't be used in both 'extends' and 'implements' clauses.
 
 abstract class D4 = C with T;
 //             ^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
 
 main() {
   T.named();
 //  ^^^^^
 // [analyzer] unspecified
-// [cfe] unspecified
+// [cfe] Member not found: 'Object.named'.
 
   T.staticMethod<T>();
 //  ^^^^^^^^^^^^
 // [analyzer] unspecified
-// [cfe] Method not found: 'Object.staticMethod'.
-//  ^^^^^^^^^^^^
-// [cfe] A constructor invocation can't have type arguments on the constructor name.
+// [cfe] A constructor invocation can't have type arguments after the constructor name.
+// [cfe] Member not found: 'Object.staticMethod'.
 }
diff --git a/tests/language/null_aware/access_test.dart b/tests/language/null_aware/access_test.dart
index b5e4b17..3307440 100644
--- a/tests/language/null_aware/access_test.dart
+++ b/tests/language/null_aware/access_test.dart
@@ -60,7 +60,6 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //              ^
     // [cfe] A value of type 'int?' can't be assigned to a variable of type 'String?'.
-    //              ^
     // [cfe] Operand of null-aware operation '?.' has type 'C' which excludes null.
     //                     ^^
     // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
@@ -128,9 +127,9 @@
   Expect.throwsNoSuchMethodError(() => C?.hashCode);
   //                                      ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'hashCode'.
+  // [cfe] Member not found: 'hashCode'.
   Expect.throwsNoSuchMethodError(() => h.C?.hashCode);
   //                                        ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'hashCode'.
+  // [cfe] Member not found: 'hashCode'.
 }
diff --git a/tests/language/null_aware/assignment_test.dart b/tests/language/null_aware/assignment_test.dart
index 02c3506..59397b3 100644
--- a/tests/language/null_aware/assignment_test.dart
+++ b/tests/language/null_aware/assignment_test.dart
@@ -205,13 +205,13 @@
     bname?.v += 2;
 //  ^
 // [cfe] Operand of null-aware operation '?.' has type 'B' which excludes null.
-    //   ^^
-    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
-    //     ^
-    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
-    // [cfe] The getter 'v' isn't defined for the class 'B'.
-    // [cfe] The setter 'v' isn't defined for the class 'B'.
+//       ^^
+// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
+//         ^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
+// [cfe] The getter 'v' isn't defined for the class 'B'.
+// [cfe] The setter 'v' isn't defined for the class 'B'.
   }
   {
     D d = new D(new E());
@@ -250,6 +250,7 @@
     // [cfe] The class 'D' cannot be null.
     //                        ^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+    //                          ^
     // [cfe] A value of type 'C?' can't be assigned to a variable of type 'int'.
   }
   {
diff --git a/tests/language/number/identifier_test.dart b/tests/language/number/identifier_test.dart
index d66bf6b..94105ea 100644
--- a/tests/language/number/identifier_test.dart
+++ b/tests/language/number/identifier_test.dart
@@ -9,32 +9,26 @@
   Expect.isTrue(2 is int);
   //                 ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                 ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.equals(2, 2 as int);
   //                    ^^^
-  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
   Expect.isTrue(-2 is int);
   //                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.equals(-2, -2 as int);
   //                      ^^^
-  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                      ^^^
   // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
   Expect.isTrue(0x10 is int);
   //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.isTrue(-0x10 is int);
   //                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
 
   // "a" will be part of hex literal, the following "s" is an error.
@@ -76,14 +70,14 @@
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'd'.
+// [cfe] Undefined name 'd'.
   1D;
 //^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'D'.
+// [cfe] Undefined name 'D'.
   Expect.throwsNoSuchMethodError(() => 1.d+2);
   //                                     ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
@@ -98,14 +92,14 @@
 // [cfe] Expected ';' after this.
 //   ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'd'.
+// [cfe] Undefined name 'd'.
   1.1D;
 //^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 //   ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'D'.
+// [cfe] Undefined name 'D'.
   1e;
 //^
 // [cfe] Numbers in exponential notation should always contain an exponent (an integer number with an optional sign).
@@ -117,5 +111,5 @@
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'x'.
+// [cfe] Undefined name 'x'.
 }
diff --git a/tests/language/prefix/shadow_test.dart b/tests/language/prefix/shadow_test.dart
index 1af4c58..2584165 100644
--- a/tests/language/prefix/shadow_test.dart
+++ b/tests/language/prefix/shadow_test.dart
@@ -14,7 +14,7 @@
     //  ^
     // [analyzer] COMPILE_TIME_ERROR.PREFIX_SHADOWED_BY_LOCAL_DECLARATION
     //    ^
-    // [cfe] Method not found: 'T.Library10'.
+    // [cfe] Couldn't find constructor 'T.Library10'.
   }
 }
 
diff --git a/tests/language/prefix/transitive_import_prefix_test.dart b/tests/language/prefix/transitive_import_prefix_test.dart
index 3365f2f..e0ac001 100644
--- a/tests/language/prefix/transitive_import_prefix_test.dart
+++ b/tests/language/prefix/transitive_import_prefix_test.dart
@@ -8,13 +8,13 @@
   new lib11.Library11(1);
   //  ^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'lib11.Library11'.
+  // [cfe] Couldn't find constructor 'lib11.Library11'.
   lib11.Library11.static_func();
 //^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'lib11'.
+// [cfe] Undefined name 'lib11'.
   lib11.Library11.static_fld;
 //^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'lib11'.
+// [cfe] Undefined name 'lib11'.
 }
diff --git a/tests/language/prefix/transitive_import_test.dart b/tests/language/prefix/transitive_import_test.dart
index ef53584..d17a963 100644
--- a/tests/language/prefix/transitive_import_test.dart
+++ b/tests/language/prefix/transitive_import_test.dart
@@ -11,11 +11,11 @@
   new lib12.Library11(1);
   //        ^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'Library11'.
+  // [cfe] Couldn't find constructor 'Library11'.
 
   // Variable should not be visible.
   lib12.top_level11;
   //    ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: 'top_level11'.
+  // [cfe] Undefined name 'top_level11'.
 }
diff --git a/tests/language/private/access_test.dart b/tests/language/private/access_test.dart
index 6e10558..8d7fbc4 100644
--- a/tests/language/private/access_test.dart
+++ b/tests/language/private/access_test.dart
@@ -13,25 +13,23 @@
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
 // [cfe] Method not found: '_function'.
   private._function();
-//^
-// [cfe] Method not found: '_function'.
 //        ^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
+// [cfe] Method not found: '_function'.
   new _Class();
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: '_Class'.
+  // [cfe] Couldn't find constructor '_Class'.
   private._Class();
-//^
-// [cfe] Method not found: '_Class'.
 //        ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
+// [cfe] Method not found: '_Class'.
   new Class._constructor();
   //        ^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'Class._constructor'.
+  // [cfe] Couldn't find constructor 'Class._constructor'.
   new private.Class._constructor();
   //                ^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'Class._constructor'.
+  // [cfe] Couldn't find constructor 'Class._constructor'.
 }
diff --git a/tests/language/redirecting/factory_malbounded_test.dart b/tests/language/redirecting/factory_malbounded_test.dart
index 29dd27875..e930ff7 100644
--- a/tests/language/redirecting/factory_malbounded_test.dart
+++ b/tests/language/redirecting/factory_malbounded_test.dart
@@ -11,10 +11,7 @@
   Foo.create() {}
 }
 
-class Bar<
-    T
-            extends num
-    > extends Foo<T> {
+class Bar<T extends num> extends Foo<T> {
   factory Bar() {
     return new Bar<T>.create();
   }
@@ -24,6 +21,4 @@
 
 main() {
   new Foo<String>();
-  //  ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Bar'.
 }
diff --git a/tests/language/regress/regress15606_test.dart b/tests/language/regress/regress15606_test.dart
index f367e9e..ebee1e7 100644
--- a/tests/language/regress/regress15606_test.dart
+++ b/tests/language/regress/regress15606_test.dart
@@ -16,7 +16,7 @@
       Unresolved.
 //    ^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'Unresolved'.
+// [cfe] Undefined name 'Unresolved'.
         bar(
       // Make dart2js generate a call to setRuntimeTypeInfo.
       new Foo<int>(),
diff --git a/tests/language/regress/regress21793_test.dart b/tests/language/regress/regress21793_test.dart
index e4fec2e..3219387 100644
--- a/tests/language/regress/regress21793_test.dart
+++ b/tests/language/regress/regress21793_test.dart
@@ -16,5 +16,5 @@
   print(new A()(499));
   //        ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language/regress/regress23038_test.dart b/tests/language/regress/regress23038_test.dart
index 0967098..15e6699 100644
--- a/tests/language/regress/regress23038_test.dart
+++ b/tests/language/regress/regress23038_test.dart
@@ -11,7 +11,6 @@
     = C<C<T>>
     //^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
-    // [cfe] The constructor function type 'C<C<T>> Function()' isn't a subtype of 'C<T> Function()'.
   ;
 }
 
diff --git a/tests/language/regress/regress34495_test.dart b/tests/language/regress/regress34495_test.dart
index 2e69b38..822dc9d 100644
--- a/tests/language/regress/regress34495_test.dart
+++ b/tests/language/regress/regress34495_test.dart
@@ -5,7 +5,7 @@
 final foo = A<B>.foo();
 //          ^
 // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-// [cfe] Method not found: 'A'.
+// [cfe] Couldn't find constructor 'A'.
 //            ^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'B' isn't a type.
diff --git a/tests/language/regress/regress46867_test.dart b/tests/language/regress/regress46867_test.dart
new file mode 100644
index 0000000..7999cc8
--- /dev/null
+++ b/tests/language/regress/regress46867_test.dart
@@ -0,0 +1,32 @@
+// 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/46867
+
+import 'package:expect/expect.dart';
+
+class Interface {
+  covariant Object x = 'from Interface';
+}
+
+mixin Mixin implements Interface {}
+
+class BaseClass {
+  static var getterCallCount = 0;
+  static var setterCallCount = 0;
+  Object get x => getterCallCount++;
+  set x(Object value) => setterCallCount++;
+}
+
+class SubClass extends BaseClass with Mixin {}
+
+void main() {
+  Expect.equals(0, BaseClass.getterCallCount);
+  SubClass().x;
+  Expect.equals(1, BaseClass.getterCallCount);
+
+  Expect.equals(0, BaseClass.setterCallCount);
+  SubClass().x = 42;
+  Expect.equals(1, BaseClass.setterCallCount);
+}
diff --git a/tests/language/static/field3_test.dart b/tests/language/static/field3_test.dart
index f794e68..2c72cd2 100644
--- a/tests/language/static/field3_test.dart
+++ b/tests/language/static/field3_test.dart
@@ -14,11 +14,11 @@
     var x = Foo.x;
     //          ^
     // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
-    // [cfe] Getter not found: 'x'.
+    // [cfe] Member not found: 'x'.
     var m = Foo.m;
     //          ^
     // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
-    // [cfe] Getter not found: 'm'.
+    // [cfe] Member not found: 'm'.
     Foo.m = 1;
     //  ^
     // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
diff --git a/tests/language/string/interpolate1_test.dart b/tests/language/string/interpolate1_test.dart
index 12bf4af..16920f6 100644
--- a/tests/language/string/interpolate1_test.dart
+++ b/tests/language/string/interpolate1_test.dart
@@ -12,5 +12,5 @@
   // [cfe] A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).
   //                  ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Getter not found: 'x'.
+  // [cfe] Undefined name 'x'.
 }
diff --git a/tests/language/type_object/explicit_instantiated_type_literal_test.dart b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
index 6b3b07f..5d036e6 100644
--- a/tests/language/type_object/explicit_instantiated_type_literal_test.dart
+++ b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
@@ -45,9 +45,7 @@
   Expect.identical(C<int>, prefix.C<int>);
 
   (<T extends num>() {
-    Expect.notIdentical(C<T>, C<T>);
     Expect.equals(C<T>, C<T>);
-    Expect.notIdentical(prefix.C<T>, prefix.C<T>);
     Expect.equals(prefix.C<T>, prefix.C<T>);
   }<int>());
 }
diff --git a/tests/language/type_variable/conflict2_test.dart b/tests/language/type_variable/conflict2_test.dart
index f43e609..cdcf576 100644
--- a/tests/language/type_variable/conflict2_test.dart
+++ b/tests/language/type_variable/conflict2_test.dart
@@ -15,15 +15,14 @@
   foo() => T();
   //       ^
   // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
-  // [cfe] Method not found: 'T'.
+  // [cfe] Couldn't find constructor 'T'.
 
   // T is in scope, even in static context. Compile-time error to call this.T().
   static bar() => T();
   //              ^
   // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
-  // [cfe] Method not found: 'T'.
-  //              ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Couldn't find constructor 'T'.
 
   // X is not in scope. NoSuchMethodError.
   static baz() => X();
@@ -35,7 +34,7 @@
   static qux() => C.T();
   //                ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.T'.
+  // [cfe] Member not found: 'C.T'.
 
   // Class '_Type' has no instance method 'call': NoSuchMethodError.
   quux() => (T)();
diff --git a/tests/language/typedef/aliased_constructor_tear_off_test.dart b/tests/language/typedef/aliased_constructor_tear_off_test.dart
index 7d51dfb..9adb357 100644
--- a/tests/language/typedef/aliased_constructor_tear_off_test.dart
+++ b/tests/language/typedef/aliased_constructor_tear_off_test.dart
@@ -209,23 +209,23 @@
   );
 
   (<T extends num>() {
-    // Non-constant type instantiation prevents canonicalization and equality.
-    // Also not constant.
-    Expect.notEquals(Direct<T>.new, Direct<T>.new);
-    Expect.notEquals(Direct<T>.named, Direct<T>.named);
-    Expect.notEquals(Bounded<T>.new, Bounded<T>.new);
-    Expect.notEquals(Bounded<T>.named, Bounded<T>.named);
-    Expect.notEquals(Wrapping<T>.new, Wrapping<T>.new);
-    Expect.notEquals(Wrapping<T>.named, Wrapping<T>.named);
-    Expect.notEquals(Extra<T, String>.new, Extra<T, String>.new);
-    Expect.notEquals(Extra<T, String>.named, Extra<T, String>.named);
+    // Non-constant type instantiation implies non-constant expressions.
+    // Canonicalization is unspecified, but equality holds.
+    Expect.equals(Direct<T>.new, Direct<T>.new);
+    Expect.equals(Direct<T>.named, Direct<T>.named);
+    Expect.equals(Bounded<T>.new, Bounded<T>.new);
+    Expect.equals(Bounded<T>.named, Bounded<T>.named);
+    Expect.equals(Wrapping<T>.new, Wrapping<T>.new);
+    Expect.equals(Wrapping<T>.named, Wrapping<T>.named);
+    Expect.equals(Extra<T, String>.new, Extra<T, String>.new);
+    Expect.equals(Extra<T, String>.named, Extra<T, String>.named);
     // Also if the non-constant type doesn't occur in the expansion.
-    Expect.notEquals(Extra<int, T>.new, Extra<int, T>.new);
-    Expect.notEquals(Extra<int, T>.named, Extra<int, T>.named);
+    Expect.equals(Extra<int, T>.new, Extra<int, T>.new);
+    Expect.equals(Extra<int, T>.named, Extra<int, T>.named);
 
-    Expect.notEquals(Swapped<T, int>.new, Swapped<T, int>.new);
-    Expect.notEquals(Swapped<T, int>.named, Swapped<T, int>.named);
-    Expect.notEquals(Swapped<int, T>.new, Swapped<int, T>.new);
-    Expect.notEquals(Swapped<int, T>.named, Swapped<int, T>.named);
+    Expect.equals(Swapped<T, int>.new, Swapped<T, int>.new);
+    Expect.equals(Swapped<T, int>.named, Swapped<T, int>.named);
+    Expect.equals(Swapped<int, T>.new, Swapped<int, T>.new);
+    Expect.equals(Swapped<int, T>.named, Swapped<int, T>.named);
   }<int>());
 }
diff --git a/tests/language/typedef/aliased_type_literal_instantiation_test.dart b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
index 25dc8f9..d30640f 100644
--- a/tests/language/typedef/aliased_type_literal_instantiation_test.dart
+++ b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
@@ -23,9 +23,11 @@
 
 void main() {
   const Type co = C<Object?>;
+  const Type cd = C<dynamic>;
   const Type cn = C<num>;
   const Type ci = C<int>;
   const Type cco = C<C<Object?>>;
+  const Type ccd = C<C<dynamic>>;
   const Type cci = C<C<int>>;
   const Type s1 = Special;
   const Type d1 = Direct;
@@ -42,16 +44,16 @@
   const Type e3 = Extra<int, bool>;
 
   Expect.identical(s1, ci);
-  Expect.identical(d1, co);
+  Expect.identical(d1, cd);
   Expect.identical(d2, co);
   Expect.identical(d3, ci);
   Expect.identical(b1, cn);
   Expect.identical(b2, cn);
   Expect.identical(b3, ci);
-  Expect.identical(w1, cco);
+  Expect.identical(w1, ccd);
   Expect.identical(w2, cco);
   Expect.identical(w3, cci);
-  Expect.identical(e1, co);
+  Expect.identical(e1, cd);
   Expect.identical(e2, co);
   Expect.identical(e3, ci);
 
diff --git a/tests/language/variable/bad_initializer1_test.dart b/tests/language/variable/bad_initializer1_test.dart
index 0070cd8..8f49f2c 100644
--- a/tests/language/variable/bad_initializer1_test.dart
+++ b/tests/language/variable/bad_initializer1_test.dart
@@ -18,7 +18,7 @@
       elems
 //    ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-// [cfe] Getter not found: 'elems'.
+// [cfe] Undefined name 'elems'.
     ],
     "a",
     "b"
diff --git a/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart b/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
index e3e51d3..ec250c0 100644
--- a/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
+++ b/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
@@ -10,7 +10,6 @@
 //     ^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_CLASS
 // [cfe] 'out' isn't a type.
-//     ^
 // [cfe] Type 'out' not found.
 //             ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -21,23 +20,21 @@
   // [cfe] The operator '<' isn't defined for the class 'Type'.
   //   ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Expected ';' after this.
-  //   ^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-  // [cfe] Getter not found: 'out'.
+  // [cfe] Expected ';' after this.
+  // [cfe] Undefined name 'out'.
   //             ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_OPERATOR
   // [cfe] The operator '>' isn't defined for the class 'Type'.
   //               ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 }
 
 void B(out foo) {}
 //     ^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_CLASS
 // [cfe] 'out' isn't a type.
-//     ^
 // [cfe] Type 'out' not found.
 
 class C<in out X, out out Y> {}
diff --git a/tests/language_2/async/return_types_test.dart b/tests/language_2/async/return_types_test.dart
index d976b5bc..0e97782 100644
--- a/tests/language_2/async/return_types_test.dart
+++ b/tests/language_2/async/return_types_test.dart
@@ -60,7 +60,6 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 //^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 // [cfe] 'sync*' and 'async*' can't return a value.
 }
 
@@ -71,7 +70,6 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 //^^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATOR
 // [cfe] 'sync*' and 'async*' can't return a value.
 }
 
diff --git a/tests/language_2/call/constructor_on_unresolvable_class_test.dart b/tests/language_2/call/constructor_on_unresolvable_class_test.dart
index 5686db7..a8e2277 100644
--- a/tests/language_2/call/constructor_on_unresolvable_class_test.dart
+++ b/tests/language_2/call/constructor_on_unresolvable_class_test.dart
@@ -14,13 +14,13 @@
   new A();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
   new A.foo();
   //  ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A.foo'.
+  // [cfe] Couldn't find constructor 'A.foo'.
   new lib.A();
   //  ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'lib.A'.
+  // [cfe] Couldn't find constructor 'lib.A'.
 }
diff --git a/tests/language_2/call/nonexistent_constructor_test.dart b/tests/language_2/call/nonexistent_constructor_test.dart
index b27d76a..906b57d 100644
--- a/tests/language_2/call/nonexistent_constructor_test.dart
+++ b/tests/language_2/call/nonexistent_constructor_test.dart
@@ -22,9 +22,9 @@
   new A.bar(foo());
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'A.bar'.
+  // [cfe] Couldn't find constructor 'A.bar'.
   new A();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language_2/class/keyword_test.dart b/tests/language_2/class/keyword_test.dart
index a3337a7..8676867 100644
--- a/tests/language_2/class/keyword_test.dart
+++ b/tests/language_2/class/keyword_test.dart
@@ -15,15 +15,13 @@
 // [cfe] Expected ';' after this.
 //    ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] 'class' can't be used as an identifier because it's a keyword.
-//    ^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
+// [cfe] 'class' can't be used as an identifier because it's a keyword.
 // [cfe] Setter not found: 'class'.
   print("$class");
   //      ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] 'class' can't be used as an identifier because it's a keyword.
-  //      ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
-  // [cfe] Getter not found: 'class'.
+  // [cfe] 'class' can't be used as an identifier because it's a keyword.
+  // [cfe] Undefined name 'class'.
 }
diff --git a/tests/language_2/class/variable_shadow_class_test.dart b/tests/language_2/class/variable_shadow_class_test.dart
index 634e71a..b5b7e94 100644
--- a/tests/language_2/class/variable_shadow_class_test.dart
+++ b/tests/language_2/class/variable_shadow_class_test.dart
@@ -19,7 +19,7 @@
     var i = new Test.named(10);
     //          ^^^^
     // [analyzer] COMPILE_TIME_ERROR.PREFIX_SHADOWED_BY_LOCAL_DECLARATION
-    // [cfe] Method not found: 'Test.named'.
+    // [cfe] Couldn't find constructor 'Test.named'.
     Expect.equals(10, i.field);
   }
 
diff --git a/tests/language_2/compile_time_constant/compile_time_constant_test.dart b/tests/language_2/compile_time_constant/compile_time_constant_test.dart
index 483bf2f..c3d77be 100644
--- a/tests/language_2/compile_time_constant/compile_time_constant_test.dart
+++ b/tests/language_2/compile_time_constant/compile_time_constant_test.dart
@@ -16,10 +16,9 @@
       bar
 //    ^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-// [cfe] Can't access 'this' in a field initializer to read 'bar'.
-//    ^^^
 // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
-// [cfe] Getter not found: 'bar'.
+// [cfe] Can't access 'this' in a field initializer to read 'bar'.
+// [cfe] Undefined name 'bar'.
       -3;
 }
 
diff --git a/tests/language_2/const/const_locals_constant_locals_test.dart b/tests/language_2/const/const_locals_constant_locals_test.dart
index 2d27216..4ce5265 100644
--- a/tests/language_2/const/const_locals_constant_locals_test.dart
+++ b/tests/language_2/const/const_locals_constant_locals_test.dart
@@ -18,13 +18,11 @@
   //         ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] Constant evaluation error:
-  //         ^
   // [cfe] Not a constant expression.
   const c4 = finalField;
   //         ^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] Constant evaluation error:
-  //         ^
   // [cfe] Not a constant expression.
   const c5 = constField;
   const c6 = method();
@@ -35,6 +33,8 @@
   //         ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] New expression is not a constant expression.
+  //             ^
+  // [cfe] New expression is not a constant expression.
   const c8 = const Class();
 }
 
diff --git a/tests/language_2/const/constructor_syntax_test.dart b/tests/language_2/const/constructor_syntax_test.dart
index e29bf6c..585c36e 100644
--- a/tests/language_2/const/constructor_syntax_test.dart
+++ b/tests/language_2/const/constructor_syntax_test.dart
@@ -53,8 +53,8 @@
       // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
       //      ^
       // [cfe] 'field' is a final instance variable that was initialized at the declaration.
-      //      ^
       // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+      // [cfe] Not a constant expression.
       //        ^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.INVALID_CONSTANT
       // [cfe] New expression is not a constant expression.
diff --git a/tests/language_2/const/factory_with_body_test.dart b/tests/language_2/const/factory_with_body_test.dart
index 46d08fb..7dd5a12 100644
--- a/tests/language_2/const/factory_with_body_test.dart
+++ b/tests/language_2/const/factory_with_body_test.dart
@@ -15,4 +15,6 @@
 
 main() {
   const ConstFactoryWithBody.one();
+  //    ^
+  // [cfe] Non-redirecting const factory invocation is not a constant expression.
 }
diff --git a/tests/language_2/const/optional_args_test.dart b/tests/language_2/const/optional_args_test.dart
index 5d752e0..b16ce2f7 100644
--- a/tests/language_2/const/optional_args_test.dart
+++ b/tests/language_2/const/optional_args_test.dart
@@ -16,6 +16,7 @@
 //  ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_CONSTANT_DEFAULT_VALUE
 // [cfe] Constant expression expected.
+// [cfe] Non-constant map literal is not a constant expression.
 
 main() {
   invalid();
diff --git a/tests/language_2/const/syntax_test.dart b/tests/language_2/const/syntax_test.dart
index 364a421..a42bd6b 100644
--- a/tests/language_2/const/syntax_test.dart
+++ b/tests/language_2/const/syntax_test.dart
@@ -47,6 +47,8 @@
   //                                       ^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
   // [cfe] New expression is not a constant expression.
+  //                                           ^
+  // [cfe] New expression is not a constant expression.
 
   var f4 = B4;
   var f5 = B5;
@@ -81,10 +83,14 @@
 //         ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//             ^
+// [cfe] New expression is not a constant expression.
 const P3 = new Point(0, 0) + 1;
 //         ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//             ^
+// [cfe] New expression is not a constant expression.
 
 // Check that we cannot have cyclic references in compile time
 // expressions.
@@ -113,8 +119,8 @@
       // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
       //  ^
       // [cfe] 'x' is a final instance variable that was initialized at the declaration.
-      //  ^
       // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+      // [cfe] Not a constant expression.
   ;
   final x = null;
 }
@@ -136,4 +142,6 @@
 //                      ^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
 // [cfe] New expression is not a constant expression.
+//                          ^
+// [cfe] New expression is not a constant expression.
 const B5 = identical(1, const Point(1, 2));
diff --git a/tests/language_2/constructor/default_factory2_test.dart b/tests/language_2/constructor/default_factory2_test.dart
index 905b695..cb3de6f 100644
--- a/tests/language_2/constructor/default_factory2_test.dart
+++ b/tests/language_2/constructor/default_factory2_test.dart
@@ -22,6 +22,4 @@
 
 main() {
   var result = new IA<String>();
-  //               ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'Foo' of the type variable 'T' on 'A'.
 }
diff --git a/tests/language_2/constructor/named_constructor_test.dart b/tests/language_2/constructor/named_constructor_test.dart
index c36fe22..0cad797 100644
--- a/tests/language_2/constructor/named_constructor_test.dart
+++ b/tests/language_2/constructor/named_constructor_test.dart
@@ -24,7 +24,7 @@
   // 'Class.named' is not a type:
   new Class.named<int>().value;
   //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //             ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
 
@@ -32,32 +32,33 @@
   new Class<int>.named<int>().value;
   //             ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   new prefix.Class().value;
   // 'prefix' is not a type:
   new prefix<int>.Class().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
+  //              ^
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   new prefix.Class<int>().value;
   // 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 
   new prefix.Class.named().value;
   // 'prefix<int>.Class.named' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class.named().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   // [cfe] Expected '(' after this.
 
 
@@ -67,25 +68,25 @@
   new prefix.Class.named<int>().value;
   //               ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   // 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>.named().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 
 
   // 'prefix<int>.Class.named<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class.named<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Couldn't find constructor 'prefix.Class'.
   // [cfe] Expected '(' after this.
 
 
@@ -93,14 +94,14 @@
   new prefix.Class<int>.named<int>().value;
   //                    ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
 
   // 'prefix<int>.Class<int>.named<int>' doesn't fit the grammar syntax T.id:
   new prefix<int>.Class<int>.named<int>().value;
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix.Class'.
   //              ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'prefix.Class'.
 }
diff --git a/tests/language_2/constructor/reference_test.dart b/tests/language_2/constructor/reference_test.dart
index ee1aa67..03c68d5 100644
--- a/tests/language_2/constructor/reference_test.dart
+++ b/tests/language_2/constructor/reference_test.dart
@@ -17,7 +17,7 @@
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //          ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   new Foo<int>();
   new Foo<int>.bar();
   new Foo<int>.bar.baz();
@@ -29,24 +29,21 @@
   // [cfe] The method 'baz' isn't defined for the class 'Foo<int>'.
   new Foo.bar<int>();
   //      ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //         ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   new Foo.bar<int>.baz();
-  //      ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //               ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   new Foo.bar.baz<int>();
   //  ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //          ^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-  //          ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
 
   const Foo();
   const Foo.bar();
@@ -54,7 +51,7 @@
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //            ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   const Foo<int>();
   const Foo<int>.bar();
   const Foo<int>.bar.baz();
@@ -66,31 +63,29 @@
   // [cfe] The method 'baz' isn't defined for the class 'Foo<int>'.
   const Foo.bar<int>();
   //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //           ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   const Foo.bar<int>.baz();
-  //        ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //                 ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
   const Foo.bar.baz<int>();
   //    ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
   //            ^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-  //            ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
+  // [cfe] Couldn't find constructor 'Foo.bar.baz'.
 
   Foo();
   Foo.bar();
   Foo.bar.baz();
-  //  ^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'bar'.
+//    ^
+// [cfe] Member not found: 'bar'.
+//        ^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
   Foo<int>();
   Foo<int>.bar();
   Foo<int>.bar.baz();
@@ -98,21 +93,22 @@
   // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
   // [cfe] This requires the 'constructor-tearoffs' language feature to be enabled.
   //       ^
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Member not found: 'bar'.
+  //           ^^^
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
   Foo.bar<int>();
   //  ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
+  // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   Foo.bar<int>.baz();
-  //  ^
-  // [cfe] A constructor invocation can't have type arguments on the constructor name.
-//^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  //           ^
-  // [cfe] Method not found: 'Foo.bar.baz'.
+//    ^
+// [cfe] Couldn't find constructor 'bar'.
+//       ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   Foo.bar.baz<int>();
-  //  ^^^
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'bar'.
+//    ^
+// [cfe] Member not found: 'bar'.
+//        ^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
 }
diff --git a/tests/language_2/constructor/unresolved_default_constructor_test.dart b/tests/language_2/constructor/unresolved_default_constructor_test.dart
index 5b47440..11a019f 100644
--- a/tests/language_2/constructor/unresolved_default_constructor_test.dart
+++ b/tests/language_2/constructor/unresolved_default_constructor_test.dart
@@ -18,5 +18,5 @@
   Expect.throws(() => new A());
   //                      ^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language_2/deferred/load_library_wrong_args_test.dart b/tests/language_2/deferred/load_library_wrong_args_test.dart
index d85bde5..0565e59 100644
--- a/tests/language_2/deferred/load_library_wrong_args_test.dart
+++ b/tests/language_2/deferred/load_library_wrong_args_test.dart
@@ -5,7 +5,7 @@
 void main() {
   // Loadlibrary should be called without arguments.
   lib.loadLibrary(10);
-//^
+//    ^
 // [cfe] 'loadLibrary' takes no arguments.
 //                ^^
 // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
diff --git a/tests/language_2/enum/private_test.dart b/tests/language_2/enum/private_test.dart
index cf6f980..ef31ea6 100644
--- a/tests/language_2/enum/private_test.dart
+++ b/tests/language_2/enum/private_test.dart
@@ -23,5 +23,5 @@
   Expect.throwsNoSuchMethodError(() => Enum2._A);
   //                                         ^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_ENUM_CONSTANT
-  // [cfe] Getter not found: '_A'.
+  // [cfe] Member not found: '_A'.
 }
diff --git a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
index 86c1f11..b3888b0 100644
--- a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
+++ b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
@@ -67,7 +67,7 @@
   E0(c0)[0];
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_OPERATOR
-  // [cfe] Getter not found: '[]'.
+  // [cfe] Method not found: '[]'.
   E0(c0)[0] = 0;
 
   c0[0] += 0;
@@ -182,7 +182,6 @@
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
 //   ^
 // [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
-//   ^
 // [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b[0]++;
@@ -190,7 +189,6 @@
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
 //   ^
 // [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
-//   ^
 // [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 }
 
diff --git a/tests/language_2/factory/and_instance_variable_test.dart b/tests/language_2/factory/and_instance_variable_test.dart
index c421ef6..7d1d667 100644
--- a/tests/language_2/factory/and_instance_variable_test.dart
+++ b/tests/language_2/factory/and_instance_variable_test.dart
@@ -12,7 +12,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 }
 
 class B implements A {
@@ -23,7 +23,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 
   B() {}
 }
@@ -36,7 +36,7 @@
   static get baz => bar;
   //                ^^^
   // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-  // [cfe] Getter not found: 'bar'.
+  // [cfe] Undefined name 'bar'.
 }
 
 main() {
diff --git a/tests/language_2/factory/factory_test.dart b/tests/language_2/factory/factory_test.dart
index 423d390..81f556a 100644
--- a/tests/language_2/factory/factory_test.dart
+++ b/tests/language_2/factory/factory_test.dart
@@ -54,10 +54,7 @@
   }
 }
 
-
 main() {
   FactoryTest.testMain();
   var a = new Link<int>.create();
-  //          ^
-  // [cfe] Expected 0 type arguments.
 }
diff --git a/tests/language_2/factory/redirection3_cyclic_test.dart b/tests/language_2/factory/redirection3_cyclic_test.dart
index 5b37ba0..2f36594 100644
--- a/tests/language_2/factory/redirection3_cyclic_test.dart
+++ b/tests/language_2/factory/redirection3_cyclic_test.dart
@@ -8,8 +8,6 @@
 
 class A {
   factory A.foo() = B;
-  //      ^
-  // [cfe] Cyclic definition of factory 'A.foo'.
 }
 
 class B implements A {
@@ -18,9 +16,13 @@
 
 class C implements B {
   factory C.bar() = C.foo;
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.bar'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   factory C.foo() = C.bar();
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.foo'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   //                  ^^^
diff --git a/tests/language_2/generic/instantiate_type_variable_test.dart b/tests/language_2/generic/instantiate_type_variable_test.dart
index 1ce7ae8..2c73da8 100644
--- a/tests/language_2/generic/instantiate_type_variable_test.dart
+++ b/tests/language_2/generic/instantiate_type_variable_test.dart
@@ -14,7 +14,7 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_CAST_NEW_EXPR
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-    // [cfe] Method not found: 'T'.
+    // [cfe] Couldn't find constructor 'T'.
   }
 }
 
diff --git a/tests/language_2/generic/metadata_in_function_body_test.dart b/tests/language_2/generic/metadata_in_function_body_test.dart
index d98f743..79af7e0 100644
--- a/tests/language_2/generic/metadata_in_function_body_test.dart
+++ b/tests/language_2/generic/metadata_in_function_body_test.dart
@@ -19,11 +19,11 @@
   @C()
   @C<dynamic>()
   //^
-  // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
   // [cfe] An annotation can't use type arguments.
   @C<int>()
   //^
-  // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
   // [cfe] An annotation can't use type arguments.
   int i = 0;
   ignore(i);
diff --git a/tests/language_2/generic/metadata_test.dart b/tests/language_2/generic/metadata_test.dart
index 4a4dcad..29ec0d9 100644
--- a/tests/language_2/generic/metadata_test.dart
+++ b/tests/language_2/generic/metadata_test.dart
@@ -15,10 +15,10 @@
 @C()
 @C<dynamic>()
 //^
-// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
 // [cfe] An annotation can't use type arguments.
 @C<int>()
 //^
-// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
 // [cfe] An annotation can't use type arguments.
 main() {}
diff --git a/tests/language_2/if_null/assignment_behavior_test.dart b/tests/language_2/if_null/assignment_behavior_test.dart
index 3d517c7..17fe757 100644
--- a/tests/language_2/if_null/assignment_behavior_test.dart
+++ b/tests/language_2/if_null/assignment_behavior_test.dart
@@ -221,7 +221,7 @@
   check(1, () => h.c?.x ??= bad(), ['h.C.x']);
   //               ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: 'c'.
+  // [cfe] Undefined name 'c'.
   yGetValue = 1;
   check(1, () => C?.x ??= y, ['C.x', 'y', 'C.x=1']);
   yGetValue = 1;
diff --git a/tests/language_2/import/combinators2_test.dart b/tests/language_2/import/combinators2_test.dart
index 09312bc..6b2c716 100644
--- a/tests/language_2/import/combinators2_test.dart
+++ b/tests/language_2/import/combinators2_test.dart
@@ -17,5 +17,5 @@
   print(ugly);
   //    ^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Getter not found: 'ugly'.
+  // [cfe] Undefined name 'ugly'.
 }
diff --git a/tests/language_2/import/self_test.dart b/tests/language_2/import/self_test.dart
index e95dae1..6d76c26 100644
--- a/tests/language_2/import/self_test.dart
+++ b/tests/language_2/import/self_test.dart
@@ -21,5 +21,5 @@
   p._x;
   //^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: '_x'.
+  // [cfe] Undefined name '_x'.
 }
diff --git a/tests/language_2/instance/method2_test.dart b/tests/language_2/instance/method2_test.dart
index 3e1f35e..620ae2b 100644
--- a/tests/language_2/instance/method2_test.dart
+++ b/tests/language_2/instance/method2_test.dart
@@ -16,7 +16,7 @@
     return instMethod;
     //     ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INSTANCE_MEMBER_ACCESS_FROM_STATIC
-    // [cfe] Getter not found: 'instMethod'.
+    // [cfe] Undefined name 'instMethod'.
   }
 }
 
diff --git a/tests/language_2/interface/injection2_test.dart b/tests/language_2/interface/injection2_test.dart
index 2784140..606d195 100644
--- a/tests/language_2/interface/injection2_test.dart
+++ b/tests/language_2/interface/injection2_test.dart
@@ -24,5 +24,5 @@
 main() {
   Expect.isFalse(new C() is S);
   //                 ^
-  // [cfe] Method not found: 'C'.
+  // [cfe] Couldn't find constructor 'C'.
 }
diff --git a/tests/language_2/interface/interface_test.dart b/tests/language_2/interface/interface_test.dart
index 9bc7abd..61033fe 100644
--- a/tests/language_2/interface/interface_test.dart
+++ b/tests/language_2/interface/interface_test.dart
@@ -11,7 +11,7 @@
 
 abstract class Bi implements Ai {
   factory Bi() = InterfaceTest;
-  //      ^
+  //             ^
   // [cfe] Factory redirects to class 'InterfaceTest', which is abstract and can't be instantiated.
   //             ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR
diff --git a/tests/language_2/label/label8_test.dart b/tests/language_2/label/label8_test.dart
index 630c561..90675c9 100644
--- a/tests/language_2/label/label8_test.dart
+++ b/tests/language_2/label/label8_test.dart
@@ -16,26 +16,19 @@
     case 111:
 //  ^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] 'case' can't be used as an identifier because it's a keyword.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD
-// [cfe] Expected ';' after this.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Getter not found: 'case'.
-//  ^^^^
 // [analyzer] SYNTACTIC_ERROR.MISSING_STATEMENT
+// [cfe] 'case' can't be used as an identifier because it's a keyword.
+// [cfe] Expected ';' after this.
+// [cfe] Undefined name 'case'.
 //       ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 //          ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-//          ^
 // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got ':'.
-//          ^
 // [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
+// [cfe] Expected an identifier, but got ':'.
 // [cfe] Unexpected token ':'.
       while (false) {
         break L;
diff --git a/tests/language_2/malformed/malformed_test.dart b/tests/language_2/malformed/malformed_test.dart
index 68c7cd3..fdcdfd3 100644
--- a/tests/language_2/malformed/malformed_test.dart
+++ b/tests/language_2/malformed/malformed_test.dart
@@ -108,11 +108,11 @@
   new undeclared_prefix.Unresolved();
   //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+  // [cfe] Couldn't find constructor 'undeclared_prefix.Unresolved'.
   new undeclared_prefix.Unresolved<int>();
   //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+  // [cfe] Couldn't find constructor 'undeclared_prefix.Unresolved'.
 
   try {
     throw 'foo';
diff --git a/tests/language_2/metadata/type_parameter_scope_inner_test.dart b/tests/language_2/metadata/type_parameter_scope_inner_test.dart
new file mode 100644
index 0000000..d88c124
--- /dev/null
+++ b/tests/language_2/metadata/type_parameter_scope_inner_test.dart
@@ -0,0 +1,66 @@
+// 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 metadata on a type parameter cannot refer to declarations in an
+// inner scope.  See https://github.com/dart-lang/language/issues/1790.
+
+class Annotation {
+  const Annotation(dynamic d);
+}
+
+class Class<@Annotation(foo) T> {
+//                      ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+}
+
+void function<@Annotation(foo) T>(dynamic foo) {
+//                        ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  dynamic foo;
+}
+
+extension Extension<@Annotation(foo) T> on Class<T> {
+//                              ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+
+  void extensionMethod<@Annotation(foo) T, @Annotation(bar) U>() {}
+  //                                                   ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+  // [cfe] Undefined name 'bar'.
+}
+
+class C {
+  void method<@Annotation(foo) T, @Annotation(bar) U>(dynamic foo) {
+  //                      ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+  // [cfe] Undefined name 'foo'.
+    dynamic foo;
+  }
+
+  static void bar() {}
+}
+
+mixin Mixin<@Annotation(foo) T> {
+//                      ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
+  static void foo() {}
+}
+
+typedef Typedef<@Annotation(foo) T> = void Function<foo>();
+//                          ^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'foo'.
diff --git a/tests/language_2/metadata/type_parameter_scope_other_test.dart b/tests/language_2/metadata/type_parameter_scope_other_test.dart
new file mode 100644
index 0000000..d411e2f
--- /dev/null
+++ b/tests/language_2/metadata/type_parameter_scope_other_test.dart
@@ -0,0 +1,51 @@
+// 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 identifiers in type parameter metadata can refer to other type
+// parameters in the same declaration; they are in scope and take precedence
+// over top level declarations, even if this leads to compile errors.
+
+/// Top level declaration of T; nothing should resolve to this.
+void T() {}
+
+class Annotation {
+  const Annotation(dynamic d);
+}
+
+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.
+
+void function<T, @Annotation(T) U>() {}
+//                           ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
+
+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.
+
+class C {
+  void method<T, @Annotation(T) U>() {}
+  //                         ^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [cfe] Type variables can't be used as constants.
+}
+
+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.
+
+typedef void Typedef1<T, @Annotation(T) U>(T t, U u);
+//                                   ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
+
+typedef Typedef2<T, @Annotation(T) U> = void Function(T t, U u);
+//                              ^
+// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+// [cfe] Type variables can't be used as constants.
diff --git a/tests/language_2/method/not_found_test.dart b/tests/language_2/method/not_found_test.dart
index f064cf3..a39731d 100644
--- a/tests/language_2/method/not_found_test.dart
+++ b/tests/language_2/method/not_found_test.dart
@@ -12,11 +12,10 @@
 // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
   static const field = const B();
   //                         ^
-  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
-  // [cfe] Method not found: 'B'.
-  //                         ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
   // [cfe] Can't access 'this' in a field initializer to read 'B'.
+  // [cfe] Couldn't find constructor 'B'.
 }
 
 class B {
diff --git a/tests/language_2/mixin/illegal_constructor_test.dart b/tests/language_2/mixin/illegal_constructor_test.dart
index b402b1c..b2b3ac7 100644
--- a/tests/language_2/mixin/illegal_constructor_test.dart
+++ b/tests/language_2/mixin/illegal_constructor_test.dart
@@ -99,21 +99,21 @@
   new D6();
 
   new C0(1,2,3);
+  //    ^
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   //     ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //    ^^^^^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   new C0.named();
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'C0.named'.
+  // [cfe] Couldn't find constructor 'C0.named'.
   new D0(1,2,3);
+  //    ^
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   //     ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //    ^^^^^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
   new D0.named();
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'D0.named'.
+  // [cfe] Couldn't find constructor 'D0.named'.
 }
diff --git a/tests/language_2/mixin/illegal_static_access_test.dart b/tests/language_2/mixin/illegal_static_access_test.dart
index 9d19c14..f07cb38 100644
--- a/tests/language_2/mixin/illegal_static_access_test.dart
+++ b/tests/language_2/mixin/illegal_static_access_test.dart
@@ -23,9 +23,9 @@
   Expect.throwsNoSuchMethodError(() => C.foo());
   //                                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.foo'.
+  // [cfe] Member not found: 'C.foo'.
   Expect.throwsNoSuchMethodError(() => C.bar());
   //                                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.bar'.
+  // [cfe] Member not found: 'C.bar'.
 }
diff --git a/tests/language_2/new/create_unresolved_type_test.dart b/tests/language_2/new/create_unresolved_type_test.dart
index e5e0bc7..e5362cd7 100644
--- a/tests/language_2/new/create_unresolved_type_test.dart
+++ b/tests/language_2/new/create_unresolved_type_test.dart
@@ -8,5 +8,5 @@
   new F<int>();
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'F'.
+  // [cfe] Couldn't find constructor 'F'.
 }
diff --git a/tests/language_2/new/expression_type_args_test.dart b/tests/language_2/new/expression_type_args_test.dart
index 5d2cee2..7a82ace 100644
--- a/tests/language_2/new/expression_type_args_test.dart
+++ b/tests/language_2/new/expression_type_args_test.dart
@@ -10,13 +10,12 @@
   m1() => new T();
   //          ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'T'.
+  // [cfe] Couldn't find constructor 'T'.
   static m2() => new T();
   //                 ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'T'.
-  //                 ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Couldn't find constructor 'T'.
 
   // OK when used within instance method, but not in static method.
   m3() => new A<T>();
diff --git a/tests/language_2/new/prefix_test.dart b/tests/language_2/new/prefix_test.dart
index d0672d3..4e352d1 100644
--- a/tests/language_2/new/prefix_test.dart
+++ b/tests/language_2/new/prefix_test.dart
@@ -10,5 +10,5 @@
   return new prefix();
   //         ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'prefix'.
+  // [cfe] Couldn't find constructor 'prefix'.
 }
diff --git a/tests/language_2/null_aware/access_test.dart b/tests/language_2/null_aware/access_test.dart
index be94ddc..9b5ec26 100644
--- a/tests/language_2/null_aware/access_test.dart
+++ b/tests/language_2/null_aware/access_test.dart
@@ -76,9 +76,9 @@
   Expect.throwsNoSuchMethodError(() => C?.hashCode);
   //                                      ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'hashCode'.
+  // [cfe] Member not found: 'hashCode'.
   Expect.throwsNoSuchMethodError(() => h.C?.hashCode);
   //                                        ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] Getter not found: 'hashCode'.
+  // [cfe] Member not found: 'hashCode'.
 }
diff --git a/tests/language_2/null_aware/assignment_test.dart b/tests/language_2/null_aware/assignment_test.dart
index ef7693d..ac9dbed 100644
--- a/tests/language_2/null_aware/assignment_test.dart
+++ b/tests/language_2/null_aware/assignment_test.dart
@@ -60,7 +60,6 @@
   { D d = new D(new E()); E e = new G(); F f = (d?.v = e); }
   //                                            ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-  //                                            ^
   // [cfe] A value of type 'E' can't be assigned to a variable of type 'F'.
   { D.staticE = new E(); G g = new G(); F f = (D?.staticE = g); Expect.identical(f, g); }
   { h.D.staticE = new h.E(); h.G g = new h.G(); h.F f = (h.D?.staticE = g); Expect.identical(f, g); }
@@ -108,9 +107,8 @@
   { B b = new C(1); b?.v += 2; }
   //                   ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-  // [cfe] The getter 'v' isn't defined for the class 'B'.
-  //                   ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
+  // [cfe] The getter 'v' isn't defined for the class 'B'.
   // [cfe] The setter 'v' isn't defined for the class 'B'.
   { D d = new D(new E()); F f = (d?.v += nullC()); }
   //                                     ^^^^^^^
@@ -119,7 +117,6 @@
   { D d = new D(new E()); H h = (d?.v += 1); }
   //                             ^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-  //                             ^
   // [cfe] A value of type 'G' can't be assigned to a variable of type 'H'.
   { D.staticE = new E(); F f = (D?.staticE += nullC()); }
   //                                          ^^^^^^^
@@ -128,6 +125,7 @@
   { h.D.staticE = new h.E(); h.F f = (h.D?.staticE += h.nullC()); }
   //                                                  ^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  //                                                    ^
   // [cfe] A value of type 'C' can't be assigned to a variable of type 'int'.
   { D.staticE = new E(); H h = (D?.staticE += 1); }
   //                            ^^^^^^^^^^^^^^^
diff --git a/tests/language_2/number/identifier_test.dart b/tests/language_2/number/identifier_test.dart
index d6ae7a4..efcf7a5 100644
--- a/tests/language_2/number/identifier_test.dart
+++ b/tests/language_2/number/identifier_test.dart
@@ -11,32 +11,26 @@
   Expect.isTrue(2 is int);
   //                 ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                 ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.equals(2, 2 as int);
   //                    ^^^
-  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
   Expect.isTrue(-2 is int);
   //                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.equals(-2, -2 as int);
   //                      ^^^
-  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                      ^^^
   // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
+  // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
   Expect.isTrue(0x10 is int);
   //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
   Expect.isTrue(-0x10 is int);
   //                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-  //                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
 
   // "a" will be part of hex literal, the following "s" is an error.
@@ -78,14 +72,14 @@
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'd'.
+// [cfe] Undefined name 'd'.
   1D;
 //^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'D'.
+// [cfe] Undefined name 'D'.
   Expect.throwsNoSuchMethodError(() => 1.d+2);
   //                                     ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
@@ -100,14 +94,14 @@
 // [cfe] Expected ';' after this.
 //   ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'd'.
+// [cfe] Undefined name 'd'.
   1.1D;
 //^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
 //   ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'D'.
+// [cfe] Undefined name 'D'.
   1e;
 //^
 // [cfe] Numbers in exponential notation should always contain an exponent (an integer number with an optional sign).
@@ -119,5 +113,5 @@
 // [cfe] Expected ';' after this.
 // ^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'x'.
+// [cfe] Undefined name 'x'.
 }
diff --git a/tests/language_2/prefix/shadow_test.dart b/tests/language_2/prefix/shadow_test.dart
index ef22825..118c67a 100644
--- a/tests/language_2/prefix/shadow_test.dart
+++ b/tests/language_2/prefix/shadow_test.dart
@@ -16,7 +16,7 @@
     //  ^
     // [analyzer] COMPILE_TIME_ERROR.PREFIX_SHADOWED_BY_LOCAL_DECLARATION
     //    ^
-    // [cfe] Method not found: 'T.Library10'.
+    // [cfe] Couldn't find constructor 'T.Library10'.
   }
 }
 
diff --git a/tests/language_2/prefix/transitive_import_prefix_test.dart b/tests/language_2/prefix/transitive_import_prefix_test.dart
index b9e526c..cd08fe5 100644
--- a/tests/language_2/prefix/transitive_import_prefix_test.dart
+++ b/tests/language_2/prefix/transitive_import_prefix_test.dart
@@ -10,13 +10,13 @@
   new lib11.Library11(1);
   //  ^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'lib11.Library11'.
+  // [cfe] Couldn't find constructor 'lib11.Library11'.
   lib11.Library11.static_func();
 //^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'lib11'.
+// [cfe] Undefined name 'lib11'.
   lib11.Library11.static_fld;
 //^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'lib11'.
+// [cfe] Undefined name 'lib11'.
 }
diff --git a/tests/language_2/prefix/transitive_import_test.dart b/tests/language_2/prefix/transitive_import_test.dart
index 65b7b94..ca40726 100644
--- a/tests/language_2/prefix/transitive_import_test.dart
+++ b/tests/language_2/prefix/transitive_import_test.dart
@@ -13,11 +13,11 @@
   new lib12.Library11(1);
   //        ^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'Library11'.
+  // [cfe] Couldn't find constructor 'Library11'.
 
   // Variable should not be visible.
   lib12.top_level11;
   //    ^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_PREFIXED_NAME
-  // [cfe] Getter not found: 'top_level11'.
+  // [cfe] Undefined name 'top_level11'.
 }
diff --git a/tests/language_2/private/access_test.dart b/tests/language_2/private/access_test.dart
index eae947b..7bc1b6c 100644
--- a/tests/language_2/private/access_test.dart
+++ b/tests/language_2/private/access_test.dart
@@ -15,25 +15,23 @@
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
 // [cfe] Method not found: '_function'.
   private._function();
-//^
-// [cfe] Method not found: '_function'.
 //        ^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
+// [cfe] Method not found: '_function'.
   new _Class();
   //  ^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: '_Class'.
+  // [cfe] Couldn't find constructor '_Class'.
   private._Class();
-//^
-// [cfe] Method not found: '_Class'.
 //        ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_FUNCTION
+// [cfe] Method not found: '_Class'.
   new Class._constructor();
   //        ^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'Class._constructor'.
+  // [cfe] Couldn't find constructor 'Class._constructor'.
   new private.Class._constructor();
   //                ^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
-  // [cfe] Method not found: 'Class._constructor'.
+  // [cfe] Couldn't find constructor 'Class._constructor'.
 }
diff --git a/tests/language_2/redirecting/factory_malbounded_test.dart b/tests/language_2/redirecting/factory_malbounded_test.dart
index d22972f..24225b7 100644
--- a/tests/language_2/redirecting/factory_malbounded_test.dart
+++ b/tests/language_2/redirecting/factory_malbounded_test.dart
@@ -13,10 +13,7 @@
   Foo.create() {}
 }
 
-class Bar<
-    T
-            extends num
-    > extends Foo<T> {
+class Bar<T extends num> extends Foo<T> {
   factory Bar() {
     return new Bar<T>.create();
   }
@@ -26,6 +23,4 @@
 
 main() {
   new Foo<String>();
-  //  ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Bar'.
 }
diff --git a/tests/language_2/regress/regress15606_test.dart b/tests/language_2/regress/regress15606_test.dart
index 24604f8..740f919 100644
--- a/tests/language_2/regress/regress15606_test.dart
+++ b/tests/language_2/regress/regress15606_test.dart
@@ -18,7 +18,7 @@
       Unresolved.
 //    ^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-// [cfe] Getter not found: 'Unresolved'.
+// [cfe] Undefined name 'Unresolved'.
         bar(
       // Make dart2js generate a call to setRuntimeTypeInfo.
       new Foo<int>(),
diff --git a/tests/language_2/regress/regress21793_test.dart b/tests/language_2/regress/regress21793_test.dart
index 2928280..dde0672 100644
--- a/tests/language_2/regress/regress21793_test.dart
+++ b/tests/language_2/regress/regress21793_test.dart
@@ -18,5 +18,5 @@
   print(new A()(499));
   //        ^
   // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-  // [cfe] Method not found: 'A'.
+  // [cfe] Couldn't find constructor 'A'.
 }
diff --git a/tests/language_2/regress/regress23038_test.dart b/tests/language_2/regress/regress23038_test.dart
index 0b861e1..605f629 100644
--- a/tests/language_2/regress/regress23038_test.dart
+++ b/tests/language_2/regress/regress23038_test.dart
@@ -13,7 +13,6 @@
     = C<C<T>>
     //^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
-    // [cfe] The constructor function type 'C<C<T>> Function()' isn't a subtype of 'C<T> Function()'.
   ;
 }
 
diff --git a/tests/language_2/regress/regress23746_test.dart b/tests/language_2/regress/regress23746_test.dart
index fd9a510..00c0e4f 100644
--- a/tests/language_2/regress/regress23746_test.dart
+++ b/tests/language_2/regress/regress23746_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.
 
+// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class A<T, U> {
diff --git a/tests/language_2/regress/regress34495_test.dart b/tests/language_2/regress/regress34495_test.dart
index 9fa3ec8..85d923d 100644
--- a/tests/language_2/regress/regress34495_test.dart
+++ b/tests/language_2/regress/regress34495_test.dart
@@ -7,7 +7,7 @@
 final foo = A<B>.foo();
 //          ^
 // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
-// [cfe] Method not found: 'A'.
+// [cfe] Couldn't find constructor 'A'.
 //            ^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'B' isn't a type.
diff --git a/tests/language_2/regress/regress46165_test.dart b/tests/language_2/regress/regress46165_test.dart
index 2aed9e0..f2c43c6 100644
--- a/tests/language_2/regress/regress46165_test.dart
+++ b/tests/language_2/regress/regress46165_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.
 
+// @dart=2.9
+
 void main() {
   final l = <Object>[];
   l.add((String x, StringBuffer y) {
diff --git a/tests/language_2/regress/regress46550_test.dart b/tests/language_2/regress/regress46550_test.dart
index 9b609da..14b5ee7 100644
--- a/tests/language_2/regress/regress46550_test.dart
+++ b/tests/language_2/regress/regress46550_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.
 
+// @dart=2.9
+
 // VMOptions=--optimization_counter_threshold=100 --deterministic
 
 import "package:expect/expect.dart";
diff --git a/tests/language_2/regress/regress46867_test.dart b/tests/language_2/regress/regress46867_test.dart
new file mode 100644
index 0000000..750b2234
--- /dev/null
+++ b/tests/language_2/regress/regress46867_test.dart
@@ -0,0 +1,34 @@
+// 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
+
+// Regression test for https://github.com/dart-lang/sdk/issues/46867
+
+import 'package:expect/expect.dart';
+
+class Interface {
+  covariant Object x = 'from Interface';
+}
+
+mixin Mixin implements Interface {}
+
+class BaseClass {
+  static var getterCallCount = 0;
+  static var setterCallCount = 0;
+  Object get x => getterCallCount++;
+  set x(Object value) => setterCallCount++;
+}
+
+class SubClass extends BaseClass with Mixin {}
+
+void main() {
+  Expect.equals(0, BaseClass.getterCallCount);
+  SubClass().x;
+  Expect.equals(1, BaseClass.getterCallCount);
+
+  Expect.equals(0, BaseClass.setterCallCount);
+  SubClass().x = 42;
+  Expect.equals(1, BaseClass.setterCallCount);
+}
diff --git a/tests/language_2/static/field3_test.dart b/tests/language_2/static/field3_test.dart
index 3da6963..44f1f7a 100644
--- a/tests/language_2/static/field3_test.dart
+++ b/tests/language_2/static/field3_test.dart
@@ -16,11 +16,11 @@
     var x = Foo.x;
     //          ^
     // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
-    // [cfe] Getter not found: 'x'.
+    // [cfe] Member not found: 'x'.
     var m = Foo.m;
     //          ^
     // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
-    // [cfe] Getter not found: 'm'.
+    // [cfe] Member not found: 'm'.
     Foo.m = 1;
     //  ^
     // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
diff --git a/tests/language_2/string/interpolate1_test.dart b/tests/language_2/string/interpolate1_test.dart
index 1798edb..9db9cd6 100644
--- a/tests/language_2/string/interpolate1_test.dart
+++ b/tests/language_2/string/interpolate1_test.dart
@@ -14,5 +14,5 @@
   // [cfe] A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).
   //                  ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
-  // [cfe] Getter not found: 'x'.
+  // [cfe] Undefined name 'x'.
 }
diff --git a/tests/language_2/type_variable/conflict2_test.dart b/tests/language_2/type_variable/conflict2_test.dart
index c211812..40abfb9 100644
--- a/tests/language_2/type_variable/conflict2_test.dart
+++ b/tests/language_2/type_variable/conflict2_test.dart
@@ -17,15 +17,14 @@
   foo() => T();
   //       ^
   // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
-  // [cfe] Method not found: 'T'.
+  // [cfe] Couldn't find constructor 'T'.
 
   // T is in scope, even in static context. Compile-time error to call this.T().
   static bar() => T();
   //              ^
   // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
-  // [cfe] Method not found: 'T'.
-  //              ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Couldn't find constructor 'T'.
 
   // X is not in scope. NoSuchMethodError.
   static baz() => X();
@@ -37,7 +36,7 @@
   static qux() => C.T();
   //                ^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
-  // [cfe] Method not found: 'C.T'.
+  // [cfe] Member not found: 'C.T'.
 
   // Class '_Type' has no instance method 'call': NoSuchMethodError.
   quux() => (T)();
diff --git a/tests/language_2/variable/bad_initializer1_test.dart b/tests/language_2/variable/bad_initializer1_test.dart
index 10a4bfe..7e3159d 100644
--- a/tests/language_2/variable/bad_initializer1_test.dart
+++ b/tests/language_2/variable/bad_initializer1_test.dart
@@ -20,7 +20,7 @@
       elems
 //    ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
-// [cfe] Getter not found: 'elems'.
+// [cfe] Undefined name 'elems'.
     ],
     "a",
     "b"
diff --git a/tests/lib/async/unawaited_error_test.dart b/tests/lib/async/unawaited_error_test.dart
index 597a9f8..c1eecb8 100644
--- a/tests/lib/async/unawaited_error_test.dart
+++ b/tests/lib/async/unawaited_error_test.dart
@@ -5,7 +5,7 @@
 void main() {
   // The `unawaited` function is not exposed by dart:core.
   unawaited;
-  // [error line 7, column 3, length 9]
-  // [cfe] Getter not found: 'unawaited'.
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+//^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'unawaited'.
 }
diff --git a/tests/lib/collection/queue_first_test.dart b/tests/lib/collection/queue_first_test.dart
new file mode 100644
index 0000000..fb7e1a6
--- /dev/null
+++ b/tests/lib/collection/queue_first_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+library queue.first.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue2 = new Queue();
+
+  Expect.equals(11, queue1.first);
+  Expect.throwsStateError(() => queue2.first);
+}
diff --git a/tests/corelib/queue_iterator_test.dart b/tests/lib/collection/queue_iterator_test.dart
similarity index 100%
rename from tests/corelib/queue_iterator_test.dart
rename to tests/lib/collection/queue_iterator_test.dart
diff --git a/tests/lib/collection/queue_last_test.dart b/tests/lib/collection/queue_last_test.dart
new file mode 100644
index 0000000..288ad40
--- /dev/null
+++ b/tests/lib/collection/queue_last_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+library queue.last.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue2 = new Queue();
+
+  Expect.equals(13, queue1.last);
+  Expect.throwsStateError(() => queue2.last);
+}
diff --git a/tests/lib/collection/queue_single_test.dart b/tests/lib/collection/queue_single_test.dart
new file mode 100644
index 0000000..a4cdfbf
--- /dev/null
+++ b/tests/lib/collection/queue_single_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+library queue.single.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1.add(42);
+  Queue queue2 = new Queue();
+  queue2
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue3 = new Queue();
+
+  Expect.equals(42, queue1.single);
+  Expect.throwsStateError(() => queue2.single);
+  Expect.throwsStateError(() => queue3.single);
+}
diff --git a/tests/lib/collection/queue_test.dart b/tests/lib/collection/queue_test.dart
new file mode 100644
index 0000000..0abfa51
--- /dev/null
+++ b/tests/lib/collection/queue_test.dart
@@ -0,0 +1,483 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for 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 queue.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection';
+
+abstract class QueueTest {
+  Queue newQueue();
+  Queue newQueueFrom(Iterable iterable);
+
+  void testMain() {
+    Queue queue = newQueue();
+    checkQueue(queue, 0, 0);
+
+    queue.addFirst(1);
+    checkQueue(queue, 1, 1);
+
+    queue.addLast(10);
+    checkQueue(queue, 2, 11);
+
+    Expect.equals(10, queue.removeLast());
+    checkQueue(queue, 1, 1);
+
+    queue.addLast(10);
+    Expect.equals(1, queue.removeFirst());
+    checkQueue(queue, 1, 10);
+
+    queue.addFirst(1);
+    queue.addLast(100);
+    queue.addLast(1000);
+    Expect.equals(1000, queue.removeLast());
+    queue.addLast(1000);
+    checkQueue(queue, 4, 1111);
+
+    queue.removeFirst();
+    checkQueue(queue, 3, 1110);
+
+    dynamic mapTest(dynamic value) {
+      return (value as int) ~/ 10;
+    }
+
+    bool is10(dynamic value) {
+      return (value == 10);
+    }
+
+    Queue mapped = newQueueFrom(queue.map(mapTest));
+    checkQueue(mapped, 3, 111);
+    checkQueue(queue, 3, 1110);
+    Expect.equals(1, mapped.removeFirst());
+    Expect.equals(100, mapped.removeLast());
+    Expect.equals(10, mapped.removeFirst());
+
+    Queue other = newQueueFrom(queue.where(is10));
+    checkQueue(other, 1, 10);
+
+    Expect.isTrue(queue.any(is10));
+
+    bool isInstanceOfInt(dynamic value) {
+      return (value is int);
+    }
+
+    Expect.isTrue(queue.every(isInstanceOfInt));
+
+    Expect.isFalse(queue.every(is10));
+
+    bool is1(dynamic value) {
+      return (value == 1);
+    }
+
+    Expect.isFalse(queue.any(is1));
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+
+    Expect.throws<StateError>(queue.removeFirst);
+    Expect.equals(0, queue.length);
+
+    Expect.throws<StateError>(queue.removeLast);
+    Expect.equals(0, queue.length);
+
+    queue.addFirst(1);
+    queue.addFirst(2);
+    Expect.equals(2, queue.first);
+    Expect.equals(1, queue.last);
+
+    queue.addLast(3);
+    Expect.equals(3, queue.last);
+    bool isGreaterThanOne(dynamic value) {
+      return ((value as int) > 1);
+    }
+
+    other = newQueueFrom(queue.where(isGreaterThanOne));
+    checkQueue(other, 2, 5);
+
+    // Cycle through values without ever having large element count.
+    queue = newQueue();
+    queue.add(0);
+    for (int i = 0; i < 255; i++) {
+      queue.add(i + 1);
+      Expect.equals(i, queue.removeFirst());
+    }
+    Expect.equals(255, queue.removeFirst());
+    Expect.isTrue(queue.isEmpty);
+
+    testAddAll();
+    testLengthChanges();
+    testLarge();
+    testFromListToList();
+  }
+
+  void checkQueue(Queue queue, int expectedSize, int expectedSum) {
+    testLength(expectedSize, queue);
+    int sum = 0;
+    void sumElements(dynamic value) {
+      sum += value as int;
+    }
+
+    queue.forEach(sumElements);
+    Expect.equals(expectedSum, sum);
+  }
+
+  void testLength(int length, Queue queue) {
+    Expect.equals(length, queue.length);
+    ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
+    ((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
+  }
+
+  void testAddAll() {
+    Set<int> set = new Set<int>.from([1, 2, 4]);
+    Expect.equals(3, set.length);
+
+    Queue queue1 = newQueueFrom(set);
+    Queue queue2 = newQueue();
+    Queue queue3 = newQueue();
+    testLength(3, queue1);
+    testLength(0, queue2);
+    testLength(0, queue3);
+
+    queue2.addAll(set);
+    testLength(3, queue2);
+
+    queue3.addAll(queue1);
+    testLength(3, queue3);
+
+    int sum = 0;
+    void f(dynamic e) {
+      sum += (e as int);
+    }
+
+    set.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue1.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue2.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue3.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    set = new Set<int>.from([]);
+    queue1 = newQueueFrom(set);
+    queue2 = newQueue();
+    queue3 = newQueue();
+
+    queue2.addAll(set);
+    queue3.addAll(queue1);
+
+    Expect.equals(0, set.length);
+    Expect.equals(0, queue1.length);
+    Expect.equals(0, queue2.length);
+    Expect.equals(0, queue3.length);
+  }
+
+  void testLengthChanges() {
+    // Test that the length property is updated properly by
+    // modifications;
+    Queue queue = newQueue();
+    testLength(0, queue);
+
+    for (int i = 1; i <= 10; i++) {
+      queue.add(i);
+      testLength(i, queue);
+    }
+
+    for (int i = 1; i <= 10; i++) {
+      queue.addFirst(11 - i);
+      testLength(10 + i, queue);
+    }
+
+    for (int i = 1; i <= 10; i++) {
+      queue.addLast(i);
+      testLength(20 + i, queue);
+    }
+
+    queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
+    testLength(40, queue);
+
+    for (int i = 1; i <= 5; i++) {
+      Expect.equals(i, queue.removeFirst());
+      testLength(40 - i, queue);
+    }
+
+    for (int i = 1; i <= 5; i++) {
+      Expect.equals(11 - i, queue.removeLast());
+      testLength(35 - i, queue);
+    }
+
+    Expect.isTrue(queue.remove(10));
+    testLength(29, queue);
+    Expect.isFalse(queue.remove(999));
+    testLength(29, queue);
+
+    queue.removeWhere((x) => x == 7);
+    testLength(26, queue);
+
+    queue.retainWhere((x) => x != 3);
+    testLength(23, queue);
+
+    Expect.listEquals(
+        [6, 8, 9, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5],
+        queue.toList());
+
+    // Regression test: http://dartbug.com/16270
+    // These should all do nothing, and should not throw.
+    Queue emptyQueue = newQueue();
+    emptyQueue.remove(0);
+    emptyQueue.removeWhere((x) => throw "unreachable");
+    emptyQueue.retainWhere((x) => throw "unreachable");
+    Expect.equals(0, emptyQueue.length);
+  }
+
+  void testLarge() {
+    int N = 10000;
+    Set set = new Set();
+
+    Queue queue = newQueue();
+    Expect.isTrue(queue.isEmpty);
+
+    for (int i = 0; i < N; i++) {
+      queue.add(i);
+      set.add(i);
+    }
+    Expect.equals(N, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    Expect.equals(0, queue.elementAt(0));
+    Expect.equals(N - 1, queue.elementAt(N - 1));
+    Expect.throws(() {
+      queue.elementAt(-1);
+    });
+    Expect.throws(() {
+      queue.elementAt(N);
+    });
+
+    Iterable skip1 = queue.skip(1);
+    Iterable take1 = queue.take(1);
+    Iterable mapped = queue.map((e) => -e);
+
+    for (int i = 0; i < 500; i++) {
+      Expect.equals(i, take1.first);
+      Expect.equals(i, queue.first);
+      Expect.equals(-i, mapped.first);
+      Expect.equals(i + 1, skip1.first);
+      Expect.equals(i, queue.removeFirst());
+      Expect.equals(i + 1, take1.first);
+      Expect.equals(-i - 1, mapped.first);
+      Expect.equals(N - 1 - i, queue.last);
+      Expect.equals(N - 1 - i, queue.removeLast());
+    }
+    Expect.equals(N - 1000, queue.length);
+
+    Expect.isTrue(queue.remove(N >> 1));
+    Expect.equals(N - 1001, queue.length);
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+    Expect.isTrue(queue.isEmpty);
+
+    queue.addAll(set);
+    Expect.equals(N, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    // Iterate.
+    for (var element in queue) {
+      Expect.isTrue(set.contains(element));
+    }
+
+    queue.forEach((element) {
+      Expect.isTrue(set.contains(element));
+    });
+
+    queue.addAll(set);
+    Expect.equals(N * 2, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+    Expect.isTrue(queue.isEmpty);
+  }
+
+  void testFromListToList() {
+    const int N = 256;
+    List list = [];
+    for (int i = 0; i < N; i++) {
+      Queue queue = newQueueFrom(list);
+
+      Expect.equals(list.length, queue.length);
+      List to = queue.toList();
+      Expect.listEquals(list, to);
+
+      queue.add(i);
+      list.add(i);
+      Expect.equals(list.length, queue.length);
+      to = queue.toList();
+      Expect.listEquals(list, to);
+    }
+  }
+}
+
+class ListQueueTest extends QueueTest {
+  Queue newQueue() => new ListQueue();
+  Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements);
+
+  void testMain() {
+    super.testMain();
+    trickyTest();
+  }
+
+  void trickyTest() {
+    // Test behavior around the know growing capacities of a ListQueue.
+    Queue q = new ListQueue();
+
+    for (int i = 0; i < 255; i++) {
+      q.add(i);
+    }
+    for (int i = 0; i < 128; i++) {
+      Expect.equals(i, q.removeFirst());
+    }
+    q.add(255);
+    for (int i = 0; i < 127; i++) {
+      q.add(i);
+    }
+
+    Expect.equals(255, q.length);
+
+    // Remove element at end of internal buffer.
+    q.removeWhere((v) => v == 255);
+    // Remove element at beginning of internal buffer.
+    q.removeWhere((v) => v == 0);
+    // Remove element at both ends of internal buffer.
+    q.removeWhere((v) => v == 254 || v == 1);
+
+    Expect.equals(251, q.length);
+
+    Iterable i255 = new Iterable.generate(255, (x) => x);
+
+    q = new ListQueue();
+    q.addAll(i255);
+    Expect.listEquals(i255.toList(), q.toList());
+
+    q = new ListQueue();
+    q.addAll(i255.toList());
+    Expect.listEquals(i255.toList(), q.toList());
+
+    q = new ListQueue.from(i255);
+    for (int i = 0; i < 128; i++) q.removeFirst();
+    q.add(256);
+    q.add(0);
+    q.addAll(i255.toList());
+    Expect.equals(129 + 255, q.length);
+
+    // Test addAll that requires the queue to grow.
+    q = new ListQueue();
+    q.addAll(i255.take(35));
+    q.addAll(i255.skip(35).take(96));
+    q.addAll(i255.skip(35 + 96));
+    Expect.listEquals(i255.toList(), q.toList());
+  }
+}
+
+class DoubleLinkedQueueTest extends QueueTest {
+  Queue newQueue() => new DoubleLinkedQueue();
+  Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements);
+
+  void testMain() {
+    super.testMain();
+    testQueueElements();
+  }
+
+  void testQueueElements() {
+    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]);
+    DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
+    queue2.addAll(queue1);
+
+    Expect.equals(queue1.length, queue2.length);
+    DoubleLinkedQueueEntry<int>? entry1 = queue1.firstEntry();
+    DoubleLinkedQueueEntry<int>? entry2 = queue2.firstEntry();
+    while (entry1 != null) {
+      Expect.notIdentical(entry1, entry2);
+      entry1 = entry1.nextEntry();
+      entry2 = entry2!.nextEntry();
+    }
+    Expect.isNull(entry2);
+
+    var firstEntry = queue1.firstEntry()!;
+    var secondEntry = queue1.firstEntry()!.nextEntry()!;
+    var thirdEntry = queue1.lastEntry()!;
+    firstEntry.prepend(4);
+    firstEntry.append(5);
+    secondEntry.prepend(6);
+    secondEntry.append(7);
+    thirdEntry.prepend(8);
+    thirdEntry.append(9);
+    Expect.equals(9, queue1.length);
+    Expect.listEquals([4, 1, 5, 6, 2, 7, 8, 3, 9], queue1.toList());
+    Expect.equals(1, firstEntry.remove());
+    Expect.equals(2, secondEntry.remove());
+    Expect.equals(3, thirdEntry.remove());
+    Expect.equals(6, queue1.length);
+    Expect.listEquals([4, 5, 6, 7, 8, 9], queue1.toList());
+
+    var elements = [];
+    queue1.forEachEntry((entry) {
+      elements.add(entry.element);
+      entry.remove(); // Can remove while iterating.
+    });
+    Expect.listEquals([4, 5, 6, 7, 8, 9], elements);
+    Expect.isTrue(queue1.isEmpty);
+  }
+}
+
+void linkEntryTest() {
+  var entry = new DoubleLinkedQueueEntry(42);
+  Expect.isNull(entry.previousEntry());
+  Expect.isNull(entry.nextEntry());
+
+  entry.append(37);
+  entry.prepend(87);
+  var prev = entry.previousEntry()!;
+  var next = entry.nextEntry()!;
+  Expect.equals(42, entry.element);
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+  Expect.identical(entry, prev.nextEntry());
+  Expect.identical(entry, next.previousEntry());
+  Expect.isNull(next.nextEntry());
+  Expect.isNull(prev.previousEntry());
+
+  entry.element = 117;
+  Expect.equals(117, entry.element);
+  Expect.identical(next, entry.nextEntry());
+  Expect.identical(prev, entry.previousEntry());
+
+  Expect.equals(117, entry.remove());
+  Expect.identical(next, prev.nextEntry());
+  Expect.identical(prev, next.previousEntry());
+  Expect.isNull(next.nextEntry());
+  Expect.isNull(prev.previousEntry());
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+
+  Expect.equals(37, next.remove());
+  Expect.equals(87, prev.element);
+  Expect.isNull(prev.nextEntry());
+  Expect.isNull(prev.previousEntry());
+
+  Expect.equals(87, prev.remove());
+}
+
+main() {
+  new DoubleLinkedQueueTest().testMain();
+  new ListQueueTest().testMain();
+  linkEntryTest();
+}
diff --git a/tests/lib/html/js_dispatch_property_test.dart b/tests/lib/html/js_dispatch_property_test.dart
index 3fbe2ea..f20a4ffa6 100644
--- a/tests/lib/html/js_dispatch_property_test.dart
+++ b/tests/lib/html/js_dispatch_property_test.dart
@@ -6,8 +6,6 @@
 
 import 'package:expect/minitest.dart';
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
-
 import 'js_dispatch_property_test_lib.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/lib/html/js_interop_constructor_name/util.dart b/tests/lib/html/js_interop_constructor_name/util.dart
index 03659f0..3ec4563 100644
--- a/tests/lib/html/js_interop_constructor_name/util.dart
+++ b/tests/lib/html/js_interop_constructor_name/util.dart
@@ -5,7 +5,6 @@
 @JS()
 library util;
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
 import 'package:js/js.dart';
 
 @JS()
diff --git a/tests/lib/html/js_typed_interop_callable_object_test.dart b/tests/lib/html/js_typed_interop_callable_object_test.dart
index 659d2a91..663a789 100644
--- a/tests/lib/html/js_typed_interop_callable_object_test.dart
+++ b/tests/lib/html/js_typed_interop_callable_object_test.dart
@@ -7,7 +7,6 @@
 
 import 'dart:html';
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
 import 'package:js/js.dart';
 import 'package:expect/minitest.dart';
 
diff --git a/tests/lib/isolate/fast_copy_during_initial_message_test.dart b/tests/lib/isolate/fast_copy_during_initial_message_test.dart
new file mode 100644
index 0000000..375de09
--- /dev/null
+++ b/tests/lib/isolate/fast_copy_during_initial_message_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.
+
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy
+
+import "dart:isolate";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+echo(message) {
+  var string = message[0] as String;
+  var replyPort = message[1] as SendPort;
+  replyPort.send(string);
+}
+
+main() {
+  asyncStart();
+
+  // This string is constructed at runtime, so it is not const and won't be
+  // identical because of canonicalization. It will only be identical if it is
+  // sent by pointer.
+  var sentString = "xyz" * 2;
+
+  var port;
+  port = new RawReceivePort((message) {
+    var receivedString = message as String;
+
+    Expect.identical(sentString, receivedString);
+
+    port.close();
+    asyncEnd();
+  });
+
+  Isolate.spawn(echo, [sentString, port.sendPort]);
+}
diff --git a/tests/lib/isolate/function_send_test.dart b/tests/lib/isolate/function_send_test.dart
index 82b6123..cd5ee40 100644
--- a/tests/lib/isolate/function_send_test.dart
+++ b/tests/lib/isolate/function_send_test.dart
@@ -7,10 +7,15 @@
 // VMOptions=--no-enable-isolate-groups
 
 import "dart:isolate";
+import "dart:io";
 import "dart:async";
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 
+final bool isolateGroupsEnabled =
+    Platform.executableArguments.contains('--enable-isolate-groups');
+
 void toplevel(port, message) {
   port.send("toplevel:$message");
 }
@@ -175,6 +180,9 @@
 }
 
 void testUnsendable(name, func) {
+  // Isolate group support does allow sending closures.
+  if (isolateGroupsEnabled) return;
+
   asyncStart();
   Isolate.spawn(nop, func).then<void>((v) => throw "allowed spawn direct?",
       onError: (e, s) {
diff --git a/tests/lib/isolate/illegal_msg_function_test.dart b/tests/lib/isolate/illegal_msg_function_test.dart
index 5b5aa45..62cbe70 100644
--- a/tests/lib/isolate/illegal_msg_function_test.dart
+++ b/tests/lib/isolate/illegal_msg_function_test.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.
 
-// VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
 library illegal_msg_function_test;
diff --git a/tests/lib/isolate/message3_test.dart b/tests/lib/isolate/message3_test.dart
index 37bf159..6809c95 100644
--- a/tests/lib/isolate/message3_test.dart
+++ b/tests/lib/isolate/message3_test.dart
@@ -7,17 +7,23 @@
 // VMOptions=--no-enable-isolate-groups
 
 // Dart test program for testing serialization of messages.
-// VMOptions=--enable_type_checks --enable_asserts
+// VMOptions=--enable_type_checks --enable_asserts --enable-isolate-groups
+// VMOptions=--enable_type_checks --enable_asserts --no-enable-isolate-groups
 
 library MessageTest;
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:io';
 import 'dart:isolate';
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'dart:typed_data';
 
+final bool isolateGroupsEnabled =
+    Platform.executableArguments.contains('--enable-isolate-groups');
+
 void echoMain(msg) {
   SendPort replyTo = msg[0];
   SendPort pong = msg[1];
@@ -408,7 +414,14 @@
     Expect.equals(42, x.fun()); //     //# fun: continued
   }); //                               //# fun: continued
 
-  Expect.throws(() => ping.send(new E(new E(E.fooFun).instanceFun)));
+  if (isolateGroupsEnabled) {
+    ping.send(new E(new E(E.fooFun).instanceFun));
+    checks.add((x) {
+      Expect.equals(1234, (x as E).fun());
+    });
+  } else {
+    Expect.throws(() => ping.send(new E(new E(E.fooFun).instanceFun)));
+  }
 
   F nonConstF = new F();
   ping.send(nonConstF);
diff --git a/tests/lib/isolate/static_function_test.dart b/tests/lib/isolate/static_function_test.dart
index e1ece06..0708dc3 100644
--- a/tests/lib/isolate/static_function_test.dart
+++ b/tests/lib/isolate/static_function_test.dart
@@ -9,6 +9,7 @@
 
 library static_function_test;
 
+import 'dart:io';
 import 'dart:isolate';
 import 'static_function_lib.dart' as lib;
 import 'package:async_helper/async_helper.dart';
@@ -115,6 +116,9 @@
 }
 
 void main([args, port]) {
+  final bool isolateGroupsEnabled =
+      Platform.executableArguments.contains('--enable-isolate-groups');
+
   asyncStart();
   // Sanity check.
   spawnTest("function", function, "TOP");
@@ -134,16 +138,31 @@
   spawnTest("lib._class._function", lib.privateClassFunction, "_LIB");
   spawnTest("lib._class._function", lib.privateClassAndFunction, "_LIBPRIVATE");
 
-  // Negative tests
-  functionFailTest("static closure", staticClosure);
-  functionFailTest("dynamic closure", dynamicClosure);
-  functionFailTest("named dynamic closure", namedDynamicClosure);
-  functionFailTest("instance closure", new C().instanceClosure);
-  functionFailTest(
-      "initializer closure", new C().constructorInitializerClosure);
-  functionFailTest("constructor closure", new C().constructorBodyClosure);
-  functionFailTest(
-      "named constructor closure", new C().namedConstructorBodyClosure);
-  functionFailTest("instance method", new C().instanceMethod);
+  if (isolateGroupsEnabled) {
+    spawnTest("static closure", staticClosure, "WHAT?");
+    spawnTest("dynamic closure", dynamicClosure, "WHAT??");
+    spawnTest("named dynamic closure", namedDynamicClosure, "WHAT FOO??");
+    spawnTest("instance closure", new C().instanceClosure, "C WHAT?");
+    spawnTest(
+        "initializer closure", new C().constructorInitializerClosure, "Init?");
+    spawnTest(
+        "constructor closure", new C().constructorBodyClosure, "bodyClosure?");
+    spawnTest("named constructor closure", new C().namedConstructorBodyClosure,
+        "namedBodyClosure?");
+    spawnTest("instance method", new C().instanceMethod, "INSTANCE WHAT?");
+  } else {
+    // Negative tests
+    functionFailTest("static closure", staticClosure);
+    functionFailTest("dynamic closure", dynamicClosure);
+    functionFailTest("named dynamic closure", namedDynamicClosure);
+    functionFailTest("instance closure", new C().instanceClosure);
+    functionFailTest(
+        "initializer closure", new C().constructorInitializerClosure);
+    functionFailTest("constructor closure", new C().constructorBodyClosure);
+    functionFailTest(
+        "named constructor closure", new C().namedConstructorBodyClosure);
+    functionFailTest("instance method", new C().instanceMethod);
+  }
+
   asyncEnd();
 }
diff --git a/tests/lib/isolate/weak_property_message_1_test.dart b/tests/lib/isolate/weak_property_message_1_test.dart
index 2f4d344..4946222 100644
--- a/tests/lib/isolate/weak_property_message_1_test.dart
+++ b/tests/lib/isolate/weak_property_message_1_test.dart
@@ -4,7 +4,9 @@
 
 // See https://github.com/dart-lang/sdk/issues/25559
 
-import "dart:async";
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
 import "dart:isolate";
 
 import "package:async_helper/async_helper.dart";
@@ -30,7 +32,6 @@
     asyncEnd();
   });
 
-
   var key1 = new Object();
   var key2 = new Object();
   var key3 = new Object();
diff --git a/tests/lib/isolate/weak_property_message_2_test.dart b/tests/lib/isolate/weak_property_message_2_test.dart
index 236bcfe3..fd0dbc6 100644
--- a/tests/lib/isolate/weak_property_message_2_test.dart
+++ b/tests/lib/isolate/weak_property_message_2_test.dart
@@ -4,12 +4,13 @@
 
 // See https://github.com/dart-lang/sdk/issues/25559
 
-import "dart:async";
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
 import "dart:developer";
 import "dart:isolate";
 
 import "package:async_helper/async_helper.dart";
-import "package:expect/expect.dart";
 
 main() {
   asyncStart();
@@ -23,12 +24,11 @@
     asyncEnd();
   });
 
-
   var unwrittenKey = new Object();
   var expando = new Expando();
   expando[unwrittenKey] = new UserTag("cant send this");
 
   port.sendPort.send(expando);
 
-  print(unwrittenKey);  // Ensure [unwrittenKey] is live during [send].
+  print(unwrittenKey); // Ensure [unwrittenKey] is live during [send].
 }
diff --git a/tests/lib/mirrors/metadata_scope_test.dart b/tests/lib/mirrors/metadata_scope_test.dart
index 8848d41..0596b39 100644
--- a/tests/lib/mirrors/metadata_scope_test.dart
+++ b/tests/lib/mirrors/metadata_scope_test.dart
@@ -15,8 +15,10 @@
 
 // Note there is no compile-time constant 'foo' in scope. In particular, A.foo
 // is not in scope here.
-@Annotation(foo) // //# 01: compile-time error
-class A<@Annotation(foo) T> {
+@Annotation(foo) //# 01: compile-time error
+class A<
+    @Annotation(foo) //# 02: compile-time error
+        T> {
   @Annotation(foo)
   static foo() {}
 
diff --git a/tests/lib/mirrors/regress_b196606044_test.dart b/tests/lib/mirrors/regress_b196606044_test.dart
new file mode 100644
index 0000000..e656519
--- /dev/null
+++ b/tests/lib/mirrors/regress_b196606044_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.
+
+// Regression test for b/196606044.
+//
+// Verifies that instance.type.instanceMembers contains 'isNotEmpty'
+// member for a List literal.
+
+import 'package:expect/expect.dart';
+import 'dart:mirrors';
+
+dynamic object = <int>[1, 2, 3];
+String name = 'isNotEmpty';
+
+main() {
+  var instance = reflect(object);
+  var member = instance.type.instanceMembers[new Symbol(name)];
+  Expect.isNotNull(member);
+  var invocation = instance.getField(member!.simpleName);
+  Expect.isNotNull(invocation);
+  Expect.equals(true, invocation.reflectee);
+}
diff --git a/tests/lib_2/async/future_extension_test.dart b/tests/lib_2/async/future_extension_test.dart
index cd28986..e15a360 100644
--- a/tests/lib_2/async/future_extension_test.dart
+++ b/tests/lib_2/async/future_extension_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.
 
+// @dart=2.9
+
 import 'package:async_helper/async_helper.dart';
 import "package:expect/expect.dart";
 import 'dart:async' show Completer, runZonedGuarded;
diff --git a/tests/lib_2/async/unawaited_error_test.dart b/tests/lib_2/async/unawaited_error_test.dart
index 597a9f8..c1eecb8 100644
--- a/tests/lib_2/async/unawaited_error_test.dart
+++ b/tests/lib_2/async/unawaited_error_test.dart
@@ -5,7 +5,7 @@
 void main() {
   // The `unawaited` function is not exposed by dart:core.
   unawaited;
-  // [error line 7, column 3, length 9]
-  // [cfe] Getter not found: 'unawaited'.
-  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+//^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
+// [cfe] Undefined name 'unawaited'.
 }
diff --git a/tests/lib_2/collection/queue_first_test.dart b/tests/lib_2/collection/queue_first_test.dart
new file mode 100644
index 0000000..99fe1c6
--- /dev/null
+++ b/tests/lib_2/collection/queue_first_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// @dart = 2.9
+
+library queue.first.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue2 = new Queue();
+
+  Expect.equals(11, queue1.first);
+  Expect.throwsStateError(() => queue2.first);
+}
diff --git a/tests/corelib_2/queue_iterator_test.dart b/tests/lib_2/collection/queue_iterator_test.dart
similarity index 100%
rename from tests/corelib_2/queue_iterator_test.dart
rename to tests/lib_2/collection/queue_iterator_test.dart
diff --git a/tests/lib_2/collection/queue_last_test.dart b/tests/lib_2/collection/queue_last_test.dart
new file mode 100644
index 0000000..f5575f1
--- /dev/null
+++ b/tests/lib_2/collection/queue_last_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// @dart = 2.9
+
+library queue.last.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue2 = new Queue();
+
+  Expect.equals(13, queue1.last);
+  Expect.throwsStateError(() => queue2.last);
+}
diff --git a/tests/lib_2/collection/queue_single_test.dart b/tests/lib_2/collection/queue_single_test.dart
new file mode 100644
index 0000000..29654c6
--- /dev/null
+++ b/tests/lib_2/collection/queue_single_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// @dart = 2.9
+
+library queue.single.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection' show Queue;
+
+main() {
+  Queue<int> queue1 = new Queue<int>();
+  queue1.add(42);
+  Queue queue2 = new Queue();
+  queue2
+    ..add(11)
+    ..add(12)
+    ..add(13);
+  Queue queue3 = new Queue();
+
+  Expect.equals(42, queue1.single);
+  Expect.throwsStateError(() => queue2.single);
+  Expect.throwsStateError(() => queue3.single);
+}
diff --git a/tests/lib_2/collection/queue_test.dart b/tests/lib_2/collection/queue_test.dart
new file mode 100644
index 0000000..6a903e6
--- /dev/null
+++ b/tests/lib_2/collection/queue_test.dart
@@ -0,0 +1,485 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for 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
+
+library queue.test;
+
+import "package:expect/expect.dart";
+import 'dart:collection';
+
+abstract class QueueTest {
+  Queue newQueue();
+  Queue newQueueFrom(Iterable iterable);
+
+  void testMain() {
+    Queue queue = newQueue();
+    checkQueue(queue, 0, 0);
+
+    queue.addFirst(1);
+    checkQueue(queue, 1, 1);
+
+    queue.addLast(10);
+    checkQueue(queue, 2, 11);
+
+    Expect.equals(10, queue.removeLast());
+    checkQueue(queue, 1, 1);
+
+    queue.addLast(10);
+    Expect.equals(1, queue.removeFirst());
+    checkQueue(queue, 1, 10);
+
+    queue.addFirst(1);
+    queue.addLast(100);
+    queue.addLast(1000);
+    Expect.equals(1000, queue.removeLast());
+    queue.addLast(1000);
+    checkQueue(queue, 4, 1111);
+
+    queue.removeFirst();
+    checkQueue(queue, 3, 1110);
+
+    int mapTest(Object value) {
+      return (value as int) ~/ 10;
+    }
+
+    bool is10(Object value) {
+      return (value == 10);
+    }
+
+    Queue mapped = newQueueFrom(queue.map(mapTest));
+    checkQueue(mapped, 3, 111);
+    checkQueue(queue, 3, 1110);
+    Expect.equals(1, mapped.removeFirst());
+    Expect.equals(100, mapped.removeLast());
+    Expect.equals(10, mapped.removeFirst());
+
+    Queue other = newQueueFrom(queue.where(is10));
+    checkQueue(other, 1, 10);
+
+    Expect.isTrue(queue.any(is10));
+
+    bool isInstanceOfInt(Object value) {
+      return (value is int);
+    }
+
+    Expect.isTrue(queue.every(isInstanceOfInt));
+
+    Expect.isFalse(queue.every(is10));
+
+    bool is1(Object value) {
+      return (value == 1);
+    }
+
+    Expect.isFalse(queue.any(is1));
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+
+    Expect.throws<StateError>(queue.removeFirst);
+    Expect.equals(0, queue.length);
+
+    Expect.throws<StateError>(queue.removeLast);
+    Expect.equals(0, queue.length);
+
+    queue.addFirst(1);
+    queue.addFirst(2);
+    Expect.equals(2, queue.first);
+    Expect.equals(1, queue.last);
+
+    queue.addLast(3);
+    Expect.equals(3, queue.last);
+    bool isGreaterThanOne(Object value) {
+      return ((value as int) > 1);
+    }
+
+    other = newQueueFrom(queue.where(isGreaterThanOne));
+    checkQueue(other, 2, 5);
+
+    // Cycle through values without ever having large element count.
+    queue = newQueue();
+    queue.add(0);
+    for (int i = 0; i < 255; i++) {
+      queue.add(i + 1);
+      Expect.equals(i, queue.removeFirst());
+    }
+    Expect.equals(255, queue.removeFirst());
+    Expect.isTrue(queue.isEmpty);
+
+    testAddAll();
+    testLengthChanges();
+    testLarge();
+    testFromListToList();
+  }
+
+  void checkQueue(Queue queue, int expectedSize, int expectedSum) {
+    testLength(expectedSize, queue);
+    int sum = 0;
+    void sumElements(Object value) {
+      sum += value as int;
+    }
+
+    queue.forEach(sumElements);
+    Expect.equals(expectedSum, sum);
+  }
+
+  void testLength(int length, Queue queue) {
+    Expect.equals(length, queue.length);
+    ((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
+    ((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
+  }
+
+  void testAddAll() {
+    Set<int> set = new Set<int>.from([1, 2, 4]);
+    Expect.equals(3, set.length);
+
+    Queue queue1 = newQueueFrom(set);
+    Queue queue2 = newQueue();
+    Queue queue3 = newQueue();
+    testLength(3, queue1);
+    testLength(0, queue2);
+    testLength(0, queue3);
+
+    queue2.addAll(set);
+    testLength(3, queue2);
+
+    queue3.addAll(queue1);
+    testLength(3, queue3);
+
+    int sum = 0;
+    void f(e) {
+      sum += e;
+    }
+
+    set.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue1.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue2.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    queue3.forEach(f);
+    Expect.equals(7, sum);
+    sum = 0;
+
+    set = new Set<int>.from([]);
+    queue1 = newQueueFrom(set);
+    queue2 = newQueue();
+    queue3 = newQueue();
+
+    queue2.addAll(set);
+    queue3.addAll(queue1);
+
+    Expect.equals(0, set.length);
+    Expect.equals(0, queue1.length);
+    Expect.equals(0, queue2.length);
+    Expect.equals(0, queue3.length);
+  }
+
+  void testLengthChanges() {
+    // Test that the length property is updated properly by
+    // modifications;
+    Queue queue = newQueue();
+    testLength(0, queue);
+
+    for (int i = 1; i <= 10; i++) {
+      queue.add(i);
+      testLength(i, queue);
+    }
+
+    for (int i = 1; i <= 10; i++) {
+      queue.addFirst(11 - i);
+      testLength(10 + i, queue);
+    }
+
+    for (int i = 1; i <= 10; i++) {
+      queue.addLast(i);
+      testLength(20 + i, queue);
+    }
+
+    queue.addAll([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
+    testLength(40, queue);
+
+    for (int i = 1; i <= 5; i++) {
+      Expect.equals(i, queue.removeFirst());
+      testLength(40 - i, queue);
+    }
+
+    for (int i = 1; i <= 5; i++) {
+      Expect.equals(11 - i, queue.removeLast());
+      testLength(35 - i, queue);
+    }
+
+    Expect.isTrue(queue.remove(10));
+    testLength(29, queue);
+    Expect.isFalse(queue.remove(999));
+    testLength(29, queue);
+
+    queue.removeWhere((x) => x == 7);
+    testLength(26, queue);
+
+    queue.retainWhere((x) => x != 3);
+    testLength(23, queue);
+
+    Expect.listEquals(
+        [6, 8, 9, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5, 6, 8, 9, 10, 1, 2, 4, 5],
+        queue.toList());
+
+    // Regression test: http://dartbug.com/16270
+    // These should all do nothing, and should not throw.
+    Queue emptyQueue = newQueue();
+    emptyQueue.remove(0);
+    emptyQueue.removeWhere((x) => throw "unreachable");
+    emptyQueue.retainWhere((x) => throw "unreachable");
+    Expect.equals(0, emptyQueue.length);
+  }
+
+  void testLarge() {
+    int N = 10000;
+    Set set = new Set();
+
+    Queue queue = newQueue();
+    Expect.isTrue(queue.isEmpty);
+
+    for (int i = 0; i < N; i++) {
+      queue.add(i);
+      set.add(i);
+    }
+    Expect.equals(N, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    Expect.equals(0, queue.elementAt(0));
+    Expect.equals(N - 1, queue.elementAt(N - 1));
+    Expect.throws(() {
+      queue.elementAt(-1);
+    });
+    Expect.throws(() {
+      queue.elementAt(N);
+    });
+
+    Iterable skip1 = queue.skip(1);
+    Iterable take1 = queue.take(1);
+    Iterable mapped = queue.map((e) => -e);
+
+    for (int i = 0; i < 500; i++) {
+      Expect.equals(i, take1.first);
+      Expect.equals(i, queue.first);
+      Expect.equals(-i, mapped.first);
+      Expect.equals(i + 1, skip1.first);
+      Expect.equals(i, queue.removeFirst());
+      Expect.equals(i + 1, take1.first);
+      Expect.equals(-i - 1, mapped.first);
+      Expect.equals(N - 1 - i, queue.last);
+      Expect.equals(N - 1 - i, queue.removeLast());
+    }
+    Expect.equals(N - 1000, queue.length);
+
+    Expect.isTrue(queue.remove(N >> 1));
+    Expect.equals(N - 1001, queue.length);
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+    Expect.isTrue(queue.isEmpty);
+
+    queue.addAll(set);
+    Expect.equals(N, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    // Iterate.
+    for (var element in queue) {
+      Expect.isTrue(set.contains(element));
+    }
+
+    queue.forEach((element) {
+      Expect.isTrue(set.contains(element));
+    });
+
+    queue.addAll(set);
+    Expect.equals(N * 2, queue.length);
+    Expect.isFalse(queue.isEmpty);
+
+    queue.clear();
+    Expect.equals(0, queue.length);
+    Expect.isTrue(queue.isEmpty);
+  }
+
+  void testFromListToList() {
+    const int N = 256;
+    List list = [];
+    for (int i = 0; i < N; i++) {
+      Queue queue = newQueueFrom(list);
+
+      Expect.equals(list.length, queue.length);
+      List to = queue.toList();
+      Expect.listEquals(list, to);
+
+      queue.add(i);
+      list.add(i);
+      Expect.equals(list.length, queue.length);
+      to = queue.toList();
+      Expect.listEquals(list, to);
+    }
+  }
+}
+
+class ListQueueTest extends QueueTest {
+  Queue newQueue() => new ListQueue();
+  Queue newQueueFrom(Iterable elements) => new ListQueue.from(elements);
+
+  void testMain() {
+    super.testMain();
+    trickyTest();
+  }
+
+  void trickyTest() {
+    // Test behavior around the know growing capacities of a ListQueue.
+    Queue q = new ListQueue();
+
+    for (int i = 0; i < 255; i++) {
+      q.add(i);
+    }
+    for (int i = 0; i < 128; i++) {
+      Expect.equals(i, q.removeFirst());
+    }
+    q.add(255);
+    for (int i = 0; i < 127; i++) {
+      q.add(i);
+    }
+
+    Expect.equals(255, q.length);
+
+    // Remove element at end of internal buffer.
+    q.removeWhere((v) => v == 255);
+    // Remove element at beginning of internal buffer.
+    q.removeWhere((v) => v == 0);
+    // Remove element at both ends of internal buffer.
+    q.removeWhere((v) => v == 254 || v == 1);
+
+    Expect.equals(251, q.length);
+
+    Iterable i255 = new Iterable.generate(255, (x) => x);
+
+    q = new ListQueue();
+    q.addAll(i255);
+    Expect.listEquals(i255.toList(), q.toList());
+
+    q = new ListQueue();
+    q.addAll(i255.toList());
+    Expect.listEquals(i255.toList(), q.toList());
+
+    q = new ListQueue.from(i255);
+    for (int i = 0; i < 128; i++) q.removeFirst();
+    q.add(256);
+    q.add(0);
+    q.addAll(i255.toList());
+    Expect.equals(129 + 255, q.length);
+
+    // Test addAll that requires the queue to grow.
+    q = new ListQueue();
+    q.addAll(i255.take(35));
+    q.addAll(i255.skip(35).take(96));
+    q.addAll(i255.skip(35 + 96));
+    Expect.listEquals(i255.toList(), q.toList());
+  }
+}
+
+class DoubleLinkedQueueTest extends QueueTest {
+  Queue newQueue() => new DoubleLinkedQueue();
+  Queue newQueueFrom(Iterable elements) => new DoubleLinkedQueue.from(elements);
+
+  void testMain() {
+    super.testMain();
+    testQueueElements();
+  }
+
+  void testQueueElements() {
+    DoubleLinkedQueue<int> queue1 = new DoubleLinkedQueue<int>.from([1, 2, 3]);
+    DoubleLinkedQueue<int> queue2 = new DoubleLinkedQueue<int>();
+    queue2.addAll(queue1);
+
+    Expect.equals(queue1.length, queue2.length);
+    DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry();
+    DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry();
+    while (entry1 != null) {
+      Expect.notIdentical(entry1, entry2);
+      entry1 = entry1.nextEntry();
+      entry2 = entry2.nextEntry();
+    }
+    Expect.isNull(entry2);
+
+    var firstEntry = queue1.firstEntry();
+    var secondEntry = queue1.firstEntry().nextEntry();
+    var thirdEntry = queue1.lastEntry();
+    firstEntry.prepend(4);
+    firstEntry.append(5);
+    secondEntry.prepend(6);
+    secondEntry.append(7);
+    thirdEntry.prepend(8);
+    thirdEntry.append(9);
+    Expect.equals(9, queue1.length);
+    Expect.listEquals([4, 1, 5, 6, 2, 7, 8, 3, 9], queue1.toList());
+    Expect.equals(1, firstEntry.remove());
+    Expect.equals(2, secondEntry.remove());
+    Expect.equals(3, thirdEntry.remove());
+    Expect.equals(6, queue1.length);
+    Expect.listEquals([4, 5, 6, 7, 8, 9], queue1.toList());
+
+    var elements = [];
+    queue1.forEachEntry((entry) {
+      elements.add(entry.element);
+      entry.remove(); // Can remove while iterating.
+    });
+    Expect.listEquals([4, 5, 6, 7, 8, 9], elements);
+    Expect.isTrue(queue1.isEmpty);
+  }
+}
+
+void linkEntryTest() {
+  var entry = new DoubleLinkedQueueEntry(42);
+  Expect.isNull(entry.previousEntry());
+  Expect.isNull(entry.nextEntry());
+
+  entry.append(37);
+  entry.prepend(87);
+  var prev = entry.previousEntry();
+  var next = entry.nextEntry();
+  Expect.equals(42, entry.element);
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+  Expect.identical(entry, prev.nextEntry());
+  Expect.identical(entry, next.previousEntry());
+  Expect.isNull(next.nextEntry());
+  Expect.isNull(prev.previousEntry());
+
+  entry.element = 117;
+  Expect.equals(117, entry.element);
+  Expect.identical(next, entry.nextEntry());
+  Expect.identical(prev, entry.previousEntry());
+
+  Expect.equals(117, entry.remove());
+  Expect.identical(next, prev.nextEntry());
+  Expect.identical(prev, next.previousEntry());
+  Expect.isNull(next.nextEntry());
+  Expect.isNull(prev.previousEntry());
+  Expect.equals(37, next.element);
+  Expect.equals(87, prev.element);
+
+  Expect.equals(37, next.remove());
+  Expect.equals(87, prev.element);
+  Expect.isNull(prev.nextEntry());
+  Expect.isNull(prev.previousEntry());
+
+  Expect.equals(87, prev.remove());
+}
+
+main() {
+  new DoubleLinkedQueueTest().testMain();
+  new ListQueueTest().testMain();
+  linkEntryTest();
+}
diff --git a/tests/lib_2/html/js_dispatch_property_test.dart b/tests/lib_2/html/js_dispatch_property_test.dart
index 3ca4a9e..866b7e6 100644
--- a/tests/lib_2/html/js_dispatch_property_test.dart
+++ b/tests/lib_2/html/js_dispatch_property_test.dart
@@ -8,8 +8,6 @@
 
 import 'package:expect/minitest.dart';
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
-
 import 'js_dispatch_property_test_lib.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/lib_2/html/js_interop_constructor_name/util.dart b/tests/lib_2/html/js_interop_constructor_name/util.dart
index 6eecab4..c98f612 100644
--- a/tests/lib_2/html/js_interop_constructor_name/util.dart
+++ b/tests/lib_2/html/js_interop_constructor_name/util.dart
@@ -7,7 +7,6 @@
 @JS()
 library util;
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
 import 'package:js/js.dart';
 
 @JS()
diff --git a/tests/lib_2/html/js_typed_interop_callable_object_test.dart b/tests/lib_2/html/js_typed_interop_callable_object_test.dart
index 1a89ff6..9ede0a2 100644
--- a/tests/lib_2/html/js_typed_interop_callable_object_test.dart
+++ b/tests/lib_2/html/js_typed_interop_callable_object_test.dart
@@ -9,7 +9,6 @@
 
 import 'dart:html';
 
-import 'package:expect/expect.dart' show NoInline, AssumeDynamic;
 import 'package:js/js.dart';
 import 'package:expect/minitest.dart';
 
diff --git a/tests/lib_2/isolate/fast_copy_during_initial_message_test.dart b/tests/lib_2/isolate/fast_copy_during_initial_message_test.dart
new file mode 100644
index 0000000..15c3978
--- /dev/null
+++ b/tests/lib_2/isolate/fast_copy_during_initial_message_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
+
+// VMOptions=--enable-isolate-groups --enable-fast-object-copy
+
+import "dart:isolate";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+echo(message) {
+  var string = message[0] as String;
+  var replyPort = message[1] as SendPort;
+  replyPort.send(string);
+}
+
+main() {
+  asyncStart();
+
+  // This string is constructed at runtime, so it is not const and won't be
+  // identical because of canonicalization. It will only be identical if it is
+  // sent by pointer.
+  var sentString = "xyz" * 2;
+
+  var port;
+  port = new RawReceivePort((message) {
+    var receivedString = message as String;
+
+    Expect.identical(sentString, receivedString);
+
+    port.close();
+    asyncEnd();
+  });
+
+  Isolate.spawn(echo, [sentString, port.sendPort]);
+}
diff --git a/tests/lib_2/isolate/function_send_test.dart b/tests/lib_2/isolate/function_send_test.dart
index e5e72cf..1f208e7 100644
--- a/tests/lib_2/isolate/function_send_test.dart
+++ b/tests/lib_2/isolate/function_send_test.dart
@@ -9,10 +9,15 @@
 // VMOptions=--no-enable-isolate-groups
 
 import "dart:isolate";
+import "dart:io";
 import "dart:async";
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 
+final bool isolateGroupsEnabled =
+    Platform.executableArguments.contains('--enable-isolate-groups');
+
 void toplevel(port, message) {
   port.send("toplevel:$message");
 }
@@ -151,8 +156,8 @@
     completer.complete(p);
     initPort.close();
   });
-  return Isolate.spawn(_echo, [replyPort, initPort.sendPort]).then(
-      (isolate) => completer.future);
+  return Isolate.spawn(_echo, [replyPort, initPort.sendPort])
+      .then((isolate) => completer.future);
 }
 
 void _echo(msg) {
@@ -178,6 +183,9 @@
 }
 
 void testUnsendable(name, func) {
+  // Isolate group support does allow sending closures.
+  if (isolateGroupsEnabled) return;
+
   asyncStart();
   Isolate.spawn(nop, func).then((v) => throw "allowed spawn direct?",
       onError: (e, s) {
diff --git a/tests/lib_2/isolate/illegal_msg_function_test.dart b/tests/lib_2/isolate/illegal_msg_function_test.dart
index 5ea24f0..dbd3699 100644
--- a/tests/lib_2/isolate/illegal_msg_function_test.dart
+++ b/tests/lib_2/isolate/illegal_msg_function_test.dart
@@ -4,7 +4,6 @@
 
 // @dart = 2.9
 
-// VMOptions=--enable-isolate-groups
 // VMOptions=--no-enable-isolate-groups
 
 library illegal_msg_function_test;
diff --git a/tests/lib_2/isolate/message3_test.dart b/tests/lib_2/isolate/message3_test.dart
index f5c436d..4eb2c6b 100644
--- a/tests/lib_2/isolate/message3_test.dart
+++ b/tests/lib_2/isolate/message3_test.dart
@@ -9,17 +9,23 @@
 // VMOptions=--no-enable-isolate-groups
 
 // Dart test program for testing serialization of messages.
-// VMOptions=--enable_type_checks --enable_asserts
+// VMOptions=--enable_type_checks --enable_asserts --enable-isolate-groups
+// VMOptions=--enable_type_checks --enable_asserts --no-enable-isolate-groups
 
 library MessageTest;
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:io';
 import 'dart:isolate';
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'dart:typed_data';
 
+final bool isolateGroupsEnabled =
+    Platform.executableArguments.contains('--enable-isolate-groups');
+
 void echoMain(msg) {
   SendPort replyTo = msg[0];
   SendPort pong = msg[1];
@@ -410,7 +416,14 @@
     Expect.equals(42, x.fun()); //     //# fun: continued
   }); //                               //# fun: continued
 
-  Expect.throws(() => ping.send(new E(new E(null).instanceFun)));
+  if (isolateGroupsEnabled) {
+    ping.send(new E(new E(null).instanceFun));
+    checks.add((x) {
+      Expect.equals(1234, (x as E).fun());
+    });
+  } else {
+    Expect.throws(() => ping.send(new E(new E(null).instanceFun)));
+  }
 
   F nonConstF = new F();
   ping.send(nonConstF);
diff --git a/tests/lib_2/isolate/static_function_test.dart b/tests/lib_2/isolate/static_function_test.dart
index 17f18e5..23a18fe 100644
--- a/tests/lib_2/isolate/static_function_test.dart
+++ b/tests/lib_2/isolate/static_function_test.dart
@@ -11,6 +11,7 @@
 
 library static_function_test;
 
+import 'dart:io';
 import 'dart:isolate';
 import 'static_function_lib.dart' as lib;
 import 'package:async_helper/async_helper.dart';
@@ -117,6 +118,9 @@
 }
 
 void main([args, port]) {
+  final bool isolateGroupsEnabled =
+      Platform.executableArguments.contains('--enable-isolate-groups');
+
   asyncStart();
   // Sanity check.
   spawnTest("function", function, "TOP");
@@ -136,16 +140,31 @@
   spawnTest("lib._class._function", lib.privateClassFunction, "_LIB");
   spawnTest("lib._class._function", lib.privateClassAndFunction, "_LIBPRIVATE");
 
-  // Negative tests
-  functionFailTest("static closure", staticClosure);
-  functionFailTest("dynamic closure", dynamicClosure);
-  functionFailTest("named dynamic closure", namedDynamicClosure);
-  functionFailTest("instance closure", new C().instanceClosure);
-  functionFailTest(
-      "initializer closure", new C().constructorInitializerClosure);
-  functionFailTest("constructor closure", new C().constructorBodyClosure);
-  functionFailTest(
-      "named constructor closure", new C().namedConstructorBodyClosure);
-  functionFailTest("instance method", new C().instanceMethod);
+  if (isolateGroupsEnabled) {
+    spawnTest("static closure", staticClosure, "WHAT?");
+    spawnTest("dynamic closure", dynamicClosure, "WHAT??");
+    spawnTest("named dynamic closure", namedDynamicClosure, "WHAT FOO??");
+    spawnTest("instance closure", new C().instanceClosure, "C WHAT?");
+    spawnTest(
+        "initializer closure", new C().constructorInitializerClosure, "Init?");
+    spawnTest(
+        "constructor closure", new C().constructorBodyClosure, "bodyClosure?");
+    spawnTest("named constructor closure", new C().namedConstructorBodyClosure,
+        "namedBodyClosure?");
+    spawnTest("instance method", new C().instanceMethod, "INSTANCE WHAT?");
+  } else {
+    // Negative tests
+    functionFailTest("static closure", staticClosure);
+    functionFailTest("dynamic closure", dynamicClosure);
+    functionFailTest("named dynamic closure", namedDynamicClosure);
+    functionFailTest("instance closure", new C().instanceClosure);
+    functionFailTest(
+        "initializer closure", new C().constructorInitializerClosure);
+    functionFailTest("constructor closure", new C().constructorBodyClosure);
+    functionFailTest(
+        "named constructor closure", new C().namedConstructorBodyClosure);
+    functionFailTest("instance method", new C().instanceMethod);
+  }
+
   asyncEnd();
 }
diff --git a/tests/lib_2/isolate/weak_property_message_1_test.dart b/tests/lib_2/isolate/weak_property_message_1_test.dart
index fa8a6d1..b58e261 100644
--- a/tests/lib_2/isolate/weak_property_message_1_test.dart
+++ b/tests/lib_2/isolate/weak_property_message_1_test.dart
@@ -6,7 +6,9 @@
 
 // @dart = 2.9
 
-import "dart:async";
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
 import "dart:isolate";
 
 import "package:async_helper/async_helper.dart";
@@ -32,7 +34,6 @@
     asyncEnd();
   });
 
-
   var key1 = new Object();
   var key2 = new Object();
   var key3 = new Object();
diff --git a/tests/lib_2/isolate/weak_property_message_2_test.dart b/tests/lib_2/isolate/weak_property_message_2_test.dart
index 7b5ad95..353a8f5 100644
--- a/tests/lib_2/isolate/weak_property_message_2_test.dart
+++ b/tests/lib_2/isolate/weak_property_message_2_test.dart
@@ -6,12 +6,13 @@
 
 // @dart = 2.9
 
-import "dart:async";
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
 import "dart:developer";
 import "dart:isolate";
 
 import "package:async_helper/async_helper.dart";
-import "package:expect/expect.dart";
 
 main() {
   asyncStart();
@@ -25,12 +26,11 @@
     asyncEnd();
   });
 
-
   var unwrittenKey = new Object();
   var expando = new Expando();
   expando[unwrittenKey] = new UserTag("cant send this");
 
   port.sendPort.send(expando);
 
-  print(unwrittenKey);  // Ensure [unwrittenKey] is live during [send].
+  print(unwrittenKey); // Ensure [unwrittenKey] is live during [send].
 }
diff --git a/tests/lib_2/js/extends_test/extends_subtyping_live_test.dart b/tests/lib_2/js/extends_test/extends_subtyping_live_test.dart
index b46818e..1d895bf 100644
--- a/tests/lib_2/js/extends_test/extends_subtyping_live_test.dart
+++ b/tests/lib_2/js/extends_test/extends_subtyping_live_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.
 
+// @dart=2.9
+
 // Tests inheritance subtyping relationships after making package:js types live.
 
 @JS()
diff --git a/tests/lib_2/js/extends_test/extends_subtyping_not_live_test.dart b/tests/lib_2/js/extends_test/extends_subtyping_not_live_test.dart
index 3cb0fbb..77e323a 100644
--- a/tests/lib_2/js/extends_test/extends_subtyping_not_live_test.dart
+++ b/tests/lib_2/js/extends_test/extends_subtyping_not_live_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.
 
+// @dart=2.9
+
 // Tests inheritance subtyping relationships without making package:js types
 // live.
 
diff --git a/tests/lib_2/js/extends_test/extends_test.dart b/tests/lib_2/js/extends_test/extends_test.dart
index 4286838..7e0bf9c 100644
--- a/tests/lib_2/js/extends_test/extends_test.dart
+++ b/tests/lib_2/js/extends_test/extends_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.
 
+// @dart=2.9
+
 import 'extends_test_util.dart';
 
 void main() {
diff --git a/tests/lib_2/js/extends_test/extends_test_util.dart b/tests/lib_2/js/extends_test/extends_test_util.dart
index 9a21c51..445be18 100644
--- a/tests/lib_2/js/extends_test/extends_test_util.dart
+++ b/tests/lib_2/js/extends_test/extends_test_util.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.
 
+// @dart=2.9
+
 // Tests inheritance relationships between `JS` and `anonymous` classes/objects.
 
 @JS()
diff --git a/tests/lib_2/js/extends_test/extends_with_es6_test.dart b/tests/lib_2/js/extends_test/extends_with_es6_test.dart
index e0ed10d..0fb9898 100644
--- a/tests/lib_2/js/extends_test/extends_with_es6_test.dart
+++ b/tests/lib_2/js/extends_test/extends_with_es6_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.
 
+// @dart=2.9
+
 import 'extends_test_util.dart';
 
 void main() {
diff --git a/tests/lib_2/js/is_check_and_as_cast_test.dart b/tests/lib_2/js/is_check_and_as_cast_test.dart
index fe11da5..7ebe2ce 100644
--- a/tests/lib_2/js/is_check_and_as_cast_test.dart
+++ b/tests/lib_2/js/is_check_and_as_cast_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.
 
+// @dart=2.9
+
 // Tests `is` checks and `as` casts between various JS objects. Currently, all
 // checks and casts should be allowed between JS objects.
 
diff --git a/tests/lib_2/js/subtyping_test/subtyping_live_test.dart b/tests/lib_2/js/subtyping_test/subtyping_live_test.dart
index d137ba6..e8edd8f 100644
--- a/tests/lib_2/js/subtyping_test/subtyping_live_test.dart
+++ b/tests/lib_2/js/subtyping_test/subtyping_live_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.
 
+// @dart=2.9
+
 // Tests subtyping relationships after making package:js types live.
 
 @JS()
diff --git a/tests/lib_2/js/subtyping_test/subtyping_not_live_test.dart b/tests/lib_2/js/subtyping_test/subtyping_not_live_test.dart
index 5344280..b52ba22 100644
--- a/tests/lib_2/js/subtyping_test/subtyping_not_live_test.dart
+++ b/tests/lib_2/js/subtyping_test/subtyping_not_live_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.
 
+// @dart=2.9
+
 // Tests subtyping relationships without making package:js types live.
 
 import 'package:js/js.dart';
diff --git a/tests/lib_2/js/subtyping_test/subtyping_test_util.dart b/tests/lib_2/js/subtyping_test/subtyping_test_util.dart
index a39efb9..368362a 100644
--- a/tests/lib_2/js/subtyping_test/subtyping_test_util.dart
+++ b/tests/lib_2/js/subtyping_test/subtyping_test_util.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.
 
+// @dart=2.9
+
 // Tests subtyping relationships between JS and anonymous classes.
 
 @JS()
diff --git a/tests/lib_2/mirrors/metadata_scope_test.dart b/tests/lib_2/mirrors/metadata_scope_test.dart
index 0ecaeb1..fec9be7 100644
--- a/tests/lib_2/mirrors/metadata_scope_test.dart
+++ b/tests/lib_2/mirrors/metadata_scope_test.dart
@@ -17,8 +17,10 @@
 
 // Note there is no compile-time constant 'foo' in scope. In particular, A.foo
 // is not in scope here.
-@Annotation(foo) // //# 01: compile-time error
-class A<@Annotation(foo) T> {
+@Annotation(foo) //# 01: compile-time error
+class A<
+    @Annotation(foo) //# 02: compile-time error
+        T> {
   @Annotation(foo)
   static foo() {}
 
diff --git a/tests/lib_2/mirrors/regress_b196606044_test.dart b/tests/lib_2/mirrors/regress_b196606044_test.dart
new file mode 100644
index 0000000..12df1a2
--- /dev/null
+++ b/tests/lib_2/mirrors/regress_b196606044_test.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.
+
+// @dart = 2.9
+
+// Regression test for b/196606044.
+//
+// Verifies that instance.type.instanceMembers contains 'isNotEmpty'
+// member for a List literal.
+
+import 'package:expect/expect.dart';
+import 'dart:mirrors';
+
+dynamic object = <int>[1, 2, 3];
+String name = 'isNotEmpty';
+
+main() {
+  var instance = reflect(object);
+  var member = instance.type.instanceMembers[new Symbol(name)];
+  Expect.isNotNull(member);
+  var invocation = instance.getField(member.simpleName);
+  Expect.isNotNull(invocation);
+  Expect.equals(true, invocation.reflectee);
+}
diff --git a/tests/standalone/entrypoints_verification_test.dart b/tests/standalone/entrypoints_verification_test.dart
deleted file mode 100644
index cfc8058..0000000
--- a/tests/standalone/entrypoints_verification_test.dart
+++ /dev/null
@@ -1,107 +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.
-//
-// VMOptions=--verify-entry-points=true
-
-import 'dart:io';
-import 'dart:convert';
-import 'dart:math';
-import 'package:path/path.dart';
-import 'package:expect/expect.dart';
-import 'dart-ext:entrypoints_verification_test_extension';
-
-void RunTest() native "RunTest";
-
-main() {
-  RunTest();
-
-  new C();
-  new D();
-}
-
-class C {}
-
-@pragma("vm:entry-point")
-class D {
-  D();
-
-  @pragma("vm:entry-point")
-  D.defined();
-
-  @pragma("vm:entry-point")
-  factory D.fact() => E.ctor();
-
-  void fn0() {}
-
-  @pragma("vm:entry-point")
-  void fn1() {}
-
-  @pragma("vm:entry-point", "get")
-  void fn1_get() {}
-
-  @pragma("vm:entry-point", "call")
-  void fn1_call() {}
-
-  static void fn2() {}
-
-  @pragma("vm:entry-point")
-  static void fn3() {}
-
-  @pragma("vm:entry-point", "call")
-  static void fn3_call() {}
-
-  @pragma("vm:entry-point", "get")
-  static void fn3_get() {}
-
-  void Function()? fld0;
-
-  @pragma("vm:entry-point")
-  void Function()? fld1;
-
-  @pragma("vm:entry-point", "get")
-  void Function()? fld2;
-
-  @pragma("vm:entry-point", "set")
-  void Function()? fld3;
-}
-
-void fn0() {}
-
-@pragma("vm:entry-point")
-void fn1() {}
-
-@pragma("vm:entry-point", "get")
-void fn1_get() {}
-
-@pragma("vm:entry-point", "call")
-void fn1_call() {}
-
-class E extends D {
-  E.ctor();
-}
-
-@pragma("vm:entry-point")
-class F {
-  static void Function()? fld0;
-
-  @pragma("vm:entry-point")
-  static void Function()? fld1;
-
-  @pragma("vm:entry-point", "get")
-  static void Function()? fld2;
-
-  @pragma("vm:entry-point", "set")
-  static void Function()? fld3;
-}
-
-void Function()? fld0;
-
-@pragma("vm:entry-point")
-void Function()? fld1;
-
-@pragma("vm:entry-point", "get")
-void Function()? fld2;
-
-@pragma("vm:entry-point", "set")
-void Function()? fld3;
diff --git a/tests/standalone/io/directory_fuzz_test.dart b/tests/standalone/io/directory_fuzz_test.dart
index 358bcff..0e3cbe6 100644
--- a/tests/standalone/io/directory_fuzz_test.dart
+++ b/tests/standalone/io/directory_fuzz_test.dart
@@ -12,68 +12,75 @@
 import "package:expect/expect.dart";
 
 import 'fuzz_support.dart';
+import 'file_write_only_test.dart' show withTempDir, withTempDirSync;
 
 fuzzSyncMethods() {
-  typeMapping.forEach((k, v) {
-    doItSync(() {
-      Directory.systemTemp.createTempSync(v as String?).deleteSync();
-    });
-    Directory? directory;
-    doItSync(() => directory = new Directory(v as String));
-    if (directory == null) return;
-    final d = directory!;
-    doItSync(d.existsSync);
-    doItSync(d.createSync);
-    doItSync(d.deleteSync);
-    doItSync(d.listSync);
-    doItSync(() {
-      d.createTempSync('tempdir').deleteSync();
-    });
-    doItSync(() {
-      // Let's be a little careful. If the directory exists we don't
-      // want to delete it and all its contents.
-      if (!d.existsSync()) d.deleteSync(recursive: true);
-    });
-    typeMapping.forEach((k2, v2) {
-      doItSync(() => d.renameSync(v2 as String));
-      doItSync(() => d.listSync(recursive: v2 as bool));
+  withTempDirSync('dart_directory_fuzz', (temp) {
+    typeMapping.forEach((k, v) {
+      doItSync(() {
+        Directory.systemTemp.createTempSync("${temp.path}/${v as String}")
+            .deleteSync();
+      });
+      Directory? directory;
+      doItSync(() => directory = new Directory("${temp.path}/${v as String}"));
+      if (directory == null) return;
+      final d = directory!;
+      doItSync(d.existsSync);
+      doItSync(d.createSync);
+      doItSync(d.deleteSync);
+      doItSync(d.listSync);
+      doItSync(() {
+        d.createTempSync('tempdir').deleteSync();
+      });
+      doItSync(() {
+        // Let's be a little careful. If the directory exists we don't
+        // want to delete it and all its contents.
+        if (!d.existsSync()) d.deleteSync(recursive: true);
+      });
+      typeMapping.forEach((k2, v2) {
+        doItSync(() => d.renameSync(v2 as String));
+        doItSync(() => d.listSync(recursive: v2 as bool));
+      });
     });
   });
 }
 
-fuzzAsyncMethods() {
+fuzzAsyncMethods() async {
   asyncStart();
-  var futures = <Future>[];
-  typeMapping.forEach((k, v) {
-    futures.add(doItAsync(() {
-      Directory.systemTemp.createTempSync(v as String?).deleteSync();
-    }));
-    if (v is! String) {
-      return;
-    }
-    var d = new Directory(v);
-    futures.add(doItAsync(d.exists));
-    futures.add(doItAsync(d.create));
-    futures.add(doItAsync(d.delete));
-    futures.add(doItAsync(() {
-      return d.createTemp('tempdir').then((temp) {
-        return temp.delete();
-      });
-    }));
-    futures.add(doItAsync(() {
-      return d.exists().then((res) {
-        if (!res) return d.delete(recursive: true);
-        return new Future.value(true);
-      });
-    }));
-    typeMapping.forEach((k2, v2) {
-      futures.add(doItAsync(() => d.rename(v2 as String)));
+  await withTempDir('dart_directory_fuzz', (temp) async {
+    final futures = <Future>[];
+    typeMapping.forEach((k, v) {
       futures.add(doItAsync(() {
-        d.list(recursive: v2 as bool).listen((_) {}, onError: (e) => null);
+        Directory.systemTemp.createTempSync("${temp.path}/${v as String}")
+            .deleteSync();
       }));
+      if (v is! String) {
+        return;
+      }
+      var d = new Directory("${temp.path}/$v");
+      futures.add(doItAsync(d.exists));
+      futures.add(doItAsync(d.create));
+      futures.add(doItAsync(d.delete));
+      futures.add(doItAsync(() {
+        return d.createTemp('tempdir').then((temp) {
+          return temp.delete();
+        });
+      }));
+      futures.add(doItAsync(() {
+        return d.exists().then((res) {
+          if (!res) return d.delete(recursive: true);
+          return new Future.value(true);
+        });
+      }));
+      typeMapping.forEach((k2, v2) {
+        futures.add(doItAsync(() => d.rename(v2 as String)));
+        futures.add(doItAsync(() {
+          d.list(recursive: v2 as bool).listen((_) {}, onError: (e) => null);
+        }));
+      });
     });
+    await Future.wait(futures).then((_) => asyncEnd());
   });
-  Future.wait(futures).then((_) => asyncEnd());
 }
 
 main() {
diff --git a/tests/standalone/io/file_leak_test.dart b/tests/standalone/io/file_leak_test.dart
new file mode 100644
index 0000000..6c8ddf1
--- /dev/null
+++ b/tests/standalone/io/file_leak_test.dart
@@ -0,0 +1,139 @@
+// 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 file I/O.
+
+// OtherResources=fixed_length_file
+// OtherResources=read_as_text.dat
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:collection';
+import 'dart:io';
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+import "package:path/path.dart";
+
+class FileTest {
+  static Directory? tempDirectory;
+  static int numLiveAsyncTests = 0;
+
+  static void asyncTestStarted() {
+    asyncStart();
+    ++numLiveAsyncTests;
+  }
+
+  static void asyncTestDone(String name) {
+    asyncEnd();
+    --numLiveAsyncTests;
+    if (numLiveAsyncTests == 0) {
+      deleteTempDirectory();
+    }
+  }
+
+  static void createTempDirectory(Function doNext) {
+    Directory.systemTemp.createTemp('dart_file').then((temp) {
+      tempDirectory = temp;
+      doNext();
+    });
+  }
+
+  static void deleteTempDirectory() {
+    tempDirectory!.deleteSync(recursive: true);
+  }
+
+  static testReadInto() async {
+    asyncTestStarted();
+    File file = new File(tempDirectory!.path + "/out_read_into");
+
+    var openedFile = await file.open(mode: FileMode.write);
+    await openedFile.writeFrom(const [1, 2, 3]);
+
+    await openedFile.setPosition(0);
+    var list = <int>[1, 2, 3];
+    Expect.equals(3, await openedFile.readInto(list));
+    Expect.listEquals([1, 2, 3], list);
+
+    read(start, end, length, expected) async {
+      var list = <int>[1, 2, 3];
+      await openedFile.setPosition(0);
+      Expect.equals(length, await openedFile.readInto(list, start, end));
+      Expect.listEquals(expected, list);
+      return list;
+    }
+
+    await read(0, 3, 3, [1, 2, 3]);
+    await read(0, 2, 2, [1, 2, null]);
+    await read(1, 2, 1, [null, 1, null]);
+    await read(1, 3, 2, [null, 1, 2]);
+    await read(2, 3, 1, [null, null, 1]);
+    await read(0, 0, 0, [null, null, null]);
+
+    await openedFile.close();
+
+    asyncTestDone("testReadInto");
+  }
+
+  static void testReadAsText() {
+    asyncTestStarted();
+    var name = getFilename("fixed_length_file");
+    var f = new File(name);
+    f.readAsString(encoding: utf8).then((text) {
+      Expect.isTrue(text.endsWith("42 bytes."));
+      Expect.equals(42, text.length);
+      var name = getFilename("read_as_text.dat");
+      var f = new File(name);
+      f.readAsString(encoding: utf8).then((text) {
+        Expect.equals(6, text.length);
+        var expected = [955, 120, 46, 32, 120, 10];
+        Expect.listEquals(expected, text.codeUnits);
+        f.readAsString(encoding: latin1).then((text) {
+          Expect.equals(7, text.length);
+          var expected = [206, 187, 120, 46, 32, 120, 10];
+          Expect.listEquals(expected, text.codeUnits);
+          var readAsStringFuture = f.readAsString(encoding: ascii);
+          readAsStringFuture.then((text) {
+            Expect.fail("Non-ascii char should cause error");
+          }).catchError((e) {
+            asyncTestDone("testReadAsText");
+          });
+        });
+      });
+    });
+  }
+
+  static String getFilename(String path) {
+    return Platform.script.resolve(path).toFilePath();
+  }
+
+  // Main test entrypoint.
+  // This test results in an unhandled exception in the isolate while
+  // some async file IO operations are still pending. The unhandled
+  // exception results in the 'File' object being leaked, the error
+  // only shows up in the ASAN bots which detect the leak.
+  static testMain() {
+    asyncStart();
+    var outerZone = Zone.current;
+    var firstZone = Zone.current.fork(specification: ZoneSpecification(
+        handleUncaughtError: (self, parent, zone, error, stacktrace) {
+      asyncEnd();
+      print("unittest-suite-success"); // For the test harness.
+      exit(0);
+    }));
+    firstZone.run(() async {
+      Expect.identical(firstZone, Zone.current);
+      createTempDirectory(() {
+        testReadAsText();
+        testReadInto();
+        Expect.equals(1, 0); // Should not execute this.
+        asyncEnd();
+      });
+    });
+  }
+}
+
+main() {
+  FileTest.testMain();
+}
diff --git a/tests/standalone/io/test_extension.dart b/tests/standalone/io/test_extension.dart
deleted file mode 100644
index 4bd7d8f..0000000
--- a/tests/standalone/io/test_extension.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.
-
-library test_extension;
-
-import "dart-ext:test_extension";
-
-class Cat {
-  Cat(this.x);
-
-  num x;
-
-  String toString() => 'cat $x';
-
-  // Implements (a != null) ? a : b using a native C++ function and the API.
-  static int? ifNull(a, b) native 'TestExtension_IfNull';
-
-  static int throwMeTheBall(ball) native 'TestExtension_ThrowMeTheBall';
-}
diff --git a/tests/standalone/io/test_extension_fail_test.dart b/tests/standalone/io/test_extension_fail_test.dart
deleted file mode 100644
index d6941e3..0000000
--- a/tests/standalone/io/test_extension_fail_test.dart
+++ /dev/null
@@ -1,103 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-// OtherResources=test_extension.dart
-// OtherResources=test_extension_fail_tester.dart
-// OtherResources=test_relative_extension.dart
-// OtherResources=test_relative_extension_fail_tester.dart
-
-import "package:path/path.dart";
-import "dart:async";
-import "dart:io";
-
-Future copyFileToDirectory(String file, String directory) {
-  switch (Platform.operatingSystem) {
-    case 'linux':
-    case 'macos':
-      return Process.run('cp', [file, directory]);
-    case 'windows':
-      return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
-    default:
-      throw new StateError(
-          'Unknown operating system ${Platform.operatingSystem}');
-  }
-}
-
-String getExtensionPath(String buildDirectory) {
-  switch (Platform.operatingSystem) {
-    case 'linux':
-      return join(buildDirectory, 'libtest_extension.so');
-    case 'macos':
-      return join(buildDirectory, 'libtest_extension.dylib');
-    case 'windows':
-      return join(buildDirectory, 'test_extension.dll');
-    default:
-      throw new StateError(
-          'Unknown operating system ${Platform.operatingSystem}');
-  }
-}
-
-bool checkExitCode(int code) {
-  return ((code == 255) || (code == 254) || (code == 253));
-}
-
-bool checkStdError(String err) {
-  return err.contains("Unhandled exception:") ||
-      err.contains(
-          "Native extension path must be absolute, or simply the file name");
-}
-
-// name is either "extension" or "relative_extension"
-Future test(String name, bool checkForBall) async {
-  String scriptDirectory = dirname(Platform.script.toFilePath());
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('dart_test_${name}_fail');
-  String testDirectory = tempDirectory.path;
-
-  // Copy test_extension shared library, test_extension.dart and
-  // test_extension_fail_tester.dart to the temporary test directory.
-  try {
-    if (name == "extension") {
-      print(getExtensionPath(buildDirectory));
-      await copyFileToDirectory(
-          getExtensionPath(buildDirectory), testDirectory);
-    } else {
-      var extensionDir = testDirectory + "/extension";
-      Directory dir = await (new Directory(extensionDir).create());
-      await copyFileToDirectory(getExtensionPath(buildDirectory), extensionDir);
-    }
-    var extensionDartFile = join(scriptDirectory, 'test_${name}.dart');
-    await copyFileToDirectory(extensionDartFile, testDirectory);
-    var testExtensionTesterFile =
-        join(scriptDirectory, 'test_${name}_fail_tester.dart');
-    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
-    var args = new List<String>.from(Platform.executableArguments)
-      ..add('--trace-loading')
-      ..add(join(testDirectory, 'test_${name}_fail_tester.dart'));
-    var result = await Process.run(Platform.executable, args);
-    print("ERR: ${result.stderr}\n\n");
-    print("OUT: ${result.stdout}\n\n");
-    if (!checkExitCode(result.exitCode)) {
-      throw new StateError("bad exit code: ${result.exitCode}");
-    }
-    if (!checkStdError(result.stderr)) {
-      throw new StateError("stderr doesn't contain unhandled exception.");
-    }
-    if (checkForBall) {
-      if (!result.stderr.contains("ball")) {
-        throw new StateError("stderr doesn't contain 'ball'.");
-      }
-    }
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
-
-main() async {
-  await test("extension", true);
-  await test("relative_extension", false);
-}
diff --git a/tests/standalone/io/test_extension_fail_tester.dart b/tests/standalone/io/test_extension_fail_tester.dart
deleted file mode 100644
index f2e72ae..0000000
--- a/tests/standalone/io/test_extension_fail_tester.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// 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.
-
-library test_extension_test;
-
-import "dart:async";
-import "dart:isolate";
-import "test_extension.dart";
-
-main() {
-  try {
-    Cat.throwMeTheBall("ball");
-  } on String catch (e) {
-    if (e != "ball") throw new StateError("exception not equal to 'ball'");
-  }
-  // Make sure the exception is thrown out to the event handler from C++ code.
-  // The harness expects the string "ball" to be thrown and the process to
-  // end with an unhandled exception.
-  Timer.run(() => Cat.throwMeTheBall("ball"));
-}
diff --git a/tests/standalone/io/test_extension_test.dart b/tests/standalone/io/test_extension_test.dart
deleted file mode 100644
index e2a11e6..0000000
--- a/tests/standalone/io/test_extension_test.dart
+++ /dev/null
@@ -1,117 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-// OtherResources=test_extension.dart
-// OtherResources=test_extension_tester.dart
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-import 'dart:async';
-import 'dart:io';
-import 'dart:isolate';
-
-Future copyFileToDirectory(String file, String directory) {
-  switch (Platform.operatingSystem) {
-    case 'android':
-    case 'linux':
-    case 'macos':
-      return Process.run('cp', [file, directory]);
-    case 'windows':
-      return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
-  throw 'Unknown operating system ${Platform.operatingSystem}';
-}
-
-// Returns a list containing the source file name in the first element and the
-// target file name in the second element.
-List<String> getExtensionNames(String arch) {
-  switch (Platform.operatingSystem) {
-    case 'android':
-    case 'linux':
-      return ['libtest_extension.so', 'libtest_extension$arch.so'];
-    case 'macos':
-      return ['libtest_extension.dylib', 'libtest_extension$arch.dylib'];
-    case 'windows':
-      return ['test_extension.dll', 'test_extension$arch.dll'];
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
-  throw 'Unknown operating system ${Platform.operatingSystem}';
-}
-
-String getExtensionPath(String buildDirectory, String filename) {
-  return join(buildDirectory, filename);
-}
-
-String getArchFromBuildDir(String buildDirectory) {
-  if (buildDirectory.endsWith('SIMARM')) return '';
-  if (buildDirectory.endsWith('SIMARM64')) return '';
-  if (buildDirectory.endsWith('ARM')) return '-arm';
-  if (buildDirectory.endsWith('ARM64')) return '-arm64';
-  if (buildDirectory.endsWith('IA32')) return '-ia32';
-  if (buildDirectory.endsWith('X64')) return '-x64';
-  return 'unknown';
-}
-
-Future testExtension(bool withArchSuffix) async {
-  String scriptDirectory = dirname(Platform.script.toFilePath());
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('dart_test_extension');
-  String testDirectory = tempDirectory.path;
-
-  List<String> fileNames;
-  if (withArchSuffix) {
-    String arch = getArchFromBuildDir(buildDirectory);
-    fileNames = getExtensionNames(arch);
-  } else {
-    fileNames = getExtensionNames('');
-  }
-
-  try {
-    // Copy test_extension shared library, test_extension.dart and
-    // test_extension_tester.dart to the temporary test directory.
-    await copyFileToDirectory(getExtensionPath(buildDirectory, fileNames[0]),
-        join(testDirectory, fileNames[1]));
-
-    var extensionDartFile = join(scriptDirectory, 'test_extension.dart');
-    await copyFileToDirectory(extensionDartFile, testDirectory);
-
-    var testExtensionTesterFile =
-        join(scriptDirectory, 'test_extension_tester.dart');
-    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
-
-    var args = new List<String>.from(Platform.executableArguments)
-      ..add(join(testDirectory, 'test_extension_tester.dart'));
-    ProcessResult result = await Process.run(Platform.executable, args);
-
-    if (result.exitCode != 0) {
-      print('Subprocess failed with exit code ${result.exitCode}');
-      print('stdout:');
-      print('${result.stdout}');
-      print('stderr:');
-      print('${result.stderr}');
-    }
-    Expect.equals(0, result.exitCode);
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
-
-Future testWithArchSuffix() {
-  return testExtension(true);
-}
-
-Future testWithoutArchSuffix() {
-  return testExtension(false);
-}
-
-main() async {
-  await testWithArchSuffix();
-  await testWithoutArchSuffix();
-}
diff --git a/tests/standalone/io/test_extension_tester.dart b/tests/standalone/io/test_extension_tester.dart
deleted file mode 100644
index 7a3308c..0000000
--- a/tests/standalone/io/test_extension_tester.dart
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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.
-
-// VMOptions=--enable-isolate-groups
-// VMOptions=--no-enable-isolate-groups
-
-library test_extension_test;
-
-import 'dart:isolate';
-
-import "test_extension.dart";
-
-class Expect {
-  static void equals(expected, actual, [msg]) {
-    if (expected != actual) {
-      if (msg == null) msg = "Expected: $expected. Actual: $actual";
-      throw new StateError(msg);
-    }
-  }
-
-  static void isNull(x, [msg]) {
-    if (x != null) {
-      if (msg != null) msg = "$x not null";
-      throw new StateError(msg);
-    }
-  }
-}
-
-isolateHandler(_) {}
-
-main() async {
-  Expect.equals('cat 13', new Cat(13).toString(), 'new Cat(13).toString()');
-
-  Expect.equals(3, Cat.ifNull(null, 3), 'Cat.ifNull(null, 3)');
-  Expect.equals(4, Cat.ifNull(4, null), 'Cat.ifNull(4, null)');
-  Expect.equals(5, Cat.ifNull(5, 9), 'Cat.ifNull(5, 9)');
-  Expect.isNull(Cat.ifNull(null, null), 'Cat.ifNull(null, null)');
-
-  try {
-    Cat.throwMeTheBall("ball");
-  } on String catch (e) {
-    Expect.equals("ball", e);
-  }
-
-  await Isolate.spawn(isolateHandler, []);
-}
diff --git a/tests/standalone/io/test_relative_extension.dart b/tests/standalone/io/test_relative_extension.dart
deleted file mode 100644
index 79f9489..0000000
--- a/tests/standalone/io/test_relative_extension.dart
+++ /dev/null
@@ -1,20 +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 test_extension;
-
-import "dart-ext:extension/test_extension";
-
-class Cat {
-  Cat(this.x);
-
-  num x;
-
-  String toString() => 'cat $x';
-
-  // Implements (a != null) ? a : b using a native C++ function and the API.
-  static int ifNull(a, b) native 'TestExtension_IfNull';
-
-  static int throwMeTheBall(ball) native 'TestExtension_ThrowMeTheBall';
-}
diff --git a/tests/standalone_2/entrypoints_verification_test.dart b/tests/standalone_2/entrypoints_verification_test.dart
deleted file mode 100644
index dcdc757..0000000
--- a/tests/standalone_2/entrypoints_verification_test.dart
+++ /dev/null
@@ -1,109 +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.
-//
-// VMOptions=--verify-entry-points=true
-
-// @dart = 2.9
-
-import 'dart:io';
-import 'dart:convert';
-import 'dart:math';
-import 'package:path/path.dart';
-import 'package:expect/expect.dart';
-import 'dart-ext:entrypoints_verification_test_extension';
-
-void RunTest() native "RunTest";
-
-main() {
-  RunTest();
-
-  new C();
-  new D();
-}
-
-class C {}
-
-@pragma("vm:entry-point")
-class D {
-  D();
-
-  @pragma("vm:entry-point")
-  D.defined();
-
-  @pragma("vm:entry-point")
-  factory D.fact() => E.ctor();
-
-  void fn0() {}
-
-  @pragma("vm:entry-point")
-  void fn1() {}
-
-  @pragma("vm:entry-point", "get")
-  void fn1_get() {}
-
-  @pragma("vm:entry-point", "call")
-  void fn1_call() {}
-
-  static void fn2() {}
-
-  @pragma("vm:entry-point")
-  static void fn3() {}
-
-  @pragma("vm:entry-point", "call")
-  static void fn3_call() {}
-
-  @pragma("vm:entry-point", "get")
-  static void fn3_get() {}
-
-  void Function() fld0;
-
-  @pragma("vm:entry-point")
-  void Function() fld1;
-
-  @pragma("vm:entry-point", "get")
-  void Function() fld2;
-
-  @pragma("vm:entry-point", "set")
-  void Function() fld3;
-}
-
-void fn0() {}
-
-@pragma("vm:entry-point")
-void fn1() {}
-
-@pragma("vm:entry-point", "get")
-void fn1_get() {}
-
-@pragma("vm:entry-point", "call")
-void fn1_call() {}
-
-class E extends D {
-  E.ctor();
-}
-
-@pragma("vm:entry-point")
-class F {
-  static void Function() fld0;
-
-  @pragma("vm:entry-point")
-  static void Function() fld1;
-
-  @pragma("vm:entry-point", "get")
-  static void Function() fld2;
-
-  @pragma("vm:entry-point", "set")
-  static void Function() fld3;
-}
-
-void Function() fld0;
-
-@pragma("vm:entry-point")
-void Function() fld1;
-
-@pragma("vm:entry-point", "get")
-void Function() fld2;
-
-@pragma("vm:entry-point", "set")
-void Function() fld3;
diff --git a/tests/standalone_2/io/directory_fuzz_test.dart b/tests/standalone_2/io/directory_fuzz_test.dart
index 227058d6..c3a8e6a 100644
--- a/tests/standalone_2/io/directory_fuzz_test.dart
+++ b/tests/standalone_2/io/directory_fuzz_test.dart
@@ -14,69 +14,74 @@
 import "package:expect/expect.dart";
 
 import 'fuzz_support.dart';
+import 'file_write_only_test.dart' show withTempDir, withTempDirSync;
 
 fuzzSyncMethods() {
-  typeMapping.forEach((k, v) {
-    doItSync(() {
-      Directory.systemTemp.createTempSync(v).deleteSync();
-    });
-    Directory d;
-    doItSync(() => d = new Directory(v));
-    if (d == null) return;
-    doItSync(d.existsSync);
-    doItSync(d.createSync);
-    doItSync(d.deleteSync);
-    doItSync(d.listSync);
-    doItSync(() {
-      d.createTempSync('tempdir').deleteSync();
-    });
-    doItSync(() {
-      // Let's be a little careful. If the directory exists we don't
-      // want to delete it and all its contents.
-      if (!d.existsSync()) d.deleteSync(recursive: true);
-    });
-    typeMapping.forEach((k2, v2) {
-      doItSync(() => d.renameSync(v2));
-      doItSync(() => d.listSync(recursive: v2));
+  withTempDirSync('dart_directory_fuzz', (temp) {
+    typeMapping.forEach((k, v) {
+      doItSync(() {
+        Directory.systemTemp.createTempSync("${temp.path}/$v").deleteSync();
+      });
+      Directory d;
+      doItSync(() => d = new Directory("${temp.path}/$v"));
+      if (d == null) return;
+      doItSync(d.existsSync);
+      doItSync(d.createSync);
+      doItSync(d.deleteSync);
+      doItSync(d.listSync);
+      doItSync(() {
+        d.createTempSync('tempdir').deleteSync();
+      });
+      doItSync(() {
+        // Let's be a little careful. If the directory exists we don't
+        // want to delete it and all its contents.
+        if (!d.existsSync()) d.deleteSync(recursive: true);
+      });
+      typeMapping.forEach((k2, v2) {
+        doItSync(() => d.renameSync(v2));
+        doItSync(() => d.listSync(recursive: v2));
+      });
     });
   });
 }
 
-fuzzAsyncMethods() {
+fuzzAsyncMethods() async {
   asyncStart();
-  var futures = <Future>[];
-  typeMapping.forEach((k, v) {
-    futures.add(doItAsync(() {
-      Directory.systemTemp.createTempSync(v).deleteSync();
-    }));
-    if (v is! String) {
-      Expect.throws(() => new Directory(v),
-                    (e) => e is ArgumentError || e is TypeError);
-      return;
-    }
-    var d = new Directory(v);
-    futures.add(doItAsync(d.exists));
-    futures.add(doItAsync(d.create));
-    futures.add(doItAsync(d.delete));
-    futures.add(doItAsync(() {
-      return d.createTemp('tempdir').then((temp) {
-        return temp.delete();
-      });
-    }));
-    futures.add(doItAsync(() {
-      return d.exists().then((res) {
-        if (!res) return d.delete(recursive: true);
-        return new Future.value(true);
-      });
-    }));
-    typeMapping.forEach((k2, v2) {
-      futures.add(doItAsync(() => d.rename(v2)));
+  await withTempDir('dart_directory_fuzz', (temp) async {
+    final futures = <Future>[];
+    typeMapping.forEach((k, v) {
       futures.add(doItAsync(() {
-        d.list(recursive: v2).listen((_) {}, onError: (e) => null);
+        Directory.systemTemp.createTempSync("${temp.path}/$v").deleteSync();
       }));
+      if (v is! String) {
+        Expect.throws(() => new Directory(v),
+                      (e) => e is ArgumentError || e is TypeError);
+        return;
+      }
+      var d = new Directory("${temp.path}/$v");
+      futures.add(doItAsync(d.exists));
+      futures.add(doItAsync(d.create));
+      futures.add(doItAsync(d.delete));
+      futures.add(doItAsync(() {
+        return d.createTemp('tempdir').then((temp) {
+          return temp.delete();
+        });
+      }));
+      futures.add(doItAsync(() {
+        return d.exists().then((res) {
+          if (!res) return d.delete(recursive: true);
+          return new Future.value(true);
+        });
+      }));
+      typeMapping.forEach((k2, v2) {
+        futures.add(doItAsync(() => d.rename(v2)));
+        futures.add(doItAsync(() {
+          d.list(recursive: v2).listen((_) {}, onError: (e) => null);
+        }));
+      });
     });
+    await Future.wait(futures).then((_) => asyncEnd());
   });
-  Future.wait(futures).then((_) => asyncEnd());
 }
 
 main() {
diff --git a/tests/standalone_2/io/file_leak_test.dart b/tests/standalone_2/io/file_leak_test.dart
new file mode 100644
index 0000000..9bac244
--- /dev/null
+++ b/tests/standalone_2/io/file_leak_test.dart
@@ -0,0 +1,141 @@
+// 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 file I/O.
+
+// @dart = 2.9
+
+// OtherResources=fixed_length_file
+// OtherResources=read_as_text.dat
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:collection';
+import 'dart:io';
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+import "package:path/path.dart";
+
+class FileTest {
+  static Directory tempDirectory;
+  static int numLiveAsyncTests = 0;
+
+  static void asyncTestStarted() {
+    asyncStart();
+    ++numLiveAsyncTests;
+  }
+
+  static void asyncTestDone(String name) {
+    asyncEnd();
+    --numLiveAsyncTests;
+    if (numLiveAsyncTests == 0) {
+      deleteTempDirectory();
+    }
+  }
+
+  static void createTempDirectory(Function doNext) {
+    Directory.systemTemp.createTemp('dart_file').then((temp) {
+      tempDirectory = temp;
+      doNext();
+    });
+  }
+
+  static void deleteTempDirectory() {
+    tempDirectory.deleteSync(recursive: true);
+  }
+
+  static testReadInto() async {
+    asyncTestStarted();
+    File file = new File(tempDirectory.path + "/out_read_into");
+
+    var openedFile = await file.open(mode: FileMode.write);
+    await openedFile.writeFrom(const [1, 2, 3]);
+
+    await openedFile.setPosition(0);
+    var list = [null, null, null];
+    Expect.equals(3, await openedFile.readInto(list));
+    Expect.listEquals([1, 2, 3], list);
+
+    read(start, end, length, expected) async {
+      var list = [null, null, null];
+      await openedFile.setPosition(0);
+      Expect.equals(length, await openedFile.readInto(list, start, end));
+      Expect.listEquals(expected, list);
+      return list;
+    }
+
+    await read(0, 3, 3, [1, 2, 3]);
+    await read(0, 2, 2, [1, 2, null]);
+    await read(1, 2, 1, [null, 1, null]);
+    await read(1, 3, 2, [null, 1, 2]);
+    await read(2, 3, 1, [null, null, 1]);
+    await read(0, 0, 0, [null, null, null]);
+
+    await openedFile.close();
+
+    asyncTestDone("testReadInto");
+  }
+
+  static void testReadAsText() {
+    asyncTestStarted();
+    var name = getFilename("fixed_length_file");
+    var f = new File(name);
+    f.readAsString(encoding: utf8).then((text) {
+      Expect.isTrue(text.endsWith("42 bytes."));
+      Expect.equals(42, text.length);
+      var name = getFilename("read_as_text.dat");
+      var f = new File(name);
+      f.readAsString(encoding: utf8).then((text) {
+        Expect.equals(6, text.length);
+        var expected = [955, 120, 46, 32, 120, 10];
+        Expect.listEquals(expected, text.codeUnits);
+        f.readAsString(encoding: latin1).then((text) {
+          Expect.equals(7, text.length);
+          var expected = [206, 187, 120, 46, 32, 120, 10];
+          Expect.listEquals(expected, text.codeUnits);
+          var readAsStringFuture = f.readAsString(encoding: ascii);
+          readAsStringFuture.then((text) {
+            Expect.fail("Non-ascii char should cause error");
+          }).catchError((e) {
+            asyncTestDone("testReadAsText");
+          });
+        });
+      });
+    });
+  }
+
+  static String getFilename(String path) {
+    return Platform.script.resolve(path).toFilePath();
+  }
+
+  // Main test entrypoint.
+  // This test results in an unhandled exception in the isolate while
+  // some async file IO operations are still pending. The unhandled
+  // exception results in the 'File' object being leaked, the error
+  // only shows up in the ASAN bots which detect the leak.
+  static testMain() {
+    asyncStart();
+    var outerZone = Zone.current;
+    var firstZone = Zone.current.fork(specification: ZoneSpecification(
+        handleUncaughtError: (self, parent, zone, error, stacktrace) {
+      asyncEnd();
+      print("unittest-suite-success"); // For the test harness.
+      exit(0);
+    }));
+    firstZone.run(() async {
+      Expect.identical(firstZone, Zone.current);
+      createTempDirectory(() {
+        testReadAsText();
+        testReadInto();
+        Expect.equals(1, 0); // Should not execute this.
+        asyncEnd();
+      });
+    });
+  }
+}
+
+main() {
+  FileTest.testMain();
+}
diff --git a/tests/standalone_2/io/test_extension.dart b/tests/standalone_2/io/test_extension.dart
deleted file mode 100644
index 2cf249a..0000000
--- a/tests/standalone_2/io/test_extension.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library test_extension;
-
-import "dart-ext:test_extension";
-
-class Cat {
-  Cat(this.x);
-
-  num x;
-
-  String toString() => 'cat $x';
-
-  // Implements (a != null) ? a : b using a native C++ function and the API.
-  static int ifNull(a, b) native 'TestExtension_IfNull';
-
-  static int throwMeTheBall(ball) native 'TestExtension_ThrowMeTheBall';
-}
diff --git a/tests/standalone_2/io/test_extension_fail_test.dart b/tests/standalone_2/io/test_extension_fail_test.dart
deleted file mode 100644
index e4f664c..0000000
--- a/tests/standalone_2/io/test_extension_fail_test.dart
+++ /dev/null
@@ -1,105 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-// @dart = 2.9
-
-// OtherResources=test_extension.dart
-// OtherResources=test_extension_fail_tester.dart
-// OtherResources=test_relative_extension.dart
-// OtherResources=test_relative_extension_fail_tester.dart
-
-import "package:path/path.dart";
-import "dart:async";
-import "dart:io";
-
-Future copyFileToDirectory(String file, String directory) {
-  switch (Platform.operatingSystem) {
-    case 'linux':
-    case 'macos':
-      return Process.run('cp', [file, directory]);
-    case 'windows':
-      return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
-    default:
-      throw new StateError(
-          'Unknown operating system ${Platform.operatingSystem}');
-  }
-}
-
-String getExtensionPath(String buildDirectory) {
-  switch (Platform.operatingSystem) {
-    case 'linux':
-      return join(buildDirectory, 'libtest_extension.so');
-    case 'macos':
-      return join(buildDirectory, 'libtest_extension.dylib');
-    case 'windows':
-      return join(buildDirectory, 'test_extension.dll');
-    default:
-      throw new StateError(
-          'Unknown operating system ${Platform.operatingSystem}');
-  }
-}
-
-bool checkExitCode(int code) {
-  return ((code == 255) || (code == 254) || (code == 253));
-}
-
-bool checkStdError(String err) {
-  return err.contains("Unhandled exception:") ||
-      err.contains(
-          "Native extension path must be absolute, or simply the file name");
-}
-
-// name is either "extension" or "relative_extension"
-Future test(String name, bool checkForBall) async {
-  String scriptDirectory = dirname(Platform.script.toFilePath());
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('dart_test_${name}_fail');
-  String testDirectory = tempDirectory.path;
-
-  // Copy test_extension shared library, test_extension.dart and
-  // test_extension_fail_tester.dart to the temporary test directory.
-  try {
-    if (name == "extension") {
-      print(getExtensionPath(buildDirectory));
-      await copyFileToDirectory(
-          getExtensionPath(buildDirectory), testDirectory);
-    } else {
-      var extensionDir = testDirectory + "/extension";
-      Directory dir = await (new Directory(extensionDir).create());
-      await copyFileToDirectory(getExtensionPath(buildDirectory), extensionDir);
-    }
-    var extensionDartFile = join(scriptDirectory, 'test_${name}.dart');
-    await copyFileToDirectory(extensionDartFile, testDirectory);
-    var testExtensionTesterFile =
-        join(scriptDirectory, 'test_${name}_fail_tester.dart');
-    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
-    var args = new List<String>.from(Platform.executableArguments)
-      ..add('--trace-loading')
-      ..add(join(testDirectory, 'test_${name}_fail_tester.dart'));
-    var result = await Process.run(Platform.executable, args);
-    print("ERR: ${result.stderr}\n\n");
-    print("OUT: ${result.stdout}\n\n");
-    if (!checkExitCode(result.exitCode)) {
-      throw new StateError("bad exit code: ${result.exitCode}");
-    }
-    if (!checkStdError(result.stderr)) {
-      throw new StateError("stderr doesn't contain unhandled exception.");
-    }
-    if (checkForBall) {
-      if (!result.stderr.contains("ball")) {
-        throw new StateError("stderr doesn't contain 'ball'.");
-      }
-    }
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
-
-main() async {
-  await test("extension", true);
-  await test("relative_extension", false);
-}
diff --git a/tests/standalone_2/io/test_extension_fail_tester.dart b/tests/standalone_2/io/test_extension_fail_tester.dart
deleted file mode 100644
index 8b80788..0000000
--- a/tests/standalone_2/io/test_extension_fail_tester.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-library test_extension_test;
-
-import "dart:async";
-import "dart:isolate";
-import "test_extension.dart";
-
-main() {
-  try {
-    Cat.throwMeTheBall("ball");
-  } on String catch (e) {
-    if (e != "ball") throw new StateError("exception not equal to 'ball'");
-  }
-  // Make sure the exception is thrown out to the event handler from C++ code.
-  // The harness expects the string "ball" to be thrown and the process to
-  // end with an unhandled exception.
-  Timer.run(() => Cat.throwMeTheBall("ball"));
-}
diff --git a/tests/standalone_2/io/test_extension_test.dart b/tests/standalone_2/io/test_extension_test.dart
deleted file mode 100644
index 9e0babad..0000000
--- a/tests/standalone_2/io/test_extension_test.dart
+++ /dev/null
@@ -1,119 +0,0 @@
-// 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.
-//
-// Dart test program for testing native extensions.
-
-// @dart = 2.9
-
-// OtherResources=test_extension.dart
-// OtherResources=test_extension_tester.dart
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-import 'dart:async';
-import 'dart:io';
-import 'dart:isolate';
-
-Future copyFileToDirectory(String file, String directory) {
-  switch (Platform.operatingSystem) {
-    case 'android':
-    case 'linux':
-    case 'macos':
-      return Process.run('cp', [file, directory]);
-    case 'windows':
-      return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
-  throw 'Unknown operating system ${Platform.operatingSystem}';
-}
-
-// Returns a list containing the source file name in the first element and the
-// target file name in the second element.
-List<String> getExtensionNames(String arch) {
-  switch (Platform.operatingSystem) {
-    case 'android':
-    case 'linux':
-      return ['libtest_extension.so', 'libtest_extension$arch.so'];
-    case 'macos':
-      return ['libtest_extension.dylib', 'libtest_extension$arch.dylib'];
-    case 'windows':
-      return ['test_extension.dll', 'test_extension$arch.dll'];
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
-  throw 'Unknown operating system ${Platform.operatingSystem}';
-}
-
-String getExtensionPath(String buildDirectory, String filename) {
-  return join(buildDirectory, filename);
-}
-
-String getArchFromBuildDir(String buildDirectory) {
-  if (buildDirectory.endsWith('SIMARM')) return '';
-  if (buildDirectory.endsWith('SIMARM64')) return '';
-  if (buildDirectory.endsWith('ARM')) return '-arm';
-  if (buildDirectory.endsWith('ARM64')) return '-arm64';
-  if (buildDirectory.endsWith('IA32')) return '-ia32';
-  if (buildDirectory.endsWith('X64')) return '-x64';
-  return 'unknown';
-}
-
-Future testExtension(bool withArchSuffix) async {
-  String scriptDirectory = dirname(Platform.script.toFilePath());
-  String buildDirectory = dirname(Platform.executable);
-  Directory tempDirectory =
-      Directory.systemTemp.createTempSync('dart_test_extension');
-  String testDirectory = tempDirectory.path;
-
-  List<String> fileNames;
-  if (withArchSuffix) {
-    String arch = getArchFromBuildDir(buildDirectory);
-    fileNames = getExtensionNames(arch);
-  } else {
-    fileNames = getExtensionNames('');
-  }
-
-  try {
-    // Copy test_extension shared library, test_extension.dart and
-    // test_extension_tester.dart to the temporary test directory.
-    await copyFileToDirectory(getExtensionPath(buildDirectory, fileNames[0]),
-        join(testDirectory, fileNames[1]));
-
-    var extensionDartFile = join(scriptDirectory, 'test_extension.dart');
-    await copyFileToDirectory(extensionDartFile, testDirectory);
-
-    var testExtensionTesterFile =
-        join(scriptDirectory, 'test_extension_tester.dart');
-    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
-
-    var args = new List<String>.from(Platform.executableArguments)
-      ..add(join(testDirectory, 'test_extension_tester.dart'));
-    ProcessResult result = await Process.run(Platform.executable, args);
-
-    if (result.exitCode != 0) {
-      print('Subprocess failed with exit code ${result.exitCode}');
-      print('stdout:');
-      print('${result.stdout}');
-      print('stderr:');
-      print('${result.stderr}');
-    }
-    Expect.equals(0, result.exitCode);
-  } finally {
-    tempDirectory.deleteSync(recursive: true);
-  }
-}
-
-Future testWithArchSuffix() {
-  return testExtension(true);
-}
-
-Future testWithoutArchSuffix() {
-  return testExtension(false);
-}
-
-main() async {
-  await testWithArchSuffix();
-  await testWithoutArchSuffix();
-}
diff --git a/tests/standalone_2/io/test_extension_tester.dart b/tests/standalone_2/io/test_extension_tester.dart
deleted file mode 100644
index 7f87d13..0000000
--- a/tests/standalone_2/io/test_extension_tester.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-// VMOptions=--enable-isolate-groups
-// VMOptions=--no-enable-isolate-groups
-
-library test_extension_test;
-
-import 'dart:isolate';
-
-import "test_extension.dart";
-
-class Expect {
-  static void equals(expected, actual, [msg]) {
-    if (expected != actual) {
-      if (msg == null) msg = "Expected: $expected. Actual: $actual";
-      throw new StateError(msg);
-    }
-  }
-
-  static void isNull(x, [msg]) {
-    if (x != null) {
-      if (msg != null) msg = "$x not null";
-      throw new StateError(msg);
-    }
-  }
-}
-
-isolateHandler(_) {}
-
-main() async {
-  Expect.equals('cat 13', new Cat(13).toString(), 'new Cat(13).toString()');
-
-  Expect.equals(3, Cat.ifNull(null, 3), 'Cat.ifNull(null, 3)');
-  Expect.equals(4, Cat.ifNull(4, null), 'Cat.ifNull(4, null)');
-  Expect.equals(5, Cat.ifNull(5, 9), 'Cat.ifNull(5, 9)');
-  Expect.isNull(Cat.ifNull(null, null), 'Cat.ifNull(null, null)');
-
-  try {
-    Cat.throwMeTheBall("ball");
-  } on String catch (e) {
-    Expect.equals("ball", e);
-  }
-
-  await Isolate.spawn(isolateHandler, []);
-}
diff --git a/tests/standalone_2/io/test_relative_extension.dart b/tests/standalone_2/io/test_relative_extension.dart
deleted file mode 100644
index 85a2c37..0000000
--- a/tests/standalone_2/io/test_relative_extension.dart
+++ /dev/null
@@ -1,22 +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.
-
-// @dart = 2.9
-
-library test_extension;
-
-import "dart-ext:extension/test_extension";
-
-class Cat {
-  Cat(this.x);
-
-  num x;
-
-  String toString() => 'cat $x';
-
-  // Implements (a != null) ? a : b using a native C++ function and the API.
-  static int ifNull(a, b) native 'TestExtension_IfNull';
-
-  static int throwMeTheBall(ball) native 'TestExtension_ThrowMeTheBall';
-}
diff --git a/tests/web/deferred_inheritance_test.dart b/tests/web/deferred_inheritance_test.dart
index 2443682..45a62fa 100644
--- a/tests/web/deferred_inheritance_test.dart
+++ b/tests/web/deferred_inheritance_test.dart
@@ -16,7 +16,7 @@
 class B extends A {}
 
 /// If the check `y is A` is generated as `y.$isA` then the issue is not
-/// exposed. We use `AssumeDynamic` to ensure that we generate as `y instanceof
+/// exposed. We use `assumeDynamic` to ensure that we generate as `y instanceof
 /// A` in JS.
 @pragma('dart2js:noInline')
 @pragma('dart2js:assumeDynamic')
diff --git a/tests/web/internal/mock_libraries.dart b/tests/web/internal/mock_libraries.dart
index 9f0be35..d279e0c 100644
--- a/tests/web/internal/mock_libraries.dart
+++ b/tests/web/internal/mock_libraries.dart
@@ -246,10 +246,6 @@
   'listTypeCheck': 'listTypeCheck(value) {}',
   'makeLiteralMap': 'makeLiteralMap(List keyValuePairs) {}',
   'Native': 'class Native {}',
-  'NoInline': 'class NoInline {}',
-  'ForceInline': 'class ForceInline {}',
-  'NoSideEffects': 'class NoSideEffects {}',
-  'NoThrows': 'class NoThrows {}',
   'numberOrStringSuperNativeTypeCast':
       'numberOrStringSuperNativeTypeCast(value) {}',
   'numberOrStringSuperNativeTypeCheck':
diff --git a/tests/web/nan_index_test.dart b/tests/web/nan_index_test.dart
new file mode 100644
index 0000000..639cfbd
--- /dev/null
+++ b/tests/web/nan_index_test.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.
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+// Check that NaN is detected as an invalid index for system Lists, Strings and
+// typed lists.
+//
+// There are several methods called `dynamicCallN` for various N that are called
+// with different indexable collection implementations to exercise various
+// dart2js optimizations based on knowing (or not knowing) the concrete type of
+// the List argument.
+
+void main() {
+  int nan = makeIntNaN();
+  Expect.isFalse(nan <= 0);
+  Expect.isFalse(nan >= 0);
+
+  List<int> ints = [1, 2, 3, 4];
+  final bytes = Uint8List(3)
+    ..[0] = 100
+    ..[1] = 101
+    ..[2] = 102;
+  final words = Int16List(3)
+    ..[0] = 16000
+    ..[1] = 16001
+    ..[2] = 16002;
+
+  Expect.throws(() => ints[nan], anyError, 'List[nan]');
+  Expect.throws(() => 'abc'[nan], anyError, 'String[nan]');
+  Expect.throws(() => bytes[nan], anyError, 'UInt8List[nan]');
+  Expect.throws(() => words[nan], anyError, 'Int16List[nan]');
+
+  // [dynamicCall1] Seeded with JSIndexable and Map, so is doing a complete
+  // interceptor dispatch.
+  Expect.equals(2, dynamicCall1(ints, 1));
+  Expect.equals('b', dynamicCall1('abc', 1));
+  Expect.equals(2, dynamicCall1({'a': 1, 'b': 2, 'c': 3}, 'b'));
+
+  Expect.throws(() => dynamicCall1(ints, nan), anyError, 'dynamic List');
+  Expect.throws(() => dynamicCall1('AB', nan), anyError, 'dynamic String');
+  Expect.throws(() => dynamicCall1(bytes, nan), anyError, 'dynamic Uint8List');
+  Expect.throws(() => dynamicCall1(words, nan), anyError, 'dynamic Int16list');
+
+  var a = <int>[];
+  Expect.throws(() => a.removeLast(), contains('-1'));
+
+  // [dynamicCall2] seeded with JSIndexable only, so can be optimized to a
+  // JavaScript indexing operation.
+  Expect.equals(2, dynamicCall2(ints, 1));
+  Expect.equals('b', dynamicCall2('abc', 1));
+
+  Expect.throws(() => dynamicCall2(ints, nan), anyError, 'JSIndexable List');
+  Expect.throws(() => dynamicCall2('AB', nan), anyError, 'JSIndexable String');
+
+  // [dynamicCall3] Seeded with List of known length only, various indexes. The
+  // upper bound is fixed.
+  Expect.throws(() => dynamicCall3(ints, nan), anyError, 'known length nan');
+  Expect.throws(() => dynamicCall3(ints, null), anyError, 'known length null');
+
+  // [dynamicCall4] Seeded with List of known length only.
+  Expect.throws(() => dynamicCall4(ints, nan), anyError, 'dynamic[] List');
+
+  // [dynamicCall5] Seeded with List of unknown length only.
+  Expect.throws(() => dynamicCall5(ints, nan), anyError, 'dynamic[] List');
+  Expect.throws(() => dynamicCall5(a, nan), anyError, 'dynamic[] List');
+
+  // [dynamicCall6] Seeded with Uint8List only.
+  Expect.throws(() => dynamicCall6(bytes, nan), anyError, 'dynamic Uint8List');
+}
+
+bool anyError(error) => true;
+
+bool Function(dynamic) contains(Pattern pattern) =>
+    (error) => '$error'.contains(pattern);
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall1(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall2(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall3(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall4(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall5(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+@pragma('dart2js:noInline')
+dynamic dynamicCall6(dynamic indexable, dynamic index) {
+  return indexable[index];
+}
+
+int makeIntNaN() {
+  int n = 2;
+  // Overflow to Infinity.
+  for (int i = 0; i < 10; i++, n *= n) {}
+  // Infinity - Infinity = NaN.
+  return n - n;
+}
diff --git a/tests/web/native/compiler_test_internals.dart b/tests/web/native/compiler_test_internals.dart
index 08e96d0..3278e34 100644
--- a/tests/web/native/compiler_test_internals.dart
+++ b/tests/web/native/compiler_test_internals.dart
@@ -4,6 +4,4 @@
 
 library compiler_test_internals;
 
-export 'dart:_js_helper' show NoSideEffects, NoThrows, NoInline;
-
 export 'dart:_foreign_helper' show JS;
diff --git a/tests/web_2/deferred_inheritance_test.dart b/tests/web_2/deferred_inheritance_test.dart
index 0373907..8f16b55 100644
--- a/tests/web_2/deferred_inheritance_test.dart
+++ b/tests/web_2/deferred_inheritance_test.dart
@@ -18,7 +18,7 @@
 class B extends A {}
 
 /// If the check `y is A` is generated as `y.$isA` then the issue is not
-/// exposed. We use `AssumeDynamic` to ensure that we generate as `y instanceof
+/// exposed. We use `assumeDynamic` to ensure that we generate as `y instanceof
 /// A` in JS.
 @pragma('dart2js:noInline')
 @pragma('dart2js:assumeDynamic')
diff --git a/tests/web_2/internal/mock_libraries.dart b/tests/web_2/internal/mock_libraries.dart
index adec88a..9aa36ad 100644
--- a/tests/web_2/internal/mock_libraries.dart
+++ b/tests/web_2/internal/mock_libraries.dart
@@ -218,10 +218,6 @@
   }''',
   'makeLiteralMap': 'makeLiteralMap(List keyValuePairs) {}',
   'Native': 'class Native {}',
-  'NoInline': 'class NoInline {}',
-  'ForceInline': 'class ForceInline {}',
-  'NoSideEffects': 'class NoSideEffects {}',
-  'NoThrows': 'class NoThrows {}',
   '_Patch': 'class _Patch { final tag; const _Patch(this.tag); }',
   'patch': 'const patch = const _Patch(null);',
   'patch_full': 'const patch_full = const _Patch("full");',
diff --git a/tests/web_2/native/compiler_test_internals.dart b/tests/web_2/native/compiler_test_internals.dart
index c7b0218..a0ce071 100644
--- a/tests/web_2/native/compiler_test_internals.dart
+++ b/tests/web_2/native/compiler_test_internals.dart
@@ -6,6 +6,4 @@
 
 library compiler_test_internals;
 
-export 'dart:_js_helper' show NoSideEffects, NoThrows, NoInline;
-
 export 'dart:_foreign_helper' show JS;
diff --git a/third_party/devtools/README b/third_party/devtools/README
deleted file mode 100644
index d35a323..0000000
--- a/third_party/devtools/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This folder contains a pre-built Dart DevTools instance which can be served
-as a web application, as well as the package:devtools_server and package:devtools_shared
-from the same revision, used to host and launch DevTools from a Dart process.
-
-First, ensure Flutter is installed and on your path (see https://flutter.dev/docs/get-started/install/linux#install-flutter-manually).
-
-With `flutter` on your path, do the following:
-
-- Run ./update.sh <revision> to build DevTools at a given revision and upload it
-  to CIPD. The uploaded CIPD entry will be tagged with `revision:<revision>`
-- Update DEPS to point to the newly updated DevTools by providing "revision:<revision>"
-  as the version entry for "third_party/devtools"
-
-DevTools CIPD packages are located at https://chrome-infra-packages.appspot.com/p/dart/third_party/flutter/devtools/+/.
diff --git a/third_party/devtools/README.md b/third_party/devtools/README.md
new file mode 100644
index 0000000..6011569
--- /dev/null
+++ b/third_party/devtools/README.md
@@ -0,0 +1,13 @@
+This folder contains a pre-built Dart DevTools instance which can be served
+as a web application, as well as the package:devtools_server and package:devtools_shared
+packages from the same revision, used to host and launch DevTools from a Dart process.
+
+To build DevTools and update the CIPD resources, do the following:
+
+- Run ./update.sh <revision> to build DevTools at a given revision and upload it
+  to CIPD. The uploaded CIPD entry will be tagged with `revision:<revision>`
+- Update DEPS to point to the newly updated DevTools by providing "revision:<revision>"
+  as the version entry for "third_party/devtools"
+
+DevTools CIPD packages are located at
+https://chrome-infra-packages.appspot.com/p/dart/third_party/flutter/devtools/+/.
diff --git a/third_party/devtools/update.sh b/third_party/devtools/update.sh
index 90533c5..92d6f2d 100755
--- a/third_party/devtools/update.sh
+++ b/third_party/devtools/update.sh
@@ -24,6 +24,7 @@
 cd devtools
 git checkout -b cipd_release $1
 
+./tool/update_flutter_sdk.sh
 ./tool/build_release.sh
 
 # Copy the build output as well as the devtools packages needed
@@ -31,6 +32,7 @@
 mkdir cipd_package
 cp -R packages/devtools/build/ cipd_package/web
 cp -r packages/devtools_shared cipd_package
+cp -r packages/devtools_server cipd_package
 
 cipd create \
   -name dart/third_party/flutter/devtools \
diff --git a/tools/VERSION b/tools/VERSION
index baced14..398ff6f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -25,7 +25,7 @@
 #
 CHANNEL beta
 MAJOR 2
-MINOR 14
+MINOR 15
 PATCH 0
-PRERELEASE 377
-PRERELEASE_PATCH 8
\ No newline at end of file
+PRERELEASE 82
+PRERELEASE_PATCH 1
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 6120112..0759d39 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1016,7 +1016,7 @@
             "create_sdk",
             "dartdevc_test",
             "kernel_platform_files",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1095,7 +1095,7 @@
             "create_sdk",
             "dartdevc_test",
             "kernel_platform_files",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1186,7 +1186,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime",
             "--os=android"
           ]
@@ -1222,7 +1222,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "--os=android"
           ]
         },
@@ -1267,7 +1267,7 @@
           "arguments": [
             "--use-qemu",
             "dart_precompiled_runtime",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1306,7 +1306,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime",
             "gen_snapshot"
           ]
@@ -1364,7 +1364,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1435,7 +1435,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1478,7 +1478,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1497,7 +1497,8 @@
         "vm-kernel-precomp-linux-debug-x64",
         "vm-kernel-precomp-linux-debug-x64c",
         "vm-kernel-precomp-linux-debug-simarm64",
-        "vm-kernel-precomp-linux-debug-simarm64c"
+        "vm-kernel-precomp-linux-debug-simarm64c",
+        "vm-kernel-precomp-win-debug-x64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel precomp debug builders. It uses 15 shards for testing to avoid 1 hour shard timeouts."
@@ -1507,7 +1508,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1534,7 +1535,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1564,7 +1565,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1591,7 +1592,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1795,7 +1796,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1839,8 +1840,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "create_sdk",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1925,7 +1925,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1960,7 +1960,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2008,7 +2008,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2036,7 +2036,7 @@
           "arguments": [
             "dart_precompiled_runtime",
             "gen_snapshot",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2066,7 +2066,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2364,7 +2364,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2392,7 +2392,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2420,7 +2420,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2972,7 +2972,7 @@
             "--arch=ia32,x64",
             "--mode=release",
             "create_sdk",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -3341,6 +3341,15 @@
           ]
         },
         {
+          "name": "analyze pkg/nnbd_migration",
+          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "arguments": [
+            "analyze",
+            "--fatal-infos",
+            "pkg/nnbd_migration"
+          ]
+        },
+        {
           "name": "analyze pkg/smith",
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
           "arguments": [
@@ -3842,7 +3851,7 @@
           "arguments": [
             "--mode=debug,release",
             "--arch=x64",
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -3853,7 +3862,7 @@
             "--mode=release",
             "--arch=x64",
             "--sanitizer=tsan",
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -4019,14 +4028,15 @@
     }
   ],
   "sanitizer_options": {
-    "ASAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
-    "LSAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
-    "MSAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
-    "TSAN_OPTIONS": "handle_segv=0:disable_coredump=0:abort_on_error=1:report_thread_leaks=0",
-    "UBSAN_OPTIONS": "handle_segv=0:disable_coredump=0:halt_on_error=1:print_stacktrace=1"
+    "ASAN_OPTIONS": "abort_on_error=1:symbolize=1:disable_coredump=0:handle_segv=0:check_initialization_order=true:detect_leaks=1:detect_stack_use_after_return=0",
+    "LSAN_OPTIONS": "abort_on_error=1:symbolize=1:disable_coredump=0:handle_segv=0:check_initialization_order=true:detect_leaks=1:detect_stack_use_after_return=0",
+    "MSAN_OPTIONS": "abort_on_error=1:symbolize=1:disable_coredump=0:handle_segv=0:check_initialization_order=true:detect_leaks=1:detect_stack_use_after_return=0",
+    "TSAN_OPTIONS": "abort_on_error=1:symbolize=1:disable_coredump=0:handle_segv=0:report_thread_leaks=0",
+    "UBSAN_OPTIONS": "halt_on_error=1:symbolize=1:disable_coredump=0:handle_segv=0:print_stacktrace=1"
   },
   "sanitizer_symbolizer": {
     "linux": "buildtools/linux-x64/clang/bin/llvm-symbolizer",
-    "macos": "buildtools/mac-x64/clang/bin/llvm-symbolizer"
+    "macos": "buildtools/mac-x64/clang/bin/llvm-symbolizer",
+    "windows": "buildtools/win-x64/clang/bin/llvm-symbolizer.exe"
   }
 }
diff --git a/tools/dom/PRESUBMIT.py b/tools/dom/PRESUBMIT.py
deleted file mode 100644
index f6a6439..0000000
--- a/tools/dom/PRESUBMIT.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# 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.
-"""
-Presubmit tests for dom tools.
-
-This file is run by git_cl or gcl when an upload or submit happens with
-any files at this level or lower are in the change list.
-
-See: http://www.chromium.org/developers/how-tos/depottools/presubmit-scripts
-"""
-
-import os
-
-
-def _AnySdkFiles(input_api):
-    """ Returns true if any of the changed files are in the sdk, meaning we should
-  check that docs.dart was run.
-  """
-    for f in input_api.change.AffectedFiles():
-        if f.LocalPath().find('sdk') > -1:
-            return True
-    return False
-
-
-def CheckChangeOnUpload(input_api, output_api):
-    results = []
-    # TODO(amouravski): uncomment this check once docs.dart is faster.
-    #  if _AnySdkFiles(input_api):
-    #    results.extend(CheckDocs(input_api, output_api))
-    return results
-
-
-def CheckChangeOnCommit(input_api, output_api):
-    results = []
-    if _AnySdkFiles(input_api):
-        results.extend(CheckDocs(input_api, output_api))
-    return results
-
-
-def CheckDocs(input_api, output_api):
-    """Ensure that documentation has been generated if it needs to be generated.
-
-  Prompts with a warning if documentation needs to be generated.
-  """
-    results = []
-
-    cmd = [os.path.join(input_api.PresubmitLocalPath(), 'dom.py'), 'test_docs']
-
-    try:
-        input_api.subprocess.check_output(
-            cmd, stderr=input_api.subprocess.STDOUT)
-    except (OSError, input_api.subprocess.CalledProcessError), e:
-        results.append(
-            output_api.PresubmitPromptWarning(
-                ('Docs test failed!%s\nYou should run `dom.py docs`' %
-                 (e if input_api.verbose else ''))))
-
-    return results
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 944d36a..a392020 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -95,7 +95,8 @@
                          dart2js_output_dir,
                          update_dom_metadata=False,
                          logging_level=logging.WARNING,
-                         dart_js_interop=False):
+                         dart_js_interop=False,
+                         generate_static_extensions=False):
     print('\n ----- Accessing DOM using %s -----\n' %
           ('dart:js' if dart_js_interop else 'C++'))
 
@@ -167,8 +168,9 @@
         backend_options = GeneratorOptions(template_loader, webkit_database,
                                            type_registry, renamer, metadata,
                                            dart_js_interop)
+
         backend_factory = lambda interface:\
-            Dart2JSBackend(interface, backend_options, logging_level)
+            Dart2JSBackend(interface, backend_options, logging_level, generate_static_extensions)
 
         dart_output_dir = os.path.join(dart2js_output_dir, 'dart')
         dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader,
@@ -306,6 +308,12 @@
         action='store_true',
         default=False,
         help='Do not generate the sdk/lib/js/cached_patches.dart file')
+    parser.add_option(
+        '--generate-static-extensions',
+        dest='generate_static_extensions',
+        action='store_true',
+        default=False,
+        help='Generate static extension members for dart:html classes')
 
     (options, args) = parser.parse_args()
 
@@ -337,7 +345,8 @@
 
     GenerateFromDatabase(database, dart2js_output_dir,
                          options.update_dom_metadata, logging_level,
-                         options.dart_js_interop)
+                         options.dart_js_interop,
+                         options.generate_static_extensions)
 
     file_generation_start_time = time.time()
 
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 7891aa3..22890c9 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -535,7 +535,7 @@
         return mixins
 
     def AddConstructors(self, constructors, factory_name,
-                        factory_constructor_name):
+                        factory_constructor_name, emmiter):
         """ Adds all of the constructors.
     Arguments:
       constructors - List of the constructors to be added.
@@ -543,13 +543,15 @@
       factory_constructor_name - The name of the constructor on the
           factory_name to call (calls an autogenerated FactoryProvider
           if unspecified)
+      emmiter - Emmiter used to emit constructors when generating classes
+          using the static extension pattern.
     """
         for constructor_info in constructors:
             self._AddConstructor(constructor_info, factory_name,
-                                 factory_constructor_name)
+                                 factory_constructor_name, emmiter)
 
     def _AddConstructor(self, constructor_info, factory_name,
-                        factory_constructor_name):
+                        factory_constructor_name, emmiter):
         # Hack to ignore the constructor used by JavaScript.
         if ((self._interface.id == 'HTMLImageElement' or
              self._interface.id == 'Blob' or
@@ -563,6 +565,8 @@
         metadata = self._metadata.GetFormattedMetadata(
             self._library_name, self._interface, self._interface.id, '  ')
 
+        target_emitter = emmiter if emmiter else self._members_emitter
+
         if not factory_constructor_name:
             factory_constructor_name = '_create'
             factory_parameters = constructor_info.ParametersAsArgumentList()
@@ -586,7 +590,7 @@
                 factory_name, factory_constructor_name, factory_parameters,
                 constructor_info)
             if not has_optional:
-                self._members_emitter.Emit(
+                target_emitter.Emit(
                     '\n  $(METADATA)'
                     'factory $CTOR($PARAMS) => '
                     '$FACTORY_CALL;\n',
@@ -595,7 +599,7 @@
                     FACTORY_CALL=factory_call,
                     METADATA=metadata)
             else:
-                inits = self._members_emitter.Emit(
+                inits = target_emitter.Emit(
                     '\n  $(METADATA)'
                     'factory $CONSTRUCTOR($PARAMS) {\n'
                     '    $CONSTRUCTOR e = $FACTORY_CALL;\n'
@@ -664,7 +668,7 @@
                     FACTORY_NAME=qualified_name,
                     FACTORY_PARAMS=args)
                 self.EmitStaticFactoryOverload(constructor_info, name,
-                                               arguments)
+                                               arguments, emmiter)
 
             def IsOptional(signature_index, argument):
                 return self.IsConstructorArgumentOptional(argument)
@@ -678,13 +682,12 @@
                 METADATA=metadata,
                 PARAMS=constructor_info.ParametersAsDeclaration(InputType))
 
-            overload_emitter = self._members_emitter
             overload_declaration = entry_declaration
 
             self._GenerateOverloadDispatcher(constructor_info,
                                              constructor_info.idl_args, False,
                                              overload_declaration, GenerateCall,
-                                             IsOptional, overload_emitter)
+                                             IsOptional, target_emitter)
 
     def _AddFutureifiedOperation(self, info, html_name):
         """Given a API function that uses callbacks, convert it to using Futures.
@@ -813,12 +816,13 @@
             FUTURE_GENERIC=future_generic,
             ORIGINAL_FUNCTION=html_name)
 
-    def EmitHelpers(self, base_class):
-        if not self._members_emitter:
+    def EmitHelpers(self, base_class, emmiter):
+        if (not self._members_emitter) and (not emmiter):
             return
 
         if self._interface.id not in custom_html_constructors:
-            self._members_emitter.Emit(
+            target_emmiter = emmiter if emmiter else self._members_emitter
+            target_emmiter.Emit(
                 '  // To suppress missing implicit constructor warnings.\n'
                 '  factory $CLASSNAME._() { '
                 'throw new UnsupportedError("Not supported"); }\n',
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 5749cd9..20a25ed 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -16,6 +16,14 @@
 
 _logger = logging.getLogger('systemhtml')
 
+
+def CanUseStaticExtensions(interface, should):
+    if not should:
+        return False
+    static_extension_interfaces = []  # Classes to be migrated
+    return interface in static_extension_interfaces
+
+
 HTML_LIBRARY_NAMES = [
     'html', 'indexed_db', 'svg', 'web_audio', 'web_gl', 'web_sql'
 ]
@@ -809,24 +817,34 @@
             NULLASSERT='!')
         stream_getter_signatures_emitter = None
         element_stream_getters_emitter = None
+        class_members_emitter = None
         if type(implementation_members_emitter) == tuple:
             # We add event stream getters for both Element and ElementList, so in
             # impl_Element.darttemplate, we have two additional "holes" for emitters
             # to fill in, with small variations. These store these specialized
             # emitters.
-            assert len(implementation_members_emitter) == 3
-            stream_getter_signatures_emitter = \
-                implementation_members_emitter[0]
-            element_stream_getters_emitter = implementation_members_emitter[1]
-            implementation_members_emitter = \
-                implementation_members_emitter[2]
+            if (len(implementation_members_emitter) == 3):
+                stream_getter_signatures_emitter = \
+                    implementation_members_emitter[0]
+                element_stream_getters_emitter = implementation_members_emitter[
+                    1]
+                implementation_members_emitter = \
+                    implementation_members_emitter[2]
+
+            # We add special emmiters for classes migrated to static type extensions
+            elif (len(implementation_members_emitter) == 2):
+                class_members_emitter = \
+                    implementation_members_emitter[0]
+                implementation_members_emitter = \
+                    implementation_members_emitter[1]
         self._backend.StartInterface(implementation_members_emitter)
-        self._backend.EmitHelpers(base_class)
+        self._backend.EmitHelpers(base_class, class_members_emitter)
         self._event_generator.EmitStreamProviders(
             self._interface, self._backend.CustomJSMembers(),
             implementation_members_emitter, self._library_name)
         self._backend.AddConstructors(constructors, factory_provider,
-                                      factory_constructor_name)
+                                      factory_constructor_name,
+                                      class_members_emitter)
 
         isElement = False
         for parent in self._database.Hierarchy(self._interface):
@@ -1243,9 +1261,14 @@
   interface.
   """
 
-    def __init__(self, interface, options, logging_level=logging.WARNING):
+    def __init__(self,
+                 interface,
+                 options,
+                 logging_level=logging.WARNING,
+                 generate_static_extensions=False):
         super(Dart2JSBackend, self).__init__(interface, options, False, _logger)
 
+        self._generate_static_extensions = generate_static_extensions
         self._database = options.database
         self._template_loader = options.templates
         self._type_registry = options.type_registry
@@ -1253,6 +1276,7 @@
         self._metadata = options.metadata
         self._interface_type_info = self._type_registry.TypeInfo(
             self._interface.id)
+        self._interface_name = self._interface_type_info.interface_name()
         self._current_secondary_parent = None
         self._library_name = self._renamer.GetLibraryName(self._interface)
         # Global constants for all WebGLRenderingContextBase, WebGL2RenderingContextBase, WebGLDrawBuffers
@@ -1289,9 +1313,15 @@
                 # TODO(terry): There are no mutable maplikes yet.
                 template_file_content = self._template_loader.Load(
                     'dart2js_maplike_impl.darttemplate')
+
             else:
-                template_file_content = self._template_loader.Load(
-                    'dart2js_impl.darttemplate')
+                if CanUseStaticExtensions(self._interface_name,
+                                          self._generate_static_extensions):
+                    template_file_content = self._template_loader.Load(
+                        'dart2js_static_extension_impl.darttemplate')
+                else:
+                    template_file_content = self._template_loader.Load(
+                        'dart2js_impl.darttemplate')
         return template_file_content
 
     def StartInterface(self, members_emitter):
@@ -1349,7 +1379,8 @@
     def IsConstructorArgumentOptional(self, argument):
         return argument.optional
 
-    def EmitStaticFactoryOverload(self, constructor_info, name, arguments):
+    def EmitStaticFactoryOverload(self, constructor_info, name, arguments,
+                                  emmiter):
         if self._interface_type_info.has_generated_interface():
             # Use dart_type name, we're generating.
             interface_name = self._interface_type_info.interface_name()
@@ -1361,7 +1392,7 @@
         arguments = constructor_info.ParametersAsArgumentList(index)
         if arguments:
             arguments = ', ' + arguments
-        self._members_emitter.Emit(
+        (emmiter if (emmiter != None) else self._members_emitter).Emit(
             "  static $INTERFACE_NAME $NAME($PARAMETERS) => "
             "JS('$INTERFACE_NAME', 'new $CTOR_NAME($PLACEHOLDERS)'$ARGUMENTS);\n",
             INTERFACE_NAME=interface_name,
@@ -1598,7 +1629,8 @@
                 if attribute.type.nullable:
                     promiseType += '?'
 
-                template = '\n  $RENAME$(ANNOTATIONS)$TYPE get $NAME => $PROMISE_CALL(JS("$TYPE_DESC", "#.$NAME", this));\n'
+                template = '\n  $RENAME$(ANNOTATIONS)$TYPE get $NAME => '\
+                    '$PROMISE_CALL(JS("$TYPE_DESC", "#.$NAME", this));\n'
 
                 self._members_emitter.Emit(
                     template,
@@ -1676,10 +1708,17 @@
                 \n
                 \n  $STATIC $NONNULLTYPE get $HTML_NAME => _$HTML_NAME$NULLASSERT;"""
         else:
-            template = """\n  $RENAME
-                \n  $METADATA
-                \n  $STATIC $TYPE get $HTML_NAME native;
-                \n"""
+            if CanUseStaticExtensions(self._interface_name,
+                                      self._generate_static_extensions):
+                template = """\n $RENAME
+                    \n $METADATA
+                    \n $STATIC $TYPE get $HTML_NAME => js_util.getProperty(this, '$JSNAME');
+                    \n"""
+            else:
+                template = """\n  $RENAME
+                    \n  $METADATA
+                    \n  $STATIC $TYPE get $HTML_NAME native;
+                    \n"""
         self._members_emitter.Emit(template,
                                    RENAME=rename if rename else '',
                                    METADATA=metadata if metadata else '',
@@ -1687,7 +1726,8 @@
                                    STATIC='static' if attr.is_static else '',
                                    TYPE=return_type,
                                    NULLASSERT='!',
-                                   NONNULLTYPE=non_null_return_type)
+                                   NONNULLTYPE=non_null_return_type,
+                                   JSNAME=rename if rename else html_name)
 
     def _AddRenamingSetter(self, attr, html_name, rename):
         conversion = self._InputConversion(attr.type.id, attr.id)
@@ -1705,14 +1745,23 @@
         if self._IsACompatibilityConflict(self._interface.id, attr):
             # Force non-nullable if it's a manual conflict.
             nullable_type = False
-        self._members_emitter.Emit(
-            '\n  $RENAME'
-            '\n  $STATIC set $HTML_NAME($TYPE value) native;'
-            '\n',
-            RENAME=rename if rename else '',
-            HTML_NAME=html_name,
-            STATIC='static ' if attr.is_static else '',
-            TYPE=self.SecureOutputType(attr.type.id, nullable=nullable_type))
+        if CanUseStaticExtensions(self._interface_name,
+                                  self._generate_static_extensions):
+            template = """\n $RENAME
+                \n $STATIC set $HTML_NAME($TYPE value)
+                 => js_util.setProperty(this, '$JSNAME', value);
+                \n"""
+        else:
+            template = """\n  $RENAME
+                \n $STATIC set $HTML_NAME($TYPE value) native;
+                \n"""
+        self._members_emitter.Emit(template,
+                                   RENAME=rename if rename else '',
+                                   HTML_NAME=html_name,
+                                   STATIC='static ' if attr.is_static else '',
+                                   TYPE=self.SecureOutputType(
+                                       attr.type.id, nullable=nullable_type),
+                                   JSNAME=rename if rename else html_name)
 
     def _AddConvertingGetter(self, attr, html_name, conversion):
         # dynamic should not be marked with ?
@@ -1950,19 +1999,25 @@
         else:
             self._members_emitter.Emit(
                 '\n'
-                '  $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
+                '  $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) => '\
+                'js_util.callMethod(this, \'$JSNAME\', [$ARGS]);\n'
+                if CanUseStaticExtensions(self._interface_name, self._generate_static_extensions) else
+                '\n  $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
                 RENAME=self._RenamingAnnotation(info.declared_name, html_name),
-                METADATA=self._Metadata(info.type_name, info.declared_name,
-                                        self.SecureOutputType(info.type_name,
-                                            nullable=info.type_nullable),
-                                        info.type_nullable),
+                METADATA=self._Metadata(
+                    info.type_name, info.declared_name,
+                    self.SecureOutputType(info.type_name,
+                                          nullable=info.type_nullable),
+                    info.type_nullable),
                 MODIFIERS='static ' if info.IsStatic() else '',
                 TYPE=self.SecureOutputType(resultType,
                                            can_narrow_type=True,
                                            nullable=info.type_nullable),
                 NAME=html_name,
                 PARAMS=info.ParametersAsDeclaration(self._NarrowInputType,
-                                                    force_optional))
+                                                    force_optional),
+                ARGS=info.ParametersAsArgumentList(),
+                JSNAME=info.declared_name if info.declared_name != html_name else html_name)
 
     def _AddOperationWithConversions(self, info, html_name):
         # Assert all operations have same return type.
@@ -2029,7 +2084,8 @@
                         )
                 self._members_emitter.Emit(
                     '  $RENAME$METADATA$MODIFIERS$TYPE$TARGET($PARAMS) =>\n'
-                    '      promiseToFuture(JS("", "#.$JSNAME($HASH_STR)", this$CALLING_PARAMS));\n',
+                    '      promiseToFuture(JS("", "#.$JSNAME($HASH_STR)"'\
+                    ', this$CALLING_PARAMS));\n',
                     RENAME=self._RenamingAnnotation(info.declared_name, target),
                     METADATA=self._Metadata(info.type_name, info.declared_name,
                                             None, info.type_nullable),
diff --git a/tools/dom/templates/dart2js_static_extension_impl.darttemplate b/tools/dom/templates/dart2js_static_extension_impl.darttemplate
new file mode 100644
index 0000000..5501eee
--- /dev/null
+++ b/tools/dom/templates/dart2js_static_extension_impl.darttemplate
@@ -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.
+
+part of $LIBRARYNAME;
+
+//todo: add @sealed annotation
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS { $!CLASSMEMBERS }
+
+extension $(CLASSNAME)Extension on $CLASSNAME {
+$!EXTENSIONMEMBERS
+}
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index fd4069b..d1e9e6b 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -42,7 +42,7 @@
 import 'dart:web_sql';
 import 'dart:_js_helper' show
     convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
-    JSName, Native, Returns, ForceInline,
+    JSName, Native, Returns,
     findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord,
     makeLeafDispatchRecord, registerGlobalObject, applyExtension;
 import 'dart:_interceptors' show
@@ -52,6 +52,7 @@
     getNativeInterceptor,
     setDispatchProperty;
 import 'dart:_foreign_helper' show JS, JS_INTERCEPTOR_CONSTANT;
+import 'dart:js_util' as js_util;
 
 export 'dart:_internal' show HttpStatus;
 export 'dart:html_common' show promiseToFuture;
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index c171b62..50a38bb 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -103,7 +103,7 @@
 # default 'language' "category" with code generated for both CFE and Analyzer,
 # while other categories can be tailored more specifically.
 
-current-version: '2.14.0'
+current-version: '2.15.0'
 
 features:
   variance:
@@ -122,9 +122,6 @@
   const-functions:
     help: "Allow more of the Dart language to be executed in const expressions."
 
-  constructor-tearoffs:
-    help: "Allow constructor tear-offs and explicit generic instantiations."
-
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
@@ -196,3 +193,17 @@
       void main() {
         if ((A() >>> 1) == 42) print('feature enabled');
       }
+
+  constructor-tearoffs:
+    help: "Allow constructor tear-offs and explicit generic instantiations."
+    enabledIn: '2.15.0'
+    validation: |
+      class A {
+        A() {
+          print('feature enabled');
+        }
+      }
+      void main() {
+        var c = A.new;
+        c();
+      }
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index 882c827..066eb2c 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -57,6 +57,7 @@
     packageDirectory(
         'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
     packageDirectory('sdk/lib/_internal/sdk_library_metadata'),
+    packageDirectory('third_party/devtools/devtools_server'),
     packageDirectory('third_party/devtools/devtools_shared'),
     packageDirectory('third_party/pkg/protobuf/protobuf'),
     packageDirectory('third_party/pkg/webdev/frontend_server_client'),
diff --git a/tools/sdks/update.sh b/tools/sdks/update.sh
index 1d33b82..8cb5633 100755
--- a/tools/sdks/update.sh
+++ b/tools/sdks/update.sh
@@ -61,9 +61,8 @@
   -ref $channel
 rm -rf sdk
 
-# TODO(athom): Use a proper arm64 SDK when available.
-gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-macos-x64-release.zip" .
-unzip -q dartsdk-macos-x64-release.zip -d sdk
+gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-macos-arm64-release.zip" .
+unzip -q dartsdk-macos-arm64-release.zip -d sdk
 cipd create \
   -name dart/dart-sdk/mac-arm64 \
   -in sdk \
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index e1d7db2..465b18a 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,6 +4,23 @@
 
 // CHANGES:
 //
+// v0.17 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.
+//
+// v0.15 (6facd6dfdafa2953e8523348220d3129ea884678) Add support for
+// constructor tearoffs and explicitly instantiated function tearoffs and
+// type literals.
+//
+// v0.14 (f65c20124edd9e04f7b3a6f014f40c16f51052f6) Correct `partHeader`
+// to allow uri syntax in a `PART OF` directive.
+//
+// v0.13 (bb5cb79a2fd57d6a480b922bc650d5cd15948753) Introduce non-terminals
+// `builtinIdentifier` and `reservedWord`; update `typeAlias` to enable
+// non-function type aliases; add missing `metadata` to formal parameter
+// declarations; correct `symbolLiteral` to allow `VOID`;
+
 // v0.12 (82403371ac00ddf004be60fa7b705474d2864509) Cf. language issue #1341:
 // correct `metadata`. Change `qualifiedName` such that it only includes the
 // cases with a '.'; the remaining case is added where `qualifiedName` is used.
@@ -559,7 +576,7 @@
 
 // Not used in the specification (needed here for <uri>).
 stringLiteralWithoutInterpolation
-    :    singleLineStringWithoutInterpolation+
+    :    singleStringWithoutInterpolation+
     ;
 
 setOrMapLiteral
@@ -1266,10 +1283,13 @@
     ;
 
 // Not used in the specification (needed here for <uri>).
-singleLineStringWithoutInterpolation
+singleStringWithoutInterpolation
     :    RAW_SINGLE_LINE_STRING
+    |    RAW_MULTI_LINE_STRING
     |    SINGLE_LINE_STRING_DQ_BEGIN_END
     |    SINGLE_LINE_STRING_SQ_BEGIN_END
+    |    MULTI_LINE_STRING_DQ_BEGIN_END
+    |    MULTI_LINE_STRING_SQ_BEGIN_END
     ;
 
 singleLineString
diff --git a/utils/pub/.gitignore b/utils/pub/.gitignore
deleted file mode 100644
index cfb192d..0000000
--- a/utils/pub/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-/Makefile
-/out
-/xcodebuild
-/*.Makefile
-/*.sln
-/*.target.mk
-/*.vcproj
-/*.vcxproj
-/*.vcxproj.filters
-/*.vcxproj.user
-/*.xcodeproj
-/Debug
-/DebugARM
-/DebugIA32
-/DebugSIMARM
-/DebugX64
-/Release
-/ReleaseARM
-/ReleaseIA32
-/ReleaseSIMARM
-/ReleaseX64
diff --git a/utils/pub/BUILD.gn b/utils/pub/BUILD.gn
deleted file mode 100644
index de93998..0000000
--- a/utils/pub/BUILD.gn
+++ /dev/null
@@ -1,11 +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("pub") {
-  main_dart = "../../third_party/pkg/pub/bin/pub.dart"
-
-  training_args = [ "--help" ]
-}